groove-dev 0.27.86 → 0.27.88
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 +11 -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/api.js +115 -7
- package/node_modules/@groove-dev/daemon/src/conversations.js +29 -3
- package/node_modules/@groove-dev/daemon/src/process.js +56 -1
- package/node_modules/@groove-dev/daemon/src/providers/codex.js +28 -10
- package/node_modules/@groove-dev/daemon/src/registry.js +30 -0
- package/node_modules/@groove-dev/daemon/src/validate.js +23 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-BSqk8cbI.css +1 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-B_igwWvq.js +8642 -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/agents/agent-file-tree.jsx +254 -0
- package/node_modules/@groove-dev/gui/src/components/agents/code-review.jsx +177 -0
- package/node_modules/@groove-dev/gui/src/components/agents/diff-viewer.jsx +148 -0
- package/node_modules/@groove-dev/gui/src/components/agents/workspace-mode.jsx +377 -0
- package/node_modules/@groove-dev/gui/src/components/chat/chat-input.jsx +117 -40
- package/node_modules/@groove-dev/gui/src/components/chat/chat-messages.jsx +10 -13
- package/node_modules/@groove-dev/gui/src/components/chat/chat-view.jsx +26 -1
- package/node_modules/@groove-dev/gui/src/components/chat/conversation-list.jsx +14 -14
- package/node_modules/@groove-dev/gui/src/components/chat/model-picker.jsx +5 -0
- 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 +138 -3
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +36 -3
- 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/api.js +115 -7
- package/packages/daemon/src/conversations.js +29 -3
- package/packages/daemon/src/process.js +56 -1
- package/packages/daemon/src/providers/codex.js +28 -10
- package/packages/daemon/src/registry.js +30 -0
- package/packages/daemon/src/validate.js +23 -0
- package/packages/gui/dist/assets/index-BSqk8cbI.css +1 -0
- package/packages/gui/dist/assets/index-B_igwWvq.js +8642 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +2 -1
- package/packages/gui/src/components/agents/agent-file-tree.jsx +254 -0
- package/packages/gui/src/components/agents/code-review.jsx +177 -0
- package/packages/gui/src/components/agents/diff-viewer.jsx +148 -0
- package/packages/gui/src/components/agents/workspace-mode.jsx +377 -0
- package/packages/gui/src/components/chat/chat-input.jsx +117 -40
- package/packages/gui/src/components/chat/chat-messages.jsx +10 -13
- package/packages/gui/src/components/chat/chat-view.jsx +26 -1
- package/packages/gui/src/components/chat/conversation-list.jsx +14 -14
- package/packages/gui/src/components/chat/model-picker.jsx +5 -0
- 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 +138 -3
- package/packages/gui/src/views/agents.jsx +36 -3
- package/packages/gui/src/views/settings.jsx +104 -26
- package/test/doomsday-clock/index.html +55 -0
- package/test/doomsday-clock/script.js +66 -0
- package/test/doomsday-clock/style.css +315 -0
- 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
|
@@ -16,7 +16,7 @@ import { OllamaProvider } from './providers/ollama.js';
|
|
|
16
16
|
import { ClaudeCodeProvider } from './providers/claude-code.js';
|
|
17
17
|
import { supportsSignalFlag, compareSemver, parseSemver } from './providers/groove-network.js';
|
|
18
18
|
import { ConsentManager } from '../../../moe-training/client/index.js';
|
|
19
|
-
import { validateAgentConfig } from './validate.js';
|
|
19
|
+
import { validateAgentConfig, validateReasoningEffort, validateVerbosity } from './validate.js';
|
|
20
20
|
import { ROLE_INTEGRATIONS, wrapWithRoleReminder } from './process.js';
|
|
21
21
|
|
|
22
22
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -72,6 +72,9 @@ async function _executeApprovalRetry(daemon, approval) {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
const FILE_READ_TOOLS = new Set(['Read', 'read_file']);
|
|
76
|
+
const FILE_WRITE_TOOLS = new Set(['Write', 'Edit', 'write_file', 'edit_file', 'create_file']);
|
|
77
|
+
|
|
75
78
|
export function createApi(app, daemon) {
|
|
76
79
|
_daemon = daemon;
|
|
77
80
|
|
|
@@ -325,6 +328,14 @@ export function createApi(app, daemon) {
|
|
|
325
328
|
}
|
|
326
329
|
}
|
|
327
330
|
|
|
331
|
+
// Track file operations for the files-touched API
|
|
332
|
+
if (targets.length > 0) {
|
|
333
|
+
const op = FILE_WRITE_TOOLS.has(toolName) ? 'write' : FILE_READ_TOOLS.has(toolName) ? 'read' : null;
|
|
334
|
+
if (op) {
|
|
335
|
+
for (const t of targets) daemon.registry.trackFileOp(agentId, t, op);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
328
339
|
daemon.audit.log('knock.allowed', { agentId, toolName, targets });
|
|
329
340
|
res.json({ allow: true });
|
|
330
341
|
});
|
|
@@ -1100,14 +1111,19 @@ export function createApi(app, daemon) {
|
|
|
1100
1111
|
|
|
1101
1112
|
app.post('/api/conversations', async (req, res) => {
|
|
1102
1113
|
try {
|
|
1103
|
-
const { provider, model, title, mode } = req.body;
|
|
1114
|
+
const { provider, model, title, mode, reasoning_effort, verbosity } = req.body;
|
|
1104
1115
|
if (!provider || typeof provider !== 'string') {
|
|
1105
1116
|
return res.status(400).json({ error: 'provider is required' });
|
|
1106
1117
|
}
|
|
1107
1118
|
if (mode && mode !== 'api' && mode !== 'agent') {
|
|
1108
1119
|
return res.status(400).json({ error: 'mode must be "api" or "agent"' });
|
|
1109
1120
|
}
|
|
1110
|
-
const
|
|
1121
|
+
const validatedEffort = validateReasoningEffort(reasoning_effort);
|
|
1122
|
+
const validatedVerbosity = validateVerbosity(verbosity);
|
|
1123
|
+
const conversation = await daemon.conversations.create(provider, model, title, mode || 'api', {
|
|
1124
|
+
reasoningEffort: validatedEffort,
|
|
1125
|
+
verbosity: validatedVerbosity,
|
|
1126
|
+
});
|
|
1111
1127
|
daemon.audit.log('conversation.create', { id: conversation.id, provider, model, mode: conversation.mode });
|
|
1112
1128
|
res.status(201).json(conversation);
|
|
1113
1129
|
} catch (err) {
|
|
@@ -1139,6 +1155,11 @@ export function createApi(app, daemon) {
|
|
|
1139
1155
|
}
|
|
1140
1156
|
await daemon.conversations.setMode(req.params.id, req.body.mode);
|
|
1141
1157
|
}
|
|
1158
|
+
if (req.body.reasoning_effort !== undefined || req.body.verbosity !== undefined) {
|
|
1159
|
+
const validatedEffort = req.body.reasoning_effort !== undefined ? validateReasoningEffort(req.body.reasoning_effort) : undefined;
|
|
1160
|
+
const validatedVerbosity = req.body.verbosity !== undefined ? validateVerbosity(req.body.verbosity) : undefined;
|
|
1161
|
+
daemon.conversations.updateReasoningSettings(req.params.id, validatedEffort, validatedVerbosity);
|
|
1162
|
+
}
|
|
1142
1163
|
daemon.audit.log('conversation.update', { id: req.params.id, provider: req.body.provider, model: req.body.model, mode: req.body.mode });
|
|
1143
1164
|
res.json(daemon.conversations.get(req.params.id));
|
|
1144
1165
|
} catch (err) {
|
|
@@ -1160,10 +1181,13 @@ export function createApi(app, daemon) {
|
|
|
1160
1181
|
|
|
1161
1182
|
app.post('/api/conversations/:id/message', async (req, res) => {
|
|
1162
1183
|
try {
|
|
1163
|
-
const { message, history } = req.body;
|
|
1184
|
+
const { message, history, reasoning_effort, verbosity } = req.body;
|
|
1164
1185
|
if (!message || typeof message !== 'string' || !message.trim()) {
|
|
1165
1186
|
return res.status(400).json({ error: 'message is required' });
|
|
1166
1187
|
}
|
|
1188
|
+
const validatedEffort = validateReasoningEffort(reasoning_effort);
|
|
1189
|
+
const validatedVerbosity = validateVerbosity(verbosity);
|
|
1190
|
+
|
|
1167
1191
|
const conv = daemon.conversations.get(req.params.id);
|
|
1168
1192
|
if (!conv) return res.status(404).json({ error: 'Conversation not found' });
|
|
1169
1193
|
|
|
@@ -1172,7 +1196,10 @@ export function createApi(app, daemon) {
|
|
|
1172
1196
|
|
|
1173
1197
|
// API mode — lightweight headless streaming, no agent spawned
|
|
1174
1198
|
if (conv.mode === 'api' || !conv.agentId) {
|
|
1175
|
-
await daemon.conversations.sendMessage(req.params.id, message.trim(), history || []
|
|
1199
|
+
await daemon.conversations.sendMessage(req.params.id, message.trim(), history || [], {
|
|
1200
|
+
reasoningEffort: validatedEffort,
|
|
1201
|
+
verbosity: validatedVerbosity,
|
|
1202
|
+
});
|
|
1176
1203
|
daemon.audit.log('conversation.message', { id: req.params.id, mode: 'api' });
|
|
1177
1204
|
return res.json({ status: 'streaming', mode: 'api' });
|
|
1178
1205
|
}
|
|
@@ -3064,6 +3091,87 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
3064
3091
|
});
|
|
3065
3092
|
});
|
|
3066
3093
|
|
|
3094
|
+
// Files touched by an agent during its session
|
|
3095
|
+
app.get('/api/agents/:id/files-touched', (req, res) => {
|
|
3096
|
+
const agent = daemon.registry.get(req.params.id);
|
|
3097
|
+
if (!agent) return res.status(404).json({ error: 'Agent not found' });
|
|
3098
|
+
const files = daemon.registry.getFilesTouched(req.params.id);
|
|
3099
|
+
res.json({ files, total: files.length });
|
|
3100
|
+
});
|
|
3101
|
+
|
|
3102
|
+
// Git diff — structured diff for a file, an agent's touched files, or all uncommitted changes
|
|
3103
|
+
app.get('/api/files/git-diff', (req, res) => {
|
|
3104
|
+
const rootDir = getEditorRoot();
|
|
3105
|
+
if (!rootDir) return res.status(400).json({ error: 'Editor root not set' });
|
|
3106
|
+
|
|
3107
|
+
let paths = [];
|
|
3108
|
+
|
|
3109
|
+
if (req.query.path) {
|
|
3110
|
+
const result = validateFilePath(req.query.path, rootDir);
|
|
3111
|
+
if (result.error) return res.status(400).json({ error: result.error });
|
|
3112
|
+
paths = [req.query.path];
|
|
3113
|
+
} else if (req.query.agentId) {
|
|
3114
|
+
const agent = daemon.registry.get(req.query.agentId);
|
|
3115
|
+
if (!agent) return res.status(404).json({ error: 'Agent not found' });
|
|
3116
|
+
paths = daemon.registry.getFilesTouched(req.query.agentId).map(f => f.path);
|
|
3117
|
+
if (paths.length === 0) return res.json({ diffs: [] });
|
|
3118
|
+
// Validate each path
|
|
3119
|
+
for (const p of paths) {
|
|
3120
|
+
if (p.startsWith('/') || p.includes('..') || p.includes('\0')) {
|
|
3121
|
+
return res.status(400).json({ error: 'Invalid path in agent files' });
|
|
3122
|
+
}
|
|
3123
|
+
}
|
|
3124
|
+
}
|
|
3125
|
+
|
|
3126
|
+
const args = ['diff'];
|
|
3127
|
+
const cachedArgs = ['diff', '--cached'];
|
|
3128
|
+
if (paths.length > 0) {
|
|
3129
|
+
args.push('--', ...paths);
|
|
3130
|
+
cachedArgs.push('--', ...paths);
|
|
3131
|
+
}
|
|
3132
|
+
|
|
3133
|
+
try {
|
|
3134
|
+
const unstaged = execFileSync('git', args, { cwd: rootDir, timeout: 15000, maxBuffer: 10 * 1024 * 1024 }).toString();
|
|
3135
|
+
const staged = execFileSync('git', cachedArgs, { cwd: rootDir, timeout: 15000, maxBuffer: 10 * 1024 * 1024 }).toString();
|
|
3136
|
+
const combined = (staged + '\n' + unstaged).trim();
|
|
3137
|
+
const diffs = parseDiffOutput(combined);
|
|
3138
|
+
res.json({ diffs });
|
|
3139
|
+
} catch (err) {
|
|
3140
|
+
if (err.status !== undefined) {
|
|
3141
|
+
return res.json({ diffs: [] });
|
|
3142
|
+
}
|
|
3143
|
+
res.status(500).json({ error: 'Failed to compute diff' });
|
|
3144
|
+
}
|
|
3145
|
+
});
|
|
3146
|
+
|
|
3147
|
+
function parseDiffOutput(raw) {
|
|
3148
|
+
if (!raw) return [];
|
|
3149
|
+
const fileDiffs = raw.split(/^diff --git /m).filter(Boolean);
|
|
3150
|
+
return fileDiffs.map(chunk => {
|
|
3151
|
+
const lines = chunk.split('\n');
|
|
3152
|
+
const headerMatch = lines[0]?.match(/a\/(.+?) b\/(.+)/);
|
|
3153
|
+
const filePath = headerMatch ? headerMatch[2] : 'unknown';
|
|
3154
|
+
let status = 'modified';
|
|
3155
|
+
if (lines.some(l => l.startsWith('new file'))) status = 'added';
|
|
3156
|
+
else if (lines.some(l => l.startsWith('deleted file'))) status = 'deleted';
|
|
3157
|
+
let additions = 0, deletions = 0;
|
|
3158
|
+
const hunks = [];
|
|
3159
|
+
let currentHunk = null;
|
|
3160
|
+
for (const line of lines) {
|
|
3161
|
+
if (line.startsWith('@@')) {
|
|
3162
|
+
if (currentHunk) hunks.push(currentHunk);
|
|
3163
|
+
currentHunk = { header: line, lines: [] };
|
|
3164
|
+
} else if (currentHunk) {
|
|
3165
|
+
currentHunk.lines.push(line);
|
|
3166
|
+
if (line.startsWith('+') && !line.startsWith('+++')) additions++;
|
|
3167
|
+
else if (line.startsWith('-') && !line.startsWith('---')) deletions++;
|
|
3168
|
+
}
|
|
3169
|
+
}
|
|
3170
|
+
if (currentHunk) hunks.push(currentHunk);
|
|
3171
|
+
return { path: filePath, status, hunks, additions, deletions, content: 'diff --git ' + chunk };
|
|
3172
|
+
});
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3067
3175
|
// File search — fuzzy filename matching for quick-open (Ctrl+P)
|
|
3068
3176
|
app.get('/api/files/search', (req, res) => {
|
|
3069
3177
|
const query = req.query.q;
|
|
@@ -4172,10 +4280,10 @@ Keep responses concise. Help them think, don't lecture them about the system the
|
|
|
4172
4280
|
|
|
4173
4281
|
app.post('/api/tunnels', (req, res) => {
|
|
4174
4282
|
try {
|
|
4175
|
-
const { name, host, user, port, sshKeyPath, autoStart, autoConnect } = req.body;
|
|
4283
|
+
const { name, host, user, port, sshKeyPath, autoStart, autoConnect, projectDir } = req.body;
|
|
4176
4284
|
if (!name || typeof name !== 'string') return res.status(400).json({ error: 'name is required (string)' });
|
|
4177
4285
|
if (!host || typeof host !== 'string') return res.status(400).json({ error: 'host is required (string)' });
|
|
4178
|
-
const result = daemon.tunnelManager.save({ name, host, user, port, sshKeyPath, autoStart, autoConnect });
|
|
4286
|
+
const result = daemon.tunnelManager.save({ name, host, user, port, sshKeyPath, autoStart, autoConnect, projectDir });
|
|
4179
4287
|
res.json(result);
|
|
4180
4288
|
} catch (err) {
|
|
4181
4289
|
res.status(400).json({ error: err.message });
|
|
@@ -55,7 +55,7 @@ export class ConversationManager {
|
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
async create(provider, model, title, mode = 'api') {
|
|
58
|
+
async create(provider, model, title, mode = 'api', options = {}) {
|
|
59
59
|
if (!provider && this.daemon.config?.defaultChatProvider) {
|
|
60
60
|
provider = this.daemon.config.defaultChatProvider;
|
|
61
61
|
}
|
|
@@ -90,6 +90,9 @@ export class ConversationManager {
|
|
|
90
90
|
provider,
|
|
91
91
|
model: model || null,
|
|
92
92
|
mode: mode === 'agent' ? 'agent' : 'api',
|
|
93
|
+
reasoningEffort: options.reasoningEffort || null,
|
|
94
|
+
verbosity: options.verbosity || null,
|
|
95
|
+
previousResponseId: null,
|
|
93
96
|
createdAt: now,
|
|
94
97
|
updatedAt: now,
|
|
95
98
|
pinned: false,
|
|
@@ -218,6 +221,17 @@ export class ConversationManager {
|
|
|
218
221
|
return conv;
|
|
219
222
|
}
|
|
220
223
|
|
|
224
|
+
updateReasoningSettings(id, reasoningEffort, verbosity) {
|
|
225
|
+
const conv = this.conversations.get(id);
|
|
226
|
+
if (!conv) throw new Error('Conversation not found');
|
|
227
|
+
if (reasoningEffort !== undefined) conv.reasoningEffort = reasoningEffort || null;
|
|
228
|
+
if (verbosity !== undefined) conv.verbosity = verbosity || null;
|
|
229
|
+
conv.updatedAt = new Date().toISOString();
|
|
230
|
+
this._save();
|
|
231
|
+
this.daemon.broadcast({ type: 'conversation:updated', data: conv });
|
|
232
|
+
return conv;
|
|
233
|
+
}
|
|
234
|
+
|
|
221
235
|
async setMode(id, mode) {
|
|
222
236
|
const conv = this.conversations.get(id);
|
|
223
237
|
if (!conv) throw new Error('Conversation not found');
|
|
@@ -302,7 +316,7 @@ export class ConversationManager {
|
|
|
302
316
|
} catch { return null; }
|
|
303
317
|
}
|
|
304
318
|
|
|
305
|
-
async sendMessage(id, message, history) {
|
|
319
|
+
async sendMessage(id, message, history, { reasoningEffort, verbosity } = {}) {
|
|
306
320
|
const conv = this.conversations.get(id);
|
|
307
321
|
if (!conv) throw new Error('Conversation not found');
|
|
308
322
|
if (conv.mode !== 'api') throw new Error('sendMessage only works in API mode');
|
|
@@ -331,6 +345,9 @@ export class ConversationManager {
|
|
|
331
345
|
|
|
332
346
|
const apiKey = this._getApiKey(providerName);
|
|
333
347
|
|
|
348
|
+
const effectiveReasoningEffort = reasoningEffort || conv.reasoningEffort || null;
|
|
349
|
+
const effectiveVerbosity = verbosity || conv.verbosity || null;
|
|
350
|
+
|
|
334
351
|
// Try direct API streaming first (sub-second latency)
|
|
335
352
|
const controller = provider.streamChat(
|
|
336
353
|
messages, modelId, apiKey,
|
|
@@ -340,7 +357,11 @@ export class ConversationManager {
|
|
|
340
357
|
data: { conversationId: id, text },
|
|
341
358
|
});
|
|
342
359
|
},
|
|
343
|
-
() => {
|
|
360
|
+
(result) => {
|
|
361
|
+
if (result?.responseId) {
|
|
362
|
+
conv.previousResponseId = result.responseId;
|
|
363
|
+
this._save();
|
|
364
|
+
}
|
|
344
365
|
this._getStreamingProcesses().delete(id);
|
|
345
366
|
this.daemon.broadcast({
|
|
346
367
|
type: 'conversation:complete',
|
|
@@ -354,6 +375,11 @@ export class ConversationManager {
|
|
|
354
375
|
data: { conversationId: id, error: err.message },
|
|
355
376
|
});
|
|
356
377
|
},
|
|
378
|
+
{
|
|
379
|
+
reasoningEffort: effectiveReasoningEffort,
|
|
380
|
+
verbosity: effectiveVerbosity,
|
|
381
|
+
previousResponseId: conv.previousResponseId,
|
|
382
|
+
},
|
|
357
383
|
);
|
|
358
384
|
|
|
359
385
|
if (controller) {
|
|
@@ -999,7 +999,9 @@ For normal file edits within your scope, proceed without review.
|
|
|
999
999
|
// Preview launch: when every agent in this team is in a terminal state,
|
|
1000
1000
|
// kick off the one-click preview (dev server or static serve) the planner
|
|
1001
1001
|
// staged in the team plan. Fires once per team launch.
|
|
1002
|
-
|
|
1002
|
+
// Fire on any terminal status so crashed QC agents don't block preview
|
|
1003
|
+
// when builders completed successfully.
|
|
1004
|
+
if (agent.teamId) {
|
|
1003
1005
|
this._checkPreviewReady(agent.teamId);
|
|
1004
1006
|
}
|
|
1005
1007
|
|
|
@@ -1198,6 +1200,9 @@ For normal file edits within your scope, proceed without review.
|
|
|
1198
1200
|
* Fire the one-click preview when the whole team has finished building.
|
|
1199
1201
|
* Requirements:
|
|
1200
1202
|
* - The daemon has a preview plan stashed for this team (planner wrote one).
|
|
1203
|
+
* - If the team plan has multiple phases, at least one agent from the highest
|
|
1204
|
+
* phase exists in the registry AND is in a terminal state (prevents launching
|
|
1205
|
+
* before QC finishes — _checkPhase2 consumes _pendingPhase2 before we run).
|
|
1201
1206
|
* - No pending phase 2 groups for this team (QC hasn't spawned yet).
|
|
1202
1207
|
* - Every non-planner team agent is in a terminal state.
|
|
1203
1208
|
* - At least one non-planner agent completed successfully.
|
|
@@ -1219,6 +1224,56 @@ For normal file edits within your scope, proceed without review.
|
|
|
1219
1224
|
return;
|
|
1220
1225
|
}
|
|
1221
1226
|
|
|
1227
|
+
// Multi-phase guard: read the team plan to detect phase 2 (QC) agents.
|
|
1228
|
+
// _checkPhase2 runs before this method and consumes _pendingPhase2, so the
|
|
1229
|
+
// pending-group check below may pass even though QC hasn't registered yet.
|
|
1230
|
+
let maxPhase = 1;
|
|
1231
|
+
const maxPhaseRoles = new Set();
|
|
1232
|
+
const expectedRoleCounts = {};
|
|
1233
|
+
const searchPaths = [];
|
|
1234
|
+
if (plan.workingDir) searchPaths.push(resolve(plan.workingDir, '.groove', 'recommended-team.json'));
|
|
1235
|
+
const plannerAgent = this.daemon.registry.getAll().find(a => a.role === 'planner' && a.teamId === teamId);
|
|
1236
|
+
if (plannerAgent?.workingDir) searchPaths.push(resolve(plannerAgent.workingDir, '.groove', 'recommended-team.json'));
|
|
1237
|
+
searchPaths.push(resolve(this.daemon.grooveDir, 'recommended-team.json'));
|
|
1238
|
+
|
|
1239
|
+
for (const planPath of searchPaths) {
|
|
1240
|
+
if (!existsSync(planPath)) continue;
|
|
1241
|
+
try {
|
|
1242
|
+
const raw = JSON.parse(readFileSync(planPath, 'utf8'));
|
|
1243
|
+
const configs = Array.isArray(raw) ? raw : (raw?.agents || []);
|
|
1244
|
+
if (configs.length === 0) continue;
|
|
1245
|
+
for (const cfg of configs) {
|
|
1246
|
+
const phase = typeof cfg.phase === 'number' ? cfg.phase : 1;
|
|
1247
|
+
if (phase > maxPhase) maxPhase = phase;
|
|
1248
|
+
}
|
|
1249
|
+
if (maxPhase > 1) {
|
|
1250
|
+
for (const cfg of configs) {
|
|
1251
|
+
if (cfg.role === 'planner') continue;
|
|
1252
|
+
const role = cfg.role || 'fullstack';
|
|
1253
|
+
const phase = typeof cfg.phase === 'number' ? cfg.phase : 1;
|
|
1254
|
+
expectedRoleCounts[role] = (expectedRoleCounts[role] || 0) + 1;
|
|
1255
|
+
if (phase === maxPhase) maxPhaseRoles.add(role);
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
break;
|
|
1259
|
+
} catch { /* malformed, try next */ }
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
if (maxPhase > 1) {
|
|
1263
|
+
const terminalSet = new Set(['completed', 'crashed', 'stopped', 'killed']);
|
|
1264
|
+
const allTeamAgents = this.daemon.registry.getAll().filter(
|
|
1265
|
+
a => a.teamId === teamId && a.role !== 'planner'
|
|
1266
|
+
);
|
|
1267
|
+
for (const role of maxPhaseRoles) {
|
|
1268
|
+
const actual = allTeamAgents.filter(a => a.role === role).length;
|
|
1269
|
+
if (actual < (expectedRoleCounts[role] || 0)) return;
|
|
1270
|
+
}
|
|
1271
|
+
const anyMaxPhaseTerminal = allTeamAgents.some(
|
|
1272
|
+
a => maxPhaseRoles.has(a.role) && terminalSet.has(a.status)
|
|
1273
|
+
);
|
|
1274
|
+
if (!anyMaxPhaseTerminal) return;
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1222
1277
|
const pendingPhase2 = this.daemon._pendingPhase2 || [];
|
|
1223
1278
|
for (const group of pendingPhase2) {
|
|
1224
1279
|
for (const id of group.waitFor) {
|
|
@@ -153,22 +153,31 @@ export class CodexProvider extends Provider {
|
|
|
153
153
|
return (inputTokens / 1000) * model.pricing.input + (outputTokens / 1000) * model.pricing.output;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
streamChat(messages, model, apiKey, onChunk, onDone, onError) {
|
|
156
|
+
streamChat(messages, model, apiKey, onChunk, onDone, onError, { reasoningEffort, verbosity, previousResponseId } = {}) {
|
|
157
157
|
if (!apiKey) return null;
|
|
158
158
|
const controller = new AbortController();
|
|
159
159
|
let finished = false;
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
let responseId = null;
|
|
161
|
+
const finish = () => { if (!finished) { finished = true; onDone({ responseId }); } };
|
|
162
|
+
|
|
163
|
+
const effort = reasoningEffort || 'medium';
|
|
164
|
+
const verb = verbosity || 'medium';
|
|
165
|
+
const body = {
|
|
166
|
+
model: model || 'gpt-5.5',
|
|
167
|
+
input: previousResponseId ? [messages[messages.length - 1]] : messages,
|
|
168
|
+
stream: true,
|
|
169
|
+
reasoning: { effort },
|
|
170
|
+
text: { format: { type: 'text' }, verbosity: verb },
|
|
171
|
+
};
|
|
172
|
+
if (previousResponseId) body.previous_response_id = previousResponseId;
|
|
173
|
+
|
|
174
|
+
fetch('https://api.openai.com/v1/responses', {
|
|
162
175
|
method: 'POST',
|
|
163
176
|
headers: {
|
|
164
177
|
'Authorization': `Bearer ${apiKey}`,
|
|
165
178
|
'Content-Type': 'application/json',
|
|
166
179
|
},
|
|
167
|
-
body: JSON.stringify(
|
|
168
|
-
model: model || 'gpt-5.4-mini',
|
|
169
|
-
messages,
|
|
170
|
-
stream: true,
|
|
171
|
-
}),
|
|
180
|
+
body: JSON.stringify(body),
|
|
172
181
|
signal: controller.signal,
|
|
173
182
|
}).then((res) => {
|
|
174
183
|
if (!res.ok) {
|
|
@@ -176,8 +185,11 @@ export class CodexProvider extends Provider {
|
|
|
176
185
|
}
|
|
177
186
|
return parseSSEStream(res, (event) => {
|
|
178
187
|
if (event.done) { finish(); return; }
|
|
179
|
-
|
|
180
|
-
|
|
188
|
+
if (event.type === 'response.output_text.delta') {
|
|
189
|
+
if (event.delta) onChunk(event.delta);
|
|
190
|
+
} else if (event.type === 'response.completed') {
|
|
191
|
+
responseId = event.response?.id || null;
|
|
192
|
+
}
|
|
181
193
|
});
|
|
182
194
|
}).then(() => {
|
|
183
195
|
finish();
|
|
@@ -313,6 +325,10 @@ export class CodexProvider extends Provider {
|
|
|
313
325
|
};
|
|
314
326
|
}
|
|
315
327
|
|
|
328
|
+
if (result && item.phase !== undefined) {
|
|
329
|
+
result.phase = item.phase;
|
|
330
|
+
}
|
|
331
|
+
|
|
316
332
|
// Attach intermediate context estimate so all 7 layers see Codex progress
|
|
317
333
|
if (result && this._sessionInputTokens > 0) {
|
|
318
334
|
result.contextUsage = this._sessionInputTokens / this._getMaxContext();
|
|
@@ -328,6 +344,7 @@ export class CodexProvider extends Provider {
|
|
|
328
344
|
const inputTokens = usage.input_tokens || 0;
|
|
329
345
|
const outputTokens = usage.output_tokens || 0;
|
|
330
346
|
const cachedTokens = usage.cached_input_tokens || 0;
|
|
347
|
+
const reasoningTokens = usage.output_tokens_details?.reasoning_tokens || 0;
|
|
331
348
|
const totalTokens = inputTokens + outputTokens;
|
|
332
349
|
const cacheCreationTokens = cachedTokens > 0 ? Math.max(0, inputTokens - cachedTokens) : 0;
|
|
333
350
|
|
|
@@ -352,6 +369,7 @@ export class CodexProvider extends Provider {
|
|
|
352
369
|
tokensUsed: totalTokens,
|
|
353
370
|
inputTokens,
|
|
354
371
|
outputTokens,
|
|
372
|
+
reasoningTokens,
|
|
355
373
|
cacheReadTokens: cachedTokens,
|
|
356
374
|
cacheCreationTokens,
|
|
357
375
|
contextUsage: inputTokens / maxContext,
|
|
@@ -43,6 +43,7 @@ export class Registry extends EventEmitter {
|
|
|
43
43
|
lastActivity: null,
|
|
44
44
|
tokensUsed: 0,
|
|
45
45
|
contextUsage: 0,
|
|
46
|
+
filesTouched: {},
|
|
46
47
|
};
|
|
47
48
|
|
|
48
49
|
this.agents.set(agent.id, agent);
|
|
@@ -94,6 +95,35 @@ export class Registry extends EventEmitter {
|
|
|
94
95
|
return this.getAll().filter((a) => a.teamId === teamId);
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
trackFileOp(id, filePath, op) {
|
|
99
|
+
const agent = this.agents.get(id);
|
|
100
|
+
if (!agent) return;
|
|
101
|
+
if (!agent.filesTouched) agent.filesTouched = {};
|
|
102
|
+
const entry = agent.filesTouched[filePath] || { reads: 0, writes: 0, lastOp: null };
|
|
103
|
+
if (op === 'read') entry.reads++;
|
|
104
|
+
else entry.writes++;
|
|
105
|
+
entry.lastOp = new Date().toISOString();
|
|
106
|
+
agent.filesTouched[filePath] = entry;
|
|
107
|
+
|
|
108
|
+
const keys = Object.keys(agent.filesTouched);
|
|
109
|
+
if (keys.length > 5000) {
|
|
110
|
+
const sorted = keys
|
|
111
|
+
.map((k) => ({ k, t: agent.filesTouched[k].lastOp || '' }))
|
|
112
|
+
.sort((a, b) => a.t.localeCompare(b.t));
|
|
113
|
+
for (let i = 0; i < keys.length - 5000; i++) {
|
|
114
|
+
delete agent.filesTouched[sorted[i].k];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
getFilesTouched(id) {
|
|
120
|
+
const agent = this.agents.get(id);
|
|
121
|
+
if (!agent || !agent.filesTouched) return [];
|
|
122
|
+
return Object.entries(agent.filesTouched)
|
|
123
|
+
.map(([path, info]) => ({ path, reads: info.reads, writes: info.writes, lastOp: info.lastOp }))
|
|
124
|
+
.sort((a, b) => (b.lastOp || '').localeCompare(a.lastOp || ''));
|
|
125
|
+
}
|
|
126
|
+
|
|
97
127
|
restore(agents) {
|
|
98
128
|
for (const agent of agents) {
|
|
99
129
|
agent.status = 'stopped';
|
|
@@ -90,6 +90,9 @@ export function validateAgentConfig(config) {
|
|
|
90
90
|
|
|
91
91
|
const personality = (typeof config.personality === 'string' && config.personality.length > 0 && config.personality.length <= 64 && NAME_PATTERN.test(config.personality)) ? config.personality : undefined;
|
|
92
92
|
|
|
93
|
+
const reasoningEffort = config.reasoning_effort !== undefined && config.reasoning_effort !== null
|
|
94
|
+
? validateReasoningEffort(config.reasoning_effort) : undefined;
|
|
95
|
+
|
|
93
96
|
// Return sanitized config (only known fields)
|
|
94
97
|
return {
|
|
95
98
|
role: config.role,
|
|
@@ -106,6 +109,7 @@ export function validateAgentConfig(config) {
|
|
|
106
109
|
integrationApproval,
|
|
107
110
|
repos,
|
|
108
111
|
personality,
|
|
112
|
+
reasoningEffort,
|
|
109
113
|
};
|
|
110
114
|
}
|
|
111
115
|
|
|
@@ -195,6 +199,25 @@ export function validateGatewayConfig(config) {
|
|
|
195
199
|
};
|
|
196
200
|
}
|
|
197
201
|
|
|
202
|
+
const VALID_REASONING_EFFORTS = ['none', 'low', 'medium', 'high', 'xhigh'];
|
|
203
|
+
const VALID_VERBOSITIES = ['low', 'medium'];
|
|
204
|
+
|
|
205
|
+
export function validateReasoningEffort(value) {
|
|
206
|
+
if (value === null || value === undefined) return null;
|
|
207
|
+
if (typeof value !== 'string' || !VALID_REASONING_EFFORTS.includes(value)) {
|
|
208
|
+
throw new Error(`Invalid reasoning_effort: must be one of ${VALID_REASONING_EFFORTS.join(', ')}`);
|
|
209
|
+
}
|
|
210
|
+
return value;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export function validateVerbosity(value) {
|
|
214
|
+
if (value === null || value === undefined) return null;
|
|
215
|
+
if (typeof value !== 'string' || !VALID_VERBOSITIES.includes(value)) {
|
|
216
|
+
throw new Error(`Invalid verbosity: must be one of ${VALID_VERBOSITIES.join(', ')}`);
|
|
217
|
+
}
|
|
218
|
+
return value;
|
|
219
|
+
}
|
|
220
|
+
|
|
198
221
|
export function escapeMd(text) {
|
|
199
222
|
if (!text) return '';
|
|
200
223
|
// Escape markdown special chars that could break table rendering or inject formatting.
|