@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.
Files changed (436) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/bin/hearth-agentd.js +4 -0
  4. package/bin/hearth.js +4 -0
  5. package/bin/run-entrypoint.js +20 -0
  6. package/dist/agent-tools.js +738 -0
  7. package/dist/app-version.js +16 -0
  8. package/dist/apply-patch.js +402 -0
  9. package/dist/artifact-error.js +8 -0
  10. package/dist/artifact-tools.js +377 -0
  11. package/dist/cli-workspace.js +36 -0
  12. package/dist/cli.js +1086 -0
  13. package/dist/config-migration.js +82 -0
  14. package/dist/config-schema.js +136 -0
  15. package/dist/config.js +115 -0
  16. package/dist/context/context-tools.js +150 -0
  17. package/dist/context/repo-map.js +102 -0
  18. package/dist/dashboard/app.js +226 -0
  19. package/dist/dashboard/index.html +45 -0
  20. package/dist/dashboard/landing.html +57 -0
  21. package/dist/dashboard/styles.css +23 -0
  22. package/dist/dashboard.js +271 -0
  23. package/dist/db/client.js +29 -0
  24. package/dist/db/migrations.js +262 -0
  25. package/dist/db/schema.js +85 -0
  26. package/dist/device-tokens.js +61 -0
  27. package/dist/git-worktrees.js +134 -0
  28. package/dist/git.js +41 -0
  29. package/dist/incoming-artifacts.js +378 -0
  30. package/dist/local-agent-acp.js +768 -0
  31. package/dist/local-agent-adapters.js +20 -0
  32. package/dist/local-agent-availability.js +92 -0
  33. package/dist/local-agent-catalog.js +51 -0
  34. package/dist/local-agent-claude.js +334 -0
  35. package/dist/local-agent-client.js +519 -0
  36. package/dist/local-agent-codex.js +532 -0
  37. package/dist/local-agent-config.js +34 -0
  38. package/dist/local-agent-daemon-lifecycle.js +195 -0
  39. package/dist/local-agent-daemon-main.js +86 -0
  40. package/dist/local-agent-daemon-protocol.js +302 -0
  41. package/dist/local-agent-daemon.js +407 -0
  42. package/dist/local-agent-errors.js +378 -0
  43. package/dist/local-agent-grok.js +202 -0
  44. package/dist/local-agent-manager.js +715 -0
  45. package/dist/local-agent-opencode.js +463 -0
  46. package/dist/local-agent-path.js +24 -0
  47. package/dist/local-agent-pi-sandbox.js +472 -0
  48. package/dist/local-agent-pi.js +298 -0
  49. package/dist/local-agent-presentation.js +104 -0
  50. package/dist/local-agent-profiles.js +127 -0
  51. package/dist/local-agent-runtime-pool.js +481 -0
  52. package/dist/local-agent-runtime.js +1 -0
  53. package/dist/local-agent-store.js +193 -0
  54. package/dist/local-agent-targets.js +97 -0
  55. package/dist/logger.js +97 -0
  56. package/dist/machine-id.js +35 -0
  57. package/dist/mcp-modern-server.js +65 -0
  58. package/dist/oauth-provider.js +331 -0
  59. package/dist/oauth-store.js +144 -0
  60. package/dist/onboarding.js +35 -0
  61. package/dist/orchestration/brief.js +70 -0
  62. package/dist/orchestration/lanes.js +145 -0
  63. package/dist/orchestration/result.js +46 -0
  64. package/dist/orchestration/scope.js +61 -0
  65. package/dist/pi-tools.js +58 -0
  66. package/dist/policy/command-policy.js +104 -0
  67. package/dist/policy/env-allowlist.js +96 -0
  68. package/dist/policy/sandbox.js +68 -0
  69. package/dist/policy/workspace-profiles.js +47 -0
  70. package/dist/process-journal.js +116 -0
  71. package/dist/process-platform.js +49 -0
  72. package/dist/process-sessions.js +388 -0
  73. package/dist/rate-limit.js +77 -0
  74. package/dist/request-meta.js +9 -0
  75. package/dist/review-checkpoints.js +349 -0
  76. package/dist/roots.js +37 -0
  77. package/dist/server-shutdown.js +12 -0
  78. package/dist/server.js +980 -0
  79. package/dist/skills.js +84 -0
  80. package/dist/snapshot-manager.js +123 -0
  81. package/dist/stdio-server.js +80 -0
  82. package/dist/task-store.js +203 -0
  83. package/dist/task-tools.js +455 -0
  84. package/dist/tool-surfaces/claude.js +220 -0
  85. package/dist/tool-surfaces/codex.js +255 -0
  86. package/dist/tool-surfaces/index.js +15 -0
  87. package/dist/tool-surfaces/shared.js +228 -0
  88. package/dist/tool-surfaces/types.js +27 -0
  89. package/dist/ui/.vite/manifest.json +2544 -0
  90. package/dist/ui/assets/abap-CLvhMVsD.js +1 -0
  91. package/dist/ui/assets/actionscript-3--17pq3dv.js +1 -0
  92. package/dist/ui/assets/ada-C5qYipkI.js +1 -0
  93. package/dist/ui/assets/andromeeda-vGVdxbeo.js +1 -0
  94. package/dist/ui/assets/angular-html-DrbO3_Xe.js +1 -0
  95. package/dist/ui/assets/angular-ts-CmTVzHJx.js +1 -0
  96. package/dist/ui/assets/apache-U0d_L8uA.js +1 -0
  97. package/dist/ui/assets/apex-CGTLDQj6.js +1 -0
  98. package/dist/ui/assets/apl-BOpCpqXf.js +1 -0
  99. package/dist/ui/assets/applescript-CCn79oCD.js +1 -0
  100. package/dist/ui/assets/ara-4CJ0cIlV.js +1 -0
  101. package/dist/ui/assets/asciidoc-DE70LPWp.js +1 -0
  102. package/dist/ui/assets/asm-Cmm7eHzH.js +1 -0
  103. package/dist/ui/assets/astro-CxPeBwei.js +1 -0
  104. package/dist/ui/assets/aurora-x-CDeNXAV0.js +1 -0
  105. package/dist/ui/assets/awk-BWXHIvNe.js +1 -0
  106. package/dist/ui/assets/ayu-dark-DluEY0Gj.js +1 -0
  107. package/dist/ui/assets/ayu-light-C3h-C4tm.js +1 -0
  108. package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  109. package/dist/ui/assets/ballerina-B7ZEbQpA.js +1 -0
  110. package/dist/ui/assets/bat-Bo4NYOV-.js +1 -0
  111. package/dist/ui/assets/beancount-D-usSTwE.js +1 -0
  112. package/dist/ui/assets/berry-DKpUyyne.js +1 -0
  113. package/dist/ui/assets/bibtex-Ci_nEsc7.js +1 -0
  114. package/dist/ui/assets/bicep-CUHmPFLl.js +1 -0
  115. package/dist/ui/assets/bird2-C2hNVINV.js +1 -0
  116. package/dist/ui/assets/blade-DtsAAG4P.js +1 -0
  117. package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
  118. package/dist/ui/assets/c-D9hLjNUM.js +1 -0
  119. package/dist/ui/assets/c3-CnJL0r0V.js +1 -0
  120. package/dist/ui/assets/cadence-CQ2zXKGN.js +1 -0
  121. package/dist/ui/assets/cairo-DLTphjLi.js +1 -0
  122. package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
  123. package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
  124. package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
  125. package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
  126. package/dist/ui/assets/clarity-SemFz856.js +1 -0
  127. package/dist/ui/assets/clojure-DqKBuwfJ.js +1 -0
  128. package/dist/ui/assets/cmake-Bj61d0ZC.js +1 -0
  129. package/dist/ui/assets/cobol-C1SWlvZm.js +1 -0
  130. package/dist/ui/assets/codeowners-C8r90Shi.js +1 -0
  131. package/dist/ui/assets/codeql-oeQT6MSM.js +1 -0
  132. package/dist/ui/assets/coffee-B71R3v2U.js +1 -0
  133. package/dist/ui/assets/common-lisp-Cv5bFMCO.js +1 -0
  134. package/dist/ui/assets/coq-BrsZFFmf.js +1 -0
  135. package/dist/ui/assets/cpp--5a4c3v4.js +1 -0
  136. package/dist/ui/assets/crystal-AtqWYtE0.js +1 -0
  137. package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
  138. package/dist/ui/assets/css-CbqKSHI-.js +1 -0
  139. package/dist/ui/assets/csv-Dx-8-gkx.js +1 -0
  140. package/dist/ui/assets/cue-CE9AQfxI.js +1 -0
  141. package/dist/ui/assets/cypher-ClKdZ_lG.js +1 -0
  142. package/dist/ui/assets/d-qD-0Kul2.js +1 -0
  143. package/dist/ui/assets/dark-plus-Cs2F2srj.js +1 -0
  144. package/dist/ui/assets/dart-DkHntEIa.js +1 -0
  145. package/dist/ui/assets/dax-BkyTk9wS.js +1 -0
  146. package/dist/ui/assets/desktop-Dlh5hvp9.js +1 -0
  147. package/dist/ui/assets/diff-woXpYk--.js +1 -0
  148. package/dist/ui/assets/docker-IyjqRm3v.js +1 -0
  149. package/dist/ui/assets/dotenv-_5a1GRtc.js +1 -0
  150. package/dist/ui/assets/dracula-BHWKrbxM.js +1 -0
  151. package/dist/ui/assets/dracula-soft-5eyTD99u.js +1 -0
  152. package/dist/ui/assets/dream-maker-DW3nJb8Q.js +1 -0
  153. package/dist/ui/assets/edge-BPwY_RrJ.js +1 -0
  154. package/dist/ui/assets/elixir-DVH2yLJf.js +1 -0
  155. package/dist/ui/assets/elm-BrleA6gS.js +1 -0
  156. package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
  157. package/dist/ui/assets/erb-2SHiYe30.js +1 -0
  158. package/dist/ui/assets/erlang-Cphh6RMH.js +1 -0
  159. package/dist/ui/assets/everforest-dark-sB-x3p7T.js +1 -0
  160. package/dist/ui/assets/everforest-light-Df2xbC6M.js +1 -0
  161. package/dist/ui/assets/fennel-DQxkIbk2.js +1 -0
  162. package/dist/ui/assets/fish-BJitypiv.js +1 -0
  163. package/dist/ui/assets/fluent-C03EYrpw.js +1 -0
  164. package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  165. package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +1 -0
  166. package/dist/ui/assets/fsharp-D13ZGOAj.js +1 -0
  167. package/dist/ui/assets/gdresource-C0sCabJj.js +1 -0
  168. package/dist/ui/assets/gdscript-Cp2uCuqX.js +1 -0
  169. package/dist/ui/assets/gdshader-CBce3t8t.js +1 -0
  170. package/dist/ui/assets/genie-CV2tkWYe.js +1 -0
  171. package/dist/ui/assets/gherkin-DExj1W_8.js +1 -0
  172. package/dist/ui/assets/git-commit-BSykSTBG.js +1 -0
  173. package/dist/ui/assets/git-rebase-Bc7atMaV.js +1 -0
  174. package/dist/ui/assets/github-dark-C-LZuMrd.js +1 -0
  175. package/dist/ui/assets/github-dark-default-DXG-b-1a.js +1 -0
  176. package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  177. package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  178. package/dist/ui/assets/github-light-EUqPIrTm.js +1 -0
  179. package/dist/ui/assets/github-light-default-BXViO-2h.js +1 -0
  180. package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  181. package/dist/ui/assets/gleam-CSRkHgEL.js +1 -0
  182. package/dist/ui/assets/glimmer-js-DXeTDPtW.js +1 -0
  183. package/dist/ui/assets/glimmer-ts-CEOoXHU4.js +1 -0
  184. package/dist/ui/assets/glsl-5-43-Gsg.js +1 -0
  185. package/dist/ui/assets/gn-ilITqXS6.js +1 -0
  186. package/dist/ui/assets/gnuplot-7GGW24-e.js +1 -0
  187. package/dist/ui/assets/go-BJwz_mda.js +1 -0
  188. package/dist/ui/assets/graphql-Bk7Ah1KA.js +1 -0
  189. package/dist/ui/assets/groovy-CacY0gHj.js +1 -0
  190. package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  191. package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  192. package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  193. package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  194. package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  195. package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  196. package/dist/ui/assets/hack-DUHz4rCJ.js +1 -0
  197. package/dist/ui/assets/haml-BPCuuTPR.js +1 -0
  198. package/dist/ui/assets/handlebars-CHxmUsnU.js +1 -0
  199. package/dist/ui/assets/haskell-D8IpX4py.js +1 -0
  200. package/dist/ui/assets/haxe-OTjmBuCE.js +1 -0
  201. package/dist/ui/assets/hcl-Dh228itO.js +1 -0
  202. package/dist/ui/assets/hjson-CxZEssPk.js +1 -0
  203. package/dist/ui/assets/hlsl-Cvrh5tZx.js +1 -0
  204. package/dist/ui/assets/horizon-CE9ld1lL.js +1 -0
  205. package/dist/ui/assets/horizon-bright-Br1oVSNq.js +1 -0
  206. package/dist/ui/assets/houston-CsvMBhTu.js +1 -0
  207. package/dist/ui/assets/html-BBJqizz0.js +1 -0
  208. package/dist/ui/assets/html-derivative-ShTPCcKN.js +1 -0
  209. package/dist/ui/assets/http-VFTyziwA.js +1 -0
  210. package/dist/ui/assets/hurl-B8yxTa4r.js +1 -0
  211. package/dist/ui/assets/hxml-B0Qn7Nwc.js +1 -0
  212. package/dist/ui/assets/hy-CZbG8q4J.js +1 -0
  213. package/dist/ui/assets/imba-DsUTQ-LC.js +1 -0
  214. package/dist/ui/assets/ini-B5eOa1yu.js +1 -0
  215. package/dist/ui/assets/java-BZ5DAgJZ.js +1 -0
  216. package/dist/ui/assets/javascript-C_zuIEaC.js +1 -0
  217. package/dist/ui/assets/jinja-DWd6xfNr.js +1 -0
  218. package/dist/ui/assets/jison-BbY63d1V.js +1 -0
  219. package/dist/ui/assets/json-C4DnajZs.js +1 -0
  220. package/dist/ui/assets/json5-BR5RXkoi.js +1 -0
  221. package/dist/ui/assets/jsonc-CYpm1nAK.js +1 -0
  222. package/dist/ui/assets/jsonl-CmCQp5Yx.js +1 -0
  223. package/dist/ui/assets/jsonnet-CJTPZ8u_.js +1 -0
  224. package/dist/ui/assets/jssm-DXw9l8Rf.js +1 -0
  225. package/dist/ui/assets/jsx-C4AACieZ.js +1 -0
  226. package/dist/ui/assets/julia-sRu7EFMW.js +1 -0
  227. package/dist/ui/assets/just-DpZ9Sx1v.js +1 -0
  228. package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
  229. package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +1 -0
  230. package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +1 -0
  231. package/dist/ui/assets/kdl-CsD5j6eV.js +1 -0
  232. package/dist/ui/assets/kotlin-DhhofPvG.js +1 -0
  233. package/dist/ui/assets/kusto-BUv0MjJC.js +1 -0
  234. package/dist/ui/assets/laserwave-C_8bwKvT.js +1 -0
  235. package/dist/ui/assets/latex-B6a_uum7.js +1 -0
  236. package/dist/ui/assets/lean-CewbzKMR.js +1 -0
  237. package/dist/ui/assets/less-DVTAwKKz.js +1 -0
  238. package/dist/ui/assets/light-plus-DVQuIRkW.js +1 -0
  239. package/dist/ui/assets/liquid-B2sVpjjr.js +1 -0
  240. package/dist/ui/assets/llvm-Cm23YOpf.js +1 -0
  241. package/dist/ui/assets/log-BNLmms1o.js +1 -0
  242. package/dist/ui/assets/logo-Cluzi2Zq.js +1 -0
  243. package/dist/ui/assets/lua-DxJJll61.js +1 -0
  244. package/dist/ui/assets/luau-CNKltnaQ.js +1 -0
  245. package/dist/ui/assets/make-Dixweg8N.js +1 -0
  246. package/dist/ui/assets/markdown-BYOwaDjH.js +1 -0
  247. package/dist/ui/assets/marko-Dx8mw-Wx.js +1 -0
  248. package/dist/ui/assets/material-theme-Bm3Qr25_.js +1 -0
  249. package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +1 -0
  250. package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +1 -0
  251. package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  252. package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  253. package/dist/ui/assets/matlab-D7qyCx1q.js +1 -0
  254. package/dist/ui/assets/mdc-vNKeXEwR.js +1 -0
  255. package/dist/ui/assets/mdx-DQZ5AkYe.js +1 -0
  256. package/dist/ui/assets/mermaid-Bk4SNUv9.js +1 -0
  257. package/dist/ui/assets/min-dark-BSWPekZh.js +1 -0
  258. package/dist/ui/assets/min-light-DDpmG2fV.js +1 -0
  259. package/dist/ui/assets/mipsasm-BMqwQI7S.js +1 -0
  260. package/dist/ui/assets/mojo-BgCJLMeH.js +1 -0
  261. package/dist/ui/assets/monokai-CdkpiU2Y.js +1 -0
  262. package/dist/ui/assets/moonbit-CaWjb8XO.js +1 -0
  263. package/dist/ui/assets/move-B1IS1UjX.js +1 -0
  264. package/dist/ui/assets/narrat-_X_XdTYD.js +1 -0
  265. package/dist/ui/assets/nextflow-Bbiyy34d.js +1 -0
  266. package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +1 -0
  267. package/dist/ui/assets/nginx-DScQAGLT.js +1 -0
  268. package/dist/ui/assets/night-owl-DhmEMT88.js +1 -0
  269. package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +1 -0
  270. package/dist/ui/assets/nim-lAJch9uT.js +1 -0
  271. package/dist/ui/assets/nix-IvuFDN5E.js +1 -0
  272. package/dist/ui/assets/nord-Cb4Vim4T.js +1 -0
  273. package/dist/ui/assets/nushell-DcLAeLz5.js +1 -0
  274. package/dist/ui/assets/objective-c-D1A_Heim.js +1 -0
  275. package/dist/ui/assets/objective-cpp-BsSzOQcm.js +1 -0
  276. package/dist/ui/assets/ocaml-O90oeIOV.js +1 -0
  277. package/dist/ui/assets/odin-B1RWQWA5.js +1 -0
  278. package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +1 -0
  279. package/dist/ui/assets/one-light-D7Lr4KcI.js +1 -0
  280. package/dist/ui/assets/openscad-BUDT5pXO.js +1 -0
  281. package/dist/ui/assets/pascal-4ZHwLPI5.js +1 -0
  282. package/dist/ui/assets/perl-C_GkVo_E.js +1 -0
  283. package/dist/ui/assets/php-DziV3K6J.js +1 -0
  284. package/dist/ui/assets/pierre-dark-CpLgRqie.js +1 -0
  285. package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  286. package/dist/ui/assets/pierre-dark-soft-kZQmAZld.js +1 -0
  287. package/dist/ui/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  288. package/dist/ui/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
  289. package/dist/ui/assets/pierre-light-CoaEpmwp.js +1 -0
  290. package/dist/ui/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  291. package/dist/ui/assets/pierre-light-soft-lWLdNTOI.js +1 -0
  292. package/dist/ui/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  293. package/dist/ui/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
  294. package/dist/ui/assets/pkl-ot-7Btpt.js +1 -0
  295. package/dist/ui/assets/plastic-DQwYfKfQ.js +1 -0
  296. package/dist/ui/assets/plsql-DGHpHOYJ.js +1 -0
  297. package/dist/ui/assets/po-BiJDBrnU.js +1 -0
  298. package/dist/ui/assets/poimandres-DRFjx7u4.js +1 -0
  299. package/dist/ui/assets/polar-C7UOKdEL.js +1 -0
  300. package/dist/ui/assets/postcss-BXeXVLqQ.js +1 -0
  301. package/dist/ui/assets/powerquery-DNMTfnFr.js +1 -0
  302. package/dist/ui/assets/powershell-DshXNtvi.js +1 -0
  303. package/dist/ui/assets/prisma-BsRQq5mF.js +1 -0
  304. package/dist/ui/assets/prolog-iXnhIJG7.js +1 -0
  305. package/dist/ui/assets/proto-DB4EqR-F.js +1 -0
  306. package/dist/ui/assets/pug-z75UIWVK.js +1 -0
  307. package/dist/ui/assets/puppet-CDv2pdJW.js +1 -0
  308. package/dist/ui/assets/purescript-9MfHhQsQ.js +1 -0
  309. package/dist/ui/assets/python-gzcpVVnB.js +1 -0
  310. package/dist/ui/assets/qml-Cmm4coz1.js +1 -0
  311. package/dist/ui/assets/qmldir-DCQb3MpD.js +1 -0
  312. package/dist/ui/assets/qss-Fe1Jh2GI.js +1 -0
  313. package/dist/ui/assets/r-Brd0axBE.js +1 -0
  314. package/dist/ui/assets/racket-DcIDlBhZ.js +1 -0
  315. package/dist/ui/assets/raku-B3gFvitq.js +1 -0
  316. package/dist/ui/assets/razor-DSbwmoiu.js +1 -0
  317. package/dist/ui/assets/red-CJ3rzSJv.js +1 -0
  318. package/dist/ui/assets/reg-CRGYupPL.js +1 -0
  319. package/dist/ui/assets/regexp-Bs3Uk-pY.js +1 -0
  320. package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
  321. package/dist/ui/assets/review-payload-CbwCBKB1.js +1580 -0
  322. package/dist/ui/assets/riscv-Ckw8ddFX.js +1 -0
  323. package/dist/ui/assets/ron-VUp2lXgN.js +1 -0
  324. package/dist/ui/assets/rose-pine-BthvhNj6.js +1 -0
  325. package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
  326. package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +1 -0
  327. package/dist/ui/assets/rosmsg-CAekHB0j.js +1 -0
  328. package/dist/ui/assets/rst-ChIyKpUC.js +1 -0
  329. package/dist/ui/assets/ruby-BdAmvOMO.js +1 -0
  330. package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
  331. package/dist/ui/assets/sas-DpXn8hc5.js +1 -0
  332. package/dist/ui/assets/sass-DXrisJhu.js +1 -0
  333. package/dist/ui/assets/scala-DKOlJaKm.js +1 -0
  334. package/dist/ui/assets/scheme-DQCgrYNe.js +1 -0
  335. package/dist/ui/assets/scss-atX1Uuef.js +1 -0
  336. package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
  337. package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
  338. package/dist/ui/assets/shellscript-BqgcAeMK.js +1 -0
  339. package/dist/ui/assets/shellsession-DfQSMRN5.js +1 -0
  340. package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
  341. package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
  342. package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
  343. package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
  344. package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
  345. package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
  346. package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
  347. package/dist/ui/assets/soy-DzP7zZTB.js +1 -0
  348. package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
  349. package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
  350. package/dist/ui/assets/sql-gmaLk66z.js +1 -0
  351. package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
  352. package/dist/ui/assets/stata-CJ0YTMcV.js +1 -0
  353. package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
  354. package/dist/ui/assets/surrealql-LH7FciQz.js +1 -0
  355. package/dist/ui/assets/svelte-BME2PU6V.js +1 -0
  356. package/dist/ui/assets/swift-DonLKvLd.js +1 -0
  357. package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
  358. package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
  359. package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
  360. package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
  361. package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
  362. package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
  363. package/dist/ui/assets/templ-DHBNIfYW.js +1 -0
  364. package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
  365. package/dist/ui/assets/tex-C8-kPEzO.js +1 -0
  366. package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
  367. package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
  368. package/dist/ui/assets/ts-tags-CiewV0vR.js +1 -0
  369. package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
  370. package/dist/ui/assets/tsx-CUYPqmnq.js +1 -0
  371. package/dist/ui/assets/turtle-ByJddavk.js +1 -0
  372. package/dist/ui/assets/twig-BTkvsl0b.js +1 -0
  373. package/dist/ui/assets/typescript-DDQMaPwj.js +1 -0
  374. package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
  375. package/dist/ui/assets/typst-DI99ib-x.js +1 -0
  376. package/dist/ui/assets/v-DETTlOr0.js +1 -0
  377. package/dist/ui/assets/vala-zf12oZj6.js +1 -0
  378. package/dist/ui/assets/vb-Djn5o6TS.js +1 -0
  379. package/dist/ui/assets/verilog-CiiDBU1e.js +1 -0
  380. package/dist/ui/assets/vesper-D5bVUKB1.js +1 -0
  381. package/dist/ui/assets/vhdl-BroJfC0k.js +1 -0
  382. package/dist/ui/assets/viml-DvXPmvsu.js +1 -0
  383. package/dist/ui/assets/vitesse-black-fwtXNY1n.js +1 -0
  384. package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +1 -0
  385. package/dist/ui/assets/vitesse-light-VbXTXTou.js +1 -0
  386. package/dist/ui/assets/vue-BH5SEWRH.js +1 -0
  387. package/dist/ui/assets/vue-html-BT7yeYez.js +1 -0
  388. package/dist/ui/assets/vue-vine-Cs5IN2rs.js +1 -0
  389. package/dist/ui/assets/vyper-CgoNMtux.js +1 -0
  390. package/dist/ui/assets/wasm-BnjxR4X6.js +1 -0
  391. package/dist/ui/assets/wasm-ByWQv1Qj.js +1 -0
  392. package/dist/ui/assets/wenyan-C8pVoKbM.js +1 -0
  393. package/dist/ui/assets/wgsl-BsKzXJz4.js +1 -0
  394. package/dist/ui/assets/wikitext-ClFFjSW2.js +1 -0
  395. package/dist/ui/assets/wit-DdvCle-K.js +1 -0
  396. package/dist/ui/assets/wolfram-DLL8P-h_.js +1 -0
  397. package/dist/ui/assets/workspace-app-B_BnSEHO.css +1 -0
  398. package/dist/ui/assets/workspace-app-DSFpnrIC.js +115 -0
  399. package/dist/ui/assets/xml-D3_1BEcO.js +1 -0
  400. package/dist/ui/assets/xsl-BBOCDn4Y.js +1 -0
  401. package/dist/ui/assets/yaml-lThBDT45.js +1 -0
  402. package/dist/ui/assets/zenscript-BnlCZFoB.js +1 -0
  403. package/dist/ui/assets/zig-CMLA9XwU.js +1 -0
  404. package/dist/ui/workspace-app.html +15 -0
  405. package/dist/user-config.js +228 -0
  406. package/dist/verification.js +74 -0
  407. package/dist/workspace-store.js +133 -0
  408. package/dist/workspaces.js +433 -0
  409. package/docs/adr/devspace-x-implementation-adrs.md +159 -0
  410. package/docs/agent-profile-schema.md +203 -0
  411. package/docs/artifact-exchange.md +44 -0
  412. package/docs/assets/devspace-logo-light.png +0 -0
  413. package/docs/assets/devspace-screenshot.png +0 -0
  414. package/docs/assets/v11-review-ui-after.png +0 -0
  415. package/docs/assets/v11-review-ui-before.png +0 -0
  416. package/docs/chatgpt-coding-workflow.md +215 -0
  417. package/docs/configuration.md +217 -0
  418. package/docs/gotchas.md +294 -0
  419. package/docs/local-agent-daemon.md +101 -0
  420. package/docs/security.md +197 -0
  421. package/docs/setup.md +174 -0
  422. package/examples/agents/claude-implementer.md +30 -0
  423. package/examples/agents/codex-explorer.md +27 -0
  424. package/examples/agents/codex-qa-tester.md +29 -0
  425. package/examples/agents/codex-worker.md +25 -0
  426. package/examples/agents/copilot-reviewer.md +25 -0
  427. package/examples/agents/cursor-agent-worker.md +26 -0
  428. package/examples/agents/grok-builder.md +10 -0
  429. package/examples/agents/opencode-explorer.md +27 -0
  430. package/examples/agents/pi-reviewer.md +27 -0
  431. package/package.json +102 -0
  432. package/schema/v1/hearth.schema.json +529 -0
  433. package/scripts/copy-dashboard.mjs +9 -0
  434. package/scripts/fix-node-pty-permissions.mjs +22 -0
  435. package/scripts/generate-config-schema.ts +9 -0
  436. package/skills/subagents/SKILL.md +57 -0
@@ -0,0 +1,203 @@
1
+ # Subagent profile schema
2
+
3
+ Hearth agent profiles are user-owned markdown files with YAML
4
+ frontmatter. They describe roles such as reviewer, explorer, or implementer.
5
+ The internal on-demand `hearth-agentd` process owns provider invocation. The
6
+ CLI and MCP server use it as clients when they need agent execution.
7
+
8
+ When subagents are enabled, the internal `hearth-agentd` process owns the
9
+ durable agent manager and live provider runtimes. `hearth agents run` is a
10
+ thin local client that starts or reuses the daemon automatically; `hearth
11
+ serve` is not required. A run returns an agent id immediately, while the daemon
12
+ persists its status, latest response, and provider session id.
13
+
14
+ Profiles are discovered from:
15
+
16
+ - `~/.hearth/agents/*.md`
17
+ - `.hearth/agents/*.md`
18
+
19
+ Packaged files under `examples/agents/` are starter templates only.
20
+
21
+ ## Minimal shape
22
+
23
+ ```md
24
+ ---
25
+ schema: hearth-agent/v1
26
+ name: reviewer
27
+ description: Read-only reviewer for bugs, security risks, and missing tests.
28
+ provider: codex
29
+ model: gpt-5.4
30
+ effort: high
31
+ disabled: false
32
+ ---
33
+
34
+ You are a read-only reviewer. Do not edit files.
35
+ Focus on correctness, security, test gaps, and maintainability.
36
+ Cite files and return concise findings.
37
+ ```
38
+
39
+ ## Frontmatter fields
40
+
41
+ ### `schema`
42
+
43
+ Optional schema identifier:
44
+
45
+ ```yaml
46
+ schema: hearth-agent/v1
47
+ ```
48
+
49
+ ### `name`
50
+
51
+ Stable profile identifier shown to the model and accepted by:
52
+
53
+ ```bash
54
+ hearth agents run <name> "<prompt>"
55
+ ```
56
+
57
+ Use lowercase kebab-case names. If omitted, Hearth uses the filename without
58
+ `.md`.
59
+
60
+ ### `description`
61
+
62
+ Required short purpose. This is exposed by `open_workspace` so the supervising
63
+ model can choose the right profile.
64
+
65
+ ### `provider`
66
+
67
+ Required built-in provider id:
68
+
69
+ ```yaml
70
+ provider: codex
71
+ provider: claude
72
+ provider: opencode
73
+ provider: pi
74
+ provider: cursor
75
+ provider: copilot
76
+ provider: grok
77
+ ```
78
+
79
+ Unsupported or custom providers are rejected. Hearth maps providers to their
80
+ native integration:
81
+
82
+ - `codex`: the host-installed `codex app-server` command
83
+ - `claude`: Claude Code SDK
84
+ - `opencode`: OpenCode SDK
85
+ - `pi`: the installed Pi coding-agent SDK, one in-process session per Hearth agent
86
+ - `cursor`: ACP
87
+ - `copilot`: ACP
88
+ - `grok`: Grok Build ACP (`grok agent stdio`)
89
+
90
+ Codex is resolved from the user's environment rather than bundled with
91
+ Hearth. Run `codex login` normally before using it; set `CODEX_COMMAND` when
92
+ the executable is not on the normal PATH. OpenCode, Cursor, and Copilot
93
+ runtimes are started and reused by the daemon internally, while Pi is embedded
94
+ through its Node SDK.
95
+
96
+ ### `model`
97
+
98
+ Optional provider model id or alias.
99
+
100
+ ```yaml
101
+ model: gpt-5.4
102
+ model: sonnet
103
+ ```
104
+
105
+ ### `effort`
106
+
107
+ Optional provider reasoning effort, thinking level, or model variant. If omitted,
108
+ Hearth lets the provider default apply. Values are provider-specific
109
+ passthrough strings; Hearth does not translate names between harnesses.
110
+
111
+ ```yaml
112
+ effort: low
113
+ effort: high
114
+ effort: xhigh
115
+ ```
116
+
117
+ Hearth passes this through to providers that expose a matching control:
118
+
119
+ - `claude`: SDK effort with adaptive thinking.
120
+ - `codex`: app-server model reasoning effort.
121
+ - `pi`: the AgentSession thinking-level control.
122
+ - `opencode`: model variant.
123
+ - `cursor` and `copilot`: ACP thought-level config when supported.
124
+ - `grok`: `--reasoning-effort` on startup and xAI's ACP model metadata for resumed sessions.
125
+
126
+ ### `disabled`
127
+
128
+ Optional boolean. Disabled profiles are not exposed.
129
+
130
+ ```yaml
131
+ disabled: true
132
+ ```
133
+
134
+ ## Markdown body
135
+
136
+ The body is the profile prompt prefix Hearth prepends when launching that
137
+ profile. It is not included in `open_workspace` by default.
138
+
139
+ Recommended body content:
140
+
141
+ - When to use this profile.
142
+ - Whether the worker should act read-only or may make changes.
143
+ - Output format.
144
+ - Review or testing expectations.
145
+
146
+ ## Model-facing workflow
147
+
148
+ The Subagent skill teaches only:
149
+
150
+ ```bash
151
+ hearth agents ls --json
152
+ hearth agents targets --json
153
+ hearth agents run <profile-or-provider> "<prompt>" --json
154
+ hearth agents continue <id> "<prompt>" --json
155
+ hearth agents show <id> --json
156
+ ```
157
+
158
+ `open_workspace` exposes compact profile metadata:
159
+
160
+ ```json
161
+ {
162
+ "name": "reviewer",
163
+ "description": "Read-only reviewer for bugs, security risks, and missing tests.",
164
+ "provider": "codex",
165
+ "model": "gpt-5.4",
166
+ "effort": "high"
167
+ }
168
+ ```
169
+
170
+ `hearth agents targets` lists usable providers and profile definitions for the
171
+ current workspace. `hearth agents ls` lists existing subagent sessions; it does
172
+ not list profile definitions.
173
+
174
+ Use `hearth agents continue <id>` for a later turn. The logical agent ID is
175
+ the `agt_...` value returned by `run` or `ls`; provider session IDs are not
176
+ accepted as substitutes.
177
+
178
+ The full profile body stays out of the model context until Hearth launches the
179
+ profile.
180
+
181
+ ## Runtime lifecycle
182
+
183
+ Hearth keeps provider sessions warm while they are active or recently used,
184
+ but persists only the provider session id and durable agent metadata. Native
185
+ sharing follows the provider boundary: Codex uses one app-server across agents,
186
+ OpenCode uses one server across sessions, ACP providers use one process across
187
+ sessions, while Claude and Pi keep one warm runtime per Hearth agent. There is
188
+ one active turn per agent; different agents may run concurrently.
189
+
190
+ If the daemon restarts during a turn, persisted `starting` and `running` agents
191
+ become `error` with a restart message. The next `agents continue <id>` request can
192
+ continue the provider session when that provider supports resumption. The MCP
193
+ server can restart independently because it does not own this state.
194
+
195
+ ## Current non-goals
196
+
197
+ - Custom or arbitrary CLI-backed agents.
198
+ - Inferring changed files, tests, or diffs from worker output.
199
+ - Exposing raw provider transcripts by default.
200
+ - Teaching the model provider-specific CLIs.
201
+ - First-class MCP agent tools. Future tools should call the same local agent
202
+ daemon used by `hearth agents` rather than executing providers in the MCP
203
+ server process.
@@ -0,0 +1,44 @@
1
+ # Download a native file
2
+
3
+ Hearth can save a file attached or generated by an MCP host, such as ChatGPT,
4
+ directly into an open workspace. Enable the tool with
5
+ `artifacts.enabled` in `~/.hearth/config.jsonc`.
6
+
7
+ ## Workflow
8
+
9
+ ```text
10
+ open_workspace
11
+ -> download_artifact({ file, workspaceId, path })
12
+ -> { path }
13
+ ```
14
+
15
+ 1. Open the project with `open_workspace`.
16
+ 2. Pass the host-provided native `file`, the returned `workspaceId`, and an
17
+ unused workspace-relative `path` to `download_artifact`.
18
+ 3. Use the returned path with the ordinary Hearth filesystem tools.
19
+
20
+ ```text
21
+ download_artifact({
22
+ file: <native file value supplied by the MCP host>,
23
+ workspaceId: "ws_123",
24
+ path: "public/images/generated-image.png"
25
+ })
26
+ ```
27
+
28
+ Hearth creates missing parent directories and refuses to overwrite an existing
29
+ file. After the download, normal tools can inspect, move, rename, replace, or
30
+ delete it.
31
+
32
+ ## Safety and limits
33
+
34
+ The `file` input must be the native value supplied by the MCP host. Hearth does
35
+ not accept pasted download URLs or local source paths. It validates the complete
36
+ file-object shape, trusted OpenAI download hosts, and redirects before streaming.
37
+ Malformed references, unknown fields, absolute paths, traversal, and symlinked
38
+ parents are rejected.
39
+
40
+ Downloads are streamed under `artifacts.maxFileBytes` and published as
41
+ owner-only files without overwriting an existing destination. The tool is
42
+ currently available on Linux. It is not registered on macOS, Windows, or BSD
43
+ because Node.js does not expose the required descriptor-relative filesystem
44
+ operations there.
@@ -0,0 +1,215 @@
1
+ # ChatGPT Coding Workflow
2
+
3
+ Hearth brings a Codex-style coding-agent loop to ChatGPT and other MCP hosts:
4
+ inspect the repo, follow local instructions, make scoped edits, run
5
+ verification, and show the user what changed.
6
+
7
+ ## Open One Workspace
8
+
9
+ ChatGPT should call `open_workspace` once for a project folder:
10
+
11
+ ```json
12
+ {
13
+ "path": "~/work/my-project"
14
+ }
15
+ ```
16
+
17
+ The result includes a `workspaceId`. All later file, search, edit, show-changes,
18
+ and shell calls should reuse that same `workspaceId`.
19
+
20
+ ChatGPT may support automatic checkout recovery through optional host
21
+ conversation metadata. This is an OpenAI-host adapter detail, not a standard MCP
22
+ conversation field. When that optional context is available, opening the same
23
+ checkout project again in the same conversation can continue in the existing
24
+ workspace, and the context already provided for that reused checkout is not
25
+ repeated. The portable workflow remains the same: keep using the `workspaceId`
26
+ returned by `open_workspace` for later operations. Hosts without supported
27
+ conversation context receive a normal new workspace and continue with that
28
+ explicit `workspaceId` workflow.
29
+ The model receives actionable workspace instructions; automatic-reuse
30
+ bookkeeping is not a model-facing choice.
31
+
32
+ Worktree mode is deliberately different: every call creates a new managed
33
+ worktree and a new workspace session with complete context, even for the same
34
+ path and base ref.
35
+
36
+ The first successful open of a checkout provides complete instructions and
37
+ coding context. A repeated open that reuses the same checkout workspace does
38
+ not repeat the model-visible context, but the workspace UI continues to show the
39
+ complete details. Every new worktree establishes and returns its own complete
40
+ context, even when the same project was already opened in checkout or another
41
+ worktree. Opening checkout after a worktree therefore provides the checkout's
42
+ own context.
43
+
44
+ Do not call `open_workspace` again for the same checkout folder unless:
45
+
46
+ - the `workspaceId` is rejected as unknown
47
+ - work moves to a different project folder
48
+ - work switches between checkout and worktree mode
49
+ - the user asks for a new isolated worktree
50
+
51
+ ## Checkout Mode
52
+
53
+ Checkout mode is the default. Hearth opens the actual directory:
54
+
55
+ ```json
56
+ {
57
+ "path": "~/work/my-project"
58
+ }
59
+ ```
60
+
61
+ Use this when the user wants ChatGPT to work in the current checkout.
62
+
63
+ ## Worktree Mode
64
+
65
+ Use worktree mode for isolated parallel work:
66
+
67
+ ```json
68
+ {
69
+ "path": "~/work/my-project",
70
+ "mode": "worktree"
71
+ }
72
+ ```
73
+
74
+ Managed worktrees are created under:
75
+
76
+ ```text
77
+ ~/.hearth/worktrees
78
+ ```
79
+
80
+ Worktree mode requires a Git repository with at least one commit. It starts from
81
+ `HEAD` unless `baseRef` is provided.
82
+
83
+ Each worktree-mode call creates a new managed worktree and returns a new
84
+ `workspaceId`. Reuse that ID for work inside that worktree; call
85
+ `open_workspace` in worktree mode again only when another isolated worktree is
86
+ actually required.
87
+
88
+ Uncommitted source checkout changes are not copied into the managed worktree.
89
+ Hearth reports when the source checkout was dirty so the model can decide how
90
+ to proceed with the user.
91
+
92
+ ## Project Instructions
93
+
94
+ When a workspace opens, Hearth loads root-level instruction files:
95
+
96
+ - `AGENTS.md`
97
+ - `AGENTS.MD`
98
+ - `CLAUDE.md`
99
+ - `CLAUDE.MD`
100
+
101
+ Nested instruction files are returned as `availableAgentsFiles`. The model
102
+ should read the relevant nested file before working under that directory.
103
+
104
+ This keeps instructions explicit and inspectable instead of silently injecting
105
+ new context during later tool calls.
106
+
107
+ ## Skills
108
+
109
+ Skills are enabled by default for coding-agent workflows.
110
+
111
+ Hearth discovers standard Agent Skills from:
112
+
113
+ - `~/.agents/skills`
114
+ - project `.agents/skills`
115
+ - `~/.hearth/skills`
116
+
117
+ It also keeps compatibility with:
118
+
119
+ - the bundled `subagents` skill when Subagents are enabled, unless `~/.hearth/skills/subagents/SKILL.md` exists
120
+ - `skills.agentDir/skills`, defaulting to `~/.codex/skills`
121
+ - additional paths from `skills.paths`
122
+
123
+ When Subagents are enabled, Hearth discovers agent profiles
124
+ from `~/.hearth/agents/*.md` and project `.hearth/agents/*.md`.
125
+ `open_workspace` exposes a compact catalog with profile names, descriptions,
126
+ providers, and optional models/effort levels so the model can choose a configured agent
127
+ without seeing provider-specific launch details.
128
+
129
+ Example profiles are packaged under `examples/agents/` for users who want
130
+ starter templates. Copy or adapt them into one of the active profile directories
131
+ before use.
132
+
133
+ Legacy project paths such as `.pi/skills` can be added to `skills.paths` when needed.
134
+
135
+ When `open_workspace` returns matching skills, the model should read the
136
+ advertised `SKILL.md` before following that skill.
137
+
138
+ Skill paths may be outside the workspace. Hearth only permits reading:
139
+
140
+ - files within advertised skill directories
141
+
142
+ Set `skills.enabled` to `false` to hide skills from workspace output. Enable
143
+ Subagents and choose providers through `hearth init` or the persisted provider
144
+ configuration. The bundled `subagents` skill teaches the minimal
145
+ `hearth agents targets`, `hearth agents ls`, `hearth agents run`,
146
+ `hearth agents continue`, and `hearth agents show` workflow. The catalog
147
+ comes from `open_workspace`; `hearth agents ls` lists existing subagent
148
+ sessions for that workspace.
149
+
150
+ ## Tool Names
151
+
152
+ The Claude surface exposes these tool names:
153
+
154
+ - `open_workspace`
155
+ - `read`
156
+ - `write`
157
+ - `edit`
158
+ - `bash`
159
+ - `show_changes`
160
+
161
+ Hearth uses the Codex-style surface by default. It exposes:
162
+
163
+ - `open_workspace`
164
+ - `read`
165
+ - `apply_patch`
166
+ - `exec_command`
167
+ - `write_stdin`
168
+ - `show_changes`
169
+
170
+ In this mode, `write`, `edit`, and `bash` are not registered. `exec_command`
171
+ returns a process session ID when a command is still
172
+ running after its yield window. Use `write_stdin` to poll it, send input, resize
173
+ a PTY, or send Ctrl-C. Set `tty: true` only for commands that need a terminal.
174
+
175
+ Set `tools.mode` to `claude` in `~/.hearth/config.jsonc` to expose `write`,
176
+ `edit`, and `bash` instead of the Codex mutation and command tools. Dedicated
177
+ MCP tools for `grep`, `glob`, and `ls` are not registered in either mode; use
178
+ the configured shell tool with command-line tools such as `rg`, `find`, and
179
+ `ls`.
180
+
181
+ ## Show Changes
182
+
183
+ Hearth exposes `show_changes` in both tool modes and attaches widget UI only
184
+ to `open_workspace` and `show_changes`. Reads, edits, and commands return normal
185
+ MCP results without creating an iframe for each call. Set `ui.enabled` to
186
+ `false` in `~/.hearth/config.jsonc` to disable UI metadata while keeping the
187
+ aggregate review tool available.
188
+
189
+ Call `show_changes` exactly once after the final file modification in any turn
190
+ that changes files. It shows the combined changes for that turn and advances
191
+ the review point automatically. Reusing a workspace does not change this
192
+ workflow.
193
+
194
+ The model-facing result stays compact: Hearth returns the workspace ID, a
195
+ Git-backed `reviewRef`, and the summary text. MCP Apps hosts receive the full
196
+ file list and patch in result metadata for immediate rendering. If a host later
197
+ restores only the structured result, the review card can reopen that exact
198
+ `reviewRef` from Hearth's Git review history without advancing the current
199
+ review point.
200
+
201
+ For local inspection, run `hearth show-changes <review-ref>`. Add `--json` to
202
+ include the parsed summary, file list, and patch.
203
+
204
+ ## Shell Use
205
+
206
+ The shell tool is for commands that belong in a terminal:
207
+
208
+ - tests
209
+ - builds
210
+ - git inspection
211
+ - package scripts
212
+ - environment checks
213
+
214
+ File writes should go through the edit/write tools rather than shell
215
+ redirection, heredocs, `tee`, `sed -i`, or generated scripts.
@@ -0,0 +1,217 @@
1
+ # Configuration Reference
2
+
3
+ Hearth stores durable settings in `~/.hearth/config.jsonc`. The file accepts
4
+ comments and trailing commas and is validated before the server starts. Editor
5
+ completion is provided by the versioned [JSON Schema](../schema/v1/hearth.schema.json),
6
+ also hosted at the URL in the file's `$schema` property.
7
+
8
+ Authentication stays separate because it contains a secret:
9
+
10
+ ```text
11
+ ~/.hearth/config.jsonc
12
+ ~/.hearth/auth.json
13
+ ```
14
+
15
+ Run `hearth init` to create both files. `hearth config set publicBaseUrl
16
+ <url|null>` updates the JSONC document without discarding its comments.
17
+
18
+ ## Complete example
19
+
20
+ ```jsonc
21
+ {
22
+ "$schema": "https://raw.githubusercontent.com/Waishnav/hearth/main/schema/v1/hearth.schema.json",
23
+ "configVersion": 1,
24
+
25
+ "server": {
26
+ "host": "127.0.0.1",
27
+ "port": 7176,
28
+ // Use the public origin only; do not append /mcp.
29
+ "publicBaseUrl": "https://hearth.example.com",
30
+ "allowedHosts": [],
31
+ "trustProxy": false,
32
+ },
33
+ "workspaces": {
34
+ "allowedRoots": ["~/personal", "~/work"],
35
+ "worktreeRoot": "~/.hearth/worktrees",
36
+ },
37
+ "storage": {
38
+ "stateDir": "~/.local/share/hearth",
39
+ },
40
+ "tools": {
41
+ "mode": "codex",
42
+ },
43
+ "ui": {
44
+ "enabled": true,
45
+ },
46
+ "artifacts": {
47
+ "enabled": false,
48
+ "maxFileBytes": 104857600,
49
+ },
50
+ "skills": {
51
+ "enabled": true,
52
+ "paths": [],
53
+ "agentDir": "~/.codex",
54
+ },
55
+ "subagents": {
56
+ "enabled": false,
57
+ "providers": [],
58
+ },
59
+ "logging": {
60
+ "level": "info",
61
+ "format": "json",
62
+ "requests": true,
63
+ "assets": false,
64
+ "toolCalls": true,
65
+ "shellCommands": false,
66
+ },
67
+ "oauth": {
68
+ "accessTokenTtlSeconds": 3600,
69
+ "refreshTokenTtlSeconds": 2592000,
70
+ "scopes": ["hearth"],
71
+ "allowedRedirectHosts": ["chatgpt.com", "claude.ai", "anthropic.com", "localhost", "127.0.0.1"],
72
+ },
73
+ }
74
+ ```
75
+
76
+ Omitted sections and keys use the defaults shown above. An empty
77
+ `workspaces.allowedRoots` uses the current working directory. Unknown keys are
78
+ rejected so spelling mistakes cannot silently alter behavior.
79
+
80
+ ## Tool modes and UI
81
+
82
+ `tools.mode` accepts two values:
83
+
84
+ | Value | Tool surface |
85
+ | --- | --- |
86
+ | `codex` | Default. `open_workspace`, `read`, `apply_patch`, `exec_command`, `write_stdin`, and `show_changes`. |
87
+ | `claude` | `open_workspace`, `read`, `write`, `edit`, `bash`, and `show_changes`. |
88
+
89
+ The dedicated MCP tools `grep`, `glob`, and `ls` are not exposed. Each mode uses
90
+ its shell tool with programs such as `rg`, `find`, and `ls` when it needs those
91
+ operations.
92
+
93
+ Hearth attaches Apps UI metadata only to `open_workspace` and `show_changes`.
94
+ This avoids rendering an iframe for every read, edit, search, or command call.
95
+ Setting `ui.enabled` to `false` removes the metadata but does not remove the
96
+ `show_changes` tool.
97
+
98
+ ## Skills and subagents
99
+
100
+ Hearth discovers standard Agent Skills from `~/.agents/skills`, project
101
+ `.agents/skills`, and `~/.hearth/skills`. It also checks
102
+ `skills.agentDir/skills` and each path in `skills.paths`. Relative custom paths
103
+ are resolved from the active workspace.
104
+
105
+ Subagent providers are explicit. Omitted providers are disabled:
106
+
107
+ ```jsonc
108
+ {
109
+ "configVersion": 1,
110
+ "subagents": {
111
+ "enabled": true,
112
+ "providers": [
113
+ {
114
+ "id": "codex",
115
+ "enabled": true,
116
+ "model": "gpt-5.4",
117
+ "effort": "high",
118
+ },
119
+ {
120
+ "id": "claude",
121
+ "enabled": true,
122
+ "model": "sonnet",
123
+ },
124
+ ],
125
+ },
126
+ }
127
+ ```
128
+
129
+ Profiles are loaded from `~/.hearth/agents/*.md` and project
130
+ `.hearth/agents/*.md`. `hearth agents targets` prints the configured targets
131
+ available in the current workspace.
132
+
133
+ Provider executable discovery remains process-scoped. The supported overrides
134
+ are `CODEX_COMMAND`, `CODEX_HOME`, `CLAUDE_COMMAND`, `CURSOR_COMMAND`,
135
+ `COPILOT_COMMAND`, `GROK_COMMAND`, and `GROK_AGENT_PROFILE`. Hearth does not
136
+ persist provider credentials.
137
+
138
+ ## Native artifact download
139
+
140
+ Set `artifacts.enabled` to `true` when a host needs to save a native attached or
141
+ generated file into an open workspace. `artifacts.maxFileBytes` limits one
142
+ streamed file. The secure publication path is currently available only on
143
+ Linux; the tool is not registered on macOS, Windows, or BSD.
144
+
145
+ ## Environment boundary
146
+
147
+ User-facing Hearth environment variables (the only ones read from the environment; provider-specific overrides such as `CODEX_COMMAND`, `CLAUDE_COMMAND`, `CURSOR_COMMAND`, `COPILOT_COMMAND`, `GROK_COMMAND`, `GROK_AGENT_PROFILE`, `CODEX_HOME` are read by the subagent layer):
148
+
149
+ | Variable | Purpose |
150
+ | --- | --- |
151
+ | `HEARTH_CONFIG_DIR` | Bootstrap location for `config.jsonc`, `auth.json`, skills, and profiles. |
152
+ | `HEARTH_OAUTH_OWNER_TOKEN` | Optional secret override for the owner token stored in `auth.json`. |
153
+
154
+ Durable environment settings were removed in v1.1. Move existing deployment
155
+ values to these JSONC keys:
156
+
157
+ | Removed setting | JSONC key |
158
+ | --- | --- |
159
+ | `HOST`, `PORT` | `server.host`, `server.port` |
160
+ | `HEARTH_PUBLIC_BASE_URL` | `server.publicBaseUrl` |
161
+ | `HEARTH_ALLOWED_HOSTS` | `server.allowedHosts` |
162
+ | `HEARTH_TRUST_PROXY` | `server.trustProxy` |
163
+ | `HEARTH_ALLOWED_ROOTS` | `workspaces.allowedRoots` |
164
+ | `HEARTH_WORKTREE_ROOT` | `workspaces.worktreeRoot` |
165
+ | `HEARTH_STATE_DIR` | `storage.stateDir` |
166
+ | `HEARTH_TOOL_MODE`, `HEARTH_MINIMAL_TOOLS` | `tools.mode` |
167
+ | `HEARTH_WIDGETS` | `ui.enabled` |
168
+ | `HEARTH_ARTIFACTS` | `artifacts.enabled` |
169
+ | `HEARTH_ARTIFACT_MAX_FILE_BYTES` | `artifacts.maxFileBytes` |
170
+ | `HEARTH_SKILLS` | `skills.enabled` |
171
+ | `HEARTH_SKILL_PATHS` | `skills.paths` |
172
+ | `HEARTH_AGENT_DIR` | `skills.agentDir` |
173
+ | `HEARTH_SUBAGENTS` | `subagents.enabled` |
174
+ | `HEARTH_LOG_LEVEL` | `logging.level` |
175
+ | `HEARTH_LOG_FORMAT` | `logging.format` |
176
+ | `HEARTH_LOG_REQUESTS` | `logging.requests` |
177
+ | `HEARTH_LOG_ASSETS` | `logging.assets` |
178
+ | `HEARTH_LOG_TOOL_CALLS` | `logging.toolCalls` |
179
+ | `HEARTH_LOG_SHELL_COMMANDS` | `logging.shellCommands` |
180
+ | `HEARTH_OAUTH_ACCESS_TOKEN_TTL_SECONDS` | `oauth.accessTokenTtlSeconds` |
181
+ | `HEARTH_OAUTH_REFRESH_TOKEN_TTL_SECONDS` | `oauth.refreshTokenTtlSeconds` |
182
+ | `HEARTH_OAUTH_SCOPES` | `oauth.scopes` |
183
+ | `HEARTH_OAUTH_ALLOWED_REDIRECT_HOSTS` | `oauth.allowedRedirectHosts` |
184
+
185
+ These environment values are not read or auto-imported in v1.1. Environment is
186
+ process state, so there is no reliable file Hearth can migrate on the user's
187
+ behalf.
188
+
189
+ ## v1.0 file migration
190
+
191
+ The first v1.1 load performs one migration when `config.jsonc` is missing and
192
+ `config.json` exists:
193
+
194
+ 1. Validate the old JSON document.
195
+ 2. Translate its known fields into the versioned JSONC structure.
196
+ 3. Write and validate a temporary `config.jsonc`.
197
+ 4. Atomically publish it.
198
+ 5. Rename the old file to `config.json.v1.0.bak`.
199
+
200
+ If `config.jsonc` exists, Hearth never reads `config.json`. Invalid JSONC also
201
+ never falls back to the old file. Unsupported legacy keys stop migration with an
202
+ actionable error instead of being silently discarded.
203
+
204
+ The persisted fields map as follows:
205
+
206
+ | v1.0 JSON field | v1.1 JSONC key |
207
+ | --- | --- |
208
+ | `host`, `port` | `server.host`, `server.port` |
209
+ | `publicBaseUrl`, `allowedHosts` | `server.publicBaseUrl`, `server.allowedHosts` |
210
+ | `allowedRoots`, `worktreeRoot` | `workspaces.allowedRoots`, `workspaces.worktreeRoot` |
211
+ | `stateDir` | `storage.stateDir` |
212
+ | `artifactsEnabled`, `artifactMaxFileBytes` | `artifacts.enabled`, `artifacts.maxFileBytes` |
213
+ | `agentDir` | `skills.agentDir` |
214
+ | `subagents` | `subagents` |
215
+ | `tools.mode`, `ui.enabled` | unchanged nested keys |
216
+
217
+ `auth.json` is unchanged.