hitloop 0.0.0-stage → 0.1.1

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 (469) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +218 -2
  3. package/dist/agent.js +318 -0
  4. package/dist/cli.js +897 -0
  5. package/dist/client/assets/app.css +1 -0
  6. package/dist/client/assets/chunks/abap-EINPUMCJ.js +1 -0
  7. package/dist/client/assets/chunks/abnfDiagram-S7VZAUFO-W2CM2W6D.js +1 -0
  8. package/dist/client/assets/chunks/actionscript-3-O776AQUO.js +1 -0
  9. package/dist/client/assets/chunks/ada-WLOTXRTV.js +1 -0
  10. package/dist/client/assets/chunks/ahk-EF37A2DY.js +1 -0
  11. package/dist/client/assets/chunks/ahk2-FH4K3CKT.js +1 -0
  12. package/dist/client/assets/chunks/angular-html-ZALQFV2H.js +1 -0
  13. package/dist/client/assets/chunks/angular-ts-4IWMF7QO.js +1 -0
  14. package/dist/client/assets/chunks/apache-44AYOEWM.js +1 -0
  15. package/dist/client/assets/chunks/apex-XRYPID42.js +1 -0
  16. package/dist/client/assets/chunks/apl-5HBALFOI.js +1 -0
  17. package/dist/client/assets/chunks/applescript-2DZEHZEC.js +1 -0
  18. package/dist/client/assets/chunks/ara-ZGZQBLXL.js +1 -0
  19. package/dist/client/assets/chunks/architecture-WOLXFQ4H-EJGENNRL.js +1 -0
  20. package/dist/client/assets/chunks/architectureDiagram-YGSQEFNW-2VHWSKO6.js +36 -0
  21. package/dist/client/assets/chunks/asciidoc-GSQAKCPO.js +1 -0
  22. package/dist/client/assets/chunks/asm-BFURM5BK.js +1 -0
  23. package/dist/client/assets/chunks/astro-VJORWDZJ.js +1 -0
  24. package/dist/client/assets/chunks/awk-BSHTWXXX.js +1 -0
  25. package/dist/client/assets/chunks/ballerina-HAOQJ4B2.js +1 -0
  26. package/dist/client/assets/chunks/bat-OSH45EOF.js +1 -0
  27. package/dist/client/assets/chunks/beancount-RBATIHOV.js +1 -0
  28. package/dist/client/assets/chunks/berry-CZUIOUM4.js +1 -0
  29. package/dist/client/assets/chunks/bibtex-KCL2UWHE.js +1 -0
  30. package/dist/client/assets/chunks/bicep-SZJZB3SG.js +1 -0
  31. package/dist/client/assets/chunks/bird2-XBF5YQQV.js +1 -0
  32. package/dist/client/assets/chunks/blade-Q24LEVFC.js +1 -0
  33. package/dist/client/assets/chunks/blockDiagram-APKKGZFW-53LXSOOT.js +140 -0
  34. package/dist/client/assets/chunks/bpmnIcons-APHXDYXF-FMBRQNTY.js +1 -0
  35. package/dist/client/assets/chunks/bsl-TI44NWFB.js +1 -0
  36. package/dist/client/assets/chunks/c-NLHY4Y4N.js +1 -0
  37. package/dist/client/assets/chunks/c3-BUTEM6PO.js +1 -0
  38. package/dist/client/assets/chunks/c4Diagram-KJ2TOQU5-O53G4GQH.js +38 -0
  39. package/dist/client/assets/chunks/cadence-JIRTEU64.js +1 -0
  40. package/dist/client/assets/chunks/cairo-3W6NVDNW.js +1 -0
  41. package/dist/client/assets/chunks/chapel-BPBJ2E7K.js +1 -0
  42. package/dist/client/assets/chunks/chunk-25KVF5ZE.js +1 -0
  43. package/dist/client/assets/chunks/chunk-2CJKSQOI.js +1 -0
  44. package/dist/client/assets/chunks/chunk-2QIJRTWR.js +1 -0
  45. package/dist/client/assets/chunks/chunk-2ZCRJZGF.js +2 -0
  46. package/dist/client/assets/chunks/chunk-3ILNDZNY.js +213 -0
  47. package/dist/client/assets/chunks/chunk-3M2OOQ7S.js +1 -0
  48. package/dist/client/assets/chunks/chunk-3M57NTNK.js +1 -0
  49. package/dist/client/assets/chunks/chunk-3MR6DCZJ.js +1 -0
  50. package/dist/client/assets/chunks/chunk-3WGHS7F7.js +1 -0
  51. package/dist/client/assets/chunks/chunk-4JK75V33.js +1 -0
  52. package/dist/client/assets/chunks/chunk-4NXNVEWK.js +1 -0
  53. package/dist/client/assets/chunks/chunk-4RNNBDFQ.js +1 -0
  54. package/dist/client/assets/chunks/chunk-4T4NVH7V.js +1 -0
  55. package/dist/client/assets/chunks/chunk-4TFFBC35.js +1 -0
  56. package/dist/client/assets/chunks/chunk-4WYBE67P.js +1 -0
  57. package/dist/client/assets/chunks/chunk-56ITEUFA.js +1 -0
  58. package/dist/client/assets/chunks/chunk-5DXRE7IH.js +1 -0
  59. package/dist/client/assets/chunks/chunk-5IMADCNU.js +1 -0
  60. package/dist/client/assets/chunks/chunk-5XZPGKN4.js +1 -0
  61. package/dist/client/assets/chunks/chunk-6O32UKSP.js +1 -0
  62. package/dist/client/assets/chunks/chunk-7BAEB64Q.js +1 -0
  63. package/dist/client/assets/chunks/chunk-7FMWBHZO.js +1 -0
  64. package/dist/client/assets/chunks/chunk-7GFDITUT.js +1 -0
  65. package/dist/client/assets/chunks/chunk-7H4MLBHI.js +1 -0
  66. package/dist/client/assets/chunks/chunk-7OJ4MEEB.js +1 -0
  67. package/dist/client/assets/chunks/chunk-7RSEISFE.js +1 -0
  68. package/dist/client/assets/chunks/chunk-7YNZZQVT.js +1 -0
  69. package/dist/client/assets/chunks/chunk-AB7TIL2G.js +1 -0
  70. package/dist/client/assets/chunks/chunk-ADDF76FL.js +1 -0
  71. package/dist/client/assets/chunks/chunk-AF6UTCD4.js +321 -0
  72. package/dist/client/assets/chunks/chunk-AJ2K6ASU.js +1 -0
  73. package/dist/client/assets/chunks/chunk-AUBAENQZ.js +1 -0
  74. package/dist/client/assets/chunks/chunk-BJEYVZ65.js +1 -0
  75. package/dist/client/assets/chunks/chunk-BLRM6LXA.js +1 -0
  76. package/dist/client/assets/chunks/chunk-BOCTYCDZ.js +1 -0
  77. package/dist/client/assets/chunks/chunk-BU4VRYN7.js +1 -0
  78. package/dist/client/assets/chunks/chunk-CALYHV7D.js +1 -0
  79. package/dist/client/assets/chunks/chunk-CF4W3RZ4.js +1 -0
  80. package/dist/client/assets/chunks/chunk-DCZ2OBSL.js +1 -0
  81. package/dist/client/assets/chunks/chunk-DUFPBTHD.js +1 -0
  82. package/dist/client/assets/chunks/chunk-DUICIQBC.js +88 -0
  83. package/dist/client/assets/chunks/chunk-EH2N475V.js +1 -0
  84. package/dist/client/assets/chunks/chunk-EHLLNPZT.js +1 -0
  85. package/dist/client/assets/chunks/chunk-EIBFAW37.js +1 -0
  86. package/dist/client/assets/chunks/chunk-EO3ER3GN.js +1 -0
  87. package/dist/client/assets/chunks/chunk-FH24BIIA.js +1 -0
  88. package/dist/client/assets/chunks/chunk-FNOXGAL5.js +2 -0
  89. package/dist/client/assets/chunks/chunk-FTY6WLQF.js +3 -0
  90. package/dist/client/assets/chunks/chunk-FZFME6UK.js +1 -0
  91. package/dist/client/assets/chunks/chunk-FZJZZYYO.js +1 -0
  92. package/dist/client/assets/chunks/chunk-G4Z6L7OO.js +1 -0
  93. package/dist/client/assets/chunks/chunk-GNCEAN2B.js +1 -0
  94. package/dist/client/assets/chunks/chunk-GQJIKV3T.js +1 -0
  95. package/dist/client/assets/chunks/chunk-GUMNOKT2.js +1 -0
  96. package/dist/client/assets/chunks/chunk-GXRORAF3.js +1 -0
  97. package/dist/client/assets/chunks/chunk-H36ABDKY.js +1 -0
  98. package/dist/client/assets/chunks/chunk-HAR5NYVW.js +1 -0
  99. package/dist/client/assets/chunks/chunk-HIGPS4L2.js +1 -0
  100. package/dist/client/assets/chunks/chunk-HMOBGTME.js +1 -0
  101. package/dist/client/assets/chunks/chunk-HNO6SQ7M.js +1 -0
  102. package/dist/client/assets/chunks/chunk-HYVZ3GYN.js +1 -0
  103. package/dist/client/assets/chunks/chunk-I6TGFOQS.js +1 -0
  104. package/dist/client/assets/chunks/chunk-IHIOJK7I.js +1 -0
  105. package/dist/client/assets/chunks/chunk-IHJNUMSC.js +1 -0
  106. package/dist/client/assets/chunks/chunk-IP7PB2OC.js +1 -0
  107. package/dist/client/assets/chunks/chunk-ISDTMH2Y.js +1 -0
  108. package/dist/client/assets/chunks/chunk-J65M2LNT.js +1 -0
  109. package/dist/client/assets/chunks/chunk-JCWYZ7X2.js +62 -0
  110. package/dist/client/assets/chunks/chunk-JENWYTLI.js +1 -0
  111. package/dist/client/assets/chunks/chunk-JJ6YWJQS.js +1 -0
  112. package/dist/client/assets/chunks/chunk-JMUVGGX7.js +32 -0
  113. package/dist/client/assets/chunks/chunk-JNQUFMM4.js +1 -0
  114. package/dist/client/assets/chunks/chunk-JPTECOAL.js +1 -0
  115. package/dist/client/assets/chunks/chunk-JZNK4LKS.js +1 -0
  116. package/dist/client/assets/chunks/chunk-KPNXJBIW.js +1 -0
  117. package/dist/client/assets/chunks/chunk-KZO2GZL7.js +1 -0
  118. package/dist/client/assets/chunks/chunk-L2REESOQ.js +1 -0
  119. package/dist/client/assets/chunks/chunk-LJPJXR7R.js +1 -0
  120. package/dist/client/assets/chunks/chunk-LOEZMLCI.js +1 -0
  121. package/dist/client/assets/chunks/chunk-MLYC6FSE.js +1 -0
  122. package/dist/client/assets/chunks/chunk-MMDGEZYU.js +1 -0
  123. package/dist/client/assets/chunks/chunk-MYXE7CGE.js +1 -0
  124. package/dist/client/assets/chunks/chunk-NBH7YOBD.js +15 -0
  125. package/dist/client/assets/chunks/chunk-NCOVM3YF.js +1 -0
  126. package/dist/client/assets/chunks/chunk-NCWOBVU7.js +1 -0
  127. package/dist/client/assets/chunks/chunk-NLRIHHEH.js +1 -0
  128. package/dist/client/assets/chunks/chunk-NUPEOYK6.js +1 -0
  129. package/dist/client/assets/chunks/chunk-O4MVOA7X.js +1 -0
  130. package/dist/client/assets/chunks/chunk-OBHQQZ4H.js +1 -0
  131. package/dist/client/assets/chunks/chunk-OKPNJIIR.js +1 -0
  132. package/dist/client/assets/chunks/chunk-OLMPB57R.js +1 -0
  133. package/dist/client/assets/chunks/chunk-P2FYOAEV.js +1 -0
  134. package/dist/client/assets/chunks/chunk-PI3SNP4C.js +1 -0
  135. package/dist/client/assets/chunks/chunk-PRDTEROB.js +1 -0
  136. package/dist/client/assets/chunks/chunk-PZELHD2H.js +136 -0
  137. package/dist/client/assets/chunks/chunk-QR2Q34LM.js +1 -0
  138. package/dist/client/assets/chunks/chunk-R4GIXL6S.js +1 -0
  139. package/dist/client/assets/chunks/chunk-RORF4F5V.js +1 -0
  140. package/dist/client/assets/chunks/chunk-S73BYTLL.js +1 -0
  141. package/dist/client/assets/chunks/chunk-SFC5MRYR.js +1 -0
  142. package/dist/client/assets/chunks/chunk-SVM2H22K.js +2 -0
  143. package/dist/client/assets/chunks/chunk-SZ6UCGVD.js +1 -0
  144. package/dist/client/assets/chunks/chunk-SZYM6GIJ.js +127 -0
  145. package/dist/client/assets/chunks/chunk-TT5KJZKM.js +1 -0
  146. package/dist/client/assets/chunks/chunk-UFBKUYNH.js +1 -0
  147. package/dist/client/assets/chunks/chunk-UL57AD4T.js +1 -0
  148. package/dist/client/assets/chunks/chunk-UNEI7LMM.js +1 -0
  149. package/dist/client/assets/chunks/chunk-VNQBBFIY.js +1 -0
  150. package/dist/client/assets/chunks/chunk-WGVITPII.js +1 -0
  151. package/dist/client/assets/chunks/chunk-WRA6KJHX.js +10 -0
  152. package/dist/client/assets/chunks/chunk-WS5EHW43.js +1 -0
  153. package/dist/client/assets/chunks/chunk-XE6SLBBE.js +3 -0
  154. package/dist/client/assets/chunks/chunk-XF5T2P7U.js +72 -0
  155. package/dist/client/assets/chunks/chunk-XFRY5WKO.js +1 -0
  156. package/dist/client/assets/chunks/chunk-XWYV4OPA.js +1 -0
  157. package/dist/client/assets/chunks/chunk-YCE5ECKY.js +1 -0
  158. package/dist/client/assets/chunks/chunk-YIN5CSIF.js +1 -0
  159. package/dist/client/assets/chunks/chunk-YLFUX6XH.js +1 -0
  160. package/dist/client/assets/chunks/chunk-YNXJICZM.js +1 -0
  161. package/dist/client/assets/chunks/chunk-YOHF7NGD.js +1 -0
  162. package/dist/client/assets/chunks/chunk-YORIST7Z.js +1 -0
  163. package/dist/client/assets/chunks/chunk-YUL7CG4R.js +1 -0
  164. package/dist/client/assets/chunks/chunk-YUN7JSFJ.js +2 -0
  165. package/dist/client/assets/chunks/chunk-YZ7D2IT7.js +1 -0
  166. package/dist/client/assets/chunks/chunk-Z7LAPMFJ.js +1 -0
  167. package/dist/client/assets/chunks/chunk-ZE325LPC.js +1 -0
  168. package/dist/client/assets/chunks/chunk-ZN7TN6PO.js +1 -0
  169. package/dist/client/assets/chunks/chunk-ZST3EVPO.js +1 -0
  170. package/dist/client/assets/chunks/chunk-ZZHMDDZN.js +1 -0
  171. package/dist/client/assets/chunks/clarity-RKRYQ7WF.js +1 -0
  172. package/dist/client/assets/chunks/classDiagram-v2-L25IHNXF-Y67HVDZV.js +217 -0
  173. package/dist/client/assets/chunks/clojure-2X2DQECJ.js +1 -0
  174. package/dist/client/assets/chunks/cmake-LH5524XE.js +1 -0
  175. package/dist/client/assets/chunks/cobol-7DALQF3W.js +1 -0
  176. package/dist/client/assets/chunks/codeowners-52SZU5P5.js +1 -0
  177. package/dist/client/assets/chunks/codeql-EISH3KUP.js +1 -0
  178. package/dist/client/assets/chunks/coffee-VAWSGA7Y.js +1 -0
  179. package/dist/client/assets/chunks/common-lisp-4MVK2AN6.js +1 -0
  180. package/dist/client/assets/chunks/coq-4VRYZRZV.js +1 -0
  181. package/dist/client/assets/chunks/core-BRBMZSD2.js +12 -0
  182. package/dist/client/assets/chunks/cose-bilkent-JH36ORCC-BIOOHSAA.js +1 -0
  183. package/dist/client/assets/chunks/cpp-RFECMSKD.js +1 -0
  184. package/dist/client/assets/chunks/crystal-ZBGGFAOI.js +1 -0
  185. package/dist/client/assets/chunks/csharp-BZDPMKKW.js +1 -0
  186. package/dist/client/assets/chunks/css-3WWGM6UD.js +1 -0
  187. package/dist/client/assets/chunks/csv-AB4GNWSB.js +1 -0
  188. package/dist/client/assets/chunks/cue-2E46MZP2.js +1 -0
  189. package/dist/client/assets/chunks/cynefin-EF2NZ3EQ-TLFQLWUN.js +1 -0
  190. package/dist/client/assets/chunks/cynefinDiagram-L36ESFBY-FLPXCSSG.js +62 -0
  191. package/dist/client/assets/chunks/cypher-HR3ILFOL.js +1 -0
  192. package/dist/client/assets/chunks/d-TARSZPOL.js +1 -0
  193. package/dist/client/assets/chunks/dagre-SPEB5RXH-7EGEINJ2.js +4 -0
  194. package/dist/client/assets/chunks/dart-SALLJHVI.js +1 -0
  195. package/dist/client/assets/chunks/dax-WYMRGMXC.js +1 -0
  196. package/dist/client/assets/chunks/desktop-ND5CGLLJ.js +1 -0
  197. package/dist/client/assets/chunks/diagram-3B7GL73J-6USY4HZX.js +200 -0
  198. package/dist/client/assets/chunks/diagram-DNEMPZML-BNSOC4VW.js +24 -0
  199. package/dist/client/assets/chunks/diagram-L3MUGCDN-5V5FZYIG.js +41 -0
  200. package/dist/client/assets/chunks/diagram-LA4NIPWU-25VLY2CO.js +24 -0
  201. package/dist/client/assets/chunks/diagram-MHCOC4E2-G2LFP3JU.js +3 -0
  202. package/dist/client/assets/chunks/diagram-XPFHEONP-E6HBBIBV.js +30 -0
  203. package/dist/client/assets/chunks/diff-PWYGPM7B.js +1 -0
  204. package/dist/client/assets/chunks/docker-A4D7DT7W.js +1 -0
  205. package/dist/client/assets/chunks/dotenv-VWQWV2DY.js +1 -0
  206. package/dist/client/assets/chunks/dream-maker-M5YDQS35.js +1 -0
  207. package/dist/client/assets/chunks/ebnfDiagram-UZSYDL2S-BMXXZZPI.js +1 -0
  208. package/dist/client/assets/chunks/edge-3QXIDJHI.js +1 -0
  209. package/dist/client/assets/chunks/elixir-3OX2UHIZ.js +1 -0
  210. package/dist/client/assets/chunks/elk-XV6XMXQE-IPR65FON.js +27 -0
  211. package/dist/client/assets/chunks/elm-CTS65NCT.js +1 -0
  212. package/dist/client/assets/chunks/emacs-lisp-HHS2IDO7.js +1 -0
  213. package/dist/client/assets/chunks/engine-javascript-DNHSF67B.js +141 -0
  214. package/dist/client/assets/chunks/erDiagram-EYBAPDEH-3GEHFWHG.js +99 -0
  215. package/dist/client/assets/chunks/erb-ICYWK6HS.js +1 -0
  216. package/dist/client/assets/chunks/erlang-BDQPNCKX.js +1 -0
  217. package/dist/client/assets/chunks/eventmodeling-K75KTNOO-B27BJTZL.js +1 -0
  218. package/dist/client/assets/chunks/fennel-4ONBA2PH.js +1 -0
  219. package/dist/client/assets/chunks/fish-ATLPBZSD.js +1 -0
  220. package/dist/client/assets/chunks/flowDiagram-MALGAFMO-5PCLR4AE.js +1 -0
  221. package/dist/client/assets/chunks/fluent-GGMONBVW.js +1 -0
  222. package/dist/client/assets/chunks/fortran-fixed-form-5MSBDRWQ.js +1 -0
  223. package/dist/client/assets/chunks/fortran-free-form-TT3RBL75.js +1 -0
  224. package/dist/client/assets/chunks/fsharp-PAGHNW4O.js +1 -0
  225. package/dist/client/assets/chunks/ganttDiagram-23REXITY-VE5MVBTO.js +292 -0
  226. package/dist/client/assets/chunks/gdresource-5OTP326D.js +1 -0
  227. package/dist/client/assets/chunks/gdscript-VPWHSCLF.js +1 -0
  228. package/dist/client/assets/chunks/gdshader-FYLPXFE5.js +1 -0
  229. package/dist/client/assets/chunks/genie-UYMEEMA2.js +1 -0
  230. package/dist/client/assets/chunks/gherkin-SU7D5DMY.js +1 -0
  231. package/dist/client/assets/chunks/git-commit-5CF5QAG7.js +1 -0
  232. package/dist/client/assets/chunks/git-rebase-X72BAUZI.js +1 -0
  233. package/dist/client/assets/chunks/gitGraph-VSP46ZUC-J6CJ5YZF.js +1 -0
  234. package/dist/client/assets/chunks/gitGraphDiagram-STJD7YCW-7YJGT6ZP.js +106 -0
  235. package/dist/client/assets/chunks/gleam-LR42YRKO.js +1 -0
  236. package/dist/client/assets/chunks/glimmer-js-JPF67FJU.js +1 -0
  237. package/dist/client/assets/chunks/glimmer-ts-BYPAVIZT.js +1 -0
  238. package/dist/client/assets/chunks/glsl-GTGUULBN.js +1 -0
  239. package/dist/client/assets/chunks/gn-NMDQA4K3.js +1 -0
  240. package/dist/client/assets/chunks/gnuplot-UUAMYBCZ.js +1 -0
  241. package/dist/client/assets/chunks/go-4RERSTNP.js +1 -0
  242. package/dist/client/assets/chunks/graphql-5A6RK6YF.js +1 -0
  243. package/dist/client/assets/chunks/groovy-O7BJONCU.js +1 -0
  244. package/dist/client/assets/chunks/hack-7QGTNPDP.js +1 -0
  245. package/dist/client/assets/chunks/haml-ON5GAWN4.js +1 -0
  246. package/dist/client/assets/chunks/handlebars-6UOQSUBP.js +1 -0
  247. package/dist/client/assets/chunks/haskell-OIZXZ26Y.js +1 -0
  248. package/dist/client/assets/chunks/haxe-7FFVS4FO.js +1 -0
  249. package/dist/client/assets/chunks/hcl-XFUFQJHV.js +1 -0
  250. package/dist/client/assets/chunks/hjson-QDBHMTD5.js +1 -0
  251. package/dist/client/assets/chunks/hlsl-4LP25FFN.js +1 -0
  252. package/dist/client/assets/chunks/html-7RNQXAAV.js +1 -0
  253. package/dist/client/assets/chunks/html-derivative-ESOY72Q2.js +1 -0
  254. package/dist/client/assets/chunks/http-SAD4PMBD.js +1 -0
  255. package/dist/client/assets/chunks/hurl-ZSJJXPQH.js +1 -0
  256. package/dist/client/assets/chunks/hxml-HJCC37RK.js +1 -0
  257. package/dist/client/assets/chunks/hy-CLDE3P4K.js +1 -0
  258. package/dist/client/assets/chunks/imba-REB34U5V.js +1 -0
  259. package/dist/client/assets/chunks/info-OHQRW6UA-EQQKXR77.js +1 -0
  260. package/dist/client/assets/chunks/infoDiagram-KBXO4MBG-F6KGZCGS.js +2 -0
  261. package/dist/client/assets/chunks/ini-PDFEMGRA.js +1 -0
  262. package/dist/client/assets/chunks/ishikawaDiagram-M35NCXHK-5D6ZOZ34.js +70 -0
  263. package/dist/client/assets/chunks/java-KB6XENAD.js +1 -0
  264. package/dist/client/assets/chunks/javascript-3JX5T423.js +1 -0
  265. package/dist/client/assets/chunks/jinja-V4UNU6K4.js +1 -0
  266. package/dist/client/assets/chunks/jison-KH5XNLJP.js +1 -0
  267. package/dist/client/assets/chunks/journeyDiagram-OPLOXDXO-ANDOJZKW.js +139 -0
  268. package/dist/client/assets/chunks/json-HPXFRRPY.js +1 -0
  269. package/dist/client/assets/chunks/json5-LJM6TXWM.js +1 -0
  270. package/dist/client/assets/chunks/jsonc-UZWRU3JV.js +1 -0
  271. package/dist/client/assets/chunks/jsonl-RFZD5UN4.js +1 -0
  272. package/dist/client/assets/chunks/jsonnet-GFZABBL6.js +1 -0
  273. package/dist/client/assets/chunks/jssm-2YIGBISJ.js +1 -0
  274. package/dist/client/assets/chunks/jsx-KLV2ZWUT.js +1 -0
  275. package/dist/client/assets/chunks/julia-3TZDIPPO.js +1 -0
  276. package/dist/client/assets/chunks/just-UHCONBQS.js +1 -0
  277. package/dist/client/assets/chunks/kanban-definition-BZKZHSQY-GF5I5NVD.js +89 -0
  278. package/dist/client/assets/chunks/katex-PIN72PQZ.js +257 -0
  279. package/dist/client/assets/chunks/kdl-DARTFOCL.js +1 -0
  280. package/dist/client/assets/chunks/kotlin-7KT5DW6Y.js +1 -0
  281. package/dist/client/assets/chunks/kusto-EKYXZTC5.js +1 -0
  282. package/dist/client/assets/chunks/langs-GO3UQR4H.js +1 -0
  283. package/dist/client/assets/chunks/latex-T57MIHR5.js +1 -0
  284. package/dist/client/assets/chunks/lean-5QVPRMV6.js +1 -0
  285. package/dist/client/assets/chunks/less-K6QEH5TN.js +1 -0
  286. package/dist/client/assets/chunks/liquid-3LCNNEIV.js +1 -0
  287. package/dist/client/assets/chunks/llvm-O32ZIVRF.js +1 -0
  288. package/dist/client/assets/chunks/log-C4YPJ5BB.js +1 -0
  289. package/dist/client/assets/chunks/logo-JPMO43A6.js +1 -0
  290. package/dist/client/assets/chunks/lua-YKVSOG7K.js +1 -0
  291. package/dist/client/assets/chunks/luau-K4EECYSO.js +1 -0
  292. package/dist/client/assets/chunks/make-VHSYMHHW.js +1 -0
  293. package/dist/client/assets/chunks/markdown-GC5J46H4.js +1 -0
  294. package/dist/client/assets/chunks/marko-U45YFADC.js +1 -0
  295. package/dist/client/assets/chunks/matlab-AMOKC4LU.js +1 -0
  296. package/dist/client/assets/chunks/mdc-DIGA2UXP.js +1 -0
  297. package/dist/client/assets/chunks/mdx-BZUGCKQA.js +1 -0
  298. package/dist/client/assets/chunks/mermaid-WHDP6ZPA.js +1 -0
  299. package/dist/client/assets/chunks/mermaid.core-SQMPMUDN.js +10 -0
  300. package/dist/client/assets/chunks/mindmap-definition-I2QAS2VK-4NH5S56C.js +98 -0
  301. package/dist/client/assets/chunks/mipsasm-2S4CUGQV.js +1 -0
  302. package/dist/client/assets/chunks/mojo-ZOL2PNKT.js +1 -0
  303. package/dist/client/assets/chunks/moonbit-U3BDAIFE.js +1 -0
  304. package/dist/client/assets/chunks/move-YSXALBWA.js +1 -0
  305. package/dist/client/assets/chunks/narrat-DHFIAUJH.js +1 -0
  306. package/dist/client/assets/chunks/nextflow-ESAKNTI3.js +1 -0
  307. package/dist/client/assets/chunks/nextflow-groovy-FKDSPJUI.js +1 -0
  308. package/dist/client/assets/chunks/nginx-XYAYERLO.js +1 -0
  309. package/dist/client/assets/chunks/nim-XOWBVFDH.js +1 -0
  310. package/dist/client/assets/chunks/nix-RVSTQSHC.js +1 -0
  311. package/dist/client/assets/chunks/nsis-KMDUKQRL.js +1 -0
  312. package/dist/client/assets/chunks/nushell-SKJHHZ7U.js +1 -0
  313. package/dist/client/assets/chunks/objective-c-3B3KXQ7Q.js +1 -0
  314. package/dist/client/assets/chunks/objective-cpp-6JDULPJS.js +1 -0
  315. package/dist/client/assets/chunks/ocaml-TMRFXBVO.js +1 -0
  316. package/dist/client/assets/chunks/odin-IN3PLCK7.js +1 -0
  317. package/dist/client/assets/chunks/openscad-P52IKPNH.js +1 -0
  318. package/dist/client/assets/chunks/org-N3SJ2PIA.js +1 -0
  319. package/dist/client/assets/chunks/packet-JDAUHWVQ-4SWIKSKP.js +1 -0
  320. package/dist/client/assets/chunks/pascal-T7CUWCQ4.js +1 -0
  321. package/dist/client/assets/chunks/pegDiagram-FD4XPPHP-WDKZSEGN.js +1 -0
  322. package/dist/client/assets/chunks/perl-LCZ4KODH.js +1 -0
  323. package/dist/client/assets/chunks/php-4XHMBVR5.js +1 -0
  324. package/dist/client/assets/chunks/pie-XZMESJXO-PSSWOWGV.js +1 -0
  325. package/dist/client/assets/chunks/pieDiagram-J4AKIIQI-BDW5I5ON.js +39 -0
  326. package/dist/client/assets/chunks/pkl-OACG5B67.js +1 -0
  327. package/dist/client/assets/chunks/plsql-7E5C7CJX.js +1 -0
  328. package/dist/client/assets/chunks/po-ZSREFRRP.js +1 -0
  329. package/dist/client/assets/chunks/polar-4GBINVA7.js +1 -0
  330. package/dist/client/assets/chunks/postcss-B7RPVGFW.js +1 -0
  331. package/dist/client/assets/chunks/powerquery-6UFMTY4G.js +1 -0
  332. package/dist/client/assets/chunks/powershell-3STRPCNT.js +1 -0
  333. package/dist/client/assets/chunks/prisma-4TPSPIZ5.js +1 -0
  334. package/dist/client/assets/chunks/prolog-HEAYPKQW.js +1 -0
  335. package/dist/client/assets/chunks/proto-Y3Y3VKXM.js +1 -0
  336. package/dist/client/assets/chunks/pug-7PBPMG3M.js +1 -0
  337. package/dist/client/assets/chunks/puppet-FR35R4OI.js +1 -0
  338. package/dist/client/assets/chunks/purescript-OUHXQAOW.js +1 -0
  339. package/dist/client/assets/chunks/python-SNDG7FNU.js +1 -0
  340. package/dist/client/assets/chunks/qml-UVIOSWP4.js +1 -0
  341. package/dist/client/assets/chunks/qmldir-6JGUNYL5.js +1 -0
  342. package/dist/client/assets/chunks/qss-ZCC466IZ.js +1 -0
  343. package/dist/client/assets/chunks/quadrantDiagram-XTYBLID2-5VKXWVJ6.js +7 -0
  344. package/dist/client/assets/chunks/r-4XW4O3ZF.js +1 -0
  345. package/dist/client/assets/chunks/racket-YJAYXOOG.js +1 -0
  346. package/dist/client/assets/chunks/radar-ABXABTNO-3AXZCEY2.js +1 -0
  347. package/dist/client/assets/chunks/railroad-I3PHUGI6-2PLXYPOT.js +1 -0
  348. package/dist/client/assets/chunks/railroad-abnf-LNEFI6M7-M4DGICQX.js +1 -0
  349. package/dist/client/assets/chunks/railroad-ebnf-DWYD2UWJ-UEIHQMSZ.js +1 -0
  350. package/dist/client/assets/chunks/railroad-peg-JR7BVNR7-I7VLIBXM.js +1 -0
  351. package/dist/client/assets/chunks/railroadDiagram-MRQ6NCDL-Y6IYWEFL.js +1 -0
  352. package/dist/client/assets/chunks/raku-63NEL5JK.js +1 -0
  353. package/dist/client/assets/chunks/razor-J3CJP523.js +1 -0
  354. package/dist/client/assets/chunks/rbs-6GQLT7NW.js +1 -0
  355. package/dist/client/assets/chunks/reg-6Q3OEC2C.js +1 -0
  356. package/dist/client/assets/chunks/regexp-LPIMILT3.js +1 -0
  357. package/dist/client/assets/chunks/rel-TOQGUTHB.js +1 -0
  358. package/dist/client/assets/chunks/requirementDiagram-Y7LWUY3S-CIWXVVWJ.js +84 -0
  359. package/dist/client/assets/chunks/riscv-UELGBOXE.js +1 -0
  360. package/dist/client/assets/chunks/ron-FW7LCJJH.js +1 -0
  361. package/dist/client/assets/chunks/rosmsg-O63VHE3L.js +1 -0
  362. package/dist/client/assets/chunks/rst-3WJXGLA7.js +1 -0
  363. package/dist/client/assets/chunks/ruby-7S7L6JTH.js +1 -0
  364. package/dist/client/assets/chunks/rust-LIK4HRRI.js +1 -0
  365. package/dist/client/assets/chunks/sankeyDiagram-WGJFYUXA-OGNQPX5V.js +40 -0
  366. package/dist/client/assets/chunks/sas-FHDPZ2JH.js +1 -0
  367. package/dist/client/assets/chunks/sass-UI4HW2FN.js +1 -0
  368. package/dist/client/assets/chunks/scala-KN7RQSUJ.js +1 -0
  369. package/dist/client/assets/chunks/scheme-5R527YZ5.js +1 -0
  370. package/dist/client/assets/chunks/scss-KZ6DRE4A.js +1 -0
  371. package/dist/client/assets/chunks/sdbl-FHOCL5SL.js +1 -0
  372. package/dist/client/assets/chunks/sequenceDiagram-5NDRBG5M-QX2V24ZU.js +169 -0
  373. package/dist/client/assets/chunks/shaderlab-2TLHUS2H.js +1 -0
  374. package/dist/client/assets/chunks/shellscript-PIB6ZBDM.js +1 -0
  375. package/dist/client/assets/chunks/shellsession-5KL7NFNN.js +1 -0
  376. package/dist/client/assets/chunks/sizeCapture-INFHLROL-LCS2PIHM.js +1 -0
  377. package/dist/client/assets/chunks/smalltalk-JFLFU247.js +1 -0
  378. package/dist/client/assets/chunks/smithy-HONEXZAM.js +1 -0
  379. package/dist/client/assets/chunks/solidity-SJ3INJFZ.js +1 -0
  380. package/dist/client/assets/chunks/soy-ND4SWTM2.js +1 -0
  381. package/dist/client/assets/chunks/sparql-YB2JQBZD.js +1 -0
  382. package/dist/client/assets/chunks/splunk-UXIDDAWL.js +1 -0
  383. package/dist/client/assets/chunks/sql-K6OMG7SQ.js +1 -0
  384. package/dist/client/assets/chunks/ssh-config-I7KJY3KQ.js +1 -0
  385. package/dist/client/assets/chunks/stata-DNZ3DTFJ.js +1 -0
  386. package/dist/client/assets/chunks/stateDiagram-v2-FJ4FJNEA-LVAUWF3A.js +291 -0
  387. package/dist/client/assets/chunks/stylus-GWPR6IQY.js +1 -0
  388. package/dist/client/assets/chunks/surrealql-KQNHBWLC.js +1 -0
  389. package/dist/client/assets/chunks/svelte-YQKF25S4.js +1 -0
  390. package/dist/client/assets/chunks/swift-ZCIZUJXA.js +1 -0
  391. package/dist/client/assets/chunks/swimlanes-UMQ2AFYF-B3RQOARQ.js +1 -0
  392. package/dist/client/assets/chunks/swimlanesDiagram-OMPLPG4O-JOE33EOV.js +8 -0
  393. package/dist/client/assets/chunks/system-verilog-Y7E6FIO3.js +1 -0
  394. package/dist/client/assets/chunks/systemd-WHC7NBZP.js +1 -0
  395. package/dist/client/assets/chunks/talonscript-WC7SODAH.js +1 -0
  396. package/dist/client/assets/chunks/tasl-QHY2GTCB.js +1 -0
  397. package/dist/client/assets/chunks/tcl-VAMIL5PJ.js +1 -0
  398. package/dist/client/assets/chunks/temml-ISNSX3VV.js +96 -0
  399. package/dist/client/assets/chunks/templ-B3BHKWV4.js +1 -0
  400. package/dist/client/assets/chunks/terraform-Q4UEK6FK.js +1 -0
  401. package/dist/client/assets/chunks/tex-63OWCYAB.js +1 -0
  402. package/dist/client/assets/chunks/timeline-definition-SEUHKTQE-FDFTVAJG.js +120 -0
  403. package/dist/client/assets/chunks/toml-7Z4IPGES.js +1 -0
  404. package/dist/client/assets/chunks/treeView-D4JQ5SDB-ABSGRAGI.js +1 -0
  405. package/dist/client/assets/chunks/treemap-SAJKECNS-MYX2CBJN.js +1 -0
  406. package/dist/client/assets/chunks/ts-tags-DT62HE52.js +1 -0
  407. package/dist/client/assets/chunks/tsv-RTXHWADP.js +1 -0
  408. package/dist/client/assets/chunks/tsx-UANUBOC7.js +1 -0
  409. package/dist/client/assets/chunks/turtle-QVOUNUUL.js +1 -0
  410. package/dist/client/assets/chunks/twig-ZPC4BPDA.js +1 -0
  411. package/dist/client/assets/chunks/typescript-WGWKIMMW.js +1 -0
  412. package/dist/client/assets/chunks/typespec-TYCVR32J.js +1 -0
  413. package/dist/client/assets/chunks/typst-PIBFYUO6.js +1 -0
  414. package/dist/client/assets/chunks/usecaseDiagram-AFA6YXN4-KW7ADINR.js +370 -0
  415. package/dist/client/assets/chunks/v-3ERNWBSP.js +1 -0
  416. package/dist/client/assets/chunks/vala-UCBCT2GS.js +1 -0
  417. package/dist/client/assets/chunks/vb-DGI3VTPA.js +1 -0
  418. package/dist/client/assets/chunks/vennDiagram-NNMJR3RB-RDGLGOGM.js +34 -0
  419. package/dist/client/assets/chunks/verilog-G72NZROS.js +1 -0
  420. package/dist/client/assets/chunks/vhdl-PYGA77XE.js +1 -0
  421. package/dist/client/assets/chunks/viml-OOC5B5UU.js +1 -0
  422. package/dist/client/assets/chunks/vue-GTNHIOPG.js +1 -0
  423. package/dist/client/assets/chunks/vue-html-DKAMJV55.js +1 -0
  424. package/dist/client/assets/chunks/vue-vine-WTM5HREV.js +1 -0
  425. package/dist/client/assets/chunks/vyper-RHYEHOJM.js +1 -0
  426. package/dist/client/assets/chunks/wardley-7MLQ67FV-QJL2HSBT.js +1 -0
  427. package/dist/client/assets/chunks/wardleyDiagram-S7YFUSEH-A4XX3UJR.js +78 -0
  428. package/dist/client/assets/chunks/wasm-ZMM2Z5XV.js +1 -0
  429. package/dist/client/assets/chunks/wenyan-HF5UTKSJ.js +1 -0
  430. package/dist/client/assets/chunks/wgsl-O7D7OPO7.js +1 -0
  431. package/dist/client/assets/chunks/wikitext-T7BSWSKQ.js +1 -0
  432. package/dist/client/assets/chunks/wit-TKCHPPT6.js +1 -0
  433. package/dist/client/assets/chunks/wolfram-7MN66A7N.js +1 -0
  434. package/dist/client/assets/chunks/xml-NLTLAWOD.js +1 -0
  435. package/dist/client/assets/chunks/xsl-NZ4ECK3P.js +1 -0
  436. package/dist/client/assets/chunks/xychartDiagram-GGNKY7IX-OXJILWHR.js +7 -0
  437. package/dist/client/assets/chunks/yaml-HRJLEV3V.js +1 -0
  438. package/dist/client/assets/chunks/zenscript-4LLRSLPI.js +1 -0
  439. package/dist/client/assets/chunks/zig-Y7MUQFUO.js +1 -0
  440. package/dist/client/assets/icon.svg +1 -0
  441. package/dist/client/assets/main.js +254 -0
  442. package/dist/client/index.html +59 -0
  443. package/dist/diff.js +119 -0
  444. package/dist/fs/files.js +233 -0
  445. package/dist/fs/git.js +369 -0
  446. package/dist/fs/glob.js +89 -0
  447. package/dist/fs/notes.js +368 -0
  448. package/dist/fs/search.js +136 -0
  449. package/dist/fs/watch.js +69 -0
  450. package/dist/fs/zip.js +100 -0
  451. package/dist/hooks.js +65 -0
  452. package/dist/http.js +81 -0
  453. package/dist/hub/atomic.js +77 -0
  454. package/dist/hub/notify.js +239 -0
  455. package/dist/hub/registry.js +219 -0
  456. package/dist/mcp.js +500 -0
  457. package/dist/q/agent.js +215 -0
  458. package/dist/q/model.js +633 -0
  459. package/dist/q/schema.js +133 -0
  460. package/dist/q/store.js +413 -0
  461. package/dist/r/model.js +323 -0
  462. package/dist/r/schema.js +53 -0
  463. package/dist/r/store.js +489 -0
  464. package/dist/server.js +246 -0
  465. package/dist/settings.js +30 -0
  466. package/dist/workspace.js +639 -0
  467. package/package.json +73 -4
  468. package/schema/questions.schema.json +1670 -0
  469. package/schema/reviews.schema.json +151 -0
@@ -0,0 +1,323 @@
1
+ // Reviews: things an agent puts in front of the human to look at, review or approve, and what the human says back.
2
+ // Everything here is pure: the store reads and writes the files.
3
+ //
4
+ // A review is one file, .hitl/reviews/<id>.json: a title, an intro, a mode, and a list of items. An item is one thing
5
+ // to look at: a project file (or a few lines of one, or its changes since a git revision), raw content (code, text,
6
+ // markdown, JSON), a diff, a picture, a diagram, an HTML mockup or a link, with the agent's note on what to look at.
7
+ // mode "review": the human gives each item a verdict (looks good / needs changes / no) and comments
8
+ // mode "show": just look; comments welcome, no verdicts asked for
9
+ // mode "approve": one yes or no for the whole thing (a gate: `hitl approve` waits on it)
10
+ export const KINDS = ['file', 'code', 'text', 'md', 'json', 'diff', 'image', 'mermaid', 'html', 'link'];
11
+ export const MODES = ['review', 'show', 'approve'];
12
+ // ── feedback ──
13
+ export const VERDICTS = ['ok', 'changes', 'no'];
14
+ export const VERDICT_TEXT = { ok: 'looks good', changes: 'needs changes', no: 'no' };
15
+ export const APPROVE_TEXT = { ok: 'approved', changes: 'not yet (changes asked for)', no: 'refused' };
16
+ export const emptyFeedback = () => ({ version: 1, kind: 'review', seq: 0, readSeq: 0, items: {}, comments: [] });
17
+ // ── helpers ──
18
+ export const REVIEW_ID = /^[a-z0-9][a-z0-9._-]{0,79}$/i;
19
+ const ITEM_ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/;
20
+ export function slug(s, max = 40) {
21
+ return (s
22
+ .toLowerCase()
23
+ .normalize('NFKD')
24
+ .replace(/[̀-ͯ]/g, '')
25
+ .replace(/[^a-z0-9]+/g, '-')
26
+ .replace(/^-+|-+$/g, '')
27
+ .slice(0, max)
28
+ .replace(/-+$/, '') || 'x');
29
+ }
30
+ /** A short, stable fingerprint (FNV-1a, 32-bit, base 36). */
31
+ export function hash(s) {
32
+ let h = 0x811c9dc5;
33
+ for (let i = 0; i < s.length; i++) {
34
+ h ^= s.charCodeAt(i);
35
+ h = Math.imul(h, 0x01000193);
36
+ }
37
+ return (h >>> 0).toString(36);
38
+ }
39
+ const str = (v) => (typeof v === 'string' ? v : v === undefined || v === null ? '' : String(v));
40
+ const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
41
+ const CONTENT = ['file', 'code', 'text', 'md', 'json', 'diff', 'image', 'mermaid', 'html', 'link'];
42
+ const KNOWN = new Set(['id', 'title', 'note', 'ask', 'lines', 'against', 'snapshot', 'snap', 'lang', 'name', 'alt', 'before', 'height', 'label', 'collapsed', ...CONTENT]);
43
+ /** which content field an item has */
44
+ export function kindOf(i) {
45
+ for (const k of CONTENT)
46
+ if (i[k] !== undefined && (k === 'json' || typeof i[k] === 'string'))
47
+ return k;
48
+ return undefined;
49
+ }
50
+ /** a title for an item without one */
51
+ export function defaultTitle(i, kind) {
52
+ switch (kind) {
53
+ case 'file':
54
+ return (i.file ?? '') + (i.lines !== undefined ? `:${i.lines}` : '') + (i.against ? ` (since ${i.against})` : '');
55
+ case 'code':
56
+ return i.name || (i.lang ? `Code (${i.lang})` : 'Code');
57
+ case 'text':
58
+ return i.name || 'Text';
59
+ case 'md':
60
+ return i.name || 'Notes';
61
+ case 'json':
62
+ return i.name || 'Data';
63
+ case 'diff':
64
+ return diffFiles(i.diff ?? '').join(', ') || 'Changes';
65
+ case 'image':
66
+ return i.alt || (/^data:/.test(i.image ?? '') ? 'Picture' : (i.image ?? '').replace(/[?#].*$/, '').split('/').pop() || 'Picture');
67
+ case 'mermaid':
68
+ return 'Diagram';
69
+ case 'html':
70
+ return 'Mockup';
71
+ case 'link':
72
+ return i.label || i.link || 'Link';
73
+ }
74
+ }
75
+ /** the files a unified diff touches */
76
+ export function diffFiles(diff) {
77
+ const out = [];
78
+ for (const m of diff.matchAll(/^\+\+\+ (?:b\/)?(.+)$/gm)) {
79
+ const f = (m[1] ?? '').trim();
80
+ if (f && f !== '/dev/null' && !out.includes(f))
81
+ out.push(f);
82
+ }
83
+ return out;
84
+ }
85
+ function itemRev(i) {
86
+ const { id: _id, title: _t, note: _n, ask: _a, collapsed: _c, rev: _r, snap, ...content } = i;
87
+ return hash(JSON.stringify({ ...content, snap: snap?.sha }));
88
+ }
89
+ /** An item id from its title or file: short, readable, unique among `taken`. */
90
+ export function itemIdFor(i, taken) {
91
+ const kind = kindOf(i);
92
+ const base = slug(i.title || (kind === 'file' ? (i.file ?? '').split('/').pop() || 'file' : kind ? defaultTitle(i, kind) : 'item'), 32);
93
+ let id = base, n = 2;
94
+ while (taken.has(id))
95
+ id = `${base}-${n++}`;
96
+ return id;
97
+ }
98
+ export function normalise(id, input) {
99
+ const errors = [];
100
+ const warnings = [];
101
+ const raw = isObj(input) ? input : {};
102
+ if (!isObj(input))
103
+ errors.push('A review is a JSON object: { title, intro, mode, items: [...] }');
104
+ const mode = MODES.includes(str(raw.mode)) ? raw.mode : 'review';
105
+ if (raw.mode !== undefined && !MODES.includes(str(raw.mode)))
106
+ errors.push(`mode is one of ${MODES.join(', ')}`);
107
+ const review = {
108
+ id,
109
+ title: str(raw.title) || id,
110
+ intro: str(raw.intro),
111
+ mode,
112
+ status: raw.status === 'closed' ? 'closed' : 'open',
113
+ from: str(raw.from),
114
+ created: str(raw.created),
115
+ updated: str(raw.updated),
116
+ items: [],
117
+ };
118
+ const seen = new Set();
119
+ const list = Array.isArray(raw.items) ? raw.items : [];
120
+ if (raw.items !== undefined && !Array.isArray(raw.items))
121
+ errors.push('items must be a list');
122
+ list.forEach((ii, n) => {
123
+ const at = `items[${n}]`;
124
+ if (!isObj(ii))
125
+ return void errors.push(`${at}: an item is an object, like { "file": "src/x.ts" } or { "code": "…", "lang": "ts" }`);
126
+ const input = ii;
127
+ const present = CONTENT.filter((k) => input[k] !== undefined);
128
+ const kind = kindOf(input);
129
+ if (!kind)
130
+ return void errors.push(`${at}: no content (give one of: ${CONTENT.join(', ')})`);
131
+ if (present.length > 1)
132
+ warnings.push(`${at}: more than one content field (${present.join(', ')}); showing ${kind}`);
133
+ for (const k of Object.keys(input))
134
+ if (!KNOWN.has(k))
135
+ warnings.push(`${at}: unknown field "${k}"`);
136
+ let iid = str(input.id);
137
+ if (!iid)
138
+ iid = itemIdFor(input, seen);
139
+ else if (!ITEM_ID.test(iid))
140
+ return void errors.push(`${at}: bad id "${iid}" (letters, digits, . _ : -)`);
141
+ if (seen.has(iid))
142
+ return void errors.push(`${at}: the id "${iid}" is used twice`);
143
+ seen.add(iid);
144
+ const lines = input.lines === undefined ? undefined : String(input.lines);
145
+ if (lines !== undefined && !/^\d+(-\d+)?$/.test(lines))
146
+ errors.push(`${at}: lines is "10" or "10-40"`);
147
+ if (kind === 'file' && /(^|[\\/])\.\.([\\/]|$)/.test(input.file ?? ''))
148
+ errors.push(`${at}: file must be inside the project`);
149
+ if (kind === 'link' && !/^https?:\/\//i.test(input.link ?? ''))
150
+ errors.push(`${at}: a link starts with http:// or https://`);
151
+ for (const k of ['image', 'before'])
152
+ if (/^(javascript|vbscript):/i.test(str(input[k])))
153
+ errors.push(`${at}: ${k} isn't a picture`);
154
+ if (input.against !== undefined && (kind !== 'file' || !/^[A-Za-z0-9._/~^@{}-]{1,100}$/.test(str(input.against)) || str(input.against).startsWith('-')))
155
+ errors.push(`${at}: against is a git revision (like HEAD or main), with file`);
156
+ const item = { id: iid, kind, title: str(input.title) || defaultTitle(input, kind), note: str(input.note), ask: str(input.ask), collapsed: input.collapsed === true, rev: '' };
157
+ const set = (k, v) => {
158
+ if (v !== undefined && v !== '')
159
+ item[k] = v;
160
+ };
161
+ switch (kind) {
162
+ case 'file':
163
+ set('file', str(input.file).replace(/\\/g, '/').replace(/^\.\//, ''));
164
+ set('lines', lines);
165
+ set('against', input.against ? str(input.against) : undefined);
166
+ if (isObj(input.snap) && typeof input.snap.path === 'string' && typeof input.snap.sha === 'string')
167
+ item.snap = input.snap;
168
+ break;
169
+ case 'code':
170
+ set('code', input.code);
171
+ set('lang', str(input.lang) || undefined);
172
+ set('name', str(input.name) || undefined);
173
+ set('before', typeof input.before === 'string' ? input.before : undefined);
174
+ break;
175
+ case 'text':
176
+ set('text', input.text);
177
+ set('name', str(input.name) || undefined);
178
+ set('before', typeof input.before === 'string' ? input.before : undefined);
179
+ break;
180
+ case 'md':
181
+ set('md', input.md);
182
+ break;
183
+ case 'json':
184
+ item.json = input.json;
185
+ set('name', str(input.name) || undefined);
186
+ break;
187
+ case 'diff':
188
+ set('diff', input.diff);
189
+ break;
190
+ case 'image':
191
+ set('image', input.image);
192
+ set('alt', str(input.alt) || undefined);
193
+ set('before', typeof input.before === 'string' ? input.before : undefined);
194
+ break;
195
+ case 'mermaid':
196
+ set('mermaid', input.mermaid);
197
+ break;
198
+ case 'html':
199
+ set('html', input.html);
200
+ item.height = typeof input.height === 'number' && input.height > 40 ? Math.min(4000, input.height) : 360;
201
+ break;
202
+ case 'link':
203
+ set('link', input.link);
204
+ set('label', str(input.label) || undefined);
205
+ break;
206
+ }
207
+ item.rev = itemRev(item);
208
+ review.items.push(item);
209
+ });
210
+ if (!review.items.length && mode !== 'approve' && !errors.length)
211
+ warnings.push('Nothing to look at yet: add items');
212
+ return { review, errors, warnings };
213
+ }
214
+ export const isStale = (item, v) => !!item && !!v && v.rev !== item.rev;
215
+ export function summarise(review, fb, errors = 0) {
216
+ let reviewed = 0, ok = 0, changes = 0, no = 0, stale = 0;
217
+ for (const it of review.items) {
218
+ const v = fb.items[it.id];
219
+ if (!v)
220
+ continue;
221
+ reviewed++;
222
+ if (v.verdict === 'ok')
223
+ ok++;
224
+ else if (v.verdict === 'changes')
225
+ changes++;
226
+ else
227
+ no++;
228
+ if (isStale(it, v))
229
+ stale++;
230
+ }
231
+ return {
232
+ id: review.id,
233
+ kind: 'review',
234
+ title: review.title,
235
+ mode: review.mode,
236
+ status: review.status,
237
+ from: review.from,
238
+ items: review.items.length,
239
+ reviewed,
240
+ ok,
241
+ changes,
242
+ no,
243
+ open: fb.comments.filter((c) => c.status === 'open' && c.from === 'owner').length,
244
+ comments: fb.comments.length,
245
+ overall: fb.overall?.verdict,
246
+ done: !!fb.overall,
247
+ unread: countNew(fb),
248
+ stale,
249
+ created: review.created,
250
+ updated: review.updated,
251
+ errors,
252
+ };
253
+ }
254
+ /** how many things the human did since the agent last read */
255
+ export function countNew(fb) {
256
+ let n = 0;
257
+ if (fb.overall && fb.overall.seq > fb.readSeq)
258
+ n++;
259
+ for (const v of Object.values(fb.items))
260
+ if (v.seq > fb.readSeq)
261
+ n++;
262
+ for (const c of fb.comments) {
263
+ if (c.from === 'owner' && c.seq > fb.readSeq)
264
+ n++;
265
+ for (const r of c.replies)
266
+ if (r.from === 'owner' && r.seq > fb.readSeq)
267
+ n++;
268
+ }
269
+ return n;
270
+ }
271
+ export function whereText(c) {
272
+ if (c.strokes?.length)
273
+ return c.area ? `marked area ${c.area.w}×${c.area.h} at ${c.area.x},${c.area.y}` : 'marked area';
274
+ if (c.line)
275
+ return `${c.side === 'old' ? 'removed ' : ''}${c.endLine && c.endLine !== c.line ? `lines ${c.line}-${c.endLine}` : `line ${c.line}`}`;
276
+ return '';
277
+ }
278
+ export function verdictText(r, v) {
279
+ return r.mode === 'approve' ? APPROVE_TEXT[v] : VERDICT_TEXT[v];
280
+ }
281
+ /** The feedback as readable markdown, for .hitl/answers/<id>.md */
282
+ export function feedbackMarkdown(review, fb) {
283
+ const s = summarise(review, fb);
284
+ const head = review.mode === 'approve'
285
+ ? fb.overall
286
+ ? `**${APPROVE_TEXT[fb.overall.verdict]}**${fb.overall.note ? `: ${fb.overall.note}` : ''}`
287
+ : 'Not answered yet.'
288
+ : `${s.reviewed} of ${s.items} items reviewed (${s.ok} good, ${s.changes} need changes, ${s.no} no), ${s.open} open comment${s.open === 1 ? '' : 's'}.${fb.overall ? ` Overall: **${VERDICT_TEXT[fb.overall.verdict]}**${fb.overall.note ? `: ${fb.overall.note}` : ''}.` : ''}`;
289
+ const out = [`# ${review.title}: feedback`, '', head, '', `Written by hitl; the data is in the .json next to this file. What's new: \`npx hitloop news\`.`, ''];
290
+ const byItem = new Map();
291
+ for (const c of fb.comments) {
292
+ const l = byItem.get(c.item) ?? [];
293
+ l.push(c);
294
+ byItem.set(c.item, l);
295
+ }
296
+ const ids = ['', ...review.items.map((i) => i.id), ...[...byItem.keys(), ...Object.keys(fb.items)].filter((k) => k && !review.items.some((i) => i.id === k))];
297
+ for (const iid of [...new Set(ids)]) {
298
+ const it = review.items.find((i) => i.id === iid);
299
+ const v = fb.items[iid];
300
+ const cs = byItem.get(iid) ?? [];
301
+ if (!v && !cs.length)
302
+ continue;
303
+ out.push(`## ${iid === '' ? 'The whole review' : it ? it.title : `${iid} (removed)`}`, '');
304
+ if (it?.kind === 'file')
305
+ out.push(`\`${it.file}${it.lines ? ':' + it.lines : ''}\``, '');
306
+ if (v)
307
+ out.push(`**${VERDICT_TEXT[v.verdict]}**${v.note ? `: ${v.note}` : ''}${isStale(it, v) ? ' _(given to an earlier version)_' : ''}${v.ack ? ` — done: ${v.ack.note}` : ''}`, '');
308
+ for (const c of cs) {
309
+ const w = whereText(c);
310
+ out.push(`- [${c.status === 'open' ? ' ' : 'x'}] \`${c.id}\`${w ? ` (${w})` : ''}: ${c.body.replace(/\n/g, '\n ')}`);
311
+ if (c.quote)
312
+ out.push(` > ${c.quote.split('\n').slice(0, 12).join('\n > ')}`);
313
+ if (c.marked)
314
+ out.push(` ![marked](../../${c.marked})`);
315
+ for (const p of c.photos ?? [])
316
+ out.push(` ![photo](../../${p})`);
317
+ for (const r of c.replies)
318
+ out.push(` - ${r.from === 'owner' ? 'human' : 'agent'}: ${r.body.replace(/\n/g, '\n ')}`);
319
+ }
320
+ out.push('');
321
+ }
322
+ return out.join('\n');
323
+ }
@@ -0,0 +1,53 @@
1
+ // The review format as JSON Schema: published as schema/reviews.schema.json, printed by `hitl schema reviews`, and
2
+ // given to agents in the MCP tools' input schemas.
3
+ export const itemSchema = {
4
+ type: 'object',
5
+ description: 'One thing to look at. Give exactly one content field: file (a project path; with lines "10-40" for part of it, or against "HEAD"/"main" for its changes since then), files (several paths at once), code (+ lang, name), text, md, json, diff (unified), image (project path, https URL or data:image URL), mermaid, html (sandboxed mockup, no scripts; height), link (+ label). Add title, note (markdown: what to look at), ask (the question for this item), before (an earlier picture or text, for a before/after view), collapsed.',
6
+ properties: {
7
+ id: { type: 'string', description: 'Stable id (made from the title or file if left out)' },
8
+ title: { type: 'string' },
9
+ note: { type: 'string', description: 'Markdown: what to look at, what changed, what you want to know' },
10
+ ask: { type: 'string', description: 'What you are asking about this item ("Is the spacing right?")' },
11
+ file: { type: 'string', description: 'A path relative to the project folder' },
12
+ files: { type: 'array', items: { type: 'string' }, description: 'Several project paths: one item each' },
13
+ lines: { oneOf: [{ type: 'string', pattern: '^\\d+(-\\d+)?$' }, { type: 'integer' }] },
14
+ against: { type: 'string', description: 'With file: show its changes since this git revision (HEAD, main, a hash)' },
15
+ snapshot: { type: 'boolean', description: 'With file: keep a copy as it is now (default true) so later edits show as changed' },
16
+ code: { type: 'string' },
17
+ lang: { type: 'string' },
18
+ name: { type: 'string', description: 'A file name to show (and to guess the language from)' },
19
+ text: { type: 'string' },
20
+ md: { type: 'string' },
21
+ json: { description: 'Any JSON value, shown as a tree' },
22
+ diff: { type: 'string', description: 'A unified diff' },
23
+ image: { type: 'string', description: 'A project path, an https: URL, or a data:image/…;base64 URL' },
24
+ alt: { type: 'string' },
25
+ before: { type: 'string', description: 'Before/after: the earlier picture (path, URL or data URL) for image, or the earlier text for code/text' },
26
+ mermaid: { type: 'string' },
27
+ html: { type: 'string' },
28
+ height: { type: 'number' },
29
+ link: { type: 'string' },
30
+ label: { type: 'string' },
31
+ collapsed: { type: 'boolean' },
32
+ },
33
+ additionalProperties: false,
34
+ };
35
+ export const reviewSchema = {
36
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
37
+ $id: 'https://unpkg.com/hitloop/schema/reviews.schema.json',
38
+ title: 'hitl review',
39
+ description: 'Things an agent shows the human to look at, review or approve (.hitl/reviews/<id>.json).',
40
+ type: 'object',
41
+ properties: {
42
+ $schema: { type: 'string' },
43
+ title: { type: 'string' },
44
+ intro: { type: 'string', description: 'Markdown at the top: what this is and what you want' },
45
+ mode: { enum: ['review', 'show', 'approve'], description: 'review: a verdict per item; show: just look; approve: one yes or no' },
46
+ status: { enum: ['open', 'closed'] },
47
+ from: { type: 'string', description: "Who's asking: an agent session's name, a branch" },
48
+ created: { type: 'string' },
49
+ updated: { type: 'string' },
50
+ items: { type: 'array', items: itemSchema },
51
+ },
52
+ additionalProperties: false,
53
+ };