@akira-tl/forgerelay 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.
Files changed (373) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +22 -0
  3. package/NOTICE.md +19 -0
  4. package/README.md +270 -0
  5. package/dist/apply-patch.js +402 -0
  6. package/dist/artifact-error.js +8 -0
  7. package/dist/artifact-tools.js +377 -0
  8. package/dist/cli.js +597 -0
  9. package/dist/config.js +224 -0
  10. package/dist/db/client.js +29 -0
  11. package/dist/db/migrations.js +189 -0
  12. package/dist/db/schema.js +85 -0
  13. package/dist/git-worktrees.js +255 -0
  14. package/dist/git.js +41 -0
  15. package/dist/incoming-artifacts.js +378 -0
  16. package/dist/local-agent-adapters.js +653 -0
  17. package/dist/local-agent-availability.js +119 -0
  18. package/dist/local-agent-path.js +25 -0
  19. package/dist/local-agent-profiles.js +136 -0
  20. package/dist/local-agent-runtime.js +48 -0
  21. package/dist/local-agent-store.js +145 -0
  22. package/dist/local-agent-targets.js +80 -0
  23. package/dist/logger.js +69 -0
  24. package/dist/mcp/server-instructions.js +78 -0
  25. package/dist/mcp-sessions.js +56 -0
  26. package/dist/oauth-provider.js +237 -0
  27. package/dist/oauth-store.js +138 -0
  28. package/dist/pi-tools.js +81 -0
  29. package/dist/process-platform.js +49 -0
  30. package/dist/process-sessions.js +337 -0
  31. package/dist/request-meta.js +9 -0
  32. package/dist/review-checkpoints.js +219 -0
  33. package/dist/roots.js +37 -0
  34. package/dist/server-shutdown.js +12 -0
  35. package/dist/server.js +1596 -0
  36. package/dist/skills.js +89 -0
  37. package/dist/ui/.vite/manifest.json +2521 -0
  38. package/dist/ui/assets/abap-CLvhMVsD.js +1 -0
  39. package/dist/ui/assets/actionscript-3--17pq3dv.js +1 -0
  40. package/dist/ui/assets/ada-C5qYipkI.js +1 -0
  41. package/dist/ui/assets/andromeeda-vGVdxbeo.js +1 -0
  42. package/dist/ui/assets/angular-html-CovppXt5.js +1 -0
  43. package/dist/ui/assets/angular-ts-0Y9l6YXu.js +1 -0
  44. package/dist/ui/assets/apache-U0d_L8uA.js +1 -0
  45. package/dist/ui/assets/apex-CGTLDQj6.js +1 -0
  46. package/dist/ui/assets/apl-BmBhiklA.js +1 -0
  47. package/dist/ui/assets/applescript-CCn79oCD.js +1 -0
  48. package/dist/ui/assets/ara-4CJ0cIlV.js +1 -0
  49. package/dist/ui/assets/asciidoc-DE70LPWp.js +1 -0
  50. package/dist/ui/assets/asm-Cmm7eHzH.js +1 -0
  51. package/dist/ui/assets/astro-BAmqcqyV.js +1 -0
  52. package/dist/ui/assets/aurora-x-CDeNXAV0.js +1 -0
  53. package/dist/ui/assets/awk-BWXHIvNe.js +1 -0
  54. package/dist/ui/assets/ayu-dark-DluEY0Gj.js +1 -0
  55. package/dist/ui/assets/ayu-light-C3h-C4tm.js +1 -0
  56. package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  57. package/dist/ui/assets/ballerina-B7ZEbQpA.js +1 -0
  58. package/dist/ui/assets/bat-Bo4NYOV-.js +1 -0
  59. package/dist/ui/assets/beancount-D-usSTwE.js +1 -0
  60. package/dist/ui/assets/berry-DKpUyyne.js +1 -0
  61. package/dist/ui/assets/bibtex-Ci_nEsc7.js +1 -0
  62. package/dist/ui/assets/bicep-CUHmPFLl.js +1 -0
  63. package/dist/ui/assets/bird2-C2hNVINV.js +1 -0
  64. package/dist/ui/assets/blade-BjFcmRJo.js +1 -0
  65. package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
  66. package/dist/ui/assets/c-CaOJn4x0.js +1 -0
  67. package/dist/ui/assets/c3-CnJL0r0V.js +1 -0
  68. package/dist/ui/assets/cadence-CQ2zXKGN.js +1 -0
  69. package/dist/ui/assets/cairo-DLTphjLi.js +1 -0
  70. package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
  71. package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
  72. package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
  73. package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
  74. package/dist/ui/assets/clarity-SemFz856.js +1 -0
  75. package/dist/ui/assets/clojure-DqKBuwfJ.js +1 -0
  76. package/dist/ui/assets/cmake-Bj61d0ZC.js +1 -0
  77. package/dist/ui/assets/cobol-DR4zWFMt.js +1 -0
  78. package/dist/ui/assets/codeowners-C8r90Shi.js +1 -0
  79. package/dist/ui/assets/codeql-oeQT6MSM.js +1 -0
  80. package/dist/ui/assets/coffee-ReGSThmM.js +1 -0
  81. package/dist/ui/assets/common-lisp-Cv5bFMCO.js +1 -0
  82. package/dist/ui/assets/coq-BrsZFFmf.js +1 -0
  83. package/dist/ui/assets/cpp-CnlQh6MO.js +1 -0
  84. package/dist/ui/assets/crystal-BrpPbH1U.js +1 -0
  85. package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
  86. package/dist/ui/assets/css-DRBEvyPU.js +1 -0
  87. package/dist/ui/assets/csv-Dx-8-gkx.js +1 -0
  88. package/dist/ui/assets/cue-CE9AQfxI.js +1 -0
  89. package/dist/ui/assets/cypher-ClKdZ_lG.js +1 -0
  90. package/dist/ui/assets/d-qD-0Kul2.js +1 -0
  91. package/dist/ui/assets/dark-plus-Cs2F2srj.js +1 -0
  92. package/dist/ui/assets/dart-DkHntEIa.js +1 -0
  93. package/dist/ui/assets/dax-BkyTk9wS.js +1 -0
  94. package/dist/ui/assets/desktop-Dlh5hvp9.js +1 -0
  95. package/dist/ui/assets/diff-woXpYk--.js +1 -0
  96. package/dist/ui/assets/docker-IyjqRm3v.js +1 -0
  97. package/dist/ui/assets/dotenv-_5a1GRtc.js +1 -0
  98. package/dist/ui/assets/dracula-BHWKrbxM.js +1 -0
  99. package/dist/ui/assets/dracula-soft-5eyTD99u.js +1 -0
  100. package/dist/ui/assets/dream-maker-DW3nJb8Q.js +1 -0
  101. package/dist/ui/assets/edge-cfwpdvl9.js +1 -0
  102. package/dist/ui/assets/elixir-7owrJxb6.js +1 -0
  103. package/dist/ui/assets/elm-udiOjODk.js +1 -0
  104. package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
  105. package/dist/ui/assets/erb-8ctXHMkS.js +1 -0
  106. package/dist/ui/assets/erlang-Cphh6RMH.js +1 -0
  107. package/dist/ui/assets/everforest-dark-sB-x3p7T.js +1 -0
  108. package/dist/ui/assets/everforest-light-Df2xbC6M.js +1 -0
  109. package/dist/ui/assets/fennel-DQxkIbk2.js +1 -0
  110. package/dist/ui/assets/fish-BJitypiv.js +1 -0
  111. package/dist/ui/assets/fluent-C03EYrpw.js +1 -0
  112. package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  113. package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +1 -0
  114. package/dist/ui/assets/fsharp-D13ZGOAj.js +1 -0
  115. package/dist/ui/assets/gdresource-C0sCabJj.js +1 -0
  116. package/dist/ui/assets/gdscript-Cp2uCuqX.js +1 -0
  117. package/dist/ui/assets/gdshader-CBce3t8t.js +1 -0
  118. package/dist/ui/assets/genie-CV2tkWYe.js +1 -0
  119. package/dist/ui/assets/gherkin-DExj1W_8.js +1 -0
  120. package/dist/ui/assets/git-commit-BSykSTBG.js +1 -0
  121. package/dist/ui/assets/git-rebase-P0V_qK1w.js +1 -0
  122. package/dist/ui/assets/github-dark-C-LZuMrd.js +1 -0
  123. package/dist/ui/assets/github-dark-default-DXG-b-1a.js +1 -0
  124. package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  125. package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  126. package/dist/ui/assets/github-light-EUqPIrTm.js +1 -0
  127. package/dist/ui/assets/github-light-default-BXViO-2h.js +1 -0
  128. package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  129. package/dist/ui/assets/gleam-CSRkHgEL.js +1 -0
  130. package/dist/ui/assets/glimmer-js-CZ14ED7U.js +1 -0
  131. package/dist/ui/assets/glimmer-ts-DtBSFP-o.js +1 -0
  132. package/dist/ui/assets/glsl-BX2BkZJK.js +1 -0
  133. package/dist/ui/assets/gn-ilITqXS6.js +1 -0
  134. package/dist/ui/assets/gnuplot-7GGW24-e.js +1 -0
  135. package/dist/ui/assets/go-BJwz_mda.js +1 -0
  136. package/dist/ui/assets/graphql-Dj_cPv4w.js +1 -0
  137. package/dist/ui/assets/groovy-CacY0gHj.js +1 -0
  138. package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  139. package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  140. package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  141. package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  142. package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  143. package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  144. package/dist/ui/assets/hack-DGRkd8xn.js +1 -0
  145. package/dist/ui/assets/haml-BAPSvujW.js +1 -0
  146. package/dist/ui/assets/handlebars-PYksdULG.js +1 -0
  147. package/dist/ui/assets/haskell-D8IpX4py.js +1 -0
  148. package/dist/ui/assets/haxe-OTjmBuCE.js +1 -0
  149. package/dist/ui/assets/hcl-Dh228itO.js +1 -0
  150. package/dist/ui/assets/heavy-payload-BjE0LSUi.js +4 -0
  151. package/dist/ui/assets/hjson-CxZEssPk.js +1 -0
  152. package/dist/ui/assets/hlsl-Cvrh5tZx.js +1 -0
  153. package/dist/ui/assets/horizon-CE9ld1lL.js +1 -0
  154. package/dist/ui/assets/horizon-bright-Br1oVSNq.js +1 -0
  155. package/dist/ui/assets/houston-CsvMBhTu.js +1 -0
  156. package/dist/ui/assets/html-DloAPGZ1.js +1 -0
  157. package/dist/ui/assets/html-derivative-C6q86ZrS.js +1 -0
  158. package/dist/ui/assets/http-fPvYDvHA.js +1 -0
  159. package/dist/ui/assets/hurl-Dbir4WvE.js +1 -0
  160. package/dist/ui/assets/hxml-B0Qn7Nwc.js +1 -0
  161. package/dist/ui/assets/hy-CZbG8q4J.js +1 -0
  162. package/dist/ui/assets/imba-DsUTQ-LC.js +1 -0
  163. package/dist/ui/assets/ini-B5eOa1yu.js +1 -0
  164. package/dist/ui/assets/java-DvkqXg3z.js +1 -0
  165. package/dist/ui/assets/javascript-TONTV6Ty.js +1 -0
  166. package/dist/ui/assets/jinja-OM1F5Gct.js +1 -0
  167. package/dist/ui/assets/jison-CBttugts.js +1 -0
  168. package/dist/ui/assets/json-Db5oY-7J.js +1 -0
  169. package/dist/ui/assets/json5-BR5RXkoi.js +1 -0
  170. package/dist/ui/assets/jsonc-CYpm1nAK.js +1 -0
  171. package/dist/ui/assets/jsonl-CmCQp5Yx.js +1 -0
  172. package/dist/ui/assets/jsonnet-CJTPZ8u_.js +1 -0
  173. package/dist/ui/assets/jssm-DXw9l8Rf.js +1 -0
  174. package/dist/ui/assets/jsx-DKeJCgsc.js +1 -0
  175. package/dist/ui/assets/julia-NlIPhXaL.js +1 -0
  176. package/dist/ui/assets/just-BXBJB-mX.js +1 -0
  177. package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
  178. package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +1 -0
  179. package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +1 -0
  180. package/dist/ui/assets/kdl-CsD5j6eV.js +1 -0
  181. package/dist/ui/assets/kotlin-DhhofPvG.js +1 -0
  182. package/dist/ui/assets/kusto-BUv0MjJC.js +1 -0
  183. package/dist/ui/assets/laserwave-C_8bwKvT.js +1 -0
  184. package/dist/ui/assets/latex-CGK-6yDy.js +1 -0
  185. package/dist/ui/assets/lean-CewbzKMR.js +1 -0
  186. package/dist/ui/assets/less-DVTAwKKz.js +1 -0
  187. package/dist/ui/assets/light-plus-DVQuIRkW.js +1 -0
  188. package/dist/ui/assets/liquid-D7waQ0MY.js +1 -0
  189. package/dist/ui/assets/llvm-Cm23YOpf.js +1 -0
  190. package/dist/ui/assets/log-BNLmms1o.js +1 -0
  191. package/dist/ui/assets/logo-Cluzi2Zq.js +1 -0
  192. package/dist/ui/assets/lua-C_kkt4h1.js +1 -0
  193. package/dist/ui/assets/luau-CNKltnaQ.js +1 -0
  194. package/dist/ui/assets/make-Dixweg8N.js +1 -0
  195. package/dist/ui/assets/markdown-BYOwaDjH.js +1 -0
  196. package/dist/ui/assets/marko-BokXuCts.js +1 -0
  197. package/dist/ui/assets/material-theme-Bm3Qr25_.js +1 -0
  198. package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +1 -0
  199. package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +1 -0
  200. package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  201. package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  202. package/dist/ui/assets/matlab-D7qyCx1q.js +1 -0
  203. package/dist/ui/assets/mdc-Bk0nnUJA.js +1 -0
  204. package/dist/ui/assets/mdx-DQZ5AkYe.js +1 -0
  205. package/dist/ui/assets/mermaid-Bk4SNUv9.js +1 -0
  206. package/dist/ui/assets/min-dark-BSWPekZh.js +1 -0
  207. package/dist/ui/assets/min-light-DDpmG2fV.js +1 -0
  208. package/dist/ui/assets/mipsasm-BMqwQI7S.js +1 -0
  209. package/dist/ui/assets/mojo-BgCJLMeH.js +1 -0
  210. package/dist/ui/assets/monokai-CdkpiU2Y.js +1 -0
  211. package/dist/ui/assets/moonbit-CaWjb8XO.js +1 -0
  212. package/dist/ui/assets/move-B1IS1UjX.js +1 -0
  213. package/dist/ui/assets/narrat-_X_XdTYD.js +1 -0
  214. package/dist/ui/assets/nextflow-Bbiyy34d.js +1 -0
  215. package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +1 -0
  216. package/dist/ui/assets/nginx-jM6NF9TV.js +1 -0
  217. package/dist/ui/assets/night-owl-DhmEMT88.js +1 -0
  218. package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +1 -0
  219. package/dist/ui/assets/nim-hYsL-WKb.js +1 -0
  220. package/dist/ui/assets/nix-IvuFDN5E.js +1 -0
  221. package/dist/ui/assets/nord-Cb4Vim4T.js +1 -0
  222. package/dist/ui/assets/nushell-DcLAeLz5.js +1 -0
  223. package/dist/ui/assets/objective-c-D1A_Heim.js +1 -0
  224. package/dist/ui/assets/objective-cpp-BsSzOQcm.js +1 -0
  225. package/dist/ui/assets/ocaml-O90oeIOV.js +1 -0
  226. package/dist/ui/assets/odin-B1RWQWA5.js +1 -0
  227. package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +1 -0
  228. package/dist/ui/assets/one-light-D7Lr4KcI.js +1 -0
  229. package/dist/ui/assets/openscad-BUDT5pXO.js +1 -0
  230. package/dist/ui/assets/pascal-4ZHwLPI5.js +1 -0
  231. package/dist/ui/assets/perl-DBI_cUHJ.js +1 -0
  232. package/dist/ui/assets/php-BX_aQhFl.js +1 -0
  233. package/dist/ui/assets/pierre-dark-sU4Zdns8.js +1 -0
  234. package/dist/ui/assets/pierre-dark-soft-HXgun5vs.js +1 -0
  235. package/dist/ui/assets/pierre-light-DWBk51d8.js +1 -0
  236. package/dist/ui/assets/pierre-light-soft-CodEzPxf.js +1 -0
  237. package/dist/ui/assets/pkl-ot-7Btpt.js +1 -0
  238. package/dist/ui/assets/plastic-DQwYfKfQ.js +1 -0
  239. package/dist/ui/assets/plsql-DGHpHOYJ.js +1 -0
  240. package/dist/ui/assets/po-BiJDBrnU.js +1 -0
  241. package/dist/ui/assets/poimandres-DRFjx7u4.js +1 -0
  242. package/dist/ui/assets/polar-C7UOKdEL.js +1 -0
  243. package/dist/ui/assets/postcss-BXeXVLqQ.js +1 -0
  244. package/dist/ui/assets/powerquery-DNMTfnFr.js +1 -0
  245. package/dist/ui/assets/powershell-DshXNtvi.js +1 -0
  246. package/dist/ui/assets/prisma-BsRQq5mF.js +1 -0
  247. package/dist/ui/assets/prolog-iXnhIJG7.js +1 -0
  248. package/dist/ui/assets/proto-DB4EqR-F.js +1 -0
  249. package/dist/ui/assets/pug-DwFAYy1e.js +1 -0
  250. package/dist/ui/assets/puppet-CDv2pdJW.js +1 -0
  251. package/dist/ui/assets/purescript-9MfHhQsQ.js +1 -0
  252. package/dist/ui/assets/python-gzcpVVnB.js +1 -0
  253. package/dist/ui/assets/qml-eLSwQUKt.js +1 -0
  254. package/dist/ui/assets/qmldir-DCQb3MpD.js +1 -0
  255. package/dist/ui/assets/qss-Fe1Jh2GI.js +1 -0
  256. package/dist/ui/assets/r-BMnQsMLf.js +1 -0
  257. package/dist/ui/assets/racket-DcIDlBhZ.js +1 -0
  258. package/dist/ui/assets/raku-B3gFvitq.js +1 -0
  259. package/dist/ui/assets/razor-CgciiMyw.js +1 -0
  260. package/dist/ui/assets/red-CJ3rzSJv.js +1 -0
  261. package/dist/ui/assets/reg-CRGYupPL.js +1 -0
  262. package/dist/ui/assets/regexp-ZrURNrn5.js +1 -0
  263. package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
  264. package/dist/ui/assets/review-payload-HGkpJjjm.js +1 -0
  265. package/dist/ui/assets/riscv-Ckw8ddFX.js +1 -0
  266. package/dist/ui/assets/ron-VUp2lXgN.js +1 -0
  267. package/dist/ui/assets/rose-pine-BthvhNj6.js +1 -0
  268. package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
  269. package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +1 -0
  270. package/dist/ui/assets/rosmsg-CAekHB0j.js +1 -0
  271. package/dist/ui/assets/rst-EoAOr3M6.js +1 -0
  272. package/dist/ui/assets/ruby-Dqx5_Rqw.js +1 -0
  273. package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
  274. package/dist/ui/assets/sas-Bf6xPLSX.js +1 -0
  275. package/dist/ui/assets/sass-DXrisJhu.js +1 -0
  276. package/dist/ui/assets/scala-DKOlJaKm.js +1 -0
  277. package/dist/ui/assets/scheme-DQCgrYNe.js +1 -0
  278. package/dist/ui/assets/scrollbar-DX4Ujotb.js +287 -0
  279. package/dist/ui/assets/scss-DDpW3yTd.js +1 -0
  280. package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
  281. package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
  282. package/dist/ui/assets/shellscript-DayAQ-W9.js +1 -0
  283. package/dist/ui/assets/shellsession-jPr_lSnA.js +1 -0
  284. package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
  285. package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
  286. package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
  287. package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
  288. package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
  289. package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
  290. package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
  291. package/dist/ui/assets/soy-X9adks8G.js +1 -0
  292. package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
  293. package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
  294. package/dist/ui/assets/sql-Bmt09AIR.js +1 -0
  295. package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
  296. package/dist/ui/assets/stata-DVkNpH8r.js +1 -0
  297. package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
  298. package/dist/ui/assets/surrealql-eEXzMb8j.js +1 -0
  299. package/dist/ui/assets/svelte-CFoBxZF3.js +1 -0
  300. package/dist/ui/assets/swift-DonLKvLd.js +1 -0
  301. package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
  302. package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
  303. package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
  304. package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
  305. package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
  306. package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
  307. package/dist/ui/assets/templ-Da_324JF.js +1 -0
  308. package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
  309. package/dist/ui/assets/tex-HAzlmKJ0.js +1 -0
  310. package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
  311. package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
  312. package/dist/ui/assets/ts-tags-7iLrNH8p.js +1 -0
  313. package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
  314. package/dist/ui/assets/tsx-gZaXf8PJ.js +1 -0
  315. package/dist/ui/assets/turtle-ByJddavk.js +1 -0
  316. package/dist/ui/assets/twig-CLpQ7p1N.js +1 -0
  317. package/dist/ui/assets/typescript-B2WWCRI2.js +1 -0
  318. package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
  319. package/dist/ui/assets/typst-DI99ib-x.js +1 -0
  320. package/dist/ui/assets/v-DETTlOr0.js +1 -0
  321. package/dist/ui/assets/vala-zf12oZj6.js +1 -0
  322. package/dist/ui/assets/vb-Djn5o6TS.js +1 -0
  323. package/dist/ui/assets/verilog-CiiDBU1e.js +1 -0
  324. package/dist/ui/assets/vesper-D5bVUKB1.js +1 -0
  325. package/dist/ui/assets/vhdl-BroJfC0k.js +1 -0
  326. package/dist/ui/assets/viml-DvXPmvsu.js +1 -0
  327. package/dist/ui/assets/vitesse-black-fwtXNY1n.js +1 -0
  328. package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +1 -0
  329. package/dist/ui/assets/vitesse-light-VbXTXTou.js +1 -0
  330. package/dist/ui/assets/vue-No_8Jygd.js +1 -0
  331. package/dist/ui/assets/vue-html-kHJg98Kk.js +1 -0
  332. package/dist/ui/assets/vue-vine-Df4cEYaN.js +1 -0
  333. package/dist/ui/assets/vyper-CgoNMtux.js +1 -0
  334. package/dist/ui/assets/wasm-BnjxR4X6.js +1 -0
  335. package/dist/ui/assets/wasm-ByWQv1Qj.js +1 -0
  336. package/dist/ui/assets/wenyan-C8pVoKbM.js +1 -0
  337. package/dist/ui/assets/wgsl-BsKzXJz4.js +1 -0
  338. package/dist/ui/assets/wikitext-ClFFjSW2.js +1 -0
  339. package/dist/ui/assets/wit-DdvCle-K.js +1 -0
  340. package/dist/ui/assets/wolfram-DLL8P-h_.js +1 -0
  341. package/dist/ui/assets/workspace-app-C_wsC6VL.js +117 -0
  342. package/dist/ui/assets/workspace-app-DHvE2ojW.css +1 -0
  343. package/dist/ui/assets/xml-DUZ05dpG.js +1 -0
  344. package/dist/ui/assets/xsl-Bwp3w2OF.js +1 -0
  345. package/dist/ui/assets/yaml-IA_-TEM1.js +1 -0
  346. package/dist/ui/assets/zenscript-BnlCZFoB.js +1 -0
  347. package/dist/ui/assets/zig-CMLA9XwU.js +1 -0
  348. package/dist/ui/workspace-app.html +15 -0
  349. package/dist/user-config.js +97 -0
  350. package/dist/workspace-store.js +162 -0
  351. package/dist/workspaces.js +528 -0
  352. package/docs/agent-profile-schema.md +119 -0
  353. package/docs/artifact-exchange.md +63 -0
  354. package/docs/chatgpt-coding-workflow.md +183 -0
  355. package/docs/configuration.md +197 -0
  356. package/docs/gotchas.md +243 -0
  357. package/docs/roadmap.md +195 -0
  358. package/docs/security.md +142 -0
  359. package/docs/setup.md +132 -0
  360. package/docs/versioning.md +189 -0
  361. package/examples/agents/claude-implementer.md +30 -0
  362. package/examples/agents/codex-explorer.md +27 -0
  363. package/examples/agents/codex-qa-tester.md +29 -0
  364. package/examples/agents/codex-worker.md +25 -0
  365. package/examples/agents/copilot-reviewer.md +25 -0
  366. package/examples/agents/cursor-agent-worker.md +26 -0
  367. package/examples/agents/opencode-explorer.md +27 -0
  368. package/examples/agents/pi-reviewer.md +27 -0
  369. package/package.json +102 -0
  370. package/scripts/dev-server.mjs +120 -0
  371. package/scripts/fix-node-pty-permissions.mjs +22 -0
  372. package/scripts/release-version.mjs +207 -0
  373. package/skills/subagent-delegation/SKILL.md +132 -0
@@ -0,0 +1,195 @@
1
+ # ForgeRelay Roadmap
2
+
3
+ ForgeRelay is the local development control plane between an MCP host and the
4
+ user's real development environment. The project intentionally stays focused on
5
+ workspace, filesystem, process, Git, code-intelligence, hook, and delegated
6
+ local-agent capabilities rather than rebuilding the host model runtime.
7
+
8
+ ## Architecture boundary
9
+
10
+ The MCP host owns capabilities such as:
11
+
12
+ - reasoning and conversation;
13
+ - planning and asking the user questions;
14
+ - web and multimodal tools;
15
+ - top-level conversation lifecycle and compaction.
16
+
17
+ ForgeRelay owns capabilities such as:
18
+
19
+ - workspace identity and persistence;
20
+ - filesystem operations;
21
+ - local process execution;
22
+ - Git and managed worktrees;
23
+ - review/checkpoint primitives;
24
+ - code intelligence;
25
+ - lifecycle hooks;
26
+ - provider-backed local subagents.
27
+
28
+ Long-term memory is intentionally outside ForgeRelay. A separate context system
29
+ can be integrated later without coupling memory policy to the local coding
30
+ runtime.
31
+
32
+ ## Explicit non-goals
33
+
34
+ ForgeRelay does not plan to add:
35
+
36
+ - an operating-system shell sandbox;
37
+ - a project memory/autonomous memory system;
38
+ - a plugin marketplace/runtime;
39
+ - a second conversation/session runtime;
40
+ - host-owned commands such as plan mode, context inspection, or model selection;
41
+ - automatic installation and management of language servers.
42
+
43
+ Shell execution remains a trusted local-user capability. Workspace filesystem
44
+ containment must not be described as a shell sandbox.
45
+
46
+ ## 0.1 — ForgeRelay foundation
47
+
48
+ The initial independent release establishes:
49
+
50
+ - ForgeRelay product/package/CLI identity;
51
+ - standard SemVer and tag-triggered GitHub/npm releases;
52
+ - preserved upstream MIT attribution and provenance checks;
53
+ - directory-based workspace reuse;
54
+ - checkout-first behavior;
55
+ - branch-backed managed worktrees using `forgerelay/*` branches;
56
+ - safe `close_worktree` fast-forward lifecycle;
57
+ - persisted worktree branch/target metadata;
58
+ - existing local coding-agent profile/provider integration;
59
+ - compatibility with legacy DevSpace configuration/state identifiers.
60
+
61
+ ## 0.2 — Hooks v1
62
+
63
+ Hooks are the next priority because they provide a general policy extension point
64
+ without hardcoding project-specific commands into Git/workspace logic.
65
+
66
+ Initial events:
67
+
68
+ - `WorkspaceOpen`
69
+ - `BeforeTool`
70
+ - `AfterTool`
71
+ - `AfterToolFailure`
72
+ - `AfterFileChange`
73
+ - `BeforeWorktreeClose`
74
+ - `AfterWorktreeClose`
75
+ - `SubagentStart`
76
+ - `SubagentStop`
77
+
78
+ Initial handler type:
79
+
80
+ - local command
81
+
82
+ The first implementation should define a deep hook engine contract and keep MCP
83
+ tool handlers thin. HTTP/prompt/agent-style handlers can be evaluated later if
84
+ there is a concrete need.
85
+
86
+ `BeforeWorktreeClose` should become the natural place for user-configured test,
87
+ typecheck, formatting, or security verification before a managed branch is
88
+ integrated.
89
+
90
+ ## 0.3 — LSP code intelligence v1
91
+
92
+ LSP is moderate implementation complexity if ForgeRelay does not become a
93
+ language-server installer.
94
+
95
+ The first version should launch only language servers already available on the
96
+ user's machine or explicitly configured by the user/project.
97
+
98
+ Initial operations:
99
+
100
+ - diagnostics;
101
+ - definition;
102
+ - references;
103
+ - document symbols;
104
+ - workspace symbols;
105
+ - hover/type information.
106
+
107
+ Prefer one deep MCP capability such as:
108
+
109
+ ```text
110
+ code_intelligence({
111
+ workspaceId,
112
+ operation,
113
+ path,
114
+ line,
115
+ column,
116
+ query
117
+ })
118
+ ```
119
+
120
+ rather than one MCP tool per language or language-server method.
121
+
122
+ Candidate servers include `typescript-language-server`/tsserver, Pyright,
123
+ `rust-analyzer`, `gopls`, and `clangd`, but ForgeRelay should treat server
124
+ commands/configuration as external dependencies.
125
+
126
+ ## 0.4 — First-class subagent MCP
127
+
128
+ ForgeRelay already owns provider adapters and resumable local agent sessions.
129
+ The next step is to remove the current `bash -> forgerelay agents ...` indirection
130
+ for MCP hosts.
131
+
132
+ A compact interface should reuse the existing provider adapter registry:
133
+
134
+ ```text
135
+ subagent({
136
+ action: "run" | "list" | "show" | "cancel",
137
+ workspaceId,
138
+ profile,
139
+ provider,
140
+ prompt,
141
+ agentId
142
+ })
143
+ ```
144
+
145
+ The parent agent chooses an available provider/profile such as Codex or Claude.
146
+ ForgeRelay launches, tracks, resumes, and cancels the provider-backed worker when
147
+ the underlying provider supports those operations.
148
+
149
+ This is intentionally provider-backed delegation, not an attempt to emulate a
150
+ host-native subagent implementation.
151
+
152
+ ## Worktree and history refinements
153
+
154
+ These can land alongside the main release lines when the underlying interfaces
155
+ are ready:
156
+
157
+ - `.worktreeinclude`-style explicit copying of selected gitignored files;
158
+ - hook-backed worktree close verification;
159
+ - stale managed-worktree recovery and cleanup;
160
+ - checkpoint/list/restore primitives based on the existing Git snapshot engine;
161
+ - retention/GC for stale workspace sessions, conversation bindings, and review
162
+ refs.
163
+
164
+ Checkpoint restore must protect concurrent/external user edits rather than
165
+ blindly overwriting a working tree.
166
+
167
+ ## Later: task orchestration
168
+
169
+ After first-class subagents are stable, ForgeRelay may add a small persistent
170
+ task graph for parent/worker coordination:
171
+
172
+ - task identity/title/status;
173
+ - dependencies;
174
+ - assigned local-agent session;
175
+ - workspace/worktree association;
176
+ - structured result/error state.
177
+
178
+ Start with DAG-style parent/child orchestration. Peer-to-peer agent-team messaging
179
+ should only be added if real workflows demonstrate that the simpler task model is
180
+ insufficient.
181
+
182
+ ## Compatibility policy
183
+
184
+ New public names use ForgeRelay:
185
+
186
+ - `@akira-tl/forgerelay`
187
+ - `forgerelay`
188
+ - `FORGERELAY_*`
189
+ - `~/.forgerelay`
190
+ - `.forgerelay`
191
+ - `forgerelay/*` managed branches
192
+
193
+ Legacy `DEVSPACE_*`, `~/.devspace`, `.devspace`, old managed branch names, and
194
+ selected persisted internal identifiers remain readable during migration where
195
+ removing compatibility would orphan real user state.
@@ -0,0 +1,142 @@
1
+ # Security Model
2
+
3
+ ForgeRelay exposes local coding capabilities over MCP. Treat a connected client
4
+ as a trusted coding operator with access to the capabilities you expose.
5
+
6
+ ## Allowed workspace roots
7
+
8
+ ForgeRelay only opens workspaces under configured roots. Keep the root list as
9
+ narrow as practical.
10
+
11
+ Example:
12
+
13
+ ```text
14
+ ~/personal,~/work
15
+ ```
16
+
17
+ Do not use your entire home directory unless that is intentionally the access
18
+ boundary you want.
19
+
20
+ Filesystem-oriented tools validate workspace-relative paths and reject paths
21
+ that escape the opened workspace or configured roots.
22
+
23
+ ## Owner-password OAuth
24
+
25
+ New installations store local configuration in:
26
+
27
+ ```text
28
+ ~/.forgerelay/config.json
29
+ ~/.forgerelay/auth.json
30
+ ```
31
+
32
+ `auth.json` contains the Owner password and should remain private. When a client
33
+ connects, ForgeRelay presents an approval page where that password authorizes
34
+ the connection.
35
+
36
+ For environment-only deployments:
37
+
38
+ ```bash
39
+ FORGERELAY_OAUTH_OWNER_TOKEN="$(openssl rand -base64 32)"
40
+ ```
41
+
42
+ The token must be at least 16 characters.
43
+
44
+ Existing `~/.devspace` configuration and `DEVSPACE_*` variables remain readable
45
+ for migration compatibility when the new ForgeRelay equivalents are absent.
46
+
47
+ ## Public URL and tunnels
48
+
49
+ ForgeRelay needs `FORGERELAY_PUBLIC_BASE_URL` when an MCP client reaches it
50
+ through a public HTTPS origin.
51
+
52
+ Use the origin without `/mcp`:
53
+
54
+ ```text
55
+ https://forge.example.com
56
+ ```
57
+
58
+ The client connects to:
59
+
60
+ ```text
61
+ https://forge.example.com/mcp
62
+ ```
63
+
64
+ ForgeRelay does not manage the tunnel. Your tunnel or reverse proxy should point
65
+ to the local server, normally:
66
+
67
+ ```text
68
+ http://127.0.0.1:7676
69
+ ```
70
+
71
+ By default, ForgeRelay derives allowed Host headers from the local host and
72
+ configured public URL. `FORGERELAY_ALLOWED_HOSTS=*` disables that allowlist and
73
+ should only be used intentionally.
74
+
75
+ ## Shell execution is not sandboxed
76
+
77
+ This boundary is important:
78
+
79
+ **Filesystem path containment is not a shell sandbox.**
80
+
81
+ ForgeRelay's file tools are scoped to the opened workspace, but shell commands
82
+ run with the authority of the local operating-system user that started
83
+ ForgeRelay. A shell command can therefore access resources that the local user
84
+ can access, including paths outside the workspace.
85
+
86
+ ForgeRelay intentionally does not add its own OS sandbox. Many development
87
+ workflows need compilers, package managers, system tools, credentials, external
88
+ repositories, local services, and other resources outside a narrow workspace
89
+ sandbox, and MCP currently does not provide a clean universal interaction model
90
+ for dynamically crossing such a boundary.
91
+
92
+ The security model is therefore based on:
93
+
94
+ - strong authentication;
95
+ - narrow allowed project roots for filesystem tools;
96
+ - a trusted MCP client/model relationship;
97
+ - explicit tool calls and observable local execution;
98
+ - the user's existing OS/account permissions.
99
+
100
+ Do not describe ForgeRelay as a sandboxed coding environment.
101
+
102
+ ## Git and managed worktrees
103
+
104
+ Managed worktrees are branch-backed and visible in the source repository.
105
+ ForgeRelay refuses unsafe close operations when:
106
+
107
+ - the source checkout is dirty;
108
+ - the source checkout left the recorded target branch;
109
+ - source and worktree histories diverged;
110
+ - the managed worktree is on the wrong branch.
111
+
112
+ Integration is fast-forward-only, so a failed close does not intentionally put
113
+ the source checkout into a merge-conflict state.
114
+
115
+ ## Native artifact download
116
+
117
+ When enabled, `download_artifact` accepts only the supported native file value
118
+ provided by the MCP host. It does not accept arbitrary signed URLs, local paths,
119
+ embedded credentials, or base64 strings as substitutes.
120
+
121
+ Downloads are streamed, size-limited, created without overwrite, and published
122
+ as owner-only files. See [Native File Download](artifact-exchange.md).
123
+
124
+ ## Logging
125
+
126
+ ForgeRelay logs requests/tool calls by default. Shell command previews are off
127
+ unless explicitly enabled:
128
+
129
+ ```bash
130
+ FORGERELAY_LOG_SHELL_COMMANDS=1
131
+ ```
132
+
133
+ Command arguments can contain secrets, so only enable command-preview logging
134
+ when necessary.
135
+
136
+ ## Package provenance
137
+
138
+ ForgeRelay is derived from the MIT-licensed DevSpace project. Public releases
139
+ preserve the upstream copyright/license and include `NOTICE.md`. The release
140
+ check fails if required attribution is removed.
141
+
142
+ See [NOTICE.md](../NOTICE.md) and [LICENSE](../LICENSE).
package/docs/setup.md ADDED
@@ -0,0 +1,132 @@
1
+ # Setup Guide
2
+
3
+ This guide is for users who want ChatGPT or another MCP host to work in local
4
+ projects through ForgeRelay.
5
+
6
+ ## Requirements
7
+
8
+ - Node `>=22.19 <27`
9
+ - npm
10
+ - Git
11
+ - Bash, including Git Bash or WSL on Windows
12
+ - a public HTTPS URL when the MCP host cannot connect directly to localhost
13
+
14
+ ForgeRelay does not create the public tunnel for you. Use Cloudflare Tunnel,
15
+ ngrok, Pinggy, Tailscale Funnel, or your own HTTPS reverse proxy.
16
+
17
+ ## Install and configure
18
+
19
+ Run:
20
+
21
+ ```bash
22
+ npx @akira-tl/forgerelay init
23
+ ```
24
+
25
+ The setup flow asks for the allowed project roots, local port, and public base
26
+ URL.
27
+
28
+ ### Project roots
29
+
30
+ Choose only the folders the connected MCP host should be able to open.
31
+
32
+ Examples:
33
+
34
+ ```text
35
+ ~/personal,~/work
36
+ ```
37
+
38
+ ```text
39
+ /Users/alice/dev,/Users/alice/work
40
+ ```
41
+
42
+ ```text
43
+ C:\Users\alice\dev,C:\Users\alice\work
44
+ ```
45
+
46
+ ### Local port
47
+
48
+ The default is `7676`.
49
+
50
+ ```text
51
+ http://127.0.0.1:7676/mcp
52
+ ```
53
+
54
+ ### Public base URL
55
+
56
+ Point your tunnel or reverse proxy at:
57
+
58
+ ```text
59
+ http://127.0.0.1:7676
60
+ ```
61
+
62
+ Enter the public origin without `/mcp`:
63
+
64
+ ```text
65
+ https://your-tunnel-host.example.com
66
+ ```
67
+
68
+ Configure the MCP client with:
69
+
70
+ ```text
71
+ https://your-tunnel-host.example.com/mcp
72
+ ```
73
+
74
+ ## Start the server
75
+
76
+ ```bash
77
+ npx @akira-tl/forgerelay serve
78
+ ```
79
+
80
+ For a one-run public URL override:
81
+
82
+ ```bash
83
+ FORGERELAY_PUBLIC_BASE_URL="https://new-tunnel.example.com" \
84
+ npx @akira-tl/forgerelay serve
85
+ ```
86
+
87
+ For a stable public URL:
88
+
89
+ ```bash
90
+ npx @akira-tl/forgerelay config set publicBaseUrl https://forge.example.com
91
+ npx @akira-tl/forgerelay serve
92
+ ```
93
+
94
+ ## Approve the client
95
+
96
+ When ChatGPT, Claude, or another MCP client connects, ForgeRelay displays an
97
+ Owner-password approval page. Enter the Owner password printed during setup.
98
+
99
+ New installations use:
100
+
101
+ ```text
102
+ ~/.forgerelay/config.json
103
+ ~/.forgerelay/auth.json
104
+ ```
105
+
106
+ Keep `auth.json` private.
107
+
108
+ ### Existing DevSpace configuration
109
+
110
+ During migration, if `~/.forgerelay` does not exist but `~/.devspace` does,
111
+ ForgeRelay reuses the legacy directory automatically. `FORGERELAY_CONFIG_DIR`
112
+ takes precedence over the legacy `DEVSPACE_CONFIG_DIR` environment variable.
113
+
114
+ You do not need to move a working legacy config before starting ForgeRelay.
115
+
116
+ ## Check the setup
117
+
118
+ ```bash
119
+ npx @akira-tl/forgerelay doctor
120
+ ```
121
+
122
+ The doctor command reports the resolved config, Node runtime, platform, Git,
123
+ Bash, public URL, allowed hosts, and native SQLite dependency status.
124
+
125
+ ## Running from a local checkout
126
+
127
+ For ForgeRelay development itself:
128
+
129
+ ```bash
130
+ npm install --include=dev
131
+ npm run dev
132
+ ```
@@ -0,0 +1,189 @@
1
+ # Versioning and Release Management
2
+
3
+ ForgeRelay is published as `@akira-tl/forgerelay` from the
4
+ `Akira-TL/forgerelay` GitHub repository.
5
+
6
+ ## Version format
7
+
8
+ ForgeRelay uses standard Semantic Versioning:
9
+
10
+ ```text
11
+ MAJOR.MINOR.PATCH
12
+ ```
13
+
14
+ The initial independent release is:
15
+
16
+ ```text
17
+ 0.1.0
18
+ ```
19
+
20
+ The old temporary fork version format (`X.Y.Z-akira.N`) is no longer used.
21
+ Upstream DevSpace provenance and baseline information belong in Git history,
22
+ `NOTICE.md`, and release notes rather than ForgeRelay's public version number.
23
+
24
+ While the project is below `1.0.0`:
25
+
26
+ - patch releases are backward-compatible fixes and small refinements;
27
+ - minor releases may add substantial runtime capabilities and may include
28
+ explicitly documented pre-1.0 interface changes;
29
+ - `1.0.0` marks the first stable public runtime/tool contract.
30
+
31
+ ## Changelog policy
32
+
33
+ All user-visible changes first land under:
34
+
35
+ ```text
36
+ ## [Unreleased]
37
+ ```
38
+
39
+ Use the usual categories when relevant:
40
+
41
+ - Added
42
+ - Changed
43
+ - Fixed
44
+ - Security
45
+ - Removed
46
+ - Compatibility
47
+
48
+ The release helper promotes `Unreleased` into a dated release section. It
49
+ refuses to bump a version when `Unreleased` is empty.
50
+
51
+ ## Release commands
52
+
53
+ Check package, lockfile, repository, changelog, and attribution metadata:
54
+
55
+ ```bash
56
+ npm run release:check
57
+ ```
58
+
59
+ Prepare the next patch release:
60
+
61
+ ```bash
62
+ npm run release:patch
63
+ ```
64
+
65
+ `npm run release:next` is an alias for a patch release.
66
+
67
+ Prepare a minor or major release:
68
+
69
+ ```bash
70
+ npm run release:minor
71
+ npm run release:major
72
+ ```
73
+
74
+ The bump commands update:
75
+
76
+ - `package.json`
77
+ - root package metadata in `package-lock.json`
78
+ - `CHANGELOG.md`
79
+
80
+ They do not commit, tag, push, or publish.
81
+
82
+ Run the full local release gate with:
83
+
84
+ ```bash
85
+ npm run release:verify
86
+ ```
87
+
88
+ Validate a specific tag with:
89
+
90
+ ```bash
91
+ npm run release:tag-check -- v0.1.0
92
+ ```
93
+
94
+ A release tag must exactly equal `v` followed by the package version, and
95
+ `Unreleased` must be empty.
96
+
97
+ ## Tag-triggered publishing
98
+
99
+ `.github/workflows/release.yml` runs for tags matching `v*.*.*` in the
100
+ `Akira-TL/forgerelay` repository. The release helper performs the strict SemVer
101
+ validation; tags that only match the broad GitHub glob but not the package
102
+ version are rejected.
103
+
104
+ For a valid tag, the workflow:
105
+
106
+ 1. checks out the tagged commit with full Git history;
107
+ 2. verifies the tagged commit is contained in `origin/main`;
108
+ 3. installs dependencies;
109
+ 4. checks the tag against `package.json` and `CHANGELOG.md`;
110
+ 5. runs `npm run release:verify`;
111
+ 6. runs `npm pack --dry-run`;
112
+ 7. checks whether the exact npm version is already published;
113
+ 8. publishes `@akira-tl/forgerelay` when necessary;
114
+ 9. creates the matching GitHub Release after npm publication succeeds.
115
+
116
+ The npm existence check makes the workflow safely restartable when npm
117
+ publication succeeds but GitHub Release creation fails afterward.
118
+
119
+ ## First public npm release
120
+
121
+ Before the first public release, rename the GitHub repository to:
122
+
123
+ ```text
124
+ Akira-TL/forgerelay
125
+ ```
126
+
127
+ and update the local `origin` remote if Git does not update it automatically.
128
+ The package metadata and release workflow intentionally target the final
129
+ ForgeRelay repository name.
130
+
131
+ If `@akira-tl/forgerelay` does not yet exist on npm, GitHub Actions can bootstrap
132
+ it with a temporary npm publishing token:
133
+
134
+ 1. create an npm token that can publish packages in the `@akira-tl` scope;
135
+ 2. add it to `Akira-TL/forgerelay` as the Actions secret `NPM_TOKEN`;
136
+ 3. push the first verified ForgeRelay release tag;
137
+ 4. let the tag workflow publish the package;
138
+ 5. configure npm Trusted Publishing for the package using:
139
+ - owner: `Akira-TL`
140
+ - repository: `forgerelay`
141
+ - workflow filename: `release.yml`
142
+ 6. delete the `NPM_TOKEN` GitHub secret.
143
+
144
+ After Trusted Publishing is configured, normal releases use GitHub Actions OIDC
145
+ through the workflow's `id-token: write` permission and do not need a long-lived
146
+ npm publishing token.
147
+
148
+ ## Normal release procedure
149
+
150
+ 1. Put all intended user-visible changes under `Unreleased`.
151
+ 2. Run `npm run release:check`.
152
+ 3. Run the appropriate `release:patch`, `release:minor`, or `release:major`
153
+ command.
154
+ 4. Review the generated version and changelog diff.
155
+ 5. Run `npm run release:verify`.
156
+ 6. Commit the release-ready code and metadata and push `main`.
157
+ 7. Create the exact version tag, for example:
158
+
159
+ ```bash
160
+ git tag v0.2.0
161
+ git push origin v0.2.0
162
+ ```
163
+
164
+ The tag push is the publication action.
165
+
166
+ ## Attribution guardrails
167
+
168
+ `release:check` intentionally verifies that public packages keep the required
169
+ upstream provenance:
170
+
171
+ - `LICENSE` must preserve `Copyright (c) 2026 Waishnav`;
172
+ - `LICENSE` records Akira-TL's modifications without replacing the upstream
173
+ notice;
174
+ - `NOTICE.md` must identify `https://github.com/Waishnav/devspace`;
175
+ - `NOTICE.md` must state that ForgeRelay is independently maintained by Akira-TL;
176
+ - the npm package must include `NOTICE.md`.
177
+
178
+ Do not weaken these checks as part of ordinary branding or release work.
179
+
180
+ ## Compatibility identifiers
181
+
182
+ The ForgeRelay rename does not require destructive migration of internal state.
183
+ Some persisted identifiers deliberately keep historical DevSpace names when
184
+ changing them would orphan existing data, including older SQLite schema/file
185
+ identifiers and review Git refs. These are storage compatibility details, not
186
+ public product branding.
187
+
188
+ New user-facing configuration, managed branches, CLI output, package metadata,
189
+ and release names use ForgeRelay.
@@ -0,0 +1,30 @@
1
+ ---
2
+ schema: forgerelay-agent/v1
3
+ name: claude-implementer
4
+ description: Implementation profile for multi-file changes, careful refactors, and failing test repair.
5
+ provider: claude
6
+ model: sonnet
7
+ thinking: high
8
+ ---
9
+
10
+ Take ownership of the requested implementation while keeping the change narrow.
11
+ Start by locating the smallest set of files that define the behavior, then make
12
+ the change in the existing style.
13
+
14
+ Working rules:
15
+
16
+ - Preserve existing public behavior unless the prompt explicitly asks to change it.
17
+ - Avoid broad rewrites, dependency churn, formatting-only edits, and speculative cleanup.
18
+ - Update or add focused tests when behavior changes.
19
+ - Run the most relevant checks available for the touched area, or explain why they could not run.
20
+ - If the task is ambiguous or blocked by missing context, stop with a clear blocker instead of guessing.
21
+
22
+ Report:
23
+
24
+ ```text
25
+ summary:
26
+ tests_run:
27
+ blockers:
28
+ risks:
29
+ follow_up_needed:
30
+ ```
@@ -0,0 +1,27 @@
1
+ ---
2
+ schema: forgerelay-agent/v1
3
+ name: codex-explorer
4
+ description: Read-only profile for bounded codebase questions, architecture tracing, and risk discovery.
5
+ provider: codex
6
+ model: gpt-5.4-mini
7
+ thinking: high
8
+ ---
9
+
10
+ Investigate without editing. Use this profile to answer bounded questions such
11
+ as how a feature works, where a behavior is implemented, what depends on a
12
+ module, or which files are relevant before a change.
13
+
14
+ - Do not modify files.
15
+ - Prefer direct evidence from code over broad repository summaries.
16
+ - Cite file paths, symbols, and commands that support the conclusion.
17
+ - Separate confirmed facts from inferences.
18
+ - Call out unknowns that would require running the app, inspecting external state, or asking the user.
19
+
20
+ Report:
21
+
22
+ ```text
23
+ answer:
24
+ evidence:
25
+ relevant_files:
26
+ unknowns:
27
+ ```