@mquan/mochi 0.1.0
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/README.md +154 -0
- package/dist/bin/mochi.d.ts +3 -0
- package/dist/bin/mochi.d.ts.map +1 -0
- package/dist/bin/mochi.js +74 -0
- package/dist/bin/mochi.js.map +1 -0
- package/dist/bin/tsconfig.tsbuildinfo +1 -0
- package/dist/server/analysis/git-context.d.ts +12 -0
- package/dist/server/analysis/git-context.d.ts.map +1 -0
- package/dist/server/analysis/git-context.js +151 -0
- package/dist/server/analysis/git-context.js.map +1 -0
- package/dist/server/analysis/grammars.d.ts +3 -0
- package/dist/server/analysis/grammars.d.ts.map +1 -0
- package/dist/server/analysis/grammars.js +32 -0
- package/dist/server/analysis/grammars.js.map +1 -0
- package/dist/server/analysis/index.d.ts +8 -0
- package/dist/server/analysis/index.d.ts.map +1 -0
- package/dist/server/analysis/index.js +86 -0
- package/dist/server/analysis/index.js.map +1 -0
- package/dist/server/analysis/tree-sitter.d.ts +20 -0
- package/dist/server/analysis/tree-sitter.d.ts.map +1 -0
- package/dist/server/analysis/tree-sitter.js +126 -0
- package/dist/server/analysis/tree-sitter.js.map +1 -0
- package/dist/server/analysis/ts-morph.d.ts +17 -0
- package/dist/server/analysis/ts-morph.d.ts.map +1 -0
- package/dist/server/analysis/ts-morph.js +143 -0
- package/dist/server/analysis/ts-morph.js.map +1 -0
- package/dist/server/analysis/types.d.ts +7 -0
- package/dist/server/analysis/types.d.ts.map +1 -0
- package/dist/server/analysis/types.js +9 -0
- package/dist/server/analysis/types.js.map +1 -0
- package/dist/server/api.d.ts +14 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +121 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/diagram/cache.d.ts +23 -0
- package/dist/server/diagram/cache.d.ts.map +1 -0
- package/dist/server/diagram/cache.js +158 -0
- package/dist/server/diagram/cache.js.map +1 -0
- package/dist/server/diagram/endpoint.d.ts +21 -0
- package/dist/server/diagram/endpoint.d.ts.map +1 -0
- package/dist/server/diagram/endpoint.js +426 -0
- package/dist/server/diagram/endpoint.js.map +1 -0
- package/dist/server/diagram/generate.d.ts +220 -0
- package/dist/server/diagram/generate.d.ts.map +1 -0
- package/dist/server/diagram/generate.js +605 -0
- package/dist/server/diagram/generate.js.map +1 -0
- package/dist/server/diagram/prompt-version.d.ts +2 -0
- package/dist/server/diagram/prompt-version.d.ts.map +1 -0
- package/dist/server/diagram/prompt-version.js +47 -0
- package/dist/server/diagram/prompt-version.js.map +1 -0
- package/dist/server/diagram/prompts/diagram-spec.md +315 -0
- package/dist/server/diagram/scope-resolver.d.ts +44 -0
- package/dist/server/diagram/scope-resolver.d.ts.map +1 -0
- package/dist/server/diagram/scope-resolver.js +198 -0
- package/dist/server/diagram/scope-resolver.js.map +1 -0
- package/dist/server/diagram/spawn.d.ts +18 -0
- package/dist/server/diagram/spawn.d.ts.map +1 -0
- package/dist/server/diagram/spawn.js +103 -0
- package/dist/server/diagram/spawn.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/input/path-selector.d.ts +8 -0
- package/dist/server/input/path-selector.d.ts.map +1 -0
- package/dist/server/input/path-selector.js +45 -0
- package/dist/server/input/path-selector.js.map +1 -0
- package/dist/server/server.d.ts +14 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +79 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/tsconfig.tsbuildinfo +1 -0
- package/dist/shared/analysis-schema.d.ts +120 -0
- package/dist/shared/analysis-schema.d.ts.map +1 -0
- package/dist/shared/analysis-schema.js +43 -0
- package/dist/shared/analysis-schema.js.map +1 -0
- package/dist/shared/design/index.d.ts +6 -0
- package/dist/shared/design/index.d.ts.map +1 -0
- package/dist/shared/design/index.js +7 -0
- package/dist/shared/design/index.js.map +1 -0
- package/dist/shared/design/kinds.d.ts +26 -0
- package/dist/shared/design/kinds.d.ts.map +1 -0
- package/dist/shared/design/kinds.js +141 -0
- package/dist/shared/design/kinds.js.map +1 -0
- package/dist/shared/design/lenses.d.ts +11 -0
- package/dist/shared/design/lenses.d.ts.map +1 -0
- package/dist/shared/design/lenses.js +36 -0
- package/dist/shared/design/lenses.js.map +1 -0
- package/dist/shared/design/node-styles.d.ts +24 -0
- package/dist/shared/design/node-styles.d.ts.map +1 -0
- package/dist/shared/design/node-styles.js +150 -0
- package/dist/shared/design/node-styles.js.map +1 -0
- package/dist/shared/design/prompt-fragments.d.ts +4 -0
- package/dist/shared/design/prompt-fragments.d.ts.map +1 -0
- package/dist/shared/design/prompt-fragments.js +45 -0
- package/dist/shared/design/prompt-fragments.js.map +1 -0
- package/dist/shared/design/tokens.d.ts +102 -0
- package/dist/shared/design/tokens.d.ts.map +1 -0
- package/dist/shared/design/tokens.js +110 -0
- package/dist/shared/design/tokens.js.map +1 -0
- package/dist/shared/diagram-spec.d.ts +914 -0
- package/dist/shared/diagram-spec.d.ts.map +1 -0
- package/dist/shared/diagram-spec.js +173 -0
- package/dist/shared/diagram-spec.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/tsconfig.tsbuildinfo +1 -0
- package/dist/web/assets/abap-BdImnpbu.js +1 -0
- package/dist/web/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/web/assets/ada-bCR0ucgS.js +1 -0
- package/dist/web/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/web/assets/angular-html-DMxchsRu.js +1 -0
- package/dist/web/assets/angular-ts-DzOHUlBM.js +1 -0
- package/dist/web/assets/apache-Pmp26Uib.js +1 -0
- package/dist/web/assets/apex-D8_7TLub.js +1 -0
- package/dist/web/assets/apl-dKokRX4l.js +1 -0
- package/dist/web/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/web/assets/ara-BRHolxvo.js +1 -0
- package/dist/web/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/web/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/web/assets/astro-CbQHKStN.js +1 -0
- package/dist/web/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/web/assets/awk-DMzUqQB5.js +1 -0
- package/dist/web/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/web/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/web/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/web/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/web/assets/bat-BkioyH1T.js +1 -0
- package/dist/web/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/web/assets/berry-uYugtg8r.js +1 -0
- package/dist/web/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/web/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/web/assets/bird2-DPOp833l.js +1 -0
- package/dist/web/assets/blade-D4QpJJKB.js +1 -0
- package/dist/web/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/web/assets/c-BIGW1oBm.js +1 -0
- package/dist/web/assets/c3-eo99z4R2.js +1 -0
- package/dist/web/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/web/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/web/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/web/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/web/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/web/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/web/assets/clarity-D53aC0YG.js +1 -0
- package/dist/web/assets/clojure-P80f7IUj.js +1 -0
- package/dist/web/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/web/assets/cobol-nwyudZeR.js +1 -0
- package/dist/web/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/web/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/web/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/web/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/web/assets/coq-DkFqJrB1.js +1 -0
- package/dist/web/assets/cpp-CofmeUqb.js +1 -0
- package/dist/web/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/web/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/web/assets/css-DPfMkruS.js +1 -0
- package/dist/web/assets/csv-fuZLfV_i.js +1 -0
- package/dist/web/assets/cue-D82EKSYY.js +1 -0
- package/dist/web/assets/cypher-COkxafJQ.js +1 -0
- package/dist/web/assets/d-85-TOEBH.js +1 -0
- package/dist/web/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/web/assets/dart-CF10PKvl.js +1 -0
- package/dist/web/assets/dax-CEL-wOlO.js +1 -0
- package/dist/web/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/web/assets/diff-D97Zzqfu.js +1 -0
- package/dist/web/assets/docker-BcOcwvcX.js +1 -0
- package/dist/web/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/web/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/web/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/web/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/web/assets/edge-BkV0erSs.js +1 -0
- package/dist/web/assets/elixir-CDX3lj18.js +1 -0
- package/dist/web/assets/elm-DbKCFpqz.js +1 -0
- package/dist/web/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/web/assets/erb-B12qg9BL.js +1 -0
- package/dist/web/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/web/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/web/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/web/assets/fennel-BYunw83y.js +1 -0
- package/dist/web/assets/fish-BvzEVeQv.js +1 -0
- package/dist/web/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/web/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/web/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/web/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/web/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/web/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/web/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/web/assets/genie-D0YGMca9.js +1 -0
- package/dist/web/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/web/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/web/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/web/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/web/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/web/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/web/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/web/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/web/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/web/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/web/assets/gleam-BspZqrRM.js +1 -0
- package/dist/web/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/web/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/web/assets/glsl-DplSGwfg.js +1 -0
- package/dist/web/assets/gn-n2N0HUVH.js +1 -0
- package/dist/web/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/web/assets/go-CxLEBnE3.js +1 -0
- package/dist/web/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/web/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/web/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/web/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/web/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/web/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/web/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/web/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/web/assets/hack-CaT9iCJl.js +1 -0
- package/dist/web/assets/haml-B8DHNrY2.js +1 -0
- package/dist/web/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/web/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/web/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/web/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/web/assets/hjson-D5-asLiD.js +1 -0
- package/dist/web/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/web/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/web/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/web/assets/houston-DnULxvSX.js +1 -0
- package/dist/web/assets/html-GMplVEZG.js +1 -0
- package/dist/web/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/web/assets/http-jrhK8wxY.js +1 -0
- package/dist/web/assets/hurl-irOxFIW8.js +1 -0
- package/dist/web/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/web/assets/hy-DFXneXwc.js +1 -0
- package/dist/web/assets/imba-DGztddWO.js +1 -0
- package/dist/web/assets/index-B4-Q-CcM.js +88 -0
- package/dist/web/assets/index-DtQV41FL.css +1 -0
- package/dist/web/assets/ini-BEwlwnbL.js +1 -0
- package/dist/web/assets/java-CylS5w8V.js +1 -0
- package/dist/web/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/web/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/web/assets/jison-wvAkD_A8.js +1 -0
- package/dist/web/assets/json-Cp-IABpG.js +1 -0
- package/dist/web/assets/json5-C9tS-k6U.js +1 -0
- package/dist/web/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/web/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/web/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/web/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/web/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/web/assets/julia-CxzCAyBv.js +1 -0
- package/dist/web/assets/just-Cw27pwNe.js +1 -0
- package/dist/web/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/web/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/web/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/web/assets/kdl-DV7GczEv.js +1 -0
- package/dist/web/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/web/assets/kusto-DZf3V79B.js +1 -0
- package/dist/web/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/web/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/web/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/web/assets/less-B1dDrJ26.js +1 -0
- package/dist/web/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/web/assets/liquid-DYVedYrR.js +1 -0
- package/dist/web/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/web/assets/log-2UxHyX5q.js +1 -0
- package/dist/web/assets/logo-BtOb2qkB.js +1 -0
- package/dist/web/assets/lua-BaeVxFsk.js +1 -0
- package/dist/web/assets/luau-C-HG3fhB.js +1 -0
- package/dist/web/assets/make-CHLpvVh8.js +1 -0
- package/dist/web/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/web/assets/marko-CnJfTvn9.js +1 -0
- package/dist/web/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/web/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/web/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/web/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/web/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/web/assets/matlab-D7o27uSR.js +1 -0
- package/dist/web/assets/mdc-BMNejdWA.js +1 -0
- package/dist/web/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/web/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/web/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/web/assets/min-light-CTRr51gU.js +1 -0
- package/dist/web/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/web/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/web/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/web/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/web/assets/move-IF9eRakj.js +1 -0
- package/dist/web/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/web/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/web/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/web/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/web/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/web/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/web/assets/nim-CVrawwO9.js +1 -0
- package/dist/web/assets/nix-CwoSXNpI.js +1 -0
- package/dist/web/assets/nord-Ddv68eIx.js +1 -0
- package/dist/web/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/web/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/web/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/web/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/web/assets/odin-BBf5iR-q.js +1 -0
- package/dist/web/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/web/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/web/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/web/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/web/assets/perl-C0TMdlhV.js +1 -0
- package/dist/web/assets/php-Dhbhpdrm.js +1 -0
- package/dist/web/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/web/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/web/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/web/assets/po-BTJTHyun.js +1 -0
- package/dist/web/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/web/assets/polar-C0HS_06l.js +1 -0
- package/dist/web/assets/postcss-CXtECtnM.js +1 -0
- package/dist/web/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/web/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/web/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/web/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/web/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/web/assets/pug-CGlum2m_.js +1 -0
- package/dist/web/assets/puppet-BMWR74SV.js +1 -0
- package/dist/web/assets/purescript-CklMAg4u.js +1 -0
- package/dist/web/assets/python-B6aJPvgy.js +1 -0
- package/dist/web/assets/qml-3beO22l8.js +1 -0
- package/dist/web/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/web/assets/qss-IeuSbFQv.js +1 -0
- package/dist/web/assets/r-Dspwwk_N.js +1 -0
- package/dist/web/assets/racket-BqYA7rlc.js +1 -0
- package/dist/web/assets/raku-DXvB9xmW.js +1 -0
- package/dist/web/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/web/assets/red-bN70gL4F.js +1 -0
- package/dist/web/assets/reg-C-SQnVFl.js +1 -0
- package/dist/web/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/web/assets/rel-C3B-1QV4.js +1 -0
- package/dist/web/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/web/assets/ron-D8l8udqQ.js +1 -0
- package/dist/web/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/web/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/web/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/web/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/web/assets/rst-BrH8l1NY.js +1 -0
- package/dist/web/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/web/assets/rust-B1yitclQ.js +1 -0
- package/dist/web/assets/sas-cz2c8ADy.js +1 -0
- package/dist/web/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/web/assets/scala-C151Ov-r.js +1 -0
- package/dist/web/assets/scheme-C98Dy4si.js +1 -0
- package/dist/web/assets/scss-OYdSNvt2.js +1 -0
- package/dist/web/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/web/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/web/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/web/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/web/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/web/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/web/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/web/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/web/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/web/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/web/assets/solidity-rGO070M0.js +1 -0
- package/dist/web/assets/soy-Brmx7dQM.js +1 -0
- package/dist/web/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/web/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/web/assets/sql-BLtJtn59.js +1 -0
- package/dist/web/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/web/assets/stata-BH5u7GGu.js +1 -0
- package/dist/web/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/web/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/web/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/web/assets/swift-D82vCrfD.js +1 -0
- package/dist/web/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/web/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/web/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/web/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/web/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/web/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/web/assets/templ-P3uqSqPl.js +1 -0
- package/dist/web/assets/terraform-BETggiCN.js +1 -0
- package/dist/web/assets/tex-idrVyKtj.js +1 -0
- package/dist/web/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/web/assets/toml-vGWfd6FD.js +1 -0
- package/dist/web/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/web/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/web/assets/tsx-COt5Ahok.js +1 -0
- package/dist/web/assets/turtle-BsS91CYL.js +1 -0
- package/dist/web/assets/twig-DNn4PbVi.js +1 -0
- package/dist/web/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/web/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/web/assets/typst-DHCkPAjA.js +1 -0
- package/dist/web/assets/v-BcVCzyr7.js +1 -0
- package/dist/web/assets/vala-CsfeWuGM.js +1 -0
- package/dist/web/assets/vb-D17OF-Vu.js +1 -0
- package/dist/web/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/web/assets/vesper-DU1UobuO.js +1 -0
- package/dist/web/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/web/assets/viml-CJc9bBzg.js +1 -0
- package/dist/web/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/web/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/web/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/web/assets/vue-DN_0RTcg.js +1 -0
- package/dist/web/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/web/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/web/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/web/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/web/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/web/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/web/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/web/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/web/assets/wit-5i3qLPDT.js +1 -0
- package/dist/web/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/web/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/web/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/web/assets/yaml-Buea-lGh.js +1 -0
- package/dist/web/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/web/assets/zig-VOosw3JB.js +1 -0
- package/dist/web/index.html +13 -0
- package/package.json +56 -0
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
// Streaming structured-output generation of a DiagramSpec via the `claude`
|
|
2
|
+
// CLI as a subprocess. Replaces the @anthropic-ai/sdk path so mochi can reuse
|
|
3
|
+
// the user's Claude Code session — no separate ANTHROPIC_API_KEY required.
|
|
4
|
+
//
|
|
5
|
+
// Public surface: `generateDiagram(args, opts?)` — an async generator that
|
|
6
|
+
// yields PartialDiagramSpec values and a final fully-validated DiagramSpec.
|
|
7
|
+
// The signature is unchanged from the SDK era; endpoint.ts and the m2.5 UI
|
|
8
|
+
// consume it the same way.
|
|
9
|
+
//
|
|
10
|
+
// Runtime flow:
|
|
11
|
+
//
|
|
12
|
+
// args ─▶ buildPrompt ─▶ spawner.spawn({command: "claude",
|
|
13
|
+
// │ args: [-p, prompt,
|
|
14
|
+
// │ --output-format stream-json,
|
|
15
|
+
// │ --include-partial-messages,
|
|
16
|
+
// │ --verbose,
|
|
17
|
+
// │ --json-schema <DIAGRAM_JSON_SCHEMA>,
|
|
18
|
+
// │ --max-turns 2,
|
|
19
|
+
// │ --model <model>]})
|
|
20
|
+
// │ │
|
|
21
|
+
// │ ├─▶ readline(stdout)
|
|
22
|
+
// │ │ └─▶ for each stream-json envelope:
|
|
23
|
+
// │ │ ├─ accumulate input_json_delta.partial_json
|
|
24
|
+
// │ │ │ └─ try JSON.parse(buf) → parsePartialDiagramSpec
|
|
25
|
+
// │ │ │ └─ yield partial (rare; only at clean JSON boundaries)
|
|
26
|
+
// │ │ └─ on result envelope:
|
|
27
|
+
// │ │ ├─ is_error: true → mapCliError + throw
|
|
28
|
+
// │ │ └─ structured_output → parseDiagramSpec → yield final
|
|
29
|
+
// │ │
|
|
30
|
+
// │ └─▶ exitCode resolves
|
|
31
|
+
// │ ├─ ENOENT → LlmAuthError (claude not on PATH)
|
|
32
|
+
// │ ├─ AbortSignal → StreamAbortedError
|
|
33
|
+
// │ ├─ own timeout fired → LlmTimeoutError
|
|
34
|
+
// │ └─ exit !=0 → mapCliError(stderr, code)
|
|
35
|
+
//
|
|
36
|
+
// Retry: only before the first yield, only for LlmTimeoutError / LlmRateLimitError.
|
|
37
|
+
// Mid-stream errors propagate (a retry would visibly rewind the consumer's state).
|
|
38
|
+
//
|
|
39
|
+
// Known regression vs SDK era: per-token partial yields are rare because the
|
|
40
|
+
// CLI's input_json_delta chunks only parse as JSON at clean structural
|
|
41
|
+
// boundaries — and a DiagramSpec is one big root object that only closes at
|
|
42
|
+
// the end. In practice we usually yield ONE final value. The endpoint.ts SSE
|
|
43
|
+
// loop handles single-yield gracefully (emits only `event: complete`, no
|
|
44
|
+
// `event: partial`). Restoring per-token streaming is a follow-up task.
|
|
45
|
+
import { readFile } from "node:fs/promises";
|
|
46
|
+
import path from "node:path";
|
|
47
|
+
import { fileURLToPath } from "node:url";
|
|
48
|
+
import readline from "node:readline";
|
|
49
|
+
import { DiagramSpecValidationError, parseDiagramSpec, parsePartialDiagramSpec, } from "../../shared/diagram-spec.js";
|
|
50
|
+
import { ALL_NODE_KINDS, ALL_EDGE_KINDS, } from "../../shared/design/index.js";
|
|
51
|
+
import { PROMPT_VERSION } from "./prompt-version.js";
|
|
52
|
+
import { defaultSpawner } from "./spawn.js";
|
|
53
|
+
export { DiagramSpecValidationError };
|
|
54
|
+
// Sonnet, not opus: ~2-3× faster (10-20s typical) at quality good enough for
|
|
55
|
+
// DiagramSpec structured output. Opus's extra nuance shows up in long-form
|
|
56
|
+
// reasoning; for a constrained-schema JSON emission it's mostly waste. User
|
|
57
|
+
// can override per-request via the `model` field on /api/diagram.
|
|
58
|
+
const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
59
|
+
// Hint, not enforced — the CLI doesn't take a direct max_tokens flag. Kept for
|
|
60
|
+
// API compatibility with the SDK era so endpoint.ts doesn't need to know.
|
|
61
|
+
const DEFAULT_MAX_TOKENS = 16384;
|
|
62
|
+
// We don't pass --max-turns. claude CLI's default is fine for our pattern
|
|
63
|
+
// (fully-formed prompt + --json-schema → one structured emission). Earlier
|
|
64
|
+
// commits set it explicitly (2, then 6) because t6 smoke-testing showed
|
|
65
|
+
// --max-turns 1 errored even on success — but that's a property of the CLI's
|
|
66
|
+
// internal turn counting, not a real mochi need. There's no legitimate
|
|
67
|
+
// scenario where Claude should agentic-loop here (no --add-dir, no tools
|
|
68
|
+
// beyond StructuredOutput); if Claude is hitting the default cap, the
|
|
69
|
+
// prompt has a bug worth investigating, not silencing with a higher cap.
|
|
70
|
+
const RETRY_BACKOFF_MS = [250, 1000];
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Typed errors (provider-agnostic since we go through claude CLI now)
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
export class LlmTimeoutError extends Error {
|
|
75
|
+
constructor(message, options) {
|
|
76
|
+
super(message, options);
|
|
77
|
+
this.name = "LlmTimeoutError";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class LlmRateLimitError extends Error {
|
|
81
|
+
constructor(message, options) {
|
|
82
|
+
super(message, options);
|
|
83
|
+
this.name = "LlmRateLimitError";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export class LlmAuthError extends Error {
|
|
87
|
+
constructor(message, options) {
|
|
88
|
+
super(message, options);
|
|
89
|
+
this.name = "LlmAuthError";
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class LlmNetworkError extends Error {
|
|
93
|
+
constructor(message, options) {
|
|
94
|
+
super(message, options);
|
|
95
|
+
this.name = "LlmNetworkError";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export class LlmInternalError extends Error {
|
|
99
|
+
constructor(message, options) {
|
|
100
|
+
super(message, options);
|
|
101
|
+
this.name = "LlmInternalError";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class StreamAbortedError extends Error {
|
|
105
|
+
constructor() {
|
|
106
|
+
super("diagram generation aborted");
|
|
107
|
+
this.name = "StreamAbortedError";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Thrown if buildPrompt() finishes with unsubstituted {{...}} placeholders
|
|
111
|
+
// still in the template. A surface to catch typos in placeholder names
|
|
112
|
+
// before they reach the LLM (Claude would otherwise see literal "{{intent}}"
|
|
113
|
+
// and either echo it back or hallucinate around it).
|
|
114
|
+
export class PromptTemplateError extends Error {
|
|
115
|
+
constructor(message, options) {
|
|
116
|
+
super(message, options);
|
|
117
|
+
this.name = "PromptTemplateError";
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// JSON Schema for `--json-schema` arg
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// Top-level shape that claude CLI will enforce on its structured_output. This
|
|
124
|
+
// is the same schema we previously passed to the Anthropic SDK as the tool's
|
|
125
|
+
// input_schema. MUST remain a compile-time constant — never let user input
|
|
126
|
+
// flow into this value (it goes into the subprocess argv).
|
|
127
|
+
export const DIAGRAM_JSON_SCHEMA = {
|
|
128
|
+
type: "object",
|
|
129
|
+
properties: {
|
|
130
|
+
lens: {
|
|
131
|
+
type: "string",
|
|
132
|
+
enum: ["flow", "architecture", "state", "protocol"],
|
|
133
|
+
},
|
|
134
|
+
scope: {
|
|
135
|
+
type: "object",
|
|
136
|
+
properties: {
|
|
137
|
+
files: { type: "array", items: { type: "string" } },
|
|
138
|
+
intent: { type: "string" },
|
|
139
|
+
},
|
|
140
|
+
required: ["files"],
|
|
141
|
+
},
|
|
142
|
+
nodes: {
|
|
143
|
+
type: "array",
|
|
144
|
+
items: {
|
|
145
|
+
type: "object",
|
|
146
|
+
properties: {
|
|
147
|
+
id: { type: "string" },
|
|
148
|
+
label: { type: "string" },
|
|
149
|
+
// Flat enum across all lenses. Lens-correctness (i.e., a `flow`
|
|
150
|
+
// spec may only use FLOW_NODE_KINDS) is enforced at parse time
|
|
151
|
+
// by zod's superRefine on DiagramSpecSchema — see
|
|
152
|
+
// shared/diagram-spec.ts. Two-layer enforcement: CLI structured
|
|
153
|
+
// output nudges Claude here; zod is the authoritative gate.
|
|
154
|
+
kind: { type: "string", enum: [...ALL_NODE_KINDS] },
|
|
155
|
+
code_anchor: {
|
|
156
|
+
type: "object",
|
|
157
|
+
properties: {
|
|
158
|
+
file: { type: "string" },
|
|
159
|
+
range: {
|
|
160
|
+
type: "array",
|
|
161
|
+
items: { type: "integer" },
|
|
162
|
+
minItems: 2,
|
|
163
|
+
maxItems: 2,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
required: ["file", "range"],
|
|
167
|
+
},
|
|
168
|
+
metadata: { type: "object" },
|
|
169
|
+
},
|
|
170
|
+
required: ["id", "label", "kind"],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
edges: {
|
|
174
|
+
type: "array",
|
|
175
|
+
items: {
|
|
176
|
+
type: "object",
|
|
177
|
+
properties: {
|
|
178
|
+
id: { type: "string" },
|
|
179
|
+
from: { type: "string" },
|
|
180
|
+
to: { type: "string" },
|
|
181
|
+
label: { type: "string" },
|
|
182
|
+
kind: { type: "string", enum: [...ALL_EDGE_KINDS] },
|
|
183
|
+
},
|
|
184
|
+
required: ["id", "from", "to"],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
steps: {
|
|
188
|
+
type: "array",
|
|
189
|
+
items: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
id: { type: "string" },
|
|
193
|
+
narration: { type: "string" },
|
|
194
|
+
highlight: {
|
|
195
|
+
type: "object",
|
|
196
|
+
properties: {
|
|
197
|
+
nodes: { type: "array", items: { type: "string" } },
|
|
198
|
+
edges: { type: "array", items: { type: "string" } },
|
|
199
|
+
},
|
|
200
|
+
required: ["nodes", "edges"],
|
|
201
|
+
},
|
|
202
|
+
code_focus: {
|
|
203
|
+
type: "object",
|
|
204
|
+
properties: {
|
|
205
|
+
file: { type: "string" },
|
|
206
|
+
range: {
|
|
207
|
+
type: "array",
|
|
208
|
+
items: { type: "integer" },
|
|
209
|
+
minItems: 2,
|
|
210
|
+
maxItems: 2,
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
required: ["file", "range"],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
required: ["id", "narration", "highlight"],
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
alternative_lenses: {
|
|
220
|
+
type: "array",
|
|
221
|
+
items: {
|
|
222
|
+
type: "object",
|
|
223
|
+
properties: {
|
|
224
|
+
lens: {
|
|
225
|
+
type: "string",
|
|
226
|
+
enum: ["flow", "architecture", "state", "protocol"],
|
|
227
|
+
},
|
|
228
|
+
reason: { type: "string" },
|
|
229
|
+
},
|
|
230
|
+
required: ["lens", "reason"],
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
generated_at: { type: "string" },
|
|
234
|
+
prompt_version: { type: "string" },
|
|
235
|
+
model: { type: "string" },
|
|
236
|
+
},
|
|
237
|
+
required: [
|
|
238
|
+
"lens",
|
|
239
|
+
"scope",
|
|
240
|
+
"nodes",
|
|
241
|
+
"edges",
|
|
242
|
+
"steps",
|
|
243
|
+
"alternative_lenses",
|
|
244
|
+
"generated_at",
|
|
245
|
+
"prompt_version",
|
|
246
|
+
"model",
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
// Readable TS-shape excerpt embedded in the prompt (distinct from the
|
|
250
|
+
// JSON-Schema above which goes to the CLI as an argv).
|
|
251
|
+
const PROMPT_SCHEMA_EXCERPT = `interface DiagramSpec {
|
|
252
|
+
lens: 'flow' | 'architecture' | 'state' | 'protocol';
|
|
253
|
+
scope: { files: string[]; intent?: string };
|
|
254
|
+
nodes: Array<{
|
|
255
|
+
id: string;
|
|
256
|
+
label: string;
|
|
257
|
+
kind: string;
|
|
258
|
+
code_anchor?: { file: string; range: [number, number] };
|
|
259
|
+
metadata?: Record<string, unknown>;
|
|
260
|
+
}>;
|
|
261
|
+
edges: Array<{
|
|
262
|
+
id: string;
|
|
263
|
+
from: string;
|
|
264
|
+
to: string;
|
|
265
|
+
label?: string;
|
|
266
|
+
kind?: string;
|
|
267
|
+
}>;
|
|
268
|
+
steps: Array<{
|
|
269
|
+
id: string;
|
|
270
|
+
narration: string;
|
|
271
|
+
highlight: { nodes: string[]; edges: string[] };
|
|
272
|
+
code_focus?: { file: string; range: [number, number] };
|
|
273
|
+
}>;
|
|
274
|
+
alternative_lenses: Array<{
|
|
275
|
+
lens: 'flow' | 'architecture' | 'state' | 'protocol';
|
|
276
|
+
reason: string;
|
|
277
|
+
}>;
|
|
278
|
+
generated_at: string; // ISO-8601 with offset
|
|
279
|
+
prompt_version: string; // emit "" — the server overwrites this
|
|
280
|
+
model: string;
|
|
281
|
+
}`;
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// Prompt building (unchanged from SDK era)
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
let cachedTemplate = null;
|
|
286
|
+
async function loadPromptTemplate() {
|
|
287
|
+
if (cachedTemplate !== null)
|
|
288
|
+
return cachedTemplate;
|
|
289
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
290
|
+
const templatePath = path.join(here, "prompts", "diagram-spec.md");
|
|
291
|
+
cachedTemplate = await readFile(templatePath, "utf8");
|
|
292
|
+
return cachedTemplate;
|
|
293
|
+
}
|
|
294
|
+
function renderScopeSummary(scope) {
|
|
295
|
+
const n = scope.files.length;
|
|
296
|
+
const list = scope.files.map((f) => f.path);
|
|
297
|
+
const shown = list.slice(0, 20).join(", ");
|
|
298
|
+
const overflow = list.length > 20 ? `, ...and ${list.length - 20} more` : "";
|
|
299
|
+
return `${n} file${n === 1 ? "" : "s"}: ${shown}${overflow}`;
|
|
300
|
+
}
|
|
301
|
+
function renderFiles(scope) {
|
|
302
|
+
return scope.files
|
|
303
|
+
.map((f) => `\n### ${f.path}\n\n\`\`\`${f.language ?? ""}\n${f.content}\n\`\`\`\n`)
|
|
304
|
+
.join("");
|
|
305
|
+
}
|
|
306
|
+
export async function buildPrompt(args) {
|
|
307
|
+
const tpl = await loadPromptTemplate();
|
|
308
|
+
// Substitute all NON-file placeholders first so the survivors check can run
|
|
309
|
+
// on the template-controlled surface alone. Critically, {{files}} substitution
|
|
310
|
+
// is deferred until AFTER the check — embedded file content (e.g. this very
|
|
311
|
+
// file's comments referencing {{foo}}, {{intent}}, etc.) would otherwise be
|
|
312
|
+
// misread as unsubstituted template placeholders and trip the safety throw.
|
|
313
|
+
//
|
|
314
|
+
// replaceAll (not replace) — {{generated_at}} and {{model}} each appear
|
|
315
|
+
// twice in the template (Step 9 mentions them in instructional text in
|
|
316
|
+
// addition to the Inputs block). The placeholder-survivor check below
|
|
317
|
+
// would otherwise throw on the second occurrence.
|
|
318
|
+
const partial = tpl
|
|
319
|
+
.replaceAll("{{scope_summary}}", renderScopeSummary(args.scope))
|
|
320
|
+
.replaceAll("{{intent}}", args.intent ?? "(no intent provided)")
|
|
321
|
+
.replaceAll("{{schema}}", PROMPT_SCHEMA_EXCERPT)
|
|
322
|
+
.replaceAll("{{generated_at}}", args.generated_at)
|
|
323
|
+
.replaceAll("{{model}}", args.model);
|
|
324
|
+
// Defense-in-depth: every {{...}} in the loaded prompt (excluding files,
|
|
325
|
+
// which is substituted next) must be substituted here. If anything remains,
|
|
326
|
+
// the loaded template carried an unexpected placeholder (most likely a typo
|
|
327
|
+
// in scripts/gen-prompt.ts). Surface it rather than ship a literal "{{foo}}"
|
|
328
|
+
// to Claude. The check runs BEFORE {{files}} substitution so that user code
|
|
329
|
+
// happening to contain {{...}} strings does not trip this.
|
|
330
|
+
const survivors = partial.match(/\{\{[A-Za-z_]+\}\}/g);
|
|
331
|
+
if (survivors && survivors.length > 0) {
|
|
332
|
+
// Filter out {{files}} — it's the one placeholder we intentionally haven't
|
|
333
|
+
// substituted yet. Surfacing it here would just confuse the diagnostic.
|
|
334
|
+
const real = survivors.filter((p) => p !== "{{files}}");
|
|
335
|
+
if (real.length > 0) {
|
|
336
|
+
throw new PromptTemplateError(`unsubstituted prompt placeholders at runtime: ${[...new Set(real)].join(", ")}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Now safe to embed file content; any {{...}} strings inside it are
|
|
340
|
+
// intentional user-code content, not template placeholders.
|
|
341
|
+
return partial.replaceAll("{{files}}", renderFiles(args.scope));
|
|
342
|
+
}
|
|
343
|
+
// Categorize an error haystack (stderr text + envelope.errors + envelope.result)
|
|
344
|
+
// into one of our typed errors. Order matters: most-specific patterns first.
|
|
345
|
+
function mapCliError(haystack, exitCode) {
|
|
346
|
+
if (/not logged in|please run.*\/login|not authenticated|unauthor/i.test(haystack)) {
|
|
347
|
+
return new LlmAuthError(haystack.trim() ||
|
|
348
|
+
"claude CLI is not authenticated. Run `claude /login`.");
|
|
349
|
+
}
|
|
350
|
+
if (/session limit|usage limit|rate limit|quota|\b429\b/i.test(haystack)) {
|
|
351
|
+
return new LlmRateLimitError(haystack.trim() || "rate limit reached");
|
|
352
|
+
}
|
|
353
|
+
if (/timeout|timed out|exceeded/i.test(haystack)) {
|
|
354
|
+
return new LlmTimeoutError(haystack.trim() || "claude CLI timed out");
|
|
355
|
+
}
|
|
356
|
+
if (/network|connection|ECONN|ENETUNREACH|EAI_AGAIN|fetch failed|getaddrinfo/i.test(haystack)) {
|
|
357
|
+
return new LlmNetworkError(haystack.trim() || "claude CLI network error");
|
|
358
|
+
}
|
|
359
|
+
if (haystack.trim() === "") {
|
|
360
|
+
return new LlmInternalError(`claude exited ${String(exitCode)}, no stderr`);
|
|
361
|
+
}
|
|
362
|
+
return new LlmInternalError(haystack.slice(0, 500));
|
|
363
|
+
}
|
|
364
|
+
// ---------------------------------------------------------------------------
|
|
365
|
+
// Abort-respecting sleep
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
function sleepWithAbort(ms, signal) {
|
|
368
|
+
return new Promise((resolve, reject) => {
|
|
369
|
+
if (signal?.aborted) {
|
|
370
|
+
reject(new StreamAbortedError());
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const timer = setTimeout(() => {
|
|
374
|
+
signal?.removeEventListener("abort", onAbort);
|
|
375
|
+
resolve();
|
|
376
|
+
}, ms);
|
|
377
|
+
const onAbort = () => {
|
|
378
|
+
clearTimeout(timer);
|
|
379
|
+
reject(new StreamAbortedError());
|
|
380
|
+
};
|
|
381
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
export async function* generateDiagram(args, opts = {}) {
|
|
385
|
+
if (args.signal?.aborted) {
|
|
386
|
+
throw new StreamAbortedError();
|
|
387
|
+
}
|
|
388
|
+
const model = args.model ?? DEFAULT_MODEL;
|
|
389
|
+
// maxTokens is currently advisory only — the CLI doesn't expose a direct
|
|
390
|
+
// max_tokens flag. Held in the API for future use and to keep the public
|
|
391
|
+
// interface symmetric with the SDK era.
|
|
392
|
+
void (opts.maxTokens ?? DEFAULT_MAX_TOKENS);
|
|
393
|
+
const generated_at = new Date().toISOString();
|
|
394
|
+
const prompt = await buildPrompt({
|
|
395
|
+
scope: args.scope,
|
|
396
|
+
intent: args.intent,
|
|
397
|
+
generated_at,
|
|
398
|
+
model,
|
|
399
|
+
});
|
|
400
|
+
const spawner = opts.spawner ?? defaultSpawner;
|
|
401
|
+
let hasYieldedAny = false;
|
|
402
|
+
let attempt = 0;
|
|
403
|
+
while (true) {
|
|
404
|
+
try {
|
|
405
|
+
// Drive runOnce manually rather than `yield*` so we can flip
|
|
406
|
+
// `hasYieldedAny` after each yield. yield* would obscure that signal,
|
|
407
|
+
// and we need it for the retry guard (mid-stream errors must not retry
|
|
408
|
+
// because retrying would visibly rewind the consumer's partial state).
|
|
409
|
+
const iter = runOnce({ prompt, model, spawner, signal: args.signal });
|
|
410
|
+
while (true) {
|
|
411
|
+
const next = await iter.next();
|
|
412
|
+
if (next.done)
|
|
413
|
+
return;
|
|
414
|
+
hasYieldedAny = true;
|
|
415
|
+
yield next.value;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch (err) {
|
|
419
|
+
let mapped = err instanceof Error ? err : new Error(String(err));
|
|
420
|
+
if (args.signal?.aborted) {
|
|
421
|
+
mapped = new StreamAbortedError();
|
|
422
|
+
}
|
|
423
|
+
// Terminal errors — never retry.
|
|
424
|
+
if (mapped instanceof StreamAbortedError ||
|
|
425
|
+
mapped instanceof DiagramSpecValidationError ||
|
|
426
|
+
mapped instanceof LlmAuthError) {
|
|
427
|
+
throw mapped;
|
|
428
|
+
}
|
|
429
|
+
// Only retry timeouts and rate-limits, only before any partial yielded,
|
|
430
|
+
// and only within the backoff budget.
|
|
431
|
+
const retryable = mapped instanceof LlmTimeoutError ||
|
|
432
|
+
mapped instanceof LlmRateLimitError;
|
|
433
|
+
if (!retryable || hasYieldedAny || attempt >= RETRY_BACKOFF_MS.length) {
|
|
434
|
+
throw mapped;
|
|
435
|
+
}
|
|
436
|
+
const waitMs = RETRY_BACKOFF_MS[attempt];
|
|
437
|
+
console.warn(`mochi: generateDiagram: ${mapped.name} on attempt ${attempt + 1}, ` +
|
|
438
|
+
`retrying in ${waitMs}ms`);
|
|
439
|
+
await sleepWithAbort(waitMs, args.signal);
|
|
440
|
+
attempt++;
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// runOnce drives a single subprocess invocation: spawn, parse the stream-json
|
|
446
|
+
// envelope sequence, yield partials/final. Caller (generateDiagram) handles
|
|
447
|
+
// retry.
|
|
448
|
+
async function* runOnce(args) {
|
|
449
|
+
const argv = [
|
|
450
|
+
"-p",
|
|
451
|
+
args.prompt,
|
|
452
|
+
"--output-format",
|
|
453
|
+
"stream-json",
|
|
454
|
+
"--include-partial-messages",
|
|
455
|
+
"--verbose",
|
|
456
|
+
"--json-schema",
|
|
457
|
+
JSON.stringify(DIAGRAM_JSON_SCHEMA),
|
|
458
|
+
"--model",
|
|
459
|
+
args.model,
|
|
460
|
+
];
|
|
461
|
+
const handle = args.spawner.spawn({
|
|
462
|
+
command: "claude",
|
|
463
|
+
args: argv,
|
|
464
|
+
signal: args.signal,
|
|
465
|
+
});
|
|
466
|
+
// Buffer stderr in parallel with stdout — used for error categorization
|
|
467
|
+
// if the subprocess exits non-zero or the result envelope is missing.
|
|
468
|
+
const stderrChunks = [];
|
|
469
|
+
handle.stderr.on("data", (d) => {
|
|
470
|
+
stderrChunks.push(typeof d === "string" ? Buffer.from(d) : d);
|
|
471
|
+
});
|
|
472
|
+
// Accumulator for the streamed input_json_delta chunks. The full structured
|
|
473
|
+
// output JSON text builds up here; we attempt JSON.parse after each delta
|
|
474
|
+
// for free per-token partials (rarely succeeds mid-stream, but cheap).
|
|
475
|
+
let partialBuf = "";
|
|
476
|
+
let finalSpec;
|
|
477
|
+
let resultEnvelope;
|
|
478
|
+
// readline iterates utf8 lines from stdout. Each line is a JSON envelope.
|
|
479
|
+
const lines = readline.createInterface({
|
|
480
|
+
input: handle.stdout,
|
|
481
|
+
crlfDelay: Infinity,
|
|
482
|
+
});
|
|
483
|
+
try {
|
|
484
|
+
for await (const line of lines) {
|
|
485
|
+
if (line.length === 0)
|
|
486
|
+
continue;
|
|
487
|
+
let env;
|
|
488
|
+
try {
|
|
489
|
+
env = JSON.parse(line);
|
|
490
|
+
}
|
|
491
|
+
catch {
|
|
492
|
+
// Skip non-JSON lines — claude CLI shouldn't emit any, but tolerate
|
|
493
|
+
// stray output rather than crashing the stream.
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
if (env.type === "stream_event") {
|
|
497
|
+
const delta = env.event?.delta;
|
|
498
|
+
if (env.event?.type === "content_block_delta" &&
|
|
499
|
+
delta?.type === "input_json_delta" &&
|
|
500
|
+
typeof delta.partial_json === "string" &&
|
|
501
|
+
delta.partial_json.length > 0) {
|
|
502
|
+
partialBuf += delta.partial_json;
|
|
503
|
+
// Try to yield a partial — usually fails until the root closes.
|
|
504
|
+
let parsed;
|
|
505
|
+
try {
|
|
506
|
+
parsed = JSON.parse(partialBuf);
|
|
507
|
+
}
|
|
508
|
+
catch {
|
|
509
|
+
continue; // not yet parseable; wait for next delta
|
|
510
|
+
}
|
|
511
|
+
try {
|
|
512
|
+
const partial = parsePartialDiagramSpec(parsed);
|
|
513
|
+
yield partial;
|
|
514
|
+
}
|
|
515
|
+
catch (e) {
|
|
516
|
+
// Mid-stream snapshots may not even validate leniently. Skip;
|
|
517
|
+
// the final pass is authoritative.
|
|
518
|
+
if (!(e instanceof DiagramSpecValidationError))
|
|
519
|
+
throw e;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
if (env.type === "result") {
|
|
525
|
+
resultEnvelope = env;
|
|
526
|
+
// Don't break — stay in the loop so stdout drains cleanly. The CLI
|
|
527
|
+
// tends to emit the result envelope as the last line anyway, so this
|
|
528
|
+
// is usually the natural loop exit.
|
|
529
|
+
continue;
|
|
530
|
+
}
|
|
531
|
+
// system / rate_limit_event / assistant / user envelopes: ignored.
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
catch (err) {
|
|
535
|
+
// Errors from the spawner (e.g. ENOENT surfaced via exitCode rejection)
|
|
536
|
+
// are caught below — readline shouldn't error here, but if it does, fall
|
|
537
|
+
// through to the exit-code branch which has fuller context.
|
|
538
|
+
void err;
|
|
539
|
+
}
|
|
540
|
+
// Drain the subprocess and decide what to throw / yield.
|
|
541
|
+
let exitCode;
|
|
542
|
+
try {
|
|
543
|
+
exitCode = await handle.exitCode;
|
|
544
|
+
}
|
|
545
|
+
catch (err) {
|
|
546
|
+
// Spawn failure (ENOENT, EACCES). Most common: claude CLI not on PATH.
|
|
547
|
+
if (err.code === "ENOENT") {
|
|
548
|
+
throw new LlmAuthError("claude CLI not found on PATH. Install Claude Code " +
|
|
549
|
+
"(https://claude.com/claude-code) and run `claude /login` once.", { cause: err });
|
|
550
|
+
}
|
|
551
|
+
if (err.name === "AbortError" || args.signal?.aborted) {
|
|
552
|
+
throw new StreamAbortedError();
|
|
553
|
+
}
|
|
554
|
+
throw new LlmInternalError("claude subprocess failed to start: " + err.message, { cause: err });
|
|
555
|
+
}
|
|
556
|
+
// If the caller aborted, surface as StreamAbortedError regardless of how
|
|
557
|
+
// the subprocess exited.
|
|
558
|
+
if (args.signal?.aborted) {
|
|
559
|
+
throw new StreamAbortedError();
|
|
560
|
+
}
|
|
561
|
+
const stderr = Buffer.concat(stderrChunks).toString("utf8");
|
|
562
|
+
// Wrapper-level is_error path: claude itself reported a typed failure.
|
|
563
|
+
if (resultEnvelope?.is_error === true) {
|
|
564
|
+
const haystack = (resultEnvelope.errors?.join(" ") ?? "") +
|
|
565
|
+
" " +
|
|
566
|
+
(resultEnvelope.result ?? "") +
|
|
567
|
+
" " +
|
|
568
|
+
stderr;
|
|
569
|
+
console.error(`mochi: generateDiagram: claude exit=${String(exitCode)} ` +
|
|
570
|
+
`is_error=true errors=${JSON.stringify(resultEnvelope.errors ?? [])}`);
|
|
571
|
+
throw mapCliError(haystack, exitCode);
|
|
572
|
+
}
|
|
573
|
+
// Subprocess exited non-zero without an is_error envelope → unknown CLI
|
|
574
|
+
// failure mode. Map from stderr.
|
|
575
|
+
if (exitCode !== 0 && exitCode !== null) {
|
|
576
|
+
console.error(`mochi: generateDiagram: claude exit=${String(exitCode)} ` +
|
|
577
|
+
`stderr=${stderr.slice(0, 500)}`);
|
|
578
|
+
throw mapCliError(stderr, exitCode);
|
|
579
|
+
}
|
|
580
|
+
// Process exited cleanly. Need a result envelope with structured_output.
|
|
581
|
+
if (resultEnvelope === undefined) {
|
|
582
|
+
throw new DiagramSpecValidationError("claude subprocess produced no result envelope", [], []);
|
|
583
|
+
}
|
|
584
|
+
if (resultEnvelope.structured_output === null ||
|
|
585
|
+
resultEnvelope.structured_output === undefined ||
|
|
586
|
+
typeof resultEnvelope.structured_output !== "object") {
|
|
587
|
+
throw new DiagramSpecValidationError("claude subprocess returned no structured_output", [], []);
|
|
588
|
+
}
|
|
589
|
+
const rawInput = resultEnvelope.structured_output;
|
|
590
|
+
// The server is the source of truth for prompt_version — overwrite whatever
|
|
591
|
+
// the LLM emitted so cache invalidation tracks the prompt template version.
|
|
592
|
+
rawInput.prompt_version = PROMPT_VERSION;
|
|
593
|
+
try {
|
|
594
|
+
finalSpec = parseDiagramSpec(rawInput);
|
|
595
|
+
}
|
|
596
|
+
catch (e) {
|
|
597
|
+
if (e instanceof DiagramSpecValidationError) {
|
|
598
|
+
console.error(`mochi: generateDiagram: final spec failed validation: ${e.message}\n` +
|
|
599
|
+
`full structured_output: ${JSON.stringify(rawInput)}`);
|
|
600
|
+
}
|
|
601
|
+
throw e;
|
|
602
|
+
}
|
|
603
|
+
yield finalSpec;
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../server/diagram/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-version.d.ts","sourceRoot":"","sources":["../../../server/diagram/prompt-version.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,cAAc,UAAU,CAAC"}
|