groove-dev 0.27.136 → 0.27.138

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 (488) hide show
  1. package/node_modules/@groove-dev/cli/package.json +1 -1
  2. package/node_modules/@groove-dev/daemon/package.json +1 -1
  3. package/node_modules/@groove-dev/daemon/src/adaptive.js +26 -16
  4. package/node_modules/@groove-dev/daemon/src/journalist.js +62 -24
  5. package/node_modules/@groove-dev/daemon/src/model-lab.js +6 -5
  6. package/node_modules/@groove-dev/daemon/src/rotator.js +48 -21
  7. package/{packages/gui/dist/assets/codemirror-DRQdprYi.js → node_modules/@groove-dev/gui/dist/assets/codemirror-BYKpdS2W.js} +1 -1
  8. package/{packages/gui/dist/assets/index-BrZHF7pK.js → node_modules/@groove-dev/gui/dist/assets/index-DcNgRadn.js} +1764 -1764
  9. package/node_modules/@groove-dev/gui/dist/assets/index-EY6WfKWH.css +1 -0
  10. package/node_modules/@groove-dev/gui/dist/index.html +3 -3
  11. package/node_modules/@groove-dev/gui/package.json +2 -1
  12. package/node_modules/@groove-dev/gui/src/components/editor/code-editor.jsx +81 -63
  13. package/node_modules/@groove-dev/gui/src/components/editor/editor-status-bar.jsx +66 -0
  14. package/node_modules/@groove-dev/gui/src/components/lab/system-prompt-editor.jsx +21 -24
  15. package/node_modules/@groove-dev/gui/src/stores/groove.js +5 -0
  16. package/node_modules/@uiw/codemirror-theme-abcdef/README.md +152 -0
  17. package/node_modules/@uiw/codemirror-theme-abcdef/cjs/index.d.ts +5 -0
  18. package/node_modules/@uiw/codemirror-theme-abcdef/cjs/index.js +95 -0
  19. package/node_modules/@uiw/codemirror-theme-abcdef/cjs/package.json +1 -0
  20. package/node_modules/@uiw/codemirror-theme-abcdef/esm/index.d.ts +5 -0
  21. package/node_modules/@uiw/codemirror-theme-abcdef/esm/index.js +84 -0
  22. package/node_modules/@uiw/codemirror-theme-abcdef/esm/package.json +1 -0
  23. package/node_modules/@uiw/codemirror-theme-abcdef/package.json +50 -0
  24. package/node_modules/@uiw/codemirror-theme-abcdef/src/index.ts +52 -0
  25. package/node_modules/@uiw/codemirror-theme-abyss/README.md +150 -0
  26. package/node_modules/@uiw/codemirror-theme-abyss/cjs/color.d.ts +25 -0
  27. package/node_modules/@uiw/codemirror-theme-abyss/cjs/color.js +31 -0
  28. package/node_modules/@uiw/codemirror-theme-abyss/cjs/index.d.ts +5 -0
  29. package/node_modules/@uiw/codemirror-theme-abyss/cjs/index.js +103 -0
  30. package/node_modules/@uiw/codemirror-theme-abyss/cjs/package.json +1 -0
  31. package/node_modules/@uiw/codemirror-theme-abyss/esm/color.d.ts +25 -0
  32. package/node_modules/@uiw/codemirror-theme-abyss/esm/color.js +25 -0
  33. package/node_modules/@uiw/codemirror-theme-abyss/esm/index.d.ts +5 -0
  34. package/node_modules/@uiw/codemirror-theme-abyss/esm/index.js +93 -0
  35. package/node_modules/@uiw/codemirror-theme-abyss/esm/package.json +1 -0
  36. package/node_modules/@uiw/codemirror-theme-abyss/package.json +45 -0
  37. package/node_modules/@uiw/codemirror-theme-abyss/src/color.ts +25 -0
  38. package/node_modules/@uiw/codemirror-theme-abyss/src/index.ts +52 -0
  39. package/node_modules/@uiw/codemirror-theme-androidstudio/README.md +153 -0
  40. package/node_modules/@uiw/codemirror-theme-androidstudio/cjs/index.d.ts +5 -0
  41. package/node_modules/@uiw/codemirror-theme-androidstudio/cjs/index.js +66 -0
  42. package/node_modules/@uiw/codemirror-theme-androidstudio/cjs/package.json +1 -0
  43. package/node_modules/@uiw/codemirror-theme-androidstudio/esm/index.d.ts +5 -0
  44. package/node_modules/@uiw/codemirror-theme-androidstudio/esm/index.js +55 -0
  45. package/node_modules/@uiw/codemirror-theme-androidstudio/esm/package.json +1 -0
  46. package/node_modules/@uiw/codemirror-theme-androidstudio/package.json +50 -0
  47. package/node_modules/@uiw/codemirror-theme-androidstudio/src/index.ts +40 -0
  48. package/node_modules/@uiw/codemirror-theme-andromeda/README.md +149 -0
  49. package/node_modules/@uiw/codemirror-theme-andromeda/cjs/color.d.ts +26 -0
  50. package/node_modules/@uiw/codemirror-theme-andromeda/cjs/color.js +32 -0
  51. package/node_modules/@uiw/codemirror-theme-andromeda/cjs/index.d.ts +5 -0
  52. package/node_modules/@uiw/codemirror-theme-andromeda/cjs/index.js +106 -0
  53. package/node_modules/@uiw/codemirror-theme-andromeda/cjs/package.json +1 -0
  54. package/node_modules/@uiw/codemirror-theme-andromeda/esm/color.d.ts +26 -0
  55. package/node_modules/@uiw/codemirror-theme-andromeda/esm/color.js +26 -0
  56. package/node_modules/@uiw/codemirror-theme-andromeda/esm/index.d.ts +5 -0
  57. package/node_modules/@uiw/codemirror-theme-andromeda/esm/index.js +96 -0
  58. package/node_modules/@uiw/codemirror-theme-andromeda/esm/package.json +1 -0
  59. package/node_modules/@uiw/codemirror-theme-andromeda/package.json +45 -0
  60. package/node_modules/@uiw/codemirror-theme-andromeda/src/color.ts +26 -0
  61. package/node_modules/@uiw/codemirror-theme-andromeda/src/index.ts +56 -0
  62. package/node_modules/@uiw/codemirror-theme-atomone/README.md +151 -0
  63. package/node_modules/@uiw/codemirror-theme-atomone/cjs/index.d.ts +5 -0
  64. package/node_modules/@uiw/codemirror-theme-atomone/cjs/index.js +69 -0
  65. package/node_modules/@uiw/codemirror-theme-atomone/cjs/package.json +1 -0
  66. package/node_modules/@uiw/codemirror-theme-atomone/esm/index.d.ts +5 -0
  67. package/node_modules/@uiw/codemirror-theme-atomone/esm/index.js +58 -0
  68. package/node_modules/@uiw/codemirror-theme-atomone/esm/package.json +1 -0
  69. package/node_modules/@uiw/codemirror-theme-atomone/package.json +50 -0
  70. package/node_modules/@uiw/codemirror-theme-atomone/src/index.ts +48 -0
  71. package/node_modules/@uiw/codemirror-theme-aura/README.md +151 -0
  72. package/node_modules/@uiw/codemirror-theme-aura/cjs/index.d.ts +5 -0
  73. package/node_modules/@uiw/codemirror-theme-aura/cjs/index.js +99 -0
  74. package/node_modules/@uiw/codemirror-theme-aura/cjs/package.json +1 -0
  75. package/node_modules/@uiw/codemirror-theme-aura/esm/index.d.ts +5 -0
  76. package/node_modules/@uiw/codemirror-theme-aura/esm/index.js +89 -0
  77. package/node_modules/@uiw/codemirror-theme-aura/esm/package.json +1 -0
  78. package/node_modules/@uiw/codemirror-theme-aura/package.json +50 -0
  79. package/node_modules/@uiw/codemirror-theme-aura/src/index.ts +51 -0
  80. package/node_modules/@uiw/codemirror-theme-basic/README.md +159 -0
  81. package/node_modules/@uiw/codemirror-theme-basic/cjs/dark.d.ts +5 -0
  82. package/node_modules/@uiw/codemirror-theme-basic/cjs/dark.js +156 -0
  83. package/node_modules/@uiw/codemirror-theme-basic/cjs/index.d.ts +2 -0
  84. package/node_modules/@uiw/codemirror-theme-basic/cjs/index.js +27 -0
  85. package/node_modules/@uiw/codemirror-theme-basic/cjs/light.d.ts +5 -0
  86. package/node_modules/@uiw/codemirror-theme-basic/cjs/light.js +153 -0
  87. package/node_modules/@uiw/codemirror-theme-basic/cjs/package.json +1 -0
  88. package/node_modules/@uiw/codemirror-theme-basic/dark.d.ts +6 -0
  89. package/node_modules/@uiw/codemirror-theme-basic/esm/dark.d.ts +5 -0
  90. package/node_modules/@uiw/codemirror-theme-basic/esm/dark.js +146 -0
  91. package/node_modules/@uiw/codemirror-theme-basic/esm/index.d.ts +2 -0
  92. package/node_modules/@uiw/codemirror-theme-basic/esm/index.js +2 -0
  93. package/node_modules/@uiw/codemirror-theme-basic/esm/light.d.ts +5 -0
  94. package/node_modules/@uiw/codemirror-theme-basic/esm/light.js +143 -0
  95. package/node_modules/@uiw/codemirror-theme-basic/esm/package.json +1 -0
  96. package/node_modules/@uiw/codemirror-theme-basic/light.d.ts +6 -0
  97. package/node_modules/@uiw/codemirror-theme-basic/package.json +63 -0
  98. package/node_modules/@uiw/codemirror-theme-basic/src/dark.ts +76 -0
  99. package/node_modules/@uiw/codemirror-theme-basic/src/index.ts +2 -0
  100. package/node_modules/@uiw/codemirror-theme-basic/src/light.ts +81 -0
  101. package/node_modules/@uiw/codemirror-theme-bbedit/README.md +151 -0
  102. package/node_modules/@uiw/codemirror-theme-bbedit/cjs/index.d.ts +5 -0
  103. package/node_modules/@uiw/codemirror-theme-bbedit/cjs/index.js +77 -0
  104. package/node_modules/@uiw/codemirror-theme-bbedit/cjs/package.json +1 -0
  105. package/node_modules/@uiw/codemirror-theme-bbedit/esm/index.d.ts +5 -0
  106. package/node_modules/@uiw/codemirror-theme-bbedit/esm/index.js +67 -0
  107. package/node_modules/@uiw/codemirror-theme-bbedit/esm/package.json +1 -0
  108. package/node_modules/@uiw/codemirror-theme-bbedit/package.json +50 -0
  109. package/node_modules/@uiw/codemirror-theme-bbedit/src/index.ts +44 -0
  110. package/node_modules/@uiw/codemirror-theme-bespin/README.md +151 -0
  111. package/node_modules/@uiw/codemirror-theme-bespin/cjs/index.d.ts +5 -0
  112. package/node_modules/@uiw/codemirror-theme-bespin/cjs/index.js +72 -0
  113. package/node_modules/@uiw/codemirror-theme-bespin/cjs/package.json +1 -0
  114. package/node_modules/@uiw/codemirror-theme-bespin/esm/index.d.ts +5 -0
  115. package/node_modules/@uiw/codemirror-theme-bespin/esm/index.js +61 -0
  116. package/node_modules/@uiw/codemirror-theme-bespin/esm/package.json +1 -0
  117. package/node_modules/@uiw/codemirror-theme-bespin/package.json +50 -0
  118. package/node_modules/@uiw/codemirror-theme-bespin/src/index.ts +46 -0
  119. package/node_modules/@uiw/codemirror-theme-console/README.md +160 -0
  120. package/node_modules/@uiw/codemirror-theme-console/cjs/dark.d.ts +4 -0
  121. package/node_modules/@uiw/codemirror-theme-console/cjs/dark.js +36 -0
  122. package/node_modules/@uiw/codemirror-theme-console/cjs/index.d.ts +2 -0
  123. package/node_modules/@uiw/codemirror-theme-console/cjs/index.js +27 -0
  124. package/node_modules/@uiw/codemirror-theme-console/cjs/light.d.ts +4 -0
  125. package/node_modules/@uiw/codemirror-theme-console/cjs/light.js +36 -0
  126. package/node_modules/@uiw/codemirror-theme-console/cjs/package.json +1 -0
  127. package/node_modules/@uiw/codemirror-theme-console/dark.d.ts +6 -0
  128. package/node_modules/@uiw/codemirror-theme-console/esm/dark.d.ts +4 -0
  129. package/node_modules/@uiw/codemirror-theme-console/esm/dark.js +26 -0
  130. package/node_modules/@uiw/codemirror-theme-console/esm/index.d.ts +2 -0
  131. package/node_modules/@uiw/codemirror-theme-console/esm/index.js +2 -0
  132. package/node_modules/@uiw/codemirror-theme-console/esm/light.d.ts +4 -0
  133. package/node_modules/@uiw/codemirror-theme-console/esm/light.js +26 -0
  134. package/node_modules/@uiw/codemirror-theme-console/esm/package.json +1 -0
  135. package/node_modules/@uiw/codemirror-theme-console/light.d.ts +6 -0
  136. package/node_modules/@uiw/codemirror-theme-console/package.json +62 -0
  137. package/node_modules/@uiw/codemirror-theme-console/src/dark.ts +27 -0
  138. package/node_modules/@uiw/codemirror-theme-console/src/index.ts +2 -0
  139. package/node_modules/@uiw/codemirror-theme-console/src/light.ts +27 -0
  140. package/node_modules/@uiw/codemirror-theme-copilot/README.md +149 -0
  141. package/node_modules/@uiw/codemirror-theme-copilot/cjs/color.d.ts +25 -0
  142. package/node_modules/@uiw/codemirror-theme-copilot/cjs/color.js +31 -0
  143. package/node_modules/@uiw/codemirror-theme-copilot/cjs/index.d.ts +5 -0
  144. package/node_modules/@uiw/codemirror-theme-copilot/cjs/index.js +106 -0
  145. package/node_modules/@uiw/codemirror-theme-copilot/cjs/package.json +1 -0
  146. package/node_modules/@uiw/codemirror-theme-copilot/esm/color.d.ts +25 -0
  147. package/node_modules/@uiw/codemirror-theme-copilot/esm/color.js +25 -0
  148. package/node_modules/@uiw/codemirror-theme-copilot/esm/index.d.ts +5 -0
  149. package/node_modules/@uiw/codemirror-theme-copilot/esm/index.js +96 -0
  150. package/node_modules/@uiw/codemirror-theme-copilot/esm/package.json +1 -0
  151. package/node_modules/@uiw/codemirror-theme-copilot/package.json +45 -0
  152. package/node_modules/@uiw/codemirror-theme-copilot/src/color.ts +25 -0
  153. package/node_modules/@uiw/codemirror-theme-copilot/src/index.ts +56 -0
  154. package/node_modules/@uiw/codemirror-theme-darcula/README.md +151 -0
  155. package/node_modules/@uiw/codemirror-theme-darcula/cjs/index.d.ts +5 -0
  156. package/node_modules/@uiw/codemirror-theme-darcula/cjs/index.js +72 -0
  157. package/node_modules/@uiw/codemirror-theme-darcula/cjs/package.json +1 -0
  158. package/node_modules/@uiw/codemirror-theme-darcula/esm/index.d.ts +5 -0
  159. package/node_modules/@uiw/codemirror-theme-darcula/esm/index.js +61 -0
  160. package/node_modules/@uiw/codemirror-theme-darcula/esm/package.json +1 -0
  161. package/node_modules/@uiw/codemirror-theme-darcula/package.json +50 -0
  162. package/node_modules/@uiw/codemirror-theme-darcula/src/index.ts +46 -0
  163. package/node_modules/@uiw/codemirror-theme-dracula/README.md +151 -0
  164. package/node_modules/@uiw/codemirror-theme-dracula/cjs/index.d.ts +5 -0
  165. package/node_modules/@uiw/codemirror-theme-dracula/cjs/index.js +69 -0
  166. package/node_modules/@uiw/codemirror-theme-dracula/cjs/package.json +1 -0
  167. package/node_modules/@uiw/codemirror-theme-dracula/esm/index.d.ts +5 -0
  168. package/node_modules/@uiw/codemirror-theme-dracula/esm/index.js +58 -0
  169. package/node_modules/@uiw/codemirror-theme-dracula/esm/package.json +1 -0
  170. package/node_modules/@uiw/codemirror-theme-dracula/package.json +50 -0
  171. package/node_modules/@uiw/codemirror-theme-dracula/src/index.ts +48 -0
  172. package/node_modules/@uiw/codemirror-theme-duotone/README.md +156 -0
  173. package/node_modules/@uiw/codemirror-theme-duotone/cjs/index.d.ts +9 -0
  174. package/node_modules/@uiw/codemirror-theme-duotone/cjs/index.js +115 -0
  175. package/node_modules/@uiw/codemirror-theme-duotone/cjs/package.json +1 -0
  176. package/node_modules/@uiw/codemirror-theme-duotone/esm/index.d.ts +9 -0
  177. package/node_modules/@uiw/codemirror-theme-duotone/esm/index.js +102 -0
  178. package/node_modules/@uiw/codemirror-theme-duotone/esm/package.json +1 -0
  179. package/node_modules/@uiw/codemirror-theme-duotone/package.json +50 -0
  180. package/node_modules/@uiw/codemirror-theme-duotone/src/index.ts +79 -0
  181. package/node_modules/@uiw/codemirror-theme-eclipse/README.md +145 -0
  182. package/node_modules/@uiw/codemirror-theme-eclipse/cjs/index.d.ts +5 -0
  183. package/node_modules/@uiw/codemirror-theme-eclipse/cjs/index.js +78 -0
  184. package/node_modules/@uiw/codemirror-theme-eclipse/cjs/package.json +1 -0
  185. package/node_modules/@uiw/codemirror-theme-eclipse/esm/index.d.ts +5 -0
  186. package/node_modules/@uiw/codemirror-theme-eclipse/esm/index.js +68 -0
  187. package/node_modules/@uiw/codemirror-theme-eclipse/esm/package.json +1 -0
  188. package/node_modules/@uiw/codemirror-theme-eclipse/package.json +50 -0
  189. package/node_modules/@uiw/codemirror-theme-eclipse/src/index.ts +44 -0
  190. package/node_modules/@uiw/codemirror-theme-github/README.md +154 -0
  191. package/node_modules/@uiw/codemirror-theme-github/cjs/index.d.ts +9 -0
  192. package/node_modules/@uiw/codemirror-theme-github/cjs/index.js +156 -0
  193. package/node_modules/@uiw/codemirror-theme-github/cjs/package.json +1 -0
  194. package/node_modules/@uiw/codemirror-theme-github/esm/index.d.ts +9 -0
  195. package/node_modules/@uiw/codemirror-theme-github/esm/index.js +143 -0
  196. package/node_modules/@uiw/codemirror-theme-github/esm/package.json +1 -0
  197. package/node_modules/@uiw/codemirror-theme-github/package.json +50 -0
  198. package/node_modules/@uiw/codemirror-theme-github/src/index.ts +86 -0
  199. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/README.md +153 -0
  200. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/cjs/index.d.ts +8 -0
  201. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/cjs/index.js +296 -0
  202. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/cjs/package.json +1 -0
  203. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/esm/index.d.ts +8 -0
  204. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/esm/index.js +283 -0
  205. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/esm/package.json +1 -0
  206. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/package.json +50 -0
  207. package/node_modules/@uiw/codemirror-theme-gruvbox-dark/src/index.ts +203 -0
  208. package/node_modules/@uiw/codemirror-theme-kimbie/README.md +149 -0
  209. package/node_modules/@uiw/codemirror-theme-kimbie/cjs/color.d.ts +25 -0
  210. package/node_modules/@uiw/codemirror-theme-kimbie/cjs/color.js +31 -0
  211. package/node_modules/@uiw/codemirror-theme-kimbie/cjs/index.d.ts +5 -0
  212. package/node_modules/@uiw/codemirror-theme-kimbie/cjs/index.js +103 -0
  213. package/node_modules/@uiw/codemirror-theme-kimbie/cjs/package.json +1 -0
  214. package/node_modules/@uiw/codemirror-theme-kimbie/esm/color.d.ts +25 -0
  215. package/node_modules/@uiw/codemirror-theme-kimbie/esm/color.js +25 -0
  216. package/node_modules/@uiw/codemirror-theme-kimbie/esm/index.d.ts +5 -0
  217. package/node_modules/@uiw/codemirror-theme-kimbie/esm/index.js +93 -0
  218. package/node_modules/@uiw/codemirror-theme-kimbie/esm/package.json +1 -0
  219. package/node_modules/@uiw/codemirror-theme-kimbie/package.json +45 -0
  220. package/node_modules/@uiw/codemirror-theme-kimbie/src/color.ts +25 -0
  221. package/node_modules/@uiw/codemirror-theme-kimbie/src/index.ts +52 -0
  222. package/node_modules/@uiw/codemirror-theme-material/README.md +161 -0
  223. package/node_modules/@uiw/codemirror-theme-material/cjs/index.d.ts +12 -0
  224. package/node_modules/@uiw/codemirror-theme-material/cjs/index.js +247 -0
  225. package/node_modules/@uiw/codemirror-theme-material/cjs/package.json +1 -0
  226. package/node_modules/@uiw/codemirror-theme-material/esm/index.d.ts +12 -0
  227. package/node_modules/@uiw/codemirror-theme-material/esm/index.js +235 -0
  228. package/node_modules/@uiw/codemirror-theme-material/esm/package.json +1 -0
  229. package/node_modules/@uiw/codemirror-theme-material/package.json +50 -0
  230. package/node_modules/@uiw/codemirror-theme-material/src/index.ts +129 -0
  231. package/node_modules/@uiw/codemirror-theme-monokai/README.md +149 -0
  232. package/node_modules/@uiw/codemirror-theme-monokai/cjs/color.d.ts +25 -0
  233. package/node_modules/@uiw/codemirror-theme-monokai/cjs/color.js +31 -0
  234. package/node_modules/@uiw/codemirror-theme-monokai/cjs/index.d.ts +5 -0
  235. package/node_modules/@uiw/codemirror-theme-monokai/cjs/index.js +103 -0
  236. package/node_modules/@uiw/codemirror-theme-monokai/cjs/package.json +1 -0
  237. package/node_modules/@uiw/codemirror-theme-monokai/esm/color.d.ts +25 -0
  238. package/node_modules/@uiw/codemirror-theme-monokai/esm/color.js +25 -0
  239. package/node_modules/@uiw/codemirror-theme-monokai/esm/index.d.ts +5 -0
  240. package/node_modules/@uiw/codemirror-theme-monokai/esm/index.js +93 -0
  241. package/node_modules/@uiw/codemirror-theme-monokai/esm/package.json +1 -0
  242. package/node_modules/@uiw/codemirror-theme-monokai/package.json +45 -0
  243. package/node_modules/@uiw/codemirror-theme-monokai/src/color.ts +25 -0
  244. package/node_modules/@uiw/codemirror-theme-monokai/src/index.ts +52 -0
  245. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/README.md +151 -0
  246. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/cjs/color.d.ts +25 -0
  247. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/cjs/color.js +31 -0
  248. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/cjs/index.d.ts +5 -0
  249. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/cjs/index.js +103 -0
  250. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/cjs/package.json +1 -0
  251. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/esm/color.d.ts +25 -0
  252. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/esm/color.js +25 -0
  253. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/esm/index.d.ts +5 -0
  254. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/esm/index.js +93 -0
  255. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/esm/package.json +1 -0
  256. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/package.json +46 -0
  257. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/src/color.ts +25 -0
  258. package/node_modules/@uiw/codemirror-theme-monokai-dimmed/src/index.ts +52 -0
  259. package/node_modules/@uiw/codemirror-theme-noctis-lilac/README.md +149 -0
  260. package/node_modules/@uiw/codemirror-theme-noctis-lilac/cjs/index.d.ts +5 -0
  261. package/node_modules/@uiw/codemirror-theme-noctis-lilac/cjs/index.js +83 -0
  262. package/node_modules/@uiw/codemirror-theme-noctis-lilac/cjs/package.json +1 -0
  263. package/node_modules/@uiw/codemirror-theme-noctis-lilac/esm/index.d.ts +5 -0
  264. package/node_modules/@uiw/codemirror-theme-noctis-lilac/esm/index.js +73 -0
  265. package/node_modules/@uiw/codemirror-theme-noctis-lilac/esm/package.json +1 -0
  266. package/node_modules/@uiw/codemirror-theme-noctis-lilac/package.json +50 -0
  267. package/node_modules/@uiw/codemirror-theme-noctis-lilac/src/index.ts +49 -0
  268. package/node_modules/@uiw/codemirror-theme-nord/README.md +149 -0
  269. package/node_modules/@uiw/codemirror-theme-nord/cjs/index.d.ts +5 -0
  270. package/node_modules/@uiw/codemirror-theme-nord/cjs/index.js +159 -0
  271. package/node_modules/@uiw/codemirror-theme-nord/cjs/package.json +1 -0
  272. package/node_modules/@uiw/codemirror-theme-nord/esm/index.d.ts +5 -0
  273. package/node_modules/@uiw/codemirror-theme-nord/esm/index.js +149 -0
  274. package/node_modules/@uiw/codemirror-theme-nord/esm/package.json +1 -0
  275. package/node_modules/@uiw/codemirror-theme-nord/package.json +50 -0
  276. package/node_modules/@uiw/codemirror-theme-nord/src/index.ts +77 -0
  277. package/node_modules/@uiw/codemirror-theme-okaidia/README.md +147 -0
  278. package/node_modules/@uiw/codemirror-theme-okaidia/cjs/index.d.ts +5 -0
  279. package/node_modules/@uiw/codemirror-theme-okaidia/cjs/index.js +69 -0
  280. package/node_modules/@uiw/codemirror-theme-okaidia/cjs/package.json +1 -0
  281. package/node_modules/@uiw/codemirror-theme-okaidia/esm/index.d.ts +5 -0
  282. package/node_modules/@uiw/codemirror-theme-okaidia/esm/index.js +59 -0
  283. package/node_modules/@uiw/codemirror-theme-okaidia/esm/package.json +1 -0
  284. package/node_modules/@uiw/codemirror-theme-okaidia/package.json +50 -0
  285. package/node_modules/@uiw/codemirror-theme-okaidia/src/index.ts +41 -0
  286. package/node_modules/@uiw/codemirror-theme-quietlight/README.md +149 -0
  287. package/node_modules/@uiw/codemirror-theme-quietlight/cjs/color.d.ts +25 -0
  288. package/node_modules/@uiw/codemirror-theme-quietlight/cjs/color.js +31 -0
  289. package/node_modules/@uiw/codemirror-theme-quietlight/cjs/index.d.ts +5 -0
  290. package/node_modules/@uiw/codemirror-theme-quietlight/cjs/index.js +104 -0
  291. package/node_modules/@uiw/codemirror-theme-quietlight/cjs/package.json +1 -0
  292. package/node_modules/@uiw/codemirror-theme-quietlight/esm/color.d.ts +25 -0
  293. package/node_modules/@uiw/codemirror-theme-quietlight/esm/color.js +25 -0
  294. package/node_modules/@uiw/codemirror-theme-quietlight/esm/index.d.ts +5 -0
  295. package/node_modules/@uiw/codemirror-theme-quietlight/esm/index.js +94 -0
  296. package/node_modules/@uiw/codemirror-theme-quietlight/esm/package.json +1 -0
  297. package/node_modules/@uiw/codemirror-theme-quietlight/package.json +45 -0
  298. package/node_modules/@uiw/codemirror-theme-quietlight/src/color.ts +25 -0
  299. package/node_modules/@uiw/codemirror-theme-quietlight/src/index.ts +53 -0
  300. package/node_modules/@uiw/codemirror-theme-red/README.md +149 -0
  301. package/node_modules/@uiw/codemirror-theme-red/cjs/color.d.ts +25 -0
  302. package/node_modules/@uiw/codemirror-theme-red/cjs/color.js +31 -0
  303. package/node_modules/@uiw/codemirror-theme-red/cjs/index.d.ts +5 -0
  304. package/node_modules/@uiw/codemirror-theme-red/cjs/index.js +103 -0
  305. package/node_modules/@uiw/codemirror-theme-red/cjs/package.json +1 -0
  306. package/node_modules/@uiw/codemirror-theme-red/esm/color.d.ts +25 -0
  307. package/node_modules/@uiw/codemirror-theme-red/esm/color.js +25 -0
  308. package/node_modules/@uiw/codemirror-theme-red/esm/index.d.ts +5 -0
  309. package/node_modules/@uiw/codemirror-theme-red/esm/index.js +93 -0
  310. package/node_modules/@uiw/codemirror-theme-red/esm/package.json +1 -0
  311. package/node_modules/@uiw/codemirror-theme-red/package.json +45 -0
  312. package/node_modules/@uiw/codemirror-theme-red/src/color.ts +25 -0
  313. package/node_modules/@uiw/codemirror-theme-red/src/index.ts +52 -0
  314. package/node_modules/@uiw/codemirror-theme-solarized/README.md +160 -0
  315. package/node_modules/@uiw/codemirror-theme-solarized/cjs/dark-color.d.ts +26 -0
  316. package/node_modules/@uiw/codemirror-theme-solarized/cjs/dark-color.js +32 -0
  317. package/node_modules/@uiw/codemirror-theme-solarized/cjs/dark.d.ts +5 -0
  318. package/node_modules/@uiw/codemirror-theme-solarized/cjs/dark.js +104 -0
  319. package/node_modules/@uiw/codemirror-theme-solarized/cjs/index.d.ts +2 -0
  320. package/node_modules/@uiw/codemirror-theme-solarized/cjs/index.js +27 -0
  321. package/node_modules/@uiw/codemirror-theme-solarized/cjs/light-color.d.ts +26 -0
  322. package/node_modules/@uiw/codemirror-theme-solarized/cjs/light-color.js +32 -0
  323. package/node_modules/@uiw/codemirror-theme-solarized/cjs/light.d.ts +5 -0
  324. package/node_modules/@uiw/codemirror-theme-solarized/cjs/light.js +104 -0
  325. package/node_modules/@uiw/codemirror-theme-solarized/cjs/package.json +1 -0
  326. package/node_modules/@uiw/codemirror-theme-solarized/dark.d.ts +6 -0
  327. package/node_modules/@uiw/codemirror-theme-solarized/esm/dark-color.d.ts +26 -0
  328. package/node_modules/@uiw/codemirror-theme-solarized/esm/dark-color.js +26 -0
  329. package/node_modules/@uiw/codemirror-theme-solarized/esm/dark.d.ts +5 -0
  330. package/node_modules/@uiw/codemirror-theme-solarized/esm/dark.js +94 -0
  331. package/node_modules/@uiw/codemirror-theme-solarized/esm/index.d.ts +2 -0
  332. package/node_modules/@uiw/codemirror-theme-solarized/esm/index.js +2 -0
  333. package/node_modules/@uiw/codemirror-theme-solarized/esm/light-color.d.ts +26 -0
  334. package/node_modules/@uiw/codemirror-theme-solarized/esm/light-color.js +26 -0
  335. package/node_modules/@uiw/codemirror-theme-solarized/esm/light.d.ts +5 -0
  336. package/node_modules/@uiw/codemirror-theme-solarized/esm/light.js +94 -0
  337. package/node_modules/@uiw/codemirror-theme-solarized/esm/package.json +1 -0
  338. package/node_modules/@uiw/codemirror-theme-solarized/light.d.ts +6 -0
  339. package/node_modules/@uiw/codemirror-theme-solarized/package.json +63 -0
  340. package/node_modules/@uiw/codemirror-theme-solarized/src/dark-color.ts +26 -0
  341. package/node_modules/@uiw/codemirror-theme-solarized/src/dark.ts +53 -0
  342. package/node_modules/@uiw/codemirror-theme-solarized/src/index.ts +2 -0
  343. package/node_modules/@uiw/codemirror-theme-solarized/src/light-color.ts +26 -0
  344. package/node_modules/@uiw/codemirror-theme-solarized/src/light.ts +53 -0
  345. package/node_modules/@uiw/codemirror-theme-sublime/README.md +147 -0
  346. package/node_modules/@uiw/codemirror-theme-sublime/cjs/index.d.ts +5 -0
  347. package/node_modules/@uiw/codemirror-theme-sublime/cjs/index.js +73 -0
  348. package/node_modules/@uiw/codemirror-theme-sublime/cjs/package.json +1 -0
  349. package/node_modules/@uiw/codemirror-theme-sublime/esm/index.d.ts +5 -0
  350. package/node_modules/@uiw/codemirror-theme-sublime/esm/index.js +62 -0
  351. package/node_modules/@uiw/codemirror-theme-sublime/esm/package.json +1 -0
  352. package/node_modules/@uiw/codemirror-theme-sublime/package.json +50 -0
  353. package/node_modules/@uiw/codemirror-theme-sublime/src/index.ts +42 -0
  354. package/node_modules/@uiw/codemirror-theme-tokyo-night/README.md +151 -0
  355. package/node_modules/@uiw/codemirror-theme-tokyo-night/cjs/index.d.ts +5 -0
  356. package/node_modules/@uiw/codemirror-theme-tokyo-night/cjs/index.js +99 -0
  357. package/node_modules/@uiw/codemirror-theme-tokyo-night/cjs/package.json +1 -0
  358. package/node_modules/@uiw/codemirror-theme-tokyo-night/esm/index.d.ts +5 -0
  359. package/node_modules/@uiw/codemirror-theme-tokyo-night/esm/index.js +89 -0
  360. package/node_modules/@uiw/codemirror-theme-tokyo-night/esm/package.json +1 -0
  361. package/node_modules/@uiw/codemirror-theme-tokyo-night/package.json +50 -0
  362. package/node_modules/@uiw/codemirror-theme-tokyo-night/src/index.ts +51 -0
  363. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/README.md +153 -0
  364. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/cjs/index.d.ts +5 -0
  365. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/cjs/index.js +100 -0
  366. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/cjs/package.json +1 -0
  367. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/esm/index.d.ts +5 -0
  368. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/esm/index.js +90 -0
  369. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/esm/package.json +1 -0
  370. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/package.json +51 -0
  371. package/node_modules/@uiw/codemirror-theme-tokyo-night-day/src/index.ts +51 -0
  372. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/README.md +153 -0
  373. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/cjs/index.d.ts +5 -0
  374. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/cjs/index.js +100 -0
  375. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/cjs/package.json +1 -0
  376. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/esm/index.d.ts +5 -0
  377. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/esm/index.js +90 -0
  378. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/esm/package.json +1 -0
  379. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/package.json +51 -0
  380. package/node_modules/@uiw/codemirror-theme-tokyo-night-storm/src/index.ts +51 -0
  381. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/README.md +151 -0
  382. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/cjs/color.d.ts +25 -0
  383. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/cjs/color.js +31 -0
  384. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/cjs/index.d.ts +5 -0
  385. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/cjs/index.js +103 -0
  386. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/cjs/package.json +1 -0
  387. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/esm/color.d.ts +25 -0
  388. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/esm/color.js +25 -0
  389. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/esm/index.d.ts +5 -0
  390. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/esm/index.js +93 -0
  391. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/esm/package.json +1 -0
  392. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/package.json +45 -0
  393. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/src/color.ts +25 -0
  394. package/node_modules/@uiw/codemirror-theme-tomorrow-night-blue/src/index.ts +52 -0
  395. package/node_modules/@uiw/codemirror-theme-vscode/README.md +161 -0
  396. package/node_modules/@uiw/codemirror-theme-vscode/cjs/dark.d.ts +5 -0
  397. package/node_modules/@uiw/codemirror-theme-vscode/cjs/dark.js +98 -0
  398. package/node_modules/@uiw/codemirror-theme-vscode/cjs/index.d.ts +2 -0
  399. package/node_modules/@uiw/codemirror-theme-vscode/cjs/index.js +27 -0
  400. package/node_modules/@uiw/codemirror-theme-vscode/cjs/light.d.ts +5 -0
  401. package/node_modules/@uiw/codemirror-theme-vscode/cjs/light.js +98 -0
  402. package/node_modules/@uiw/codemirror-theme-vscode/cjs/package.json +1 -0
  403. package/node_modules/@uiw/codemirror-theme-vscode/esm/dark.d.ts +5 -0
  404. package/node_modules/@uiw/codemirror-theme-vscode/esm/dark.js +85 -0
  405. package/node_modules/@uiw/codemirror-theme-vscode/esm/index.d.ts +2 -0
  406. package/node_modules/@uiw/codemirror-theme-vscode/esm/index.js +2 -0
  407. package/node_modules/@uiw/codemirror-theme-vscode/esm/light.d.ts +5 -0
  408. package/node_modules/@uiw/codemirror-theme-vscode/esm/light.js +85 -0
  409. package/node_modules/@uiw/codemirror-theme-vscode/esm/package.json +1 -0
  410. package/node_modules/@uiw/codemirror-theme-vscode/package.json +44 -0
  411. package/node_modules/@uiw/codemirror-theme-vscode/src/dark.ts +82 -0
  412. package/node_modules/@uiw/codemirror-theme-vscode/src/index.ts +2 -0
  413. package/node_modules/@uiw/codemirror-theme-vscode/src/light.ts +82 -0
  414. package/node_modules/@uiw/codemirror-theme-white/README.md +160 -0
  415. package/node_modules/@uiw/codemirror-theme-white/cjs/dark-color.d.ts +26 -0
  416. package/node_modules/@uiw/codemirror-theme-white/cjs/dark-color.js +32 -0
  417. package/node_modules/@uiw/codemirror-theme-white/cjs/dark.d.ts +5 -0
  418. package/node_modules/@uiw/codemirror-theme-white/cjs/dark.js +110 -0
  419. package/node_modules/@uiw/codemirror-theme-white/cjs/index.d.ts +2 -0
  420. package/node_modules/@uiw/codemirror-theme-white/cjs/index.js +27 -0
  421. package/node_modules/@uiw/codemirror-theme-white/cjs/light-color.d.ts +26 -0
  422. package/node_modules/@uiw/codemirror-theme-white/cjs/light-color.js +32 -0
  423. package/node_modules/@uiw/codemirror-theme-white/cjs/light.d.ts +5 -0
  424. package/node_modules/@uiw/codemirror-theme-white/cjs/light.js +110 -0
  425. package/node_modules/@uiw/codemirror-theme-white/cjs/package.json +1 -0
  426. package/node_modules/@uiw/codemirror-theme-white/esm/dark-color.d.ts +26 -0
  427. package/node_modules/@uiw/codemirror-theme-white/esm/dark-color.js +26 -0
  428. package/node_modules/@uiw/codemirror-theme-white/esm/dark.d.ts +5 -0
  429. package/node_modules/@uiw/codemirror-theme-white/esm/dark.js +100 -0
  430. package/node_modules/@uiw/codemirror-theme-white/esm/index.d.ts +2 -0
  431. package/node_modules/@uiw/codemirror-theme-white/esm/index.js +2 -0
  432. package/node_modules/@uiw/codemirror-theme-white/esm/light-color.d.ts +26 -0
  433. package/node_modules/@uiw/codemirror-theme-white/esm/light-color.js +26 -0
  434. package/node_modules/@uiw/codemirror-theme-white/esm/light.d.ts +5 -0
  435. package/node_modules/@uiw/codemirror-theme-white/esm/light.js +100 -0
  436. package/node_modules/@uiw/codemirror-theme-white/esm/package.json +1 -0
  437. package/node_modules/@uiw/codemirror-theme-white/package.json +56 -0
  438. package/node_modules/@uiw/codemirror-theme-white/src/dark-color.ts +26 -0
  439. package/node_modules/@uiw/codemirror-theme-white/src/dark.ts +57 -0
  440. package/node_modules/@uiw/codemirror-theme-white/src/index.ts +2 -0
  441. package/node_modules/@uiw/codemirror-theme-white/src/light-color.ts +26 -0
  442. package/node_modules/@uiw/codemirror-theme-white/src/light.ts +57 -0
  443. package/node_modules/@uiw/codemirror-theme-xcode/README.md +154 -0
  444. package/node_modules/@uiw/codemirror-theme-xcode/cjs/index.d.ts +9 -0
  445. package/node_modules/@uiw/codemirror-theme-xcode/cjs/index.js +119 -0
  446. package/node_modules/@uiw/codemirror-theme-xcode/cjs/package.json +1 -0
  447. package/node_modules/@uiw/codemirror-theme-xcode/esm/index.d.ts +9 -0
  448. package/node_modules/@uiw/codemirror-theme-xcode/esm/index.js +104 -0
  449. package/node_modules/@uiw/codemirror-theme-xcode/esm/package.json +1 -0
  450. package/node_modules/@uiw/codemirror-theme-xcode/package.json +44 -0
  451. package/node_modules/@uiw/codemirror-theme-xcode/src/index.ts +75 -0
  452. package/node_modules/@uiw/codemirror-themes/README.md +391 -0
  453. package/node_modules/@uiw/codemirror-themes/cjs/index.d.ts +46 -0
  454. package/node_modules/@uiw/codemirror-themes/cjs/index.js +84 -0
  455. package/node_modules/@uiw/codemirror-themes/cjs/package.json +1 -0
  456. package/node_modules/@uiw/codemirror-themes/esm/index.d.ts +46 -0
  457. package/node_modules/@uiw/codemirror-themes/esm/index.js +78 -0
  458. package/node_modules/@uiw/codemirror-themes/esm/package.json +1 -0
  459. package/node_modules/@uiw/codemirror-themes/package.json +56 -0
  460. package/node_modules/@uiw/codemirror-themes/src/index.tsx +128 -0
  461. package/node_modules/@uiw/codemirror-themes-all/README.md +406 -0
  462. package/node_modules/@uiw/codemirror-themes-all/cjs/index.d.ts +35 -0
  463. package/node_modules/@uiw/codemirror-themes-all/cjs/index.js +390 -0
  464. package/node_modules/@uiw/codemirror-themes-all/cjs/package.json +1 -0
  465. package/node_modules/@uiw/codemirror-themes-all/esm/index.d.ts +35 -0
  466. package/node_modules/@uiw/codemirror-themes-all/esm/index.js +35 -0
  467. package/node_modules/@uiw/codemirror-themes-all/esm/package.json +1 -0
  468. package/node_modules/@uiw/codemirror-themes-all/package.json +86 -0
  469. package/node_modules/@uiw/codemirror-themes-all/src/index.ts +35 -0
  470. package/package.json +1 -1
  471. package/packages/cli/package.json +1 -1
  472. package/packages/daemon/package.json +1 -1
  473. package/packages/daemon/src/adaptive.js +26 -16
  474. package/packages/daemon/src/journalist.js +62 -24
  475. package/packages/daemon/src/model-lab.js +6 -5
  476. package/packages/daemon/src/rotator.js +48 -21
  477. package/{node_modules/@groove-dev/gui/dist/assets/codemirror-DRQdprYi.js → packages/gui/dist/assets/codemirror-BYKpdS2W.js} +1 -1
  478. package/{node_modules/@groove-dev/gui/dist/assets/index-BrZHF7pK.js → packages/gui/dist/assets/index-DcNgRadn.js} +1764 -1764
  479. package/packages/gui/dist/assets/index-EY6WfKWH.css +1 -0
  480. package/packages/gui/dist/index.html +3 -3
  481. package/packages/gui/package.json +2 -1
  482. package/packages/gui/src/components/editor/code-editor.jsx +81 -63
  483. package/packages/gui/src/components/editor/editor-status-bar.jsx +66 -0
  484. package/packages/gui/src/components/lab/system-prompt-editor.jsx +21 -24
  485. package/packages/gui/src/stores/groove.js +5 -0
  486. package/model-workspace/LAB-ASSISTANT-BUILD-PLAN.md +0 -341
  487. package/node_modules/@groove-dev/gui/dist/assets/index-DIfiwdKl.css +0 -1
  488. package/packages/gui/dist/assets/index-DIfiwdKl.css +0 -1
@@ -1,4 +1,9 @@
1
1
  // FSL-1.1-Apache-2.0 — see LICENSE
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import { Palette } from 'lucide-react';
4
+ import { useGrooveStore } from '../../stores/groove';
5
+ import { EDITOR_THEMES } from './code-editor';
6
+ import { cn } from '../../lib/cn';
2
7
 
3
8
  const LANG_LABELS = {
4
9
  javascript: 'JavaScript',
@@ -10,13 +15,74 @@ const LANG_LABELS = {
10
15
  python: 'Python',
11
16
  };
12
17
 
18
+ const themeKeys = Object.keys(EDITOR_THEMES);
19
+ const darkThemes = themeKeys.filter((k) => !['githubLight', 'vscodeLight', 'eclipse', 'xcodeLight', 'solarizedLight', 'gruvboxLight', 'materialLight', 'duotoneLight', 'quietlight', 'bbedit', 'tokyoNightDay', 'basicLight'].includes(k));
20
+ const lightThemes = themeKeys.filter((k) => !darkThemes.includes(k));
21
+
13
22
  export function EditorStatusBar({ cursorPos, language }) {
23
+ const editorTheme = useGrooveStore((s) => s.editorTheme);
24
+ const setEditorTheme = useGrooveStore((s) => s.setEditorTheme);
25
+ const [open, setOpen] = useState(false);
26
+ const menuRef = useRef(null);
27
+
28
+ useEffect(() => {
29
+ if (!open) return;
30
+ function handleClick(e) {
31
+ if (menuRef.current && !menuRef.current.contains(e.target)) setOpen(false);
32
+ }
33
+ document.addEventListener('mousedown', handleClick);
34
+ return () => document.removeEventListener('mousedown', handleClick);
35
+ }, [open]);
36
+
14
37
  return (
15
38
  <div className="flex items-center justify-between h-6 px-3 bg-surface-1 border-t border-border-subtle text-2xs font-sans text-text-3 flex-shrink-0 select-none">
16
39
  <div className="flex items-center gap-3">
17
40
  <span>Ln {cursorPos.line}, Col {cursorPos.col}</span>
18
41
  </div>
19
42
  <div className="flex items-center gap-3">
43
+ <div className="relative" ref={menuRef}>
44
+ <button
45
+ onClick={() => setOpen(!open)}
46
+ className="flex items-center gap-1.5 hover:text-text-0 transition-colors cursor-pointer"
47
+ >
48
+ <Palette size={10} />
49
+ <span>{EDITOR_THEMES[editorTheme]?.label || editorTheme}</span>
50
+ </button>
51
+ {open && (
52
+ <div className="absolute bottom-6 right-0 w-48 max-h-72 overflow-y-auto rounded-md border border-border bg-surface-2 shadow-xl z-50 py-1 scrollbar-thin">
53
+ <div className="px-2 py-1 text-2xs text-text-4 font-semibold uppercase tracking-wider">Dark</div>
54
+ {darkThemes.map((key) => (
55
+ <button
56
+ key={key}
57
+ onClick={() => { setEditorTheme(key); setOpen(false); }}
58
+ className={cn(
59
+ 'w-full text-left px-3 py-1 text-2xs font-sans cursor-pointer transition-colors',
60
+ key === editorTheme
61
+ ? 'text-accent bg-accent/10'
62
+ : 'text-text-1 hover:bg-surface-4',
63
+ )}
64
+ >
65
+ {EDITOR_THEMES[key].label}
66
+ </button>
67
+ ))}
68
+ <div className="px-2 py-1 mt-1 text-2xs text-text-4 font-semibold uppercase tracking-wider border-t border-border-subtle">Light</div>
69
+ {lightThemes.map((key) => (
70
+ <button
71
+ key={key}
72
+ onClick={() => { setEditorTheme(key); setOpen(false); }}
73
+ className={cn(
74
+ 'w-full text-left px-3 py-1 text-2xs font-sans cursor-pointer transition-colors',
75
+ key === editorTheme
76
+ ? 'text-accent bg-accent/10'
77
+ : 'text-text-1 hover:bg-surface-4',
78
+ )}
79
+ >
80
+ {EDITOR_THEMES[key].label}
81
+ </button>
82
+ ))}
83
+ </div>
84
+ )}
85
+ </div>
20
86
  <span className="cursor-default">{LANG_LABELS[language] || language || 'Plain Text'}</span>
21
87
  <span>Spaces: 2</span>
22
88
  <span>UTF-8</span>
@@ -4,42 +4,31 @@ import { useGrooveStore } from '../../stores/groove';
4
4
  import { ChevronDown, ChevronRight } from 'lucide-react';
5
5
  import { cn } from '../../lib/cn';
6
6
  import { EditorView, keymap, lineNumbers } from '@codemirror/view';
7
- import { EditorState } from '@codemirror/state';
7
+ import { EditorState, Compartment } from '@codemirror/state';
8
8
  import { defaultKeymap, history, historyKeymap } from '@codemirror/commands';
9
- import { syntaxHighlighting, HighlightStyle } from '@codemirror/language';
10
- import { tags as t } from '@lezer/highlight';
11
9
  import { markdown } from '@codemirror/lang-markdown';
10
+ import { EDITOR_THEMES } from '../editor/code-editor';
12
11
 
13
- const editorTheme = EditorView.theme({
14
- '&': { backgroundColor: 'var(--color-surface-1)', color: '#d4d8e0', fontFamily: 'var(--font-mono)', fontSize: '11px', height: '100%', lineHeight: '1.6' },
12
+ const promptChrome = EditorView.theme({
13
+ '&': { fontFamily: 'var(--font-mono)', fontSize: '11px', height: '100%', lineHeight: '1.6' },
15
14
  '.cm-scroller': { overflow: 'auto', padding: '4px 0' },
16
- '.cm-content': { caretColor: '#33afbc', padding: '0 8px' },
17
- '.cm-cursor': { borderLeftColor: '#33afbc', borderLeftWidth: '1.5px' },
18
- '.cm-gutters': { backgroundColor: 'var(--color-surface-1)', borderRight: 'none', color: '#404852', minWidth: '28px' },
15
+ '.cm-content': { padding: '0 8px' },
16
+ '.cm-gutters': { borderRight: 'none', minWidth: '28px' },
19
17
  '.cm-activeLine': { backgroundColor: 'rgba(255, 255, 255, 0.02)' },
20
- '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': { backgroundColor: 'rgba(51, 175, 188, 0.15)' },
21
18
  });
22
19
 
23
- const promptHighlightStyle = HighlightStyle.define([
24
- { tag: t.keyword, color: '#b07fd5' },
25
- { tag: [t.name, t.deleted, t.character, t.macroName], color: '#d4d8e0' },
26
- { tag: [t.function(t.variableName), t.labelName], color: '#dcc9a0' },
27
- { tag: [t.meta, t.comment], color: '#6e7681', fontStyle: 'italic' },
28
- { tag: t.strong, fontWeight: 'bold' },
29
- { tag: t.emphasis, fontStyle: 'italic' },
30
- { tag: t.link, color: '#7ab0df', textDecoration: 'underline' },
31
- { tag: t.heading, fontWeight: '400', color: '#bcc2cd' },
32
- { tag: [t.processingInstruction, t.string, t.inserted], color: '#95b2b8' },
33
- { tag: [t.atom, t.bool], color: '#d4a07a' },
34
- { tag: t.invalid, color: '#d4736e' },
35
- ]);
20
+ function getThemeExt(key) {
21
+ return EDITOR_THEMES[key]?.ext || EDITOR_THEMES.vscodeDark.ext;
22
+ }
36
23
 
37
24
  export function SystemPromptEditor() {
38
25
  const systemPrompt = useGrooveStore((s) => s.labSystemPrompt);
39
26
  const setSystemPrompt = useGrooveStore((s) => s.setLabSystemPrompt);
27
+ const themeKey = useGrooveStore((s) => s.editorTheme);
40
28
  const [collapsed, setCollapsed] = useState(false);
41
29
  const containerRef = useRef(null);
42
30
  const viewRef = useRef(null);
31
+ const themeCompartment = useRef(new Compartment());
43
32
  const externalUpdate = useRef(false);
44
33
 
45
34
  const charCount = systemPrompt.length;
@@ -51,6 +40,8 @@ export function SystemPromptEditor() {
51
40
  useEffect(() => {
52
41
  if (!containerRef.current) return;
53
42
 
43
+ const initialTheme = getThemeExt(useGrooveStore.getState().editorTheme);
44
+
54
45
  const updateListener = EditorView.updateListener.of((update) => {
55
46
  if (update.docChanged) {
56
47
  handleChange(update.state.doc.toString());
@@ -62,10 +53,10 @@ export function SystemPromptEditor() {
62
53
  extensions: [
63
54
  lineNumbers(),
64
55
  history(),
65
- syntaxHighlighting(promptHighlightStyle),
56
+ themeCompartment.current.of(initialTheme),
57
+ promptChrome,
66
58
  markdown(),
67
59
  keymap.of([...defaultKeymap, ...historyKeymap]),
68
- editorTheme,
69
60
  updateListener,
70
61
  EditorView.lineWrapping,
71
62
  ],
@@ -76,6 +67,12 @@ export function SystemPromptEditor() {
76
67
  return () => view.destroy();
77
68
  }, []);
78
69
 
70
+ useEffect(() => {
71
+ const view = viewRef.current;
72
+ if (!view) return;
73
+ view.dispatch({ effects: themeCompartment.current.reconfigure(getThemeExt(themeKey)) });
74
+ }, [themeKey]);
75
+
79
76
  useEffect(() => {
80
77
  const view = viewRef.current;
81
78
  if (!view) return;
@@ -196,6 +196,7 @@ export const useGrooveStore = create((set, get) => ({
196
196
  editorChangedFiles: {},
197
197
  editorRecentSaves: {},
198
198
  editorSidebarWidth: Number(localStorage.getItem('groove:editorSidebarWidth')) || 240,
199
+ editorTheme: localStorage.getItem('groove:editorTheme') || 'vscodeDark',
199
200
 
200
201
  // ── Workspace Mode ────────────────────────────────────────
201
202
  workspaceMode: localStorage.getItem('groove:workspaceMode') === 'true',
@@ -2810,6 +2811,10 @@ export const useGrooveStore = create((set, get) => ({
2810
2811
  set({ editorSidebarWidth: width });
2811
2812
  localStorage.setItem('groove:editorSidebarWidth', String(width));
2812
2813
  },
2814
+ setEditorTheme(theme) {
2815
+ set({ editorTheme: theme });
2816
+ localStorage.setItem('groove:editorTheme', theme);
2817
+ },
2813
2818
 
2814
2819
  updateFileContent(path, content) {
2815
2820
  set((s) => ({ editorFiles: { ...s.editorFiles, [path]: { ...s.editorFiles[path], content } } }));
@@ -1,341 +0,0 @@
1
- # Lab Assistant — Build Plan
2
-
3
- ## Overview
4
-
5
- Add an embedded AI assistant to the Model Lab that helps users set up inference runtimes (vLLM, TGI) without leaving the Lab. One agent, one chat, inline in the center panel. The agent handles system recon, installation, configuration, server startup, and auto-creates the Lab runtime when done.
6
-
7
- ## User Flow
8
-
9
- 1. User selects a model + picks vLLM or TGI backend in the Launch Model section
10
- 2. Clicks **"Setup vLLM with Assistant"** button
11
- 3. Center panel switches from Playground to Assistant tab — agent chat appears
12
- 4. Agent: "Let me check your system..." → runs nvidia-smi, checks CUDA, Python, Docker, VRAM
13
- 5. Agent: "You have an RTX 4090 with 24GB VRAM. I'll set up vLLM via Docker with Qwen3-8B."
14
- 6. Agent installs, configures, starts the server, validates with a health check
15
- 7. Agent calls `POST http://localhost:31415/api/lab/runtimes` to register the runtime
16
- 8. Runtime appears in the Lab's left panel automatically (via WebSocket event)
17
- 9. Agent: "Done! Switch to the Playground tab to start chatting."
18
- 10. User clicks "Switch to Playground" — model is ready to use
19
-
20
- ## Architecture
21
-
22
- ```
23
- User clicks "Setup vLLM"
24
- → store.launchLabAssistant('vllm')
25
- → POST /api/lab/assistant { backend: 'vllm' }
26
- → daemon reads templates/vllm-setup.json
27
- → daemon.processes.spawn({ role: 'lab-assistant', prompt: ... })
28
- → returns { agentId }
29
- → store sets labAssistantAgentId, switches to Assistant tab
30
- → agent output streams via WebSocket → chatHistory[agentId]
31
-
32
- Agent runs system commands, installs vLLM, starts server
33
- → agent calls: curl POST /api/lab/runtimes (on localhost)
34
- → daemon creates runtime, broadcasts lab:runtime:added
35
- → store.fetchLabRuntimes() fires → left panel updates
36
- ```
37
-
38
- ## Implementation
39
-
40
- ### 1. Team Templates (new files)
41
-
42
- **`packages/daemon/templates/vllm-setup.json`**
43
-
44
- Single-agent template. Role is `lab-assistant` (avoids the `planner` role which is restricted to planning-only in `ROLE_PROMPTS`).
45
-
46
- ```json
47
- {
48
- "name": "vllm-setup",
49
- "description": "Lab Assistant for vLLM installation and configuration",
50
- "agents": [
51
- {
52
- "role": "lab-assistant",
53
- "scope": [],
54
- "provider": "claude-code",
55
- "prompt": "SEE PROMPT SPEC BELOW"
56
- }
57
- ]
58
- }
59
- ```
60
-
61
- **`packages/daemon/templates/tgi-setup.json`** — same structure, TGI-specific prompt.
62
-
63
- #### Planner Prompt Spec (vLLM)
64
-
65
- The prompt is the hardest part. It must cover:
66
-
67
- **Identity**: "You are a GROOVE Lab Assistant. You help the user set up a vLLM inference server. Be conversational, report progress clearly."
68
-
69
- **System Recon** (run these commands, report findings):
70
- - `nvidia-smi` — GPU model, VRAM, driver version
71
- - `nvcc --version` — CUDA toolkit version
72
- - `python3 --version` and `pip3 --version`
73
- - `docker --version`
74
- - `free -h` — available RAM
75
- - `df -h /` — disk space
76
-
77
- **Decision Matrix**:
78
- - Docker available + NVIDIA GPU → Docker path (simplest)
79
- - No Docker, Python 3.8+ and CUDA → pip path
80
- - No GPU → warn user, suggest llama.cpp/Ollama instead
81
- - VRAM sizing: <8GB → 1-3B models, 8-16GB → 7B, 16-24GB → 13B, 24-48GB → 30-70B quantized, 48GB+ → 70B+
82
-
83
- **Installation**:
84
- - Docker: `docker run --runtime nvidia --gpus all -v ~/.cache/huggingface:/root/.cache/huggingface -p 8000:8000 --ipc=host vllm/vllm-openai:latest --model <model>`
85
- - Pip: `pip install vllm && vllm serve <model> --host 0.0.0.0 --port 8000`
86
- - Must use `nohup` or `docker run -d` so server persists after agent exits
87
-
88
- **Validation**: `curl http://localhost:8000/v1/models` — confirm JSON response
89
-
90
- **Runtime Registration**:
91
- ```bash
92
- PORT=$(cat ~/.groove/daemon.port 2>/dev/null || echo 31415)
93
- curl -s -X POST http://localhost:$PORT/api/lab/runtimes \
94
- -H 'Content-Type: application/json' \
95
- -d '{"name":"vLLM - <model>","type":"vllm","endpoint":"http://localhost:8000"}'
96
- ```
97
-
98
- **Completion**: Tell user to switch to Playground tab.
99
-
100
- **Error Handling**: Explain errors clearly, suggest fixes, offer retry. Common issues: CUDA mismatch, insufficient VRAM, Docker not running, missing nvidia-container-toolkit.
101
-
102
- #### TGI Prompt Spec
103
-
104
- Same structure, but:
105
- - Docker: `ghcr.io/huggingface/text-generation-inference`
106
- - Default port: 8080
107
- - Model loading with `--model-id`
108
- - Runtime type: `"tgi"`
109
-
110
- ---
111
-
112
- ### 2. Daemon Endpoint
113
-
114
- **File**: `packages/daemon/src/api.js`
115
- **Location**: After the existing lab endpoints (after `GET /api/lab/sessions/:id`, around line 6760)
116
-
117
- **`POST /api/lab/assistant`**
118
-
119
- ```
120
- Request: { "backend": "vllm" | "tgi" }
121
- Response: { "agentId": "abc123", "backend": "vllm" }
122
- ```
123
-
124
- Implementation:
125
- 1. Validate `backend` is "vllm" or "tgi"
126
- 2. Read template: `readFileSync(resolve(__dirname, '../templates/${backend}-setup.json'), 'utf8')`
127
- 3. Parse JSON, extract the agent config (first entry in `agents` array)
128
- 4. Spawn agent via `daemon.processes.spawn()` with:
129
- - `role`: "lab-assistant"
130
- - `provider`: agent config provider or daemon default
131
- - `prompt`: agent config prompt
132
- - `teamId`: default team ID
133
- - `metadata`: `{ labAssistant: true, backend }`
134
- 5. Return `201` with `{ agentId: agent.id, backend }`
135
-
136
- **Import needed**: `readFileSync` from `fs`, `resolve` from `path` (likely already imported in api.js)
137
-
138
- ---
139
-
140
- ### 3. Store State & Actions
141
-
142
- **File**: `packages/gui/src/stores/groove.js`
143
-
144
- **New state** (add after `labLaunchError`):
145
- ```js
146
- labAssistantAgentId: null,
147
- labAssistantMode: false,
148
- labAssistantBackend: null,
149
- ```
150
-
151
- **New actions** (add after the existing lab actions block):
152
-
153
- ```js
154
- async launchLabAssistant(backend) {
155
- const existing = get().labAssistantAgentId;
156
- if (existing) {
157
- // If assistant already running, just switch to its tab
158
- const agent = get().agents.find((a) => a.id === existing);
159
- if (agent && agent.status === 'running') {
160
- set({ labAssistantMode: true });
161
- return;
162
- }
163
- }
164
- try {
165
- const data = await api.post('/lab/assistant', { backend });
166
- set({ labAssistantAgentId: data.agentId, labAssistantMode: true, labAssistantBackend: backend });
167
- get().addToast('info', `Lab Assistant started for ${backend}`);
168
- } catch (err) {
169
- get().addToast('error', 'Failed to start assistant', err.message);
170
- }
171
- },
172
-
173
- dismissLabAssistant() {
174
- set({ labAssistantMode: false });
175
- },
176
-
177
- clearLabAssistant() {
178
- const id = get().labAssistantAgentId;
179
- if (id) api.delete(`/agents/${id}`).catch(() => {});
180
- set({ labAssistantAgentId: null, labAssistantMode: false, labAssistantBackend: null });
181
- },
182
- ```
183
-
184
- **No WebSocket changes needed** — `agent:output` already populates `chatHistory[agentId]`, and `lab:runtime:added` already triggers `fetchLabRuntimes()`.
185
-
186
- ---
187
-
188
- ### 4. Lab Assistant Component (new file)
189
-
190
- **File**: `packages/gui/src/components/lab/lab-assistant.jsx`
191
-
192
- A focused chat component for the lab assistant agent. Reads from `chatHistory[labAssistantAgentId]`, sends via the existing agent instruction mechanism.
193
-
194
- **Structure**:
195
- ```
196
- LabAssistant
197
- ├── Header: backend badge, agent status, dismiss "X" button
198
- ├── ScrollArea: message list
199
- │ ├── Agent messages (left-aligned, border-l accent)
200
- │ └── User messages (right-aligned, accent/10 bg)
201
- ├── Thinking indicator (when agent is processing)
202
- ├── Completion banner: "Setup complete — Switch to Playground" button
203
- └── Input: textarea + send button (Enter to send, Shift+Enter newline)
204
- ```
205
-
206
- **Key store selectors**:
207
- - `labAssistantAgentId` — which agent to display
208
- - `chatHistory[agentId]` — message history
209
- - `agents.find(a => a.id === agentId)` — agent status (running/completed/error)
210
- - `dismissLabAssistant` — switch back to playground
211
-
212
- **Sending messages**: Use the existing `instructAgent(agentId, message)` store action (check if this exists — it should be the mechanism used by AgentChat). If not, use `api.post('/agents/${id}/instruct', { message })`.
213
-
214
- **Styling**: Match `chat-playground.jsx` patterns exactly — same message bubble styles, same input area, same auto-scroll logic. License header on line 1.
215
-
216
- **Completion detection**: When `agent.status !== 'running'` and the last message exists, show the "Switch to Playground" button.
217
-
218
- ---
219
-
220
- ### 5. Center Panel Mode Switch
221
-
222
- **File**: `packages/gui/src/views/model-lab.jsx`
223
-
224
- **New import**: `import { LabAssistant } from '../components/lab/lab-assistant';`
225
-
226
- **New store selectors** in `ModelLabView`:
227
- ```js
228
- const labAssistantAgentId = useGrooveStore((s) => s.labAssistantAgentId);
229
- const labAssistantMode = useGrooveStore((s) => s.labAssistantMode);
230
- ```
231
-
232
- **Replace the center panel** (currently `<div className="flex-1 min-w-0 p-3"><ChatPlayground /></div>`) with:
233
-
234
- ```jsx
235
- <div className="flex-1 min-w-0 flex flex-col">
236
- {/* Tab bar — only visible when assistant exists */}
237
- {labAssistantAgentId && (
238
- <div className="flex-shrink-0 flex items-center gap-1 px-3 pt-2">
239
- <button
240
- onClick={() => set({ labAssistantMode: false })}
241
- className={cn(
242
- 'px-3 py-1.5 text-xs font-sans font-medium rounded-t-md transition-colors cursor-pointer',
243
- !labAssistantMode ? 'text-accent bg-accent/10' : 'text-text-3 hover:text-text-1',
244
- )}
245
- >
246
- Playground
247
- </button>
248
- <button
249
- onClick={() => set({ labAssistantMode: true })}
250
- className={cn(
251
- 'px-3 py-1.5 text-xs font-sans font-medium rounded-t-md transition-colors cursor-pointer',
252
- labAssistantMode ? 'text-accent bg-accent/10' : 'text-text-3 hover:text-text-1',
253
- )}
254
- >
255
- Assistant
256
- </button>
257
- </div>
258
- )}
259
- <div className="flex-1 min-h-0 p-3">
260
- {labAssistantMode && labAssistantAgentId ? <LabAssistant /> : <ChatPlayground />}
261
- </div>
262
- </div>
263
- ```
264
-
265
- Note: The tab buttons need to call store's `set` function — either expose `setLabAssistantMode(bool)` as a store action, or use `dismissLabAssistant()` and `set({ labAssistantMode: true })`. Cleanest approach: add a `setLabAssistantMode(mode)` action to the store.
266
-
267
- ---
268
-
269
- ### 6. LaunchModel Button
270
-
271
- **File**: `packages/gui/src/components/lab/runtime-config.jsx`
272
-
273
- **In the `LaunchModel` component**, replace the static guidance box for vLLM/TGI:
274
-
275
- Change from:
276
- ```jsx
277
- {!currentBackend?.autoLaunch && (
278
- <div>...manual setup guidance...</div>
279
- )}
280
- ```
281
-
282
- To:
283
- ```jsx
284
- {!currentBackend?.autoLaunch && (
285
- <div className="space-y-2">
286
- <Button variant="primary" size="sm" className="w-full" onClick={handleLaunchAssistant} disabled={assistantLaunching}>
287
- {assistantLaunching
288
- ? <><Loader2 size={12} className="animate-spin mr-1.5" /> Starting Assistant...</>
289
- : <><Wrench size={12} className="mr-1.5" /> Setup {currentBackend?.label} with Assistant</>
290
- }
291
- </Button>
292
- <p className="text-2xs text-text-4 font-sans px-1">
293
- An AI assistant will check your system and handle the installation, or start your server manually and add it as a Runtime below.
294
- </p>
295
- </div>
296
- )}
297
- ```
298
-
299
- **New imports**: `Wrench` from lucide-react, `launchLabAssistant` from store.
300
-
301
- **Update BACKENDS array** subtitle for vLLM/TGI:
302
- ```js
303
- { id: 'vllm', label: 'vLLM', subtitle: 'GPU-optimized, guided setup', autoLaunch: false },
304
- { id: 'tgi', label: 'TGI', subtitle: 'HuggingFace, guided setup', autoLaunch: false },
305
- ```
306
-
307
- ---
308
-
309
- ## File Summary
310
-
311
- | File | Action | Description |
312
- |------|--------|-------------|
313
- | `packages/daemon/templates/vllm-setup.json` | CREATE | vLLM setup agent template + prompt |
314
- | `packages/daemon/templates/tgi-setup.json` | CREATE | TGI setup agent template + prompt |
315
- | `packages/daemon/src/api.js` | MODIFY | Add `POST /api/lab/assistant` endpoint |
316
- | `packages/gui/src/stores/groove.js` | MODIFY | Add labAssistant state + actions |
317
- | `packages/gui/src/components/lab/lab-assistant.jsx` | CREATE | Assistant chat component |
318
- | `packages/gui/src/views/model-lab.jsx` | MODIFY | Center panel tab switch |
319
- | `packages/gui/src/components/lab/runtime-config.jsx` | MODIFY | "Setup with Assistant" button |
320
-
321
- ## Build Order
322
-
323
- 1. Team templates (`vllm-setup.json`, `tgi-setup.json`)
324
- 2. Daemon endpoint (`POST /api/lab/assistant` in `api.js`)
325
- 3. Store state and actions (`groove.js`)
326
- 4. Lab Assistant component (`lab-assistant.jsx`)
327
- 5. Center panel mode switch (`model-lab.jsx`)
328
- 6. LaunchModel button (`runtime-config.jsx`)
329
- 7. `npm run build` from `packages/gui/`
330
- 8. End-to-end test
331
-
332
- ## Key Constraints
333
-
334
- - **Role must be `lab-assistant`** — not `planner` (which is restricted to planning-only in `ROLE_PROMPTS`)
335
- - **Agent sends messages via WebSocket** — the `chatHistory[agentId]` pattern already handles this
336
- - **Runtime creation via curl** — the agent calls the daemon REST API directly. The daemon is on localhost:31415 (or read from `~/.groove/daemon.port`)
337
- - **Server must persist** — use `nohup`, `docker run -d`, or background processes so the inference server outlives the agent
338
- - **No inline styles** — Tailwind CSS only
339
- - **License header** — `// FSL-1.1-Apache-2.0 — see LICENSE` on every new source file
340
- - **ESM imports** — all files use `import`/`export`
341
- - **Do NOT restart the daemon** — verify with `npm run build` only