groove-dev 0.26.39 → 0.27.1
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/CHANGELOG.md +76 -0
- package/CLAUDE.md +31 -19
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/integrations-registry.json +548 -0
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/api.js +172 -4
- package/node_modules/@groove-dev/daemon/src/classifier.js +20 -1
- package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
- package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
- package/node_modules/@groove-dev/daemon/src/index.js +3 -1
- package/node_modules/@groove-dev/daemon/src/introducer.js +56 -5
- package/node_modules/@groove-dev/daemon/src/journalist.js +72 -10
- package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
- package/node_modules/@groove-dev/daemon/src/mcp-manager.js +2 -1
- package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
- package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
- package/node_modules/@groove-dev/daemon/src/process.js +20 -1
- package/node_modules/@groove-dev/daemon/src/rotator.js +184 -5
- package/node_modules/@groove-dev/daemon/src/router.js +43 -0
- package/node_modules/@groove-dev/daemon/src/tokentracker.js +62 -8
- package/node_modules/@groove-dev/daemon/src/validate.js +0 -13
- package/node_modules/@groove-dev/daemon/test/journalist.test.js +5 -2
- package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
- package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
- package/node_modules/@groove-dev/daemon/test/rotator.test.js +156 -0
- package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
- package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-Bl1_J0sN.js +652 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -4
- package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +18 -0
- package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
- package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +251 -8
- package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
- package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +22 -4
- package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
- package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +18 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +41 -16
- package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +9 -2
- package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +103 -77
- package/package.json +2 -8
- package/packages/cli/package.json +1 -1
- package/packages/daemon/integrations-registry.json +548 -0
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/api.js +172 -4
- package/packages/daemon/src/classifier.js +20 -1
- package/packages/daemon/src/firstrun.js +14 -1
- package/packages/daemon/src/gateways/manager.js +2 -2
- package/packages/daemon/src/index.js +3 -1
- package/packages/daemon/src/introducer.js +56 -5
- package/packages/daemon/src/journalist.js +72 -10
- package/packages/daemon/src/lockmanager.js +60 -0
- package/packages/daemon/src/mcp-manager.js +2 -1
- package/packages/daemon/src/memory.js +370 -0
- package/packages/daemon/src/pm.js +1 -1
- package/packages/daemon/src/process.js +20 -1
- package/packages/daemon/src/rotator.js +184 -5
- package/packages/daemon/src/router.js +43 -0
- package/packages/daemon/src/tokentracker.js +62 -8
- package/packages/daemon/src/validate.js +0 -13
- package/packages/gui/dist/assets/index-Bl1_J0sN.js +652 -0
- package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -4
- package/packages/gui/src/components/agents/spawn-wizard.jsx +18 -0
- package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
- package/packages/gui/src/components/dashboard/intel-panel.jsx +251 -8
- package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
- package/packages/gui/src/components/marketplace/marketplace-card.jsx +22 -4
- package/packages/gui/src/lib/format.js +0 -6
- package/packages/gui/src/lib/hooks/use-dashboard.js +18 -1
- package/packages/gui/src/stores/groove.js +41 -16
- package/packages/gui/src/views/dashboard.jsx +9 -2
- package/packages/gui/src/views/marketplace.jsx +103 -77
- package/docs-manager/DOCS-WORKFLOW.md +0 -176
- package/node_modules/@groove-dev/gui/dist/assets/index-BkY43sei.css +0 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-DmKZLrXU.js +0 -652
- package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
- package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
- package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
- package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
- package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
- package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
- package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
- package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
- package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
- package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
- package/node_modules/@radix-ui/react-popover/README.md +0 -3
- package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
- package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
- package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
- package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
- package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-popover/package.json +0 -82
- package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
- package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
- package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
- package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
- package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
- package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
- package/node_modules/@radix-ui/react-separator/package.json +0 -69
- package/packages/gui/dist/assets/index-BkY43sei.css +0 -1
- package/packages/gui/dist/assets/index-DmKZLrXU.js +0 -652
- package/packages/gui/dist/groove-logo-short.png +0 -0
- package/packages/gui/dist/groove-logo.png +0 -0
- package/packages/gui/public/groove-logo-short.png +0 -0
- package/packages/gui/public/groove-logo.png +0 -0
- package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
- package/packages/gui/src/lib/hooks/use-media-query.js +0 -18
- package/slides/convert-slides.js +0 -1120
- package/slides/deck.pptx +0 -0
- package/slides/index.html +0 -825
- package/slides/node_modules/.package-lock.json +0 -527
- package/slides/node_modules/@types/node/LICENSE +0 -21
- package/slides/node_modules/@types/node/README.md +0 -15
- package/slides/node_modules/@types/node/assert/strict.d.ts +0 -111
- package/slides/node_modules/@types/node/assert.d.ts +0 -1078
- package/slides/node_modules/@types/node/async_hooks.d.ts +0 -603
- package/slides/node_modules/@types/node/buffer.buffer.d.ts +0 -472
- package/slides/node_modules/@types/node/buffer.d.ts +0 -1934
- package/slides/node_modules/@types/node/child_process.d.ts +0 -1476
- package/slides/node_modules/@types/node/cluster.d.ts +0 -578
- package/slides/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
- package/slides/node_modules/@types/node/compatibility/index.d.ts +0 -9
- package/slides/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
- package/slides/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
- package/slides/node_modules/@types/node/console.d.ts +0 -452
- package/slides/node_modules/@types/node/constants.d.ts +0 -21
- package/slides/node_modules/@types/node/crypto.d.ts +0 -4545
- package/slides/node_modules/@types/node/dgram.d.ts +0 -600
- package/slides/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
- package/slides/node_modules/@types/node/dns/promises.d.ts +0 -503
- package/slides/node_modules/@types/node/dns.d.ts +0 -923
- package/slides/node_modules/@types/node/domain.d.ts +0 -170
- package/slides/node_modules/@types/node/events.d.ts +0 -976
- package/slides/node_modules/@types/node/fs/promises.d.ts +0 -1295
- package/slides/node_modules/@types/node/fs.d.ts +0 -4461
- package/slides/node_modules/@types/node/globals.d.ts +0 -172
- package/slides/node_modules/@types/node/globals.typedarray.d.ts +0 -38
- package/slides/node_modules/@types/node/http.d.ts +0 -2089
- package/slides/node_modules/@types/node/http2.d.ts +0 -2644
- package/slides/node_modules/@types/node/https.d.ts +0 -579
- package/slides/node_modules/@types/node/index.d.ts +0 -97
- package/slides/node_modules/@types/node/inspector.d.ts +0 -253
- package/slides/node_modules/@types/node/inspector.generated.d.ts +0 -4052
- package/slides/node_modules/@types/node/module.d.ts +0 -891
- package/slides/node_modules/@types/node/net.d.ts +0 -1076
- package/slides/node_modules/@types/node/os.d.ts +0 -506
- package/slides/node_modules/@types/node/package.json +0 -145
- package/slides/node_modules/@types/node/path.d.ts +0 -200
- package/slides/node_modules/@types/node/perf_hooks.d.ts +0 -968
- package/slides/node_modules/@types/node/process.d.ts +0 -2084
- package/slides/node_modules/@types/node/punycode.d.ts +0 -117
- package/slides/node_modules/@types/node/querystring.d.ts +0 -152
- package/slides/node_modules/@types/node/readline/promises.d.ts +0 -161
- package/slides/node_modules/@types/node/readline.d.ts +0 -594
- package/slides/node_modules/@types/node/repl.d.ts +0 -428
- package/slides/node_modules/@types/node/sea.d.ts +0 -153
- package/slides/node_modules/@types/node/sqlite.d.ts +0 -721
- package/slides/node_modules/@types/node/stream/consumers.d.ts +0 -38
- package/slides/node_modules/@types/node/stream/promises.d.ts +0 -90
- package/slides/node_modules/@types/node/stream/web.d.ts +0 -622
- package/slides/node_modules/@types/node/stream.d.ts +0 -1687
- package/slides/node_modules/@types/node/string_decoder.d.ts +0 -67
- package/slides/node_modules/@types/node/test.d.ts +0 -2163
- package/slides/node_modules/@types/node/timers/promises.d.ts +0 -108
- package/slides/node_modules/@types/node/timers.d.ts +0 -287
- package/slides/node_modules/@types/node/tls.d.ts +0 -1319
- package/slides/node_modules/@types/node/trace_events.d.ts +0 -197
- package/slides/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
- package/slides/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
- package/slides/node_modules/@types/node/ts5.6/index.d.ts +0 -97
- package/slides/node_modules/@types/node/tty.d.ts +0 -208
- package/slides/node_modules/@types/node/url.d.ts +0 -984
- package/slides/node_modules/@types/node/util.d.ts +0 -2606
- package/slides/node_modules/@types/node/v8.d.ts +0 -920
- package/slides/node_modules/@types/node/vm.d.ts +0 -1000
- package/slides/node_modules/@types/node/wasi.d.ts +0 -181
- package/slides/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
- package/slides/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
- package/slides/node_modules/@types/node/web-globals/events.d.ts +0 -97
- package/slides/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
- package/slides/node_modules/@types/node/web-globals/navigator.d.ts +0 -22
- package/slides/node_modules/@types/node/web-globals/storage.d.ts +0 -24
- package/slides/node_modules/@types/node/worker_threads.d.ts +0 -784
- package/slides/node_modules/@types/node/zlib.d.ts +0 -747
- package/slides/node_modules/base64-js/LICENSE +0 -21
- package/slides/node_modules/base64-js/README.md +0 -34
- package/slides/node_modules/base64-js/base64js.min.js +0 -1
- package/slides/node_modules/base64-js/index.d.ts +0 -3
- package/slides/node_modules/base64-js/index.js +0 -150
- package/slides/node_modules/base64-js/package.json +0 -47
- package/slides/node_modules/bl/.travis.yml +0 -17
- package/slides/node_modules/bl/BufferList.js +0 -396
- package/slides/node_modules/bl/LICENSE.md +0 -13
- package/slides/node_modules/bl/README.md +0 -247
- package/slides/node_modules/bl/bl.js +0 -84
- package/slides/node_modules/bl/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/slides/node_modules/bl/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/slides/node_modules/bl/node_modules/readable-stream/LICENSE +0 -47
- package/slides/node_modules/bl/node_modules/readable-stream/README.md +0 -106
- package/slides/node_modules/bl/node_modules/readable-stream/errors-browser.js +0 -127
- package/slides/node_modules/bl/node_modules/readable-stream/errors.js +0 -116
- package/slides/node_modules/bl/node_modules/readable-stream/experimentalWarning.js +0 -17
- package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
- package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
- package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
- package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js +0 -190
- package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js +0 -641
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/slides/node_modules/bl/node_modules/readable-stream/package.json +0 -68
- package/slides/node_modules/bl/node_modules/readable-stream/readable-browser.js +0 -9
- package/slides/node_modules/bl/node_modules/readable-stream/readable.js +0 -16
- package/slides/node_modules/bl/package.json +0 -37
- package/slides/node_modules/bl/test/convert.js +0 -21
- package/slides/node_modules/bl/test/indexOf.js +0 -492
- package/slides/node_modules/bl/test/isBufferList.js +0 -32
- package/slides/node_modules/bl/test/test.js +0 -869
- package/slides/node_modules/buffer/AUTHORS.md +0 -70
- package/slides/node_modules/buffer/LICENSE +0 -21
- package/slides/node_modules/buffer/README.md +0 -410
- package/slides/node_modules/buffer/index.d.ts +0 -186
- package/slides/node_modules/buffer/index.js +0 -1817
- package/slides/node_modules/buffer/package.json +0 -96
- package/slides/node_modules/canvas/Readme.md +0 -657
- package/slides/node_modules/canvas/binding.gyp +0 -229
- package/slides/node_modules/canvas/browser.js +0 -31
- package/slides/node_modules/canvas/build/Makefile +0 -347
- package/slides/node_modules/canvas/build/Release/canvas.node +0 -0
- package/slides/node_modules/canvas/build/Release/libX11.6.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libXau.6.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libXdmcp.6.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libXext.6.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libXrender.1.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libcairo-gobject.2.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libcairo.2.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libdatrie.1.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libfontconfig.1.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libfreetype.6.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libfribidi.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgdk_pixbuf-2.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgif.7.2.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgio-2.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libglib-2.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgmodule-2.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgobject-2.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libgraphite2.3.2.1.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libharfbuzz.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libintl.8.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libjpeg.8.3.2.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpango-1.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpangocairo-1.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpangoft2-1.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpcre2-8.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpixman-1.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libpng16.16.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/librsvg-2.2.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libthai.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libxcb-render.0.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libxcb-shm.0.0.0.dylib +0 -0
- package/slides/node_modules/canvas/build/Release/libxcb.1.1.0.dylib +0 -0
- package/slides/node_modules/canvas/build/binding.Makefile +0 -6
- package/slides/node_modules/canvas/build/canvas.target.mk +0 -299
- package/slides/node_modules/canvas/build/gyp-mac-tool +0 -766
- package/slides/node_modules/canvas/index.d.ts +0 -507
- package/slides/node_modules/canvas/index.js +0 -94
- package/slides/node_modules/canvas/lib/DOMMatrix.js +0 -678
- package/slides/node_modules/canvas/lib/bindings.js +0 -43
- package/slides/node_modules/canvas/lib/canvas.js +0 -113
- package/slides/node_modules/canvas/lib/context2d.js +0 -11
- package/slides/node_modules/canvas/lib/image.js +0 -97
- package/slides/node_modules/canvas/lib/jpegstream.js +0 -41
- package/slides/node_modules/canvas/lib/pattern.js +0 -15
- package/slides/node_modules/canvas/lib/pdfstream.js +0 -35
- package/slides/node_modules/canvas/lib/pngstream.js +0 -42
- package/slides/node_modules/canvas/package.json +0 -71
- package/slides/node_modules/canvas/src/Backends.h +0 -9
- package/slides/node_modules/canvas/src/Canvas.cc +0 -1026
- package/slides/node_modules/canvas/src/Canvas.h +0 -128
- package/slides/node_modules/canvas/src/CanvasError.h +0 -37
- package/slides/node_modules/canvas/src/CanvasGradient.cc +0 -113
- package/slides/node_modules/canvas/src/CanvasGradient.h +0 -20
- package/slides/node_modules/canvas/src/CanvasPattern.cc +0 -129
- package/slides/node_modules/canvas/src/CanvasPattern.h +0 -33
- package/slides/node_modules/canvas/src/CanvasRenderingContext2d.cc +0 -3527
- package/slides/node_modules/canvas/src/CanvasRenderingContext2d.h +0 -238
- package/slides/node_modules/canvas/src/CharData.h +0 -233
- package/slides/node_modules/canvas/src/FontParser.cc +0 -605
- package/slides/node_modules/canvas/src/FontParser.h +0 -115
- package/slides/node_modules/canvas/src/Image.cc +0 -1719
- package/slides/node_modules/canvas/src/Image.h +0 -146
- package/slides/node_modules/canvas/src/ImageData.cc +0 -138
- package/slides/node_modules/canvas/src/ImageData.h +0 -26
- package/slides/node_modules/canvas/src/InstanceData.h +0 -12
- package/slides/node_modules/canvas/src/JPEGStream.h +0 -157
- package/slides/node_modules/canvas/src/PNG.h +0 -292
- package/slides/node_modules/canvas/src/Point.h +0 -11
- package/slides/node_modules/canvas/src/Util.h +0 -9
- package/slides/node_modules/canvas/src/bmp/BMPParser.cc +0 -459
- package/slides/node_modules/canvas/src/bmp/BMPParser.h +0 -60
- package/slides/node_modules/canvas/src/bmp/LICENSE.md +0 -24
- package/slides/node_modules/canvas/src/closure.cc +0 -52
- package/slides/node_modules/canvas/src/closure.h +0 -98
- package/slides/node_modules/canvas/src/color.cc +0 -796
- package/slides/node_modules/canvas/src/color.h +0 -30
- package/slides/node_modules/canvas/src/dll_visibility.h +0 -20
- package/slides/node_modules/canvas/src/init.cc +0 -114
- package/slides/node_modules/canvas/src/register_font.cc +0 -352
- package/slides/node_modules/canvas/src/register_font.h +0 -7
- package/slides/node_modules/canvas/util/has_lib.js +0 -119
- package/slides/node_modules/canvas/util/win_jpeg_lookup.js +0 -21
- package/slides/node_modules/chownr/LICENSE +0 -15
- package/slides/node_modules/chownr/README.md +0 -3
- package/slides/node_modules/chownr/chownr.js +0 -167
- package/slides/node_modules/chownr/package.json +0 -29
- package/slides/node_modules/core-util-is/LICENSE +0 -19
- package/slides/node_modules/core-util-is/README.md +0 -3
- package/slides/node_modules/core-util-is/lib/util.js +0 -107
- package/slides/node_modules/core-util-is/package.json +0 -38
- package/slides/node_modules/decompress-response/index.d.ts +0 -22
- package/slides/node_modules/decompress-response/index.js +0 -58
- package/slides/node_modules/decompress-response/license +0 -9
- package/slides/node_modules/decompress-response/package.json +0 -56
- package/slides/node_modules/decompress-response/readme.md +0 -48
- package/slides/node_modules/deep-extend/CHANGELOG.md +0 -46
- package/slides/node_modules/deep-extend/LICENSE +0 -20
- package/slides/node_modules/deep-extend/README.md +0 -91
- package/slides/node_modules/deep-extend/index.js +0 -1
- package/slides/node_modules/deep-extend/lib/deep-extend.js +0 -150
- package/slides/node_modules/deep-extend/package.json +0 -62
- package/slides/node_modules/detect-libc/LICENSE +0 -201
- package/slides/node_modules/detect-libc/README.md +0 -163
- package/slides/node_modules/detect-libc/index.d.ts +0 -14
- package/slides/node_modules/detect-libc/lib/detect-libc.js +0 -313
- package/slides/node_modules/detect-libc/lib/elf.js +0 -39
- package/slides/node_modules/detect-libc/lib/filesystem.js +0 -51
- package/slides/node_modules/detect-libc/lib/process.js +0 -24
- package/slides/node_modules/detect-libc/package.json +0 -44
- package/slides/node_modules/end-of-stream/LICENSE +0 -21
- package/slides/node_modules/end-of-stream/README.md +0 -54
- package/slides/node_modules/end-of-stream/index.js +0 -96
- package/slides/node_modules/end-of-stream/package.json +0 -37
- package/slides/node_modules/expand-template/.travis.yml +0 -6
- package/slides/node_modules/expand-template/LICENSE +0 -21
- package/slides/node_modules/expand-template/README.md +0 -43
- package/slides/node_modules/expand-template/index.js +0 -26
- package/slides/node_modules/expand-template/package.json +0 -29
- package/slides/node_modules/expand-template/test.js +0 -67
- package/slides/node_modules/fs-constants/LICENSE +0 -21
- package/slides/node_modules/fs-constants/README.md +0 -26
- package/slides/node_modules/fs-constants/browser.js +0 -1
- package/slides/node_modules/fs-constants/index.js +0 -1
- package/slides/node_modules/fs-constants/package.json +0 -19
- package/slides/node_modules/github-from-package/.travis.yml +0 -4
- package/slides/node_modules/github-from-package/LICENSE +0 -18
- package/slides/node_modules/github-from-package/example/package.json +0 -8
- package/slides/node_modules/github-from-package/example/url.js +0 -3
- package/slides/node_modules/github-from-package/index.js +0 -17
- package/slides/node_modules/github-from-package/package.json +0 -30
- package/slides/node_modules/github-from-package/readme.markdown +0 -53
- package/slides/node_modules/github-from-package/test/a.json +0 -8
- package/slides/node_modules/github-from-package/test/b.json +0 -5
- package/slides/node_modules/github-from-package/test/c.json +0 -5
- package/slides/node_modules/github-from-package/test/d.json +0 -7
- package/slides/node_modules/github-from-package/test/e.json +0 -5
- package/slides/node_modules/github-from-package/test/url.js +0 -19
- package/slides/node_modules/https/package.json +0 -15
- package/slides/node_modules/ieee754/LICENSE +0 -11
- package/slides/node_modules/ieee754/README.md +0 -51
- package/slides/node_modules/ieee754/index.d.ts +0 -10
- package/slides/node_modules/ieee754/index.js +0 -85
- package/slides/node_modules/ieee754/package.json +0 -52
- package/slides/node_modules/image-size/LICENSE +0 -9
- package/slides/node_modules/image-size/Readme.md +0 -184
- package/slides/node_modules/image-size/bin/image-size.js +0 -53
- package/slides/node_modules/image-size/dist/detector.d.ts +0 -2
- package/slides/node_modules/image-size/dist/detector.js +0 -30
- package/slides/node_modules/image-size/dist/index.d.ts +0 -10
- package/slides/node_modules/image-size/dist/index.js +0 -129
- package/slides/node_modules/image-size/dist/types/bmp.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/bmp.js +0 -11
- package/slides/node_modules/image-size/dist/types/cur.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/cur.js +0 -17
- package/slides/node_modules/image-size/dist/types/dds.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/dds.js +0 -11
- package/slides/node_modules/image-size/dist/types/gif.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/gif.js +0 -12
- package/slides/node_modules/image-size/dist/types/heif.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/heif.js +0 -40
- package/slides/node_modules/image-size/dist/types/icns.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/icns.js +0 -101
- package/slides/node_modules/image-size/dist/types/ico.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/ico.js +0 -68
- package/slides/node_modules/image-size/dist/types/index.d.ts +0 -23
- package/slides/node_modules/image-size/dist/types/index.js +0 -46
- package/slides/node_modules/image-size/dist/types/interface.d.ts +0 -13
- package/slides/node_modules/image-size/dist/types/interface.js +0 -2
- package/slides/node_modules/image-size/dist/types/j2c.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/j2c.js +0 -12
- package/slides/node_modules/image-size/dist/types/jp2.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/jp2.js +0 -27
- package/slides/node_modules/image-size/dist/types/jpg.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/jpg.js +0 -123
- package/slides/node_modules/image-size/dist/types/jxl-stream.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/jxl-stream.js +0 -45
- package/slides/node_modules/image-size/dist/types/jxl.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/jxl.js +0 -59
- package/slides/node_modules/image-size/dist/types/ktx.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/ktx.js +0 -19
- package/slides/node_modules/image-size/dist/types/png.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/png.js +0 -35
- package/slides/node_modules/image-size/dist/types/pnm.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/pnm.js +0 -72
- package/slides/node_modules/image-size/dist/types/psd.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/psd.js +0 -11
- package/slides/node_modules/image-size/dist/types/svg.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/svg.js +0 -90
- package/slides/node_modules/image-size/dist/types/tga.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/tga.js +0 -15
- package/slides/node_modules/image-size/dist/types/tiff.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/tiff.js +0 -95
- package/slides/node_modules/image-size/dist/types/utils.d.ts +0 -15
- package/slides/node_modules/image-size/dist/types/utils.js +0 -75
- package/slides/node_modules/image-size/dist/types/webp.d.ts +0 -2
- package/slides/node_modules/image-size/dist/types/webp.js +0 -60
- package/slides/node_modules/image-size/dist/utils/bit-reader.d.ts +0 -10
- package/slides/node_modules/image-size/dist/utils/bit-reader.js +0 -44
- package/slides/node_modules/image-size/package.json +0 -81
- package/slides/node_modules/immediate/LICENSE.txt +0 -20
- package/slides/node_modules/immediate/README.md +0 -93
- package/slides/node_modules/immediate/dist/immediate.js +0 -75
- package/slides/node_modules/immediate/dist/immediate.min.js +0 -1
- package/slides/node_modules/immediate/lib/browser.js +0 -69
- package/slides/node_modules/immediate/lib/index.js +0 -73
- package/slides/node_modules/immediate/package.json +0 -42
- package/slides/node_modules/inherits/LICENSE +0 -16
- package/slides/node_modules/inherits/README.md +0 -42
- package/slides/node_modules/inherits/inherits.js +0 -9
- package/slides/node_modules/inherits/inherits_browser.js +0 -27
- package/slides/node_modules/inherits/package.json +0 -29
- package/slides/node_modules/ini/LICENSE +0 -15
- package/slides/node_modules/ini/README.md +0 -102
- package/slides/node_modules/ini/ini.js +0 -206
- package/slides/node_modules/ini/package.json +0 -33
- package/slides/node_modules/isarray/.travis.yml +0 -4
- package/slides/node_modules/isarray/Makefile +0 -6
- package/slides/node_modules/isarray/README.md +0 -60
- package/slides/node_modules/isarray/component.json +0 -19
- package/slides/node_modules/isarray/index.js +0 -5
- package/slides/node_modules/isarray/package.json +0 -45
- package/slides/node_modules/isarray/test.js +0 -20
- package/slides/node_modules/jszip/.codeclimate.yml +0 -16
- package/slides/node_modules/jszip/.editorconfig +0 -8
- package/slides/node_modules/jszip/.eslintrc.js +0 -43
- package/slides/node_modules/jszip/.github/workflows/pr.yaml +0 -58
- package/slides/node_modules/jszip/.jekyll-metadata +0 -0
- package/slides/node_modules/jszip/.travis.yml +0 -17
- package/slides/node_modules/jszip/CHANGES.md +0 -204
- package/slides/node_modules/jszip/LICENSE.markdown +0 -651
- package/slides/node_modules/jszip/README.markdown +0 -33
- package/slides/node_modules/jszip/deps.js +0 -37
- package/slides/node_modules/jszip/dist/jszip.js +0 -11577
- package/slides/node_modules/jszip/dist/jszip.min.js +0 -13
- package/slides/node_modules/jszip/graph.svg +0 -601
- package/slides/node_modules/jszip/index.d.ts +0 -330
- package/slides/node_modules/jszip/lib/base64.js +0 -106
- package/slides/node_modules/jszip/lib/compressedObject.js +0 -74
- package/slides/node_modules/jszip/lib/compressions.js +0 -14
- package/slides/node_modules/jszip/lib/crc32.js +0 -77
- package/slides/node_modules/jszip/lib/defaults.js +0 -11
- package/slides/node_modules/jszip/lib/external.js +0 -18
- package/slides/node_modules/jszip/lib/flate.js +0 -85
- package/slides/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -539
- package/slides/node_modules/jszip/lib/generate/index.js +0 -57
- package/slides/node_modules/jszip/lib/index.js +0 -55
- package/slides/node_modules/jszip/lib/license_header.js +0 -11
- package/slides/node_modules/jszip/lib/load.js +0 -88
- package/slides/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
- package/slides/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
- package/slides/node_modules/jszip/lib/nodejsUtils.js +0 -57
- package/slides/node_modules/jszip/lib/object.js +0 -384
- package/slides/node_modules/jszip/lib/readable-stream-browser.js +0 -10
- package/slides/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
- package/slides/node_modules/jszip/lib/reader/DataReader.js +0 -116
- package/slides/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
- package/slides/node_modules/jszip/lib/reader/StringReader.js +0 -38
- package/slides/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
- package/slides/node_modules/jszip/lib/reader/readerFor.js +0 -28
- package/slides/node_modules/jszip/lib/signature.js +0 -7
- package/slides/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
- package/slides/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
- package/slides/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
- package/slides/node_modules/jszip/lib/stream/DataWorker.js +0 -116
- package/slides/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
- package/slides/node_modules/jszip/lib/stream/StreamHelper.js +0 -214
- package/slides/node_modules/jszip/lib/support.js +0 -38
- package/slides/node_modules/jszip/lib/utf8.js +0 -275
- package/slides/node_modules/jszip/lib/utils.js +0 -501
- package/slides/node_modules/jszip/lib/zipEntries.js +0 -261
- package/slides/node_modules/jszip/lib/zipEntry.js +0 -293
- package/slides/node_modules/jszip/lib/zipObject.js +0 -133
- package/slides/node_modules/jszip/package.json +0 -67
- package/slides/node_modules/jszip/sponsors.md +0 -21
- package/slides/node_modules/jszip/tsconfig.json +0 -101
- package/slides/node_modules/jszip/vendor/FileSaver.js +0 -247
- package/slides/node_modules/lie/README.md +0 -62
- package/slides/node_modules/lie/dist/lie.js +0 -350
- package/slides/node_modules/lie/dist/lie.min.js +0 -1
- package/slides/node_modules/lie/dist/lie.polyfill.js +0 -358
- package/slides/node_modules/lie/dist/lie.polyfill.min.js +0 -1
- package/slides/node_modules/lie/lib/browser.js +0 -273
- package/slides/node_modules/lie/lib/index.js +0 -298
- package/slides/node_modules/lie/license.md +0 -7
- package/slides/node_modules/lie/lie.d.ts +0 -244
- package/slides/node_modules/lie/package.json +0 -69
- package/slides/node_modules/lie/polyfill.js +0 -4
- package/slides/node_modules/mimic-response/index.d.ts +0 -17
- package/slides/node_modules/mimic-response/index.js +0 -77
- package/slides/node_modules/mimic-response/license +0 -9
- package/slides/node_modules/mimic-response/package.json +0 -42
- package/slides/node_modules/mimic-response/readme.md +0 -78
- package/slides/node_modules/minimist/.eslintrc +0 -29
- package/slides/node_modules/minimist/.github/FUNDING.yml +0 -12
- package/slides/node_modules/minimist/.nycrc +0 -14
- package/slides/node_modules/minimist/CHANGELOG.md +0 -298
- package/slides/node_modules/minimist/LICENSE +0 -18
- package/slides/node_modules/minimist/README.md +0 -121
- package/slides/node_modules/minimist/example/parse.js +0 -4
- package/slides/node_modules/minimist/index.js +0 -263
- package/slides/node_modules/minimist/package.json +0 -75
- package/slides/node_modules/minimist/test/all_bool.js +0 -34
- package/slides/node_modules/minimist/test/bool.js +0 -177
- package/slides/node_modules/minimist/test/dash.js +0 -43
- package/slides/node_modules/minimist/test/default_bool.js +0 -37
- package/slides/node_modules/minimist/test/dotted.js +0 -24
- package/slides/node_modules/minimist/test/kv_short.js +0 -32
- package/slides/node_modules/minimist/test/long.js +0 -33
- package/slides/node_modules/minimist/test/num.js +0 -38
- package/slides/node_modules/minimist/test/parse.js +0 -209
- package/slides/node_modules/minimist/test/parse_modified.js +0 -11
- package/slides/node_modules/minimist/test/proto.js +0 -64
- package/slides/node_modules/minimist/test/short.js +0 -69
- package/slides/node_modules/minimist/test/stop_early.js +0 -17
- package/slides/node_modules/minimist/test/unknown.js +0 -104
- package/slides/node_modules/minimist/test/whitespace.js +0 -10
- package/slides/node_modules/mkdirp-classic/LICENSE +0 -21
- package/slides/node_modules/mkdirp-classic/README.md +0 -18
- package/slides/node_modules/mkdirp-classic/index.js +0 -98
- package/slides/node_modules/mkdirp-classic/package.json +0 -18
- package/slides/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +0 -31
- package/slides/node_modules/napi-build-utils/LICENSE +0 -21
- package/slides/node_modules/napi-build-utils/README.md +0 -52
- package/slides/node_modules/napi-build-utils/index.js +0 -214
- package/slides/node_modules/napi-build-utils/index.md +0 -0
- package/slides/node_modules/napi-build-utils/package.json +0 -42
- package/slides/node_modules/node-abi/LICENSE +0 -21
- package/slides/node_modules/node-abi/README.md +0 -54
- package/slides/node_modules/node-abi/abi_registry.json +0 -439
- package/slides/node_modules/node-abi/index.js +0 -179
- package/slides/node_modules/node-abi/package.json +0 -45
- package/slides/node_modules/node-addon-api/LICENSE.md +0 -9
- package/slides/node_modules/node-addon-api/README.md +0 -319
- package/slides/node_modules/node-addon-api/common.gypi +0 -20
- package/slides/node_modules/node-addon-api/except.gypi +0 -25
- package/slides/node_modules/node-addon-api/index.js +0 -12
- package/slides/node_modules/node-addon-api/napi-inl.deprecated.h +0 -186
- package/slides/node_modules/node-addon-api/napi-inl.h +0 -6607
- package/slides/node_modules/node-addon-api/napi.h +0 -3201
- package/slides/node_modules/node-addon-api/node_addon_api.gyp +0 -32
- package/slides/node_modules/node-addon-api/node_api.gyp +0 -9
- package/slides/node_modules/node-addon-api/noexcept.gypi +0 -26
- package/slides/node_modules/node-addon-api/nothing.c +0 -0
- package/slides/node_modules/node-addon-api/package-support.json +0 -21
- package/slides/node_modules/node-addon-api/package.json +0 -480
- package/slides/node_modules/node-addon-api/tools/README.md +0 -73
- package/slides/node_modules/node-addon-api/tools/check-napi.js +0 -99
- package/slides/node_modules/node-addon-api/tools/clang-format.js +0 -71
- package/slides/node_modules/node-addon-api/tools/conversion.js +0 -301
- package/slides/node_modules/node-addon-api/tools/eslint-format.js +0 -79
- package/slides/node_modules/once/LICENSE +0 -15
- package/slides/node_modules/once/README.md +0 -79
- package/slides/node_modules/once/once.js +0 -42
- package/slides/node_modules/once/package.json +0 -33
- package/slides/node_modules/pako/CHANGELOG.md +0 -164
- package/slides/node_modules/pako/LICENSE +0 -21
- package/slides/node_modules/pako/README.md +0 -191
- package/slides/node_modules/pako/dist/pako.js +0 -6818
- package/slides/node_modules/pako/dist/pako.min.js +0 -1
- package/slides/node_modules/pako/dist/pako_deflate.js +0 -3997
- package/slides/node_modules/pako/dist/pako_deflate.min.js +0 -1
- package/slides/node_modules/pako/dist/pako_inflate.js +0 -3300
- package/slides/node_modules/pako/dist/pako_inflate.min.js +0 -1
- package/slides/node_modules/pako/index.js +0 -14
- package/slides/node_modules/pako/lib/deflate.js +0 -400
- package/slides/node_modules/pako/lib/inflate.js +0 -423
- package/slides/node_modules/pako/lib/utils/common.js +0 -105
- package/slides/node_modules/pako/lib/utils/strings.js +0 -187
- package/slides/node_modules/pako/lib/zlib/README +0 -59
- package/slides/node_modules/pako/lib/zlib/adler32.js +0 -51
- package/slides/node_modules/pako/lib/zlib/constants.js +0 -68
- package/slides/node_modules/pako/lib/zlib/crc32.js +0 -59
- package/slides/node_modules/pako/lib/zlib/deflate.js +0 -1874
- package/slides/node_modules/pako/lib/zlib/gzheader.js +0 -58
- package/slides/node_modules/pako/lib/zlib/inffast.js +0 -345
- package/slides/node_modules/pako/lib/zlib/inflate.js +0 -1556
- package/slides/node_modules/pako/lib/zlib/inftrees.js +0 -343
- package/slides/node_modules/pako/lib/zlib/messages.js +0 -32
- package/slides/node_modules/pako/lib/zlib/trees.js +0 -1222
- package/slides/node_modules/pako/lib/zlib/zstream.js +0 -47
- package/slides/node_modules/pako/package.json +0 -44
- package/slides/node_modules/pptxgenjs/LICENSE +0 -21
- package/slides/node_modules/pptxgenjs/README.md +0 -224
- package/slides/node_modules/pptxgenjs/dist/pptxgen.bundle.js +0 -96
- package/slides/node_modules/pptxgenjs/dist/pptxgen.bundle.js.map +0 -1
- package/slides/node_modules/pptxgenjs/dist/pptxgen.cjs.js +0 -7370
- package/slides/node_modules/pptxgenjs/dist/pptxgen.es.js +0 -7368
- package/slides/node_modules/pptxgenjs/dist/pptxgen.min.js +0 -96
- package/slides/node_modules/pptxgenjs/dist/pptxgen.min.js.map +0 -1
- package/slides/node_modules/pptxgenjs/package.json +0 -96
- package/slides/node_modules/pptxgenjs/types/index.d.ts +0 -2679
- package/slides/node_modules/prebuild-install/CHANGELOG.md +0 -131
- package/slides/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
- package/slides/node_modules/prebuild-install/LICENSE +0 -21
- package/slides/node_modules/prebuild-install/README.md +0 -163
- package/slides/node_modules/prebuild-install/asset.js +0 -44
- package/slides/node_modules/prebuild-install/bin.js +0 -78
- package/slides/node_modules/prebuild-install/download.js +0 -142
- package/slides/node_modules/prebuild-install/error.js +0 -14
- package/slides/node_modules/prebuild-install/help.txt +0 -16
- package/slides/node_modules/prebuild-install/index.js +0 -1
- package/slides/node_modules/prebuild-install/log.js +0 -33
- package/slides/node_modules/prebuild-install/package.json +0 -67
- package/slides/node_modules/prebuild-install/proxy.js +0 -35
- package/slides/node_modules/prebuild-install/rc.js +0 -64
- package/slides/node_modules/prebuild-install/util.js +0 -143
- package/slides/node_modules/process-nextick-args/index.js +0 -45
- package/slides/node_modules/process-nextick-args/license.md +0 -19
- package/slides/node_modules/process-nextick-args/package.json +0 -25
- package/slides/node_modules/process-nextick-args/readme.md +0 -18
- package/slides/node_modules/pump/.github/FUNDING.yml +0 -2
- package/slides/node_modules/pump/.travis.yml +0 -5
- package/slides/node_modules/pump/LICENSE +0 -21
- package/slides/node_modules/pump/README.md +0 -74
- package/slides/node_modules/pump/SECURITY.md +0 -5
- package/slides/node_modules/pump/empty.js +0 -1
- package/slides/node_modules/pump/index.js +0 -86
- package/slides/node_modules/pump/package.json +0 -30
- package/slides/node_modules/pump/test-browser.js +0 -66
- package/slides/node_modules/pump/test-node.js +0 -53
- package/slides/node_modules/queue/LICENSE +0 -8
- package/slides/node_modules/queue/index.d.ts +0 -173
- package/slides/node_modules/queue/index.js +0 -195
- package/slides/node_modules/queue/package.json +0 -43
- package/slides/node_modules/queue/readme.md +0 -221
- package/slides/node_modules/rc/LICENSE.APACHE2 +0 -15
- package/slides/node_modules/rc/LICENSE.BSD +0 -26
- package/slides/node_modules/rc/LICENSE.MIT +0 -24
- package/slides/node_modules/rc/README.md +0 -227
- package/slides/node_modules/rc/browser.js +0 -7
- package/slides/node_modules/rc/cli.js +0 -4
- package/slides/node_modules/rc/index.js +0 -53
- package/slides/node_modules/rc/lib/utils.js +0 -104
- package/slides/node_modules/rc/package.json +0 -29
- package/slides/node_modules/rc/test/ini.js +0 -16
- package/slides/node_modules/rc/test/nested-env-vars.js +0 -50
- package/slides/node_modules/rc/test/test.js +0 -59
- package/slides/node_modules/readable-stream/.travis.yml +0 -34
- package/slides/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/slides/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/slides/node_modules/readable-stream/LICENSE +0 -47
- package/slides/node_modules/readable-stream/README.md +0 -58
- package/slides/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
- package/slides/node_modules/readable-stream/duplex-browser.js +0 -1
- package/slides/node_modules/readable-stream/duplex.js +0 -1
- package/slides/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
- package/slides/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
- package/slides/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
- package/slides/node_modules/readable-stream/lib/_stream_transform.js +0 -214
- package/slides/node_modules/readable-stream/lib/_stream_writable.js +0 -685
- package/slides/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -78
- package/slides/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -84
- package/slides/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/slides/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/slides/node_modules/readable-stream/package.json +0 -52
- package/slides/node_modules/readable-stream/passthrough.js +0 -1
- package/slides/node_modules/readable-stream/readable-browser.js +0 -7
- package/slides/node_modules/readable-stream/readable.js +0 -19
- package/slides/node_modules/readable-stream/transform.js +0 -1
- package/slides/node_modules/readable-stream/writable-browser.js +0 -1
- package/slides/node_modules/readable-stream/writable.js +0 -8
- package/slides/node_modules/safe-buffer/LICENSE +0 -21
- package/slides/node_modules/safe-buffer/README.md +0 -584
- package/slides/node_modules/safe-buffer/index.d.ts +0 -187
- package/slides/node_modules/safe-buffer/index.js +0 -62
- package/slides/node_modules/safe-buffer/package.json +0 -37
- package/slides/node_modules/semver/LICENSE +0 -15
- package/slides/node_modules/semver/README.md +0 -665
- package/slides/node_modules/semver/bin/semver.js +0 -191
- package/slides/node_modules/semver/classes/comparator.js +0 -143
- package/slides/node_modules/semver/classes/index.js +0 -7
- package/slides/node_modules/semver/classes/range.js +0 -557
- package/slides/node_modules/semver/classes/semver.js +0 -333
- package/slides/node_modules/semver/functions/clean.js +0 -8
- package/slides/node_modules/semver/functions/cmp.js +0 -54
- package/slides/node_modules/semver/functions/coerce.js +0 -62
- package/slides/node_modules/semver/functions/compare-build.js +0 -9
- package/slides/node_modules/semver/functions/compare-loose.js +0 -5
- package/slides/node_modules/semver/functions/compare.js +0 -7
- package/slides/node_modules/semver/functions/diff.js +0 -60
- package/slides/node_modules/semver/functions/eq.js +0 -5
- package/slides/node_modules/semver/functions/gt.js +0 -5
- package/slides/node_modules/semver/functions/gte.js +0 -5
- package/slides/node_modules/semver/functions/inc.js +0 -21
- package/slides/node_modules/semver/functions/lt.js +0 -5
- package/slides/node_modules/semver/functions/lte.js +0 -5
- package/slides/node_modules/semver/functions/major.js +0 -5
- package/slides/node_modules/semver/functions/minor.js +0 -5
- package/slides/node_modules/semver/functions/neq.js +0 -5
- package/slides/node_modules/semver/functions/parse.js +0 -18
- package/slides/node_modules/semver/functions/patch.js +0 -5
- package/slides/node_modules/semver/functions/prerelease.js +0 -8
- package/slides/node_modules/semver/functions/rcompare.js +0 -5
- package/slides/node_modules/semver/functions/rsort.js +0 -5
- package/slides/node_modules/semver/functions/satisfies.js +0 -12
- package/slides/node_modules/semver/functions/sort.js +0 -5
- package/slides/node_modules/semver/functions/valid.js +0 -8
- package/slides/node_modules/semver/index.js +0 -91
- package/slides/node_modules/semver/internal/constants.js +0 -37
- package/slides/node_modules/semver/internal/debug.js +0 -11
- package/slides/node_modules/semver/internal/identifiers.js +0 -29
- package/slides/node_modules/semver/internal/lrucache.js +0 -42
- package/slides/node_modules/semver/internal/parse-options.js +0 -17
- package/slides/node_modules/semver/internal/re.js +0 -223
- package/slides/node_modules/semver/package.json +0 -78
- package/slides/node_modules/semver/preload.js +0 -4
- package/slides/node_modules/semver/range.bnf +0 -16
- package/slides/node_modules/semver/ranges/gtr.js +0 -6
- package/slides/node_modules/semver/ranges/intersects.js +0 -9
- package/slides/node_modules/semver/ranges/ltr.js +0 -6
- package/slides/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/slides/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/slides/node_modules/semver/ranges/min-version.js +0 -63
- package/slides/node_modules/semver/ranges/outside.js +0 -82
- package/slides/node_modules/semver/ranges/simplify.js +0 -49
- package/slides/node_modules/semver/ranges/subset.js +0 -249
- package/slides/node_modules/semver/ranges/to-comparators.js +0 -10
- package/slides/node_modules/semver/ranges/valid.js +0 -13
- package/slides/node_modules/setimmediate/LICENSE.txt +0 -20
- package/slides/node_modules/setimmediate/package.json +0 -30
- package/slides/node_modules/setimmediate/setImmediate.js +0 -186
- package/slides/node_modules/simple-concat/.travis.yml +0 -3
- package/slides/node_modules/simple-concat/LICENSE +0 -20
- package/slides/node_modules/simple-concat/README.md +0 -44
- package/slides/node_modules/simple-concat/index.js +0 -15
- package/slides/node_modules/simple-concat/package.json +0 -47
- package/slides/node_modules/simple-concat/test/basic.js +0 -41
- package/slides/node_modules/simple-get/.github/dependabot.yml +0 -15
- package/slides/node_modules/simple-get/.github/workflows/ci.yml +0 -23
- package/slides/node_modules/simple-get/LICENSE +0 -20
- package/slides/node_modules/simple-get/README.md +0 -333
- package/slides/node_modules/simple-get/index.js +0 -108
- package/slides/node_modules/simple-get/package.json +0 -67
- package/slides/node_modules/string_decoder/.travis.yml +0 -50
- package/slides/node_modules/string_decoder/LICENSE +0 -48
- package/slides/node_modules/string_decoder/README.md +0 -47
- package/slides/node_modules/string_decoder/lib/string_decoder.js +0 -296
- package/slides/node_modules/string_decoder/package.json +0 -31
- package/slides/node_modules/strip-json-comments/index.js +0 -70
- package/slides/node_modules/strip-json-comments/license +0 -21
- package/slides/node_modules/strip-json-comments/package.json +0 -42
- package/slides/node_modules/strip-json-comments/readme.md +0 -64
- package/slides/node_modules/tar-fs/.travis.yml +0 -6
- package/slides/node_modules/tar-fs/LICENSE +0 -21
- package/slides/node_modules/tar-fs/README.md +0 -165
- package/slides/node_modules/tar-fs/index.js +0 -363
- package/slides/node_modules/tar-fs/package.json +0 -41
- package/slides/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
- package/slides/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
- package/slides/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/e/file +0 -0
- package/slides/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
- package/slides/node_modules/tar-fs/test/index.js +0 -346
- package/slides/node_modules/tar-stream/LICENSE +0 -21
- package/slides/node_modules/tar-stream/README.md +0 -168
- package/slides/node_modules/tar-stream/extract.js +0 -257
- package/slides/node_modules/tar-stream/headers.js +0 -295
- package/slides/node_modules/tar-stream/index.js +0 -2
- package/slides/node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/slides/node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/slides/node_modules/tar-stream/node_modules/readable-stream/LICENSE +0 -47
- package/slides/node_modules/tar-stream/node_modules/readable-stream/README.md +0 -106
- package/slides/node_modules/tar-stream/node_modules/readable-stream/errors-browser.js +0 -127
- package/slides/node_modules/tar-stream/node_modules/readable-stream/errors.js +0 -116
- package/slides/node_modules/tar-stream/node_modules/readable-stream/experimentalWarning.js +0 -17
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_transform.js +0 -190
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_writable.js +0 -641
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/slides/node_modules/tar-stream/node_modules/readable-stream/package.json +0 -68
- package/slides/node_modules/tar-stream/node_modules/readable-stream/readable-browser.js +0 -9
- package/slides/node_modules/tar-stream/node_modules/readable-stream/readable.js +0 -16
- package/slides/node_modules/tar-stream/pack.js +0 -255
- package/slides/node_modules/tar-stream/package.json +0 -58
- package/slides/node_modules/tar-stream/sandbox.js +0 -11
- package/slides/node_modules/tunnel-agent/LICENSE +0 -55
- package/slides/node_modules/tunnel-agent/README.md +0 -4
- package/slides/node_modules/tunnel-agent/index.js +0 -244
- package/slides/node_modules/tunnel-agent/package.json +0 -22
- package/slides/node_modules/undici-types/LICENSE +0 -21
- package/slides/node_modules/undici-types/README.md +0 -6
- package/slides/node_modules/undici-types/agent.d.ts +0 -31
- package/slides/node_modules/undici-types/api.d.ts +0 -43
- package/slides/node_modules/undici-types/balanced-pool.d.ts +0 -29
- package/slides/node_modules/undici-types/cache.d.ts +0 -36
- package/slides/node_modules/undici-types/client.d.ts +0 -108
- package/slides/node_modules/undici-types/connector.d.ts +0 -34
- package/slides/node_modules/undici-types/content-type.d.ts +0 -21
- package/slides/node_modules/undici-types/cookies.d.ts +0 -28
- package/slides/node_modules/undici-types/diagnostics-channel.d.ts +0 -66
- package/slides/node_modules/undici-types/dispatcher.d.ts +0 -256
- package/slides/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -21
- package/slides/node_modules/undici-types/errors.d.ts +0 -149
- package/slides/node_modules/undici-types/eventsource.d.ts +0 -61
- package/slides/node_modules/undici-types/fetch.d.ts +0 -209
- package/slides/node_modules/undici-types/file.d.ts +0 -39
- package/slides/node_modules/undici-types/filereader.d.ts +0 -54
- package/slides/node_modules/undici-types/formdata.d.ts +0 -108
- package/slides/node_modules/undici-types/global-dispatcher.d.ts +0 -9
- package/slides/node_modules/undici-types/global-origin.d.ts +0 -7
- package/slides/node_modules/undici-types/handlers.d.ts +0 -15
- package/slides/node_modules/undici-types/header.d.ts +0 -4
- package/slides/node_modules/undici-types/index.d.ts +0 -71
- package/slides/node_modules/undici-types/interceptors.d.ts +0 -17
- package/slides/node_modules/undici-types/mock-agent.d.ts +0 -50
- package/slides/node_modules/undici-types/mock-client.d.ts +0 -25
- package/slides/node_modules/undici-types/mock-errors.d.ts +0 -12
- package/slides/node_modules/undici-types/mock-interceptor.d.ts +0 -93
- package/slides/node_modules/undici-types/mock-pool.d.ts +0 -25
- package/slides/node_modules/undici-types/package.json +0 -55
- package/slides/node_modules/undici-types/patch.d.ts +0 -33
- package/slides/node_modules/undici-types/pool-stats.d.ts +0 -19
- package/slides/node_modules/undici-types/pool.d.ts +0 -39
- package/slides/node_modules/undici-types/proxy-agent.d.ts +0 -28
- package/slides/node_modules/undici-types/readable.d.ts +0 -65
- package/slides/node_modules/undici-types/retry-agent.d.ts +0 -8
- package/slides/node_modules/undici-types/retry-handler.d.ts +0 -116
- package/slides/node_modules/undici-types/util.d.ts +0 -18
- package/slides/node_modules/undici-types/webidl.d.ts +0 -228
- package/slides/node_modules/undici-types/websocket.d.ts +0 -150
- package/slides/node_modules/util-deprecate/History.md +0 -16
- package/slides/node_modules/util-deprecate/LICENSE +0 -24
- package/slides/node_modules/util-deprecate/README.md +0 -53
- package/slides/node_modules/util-deprecate/browser.js +0 -67
- package/slides/node_modules/util-deprecate/node.js +0 -6
- package/slides/node_modules/util-deprecate/package.json +0 -27
- package/slides/node_modules/wrappy/LICENSE +0 -15
- package/slides/node_modules/wrappy/README.md +0 -36
- package/slides/node_modules/wrappy/package.json +0 -29
- package/slides/node_modules/wrappy/wrappy.js +0 -33
- package/slides/package-lock.json +0 -536
- package/slides/package.json +0 -16
- package/slides/slides.json +0 -238
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
// GROOVE — Persistent Agent Memory (Layer 7)
|
|
2
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
3
|
+
//
|
|
4
|
+
// Four file types, all in .groove/memory/:
|
|
5
|
+
// - project-constraints.md Discovered project rules, do-not-touch, required patterns
|
|
6
|
+
// - handoff-chain/<role>.md Cumulative rotation briefs (newest first, last 10 kept)
|
|
7
|
+
// - agent-discoveries.jsonl Error→fix pairs (only successes stored)
|
|
8
|
+
// - agent-specializations.json Per-agent and per-project-role quality profiles
|
|
9
|
+
//
|
|
10
|
+
// Read by the introducer on every spawn so agent #50 knows what agent #1 learned.
|
|
11
|
+
|
|
12
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, appendFileSync, statSync } from 'fs';
|
|
13
|
+
import { resolve } from 'path';
|
|
14
|
+
import { createHash } from 'crypto';
|
|
15
|
+
|
|
16
|
+
const MAX_CONSTRAINTS = 50;
|
|
17
|
+
const MAX_HANDOFF_ROTATIONS = 10;
|
|
18
|
+
const MAX_DISCOVERIES = 1000;
|
|
19
|
+
const HANDOFF_BRIEF_MAX_CHARS = 4000;
|
|
20
|
+
|
|
21
|
+
function hashText(text) {
|
|
22
|
+
return createHash('sha1').update(text.trim().toLowerCase()).digest('hex').slice(0, 12);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function safeName(role) {
|
|
26
|
+
return (role || 'unknown').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 40);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function truncate(text, max) {
|
|
30
|
+
if (!text || text.length <= max) return text || '';
|
|
31
|
+
return text.slice(0, max - 3) + '...';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class MemoryStore {
|
|
35
|
+
constructor(grooveDir) {
|
|
36
|
+
this.memDir = resolve(grooveDir, 'memory');
|
|
37
|
+
this.constraintsPath = resolve(this.memDir, 'project-constraints.md');
|
|
38
|
+
this.handoffDir = resolve(this.memDir, 'handoff-chain');
|
|
39
|
+
this.discoveriesPath = resolve(this.memDir, 'agent-discoveries.jsonl');
|
|
40
|
+
this.specializationsPath = resolve(this.memDir, 'agent-specializations.json');
|
|
41
|
+
this._ensureDirs();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_ensureDirs() {
|
|
45
|
+
try {
|
|
46
|
+
mkdirSync(this.memDir, { recursive: true });
|
|
47
|
+
mkdirSync(this.handoffDir, { recursive: true });
|
|
48
|
+
} catch { /* best-effort */ }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// --- Project Constraints ---
|
|
52
|
+
|
|
53
|
+
listConstraints() {
|
|
54
|
+
if (!existsSync(this.constraintsPath)) return [];
|
|
55
|
+
try {
|
|
56
|
+
const content = readFileSync(this.constraintsPath, 'utf8');
|
|
57
|
+
const constraints = [];
|
|
58
|
+
const blocks = content.split(/\n(?=- )/); // each constraint starts with "- "
|
|
59
|
+
for (const block of blocks) {
|
|
60
|
+
const m = block.match(/^- \[([a-f0-9]+)\] \*([^*]+)\* (.+)$/s);
|
|
61
|
+
if (m) {
|
|
62
|
+
constraints.push({
|
|
63
|
+
hash: m[1],
|
|
64
|
+
category: m[2].trim(),
|
|
65
|
+
text: m[3].trim(),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return constraints;
|
|
70
|
+
} catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
addConstraint({ text, category = 'general' }) {
|
|
76
|
+
if (!text || typeof text !== 'string') return { added: false, error: 'text required' };
|
|
77
|
+
const trimmed = text.trim();
|
|
78
|
+
if (trimmed.length < 3) return { added: false, error: 'text too short' };
|
|
79
|
+
if (trimmed.length > 500) return { added: false, error: 'text too long (max 500 chars)' };
|
|
80
|
+
|
|
81
|
+
const hash = hashText(trimmed);
|
|
82
|
+
const existing = this.listConstraints();
|
|
83
|
+
if (existing.some((c) => c.hash === hash)) {
|
|
84
|
+
return { added: false, hash, reason: 'duplicate' };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
existing.push({ hash, category, text: trimmed });
|
|
88
|
+
// Keep most recent MAX_CONSTRAINTS
|
|
89
|
+
const pruned = existing.slice(-MAX_CONSTRAINTS);
|
|
90
|
+
this._writeConstraints(pruned);
|
|
91
|
+
return { added: true, hash };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
removeConstraint(hash) {
|
|
95
|
+
const existing = this.listConstraints();
|
|
96
|
+
const filtered = existing.filter((c) => c.hash !== hash);
|
|
97
|
+
if (filtered.length === existing.length) return false;
|
|
98
|
+
this._writeConstraints(filtered);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
_writeConstraints(constraints) {
|
|
103
|
+
const lines = [
|
|
104
|
+
'# Project Constraints',
|
|
105
|
+
`*Auto-managed by GROOVE memory (Layer 7). Last updated: ${new Date().toISOString()}*`,
|
|
106
|
+
'',
|
|
107
|
+
];
|
|
108
|
+
for (const c of constraints) {
|
|
109
|
+
lines.push(`- [${c.hash}] *${c.category}* ${c.text}`);
|
|
110
|
+
}
|
|
111
|
+
lines.push('');
|
|
112
|
+
try {
|
|
113
|
+
writeFileSync(this.constraintsPath, lines.join('\n'));
|
|
114
|
+
} catch { /* best-effort */ }
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getConstraintsMarkdown(maxChars = 4000) {
|
|
118
|
+
const constraints = this.listConstraints();
|
|
119
|
+
if (constraints.length === 0) return '';
|
|
120
|
+
const byCategory = {};
|
|
121
|
+
for (const c of constraints) {
|
|
122
|
+
byCategory[c.category] = byCategory[c.category] || [];
|
|
123
|
+
byCategory[c.category].push(c.text);
|
|
124
|
+
}
|
|
125
|
+
const lines = [];
|
|
126
|
+
for (const [cat, items] of Object.entries(byCategory)) {
|
|
127
|
+
lines.push(`**${cat}:**`);
|
|
128
|
+
for (const item of items) lines.push(`- ${item}`);
|
|
129
|
+
lines.push('');
|
|
130
|
+
}
|
|
131
|
+
return truncate(lines.join('\n').trim(), maxChars);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// --- Handoff Chain ---
|
|
135
|
+
|
|
136
|
+
_chainPath(role) {
|
|
137
|
+
return resolve(this.handoffDir, `${safeName(role)}.md`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
getHandoffChain(role) {
|
|
141
|
+
const path = this._chainPath(role);
|
|
142
|
+
if (!existsSync(path)) return [];
|
|
143
|
+
try {
|
|
144
|
+
const content = readFileSync(path, 'utf8');
|
|
145
|
+
const entries = [];
|
|
146
|
+
// Parse entries — each starts with "## Rotation N —"
|
|
147
|
+
// Body includes the header + all content up to (but not including) the
|
|
148
|
+
// trailing --- separator and the next entry.
|
|
149
|
+
const blocks = content.split(/\n(?=## Rotation )/);
|
|
150
|
+
for (const block of blocks) {
|
|
151
|
+
const headerMatch = block.match(/^## Rotation (\d+) —/);
|
|
152
|
+
if (!headerMatch) continue;
|
|
153
|
+
const body = block.replace(/\n---\s*$/, '').trim();
|
|
154
|
+
entries.push({
|
|
155
|
+
rotationN: parseInt(headerMatch[1], 10),
|
|
156
|
+
body,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return entries;
|
|
160
|
+
} catch {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
appendHandoffBrief(role, entry) {
|
|
166
|
+
if (!role || !entry) return false;
|
|
167
|
+
const chain = this.getHandoffChain(role);
|
|
168
|
+
const nextN = (chain[0]?.rotationN || 0) + 1;
|
|
169
|
+
|
|
170
|
+
const block = [
|
|
171
|
+
`## Rotation ${nextN} — ${entry.timestamp || new Date().toISOString()} (${entry.agentId || '?'} → ${entry.newAgentId || '?'})`,
|
|
172
|
+
`**Reason:** ${entry.reason || 'unknown'}`,
|
|
173
|
+
entry.oldTokens != null ? `**Tokens carried:** ${entry.oldTokens.toLocaleString()}` : '',
|
|
174
|
+
entry.contextUsage != null ? `**Context at rotation:** ${Math.round(entry.contextUsage * 100)}%` : '',
|
|
175
|
+
'',
|
|
176
|
+
'**Brief summary:**',
|
|
177
|
+
truncate(entry.brief || '(no brief)', HANDOFF_BRIEF_MAX_CHARS),
|
|
178
|
+
'',
|
|
179
|
+
].filter(Boolean).join('\n');
|
|
180
|
+
|
|
181
|
+
// Prepend new entry (newest first), keep last N
|
|
182
|
+
const newChain = [{ rotationN: nextN, body: block }, ...chain].slice(0, MAX_HANDOFF_ROTATIONS);
|
|
183
|
+
|
|
184
|
+
const lines = [
|
|
185
|
+
`# ${role[0].toUpperCase() + role.slice(1)} Handoff Chain`,
|
|
186
|
+
`*Cumulative rotation briefs. Newest first. Last ${MAX_HANDOFF_ROTATIONS} kept.*`,
|
|
187
|
+
'',
|
|
188
|
+
];
|
|
189
|
+
for (const e of newChain) {
|
|
190
|
+
lines.push(e.body || '');
|
|
191
|
+
lines.push('---');
|
|
192
|
+
lines.push('');
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
writeFileSync(this._chainPath(role), lines.join('\n'));
|
|
197
|
+
return true;
|
|
198
|
+
} catch {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
getRecentHandoffMarkdown(role, count = 3, maxChars = 4000) {
|
|
204
|
+
const chain = this.getHandoffChain(role);
|
|
205
|
+
if (chain.length === 0) return '';
|
|
206
|
+
const recent = chain.slice(0, count);
|
|
207
|
+
const out = recent.map((e) => e.body || '').join('\n\n---\n\n');
|
|
208
|
+
return truncate(out, maxChars);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
listHandoffRoles() {
|
|
212
|
+
if (!existsSync(this.handoffDir)) return [];
|
|
213
|
+
try {
|
|
214
|
+
return readdirSync(this.handoffDir)
|
|
215
|
+
.filter((f) => f.endsWith('.md'))
|
|
216
|
+
.map((f) => f.replace(/\.md$/, ''));
|
|
217
|
+
} catch {
|
|
218
|
+
return [];
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// --- Discoveries (error → fix pairs) ---
|
|
223
|
+
|
|
224
|
+
addDiscovery({ agentId, role, trigger, fix, outcome = 'success' }) {
|
|
225
|
+
if (!trigger || !fix) return { added: false, error: 'trigger and fix required' };
|
|
226
|
+
if (outcome !== 'success') return { added: false, reason: 'only successes stored' };
|
|
227
|
+
|
|
228
|
+
const entry = {
|
|
229
|
+
ts: new Date().toISOString(),
|
|
230
|
+
agentId: agentId || null,
|
|
231
|
+
role: role || 'unknown',
|
|
232
|
+
trigger: truncate(String(trigger).trim(), 300),
|
|
233
|
+
fix: truncate(String(fix).trim(), 500),
|
|
234
|
+
outcome,
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// Dedup: same trigger+fix = skip
|
|
238
|
+
const existing = this.listDiscoveries({ limit: 200 });
|
|
239
|
+
const key = hashText(entry.trigger + '||' + entry.fix);
|
|
240
|
+
if (existing.some((d) => hashText(d.trigger + '||' + d.fix) === key)) {
|
|
241
|
+
return { added: false, reason: 'duplicate' };
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
try {
|
|
245
|
+
appendFileSync(this.discoveriesPath, JSON.stringify(entry) + '\n');
|
|
246
|
+
this._pruneDiscoveries();
|
|
247
|
+
return { added: true };
|
|
248
|
+
} catch (err) {
|
|
249
|
+
return { added: false, error: err.message };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
listDiscoveries({ role, limit = 100 } = {}) {
|
|
254
|
+
if (!existsSync(this.discoveriesPath)) return [];
|
|
255
|
+
try {
|
|
256
|
+
const lines = readFileSync(this.discoveriesPath, 'utf8').split('\n').filter(Boolean);
|
|
257
|
+
const entries = [];
|
|
258
|
+
for (const line of lines) {
|
|
259
|
+
try {
|
|
260
|
+
const e = JSON.parse(line);
|
|
261
|
+
if (!role || e.role === role) entries.push(e);
|
|
262
|
+
} catch { /* skip malformed */ }
|
|
263
|
+
}
|
|
264
|
+
return entries.slice(-limit).reverse(); // newest first
|
|
265
|
+
} catch {
|
|
266
|
+
return [];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
_pruneDiscoveries() {
|
|
271
|
+
if (!existsSync(this.discoveriesPath)) return;
|
|
272
|
+
try {
|
|
273
|
+
const stat = statSync(this.discoveriesPath);
|
|
274
|
+
// Only prune on larger files to avoid thrashing
|
|
275
|
+
if (stat.size < 50_000) return;
|
|
276
|
+
const lines = readFileSync(this.discoveriesPath, 'utf8').split('\n').filter(Boolean);
|
|
277
|
+
if (lines.length <= MAX_DISCOVERIES) return;
|
|
278
|
+
const kept = lines.slice(-MAX_DISCOVERIES);
|
|
279
|
+
writeFileSync(this.discoveriesPath, kept.join('\n') + '\n');
|
|
280
|
+
} catch { /* best-effort */ }
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
getDiscoveriesMarkdown(role, limit = 20, maxChars = 4000) {
|
|
284
|
+
const entries = this.listDiscoveries({ role, limit });
|
|
285
|
+
if (entries.length === 0) return '';
|
|
286
|
+
const lines = entries.map((d) => `- When \`${d.trigger}\` → fix: ${d.fix}`);
|
|
287
|
+
return truncate(lines.join('\n'), maxChars);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// --- Specializations ---
|
|
291
|
+
|
|
292
|
+
_loadSpecializations() {
|
|
293
|
+
if (!existsSync(this.specializationsPath)) {
|
|
294
|
+
return { perAgent: {}, perProjectRole: {} };
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
const data = JSON.parse(readFileSync(this.specializationsPath, 'utf8'));
|
|
298
|
+
return {
|
|
299
|
+
perAgent: data.perAgent || {},
|
|
300
|
+
perProjectRole: data.perProjectRole || {},
|
|
301
|
+
};
|
|
302
|
+
} catch {
|
|
303
|
+
return { perAgent: {}, perProjectRole: {} };
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
_saveSpecializations(data) {
|
|
308
|
+
try {
|
|
309
|
+
writeFileSync(this.specializationsPath, JSON.stringify(data, null, 2));
|
|
310
|
+
} catch { /* best-effort */ }
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
updateSpecialization(agentId, { role, qualityScore, filesTouched, signals, threshold }) {
|
|
314
|
+
if (!agentId) return false;
|
|
315
|
+
const data = this._loadSpecializations();
|
|
316
|
+
|
|
317
|
+
const agentEntry = data.perAgent[agentId] || {
|
|
318
|
+
role: role || 'unknown',
|
|
319
|
+
sessionCount: 0,
|
|
320
|
+
avgQualityScore: 0,
|
|
321
|
+
qualityTotal: 0,
|
|
322
|
+
fileTouches: {},
|
|
323
|
+
signatureErrors: [],
|
|
324
|
+
};
|
|
325
|
+
agentEntry.sessionCount += 1;
|
|
326
|
+
if (typeof qualityScore === 'number') {
|
|
327
|
+
agentEntry.qualityTotal += qualityScore;
|
|
328
|
+
agentEntry.avgQualityScore = Math.round(agentEntry.qualityTotal / agentEntry.sessionCount);
|
|
329
|
+
}
|
|
330
|
+
if (Array.isArray(filesTouched)) {
|
|
331
|
+
for (const f of filesTouched) {
|
|
332
|
+
agentEntry.fileTouches[f] = (agentEntry.fileTouches[f] || 0) + 1;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (role) agentEntry.role = role;
|
|
336
|
+
if (threshold != null) agentEntry.preferredThreshold = threshold;
|
|
337
|
+
data.perAgent[agentId] = agentEntry;
|
|
338
|
+
|
|
339
|
+
if (role) {
|
|
340
|
+
const roleEntry = data.perProjectRole[role] || {
|
|
341
|
+
sessionCount: 0,
|
|
342
|
+
avgQualityScore: 0,
|
|
343
|
+
qualityTotal: 0,
|
|
344
|
+
topFileChurn: {},
|
|
345
|
+
};
|
|
346
|
+
roleEntry.sessionCount += 1;
|
|
347
|
+
if (typeof qualityScore === 'number') {
|
|
348
|
+
roleEntry.qualityTotal += qualityScore;
|
|
349
|
+
roleEntry.avgQualityScore = Math.round(roleEntry.qualityTotal / roleEntry.sessionCount);
|
|
350
|
+
}
|
|
351
|
+
if (Array.isArray(filesTouched)) {
|
|
352
|
+
for (const f of filesTouched) {
|
|
353
|
+
roleEntry.topFileChurn[f] = (roleEntry.topFileChurn[f] || 0) + 1;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
data.perProjectRole[role] = roleEntry;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
this._saveSpecializations(data);
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
getSpecialization(agentId) {
|
|
364
|
+
return this._loadSpecializations().perAgent[agentId] || null;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
getAllSpecializations() {
|
|
368
|
+
return this._loadSpecializations();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
@@ -54,7 +54,7 @@ Review: Is this within scope? Conflicts with other agents? Aligns with project?
|
|
|
54
54
|
Respond in ONE line: APPROVED: <reason> or REJECTED: <reason>`;
|
|
55
55
|
|
|
56
56
|
try {
|
|
57
|
-
const result = await this.daemon.journalist.callHeadless(prompt);
|
|
57
|
+
const result = await this.daemon.journalist.callHeadless(prompt, { trackAs: '__pm__' });
|
|
58
58
|
const text = (result || '').trim();
|
|
59
59
|
const approved = !text.toUpperCase().startsWith('REJECTED');
|
|
60
60
|
const reason = text.replace(/^(APPROVED|REJECTED):?\s*/i, '').trim();
|
|
@@ -719,6 +719,25 @@ For normal file edits within your scope, proceed without review.
|
|
|
719
719
|
// Process cross-scope handoff requests from this agent
|
|
720
720
|
this._processHandoffs(agent);
|
|
721
721
|
}
|
|
722
|
+
|
|
723
|
+
// Update Layer 7 specialization profile for this agent's session
|
|
724
|
+
if (this.daemon.memory && (finalStatus === 'completed' || finalStatus === 'crashed')) {
|
|
725
|
+
try {
|
|
726
|
+
const events = this.daemon.classifier?.agentWindows?.[agent.id] || [];
|
|
727
|
+
const signals = events.length >= 6
|
|
728
|
+
? this.daemon.adaptive.extractSignals(events, agent.scope)
|
|
729
|
+
: null;
|
|
730
|
+
const score = signals ? this.daemon.adaptive.scoreSession(signals) : null;
|
|
731
|
+
const files = this.daemon.journalist?.getAgentFiles(agent) || [];
|
|
732
|
+
this.daemon.memory.updateSpecialization(agent.id, {
|
|
733
|
+
role: agent.role,
|
|
734
|
+
qualityScore: score,
|
|
735
|
+
filesTouched: files,
|
|
736
|
+
signals,
|
|
737
|
+
threshold: this.daemon.adaptive?.getThreshold(agent.provider, agent.role),
|
|
738
|
+
});
|
|
739
|
+
} catch { /* best-effort */ }
|
|
740
|
+
}
|
|
722
741
|
});
|
|
723
742
|
|
|
724
743
|
proc.on('error', (err) => {
|
|
@@ -1278,7 +1297,7 @@ For normal file edits within your scope, proceed without review.
|
|
|
1278
1297
|
].join('\n');
|
|
1279
1298
|
|
|
1280
1299
|
try {
|
|
1281
|
-
const response = await journalist.callHeadless(prompt);
|
|
1300
|
+
const response = await journalist.callHeadless(prompt, { trackAs: '__negotiator__' });
|
|
1282
1301
|
return response;
|
|
1283
1302
|
} catch {
|
|
1284
1303
|
// Fallback: return raw data for the agent to interpret
|
|
@@ -7,10 +7,11 @@ import { resolve } from 'path';
|
|
|
7
7
|
|
|
8
8
|
const DEFAULT_THRESHOLD = 0.75;
|
|
9
9
|
const CHECK_INTERVAL = 15_000;
|
|
10
|
-
const QUALITY_THRESHOLD =
|
|
11
|
-
const MIN_EVENTS =
|
|
10
|
+
const QUALITY_THRESHOLD = 55; // Score below this triggers quality rotation (tuned up from 40 — too hair-trigger)
|
|
11
|
+
const MIN_EVENTS = 30; // Minimum classifier events before scoring (tuned up from 10 — ~100 turns for stable signal)
|
|
12
12
|
const MIN_AGE_SEC = 120; // Minimum agent age before quality rotation
|
|
13
13
|
const SCORE_HISTORY_MAX = 40; // ~10 min at 15s intervals
|
|
14
|
+
const ROTATION_COOLDOWN_MS = 5 * 60 * 1000; // 5 min between rotations per agent — prevents churn on persistent low quality
|
|
14
15
|
|
|
15
16
|
export class Rotator extends EventEmitter {
|
|
16
17
|
constructor(daemon) {
|
|
@@ -96,6 +97,18 @@ export class Rotator extends EventEmitter {
|
|
|
96
97
|
: Infinity;
|
|
97
98
|
}
|
|
98
99
|
|
|
100
|
+
// Check if this agent rotated recently. Prevents back-to-back rotation
|
|
101
|
+
// churn when quality score stays low post-rotation (e.g. genuinely hard task).
|
|
102
|
+
// Safety triggers bypass cooldown — pathological burn must be stopped.
|
|
103
|
+
_isInCooldown(agent) {
|
|
104
|
+
const last = [...this.rotationHistory]
|
|
105
|
+
.reverse()
|
|
106
|
+
.find((r) => r.newAgentId === agent.id || r.agentId === agent.id);
|
|
107
|
+
if (!last) return false;
|
|
108
|
+
const elapsed = Date.now() - new Date(last.timestamp).getTime();
|
|
109
|
+
return elapsed < ROTATION_COOLDOWN_MS;
|
|
110
|
+
}
|
|
111
|
+
|
|
99
112
|
scoreLiveSession(agent) {
|
|
100
113
|
const events = this.daemon.classifier.agentWindows[agent.id] || [];
|
|
101
114
|
const ageSec = (Date.now() - new Date(agent.spawnedAt).getTime()) / 1000;
|
|
@@ -123,13 +136,118 @@ export class Rotator extends EventEmitter {
|
|
|
123
136
|
return result;
|
|
124
137
|
}
|
|
125
138
|
|
|
139
|
+
// Per-role safety multipliers. Exploration-heavy roles burn tokens fast
|
|
140
|
+
// by design (reading codebases, searching files) — a planner running
|
|
141
|
+
// normally can hit 2M+ tokens in 5 min just reading. One-size-fits-all
|
|
142
|
+
// thresholds produce false positives on exactly the roles that need to
|
|
143
|
+
// read fast. Multipliers scale both the velocity threshold and the
|
|
144
|
+
// instance ceiling. User can override via config.safety.roleMultipliers.
|
|
145
|
+
_getRoleMultiplier(role) {
|
|
146
|
+
const safety = this.daemon.config?.safety;
|
|
147
|
+
const overrides = safety?.roleMultipliers || {};
|
|
148
|
+
if (overrides[role] != null) return overrides[role];
|
|
149
|
+
// Defaults tuned from observed legitimate velocity
|
|
150
|
+
const defaults = {
|
|
151
|
+
planner: 10, // heavy exploration — effectively exempt in practice
|
|
152
|
+
fullstack: 4, // QC auditors read broadly
|
|
153
|
+
analyst: 5, // research/analysis roles
|
|
154
|
+
security: 4, // audit roles
|
|
155
|
+
docs: 1, // focused edits
|
|
156
|
+
};
|
|
157
|
+
return defaults[role] || 1;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Safety triggers — runaway agent detection. Scoped to `spawnedAt` so
|
|
161
|
+
// a rotation doesn't re-trigger on inherited cumulative tokens.
|
|
162
|
+
_checkSafetyTriggers(agent) {
|
|
163
|
+
const safety = this.daemon.config?.safety;
|
|
164
|
+
if (!safety || safety.autoRotate === false) return null;
|
|
165
|
+
if (!this.daemon.tokens || !agent.spawnedAt) return null;
|
|
166
|
+
|
|
167
|
+
const multiplier = this._getRoleMultiplier(agent.role);
|
|
168
|
+
const spawnedAtMs = new Date(agent.spawnedAt).getTime();
|
|
169
|
+
|
|
170
|
+
const baseCeiling = safety.tokenCeilingPerAgent;
|
|
171
|
+
const ceiling = baseCeiling > 0 ? Math.round(baseCeiling * multiplier) : 0;
|
|
172
|
+
if (ceiling > 0) {
|
|
173
|
+
const instanceTokens = this.daemon.tokens.getTokensInWindow(agent.id, spawnedAtMs);
|
|
174
|
+
if (instanceTokens >= ceiling) {
|
|
175
|
+
return {
|
|
176
|
+
reason: 'token_limit_exceeded',
|
|
177
|
+
instanceTokens,
|
|
178
|
+
ceiling,
|
|
179
|
+
multiplier,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const windowMs = (safety.velocityWindowSeconds || 300) * 1000;
|
|
185
|
+
const baseVelocityThreshold = safety.velocityTokenThreshold;
|
|
186
|
+
const velocityThreshold = baseVelocityThreshold > 0
|
|
187
|
+
? Math.round(baseVelocityThreshold * multiplier)
|
|
188
|
+
: 0;
|
|
189
|
+
if (velocityThreshold > 0) {
|
|
190
|
+
const velocity = this.daemon.tokens.getVelocity(agent.id, windowMs);
|
|
191
|
+
if (velocity >= velocityThreshold) {
|
|
192
|
+
return {
|
|
193
|
+
reason: 'runaway_velocity',
|
|
194
|
+
velocity,
|
|
195
|
+
windowMs,
|
|
196
|
+
threshold: velocityThreshold,
|
|
197
|
+
multiplier,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Compute post-rotation velocity for rotations that are old enough to
|
|
206
|
+
// have meaningful data. Replaces hardcoded savings assumptions with
|
|
207
|
+
// measured deltas. Positive velocityDelta = rotation reduced burn rate.
|
|
208
|
+
_finalizeRotationMeasurements() {
|
|
209
|
+
if (!this.daemon.tokens?.getVelocity) return;
|
|
210
|
+
const now = Date.now();
|
|
211
|
+
let modified = false;
|
|
212
|
+
for (const record of this.rotationHistory) {
|
|
213
|
+
if (record.postRotationVelocity != null) continue;
|
|
214
|
+
if (record.preRotationVelocity == null) continue;
|
|
215
|
+
if (!record.newAgentId) continue;
|
|
216
|
+
const rotatedAt = new Date(record.timestamp).getTime();
|
|
217
|
+
if (now - rotatedAt < 600_000) continue; // need 10 min of post-data
|
|
218
|
+
const postVelocity = this.daemon.tokens.getVelocity(record.newAgentId, 600_000);
|
|
219
|
+
record.postRotationVelocity = postVelocity;
|
|
220
|
+
record.velocityDelta = record.preRotationVelocity - postVelocity;
|
|
221
|
+
modified = true;
|
|
222
|
+
}
|
|
223
|
+
if (modified) this._saveHistory();
|
|
224
|
+
}
|
|
225
|
+
|
|
126
226
|
async check() {
|
|
227
|
+
this._finalizeRotationMeasurements();
|
|
228
|
+
|
|
127
229
|
const agents = this.daemon.registry.getAll();
|
|
128
230
|
const running = agents.filter((a) => a.status === 'running');
|
|
129
231
|
|
|
130
232
|
for (const agent of running) {
|
|
131
233
|
if (this.rotating.has(agent.id)) continue;
|
|
132
234
|
|
|
235
|
+
// Safety triggers — highest priority, pathological behavior.
|
|
236
|
+
// Bypasses cooldown: pathological burn must be stopped immediately.
|
|
237
|
+
const safety = this._checkSafetyTriggers(agent);
|
|
238
|
+
if (safety) {
|
|
239
|
+
const summary = safety.reason === 'token_limit_exceeded'
|
|
240
|
+
? `${safety.instanceTokens} tokens >= ${safety.ceiling} ceiling`
|
|
241
|
+
: `${safety.velocity} tokens in ${safety.windowMs / 1000}s >= ${safety.threshold} threshold`;
|
|
242
|
+
console.log(` Rotator: ${agent.name} ${safety.reason} (${summary}) — auto-rotating`);
|
|
243
|
+
await this.rotate(agent.id, safety);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Cooldown check — skip threshold-based rotations if agent just rotated.
|
|
248
|
+
// Gives the new instance time to stabilize before another judgment.
|
|
249
|
+
if (this._isInCooldown(agent)) continue;
|
|
250
|
+
|
|
133
251
|
const threshold = this.daemon.adaptive
|
|
134
252
|
? this.daemon.adaptive.getThreshold(agent.provider, agent.role)
|
|
135
253
|
: DEFAULT_THRESHOLD;
|
|
@@ -143,11 +261,17 @@ export class Rotator extends EventEmitter {
|
|
|
143
261
|
}
|
|
144
262
|
}
|
|
145
263
|
|
|
146
|
-
// Quality-based rotation — detects degradation before tokens are wasted
|
|
264
|
+
// Quality-based rotation — detects degradation before tokens are wasted.
|
|
265
|
+
// Converged provider:role profiles have stable thresholds already, so
|
|
266
|
+
// skip quality rotation there unless score is catastrophically low.
|
|
147
267
|
const quality = this.scoreLiveSession(agent);
|
|
148
268
|
if (quality.hasEnoughData && quality.score < QUALITY_THRESHOLD) {
|
|
149
|
-
|
|
150
|
-
|
|
269
|
+
const profile = this.daemon.adaptive?.getProfile?.(agent.provider, agent.role);
|
|
270
|
+
const converged = profile?.converged;
|
|
271
|
+
// If converged, require a deeper score drop before rotating
|
|
272
|
+
const floor = converged ? QUALITY_THRESHOLD - 15 : QUALITY_THRESHOLD;
|
|
273
|
+
if (quality.score < floor && this._idleMs(agent) > 10_000) {
|
|
274
|
+
console.log(` Rotator: ${agent.name} quality=${quality.score}${converged ? ' (converged profile)' : ''} — rotating (quality)`);
|
|
151
275
|
await this.rotate(agent.id, {
|
|
152
276
|
reason: 'quality_degradation',
|
|
153
277
|
qualityScore: quality.score,
|
|
@@ -191,6 +315,13 @@ export class Rotator extends EventEmitter {
|
|
|
191
315
|
brief = brief + '\n\n## User Instruction\n\n' + options.additionalPrompt;
|
|
192
316
|
}
|
|
193
317
|
|
|
318
|
+
// Capture pre-rotation velocity (tokens/10min) so we can later measure
|
|
319
|
+
// whether the rotation actually improved token efficiency. Stored in
|
|
320
|
+
// history; finalized by _finalizeRotationMeasurements() on later ticks.
|
|
321
|
+
const preRotationVelocity = this.daemon.tokens?.getVelocity
|
|
322
|
+
? this.daemon.tokens.getVelocity(agent.id, 600_000)
|
|
323
|
+
: null;
|
|
324
|
+
|
|
194
325
|
const record = {
|
|
195
326
|
agentId: agent.id,
|
|
196
327
|
agentName: agent.name,
|
|
@@ -200,9 +331,22 @@ export class Rotator extends EventEmitter {
|
|
|
200
331
|
contextUsage: agent.contextUsage,
|
|
201
332
|
reason: options.reason || 'manual',
|
|
202
333
|
qualityScore: options.qualityScore || null,
|
|
334
|
+
instanceTokens: options.instanceTokens || null,
|
|
335
|
+
velocity: options.velocity || null,
|
|
336
|
+
preRotationVelocity,
|
|
337
|
+
postRotationVelocity: null,
|
|
338
|
+
velocityDelta: null,
|
|
203
339
|
timestamp: new Date().toISOString(),
|
|
204
340
|
};
|
|
205
341
|
|
|
342
|
+
// Capture per-session signals for specialization tracking before we clear
|
|
343
|
+
const sessionSignals = classifierEvents.length > 0
|
|
344
|
+
? this.daemon.adaptive.extractSignals(classifierEvents, agent.scope)
|
|
345
|
+
: null;
|
|
346
|
+
const sessionScore = sessionSignals
|
|
347
|
+
? this.daemon.adaptive.scoreSession(sessionSignals)
|
|
348
|
+
: null;
|
|
349
|
+
|
|
206
350
|
await processes.kill(agentId);
|
|
207
351
|
|
|
208
352
|
const routingMode = this.daemon.router.getMode(agentId);
|
|
@@ -236,6 +380,35 @@ export class Rotator extends EventEmitter {
|
|
|
236
380
|
}
|
|
237
381
|
this._saveHistory();
|
|
238
382
|
|
|
383
|
+
// Append to persistent handoff chain (Layer 7 memory)
|
|
384
|
+
// so agent #50 knows what agent #1 struggled with.
|
|
385
|
+
if (this.daemon.memory) {
|
|
386
|
+
this.daemon.memory.appendHandoffBrief(agent.role, {
|
|
387
|
+
agentId: agent.id,
|
|
388
|
+
newAgentId: newAgent.id,
|
|
389
|
+
reason: record.reason,
|
|
390
|
+
oldTokens: agent.tokensUsed,
|
|
391
|
+
contextUsage: agent.contextUsage,
|
|
392
|
+
brief,
|
|
393
|
+
timestamp: record.timestamp,
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// Update per-agent + per-role specialization profile
|
|
397
|
+
const files = Array.from(new Set(
|
|
398
|
+
classifierEvents
|
|
399
|
+
.map((e) => e.input || e.file || e.path)
|
|
400
|
+
.filter((f) => typeof f === 'string' && f.length > 0)
|
|
401
|
+
.slice(-20)
|
|
402
|
+
));
|
|
403
|
+
this.daemon.memory.updateSpecialization(agent.id, {
|
|
404
|
+
role: agent.role,
|
|
405
|
+
qualityScore: sessionScore,
|
|
406
|
+
filesTouched: files,
|
|
407
|
+
signals: sessionSignals,
|
|
408
|
+
threshold: this.daemon.adaptive?.getThreshold(agent.provider, agent.role),
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
|
|
239
412
|
if (this.daemon.timeline) {
|
|
240
413
|
this.daemon.timeline.recordEvent('rotate', {
|
|
241
414
|
agentId: newAgent.id, oldAgentId: agentId,
|
|
@@ -243,6 +416,8 @@ export class Rotator extends EventEmitter {
|
|
|
243
416
|
tokensBefore: agent.tokensUsed,
|
|
244
417
|
reason: record.reason,
|
|
245
418
|
qualityScore: record.qualityScore,
|
|
419
|
+
instanceTokens: record.instanceTokens,
|
|
420
|
+
velocity: record.velocity,
|
|
246
421
|
});
|
|
247
422
|
}
|
|
248
423
|
|
|
@@ -332,6 +507,8 @@ export class Rotator extends EventEmitter {
|
|
|
332
507
|
const qualityRotations = this.rotationHistory.filter((r) => r.reason === 'quality_degradation').length;
|
|
333
508
|
const contextRotations = this.rotationHistory.filter((r) => r.reason === 'context_threshold').length;
|
|
334
509
|
const naturalCompactions = this.rotationHistory.filter((r) => r.reason === 'natural_compaction').length;
|
|
510
|
+
const tokenLimitRotations = this.rotationHistory.filter((r) => r.reason === 'token_limit_exceeded').length;
|
|
511
|
+
const velocityRotations = this.rotationHistory.filter((r) => r.reason === 'runaway_velocity').length;
|
|
335
512
|
return {
|
|
336
513
|
enabled: this.enabled,
|
|
337
514
|
totalRotations,
|
|
@@ -339,6 +516,8 @@ export class Rotator extends EventEmitter {
|
|
|
339
516
|
qualityRotations,
|
|
340
517
|
contextRotations,
|
|
341
518
|
naturalCompactions,
|
|
519
|
+
tokenLimitRotations,
|
|
520
|
+
velocityRotations,
|
|
342
521
|
rotating: Array.from(this.rotating),
|
|
343
522
|
liveScores: this.liveScores,
|
|
344
523
|
scoreHistory: this.scoreHistory,
|