auvrynt 1.0.2 → 1.0.5

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 (550) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +366 -233
  3. package/addons/auvrynt_bridge/auvrynt_bridge.gd +500 -0
  4. package/addons/auvrynt_bridge/plugin.cfg +7 -0
  5. package/bin/auvrynt-launcher.cjs +77 -0
  6. package/dist/artifact-registry.js +1 -0
  7. package/dist/aseprite-tools.js +1 -0
  8. package/dist/auth/connection-registry.js +145 -0
  9. package/dist/auth/connection-status.js +176 -0
  10. package/dist/auth/oauth-provider.js +617 -0
  11. package/dist/auth/room-registry.js +131 -0
  12. package/dist/auth/session-registry.js +531 -0
  13. package/dist/background-lifecycle.js +1 -0
  14. package/dist/blender-client.js +1 -109
  15. package/dist/blender-tools.js +1 -930
  16. package/dist/browser-stability.js +1 -0
  17. package/dist/cli/commands/help-command.js +10 -0
  18. package/dist/cli/commands/init-command.js +190 -0
  19. package/dist/cli/commands/integration-commands.js +88 -0
  20. package/dist/cli/commands/serve-command.js +83 -0
  21. package/dist/cli/commands/setup-command.js +81 -0
  22. package/dist/cli/commands/status-commands.js +166 -0
  23. package/dist/cli/commands/tunnel-command.js +127 -0
  24. package/dist/cli/commands/user-config-commands.js +105 -0
  25. package/dist/cli/dashboard-actions.js +516 -0
  26. package/dist/cli/dashboard-native-actions.js +282 -0
  27. package/dist/cli/foreground-server.js +270 -0
  28. package/dist/cli/instance-control.js +21 -0
  29. package/dist/cli/instance-lock.js +123 -0
  30. package/dist/cli/integration-bootstrap.js +206 -0
  31. package/dist/cli/lifecycle-manager.js +493 -0
  32. package/dist/cli/runtime-support.js +74 -0
  33. package/dist/cli/serena-detected-default.js +27 -0
  34. package/dist/cli/tunnel-health-monitor.js +182 -0
  35. package/dist/cli.js +82 -739
  36. package/dist/config.js +1 -243
  37. package/dist/connection-registry.js +1 -73
  38. package/dist/connection-status.js +1 -139
  39. package/dist/control-retry.js +1 -0
  40. package/dist/crash-recovery.js +1 -0
  41. package/dist/db/client.js +16 -3
  42. package/dist/db/schema.js +30 -0
  43. package/dist/dotnet-tools.js +1 -223
  44. package/dist/git-worktrees.js +1 -134
  45. package/dist/git.js +1 -41
  46. package/dist/godot-animation-tilemap.js +1 -82
  47. package/dist/godot-csharp-build.js +1 -93
  48. package/dist/godot-csharp-project.js +1 -157
  49. package/dist/godot-csharp-runner.js +1 -146
  50. package/dist/godot-csharp-semantic.js +1 -161
  51. package/dist/godot-csharp-validate.js +1 -71
  52. package/dist/godot-dotnet-env.js +1 -169
  53. package/dist/godot-editor-bridge.js +1 -140
  54. package/dist/godot-gdscript.js +1 -824
  55. package/dist/godot-project-settings.js +1 -223
  56. package/dist/godot-runtime-testing.js +1 -249
  57. package/dist/godot-tools.js +1 -183
  58. package/dist/http-rate-limit.js +1 -0
  59. package/dist/http-server-hardening.js +1 -0
  60. package/dist/image-tools.js +1 -157
  61. package/dist/infrastructure/command-reference.js +32 -0
  62. package/dist/infrastructure/config.js +424 -0
  63. package/dist/infrastructure/context7-auth.js +55 -0
  64. package/dist/infrastructure/http-rate-limit.js +42 -0
  65. package/dist/infrastructure/http-server-hardening.js +23 -0
  66. package/dist/infrastructure/integration-queue.js +46 -0
  67. package/dist/infrastructure/logger.js +129 -0
  68. package/dist/infrastructure/mcp-event-store.js +103 -0
  69. package/dist/infrastructure/ngrok-auth-pool.js +208 -0
  70. package/dist/infrastructure/request-context.js +14 -0
  71. package/dist/infrastructure/shutdown.js +37 -0
  72. package/dist/infrastructure/sse-heartbeat.js +47 -0
  73. package/dist/infrastructure/tool-capabilities.js +67 -0
  74. package/dist/infrastructure/tool-result-budget.js +175 -0
  75. package/dist/infrastructure/user-config.js +167 -0
  76. package/dist/integration-discovery.js +1 -98
  77. package/dist/integration-queue.js +1 -0
  78. package/dist/integrations/agent-reach/agent-reach-tools.js +196 -0
  79. package/dist/integrations/agent-reach/native-channels.js +468 -0
  80. package/dist/integrations/aseprite/aseprite-analysis-tools.js +368 -0
  81. package/dist/integrations/aseprite/aseprite-editing-tools.js +647 -0
  82. package/dist/integrations/aseprite/aseprite-live-tools.js +297 -0
  83. package/dist/integrations/aseprite/aseprite-safety-tools.js +594 -0
  84. package/dist/integrations/aseprite/aseprite-specialized-tools.js +289 -0
  85. package/dist/integrations/aseprite/aseprite-tools.js +837 -0
  86. package/dist/integrations/blender/blender-catalog-mesh.js +593 -0
  87. package/dist/integrations/blender/blender-catalog-object.js +906 -0
  88. package/dist/integrations/blender/blender-catalog-scene.js +266 -0
  89. package/dist/integrations/blender/blender-catalog-select.js +581 -0
  90. package/dist/integrations/blender/blender-catalog-stubs.js +7512 -0
  91. package/dist/integrations/blender/blender-catalog.js +165 -0
  92. package/dist/integrations/blender/blender-client.js +105 -0
  93. package/dist/integrations/blender/blender-tools.js +2243 -0
  94. package/dist/integrations/context7/context7-tools.js +106 -0
  95. package/dist/integrations/dotnet/dotnet-tools.js +195 -0
  96. package/dist/integrations/godot/godot-animation-tilemap.js +74 -0
  97. package/dist/integrations/godot/godot-csharp-build.js +91 -0
  98. package/dist/integrations/godot/godot-csharp-project.js +155 -0
  99. package/dist/integrations/godot/godot-csharp-runner.js +118 -0
  100. package/dist/integrations/godot/godot-csharp-semantic.js +146 -0
  101. package/dist/integrations/godot/godot-csharp-validate.js +71 -0
  102. package/dist/integrations/godot/godot-dotnet-env.js +134 -0
  103. package/dist/integrations/godot/godot-editor-bridge.js +328 -0
  104. package/dist/integrations/godot/godot-gdscript.js +536 -0
  105. package/dist/integrations/godot/godot-project-settings.js +178 -0
  106. package/dist/integrations/godot/godot-runtime-testing.js +263 -0
  107. package/dist/integrations/godot/godot-tools.js +193 -0
  108. package/dist/integrations/images/image-tools.js +414 -0
  109. package/dist/integrations/images/png-codec.js +251 -0
  110. package/dist/integrations/images/view-image.js +99 -0
  111. package/dist/integrations/images/window-capture.js +148 -0
  112. package/dist/integrations/integration-discovery.js +185 -0
  113. package/dist/integrations/obsidian/obsidian-tools.js +205 -0
  114. package/dist/integrations/playwright/browser-session.js +516 -0
  115. package/dist/integrations/playwright/browser-stability.js +36 -0
  116. package/dist/integrations/playwright/playwright-runtime.js +105 -0
  117. package/dist/integrations/playwright/web-tools.js +504 -0
  118. package/dist/integrations/roblox/roblox-helpers.js +381 -0
  119. package/dist/integrations/roblox/roblox-studio-client.js +112 -0
  120. package/dist/integrations/roblox/roblox-tools.js +106 -0
  121. package/dist/integrations/serena/serena-manager.js +464 -0
  122. package/dist/integrations/serena/serena-tools.js +411 -0
  123. package/dist/logger.js +1 -76
  124. package/dist/mcp-event-store.js +1 -0
  125. package/dist/oauth-provider.js +1 -377
  126. package/dist/pi-tools.js +1 -81
  127. package/dist/playwright-runtime.js +1 -0
  128. package/dist/process/background-lifecycle.js +189 -0
  129. package/dist/process/control-retry.js +42 -0
  130. package/dist/process/crash-recovery.js +23 -0
  131. package/dist/process/processes.js +456 -0
  132. package/dist/processes.js +1 -218
  133. package/dist/request-context.js +1 -0
  134. package/dist/review-checkpoints.js +1 -142
  135. package/dist/room-registry.js +1 -0
  136. package/dist/roots.js +1 -53
  137. package/dist/search-discovery.js +1 -271
  138. package/dist/serena-manager.js +1 -443
  139. package/dist/serena-tools.js +1 -411
  140. package/dist/server/dashboard-page-styles.js +331 -0
  141. package/dist/server/dashboard-page.js +1509 -0
  142. package/dist/server/dashboard-routes.js +46 -0
  143. package/dist/server/dashboard.js +240 -0
  144. package/dist/server/http-helpers.js +30 -0
  145. package/dist/server/integration-profile-update.js +37 -0
  146. package/dist/server/mcp-policy.js +169 -0
  147. package/dist/server/mcp-server-factory.js +127 -0
  148. package/dist/server/mcp-tool-registrar.js +182 -0
  149. package/dist/server/openai-session-hint.js +14 -0
  150. package/dist/server/tool-groups.js +29 -0
  151. package/dist/server/tool-logging.js +33 -0
  152. package/dist/server/tool-registration-shared.js +59 -0
  153. package/dist/server/tools/aseprite-advanced-tools-registration.js +547 -0
  154. package/dist/server/tools/aseprite-tools-registration.js +213 -0
  155. package/dist/server/tools/blender-tools-registration.js +690 -0
  156. package/dist/server/tools/core-file-tools-registration.js +459 -0
  157. package/dist/server/tools/dotnet-godot-window-tools-registration.js +120 -0
  158. package/dist/server/tools/godot-csharp-tools-registration.js +252 -0
  159. package/dist/server/tools/godot-gdscript-tools-registration.js +189 -0
  160. package/dist/server/tools/process-project-tools-registration.js +155 -0
  161. package/dist/server/tools/roblox-tools-registration.js +514 -0
  162. package/dist/server/tools/web-image-tools-registration.js +326 -0
  163. package/dist/server/tools/workspace-lifecycle-tools-registration.js +130 -0
  164. package/dist/server/ui-assets.js +97 -0
  165. package/dist/server/workspace-analytics.js +92 -0
  166. package/dist/server.js +453 -2713
  167. package/dist/session-registry.js +1 -0
  168. package/dist/shutdown.js +1 -0
  169. package/dist/skills.js +1 -45
  170. package/dist/sse-heartbeat.js +1 -0
  171. package/dist/tool-capabilities.js +1 -0
  172. package/dist/tool-result-budget.js +1 -0
  173. package/dist/tools/pi-tools.js +81 -0
  174. package/dist/tunnels/cloudflare-tunnel.js +217 -0
  175. package/dist/tunnels/cloudflared-service.js +174 -0
  176. package/dist/tunnels/ngrok-tunnel.js +220 -0
  177. package/dist/tunnels/tunnel-manager.js +186 -0
  178. package/dist/tunnels/tunnel-types.js +1 -0
  179. package/dist/tunnels/tunnel-utils.js +62 -0
  180. package/dist/ui/.vite/manifest.json +9 -2487
  181. package/dist/ui/assets/heavy-payload-D42A9ceL.js +1 -0
  182. package/dist/ui/assets/lightweight-diff-Cv4g9Hdr.js +13 -0
  183. package/dist/ui/assets/review-payload-DKIg1cKF.js +1 -0
  184. package/dist/ui/assets/workspace-app-CeK3NhmB.css +1 -0
  185. package/dist/ui/assets/{workspace-app-C5QsE314.js → workspace-app-CkUXnpl4.js} +6 -6
  186. package/dist/ui/brand-theme.js +23 -0
  187. package/dist/ui/workspace-app.html +15 -15
  188. package/dist/user-config.js +1 -57
  189. package/dist/view-image.js +1 -104
  190. package/dist/web-tools.js +1 -200
  191. package/dist/window-capture.js +1 -74
  192. package/dist/workspace/artifact-registry.js +69 -0
  193. package/dist/workspace/git-worktrees.js +141 -0
  194. package/dist/workspace/git.js +42 -0
  195. package/dist/workspace/review-checkpoints.js +142 -0
  196. package/dist/workspace/roots.js +56 -0
  197. package/dist/workspace/search-discovery.js +264 -0
  198. package/dist/workspace/skills.js +45 -0
  199. package/dist/workspace/workspace-store.js +219 -0
  200. package/dist/workspace/workspaces.js +314 -0
  201. package/dist/workspace-store.js +1 -125
  202. package/dist/workspaces.js +1 -226
  203. package/docs/CREATOR_STORE_FREE_ASSETS.md +162 -0
  204. package/docs/DEVELOPMENT_TOOLS.md +136 -93
  205. package/docs/assets/auvrynt-icon.png +0 -0
  206. package/docs/assets/auvrynt-icon.svg +20 -0
  207. package/docs/chatgpt-coding-workflow.md +143 -143
  208. package/docs/configuration.md +156 -124
  209. package/docs/diagnostics.md +79 -0
  210. package/docs/gotchas.md +244 -202
  211. package/docs/multi-agent-and-long-projects.md +91 -0
  212. package/docs/security.md +138 -100
  213. package/docs/setup.md +171 -131
  214. package/docs/source-layout.md +60 -0
  215. package/extensions/auvrynt_bridge/auvrynt_bridge.lua +594 -0
  216. package/extensions/auvrynt_bridge/live_analysis.lua +181 -0
  217. package/extensions/auvrynt_bridge/live_animation.lua +134 -0
  218. package/extensions/auvrynt_bridge/live_commands.lua +24 -0
  219. package/extensions/auvrynt_bridge/live_common.lua +130 -0
  220. package/extensions/auvrynt_bridge/live_document.lua +78 -0
  221. package/extensions/auvrynt_bridge/live_drawing.lua +125 -0
  222. package/extensions/auvrynt_bridge/live_effects.lua +91 -0
  223. package/extensions/auvrynt_bridge/live_palette_template.lua +167 -0
  224. package/extensions/auvrynt_bridge/live_selection.lua +110 -0
  225. package/extensions/auvrynt_bridge/live_structure.lua +129 -0
  226. package/extensions/auvrynt_bridge/package.json +17 -0
  227. package/guides/ASEPRITE_AGENT_GUIDE.md +133 -0
  228. package/guides/BLENDER_AGENT_GUIDE.md +472 -0
  229. package/guides/GODOT_AGENT_GUIDE.md +298 -0
  230. package/guides/PROJECT_ROUTER.md +165 -0
  231. package/guides/ROBLOX_AGENT_GUIDE.md +75 -0
  232. package/guides/SOFTWARE_AGENT_GUIDE.md +104 -0
  233. package/guides/WEB_AGENT_GUIDE.md +287 -0
  234. package/package.json +78 -70
  235. package/scripts/dev-server.mjs +121 -120
  236. package/scripts/live-tunnel-smoke.mjs +538 -0
  237. package/scripts/repo-hygiene.mjs +74 -0
  238. package/scripts/restart-after-crash.mjs +49 -0
  239. package/scripts/run-tests.mjs +166 -0
  240. package/dist/ui/assets/abap-CLvhMVsD.js +0 -1
  241. package/dist/ui/assets/actionscript-3--17pq3dv.js +0 -1
  242. package/dist/ui/assets/ada-C5qYipkI.js +0 -1
  243. package/dist/ui/assets/andromeeda-vGVdxbeo.js +0 -1
  244. package/dist/ui/assets/angular-html-BJqQFYI6.js +0 -1
  245. package/dist/ui/assets/angular-ts-CMJECO0Y.js +0 -1
  246. package/dist/ui/assets/apache-U0d_L8uA.js +0 -1
  247. package/dist/ui/assets/apex-CGTLDQj6.js +0 -1
  248. package/dist/ui/assets/apl-DWeXpBBr.js +0 -1
  249. package/dist/ui/assets/applescript-CCn79oCD.js +0 -1
  250. package/dist/ui/assets/ara-4CJ0cIlV.js +0 -1
  251. package/dist/ui/assets/asciidoc-DE70LPWp.js +0 -1
  252. package/dist/ui/assets/asm-Cmm7eHzH.js +0 -1
  253. package/dist/ui/assets/astro-CLbttLOq.js +0 -1
  254. package/dist/ui/assets/aurora-x-CDeNXAV0.js +0 -1
  255. package/dist/ui/assets/awk-BWXHIvNe.js +0 -1
  256. package/dist/ui/assets/ayu-dark-DluEY0Gj.js +0 -1
  257. package/dist/ui/assets/ayu-light-C3h-C4tm.js +0 -1
  258. package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +0 -1
  259. package/dist/ui/assets/ballerina-B7ZEbQpA.js +0 -1
  260. package/dist/ui/assets/bat-Bo4NYOV-.js +0 -1
  261. package/dist/ui/assets/beancount-D-usSTwE.js +0 -1
  262. package/dist/ui/assets/berry-DKpUyyne.js +0 -1
  263. package/dist/ui/assets/bibtex-Ci_nEsc7.js +0 -1
  264. package/dist/ui/assets/bicep-CUHmPFLl.js +0 -1
  265. package/dist/ui/assets/bird2-C2hNVINV.js +0 -1
  266. package/dist/ui/assets/blade-BOzY0P2V.js +0 -1
  267. package/dist/ui/assets/bsl-BkkzgIyY.js +0 -1
  268. package/dist/ui/assets/c-BG-8uJvh.js +0 -1
  269. package/dist/ui/assets/c3-CnJL0r0V.js +0 -1
  270. package/dist/ui/assets/cadence-CQ2zXKGN.js +0 -1
  271. package/dist/ui/assets/cairo-DLTphjLi.js +0 -1
  272. package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +0 -1
  273. package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +0 -1
  274. package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +0 -1
  275. package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +0 -1
  276. package/dist/ui/assets/clarity-SemFz856.js +0 -1
  277. package/dist/ui/assets/clojure-DqKBuwfJ.js +0 -1
  278. package/dist/ui/assets/cmake-Bj61d0ZC.js +0 -1
  279. package/dist/ui/assets/cobol-I_17IuGe.js +0 -1
  280. package/dist/ui/assets/codeowners-C8r90Shi.js +0 -1
  281. package/dist/ui/assets/codeql-oeQT6MSM.js +0 -1
  282. package/dist/ui/assets/coffee-C0B8hmok.js +0 -1
  283. package/dist/ui/assets/common-lisp-Cv5bFMCO.js +0 -1
  284. package/dist/ui/assets/coq-BrsZFFmf.js +0 -1
  285. package/dist/ui/assets/cpp-DDJXt6Vs.js +0 -1
  286. package/dist/ui/assets/crystal-Bexqace6.js +0 -1
  287. package/dist/ui/assets/csharp-Ct8U2NOr.js +0 -1
  288. package/dist/ui/assets/css-DSQhw_9R.js +0 -1
  289. package/dist/ui/assets/csv-Dx-8-gkx.js +0 -1
  290. package/dist/ui/assets/cue-CE9AQfxI.js +0 -1
  291. package/dist/ui/assets/cypher-ClKdZ_lG.js +0 -1
  292. package/dist/ui/assets/d-qD-0Kul2.js +0 -1
  293. package/dist/ui/assets/dark-plus-Cs2F2srj.js +0 -1
  294. package/dist/ui/assets/dart-DkHntEIa.js +0 -1
  295. package/dist/ui/assets/dax-BkyTk9wS.js +0 -1
  296. package/dist/ui/assets/desktop-Dlh5hvp9.js +0 -1
  297. package/dist/ui/assets/diff-woXpYk--.js +0 -1
  298. package/dist/ui/assets/docker-IyjqRm3v.js +0 -1
  299. package/dist/ui/assets/dotenv-_5a1GRtc.js +0 -1
  300. package/dist/ui/assets/dracula-BHWKrbxM.js +0 -1
  301. package/dist/ui/assets/dracula-soft-5eyTD99u.js +0 -1
  302. package/dist/ui/assets/dream-maker-DW3nJb8Q.js +0 -1
  303. package/dist/ui/assets/edge-Z8YYkHOr.js +0 -1
  304. package/dist/ui/assets/elixir-CG9uKtAF.js +0 -1
  305. package/dist/ui/assets/elm-GfWG2IfT.js +0 -1
  306. package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +0 -1
  307. package/dist/ui/assets/erb-xe89e73J.js +0 -1
  308. package/dist/ui/assets/erlang-Cphh6RMH.js +0 -1
  309. package/dist/ui/assets/everforest-dark-sB-x3p7T.js +0 -1
  310. package/dist/ui/assets/everforest-light-Df2xbC6M.js +0 -1
  311. package/dist/ui/assets/fennel-DQxkIbk2.js +0 -1
  312. package/dist/ui/assets/fish-BJitypiv.js +0 -1
  313. package/dist/ui/assets/fluent-C03EYrpw.js +0 -1
  314. package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +0 -1
  315. package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +0 -1
  316. package/dist/ui/assets/fsharp-D13ZGOAj.js +0 -1
  317. package/dist/ui/assets/gdresource-C0sCabJj.js +0 -1
  318. package/dist/ui/assets/gdscript-Cp2uCuqX.js +0 -1
  319. package/dist/ui/assets/gdshader-CBce3t8t.js +0 -1
  320. package/dist/ui/assets/genie-CV2tkWYe.js +0 -1
  321. package/dist/ui/assets/gherkin-DExj1W_8.js +0 -1
  322. package/dist/ui/assets/git-commit-BSykSTBG.js +0 -1
  323. package/dist/ui/assets/git-rebase-CoTL_uSE.js +0 -1
  324. package/dist/ui/assets/github-dark-C-LZuMrd.js +0 -1
  325. package/dist/ui/assets/github-dark-default-DXG-b-1a.js +0 -1
  326. package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +0 -1
  327. package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +0 -1
  328. package/dist/ui/assets/github-light-EUqPIrTm.js +0 -1
  329. package/dist/ui/assets/github-light-default-BXViO-2h.js +0 -1
  330. package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +0 -1
  331. package/dist/ui/assets/gleam-CSRkHgEL.js +0 -1
  332. package/dist/ui/assets/glimmer-js-DAn4UCSu.js +0 -1
  333. package/dist/ui/assets/glimmer-ts-Tjyi6Gh5.js +0 -1
  334. package/dist/ui/assets/glsl-CtTDZoqR.js +0 -1
  335. package/dist/ui/assets/gn-ilITqXS6.js +0 -1
  336. package/dist/ui/assets/gnuplot-7GGW24-e.js +0 -1
  337. package/dist/ui/assets/go-BJwz_mda.js +0 -1
  338. package/dist/ui/assets/graphql-D5gcC_Jk.js +0 -1
  339. package/dist/ui/assets/groovy-CacY0gHj.js +0 -1
  340. package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +0 -1
  341. package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +0 -1
  342. package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -1
  343. package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +0 -1
  344. package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +0 -1
  345. package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +0 -1
  346. package/dist/ui/assets/hack-BJXY27dt.js +0 -1
  347. package/dist/ui/assets/haml-BLfFoZf7.js +0 -1
  348. package/dist/ui/assets/handlebars-Dw6CWkvN.js +0 -1
  349. package/dist/ui/assets/haskell-D8IpX4py.js +0 -1
  350. package/dist/ui/assets/haxe-OTjmBuCE.js +0 -1
  351. package/dist/ui/assets/hcl-Dh228itO.js +0 -1
  352. package/dist/ui/assets/heavy-payload-Dcg0-F-S.js +0 -4
  353. package/dist/ui/assets/hjson-CxZEssPk.js +0 -1
  354. package/dist/ui/assets/hlsl-Cvrh5tZx.js +0 -1
  355. package/dist/ui/assets/horizon-CE9ld1lL.js +0 -1
  356. package/dist/ui/assets/horizon-bright-Br1oVSNq.js +0 -1
  357. package/dist/ui/assets/houston-CsvMBhTu.js +0 -1
  358. package/dist/ui/assets/html-CAcAWvoN.js +0 -1
  359. package/dist/ui/assets/html-derivative-8aSW2E_7.js +0 -1
  360. package/dist/ui/assets/http-B2YR_3V1.js +0 -1
  361. package/dist/ui/assets/hurl-BnDJ9Zhf.js +0 -1
  362. package/dist/ui/assets/hxml-B0Qn7Nwc.js +0 -1
  363. package/dist/ui/assets/hy-CZbG8q4J.js +0 -1
  364. package/dist/ui/assets/imba-DsUTQ-LC.js +0 -1
  365. package/dist/ui/assets/ini-B5eOa1yu.js +0 -1
  366. package/dist/ui/assets/java-Doxi4W8u.js +0 -1
  367. package/dist/ui/assets/javascript-BbRdEqti.js +0 -1
  368. package/dist/ui/assets/jinja-CS3Tpv_Q.js +0 -1
  369. package/dist/ui/assets/jison-BkPGYVHR.js +0 -1
  370. package/dist/ui/assets/json-BMt1m3m8.js +0 -1
  371. package/dist/ui/assets/json5-BR5RXkoi.js +0 -1
  372. package/dist/ui/assets/jsonc-CYpm1nAK.js +0 -1
  373. package/dist/ui/assets/jsonl-CmCQp5Yx.js +0 -1
  374. package/dist/ui/assets/jsonnet-CJTPZ8u_.js +0 -1
  375. package/dist/ui/assets/jssm-DXw9l8Rf.js +0 -1
  376. package/dist/ui/assets/jsx-CQKrJXXY.js +0 -1
  377. package/dist/ui/assets/julia-BuN7i2du.js +0 -1
  378. package/dist/ui/assets/just-BswEPFPu.js +0 -1
  379. package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +0 -1
  380. package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +0 -1
  381. package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +0 -1
  382. package/dist/ui/assets/kdl-CsD5j6eV.js +0 -1
  383. package/dist/ui/assets/kotlin-DhhofPvG.js +0 -1
  384. package/dist/ui/assets/kusto-BUv0MjJC.js +0 -1
  385. package/dist/ui/assets/laserwave-C_8bwKvT.js +0 -1
  386. package/dist/ui/assets/latex-DU2VyFfA.js +0 -1
  387. package/dist/ui/assets/lean-CewbzKMR.js +0 -1
  388. package/dist/ui/assets/less-DVTAwKKz.js +0 -1
  389. package/dist/ui/assets/light-plus-DVQuIRkW.js +0 -1
  390. package/dist/ui/assets/liquid-Cmz1L3dq.js +0 -1
  391. package/dist/ui/assets/llvm-Cm23YOpf.js +0 -1
  392. package/dist/ui/assets/log-BNLmms1o.js +0 -1
  393. package/dist/ui/assets/logo-Cluzi2Zq.js +0 -1
  394. package/dist/ui/assets/lua-CfVXhkaJ.js +0 -1
  395. package/dist/ui/assets/luau-CNKltnaQ.js +0 -1
  396. package/dist/ui/assets/make-Dixweg8N.js +0 -1
  397. package/dist/ui/assets/markdown-BYOwaDjH.js +0 -1
  398. package/dist/ui/assets/marko-C5bfqGiA.js +0 -1
  399. package/dist/ui/assets/material-theme-Bm3Qr25_.js +0 -1
  400. package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +0 -1
  401. package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +0 -1
  402. package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +0 -1
  403. package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +0 -1
  404. package/dist/ui/assets/matlab-D7qyCx1q.js +0 -1
  405. package/dist/ui/assets/mdc-CVBXYfyq.js +0 -1
  406. package/dist/ui/assets/mdx-DQZ5AkYe.js +0 -1
  407. package/dist/ui/assets/mermaid-Bk4SNUv9.js +0 -1
  408. package/dist/ui/assets/min-dark-BSWPekZh.js +0 -1
  409. package/dist/ui/assets/min-light-DDpmG2fV.js +0 -1
  410. package/dist/ui/assets/mipsasm-BMqwQI7S.js +0 -1
  411. package/dist/ui/assets/mojo-BgCJLMeH.js +0 -1
  412. package/dist/ui/assets/monokai-CdkpiU2Y.js +0 -1
  413. package/dist/ui/assets/moonbit-CaWjb8XO.js +0 -1
  414. package/dist/ui/assets/move-B1IS1UjX.js +0 -1
  415. package/dist/ui/assets/narrat-_X_XdTYD.js +0 -1
  416. package/dist/ui/assets/nextflow-Bbiyy34d.js +0 -1
  417. package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +0 -1
  418. package/dist/ui/assets/nginx-CzJafxLa.js +0 -1
  419. package/dist/ui/assets/night-owl-DhmEMT88.js +0 -1
  420. package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +0 -1
  421. package/dist/ui/assets/nim-DABKtHtM.js +0 -1
  422. package/dist/ui/assets/nix-IvuFDN5E.js +0 -1
  423. package/dist/ui/assets/nord-Cb4Vim4T.js +0 -1
  424. package/dist/ui/assets/nushell-DcLAeLz5.js +0 -1
  425. package/dist/ui/assets/objective-c-D1A_Heim.js +0 -1
  426. package/dist/ui/assets/objective-cpp-BsSzOQcm.js +0 -1
  427. package/dist/ui/assets/ocaml-O90oeIOV.js +0 -1
  428. package/dist/ui/assets/odin-B1RWQWA5.js +0 -1
  429. package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +0 -1
  430. package/dist/ui/assets/one-light-D7Lr4KcI.js +0 -1
  431. package/dist/ui/assets/openscad-BUDT5pXO.js +0 -1
  432. package/dist/ui/assets/pascal-4ZHwLPI5.js +0 -1
  433. package/dist/ui/assets/perl-CBh7L3lZ.js +0 -1
  434. package/dist/ui/assets/php-DFbI9q5p.js +0 -1
  435. package/dist/ui/assets/pierre-dark-sU4Zdns8.js +0 -1
  436. package/dist/ui/assets/pierre-dark-soft-HXgun5vs.js +0 -1
  437. package/dist/ui/assets/pierre-light-DWBk51d8.js +0 -1
  438. package/dist/ui/assets/pierre-light-soft-CodEzPxf.js +0 -1
  439. package/dist/ui/assets/pkl-ot-7Btpt.js +0 -1
  440. package/dist/ui/assets/plastic-DQwYfKfQ.js +0 -1
  441. package/dist/ui/assets/plsql-DGHpHOYJ.js +0 -1
  442. package/dist/ui/assets/po-BiJDBrnU.js +0 -1
  443. package/dist/ui/assets/poimandres-DRFjx7u4.js +0 -1
  444. package/dist/ui/assets/polar-C7UOKdEL.js +0 -1
  445. package/dist/ui/assets/postcss-BXeXVLqQ.js +0 -1
  446. package/dist/ui/assets/powerquery-DNMTfnFr.js +0 -1
  447. package/dist/ui/assets/powershell-DshXNtvi.js +0 -1
  448. package/dist/ui/assets/prisma-BsRQq5mF.js +0 -1
  449. package/dist/ui/assets/prolog-iXnhIJG7.js +0 -1
  450. package/dist/ui/assets/proto-DB4EqR-F.js +0 -1
  451. package/dist/ui/assets/pug-C_PxC7gO.js +0 -1
  452. package/dist/ui/assets/puppet-CDv2pdJW.js +0 -1
  453. package/dist/ui/assets/purescript-9MfHhQsQ.js +0 -1
  454. package/dist/ui/assets/python-gzcpVVnB.js +0 -1
  455. package/dist/ui/assets/qml-DtngoFFK.js +0 -1
  456. package/dist/ui/assets/qmldir-DCQb3MpD.js +0 -1
  457. package/dist/ui/assets/qss-Fe1Jh2GI.js +0 -1
  458. package/dist/ui/assets/r-DohkcevW.js +0 -1
  459. package/dist/ui/assets/racket-DcIDlBhZ.js +0 -1
  460. package/dist/ui/assets/raku-B3gFvitq.js +0 -1
  461. package/dist/ui/assets/razor-C4t8J0_E.js +0 -1
  462. package/dist/ui/assets/red-CJ3rzSJv.js +0 -1
  463. package/dist/ui/assets/reg-CRGYupPL.js +0 -1
  464. package/dist/ui/assets/regexp-OGbTbjgY.js +0 -1
  465. package/dist/ui/assets/rel-BtDbiS_P.js +0 -1
  466. package/dist/ui/assets/review-payload-C5Qz60Kq.js +0 -1
  467. package/dist/ui/assets/riscv-Ckw8ddFX.js +0 -1
  468. package/dist/ui/assets/ron-VUp2lXgN.js +0 -1
  469. package/dist/ui/assets/rose-pine-BthvhNj6.js +0 -1
  470. package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +0 -1
  471. package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +0 -1
  472. package/dist/ui/assets/rosmsg-CAekHB0j.js +0 -1
  473. package/dist/ui/assets/rst-CfBbbcvC.js +0 -1
  474. package/dist/ui/assets/ruby-Bw0mpxHY.js +0 -1
  475. package/dist/ui/assets/rust-Cfkwpbl8.js +0 -1
  476. package/dist/ui/assets/sas-Cs3s9JOf.js +0 -1
  477. package/dist/ui/assets/sass-DXrisJhu.js +0 -1
  478. package/dist/ui/assets/scala-DKOlJaKm.js +0 -1
  479. package/dist/ui/assets/scheme-DQCgrYNe.js +0 -1
  480. package/dist/ui/assets/scss-sRxNJS54.js +0 -1
  481. package/dist/ui/assets/sdbl-bTVj8UrX.js +0 -1
  482. package/dist/ui/assets/shaderlab-TOUzSsQk.js +0 -1
  483. package/dist/ui/assets/shellscript-B0X6wh0R.js +0 -1
  484. package/dist/ui/assets/shellsession-D2FdOioR.js +0 -1
  485. package/dist/ui/assets/slack-dark-DnToyrRv.js +0 -1
  486. package/dist/ui/assets/slack-ochin-B2OO5cIa.js +0 -1
  487. package/dist/ui/assets/smalltalk-B16xEiuN.js +0 -1
  488. package/dist/ui/assets/snazzy-light-4G7pJPwS.js +0 -1
  489. package/dist/ui/assets/solarized-dark-DV17i1UV.js +0 -1
  490. package/dist/ui/assets/solarized-light-DSh2HLQt.js +0 -1
  491. package/dist/ui/assets/solidity-CKzVLygQ.js +0 -1
  492. package/dist/ui/assets/soy-s6g9OjJ1.js +0 -1
  493. package/dist/ui/assets/sparql-D_iOobhT.js +0 -1
  494. package/dist/ui/assets/splunk-BC2Px7Mm.js +0 -1
  495. package/dist/ui/assets/sql-DVTnh5V-.js +0 -1
  496. package/dist/ui/assets/ssh-config-BgfXC-Er.js +0 -1
  497. package/dist/ui/assets/stata-DFIDiXF9.js +0 -1
  498. package/dist/ui/assets/stylus-B6D30XZt.js +0 -1
  499. package/dist/ui/assets/surrealql-DVfrsLyg.js +0 -1
  500. package/dist/ui/assets/svelte-D5GsxESq.js +0 -1
  501. package/dist/ui/assets/swift-DonLKvLd.js +0 -1
  502. package/dist/ui/assets/synthwave-84-nFMaYfgc.js +0 -1
  503. package/dist/ui/assets/system-verilog-DJ5XKQeo.js +0 -1
  504. package/dist/ui/assets/systemd-BxMlprV5.js +0 -1
  505. package/dist/ui/assets/talonscript-CohzipZa.js +0 -1
  506. package/dist/ui/assets/tasl-DMoTqEGO.js +0 -1
  507. package/dist/ui/assets/tcl-CZd0xW_V.js +0 -1
  508. package/dist/ui/assets/templ-DI-Zyqzd.js +0 -1
  509. package/dist/ui/assets/terraform-DswuEJGm.js +0 -1
  510. package/dist/ui/assets/tex-WHHmlbJI.js +0 -1
  511. package/dist/ui/assets/tokyo-night-oM2G3aXe.js +0 -1
  512. package/dist/ui/assets/toml-CcmNWLt0.js +0 -1
  513. package/dist/ui/assets/ts-tags-Dwpo2RFJ.js +0 -1
  514. package/dist/ui/assets/tsv-sltzmVWM.js +0 -1
  515. package/dist/ui/assets/tsx-ph_idaAW.js +0 -1
  516. package/dist/ui/assets/turtle-ByJddavk.js +0 -1
  517. package/dist/ui/assets/twig-YO17jFjR.js +0 -1
  518. package/dist/ui/assets/typescript-CbAxjhkl.js +0 -1
  519. package/dist/ui/assets/typespec-B88KGewJ.js +0 -1
  520. package/dist/ui/assets/typst-DI99ib-x.js +0 -1
  521. package/dist/ui/assets/useFileDiffInstance-B2DLX3Vg.js +0 -244
  522. package/dist/ui/assets/v-DETTlOr0.js +0 -1
  523. package/dist/ui/assets/vala-zf12oZj6.js +0 -1
  524. package/dist/ui/assets/vb-Djn5o6TS.js +0 -1
  525. package/dist/ui/assets/verilog-CiiDBU1e.js +0 -1
  526. package/dist/ui/assets/vesper-D5bVUKB1.js +0 -1
  527. package/dist/ui/assets/vhdl-BroJfC0k.js +0 -1
  528. package/dist/ui/assets/viml-DvXPmvsu.js +0 -1
  529. package/dist/ui/assets/vitesse-black-fwtXNY1n.js +0 -1
  530. package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +0 -1
  531. package/dist/ui/assets/vitesse-light-VbXTXTou.js +0 -1
  532. package/dist/ui/assets/vue-CraHL-Ps.js +0 -1
  533. package/dist/ui/assets/vue-html-e9tyZNtS.js +0 -1
  534. package/dist/ui/assets/vue-vine-CofmxaUb.js +0 -1
  535. package/dist/ui/assets/vyper-CgoNMtux.js +0 -1
  536. package/dist/ui/assets/wasm-BnjxR4X6.js +0 -1
  537. package/dist/ui/assets/wasm-ByWQv1Qj.js +0 -1
  538. package/dist/ui/assets/wenyan-C8pVoKbM.js +0 -1
  539. package/dist/ui/assets/wgsl-BsKzXJz4.js +0 -1
  540. package/dist/ui/assets/wikitext-ClFFjSW2.js +0 -1
  541. package/dist/ui/assets/wit-DdvCle-K.js +0 -1
  542. package/dist/ui/assets/wolfram-DLL8P-h_.js +0 -1
  543. package/dist/ui/assets/workspace-app-8--oTbCd.css +0 -1
  544. package/dist/ui/assets/xml-BWSdPZHm.js +0 -1
  545. package/dist/ui/assets/xsl-BtCt7Hx8.js +0 -1
  546. package/dist/ui/assets/yaml-BZiTw7cQ.js +0 -1
  547. package/dist/ui/assets/zenscript-BnlCZFoB.js +0 -1
  548. package/dist/ui/assets/zig-CMLA9XwU.js +0 -1
  549. package/docs/assets/auvrynt-logo-light.png +0 -0
  550. package/docs/assets/auvrynt-screenshot.png +0 -0
package/dist/processes.js CHANGED
@@ -1,218 +1 @@
1
- import { randomUUID } from "node:crypto";
2
- import { spawn } from "node:child_process";
3
- import { execFile } from "node:child_process";
4
- import { promisify } from "node:util";
5
- const execFileAsync = promisify(execFile);
6
- const SECRET_KEYWORD_REGEX = /(TOKEN|SECRET|PASSWORD|KEY|CONNECTION_STRING)/i;
7
- const URL_REGEX = /https?:\/\/(localhost|127\.0\.0\.1|\[::1\]|0\.0\.0\.0)(:\d+)?(\/[^\s]*)?/gi;
8
- function secretValues(environment) {
9
- return Object.entries({ ...process.env, ...(environment ?? {}) })
10
- .filter(([key, value]) => SECRET_KEYWORD_REGEX.test(key) && Boolean(value) && value.length >= 4)
11
- .map(([, value]) => value)
12
- .sort((a, b) => b.length - a.length);
13
- }
14
- export function redactProcessText(text, environment) {
15
- return secretValues(environment).reduce((result, secret) => result.split(secret).join("[REDACTED]"), text);
16
- }
17
- export function sanitizeEnv(env) {
18
- if (!env)
19
- return {};
20
- const sanitized = {};
21
- for (const [key, value] of Object.entries(env)) {
22
- if (SECRET_KEYWORD_REGEX.test(key)) {
23
- sanitized[key] = "[REDACTED]";
24
- }
25
- else {
26
- sanitized[key] = value;
27
- }
28
- }
29
- return sanitized;
30
- }
31
- export class ProcessManager {
32
- registry;
33
- processes = new Map();
34
- constructor(registry) {
35
- this.registry = registry;
36
- }
37
- startProcess(input) {
38
- const workspace = this.registry.getWorkspace(input.workspaceId);
39
- const cwd = this.registry.resolveWorkingDirectory(workspace, input.workingDirectory);
40
- const processId = `proc_${randomUUID()}`;
41
- const maxLogLines = 1000;
42
- const childEnv = { ...process.env, ...(input.environment ?? {}) };
43
- const redactionEnvironment = input.environment;
44
- const useShell = input.useShell ?? true;
45
- const child = spawn(input.command, {
46
- cwd,
47
- env: childEnv,
48
- shell: useShell,
49
- detached: false,
50
- });
51
- const tracked = {
52
- id: processId,
53
- workspaceId: input.workspaceId,
54
- command: input.command,
55
- workingDirectory: cwd,
56
- startTime: new Date().toISOString(),
57
- child,
58
- pid: child.pid,
59
- status: "running",
60
- stdoutLogs: [],
61
- stderrLogs: [],
62
- combinedLogs: [],
63
- detectedUrls: new Set(),
64
- maxLogLines,
65
- };
66
- const appendLog = (line, stream) => {
67
- const trimmed = redactProcessText(line.trimEnd(), redactionEnvironment);
68
- if (!trimmed)
69
- return;
70
- const matches = trimmed.match(URL_REGEX);
71
- if (matches) {
72
- for (const match of matches) {
73
- tracked.detectedUrls.add(match);
74
- }
75
- }
76
- const formatted = `[${stream}] ${trimmed}`;
77
- tracked.combinedLogs.push(formatted);
78
- if (stream === "stdout")
79
- tracked.stdoutLogs.push(trimmed);
80
- if (stream === "stderr")
81
- tracked.stderrLogs.push(trimmed);
82
- if (tracked.combinedLogs.length > maxLogLines) {
83
- tracked.combinedLogs.shift();
84
- }
85
- if (tracked.stdoutLogs.length > maxLogLines) {
86
- tracked.stdoutLogs.shift();
87
- }
88
- if (tracked.stderrLogs.length > maxLogLines) {
89
- tracked.stderrLogs.shift();
90
- }
91
- };
92
- child.stdout?.on("data", (data) => {
93
- const text = data.toString("utf8");
94
- for (const line of text.split(/\r?\n/)) {
95
- appendLog(line, "stdout");
96
- }
97
- });
98
- child.stderr?.on("data", (data) => {
99
- const text = data.toString("utf8");
100
- for (const line of text.split(/\r?\n/)) {
101
- appendLog(line, "stderr");
102
- }
103
- });
104
- child.on("exit", (code) => {
105
- tracked.status = "exited";
106
- tracked.exitCode = code ?? undefined;
107
- });
108
- child.on("error", (err) => {
109
- appendLog(`Process error: ${err.message}`, "stderr");
110
- tracked.status = "exited";
111
- tracked.exitCode = 1;
112
- });
113
- this.processes.set(processId, tracked);
114
- return {
115
- processId,
116
- status: tracked.status,
117
- exitCode: tracked.exitCode,
118
- detectedUrls: Array.from(tracked.detectedUrls),
119
- recentOutput: tracked.combinedLogs.slice(-20),
120
- };
121
- }
122
- getProcessLogs(input) {
123
- const tracked = this.getTrackedProcess(input.workspaceId, input.processId);
124
- const stream = input.stream ?? "both";
125
- let sourceLogs;
126
- if (stream === "stdout")
127
- sourceLogs = tracked.stdoutLogs;
128
- else if (stream === "stderr")
129
- sourceLogs = tracked.stderrLogs;
130
- else
131
- sourceLogs = tracked.combinedLogs;
132
- const limit = Math.min(Math.max(input.lines ?? 100, 1), 500);
133
- const recent = sourceLogs.slice(-limit);
134
- return {
135
- processId: tracked.id,
136
- lines: recent,
137
- totalLinesAvailable: sourceLogs.length,
138
- };
139
- }
140
- listProcesses(input) {
141
- const list = [];
142
- for (const tracked of this.processes.values()) {
143
- if (tracked.workspaceId === input.workspaceId) {
144
- list.push({
145
- processId: tracked.id,
146
- command: tracked.command,
147
- workingDirectory: tracked.workingDirectory,
148
- startTime: tracked.startTime,
149
- status: tracked.status,
150
- exitCode: tracked.exitCode,
151
- detectedUrls: Array.from(tracked.detectedUrls),
152
- });
153
- }
154
- }
155
- return list;
156
- }
157
- async stopProcess(input) {
158
- const tracked = this.getTrackedProcess(input.workspaceId, input.processId);
159
- if (tracked.status === "exited") {
160
- return { processId: tracked.id, stopped: true, exitCode: tracked.exitCode };
161
- }
162
- const pid = tracked.pid;
163
- if (!pid) {
164
- tracked.child.kill("SIGKILL");
165
- tracked.status = "exited";
166
- return { processId: tracked.id, stopped: true };
167
- }
168
- if (input.force) {
169
- await this.killProcessTree(pid);
170
- tracked.status = "exited";
171
- return { processId: tracked.id, stopped: true };
172
- }
173
- // Try graceful kill first
174
- tracked.child.kill("SIGTERM");
175
- // Wait up to 1.5 seconds for graceful exit
176
- const exited = await this.waitForExit(tracked, 1500);
177
- if (!exited) {
178
- await this.killProcessTree(pid);
179
- tracked.status = "exited";
180
- }
181
- return { processId: tracked.id, stopped: true, exitCode: tracked.exitCode };
182
- }
183
- getTrackedProcess(workspaceId, processId) {
184
- const tracked = this.processes.get(processId);
185
- if (!tracked || tracked.workspaceId !== workspaceId) {
186
- throw new Error(`Process ${processId} not found in workspace ${workspaceId}`);
187
- }
188
- return tracked;
189
- }
190
- async waitForExit(tracked, timeoutMs) {
191
- const start = Date.now();
192
- while (Date.now() - start < timeoutMs) {
193
- if (tracked.status === "exited")
194
- return true;
195
- await new Promise((resolve) => setTimeout(resolve, 100));
196
- }
197
- return tracked.status === "exited";
198
- }
199
- async killProcessTree(pid) {
200
- if (process.platform === "win32") {
201
- try {
202
- await execFileAsync("taskkill", ["/F", "/T", "/PID", String(pid)]);
203
- }
204
- catch { }
205
- }
206
- else {
207
- try {
208
- process.kill(-pid, "SIGKILL");
209
- }
210
- catch {
211
- try {
212
- process.kill(pid, "SIGKILL");
213
- }
214
- catch { }
215
- }
216
- }
217
- }
218
- }
1
+ export * from "./process/processes.js";
@@ -0,0 +1 @@
1
+ export * from "./infrastructure/request-context.js";
@@ -1,142 +1 @@
1
- import { mkdtemp, rm } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { git, getGitEligibility, safeWorkspaceRefSegment } from "./git.js";
5
- const REVIEW_REF_PREFIX = "refs/auvrynt/review";
6
- export function createReviewCheckpointManager() {
7
- const states = new Map();
8
- return {
9
- async initializeWorkspace({ workspaceId, root }) {
10
- const refs = reviewRefs(workspaceId);
11
- const state = { root, ...refs };
12
- states.set(workspaceId, state);
13
- try {
14
- const eligibility = await getGitEligibility(root);
15
- if (!eligibility.ok || !eligibility.gitRoot) {
16
- state.diagnostic = eligibility.message ?? "show_changes requires a Git workspace in this version.";
17
- return;
18
- }
19
- state.gitRoot = eligibility.gitRoot;
20
- const commit = await createWorkingTreeSnapshot(eligibility.gitRoot);
21
- await git(eligibility.gitRoot, ["update-ref", state.openRef, commit]);
22
- await git(eligibility.gitRoot, ["update-ref", state.baselineRef, commit]);
23
- }
24
- catch (error) {
25
- state.diagnostic = error instanceof Error ? error.message : String(error);
26
- }
27
- },
28
- async reviewChanges({ workspaceId, root, since = "last_shown", markReviewed = true }) {
29
- let state = states.get(workspaceId);
30
- if (!state) {
31
- await this.initializeWorkspace({ workspaceId, root });
32
- state = states.get(workspaceId);
33
- }
34
- if (!state?.gitRoot) {
35
- throw new Error(state?.diagnostic ?? "show_changes requires a Git workspace in this version.");
36
- }
37
- const baselineRef = since === "workspace_open" ? state.openRef : state.baselineRef;
38
- const baseline = (await git(state.gitRoot, ["rev-parse", "--verify", `${baselineRef}^{commit}`])).stdout.trim();
39
- const current = await createWorkingTreeSnapshot(state.gitRoot);
40
- const patch = (await git(state.gitRoot, ["diff", "--binary", "--no-color", baseline, current], {
41
- maxBuffer: 50 * 1024 * 1024,
42
- })).stdout;
43
- const numstat = (await git(state.gitRoot, ["diff", "--numstat", "-z", baseline, current], {
44
- maxBuffer: 50 * 1024 * 1024,
45
- })).stdout;
46
- const files = parseNumstat(numstat);
47
- const summary = summarizeFiles(files);
48
- if (markReviewed) {
49
- await git(state.gitRoot, ["update-ref", state.baselineRef, current]);
50
- }
51
- return {
52
- result: summary.files === 0
53
- ? `No changes since ${since === "workspace_open" ? "workspace open" : "last shown changes"}.`
54
- : `Changed ${summary.files} ${summary.files === 1 ? "file" : "files"} (+${summary.additions} -${summary.removals}).`,
55
- summary,
56
- files,
57
- patch,
58
- };
59
- },
60
- };
61
- }
62
- function reviewRefs(workspaceId) {
63
- const segment = safeWorkspaceRefSegment(workspaceId);
64
- return {
65
- openRef: `${REVIEW_REF_PREFIX}/${segment}/open`,
66
- baselineRef: `${REVIEW_REF_PREFIX}/${segment}/baseline`,
67
- };
68
- }
69
- async function createWorkingTreeSnapshot(gitRoot) {
70
- const tempDir = await mkdtemp(join(tmpdir(), "auvrynt-review-index-"));
71
- const indexPath = join(tempDir, "index");
72
- const env = checkpointEnv(indexPath);
73
- try {
74
- await git(gitRoot, ["read-tree", "HEAD"], { env });
75
- await git(gitRoot, ["add", "-A", "--", "."], { env });
76
- const tree = (await git(gitRoot, ["write-tree"], { env })).stdout.trim();
77
- const parent = (await git(gitRoot, ["rev-parse", "--verify", "HEAD^{commit}"])).stdout.trim();
78
- return (await git(gitRoot, ["commit-tree", tree, "-p", parent, "-m", "Auvrynt review snapshot"], { env })).stdout.trim();
79
- }
80
- finally {
81
- await rm(tempDir, { recursive: true, force: true });
82
- }
83
- }
84
- function checkpointEnv(indexPath) {
85
- return {
86
- GIT_INDEX_FILE: indexPath,
87
- GIT_AUTHOR_NAME: "Auvrynt",
88
- GIT_AUTHOR_EMAIL: "auvrynt@users.noreply.local",
89
- GIT_COMMITTER_NAME: "Auvrynt",
90
- GIT_COMMITTER_EMAIL: "auvrynt@users.noreply.local",
91
- };
92
- }
93
- function parseNumstat(output) {
94
- const fields = output.split("\0").filter((field) => field.length > 0);
95
- const files = [];
96
- for (let index = 0; index < fields.length;) {
97
- const header = fields[index++] ?? "";
98
- const parts = header.split("\t");
99
- const additions = parseStatNumber(parts[0]);
100
- const removals = parseStatNumber(parts[1]);
101
- if (parts.length >= 3) {
102
- const path = parts[2] ?? "";
103
- if (path)
104
- files.push({ path, type: fileType(path, undefined, additions, removals), additions, removals });
105
- continue;
106
- }
107
- const previousPath = fields[index++];
108
- const path = fields[index++];
109
- if (!path)
110
- continue;
111
- files.push({
112
- path,
113
- previousPath,
114
- type: fileType(path, previousPath, additions, removals),
115
- additions,
116
- removals,
117
- });
118
- }
119
- return files;
120
- }
121
- function parseStatNumber(value) {
122
- if (!value || value === "-")
123
- return 0;
124
- const parsed = Number(value);
125
- return Number.isFinite(parsed) ? parsed : 0;
126
- }
127
- function fileType(path, previousPath, additions, removals) {
128
- if (previousPath)
129
- return additions === 0 && removals === 0 ? "rename-pure" : "rename-changed";
130
- if (additions > 0 && removals === 0)
131
- return "new";
132
- if (additions === 0 && removals > 0)
133
- return "deleted";
134
- return "change";
135
- }
136
- function summarizeFiles(files) {
137
- return files.reduce((summary, file) => ({
138
- files: summary.files + 1,
139
- additions: summary.additions + file.additions,
140
- removals: summary.removals + file.removals,
141
- }), { files: 0, additions: 0, removals: 0 });
142
- }
1
+ export * from "./workspace/review-checkpoints.js";
@@ -0,0 +1 @@
1
+ export * from "./auth/room-registry.js";
package/dist/roots.js CHANGED
@@ -1,53 +1 @@
1
- import { homedir } from "node:os";
2
- import { basename, dirname, relative, resolve, sep } from "node:path";
3
- import { existsSync, realpathSync } from "node:fs";
4
- export class AccessDeniedError extends Error {
5
- constructor(message) {
6
- super(message);
7
- this.name = "AccessDeniedError";
8
- }
9
- }
10
- export function expandHomePath(path) {
11
- if (path === "~")
12
- return homedir();
13
- if (path.startsWith("~/") || path.startsWith("~\\")) {
14
- return resolve(homedir(), path.slice(2));
15
- }
16
- return path;
17
- }
18
- export function isPathInsideRoot(path, root) {
19
- const resolvedPath = canonicalizePath(path);
20
- const resolvedRoot = canonicalizePath(root);
21
- const relationship = relative(resolvedRoot, resolvedPath);
22
- return (relationship === "" ||
23
- (!relationship.startsWith("..") && relationship !== ".." && !relationship.includes(`..${sep}`)));
24
- }
25
- export function assertAllowedPath(path, allowedRoots) {
26
- const resolvedPath = canonicalizePath(path);
27
- if (allowedRoots.some((root) => isPathInsideRoot(resolvedPath, root))) {
28
- return resolve(expandHomePath(path));
29
- }
30
- throw new AccessDeniedError(`Path is outside allowed roots: ${path}`);
31
- }
32
- export function resolveAllowedPath(inputPath, cwd, allowedRoots) {
33
- const absolutePath = resolve(cwd, inputPath);
34
- return assertAllowedPath(absolutePath, allowedRoots);
35
- }
36
- /**
37
- * Resolve the existing portion of a path through symlinks/junctions before
38
- * applying workspace boundaries. This also handles new files whose parent
39
- * directory already exists behind a link.
40
- */
41
- function canonicalizePath(path) {
42
- const resolved = resolve(expandHomePath(path));
43
- const missing = [];
44
- let existing = resolved;
45
- while (!existsSync(existing)) {
46
- const parent = dirname(existing);
47
- if (parent === existing)
48
- return resolved;
49
- missing.unshift(basename(existing));
50
- existing = parent;
51
- }
52
- return resolve(realpathSync.native(existing), ...missing);
53
- }
1
+ export * from "./workspace/roots.js";
@@ -1,271 +1 @@
1
- import { readdir, readFile, stat } from "node:fs/promises";
2
- import { join, relative } from "node:path";
3
- const DEFAULT_IGNORED_DIRS = new Set([
4
- ".git",
5
- ".auvrynt-run",
6
- "node_modules",
7
- "dist",
8
- "build",
9
- "bin",
10
- "obj",
11
- ".next",
12
- ".godot",
13
- "__pycache__",
14
- ]);
15
- export async function globFiles(registry, input) {
16
- const workspace = registry.getWorkspace(input.workspaceId);
17
- const baseDir = input.basePath
18
- ? registry.resolvePath(workspace, input.basePath)
19
- : workspace.root;
20
- const maxResults = Math.min(Math.max(input.maxResults ?? 100, 1), 1000);
21
- const matchedFiles = [];
22
- let truncated = false;
23
- // Convert glob pattern to simple Regex
24
- const regexPattern = input.pattern
25
- .replace(/\./g, "\\.")
26
- .replace(/\*\*/g, ".*")
27
- .replace(/\*/g, "[^/\\\\]*")
28
- .replace(/\?/g, ".");
29
- const patternRegex = new RegExp(`^${regexPattern}$`, "i");
30
- async function walk(dir) {
31
- if (matchedFiles.length >= maxResults) {
32
- truncated = true;
33
- return;
34
- }
35
- let entries;
36
- try {
37
- entries = await readdir(dir, { withFileTypes: true });
38
- }
39
- catch {
40
- return;
41
- }
42
- for (const entry of entries) {
43
- if (matchedFiles.length >= maxResults) {
44
- truncated = true;
45
- return;
46
- }
47
- if (entry.isDirectory()) {
48
- if (DEFAULT_IGNORED_DIRS.has(entry.name))
49
- continue;
50
- await walk(join(dir, entry.name));
51
- }
52
- else if (entry.isFile()) {
53
- const fullPath = join(dir, entry.name);
54
- const relPath = relative(workspace.root, fullPath).replace(/\\/g, "/");
55
- if (patternRegex.test(entry.name) || patternRegex.test(relPath)) {
56
- matchedFiles.push(relPath);
57
- }
58
- }
59
- }
60
- }
61
- await walk(baseDir);
62
- return {
63
- files: matchedFiles,
64
- total: matchedFiles.length,
65
- truncated,
66
- };
67
- }
68
- export async function searchText(registry, input) {
69
- const workspace = registry.getWorkspace(input.workspaceId);
70
- const searchRoot = workspace.root;
71
- const maxResults = Math.min(Math.max(input.maxResults ?? 50, 1), 500);
72
- const caseSensitive = input.caseSensitive ?? false;
73
- const flags = caseSensitive ? "g" : "gi";
74
- const searchRegex = new RegExp(input.query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), flags);
75
- const fileFilterRegex = input.filePattern
76
- ? new RegExp(input.filePattern
77
- .replace(/\./g, "\\.")
78
- .replace(/\*/g, ".*"), "i")
79
- : null;
80
- const matches = [];
81
- let truncated = false;
82
- async function searchInFile(fullPath) {
83
- if (matches.length >= maxResults) {
84
- truncated = true;
85
- return;
86
- }
87
- let text;
88
- try {
89
- const stats = await stat(fullPath);
90
- // Skip binary/huge files > 2 MB
91
- if (stats.size > 2 * 1024 * 1024)
92
- return;
93
- text = await readFile(fullPath, "utf8");
94
- }
95
- catch {
96
- return;
97
- }
98
- const lines = text.split(/\r?\n/);
99
- const relPath = relative(workspace.root, fullPath).replace(/\\/g, "/");
100
- for (let i = 0; i < lines.length; i++) {
101
- if (matches.length >= maxResults) {
102
- truncated = true;
103
- return;
104
- }
105
- const lineText = lines[i];
106
- searchRegex.lastIndex = 0;
107
- const matchExec = searchRegex.exec(lineText);
108
- if (matchExec) {
109
- const startCtx = Math.max(0, i - 1);
110
- const endCtx = Math.min(lines.length - 1, i + 1);
111
- const context = lines.slice(startCtx, endCtx + 1);
112
- matches.push({
113
- path: relPath,
114
- line: i + 1,
115
- column: matchExec.index + 1,
116
- match: lineText.trim(),
117
- context,
118
- });
119
- }
120
- }
121
- }
122
- async function walk(dir) {
123
- if (matches.length >= maxResults) {
124
- truncated = true;
125
- return;
126
- }
127
- let entries;
128
- try {
129
- entries = await readdir(dir, { withFileTypes: true });
130
- }
131
- catch {
132
- return;
133
- }
134
- for (const entry of entries) {
135
- if (matches.length >= maxResults) {
136
- truncated = true;
137
- return;
138
- }
139
- if (entry.isDirectory()) {
140
- if (DEFAULT_IGNORED_DIRS.has(entry.name))
141
- continue;
142
- await walk(join(dir, entry.name));
143
- }
144
- else if (entry.isFile()) {
145
- if (fileFilterRegex && !fileFilterRegex.test(entry.name))
146
- continue;
147
- await searchInFile(join(dir, entry.name));
148
- }
149
- }
150
- }
151
- const targetDirs = input.paths?.length
152
- ? input.paths.map((p) => registry.resolvePath(workspace, p))
153
- : [searchRoot];
154
- for (const dir of targetDirs) {
155
- const s = await stat(dir).catch(() => null);
156
- if (s?.isDirectory()) {
157
- await walk(dir);
158
- }
159
- else if (s?.isFile()) {
160
- await searchInFile(dir);
161
- }
162
- }
163
- return {
164
- matches,
165
- total: matches.length,
166
- truncated,
167
- };
168
- }
169
- export async function inspectProject(registry, input) {
170
- const workspace = registry.getWorkspace(input.workspaceId);
171
- const targetDir = input.path
172
- ? registry.resolvePath(workspace, input.path)
173
- : workspace.root;
174
- const projectTypes = [];
175
- const packageManagers = [];
176
- const frameworks = [];
177
- const configFiles = [];
178
- const recommendedCommands = {};
179
- const details = {};
180
- let entries = [];
181
- try {
182
- entries = await readdir(targetDir);
183
- }
184
- catch { }
185
- const entrySet = new Set(entries);
186
- // Check Node.js / TypeScript
187
- if (entrySet.has("package.json")) {
188
- projectTypes.push("nodejs");
189
- configFiles.push("package.json");
190
- try {
191
- const pkgContent = await readFile(join(targetDir, "package.json"), "utf8");
192
- const pkgJson = JSON.parse(pkgContent);
193
- details.packageName = pkgJson.name;
194
- details.scripts = pkgJson.scripts ?? {};
195
- if (pkgJson.scripts?.build)
196
- recommendedCommands.build = "npm run build";
197
- if (pkgJson.scripts?.dev)
198
- recommendedCommands.run = "npm run dev";
199
- else if (pkgJson.scripts?.start)
200
- recommendedCommands.run = "npm start";
201
- if (pkgJson.scripts?.test)
202
- recommendedCommands.test = "npm test";
203
- if (pkgJson.scripts?.lint)
204
- recommendedCommands.lint = "npm run lint";
205
- const allDeps = { ...(pkgJson.dependencies ?? {}), ...(pkgJson.devDependencies ?? {}) };
206
- if (allDeps.next)
207
- frameworks.push("nextjs");
208
- if (allDeps.vite)
209
- frameworks.push("vite");
210
- if (allDeps.react)
211
- frameworks.push("react");
212
- if (allDeps.express)
213
- frameworks.push("express");
214
- }
215
- catch { }
216
- }
217
- if (entrySet.has("package-lock.json"))
218
- packageManagers.push("npm");
219
- if (entrySet.has("pnpm-lock.yaml"))
220
- packageManagers.push("pnpm");
221
- if (entrySet.has("yarn.lock"))
222
- packageManagers.push("yarn");
223
- if (entrySet.has("bun.lockb") || entrySet.has("bun.lock"))
224
- packageManagers.push("bun");
225
- if (entrySet.has("tsconfig.json")) {
226
- projectTypes.push("typescript");
227
- configFiles.push("tsconfig.json");
228
- }
229
- // Check .NET
230
- const dotnetFiles = entries.filter((e) => e.endsWith(".csproj") || e.endsWith(".fsproj") || e.endsWith(".sln"));
231
- if (dotnetFiles.length > 0) {
232
- projectTypes.push("dotnet");
233
- configFiles.push(...dotnetFiles);
234
- recommendedCommands.build = recommendedCommands.build ?? "dotnet build";
235
- recommendedCommands.run = recommendedCommands.run ?? "dotnet run";
236
- recommendedCommands.test = recommendedCommands.test ?? "dotnet test";
237
- recommendedCommands.format = recommendedCommands.format ?? "dotnet format";
238
- details.dotnetFiles = dotnetFiles;
239
- }
240
- // Check Godot
241
- if (entrySet.has("project.godot")) {
242
- projectTypes.push("godot");
243
- configFiles.push("project.godot");
244
- recommendedCommands.run = recommendedCommands.run ?? "godot --path .";
245
- details.godotProject = true;
246
- }
247
- // Check Python
248
- if (entrySet.has("pyproject.toml") || entrySet.has("requirements.txt") || entrySet.has("setup.py")) {
249
- projectTypes.push("python");
250
- if (entrySet.has("pyproject.toml"))
251
- configFiles.push("pyproject.toml");
252
- if (entrySet.has("requirements.txt"))
253
- configFiles.push("requirements.txt");
254
- recommendedCommands.run = recommendedCommands.run ?? "python main.py";
255
- }
256
- // Check Git
257
- if (entrySet.has(".git")) {
258
- configFiles.push(".git");
259
- details.gitRepository = true;
260
- }
261
- return {
262
- workspaceId: input.workspaceId,
263
- root: targetDir,
264
- projectTypes,
265
- packageManagers,
266
- frameworks,
267
- configFiles,
268
- recommendedCommands,
269
- details,
270
- };
271
- }
1
+ export * from "./workspace/search-discovery.js";