groove-dev 0.27.86 → 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.
- package/CLAUDE.md +10 -0
- package/moe-training/client/scrubber.js +4 -2
- package/moe-training/client/step-classifier.js +17 -0
- package/moe-training/client/trajectory-capture.js +80 -6
- package/moe-training/client/transmission-queue.js +11 -0
- package/moe-training/test/client/scrubber.test.js +14 -4
- package/moe-training/test/client/step-classifier.test.js +47 -0
- package/moe-training/test/client/transmission-queue.test.js +33 -0
- package/node_modules/@groove-dev/cli/bin/groove.js +10 -1
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/cli/src/commands/connect.js +116 -205
- package/node_modules/@groove-dev/cli/src/commands/disconnect.js +38 -62
- package/node_modules/@groove-dev/cli/src/commands/remotes.js +75 -0
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/process.js +56 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-BCQY8ojz.css +1 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-C5e7KVGN.js +8637 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +2 -1
- package/node_modules/@groove-dev/gui/src/components/preview/preview-workspace.jsx +6 -5
- package/node_modules/@groove-dev/gui/src/components/preview/screenshot-overlay.jsx +41 -29
- package/node_modules/@groove-dev/gui/src/stores/groove.js +6 -2
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +15 -1
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +104 -26
- package/node_modules/base64-arraybuffer/CHANGELOG.md +28 -0
- package/node_modules/base64-arraybuffer/LICENSE +22 -0
- package/node_modules/base64-arraybuffer/README.md +27 -0
- package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js +50 -0
- package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js.map +1 -0
- package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js +61 -0
- package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js.map +1 -0
- package/node_modules/base64-arraybuffer/dist/lib/index.js +48 -0
- package/node_modules/base64-arraybuffer/dist/lib/index.js.map +1 -0
- package/node_modules/base64-arraybuffer/dist/types/index.d.ts +2 -0
- package/node_modules/base64-arraybuffer/package.json +54 -0
- package/node_modules/base64-arraybuffer/rollup.config.ts +40 -0
- package/node_modules/css-line-break/CHANGELOG.md +58 -0
- package/node_modules/css-line-break/LICENSE +22 -0
- package/node_modules/css-line-break/README.md +66 -0
- package/node_modules/css-line-break/dist/css-line-break.es5.js +706 -0
- package/node_modules/css-line-break/dist/css-line-break.es5.js.map +1 -0
- package/node_modules/css-line-break/dist/css-line-break.umd.js +718 -0
- package/node_modules/css-line-break/dist/css-line-break.umd.js.map +1 -0
- package/node_modules/css-line-break/dist/lib/LineBreak.js +516 -0
- package/node_modules/css-line-break/dist/lib/LineBreak.js.map +1 -0
- package/node_modules/css-line-break/dist/lib/Util.js +109 -0
- package/node_modules/css-line-break/dist/lib/Util.js.map +1 -0
- package/node_modules/css-line-break/dist/lib/index.js +9 -0
- package/node_modules/css-line-break/dist/lib/index.js.map +1 -0
- package/node_modules/css-line-break/dist/lib/linebreak-trie.js +6 -0
- package/node_modules/css-line-break/dist/lib/linebreak-trie.js.map +1 -0
- package/node_modules/css-line-break/dist/types/LineBreak.d.ts +38 -0
- package/node_modules/css-line-break/dist/types/Util.d.ts +5 -0
- package/node_modules/css-line-break/dist/types/index.d.ts +2 -0
- package/node_modules/css-line-break/dist/types/linebreak-trie.d.ts +2 -0
- package/node_modules/css-line-break/package.json +61 -0
- package/node_modules/css-line-break/rollup.config.ts +40 -0
- package/node_modules/html2canvas/CHANGELOG.md +566 -0
- package/node_modules/html2canvas/LICENSE +22 -0
- package/node_modules/html2canvas/README.md +73 -0
- package/node_modules/html2canvas/dist/html2canvas.esm.js +7822 -0
- package/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
- package/node_modules/html2canvas/dist/html2canvas.js +7830 -0
- package/node_modules/html2canvas/dist/html2canvas.js.map +1 -0
- package/node_modules/html2canvas/dist/html2canvas.min.js +20 -0
- package/node_modules/html2canvas/dist/lib/__tests__/index.js +144 -0
- package/node_modules/html2canvas/dist/lib/__tests__/index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js +10 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js +22 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js +12 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js +24 -0
- package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js +420 -0
- package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js +28 -0
- package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/bitwise.js +6 -0
- package/node_modules/html2canvas/dist/lib/core/bitwise.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/cache-storage.js +198 -0
- package/node_modules/html2canvas/dist/lib/core/cache-storage.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/context.js +18 -0
- package/node_modules/html2canvas/dist/lib/core/context.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/debugger.js +25 -0
- package/node_modules/html2canvas/dist/lib/core/debugger.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/features.js +193 -0
- package/node_modules/html2canvas/dist/lib/core/features.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/logger.js +88 -0
- package/node_modules/html2canvas/dist/lib/core/logger.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/core/util.js +5 -0
- package/node_modules/html2canvas/dist/lib/core/util.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js +3 -0
- package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js +3 -0
- package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/index.js +216 -0
- package/node_modules/html2canvas/dist/lib/css/index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js +9 -0
- package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/layout/bounds.js +42 -0
- package/node_modules/html2canvas/dist/lib/css/layout/bounds.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/layout/text.js +137 -0
- package/node_modules/html2canvas/dist/lib/css/layout/text.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js +48 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js +25 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js +88 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js +94 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js +18 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js +24 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js +11 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js +24 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js +24 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js +17 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js +36 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js +24 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js +15 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js +18 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js +27 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js +21 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js +55 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js +11 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js +20 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js +31 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js +27 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js +19 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js +82 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js +15 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js +23 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js +33 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js +11 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js +21 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js +14 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js +26 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js +22 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js +24 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js +25 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js +17 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js +19 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js +123 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js +14 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js +17 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js +19 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js +28 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js +15 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js +34 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js +23 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js +42 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js +22 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js +11 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js +29 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js +47 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js +21 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js +25 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js +37 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js +21 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +11 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +17 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js +27 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js +20 -0
- package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js +34 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/parser.js +147 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/parser.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js +630 -0
- package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js +66 -0
- package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js +233 -0
- package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/angle.js +81 -0
- package/node_modules/html2canvas/dist/lib/css/types/angle.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/color.js +288 -0
- package/node_modules/html2canvas/dist/lib/css/types/color.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js +33 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js +84 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js +60 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js +68 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js +374 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js +165 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js +28 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js +91 -0
- package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/image.js +53 -0
- package/node_modules/html2canvas/dist/lib/css/types/image.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/index.js +3 -0
- package/node_modules/html2canvas/dist/lib/css/types/index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js +52 -0
- package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/length.js +8 -0
- package/node_modules/html2canvas/dist/lib/css/types/length.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/css/types/time.js +18 -0
- package/node_modules/html2canvas/dist/lib/css/types/time.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js +24 -0
- package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/document-cloner.js +530 -0
- package/node_modules/html2canvas/dist/lib/dom/document-cloner.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/element-container.js +35 -0
- package/node_modules/html2canvas/dist/lib/dom/element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js +30 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js +31 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js +31 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js +30 -0
- package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/node-parser.js +142 -0
- package/node_modules/html2canvas/dist/lib/dom/node-parser.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js +32 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js +55 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js +33 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js +3 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js +102 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js +38 -0
- package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/dom/text-container.js +32 -0
- package/node_modules/html2canvas/dist/lib/dom/text-container.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/index.js +181 -0
- package/node_modules/html2canvas/dist/lib/index.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/invariant.js +10 -0
- package/node_modules/html2canvas/dist/lib/invariant.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/background.js +187 -0
- package/node_modules/html2canvas/dist/lib/render/background.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/bezier-curve.js +36 -0
- package/node_modules/html2canvas/dist/lib/render/bezier-curve.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/border.js +105 -0
- package/node_modules/html2canvas/dist/lib/render/border.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/bound-curves.js +190 -0
- package/node_modules/html2canvas/dist/lib/render/bound-curves.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/box-sizing.js +21 -0
- package/node_modules/html2canvas/dist/lib/render/box-sizing.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js +1030 -0
- package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js +108 -0
- package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/effects.js +41 -0
- package/node_modules/html2canvas/dist/lib/render/effects.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/font-metrics.js +55 -0
- package/node_modules/html2canvas/dist/lib/render/font-metrics.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/path.js +27 -0
- package/node_modules/html2canvas/dist/lib/render/path.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/renderer.js +12 -0
- package/node_modules/html2canvas/dist/lib/render/renderer.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/stacking-context.js +172 -0
- package/node_modules/html2canvas/dist/lib/render/stacking-context.js.map +1 -0
- package/node_modules/html2canvas/dist/lib/render/vector.js +18 -0
- package/node_modules/html2canvas/dist/lib/render/vector.js.map +1 -0
- package/node_modules/html2canvas/dist/types/__tests__/index.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/core/__mocks__/cache-storage.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/core/__mocks__/context.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/core/__mocks__/features.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/core/__mocks__/logger.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/core/__tests__/cache-storage.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/core/__tests__/logger.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/core/bitwise.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/core/cache-storage.d.ts +26 -0
- package/node_modules/html2canvas/dist/types/core/context.d.ts +15 -0
- package/node_modules/html2canvas/dist/types/core/debugger.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/core/features.d.ts +12 -0
- package/node_modules/html2canvas/dist/types/core/logger.d.ts +18 -0
- package/node_modules/html2canvas/dist/types/core/util.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/IPropertyDescriptor.d.ts +36 -0
- package/node_modules/html2canvas/dist/types/css/ITypeDescriptor.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/css/index.d.ts +132 -0
- package/node_modules/html2canvas/dist/types/css/layout/__mocks__/bounds.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/layout/bounds.d.ts +14 -0
- package/node_modules/html2canvas/dist/types/css/layout/text.d.ts +10 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/font-family.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-color.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-image.d.ts +3 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-position.d.ts +5 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/background-size.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/border-color.d.ts +5 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/border-style.d.ts +12 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/border-width.d.ts +5 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/color.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/content.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-increment.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/direction.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/display.d.ts +35 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/duration.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/float.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/font-family.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/font-size.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/font-style.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/line-break.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/line-height.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/margin.d.ts +5 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/opacity.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/padding.d.ts +5 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/position.d.ts +9 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/quotes.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/text-align.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/transform.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/visibility.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/word-break.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/property-descriptors/z-index.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/syntax/parser.d.ts +34 -0
- package/node_modules/html2canvas/dist/types/css/syntax/tokenizer.d.ts +94 -0
- package/node_modules/html2canvas/dist/types/css/types/__tests__/color-tests.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/types/__tests__/image-tests.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/types/angle.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/types/color.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/counter.d.ts +10 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/gradient.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
- package/node_modules/html2canvas/dist/types/css/types/image.d.ts +54 -0
- package/node_modules/html2canvas/dist/types/css/types/index.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/css/types/length-percentage.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/css/types/length.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/css/types/time.d.ts +2 -0
- package/node_modules/html2canvas/dist/types/dom/__mocks__/document-cloner.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/dom/document-cloner.d.ts +45 -0
- package/node_modules/html2canvas/dist/types/dom/element-container.d.ts +19 -0
- package/node_modules/html2canvas/dist/types/dom/elements/li-element-container.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/dom/elements/ol-element-container.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/dom/elements/select-element-container.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/dom/node-parser.d.ts +23 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/iframe-element-container.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/index.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/input-element-container.d.ts +12 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
- package/node_modules/html2canvas/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/dom/text-container.d.ts +8 -0
- package/node_modules/html2canvas/dist/types/index.d.ts +10 -0
- package/node_modules/html2canvas/dist/types/invariant.d.ts +1 -0
- package/node_modules/html2canvas/dist/types/render/background.d.ts +16 -0
- package/node_modules/html2canvas/dist/types/render/bezier-curve.d.ts +14 -0
- package/node_modules/html2canvas/dist/types/render/border.d.ts +6 -0
- package/node_modules/html2canvas/dist/types/render/bound-curves.d.ts +32 -0
- package/node_modules/html2canvas/dist/types/render/box-sizing.d.ts +4 -0
- package/node_modules/html2canvas/dist/types/render/canvas/canvas-renderer.d.ts +53 -0
- package/node_modules/html2canvas/dist/types/render/canvas/foreignobject-renderer.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/render/effects.d.ts +38 -0
- package/node_modules/html2canvas/dist/types/render/font-metrics.d.ts +11 -0
- package/node_modules/html2canvas/dist/types/render/path.d.ts +13 -0
- package/node_modules/html2canvas/dist/types/render/renderer.d.ts +7 -0
- package/node_modules/html2canvas/dist/types/render/stacking-context.d.ts +24 -0
- package/node_modules/html2canvas/dist/types/render/vector.d.ts +9 -0
- package/node_modules/html2canvas/package.json +124 -0
- package/node_modules/html2canvas/tsconfig.json +21 -0
- package/node_modules/text-segmentation/CHANGELOG.md +43 -0
- package/node_modules/text-segmentation/LICENSE +22 -0
- package/node_modules/text-segmentation/README.md +27 -0
- package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js +218 -0
- package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js.map +1 -0
- package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js +6 -0
- package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js.map +1 -0
- package/node_modules/text-segmentation/dist/lib/index.js +9 -0
- package/node_modules/text-segmentation/dist/lib/index.js.map +1 -0
- package/node_modules/text-segmentation/dist/text-segmentation.es5.js +384 -0
- package/node_modules/text-segmentation/dist/text-segmentation.es5.js.map +1 -0
- package/node_modules/text-segmentation/dist/text-segmentation.umd.js +397 -0
- package/node_modules/text-segmentation/dist/text-segmentation.umd.js.map +1 -0
- package/node_modules/text-segmentation/dist/types/GraphemeBreak.d.ts +21 -0
- package/node_modules/text-segmentation/dist/types/grapheme-break-trie.d.ts +2 -0
- package/node_modules/text-segmentation/dist/types/index.d.ts +1 -0
- package/node_modules/text-segmentation/package.json +55 -0
- package/node_modules/text-segmentation/rollup.config.ts +40 -0
- package/node_modules/utrie/CHANGELOG.md +32 -0
- package/node_modules/utrie/LICENSE +22 -0
- package/node_modules/utrie/dist/lib/Trie.js +143 -0
- package/node_modules/utrie/dist/lib/Trie.js.map +1 -0
- package/node_modules/utrie/dist/lib/TrieBuilder.js +888 -0
- package/node_modules/utrie/dist/lib/TrieBuilder.js.map +1 -0
- package/node_modules/utrie/dist/lib/Util.js +54 -0
- package/node_modules/utrie/dist/lib/Util.js.map +1 -0
- package/node_modules/utrie/dist/lib/index.js +10 -0
- package/node_modules/utrie/dist/lib/index.js.map +1 -0
- package/node_modules/utrie/dist/types/Trie.d.ts +76 -0
- package/node_modules/utrie/dist/types/TrieBuilder.d.ts +65 -0
- package/node_modules/utrie/dist/types/Util.d.ts +3 -0
- package/node_modules/utrie/dist/types/index.d.ts +2 -0
- package/node_modules/utrie/dist/utrie.es5.js +1101 -0
- package/node_modules/utrie/dist/utrie.es5.js.map +1 -0
- package/node_modules/utrie/dist/utrie.umd.js +1114 -0
- package/node_modules/utrie/dist/utrie.umd.js.map +1 -0
- package/node_modules/utrie/package.json +53 -0
- package/node_modules/utrie/rollup.config.ts +40 -0
- package/package.json +1 -1
- package/packages/cli/bin/groove.js +10 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/commands/connect.js +116 -205
- package/packages/cli/src/commands/disconnect.js +38 -62
- package/packages/cli/src/commands/remotes.js +75 -0
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/process.js +56 -1
- package/packages/gui/dist/assets/index-BCQY8ojz.css +1 -0
- package/packages/gui/dist/assets/index-C5e7KVGN.js +8637 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +2 -1
- package/packages/gui/src/components/preview/preview-workspace.jsx +6 -5
- package/packages/gui/src/components/preview/screenshot-overlay.jsx +41 -29
- package/packages/gui/src/stores/groove.js +6 -2
- package/packages/gui/src/views/agents.jsx +15 -1
- package/packages/gui/src/views/settings.jsx +104 -26
- package/node_modules/@groove-dev/gui/dist/assets/index-BbDDgazC.js +0 -8616
- package/node_modules/@groove-dev/gui/dist/assets/index-fhMxiPGp.css +0 -1
- package/packages/gui/dist/assets/index-BbDDgazC.js +0 -8616
- 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\/[
|
|
99
|
-
replacement:
|
|
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 (
|
|
154
|
-
|
|
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:
|
|
177
|
+
type: ev.type,
|
|
160
178
|
timestamp: Date.now() / 1000,
|
|
161
|
-
...
|
|
179
|
+
...ev,
|
|
162
180
|
};
|
|
163
181
|
|
|
164
|
-
if (
|
|
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
|
|
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
|
|
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.
|
|
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')
|