@sunshinelife83/hearth 1.0.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/LICENSE +21 -0
- package/README.md +323 -0
- package/bin/hearth-agentd.js +4 -0
- package/bin/hearth.js +4 -0
- package/bin/run-entrypoint.js +20 -0
- package/dist/agent-tools.js +738 -0
- package/dist/app-version.js +16 -0
- package/dist/apply-patch.js +402 -0
- package/dist/artifact-error.js +8 -0
- package/dist/artifact-tools.js +377 -0
- package/dist/cli-workspace.js +36 -0
- package/dist/cli.js +1086 -0
- package/dist/config-migration.js +82 -0
- package/dist/config-schema.js +136 -0
- package/dist/config.js +115 -0
- package/dist/context/context-tools.js +150 -0
- package/dist/context/repo-map.js +102 -0
- package/dist/dashboard/app.js +226 -0
- package/dist/dashboard/index.html +45 -0
- package/dist/dashboard/landing.html +57 -0
- package/dist/dashboard/styles.css +23 -0
- package/dist/dashboard.js +271 -0
- package/dist/db/client.js +29 -0
- package/dist/db/migrations.js +262 -0
- package/dist/db/schema.js +85 -0
- package/dist/device-tokens.js +61 -0
- package/dist/git-worktrees.js +134 -0
- package/dist/git.js +41 -0
- package/dist/incoming-artifacts.js +378 -0
- package/dist/local-agent-acp.js +768 -0
- package/dist/local-agent-adapters.js +20 -0
- package/dist/local-agent-availability.js +92 -0
- package/dist/local-agent-catalog.js +51 -0
- package/dist/local-agent-claude.js +334 -0
- package/dist/local-agent-client.js +519 -0
- package/dist/local-agent-codex.js +532 -0
- package/dist/local-agent-config.js +34 -0
- package/dist/local-agent-daemon-lifecycle.js +195 -0
- package/dist/local-agent-daemon-main.js +86 -0
- package/dist/local-agent-daemon-protocol.js +302 -0
- package/dist/local-agent-daemon.js +407 -0
- package/dist/local-agent-errors.js +378 -0
- package/dist/local-agent-grok.js +202 -0
- package/dist/local-agent-manager.js +715 -0
- package/dist/local-agent-opencode.js +463 -0
- package/dist/local-agent-path.js +24 -0
- package/dist/local-agent-pi-sandbox.js +472 -0
- package/dist/local-agent-pi.js +298 -0
- package/dist/local-agent-presentation.js +104 -0
- package/dist/local-agent-profiles.js +127 -0
- package/dist/local-agent-runtime-pool.js +481 -0
- package/dist/local-agent-runtime.js +1 -0
- package/dist/local-agent-store.js +193 -0
- package/dist/local-agent-targets.js +97 -0
- package/dist/logger.js +97 -0
- package/dist/machine-id.js +35 -0
- package/dist/mcp-modern-server.js +65 -0
- package/dist/oauth-provider.js +331 -0
- package/dist/oauth-store.js +144 -0
- package/dist/onboarding.js +35 -0
- package/dist/orchestration/brief.js +70 -0
- package/dist/orchestration/lanes.js +145 -0
- package/dist/orchestration/result.js +46 -0
- package/dist/orchestration/scope.js +61 -0
- package/dist/pi-tools.js +58 -0
- package/dist/policy/command-policy.js +104 -0
- package/dist/policy/env-allowlist.js +96 -0
- package/dist/policy/sandbox.js +68 -0
- package/dist/policy/workspace-profiles.js +47 -0
- package/dist/process-journal.js +116 -0
- package/dist/process-platform.js +49 -0
- package/dist/process-sessions.js +388 -0
- package/dist/rate-limit.js +77 -0
- package/dist/request-meta.js +9 -0
- package/dist/review-checkpoints.js +349 -0
- package/dist/roots.js +37 -0
- package/dist/server-shutdown.js +12 -0
- package/dist/server.js +980 -0
- package/dist/skills.js +84 -0
- package/dist/snapshot-manager.js +123 -0
- package/dist/stdio-server.js +80 -0
- package/dist/task-store.js +203 -0
- package/dist/task-tools.js +455 -0
- package/dist/tool-surfaces/claude.js +220 -0
- package/dist/tool-surfaces/codex.js +255 -0
- package/dist/tool-surfaces/index.js +15 -0
- package/dist/tool-surfaces/shared.js +228 -0
- package/dist/tool-surfaces/types.js +27 -0
- package/dist/ui/.vite/manifest.json +2544 -0
- package/dist/ui/assets/abap-CLvhMVsD.js +1 -0
- package/dist/ui/assets/actionscript-3--17pq3dv.js +1 -0
- package/dist/ui/assets/ada-C5qYipkI.js +1 -0
- package/dist/ui/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/ui/assets/angular-html-DrbO3_Xe.js +1 -0
- package/dist/ui/assets/angular-ts-CmTVzHJx.js +1 -0
- package/dist/ui/assets/apache-U0d_L8uA.js +1 -0
- package/dist/ui/assets/apex-CGTLDQj6.js +1 -0
- package/dist/ui/assets/apl-BOpCpqXf.js +1 -0
- package/dist/ui/assets/applescript-CCn79oCD.js +1 -0
- package/dist/ui/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/ui/assets/asciidoc-DE70LPWp.js +1 -0
- package/dist/ui/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/ui/assets/astro-CxPeBwei.js +1 -0
- package/dist/ui/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/ui/assets/awk-BWXHIvNe.js +1 -0
- package/dist/ui/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/ui/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/ui/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/ui/assets/bat-Bo4NYOV-.js +1 -0
- package/dist/ui/assets/beancount-D-usSTwE.js +1 -0
- package/dist/ui/assets/berry-DKpUyyne.js +1 -0
- package/dist/ui/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/ui/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/ui/assets/bird2-C2hNVINV.js +1 -0
- package/dist/ui/assets/blade-DtsAAG4P.js +1 -0
- package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
- package/dist/ui/assets/c-D9hLjNUM.js +1 -0
- package/dist/ui/assets/c3-CnJL0r0V.js +1 -0
- package/dist/ui/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/ui/assets/cairo-DLTphjLi.js +1 -0
- package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/dist/ui/assets/clarity-SemFz856.js +1 -0
- package/dist/ui/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/ui/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/ui/assets/cobol-C1SWlvZm.js +1 -0
- package/dist/ui/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/ui/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/ui/assets/coffee-B71R3v2U.js +1 -0
- package/dist/ui/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/ui/assets/coq-BrsZFFmf.js +1 -0
- package/dist/ui/assets/cpp--5a4c3v4.js +1 -0
- package/dist/ui/assets/crystal-AtqWYtE0.js +1 -0
- package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
- package/dist/ui/assets/css-CbqKSHI-.js +1 -0
- package/dist/ui/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/ui/assets/cue-CE9AQfxI.js +1 -0
- package/dist/ui/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/ui/assets/d-qD-0Kul2.js +1 -0
- package/dist/ui/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/ui/assets/dart-DkHntEIa.js +1 -0
- package/dist/ui/assets/dax-BkyTk9wS.js +1 -0
- package/dist/ui/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/ui/assets/diff-woXpYk--.js +1 -0
- package/dist/ui/assets/docker-IyjqRm3v.js +1 -0
- package/dist/ui/assets/dotenv-_5a1GRtc.js +1 -0
- package/dist/ui/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/ui/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/ui/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/ui/assets/edge-BPwY_RrJ.js +1 -0
- package/dist/ui/assets/elixir-DVH2yLJf.js +1 -0
- package/dist/ui/assets/elm-BrleA6gS.js +1 -0
- package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
- package/dist/ui/assets/erb-2SHiYe30.js +1 -0
- package/dist/ui/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/ui/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/ui/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/ui/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/ui/assets/fish-BJitypiv.js +1 -0
- package/dist/ui/assets/fluent-C03EYrpw.js +1 -0
- package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/ui/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/ui/assets/gdresource-C0sCabJj.js +1 -0
- package/dist/ui/assets/gdscript-Cp2uCuqX.js +1 -0
- package/dist/ui/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/ui/assets/genie-CV2tkWYe.js +1 -0
- package/dist/ui/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/ui/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/ui/assets/git-rebase-Bc7atMaV.js +1 -0
- package/dist/ui/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/ui/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/ui/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/ui/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/ui/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/ui/assets/glimmer-js-DXeTDPtW.js +1 -0
- package/dist/ui/assets/glimmer-ts-CEOoXHU4.js +1 -0
- package/dist/ui/assets/glsl-5-43-Gsg.js +1 -0
- package/dist/ui/assets/gn-ilITqXS6.js +1 -0
- package/dist/ui/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/ui/assets/go-BJwz_mda.js +1 -0
- package/dist/ui/assets/graphql-Bk7Ah1KA.js +1 -0
- package/dist/ui/assets/groovy-CacY0gHj.js +1 -0
- package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/ui/assets/hack-DUHz4rCJ.js +1 -0
- package/dist/ui/assets/haml-BPCuuTPR.js +1 -0
- package/dist/ui/assets/handlebars-CHxmUsnU.js +1 -0
- package/dist/ui/assets/haskell-D8IpX4py.js +1 -0
- package/dist/ui/assets/haxe-OTjmBuCE.js +1 -0
- package/dist/ui/assets/hcl-Dh228itO.js +1 -0
- package/dist/ui/assets/hjson-CxZEssPk.js +1 -0
- package/dist/ui/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/ui/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/ui/assets/horizon-bright-Br1oVSNq.js +1 -0
- package/dist/ui/assets/houston-CsvMBhTu.js +1 -0
- package/dist/ui/assets/html-BBJqizz0.js +1 -0
- package/dist/ui/assets/html-derivative-ShTPCcKN.js +1 -0
- package/dist/ui/assets/http-VFTyziwA.js +1 -0
- package/dist/ui/assets/hurl-B8yxTa4r.js +1 -0
- package/dist/ui/assets/hxml-B0Qn7Nwc.js +1 -0
- package/dist/ui/assets/hy-CZbG8q4J.js +1 -0
- package/dist/ui/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/ui/assets/ini-B5eOa1yu.js +1 -0
- package/dist/ui/assets/java-BZ5DAgJZ.js +1 -0
- package/dist/ui/assets/javascript-C_zuIEaC.js +1 -0
- package/dist/ui/assets/jinja-DWd6xfNr.js +1 -0
- package/dist/ui/assets/jison-BbY63d1V.js +1 -0
- package/dist/ui/assets/json-C4DnajZs.js +1 -0
- package/dist/ui/assets/json5-BR5RXkoi.js +1 -0
- package/dist/ui/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/ui/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/ui/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/ui/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/ui/assets/jsx-C4AACieZ.js +1 -0
- package/dist/ui/assets/julia-sRu7EFMW.js +1 -0
- package/dist/ui/assets/just-DpZ9Sx1v.js +1 -0
- package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/dist/ui/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/ui/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/ui/assets/kusto-BUv0MjJC.js +1 -0
- package/dist/ui/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/ui/assets/latex-B6a_uum7.js +1 -0
- package/dist/ui/assets/lean-CewbzKMR.js +1 -0
- package/dist/ui/assets/less-DVTAwKKz.js +1 -0
- package/dist/ui/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/ui/assets/liquid-B2sVpjjr.js +1 -0
- package/dist/ui/assets/llvm-Cm23YOpf.js +1 -0
- package/dist/ui/assets/log-BNLmms1o.js +1 -0
- package/dist/ui/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/ui/assets/lua-DxJJll61.js +1 -0
- package/dist/ui/assets/luau-CNKltnaQ.js +1 -0
- package/dist/ui/assets/make-Dixweg8N.js +1 -0
- package/dist/ui/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/ui/assets/marko-Dx8mw-Wx.js +1 -0
- package/dist/ui/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/ui/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/ui/assets/mdc-vNKeXEwR.js +1 -0
- package/dist/ui/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/ui/assets/mermaid-Bk4SNUv9.js +1 -0
- package/dist/ui/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/ui/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/ui/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/ui/assets/mojo-BgCJLMeH.js +1 -0
- package/dist/ui/assets/monokai-CdkpiU2Y.js +1 -0
- package/dist/ui/assets/moonbit-CaWjb8XO.js +1 -0
- package/dist/ui/assets/move-B1IS1UjX.js +1 -0
- package/dist/ui/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/ui/assets/nextflow-Bbiyy34d.js +1 -0
- package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +1 -0
- package/dist/ui/assets/nginx-DScQAGLT.js +1 -0
- package/dist/ui/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/ui/assets/nim-lAJch9uT.js +1 -0
- package/dist/ui/assets/nix-IvuFDN5E.js +1 -0
- package/dist/ui/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/ui/assets/nushell-DcLAeLz5.js +1 -0
- package/dist/ui/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/ui/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/ui/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/ui/assets/odin-B1RWQWA5.js +1 -0
- package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/dist/ui/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/ui/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/ui/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/ui/assets/perl-C_GkVo_E.js +1 -0
- package/dist/ui/assets/php-DziV3K6J.js +1 -0
- package/dist/ui/assets/pierre-dark-CpLgRqie.js +1 -0
- package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
- package/dist/ui/assets/pierre-dark-soft-kZQmAZld.js +1 -0
- package/dist/ui/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
- package/dist/ui/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
- package/dist/ui/assets/pierre-light-CoaEpmwp.js +1 -0
- package/dist/ui/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
- package/dist/ui/assets/pierre-light-soft-lWLdNTOI.js +1 -0
- package/dist/ui/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
- package/dist/ui/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
- package/dist/ui/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/ui/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/ui/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/ui/assets/po-BiJDBrnU.js +1 -0
- package/dist/ui/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/ui/assets/polar-C7UOKdEL.js +1 -0
- package/dist/ui/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/ui/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/ui/assets/powershell-DshXNtvi.js +1 -0
- package/dist/ui/assets/prisma-BsRQq5mF.js +1 -0
- package/dist/ui/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/ui/assets/proto-DB4EqR-F.js +1 -0
- package/dist/ui/assets/pug-z75UIWVK.js +1 -0
- package/dist/ui/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/ui/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/ui/assets/python-gzcpVVnB.js +1 -0
- package/dist/ui/assets/qml-Cmm4coz1.js +1 -0
- package/dist/ui/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/ui/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/ui/assets/r-Brd0axBE.js +1 -0
- package/dist/ui/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/ui/assets/raku-B3gFvitq.js +1 -0
- package/dist/ui/assets/razor-DSbwmoiu.js +1 -0
- package/dist/ui/assets/red-CJ3rzSJv.js +1 -0
- package/dist/ui/assets/reg-CRGYupPL.js +1 -0
- package/dist/ui/assets/regexp-Bs3Uk-pY.js +1 -0
- package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
- package/dist/ui/assets/review-payload-CbwCBKB1.js +1580 -0
- package/dist/ui/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/ui/assets/ron-VUp2lXgN.js +1 -0
- package/dist/ui/assets/rose-pine-BthvhNj6.js +1 -0
- package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/dist/ui/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/ui/assets/rst-ChIyKpUC.js +1 -0
- package/dist/ui/assets/ruby-BdAmvOMO.js +1 -0
- package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/ui/assets/sas-DpXn8hc5.js +1 -0
- package/dist/ui/assets/sass-DXrisJhu.js +1 -0
- package/dist/ui/assets/scala-DKOlJaKm.js +1 -0
- package/dist/ui/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/ui/assets/scss-atX1Uuef.js +1 -0
- package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/ui/assets/shellscript-BqgcAeMK.js +1 -0
- package/dist/ui/assets/shellsession-DfQSMRN5.js +1 -0
- package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
- package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
- package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
- package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
- package/dist/ui/assets/soy-DzP7zZTB.js +1 -0
- package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
- package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/ui/assets/sql-gmaLk66z.js +1 -0
- package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/ui/assets/stata-CJ0YTMcV.js +1 -0
- package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
- package/dist/ui/assets/surrealql-LH7FciQz.js +1 -0
- package/dist/ui/assets/svelte-BME2PU6V.js +1 -0
- package/dist/ui/assets/swift-DonLKvLd.js +1 -0
- package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
- package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
- package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/ui/assets/templ-DHBNIfYW.js +1 -0
- package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
- package/dist/ui/assets/tex-C8-kPEzO.js +1 -0
- package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
- package/dist/ui/assets/ts-tags-CiewV0vR.js +1 -0
- package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
- package/dist/ui/assets/tsx-CUYPqmnq.js +1 -0
- package/dist/ui/assets/turtle-ByJddavk.js +1 -0
- package/dist/ui/assets/twig-BTkvsl0b.js +1 -0
- package/dist/ui/assets/typescript-DDQMaPwj.js +1 -0
- package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
- package/dist/ui/assets/typst-DI99ib-x.js +1 -0
- package/dist/ui/assets/v-DETTlOr0.js +1 -0
- package/dist/ui/assets/vala-zf12oZj6.js +1 -0
- package/dist/ui/assets/vb-Djn5o6TS.js +1 -0
- package/dist/ui/assets/verilog-CiiDBU1e.js +1 -0
- package/dist/ui/assets/vesper-D5bVUKB1.js +1 -0
- package/dist/ui/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/ui/assets/viml-DvXPmvsu.js +1 -0
- package/dist/ui/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/ui/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/ui/assets/vue-BH5SEWRH.js +1 -0
- package/dist/ui/assets/vue-html-BT7yeYez.js +1 -0
- package/dist/ui/assets/vue-vine-Cs5IN2rs.js +1 -0
- package/dist/ui/assets/vyper-CgoNMtux.js +1 -0
- package/dist/ui/assets/wasm-BnjxR4X6.js +1 -0
- package/dist/ui/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/ui/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/ui/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/ui/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/ui/assets/wit-DdvCle-K.js +1 -0
- package/dist/ui/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/ui/assets/workspace-app-B_BnSEHO.css +1 -0
- package/dist/ui/assets/workspace-app-DSFpnrIC.js +115 -0
- package/dist/ui/assets/xml-D3_1BEcO.js +1 -0
- package/dist/ui/assets/xsl-BBOCDn4Y.js +1 -0
- package/dist/ui/assets/yaml-lThBDT45.js +1 -0
- package/dist/ui/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/ui/assets/zig-CMLA9XwU.js +1 -0
- package/dist/ui/workspace-app.html +15 -0
- package/dist/user-config.js +228 -0
- package/dist/verification.js +74 -0
- package/dist/workspace-store.js +133 -0
- package/dist/workspaces.js +433 -0
- package/docs/adr/devspace-x-implementation-adrs.md +159 -0
- package/docs/agent-profile-schema.md +203 -0
- package/docs/artifact-exchange.md +44 -0
- package/docs/assets/devspace-logo-light.png +0 -0
- package/docs/assets/devspace-screenshot.png +0 -0
- package/docs/assets/v11-review-ui-after.png +0 -0
- package/docs/assets/v11-review-ui-before.png +0 -0
- package/docs/chatgpt-coding-workflow.md +215 -0
- package/docs/configuration.md +217 -0
- package/docs/gotchas.md +294 -0
- package/docs/local-agent-daemon.md +101 -0
- package/docs/security.md +197 -0
- package/docs/setup.md +174 -0
- package/examples/agents/claude-implementer.md +30 -0
- package/examples/agents/codex-explorer.md +27 -0
- package/examples/agents/codex-qa-tester.md +29 -0
- package/examples/agents/codex-worker.md +25 -0
- package/examples/agents/copilot-reviewer.md +25 -0
- package/examples/agents/cursor-agent-worker.md +26 -0
- package/examples/agents/grok-builder.md +10 -0
- package/examples/agents/opencode-explorer.md +27 -0
- package/examples/agents/pi-reviewer.md +27 -0
- package/package.json +102 -0
- package/schema/v1/hearth.schema.json +529 -0
- package/scripts/copy-dashboard.mjs +9 -0
- package/scripts/fix-node-pty-permissions.mjs +22 -0
- package/scripts/generate-config-schema.ts +9 -0
- package/skills/subagents/SKILL.md +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Waishnav
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Waishnav/hearth/main/docs/assets/hearth-logo-light.png" alt="Hearth logo" width="140">
|
|
4
|
+
</picture>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<h1 align="center">Hearth</h1>
|
|
8
|
+
|
|
9
|
+
<p align="center">Bring a Codex-style coding workflow to ChatGPT.</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/@sunshinelife83/hearth"><img alt="npm" src="https://img.shields.io/npm/v/%40waishnav%2Fhearth?style=flat-square" /></a>
|
|
13
|
+
<a href="https://github.com/Waishnav/hearth/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Waishnav/hearth/ci.yml?style=flat-square&branch=main" /></a>
|
|
14
|
+
<a href="https://github.com/Waishnav/hearth/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/%40waishnav%2Fhearth?style=flat-square" /></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
[](https://raw.githubusercontent.com/Waishnav/hearth/main/docs/assets/hearth-screenshot.png)
|
|
18
|
+
|
|
19
|
+
**Give ChatGPT a secure connection to your own machine and Turn ChatGPT into Codex**
|
|
20
|
+
|
|
21
|
+
Hearth is a self-hosted MCP server that lets ChatGPT read, edit, search, and run code in your real local projects — your files, your tools, your terminal — without uploading anything to a third party. You run it on your machine, expose it through a tunnel you control, and approve the connection with a password only you have.
|
|
22
|
+
|
|
23
|
+
The same `/mcp` endpoint serves the 2026-07-28 per-request protocol and automatically supports older 2025-era clients through stateless compatibility handling. There is no protocol mode to configure.
|
|
24
|
+
|
|
25
|
+
## Sponsors and Special Thanks
|
|
26
|
+
<!--
|
|
27
|
+
|
|
28
|
+
<table>
|
|
29
|
+
<thead>
|
|
30
|
+
<tr>
|
|
31
|
+
<th>Sponsor</th>
|
|
32
|
+
<th>About</th>
|
|
33
|
+
</tr>
|
|
34
|
+
</thead>
|
|
35
|
+
<tbody>
|
|
36
|
+
<tr>
|
|
37
|
+
<td align="center" width="220">
|
|
38
|
+
<a href="https://rebates.ai/">
|
|
39
|
+
<img
|
|
40
|
+
src="https://app.rebates.ai/brand/rebates-lockup.svg"
|
|
41
|
+
alt="Rebates"
|
|
42
|
+
width="170"
|
|
43
|
+
>
|
|
44
|
+
</a>
|
|
45
|
+
</td>
|
|
46
|
+
<td>
|
|
47
|
+
<strong>The ads in your terminal pay you.</strong><br><br>
|
|
48
|
+
<a href="https://rebates.ai/">Rebates</a> adds one optional
|
|
49
|
+
sponsored footer to your coding agent and pays you cash back for every
|
|
50
|
+
session in which it is shown. Turn it off at any time.
|
|
51
|
+
</td>
|
|
52
|
+
</tr>
|
|
53
|
+
</tbody>
|
|
54
|
+
</table>
|
|
55
|
+
-->
|
|
56
|
+
<p>
|
|
57
|
+
Hearth is open to new sponsors.
|
|
58
|
+
<a href="https://x.com/wshxnv">Get in touch to become one.</a>
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
## Installation
|
|
62
|
+
|
|
63
|
+
Hearth requires Node `>=22.19 <27`.
|
|
64
|
+
|
|
65
|
+
Install the Hearth CLI (works like `opencode` once installed):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm install -g @sunshinelife83/hearth
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If you prefer building from source, install from a checkout instead:
|
|
72
|
+
`./install.sh`, or `npm pack` plus
|
|
73
|
+
`HEARTH_PKG=./sunshinelife83-hearth-*.tgz ./install.sh`.
|
|
74
|
+
|
|
75
|
+
Then initialize Hearth:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
hearth init
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Non-interactive (scripts, second machine):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
hearth init --yes --use both --roots ~/personal,~/work --public-url https://your-tunnel-host.example.com
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Or one line from a checkout (checks Node, packs, installs, then runs setup
|
|
88
|
+
when interactive):
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
./install.sh
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Or run it without a global install:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx @sunshinelife83/hearth init
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
During setup, Hearth asks for:
|
|
101
|
+
|
|
102
|
+
- where you will use it: ChatGPT, Coding Agents, or both
|
|
103
|
+
- which Coding Agents Hearth may use
|
|
104
|
+
|
|
105
|
+
If you select ChatGPT, setup also asks which local project folders it may open
|
|
106
|
+
and for your public HTTPS base URL from a tunnel or reverse proxy you control.
|
|
107
|
+
A Coding Agents-only setup asks
|
|
108
|
+
neither question: local commands use the current Git project, or the current
|
|
109
|
+
directory outside a repository.
|
|
110
|
+
|
|
111
|
+
Use the public origin without `/mcp` during setup:
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
https://your-tunnel-host.example.com
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
You will configure your MCP client with the public `/mcp` URL after setup.
|
|
118
|
+
Run `hearth serve` when using ChatGPT. For Coding Agents, setup prints a
|
|
119
|
+
`skills` command and lets the Skills CLI handle installation.
|
|
120
|
+
|
|
121
|
+
When the client connects, Hearth opens an Owner password approval page. Enter
|
|
122
|
+
the Owner password printed by `hearth init`. It is also stored in:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
~/.hearth/auth.json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Keep that password private.
|
|
129
|
+
|
|
130
|
+
## Connect Your MCP Client
|
|
131
|
+
|
|
132
|
+
Run `hearth connect` for this PC's exact steps (also in the dashboard Connect
|
|
133
|
+
tab). Each PC has a stable `hearth-xxxx` diagnostic label (`hearth id` — it
|
|
134
|
+
helps recognize the PC but does not prevent cloning); keep one public URL per
|
|
135
|
+
PC as operational hygiene.
|
|
136
|
+
|
|
137
|
+
The default local endpoint is:
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
http://127.0.0.1:7176/mcp
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Most users should connect through a public HTTPS tunnel:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
https://your-tunnel-host.example.com/mcp
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
ChatGPT, Claude, and generic MCP clients all use the same `/mcp` endpoint.
|
|
150
|
+
Claude needs `claude.ai` in `oauth.allowedRedirectHosts` (default since v1.1).
|
|
151
|
+
Local-only clients can use `hearth mcp` stdio with `hearth token create <name>`.
|
|
152
|
+
|
|
153
|
+
> [!NOTE]
|
|
154
|
+
> Using Hearth as an MCP connector isn't against OpenAI's Usage Policies — it's
|
|
155
|
+
> a standard custom App/connector setup, and writing or running code isn't a
|
|
156
|
+
> restricted use case. But your account is governed by your usage, not by
|
|
157
|
+
> Hearth. Don't point it at anything that would violate your provider's terms.
|
|
158
|
+
> Used normally, you're fine. (Based on OpenAI's Usage Policies and Service Terms
|
|
159
|
+
> as of June 2026.)
|
|
160
|
+
|
|
161
|
+
## What ChatGPT Can Do
|
|
162
|
+
|
|
163
|
+
Once connected, ChatGPT can open one of your approved project folders as a
|
|
164
|
+
workspace. From there, it can inspect the repo, make scoped edits, run commands,
|
|
165
|
+
and show you what changed.
|
|
166
|
+
|
|
167
|
+
Hearth gives ChatGPT tools to:
|
|
168
|
+
|
|
169
|
+
- read, write, and edit files inside the opened workspace
|
|
170
|
+
- search code and inspect directories
|
|
171
|
+
- run shell commands for tests, builds, git, and package scripts
|
|
172
|
+
- use isolated Git worktrees for parallel coding sessions
|
|
173
|
+
- follow project instructions from `AGENTS.md` and `CLAUDE.md`
|
|
174
|
+
- discover local agent skills from your skill folders
|
|
175
|
+
- show tool cards and optional change summaries in ChatGPT Apps-compatible hosts
|
|
176
|
+
|
|
177
|
+
## Local Dashboard
|
|
178
|
+
|
|
179
|
+
`hearth serve` also serves a local ops console at:
|
|
180
|
+
```text
|
|
181
|
+
http://127.0.0.1:7176/dashboard
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Sign in with the Owner password. The dashboard covers installation status,
|
|
185
|
+
workspaces, background agents, tasks with verification state, recent logs,
|
|
186
|
+
snapshots, and safe config edits (execution mode, sandbox settings, fleet
|
|
187
|
+
lanes, workspace profiles). Config edits take effect after restarting the
|
|
188
|
+
server.
|
|
189
|
+
|
|
190
|
+
The dashboard performs no privileged execution of its own: it shows the same
|
|
191
|
+
policy-gated state the MCP surface sees, and agents/tasks are still driven
|
|
192
|
+
from your MCP client.
|
|
193
|
+
|
|
194
|
+
## Direct Exposure Without a Relay
|
|
195
|
+
|
|
196
|
+
No software can give your PC a public URL with zero outside help: ChatGPT must
|
|
197
|
+
reach a public IP over valid HTTPS. What Hearth removes is the *relay
|
|
198
|
+
middleman*. If you have a domain and an inbound route to this machine:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
hearth expose # reports this PC's identity and exactly what's missing
|
|
202
|
+
hearth id # stable per-PC identity (hearth-xxxx...)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Then: point your domain at the machine, forward TCP 443 (and 80 for issuance),
|
|
206
|
+
issue a certificate with certbot webroot against `tls.acmeDir`, set
|
|
207
|
+
`tls.certFile`/`tls.keyFile`, run `hearth config set publicBaseUrl
|
|
208
|
+
https://your-domain`, and restart serve. Hearth terminates TLS itself and
|
|
209
|
+
serves the ACME challenge path. Without an inbound route + domain, traffic
|
|
210
|
+
needs *some* relay — run your own (e.g. on your VPS), never one you don't
|
|
211
|
+
control.
|
|
212
|
+
|
|
213
|
+
## Mental Model
|
|
214
|
+
|
|
215
|
+
Hearth is remote access to selected local folders.
|
|
216
|
+
|
|
217
|
+
You decide which roots are allowed. The MCP client still has powerful local
|
|
218
|
+
capabilities inside an opened workspace, including shell execution. Treat a
|
|
219
|
+
connected client like a trusted coding partner with access to your machine.
|
|
220
|
+
|
|
221
|
+
For a normal ChatGPT coding session:
|
|
222
|
+
|
|
223
|
+
1. Start your tunnel.
|
|
224
|
+
2. Run `hearth serve`.
|
|
225
|
+
3. Connect the MCP client to your public `/mcp` URL.
|
|
226
|
+
4. Approve the connection with the Owner password.
|
|
227
|
+
5. Ask ChatGPT to open a project inside one of your allowed roots.
|
|
228
|
+
|
|
229
|
+
## Platform Support
|
|
230
|
+
|
|
231
|
+
Hearth supports Linux, macOS, and Windows environments with a Bash-compatible
|
|
232
|
+
shell.
|
|
233
|
+
|
|
234
|
+
| Platform | Status | Notes |
|
|
235
|
+
| ------------------------------------------------- | ----------------- | ---------------------------------------------- |
|
|
236
|
+
| Linux | Supported | Requires Node, npm, Git, and Bash. |
|
|
237
|
+
| macOS | Supported | Requires Node, npm, Git, and Bash. |
|
|
238
|
+
| Windows with Git Bash, WSL, MSYS2, or Cygwin Bash | Supported | Git Bash is the simplest native Windows setup. |
|
|
239
|
+
| Windows PowerShell or `cmd.exe` only | Not supported yet | Install Git Bash or use WSL. |
|
|
240
|
+
|
|
241
|
+
Run this to inspect your local setup:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
hearth doctor
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Documentation
|
|
248
|
+
|
|
249
|
+
- [Setup Guide](https://github.com/Waishnav/hearth/blob/main/docs/setup.md)
|
|
250
|
+
- [ChatGPT Coding Workflow](https://github.com/Waishnav/hearth/blob/main/docs/chatgpt-coding-workflow.md)
|
|
251
|
+
- [Configuration Reference](https://github.com/Waishnav/hearth/blob/main/docs/configuration.md)
|
|
252
|
+
- [Native File Download](https://github.com/Waishnav/hearth/blob/main/docs/artifact-exchange.md)
|
|
253
|
+
- [Security Model](https://github.com/Waishnav/hearth/blob/main/docs/security.md)
|
|
254
|
+
- [Troubleshooting Gotchas](https://github.com/Waishnav/hearth/blob/main/docs/gotchas.md)
|
|
255
|
+
|
|
256
|
+
## Philosophy
|
|
257
|
+
|
|
258
|
+
Every piece of software is becoming conversational. Natural language is
|
|
259
|
+
redefining how we interact with tools, workflows, and systems.
|
|
260
|
+
|
|
261
|
+
My bet is that ChatGPT becomes the operating system for everything. Once we
|
|
262
|
+
reach AGI, we will simply talk to ChatGPT, and it will prompt, coordinate, and
|
|
263
|
+
orchestrate sub-agents that set up the right loops for us.
|
|
264
|
+
|
|
265
|
+
We are not there yet.
|
|
266
|
+
|
|
267
|
+
Hearth is one attempt to fast-forward that future: a way for MCP-capable
|
|
268
|
+
hosts like ChatGPT and Claude to work directly with local project files through
|
|
269
|
+
explicit, inspectable tools.
|
|
270
|
+
|
|
271
|
+
## Built by Waishnav
|
|
272
|
+
|
|
273
|
+
I'm Waishnav. I like building opinionated products and tools, and Artifacts is one example.
|
|
274
|
+
|
|
275
|
+
This year, I began my journey to build a one-person, multi-agent company capable of generating millions in revenue. If you want to follow the failures, wins, lessons, and everything in between, come hang out with me on [X](https://x.com/wshxnv).
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
## More from me
|
|
279
|
+
|
|
280
|
+
<table>
|
|
281
|
+
<thead>
|
|
282
|
+
<tr>
|
|
283
|
+
<th>Project</th>
|
|
284
|
+
<th>About</th>
|
|
285
|
+
</tr>
|
|
286
|
+
</thead>
|
|
287
|
+
<tbody>
|
|
288
|
+
<tr>
|
|
289
|
+
<td align="center" width="220">
|
|
290
|
+
<a href="https://gitcms.dev/">
|
|
291
|
+
<img
|
|
292
|
+
src="https://gitcms.dev/brand/gitcms-logo.svg"
|
|
293
|
+
alt="GitCMS"
|
|
294
|
+
width="48"
|
|
295
|
+
/><br />
|
|
296
|
+
<strong>GitCMS</strong>
|
|
297
|
+
</a>
|
|
298
|
+
</td>
|
|
299
|
+
<td>
|
|
300
|
+
<strong>Modern CMS and tooling for markdown based content sites — built for agents and humans.</strong><br><br>
|
|
301
|
+
Visual editing, editorial workflow, and ChatGPT/Claude content agents, with
|
|
302
|
+
every post and page stored as files in your repo.
|
|
303
|
+
<a href="https://gitcms.dev/">Learn more</a>.
|
|
304
|
+
</td>
|
|
305
|
+
</tr>
|
|
306
|
+
</tbody>
|
|
307
|
+
</table>
|
|
308
|
+
|
|
309
|
+
## Local Development
|
|
310
|
+
|
|
311
|
+
For working on Hearth itself:
|
|
312
|
+
|
|
313
|
+
Install pnpm 11.25.0, the version pinned in `package.json`, with
|
|
314
|
+
`npm install --global pnpm@11.25.0`, then:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
pnpm install --frozen-lockfile
|
|
318
|
+
pnpm dev
|
|
319
|
+
pnpm typecheck
|
|
320
|
+
pnpm test
|
|
321
|
+
pnpm build
|
|
322
|
+
pnpm start
|
|
323
|
+
```
|
package/bin/hearth.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
|
|
4
|
+
export async function runEntrypoint(sourcePath, distPath) {
|
|
5
|
+
const sourceUrl = new URL(sourcePath, import.meta.url);
|
|
6
|
+
if (existsSync(fileURLToPath(sourceUrl))) {
|
|
7
|
+
try {
|
|
8
|
+
await import("tsx/esm");
|
|
9
|
+
} catch (error) {
|
|
10
|
+
throw new Error(
|
|
11
|
+
"Hearth source checkout detected, but tsx is unavailable. Run `pnpm install` in the checkout; refusing to fall back to potentially stale dist output.",
|
|
12
|
+
{ cause: error },
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
await import(sourceUrl.href);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
await import(new URL(distPath, import.meta.url).href);
|
|
20
|
+
}
|