auvrynt 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +239 -0
  3. package/dist/blender-client.js +109 -0
  4. package/dist/blender-tools.js +930 -0
  5. package/dist/cli.js +370 -0
  6. package/dist/config.js +211 -0
  7. package/dist/connection-status.js +91 -0
  8. package/dist/db/client.js +22 -0
  9. package/dist/db/schema.js +29 -0
  10. package/dist/dotnet-tools.js +223 -0
  11. package/dist/git-worktrees.js +134 -0
  12. package/dist/git.js +41 -0
  13. package/dist/godot-animation-tilemap.js +82 -0
  14. package/dist/godot-csharp-build.js +93 -0
  15. package/dist/godot-csharp-project.js +157 -0
  16. package/dist/godot-csharp-runner.js +146 -0
  17. package/dist/godot-csharp-semantic.js +161 -0
  18. package/dist/godot-csharp-validate.js +71 -0
  19. package/dist/godot-dotnet-env.js +169 -0
  20. package/dist/godot-editor-bridge.js +140 -0
  21. package/dist/godot-gdscript.js +824 -0
  22. package/dist/godot-project-settings.js +223 -0
  23. package/dist/godot-runtime-testing.js +249 -0
  24. package/dist/godot-tools.js +183 -0
  25. package/dist/image-tools.js +157 -0
  26. package/dist/logger.js +76 -0
  27. package/dist/oauth-provider.js +266 -0
  28. package/dist/pi-tools.js +81 -0
  29. package/dist/processes.js +218 -0
  30. package/dist/review-checkpoints.js +142 -0
  31. package/dist/roots.js +53 -0
  32. package/dist/search-discovery.js +271 -0
  33. package/dist/serena-manager.js +443 -0
  34. package/dist/serena-tools.js +411 -0
  35. package/dist/server.js +2835 -0
  36. package/dist/skills.js +45 -0
  37. package/dist/ui/.vite/manifest.json +2520 -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-BJqQFYI6.js +1 -0
  43. package/dist/ui/assets/angular-ts-CMJECO0Y.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-DWeXpBBr.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-CLbttLOq.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-BOzY0P2V.js +1 -0
  65. package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
  66. package/dist/ui/assets/c-BG-8uJvh.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-I_17IuGe.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-C0B8hmok.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-DDJXt6Vs.js +1 -0
  84. package/dist/ui/assets/crystal-Bexqace6.js +1 -0
  85. package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
  86. package/dist/ui/assets/css-DSQhw_9R.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-Z8YYkHOr.js +1 -0
  102. package/dist/ui/assets/elixir-CG9uKtAF.js +1 -0
  103. package/dist/ui/assets/elm-GfWG2IfT.js +1 -0
  104. package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
  105. package/dist/ui/assets/erb-xe89e73J.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-CoTL_uSE.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-DAn4UCSu.js +1 -0
  131. package/dist/ui/assets/glimmer-ts-Tjyi6Gh5.js +1 -0
  132. package/dist/ui/assets/glsl-CtTDZoqR.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-D5gcC_Jk.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-BJXY27dt.js +1 -0
  145. package/dist/ui/assets/haml-BLfFoZf7.js +1 -0
  146. package/dist/ui/assets/handlebars-Dw6CWkvN.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-Dcg0-F-S.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-CAcAWvoN.js +1 -0
  157. package/dist/ui/assets/html-derivative-8aSW2E_7.js +1 -0
  158. package/dist/ui/assets/http-B2YR_3V1.js +1 -0
  159. package/dist/ui/assets/hurl-BnDJ9Zhf.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-Doxi4W8u.js +1 -0
  165. package/dist/ui/assets/javascript-BbRdEqti.js +1 -0
  166. package/dist/ui/assets/jinja-CS3Tpv_Q.js +1 -0
  167. package/dist/ui/assets/jison-BkPGYVHR.js +1 -0
  168. package/dist/ui/assets/json-BMt1m3m8.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-CQKrJXXY.js +1 -0
  175. package/dist/ui/assets/julia-BuN7i2du.js +1 -0
  176. package/dist/ui/assets/just-BswEPFPu.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-DU2VyFfA.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-Cmz1L3dq.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-CfVXhkaJ.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-C5bfqGiA.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-CVBXYfyq.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-CzJafxLa.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-DABKtHtM.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-CBh7L3lZ.js +1 -0
  232. package/dist/ui/assets/php-DFbI9q5p.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-C_PxC7gO.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-DtngoFFK.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-DohkcevW.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-C4t8J0_E.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-OGbTbjgY.js +1 -0
  263. package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
  264. package/dist/ui/assets/review-payload-C5Qz60Kq.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-CfBbbcvC.js +1 -0
  272. package/dist/ui/assets/ruby-Bw0mpxHY.js +1 -0
  273. package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
  274. package/dist/ui/assets/sas-Cs3s9JOf.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/scss-sRxNJS54.js +1 -0
  279. package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
  280. package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
  281. package/dist/ui/assets/shellscript-B0X6wh0R.js +1 -0
  282. package/dist/ui/assets/shellsession-D2FdOioR.js +1 -0
  283. package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
  284. package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
  285. package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
  286. package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
  287. package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
  288. package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
  289. package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
  290. package/dist/ui/assets/soy-s6g9OjJ1.js +1 -0
  291. package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
  292. package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
  293. package/dist/ui/assets/sql-DVTnh5V-.js +1 -0
  294. package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
  295. package/dist/ui/assets/stata-DFIDiXF9.js +1 -0
  296. package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
  297. package/dist/ui/assets/surrealql-DVfrsLyg.js +1 -0
  298. package/dist/ui/assets/svelte-D5GsxESq.js +1 -0
  299. package/dist/ui/assets/swift-DonLKvLd.js +1 -0
  300. package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
  301. package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
  302. package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
  303. package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
  304. package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
  305. package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
  306. package/dist/ui/assets/templ-DI-Zyqzd.js +1 -0
  307. package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
  308. package/dist/ui/assets/tex-WHHmlbJI.js +1 -0
  309. package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
  310. package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
  311. package/dist/ui/assets/ts-tags-Dwpo2RFJ.js +1 -0
  312. package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
  313. package/dist/ui/assets/tsx-ph_idaAW.js +1 -0
  314. package/dist/ui/assets/turtle-ByJddavk.js +1 -0
  315. package/dist/ui/assets/twig-YO17jFjR.js +1 -0
  316. package/dist/ui/assets/typescript-CbAxjhkl.js +1 -0
  317. package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
  318. package/dist/ui/assets/typst-DI99ib-x.js +1 -0
  319. package/dist/ui/assets/useFileDiffInstance-B2DLX3Vg.js +244 -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-CraHL-Ps.js +1 -0
  331. package/dist/ui/assets/vue-html-e9tyZNtS.js +1 -0
  332. package/dist/ui/assets/vue-vine-CofmxaUb.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-8--oTbCd.css +1 -0
  342. package/dist/ui/assets/workspace-app-C5QsE314.js +118 -0
  343. package/dist/ui/assets/xml-BWSdPZHm.js +1 -0
  344. package/dist/ui/assets/xsl-BtCt7Hx8.js +1 -0
  345. package/dist/ui/assets/yaml-BZiTw7cQ.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 +57 -0
  350. package/dist/view-image.js +104 -0
  351. package/dist/web-tools.js +200 -0
  352. package/dist/window-capture.js +74 -0
  353. package/dist/workspace-store.js +125 -0
  354. package/dist/workspaces.js +226 -0
  355. package/docs/DEVELOPMENT_TOOLS.md +95 -0
  356. package/docs/assets/auvrynt-logo-light.png +0 -0
  357. package/docs/assets/auvrynt-screenshot.png +0 -0
  358. package/docs/chatgpt-coding-workflow.md +143 -0
  359. package/docs/configuration.md +132 -0
  360. package/docs/gotchas.md +215 -0
  361. package/docs/security.md +100 -0
  362. package/docs/setup.md +132 -0
  363. package/package.json +70 -0
  364. package/scripts/dev-server.mjs +120 -0
@@ -0,0 +1,125 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { openDatabase } from "./db/client.js";
3
+ import { workspaceSessions, } from "./db/schema.js";
4
+ export class SqliteWorkspaceStore {
5
+ database;
6
+ constructor(stateDir) {
7
+ this.database = openDatabase(stateDir);
8
+ this.migrate();
9
+ }
10
+ createSession(input) {
11
+ const now = new Date().toISOString();
12
+ const session = {
13
+ id: input.id,
14
+ root: input.root,
15
+ status: "active",
16
+ mode: input.mode ?? "checkout",
17
+ sourceRoot: input.sourceRoot,
18
+ baseRef: input.baseRef,
19
+ baseSha: input.baseSha,
20
+ managed: input.managed ?? false,
21
+ createdAt: now,
22
+ lastUsedAt: now,
23
+ };
24
+ this.database.db
25
+ .insert(workspaceSessions)
26
+ .values({
27
+ id: session.id,
28
+ root: session.root,
29
+ status: session.status,
30
+ mode: session.mode,
31
+ sourceRoot: session.sourceRoot ?? null,
32
+ baseRef: session.baseRef ?? null,
33
+ baseSha: session.baseSha ?? null,
34
+ managed: String(session.managed),
35
+ createdAt: session.createdAt,
36
+ lastUsedAt: session.lastUsedAt,
37
+ })
38
+ .run();
39
+ return session;
40
+ }
41
+ getSession(id) {
42
+ const row = this.database.db
43
+ .select()
44
+ .from(workspaceSessions)
45
+ .where(eq(workspaceSessions.id, id))
46
+ .get();
47
+ return row ? rowToWorkspaceSession(row) : undefined;
48
+ }
49
+ touchSession(id) {
50
+ this.database.db
51
+ .update(workspaceSessions)
52
+ .set({ lastUsedAt: new Date().toISOString() })
53
+ .where(eq(workspaceSessions.id, id))
54
+ .run();
55
+ }
56
+ close() {
57
+ this.database.close();
58
+ }
59
+ migrate() {
60
+ this.database.sqlite.exec(`
61
+ create table if not exists workspace_sessions (
62
+ id text primary key,
63
+ root text not null,
64
+ status text not null default 'active',
65
+ mode text not null default 'checkout',
66
+ source_root text,
67
+ base_ref text,
68
+ base_sha text,
69
+ managed text not null default 'false',
70
+ created_at text not null,
71
+ last_used_at text not null
72
+ );
73
+
74
+ create index if not exists workspace_sessions_root_idx
75
+ on workspace_sessions(root, last_used_at desc);
76
+
77
+ create index if not exists workspace_sessions_status_idx
78
+ on workspace_sessions(status, last_used_at desc);
79
+
80
+ create table if not exists loaded_agent_files (
81
+ workspace_session_id text not null,
82
+ path text not null,
83
+ content_hash text not null,
84
+ content text not null,
85
+ loaded_at text not null,
86
+ last_seen_at text not null,
87
+ primary key (workspace_session_id, path),
88
+ foreign key (workspace_session_id)
89
+ references workspace_sessions(id)
90
+ on delete cascade
91
+ );
92
+
93
+ create index if not exists loaded_agent_files_path_idx
94
+ on loaded_agent_files(path);
95
+ `);
96
+ this.addColumnIfMissing("workspace_sessions", "mode", "text not null default 'checkout'");
97
+ this.addColumnIfMissing("workspace_sessions", "source_root", "text");
98
+ this.addColumnIfMissing("workspace_sessions", "base_ref", "text");
99
+ this.addColumnIfMissing("workspace_sessions", "base_sha", "text");
100
+ this.addColumnIfMissing("workspace_sessions", "managed", "text not null default 'false'");
101
+ }
102
+ addColumnIfMissing(table, column, definition) {
103
+ const columns = this.database.sqlite.prepare(`pragma table_info(${table})`).all();
104
+ if (columns.some((existingColumn) => existingColumn.name === column))
105
+ return;
106
+ this.database.sqlite.exec(`alter table ${table} add column ${column} ${definition}`);
107
+ }
108
+ }
109
+ export function createWorkspaceStore(stateDir) {
110
+ return new SqliteWorkspaceStore(stateDir);
111
+ }
112
+ function rowToWorkspaceSession(row) {
113
+ return {
114
+ id: row.id,
115
+ root: row.root,
116
+ status: row.status,
117
+ mode: row.mode === "worktree" ? "worktree" : "checkout",
118
+ sourceRoot: row.sourceRoot ?? undefined,
119
+ baseRef: row.baseRef ?? undefined,
120
+ baseSha: row.baseSha ?? undefined,
121
+ managed: row.managed === "true",
122
+ createdAt: row.createdAt,
123
+ lastUsedAt: row.lastUsedAt,
124
+ };
125
+ }
@@ -0,0 +1,226 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, opendir, stat } from "node:fs/promises";
3
+ import { dirname, join, relative, resolve, sep } from "node:path";
4
+ import { loadProjectContextFiles } from "@earendil-works/pi-coding-agent";
5
+ import { createManagedWorktree } from "./git-worktrees.js";
6
+ import { assertAllowedPath, isPathInsideRoot, resolveAllowedPath } from "./roots.js";
7
+ import { loadWorkspaceSkills, markSkillActivated, resolveSkillReadPath, } from "./skills.js";
8
+ export class WorkspaceRegistry {
9
+ config;
10
+ store;
11
+ workspaces = new Map();
12
+ constructor(config, store) {
13
+ this.config = config;
14
+ this.store = store;
15
+ }
16
+ async openWorkspace(input) {
17
+ const options = typeof input === "string" ? { path: input } : input;
18
+ const mode = options.mode ?? "checkout";
19
+ if (mode === "worktree") {
20
+ return this.openWorktreeWorkspace(options.path, options.baseRef);
21
+ }
22
+ return this.openCheckoutWorkspace(options.path);
23
+ }
24
+ getWorkspace(workspaceId) {
25
+ const workspace = this.workspaces.get(workspaceId);
26
+ if (workspace) {
27
+ this.store?.touchSession(workspaceId);
28
+ return workspace;
29
+ }
30
+ const session = this.store?.getSession(workspaceId);
31
+ if (!session) {
32
+ throw new Error(`Unknown workspaceId: ${workspaceId}. Call open_workspace first.`);
33
+ }
34
+ const root = this.assertWorkspaceRootAllowed(session.root, session.mode, session.sourceRoot);
35
+ const restoredWorkspace = {
36
+ id: session.id,
37
+ root,
38
+ mode: session.mode,
39
+ sourceRoot: session.sourceRoot,
40
+ worktree: session.mode === "worktree"
41
+ ? {
42
+ path: root,
43
+ baseRef: session.baseRef ?? "HEAD",
44
+ baseSha: session.baseSha ?? "",
45
+ dirtySource: false,
46
+ detached: true,
47
+ managed: session.managed,
48
+ }
49
+ : undefined,
50
+ ...this.loadSkillsForWorkspace(root),
51
+ activatedSkillDirs: new Set(),
52
+ };
53
+ this.store?.touchSession(workspaceId);
54
+ this.workspaces.set(restoredWorkspace.id, restoredWorkspace);
55
+ return restoredWorkspace;
56
+ }
57
+ resolvePath(workspace, inputPath) {
58
+ const absolutePath = resolveAllowedPath(inputPath, workspace.root, [workspace.root]);
59
+ if (!isPathInsideRoot(absolutePath, workspace.root)) {
60
+ throw new Error(`Path is outside workspace root: ${inputPath}`);
61
+ }
62
+ return absolutePath;
63
+ }
64
+ resolveReadPath(workspace, inputPath) {
65
+ try {
66
+ return {
67
+ absolutePath: this.resolvePath(workspace, inputPath),
68
+ readRoots: [workspace.root],
69
+ };
70
+ }
71
+ catch (workspaceError) {
72
+ const skillRead = resolveSkillReadPath(workspace.skills, workspace.activatedSkillDirs, inputPath);
73
+ if (!skillRead)
74
+ throw workspaceError;
75
+ return {
76
+ absolutePath: skillRead.absolutePath,
77
+ readRoots: [workspace.root, skillRead.skill.baseDir],
78
+ skillRead,
79
+ };
80
+ }
81
+ }
82
+ markReadPathLoaded(workspace, readPath) {
83
+ if (readPath.skillRead?.isSkillFile) {
84
+ markSkillActivated(workspace.activatedSkillDirs, readPath.skillRead.skill);
85
+ }
86
+ }
87
+ resolveWorkingDirectory(workspace, workingDirectory) {
88
+ const directory = workingDirectory ? this.resolvePath(workspace, workingDirectory) : workspace.root;
89
+ return assertAllowedPath(directory, [workspace.root]);
90
+ }
91
+ async openCheckoutWorkspace(path) {
92
+ const root = assertAllowedPath(path, this.config.allowedRoots);
93
+ await mkdir(root, { recursive: true });
94
+ const rootStats = await stat(root);
95
+ if (!rootStats.isDirectory()) {
96
+ throw new Error(`Workspace root must be a directory: ${path}`);
97
+ }
98
+ return this.createWorkspaceContext({ root, mode: "checkout" });
99
+ }
100
+ async openWorktreeWorkspace(path, baseRef) {
101
+ const worktree = await createManagedWorktree({
102
+ sourcePath: path,
103
+ baseRef,
104
+ config: this.config,
105
+ });
106
+ return this.createWorkspaceContext({
107
+ root: worktree.path,
108
+ mode: "worktree",
109
+ sourceRoot: worktree.sourceRoot,
110
+ worktree,
111
+ });
112
+ }
113
+ async createWorkspaceContext(input) {
114
+ const workspace = {
115
+ id: `ws_${randomUUID()}`,
116
+ root: input.root,
117
+ mode: input.mode,
118
+ sourceRoot: input.sourceRoot,
119
+ worktree: input.worktree,
120
+ ...this.loadSkillsForWorkspace(input.root),
121
+ activatedSkillDirs: new Set(),
122
+ };
123
+ this.store?.createSession({
124
+ id: workspace.id,
125
+ root: workspace.root,
126
+ mode: workspace.mode,
127
+ sourceRoot: workspace.sourceRoot,
128
+ baseRef: workspace.worktree?.baseRef,
129
+ baseSha: workspace.worktree?.baseSha,
130
+ managed: workspace.worktree?.managed,
131
+ });
132
+ this.workspaces.set(workspace.id, workspace);
133
+ const agentsFiles = this.loadInitialAgentsFiles(workspace.root);
134
+ const availableAgentsFiles = await this.findAvailableAgentsFiles(workspace.root, agentsFiles);
135
+ return { workspace, agentsFiles, availableAgentsFiles };
136
+ }
137
+ loadSkillsForWorkspace(root) {
138
+ const result = loadWorkspaceSkills(this.config, root);
139
+ return {
140
+ skills: result.skills,
141
+ skillDiagnostics: result.diagnostics,
142
+ };
143
+ }
144
+ assertWorkspaceRootAllowed(root, mode, sourceRoot) {
145
+ if (mode === "worktree") {
146
+ if (!sourceRoot) {
147
+ throw new Error(`Stored worktree workspace is missing sourceRoot: ${root}`);
148
+ }
149
+ assertAllowedPath(sourceRoot, this.config.allowedRoots);
150
+ return assertAllowedPath(root, [this.config.worktreeRoot]);
151
+ }
152
+ return assertAllowedPath(root, this.config.allowedRoots);
153
+ }
154
+ loadInitialAgentsFiles(root) {
155
+ const agentDir = resolve(this.config.agentDir);
156
+ return loadProjectContextFiles({ cwd: root, agentDir })
157
+ .filter((file) => {
158
+ const path = resolve(file.path);
159
+ if (isPathInsideRoot(path, agentDir))
160
+ return true;
161
+ return isPathInsideRoot(path, root) && dirname(path) === root;
162
+ })
163
+ .map((file) => ({
164
+ path: resolve(file.path),
165
+ content: file.content,
166
+ }));
167
+ }
168
+ async findAvailableAgentsFiles(root, loadedFiles) {
169
+ const loadedPaths = new Set(loadedFiles.map((file) => resolve(file.path)));
170
+ const discovered = [];
171
+ await walkWorkspace(root, async (path, entry) => {
172
+ if (!entry.isFile())
173
+ return;
174
+ if (!CONTEXT_FILE_NAMES.has(entry.name))
175
+ return;
176
+ if (loadedPaths.has(path))
177
+ return;
178
+ discovered.push({ path });
179
+ });
180
+ return discovered.sort((a, b) => a.path.localeCompare(b.path));
181
+ }
182
+ }
183
+ const CONTEXT_FILE_NAMES = new Set(["AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD"]);
184
+ const SKIPPED_CONTEXT_DIRS = new Set([
185
+ ".git",
186
+ ".hg",
187
+ ".svn",
188
+ ".auvrynt",
189
+ "node_modules",
190
+ "dist",
191
+ "build",
192
+ ".next",
193
+ ".turbo",
194
+ ".cache",
195
+ ]);
196
+ export function formatAgentsPath(path, workspaceRoot) {
197
+ if (!workspaceRoot)
198
+ return path.split(sep).join("/");
199
+ const relationship = relative(workspaceRoot, path);
200
+ if (relationship === "" ||
201
+ relationship.startsWith("..") ||
202
+ relationship === ".." ||
203
+ relationship.includes(`..${sep}`)) {
204
+ return path.split(sep).join("/");
205
+ }
206
+ return relationship.split(sep).join("/");
207
+ }
208
+ async function walkWorkspace(directory, visit) {
209
+ let entries;
210
+ try {
211
+ entries = await opendir(directory);
212
+ }
213
+ catch {
214
+ return;
215
+ }
216
+ for await (const entry of entries) {
217
+ const path = join(directory, entry.name);
218
+ if (entry.isDirectory()) {
219
+ if (!SKIPPED_CONTEXT_DIRS.has(entry.name)) {
220
+ await walkWorkspace(path, visit);
221
+ }
222
+ continue;
223
+ }
224
+ await visit(path, entry);
225
+ }
226
+ }
@@ -0,0 +1,95 @@
1
+ # Auvrynt Local Development Tools Guide
2
+
3
+ Auvrynt extends Model Context Protocol (MCP) with tools for web application development, C#/.NET software development, Godot 4 game development, image inspection/comparison, and persistent process management.
4
+
5
+ ---
6
+
7
+ ## Architecture & Security Boundaries
8
+
9
+ Use `get_connection_status` after `open_workspace` to automatically probe the
10
+ authenticated MCP session, the local Blender bridge, the Godot editor bridge,
11
+ browser support, Chrome MCP registration, and tracked workspace processes. A
12
+ browser marked `available` means Playwright is installed; browser sessions are
13
+ created on demand and are not persistent connections.
14
+
15
+ 1. **Workspace Boundary Enforcement**: Every path input must be relative to the opened workspace root. Path traversal (`..`) or symbolic links escaping the workspace are blocked by `WorkspaceRegistry.resolvePath`.
16
+ 2. **Persistent Processes**: Long-running servers, .NET applications, and Godot games run as background child processes managed by `ProcessManager`. Standard output and error streams are captured in bounded in-memory log buffers (max 1000 lines).
17
+ 3. **Secret Redaction**: Environment variables containing keywords like `TOKEN`, `SECRET`, `PASSWORD`, `KEY`, or `CONNECTION_STRING` are automatically redacted in responses and log entries.
18
+ 4. **Browser & Network Security**: `capture_page_screenshot` and `inspect_page` enforce strict SSRF defenses, blocking non-HTTP(S) schemes (`file:`, `data:`, `javascript:`) and cloud metadata / private network IP addresses unless targeting recognized local development hosts (`localhost`, `127.0.0.1`, `[::1]`).
19
+
20
+ ---
21
+
22
+ ## Tool Reference
23
+
24
+ ### Phase 1: Persistent Process Management
25
+ - `start_process`: Spawns background process inside workspace. Returns `processId`.
26
+ - `get_process_logs`: Tail stdout/stderr for a process (default 100 lines, max 500 lines).
27
+ - `list_processes`: List tracked background processes for a workspace.
28
+ - `stop_process`: Gracefully stop or force-kill (`force: true`) process tree.
29
+
30
+ ### Phase 2: Structured Project Discovery & Search
31
+ - `glob_files`: Fast file globbing respecting `.gitignore` and default exclusions (`.git`, `node_modules`, `dist`, `bin`, `obj`).
32
+ - `search_text`: Workspace-wide text search returning matching lines and context snippets.
33
+ - `inspect_project`: Auto-detect Node.js, TypeScript, .NET, Godot, Python, Git projects and recommended build/run/test commands.
34
+
35
+ ### Phase 3: Web-Development Tools
36
+ - `start_dev_server`: Launch web dev server (auto-detects `npm run dev` script).
37
+ - `capture_page_screenshot`: Playwright browser screenshot saved inside workspace and returned as MCP image content.
38
+ - `inspect_page`: Extract structured page title, headings, buttons, links, landmarks, console errors, and failed requests.
39
+
40
+ ### Phase 4: Image and Screenshot Inspection
41
+ - `inspect_image`: Inspect dimensions, format, MIME type, alpha, and color palette.
42
+ - `compare_images`: RGBA pixel-by-pixel image comparison returning match %, changed pixels, and optional diff PNG output.
43
+ - `inspect_sprite`: Analyze sprite sheet grid dimensions, cell divisibility, and frame bounds.
44
+ - `split_sprite_sheet`: Slices sprite sheet into individual frame PNGs saved inside the workspace.
45
+
46
+ ### Phase 5: C# and .NET Tools
47
+ - `inspect_dotnet_project`: Parse `.csproj`, `.fsproj`, `.sln` for SDK style, frameworks, packages, and test runner.
48
+ - `dotnet_restore`: Run `dotnet restore` securely.
49
+ - `dotnet_build`: Run `dotnet build` returning structured compiler errors/warnings with line and column.
50
+ - `dotnet_test`: Run `dotnet test` returning pass/fail/skip counts, failed test names, and assertion messages.
51
+ - `dotnet_run`: Launch .NET app as persistent process.
52
+ - `dotnet_format`: Run `dotnet format` (`verifyOnly` mode supported).
53
+
54
+ ### Phase 6: Godot 4 Tools
55
+ - `detect_godot_project`: Read `project.godot` for project name, main scene, renderer, autoloads, input actions.
56
+ - `godot_run`: Launch Godot game or editor as persistent process. Environment variable `GODOT_EXECUTABLE` overrides path.
57
+ - `inspect_godot_scene`: Parse `.tscn` text scene trees, node types, signals, and external resources.
58
+
59
+ ### Phase 7: Window Capture
60
+ - `capture_window`: Capture screenshot of Auvrynt-tracked application window (Windows only).
61
+ - `godot_capture_game`: Wrap window capture for Godot game processes.
62
+
63
+ ---
64
+
65
+ ## Development Workflows
66
+
67
+ ### Web Development Workflow
68
+ ```text
69
+ 1. open_workspace(path)
70
+ 2. inspect_project(workspaceId)
71
+ 3. start_dev_server(workspaceId)
72
+ 4. capture_page_screenshot(workspaceId, url="http://localhost:3000", outputPath="screenshots/home.png")
73
+ 5. inspect_page(workspaceId, url="http://localhost:3000")
74
+ 6. stop_process(workspaceId, processId)
75
+ ```
76
+
77
+ ### .NET Workflow
78
+ ```text
79
+ 1. open_workspace(path)
80
+ 2. inspect_dotnet_project(workspaceId, projectPath="MyApp.csproj")
81
+ 3. dotnet_restore(workspaceId, projectPath="MyApp.csproj")
82
+ 4. dotnet_build(workspaceId, projectPath="MyApp.csproj")
83
+ 5. dotnet_test(workspaceId, projectPath="MyApp.Tests.csproj")
84
+ 6. dotnet_run(workspaceId, projectPath="MyApp.csproj")
85
+ ```
86
+
87
+ ### Godot 4 Workflow
88
+ ```text
89
+ 1. open_workspace(path)
90
+ 2. detect_godot_project(workspaceId)
91
+ 3. inspect_godot_scene(workspaceId, scenePath="scenes/main.tscn")
92
+ 4. godot_run(workspaceId, projectPath=".")
93
+ 5. godot_capture_game(workspaceId, processId, outputPath="captures/game.png")
94
+ 6. stop_process(workspaceId, processId)
95
+ ```
@@ -0,0 +1,143 @@
1
+ # ChatGPT Coding Workflow
2
+
3
+ Auvrynt 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
+ Do not reopen the same folder unless:
21
+
22
+ - the `workspaceId` is rejected as unknown
23
+ - the user switches to another folder
24
+ - the user switches between checkout and worktree mode
25
+ - the user explicitly asks to reopen
26
+
27
+ ## Checkout Mode
28
+
29
+ Checkout mode is the default. Auvrynt opens the actual directory:
30
+
31
+ ```json
32
+ {
33
+ "path": "~/work/my-project"
34
+ }
35
+ ```
36
+
37
+ Use this when the user wants ChatGPT to work in the current checkout.
38
+
39
+ ## Worktree Mode
40
+
41
+ Use worktree mode for isolated parallel work:
42
+
43
+ ```json
44
+ {
45
+ "path": "~/work/my-project",
46
+ "mode": "worktree"
47
+ }
48
+ ```
49
+
50
+ Managed worktrees are created under:
51
+
52
+ ```text
53
+ ~/.auvrynt/worktrees
54
+ ```
55
+
56
+ Worktree mode requires a Git repository with at least one commit. It starts from
57
+ `HEAD` unless `baseRef` is provided.
58
+
59
+ Uncommitted source checkout changes are not copied into the managed worktree.
60
+ Auvrynt reports when the source checkout was dirty so the model can decide how
61
+ to proceed with the user.
62
+
63
+ ## Project Instructions
64
+
65
+ When a workspace opens, Auvrynt loads root-level instruction files:
66
+
67
+ - `AGENTS.md`
68
+ - `AGENTS.MD`
69
+ - `CLAUDE.md`
70
+ - `CLAUDE.MD`
71
+
72
+ Nested instruction files are returned as `availableAgentsFiles`. The model
73
+ should read the relevant nested file before working under that directory.
74
+
75
+ This keeps instructions explicit and inspectable instead of silently injecting
76
+ new context during later tool calls.
77
+
78
+ ## Skills
79
+
80
+ Skills are enabled by default for coding-agent workflows.
81
+
82
+ Auvrynt discovers skills from:
83
+
84
+ - `AUVRYNT_AGENT_DIR`, which defaults to `~/.codex`
85
+ - project `.pi/skills`
86
+ - optional paths from `AUVRYNT_SKILL_PATHS`
87
+
88
+ When `open_workspace` returns matching skills, the model should read the
89
+ advertised `SKILL.md` before following that skill.
90
+
91
+ Skill paths may be outside the workspace. Auvrynt only permits reading:
92
+
93
+ - advertised `SKILL.md` files
94
+ - files under a skill directory after that skill's `SKILL.md` has been read
95
+
96
+ Set `AUVRYNT_SKILLS=0` to hide skills from workspace output.
97
+
98
+ ## Tool Names
99
+
100
+ Short names are the default:
101
+
102
+ - `open_workspace`
103
+ - `read`
104
+ - `write`
105
+ - `edit`
106
+ - `bash`
107
+
108
+ By default, Auvrynt also runs in `AUVRYNT_TOOL_MODE=minimal`, so dedicated
109
+ `grep`, `glob`, and `ls` tools are hidden. Use `bash` with command-line tools
110
+ such as `rg`, `find`, and `ls` for search and directory inspection.
111
+
112
+ Legacy names are available with `AUVRYNT_TOOL_NAMING=legacy`:
113
+
114
+ - `open_workspace`
115
+ - `read_file`
116
+ - `write_file`
117
+ - `edit_file`
118
+ - `run_shell`
119
+
120
+ Use `AUVRYNT_TOOL_MODE=full` to restore dedicated search and directory tools.
121
+
122
+ ## Show Changes
123
+
124
+ By default, `AUVRYNT_WIDGETS=full`.
125
+
126
+ In that mode, Auvrynt attaches widget UI to the exposed workspace, file, edit,
127
+ and shell tools. The aggregate `show_changes` tool is not exposed by default.
128
+
129
+ Use `AUVRYNT_WIDGETS=off` to disable widget UI, or `AUVRYNT_WIDGETS=changes`
130
+ to expose the aggregate show-changes flow.
131
+
132
+ ## Shell Use
133
+
134
+ The shell tool is for commands that belong in a terminal:
135
+
136
+ - tests
137
+ - builds
138
+ - git inspection
139
+ - package scripts
140
+ - environment checks
141
+
142
+ File writes should go through the edit/write tools rather than shell
143
+ redirection, heredocs, `tee`, `sed -i`, or generated scripts.