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.
- package/LICENSE +21 -0
- package/README.md +218 -2
- package/dist/agent.js +318 -0
- package/dist/cli.js +897 -0
- package/dist/client/assets/app.css +1 -0
- package/dist/client/assets/chunks/abap-EINPUMCJ.js +1 -0
- package/dist/client/assets/chunks/abnfDiagram-S7VZAUFO-W2CM2W6D.js +1 -0
- package/dist/client/assets/chunks/actionscript-3-O776AQUO.js +1 -0
- package/dist/client/assets/chunks/ada-WLOTXRTV.js +1 -0
- package/dist/client/assets/chunks/ahk-EF37A2DY.js +1 -0
- package/dist/client/assets/chunks/ahk2-FH4K3CKT.js +1 -0
- package/dist/client/assets/chunks/angular-html-ZALQFV2H.js +1 -0
- package/dist/client/assets/chunks/angular-ts-4IWMF7QO.js +1 -0
- package/dist/client/assets/chunks/apache-44AYOEWM.js +1 -0
- package/dist/client/assets/chunks/apex-XRYPID42.js +1 -0
- package/dist/client/assets/chunks/apl-5HBALFOI.js +1 -0
- package/dist/client/assets/chunks/applescript-2DZEHZEC.js +1 -0
- package/dist/client/assets/chunks/ara-ZGZQBLXL.js +1 -0
- package/dist/client/assets/chunks/architecture-WOLXFQ4H-EJGENNRL.js +1 -0
- package/dist/client/assets/chunks/architectureDiagram-YGSQEFNW-2VHWSKO6.js +36 -0
- package/dist/client/assets/chunks/asciidoc-GSQAKCPO.js +1 -0
- package/dist/client/assets/chunks/asm-BFURM5BK.js +1 -0
- package/dist/client/assets/chunks/astro-VJORWDZJ.js +1 -0
- package/dist/client/assets/chunks/awk-BSHTWXXX.js +1 -0
- package/dist/client/assets/chunks/ballerina-HAOQJ4B2.js +1 -0
- package/dist/client/assets/chunks/bat-OSH45EOF.js +1 -0
- package/dist/client/assets/chunks/beancount-RBATIHOV.js +1 -0
- package/dist/client/assets/chunks/berry-CZUIOUM4.js +1 -0
- package/dist/client/assets/chunks/bibtex-KCL2UWHE.js +1 -0
- package/dist/client/assets/chunks/bicep-SZJZB3SG.js +1 -0
- package/dist/client/assets/chunks/bird2-XBF5YQQV.js +1 -0
- package/dist/client/assets/chunks/blade-Q24LEVFC.js +1 -0
- package/dist/client/assets/chunks/blockDiagram-APKKGZFW-53LXSOOT.js +140 -0
- package/dist/client/assets/chunks/bpmnIcons-APHXDYXF-FMBRQNTY.js +1 -0
- package/dist/client/assets/chunks/bsl-TI44NWFB.js +1 -0
- package/dist/client/assets/chunks/c-NLHY4Y4N.js +1 -0
- package/dist/client/assets/chunks/c3-BUTEM6PO.js +1 -0
- package/dist/client/assets/chunks/c4Diagram-KJ2TOQU5-O53G4GQH.js +38 -0
- package/dist/client/assets/chunks/cadence-JIRTEU64.js +1 -0
- package/dist/client/assets/chunks/cairo-3W6NVDNW.js +1 -0
- package/dist/client/assets/chunks/chapel-BPBJ2E7K.js +1 -0
- package/dist/client/assets/chunks/chunk-25KVF5ZE.js +1 -0
- package/dist/client/assets/chunks/chunk-2CJKSQOI.js +1 -0
- package/dist/client/assets/chunks/chunk-2QIJRTWR.js +1 -0
- package/dist/client/assets/chunks/chunk-2ZCRJZGF.js +2 -0
- package/dist/client/assets/chunks/chunk-3ILNDZNY.js +213 -0
- package/dist/client/assets/chunks/chunk-3M2OOQ7S.js +1 -0
- package/dist/client/assets/chunks/chunk-3M57NTNK.js +1 -0
- package/dist/client/assets/chunks/chunk-3MR6DCZJ.js +1 -0
- package/dist/client/assets/chunks/chunk-3WGHS7F7.js +1 -0
- package/dist/client/assets/chunks/chunk-4JK75V33.js +1 -0
- package/dist/client/assets/chunks/chunk-4NXNVEWK.js +1 -0
- package/dist/client/assets/chunks/chunk-4RNNBDFQ.js +1 -0
- package/dist/client/assets/chunks/chunk-4T4NVH7V.js +1 -0
- package/dist/client/assets/chunks/chunk-4TFFBC35.js +1 -0
- package/dist/client/assets/chunks/chunk-4WYBE67P.js +1 -0
- package/dist/client/assets/chunks/chunk-56ITEUFA.js +1 -0
- package/dist/client/assets/chunks/chunk-5DXRE7IH.js +1 -0
- package/dist/client/assets/chunks/chunk-5IMADCNU.js +1 -0
- package/dist/client/assets/chunks/chunk-5XZPGKN4.js +1 -0
- package/dist/client/assets/chunks/chunk-6O32UKSP.js +1 -0
- package/dist/client/assets/chunks/chunk-7BAEB64Q.js +1 -0
- package/dist/client/assets/chunks/chunk-7FMWBHZO.js +1 -0
- package/dist/client/assets/chunks/chunk-7GFDITUT.js +1 -0
- package/dist/client/assets/chunks/chunk-7H4MLBHI.js +1 -0
- package/dist/client/assets/chunks/chunk-7OJ4MEEB.js +1 -0
- package/dist/client/assets/chunks/chunk-7RSEISFE.js +1 -0
- package/dist/client/assets/chunks/chunk-7YNZZQVT.js +1 -0
- package/dist/client/assets/chunks/chunk-AB7TIL2G.js +1 -0
- package/dist/client/assets/chunks/chunk-ADDF76FL.js +1 -0
- package/dist/client/assets/chunks/chunk-AF6UTCD4.js +321 -0
- package/dist/client/assets/chunks/chunk-AJ2K6ASU.js +1 -0
- package/dist/client/assets/chunks/chunk-AUBAENQZ.js +1 -0
- package/dist/client/assets/chunks/chunk-BJEYVZ65.js +1 -0
- package/dist/client/assets/chunks/chunk-BLRM6LXA.js +1 -0
- package/dist/client/assets/chunks/chunk-BOCTYCDZ.js +1 -0
- package/dist/client/assets/chunks/chunk-BU4VRYN7.js +1 -0
- package/dist/client/assets/chunks/chunk-CALYHV7D.js +1 -0
- package/dist/client/assets/chunks/chunk-CF4W3RZ4.js +1 -0
- package/dist/client/assets/chunks/chunk-DCZ2OBSL.js +1 -0
- package/dist/client/assets/chunks/chunk-DUFPBTHD.js +1 -0
- package/dist/client/assets/chunks/chunk-DUICIQBC.js +88 -0
- package/dist/client/assets/chunks/chunk-EH2N475V.js +1 -0
- package/dist/client/assets/chunks/chunk-EHLLNPZT.js +1 -0
- package/dist/client/assets/chunks/chunk-EIBFAW37.js +1 -0
- package/dist/client/assets/chunks/chunk-EO3ER3GN.js +1 -0
- package/dist/client/assets/chunks/chunk-FH24BIIA.js +1 -0
- package/dist/client/assets/chunks/chunk-FNOXGAL5.js +2 -0
- package/dist/client/assets/chunks/chunk-FTY6WLQF.js +3 -0
- package/dist/client/assets/chunks/chunk-FZFME6UK.js +1 -0
- package/dist/client/assets/chunks/chunk-FZJZZYYO.js +1 -0
- package/dist/client/assets/chunks/chunk-G4Z6L7OO.js +1 -0
- package/dist/client/assets/chunks/chunk-GNCEAN2B.js +1 -0
- package/dist/client/assets/chunks/chunk-GQJIKV3T.js +1 -0
- package/dist/client/assets/chunks/chunk-GUMNOKT2.js +1 -0
- package/dist/client/assets/chunks/chunk-GXRORAF3.js +1 -0
- package/dist/client/assets/chunks/chunk-H36ABDKY.js +1 -0
- package/dist/client/assets/chunks/chunk-HAR5NYVW.js +1 -0
- package/dist/client/assets/chunks/chunk-HIGPS4L2.js +1 -0
- package/dist/client/assets/chunks/chunk-HMOBGTME.js +1 -0
- package/dist/client/assets/chunks/chunk-HNO6SQ7M.js +1 -0
- package/dist/client/assets/chunks/chunk-HYVZ3GYN.js +1 -0
- package/dist/client/assets/chunks/chunk-I6TGFOQS.js +1 -0
- package/dist/client/assets/chunks/chunk-IHIOJK7I.js +1 -0
- package/dist/client/assets/chunks/chunk-IHJNUMSC.js +1 -0
- package/dist/client/assets/chunks/chunk-IP7PB2OC.js +1 -0
- package/dist/client/assets/chunks/chunk-ISDTMH2Y.js +1 -0
- package/dist/client/assets/chunks/chunk-J65M2LNT.js +1 -0
- package/dist/client/assets/chunks/chunk-JCWYZ7X2.js +62 -0
- package/dist/client/assets/chunks/chunk-JENWYTLI.js +1 -0
- package/dist/client/assets/chunks/chunk-JJ6YWJQS.js +1 -0
- package/dist/client/assets/chunks/chunk-JMUVGGX7.js +32 -0
- package/dist/client/assets/chunks/chunk-JNQUFMM4.js +1 -0
- package/dist/client/assets/chunks/chunk-JPTECOAL.js +1 -0
- package/dist/client/assets/chunks/chunk-JZNK4LKS.js +1 -0
- package/dist/client/assets/chunks/chunk-KPNXJBIW.js +1 -0
- package/dist/client/assets/chunks/chunk-KZO2GZL7.js +1 -0
- package/dist/client/assets/chunks/chunk-L2REESOQ.js +1 -0
- package/dist/client/assets/chunks/chunk-LJPJXR7R.js +1 -0
- package/dist/client/assets/chunks/chunk-LOEZMLCI.js +1 -0
- package/dist/client/assets/chunks/chunk-MLYC6FSE.js +1 -0
- package/dist/client/assets/chunks/chunk-MMDGEZYU.js +1 -0
- package/dist/client/assets/chunks/chunk-MYXE7CGE.js +1 -0
- package/dist/client/assets/chunks/chunk-NBH7YOBD.js +15 -0
- package/dist/client/assets/chunks/chunk-NCOVM3YF.js +1 -0
- package/dist/client/assets/chunks/chunk-NCWOBVU7.js +1 -0
- package/dist/client/assets/chunks/chunk-NLRIHHEH.js +1 -0
- package/dist/client/assets/chunks/chunk-NUPEOYK6.js +1 -0
- package/dist/client/assets/chunks/chunk-O4MVOA7X.js +1 -0
- package/dist/client/assets/chunks/chunk-OBHQQZ4H.js +1 -0
- package/dist/client/assets/chunks/chunk-OKPNJIIR.js +1 -0
- package/dist/client/assets/chunks/chunk-OLMPB57R.js +1 -0
- package/dist/client/assets/chunks/chunk-P2FYOAEV.js +1 -0
- package/dist/client/assets/chunks/chunk-PI3SNP4C.js +1 -0
- package/dist/client/assets/chunks/chunk-PRDTEROB.js +1 -0
- package/dist/client/assets/chunks/chunk-PZELHD2H.js +136 -0
- package/dist/client/assets/chunks/chunk-QR2Q34LM.js +1 -0
- package/dist/client/assets/chunks/chunk-R4GIXL6S.js +1 -0
- package/dist/client/assets/chunks/chunk-RORF4F5V.js +1 -0
- package/dist/client/assets/chunks/chunk-S73BYTLL.js +1 -0
- package/dist/client/assets/chunks/chunk-SFC5MRYR.js +1 -0
- package/dist/client/assets/chunks/chunk-SVM2H22K.js +2 -0
- package/dist/client/assets/chunks/chunk-SZ6UCGVD.js +1 -0
- package/dist/client/assets/chunks/chunk-SZYM6GIJ.js +127 -0
- package/dist/client/assets/chunks/chunk-TT5KJZKM.js +1 -0
- package/dist/client/assets/chunks/chunk-UFBKUYNH.js +1 -0
- package/dist/client/assets/chunks/chunk-UL57AD4T.js +1 -0
- package/dist/client/assets/chunks/chunk-UNEI7LMM.js +1 -0
- package/dist/client/assets/chunks/chunk-VNQBBFIY.js +1 -0
- package/dist/client/assets/chunks/chunk-WGVITPII.js +1 -0
- package/dist/client/assets/chunks/chunk-WRA6KJHX.js +10 -0
- package/dist/client/assets/chunks/chunk-WS5EHW43.js +1 -0
- package/dist/client/assets/chunks/chunk-XE6SLBBE.js +3 -0
- package/dist/client/assets/chunks/chunk-XF5T2P7U.js +72 -0
- package/dist/client/assets/chunks/chunk-XFRY5WKO.js +1 -0
- package/dist/client/assets/chunks/chunk-XWYV4OPA.js +1 -0
- package/dist/client/assets/chunks/chunk-YCE5ECKY.js +1 -0
- package/dist/client/assets/chunks/chunk-YIN5CSIF.js +1 -0
- package/dist/client/assets/chunks/chunk-YLFUX6XH.js +1 -0
- package/dist/client/assets/chunks/chunk-YNXJICZM.js +1 -0
- package/dist/client/assets/chunks/chunk-YOHF7NGD.js +1 -0
- package/dist/client/assets/chunks/chunk-YORIST7Z.js +1 -0
- package/dist/client/assets/chunks/chunk-YUL7CG4R.js +1 -0
- package/dist/client/assets/chunks/chunk-YUN7JSFJ.js +2 -0
- package/dist/client/assets/chunks/chunk-YZ7D2IT7.js +1 -0
- package/dist/client/assets/chunks/chunk-Z7LAPMFJ.js +1 -0
- package/dist/client/assets/chunks/chunk-ZE325LPC.js +1 -0
- package/dist/client/assets/chunks/chunk-ZN7TN6PO.js +1 -0
- package/dist/client/assets/chunks/chunk-ZST3EVPO.js +1 -0
- package/dist/client/assets/chunks/chunk-ZZHMDDZN.js +1 -0
- package/dist/client/assets/chunks/clarity-RKRYQ7WF.js +1 -0
- package/dist/client/assets/chunks/classDiagram-v2-L25IHNXF-Y67HVDZV.js +217 -0
- package/dist/client/assets/chunks/clojure-2X2DQECJ.js +1 -0
- package/dist/client/assets/chunks/cmake-LH5524XE.js +1 -0
- package/dist/client/assets/chunks/cobol-7DALQF3W.js +1 -0
- package/dist/client/assets/chunks/codeowners-52SZU5P5.js +1 -0
- package/dist/client/assets/chunks/codeql-EISH3KUP.js +1 -0
- package/dist/client/assets/chunks/coffee-VAWSGA7Y.js +1 -0
- package/dist/client/assets/chunks/common-lisp-4MVK2AN6.js +1 -0
- package/dist/client/assets/chunks/coq-4VRYZRZV.js +1 -0
- package/dist/client/assets/chunks/core-BRBMZSD2.js +12 -0
- package/dist/client/assets/chunks/cose-bilkent-JH36ORCC-BIOOHSAA.js +1 -0
- package/dist/client/assets/chunks/cpp-RFECMSKD.js +1 -0
- package/dist/client/assets/chunks/crystal-ZBGGFAOI.js +1 -0
- package/dist/client/assets/chunks/csharp-BZDPMKKW.js +1 -0
- package/dist/client/assets/chunks/css-3WWGM6UD.js +1 -0
- package/dist/client/assets/chunks/csv-AB4GNWSB.js +1 -0
- package/dist/client/assets/chunks/cue-2E46MZP2.js +1 -0
- package/dist/client/assets/chunks/cynefin-EF2NZ3EQ-TLFQLWUN.js +1 -0
- package/dist/client/assets/chunks/cynefinDiagram-L36ESFBY-FLPXCSSG.js +62 -0
- package/dist/client/assets/chunks/cypher-HR3ILFOL.js +1 -0
- package/dist/client/assets/chunks/d-TARSZPOL.js +1 -0
- package/dist/client/assets/chunks/dagre-SPEB5RXH-7EGEINJ2.js +4 -0
- package/dist/client/assets/chunks/dart-SALLJHVI.js +1 -0
- package/dist/client/assets/chunks/dax-WYMRGMXC.js +1 -0
- package/dist/client/assets/chunks/desktop-ND5CGLLJ.js +1 -0
- package/dist/client/assets/chunks/diagram-3B7GL73J-6USY4HZX.js +200 -0
- package/dist/client/assets/chunks/diagram-DNEMPZML-BNSOC4VW.js +24 -0
- package/dist/client/assets/chunks/diagram-L3MUGCDN-5V5FZYIG.js +41 -0
- package/dist/client/assets/chunks/diagram-LA4NIPWU-25VLY2CO.js +24 -0
- package/dist/client/assets/chunks/diagram-MHCOC4E2-G2LFP3JU.js +3 -0
- package/dist/client/assets/chunks/diagram-XPFHEONP-E6HBBIBV.js +30 -0
- package/dist/client/assets/chunks/diff-PWYGPM7B.js +1 -0
- package/dist/client/assets/chunks/docker-A4D7DT7W.js +1 -0
- package/dist/client/assets/chunks/dotenv-VWQWV2DY.js +1 -0
- package/dist/client/assets/chunks/dream-maker-M5YDQS35.js +1 -0
- package/dist/client/assets/chunks/ebnfDiagram-UZSYDL2S-BMXXZZPI.js +1 -0
- package/dist/client/assets/chunks/edge-3QXIDJHI.js +1 -0
- package/dist/client/assets/chunks/elixir-3OX2UHIZ.js +1 -0
- package/dist/client/assets/chunks/elk-XV6XMXQE-IPR65FON.js +27 -0
- package/dist/client/assets/chunks/elm-CTS65NCT.js +1 -0
- package/dist/client/assets/chunks/emacs-lisp-HHS2IDO7.js +1 -0
- package/dist/client/assets/chunks/engine-javascript-DNHSF67B.js +141 -0
- package/dist/client/assets/chunks/erDiagram-EYBAPDEH-3GEHFWHG.js +99 -0
- package/dist/client/assets/chunks/erb-ICYWK6HS.js +1 -0
- package/dist/client/assets/chunks/erlang-BDQPNCKX.js +1 -0
- package/dist/client/assets/chunks/eventmodeling-K75KTNOO-B27BJTZL.js +1 -0
- package/dist/client/assets/chunks/fennel-4ONBA2PH.js +1 -0
- package/dist/client/assets/chunks/fish-ATLPBZSD.js +1 -0
- package/dist/client/assets/chunks/flowDiagram-MALGAFMO-5PCLR4AE.js +1 -0
- package/dist/client/assets/chunks/fluent-GGMONBVW.js +1 -0
- package/dist/client/assets/chunks/fortran-fixed-form-5MSBDRWQ.js +1 -0
- package/dist/client/assets/chunks/fortran-free-form-TT3RBL75.js +1 -0
- package/dist/client/assets/chunks/fsharp-PAGHNW4O.js +1 -0
- package/dist/client/assets/chunks/ganttDiagram-23REXITY-VE5MVBTO.js +292 -0
- package/dist/client/assets/chunks/gdresource-5OTP326D.js +1 -0
- package/dist/client/assets/chunks/gdscript-VPWHSCLF.js +1 -0
- package/dist/client/assets/chunks/gdshader-FYLPXFE5.js +1 -0
- package/dist/client/assets/chunks/genie-UYMEEMA2.js +1 -0
- package/dist/client/assets/chunks/gherkin-SU7D5DMY.js +1 -0
- package/dist/client/assets/chunks/git-commit-5CF5QAG7.js +1 -0
- package/dist/client/assets/chunks/git-rebase-X72BAUZI.js +1 -0
- package/dist/client/assets/chunks/gitGraph-VSP46ZUC-J6CJ5YZF.js +1 -0
- package/dist/client/assets/chunks/gitGraphDiagram-STJD7YCW-7YJGT6ZP.js +106 -0
- package/dist/client/assets/chunks/gleam-LR42YRKO.js +1 -0
- package/dist/client/assets/chunks/glimmer-js-JPF67FJU.js +1 -0
- package/dist/client/assets/chunks/glimmer-ts-BYPAVIZT.js +1 -0
- package/dist/client/assets/chunks/glsl-GTGUULBN.js +1 -0
- package/dist/client/assets/chunks/gn-NMDQA4K3.js +1 -0
- package/dist/client/assets/chunks/gnuplot-UUAMYBCZ.js +1 -0
- package/dist/client/assets/chunks/go-4RERSTNP.js +1 -0
- package/dist/client/assets/chunks/graphql-5A6RK6YF.js +1 -0
- package/dist/client/assets/chunks/groovy-O7BJONCU.js +1 -0
- package/dist/client/assets/chunks/hack-7QGTNPDP.js +1 -0
- package/dist/client/assets/chunks/haml-ON5GAWN4.js +1 -0
- package/dist/client/assets/chunks/handlebars-6UOQSUBP.js +1 -0
- package/dist/client/assets/chunks/haskell-OIZXZ26Y.js +1 -0
- package/dist/client/assets/chunks/haxe-7FFVS4FO.js +1 -0
- package/dist/client/assets/chunks/hcl-XFUFQJHV.js +1 -0
- package/dist/client/assets/chunks/hjson-QDBHMTD5.js +1 -0
- package/dist/client/assets/chunks/hlsl-4LP25FFN.js +1 -0
- package/dist/client/assets/chunks/html-7RNQXAAV.js +1 -0
- package/dist/client/assets/chunks/html-derivative-ESOY72Q2.js +1 -0
- package/dist/client/assets/chunks/http-SAD4PMBD.js +1 -0
- package/dist/client/assets/chunks/hurl-ZSJJXPQH.js +1 -0
- package/dist/client/assets/chunks/hxml-HJCC37RK.js +1 -0
- package/dist/client/assets/chunks/hy-CLDE3P4K.js +1 -0
- package/dist/client/assets/chunks/imba-REB34U5V.js +1 -0
- package/dist/client/assets/chunks/info-OHQRW6UA-EQQKXR77.js +1 -0
- package/dist/client/assets/chunks/infoDiagram-KBXO4MBG-F6KGZCGS.js +2 -0
- package/dist/client/assets/chunks/ini-PDFEMGRA.js +1 -0
- package/dist/client/assets/chunks/ishikawaDiagram-M35NCXHK-5D6ZOZ34.js +70 -0
- package/dist/client/assets/chunks/java-KB6XENAD.js +1 -0
- package/dist/client/assets/chunks/javascript-3JX5T423.js +1 -0
- package/dist/client/assets/chunks/jinja-V4UNU6K4.js +1 -0
- package/dist/client/assets/chunks/jison-KH5XNLJP.js +1 -0
- package/dist/client/assets/chunks/journeyDiagram-OPLOXDXO-ANDOJZKW.js +139 -0
- package/dist/client/assets/chunks/json-HPXFRRPY.js +1 -0
- package/dist/client/assets/chunks/json5-LJM6TXWM.js +1 -0
- package/dist/client/assets/chunks/jsonc-UZWRU3JV.js +1 -0
- package/dist/client/assets/chunks/jsonl-RFZD5UN4.js +1 -0
- package/dist/client/assets/chunks/jsonnet-GFZABBL6.js +1 -0
- package/dist/client/assets/chunks/jssm-2YIGBISJ.js +1 -0
- package/dist/client/assets/chunks/jsx-KLV2ZWUT.js +1 -0
- package/dist/client/assets/chunks/julia-3TZDIPPO.js +1 -0
- package/dist/client/assets/chunks/just-UHCONBQS.js +1 -0
- package/dist/client/assets/chunks/kanban-definition-BZKZHSQY-GF5I5NVD.js +89 -0
- package/dist/client/assets/chunks/katex-PIN72PQZ.js +257 -0
- package/dist/client/assets/chunks/kdl-DARTFOCL.js +1 -0
- package/dist/client/assets/chunks/kotlin-7KT5DW6Y.js +1 -0
- package/dist/client/assets/chunks/kusto-EKYXZTC5.js +1 -0
- package/dist/client/assets/chunks/langs-GO3UQR4H.js +1 -0
- package/dist/client/assets/chunks/latex-T57MIHR5.js +1 -0
- package/dist/client/assets/chunks/lean-5QVPRMV6.js +1 -0
- package/dist/client/assets/chunks/less-K6QEH5TN.js +1 -0
- package/dist/client/assets/chunks/liquid-3LCNNEIV.js +1 -0
- package/dist/client/assets/chunks/llvm-O32ZIVRF.js +1 -0
- package/dist/client/assets/chunks/log-C4YPJ5BB.js +1 -0
- package/dist/client/assets/chunks/logo-JPMO43A6.js +1 -0
- package/dist/client/assets/chunks/lua-YKVSOG7K.js +1 -0
- package/dist/client/assets/chunks/luau-K4EECYSO.js +1 -0
- package/dist/client/assets/chunks/make-VHSYMHHW.js +1 -0
- package/dist/client/assets/chunks/markdown-GC5J46H4.js +1 -0
- package/dist/client/assets/chunks/marko-U45YFADC.js +1 -0
- package/dist/client/assets/chunks/matlab-AMOKC4LU.js +1 -0
- package/dist/client/assets/chunks/mdc-DIGA2UXP.js +1 -0
- package/dist/client/assets/chunks/mdx-BZUGCKQA.js +1 -0
- package/dist/client/assets/chunks/mermaid-WHDP6ZPA.js +1 -0
- package/dist/client/assets/chunks/mermaid.core-SQMPMUDN.js +10 -0
- package/dist/client/assets/chunks/mindmap-definition-I2QAS2VK-4NH5S56C.js +98 -0
- package/dist/client/assets/chunks/mipsasm-2S4CUGQV.js +1 -0
- package/dist/client/assets/chunks/mojo-ZOL2PNKT.js +1 -0
- package/dist/client/assets/chunks/moonbit-U3BDAIFE.js +1 -0
- package/dist/client/assets/chunks/move-YSXALBWA.js +1 -0
- package/dist/client/assets/chunks/narrat-DHFIAUJH.js +1 -0
- package/dist/client/assets/chunks/nextflow-ESAKNTI3.js +1 -0
- package/dist/client/assets/chunks/nextflow-groovy-FKDSPJUI.js +1 -0
- package/dist/client/assets/chunks/nginx-XYAYERLO.js +1 -0
- package/dist/client/assets/chunks/nim-XOWBVFDH.js +1 -0
- package/dist/client/assets/chunks/nix-RVSTQSHC.js +1 -0
- package/dist/client/assets/chunks/nsis-KMDUKQRL.js +1 -0
- package/dist/client/assets/chunks/nushell-SKJHHZ7U.js +1 -0
- package/dist/client/assets/chunks/objective-c-3B3KXQ7Q.js +1 -0
- package/dist/client/assets/chunks/objective-cpp-6JDULPJS.js +1 -0
- package/dist/client/assets/chunks/ocaml-TMRFXBVO.js +1 -0
- package/dist/client/assets/chunks/odin-IN3PLCK7.js +1 -0
- package/dist/client/assets/chunks/openscad-P52IKPNH.js +1 -0
- package/dist/client/assets/chunks/org-N3SJ2PIA.js +1 -0
- package/dist/client/assets/chunks/packet-JDAUHWVQ-4SWIKSKP.js +1 -0
- package/dist/client/assets/chunks/pascal-T7CUWCQ4.js +1 -0
- package/dist/client/assets/chunks/pegDiagram-FD4XPPHP-WDKZSEGN.js +1 -0
- package/dist/client/assets/chunks/perl-LCZ4KODH.js +1 -0
- package/dist/client/assets/chunks/php-4XHMBVR5.js +1 -0
- package/dist/client/assets/chunks/pie-XZMESJXO-PSSWOWGV.js +1 -0
- package/dist/client/assets/chunks/pieDiagram-J4AKIIQI-BDW5I5ON.js +39 -0
- package/dist/client/assets/chunks/pkl-OACG5B67.js +1 -0
- package/dist/client/assets/chunks/plsql-7E5C7CJX.js +1 -0
- package/dist/client/assets/chunks/po-ZSREFRRP.js +1 -0
- package/dist/client/assets/chunks/polar-4GBINVA7.js +1 -0
- package/dist/client/assets/chunks/postcss-B7RPVGFW.js +1 -0
- package/dist/client/assets/chunks/powerquery-6UFMTY4G.js +1 -0
- package/dist/client/assets/chunks/powershell-3STRPCNT.js +1 -0
- package/dist/client/assets/chunks/prisma-4TPSPIZ5.js +1 -0
- package/dist/client/assets/chunks/prolog-HEAYPKQW.js +1 -0
- package/dist/client/assets/chunks/proto-Y3Y3VKXM.js +1 -0
- package/dist/client/assets/chunks/pug-7PBPMG3M.js +1 -0
- package/dist/client/assets/chunks/puppet-FR35R4OI.js +1 -0
- package/dist/client/assets/chunks/purescript-OUHXQAOW.js +1 -0
- package/dist/client/assets/chunks/python-SNDG7FNU.js +1 -0
- package/dist/client/assets/chunks/qml-UVIOSWP4.js +1 -0
- package/dist/client/assets/chunks/qmldir-6JGUNYL5.js +1 -0
- package/dist/client/assets/chunks/qss-ZCC466IZ.js +1 -0
- package/dist/client/assets/chunks/quadrantDiagram-XTYBLID2-5VKXWVJ6.js +7 -0
- package/dist/client/assets/chunks/r-4XW4O3ZF.js +1 -0
- package/dist/client/assets/chunks/racket-YJAYXOOG.js +1 -0
- package/dist/client/assets/chunks/radar-ABXABTNO-3AXZCEY2.js +1 -0
- package/dist/client/assets/chunks/railroad-I3PHUGI6-2PLXYPOT.js +1 -0
- package/dist/client/assets/chunks/railroad-abnf-LNEFI6M7-M4DGICQX.js +1 -0
- package/dist/client/assets/chunks/railroad-ebnf-DWYD2UWJ-UEIHQMSZ.js +1 -0
- package/dist/client/assets/chunks/railroad-peg-JR7BVNR7-I7VLIBXM.js +1 -0
- package/dist/client/assets/chunks/railroadDiagram-MRQ6NCDL-Y6IYWEFL.js +1 -0
- package/dist/client/assets/chunks/raku-63NEL5JK.js +1 -0
- package/dist/client/assets/chunks/razor-J3CJP523.js +1 -0
- package/dist/client/assets/chunks/rbs-6GQLT7NW.js +1 -0
- package/dist/client/assets/chunks/reg-6Q3OEC2C.js +1 -0
- package/dist/client/assets/chunks/regexp-LPIMILT3.js +1 -0
- package/dist/client/assets/chunks/rel-TOQGUTHB.js +1 -0
- package/dist/client/assets/chunks/requirementDiagram-Y7LWUY3S-CIWXVVWJ.js +84 -0
- package/dist/client/assets/chunks/riscv-UELGBOXE.js +1 -0
- package/dist/client/assets/chunks/ron-FW7LCJJH.js +1 -0
- package/dist/client/assets/chunks/rosmsg-O63VHE3L.js +1 -0
- package/dist/client/assets/chunks/rst-3WJXGLA7.js +1 -0
- package/dist/client/assets/chunks/ruby-7S7L6JTH.js +1 -0
- package/dist/client/assets/chunks/rust-LIK4HRRI.js +1 -0
- package/dist/client/assets/chunks/sankeyDiagram-WGJFYUXA-OGNQPX5V.js +40 -0
- package/dist/client/assets/chunks/sas-FHDPZ2JH.js +1 -0
- package/dist/client/assets/chunks/sass-UI4HW2FN.js +1 -0
- package/dist/client/assets/chunks/scala-KN7RQSUJ.js +1 -0
- package/dist/client/assets/chunks/scheme-5R527YZ5.js +1 -0
- package/dist/client/assets/chunks/scss-KZ6DRE4A.js +1 -0
- package/dist/client/assets/chunks/sdbl-FHOCL5SL.js +1 -0
- package/dist/client/assets/chunks/sequenceDiagram-5NDRBG5M-QX2V24ZU.js +169 -0
- package/dist/client/assets/chunks/shaderlab-2TLHUS2H.js +1 -0
- package/dist/client/assets/chunks/shellscript-PIB6ZBDM.js +1 -0
- package/dist/client/assets/chunks/shellsession-5KL7NFNN.js +1 -0
- package/dist/client/assets/chunks/sizeCapture-INFHLROL-LCS2PIHM.js +1 -0
- package/dist/client/assets/chunks/smalltalk-JFLFU247.js +1 -0
- package/dist/client/assets/chunks/smithy-HONEXZAM.js +1 -0
- package/dist/client/assets/chunks/solidity-SJ3INJFZ.js +1 -0
- package/dist/client/assets/chunks/soy-ND4SWTM2.js +1 -0
- package/dist/client/assets/chunks/sparql-YB2JQBZD.js +1 -0
- package/dist/client/assets/chunks/splunk-UXIDDAWL.js +1 -0
- package/dist/client/assets/chunks/sql-K6OMG7SQ.js +1 -0
- package/dist/client/assets/chunks/ssh-config-I7KJY3KQ.js +1 -0
- package/dist/client/assets/chunks/stata-DNZ3DTFJ.js +1 -0
- package/dist/client/assets/chunks/stateDiagram-v2-FJ4FJNEA-LVAUWF3A.js +291 -0
- package/dist/client/assets/chunks/stylus-GWPR6IQY.js +1 -0
- package/dist/client/assets/chunks/surrealql-KQNHBWLC.js +1 -0
- package/dist/client/assets/chunks/svelte-YQKF25S4.js +1 -0
- package/dist/client/assets/chunks/swift-ZCIZUJXA.js +1 -0
- package/dist/client/assets/chunks/swimlanes-UMQ2AFYF-B3RQOARQ.js +1 -0
- package/dist/client/assets/chunks/swimlanesDiagram-OMPLPG4O-JOE33EOV.js +8 -0
- package/dist/client/assets/chunks/system-verilog-Y7E6FIO3.js +1 -0
- package/dist/client/assets/chunks/systemd-WHC7NBZP.js +1 -0
- package/dist/client/assets/chunks/talonscript-WC7SODAH.js +1 -0
- package/dist/client/assets/chunks/tasl-QHY2GTCB.js +1 -0
- package/dist/client/assets/chunks/tcl-VAMIL5PJ.js +1 -0
- package/dist/client/assets/chunks/temml-ISNSX3VV.js +96 -0
- package/dist/client/assets/chunks/templ-B3BHKWV4.js +1 -0
- package/dist/client/assets/chunks/terraform-Q4UEK6FK.js +1 -0
- package/dist/client/assets/chunks/tex-63OWCYAB.js +1 -0
- package/dist/client/assets/chunks/timeline-definition-SEUHKTQE-FDFTVAJG.js +120 -0
- package/dist/client/assets/chunks/toml-7Z4IPGES.js +1 -0
- package/dist/client/assets/chunks/treeView-D4JQ5SDB-ABSGRAGI.js +1 -0
- package/dist/client/assets/chunks/treemap-SAJKECNS-MYX2CBJN.js +1 -0
- package/dist/client/assets/chunks/ts-tags-DT62HE52.js +1 -0
- package/dist/client/assets/chunks/tsv-RTXHWADP.js +1 -0
- package/dist/client/assets/chunks/tsx-UANUBOC7.js +1 -0
- package/dist/client/assets/chunks/turtle-QVOUNUUL.js +1 -0
- package/dist/client/assets/chunks/twig-ZPC4BPDA.js +1 -0
- package/dist/client/assets/chunks/typescript-WGWKIMMW.js +1 -0
- package/dist/client/assets/chunks/typespec-TYCVR32J.js +1 -0
- package/dist/client/assets/chunks/typst-PIBFYUO6.js +1 -0
- package/dist/client/assets/chunks/usecaseDiagram-AFA6YXN4-KW7ADINR.js +370 -0
- package/dist/client/assets/chunks/v-3ERNWBSP.js +1 -0
- package/dist/client/assets/chunks/vala-UCBCT2GS.js +1 -0
- package/dist/client/assets/chunks/vb-DGI3VTPA.js +1 -0
- package/dist/client/assets/chunks/vennDiagram-NNMJR3RB-RDGLGOGM.js +34 -0
- package/dist/client/assets/chunks/verilog-G72NZROS.js +1 -0
- package/dist/client/assets/chunks/vhdl-PYGA77XE.js +1 -0
- package/dist/client/assets/chunks/viml-OOC5B5UU.js +1 -0
- package/dist/client/assets/chunks/vue-GTNHIOPG.js +1 -0
- package/dist/client/assets/chunks/vue-html-DKAMJV55.js +1 -0
- package/dist/client/assets/chunks/vue-vine-WTM5HREV.js +1 -0
- package/dist/client/assets/chunks/vyper-RHYEHOJM.js +1 -0
- package/dist/client/assets/chunks/wardley-7MLQ67FV-QJL2HSBT.js +1 -0
- package/dist/client/assets/chunks/wardleyDiagram-S7YFUSEH-A4XX3UJR.js +78 -0
- package/dist/client/assets/chunks/wasm-ZMM2Z5XV.js +1 -0
- package/dist/client/assets/chunks/wenyan-HF5UTKSJ.js +1 -0
- package/dist/client/assets/chunks/wgsl-O7D7OPO7.js +1 -0
- package/dist/client/assets/chunks/wikitext-T7BSWSKQ.js +1 -0
- package/dist/client/assets/chunks/wit-TKCHPPT6.js +1 -0
- package/dist/client/assets/chunks/wolfram-7MN66A7N.js +1 -0
- package/dist/client/assets/chunks/xml-NLTLAWOD.js +1 -0
- package/dist/client/assets/chunks/xsl-NZ4ECK3P.js +1 -0
- package/dist/client/assets/chunks/xychartDiagram-GGNKY7IX-OXJILWHR.js +7 -0
- package/dist/client/assets/chunks/yaml-HRJLEV3V.js +1 -0
- package/dist/client/assets/chunks/zenscript-4LLRSLPI.js +1 -0
- package/dist/client/assets/chunks/zig-Y7MUQFUO.js +1 -0
- package/dist/client/assets/icon.svg +1 -0
- package/dist/client/assets/main.js +254 -0
- package/dist/client/index.html +59 -0
- package/dist/diff.js +119 -0
- package/dist/fs/files.js +233 -0
- package/dist/fs/git.js +369 -0
- package/dist/fs/glob.js +89 -0
- package/dist/fs/notes.js +368 -0
- package/dist/fs/search.js +136 -0
- package/dist/fs/watch.js +69 -0
- package/dist/fs/zip.js +100 -0
- package/dist/hooks.js +65 -0
- package/dist/http.js +81 -0
- package/dist/hub/atomic.js +77 -0
- package/dist/hub/notify.js +239 -0
- package/dist/hub/registry.js +219 -0
- package/dist/mcp.js +500 -0
- package/dist/q/agent.js +215 -0
- package/dist/q/model.js +633 -0
- package/dist/q/schema.js +133 -0
- package/dist/q/store.js +413 -0
- package/dist/r/model.js +323 -0
- package/dist/r/schema.js +53 -0
- package/dist/r/store.js +489 -0
- package/dist/server.js +246 -0
- package/dist/settings.js +30 -0
- package/dist/workspace.js +639 -0
- package/package.json +73 -4
- package/schema/questions.schema.json +1670 -0
- package/schema/reviews.schema.json +151 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
|
|
6
|
+
<meta name="theme-color" content="#f8f8fb" media="(prefers-color-scheme: light)" />
|
|
7
|
+
<meta name="theme-color" content="#16171c" media="(prefers-color-scheme: dark)" />
|
|
8
|
+
<meta name="referrer" content="no-referrer" />
|
|
9
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
10
|
+
<meta name="apple-mobile-web-app-title" content="hitl" />
|
|
11
|
+
<title>hitl — Human In The Loop</title>
|
|
12
|
+
<link rel="icon" href="assets/icon.svg" />
|
|
13
|
+
<link rel="apple-touch-icon" href="assets/icon.svg" />
|
|
14
|
+
<link rel="manifest" href="manifest.webmanifest" />
|
|
15
|
+
<link rel="stylesheet" href="assets/app.css" />
|
|
16
|
+
<script>
|
|
17
|
+
// the saved theme before anything draws, so a dark page never flashes white
|
|
18
|
+
try {
|
|
19
|
+
const t = localStorage.getItem('hitl:theme');
|
|
20
|
+
if (t === 'light' || t === 'dark') document.documentElement.dataset.theme = t;
|
|
21
|
+
} catch {}
|
|
22
|
+
</script>
|
|
23
|
+
</head>
|
|
24
|
+
<body data-view="">
|
|
25
|
+
<div class="shell">
|
|
26
|
+
<header class="bar" id="bar">
|
|
27
|
+
<a class="brand" id="home" href="#/" title="Everything waiting on you (Human In The Loop)">
|
|
28
|
+
<span class="logo"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="7.5" r="3.2" /><path d="M5.5 20a6.5 6.5 0 0 1 13 0" /><path d="M19.5 4.5a9 9 0 0 1 0 6M4.5 4.5a9 9 0 0 0 0 6" /></svg></span><b>hitl</b><span class="count" id="inbox-count" hidden>0</span>
|
|
29
|
+
</a>
|
|
30
|
+
<button class="proj-pick" id="proj" type="button" hidden><span class="proj-mark" id="proj-mark"></span><span class="proj-label" id="proj-name"></span><span id="proj-caret"></span></button>
|
|
31
|
+
<nav class="nav-tabs" id="tabs" aria-label="Sections">
|
|
32
|
+
<a class="nav-tab" data-tab="inbox" id="tab-inbox"><span class="tab-ic"></span><span class="tab-label">Inbox</span><span class="count" id="proj-count" hidden>0</span></a>
|
|
33
|
+
<a class="nav-tab" data-tab="files" id="tab-files"><span class="tab-ic"></span><span class="tab-label">Files</span></a>
|
|
34
|
+
<a class="nav-tab" data-tab="changes" id="changes-btn"><span class="tab-ic"></span><span class="tab-label">Changes</span><span class="count" id="changes-count" hidden>0</span></a>
|
|
35
|
+
<a class="nav-tab" data-tab="notes" id="review-btn"><span class="tab-ic"></span><span class="tab-label">Notes</span><span class="count warn" id="review-count" hidden>0</span></a>
|
|
36
|
+
<a class="nav-tab" data-tab="decisions" id="tab-decisions"><span class="tab-ic"></span><span class="tab-label">Decisions</span></a>
|
|
37
|
+
</nav>
|
|
38
|
+
<span id="branch"></span>
|
|
39
|
+
<form class="search" id="search-form" role="search">
|
|
40
|
+
<span id="search-icon"></span>
|
|
41
|
+
<input id="q" type="search" placeholder="Search in files" aria-label="Search in files" autocomplete="off" spellcheck="false" enterkeyhint="search" />
|
|
42
|
+
<button type="button" class="chip" id="scope">everywhere</button>
|
|
43
|
+
</form>
|
|
44
|
+
<nav class="bar-acts">
|
|
45
|
+
<button class="icon-btn" id="qo-btn" title="Go to a file (Ctrl+P)" aria-label="Go to a file"></button>
|
|
46
|
+
<button class="icon-btn" id="settings-btn" title="Settings" aria-label="Settings"></button>
|
|
47
|
+
<span class="live" id="live" title="Live: updates as things change"></span>
|
|
48
|
+
</nav>
|
|
49
|
+
</header>
|
|
50
|
+
<div class="app page" id="app">
|
|
51
|
+
<aside class="tree" aria-label="Folders"><ul class="roots" id="tree"></ul></aside>
|
|
52
|
+
<div class="splitter-wrap"><div class="splitter" id="splitter" title="Drag to resize"></div></div>
|
|
53
|
+
<section class="main" id="main" aria-live="polite"><div class="skeleton" style="height: 120px; margin: 24px"></div></section>
|
|
54
|
+
<section class="file" id="file" aria-label="File" hidden></section>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<script type="module" src="assets/main.js"></script>
|
|
58
|
+
</body>
|
|
59
|
+
</html>
|
package/dist/diff.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// A line diff (Myers' O(ND) algorithm) written as a unified diff: for "changed since shown" (a file against its
|
|
2
|
+
// snapshot) and for before/after text in a review, where there is no git to ask.
|
|
3
|
+
/** the edit script from a to b, as kept / removed / added lines */
|
|
4
|
+
export function diffLines(a, b, maxD = 4000) {
|
|
5
|
+
// trim the common start and end: most edits are small, and this keeps the search tiny
|
|
6
|
+
let start = 0;
|
|
7
|
+
while (start < a.length && start < b.length && a[start] === b[start])
|
|
8
|
+
start++;
|
|
9
|
+
let endA = a.length, endB = b.length;
|
|
10
|
+
while (endA > start && endB > start && a[endA - 1] === b[endB - 1]) {
|
|
11
|
+
endA--;
|
|
12
|
+
endB--;
|
|
13
|
+
}
|
|
14
|
+
const A = a.slice(start, endA), B = b.slice(start, endB);
|
|
15
|
+
const head = a.slice(0, start).map((line) => ({ t: ' ', line }));
|
|
16
|
+
const tail = a.slice(endA).map((line) => ({ t: ' ', line }));
|
|
17
|
+
const N = A.length, M = B.length;
|
|
18
|
+
const max = N + M;
|
|
19
|
+
if (!N || !M)
|
|
20
|
+
return [...head, ...A.map((line) => ({ t: '-', line })), ...B.map((line) => ({ t: '+', line })), ...tail];
|
|
21
|
+
const off = max;
|
|
22
|
+
const v = new Int32Array(2 * max + 2);
|
|
23
|
+
const trace = [];
|
|
24
|
+
let found = -1;
|
|
25
|
+
for (let d = 0; d <= Math.min(max, maxD); d++) {
|
|
26
|
+
trace.push(v.slice());
|
|
27
|
+
for (let k = -d; k <= d; k += 2) {
|
|
28
|
+
let x = k === -d || (k !== d && (v[off + k - 1] ?? 0) < (v[off + k + 1] ?? 0)) ? (v[off + k + 1] ?? 0) : (v[off + k - 1] ?? 0) + 1;
|
|
29
|
+
let y = x - k;
|
|
30
|
+
while (x < N && y < M && A[x] === B[y]) {
|
|
31
|
+
x++;
|
|
32
|
+
y++;
|
|
33
|
+
}
|
|
34
|
+
v[off + k] = x;
|
|
35
|
+
if (x >= N && y >= M) {
|
|
36
|
+
found = d;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (found >= 0)
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
if (found < 0) {
|
|
44
|
+
// too different to be worth the search: everything out, everything in
|
|
45
|
+
return [...head, ...A.map((line) => ({ t: '-', line })), ...B.map((line) => ({ t: '+', line })), ...tail];
|
|
46
|
+
}
|
|
47
|
+
const ops = [];
|
|
48
|
+
let x = N, y = M;
|
|
49
|
+
for (let d = found; d > 0; d--) {
|
|
50
|
+
const vv = trace[d];
|
|
51
|
+
const k = x - y;
|
|
52
|
+
const prevK = k === -d || (k !== d && (vv[off + k - 1] ?? 0) < (vv[off + k + 1] ?? 0)) ? k + 1 : k - 1;
|
|
53
|
+
const prevX = vv[off + prevK] ?? 0;
|
|
54
|
+
const prevY = prevX - prevK;
|
|
55
|
+
while (x > prevX && y > prevY) {
|
|
56
|
+
ops.push({ t: ' ', line: A[--x] ?? '' });
|
|
57
|
+
y--;
|
|
58
|
+
}
|
|
59
|
+
if (x === prevX)
|
|
60
|
+
ops.push({ t: '+', line: B[--y] ?? '' });
|
|
61
|
+
else
|
|
62
|
+
ops.push({ t: '-', line: A[--x] ?? '' });
|
|
63
|
+
}
|
|
64
|
+
while (x > 0 && y > 0) {
|
|
65
|
+
ops.push({ t: ' ', line: A[--x] ?? '' });
|
|
66
|
+
y--;
|
|
67
|
+
}
|
|
68
|
+
ops.reverse();
|
|
69
|
+
return [...head, ...ops, ...tail];
|
|
70
|
+
}
|
|
71
|
+
/** a unified diff of two texts ("" when they're the same) */
|
|
72
|
+
export function unifiedDiff(before, after, nameA = 'before', nameB = 'after', context = 3) {
|
|
73
|
+
const a = before.replace(/\r\n/g, '\n').split('\n');
|
|
74
|
+
const b = after.replace(/\r\n/g, '\n').split('\n');
|
|
75
|
+
const ops = diffLines(a, b);
|
|
76
|
+
if (!ops.some((o) => o.t !== ' '))
|
|
77
|
+
return '';
|
|
78
|
+
const out = [`--- a/${nameA}`, `+++ b/${nameB}`];
|
|
79
|
+
// walk the script, cutting it into hunks with `context` kept lines around each change
|
|
80
|
+
let i = 0;
|
|
81
|
+
let oa = 1, ob = 1;
|
|
82
|
+
const pos = ops.map((o) => {
|
|
83
|
+
const p = { a: oa, b: ob };
|
|
84
|
+
if (o.t !== '+')
|
|
85
|
+
oa++;
|
|
86
|
+
if (o.t !== '-')
|
|
87
|
+
ob++;
|
|
88
|
+
return p;
|
|
89
|
+
});
|
|
90
|
+
while (i < ops.length) {
|
|
91
|
+
while (i < ops.length && ops[i]?.t === ' ')
|
|
92
|
+
i++;
|
|
93
|
+
if (i >= ops.length)
|
|
94
|
+
break;
|
|
95
|
+
const from = Math.max(0, i - context);
|
|
96
|
+
let to = i;
|
|
97
|
+
let calm = 0;
|
|
98
|
+
while (to < ops.length) {
|
|
99
|
+
if (ops[to]?.t === ' ') {
|
|
100
|
+
calm++;
|
|
101
|
+
if (calm > context * 2)
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
else
|
|
105
|
+
calm = 0;
|
|
106
|
+
to++;
|
|
107
|
+
}
|
|
108
|
+
to = Math.min(ops.length, to - Math.max(0, calm - context));
|
|
109
|
+
const hunk = ops.slice(from, to);
|
|
110
|
+
const p = pos[from] ?? { a: 1, b: 1 };
|
|
111
|
+
const na = hunk.filter((o) => o.t !== '+').length;
|
|
112
|
+
const nb = hunk.filter((o) => o.t !== '-').length;
|
|
113
|
+
out.push(`@@ -${na ? p.a : p.a - 1},${na} +${nb ? p.b : p.b - 1},${nb} @@`);
|
|
114
|
+
for (const o of hunk)
|
|
115
|
+
out.push(o.t + o.line);
|
|
116
|
+
i = to;
|
|
117
|
+
}
|
|
118
|
+
return out.join('\n') + '\n';
|
|
119
|
+
}
|
package/dist/fs/files.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// Paths inside the served folder, what is hidden, folder listings and raw file serving (with ranges).
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
/** Folders a search or a file list skips when git can't say what is ignored. */
|
|
5
|
+
export const NOISE = new Set(['node_modules', '.git', '.hg', '.svn', '.next', '.cache', '.turbo', '__pycache__', '.venv']);
|
|
6
|
+
export function isSecret(name) {
|
|
7
|
+
if (name.startsWith('.env') && name !== '.env.example' && name !== '.env.sample')
|
|
8
|
+
return true;
|
|
9
|
+
if (/^id_(rsa|dsa|ecdsa|ed25519)(\.|$)/.test(name))
|
|
10
|
+
return true;
|
|
11
|
+
return /\.(key|pem|p12|pfx|keystore)$/i.test(name);
|
|
12
|
+
}
|
|
13
|
+
export function isHidden(scope, name) {
|
|
14
|
+
return scope.hidden.has(name) || (scope.hideSecrets && isSecret(name));
|
|
15
|
+
}
|
|
16
|
+
/** A root-relative path with forward slashes, no leading slash. */
|
|
17
|
+
export function toRel(scope, abs) {
|
|
18
|
+
return path.relative(scope.root, abs).split(path.sep).join('/');
|
|
19
|
+
}
|
|
20
|
+
/** The absolute path for a root-relative one, or undefined when it leaves the root or touches something hidden. */
|
|
21
|
+
export function inside(scope, rel) {
|
|
22
|
+
const clean = rel.replace(/\\/g, '/');
|
|
23
|
+
const abs = path.resolve(scope.root, '.' + path.sep + clean);
|
|
24
|
+
if (abs !== scope.root && !abs.startsWith(scope.root + path.sep))
|
|
25
|
+
return undefined;
|
|
26
|
+
const parts = path.relative(scope.root, abs).split(path.sep).filter(Boolean);
|
|
27
|
+
if (parts.some((p) => isHidden(scope, p)))
|
|
28
|
+
return undefined;
|
|
29
|
+
if (parts.length && scope.excluded(parts.join('/')))
|
|
30
|
+
return undefined;
|
|
31
|
+
// a link may point outside the root: follow it and check again
|
|
32
|
+
try {
|
|
33
|
+
const real = fs.realpathSync(abs);
|
|
34
|
+
const realRoot = fs.realpathSync(scope.root);
|
|
35
|
+
if (real !== realRoot && !real.startsWith(realRoot + path.sep))
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// missing files are fine here (a deleted file's diff); the caller checks existence
|
|
40
|
+
}
|
|
41
|
+
return abs;
|
|
42
|
+
}
|
|
43
|
+
export function list(scope, rel) {
|
|
44
|
+
const abs = inside(scope, rel);
|
|
45
|
+
if (abs === undefined)
|
|
46
|
+
return undefined;
|
|
47
|
+
let dirents;
|
|
48
|
+
try {
|
|
49
|
+
dirents = fs.readdirSync(abs, { withFileTypes: true });
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return dirents
|
|
55
|
+
.filter((e) => {
|
|
56
|
+
if (isHidden(scope, e.name))
|
|
57
|
+
return false;
|
|
58
|
+
const dir = toRel(scope, abs);
|
|
59
|
+
return !scope.excluded(dir ? dir + '/' + e.name : e.name, e.isDirectory());
|
|
60
|
+
})
|
|
61
|
+
.flatMap((e) => {
|
|
62
|
+
try {
|
|
63
|
+
const st = fs.statSync(path.join(abs, e.name));
|
|
64
|
+
const entry = { name: e.name, type: st.isDirectory() ? 'folder' : 'file', size: st.size, mtime: st.mtimeMs };
|
|
65
|
+
if (e.isSymbolicLink())
|
|
66
|
+
entry.link = true;
|
|
67
|
+
return [entry];
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return []; // a broken link, or removed while listing
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export const RAW_TYPES = {
|
|
75
|
+
png: 'image/png',
|
|
76
|
+
jpg: 'image/jpeg',
|
|
77
|
+
jpeg: 'image/jpeg',
|
|
78
|
+
gif: 'image/gif',
|
|
79
|
+
webp: 'image/webp',
|
|
80
|
+
avif: 'image/avif',
|
|
81
|
+
svg: 'image/svg+xml',
|
|
82
|
+
ico: 'image/x-icon',
|
|
83
|
+
bmp: 'image/bmp',
|
|
84
|
+
mp3: 'audio/mpeg',
|
|
85
|
+
ogg: 'audio/ogg',
|
|
86
|
+
oga: 'audio/ogg',
|
|
87
|
+
wav: 'audio/wav',
|
|
88
|
+
flac: 'audio/flac',
|
|
89
|
+
m4a: 'audio/mp4',
|
|
90
|
+
aac: 'audio/aac',
|
|
91
|
+
opus: 'audio/ogg',
|
|
92
|
+
mp4: 'video/mp4',
|
|
93
|
+
m4v: 'video/mp4',
|
|
94
|
+
webm: 'video/webm',
|
|
95
|
+
ogv: 'video/ogg',
|
|
96
|
+
mov: 'video/quicktime',
|
|
97
|
+
pdf: 'application/pdf',
|
|
98
|
+
woff: 'font/woff',
|
|
99
|
+
woff2: 'font/woff2',
|
|
100
|
+
ttf: 'font/ttf',
|
|
101
|
+
otf: 'font/otf',
|
|
102
|
+
json: 'application/json; charset=utf-8',
|
|
103
|
+
wasm: 'application/wasm',
|
|
104
|
+
};
|
|
105
|
+
/** Any file the page shows: never run as a page on this origin (except a sandboxed HTML preview). */
|
|
106
|
+
const RAW_CSP = "default-src 'none'; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self'; font-src 'self'";
|
|
107
|
+
/** An HTML preview: sandboxed (no scripts, its own origin), may load its own images and styles. */
|
|
108
|
+
const PREVIEW_CSP = "sandbox; default-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'none'";
|
|
109
|
+
export function serveRaw(scope, rel, req, res, asPage) {
|
|
110
|
+
const abs = inside(scope, rel);
|
|
111
|
+
let st;
|
|
112
|
+
try {
|
|
113
|
+
st = abs === undefined ? undefined : fs.statSync(abs);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
st = undefined;
|
|
117
|
+
}
|
|
118
|
+
if (abs === undefined || st === undefined || !st.isFile()) {
|
|
119
|
+
res.writeHead(404, { 'content-type': 'text/plain' }).end('not found');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const ext = path.extname(abs).slice(1).toLowerCase();
|
|
123
|
+
const type = asPage && /^html?$/.test(ext) ? 'text/html; charset=utf-8' : (RAW_TYPES[ext] ?? 'text/plain; charset=utf-8');
|
|
124
|
+
// the browser keeps a copy and asks again cheaply: unchanged files answer 304 with no body
|
|
125
|
+
const etag = `W/"${st.size.toString(36)}-${Math.floor(st.mtimeMs).toString(36)}"`;
|
|
126
|
+
if (req.headers['if-none-match'] === etag && !req.headers.range) {
|
|
127
|
+
res.writeHead(304, { etag, 'cache-control': 'no-cache' }).end();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const headers = {
|
|
131
|
+
'content-type': type,
|
|
132
|
+
'cache-control': 'no-cache',
|
|
133
|
+
etag,
|
|
134
|
+
'accept-ranges': 'bytes',
|
|
135
|
+
'x-content-type-options': 'nosniff',
|
|
136
|
+
'content-security-policy': asPage ? PREVIEW_CSP : RAW_CSP,
|
|
137
|
+
};
|
|
138
|
+
const range = /^bytes=(\d*)-(\d*)$/.exec(String(req.headers.range ?? ''));
|
|
139
|
+
if (range && (range[1] || range[2])) {
|
|
140
|
+
let start = range[1] ? Number(range[1]) : Math.max(0, st.size - Number(range[2]));
|
|
141
|
+
let end = range[1] && range[2] ? Number(range[2]) : st.size - 1;
|
|
142
|
+
end = Math.min(end, st.size - 1);
|
|
143
|
+
if (start > end || start >= st.size) {
|
|
144
|
+
res.writeHead(416, { 'content-range': `bytes */${st.size}` }).end();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
start = Math.max(0, start);
|
|
148
|
+
res.writeHead(206, { ...headers, 'content-range': `bytes ${start}-${end}/${st.size}`, 'content-length': String(end - start + 1) });
|
|
149
|
+
if (req.method === 'HEAD')
|
|
150
|
+
return void res.end();
|
|
151
|
+
fs.createReadStream(abs, { start, end }).pipe(res);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
res.writeHead(200, { ...headers, 'content-length': String(st.size) });
|
|
155
|
+
if (req.method === 'HEAD')
|
|
156
|
+
return void res.end();
|
|
157
|
+
fs.createReadStream(abs).pipe(res);
|
|
158
|
+
}
|
|
159
|
+
/** Every file under the root (root-relative), skipping hidden names and the usual noise folders. */
|
|
160
|
+
export function walk(scope, limit = 200_000) {
|
|
161
|
+
const out = [];
|
|
162
|
+
const stack = [''];
|
|
163
|
+
while (stack.length && out.length < limit) {
|
|
164
|
+
const rel = stack.pop() ?? '';
|
|
165
|
+
let dirents;
|
|
166
|
+
try {
|
|
167
|
+
dirents = fs.readdirSync(path.join(scope.root, rel), { withFileTypes: true });
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
for (const d of dirents) {
|
|
173
|
+
if (isHidden(scope, d.name) || NOISE.has(d.name))
|
|
174
|
+
continue;
|
|
175
|
+
const p = rel ? rel + '/' + d.name : d.name;
|
|
176
|
+
if (scope.excluded(p, d.isDirectory()))
|
|
177
|
+
continue;
|
|
178
|
+
if (d.isDirectory())
|
|
179
|
+
stack.push(p);
|
|
180
|
+
else if (d.isFile())
|
|
181
|
+
out.push(p);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return out.sort();
|
|
185
|
+
}
|
|
186
|
+
/** A text file's contents (for a review item or a question's file block), cut to a line range if asked. */
|
|
187
|
+
export function readText(scope, rel, lines, maxBytes) {
|
|
188
|
+
const abs = inside(scope, rel);
|
|
189
|
+
if (!abs)
|
|
190
|
+
return { error: 'Not available', status: 404 };
|
|
191
|
+
let st;
|
|
192
|
+
try {
|
|
193
|
+
st = fs.statSync(abs);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return { error: `No file ${rel}`, status: 404 };
|
|
197
|
+
}
|
|
198
|
+
if (!st.isFile())
|
|
199
|
+
return { error: `${rel} isn't a file`, status: 400 };
|
|
200
|
+
const buf = readHead(abs, lines ? Math.max(maxBytes, 50 * 1048576) : maxBytes);
|
|
201
|
+
if (buf.subarray(0, 8000).includes(0))
|
|
202
|
+
return { error: `${rel} is a binary file`, status: 415 };
|
|
203
|
+
let text = buf.toString('utf8');
|
|
204
|
+
const all = text.split(/\r?\n/);
|
|
205
|
+
const m = /^(\d+)(?:-(\d+))?$/.exec(lines);
|
|
206
|
+
let first = 1;
|
|
207
|
+
if (m) {
|
|
208
|
+
first = Math.max(1, Number(m[1]));
|
|
209
|
+
const last = Math.min(all.length, m[2] ? Number(m[2]) : first);
|
|
210
|
+
text = all.slice(first - 1, last).join('\n');
|
|
211
|
+
}
|
|
212
|
+
const truncated = !m && st.size > maxBytes;
|
|
213
|
+
return { text, size: st.size, first, total: all.length, truncated, mtime: st.mtimeMs };
|
|
214
|
+
}
|
|
215
|
+
/** the first `max` bytes of a file, without reading the rest */
|
|
216
|
+
export function readHead(abs, max) {
|
|
217
|
+
const fd = fs.openSync(abs, 'r');
|
|
218
|
+
try {
|
|
219
|
+
const size = fs.fstatSync(fd).size;
|
|
220
|
+
const buf = Buffer.alloc(Math.min(size, max));
|
|
221
|
+
let off = 0;
|
|
222
|
+
while (off < buf.length) {
|
|
223
|
+
const n = fs.readSync(fd, buf, off, buf.length - off, off);
|
|
224
|
+
if (!n)
|
|
225
|
+
break;
|
|
226
|
+
off += n;
|
|
227
|
+
}
|
|
228
|
+
return buf.subarray(0, off);
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
fs.closeSync(fd);
|
|
232
|
+
}
|
|
233
|
+
}
|