@agent-spaces/server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1454) hide show
  1. package/dist/adapters/agent-runtime-types.js +7 -0
  2. package/dist/adapters/agent-runtime.js +23 -0
  3. package/dist/adapters/claude-code-runtime/adapter-pool.js +62 -0
  4. package/dist/adapters/claude-code-runtime/anthropic-bridge.js +209 -0
  5. package/dist/adapters/claude-code-runtime/index.js +195 -0
  6. package/dist/adapters/claude-code-runtime/message-format.js +241 -0
  7. package/dist/adapters/claude-code-runtime/protocol-converter.js +332 -0
  8. package/dist/adapters/claude-code-runtime/sdk-config.js +178 -0
  9. package/dist/adapters/claude-code-runtime/types.js +11 -0
  10. package/dist/adapters/codex-runtime.js +514 -0
  11. package/dist/adapters/git.js +335 -0
  12. package/dist/adapters/open-agent-sdk-runtime.js +87 -0
  13. package/dist/agents/agent-context.js +6 -0
  14. package/dist/agents/agent-message-parts.js +513 -0
  15. package/dist/agents/commit-agent.js +214 -0
  16. package/dist/agents/issue-agent-progress.js +112 -0
  17. package/dist/agents/issue-agent-runner.js +38 -0
  18. package/dist/agents/issue-task-controller.js +494 -0
  19. package/dist/agents/planner-agent.js +154 -0
  20. package/dist/agents/reviewer-agent.js +169 -0
  21. package/dist/agents/scheduler-agent.js +52 -0
  22. package/dist/app.js +133 -0
  23. package/dist/hooks/agent-hooks.js +19 -0
  24. package/dist/install.sh +84 -0
  25. package/dist/middleware/auth.js +19 -0
  26. package/dist/package.json +47 -0
  27. package/dist/routes/agent.js +87 -0
  28. package/dist/routes/auth.js +30 -0
  29. package/dist/routes/channel.js +131 -0
  30. package/dist/routes/file.js +110 -0
  31. package/dist/routes/folder.js +101 -0
  32. package/dist/routes/git.js +153 -0
  33. package/dist/routes/issue.js +208 -0
  34. package/dist/routes/llm.js +113 -0
  35. package/dist/routes/task.js +110 -0
  36. package/dist/routes/workspace.js +196 -0
  37. package/dist/services/agent.js +638 -0
  38. package/dist/services/auth-store.js +22 -0
  39. package/dist/services/builtin-tools.js +184 -0
  40. package/dist/services/channel.js +90 -0
  41. package/dist/services/file.js +89 -0
  42. package/dist/services/issue-comment.js +54 -0
  43. package/dist/services/issue-retry.js +59 -0
  44. package/dist/services/issue.js +197 -0
  45. package/dist/services/llm-model-config.js +16 -0
  46. package/dist/services/message.js +70 -0
  47. package/dist/services/notification-hub/bot-agent.js +87 -0
  48. package/dist/services/notification-hub/bot-commands.js +360 -0
  49. package/dist/services/notification-hub/events.js +96 -0
  50. package/dist/services/notification-hub/format.js +34 -0
  51. package/dist/services/notification-hub/helpers.js +72 -0
  52. package/dist/services/notification-hub/index.js +7 -0
  53. package/dist/services/notification-hub/lark-adapter.js +110 -0
  54. package/dist/services/notification-hub/lark-api.js +40 -0
  55. package/dist/services/notification-hub/service.js +80 -0
  56. package/dist/services/notification-hub/types.js +31 -0
  57. package/dist/services/notification-hub/wechat-adapter.js +126 -0
  58. package/dist/services/notification-hub/wechat-api.js +212 -0
  59. package/dist/services/pty.js +52 -0
  60. package/dist/services/task.js +131 -0
  61. package/dist/services/tool-detail.js +19 -0
  62. package/dist/services/workspace-prompt.js +25 -0
  63. package/dist/services/workspace.js +74 -0
  64. package/dist/storage/agent-store.js +326 -0
  65. package/dist/storage/issue-store.js +39 -0
  66. package/dist/storage/json-store.js +24 -0
  67. package/dist/storage/llm-store.js +79 -0
  68. package/dist/storage/task-store.js +38 -0
  69. package/dist/storage/usage.js +28 -0
  70. package/dist/storage/workspace-store.js +35 -0
  71. package/dist/web/404.html +1 -0
  72. package/dist/web/__next.__PAGE__.txt +9 -0
  73. package/dist/web/__next._full.txt +28 -0
  74. package/dist/web/__next._head.txt +6 -0
  75. package/dist/web/__next._index.txt +10 -0
  76. package/dist/web/__next._tree.txt +8 -0
  77. package/dist/web/_next/static/chunks/0-oog4zg4_m~m.css +5 -0
  78. package/dist/web/_next/static/chunks/0202ia13sijwb.js +1 -0
  79. package/dist/web/_next/static/chunks/031c~uxc3ie87.js +1 -0
  80. package/dist/web/_next/static/chunks/038whpa0zpnas.js +1 -0
  81. package/dist/web/_next/static/chunks/03~yq9q893hmn.js +1 -0
  82. package/dist/web/_next/static/chunks/06q5go~xoz5a3.js +1 -0
  83. package/dist/web/_next/static/chunks/095.wizobwtyg.js +2 -0
  84. package/dist/web/_next/static/chunks/0bfg.w~u-83h5.js +1 -0
  85. package/dist/web/_next/static/chunks/0ce7i6~sb20rv.js +113 -0
  86. package/dist/web/_next/static/chunks/0d4~pcva1uk-a.js +1 -0
  87. package/dist/web/_next/static/chunks/0iq70n_u75nyu.js +1 -0
  88. package/dist/web/_next/static/chunks/0memz-8zsbxpu.js +1 -0
  89. package/dist/web/_next/static/chunks/0nw~w.3~twebx.js +2 -0
  90. package/dist/web/_next/static/chunks/0pyytgz~5vt0f.js +31 -0
  91. package/dist/web/_next/static/chunks/0ujjcrz~1nq.q.css +1 -0
  92. package/dist/web/_next/static/chunks/0vdnx9n41dyjl.js +1 -0
  93. package/dist/web/_next/static/chunks/0yl4mqmxtll6g.js +1 -0
  94. package/dist/web/_next/static/chunks/0zcbfka5tcle3.js +1 -0
  95. package/dist/web/_next/static/chunks/0~eo58u99i.fr.js +8 -0
  96. package/dist/web/_next/static/chunks/13_2vxyccsv84.js +4 -0
  97. package/dist/web/_next/static/chunks/13wfs~urgxu0w.js +1 -0
  98. package/dist/web/_next/static/chunks/157~3c6wqkt83.js +1 -0
  99. package/dist/web/_next/static/chunks/15jvow_z4uq-..js +1 -0
  100. package/dist/web/_next/static/chunks/15v697nf~r-cy.js +2 -0
  101. package/dist/web/_next/static/chunks/168ojsxhm7ypc.js +1 -0
  102. package/dist/web/_next/static/chunks/17oc2l.ekcs8b.css +1 -0
  103. package/dist/web/_next/static/chunks/turbopack-164~7ulq9o9yc.js +1 -0
  104. package/dist/web/_next/static/media/0a7740363b4d4863-s.1110aazvokzp..woff2 +0 -0
  105. package/dist/web/_next/static/media/0da9c7f357bd9d4d-s.0ek5sshv8wk3m.woff2 +0 -0
  106. package/dist/web/_next/static/media/1b99372b3eaef0c8-s.p.0gx2haw2tmll8.woff2 +0 -0
  107. package/dist/web/_next/static/media/41e95f694c5c4549-s.0r1jrq7neqdsq.woff2 +0 -0
  108. package/dist/web/_next/static/media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2 +0 -0
  109. package/dist/web/_next/static/media/5f9d24ebef5d5292-s.0esuu2f5si~v8.woff2 +0 -0
  110. package/dist/web/_next/static/media/6c55a692938ebbbc-s.0g6rbszwfgn9y.woff2 +0 -0
  111. package/dist/web/_next/static/media/8e6fa89aa22d24ec-s.p.0uvzar8hswo3p.woff2 +0 -0
  112. package/dist/web/_next/static/media/a218039a3287bcfd-s.p.17-1enzs_j91b.woff2 +0 -0
  113. package/dist/web/_next/static/media/b2ea385cb5ae8625-s.0kjod.kaq1k69.woff2 +0 -0
  114. package/dist/web/_next/static/media/bdc7e24a509eb931-s.0apt5mko2.qn3.woff2 +0 -0
  115. package/dist/web/_next/static/media/c3cb240f9c892514-s.163v2i5cux7-c.woff2 +0 -0
  116. package/dist/web/_next/static/media/e2334d715941921e-s.p.12skym0rqknxy.woff2 +0 -0
  117. package/dist/web/_next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  118. package/dist/web/_next/static/owMnKmxATbtXK_J_k_uHh/_buildManifest.js +21 -0
  119. package/dist/web/_next/static/owMnKmxATbtXK_J_k_uHh/_clientMiddlewareManifest.js +6 -0
  120. package/dist/web/_next/static/owMnKmxATbtXK_J_k_uHh/_ssgManifest.js +1 -0
  121. package/dist/web/_not-found/__next._full.txt +21 -0
  122. package/dist/web/_not-found/__next._head.txt +6 -0
  123. package/dist/web/_not-found/__next._index.txt +10 -0
  124. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +5 -0
  125. package/dist/web/_not-found/__next._not-found.txt +5 -0
  126. package/dist/web/_not-found/__next._tree.txt +3 -0
  127. package/dist/web/_not-found.html +1 -0
  128. package/dist/web/_not-found.txt +21 -0
  129. package/dist/web/favicon.ico +0 -0
  130. package/dist/web/file.svg +1 -0
  131. package/dist/web/globe.svg +1 -0
  132. package/dist/web/icons/default_file.svg +1 -0
  133. package/dist/web/icons/default_folder.svg +1 -0
  134. package/dist/web/icons/default_folder_opened.svg +1 -0
  135. package/dist/web/icons/default_root_folder.svg +1 -0
  136. package/dist/web/icons/default_root_folder_opened.svg +1 -0
  137. package/dist/web/icons/file_type_access.svg +1 -0
  138. package/dist/web/icons/file_type_access2.svg +1 -0
  139. package/dist/web/icons/file_type_actionscript.svg +1 -0
  140. package/dist/web/icons/file_type_actionscript2.svg +1 -0
  141. package/dist/web/icons/file_type_ada.svg +1 -0
  142. package/dist/web/icons/file_type_advpl.svg +1 -0
  143. package/dist/web/icons/file_type_affectscript.svg +1 -0
  144. package/dist/web/icons/file_type_affinitydesigner.svg +1 -0
  145. package/dist/web/icons/file_type_affinityphoto.svg +1 -0
  146. package/dist/web/icons/file_type_affinitypublisher.svg +1 -0
  147. package/dist/web/icons/file_type_ai.svg +1 -0
  148. package/dist/web/icons/file_type_ai2.svg +1 -0
  149. package/dist/web/icons/file_type_al.svg +1 -0
  150. package/dist/web/icons/file_type_angular.svg +1 -0
  151. package/dist/web/icons/file_type_ansible.svg +1 -0
  152. package/dist/web/icons/file_type_antlr.svg +1 -0
  153. package/dist/web/icons/file_type_anyscript.svg +1 -0
  154. package/dist/web/icons/file_type_apache.svg +1 -0
  155. package/dist/web/icons/file_type_apex.svg +1 -0
  156. package/dist/web/icons/file_type_api_extractor.svg +1 -0
  157. package/dist/web/icons/file_type_apib.svg +1 -0
  158. package/dist/web/icons/file_type_apib2.svg +1 -0
  159. package/dist/web/icons/file_type_apl.svg +1 -0
  160. package/dist/web/icons/file_type_applescript.svg +1 -0
  161. package/dist/web/icons/file_type_appsemble.svg +1 -0
  162. package/dist/web/icons/file_type_appveyor.svg +1 -0
  163. package/dist/web/icons/file_type_arduino.svg +1 -0
  164. package/dist/web/icons/file_type_asciidoc.svg +1 -0
  165. package/dist/web/icons/file_type_asp.svg +1 -0
  166. package/dist/web/icons/file_type_aspx.svg +1 -0
  167. package/dist/web/icons/file_type_assembly.svg +1 -0
  168. package/dist/web/icons/file_type_astro.svg +1 -0
  169. package/dist/web/icons/file_type_astroconfig.svg +1 -0
  170. package/dist/web/icons/file_type_ats.svg +1 -0
  171. package/dist/web/icons/file_type_audio.svg +1 -0
  172. package/dist/web/icons/file_type_aurelia.svg +1 -0
  173. package/dist/web/icons/file_type_autohotkey.svg +1 -0
  174. package/dist/web/icons/file_type_autoit.svg +1 -0
  175. package/dist/web/icons/file_type_avif.svg +1 -0
  176. package/dist/web/icons/file_type_avro.svg +1 -0
  177. package/dist/web/icons/file_type_awk.svg +1 -0
  178. package/dist/web/icons/file_type_aws.svg +1 -0
  179. package/dist/web/icons/file_type_azure.svg +1 -0
  180. package/dist/web/icons/file_type_azurepipelines.svg +1 -0
  181. package/dist/web/icons/file_type_babel.svg +1 -0
  182. package/dist/web/icons/file_type_babel2.svg +1 -0
  183. package/dist/web/icons/file_type_ballerina.svg +1 -0
  184. package/dist/web/icons/file_type_bat.svg +1 -0
  185. package/dist/web/icons/file_type_bats.svg +1 -0
  186. package/dist/web/icons/file_type_bazaar.svg +1 -0
  187. package/dist/web/icons/file_type_bazel.svg +1 -0
  188. package/dist/web/icons/file_type_befunge.svg +1 -0
  189. package/dist/web/icons/file_type_bicep.svg +1 -0
  190. package/dist/web/icons/file_type_biml.svg +1 -0
  191. package/dist/web/icons/file_type_binary.svg +1 -0
  192. package/dist/web/icons/file_type_bitbucketpipeline.svg +1 -0
  193. package/dist/web/icons/file_type_bithound.svg +1 -0
  194. package/dist/web/icons/file_type_blade.svg +1 -0
  195. package/dist/web/icons/file_type_blitzbasic.svg +1 -0
  196. package/dist/web/icons/file_type_bolt.svg +1 -0
  197. package/dist/web/icons/file_type_bosque.svg +1 -0
  198. package/dist/web/icons/file_type_bower.svg +1 -0
  199. package/dist/web/icons/file_type_bower2.svg +1 -0
  200. package/dist/web/icons/file_type_browserslist.svg +1 -0
  201. package/dist/web/icons/file_type_buckbuild.svg +1 -0
  202. package/dist/web/icons/file_type_bundler.svg +1 -0
  203. package/dist/web/icons/file_type_c.svg +1 -0
  204. package/dist/web/icons/file_type_c2.svg +1 -0
  205. package/dist/web/icons/file_type_c3.svg +1 -0
  206. package/dist/web/icons/file_type_c_al.svg +1 -0
  207. package/dist/web/icons/file_type_cabal.svg +1 -0
  208. package/dist/web/icons/file_type_caddy.svg +1 -0
  209. package/dist/web/icons/file_type_cake.svg +1 -0
  210. package/dist/web/icons/file_type_cakephp.svg +1 -0
  211. package/dist/web/icons/file_type_capacitor.svg +1 -0
  212. package/dist/web/icons/file_type_cargo.svg +1 -0
  213. package/dist/web/icons/file_type_casc.svg +1 -0
  214. package/dist/web/icons/file_type_cddl.svg +1 -0
  215. package/dist/web/icons/file_type_cert.svg +1 -0
  216. package/dist/web/icons/file_type_ceylon.svg +1 -0
  217. package/dist/web/icons/file_type_cf.svg +1 -0
  218. package/dist/web/icons/file_type_cf2.svg +1 -0
  219. package/dist/web/icons/file_type_cfc.svg +1 -0
  220. package/dist/web/icons/file_type_cfc2.svg +1 -0
  221. package/dist/web/icons/file_type_cfm.svg +1 -0
  222. package/dist/web/icons/file_type_cfm2.svg +1 -0
  223. package/dist/web/icons/file_type_cheader.svg +1 -0
  224. package/dist/web/icons/file_type_chef.svg +1 -0
  225. package/dist/web/icons/file_type_chef_cookbook.svg +1 -0
  226. package/dist/web/icons/file_type_circleci.svg +1 -0
  227. package/dist/web/icons/file_type_class.svg +1 -0
  228. package/dist/web/icons/file_type_clojure.svg +1 -0
  229. package/dist/web/icons/file_type_clojurescript.svg +1 -0
  230. package/dist/web/icons/file_type_cloudfoundry.svg +1 -0
  231. package/dist/web/icons/file_type_cmake.svg +1 -0
  232. package/dist/web/icons/file_type_cobol.svg +1 -0
  233. package/dist/web/icons/file_type_codacy.svg +1 -0
  234. package/dist/web/icons/file_type_codeclimate.svg +1 -0
  235. package/dist/web/icons/file_type_codecov.svg +1 -0
  236. package/dist/web/icons/file_type_codekit.svg +1 -0
  237. package/dist/web/icons/file_type_codeql.svg +1 -0
  238. package/dist/web/icons/file_type_coffeelint.svg +1 -0
  239. package/dist/web/icons/file_type_coffeescript.svg +1 -0
  240. package/dist/web/icons/file_type_commitlint.svg +1 -0
  241. package/dist/web/icons/file_type_compass.svg +1 -0
  242. package/dist/web/icons/file_type_composer.svg +1 -0
  243. package/dist/web/icons/file_type_conan.svg +1 -0
  244. package/dist/web/icons/file_type_conda.svg +1 -0
  245. package/dist/web/icons/file_type_config.svg +1 -0
  246. package/dist/web/icons/file_type_confluence.svg +1 -0
  247. package/dist/web/icons/file_type_coveralls.svg +1 -0
  248. package/dist/web/icons/file_type_cpp.svg +1 -0
  249. package/dist/web/icons/file_type_cpp2.svg +1 -0
  250. package/dist/web/icons/file_type_cpp3.svg +1 -0
  251. package/dist/web/icons/file_type_cppheader.svg +1 -0
  252. package/dist/web/icons/file_type_crowdin.svg +1 -0
  253. package/dist/web/icons/file_type_crystal.svg +1 -0
  254. package/dist/web/icons/file_type_csharp.svg +1 -0
  255. package/dist/web/icons/file_type_csharp2.svg +1 -0
  256. package/dist/web/icons/file_type_csproj.svg +1 -0
  257. package/dist/web/icons/file_type_css.svg +1 -0
  258. package/dist/web/icons/file_type_csscomb.svg +1 -0
  259. package/dist/web/icons/file_type_csslint.svg +1 -0
  260. package/dist/web/icons/file_type_cssmap.svg +1 -0
  261. package/dist/web/icons/file_type_cucumber.svg +1 -0
  262. package/dist/web/icons/file_type_cuda.svg +1 -0
  263. package/dist/web/icons/file_type_cvs.svg +1 -0
  264. package/dist/web/icons/file_type_cypress.svg +1 -0
  265. package/dist/web/icons/file_type_cython.svg +1 -0
  266. package/dist/web/icons/file_type_dal.svg +1 -0
  267. package/dist/web/icons/file_type_darcs.svg +1 -0
  268. package/dist/web/icons/file_type_dartlang.svg +1 -0
  269. package/dist/web/icons/file_type_db.svg +1 -0
  270. package/dist/web/icons/file_type_delphi.svg +1 -0
  271. package/dist/web/icons/file_type_dependabot.svg +1 -0
  272. package/dist/web/icons/file_type_dependencies.svg +1 -0
  273. package/dist/web/icons/file_type_devcontainer.svg +1 -0
  274. package/dist/web/icons/file_type_diff.svg +1 -0
  275. package/dist/web/icons/file_type_django.svg +1 -0
  276. package/dist/web/icons/file_type_dlang.svg +1 -0
  277. package/dist/web/icons/file_type_docker.svg +1 -0
  278. package/dist/web/icons/file_type_docker2.svg +1 -0
  279. package/dist/web/icons/file_type_dockertest.svg +1 -0
  280. package/dist/web/icons/file_type_dockertest2.svg +1 -0
  281. package/dist/web/icons/file_type_docpad.svg +1 -0
  282. package/dist/web/icons/file_type_docz.svg +1 -0
  283. package/dist/web/icons/file_type_dojo.svg +1 -0
  284. package/dist/web/icons/file_type_dotjs.svg +1 -0
  285. package/dist/web/icons/file_type_doxygen.svg +1 -0
  286. package/dist/web/icons/file_type_drawio.svg +1 -0
  287. package/dist/web/icons/file_type_drone.svg +1 -0
  288. package/dist/web/icons/file_type_drools.svg +1 -0
  289. package/dist/web/icons/file_type_dustjs.svg +1 -0
  290. package/dist/web/icons/file_type_dvc.svg +1 -0
  291. package/dist/web/icons/file_type_dylan.svg +1 -0
  292. package/dist/web/icons/file_type_edge.svg +1 -0
  293. package/dist/web/icons/file_type_edge2.svg +1 -0
  294. package/dist/web/icons/file_type_editorconfig.svg +1 -0
  295. package/dist/web/icons/file_type_eex.svg +1 -0
  296. package/dist/web/icons/file_type_ejs.svg +1 -0
  297. package/dist/web/icons/file_type_elastic.svg +1 -0
  298. package/dist/web/icons/file_type_elasticbeanstalk.svg +1 -0
  299. package/dist/web/icons/file_type_elixir.svg +1 -0
  300. package/dist/web/icons/file_type_elm.svg +1 -0
  301. package/dist/web/icons/file_type_elm2.svg +1 -0
  302. package/dist/web/icons/file_type_emacs.svg +1 -0
  303. package/dist/web/icons/file_type_ember.svg +1 -0
  304. package/dist/web/icons/file_type_ensime.svg +1 -0
  305. package/dist/web/icons/file_type_eps.svg +1 -0
  306. package/dist/web/icons/file_type_erb.svg +1 -0
  307. package/dist/web/icons/file_type_erlang.svg +1 -0
  308. package/dist/web/icons/file_type_erlang2.svg +1 -0
  309. package/dist/web/icons/file_type_eslint.svg +1 -0
  310. package/dist/web/icons/file_type_eslint2.svg +1 -0
  311. package/dist/web/icons/file_type_excel.svg +1 -0
  312. package/dist/web/icons/file_type_excel2.svg +1 -0
  313. package/dist/web/icons/file_type_expo.svg +1 -0
  314. package/dist/web/icons/file_type_falcon.svg +1 -0
  315. package/dist/web/icons/file_type_fauna.svg +1 -0
  316. package/dist/web/icons/file_type_favicon.svg +1 -0
  317. package/dist/web/icons/file_type_fbx.svg +1 -0
  318. package/dist/web/icons/file_type_firebase.svg +1 -0
  319. package/dist/web/icons/file_type_firebasehosting.svg +1 -0
  320. package/dist/web/icons/file_type_firestore.svg +1 -0
  321. package/dist/web/icons/file_type_fla.svg +1 -0
  322. package/dist/web/icons/file_type_flash.svg +1 -0
  323. package/dist/web/icons/file_type_floobits.svg +1 -0
  324. package/dist/web/icons/file_type_flow.svg +1 -0
  325. package/dist/web/icons/file_type_flutter.svg +1 -0
  326. package/dist/web/icons/file_type_flutter_package.svg +1 -0
  327. package/dist/web/icons/file_type_font.svg +1 -0
  328. package/dist/web/icons/file_type_fortran.svg +1 -0
  329. package/dist/web/icons/file_type_fossa.svg +1 -0
  330. package/dist/web/icons/file_type_fossil.svg +1 -0
  331. package/dist/web/icons/file_type_freemarker.svg +1 -0
  332. package/dist/web/icons/file_type_fsharp.svg +1 -0
  333. package/dist/web/icons/file_type_fsharp2.svg +1 -0
  334. package/dist/web/icons/file_type_fsproj.svg +1 -0
  335. package/dist/web/icons/file_type_fthtml.svg +1 -0
  336. package/dist/web/icons/file_type_fusebox.svg +1 -0
  337. package/dist/web/icons/file_type_galen.svg +1 -0
  338. package/dist/web/icons/file_type_galen2.svg +1 -0
  339. package/dist/web/icons/file_type_gamemaker.svg +1 -0
  340. package/dist/web/icons/file_type_gamemaker2.svg +1 -0
  341. package/dist/web/icons/file_type_gamemaker81.svg +1 -0
  342. package/dist/web/icons/file_type_gatsby.svg +1 -0
  343. package/dist/web/icons/file_type_gcode.svg +1 -0
  344. package/dist/web/icons/file_type_genstat.svg +1 -0
  345. package/dist/web/icons/file_type_git.svg +1 -0
  346. package/dist/web/icons/file_type_git2.svg +1 -0
  347. package/dist/web/icons/file_type_gitlab.svg +1 -0
  348. package/dist/web/icons/file_type_gitpod.svg +1 -0
  349. package/dist/web/icons/file_type_glide.svg +1 -0
  350. package/dist/web/icons/file_type_glitter.svg +1 -0
  351. package/dist/web/icons/file_type_glsl.svg +1 -0
  352. package/dist/web/icons/file_type_glyphs.svg +1 -0
  353. package/dist/web/icons/file_type_gnuplot.svg +1 -0
  354. package/dist/web/icons/file_type_go.svg +1 -0
  355. package/dist/web/icons/file_type_go_aqua.svg +1 -0
  356. package/dist/web/icons/file_type_go_black.svg +1 -0
  357. package/dist/web/icons/file_type_go_fuchsia.svg +1 -0
  358. package/dist/web/icons/file_type_go_gopher.svg +1 -0
  359. package/dist/web/icons/file_type_go_lightblue.svg +1 -0
  360. package/dist/web/icons/file_type_go_package.svg +1 -0
  361. package/dist/web/icons/file_type_go_white.svg +1 -0
  362. package/dist/web/icons/file_type_go_yellow.svg +1 -0
  363. package/dist/web/icons/file_type_godot.svg +1 -0
  364. package/dist/web/icons/file_type_gradle.svg +1 -0
  365. package/dist/web/icons/file_type_gradle2.svg +1 -0
  366. package/dist/web/icons/file_type_graphql.svg +1 -0
  367. package/dist/web/icons/file_type_graphql_config.svg +1 -0
  368. package/dist/web/icons/file_type_graphviz.svg +1 -0
  369. package/dist/web/icons/file_type_greenkeeper.svg +1 -0
  370. package/dist/web/icons/file_type_gridsome.svg +1 -0
  371. package/dist/web/icons/file_type_groovy.svg +1 -0
  372. package/dist/web/icons/file_type_groovy2.svg +1 -0
  373. package/dist/web/icons/file_type_grunt.svg +1 -0
  374. package/dist/web/icons/file_type_gulp.svg +1 -0
  375. package/dist/web/icons/file_type_haml.svg +1 -0
  376. package/dist/web/icons/file_type_handlebars.svg +1 -0
  377. package/dist/web/icons/file_type_handlebars2.svg +1 -0
  378. package/dist/web/icons/file_type_harbour.svg +1 -0
  379. package/dist/web/icons/file_type_haskell.svg +1 -0
  380. package/dist/web/icons/file_type_haskell2.svg +1 -0
  381. package/dist/web/icons/file_type_haxe.svg +1 -0
  382. package/dist/web/icons/file_type_haxecheckstyle.svg +1 -0
  383. package/dist/web/icons/file_type_haxedevelop.svg +1 -0
  384. package/dist/web/icons/file_type_helix.svg +1 -0
  385. package/dist/web/icons/file_type_helm.svg +1 -0
  386. package/dist/web/icons/file_type_hjson.svg +1 -0
  387. package/dist/web/icons/file_type_hlsl.svg +1 -0
  388. package/dist/web/icons/file_type_homeassistant.svg +1 -0
  389. package/dist/web/icons/file_type_horusec.svg +1 -0
  390. package/dist/web/icons/file_type_host.svg +1 -0
  391. package/dist/web/icons/file_type_html.svg +1 -0
  392. package/dist/web/icons/file_type_htmlhint.svg +1 -0
  393. package/dist/web/icons/file_type_http.svg +1 -0
  394. package/dist/web/icons/file_type_hunspell.svg +1 -0
  395. package/dist/web/icons/file_type_husky.svg +1 -0
  396. package/dist/web/icons/file_type_hy.svg +1 -0
  397. package/dist/web/icons/file_type_hygen.svg +1 -0
  398. package/dist/web/icons/file_type_hypr.svg +1 -0
  399. package/dist/web/icons/file_type_icl.svg +1 -0
  400. package/dist/web/icons/file_type_idris.svg +1 -0
  401. package/dist/web/icons/file_type_idrisbin.svg +1 -0
  402. package/dist/web/icons/file_type_idrispkg.svg +1 -0
  403. package/dist/web/icons/file_type_image.svg +1 -0
  404. package/dist/web/icons/file_type_imba.svg +1 -0
  405. package/dist/web/icons/file_type_inc.svg +1 -0
  406. package/dist/web/icons/file_type_infopath.svg +1 -0
  407. package/dist/web/icons/file_type_informix.svg +1 -0
  408. package/dist/web/icons/file_type_ini.svg +1 -0
  409. package/dist/web/icons/file_type_ink.svg +1 -0
  410. package/dist/web/icons/file_type_innosetup.svg +1 -0
  411. package/dist/web/icons/file_type_io.svg +1 -0
  412. package/dist/web/icons/file_type_iodine.svg +1 -0
  413. package/dist/web/icons/file_type_ionic.svg +1 -0
  414. package/dist/web/icons/file_type_jake.svg +1 -0
  415. package/dist/web/icons/file_type_janet.svg +1 -0
  416. package/dist/web/icons/file_type_jar.svg +1 -0
  417. package/dist/web/icons/file_type_jasmine.svg +1 -0
  418. package/dist/web/icons/file_type_java.svg +1 -0
  419. package/dist/web/icons/file_type_jbuilder.svg +1 -0
  420. package/dist/web/icons/file_type_jekyll.svg +1 -0
  421. package/dist/web/icons/file_type_jenkins.svg +1 -0
  422. package/dist/web/icons/file_type_jest.svg +1 -0
  423. package/dist/web/icons/file_type_jest_snapshot.svg +1 -0
  424. package/dist/web/icons/file_type_jinja.svg +1 -0
  425. package/dist/web/icons/file_type_jpm.svg +1 -0
  426. package/dist/web/icons/file_type_js.svg +1 -0
  427. package/dist/web/icons/file_type_js_official.svg +1 -0
  428. package/dist/web/icons/file_type_jsbeautify.svg +1 -0
  429. package/dist/web/icons/file_type_jsconfig.svg +1 -0
  430. package/dist/web/icons/file_type_jscpd.svg +1 -0
  431. package/dist/web/icons/file_type_jshint.svg +1 -0
  432. package/dist/web/icons/file_type_jsmap.svg +1 -0
  433. package/dist/web/icons/file_type_json.svg +1 -0
  434. package/dist/web/icons/file_type_json2.svg +1 -0
  435. package/dist/web/icons/file_type_json5.svg +1 -0
  436. package/dist/web/icons/file_type_json_official.svg +1 -0
  437. package/dist/web/icons/file_type_jsonld.svg +1 -0
  438. package/dist/web/icons/file_type_jsonnet.svg +1 -0
  439. package/dist/web/icons/file_type_jsp.svg +1 -0
  440. package/dist/web/icons/file_type_jss.svg +1 -0
  441. package/dist/web/icons/file_type_julia.svg +1 -0
  442. package/dist/web/icons/file_type_julia2.svg +1 -0
  443. package/dist/web/icons/file_type_jupyter.svg +1 -0
  444. package/dist/web/icons/file_type_karma.svg +1 -0
  445. package/dist/web/icons/file_type_key.svg +1 -0
  446. package/dist/web/icons/file_type_kitchenci.svg +1 -0
  447. package/dist/web/icons/file_type_kite.svg +1 -0
  448. package/dist/web/icons/file_type_kivy.svg +1 -0
  449. package/dist/web/icons/file_type_kos.svg +1 -0
  450. package/dist/web/icons/file_type_kotlin.svg +1 -0
  451. package/dist/web/icons/file_type_kusto.svg +1 -0
  452. package/dist/web/icons/file_type_latino.svg +1 -0
  453. package/dist/web/icons/file_type_layout.svg +1 -0
  454. package/dist/web/icons/file_type_lerna.svg +1 -0
  455. package/dist/web/icons/file_type_less.svg +1 -0
  456. package/dist/web/icons/file_type_lex.svg +1 -0
  457. package/dist/web/icons/file_type_license.svg +1 -0
  458. package/dist/web/icons/file_type_licensebat.svg +1 -0
  459. package/dist/web/icons/file_type_light_actionscript2.svg +1 -0
  460. package/dist/web/icons/file_type_light_ada.svg +1 -0
  461. package/dist/web/icons/file_type_light_apl.svg +1 -0
  462. package/dist/web/icons/file_type_light_babel.svg +1 -0
  463. package/dist/web/icons/file_type_light_babel2.svg +1 -0
  464. package/dist/web/icons/file_type_light_cabal.svg +1 -0
  465. package/dist/web/icons/file_type_light_circleci.svg +1 -0
  466. package/dist/web/icons/file_type_light_cloudfoundry.svg +1 -0
  467. package/dist/web/icons/file_type_light_codacy.svg +1 -0
  468. package/dist/web/icons/file_type_light_codeclimate.svg +1 -0
  469. package/dist/web/icons/file_type_light_config.svg +1 -0
  470. package/dist/web/icons/file_type_light_crystal.svg +1 -0
  471. package/dist/web/icons/file_type_light_db.svg +1 -0
  472. package/dist/web/icons/file_type_light_docpad.svg +1 -0
  473. package/dist/web/icons/file_type_light_drone.svg +1 -0
  474. package/dist/web/icons/file_type_light_expo.svg +1 -0
  475. package/dist/web/icons/file_type_light_firebasehosting.svg +1 -0
  476. package/dist/web/icons/file_type_light_fla.svg +1 -0
  477. package/dist/web/icons/file_type_light_font.svg +1 -0
  478. package/dist/web/icons/file_type_light_gamemaker2.svg +1 -0
  479. package/dist/web/icons/file_type_light_gradle.svg +1 -0
  480. package/dist/web/icons/file_type_light_hjson.svg +1 -0
  481. package/dist/web/icons/file_type_light_ini.svg +1 -0
  482. package/dist/web/icons/file_type_light_io.svg +1 -0
  483. package/dist/web/icons/file_type_light_js.svg +1 -0
  484. package/dist/web/icons/file_type_light_jsconfig.svg +1 -0
  485. package/dist/web/icons/file_type_light_jsmap.svg +1 -0
  486. package/dist/web/icons/file_type_light_json.svg +1 -0
  487. package/dist/web/icons/file_type_light_json5.svg +1 -0
  488. package/dist/web/icons/file_type_light_jsonld.svg +1 -0
  489. package/dist/web/icons/file_type_light_kite.svg +1 -0
  490. package/dist/web/icons/file_type_light_lerna.svg +1 -0
  491. package/dist/web/icons/file_type_light_mdx.svg +1 -0
  492. package/dist/web/icons/file_type_light_mlang.svg +1 -0
  493. package/dist/web/icons/file_type_light_mustache.svg +1 -0
  494. package/dist/web/icons/file_type_light_next.svg +1 -0
  495. package/dist/web/icons/file_type_light_nim.svg +1 -0
  496. package/dist/web/icons/file_type_light_openHAB.svg +1 -0
  497. package/dist/web/icons/file_type_light_pcl.svg +1 -0
  498. package/dist/web/icons/file_type_light_pnpm.svg +1 -0
  499. package/dist/web/icons/file_type_light_prettier.svg +1 -0
  500. package/dist/web/icons/file_type_light_prisma.svg +1 -0
  501. package/dist/web/icons/file_type_light_purescript.svg +1 -0
  502. package/dist/web/icons/file_type_light_razzle.svg +1 -0
  503. package/dist/web/icons/file_type_light_rehype.svg +1 -0
  504. package/dist/web/icons/file_type_light_remark.svg +1 -0
  505. package/dist/web/icons/file_type_light_retext.svg +1 -0
  506. package/dist/web/icons/file_type_light_rubocop.svg +1 -0
  507. package/dist/web/icons/file_type_light_rust.svg +1 -0
  508. package/dist/web/icons/file_type_light_rust_toolchain.svg +1 -0
  509. package/dist/web/icons/file_type_light_shaderlab.svg +1 -0
  510. package/dist/web/icons/file_type_light_solidity.svg +1 -0
  511. package/dist/web/icons/file_type_light_stylelint.svg +1 -0
  512. package/dist/web/icons/file_type_light_stylus.svg +1 -0
  513. package/dist/web/icons/file_type_light_symfony.svg +1 -0
  514. package/dist/web/icons/file_type_light_systemd.svg +1 -0
  515. package/dist/web/icons/file_type_light_systemverilog.svg +1 -0
  516. package/dist/web/icons/file_type_light_testcafe.svg +1 -0
  517. package/dist/web/icons/file_type_light_testjs.svg +1 -0
  518. package/dist/web/icons/file_type_light_tex.svg +1 -0
  519. package/dist/web/icons/file_type_light_todo.svg +1 -0
  520. package/dist/web/icons/file_type_light_toml.svg +1 -0
  521. package/dist/web/icons/file_type_light_unibeautify.svg +1 -0
  522. package/dist/web/icons/file_type_light_vash.svg +1 -0
  523. package/dist/web/icons/file_type_light_vsix.svg +1 -0
  524. package/dist/web/icons/file_type_light_vsixmanifest.svg +1 -0
  525. package/dist/web/icons/file_type_light_xfl.svg +1 -0
  526. package/dist/web/icons/file_type_light_yaml.svg +1 -0
  527. package/dist/web/icons/file_type_light_zeit.svg +1 -0
  528. package/dist/web/icons/file_type_lighthouse.svg +1 -0
  529. package/dist/web/icons/file_type_lime.svg +1 -0
  530. package/dist/web/icons/file_type_lintstagedrc.svg +1 -0
  531. package/dist/web/icons/file_type_liquid.svg +1 -0
  532. package/dist/web/icons/file_type_lisp.svg +1 -0
  533. package/dist/web/icons/file_type_livescript.svg +1 -0
  534. package/dist/web/icons/file_type_lnk.svg +1 -0
  535. package/dist/web/icons/file_type_locale.svg +1 -0
  536. package/dist/web/icons/file_type_log.svg +1 -0
  537. package/dist/web/icons/file_type_lolcode.svg +1 -0
  538. package/dist/web/icons/file_type_lsl.svg +1 -0
  539. package/dist/web/icons/file_type_lua.svg +1 -0
  540. package/dist/web/icons/file_type_lync.svg +1 -0
  541. package/dist/web/icons/file_type_makefile.svg +1 -0
  542. package/dist/web/icons/file_type_manifest.svg +1 -0
  543. package/dist/web/icons/file_type_manifest_bak.svg +1 -0
  544. package/dist/web/icons/file_type_manifest_skip.svg +1 -0
  545. package/dist/web/icons/file_type_map.svg +1 -0
  546. package/dist/web/icons/file_type_mariadb.svg +1 -0
  547. package/dist/web/icons/file_type_markdown.svg +1 -0
  548. package/dist/web/icons/file_type_markdownlint.svg +1 -0
  549. package/dist/web/icons/file_type_marko.svg +1 -0
  550. package/dist/web/icons/file_type_markojs.svg +1 -0
  551. package/dist/web/icons/file_type_matlab.png +0 -0
  552. package/dist/web/icons/file_type_matlab.svg +1 -0
  553. package/dist/web/icons/file_type_maven.svg +1 -0
  554. package/dist/web/icons/file_type_maxscript.svg +1 -0
  555. package/dist/web/icons/file_type_maya.svg +1 -0
  556. package/dist/web/icons/file_type_mdx.svg +1 -0
  557. package/dist/web/icons/file_type_mediawiki.svg +1 -0
  558. package/dist/web/icons/file_type_mercurial.svg +1 -0
  559. package/dist/web/icons/file_type_meson.svg +1 -0
  560. package/dist/web/icons/file_type_meteor.svg +1 -0
  561. package/dist/web/icons/file_type_mjml.svg +1 -0
  562. package/dist/web/icons/file_type_mlang.svg +1 -0
  563. package/dist/web/icons/file_type_mocha.svg +1 -0
  564. package/dist/web/icons/file_type_modernizr.svg +1 -0
  565. package/dist/web/icons/file_type_mojolicious.svg +1 -0
  566. package/dist/web/icons/file_type_moleculer.svg +1 -0
  567. package/dist/web/icons/file_type_mongo.svg +1 -0
  568. package/dist/web/icons/file_type_monotone.svg +1 -0
  569. package/dist/web/icons/file_type_mson.svg +1 -0
  570. package/dist/web/icons/file_type_mustache.svg +1 -0
  571. package/dist/web/icons/file_type_mysql.svg +1 -0
  572. package/dist/web/icons/file_type_nearly.svg +1 -0
  573. package/dist/web/icons/file_type_nest_adapter_js.svg +1 -0
  574. package/dist/web/icons/file_type_nest_adapter_ts.svg +1 -0
  575. package/dist/web/icons/file_type_nest_controller_js.svg +1 -0
  576. package/dist/web/icons/file_type_nest_controller_ts.svg +1 -0
  577. package/dist/web/icons/file_type_nest_decorator_js.svg +1 -0
  578. package/dist/web/icons/file_type_nest_decorator_ts.svg +1 -0
  579. package/dist/web/icons/file_type_nest_filter_js.svg +1 -0
  580. package/dist/web/icons/file_type_nest_filter_ts.svg +1 -0
  581. package/dist/web/icons/file_type_nest_gateway_js.svg +1 -0
  582. package/dist/web/icons/file_type_nest_gateway_ts.svg +1 -0
  583. package/dist/web/icons/file_type_nest_guard_js.svg +1 -0
  584. package/dist/web/icons/file_type_nest_guard_ts.svg +1 -0
  585. package/dist/web/icons/file_type_nest_interceptor_js.svg +1 -0
  586. package/dist/web/icons/file_type_nest_interceptor_ts.svg +1 -0
  587. package/dist/web/icons/file_type_nest_middleware_js.svg +1 -0
  588. package/dist/web/icons/file_type_nest_middleware_ts.svg +1 -0
  589. package/dist/web/icons/file_type_nest_module_js.svg +1 -0
  590. package/dist/web/icons/file_type_nest_module_ts.svg +1 -0
  591. package/dist/web/icons/file_type_nest_pipe_js.svg +1 -0
  592. package/dist/web/icons/file_type_nest_pipe_ts.svg +1 -0
  593. package/dist/web/icons/file_type_nest_service_js.svg +1 -0
  594. package/dist/web/icons/file_type_nest_service_ts.svg +1 -0
  595. package/dist/web/icons/file_type_nestjs.svg +1 -0
  596. package/dist/web/icons/file_type_netlify.svg +1 -0
  597. package/dist/web/icons/file_type_next.svg +1 -0
  598. package/dist/web/icons/file_type_ng_component_css.svg +1 -0
  599. package/dist/web/icons/file_type_ng_component_dart.svg +1 -0
  600. package/dist/web/icons/file_type_ng_component_html.svg +1 -0
  601. package/dist/web/icons/file_type_ng_component_js.svg +1 -0
  602. package/dist/web/icons/file_type_ng_component_js2.svg +1 -0
  603. package/dist/web/icons/file_type_ng_component_less.svg +1 -0
  604. package/dist/web/icons/file_type_ng_component_sass.svg +1 -0
  605. package/dist/web/icons/file_type_ng_component_scss.svg +1 -0
  606. package/dist/web/icons/file_type_ng_component_ts.svg +1 -0
  607. package/dist/web/icons/file_type_ng_component_ts2.svg +1 -0
  608. package/dist/web/icons/file_type_ng_controller_js.svg +1 -0
  609. package/dist/web/icons/file_type_ng_controller_ts.svg +1 -0
  610. package/dist/web/icons/file_type_ng_directive_dart.svg +1 -0
  611. package/dist/web/icons/file_type_ng_directive_js.svg +1 -0
  612. package/dist/web/icons/file_type_ng_directive_js2.svg +1 -0
  613. package/dist/web/icons/file_type_ng_directive_ts.svg +1 -0
  614. package/dist/web/icons/file_type_ng_directive_ts2.svg +1 -0
  615. package/dist/web/icons/file_type_ng_guard_dart.svg +1 -0
  616. package/dist/web/icons/file_type_ng_guard_js.svg +1 -0
  617. package/dist/web/icons/file_type_ng_guard_ts.svg +1 -0
  618. package/dist/web/icons/file_type_ng_interceptor_dart.svg +1 -0
  619. package/dist/web/icons/file_type_ng_interceptor_js.svg +1 -0
  620. package/dist/web/icons/file_type_ng_interceptor_ts.svg +1 -0
  621. package/dist/web/icons/file_type_ng_module_dart.svg +1 -0
  622. package/dist/web/icons/file_type_ng_module_js.svg +1 -0
  623. package/dist/web/icons/file_type_ng_module_js2.svg +1 -0
  624. package/dist/web/icons/file_type_ng_module_ts.svg +1 -0
  625. package/dist/web/icons/file_type_ng_module_ts2.svg +1 -0
  626. package/dist/web/icons/file_type_ng_pipe_dart.svg +1 -0
  627. package/dist/web/icons/file_type_ng_pipe_js.svg +1 -0
  628. package/dist/web/icons/file_type_ng_pipe_js2.svg +1 -0
  629. package/dist/web/icons/file_type_ng_pipe_ts.svg +1 -0
  630. package/dist/web/icons/file_type_ng_pipe_ts2.svg +1 -0
  631. package/dist/web/icons/file_type_ng_routing_dart.svg +1 -0
  632. package/dist/web/icons/file_type_ng_routing_js.svg +1 -0
  633. package/dist/web/icons/file_type_ng_routing_js2.svg +1 -0
  634. package/dist/web/icons/file_type_ng_routing_ts.svg +1 -0
  635. package/dist/web/icons/file_type_ng_routing_ts2.svg +1 -0
  636. package/dist/web/icons/file_type_ng_service_dart.svg +1 -0
  637. package/dist/web/icons/file_type_ng_service_js.svg +1 -0
  638. package/dist/web/icons/file_type_ng_service_js2.svg +1 -0
  639. package/dist/web/icons/file_type_ng_service_ts.svg +1 -0
  640. package/dist/web/icons/file_type_ng_service_ts2.svg +1 -0
  641. package/dist/web/icons/file_type_ng_smart_component_dart.svg +1 -0
  642. package/dist/web/icons/file_type_ng_smart_component_js.svg +1 -0
  643. package/dist/web/icons/file_type_ng_smart_component_js2.svg +1 -0
  644. package/dist/web/icons/file_type_ng_smart_component_ts.svg +1 -0
  645. package/dist/web/icons/file_type_ng_smart_component_ts2.svg +1 -0
  646. package/dist/web/icons/file_type_ng_tailwind.svg +1 -0
  647. package/dist/web/icons/file_type_nginx.svg +1 -0
  648. package/dist/web/icons/file_type_nim.svg +1 -0
  649. package/dist/web/icons/file_type_nimble.svg +1 -0
  650. package/dist/web/icons/file_type_ninja.svg +1 -0
  651. package/dist/web/icons/file_type_nix.svg +1 -0
  652. package/dist/web/icons/file_type_njsproj.svg +1 -0
  653. package/dist/web/icons/file_type_node.svg +1 -0
  654. package/dist/web/icons/file_type_node2.svg +1 -0
  655. package/dist/web/icons/file_type_nodemon.svg +1 -0
  656. package/dist/web/icons/file_type_npm.svg +1 -0
  657. package/dist/web/icons/file_type_nsi.svg +1 -0
  658. package/dist/web/icons/file_type_nsri-integrity.svg +1 -0
  659. package/dist/web/icons/file_type_nsri.svg +1 -0
  660. package/dist/web/icons/file_type_nuget.svg +1 -0
  661. package/dist/web/icons/file_type_numpy.svg +1 -0
  662. package/dist/web/icons/file_type_nunjucks.svg +1 -0
  663. package/dist/web/icons/file_type_nuxt.svg +1 -0
  664. package/dist/web/icons/file_type_nyc.svg +1 -0
  665. package/dist/web/icons/file_type_objectivec.svg +1 -0
  666. package/dist/web/icons/file_type_objectivecpp.svg +1 -0
  667. package/dist/web/icons/file_type_ocaml.svg +1 -0
  668. package/dist/web/icons/file_type_ogone.svg +1 -0
  669. package/dist/web/icons/file_type_onenote.svg +1 -0
  670. package/dist/web/icons/file_type_openHAB.svg +1 -0
  671. package/dist/web/icons/file_type_opencl.svg +1 -0
  672. package/dist/web/icons/file_type_openscad.svg +1 -0
  673. package/dist/web/icons/file_type_org.svg +1 -0
  674. package/dist/web/icons/file_type_outlook.svg +1 -0
  675. package/dist/web/icons/file_type_ovpn.svg +1 -0
  676. package/dist/web/icons/file_type_package.svg +1 -0
  677. package/dist/web/icons/file_type_paket.svg +1 -0
  678. package/dist/web/icons/file_type_patch.svg +1 -0
  679. package/dist/web/icons/file_type_pcl.svg +1 -0
  680. package/dist/web/icons/file_type_pddl.svg +1 -0
  681. package/dist/web/icons/file_type_pddl_happenings.svg +1 -0
  682. package/dist/web/icons/file_type_pddl_plan.svg +1 -0
  683. package/dist/web/icons/file_type_pdf.svg +1 -0
  684. package/dist/web/icons/file_type_pdf2.svg +1 -0
  685. package/dist/web/icons/file_type_perl.svg +1 -0
  686. package/dist/web/icons/file_type_perl2.svg +1 -0
  687. package/dist/web/icons/file_type_perl6.svg +1 -0
  688. package/dist/web/icons/file_type_pgsql.svg +1 -0
  689. package/dist/web/icons/file_type_photoshop.svg +1 -0
  690. package/dist/web/icons/file_type_photoshop2.svg +1 -0
  691. package/dist/web/icons/file_type_php.svg +1 -0
  692. package/dist/web/icons/file_type_php2.svg +1 -0
  693. package/dist/web/icons/file_type_php3.svg +1 -0
  694. package/dist/web/icons/file_type_phpcsfixer.svg +1 -0
  695. package/dist/web/icons/file_type_phpunit.svg +1 -0
  696. package/dist/web/icons/file_type_phraseapp.svg +1 -0
  697. package/dist/web/icons/file_type_pine.svg +1 -0
  698. package/dist/web/icons/file_type_pip.svg +1 -0
  699. package/dist/web/icons/file_type_pipeline.svg +3 -0
  700. package/dist/web/icons/file_type_plantuml.svg +1 -0
  701. package/dist/web/icons/file_type_platformio.svg +1 -0
  702. package/dist/web/icons/file_type_plsql.svg +1 -0
  703. package/dist/web/icons/file_type_plsql_package.svg +1 -0
  704. package/dist/web/icons/file_type_plsql_package_body.svg +1 -0
  705. package/dist/web/icons/file_type_plsql_package_header.svg +1 -0
  706. package/dist/web/icons/file_type_plsql_package_spec.svg +1 -0
  707. package/dist/web/icons/file_type_pnpm.svg +1 -0
  708. package/dist/web/icons/file_type_poedit.svg +1 -0
  709. package/dist/web/icons/file_type_polymer.svg +1 -0
  710. package/dist/web/icons/file_type_pony.svg +1 -0
  711. package/dist/web/icons/file_type_postcss.svg +1 -0
  712. package/dist/web/icons/file_type_postcssconfig.svg +1 -0
  713. package/dist/web/icons/file_type_powerpoint.svg +1 -0
  714. package/dist/web/icons/file_type_powerpoint2.svg +1 -0
  715. package/dist/web/icons/file_type_powershell.svg +1 -0
  716. package/dist/web/icons/file_type_powershell2.svg +1 -0
  717. package/dist/web/icons/file_type_powershell_format.svg +1 -0
  718. package/dist/web/icons/file_type_powershell_psd.svg +1 -0
  719. package/dist/web/icons/file_type_powershell_psd2.svg +1 -0
  720. package/dist/web/icons/file_type_powershell_psm.svg +1 -0
  721. package/dist/web/icons/file_type_powershell_psm2.svg +1 -0
  722. package/dist/web/icons/file_type_powershell_types.svg +1 -0
  723. package/dist/web/icons/file_type_preact.svg +1 -0
  724. package/dist/web/icons/file_type_precommit.svg +1 -0
  725. package/dist/web/icons/file_type_prettier.svg +1 -0
  726. package/dist/web/icons/file_type_prisma.svg +1 -0
  727. package/dist/web/icons/file_type_processinglang.svg +1 -0
  728. package/dist/web/icons/file_type_procfile.svg +1 -0
  729. package/dist/web/icons/file_type_progress.svg +1 -0
  730. package/dist/web/icons/file_type_prolog.svg +1 -0
  731. package/dist/web/icons/file_type_prometheus.svg +1 -0
  732. package/dist/web/icons/file_type_protobuf.svg +1 -0
  733. package/dist/web/icons/file_type_protractor.svg +1 -0
  734. package/dist/web/icons/file_type_publisher.svg +1 -0
  735. package/dist/web/icons/file_type_pug.svg +1 -0
  736. package/dist/web/icons/file_type_puppet.svg +1 -0
  737. package/dist/web/icons/file_type_purescript.svg +1 -0
  738. package/dist/web/icons/file_type_pyret.svg +1 -0
  739. package/dist/web/icons/file_type_python.svg +1 -0
  740. package/dist/web/icons/file_type_pytyped.svg +1 -0
  741. package/dist/web/icons/file_type_pyup.svg +1 -0
  742. package/dist/web/icons/file_type_q.svg +1 -0
  743. package/dist/web/icons/file_type_qbs.svg +1 -0
  744. package/dist/web/icons/file_type_qlikview.svg +1 -0
  745. package/dist/web/icons/file_type_qml.svg +1 -0
  746. package/dist/web/icons/file_type_qmldir.svg +1 -0
  747. package/dist/web/icons/file_type_qsharp.svg +1 -0
  748. package/dist/web/icons/file_type_quasar.svg +1 -0
  749. package/dist/web/icons/file_type_r.svg +1 -0
  750. package/dist/web/icons/file_type_racket.svg +1 -0
  751. package/dist/web/icons/file_type_rails.svg +1 -0
  752. package/dist/web/icons/file_type_rake.svg +1 -0
  753. package/dist/web/icons/file_type_raml.svg +1 -0
  754. package/dist/web/icons/file_type_razor.svg +1 -0
  755. package/dist/web/icons/file_type_razzle.svg +1 -0
  756. package/dist/web/icons/file_type_reactjs.svg +1 -0
  757. package/dist/web/icons/file_type_reacttemplate.svg +1 -0
  758. package/dist/web/icons/file_type_reactts.svg +1 -0
  759. package/dist/web/icons/file_type_reason.svg +1 -0
  760. package/dist/web/icons/file_type_red.svg +1 -0
  761. package/dist/web/icons/file_type_registry.svg +1 -0
  762. package/dist/web/icons/file_type_rego.svg +1 -0
  763. package/dist/web/icons/file_type_rehype.svg +1 -0
  764. package/dist/web/icons/file_type_remark.svg +1 -0
  765. package/dist/web/icons/file_type_renovate.svg +1 -0
  766. package/dist/web/icons/file_type_rescript.svg +1 -0
  767. package/dist/web/icons/file_type_rest.svg +1 -0
  768. package/dist/web/icons/file_type_retext.svg +1 -0
  769. package/dist/web/icons/file_type_rexx.svg +1 -0
  770. package/dist/web/icons/file_type_riot.svg +1 -0
  771. package/dist/web/icons/file_type_rmd.svg +1 -0
  772. package/dist/web/icons/file_type_robotframework.svg +1 -0
  773. package/dist/web/icons/file_type_robots.svg +1 -0
  774. package/dist/web/icons/file_type_rollup.svg +1 -0
  775. package/dist/web/icons/file_type_rproj.svg +1 -0
  776. package/dist/web/icons/file_type_rspec.svg +1 -0
  777. package/dist/web/icons/file_type_rubocop.svg +1 -0
  778. package/dist/web/icons/file_type_ruby.svg +1 -0
  779. package/dist/web/icons/file_type_rust.svg +1 -0
  780. package/dist/web/icons/file_type_rust_toolchain.svg +1 -0
  781. package/dist/web/icons/file_type_sails.svg +1 -0
  782. package/dist/web/icons/file_type_saltstack.svg +1 -0
  783. package/dist/web/icons/file_type_san.svg +1 -0
  784. package/dist/web/icons/file_type_sas.svg +1 -0
  785. package/dist/web/icons/file_type_sass.svg +1 -0
  786. package/dist/web/icons/file_type_sbt.svg +1 -0
  787. package/dist/web/icons/file_type_scala.svg +1 -0
  788. package/dist/web/icons/file_type_scilab.svg +1 -0
  789. package/dist/web/icons/file_type_script.svg +1 -0
  790. package/dist/web/icons/file_type_scss.svg +1 -0
  791. package/dist/web/icons/file_type_scss2.svg +1 -0
  792. package/dist/web/icons/file_type_sdlang.svg +1 -0
  793. package/dist/web/icons/file_type_sentry.svg +1 -0
  794. package/dist/web/icons/file_type_sequelize.svg +1 -0
  795. package/dist/web/icons/file_type_serverless.svg +1 -0
  796. package/dist/web/icons/file_type_shaderlab.svg +1 -0
  797. package/dist/web/icons/file_type_shell.svg +1 -0
  798. package/dist/web/icons/file_type_silverstripe.svg +1 -0
  799. package/dist/web/icons/file_type_sketch.svg +1 -0
  800. package/dist/web/icons/file_type_skipper.svg +1 -0
  801. package/dist/web/icons/file_type_slang.svg +1 -0
  802. package/dist/web/icons/file_type_slice.svg +1 -0
  803. package/dist/web/icons/file_type_slim.svg +1 -0
  804. package/dist/web/icons/file_type_sln.svg +1 -0
  805. package/dist/web/icons/file_type_sln2.svg +1 -0
  806. package/dist/web/icons/file_type_smarty.svg +1 -0
  807. package/dist/web/icons/file_type_snapcraft.svg +1 -0
  808. package/dist/web/icons/file_type_snort.svg +1 -0
  809. package/dist/web/icons/file_type_snyk.svg +1 -0
  810. package/dist/web/icons/file_type_solidarity.svg +1 -0
  811. package/dist/web/icons/file_type_solidity.svg +1 -0
  812. package/dist/web/icons/file_type_source.svg +1 -0
  813. package/dist/web/icons/file_type_spacengine.svg +1 -0
  814. package/dist/web/icons/file_type_sparql.svg +1 -0
  815. package/dist/web/icons/file_type_sqf.svg +1 -0
  816. package/dist/web/icons/file_type_sql.svg +1 -0
  817. package/dist/web/icons/file_type_sqlite.svg +1 -0
  818. package/dist/web/icons/file_type_squirrel.svg +1 -0
  819. package/dist/web/icons/file_type_sss.svg +1 -0
  820. package/dist/web/icons/file_type_stan.svg +1 -0
  821. package/dist/web/icons/file_type_stata.svg +1 -0
  822. package/dist/web/icons/file_type_stencil.svg +1 -0
  823. package/dist/web/icons/file_type_storyboard.svg +1 -0
  824. package/dist/web/icons/file_type_storybook.svg +1 -0
  825. package/dist/web/icons/file_type_stylable.svg +1 -0
  826. package/dist/web/icons/file_type_style.svg +1 -0
  827. package/dist/web/icons/file_type_styled.svg +1 -0
  828. package/dist/web/icons/file_type_stylelint.svg +1 -0
  829. package/dist/web/icons/file_type_stylish_haskell.svg +1 -0
  830. package/dist/web/icons/file_type_stylus.svg +1 -0
  831. package/dist/web/icons/file_type_subversion.svg +1 -0
  832. package/dist/web/icons/file_type_svelte.svg +1 -0
  833. package/dist/web/icons/file_type_svg.svg +1 -0
  834. package/dist/web/icons/file_type_swagger.svg +1 -0
  835. package/dist/web/icons/file_type_swift.svg +1 -0
  836. package/dist/web/icons/file_type_swig.svg +1 -0
  837. package/dist/web/icons/file_type_symfony.svg +1 -0
  838. package/dist/web/icons/file_type_systemd.svg +1 -0
  839. package/dist/web/icons/file_type_systemverilog.svg +1 -0
  840. package/dist/web/icons/file_type_t4tt.svg +1 -0
  841. package/dist/web/icons/file_type_tailwind.svg +1 -0
  842. package/dist/web/icons/file_type_tcl.svg +1 -0
  843. package/dist/web/icons/file_type_teal.svg +1 -0
  844. package/dist/web/icons/file_type_tera.svg +1 -0
  845. package/dist/web/icons/file_type_terraform.svg +1 -0
  846. package/dist/web/icons/file_type_test.svg +1 -0
  847. package/dist/web/icons/file_type_testcafe.svg +1 -0
  848. package/dist/web/icons/file_type_testjs.svg +1 -0
  849. package/dist/web/icons/file_type_testts.svg +1 -0
  850. package/dist/web/icons/file_type_tex.svg +1 -0
  851. package/dist/web/icons/file_type_text.svg +1 -0
  852. package/dist/web/icons/file_type_textile.svg +1 -0
  853. package/dist/web/icons/file_type_tfs.svg +1 -0
  854. package/dist/web/icons/file_type_tiltfile.svg +1 -0
  855. package/dist/web/icons/file_type_todo.svg +1 -0
  856. package/dist/web/icons/file_type_toml.svg +1 -0
  857. package/dist/web/icons/file_type_tox.svg +1 -0
  858. package/dist/web/icons/file_type_travis.svg +1 -0
  859. package/dist/web/icons/file_type_tsconfig.svg +1 -0
  860. package/dist/web/icons/file_type_tsconfig_official.svg +1 -0
  861. package/dist/web/icons/file_type_tslint.svg +1 -0
  862. package/dist/web/icons/file_type_tt.svg +1 -0
  863. package/dist/web/icons/file_type_ttcn.svg +1 -0
  864. package/dist/web/icons/file_type_tuc.svg +1 -0
  865. package/dist/web/icons/file_type_twig.svg +1 -0
  866. package/dist/web/icons/file_type_typedoc.svg +1 -0
  867. package/dist/web/icons/file_type_typescript.svg +1 -0
  868. package/dist/web/icons/file_type_typescript_official.svg +1 -0
  869. package/dist/web/icons/file_type_typescriptdef.svg +1 -0
  870. package/dist/web/icons/file_type_typescriptdef_official.svg +1 -0
  871. package/dist/web/icons/file_type_typo3.svg +1 -0
  872. package/dist/web/icons/file_type_unibeautify.svg +1 -0
  873. package/dist/web/icons/file_type_unlicense.svg +1 -0
  874. package/dist/web/icons/file_type_vagrant.svg +1 -0
  875. package/dist/web/icons/file_type_vala.svg +1 -0
  876. package/dist/web/icons/file_type_vapi.svg +1 -0
  877. package/dist/web/icons/file_type_vapor.svg +1 -0
  878. package/dist/web/icons/file_type_vash.svg +1 -0
  879. package/dist/web/icons/file_type_vb.svg +1 -0
  880. package/dist/web/icons/file_type_vba.svg +1 -0
  881. package/dist/web/icons/file_type_vbhtml.svg +1 -0
  882. package/dist/web/icons/file_type_vbproj.svg +1 -0
  883. package/dist/web/icons/file_type_vcxproj.svg +1 -0
  884. package/dist/web/icons/file_type_velocity.svg +1 -0
  885. package/dist/web/icons/file_type_verilog.svg +1 -0
  886. package/dist/web/icons/file_type_vhdl.svg +1 -0
  887. package/dist/web/icons/file_type_video.svg +1 -0
  888. package/dist/web/icons/file_type_view.svg +1 -0
  889. package/dist/web/icons/file_type_vim.svg +1 -0
  890. package/dist/web/icons/file_type_vite.svg +1 -0
  891. package/dist/web/icons/file_type_vlang.svg +1 -0
  892. package/dist/web/icons/file_type_volt.svg +1 -0
  893. package/dist/web/icons/file_type_vscode-insiders.svg +1 -0
  894. package/dist/web/icons/file_type_vscode.svg +1 -0
  895. package/dist/web/icons/file_type_vscode2.svg +1 -0
  896. package/dist/web/icons/file_type_vscode3.svg +1 -0
  897. package/dist/web/icons/file_type_vsix.svg +1 -0
  898. package/dist/web/icons/file_type_vsixmanifest.svg +1 -0
  899. package/dist/web/icons/file_type_vue.svg +1 -0
  900. package/dist/web/icons/file_type_vueconfig.svg +1 -0
  901. package/dist/web/icons/file_type_wallaby.svg +1 -0
  902. package/dist/web/icons/file_type_wasm.svg +1 -0
  903. package/dist/web/icons/file_type_watchmanconfig.svg +1 -0
  904. package/dist/web/icons/file_type_webp.svg +1 -0
  905. package/dist/web/icons/file_type_webpack.svg +1 -0
  906. package/dist/web/icons/file_type_wenyan.svg +1 -0
  907. package/dist/web/icons/file_type_wercker.svg +1 -0
  908. package/dist/web/icons/file_type_wolfram.svg +1 -0
  909. package/dist/web/icons/file_type_word.svg +1 -0
  910. package/dist/web/icons/file_type_word2.svg +1 -0
  911. package/dist/web/icons/file_type_wpml.svg +1 -0
  912. package/dist/web/icons/file_type_wurst.svg +1 -0
  913. package/dist/web/icons/file_type_wxml.svg +1 -0
  914. package/dist/web/icons/file_type_wxss.svg +1 -0
  915. package/dist/web/icons/file_type_xcode.svg +1 -0
  916. package/dist/web/icons/file_type_xfl.svg +1 -0
  917. package/dist/web/icons/file_type_xib.svg +1 -0
  918. package/dist/web/icons/file_type_xliff.svg +1 -0
  919. package/dist/web/icons/file_type_xmake.svg +1 -0
  920. package/dist/web/icons/file_type_xml.svg +1 -0
  921. package/dist/web/icons/file_type_xquery.svg +1 -0
  922. package/dist/web/icons/file_type_xsl.svg +1 -0
  923. package/dist/web/icons/file_type_yacc.svg +1 -0
  924. package/dist/web/icons/file_type_yaml.svg +1 -0
  925. package/dist/web/icons/file_type_yamllint.svg +1 -0
  926. package/dist/web/icons/file_type_yandex.svg +1 -0
  927. package/dist/web/icons/file_type_yang.svg +1 -0
  928. package/dist/web/icons/file_type_yarn.svg +1 -0
  929. package/dist/web/icons/file_type_yeoman.svg +1 -0
  930. package/dist/web/icons/file_type_zeit.svg +1 -0
  931. package/dist/web/icons/file_type_zig.svg +1 -0
  932. package/dist/web/icons/file_type_zip.svg +1 -0
  933. package/dist/web/icons/file_type_zip2.svg +1 -0
  934. package/dist/web/icons/folder_type_android.svg +1 -0
  935. package/dist/web/icons/folder_type_android_opened.svg +1 -0
  936. package/dist/web/icons/folder_type_api.svg +1 -0
  937. package/dist/web/icons/folder_type_api_opened.svg +1 -0
  938. package/dist/web/icons/folder_type_app.svg +1 -0
  939. package/dist/web/icons/folder_type_app_opened.svg +1 -0
  940. package/dist/web/icons/folder_type_arangodb.svg +1 -0
  941. package/dist/web/icons/folder_type_arangodb_opened.svg +1 -0
  942. package/dist/web/icons/folder_type_asset.svg +1 -0
  943. package/dist/web/icons/folder_type_asset_opened.svg +1 -0
  944. package/dist/web/icons/folder_type_audio.svg +1 -0
  945. package/dist/web/icons/folder_type_audio_opened.svg +1 -0
  946. package/dist/web/icons/folder_type_aurelia.svg +1 -0
  947. package/dist/web/icons/folder_type_aurelia_opened.svg +1 -0
  948. package/dist/web/icons/folder_type_aws.svg +1 -0
  949. package/dist/web/icons/folder_type_aws_opened.svg +1 -0
  950. package/dist/web/icons/folder_type_azure.svg +1 -0
  951. package/dist/web/icons/folder_type_azure_opened.svg +1 -0
  952. package/dist/web/icons/folder_type_azurepipelines.svg +1 -0
  953. package/dist/web/icons/folder_type_azurepipelines_opened.svg +1 -0
  954. package/dist/web/icons/folder_type_binary.svg +1 -0
  955. package/dist/web/icons/folder_type_binary_opened.svg +1 -0
  956. package/dist/web/icons/folder_type_bloc.svg +1 -0
  957. package/dist/web/icons/folder_type_bloc_opened.svg +1 -0
  958. package/dist/web/icons/folder_type_blueprint.svg +1 -0
  959. package/dist/web/icons/folder_type_blueprint_opened.svg +1 -0
  960. package/dist/web/icons/folder_type_bower.svg +1 -0
  961. package/dist/web/icons/folder_type_bower_opened.svg +1 -0
  962. package/dist/web/icons/folder_type_buildkite.svg +1 -0
  963. package/dist/web/icons/folder_type_buildkite_opened.svg +1 -0
  964. package/dist/web/icons/folder_type_cake.svg +1 -0
  965. package/dist/web/icons/folder_type_cake_opened.svg +1 -0
  966. package/dist/web/icons/folder_type_certificate.svg +1 -0
  967. package/dist/web/icons/folder_type_certificate_opened.svg +1 -0
  968. package/dist/web/icons/folder_type_chef.svg +1 -0
  969. package/dist/web/icons/folder_type_chef_opened.svg +1 -0
  970. package/dist/web/icons/folder_type_circleci.svg +1 -0
  971. package/dist/web/icons/folder_type_circleci_opened.svg +1 -0
  972. package/dist/web/icons/folder_type_cli.svg +1 -0
  973. package/dist/web/icons/folder_type_cli_opened.svg +1 -0
  974. package/dist/web/icons/folder_type_client.svg +1 -0
  975. package/dist/web/icons/folder_type_client_opened.svg +1 -0
  976. package/dist/web/icons/folder_type_cmake.svg +1 -0
  977. package/dist/web/icons/folder_type_cmake_opened.svg +1 -0
  978. package/dist/web/icons/folder_type_component.svg +1 -0
  979. package/dist/web/icons/folder_type_component_opened.svg +1 -0
  980. package/dist/web/icons/folder_type_composer.svg +1 -0
  981. package/dist/web/icons/folder_type_composer_opened.svg +1 -0
  982. package/dist/web/icons/folder_type_config.svg +1 -0
  983. package/dist/web/icons/folder_type_config_opened.svg +1 -0
  984. package/dist/web/icons/folder_type_controller.svg +1 -0
  985. package/dist/web/icons/folder_type_controller_opened.svg +1 -0
  986. package/dist/web/icons/folder_type_coverage.svg +1 -0
  987. package/dist/web/icons/folder_type_coverage_opened.svg +1 -0
  988. package/dist/web/icons/folder_type_css.svg +1 -0
  989. package/dist/web/icons/folder_type_css_opened.svg +1 -0
  990. package/dist/web/icons/folder_type_cubit.svg +1 -0
  991. package/dist/web/icons/folder_type_cubit_opened.svg +1 -0
  992. package/dist/web/icons/folder_type_cypress.svg +1 -0
  993. package/dist/web/icons/folder_type_cypress_opened.svg +1 -0
  994. package/dist/web/icons/folder_type_dapr.svg +1 -0
  995. package/dist/web/icons/folder_type_dapr_opened.svg +1 -0
  996. package/dist/web/icons/folder_type_db.svg +1 -0
  997. package/dist/web/icons/folder_type_db_opened.svg +1 -0
  998. package/dist/web/icons/folder_type_debian.svg +1 -0
  999. package/dist/web/icons/folder_type_debian_opened.svg +1 -0
  1000. package/dist/web/icons/folder_type_dependabot.svg +1 -0
  1001. package/dist/web/icons/folder_type_dependabot_opened.svg +1 -0
  1002. package/dist/web/icons/folder_type_devcontainer.svg +1 -0
  1003. package/dist/web/icons/folder_type_devcontainer_opened.svg +1 -0
  1004. package/dist/web/icons/folder_type_dist.svg +1 -0
  1005. package/dist/web/icons/folder_type_dist_opened.svg +1 -0
  1006. package/dist/web/icons/folder_type_docker.svg +1 -0
  1007. package/dist/web/icons/folder_type_docker_opened.svg +1 -0
  1008. package/dist/web/icons/folder_type_docs.svg +1 -0
  1009. package/dist/web/icons/folder_type_docs_opened.svg +1 -0
  1010. package/dist/web/icons/folder_type_e2e.svg +1 -0
  1011. package/dist/web/icons/folder_type_e2e_opened.svg +1 -0
  1012. package/dist/web/icons/folder_type_elasticbeanstalk.svg +1 -0
  1013. package/dist/web/icons/folder_type_elasticbeanstalk_opened.svg +1 -0
  1014. package/dist/web/icons/folder_type_electron.svg +1 -0
  1015. package/dist/web/icons/folder_type_electron_opened.svg +1 -0
  1016. package/dist/web/icons/folder_type_expo.svg +1 -0
  1017. package/dist/web/icons/folder_type_expo_opened.svg +1 -0
  1018. package/dist/web/icons/folder_type_favicon.svg +1 -0
  1019. package/dist/web/icons/folder_type_favicon_opened.svg +1 -0
  1020. package/dist/web/icons/folder_type_flow.svg +1 -0
  1021. package/dist/web/icons/folder_type_flow_opened.svg +1 -0
  1022. package/dist/web/icons/folder_type_fonts.svg +1 -0
  1023. package/dist/web/icons/folder_type_fonts_opened.svg +1 -0
  1024. package/dist/web/icons/folder_type_gcp.svg +1 -0
  1025. package/dist/web/icons/folder_type_gcp_opened.svg +1 -0
  1026. package/dist/web/icons/folder_type_git.svg +1 -0
  1027. package/dist/web/icons/folder_type_git_opened.svg +1 -0
  1028. package/dist/web/icons/folder_type_github.svg +1 -0
  1029. package/dist/web/icons/folder_type_github_opened.svg +1 -0
  1030. package/dist/web/icons/folder_type_gitlab.svg +1 -0
  1031. package/dist/web/icons/folder_type_gitlab_opened.svg +1 -0
  1032. package/dist/web/icons/folder_type_gradle.svg +1 -0
  1033. package/dist/web/icons/folder_type_gradle_opened.svg +1 -0
  1034. package/dist/web/icons/folder_type_graphql.svg +1 -0
  1035. package/dist/web/icons/folder_type_graphql_opened.svg +1 -0
  1036. package/dist/web/icons/folder_type_grunt.svg +1 -0
  1037. package/dist/web/icons/folder_type_grunt_opened.svg +1 -0
  1038. package/dist/web/icons/folder_type_gulp.svg +1 -0
  1039. package/dist/web/icons/folder_type_gulp_opened.svg +1 -0
  1040. package/dist/web/icons/folder_type_haxelib.svg +1 -0
  1041. package/dist/web/icons/folder_type_haxelib_opened.svg +1 -0
  1042. package/dist/web/icons/folder_type_helper.svg +1 -0
  1043. package/dist/web/icons/folder_type_helper_opened.svg +1 -0
  1044. package/dist/web/icons/folder_type_hook.svg +1 -0
  1045. package/dist/web/icons/folder_type_hook_opened.svg +1 -0
  1046. package/dist/web/icons/folder_type_husky.svg +1 -0
  1047. package/dist/web/icons/folder_type_husky_opened.svg +1 -0
  1048. package/dist/web/icons/folder_type_idea.svg +1 -0
  1049. package/dist/web/icons/folder_type_idea_opened.svg +1 -0
  1050. package/dist/web/icons/folder_type_images.svg +1 -0
  1051. package/dist/web/icons/folder_type_images_opened.svg +1 -0
  1052. package/dist/web/icons/folder_type_include.svg +1 -0
  1053. package/dist/web/icons/folder_type_include_opened.svg +1 -0
  1054. package/dist/web/icons/folder_type_interfaces.svg +1 -0
  1055. package/dist/web/icons/folder_type_interfaces_opened.svg +1 -0
  1056. package/dist/web/icons/folder_type_ios.svg +1 -0
  1057. package/dist/web/icons/folder_type_ios_opened.svg +1 -0
  1058. package/dist/web/icons/folder_type_js.svg +1 -0
  1059. package/dist/web/icons/folder_type_js_opened.svg +1 -0
  1060. package/dist/web/icons/folder_type_json.svg +1 -0
  1061. package/dist/web/icons/folder_type_json_official.svg +1 -0
  1062. package/dist/web/icons/folder_type_json_official_opened.svg +1 -0
  1063. package/dist/web/icons/folder_type_json_opened.svg +1 -0
  1064. package/dist/web/icons/folder_type_kubernetes.svg +1 -0
  1065. package/dist/web/icons/folder_type_kubernetes_opened.svg +1 -0
  1066. package/dist/web/icons/folder_type_less.svg +1 -0
  1067. package/dist/web/icons/folder_type_less_opened.svg +1 -0
  1068. package/dist/web/icons/folder_type_library.svg +1 -0
  1069. package/dist/web/icons/folder_type_library_opened.svg +1 -0
  1070. package/dist/web/icons/folder_type_light_electron.svg +1 -0
  1071. package/dist/web/icons/folder_type_light_electron_opened.svg +1 -0
  1072. package/dist/web/icons/folder_type_light_expo.svg +1 -0
  1073. package/dist/web/icons/folder_type_light_expo_opened.svg +1 -0
  1074. package/dist/web/icons/folder_type_light_fonts.svg +1 -0
  1075. package/dist/web/icons/folder_type_light_fonts_opened.svg +1 -0
  1076. package/dist/web/icons/folder_type_light_gradle.svg +1 -0
  1077. package/dist/web/icons/folder_type_light_gradle_opened.svg +1 -0
  1078. package/dist/web/icons/folder_type_light_meteor.svg +1 -0
  1079. package/dist/web/icons/folder_type_light_meteor_opened.svg +1 -0
  1080. package/dist/web/icons/folder_type_light_mysql.svg +1 -0
  1081. package/dist/web/icons/folder_type_light_mysql_opened.svg +1 -0
  1082. package/dist/web/icons/folder_type_light_node.svg +1 -0
  1083. package/dist/web/icons/folder_type_light_node_opened.svg +1 -0
  1084. package/dist/web/icons/folder_type_light_redux.svg +1 -0
  1085. package/dist/web/icons/folder_type_light_redux_opened.svg +1 -0
  1086. package/dist/web/icons/folder_type_light_sass.svg +1 -0
  1087. package/dist/web/icons/folder_type_light_sass_opened.svg +1 -0
  1088. package/dist/web/icons/folder_type_linux.svg +1 -0
  1089. package/dist/web/icons/folder_type_linux_opened.svg +1 -0
  1090. package/dist/web/icons/folder_type_locale.svg +1 -0
  1091. package/dist/web/icons/folder_type_locale_opened.svg +1 -0
  1092. package/dist/web/icons/folder_type_log.svg +1 -0
  1093. package/dist/web/icons/folder_type_log_opened.svg +1 -0
  1094. package/dist/web/icons/folder_type_macos.svg +1 -0
  1095. package/dist/web/icons/folder_type_macos_opened.svg +1 -0
  1096. package/dist/web/icons/folder_type_mariadb.svg +1 -0
  1097. package/dist/web/icons/folder_type_mariadb_opened.svg +1 -0
  1098. package/dist/web/icons/folder_type_maven.svg +1 -0
  1099. package/dist/web/icons/folder_type_maven_opened.svg +1 -0
  1100. package/dist/web/icons/folder_type_memcached.svg +1 -0
  1101. package/dist/web/icons/folder_type_memcached_opened.svg +1 -0
  1102. package/dist/web/icons/folder_type_meteor.svg +1 -0
  1103. package/dist/web/icons/folder_type_meteor_opened.svg +1 -0
  1104. package/dist/web/icons/folder_type_middleware.svg +1 -0
  1105. package/dist/web/icons/folder_type_middleware_opened.svg +1 -0
  1106. package/dist/web/icons/folder_type_minikube.svg +1 -0
  1107. package/dist/web/icons/folder_type_minikube_opened.svg +1 -0
  1108. package/dist/web/icons/folder_type_mjml.svg +1 -0
  1109. package/dist/web/icons/folder_type_mjml_opened.svg +1 -0
  1110. package/dist/web/icons/folder_type_mock.svg +1 -0
  1111. package/dist/web/icons/folder_type_mock_opened.svg +1 -0
  1112. package/dist/web/icons/folder_type_model.svg +1 -0
  1113. package/dist/web/icons/folder_type_model_opened.svg +1 -0
  1114. package/dist/web/icons/folder_type_module.svg +1 -0
  1115. package/dist/web/icons/folder_type_module_opened.svg +1 -0
  1116. package/dist/web/icons/folder_type_mongodb.svg +1 -0
  1117. package/dist/web/icons/folder_type_mongodb_opened.svg +1 -0
  1118. package/dist/web/icons/folder_type_mysql.svg +1 -0
  1119. package/dist/web/icons/folder_type_mysql_opened.svg +1 -0
  1120. package/dist/web/icons/folder_type_next.svg +1 -0
  1121. package/dist/web/icons/folder_type_next_opened.svg +1 -0
  1122. package/dist/web/icons/folder_type_nginx.svg +1 -0
  1123. package/dist/web/icons/folder_type_nginx_opened.svg +1 -0
  1124. package/dist/web/icons/folder_type_node.svg +1 -0
  1125. package/dist/web/icons/folder_type_node_opened.svg +1 -0
  1126. package/dist/web/icons/folder_type_notification.svg +1 -0
  1127. package/dist/web/icons/folder_type_notification_opened.svg +1 -0
  1128. package/dist/web/icons/folder_type_nuget.svg +1 -0
  1129. package/dist/web/icons/folder_type_nuget_opened.svg +1 -0
  1130. package/dist/web/icons/folder_type_nuxt.svg +1 -0
  1131. package/dist/web/icons/folder_type_nuxt_opened.svg +1 -0
  1132. package/dist/web/icons/folder_type_package.svg +1 -0
  1133. package/dist/web/icons/folder_type_package_opened.svg +1 -0
  1134. package/dist/web/icons/folder_type_paket.svg +1 -0
  1135. package/dist/web/icons/folder_type_paket_opened.svg +1 -0
  1136. package/dist/web/icons/folder_type_php.svg +1 -0
  1137. package/dist/web/icons/folder_type_php_opened.svg +1 -0
  1138. package/dist/web/icons/folder_type_platformio.svg +1 -0
  1139. package/dist/web/icons/folder_type_platformio_opened.svg +1 -0
  1140. package/dist/web/icons/folder_type_plugin.svg +1 -0
  1141. package/dist/web/icons/folder_type_plugin_opened.svg +1 -0
  1142. package/dist/web/icons/folder_type_private.svg +1 -0
  1143. package/dist/web/icons/folder_type_private_opened.svg +1 -0
  1144. package/dist/web/icons/folder_type_public.svg +1 -0
  1145. package/dist/web/icons/folder_type_public_opened.svg +1 -0
  1146. package/dist/web/icons/folder_type_python.svg +1 -0
  1147. package/dist/web/icons/folder_type_python_opened.svg +1 -0
  1148. package/dist/web/icons/folder_type_ravendb.svg +1 -0
  1149. package/dist/web/icons/folder_type_ravendb_opened.svg +1 -0
  1150. package/dist/web/icons/folder_type_redis.svg +1 -0
  1151. package/dist/web/icons/folder_type_redis_opened.svg +1 -0
  1152. package/dist/web/icons/folder_type_redux.svg +1 -0
  1153. package/dist/web/icons/folder_type_redux_opened.svg +1 -0
  1154. package/dist/web/icons/folder_type_route.svg +1 -0
  1155. package/dist/web/icons/folder_type_route_opened.svg +1 -0
  1156. package/dist/web/icons/folder_type_sass.svg +1 -0
  1157. package/dist/web/icons/folder_type_sass_opened.svg +1 -0
  1158. package/dist/web/icons/folder_type_script.svg +1 -0
  1159. package/dist/web/icons/folder_type_script_opened.svg +1 -0
  1160. package/dist/web/icons/folder_type_server.svg +1 -0
  1161. package/dist/web/icons/folder_type_server_opened.svg +1 -0
  1162. package/dist/web/icons/folder_type_services.svg +1 -0
  1163. package/dist/web/icons/folder_type_services_opened.svg +1 -0
  1164. package/dist/web/icons/folder_type_src.svg +1 -0
  1165. package/dist/web/icons/folder_type_src_opened.svg +1 -0
  1166. package/dist/web/icons/folder_type_sso.svg +1 -0
  1167. package/dist/web/icons/folder_type_sso_opened.svg +1 -0
  1168. package/dist/web/icons/folder_type_story.svg +1 -0
  1169. package/dist/web/icons/folder_type_story_opened.svg +1 -0
  1170. package/dist/web/icons/folder_type_style.svg +1 -0
  1171. package/dist/web/icons/folder_type_style_opened.svg +1 -0
  1172. package/dist/web/icons/folder_type_temp.svg +1 -0
  1173. package/dist/web/icons/folder_type_temp_opened.svg +1 -0
  1174. package/dist/web/icons/folder_type_template.svg +1 -0
  1175. package/dist/web/icons/folder_type_template_opened.svg +1 -0
  1176. package/dist/web/icons/folder_type_test.svg +1 -0
  1177. package/dist/web/icons/folder_type_test_opened.svg +1 -0
  1178. package/dist/web/icons/folder_type_theme.svg +1 -0
  1179. package/dist/web/icons/folder_type_theme_opened.svg +1 -0
  1180. package/dist/web/icons/folder_type_tools.svg +1 -0
  1181. package/dist/web/icons/folder_type_tools_opened.svg +1 -0
  1182. package/dist/web/icons/folder_type_travis.svg +1 -0
  1183. package/dist/web/icons/folder_type_travis_opened.svg +1 -0
  1184. package/dist/web/icons/folder_type_typescript.svg +1 -0
  1185. package/dist/web/icons/folder_type_typescript_opened.svg +1 -0
  1186. package/dist/web/icons/folder_type_typings.svg +1 -0
  1187. package/dist/web/icons/folder_type_typings2.svg +1 -0
  1188. package/dist/web/icons/folder_type_typings2_opened.svg +1 -0
  1189. package/dist/web/icons/folder_type_typings_opened.svg +1 -0
  1190. package/dist/web/icons/folder_type_vagrant.svg +1 -0
  1191. package/dist/web/icons/folder_type_vagrant_opened.svg +1 -0
  1192. package/dist/web/icons/folder_type_video.svg +1 -0
  1193. package/dist/web/icons/folder_type_video_opened.svg +1 -0
  1194. package/dist/web/icons/folder_type_view.svg +1 -0
  1195. package/dist/web/icons/folder_type_view_opened.svg +1 -0
  1196. package/dist/web/icons/folder_type_vs.svg +1 -0
  1197. package/dist/web/icons/folder_type_vs2.svg +1 -0
  1198. package/dist/web/icons/folder_type_vs2_opened.svg +1 -0
  1199. package/dist/web/icons/folder_type_vs_opened.svg +1 -0
  1200. package/dist/web/icons/folder_type_vscode.svg +1 -0
  1201. package/dist/web/icons/folder_type_vscode2.svg +1 -0
  1202. package/dist/web/icons/folder_type_vscode2_opened.svg +1 -0
  1203. package/dist/web/icons/folder_type_vscode3.svg +1 -0
  1204. package/dist/web/icons/folder_type_vscode3_opened.svg +1 -0
  1205. package/dist/web/icons/folder_type_vscode_opened.svg +1 -0
  1206. package/dist/web/icons/folder_type_vscode_test.svg +1 -0
  1207. package/dist/web/icons/folder_type_vscode_test2.svg +1 -0
  1208. package/dist/web/icons/folder_type_vscode_test2_opened.svg +1 -0
  1209. package/dist/web/icons/folder_type_vscode_test3.svg +1 -0
  1210. package/dist/web/icons/folder_type_vscode_test3_opened.svg +1 -0
  1211. package/dist/web/icons/folder_type_vscode_test_opened.svg +1 -0
  1212. package/dist/web/icons/folder_type_webpack.svg +1 -0
  1213. package/dist/web/icons/folder_type_webpack_opened.svg +1 -0
  1214. package/dist/web/icons/folder_type_windows.svg +1 -0
  1215. package/dist/web/icons/folder_type_windows_opened.svg +1 -0
  1216. package/dist/web/icons/folder_type_www.svg +1 -0
  1217. package/dist/web/icons/folder_type_www_opened.svg +1 -0
  1218. package/dist/web/index.html +1 -0
  1219. package/dist/web/index.txt +28 -0
  1220. package/dist/web/login/__next._full.txt +30 -0
  1221. package/dist/web/login/__next._head.txt +6 -0
  1222. package/dist/web/login/__next._index.txt +10 -0
  1223. package/dist/web/login/__next._tree.txt +8 -0
  1224. package/dist/web/login/__next.login.__PAGE__.txt +9 -0
  1225. package/dist/web/login/__next.login.txt +5 -0
  1226. package/dist/web/login.html +1 -0
  1227. package/dist/web/login.txt +30 -0
  1228. package/dist/web/monaco/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
  1229. package/dist/web/monaco/vs/abap-D-t0cyap.js +1 -0
  1230. package/dist/web/monaco/vs/apex-CcIm7xu6.js +1 -0
  1231. package/dist/web/monaco/vs/assets/css.worker-HnVq6Ewq.js +93 -0
  1232. package/dist/web/monaco/vs/assets/editor.worker-Be8ye1pW.js +26 -0
  1233. package/dist/web/monaco/vs/assets/html.worker-B51mlPHg.js +470 -0
  1234. package/dist/web/monaco/vs/assets/json.worker-DKiEKt88.js +58 -0
  1235. package/dist/web/monaco/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
  1236. package/dist/web/monaco/vs/azcli-BA0tQDCg.js +1 -0
  1237. package/dist/web/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  1238. package/dist/web/monaco/vs/bat-C397hTD6.js +1 -0
  1239. package/dist/web/monaco/vs/bicep-DF5aW17k.js +2 -0
  1240. package/dist/web/monaco/vs/cameligo-plsz8qhj.js +1 -0
  1241. package/dist/web/monaco/vs/clojure-Y2auQMzK.js +1 -0
  1242. package/dist/web/monaco/vs/coffee-Bu45yuWE.js +1 -0
  1243. package/dist/web/monaco/vs/cpp-CkKPQIni.js +1 -0
  1244. package/dist/web/monaco/vs/csharp-CX28MZyh.js +1 -0
  1245. package/dist/web/monaco/vs/csp-D8uWnyxW.js +1 -0
  1246. package/dist/web/monaco/vs/css-CaeNmE3S.js +3 -0
  1247. package/dist/web/monaco/vs/cssMode-CjiAH6dQ.js +1 -0
  1248. package/dist/web/monaco/vs/cypher-DVThT8BS.js +1 -0
  1249. package/dist/web/monaco/vs/dart-CmGfCvrO.js +1 -0
  1250. package/dist/web/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  1251. package/dist/web/monaco/vs/ecl-30fUercY.js +1 -0
  1252. package/dist/web/monaco/vs/editor/editor.main.css +1 -0
  1253. package/dist/web/monaco/vs/editor/editor.main.js +5 -0
  1254. package/dist/web/monaco/vs/editor.api-CalNCsUg.js +903 -0
  1255. package/dist/web/monaco/vs/elixir-xjPaIfzF.js +1 -0
  1256. package/dist/web/monaco/vs/flow9-DqtmStfK.js +1 -0
  1257. package/dist/web/monaco/vs/freemarker2-Cz_sV6Md.js +3 -0
  1258. package/dist/web/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  1259. package/dist/web/monaco/vs/go-D_hbi-Jt.js +1 -0
  1260. package/dist/web/monaco/vs/graphql-CKUU4kLG.js +1 -0
  1261. package/dist/web/monaco/vs/handlebars-OwglfO-1.js +1 -0
  1262. package/dist/web/monaco/vs/hcl-DTaboeZW.js +1 -0
  1263. package/dist/web/monaco/vs/html-Pa1xEWsY.js +1 -0
  1264. package/dist/web/monaco/vs/htmlMode-Bz67EXwp.js +1 -0
  1265. package/dist/web/monaco/vs/ini-CsNwO04R.js +1 -0
  1266. package/dist/web/monaco/vs/java-CI4ZMsH9.js +1 -0
  1267. package/dist/web/monaco/vs/javascript-PczUCGdz.js +1 -0
  1268. package/dist/web/monaco/vs/jsonMode-DULH5oaX.js +7 -0
  1269. package/dist/web/monaco/vs/julia-BwzEvaQw.js +1 -0
  1270. package/dist/web/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  1271. package/dist/web/monaco/vs/language/css/monaco.contribution.js +1 -0
  1272. package/dist/web/monaco/vs/language/html/monaco.contribution.js +1 -0
  1273. package/dist/web/monaco/vs/language/json/monaco.contribution.js +1 -0
  1274. package/dist/web/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  1275. package/dist/web/monaco/vs/less-C0eDYdqa.js +2 -0
  1276. package/dist/web/monaco/vs/lexon-iON-Kj97.js +1 -0
  1277. package/dist/web/monaco/vs/liquid-DqKjdPGy.js +1 -0
  1278. package/dist/web/monaco/vs/loader.js +1368 -0
  1279. package/dist/web/monaco/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
  1280. package/dist/web/monaco/vs/lua-DtygF91M.js +1 -0
  1281. package/dist/web/monaco/vs/m3-CsR4AuFi.js +1 -0
  1282. package/dist/web/monaco/vs/markdown-C_rD0bIw.js +1 -0
  1283. package/dist/web/monaco/vs/mdx-DEWtB1K5.js +1 -0
  1284. package/dist/web/monaco/vs/mips-CiYP61RB.js +1 -0
  1285. package/dist/web/monaco/vs/monaco.contribution-D2OdxNBt.js +1 -0
  1286. package/dist/web/monaco/vs/monaco.contribution-DO3azKX8.js +1 -0
  1287. package/dist/web/monaco/vs/monaco.contribution-EcChJV6a.js +1 -0
  1288. package/dist/web/monaco/vs/monaco.contribution-qLAYrEOP.js +1 -0
  1289. package/dist/web/monaco/vs/msdax-C38-sJlp.js +1 -0
  1290. package/dist/web/monaco/vs/mysql-CdtbpvbG.js +1 -0
  1291. package/dist/web/monaco/vs/nls.messages-loader.js +1 -0
  1292. package/dist/web/monaco/vs/nls.messages.cs.js.js +17 -0
  1293. package/dist/web/monaco/vs/nls.messages.de.js.js +17 -0
  1294. package/dist/web/monaco/vs/nls.messages.es.js.js +17 -0
  1295. package/dist/web/monaco/vs/nls.messages.fr.js.js +15 -0
  1296. package/dist/web/monaco/vs/nls.messages.it.js.js +15 -0
  1297. package/dist/web/monaco/vs/nls.messages.ja.js.js +17 -0
  1298. package/dist/web/monaco/vs/nls.messages.js.js +10 -0
  1299. package/dist/web/monaco/vs/nls.messages.ko.js.js +25 -0
  1300. package/dist/web/monaco/vs/nls.messages.pl.js.js +17 -0
  1301. package/dist/web/monaco/vs/nls.messages.pt-br.js.js +6 -0
  1302. package/dist/web/monaco/vs/nls.messages.ru.js.js +17 -0
  1303. package/dist/web/monaco/vs/nls.messages.tr.js.js +15 -0
  1304. package/dist/web/monaco/vs/nls.messages.zh-cn.js.js +17 -0
  1305. package/dist/web/monaco/vs/nls.messages.zh-tw.js.js +15 -0
  1306. package/dist/web/monaco/vs/objective-c-CntZFaHX.js +1 -0
  1307. package/dist/web/monaco/vs/pascal-r6kuqfl_.js +1 -0
  1308. package/dist/web/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  1309. package/dist/web/monaco/vs/perl-DABw_TcH.js +1 -0
  1310. package/dist/web/monaco/vs/pgsql-me_jFXeX.js +1 -0
  1311. package/dist/web/monaco/vs/php-D_kh-9LK.js +1 -0
  1312. package/dist/web/monaco/vs/pla-VfZjczW0.js +1 -0
  1313. package/dist/web/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  1314. package/dist/web/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  1315. package/dist/web/monaco/vs/powershell-B-7ap1zc.js +1 -0
  1316. package/dist/web/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  1317. package/dist/web/monaco/vs/pug-BRpRNeEb.js +1 -0
  1318. package/dist/web/monaco/vs/python-Cr0UkIbn.js +1 -0
  1319. package/dist/web/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  1320. package/dist/web/monaco/vs/r-f8dDdrp4.js +1 -0
  1321. package/dist/web/monaco/vs/razor-BYAHOTkz.js +1 -0
  1322. package/dist/web/monaco/vs/redis-fvZQY4PI.js +1 -0
  1323. package/dist/web/monaco/vs/redshift-45Et0LQi.js +1 -0
  1324. package/dist/web/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  1325. package/dist/web/monaco/vs/ruby-CZO8zYTz.js +1 -0
  1326. package/dist/web/monaco/vs/rust-Bfetafyc.js +1 -0
  1327. package/dist/web/monaco/vs/sb-3GYllVck.js +1 -0
  1328. package/dist/web/monaco/vs/scala-foMgrKo1.js +1 -0
  1329. package/dist/web/monaco/vs/scheme-CHdMtr7p.js +1 -0
  1330. package/dist/web/monaco/vs/scss-C1cmLt9V.js +3 -0
  1331. package/dist/web/monaco/vs/shell-ClXCKCEW.js +1 -0
  1332. package/dist/web/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  1333. package/dist/web/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  1334. package/dist/web/monaco/vs/sparql-AUGFYSyk.js +1 -0
  1335. package/dist/web/monaco/vs/sql-32GpJSV2.js +1 -0
  1336. package/dist/web/monaco/vs/st-CuDFIVZ_.js +1 -0
  1337. package/dist/web/monaco/vs/swift-n-2HociN.js +3 -0
  1338. package/dist/web/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  1339. package/dist/web/monaco/vs/tcl-D74tq1nH.js +1 -0
  1340. package/dist/web/monaco/vs/tsMode-CZz1Umrk.js +11 -0
  1341. package/dist/web/monaco/vs/twig-C6taOxMV.js +1 -0
  1342. package/dist/web/monaco/vs/typescript-DfOrAzoV.js +1 -0
  1343. package/dist/web/monaco/vs/typespec-D-PIh9Xw.js +1 -0
  1344. package/dist/web/monaco/vs/vb-Dyb2648j.js +1 -0
  1345. package/dist/web/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  1346. package/dist/web/monaco/vs/workers-DcJshg-q.js +1 -0
  1347. package/dist/web/monaco/vs/xml-CdsdnY8S.js +1 -0
  1348. package/dist/web/monaco/vs/yaml-DYGvmE88.js +1 -0
  1349. package/dist/web/next.svg +1 -0
  1350. package/dist/web/vercel.svg +1 -0
  1351. package/dist/web/window.svg +1 -0
  1352. package/dist/web/workspace/_/__next._full.txt +28 -0
  1353. package/dist/web/workspace/_/__next._head.txt +6 -0
  1354. package/dist/web/workspace/_/__next._index.txt +10 -0
  1355. package/dist/web/workspace/_/__next._tree.txt +9 -0
  1356. package/dist/web/workspace/_/__next.workspace.$d$id.__PAGE__.txt +7 -0
  1357. package/dist/web/workspace/_/__next.workspace.$d$id.txt +5 -0
  1358. package/dist/web/workspace/_/__next.workspace.txt +5 -0
  1359. package/dist/web/workspace/_.html +1 -0
  1360. package/dist/web/workspace/_.txt +28 -0
  1361. package/dist/web/workspaces/__next._full.txt +30 -0
  1362. package/dist/web/workspaces/__next._head.txt +6 -0
  1363. package/dist/web/workspaces/__next._index.txt +10 -0
  1364. package/dist/web/workspaces/__next._tree.txt +8 -0
  1365. package/dist/web/workspaces/__next.workspaces.__PAGE__.txt +9 -0
  1366. package/dist/web/workspaces/__next.workspaces.txt +5 -0
  1367. package/dist/web/workspaces.html +1 -0
  1368. package/dist/web/workspaces.txt +30 -0
  1369. package/dist/ws/connection-manager.js +34 -0
  1370. package/dist/ws/handler.js +1285 -0
  1371. package/dist/ws/terminal-handler.js +33 -0
  1372. package/package.json +47 -0
  1373. package/public/avatars/1777813826407-bea0ja-minimax.svg +1 -0
  1374. package/public/avatars/1777813967088-3xlvd0-minimax.svg +1 -0
  1375. package/public/avatars/1777814041714-yp0qeq-minimax.svg +1 -0
  1376. package/public/avatars/1777815865622-08wp9m-user.jpg +0 -0
  1377. package/public/avatars/1777904986095-rg26je-icon.png +0 -0
  1378. package/public/provider-icons/aicodemirror.svg +19 -0
  1379. package/public/provider-icons/aicoding.svg +20 -0
  1380. package/public/provider-icons/aihubmix-color.svg +1 -0
  1381. package/public/provider-icons/algocode.svg +51 -0
  1382. package/public/provider-icons/alibaba.svg +1 -0
  1383. package/public/provider-icons/anthropic.svg +1 -0
  1384. package/public/provider-icons/aws.svg +1 -0
  1385. package/public/provider-icons/azure.svg +1 -0
  1386. package/public/provider-icons/baidu.svg +1 -0
  1387. package/public/provider-icons/bailian.svg +1 -0
  1388. package/public/provider-icons/bytedance.svg +1 -0
  1389. package/public/provider-icons/catcoder.svg +1 -0
  1390. package/public/provider-icons/chatglm.svg +1 -0
  1391. package/public/provider-icons/claude.svg +1 -0
  1392. package/public/provider-icons/claw.svg +22 -0
  1393. package/public/provider-icons/cloudflare.svg +1 -0
  1394. package/public/provider-icons/cohere.svg +1 -0
  1395. package/public/provider-icons/copilot.svg +1 -0
  1396. package/public/provider-icons/crazyrouter.svg +1 -0
  1397. package/public/provider-icons/ctok.svg +21 -0
  1398. package/public/provider-icons/cubence.svg +9 -0
  1399. package/public/provider-icons/dds.svg +2225 -0
  1400. package/public/provider-icons/deepseek.svg +1 -0
  1401. package/public/provider-icons/doubao.svg +1 -0
  1402. package/public/provider-icons/eflowcode.png +0 -0
  1403. package/public/provider-icons/gemini.svg +1 -0
  1404. package/public/provider-icons/gemma.svg +1 -0
  1405. package/public/provider-icons/github.svg +1 -0
  1406. package/public/provider-icons/githubcopilot.svg +1 -0
  1407. package/public/provider-icons/google.svg +1 -0
  1408. package/public/provider-icons/googlecloud.svg +1 -0
  1409. package/public/provider-icons/grok.svg +1 -0
  1410. package/public/provider-icons/hermes.png +0 -0
  1411. package/public/provider-icons/huawei.svg +1 -0
  1412. package/public/provider-icons/huggingface.svg +1 -0
  1413. package/public/provider-icons/hunyuan.svg +1 -0
  1414. package/public/provider-icons/index.ts +114 -0
  1415. package/public/provider-icons/kimi.svg +1 -0
  1416. package/public/provider-icons/lemondata.png +0 -0
  1417. package/public/provider-icons/lioncc.svg +6 -0
  1418. package/public/provider-icons/longcat-color.svg +1 -0
  1419. package/public/provider-icons/mcp.svg +1 -0
  1420. package/public/provider-icons/meta.svg +1 -0
  1421. package/public/provider-icons/metadata.ts +469 -0
  1422. package/public/provider-icons/micu.svg +23 -0
  1423. package/public/provider-icons/midjourney.svg +1 -0
  1424. package/public/provider-icons/minimax.svg +1 -0
  1425. package/public/provider-icons/mistral.svg +1 -0
  1426. package/public/provider-icons/modelscope-color.svg +1 -0
  1427. package/public/provider-icons/newapi.svg +1 -0
  1428. package/public/provider-icons/notion.svg +1 -0
  1429. package/public/provider-icons/novita.svg +11 -0
  1430. package/public/provider-icons/nvidia.svg +1 -0
  1431. package/public/provider-icons/ollama.svg +1 -0
  1432. package/public/provider-icons/openai.svg +1 -0
  1433. package/public/provider-icons/opencode-logo-light.svg +1 -0
  1434. package/public/provider-icons/openrouter.svg +1 -0
  1435. package/public/provider-icons/packycode.svg +1 -0
  1436. package/public/provider-icons/palm.svg +1 -0
  1437. package/public/provider-icons/perplexity.svg +1 -0
  1438. package/public/provider-icons/pipellm.png +0 -0
  1439. package/public/provider-icons/qwen.svg +1 -0
  1440. package/public/provider-icons/rc.svg +1 -0
  1441. package/public/provider-icons/shengsuanyun.svg +4 -0
  1442. package/public/provider-icons/siliconflow.svg +1 -0
  1443. package/public/provider-icons/sssaicode.svg +73 -0
  1444. package/public/provider-icons/stability.svg +1 -0
  1445. package/public/provider-icons/stepfun.svg +10 -0
  1446. package/public/provider-icons/tencent.svg +1 -0
  1447. package/public/provider-icons/ucloud.svg +1 -0
  1448. package/public/provider-icons/vercel.svg +1 -0
  1449. package/public/provider-icons/wenxin.svg +1 -0
  1450. package/public/provider-icons/xai.svg +1 -0
  1451. package/public/provider-icons/xiaomimimo.svg +1 -0
  1452. package/public/provider-icons/yi.svg +1 -0
  1453. package/public/provider-icons/zeroone.svg +1 -0
  1454. package/public/provider-icons/zhipu.svg +1 -0
@@ -0,0 +1,1285 @@
1
+ import { addConnection, broadcastToWorkspace } from './connection-manager.js';
2
+ import { handleTerminalEvent } from './terminal-handler.js';
3
+ import { createMessage, updateMessage, listMessages } from '../services/message.js';
4
+ import { getChannel, updateChannel } from '../services/channel.js';
5
+ import * as issueService from '../services/issue.js';
6
+ import { createIssueFunctionTools } from '../services/builtin-tools.js';
7
+ import { startScheduler } from '../agents/scheduler-agent.js';
8
+ import * as agentService from '../services/agent.js';
9
+ import * as wsService from '../services/workspace.js';
10
+ import { runPlanner } from '../agents/planner-agent.js';
11
+ import { createAgentRuntime } from '../adapters/agent-runtime.js';
12
+ import { saveToolDetails } from '../services/tool-detail.js';
13
+ import { readWorkspacePrompt } from '../services/workspace-prompt.js';
14
+ import { getThinkingRuntimeConfig } from '../services/llm-model-config.js';
15
+ const handlers = new Map();
16
+ // Track which workspaces have schedulers running
17
+ const activeSchedulers = new Set();
18
+ const activeChannelRuns = new Map();
19
+ const pendingQuestionRuns = new Map();
20
+ function ensureScheduler(workspaceId, ctx) {
21
+ if (!activeSchedulers.has(workspaceId)) {
22
+ activeSchedulers.add(workspaceId);
23
+ setTimeout(() => {
24
+ startScheduler(workspaceId, ctx);
25
+ console.log(`[ws] scheduler started for workspace ${workspaceId}`);
26
+ }, 10_000);
27
+ console.log(`[ws] scheduler scheduled for workspace ${workspaceId} in 10000ms`);
28
+ }
29
+ }
30
+ function makeContext(workspaceId) {
31
+ return {
32
+ workspaceId,
33
+ broadcast: (event, data) => broadcastToWorkspace(workspaceId, event, data),
34
+ getSession: (sessionId) => agentService.getById(workspaceId, sessionId),
35
+ updateSessionStatus: (sessionId, status, extra) => agentService.updateStatus(workspaceId, sessionId, status, extra),
36
+ };
37
+ }
38
+ function getRuntimeBaseURL(provider, apiBase) {
39
+ if (provider === 'openai-responses-to-anthropic-messages'
40
+ || provider === 'openai-chat-completions-to-anthropic-messages')
41
+ return undefined;
42
+ return apiBase;
43
+ }
44
+ export function registerHandler(event, handler) {
45
+ handlers.set(event, handler);
46
+ }
47
+ export function handleConnection(ws, workspaceId) {
48
+ addConnection(ws, workspaceId);
49
+ const ctx = makeContext(workspaceId);
50
+ ensureScheduler(workspaceId, ctx);
51
+ ws.send(JSON.stringify({
52
+ event: 'connected',
53
+ workspaceId,
54
+ timestamp: new Date().toISOString(),
55
+ data: { workspaceId },
56
+ }));
57
+ ws.on('message', (raw) => {
58
+ try {
59
+ const msg = JSON.parse(raw.toString());
60
+ const handler = handlers.get(msg.event);
61
+ if (handler) {
62
+ handler(ws, workspaceId, msg.data);
63
+ }
64
+ else {
65
+ console.warn(`[WS] unhandled event: ${msg.event}`);
66
+ }
67
+ }
68
+ catch (err) {
69
+ console.error('[WS] invalid message:', err instanceof Error ? err.message : String(err));
70
+ }
71
+ });
72
+ }
73
+ // Register terminal handlers
74
+ const terminalEvents = [
75
+ 'terminal.create',
76
+ 'terminal.input',
77
+ 'terminal.resize',
78
+ 'terminal.close',
79
+ ];
80
+ for (const evt of terminalEvents) {
81
+ registerHandler(evt, (ws, workspaceId, data) => {
82
+ handleTerminalEvent(ws, workspaceId, evt, data);
83
+ });
84
+ }
85
+ // Register channel handler
86
+ registerHandler('channel.message', (_ws, workspaceId, data) => {
87
+ const { channelId, content, type, mentions, attachments } = data;
88
+ if (!channelId || (!content && !attachments?.length))
89
+ return;
90
+ if (!getChannel(workspaceId, channelId))
91
+ return;
92
+ const message = createMessage(workspaceId, channelId, {
93
+ senderId: 'user',
94
+ content,
95
+ type: attachments?.length ? 'attachment' : type,
96
+ attachments,
97
+ });
98
+ broadcastToWorkspace(workspaceId, 'channel.message', message);
99
+ const agentIds = [...new Set([...(mentions || []), ...extractMentionIds(content)].filter(Boolean))];
100
+ for (const agentId of agentIds) {
101
+ void runMentionedAgent(workspaceId, channelId, agentId, stripHtml(content));
102
+ }
103
+ });
104
+ registerHandler('channel.stop', (_ws, workspaceId, data) => {
105
+ const { channelId } = data;
106
+ if (!channelId)
107
+ return;
108
+ stopChannelRuns(workspaceId, channelId);
109
+ });
110
+ registerHandler('channel.answer_question', (_ws, workspaceId, data) => {
111
+ const { channelId, messageId, questionId, answer } = data;
112
+ const trimmed = answer?.trim();
113
+ if (!channelId || !messageId || !questionId || !trimmed)
114
+ return;
115
+ const message = listMessages(workspaceId, channelId).find((item) => item.id === messageId);
116
+ if (!message)
117
+ return;
118
+ const updatedParts = message.parts?.map((part) => {
119
+ if (part.type !== 'ask_user_question' || part.id !== questionId)
120
+ return part;
121
+ return { ...part, status: 'answered', answer: trimmed };
122
+ });
123
+ const updated = updateMessage(workspaceId, channelId, messageId, {
124
+ status: 'streaming',
125
+ parts: updatedParts,
126
+ });
127
+ if (updated)
128
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', updated);
129
+ const key = questionRunKey(workspaceId, channelId, messageId, questionId);
130
+ const pending = pendingQuestionRuns.get(key);
131
+ pendingQuestionRuns.delete(key);
132
+ if (!pending)
133
+ return;
134
+ const seedQuestion = questionFromAnsweredPart(updatedParts, questionId);
135
+ void runMentionedAgent(workspaceId, channelId, pending.agentConfigId, [
136
+ 'The user answered your previous question.',
137
+ `Question: ${pending.question}`,
138
+ `Answer: ${trimmed}`,
139
+ 'Continue from this answer and complete the original task.',
140
+ ].join('\n'), {
141
+ messageId,
142
+ seedOutput: normalizeOutputLines([message.content]),
143
+ seedQuestions: seedQuestion ? [seedQuestion] : [],
144
+ });
145
+ });
146
+ async function runMentionedAgent(workspaceId, channelId, agentConfigId, prompt, options = {}) {
147
+ const preset = agentService.listPresets(workspaceId)?.find((agent) => agent.id === agentConfigId);
148
+ if (!preset || preset.enabled === false)
149
+ return;
150
+ const session = agentService.create(workspaceId, preset.role, preset.id);
151
+ broadcastToWorkspace(workspaceId, 'agent.started', session);
152
+ agentService.updateStatus(workspaceId, session.id, 'active');
153
+ broadcastToWorkspace(workspaceId, 'agent.status_changed', {
154
+ agentId: session.id,
155
+ from: 'idle',
156
+ to: 'active',
157
+ });
158
+ const configDir = agentService.getAgentConfigDir(workspaceId, preset);
159
+ const mcpServers = agentService.getMcpServers(preset.mcps);
160
+ const skills = agentService.getAvailableSkillNames(configDir, preset.skills);
161
+ const workspace = wsService.getById(workspaceId);
162
+ const { channel, issue } = resolveIssueChannelContext(workspaceId, channelId);
163
+ const functionTools = createIssueFunctionTools(workspaceId, channel, {
164
+ senderId: preset.id,
165
+ senderRole: preset.role,
166
+ }, preset.tools);
167
+ const startTime = Date.now();
168
+ const existingMessage = options.messageId
169
+ ? listMessages(workspaceId, channelId).find((message) => message.id === options.messageId)
170
+ : undefined;
171
+ const pending = existingMessage
172
+ ? updateMessage(workspaceId, channelId, existingMessage.id, {
173
+ status: 'streaming',
174
+ metadata: {
175
+ ...existingMessage.metadata,
176
+ agentSessionId: session.id,
177
+ runtime: preset.runtimeKind,
178
+ model: preset.modelId,
179
+ duration: 0,
180
+ },
181
+ }) ?? existingMessage
182
+ : createMessage(workspaceId, channelId, {
183
+ senderId: preset.id,
184
+ senderRole: preset.role,
185
+ content: 'Agent is processing...',
186
+ type: 'text',
187
+ status: 'streaming',
188
+ metadata: {
189
+ agentSessionId: session.id,
190
+ runtime: preset.runtimeKind,
191
+ model: preset.modelId,
192
+ duration: 0,
193
+ },
194
+ parts: [
195
+ {
196
+ id: `reasoning-${session.id}`,
197
+ type: 'reasoning',
198
+ text: 'Preparing agent runtime and loading conversation context...',
199
+ status: 'streaming',
200
+ },
201
+ ],
202
+ });
203
+ broadcastToWorkspace(workspaceId, existingMessage ? 'channel.message.updated' : 'channel.message', pending);
204
+ let activeRun;
205
+ const liveReasoning = [];
206
+ try {
207
+ const runtime = createAgentRuntime({
208
+ kind: preset.runtimeKind,
209
+ provider: preset.modelProvider,
210
+ model: preset.modelId,
211
+ apiKey: preset.apiKey,
212
+ baseURL: getRuntimeBaseURL(preset.modelProvider, preset.apiBase),
213
+ adapterBaseURL: preset.apiBase,
214
+ ...getThinkingRuntimeConfig(preset),
215
+ });
216
+ activeRun = {
217
+ agentId: session.id,
218
+ agentConfigId,
219
+ messageId: pending.id,
220
+ runtime,
221
+ };
222
+ trackChannelRun(workspaceId, channelId, activeRun);
223
+ const history = listMessages(workspaceId, channelId, { limit: 20 });
224
+ const liveOutput = [...(options.seedOutput ?? [])];
225
+ const askUserQuestions = [...(options.seedQuestions ?? [])];
226
+ const toolDetails = new Map();
227
+ const toolUseDetailIds = new Map();
228
+ let lastLiveUpdate = 0;
229
+ const broadcastLiveParts = (force = false) => {
230
+ const now = Date.now();
231
+ if (!force && now - lastLiveUpdate < 120)
232
+ return;
233
+ lastLiveUpdate = now;
234
+ const parts = buildAgentMessageParts({
235
+ sessionId: session.id,
236
+ workspaceRoot: workspace?.boundDirs?.[0],
237
+ presetName: preset.name || preset.role,
238
+ role: preset.role,
239
+ model: preset.modelId,
240
+ systemPrompt: preset.systemPrompt,
241
+ mcpServers: Object.keys(mcpServers ?? {}),
242
+ skills,
243
+ builtInTools: buildBuiltInTools(functionTools, channel, issue),
244
+ output: liveOutput,
245
+ reasoning: liveReasoning,
246
+ toolDetails,
247
+ askUserQuestions,
248
+ success: true,
249
+ });
250
+ if (parts.length === 0)
251
+ return;
252
+ const status = askUserQuestions.some((question) => !question.answer) ? 'waiting_for_user' : 'streaming';
253
+ const live = updateMessage(workspaceId, channelId, pending.id, {
254
+ content: liveOutput.join('\n') || pending.content,
255
+ status,
256
+ parts,
257
+ metadata: {
258
+ ...pending.metadata,
259
+ duration: Date.now() - startTime,
260
+ },
261
+ });
262
+ if (live)
263
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', live);
264
+ };
265
+ const result = await runtime.execute(buildAgentPrompt(workspaceId, preset.systemPrompt, prompt, history, {
266
+ mcpServers: Object.keys(mcpServers ?? {}),
267
+ skills,
268
+ boundDirs: workspace?.boundDirs,
269
+ builtInTools: buildBuiltInTools(functionTools, channel, issue),
270
+ }), agentService.resolveWorkingDir(workspaceId, preset), {
271
+ maxTurns: 100,
272
+ functionTools,
273
+ mcpServers,
274
+ skills,
275
+ configDir,
276
+ sandboxDirs: preset.sandboxDirs,
277
+ onEvent: (event) => {
278
+ if (event.type === 'reasoning') {
279
+ liveReasoning.push({ text: event.text, status: event.status });
280
+ broadcastToWorkspace(workspaceId, 'agent.output', { agentId: session.id, data: event.text });
281
+ broadcastLiveParts();
282
+ return;
283
+ }
284
+ if (event.type === 'tool_use') {
285
+ if (event.name === 'AskUserQuestion') {
286
+ const question = parseAskUserQuestion(event.id, event.input);
287
+ askUserQuestions.push(question);
288
+ pendingQuestionRuns.set(questionRunKey(workspaceId, channelId, pending.id, question.id), {
289
+ agentConfigId,
290
+ question: question.question,
291
+ });
292
+ broadcastLiveParts(true);
293
+ return;
294
+ }
295
+ // Intercept TodoWrite to persist todos to channel
296
+ if (event.name === 'TodoWrite' && event.input && typeof event.input === 'object') {
297
+ const input = event.input;
298
+ if (Array.isArray(input.todos)) {
299
+ const todos = input.todos.map((t, index) => ({
300
+ id: String(t.id ?? t.activeForm ?? t.subject ?? t.title ?? t.content ?? index),
301
+ subject: String(t.subject ?? t.title ?? t.activeForm ?? t.content ?? ''),
302
+ description: t.description || t.content ? String(t.description ?? t.content) : undefined,
303
+ status: (['pending', 'in_progress', 'completed'].includes(t.status) ? t.status : 'pending'),
304
+ activeForm: t.activeForm ? String(t.activeForm) : undefined,
305
+ }));
306
+ const updated = updateChannel(workspaceId, channelId, { todos });
307
+ if (updated)
308
+ broadcastToWorkspace(workspaceId, 'channel.updated', updated);
309
+ }
310
+ }
311
+ const detailId = buildToolDetailId(event.id, event.line);
312
+ toolUseDetailIds.set(event.id, detailId);
313
+ toolDetails.set(detailId, {
314
+ id: detailId,
315
+ workspaceId,
316
+ channelId,
317
+ messageId: pending.id,
318
+ title: summarizeToolLine(event.line, workspace?.boundDirs?.[0]).title,
319
+ raw: event.line,
320
+ input: event.input,
321
+ createdAt: new Date().toISOString(),
322
+ });
323
+ saveToolDetails(workspaceId, channelId, Array.from(toolDetails.values()));
324
+ liveOutput.push(event.line);
325
+ broadcastToWorkspace(workspaceId, 'agent.output', { agentId: session.id, data: event.line });
326
+ broadcastLiveParts();
327
+ return;
328
+ }
329
+ if (event.type === 'tool_result') {
330
+ const askedQuestion = event.toolUseId
331
+ ? askUserQuestions.find((question) => question.toolUseId === event.toolUseId)
332
+ : undefined;
333
+ if (askedQuestion)
334
+ return;
335
+ const detail = findToolDetailForResult(event.toolUseId, event.result, toolUseDetailIds, toolDetails, workspace?.boundDirs?.[0]);
336
+ if (detail && isAgentSpacesIssueTool(detail.raw || detail.title)) {
337
+ const updatedChannel = getChannel(workspaceId, channelId);
338
+ if (updatedChannel)
339
+ broadcastToWorkspace(workspaceId, 'channel.updated', updatedChannel);
340
+ const updatedIssue = updatedChannel?.issueId ? issueService.getById(workspaceId, updatedChannel.issueId) : null;
341
+ if (updatedIssue) {
342
+ broadcastToWorkspace(workspaceId, isCreateCurrentChannelIssueTool(detail.raw || detail.title) ? 'issue.created' : 'issue.updated', updatedIssue);
343
+ }
344
+ }
345
+ if (detail) {
346
+ detail.output = event.result;
347
+ detail.updatedAt = new Date().toISOString();
348
+ saveToolDetails(workspaceId, channelId, [detail]);
349
+ }
350
+ return;
351
+ }
352
+ if (event.type !== 'output')
353
+ return;
354
+ liveOutput.push(event.line);
355
+ broadcastToWorkspace(workspaceId, 'agent.output', { agentId: session.id, data: event.line });
356
+ broadcastLiveParts();
357
+ },
358
+ });
359
+ broadcastLiveParts(true);
360
+ if (activeRun.stopped)
361
+ return;
362
+ const displayOutput = mergeRuntimeOutput(liveOutput, result.output);
363
+ if (shouldWaitForUserAnswer(askUserQuestions, result.summary, result.error, displayOutput)) {
364
+ const waitingOutput = stripAskUserQuestionErrorLines(liveOutput);
365
+ const waiting = updateMessage(workspaceId, channelId, pending.id, {
366
+ content: waitingOutput.join('\n') || pending.content,
367
+ type: 'text',
368
+ status: 'waiting_for_user',
369
+ metadata: {
370
+ agentSessionId: session.id,
371
+ runtime: preset.runtimeKind,
372
+ model: preset.modelId,
373
+ summary: 'Waiting for user answer',
374
+ duration: Date.now() - startTime,
375
+ },
376
+ parts: buildAgentMessageParts({
377
+ sessionId: session.id,
378
+ workspaceRoot: workspace?.boundDirs?.[0],
379
+ presetName: preset.name || preset.role,
380
+ role: preset.role,
381
+ model: preset.modelId,
382
+ systemPrompt: preset.systemPrompt,
383
+ mcpServers: Object.keys(mcpServers ?? {}),
384
+ skills,
385
+ output: waitingOutput,
386
+ reasoning: liveReasoning,
387
+ toolDetails,
388
+ askUserQuestions,
389
+ success: true,
390
+ }),
391
+ });
392
+ if (waiting)
393
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', waiting);
394
+ agentService.updateStatus(workspaceId, session.id, 'blocked');
395
+ broadcastToWorkspace(workspaceId, 'agent.status_changed', {
396
+ agentId: session.id,
397
+ from: 'active',
398
+ to: 'blocked',
399
+ });
400
+ return;
401
+ }
402
+ if (liveOutput.length === 0) {
403
+ for (const line of result.output) {
404
+ broadcastToWorkspace(workspaceId, 'agent.output', { agentId: session.id, data: line });
405
+ }
406
+ }
407
+ agentService.complete(workspaceId, session.id, result.success ? undefined : result.error, {
408
+ runtime: preset.runtimeKind,
409
+ model: preset.modelId,
410
+ summary: result.summary,
411
+ output: displayOutput,
412
+ durationMs: Date.now() - startTime,
413
+ usage: result.usage,
414
+ costUsd: result.costUsd,
415
+ });
416
+ broadcastToWorkspace(workspaceId, 'agent.completed', {
417
+ agentId: session.id,
418
+ result: {
419
+ success: result.success,
420
+ summary: result.summary,
421
+ artifacts: result.artifacts,
422
+ error: result.error,
423
+ },
424
+ error: result.error,
425
+ });
426
+ const reply = updateMessage(workspaceId, channelId, pending.id, {
427
+ content: result.success ? displayOutput.join('\n') : result.error || displayOutput.join('\n'),
428
+ type: 'text',
429
+ status: result.success ? 'completed' : 'error',
430
+ metadata: {
431
+ agentSessionId: session.id,
432
+ runtime: preset.runtimeKind,
433
+ model: preset.modelId,
434
+ summary: result.summary,
435
+ duration: Date.now() - startTime,
436
+ },
437
+ parts: buildAgentMessageParts({
438
+ sessionId: session.id,
439
+ workspaceRoot: workspace?.boundDirs?.[0],
440
+ presetName: preset.name || preset.role,
441
+ role: preset.role,
442
+ model: preset.modelId,
443
+ usage: result.usage,
444
+ systemPrompt: preset.systemPrompt,
445
+ mcpServers: Object.keys(mcpServers ?? {}),
446
+ skills,
447
+ builtInTools: buildBuiltInTools(functionTools, channel, issue),
448
+ output: displayOutput,
449
+ reasoning: liveReasoning,
450
+ toolDetails,
451
+ askUserQuestions,
452
+ success: result.success,
453
+ error: result.error,
454
+ }),
455
+ });
456
+ if (reply)
457
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', reply);
458
+ }
459
+ catch (err) {
460
+ if (activeRun?.stopped)
461
+ return;
462
+ const error = err instanceof Error ? err.message : String(err);
463
+ agentService.complete(workspaceId, session.id, error, {
464
+ runtime: preset.runtimeKind,
465
+ model: preset.modelId,
466
+ summary: error,
467
+ output: [error],
468
+ durationMs: Date.now() - startTime,
469
+ });
470
+ broadcastToWorkspace(workspaceId, 'agent.error', { agentId: session.id, error });
471
+ const reply = updateMessage(workspaceId, channelId, pending.id, {
472
+ content: error,
473
+ type: 'text',
474
+ status: 'error',
475
+ metadata: {
476
+ agentSessionId: session.id,
477
+ runtime: preset.runtimeKind,
478
+ model: preset.modelId,
479
+ duration: Date.now() - startTime,
480
+ },
481
+ parts: buildAgentMessageParts({
482
+ sessionId: session.id,
483
+ workspaceRoot: workspace?.boundDirs?.[0],
484
+ presetName: preset.name || preset.role,
485
+ role: preset.role,
486
+ model: preset.modelId,
487
+ systemPrompt: preset.systemPrompt,
488
+ mcpServers: Object.keys(mcpServers ?? {}),
489
+ skills,
490
+ builtInTools: buildBuiltInTools(functionTools, channel, issue),
491
+ output: [error],
492
+ reasoning: liveReasoning,
493
+ toolDetails: new Map(),
494
+ askUserQuestions: [],
495
+ success: false,
496
+ error,
497
+ }),
498
+ });
499
+ if (reply)
500
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', reply);
501
+ }
502
+ finally {
503
+ untrackChannelRun(workspaceId, channelId, session.id);
504
+ }
505
+ }
506
+ function resolveIssueChannelContext(workspaceId, channelId) {
507
+ let channel = getChannel(workspaceId, channelId);
508
+ let issue = channel?.issueId ? issueService.getById(workspaceId, channel.issueId) : null;
509
+ if (issue || channel?.type !== 'issue')
510
+ return { channel, issue };
511
+ issue = issueService.list(workspaceId).find((item) => item.channelId === channelId) ?? null;
512
+ channel = getChannel(workspaceId, channelId);
513
+ return { channel, issue };
514
+ }
515
+ function isAgentSpacesIssueTool(name) {
516
+ return Boolean(name && /(?:agent-spaces\.)?(?:CreateCurrentChannelIssue|ViewCurrentChannelIssue|AddCurrentChannelComment)/.test(name));
517
+ }
518
+ function isCreateCurrentChannelIssueTool(name) {
519
+ return Boolean(name && /(?:agent-spaces\.)?CreateCurrentChannelIssue/.test(name));
520
+ }
521
+ function channelRunKey(workspaceId, channelId) {
522
+ return `${workspaceId}:${channelId}`;
523
+ }
524
+ function trackChannelRun(workspaceId, channelId, run) {
525
+ const key = channelRunKey(workspaceId, channelId);
526
+ const runs = activeChannelRuns.get(key) ?? new Map();
527
+ runs.set(run.agentId, run);
528
+ activeChannelRuns.set(key, runs);
529
+ }
530
+ function untrackChannelRun(workspaceId, channelId, agentId) {
531
+ const key = channelRunKey(workspaceId, channelId);
532
+ const runs = activeChannelRuns.get(key);
533
+ if (!runs)
534
+ return;
535
+ runs.delete(agentId);
536
+ if (runs.size === 0)
537
+ activeChannelRuns.delete(key);
538
+ }
539
+ function stopChannelRuns(workspaceId, channelId) {
540
+ const runs = activeChannelRuns.get(channelRunKey(workspaceId, channelId));
541
+ if (!runs || runs.size === 0) {
542
+ markInactiveChannelRunsStopped(workspaceId, channelId);
543
+ return;
544
+ }
545
+ for (const run of runs.values()) {
546
+ run.stopped = true;
547
+ run.runtime.stop();
548
+ agentService.complete(workspaceId, run.agentId, 'Stopped by user');
549
+ broadcastToWorkspace(workspaceId, 'agent.status_changed', {
550
+ agentId: run.agentId,
551
+ from: 'active',
552
+ to: 'crashed',
553
+ });
554
+ broadcastToWorkspace(workspaceId, 'agent.error', {
555
+ agentId: run.agentId,
556
+ error: 'Stopped by user',
557
+ });
558
+ const message = updateMessage(workspaceId, channelId, run.messageId, {
559
+ content: 'Stopped by user',
560
+ status: 'error',
561
+ parts: [
562
+ {
563
+ id: `terminal-stopped-${run.agentId}`,
564
+ type: 'terminal',
565
+ output: 'Stopped by user',
566
+ status: 'error',
567
+ },
568
+ ],
569
+ });
570
+ if (message)
571
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', message);
572
+ }
573
+ }
574
+ export function hasActiveChannelRuns(workspaceId, channelId) {
575
+ return Boolean(activeChannelRuns.get(channelRunKey(workspaceId, channelId))?.size);
576
+ }
577
+ export function markInactiveChannelRunsStopped(workspaceId, channelId) {
578
+ if (hasActiveChannelRuns(workspaceId, channelId))
579
+ return [];
580
+ const stopped = [];
581
+ for (const message of listMessages(workspaceId, channelId)) {
582
+ if (message.status !== 'pending' && message.status !== 'streaming')
583
+ continue;
584
+ const updated = updateMessage(workspaceId, channelId, message.id, {
585
+ content: message.content || 'Stopped by user',
586
+ status: 'error',
587
+ parts: message.parts?.map((part) => {
588
+ if ('status' in part && part.status === 'streaming') {
589
+ return { ...part, status: 'completed' };
590
+ }
591
+ return part;
592
+ }),
593
+ });
594
+ if (updated) {
595
+ stopped.push(updated);
596
+ broadcastToWorkspace(workspaceId, 'channel.message.updated', updated);
597
+ }
598
+ }
599
+ return stopped;
600
+ }
601
+ function buildAgentMessageParts(input) {
602
+ const lines = normalizeOutputLines(input.output);
603
+ const finalTextRange = findFinalTextRange(lines);
604
+ const finalText = finalTextRange
605
+ ? collapseRepeatedTextBlock(lines.slice(finalTextRange.start, finalTextRange.end + 1)).join('\n').trim()
606
+ : '';
607
+ const usage = input.usage ?? extractUsage(lines);
608
+ const parts = [];
609
+ const chainItems = buildChainItems(lines, finalTextRange, finalText, input.workspaceRoot, input.toolDetails);
610
+ const reasoningText = normalizeReasoningText(input.reasoning);
611
+ if (reasoningText) {
612
+ parts.push({
613
+ id: `reasoning-${input.sessionId}`,
614
+ type: 'reasoning',
615
+ text: reasoningText,
616
+ status: input.success ? 'completed' : 'streaming',
617
+ });
618
+ }
619
+ if (chainItems.length > 0) {
620
+ parts.push({
621
+ id: `chain-${input.sessionId}`,
622
+ type: 'chain',
623
+ chains: chainItems,
624
+ });
625
+ }
626
+ for (const subagent of extractSubagentBlocks(lines, input.sessionId, input.toolDetails)) {
627
+ parts.push(subagent);
628
+ }
629
+ for (const question of input.askUserQuestions ?? []) {
630
+ parts.push({
631
+ id: question.id,
632
+ type: 'ask_user_question',
633
+ question: question.question,
634
+ choices: question.choices,
635
+ status: question.answer ? 'answered' : 'requested',
636
+ answer: question.answer,
637
+ toolUseId: question.toolUseId,
638
+ });
639
+ }
640
+ if (hasTokenUsage(usage)) {
641
+ parts.push({
642
+ id: `context-${input.sessionId}`,
643
+ type: 'context',
644
+ usedTokens: getTotalTokens(usage),
645
+ maxTokens: 128_000,
646
+ modelId: input.model,
647
+ usage,
648
+ });
649
+ }
650
+ if (input.error) {
651
+ parts.push({
652
+ id: `terminal-error-${input.sessionId}`,
653
+ type: 'terminal',
654
+ output: input.error,
655
+ status: 'error',
656
+ });
657
+ }
658
+ if (finalText && finalText !== input.error) {
659
+ parts.push({
660
+ id: `text-${input.sessionId}`,
661
+ type: 'text',
662
+ text: finalText,
663
+ });
664
+ }
665
+ return parts;
666
+ }
667
+ function normalizeReasoningText(reasoning) {
668
+ if (!reasoning?.length)
669
+ return '';
670
+ return collapseRepeatedTextBlock(reasoning
671
+ .map((item) => item.text.trim())
672
+ .filter(Boolean)).join('\n\n').trim();
673
+ }
674
+ function hasTokenUsage(usage) {
675
+ return Boolean(usage.totalTokens || usage.inputTokens || usage.outputTokens || usage.cachedInputTokens || usage.reasoningTokens);
676
+ }
677
+ function getTotalTokens(usage) {
678
+ return usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0) + (usage.cachedInputTokens ?? 0) + (usage.reasoningTokens ?? 0);
679
+ }
680
+ function normalizeOutputLines(output) {
681
+ const lines = output
682
+ .flatMap((line) => line.split(/\r?\n/))
683
+ .map((line) => line.trimEnd())
684
+ .filter((line) => line.trim());
685
+ const seenInitLines = new Set();
686
+ return lines.filter((line) => {
687
+ if (!/^Claude Code initialized\b/i.test(line))
688
+ return true;
689
+ if (seenInitLines.has(line))
690
+ return false;
691
+ seenInitLines.add(line);
692
+ return true;
693
+ });
694
+ }
695
+ function mergeRuntimeOutput(liveOutput, resultOutput) {
696
+ if (liveOutput.length === 0)
697
+ return resultOutput;
698
+ const finalResult = resultOutput.at(-1)?.trim();
699
+ if (!finalResult)
700
+ return liveOutput;
701
+ if (liveOutput.some((line) => normalizeMessageText(line) === normalizeMessageText(finalResult))) {
702
+ return liveOutput;
703
+ }
704
+ return [...liveOutput, finalResult];
705
+ }
706
+ function collapseRepeatedTextBlock(lines) {
707
+ let next = [...lines];
708
+ while (next.length > 1 && next.length % 2 === 0) {
709
+ const middle = next.length / 2;
710
+ const first = next.slice(0, middle);
711
+ const second = next.slice(middle);
712
+ if (!sameTextBlock(first, second))
713
+ break;
714
+ next = first;
715
+ }
716
+ return next;
717
+ }
718
+ function sameTextBlock(left, right) {
719
+ if (left.length !== right.length)
720
+ return false;
721
+ return normalizeMessageText(left.join('\n')) === normalizeMessageText(right.join('\n'));
722
+ }
723
+ function findFinalTextRange(lines) {
724
+ let end = -1;
725
+ for (let index = lines.length - 1; index >= 0; index -= 1) {
726
+ if (isFinalAnswerLine(lines[index])) {
727
+ end = index;
728
+ break;
729
+ }
730
+ }
731
+ if (end < 0)
732
+ return null;
733
+ let start = end;
734
+ for (let index = end - 1; index >= 0; index -= 1) {
735
+ if (!isFinalAnswerLine(lines[index]))
736
+ break;
737
+ start = index;
738
+ }
739
+ return { start, end };
740
+ }
741
+ function buildChainItems(lines, finalTextRange, finalText, workspaceRoot, toolDetails) {
742
+ let toolIndex = 0;
743
+ let messageIndex = 0;
744
+ const items = [];
745
+ const toolDetailMatchCounts = new Map();
746
+ let messageBuffer = [];
747
+ const flushMessageBuffer = () => {
748
+ if (messageBuffer.length === 0)
749
+ return;
750
+ const text = messageBuffer.join('\n').trim();
751
+ if (text) {
752
+ items.push({
753
+ id: `message-${messageIndex}`,
754
+ title: summarizeMessageTitle(text),
755
+ text,
756
+ kind: 'message',
757
+ status: 'completed',
758
+ });
759
+ messageIndex += 1;
760
+ }
761
+ messageBuffer = [];
762
+ };
763
+ for (let index = 0; index < lines.length; index += 1) {
764
+ if (finalTextRange && index >= finalTextRange.start && index <= finalTextRange.end)
765
+ continue;
766
+ const line = lines[index];
767
+ if (finalText && isSameMessageText(line, finalText))
768
+ continue;
769
+ if (isSubagentToolLine(line))
770
+ continue;
771
+ if (isToolLikeLine(line)) {
772
+ flushMessageBuffer();
773
+ items.push(buildToolTodo(line, toolIndex, workspaceRoot, toolDetails, toolDetailMatchCounts));
774
+ toolIndex += 1;
775
+ continue;
776
+ }
777
+ if (isFinalAnswerLine(line)) {
778
+ messageBuffer.push(line);
779
+ }
780
+ }
781
+ flushMessageBuffer();
782
+ return items.slice(0, 40);
783
+ }
784
+ function isSameMessageText(left, right) {
785
+ return normalizeMessageText(left) === normalizeMessageText(right);
786
+ }
787
+ function normalizeMessageText(text) {
788
+ return text.trim().replace(/\s+/g, ' ');
789
+ }
790
+ function summarizeMessageTitle(text) {
791
+ const normalized = text.trim().replace(/\s+/g, ' ');
792
+ if (!normalized)
793
+ return 'AI message';
794
+ return normalized.length > 80 ? `${normalized.slice(0, 77)}...` : normalized;
795
+ }
796
+ function isToolLikeLine(line) {
797
+ return /^(Using|Tool:|Read|Write|Edit|MultiEdit|Bash|Search|Grep|Glob|Todo|Task|Web|Fetch|Claude Code initialized|Codex initialized|.+ running \(\d+s\))/i.test(line.trim());
798
+ }
799
+ function isFinalAnswerLine(line) {
800
+ return !isToolLikeLine(line) && !/^(\[.*\]|Agent runtime configuration:|Conversation history:)/.test(line.trim());
801
+ }
802
+ function isSubagentToolLine(line) {
803
+ return /^Tool:\s*Task\b/i.test(line.trim());
804
+ }
805
+ function buildToolTodo(line, index, workspaceRoot, toolDetails, toolDetailMatchCounts) {
806
+ const summary = summarizeToolLine(line, workspaceRoot);
807
+ const detailId = findToolDetailId(line, toolDetails, toolDetailMatchCounts);
808
+ return {
809
+ id: `tool-${index}`,
810
+ title: summary.title,
811
+ description: summary.description,
812
+ status: 'completed',
813
+ toolName: summary.toolName,
814
+ filePath: summary.filePath,
815
+ command: summary.command,
816
+ detailId,
817
+ };
818
+ }
819
+ function summarizeToolLine(line, workspaceRoot) {
820
+ const trimmed = line.trim();
821
+ const toolName = extractToolName(trimmed);
822
+ const inputDescription = extractQuotedField(trimmed, 'description');
823
+ const filePath = toWorkspaceRelativePath(extractQuotedField(trimmed, 'file_path') ?? extractQuotedField(trimmed, 'path'), workspaceRoot);
824
+ const command = extractQuotedField(trimmed, 'command') ?? extractCommand(trimmed, toolName);
825
+ const baseName = filePath?.split(/[\\/]/).filter(Boolean).at(-1);
826
+ if (toolName) {
827
+ if (filePath) {
828
+ return {
829
+ title: `${humanizeToolName(toolName)} ${baseName ?? filePath}`,
830
+ description: inputDescription ?? filePath,
831
+ toolName,
832
+ filePath,
833
+ };
834
+ }
835
+ if (command) {
836
+ return {
837
+ title: `${humanizeToolName(toolName)} command`,
838
+ description: inputDescription,
839
+ toolName,
840
+ command,
841
+ };
842
+ }
843
+ // Glob/Grep/Search: extract path + pattern + glob for header
844
+ const searchSummary = extractSearchParams(trimmed, toolName, workspaceRoot);
845
+ if (searchSummary) {
846
+ return { ...searchSummary, toolName };
847
+ }
848
+ const todoCount = extractTodoCount(trimmed);
849
+ if (todoCount !== undefined) {
850
+ return {
851
+ title: `Update ${todoCount} ${todoCount === 1 ? 'todo' : 'todos'}`,
852
+ toolName,
853
+ };
854
+ }
855
+ return {
856
+ title: humanizeToolName(toolName),
857
+ toolName,
858
+ };
859
+ }
860
+ return { title: trimmed };
861
+ }
862
+ function extractSearchParams(line, toolName, workspaceRoot) {
863
+ if (!/^(Glob|Grep|Search|SemanticSearch|WebSearch|WebFetch|Fetch)$/i.test(toolName))
864
+ return null;
865
+ const pattern = extractQuotedField(line, 'pattern') ?? extractQuotedField(line, 'query');
866
+ const glob = extractQuotedField(line, 'glob');
867
+ const searchPath = toWorkspaceRelativePath(extractQuotedField(line, 'path'), workspaceRoot);
868
+ const url = extractQuotedField(line, 'url');
869
+ const label = humanizeToolName(toolName);
870
+ // WebSearch/WebFetch/Fetch: show url or query
871
+ if (/^(WebSearch|WebFetch|Fetch)$/i.test(toolName)) {
872
+ if (url)
873
+ return { title: `${label} ${truncate(url, 60)}` };
874
+ if (pattern)
875
+ return { title: `${label} ${truncate(pattern, 60)}` };
876
+ return { title: label };
877
+ }
878
+ // Glob: "Find files **/*.ts in src/components"
879
+ if (/^Glob$/i.test(toolName)) {
880
+ const parts = [];
881
+ if (pattern)
882
+ parts.push(truncate(pattern, 50));
883
+ else if (glob)
884
+ parts.push(truncate(glob, 50));
885
+ const title = parts.length ? `${label} ${parts.join(' ')}` : label;
886
+ const descParts = [];
887
+ if (pattern && glob)
888
+ descParts.push(`glob: ${glob}`);
889
+ if (searchPath)
890
+ descParts.push(`in ${searchPath}`);
891
+ return { title, description: descParts.length ? descParts.join(', ') : undefined };
892
+ }
893
+ // Grep/Search/SemanticSearch: "Search pomodoro|timer in src/"
894
+ const parts = [];
895
+ if (pattern)
896
+ parts.push(truncate(pattern, 40));
897
+ const title = parts.length ? `${label} ${parts.join(' ')}` : label;
898
+ const descParts = [];
899
+ if (glob)
900
+ descParts.push(`glob: ${glob}`);
901
+ if (searchPath)
902
+ descParts.push(`in ${searchPath}`);
903
+ return { title, description: descParts.length ? descParts.join(', ') : undefined };
904
+ }
905
+ function truncate(str, max) {
906
+ return str.length > max ? `${str.slice(0, max - 3)}...` : str;
907
+ }
908
+ function extractToolName(line) {
909
+ return line.match(/^Tool:\s*([A-Za-z][\w-]*)\b/)?.[1]
910
+ ?? line.match(/^([A-Za-z][\w-]*)\s+running\s+\(\d+s\)/)?.[1]
911
+ ?? line.match(/^([A-Za-z][\w-]*):?\s+/)?.[1];
912
+ }
913
+ function humanizeToolName(toolName) {
914
+ const labels = {
915
+ Read: 'Read',
916
+ Write: 'Write',
917
+ Edit: 'Edit',
918
+ MultiEdit: 'Edit',
919
+ Bash: 'Run',
920
+ TodoWrite: 'Update todos',
921
+ Grep: 'Search',
922
+ Glob: 'Find files',
923
+ Search: 'Search',
924
+ SemanticSearch: 'Semantic search',
925
+ WebSearch: 'Web search',
926
+ WebFetch: 'Fetch',
927
+ Fetch: 'Fetch',
928
+ Task: 'Run subagent',
929
+ };
930
+ return labels[toolName] ?? toolName.replace(/([a-z])([A-Z])/g, '$1 $2');
931
+ }
932
+ function extractQuotedField(line, key) {
933
+ const quoted = line.match(new RegExp(`\\b${key}=([\"'])(.*?)\\1`))?.[2];
934
+ if (quoted)
935
+ return quoted;
936
+ const json = line.match(new RegExp(`"${key}"\\s*:\\s*"([^"]+)"`))?.[1];
937
+ return json;
938
+ }
939
+ function extractCommand(line, toolName) {
940
+ if (!toolName || !/^(Bash|Shell|Command)$/i.test(toolName))
941
+ return undefined;
942
+ const command = line.replace(/^Tool:\s*/i, '').replace(new RegExp(`^${toolName}:?\\s*`, 'i'), '').trim();
943
+ return command || undefined;
944
+ }
945
+ function extractTodoCount(line) {
946
+ const matches = line.match(/"content"\s*:/g);
947
+ return matches?.length;
948
+ }
949
+ function toWorkspaceRelativePath(path, workspaceRoot) {
950
+ if (!path)
951
+ return undefined;
952
+ if (!workspaceRoot || !path.startsWith(workspaceRoot))
953
+ return path;
954
+ return path.slice(workspaceRoot.length).replace(/^[/\\]/, '');
955
+ }
956
+ function findToolDetailId(line, toolDetails, matchCounts) {
957
+ if (!toolDetails)
958
+ return undefined;
959
+ const targetMatchIndex = matchCounts?.get(line) ?? 0;
960
+ let matchIndex = 0;
961
+ for (const [id, detail] of toolDetails) {
962
+ if (detail.raw !== line)
963
+ continue;
964
+ if (matchIndex === targetMatchIndex) {
965
+ matchCounts?.set(line, targetMatchIndex + 1);
966
+ return id;
967
+ }
968
+ matchIndex += 1;
969
+ }
970
+ return undefined;
971
+ }
972
+ function findToolDetailForResult(toolUseId, result, toolUseDetailIds, toolDetails, workspaceRoot) {
973
+ const detailId = toolUseId ? toolUseDetailIds.get(toolUseId) : undefined;
974
+ const byId = detailId ? toolDetails.get(detailId) : undefined;
975
+ if (byId)
976
+ return byId;
977
+ const resultFilePath = extractResultFilePath(result, workspaceRoot);
978
+ if (resultFilePath) {
979
+ const details = Array.from(toolDetails.values()).reverse();
980
+ for (const detail of details) {
981
+ if (detail.output !== undefined)
982
+ continue;
983
+ const inputFilePath = extractInputFilePath(detail.input, workspaceRoot);
984
+ if (inputFilePath === resultFilePath)
985
+ return detail;
986
+ }
987
+ }
988
+ if (isSubagentToolResult(result)) {
989
+ const detail = Array.from(toolDetails.values()).reverse().find((candidate) => {
990
+ return candidate.output === undefined && /^Tool:\s*Task\b/i.test(candidate.raw);
991
+ });
992
+ if (detail)
993
+ return detail;
994
+ }
995
+ return Array.from(toolDetails.values()).reverse().find((detail) => detail.output === undefined);
996
+ }
997
+ function isSubagentToolResult(result) {
998
+ if (!result || typeof result !== 'object' || Array.isArray(result))
999
+ return false;
1000
+ const record = result;
1001
+ return (typeof record.agentId === 'string'
1002
+ || typeof record.agentType === 'string'
1003
+ || (record.status === 'completed' && Array.isArray(record.content)));
1004
+ }
1005
+ function extractResultFilePath(result, workspaceRoot) {
1006
+ if (!result || typeof result !== 'object')
1007
+ return undefined;
1008
+ const record = result;
1009
+ const file = record.file;
1010
+ if (file && typeof file === 'object') {
1011
+ const filePath = file.filePath;
1012
+ if (typeof filePath === 'string')
1013
+ return toWorkspaceRelativePath(filePath, workspaceRoot);
1014
+ }
1015
+ const filePath = record.filePath;
1016
+ if (typeof filePath === 'string')
1017
+ return toWorkspaceRelativePath(filePath, workspaceRoot);
1018
+ return undefined;
1019
+ }
1020
+ function extractInputFilePath(input, workspaceRoot) {
1021
+ if (!input || typeof input !== 'object')
1022
+ return undefined;
1023
+ const record = input;
1024
+ const filePath = record.file_path ?? record.path;
1025
+ return typeof filePath === 'string' ? toWorkspaceRelativePath(filePath, workspaceRoot) : undefined;
1026
+ }
1027
+ function buildToolDetailId(id, line) {
1028
+ const key = `${id}:${line}`;
1029
+ let hash = 0;
1030
+ for (let index = 0; index < key.length; index += 1) {
1031
+ hash = ((hash << 5) - hash + key.charCodeAt(index)) | 0;
1032
+ }
1033
+ return `tool-${Math.abs(hash).toString(36)}`;
1034
+ }
1035
+ function questionRunKey(workspaceId, channelId, messageId, questionId) {
1036
+ return `${workspaceId}:${channelId}:${messageId}:${questionId}`;
1037
+ }
1038
+ function parseAskUserQuestion(toolUseId, input) {
1039
+ const record = input && typeof input === 'object' ? input : {};
1040
+ const rawQuestions = Array.isArray(record.questions) ? record.questions : [];
1041
+ const first = rawQuestions.find((item) => item && typeof item === 'object');
1042
+ const question = typeof first?.question === 'string' && first.question.trim()
1043
+ ? first.question.trim()
1044
+ : '请选择一个选项:';
1045
+ const options = Array.isArray(first?.options) ? first.options : [];
1046
+ const choices = options
1047
+ .map((option) => {
1048
+ if (typeof option === 'string')
1049
+ return option;
1050
+ if (!option || typeof option !== 'object')
1051
+ return '';
1052
+ const value = option;
1053
+ return typeof value.label === 'string' ? value.label : '';
1054
+ })
1055
+ .filter(Boolean);
1056
+ return {
1057
+ id: `ask-user-${toolUseId}`,
1058
+ toolUseId,
1059
+ question,
1060
+ choices,
1061
+ };
1062
+ }
1063
+ function questionFromAnsweredPart(parts, questionId) {
1064
+ const part = parts?.find((item) => item.type === 'ask_user_question' && item.id === questionId);
1065
+ if (!part || part.type !== 'ask_user_question')
1066
+ return undefined;
1067
+ return {
1068
+ id: part.id,
1069
+ toolUseId: part.toolUseId,
1070
+ question: part.question,
1071
+ choices: part.choices ?? [],
1072
+ answer: part.answer,
1073
+ };
1074
+ }
1075
+ function shouldWaitForUserAnswer(questions, summary, error, output) {
1076
+ if (!questions.some((question) => !question.answer))
1077
+ return false;
1078
+ if (summary === 'Waiting for user answer')
1079
+ return true;
1080
+ const text = [error ?? '', ...output].join('\n');
1081
+ return !text.trim() || isAskUserQuestionError(text);
1082
+ }
1083
+ function stripAskUserQuestionErrorLines(output) {
1084
+ return output.filter((line) => !isAskUserQuestionError(line));
1085
+ }
1086
+ function isAskUserQuestionError(error) {
1087
+ return /Answer questions\?/i.test(error);
1088
+ }
1089
+ function extractUsage(lines) {
1090
+ const usage = {};
1091
+ for (const line of lines) {
1092
+ const lower = line.toLowerCase();
1093
+ if (!lower.includes('token'))
1094
+ continue;
1095
+ const input = line.match(/\bin(?:put)?[=:\s]+([\d,]+)/i)?.[1];
1096
+ const output = line.match(/\bout(?:put)?[=:\s]+([\d,]+)/i)?.[1];
1097
+ const total = line.match(/\btokens?[=:\s]+([\d,]+)/i)?.[1];
1098
+ if (input)
1099
+ usage.inputTokens = Number(input.replace(/,/g, ''));
1100
+ if (output)
1101
+ usage.outputTokens = Number(output.replace(/,/g, ''));
1102
+ if (total)
1103
+ usage.totalTokens = Number(total.replace(/,/g, ''));
1104
+ }
1105
+ return usage;
1106
+ }
1107
+ function extractSubagentBlocks(lines, sessionId, toolDetails) {
1108
+ const matchCounts = new Map();
1109
+ return lines
1110
+ .map((line, index) => {
1111
+ const match = line.match(/^Tool:\s*Task\b\s*(.*)$/i);
1112
+ if (!match)
1113
+ return null;
1114
+ const name = line.match(/\bdescription=(["'])(.*?)\1/i)?.[2] || `Subagent ${index + 1}`;
1115
+ const prompt = line.match(/\bprompt=(["'])(.*?)\1/i)?.[2];
1116
+ const detailId = findToolDetailId(line, toolDetails, matchCounts);
1117
+ const detail = detailId ? toolDetails?.get(detailId) : undefined;
1118
+ const output = stringifySubagentOutput(detail?.output);
1119
+ return {
1120
+ id: `subagent-${sessionId}-${index}`,
1121
+ type: 'subagent',
1122
+ name,
1123
+ instructions: prompt,
1124
+ output,
1125
+ };
1126
+ })
1127
+ .filter((part) => Boolean(part));
1128
+ }
1129
+ function stringifySubagentOutput(output) {
1130
+ if (output === undefined || output === null)
1131
+ return undefined;
1132
+ if (typeof output === 'string')
1133
+ return output.trim() || undefined;
1134
+ if (Array.isArray(output)) {
1135
+ const text = output.flatMap((item) => {
1136
+ if (typeof item === 'string')
1137
+ return [item];
1138
+ if (!item || typeof item !== 'object')
1139
+ return [];
1140
+ const record = item;
1141
+ return typeof record.text === 'string' ? [record.text] : [];
1142
+ }).join('\n').trim();
1143
+ return text || undefined;
1144
+ }
1145
+ if (typeof output === 'object') {
1146
+ const record = output;
1147
+ if (typeof record.result === 'string' && record.result.trim())
1148
+ return record.result.trim();
1149
+ if (typeof record.summary === 'string' && record.summary.trim())
1150
+ return record.summary.trim();
1151
+ if (Array.isArray(record.content))
1152
+ return stringifySubagentOutput(record.content);
1153
+ }
1154
+ return undefined;
1155
+ }
1156
+ function buildAgentPrompt(workspaceId, systemPrompt, userPrompt, history = [], runtimeConfig) {
1157
+ const parts = [];
1158
+ const trimmedSystemPrompt = systemPrompt?.trim();
1159
+ if (trimmedSystemPrompt)
1160
+ parts.push(trimmedSystemPrompt);
1161
+ if (runtimeConfig) {
1162
+ const configLines = [
1163
+ 'Agent runtime configuration:',
1164
+ `- MCP servers configured for this agent: ${runtimeConfig.mcpServers.length ? runtimeConfig.mcpServers.join(', ') : 'none'}`,
1165
+ `- Skills configured for this agent: ${runtimeConfig.skills.length ? runtimeConfig.skills.join(', ') : 'none'}`,
1166
+ '- Runtime tools available through Claude Code: Read, Write, Edit, MultiEdit, Bash, Grep, Glob, Task, TodoWrite, WebFetch, WebSearch',
1167
+ `- Agent Spaces channel tools configured for this channel: ${runtimeConfig.builtInTools?.length ? runtimeConfig.builtInTools.map((tool) => tool.name).join(', ') : 'none'}`,
1168
+ ];
1169
+ if (runtimeConfig.boundDirs?.length) {
1170
+ configLines.push(`- Code directories (boundDirs): ${runtimeConfig.boundDirs.join(', ')}`);
1171
+ }
1172
+ configLines.push('- For Bash commands that create or modify files under the current working directory, use relative paths such as `mkdir -p css js` instead of absolute paths.');
1173
+ if (runtimeConfig.builtInTools?.length) {
1174
+ configLines.push(...formatBuiltInToolContext(runtimeConfig.builtInTools));
1175
+ }
1176
+ if (isIssueContextLookup(userPrompt)) {
1177
+ configLines.push('Current issue lookup rule:', '- The user is asking for the current channel issue.', '- If Agent Spaces channel tools include ViewCurrentChannelIssue, call that function tool first and answer from the tool result.', '- Do not use Bash, Glob, Grep, or project files to infer the current channel issue.', '- If ViewCurrentChannelIssue is not configured but CreateCurrentChannelIssue is configured, say this channel is not bound to an issue yet.', '- If no Agent Spaces channel issue tool is configured, say the issue tool is unavailable.');
1178
+ }
1179
+ configLines.push('When asked what MCP servers, skills, runtime tools, or Agent Spaces channel tools you have, answer from this configuration only. Do not infer availability from provider-side function names or hidden runtime internals.');
1180
+ parts.push(configLines.join('\n'));
1181
+ }
1182
+ if (history.length > 0) {
1183
+ parts.push('Conversation history:');
1184
+ for (const msg of history) {
1185
+ const role = msg.senderId === 'user' ? 'User' : (msg.senderRole || 'Agent');
1186
+ parts.push(`[${role}]: ${stripHtml(msg.content)}`);
1187
+ }
1188
+ }
1189
+ parts.push(`User message:\n${userPrompt}`);
1190
+ return prependWorkspacePrompt(workspaceId, parts.join('\n\n'));
1191
+ }
1192
+ function prependWorkspacePrompt(workspaceId, prompt) {
1193
+ const workspacePrompt = readWorkspacePrompt(workspaceId).trim();
1194
+ if (!workspacePrompt)
1195
+ return prompt;
1196
+ return `${workspacePrompt}\n\n${prompt}`;
1197
+ }
1198
+ function isIssueContextLookup(userPrompt) {
1199
+ const text = stripHtml(userPrompt).toLowerCase();
1200
+ return /当前频道.*议题|议题内容|current channel.*issue|issue.*current channel/.test(text);
1201
+ }
1202
+ function buildBuiltInTools(functionTools, channel, issue) {
1203
+ if (!functionTools.length || !channel)
1204
+ return [];
1205
+ const issueTitle = issue?.title ?? channel.name;
1206
+ return functionTools.map((functionTool) => ({
1207
+ name: functionTool.name,
1208
+ description: functionTool.description,
1209
+ channelId: channel.id,
1210
+ issueId: channel.issueId,
1211
+ issueTitle,
1212
+ }));
1213
+ }
1214
+ function formatBuiltInToolContext(tools) {
1215
+ const firstTool = tools[0];
1216
+ const firstIssueTool = tools.find((tool) => tool.issueId);
1217
+ const lines = [
1218
+ 'Built-in issue tool rules:',
1219
+ '- These are real function-call tools exposed through the agent-spaces MCP server.',
1220
+ '- Tool calls must use the current channel id.',
1221
+ ];
1222
+ if (firstTool?.channelId)
1223
+ lines.push(`- Current channel id: ${firstTool.channelId}`);
1224
+ if (firstIssueTool?.issueId) {
1225
+ lines.push(`- Current channel issue id: ${firstIssueTool.issueId}`);
1226
+ lines.push(`- Current channel issue title: ${firstIssueTool.issueTitle || 'Untitled issue'}`);
1227
+ }
1228
+ else {
1229
+ lines.push('- Current channel is not bound to an issue yet. Use CreateCurrentChannelIssue before viewing or commenting.');
1230
+ }
1231
+ for (const tool of tools) {
1232
+ lines.push(`- ${tool.name}: ${tool.description}`);
1233
+ }
1234
+ return lines;
1235
+ }
1236
+ function stripHtml(content) {
1237
+ return content
1238
+ .replace(/<span[^>]*data-type=["']mention["'][^>]*data-label=["']([^"']+)["'][^>]*><\/span>/gi, '@$1')
1239
+ .replace(/<[^>]+>/g, ' ')
1240
+ .replace(/&nbsp;/g, ' ')
1241
+ .replace(/&amp;/g, '&')
1242
+ .replace(/&lt;/g, '<')
1243
+ .replace(/&gt;/g, '>')
1244
+ .replace(/\s+/g, ' ')
1245
+ .trim();
1246
+ }
1247
+ function extractMentionIds(content) {
1248
+ const ids = new Set();
1249
+ const mentionPattern = /<span[^>]*data-type=["']mention["'][^>]*>/gi;
1250
+ for (const match of content.matchAll(mentionPattern)) {
1251
+ const id = match[0].match(/\sdata-id=["']([^"']+)["']/i)?.[1];
1252
+ if (id)
1253
+ ids.add(decodeHtml(id));
1254
+ }
1255
+ return [...ids];
1256
+ }
1257
+ function decodeHtml(value) {
1258
+ return value
1259
+ .replace(/&quot;/g, '"')
1260
+ .replace(/&#39;/g, "'")
1261
+ .replace(/&amp;/g, '&')
1262
+ .replace(/&lt;/g, '<')
1263
+ .replace(/&gt;/g, '>');
1264
+ }
1265
+ // Register agent handlers
1266
+ registerHandler('agent.start', (_ws, workspaceId, data) => {
1267
+ const { role, issueId } = data;
1268
+ const ctx = makeContext(workspaceId);
1269
+ if (role === 'planner' && issueId) {
1270
+ runPlanner(workspaceId, issueId, ctx).catch((err) => {
1271
+ console.error(`[ws] planner error:`, err);
1272
+ });
1273
+ }
1274
+ });
1275
+ registerHandler('agent.stop', (_ws, workspaceId, data) => {
1276
+ const { agentId } = data;
1277
+ agentService.complete(workspaceId, agentId);
1278
+ broadcastToWorkspace(workspaceId, 'agent.status_changed', {
1279
+ agentId,
1280
+ from: 'active',
1281
+ to: 'completed',
1282
+ });
1283
+ });
1284
+ export { broadcastToWorkspace };
1285
+ //# sourceMappingURL=handler.js.map