groove-dev 0.27.85 → 0.27.87

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 (507) hide show
  1. package/CLAUDE.md +10 -0
  2. package/moe-training/client/scrubber.js +4 -2
  3. package/moe-training/client/step-classifier.js +17 -0
  4. package/moe-training/client/trajectory-capture.js +80 -6
  5. package/moe-training/client/transmission-queue.js +11 -0
  6. package/moe-training/test/client/scrubber.test.js +14 -4
  7. package/moe-training/test/client/step-classifier.test.js +47 -0
  8. package/moe-training/test/client/transmission-queue.test.js +33 -0
  9. package/node_modules/@groove-dev/cli/bin/groove.js +10 -1
  10. package/node_modules/@groove-dev/cli/package.json +1 -1
  11. package/node_modules/@groove-dev/cli/src/commands/connect.js +116 -205
  12. package/node_modules/@groove-dev/cli/src/commands/disconnect.js +38 -62
  13. package/node_modules/@groove-dev/cli/src/commands/remotes.js +75 -0
  14. package/node_modules/@groove-dev/daemon/package.json +1 -1
  15. package/node_modules/@groove-dev/daemon/src/process.js +56 -1
  16. package/node_modules/@groove-dev/gui/dist/assets/index-BCQY8ojz.css +1 -0
  17. package/node_modules/@groove-dev/gui/dist/assets/index-C5e7KVGN.js +8637 -0
  18. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  19. package/node_modules/@groove-dev/gui/package.json +2 -1
  20. package/node_modules/@groove-dev/gui/src/components/preview/preview-workspace.jsx +6 -5
  21. package/node_modules/@groove-dev/gui/src/components/preview/screenshot-overlay.jsx +41 -29
  22. package/node_modules/@groove-dev/gui/src/stores/groove.js +6 -2
  23. package/node_modules/@groove-dev/gui/src/views/agents.jsx +15 -1
  24. package/node_modules/@groove-dev/gui/src/views/settings.jsx +104 -26
  25. package/node_modules/base64-arraybuffer/CHANGELOG.md +28 -0
  26. package/node_modules/base64-arraybuffer/LICENSE +22 -0
  27. package/node_modules/base64-arraybuffer/README.md +27 -0
  28. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js +50 -0
  29. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js.map +1 -0
  30. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js +61 -0
  31. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js.map +1 -0
  32. package/node_modules/base64-arraybuffer/dist/lib/index.js +48 -0
  33. package/node_modules/base64-arraybuffer/dist/lib/index.js.map +1 -0
  34. package/node_modules/base64-arraybuffer/dist/types/index.d.ts +2 -0
  35. package/node_modules/base64-arraybuffer/package.json +54 -0
  36. package/node_modules/base64-arraybuffer/rollup.config.ts +40 -0
  37. package/node_modules/css-line-break/CHANGELOG.md +58 -0
  38. package/node_modules/css-line-break/LICENSE +22 -0
  39. package/node_modules/css-line-break/README.md +66 -0
  40. package/node_modules/css-line-break/dist/css-line-break.es5.js +706 -0
  41. package/node_modules/css-line-break/dist/css-line-break.es5.js.map +1 -0
  42. package/node_modules/css-line-break/dist/css-line-break.umd.js +718 -0
  43. package/node_modules/css-line-break/dist/css-line-break.umd.js.map +1 -0
  44. package/node_modules/css-line-break/dist/lib/LineBreak.js +516 -0
  45. package/node_modules/css-line-break/dist/lib/LineBreak.js.map +1 -0
  46. package/node_modules/css-line-break/dist/lib/Util.js +109 -0
  47. package/node_modules/css-line-break/dist/lib/Util.js.map +1 -0
  48. package/node_modules/css-line-break/dist/lib/index.js +9 -0
  49. package/node_modules/css-line-break/dist/lib/index.js.map +1 -0
  50. package/node_modules/css-line-break/dist/lib/linebreak-trie.js +6 -0
  51. package/node_modules/css-line-break/dist/lib/linebreak-trie.js.map +1 -0
  52. package/node_modules/css-line-break/dist/types/LineBreak.d.ts +38 -0
  53. package/node_modules/css-line-break/dist/types/Util.d.ts +5 -0
  54. package/node_modules/css-line-break/dist/types/index.d.ts +2 -0
  55. package/node_modules/css-line-break/dist/types/linebreak-trie.d.ts +2 -0
  56. package/node_modules/css-line-break/package.json +61 -0
  57. package/node_modules/css-line-break/rollup.config.ts +40 -0
  58. package/node_modules/html2canvas/CHANGELOG.md +566 -0
  59. package/node_modules/html2canvas/LICENSE +22 -0
  60. package/node_modules/html2canvas/README.md +73 -0
  61. package/node_modules/html2canvas/dist/html2canvas.esm.js +7822 -0
  62. package/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
  63. package/node_modules/html2canvas/dist/html2canvas.js +7830 -0
  64. package/node_modules/html2canvas/dist/html2canvas.js.map +1 -0
  65. package/node_modules/html2canvas/dist/html2canvas.min.js +20 -0
  66. package/node_modules/html2canvas/dist/lib/__tests__/index.js +144 -0
  67. package/node_modules/html2canvas/dist/lib/__tests__/index.js.map +1 -0
  68. package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js +10 -0
  69. package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js.map +1 -0
  70. package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js +22 -0
  71. package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js.map +1 -0
  72. package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js +12 -0
  73. package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js.map +1 -0
  74. package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js +24 -0
  75. package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js.map +1 -0
  76. package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js +420 -0
  77. package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js.map +1 -0
  78. package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js +28 -0
  79. package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js.map +1 -0
  80. package/node_modules/html2canvas/dist/lib/core/bitwise.js +6 -0
  81. package/node_modules/html2canvas/dist/lib/core/bitwise.js.map +1 -0
  82. package/node_modules/html2canvas/dist/lib/core/cache-storage.js +198 -0
  83. package/node_modules/html2canvas/dist/lib/core/cache-storage.js.map +1 -0
  84. package/node_modules/html2canvas/dist/lib/core/context.js +18 -0
  85. package/node_modules/html2canvas/dist/lib/core/context.js.map +1 -0
  86. package/node_modules/html2canvas/dist/lib/core/debugger.js +25 -0
  87. package/node_modules/html2canvas/dist/lib/core/debugger.js.map +1 -0
  88. package/node_modules/html2canvas/dist/lib/core/features.js +193 -0
  89. package/node_modules/html2canvas/dist/lib/core/features.js.map +1 -0
  90. package/node_modules/html2canvas/dist/lib/core/logger.js +88 -0
  91. package/node_modules/html2canvas/dist/lib/core/logger.js.map +1 -0
  92. package/node_modules/html2canvas/dist/lib/core/util.js +5 -0
  93. package/node_modules/html2canvas/dist/lib/core/util.js.map +1 -0
  94. package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js +3 -0
  95. package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js.map +1 -0
  96. package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js +3 -0
  97. package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js.map +1 -0
  98. package/node_modules/html2canvas/dist/lib/css/index.js +216 -0
  99. package/node_modules/html2canvas/dist/lib/css/index.js.map +1 -0
  100. package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js +9 -0
  101. package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js.map +1 -0
  102. package/node_modules/html2canvas/dist/lib/css/layout/bounds.js +42 -0
  103. package/node_modules/html2canvas/dist/lib/css/layout/bounds.js.map +1 -0
  104. package/node_modules/html2canvas/dist/lib/css/layout/text.js +137 -0
  105. package/node_modules/html2canvas/dist/lib/css/layout/text.js.map +1 -0
  106. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js +48 -0
  107. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -0
  108. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js +25 -0
  109. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js.map +1 -0
  110. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js +88 -0
  111. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +1 -0
  112. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js +94 -0
  113. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +1 -0
  114. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js +18 -0
  115. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +1 -0
  116. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js +24 -0
  117. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js.map +1 -0
  118. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js +11 -0
  119. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js.map +1 -0
  120. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js +24 -0
  121. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js.map +1 -0
  122. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js +24 -0
  123. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js.map +1 -0
  124. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js +17 -0
  125. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js.map +1 -0
  126. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js +36 -0
  127. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js.map +1 -0
  128. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js +24 -0
  129. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js.map +1 -0
  130. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js +15 -0
  131. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js.map +1 -0
  132. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js +18 -0
  133. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js.map +1 -0
  134. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js +27 -0
  135. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js.map +1 -0
  136. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js +21 -0
  137. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js.map +1 -0
  138. package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js +55 -0
  139. package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js.map +1 -0
  140. package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js +11 -0
  141. package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js.map +1 -0
  142. package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js +20 -0
  143. package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js.map +1 -0
  144. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js +31 -0
  145. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js.map +1 -0
  146. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js +27 -0
  147. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js.map +1 -0
  148. package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js +19 -0
  149. package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js.map +1 -0
  150. package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js +82 -0
  151. package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js.map +1 -0
  152. package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js +15 -0
  153. package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js.map +1 -0
  154. package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js +23 -0
  155. package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js.map +1 -0
  156. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js +33 -0
  157. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js.map +1 -0
  158. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js +11 -0
  159. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js.map +1 -0
  160. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js +21 -0
  161. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js.map +1 -0
  162. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js +14 -0
  163. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js.map +1 -0
  164. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js +26 -0
  165. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js.map +1 -0
  166. package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js +22 -0
  167. package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js.map +1 -0
  168. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js +24 -0
  169. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js.map +1 -0
  170. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js +25 -0
  171. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js.map +1 -0
  172. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js +17 -0
  173. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js.map +1 -0
  174. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js +19 -0
  175. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js.map +1 -0
  176. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js +123 -0
  177. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js.map +1 -0
  178. package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js +14 -0
  179. package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js.map +1 -0
  180. package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js +17 -0
  181. package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js.map +1 -0
  182. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js +19 -0
  183. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js.map +1 -0
  184. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js +28 -0
  185. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js.map +1 -0
  186. package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js +15 -0
  187. package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js.map +1 -0
  188. package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js +34 -0
  189. package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js.map +1 -0
  190. package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js +23 -0
  191. package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js.map +1 -0
  192. package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js +42 -0
  193. package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js.map +1 -0
  194. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js +22 -0
  195. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js.map +1 -0
  196. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js +11 -0
  197. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js.map +1 -0
  198. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js +29 -0
  199. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js.map +1 -0
  200. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js +47 -0
  201. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js.map +1 -0
  202. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js +21 -0
  203. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js.map +1 -0
  204. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js +25 -0
  205. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js.map +1 -0
  206. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js +37 -0
  207. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js.map +1 -0
  208. package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js +21 -0
  209. package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js.map +1 -0
  210. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +11 -0
  211. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +1 -0
  212. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +17 -0
  213. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +1 -0
  214. package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js +27 -0
  215. package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js.map +1 -0
  216. package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js +20 -0
  217. package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js.map +1 -0
  218. package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js +34 -0
  219. package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +1 -0
  220. package/node_modules/html2canvas/dist/lib/css/syntax/parser.js +147 -0
  221. package/node_modules/html2canvas/dist/lib/css/syntax/parser.js.map +1 -0
  222. package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js +630 -0
  223. package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js.map +1 -0
  224. package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js +66 -0
  225. package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js.map +1 -0
  226. package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js +233 -0
  227. package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js.map +1 -0
  228. package/node_modules/html2canvas/dist/lib/css/types/angle.js +81 -0
  229. package/node_modules/html2canvas/dist/lib/css/types/angle.js.map +1 -0
  230. package/node_modules/html2canvas/dist/lib/css/types/color.js +288 -0
  231. package/node_modules/html2canvas/dist/lib/css/types/color.js.map +1 -0
  232. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js +33 -0
  233. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +1 -0
  234. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js +84 -0
  235. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +1 -0
  236. package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js +60 -0
  237. package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js.map +1 -0
  238. package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js +68 -0
  239. package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +1 -0
  240. package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js +374 -0
  241. package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js.map +1 -0
  242. package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js +165 -0
  243. package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js.map +1 -0
  244. package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js +28 -0
  245. package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js.map +1 -0
  246. package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js +91 -0
  247. package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js.map +1 -0
  248. package/node_modules/html2canvas/dist/lib/css/types/image.js +53 -0
  249. package/node_modules/html2canvas/dist/lib/css/types/image.js.map +1 -0
  250. package/node_modules/html2canvas/dist/lib/css/types/index.js +3 -0
  251. package/node_modules/html2canvas/dist/lib/css/types/index.js.map +1 -0
  252. package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js +52 -0
  253. package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js.map +1 -0
  254. package/node_modules/html2canvas/dist/lib/css/types/length.js +8 -0
  255. package/node_modules/html2canvas/dist/lib/css/types/length.js.map +1 -0
  256. package/node_modules/html2canvas/dist/lib/css/types/time.js +18 -0
  257. package/node_modules/html2canvas/dist/lib/css/types/time.js.map +1 -0
  258. package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js +24 -0
  259. package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js.map +1 -0
  260. package/node_modules/html2canvas/dist/lib/dom/document-cloner.js +530 -0
  261. package/node_modules/html2canvas/dist/lib/dom/document-cloner.js.map +1 -0
  262. package/node_modules/html2canvas/dist/lib/dom/element-container.js +35 -0
  263. package/node_modules/html2canvas/dist/lib/dom/element-container.js.map +1 -0
  264. package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js +30 -0
  265. package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js.map +1 -0
  266. package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js +31 -0
  267. package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js.map +1 -0
  268. package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js +31 -0
  269. package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js.map +1 -0
  270. package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js +30 -0
  271. package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js.map +1 -0
  272. package/node_modules/html2canvas/dist/lib/dom/node-parser.js +142 -0
  273. package/node_modules/html2canvas/dist/lib/dom/node-parser.js.map +1 -0
  274. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js +32 -0
  275. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js.map +1 -0
  276. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js +55 -0
  277. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -0
  278. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js +33 -0
  279. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js.map +1 -0
  280. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js +3 -0
  281. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js.map +1 -0
  282. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js +102 -0
  283. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js.map +1 -0
  284. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js +1 -0
  285. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js.map +1 -0
  286. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js +38 -0
  287. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js.map +1 -0
  288. package/node_modules/html2canvas/dist/lib/dom/text-container.js +32 -0
  289. package/node_modules/html2canvas/dist/lib/dom/text-container.js.map +1 -0
  290. package/node_modules/html2canvas/dist/lib/index.js +181 -0
  291. package/node_modules/html2canvas/dist/lib/index.js.map +1 -0
  292. package/node_modules/html2canvas/dist/lib/invariant.js +10 -0
  293. package/node_modules/html2canvas/dist/lib/invariant.js.map +1 -0
  294. package/node_modules/html2canvas/dist/lib/render/background.js +187 -0
  295. package/node_modules/html2canvas/dist/lib/render/background.js.map +1 -0
  296. package/node_modules/html2canvas/dist/lib/render/bezier-curve.js +36 -0
  297. package/node_modules/html2canvas/dist/lib/render/bezier-curve.js.map +1 -0
  298. package/node_modules/html2canvas/dist/lib/render/border.js +105 -0
  299. package/node_modules/html2canvas/dist/lib/render/border.js.map +1 -0
  300. package/node_modules/html2canvas/dist/lib/render/bound-curves.js +190 -0
  301. package/node_modules/html2canvas/dist/lib/render/bound-curves.js.map +1 -0
  302. package/node_modules/html2canvas/dist/lib/render/box-sizing.js +21 -0
  303. package/node_modules/html2canvas/dist/lib/render/box-sizing.js.map +1 -0
  304. package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js +1030 -0
  305. package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js.map +1 -0
  306. package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js +108 -0
  307. package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js.map +1 -0
  308. package/node_modules/html2canvas/dist/lib/render/effects.js +41 -0
  309. package/node_modules/html2canvas/dist/lib/render/effects.js.map +1 -0
  310. package/node_modules/html2canvas/dist/lib/render/font-metrics.js +55 -0
  311. package/node_modules/html2canvas/dist/lib/render/font-metrics.js.map +1 -0
  312. package/node_modules/html2canvas/dist/lib/render/path.js +27 -0
  313. package/node_modules/html2canvas/dist/lib/render/path.js.map +1 -0
  314. package/node_modules/html2canvas/dist/lib/render/renderer.js +12 -0
  315. package/node_modules/html2canvas/dist/lib/render/renderer.js.map +1 -0
  316. package/node_modules/html2canvas/dist/lib/render/stacking-context.js +172 -0
  317. package/node_modules/html2canvas/dist/lib/render/stacking-context.js.map +1 -0
  318. package/node_modules/html2canvas/dist/lib/render/vector.js +18 -0
  319. package/node_modules/html2canvas/dist/lib/render/vector.js.map +1 -0
  320. package/node_modules/html2canvas/dist/types/__tests__/index.d.ts +1 -0
  321. package/node_modules/html2canvas/dist/types/core/__mocks__/cache-storage.d.ts +2 -0
  322. package/node_modules/html2canvas/dist/types/core/__mocks__/context.d.ts +9 -0
  323. package/node_modules/html2canvas/dist/types/core/__mocks__/features.d.ts +8 -0
  324. package/node_modules/html2canvas/dist/types/core/__mocks__/logger.d.ts +9 -0
  325. package/node_modules/html2canvas/dist/types/core/__tests__/cache-storage.d.ts +1 -0
  326. package/node_modules/html2canvas/dist/types/core/__tests__/logger.d.ts +1 -0
  327. package/node_modules/html2canvas/dist/types/core/bitwise.d.ts +1 -0
  328. package/node_modules/html2canvas/dist/types/core/cache-storage.d.ts +26 -0
  329. package/node_modules/html2canvas/dist/types/core/context.d.ts +15 -0
  330. package/node_modules/html2canvas/dist/types/core/debugger.d.ts +8 -0
  331. package/node_modules/html2canvas/dist/types/core/features.d.ts +12 -0
  332. package/node_modules/html2canvas/dist/types/core/logger.d.ts +18 -0
  333. package/node_modules/html2canvas/dist/types/core/util.d.ts +1 -0
  334. package/node_modules/html2canvas/dist/types/css/IPropertyDescriptor.d.ts +36 -0
  335. package/node_modules/html2canvas/dist/types/css/ITypeDescriptor.d.ts +6 -0
  336. package/node_modules/html2canvas/dist/types/css/index.d.ts +132 -0
  337. package/node_modules/html2canvas/dist/types/css/layout/__mocks__/bounds.d.ts +2 -0
  338. package/node_modules/html2canvas/dist/types/css/layout/bounds.d.ts +14 -0
  339. package/node_modules/html2canvas/dist/types/css/layout/text.d.ts +10 -0
  340. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +1 -0
  341. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/font-family.d.ts +1 -0
  342. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +1 -0
  343. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +1 -0
  344. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +1 -0
  345. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
  346. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-color.d.ts +2 -0
  347. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-image.d.ts +3 -0
  348. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
  349. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-position.d.ts +5 -0
  350. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
  351. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-size.d.ts +11 -0
  352. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-color.d.ts +5 -0
  353. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
  354. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-style.d.ts +12 -0
  355. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-width.d.ts +5 -0
  356. package/node_modules/html2canvas/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
  357. package/node_modules/html2canvas/dist/types/css/property-descriptors/color.d.ts +2 -0
  358. package/node_modules/html2canvas/dist/types/css/property-descriptors/content.d.ts +4 -0
  359. package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-increment.d.ts +7 -0
  360. package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
  361. package/node_modules/html2canvas/dist/types/css/property-descriptors/direction.d.ts +6 -0
  362. package/node_modules/html2canvas/dist/types/css/property-descriptors/display.d.ts +35 -0
  363. package/node_modules/html2canvas/dist/types/css/property-descriptors/duration.d.ts +2 -0
  364. package/node_modules/html2canvas/dist/types/css/property-descriptors/float.d.ts +9 -0
  365. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-family.d.ts +4 -0
  366. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-size.d.ts +2 -0
  367. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-style.d.ts +7 -0
  368. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
  369. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
  370. package/node_modules/html2canvas/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
  371. package/node_modules/html2canvas/dist/types/css/property-descriptors/line-break.d.ts +6 -0
  372. package/node_modules/html2canvas/dist/types/css/property-descriptors/line-height.d.ts +4 -0
  373. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
  374. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
  375. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
  376. package/node_modules/html2canvas/dist/types/css/property-descriptors/margin.d.ts +5 -0
  377. package/node_modules/html2canvas/dist/types/css/property-descriptors/opacity.d.ts +2 -0
  378. package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
  379. package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow.d.ts +9 -0
  380. package/node_modules/html2canvas/dist/types/css/property-descriptors/padding.d.ts +5 -0
  381. package/node_modules/html2canvas/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
  382. package/node_modules/html2canvas/dist/types/css/property-descriptors/position.d.ts +9 -0
  383. package/node_modules/html2canvas/dist/types/css/property-descriptors/quotes.d.ts +8 -0
  384. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-align.d.ts +7 -0
  385. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
  386. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
  387. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
  388. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
  389. package/node_modules/html2canvas/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
  390. package/node_modules/html2canvas/dist/types/css/property-descriptors/transform.d.ts +4 -0
  391. package/node_modules/html2canvas/dist/types/css/property-descriptors/visibility.d.ts +7 -0
  392. package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
  393. package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
  394. package/node_modules/html2canvas/dist/types/css/property-descriptors/word-break.d.ts +7 -0
  395. package/node_modules/html2canvas/dist/types/css/property-descriptors/z-index.d.ts +7 -0
  396. package/node_modules/html2canvas/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +1 -0
  397. package/node_modules/html2canvas/dist/types/css/syntax/parser.d.ts +34 -0
  398. package/node_modules/html2canvas/dist/types/css/syntax/tokenizer.d.ts +94 -0
  399. package/node_modules/html2canvas/dist/types/css/types/__tests__/color-tests.d.ts +1 -0
  400. package/node_modules/html2canvas/dist/types/css/types/__tests__/image-tests.d.ts +1 -0
  401. package/node_modules/html2canvas/dist/types/css/types/angle.d.ts +7 -0
  402. package/node_modules/html2canvas/dist/types/css/types/color.d.ts +11 -0
  403. package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
  404. package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
  405. package/node_modules/html2canvas/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
  406. package/node_modules/html2canvas/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +1 -0
  407. package/node_modules/html2canvas/dist/types/css/types/functions/counter.d.ts +10 -0
  408. package/node_modules/html2canvas/dist/types/css/types/functions/gradient.d.ts +7 -0
  409. package/node_modules/html2canvas/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
  410. package/node_modules/html2canvas/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
  411. package/node_modules/html2canvas/dist/types/css/types/image.d.ts +54 -0
  412. package/node_modules/html2canvas/dist/types/css/types/index.d.ts +1 -0
  413. package/node_modules/html2canvas/dist/types/css/types/length-percentage.d.ts +11 -0
  414. package/node_modules/html2canvas/dist/types/css/types/length.d.ts +4 -0
  415. package/node_modules/html2canvas/dist/types/css/types/time.d.ts +2 -0
  416. package/node_modules/html2canvas/dist/types/dom/__mocks__/document-cloner.d.ts +6 -0
  417. package/node_modules/html2canvas/dist/types/dom/document-cloner.d.ts +45 -0
  418. package/node_modules/html2canvas/dist/types/dom/element-container.d.ts +19 -0
  419. package/node_modules/html2canvas/dist/types/dom/elements/li-element-container.d.ts +6 -0
  420. package/node_modules/html2canvas/dist/types/dom/elements/ol-element-container.d.ts +7 -0
  421. package/node_modules/html2canvas/dist/types/dom/elements/select-element-container.d.ts +6 -0
  422. package/node_modules/html2canvas/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
  423. package/node_modules/html2canvas/dist/types/dom/node-parser.d.ts +23 -0
  424. package/node_modules/html2canvas/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
  425. package/node_modules/html2canvas/dist/types/dom/replaced-elements/iframe-element-container.d.ts +11 -0
  426. package/node_modules/html2canvas/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
  427. package/node_modules/html2canvas/dist/types/dom/replaced-elements/index.d.ts +4 -0
  428. package/node_modules/html2canvas/dist/types/dom/replaced-elements/input-element-container.d.ts +12 -0
  429. package/node_modules/html2canvas/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  430. package/node_modules/html2canvas/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
  431. package/node_modules/html2canvas/dist/types/dom/text-container.d.ts +8 -0
  432. package/node_modules/html2canvas/dist/types/index.d.ts +10 -0
  433. package/node_modules/html2canvas/dist/types/invariant.d.ts +1 -0
  434. package/node_modules/html2canvas/dist/types/render/background.d.ts +16 -0
  435. package/node_modules/html2canvas/dist/types/render/bezier-curve.d.ts +14 -0
  436. package/node_modules/html2canvas/dist/types/render/border.d.ts +6 -0
  437. package/node_modules/html2canvas/dist/types/render/bound-curves.d.ts +32 -0
  438. package/node_modules/html2canvas/dist/types/render/box-sizing.d.ts +4 -0
  439. package/node_modules/html2canvas/dist/types/render/canvas/canvas-renderer.d.ts +53 -0
  440. package/node_modules/html2canvas/dist/types/render/canvas/foreignobject-renderer.d.ts +11 -0
  441. package/node_modules/html2canvas/dist/types/render/effects.d.ts +38 -0
  442. package/node_modules/html2canvas/dist/types/render/font-metrics.d.ts +11 -0
  443. package/node_modules/html2canvas/dist/types/render/path.d.ts +13 -0
  444. package/node_modules/html2canvas/dist/types/render/renderer.d.ts +7 -0
  445. package/node_modules/html2canvas/dist/types/render/stacking-context.d.ts +24 -0
  446. package/node_modules/html2canvas/dist/types/render/vector.d.ts +9 -0
  447. package/node_modules/html2canvas/package.json +124 -0
  448. package/node_modules/html2canvas/tsconfig.json +21 -0
  449. package/node_modules/text-segmentation/CHANGELOG.md +43 -0
  450. package/node_modules/text-segmentation/LICENSE +22 -0
  451. package/node_modules/text-segmentation/README.md +27 -0
  452. package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js +218 -0
  453. package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js.map +1 -0
  454. package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js +6 -0
  455. package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js.map +1 -0
  456. package/node_modules/text-segmentation/dist/lib/index.js +9 -0
  457. package/node_modules/text-segmentation/dist/lib/index.js.map +1 -0
  458. package/node_modules/text-segmentation/dist/text-segmentation.es5.js +384 -0
  459. package/node_modules/text-segmentation/dist/text-segmentation.es5.js.map +1 -0
  460. package/node_modules/text-segmentation/dist/text-segmentation.umd.js +397 -0
  461. package/node_modules/text-segmentation/dist/text-segmentation.umd.js.map +1 -0
  462. package/node_modules/text-segmentation/dist/types/GraphemeBreak.d.ts +21 -0
  463. package/node_modules/text-segmentation/dist/types/grapheme-break-trie.d.ts +2 -0
  464. package/node_modules/text-segmentation/dist/types/index.d.ts +1 -0
  465. package/node_modules/text-segmentation/package.json +55 -0
  466. package/node_modules/text-segmentation/rollup.config.ts +40 -0
  467. package/node_modules/utrie/CHANGELOG.md +32 -0
  468. package/node_modules/utrie/LICENSE +22 -0
  469. package/node_modules/utrie/dist/lib/Trie.js +143 -0
  470. package/node_modules/utrie/dist/lib/Trie.js.map +1 -0
  471. package/node_modules/utrie/dist/lib/TrieBuilder.js +888 -0
  472. package/node_modules/utrie/dist/lib/TrieBuilder.js.map +1 -0
  473. package/node_modules/utrie/dist/lib/Util.js +54 -0
  474. package/node_modules/utrie/dist/lib/Util.js.map +1 -0
  475. package/node_modules/utrie/dist/lib/index.js +10 -0
  476. package/node_modules/utrie/dist/lib/index.js.map +1 -0
  477. package/node_modules/utrie/dist/types/Trie.d.ts +76 -0
  478. package/node_modules/utrie/dist/types/TrieBuilder.d.ts +65 -0
  479. package/node_modules/utrie/dist/types/Util.d.ts +3 -0
  480. package/node_modules/utrie/dist/types/index.d.ts +2 -0
  481. package/node_modules/utrie/dist/utrie.es5.js +1101 -0
  482. package/node_modules/utrie/dist/utrie.es5.js.map +1 -0
  483. package/node_modules/utrie/dist/utrie.umd.js +1114 -0
  484. package/node_modules/utrie/dist/utrie.umd.js.map +1 -0
  485. package/node_modules/utrie/package.json +53 -0
  486. package/node_modules/utrie/rollup.config.ts +40 -0
  487. package/package.json +1 -1
  488. package/packages/cli/bin/groove.js +10 -1
  489. package/packages/cli/package.json +1 -1
  490. package/packages/cli/src/commands/connect.js +116 -205
  491. package/packages/cli/src/commands/disconnect.js +38 -62
  492. package/packages/cli/src/commands/remotes.js +75 -0
  493. package/packages/daemon/package.json +1 -1
  494. package/packages/daemon/src/process.js +56 -1
  495. package/packages/gui/dist/assets/index-BCQY8ojz.css +1 -0
  496. package/packages/gui/dist/assets/index-C5e7KVGN.js +8637 -0
  497. package/packages/gui/dist/index.html +2 -2
  498. package/packages/gui/package.json +2 -1
  499. package/packages/gui/src/components/preview/preview-workspace.jsx +6 -5
  500. package/packages/gui/src/components/preview/screenshot-overlay.jsx +41 -29
  501. package/packages/gui/src/stores/groove.js +6 -2
  502. package/packages/gui/src/views/agents.jsx +15 -1
  503. package/packages/gui/src/views/settings.jsx +104 -26
  504. package/node_modules/@groove-dev/gui/dist/assets/index-BbDDgazC.js +0 -8616
  505. package/node_modules/@groove-dev/gui/dist/assets/index-fhMxiPGp.css +0 -1
  506. package/packages/gui/dist/assets/index-BbDDgazC.js +0 -8616
  507. package/packages/gui/dist/assets/index-fhMxiPGp.css +0 -1
package/CLAUDE.md CHANGED
@@ -263,3 +263,13 @@ Audit-driven release. Multi-agent orchestration system with 7 coordination layer
263
263
  - Dashboard: routing donut, cache panel, context health gauges
264
264
  - Monitor/QC agent mode (stay active, loop)
265
265
  - Distribution: demo video, HN launch, Twitter content
266
+
267
+ <!-- GROOVE:START -->
268
+ ## GROOVE Orchestration (auto-injected)
269
+ Active agents: 1
270
+ | Name | Role | Scope |
271
+ |------|------|-------|
272
+ | backend-9 | backend | packages/cli/src/commands/connect.js, packages/cli/src/commands/disconnect.js, packages/cli/src/commands/remotes.js, packages/cli/bin/groove.js |
273
+ See AGENTS_REGISTRY.md for full agent state.
274
+ **Memory policy:** GROOVE manages project memory automatically. Do not read or write MEMORY.md or .groove/memory/ files directly.
275
+ <!-- GROOVE:END -->
@@ -95,8 +95,8 @@ export class PIIScrubber {
95
95
  },
96
96
  {
97
97
  name: 'home_path',
98
- regex: /(?:\/Users\/[^\s]+|\/home\/[^\s]+|C:\\Users\\[^\s]+)/g,
99
- replacement: '[FILE_PATH]',
98
+ regex: /(?:\/Users\/[^\/\s]+|\/home\/[^\/\s]+|C:\\Users\\[^\\\s]+)([\/\\][^\s]*)?/g,
99
+ replacement: null,
100
100
  },
101
101
  {
102
102
  name: 'base64_secret',
@@ -116,6 +116,8 @@ export class PIIScrubber {
116
116
  const digits = (g1 + g2 + g3 + g4);
117
117
  return luhnCheck(digits) ? '[CREDIT_CARD]' : match;
118
118
  });
119
+ } else if (pattern.name === 'home_path') {
120
+ result = result.replace(pattern.regex, (_match, relPath) => '~' + (relPath || ''));
119
121
  } else {
120
122
  result = result.replace(pattern.regex, pattern.replacement);
121
123
  }
@@ -1,8 +1,12 @@
1
1
  // FSL-1.1-Apache-2.0 — see LICENSE
2
2
 
3
+ const ERROR_SIGNAL_RE = /\b(?:error|Error|ERROR|exception|Exception|EXCEPTION|failed|FAILED|exit code [1-9]|ENOENT|EACCES|EPERM|TypeError|ReferenceError|SyntaxError|Cannot find|Module not found|Command failed|non-zero exit)\b/;
4
+ const FIX_SIGNAL_RE = /\b(?:fix|correcting|I see the issue|let me fix|the (?:issue|problem|bug) (?:is|was)|instead I should|my mistake)\b/i;
5
+
3
6
  export class StepClassifier {
4
7
  constructor() {
5
8
  this.hasAgentActed = false;
9
+ this._lastStepType = null;
6
10
  }
7
11
 
8
12
  classifyUserMessage(text) {
@@ -31,6 +35,19 @@ export class StepClassifier {
31
35
  if (step.type === 'action') {
32
36
  this.hasAgentActed = true;
33
37
  }
38
+
39
+ const content = step.content || '';
40
+
41
+ if ((step.type === 'action' || step.type === 'observation') && ERROR_SIGNAL_RE.test(content)) {
42
+ step.type = 'error';
43
+ }
44
+
45
+ if (step.type === 'thought' && this._lastStepType === 'correction' && FIX_SIGNAL_RE.test(content)) {
46
+ step.correction_context = true;
47
+ }
48
+
49
+ this._lastStepType = step.type;
50
+ return step;
34
51
  }
35
52
 
36
53
  static detectErrorRecovery(steps) {
@@ -10,6 +10,8 @@ import { SessionAttestation } from './session-attestation.js';
10
10
  import { TransmissionQueue } from './transmission-queue.js';
11
11
  import { CHUNK_TIMEOUT_MS, CENTRAL_COMMAND_URL } from '../shared/constants.js';
12
12
 
13
+ const OFFLINE_RETRY_INTERVAL_MS = 60_000;
14
+
13
15
  export class TrajectoryCapture {
14
16
  constructor(options = {}) {
15
17
  this._centralCommandUrl = options.centralCommandUrl || CENTRAL_COMMAND_URL;
@@ -18,6 +20,7 @@ export class TrajectoryCapture {
18
20
  this._scrubber = null;
19
21
  this._attestation = null;
20
22
  this._transmissionQueue = null;
23
+ this._offlineRetryTimer = null;
21
24
  this._contexts = new Map();
22
25
  }
23
26
 
@@ -31,6 +34,9 @@ export class TrajectoryCapture {
31
34
  this._attestation = new SessionAttestation(this._centralCommandUrl);
32
35
  this._transmissionQueue = new TransmissionQueue(this._centralCommandUrl);
33
36
  this._transmissionQueue.start();
37
+ this._offlineRetryTimer = setInterval(() => {
38
+ this._retryOfflineQueue();
39
+ }, OFFLINE_RETRY_INTERVAL_MS);
34
40
  }
35
41
 
36
42
  async onAgentSpawn(agentId, provider, model, role, teamSize) {
@@ -103,6 +109,12 @@ export class TrajectoryCapture {
103
109
  this._processStep(agentId, ctx, event);
104
110
  }
105
111
 
112
+ if ((!ctx.metadata.model_engine || ctx.metadata.model_engine === 'auto') &&
113
+ typeof ctx.parser.extractModel === 'function') {
114
+ const resolved = ctx.parser.extractModel(jsonEvent);
115
+ if (resolved) ctx.metadata.model_engine = resolved;
116
+ }
117
+
106
118
  const tokens = ctx.parser.extractTokens(jsonEvent);
107
119
  if (tokens) {
108
120
  ctx.totalTokens += (tokens.input || 0) + (tokens.output || 0);
@@ -139,6 +151,7 @@ export class TrajectoryCapture {
139
151
  }
140
152
 
141
153
  async shutdown() {
154
+ if (this._offlineRetryTimer) clearInterval(this._offlineRetryTimer);
142
155
  for (const agentId of this._contexts.keys()) {
143
156
  await this._closeAgent(agentId, 'SHUTDOWN');
144
157
  }
@@ -148,20 +161,25 @@ export class TrajectoryCapture {
148
161
  }
149
162
 
150
163
  _processStep(agentId, ctx, event) {
151
- ctx.classifier.onStep(event);
164
+ const classified = ctx.classifier.onStep(event);
165
+ const ev = classified || event;
152
166
 
153
- if (event.content && typeof event.content === 'string') {
154
- event.content = this._scrubber.scrub(event.content);
167
+ if (ev.content && typeof ev.content === 'string') {
168
+ ev.content = this._scrubber.scrub(ev.content);
169
+ }
170
+
171
+ if (ev.arguments && typeof ev.arguments === 'object') {
172
+ ev.arguments = this._scrubObject(ev.arguments);
155
173
  }
156
174
 
157
175
  const step = {
158
176
  step: ++ctx.stepCount,
159
- type: event.type,
177
+ type: ev.type,
160
178
  timestamp: Date.now() / 1000,
161
- ...event,
179
+ ...ev,
162
180
  };
163
181
 
164
- if (event.type === 'error') ctx.errorsEncountered++;
182
+ if (ev.type === 'error') ctx.errorsEncountered++;
165
183
  ctx.allSteps.push(step);
166
184
 
167
185
  const envelope = ctx.builder.addStep(step);
@@ -171,9 +189,29 @@ export class TrajectoryCapture {
171
189
  }
172
190
  }
173
191
 
192
+ _computeQuality(ctx) {
193
+ let score = 50;
194
+ const types = new Set();
195
+ let hasCorrection = false;
196
+
197
+ for (const step of ctx.allSteps) {
198
+ if (step.type) types.add(step.type);
199
+ if (step.type === 'correction') hasCorrection = true;
200
+ }
201
+
202
+ if (hasCorrection) score += 10;
203
+ if (ctx.coordinationEvents > 0) score += 10;
204
+ if (ctx.errorsRecovered > 0) score += 10;
205
+ if (ctx.stepCount >= 20) score += 10;
206
+ if (types.size >= 3) score += 10;
207
+
208
+ return Math.min(score, 100);
209
+ }
210
+
174
211
  _flushContext(agentId) {
175
212
  const ctx = this._contexts.get(agentId);
176
213
  if (!ctx) return;
214
+ ctx.metadata.session_quality = this._computeQuality(ctx);
177
215
  const envelope = ctx.builder.flush();
178
216
  if (envelope) {
179
217
  this._signAndTransmit(ctx.sessionId, envelope);
@@ -192,8 +230,11 @@ export class TrajectoryCapture {
192
230
  const hasRecovery = StepClassifier.detectErrorRecovery(ctx.allSteps);
193
231
  if (hasRecovery) ctx.errorsRecovered++;
194
232
 
233
+ ctx.metadata.session_quality = this._computeQuality(ctx);
234
+
195
235
  const closeEnvelope = ctx.builder.buildSessionClose({
196
236
  status,
237
+ session_quality: ctx.metadata.session_quality,
197
238
  user_interventions: StepClassifier.countUserInterventions(ctx.allSteps),
198
239
  total_steps: ctx.stepCount,
199
240
  total_chunks: ctx.chunkCount,
@@ -207,6 +248,12 @@ export class TrajectoryCapture {
207
248
 
208
249
  this._signAndTransmit(ctx.sessionId, closeEnvelope);
209
250
 
251
+ try {
252
+ await this._transmissionQueue.waitForDrain();
253
+ } catch {
254
+ // drain timeout
255
+ }
256
+
210
257
  try {
211
258
  await this._attestation.closeSession(ctx.sessionId);
212
259
  } catch {
@@ -216,6 +263,33 @@ export class TrajectoryCapture {
216
263
  this._contexts.delete(agentId);
217
264
  }
218
265
 
266
+ async _retryOfflineQueue() {
267
+ if (!this._enabled || !this._transmissionQueue || this._transmissionQueue.offlineQueueSize === 0) return;
268
+ try {
269
+ const res = await fetch(`${this._centralCommandUrl}/health`, {
270
+ signal: AbortSignal.timeout(5_000),
271
+ });
272
+ if (res.ok) {
273
+ this._transmissionQueue.replayOfflineQueue(this._attestation);
274
+ }
275
+ } catch {
276
+ // still unreachable
277
+ }
278
+ }
279
+
280
+ _scrubObject(obj) {
281
+ if (typeof obj === 'string') return this._scrubber.scrub(obj);
282
+ if (Array.isArray(obj)) return obj.map((v) => this._scrubObject(v));
283
+ if (obj && typeof obj === 'object') {
284
+ const out = {};
285
+ for (const [k, v] of Object.entries(obj)) {
286
+ out[k] = this._scrubObject(v);
287
+ }
288
+ return out;
289
+ }
290
+ return obj;
291
+ }
292
+
219
293
  _signAndTransmit(sessionId, envelope) {
220
294
  try {
221
295
  const signed = this._attestation.signEnvelope(sessionId, envelope);
@@ -16,6 +16,10 @@ export class TransmissionQueue {
16
16
  }
17
17
  }
18
18
 
19
+ get offlineQueueSize() {
20
+ return this._offlineQueue.length;
21
+ }
22
+
19
23
  enqueue(signedEnvelope) {
20
24
  if (this._queue.length >= this._maxSize) return;
21
25
  if (signedEnvelope?.attestation?.session_hmac === 'OFFLINE') {
@@ -46,6 +50,13 @@ export class TransmissionQueue {
46
50
  this._kick();
47
51
  }
48
52
 
53
+ async waitForDrain() {
54
+ while (this._queue.length > 0 || this._drainPromise) {
55
+ if (this._drainPromise) await this._drainPromise;
56
+ else await new Promise((r) => setTimeout(r, 50));
57
+ }
58
+ }
59
+
49
60
  async stop() {
50
61
  this._running = false;
51
62
  if (this._drainPromise) {
@@ -73,9 +73,9 @@ describe('PIIScrubber', () => {
73
73
  assert.equal(scrubber.scrub(input), 'hash: [API_KEY]');
74
74
  });
75
75
 
76
- it('scrubs home directory paths', () => {
76
+ it('scrubs home directory paths preserving relative path', () => {
77
77
  const input = 'file at /Users/john/Documents/secret.txt';
78
- assert.equal(scrubber.scrub(input), 'file at [FILE_PATH]');
78
+ assert.equal(scrubber.scrub(input), 'file at ~/Documents/secret.txt');
79
79
  });
80
80
 
81
81
  it('scrubs URL-encoded emails', () => {
@@ -95,10 +95,10 @@ describe('PIIScrubber', () => {
95
95
  assert.ok(!result.includes('eyJhbGciOi'));
96
96
  });
97
97
 
98
- it('scrubs file paths without trailing slash', () => {
98
+ it('scrubs file paths preserving relative path', () => {
99
99
  const input = 'reading /home/alice/project/secret.key now';
100
100
  const result = scrubber.scrub(input);
101
- assert.ok(result.includes('[FILE_PATH]'));
101
+ assert.equal(result, 'reading ~/project/secret.key now');
102
102
  assert.ok(!result.includes('/home/alice'));
103
103
  });
104
104
 
@@ -121,6 +121,16 @@ describe('PIIScrubber', () => {
121
121
  assert.equal(scrubber.scrub(''), '');
122
122
  });
123
123
 
124
+ it('scrubs Windows home paths preserving relative path', () => {
125
+ const input = 'file at C:\\Users\\bob\\Desktop\\project\\app.js';
126
+ assert.equal(scrubber.scrub(input), 'file at ~\\Desktop\\project\\app.js');
127
+ });
128
+
129
+ it('scrubs home path with no trailing path', () => {
130
+ const input = 'cd /Users/john';
131
+ assert.equal(scrubber.scrub(input), 'cd ~');
132
+ });
133
+
124
134
  it('patterns do not interfere with each other', () => {
125
135
  const input = 'user@example.com called 555-123-4567 from 192.168.1.1';
126
136
  const result = scrubber.scrub(input);
@@ -85,4 +85,51 @@ describe('StepClassifier', () => {
85
85
  ];
86
86
  assert.equal(StepClassifier.countUserInterventions(steps), 0);
87
87
  });
88
+
89
+ it('reclassifies action with error content to error', () => {
90
+ const classifier = new StepClassifier();
91
+ const step = { type: 'action', content: 'Command failed with exit code 1' };
92
+ const result = classifier.onStep(step);
93
+ assert.equal(result.type, 'error');
94
+ });
95
+
96
+ it('reclassifies observation with error content to error', () => {
97
+ const classifier = new StepClassifier();
98
+ const step = { type: 'observation', content: 'TypeError: cannot read properties of undefined' };
99
+ const result = classifier.onStep(step);
100
+ assert.equal(result.type, 'error');
101
+ });
102
+
103
+ it('does not reclassify thought with error content', () => {
104
+ const classifier = new StepClassifier();
105
+ const step = { type: 'thought', content: 'I see the Error and will fix it' };
106
+ const result = classifier.onStep(step);
107
+ assert.equal(result.type, 'thought');
108
+ });
109
+
110
+ it('marks thought after correction as correction_context', () => {
111
+ const classifier = new StepClassifier();
112
+ classifier.onStep({ type: 'action' });
113
+ classifier.onStep({ type: 'correction', content: 'no, fix the bug' });
114
+ const step = { type: 'thought', content: 'I see the issue, let me fix it' };
115
+ const result = classifier.onStep(step);
116
+ assert.equal(result.type, 'thought');
117
+ assert.equal(result.correction_context, true);
118
+ });
119
+
120
+ it('does not mark thought as correction_context without prior correction', () => {
121
+ const classifier = new StepClassifier();
122
+ classifier.onStep({ type: 'action', content: 'running test' });
123
+ const step = { type: 'thought', content: 'let me fix this' };
124
+ const result = classifier.onStep(step);
125
+ assert.equal(result.correction_context, undefined);
126
+ });
127
+
128
+ it('returns the step from onStep', () => {
129
+ const classifier = new StepClassifier();
130
+ const step = { type: 'action', content: 'hello' };
131
+ const result = classifier.onStep(step);
132
+ assert.ok(result);
133
+ assert.equal(result.type, 'action');
134
+ });
88
135
  });
@@ -0,0 +1,33 @@
1
+ // FSL-1.1-Apache-2.0 — see LICENSE
2
+
3
+ import { describe, it } from 'node:test';
4
+ import assert from 'node:assert/strict';
5
+ import { TransmissionQueue } from '../../client/transmission-queue.js';
6
+
7
+ describe('TransmissionQueue', () => {
8
+ it('waitForDrain resolves immediately when queue is empty', async () => {
9
+ const queue = new TransmissionQueue('http://localhost:9999');
10
+ await queue.waitForDrain();
11
+ assert.ok(true);
12
+ });
13
+
14
+ it('waitForDrain waits for active drain to complete', async () => {
15
+ const queue = new TransmissionQueue('http://localhost:9999');
16
+ queue._queue.push({ session_id: 'test' });
17
+ const drain = Promise.resolve().then(() => {
18
+ queue._queue.length = 0;
19
+ });
20
+ queue._drainPromise = drain.finally(() => {
21
+ queue._drainPromise = null;
22
+ });
23
+ await queue.waitForDrain();
24
+ assert.equal(queue._queue.length, 0);
25
+ });
26
+
27
+ it('offlineQueueSize tracks offline envelopes', () => {
28
+ const queue = new TransmissionQueue('http://localhost:9999');
29
+ assert.equal(queue.offlineQueueSize, 0);
30
+ queue.enqueue({ session_id: 'test', attestation: { session_hmac: 'OFFLINE' } });
31
+ assert.equal(queue.offlineQueueSize, 1);
32
+ });
33
+ });
@@ -18,6 +18,7 @@ import { providers, setKey } from '../src/commands/providers.js';
18
18
  import { configShow, configSet } from '../src/commands/config.js';
19
19
  import { connect } from '../src/commands/connect.js';
20
20
  import { disconnect } from '../src/commands/disconnect.js';
21
+ import { remotes } from '../src/commands/remotes.js';
21
22
  import { audit } from '../src/commands/audit.js';
22
23
  import { federationPair, federationUnpair, federationList, federationStatus } from '../src/commands/federation.js';
23
24
  import { createRequire } from 'node:module';
@@ -108,13 +109,21 @@ program
108
109
  .description('Connect to a remote GROOVE daemon via SSH tunnel')
109
110
  .option('-i, --identity <keyfile>', 'SSH private key file')
110
111
  .option('--no-browser', 'Don\'t open browser automatically')
112
+ .option('-p, --port <port>', 'SSH port', '22')
113
+ .option('--project-dir <path>', 'Remote working directory')
114
+ .option('--auto-connect', 'Save with autoConnect (reconnect on daemon start)')
111
115
  .action(connect);
112
116
 
113
117
  program
114
- .command('disconnect')
118
+ .command('disconnect [target]')
115
119
  .description('Disconnect from remote GROOVE daemon')
116
120
  .action(disconnect);
117
121
 
122
+ program
123
+ .command('remotes')
124
+ .description('List saved remote connections')
125
+ .action(remotes);
126
+
118
127
  // Audit
119
128
  program
120
129
  .command('audit')
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.27.85",
3
+ "version": "0.27.87",
4
4
  "description": "GROOVE CLI — manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",