groove-dev 0.27.93 → 0.27.96
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 +7 -0
- package/README.md +25 -52
- package/moe-training/package.json +2 -1
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/api.js +39 -23
- package/node_modules/@groove-dev/daemon/src/introducer.js +21 -6
- package/node_modules/@groove-dev/daemon/src/process.js +20 -2
- package/node_modules/@groove-dev/daemon/src/providers/gemini.js +27 -28
- package/node_modules/@groove-dev/gui/dist/assets/{index-VB4_k5Pz.js → index-BgTyFy4f.js} +331 -331
- package/node_modules/@groove-dev/gui/dist/assets/{index-Bo6AeNmM.css → index-QADLyUj5.css} +1 -1
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-file-tree.jsx +68 -16
- package/node_modules/@groove-dev/gui/src/components/agents/agent-panel.jsx +2 -0
- package/node_modules/@groove-dev/gui/src/components/agents/code-review.jsx +9 -1
- package/node_modules/@groove-dev/gui/src/components/agents/workspace-mode.jsx +2 -2
- package/node_modules/@groove-dev/gui/src/components/editor/code-editor.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +40 -26
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +14 -65
- package/node_modules/base64-js/LICENSE +21 -0
- package/node_modules/base64-js/README.md +34 -0
- package/node_modules/base64-js/base64js.min.js +1 -0
- package/node_modules/base64-js/index.d.ts +3 -0
- package/node_modules/base64-js/index.js +150 -0
- package/node_modules/base64-js/package.json +47 -0
- package/node_modules/better-sqlite3/LICENSE +21 -0
- package/node_modules/better-sqlite3/README.md +99 -0
- package/node_modules/better-sqlite3/binding.gyp +38 -0
- package/node_modules/better-sqlite3/deps/common.gypi +68 -0
- package/node_modules/better-sqlite3/deps/copy.js +31 -0
- package/node_modules/better-sqlite3/deps/defines.gypi +41 -0
- package/node_modules/better-sqlite3/deps/download.sh +122 -0
- package/node_modules/better-sqlite3/deps/patches/1208.patch +15 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +268845 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +14335 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +739 -0
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +80 -0
- package/node_modules/better-sqlite3/deps/test_extension.c +21 -0
- package/node_modules/better-sqlite3/lib/database.js +90 -0
- package/node_modules/better-sqlite3/lib/index.js +3 -0
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
- package/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
- package/node_modules/better-sqlite3/lib/methods/function.js +31 -0
- package/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
- package/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
- package/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
- package/node_modules/better-sqlite3/lib/methods/table.js +189 -0
- package/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
- package/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
- package/node_modules/better-sqlite3/lib/util.js +12 -0
- package/node_modules/better-sqlite3/package.json +59 -0
- package/node_modules/better-sqlite3/src/addon.cpp +47 -0
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +74 -0
- package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
- package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
- package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
- package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
- package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
- package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
- package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
- package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
- package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
- package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
- package/node_modules/better-sqlite3/src/util/macros.cpp +83 -0
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
- package/node_modules/bindings/LICENSE.md +22 -0
- package/node_modules/bindings/README.md +98 -0
- package/node_modules/bindings/bindings.js +221 -0
- package/node_modules/bindings/package.json +28 -0
- package/node_modules/bl/.travis.yml +17 -0
- package/node_modules/bl/BufferList.js +396 -0
- package/node_modules/bl/LICENSE.md +13 -0
- package/node_modules/bl/README.md +247 -0
- package/node_modules/bl/bl.js +84 -0
- package/node_modules/bl/package.json +37 -0
- package/node_modules/bl/test/convert.js +21 -0
- package/node_modules/bl/test/indexOf.js +492 -0
- package/node_modules/bl/test/isBufferList.js +32 -0
- package/node_modules/bl/test/test.js +869 -0
- package/node_modules/buffer/AUTHORS.md +70 -0
- package/node_modules/buffer/LICENSE +21 -0
- package/node_modules/buffer/README.md +410 -0
- package/node_modules/buffer/index.d.ts +186 -0
- package/node_modules/buffer/index.js +1817 -0
- package/node_modules/buffer/package.json +96 -0
- package/node_modules/decompress-response/index.d.ts +22 -0
- package/node_modules/decompress-response/index.js +58 -0
- package/node_modules/decompress-response/license +9 -0
- package/node_modules/decompress-response/node_modules/mimic-response/index.d.ts +17 -0
- package/node_modules/decompress-response/node_modules/mimic-response/index.js +77 -0
- package/node_modules/decompress-response/node_modules/mimic-response/license +9 -0
- package/node_modules/decompress-response/node_modules/mimic-response/package.json +42 -0
- package/node_modules/decompress-response/node_modules/mimic-response/readme.md +78 -0
- package/node_modules/decompress-response/package.json +56 -0
- package/node_modules/decompress-response/readme.md +48 -0
- package/node_modules/deep-extend/LICENSE +20 -0
- package/node_modules/deep-extend/README.md +91 -0
- package/node_modules/deep-extend/index.js +1 -0
- package/node_modules/deep-extend/lib/deep-extend.js +150 -0
- package/node_modules/deep-extend/package.json +62 -0
- package/node_modules/end-of-stream/LICENSE +21 -0
- package/node_modules/end-of-stream/README.md +54 -0
- package/node_modules/end-of-stream/index.js +96 -0
- package/node_modules/end-of-stream/package.json +37 -0
- package/node_modules/expand-template/.travis.yml +6 -0
- package/node_modules/expand-template/LICENSE +21 -0
- package/node_modules/expand-template/README.md +43 -0
- package/node_modules/expand-template/index.js +26 -0
- package/node_modules/expand-template/package.json +29 -0
- package/node_modules/expand-template/test.js +67 -0
- package/node_modules/file-uri-to-path/.npmignore +1 -0
- package/node_modules/file-uri-to-path/.travis.yml +30 -0
- package/node_modules/file-uri-to-path/History.md +21 -0
- package/node_modules/file-uri-to-path/LICENSE +20 -0
- package/node_modules/file-uri-to-path/README.md +74 -0
- package/node_modules/file-uri-to-path/index.d.ts +2 -0
- package/node_modules/file-uri-to-path/index.js +66 -0
- package/node_modules/file-uri-to-path/package.json +32 -0
- package/node_modules/file-uri-to-path/test/test.js +24 -0
- package/node_modules/file-uri-to-path/test/tests.json +13 -0
- package/node_modules/fs-constants/LICENSE +21 -0
- package/node_modules/fs-constants/README.md +26 -0
- package/node_modules/fs-constants/browser.js +1 -0
- package/node_modules/fs-constants/index.js +1 -0
- package/node_modules/fs-constants/package.json +19 -0
- package/node_modules/github-from-package/.travis.yml +4 -0
- package/node_modules/github-from-package/LICENSE +18 -0
- package/node_modules/github-from-package/example/package.json +8 -0
- package/node_modules/github-from-package/example/url.js +3 -0
- package/node_modules/github-from-package/index.js +17 -0
- package/node_modules/github-from-package/package.json +30 -0
- package/node_modules/github-from-package/readme.markdown +53 -0
- package/node_modules/github-from-package/test/a.json +8 -0
- package/node_modules/github-from-package/test/b.json +5 -0
- package/node_modules/github-from-package/test/c.json +5 -0
- package/node_modules/github-from-package/test/d.json +7 -0
- package/node_modules/github-from-package/test/e.json +5 -0
- package/node_modules/github-from-package/test/url.js +19 -0
- package/node_modules/ieee754/LICENSE +11 -0
- package/node_modules/ieee754/README.md +51 -0
- package/node_modules/ieee754/index.d.ts +10 -0
- package/node_modules/ieee754/index.js +85 -0
- package/node_modules/ieee754/package.json +52 -0
- package/node_modules/ini/LICENSE +15 -0
- package/node_modules/ini/README.md +102 -0
- package/node_modules/ini/ini.js +206 -0
- package/node_modules/ini/package.json +33 -0
- package/node_modules/minimist/.eslintrc +29 -0
- package/node_modules/minimist/.github/FUNDING.yml +12 -0
- package/node_modules/minimist/.nycrc +14 -0
- package/node_modules/minimist/CHANGELOG.md +298 -0
- package/node_modules/minimist/LICENSE +18 -0
- package/node_modules/minimist/README.md +121 -0
- package/node_modules/minimist/example/parse.js +4 -0
- package/node_modules/minimist/index.js +263 -0
- package/node_modules/minimist/package.json +75 -0
- package/node_modules/minimist/test/all_bool.js +34 -0
- package/node_modules/minimist/test/bool.js +177 -0
- package/node_modules/minimist/test/dash.js +43 -0
- package/node_modules/minimist/test/default_bool.js +37 -0
- package/node_modules/minimist/test/dotted.js +24 -0
- package/node_modules/minimist/test/kv_short.js +32 -0
- package/node_modules/minimist/test/long.js +33 -0
- package/node_modules/minimist/test/num.js +38 -0
- package/node_modules/minimist/test/parse.js +209 -0
- package/node_modules/minimist/test/parse_modified.js +11 -0
- package/node_modules/minimist/test/proto.js +64 -0
- package/node_modules/minimist/test/short.js +69 -0
- package/node_modules/minimist/test/stop_early.js +17 -0
- package/node_modules/minimist/test/unknown.js +104 -0
- package/node_modules/minimist/test/whitespace.js +10 -0
- package/node_modules/mkdirp-classic/LICENSE +21 -0
- package/node_modules/mkdirp-classic/README.md +18 -0
- package/node_modules/mkdirp-classic/index.js +98 -0
- package/node_modules/mkdirp-classic/package.json +18 -0
- package/node_modules/moe-training/DEPLOY_CENTRAL_COMMAND.md +413 -0
- package/node_modules/moe-training/client/consent.js +96 -0
- package/node_modules/moe-training/client/envelope-builder.js +56 -0
- package/node_modules/moe-training/client/index.js +10 -0
- package/node_modules/moe-training/client/parsers/claude-code.js +108 -0
- package/node_modules/moe-training/client/parsers/codex.js +80 -0
- package/node_modules/moe-training/client/parsers/gemini.js +80 -0
- package/node_modules/moe-training/client/parsers/grok.js +16 -0
- package/node_modules/moe-training/client/parsers/index.js +20 -0
- package/node_modules/moe-training/client/scrubber.js +128 -0
- package/node_modules/moe-training/client/session-attestation.js +115 -0
- package/node_modules/moe-training/client/step-classifier.js +68 -0
- package/node_modules/moe-training/client/trajectory-capture.js +307 -0
- package/node_modules/moe-training/client/transmission-queue.js +104 -0
- package/node_modules/moe-training/package.json +21 -0
- package/node_modules/moe-training/server/enrichment.js +24 -0
- package/node_modules/moe-training/server/index.js +119 -0
- package/node_modules/moe-training/server/ledger.js +110 -0
- package/node_modules/moe-training/server/routes/ingest.js +96 -0
- package/node_modules/moe-training/server/routes/sessions.js +43 -0
- package/node_modules/moe-training/server/routes/stats.js +31 -0
- package/node_modules/moe-training/server/scoring.js +63 -0
- package/node_modules/moe-training/server/session-registry.js +156 -0
- package/node_modules/moe-training/server/stats.js +129 -0
- package/node_modules/moe-training/server/stitcher.js +69 -0
- package/node_modules/moe-training/server/storage.js +147 -0
- package/node_modules/moe-training/server/verifier.js +102 -0
- package/node_modules/moe-training/shared/constants.js +30 -0
- package/node_modules/moe-training/shared/crypto.js +45 -0
- package/node_modules/moe-training/shared/envelope-schema.js +220 -0
- package/node_modules/moe-training/test/client/consent.test.js +121 -0
- package/node_modules/moe-training/test/client/envelope-builder.test.js +107 -0
- package/node_modules/moe-training/test/client/parsers/claude-code.test.js +119 -0
- package/node_modules/moe-training/test/client/parsers/codex.test.js +83 -0
- package/node_modules/moe-training/test/client/parsers/gemini.test.js +99 -0
- package/node_modules/moe-training/test/client/scrubber.test.js +143 -0
- package/node_modules/moe-training/test/client/session-attestation-security.test.js +95 -0
- package/node_modules/moe-training/test/client/step-classifier.test.js +135 -0
- package/node_modules/moe-training/test/client/transmission-queue.test.js +33 -0
- package/node_modules/moe-training/test/integration/handshake.test.js +260 -0
- package/node_modules/moe-training/test/server/ingest-security.test.js +166 -0
- package/node_modules/moe-training/test/server/ledger.test.js +131 -0
- package/node_modules/moe-training/test/server/scoring.test.js +242 -0
- package/node_modules/moe-training/test/server/session-registry.test.js +125 -0
- package/node_modules/moe-training/test/server/stitcher.test.js +157 -0
- package/node_modules/moe-training/test/server/verifier.test.js +232 -0
- package/node_modules/moe-training/test/shared/crypto.test.js +87 -0
- package/node_modules/moe-training/test/shared/envelope-schema.test.js +351 -0
- package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +31 -0
- package/node_modules/napi-build-utils/LICENSE +21 -0
- package/node_modules/napi-build-utils/README.md +52 -0
- package/node_modules/napi-build-utils/index.js +214 -0
- package/node_modules/napi-build-utils/index.md +0 -0
- package/node_modules/napi-build-utils/package.json +42 -0
- package/node_modules/prebuild-install/CHANGELOG.md +131 -0
- package/node_modules/prebuild-install/CONTRIBUTING.md +6 -0
- package/node_modules/prebuild-install/LICENSE +21 -0
- package/node_modules/prebuild-install/README.md +163 -0
- package/node_modules/prebuild-install/asset.js +44 -0
- package/node_modules/prebuild-install/bin.js +78 -0
- package/node_modules/prebuild-install/download.js +142 -0
- package/node_modules/prebuild-install/error.js +14 -0
- package/node_modules/prebuild-install/help.txt +16 -0
- package/node_modules/prebuild-install/index.js +1 -0
- package/node_modules/prebuild-install/log.js +33 -0
- package/node_modules/prebuild-install/node_modules/node-abi/LICENSE +21 -0
- package/node_modules/prebuild-install/node_modules/node-abi/README.md +54 -0
- package/node_modules/prebuild-install/node_modules/node-abi/abi_registry.json +439 -0
- package/node_modules/prebuild-install/node_modules/node-abi/index.js +179 -0
- package/node_modules/prebuild-install/node_modules/node-abi/package.json +45 -0
- package/node_modules/prebuild-install/node_modules/semver/LICENSE +15 -0
- package/node_modules/prebuild-install/node_modules/semver/README.md +665 -0
- package/node_modules/prebuild-install/node_modules/semver/bin/semver.js +191 -0
- package/node_modules/prebuild-install/node_modules/semver/classes/comparator.js +143 -0
- package/node_modules/prebuild-install/node_modules/semver/classes/index.js +7 -0
- package/node_modules/prebuild-install/node_modules/semver/classes/range.js +557 -0
- package/node_modules/prebuild-install/node_modules/semver/classes/semver.js +333 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/clean.js +8 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/cmp.js +54 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/coerce.js +62 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/compare-build.js +9 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/compare-loose.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/compare.js +7 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/diff.js +60 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/eq.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/gt.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/gte.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/inc.js +21 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/lt.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/lte.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/major.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/minor.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/neq.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/parse.js +18 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/patch.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/prerelease.js +8 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/rcompare.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/rsort.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/satisfies.js +12 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/sort.js +5 -0
- package/node_modules/prebuild-install/node_modules/semver/functions/valid.js +8 -0
- package/node_modules/prebuild-install/node_modules/semver/index.js +91 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/constants.js +37 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/debug.js +11 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/identifiers.js +29 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/lrucache.js +42 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/parse-options.js +17 -0
- package/node_modules/prebuild-install/node_modules/semver/internal/re.js +223 -0
- package/node_modules/prebuild-install/node_modules/semver/package.json +78 -0
- package/node_modules/prebuild-install/node_modules/semver/preload.js +4 -0
- package/node_modules/prebuild-install/node_modules/semver/range.bnf +16 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/gtr.js +6 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/intersects.js +9 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/ltr.js +6 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/min-version.js +63 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/outside.js +82 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/simplify.js +49 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/subset.js +249 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/to-comparators.js +10 -0
- package/node_modules/prebuild-install/node_modules/semver/ranges/valid.js +13 -0
- package/node_modules/prebuild-install/package.json +67 -0
- package/node_modules/prebuild-install/proxy.js +35 -0
- package/node_modules/prebuild-install/rc.js +64 -0
- package/node_modules/prebuild-install/util.js +143 -0
- package/node_modules/pump/.github/FUNDING.yml +2 -0
- package/node_modules/pump/.travis.yml +5 -0
- package/node_modules/pump/LICENSE +21 -0
- package/node_modules/pump/README.md +74 -0
- package/node_modules/pump/SECURITY.md +5 -0
- package/node_modules/pump/empty.js +1 -0
- package/node_modules/pump/index.js +86 -0
- package/node_modules/pump/package.json +30 -0
- package/node_modules/pump/test-browser.js +66 -0
- package/node_modules/pump/test-node.js +53 -0
- package/node_modules/rc/LICENSE.APACHE2 +15 -0
- package/node_modules/rc/LICENSE.BSD +26 -0
- package/node_modules/rc/LICENSE.MIT +24 -0
- package/node_modules/rc/README.md +227 -0
- package/node_modules/rc/browser.js +7 -0
- package/node_modules/rc/cli.js +4 -0
- package/node_modules/rc/index.js +53 -0
- package/node_modules/rc/lib/utils.js +104 -0
- package/node_modules/rc/package.json +29 -0
- package/node_modules/rc/test/ini.js +16 -0
- package/node_modules/rc/test/nested-env-vars.js +50 -0
- package/node_modules/rc/test/test.js +59 -0
- package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
- package/node_modules/readable-stream/GOVERNANCE.md +136 -0
- package/node_modules/readable-stream/LICENSE +47 -0
- package/node_modules/readable-stream/README.md +106 -0
- package/node_modules/readable-stream/errors-browser.js +127 -0
- package/node_modules/readable-stream/errors.js +116 -0
- package/node_modules/readable-stream/experimentalWarning.js +17 -0
- package/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
- package/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
- package/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
- package/node_modules/readable-stream/lib/_stream_transform.js +190 -0
- package/node_modules/readable-stream/lib/_stream_writable.js +641 -0
- package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
- package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
- package/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- package/node_modules/readable-stream/package.json +68 -0
- package/node_modules/readable-stream/readable-browser.js +9 -0
- package/node_modules/readable-stream/readable.js +16 -0
- package/node_modules/simple-concat/.travis.yml +3 -0
- package/node_modules/simple-concat/LICENSE +20 -0
- package/node_modules/simple-concat/README.md +44 -0
- package/node_modules/simple-concat/index.js +15 -0
- package/node_modules/simple-concat/package.json +47 -0
- package/node_modules/simple-concat/test/basic.js +41 -0
- package/node_modules/simple-get/.github/dependabot.yml +15 -0
- package/node_modules/simple-get/.github/workflows/ci.yml +23 -0
- package/node_modules/simple-get/LICENSE +20 -0
- package/node_modules/simple-get/README.md +333 -0
- package/node_modules/simple-get/index.js +108 -0
- package/node_modules/simple-get/package.json +67 -0
- package/node_modules/string_decoder/LICENSE +48 -0
- package/node_modules/string_decoder/README.md +47 -0
- package/node_modules/string_decoder/lib/string_decoder.js +296 -0
- package/node_modules/string_decoder/package.json +34 -0
- package/node_modules/strip-json-comments/index.js +70 -0
- package/node_modules/strip-json-comments/license +21 -0
- package/node_modules/strip-json-comments/package.json +42 -0
- package/node_modules/strip-json-comments/readme.md +64 -0
- package/node_modules/tar-fs/.travis.yml +6 -0
- package/node_modules/tar-fs/LICENSE +21 -0
- package/node_modules/tar-fs/README.md +165 -0
- package/node_modules/tar-fs/index.js +363 -0
- package/node_modules/tar-fs/node_modules/chownr/LICENSE +15 -0
- package/node_modules/tar-fs/node_modules/chownr/README.md +3 -0
- package/node_modules/tar-fs/node_modules/chownr/chownr.js +167 -0
- package/node_modules/tar-fs/node_modules/chownr/package.json +29 -0
- package/node_modules/tar-fs/package.json +41 -0
- package/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
- package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
- package/node_modules/tar-fs/test/fixtures/e/file +0 -0
- package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
- package/node_modules/tar-fs/test/index.js +346 -0
- package/node_modules/tar-stream/LICENSE +21 -0
- package/node_modules/tar-stream/README.md +168 -0
- package/node_modules/tar-stream/extract.js +257 -0
- package/node_modules/tar-stream/headers.js +295 -0
- package/node_modules/tar-stream/index.js +2 -0
- package/node_modules/tar-stream/pack.js +255 -0
- package/node_modules/tar-stream/package.json +58 -0
- package/node_modules/tar-stream/sandbox.js +11 -0
- package/node_modules/tunnel-agent/LICENSE +55 -0
- package/node_modules/tunnel-agent/README.md +4 -0
- package/node_modules/tunnel-agent/index.js +244 -0
- package/node_modules/tunnel-agent/package.json +22 -0
- package/node_modules/util-deprecate/History.md +16 -0
- package/node_modules/util-deprecate/LICENSE +24 -0
- package/node_modules/util-deprecate/README.md +53 -0
- package/node_modules/util-deprecate/browser.js +67 -0
- package/node_modules/util-deprecate/node.js +6 -0
- package/node_modules/util-deprecate/package.json +27 -0
- package/node_modules/uuid/CHANGELOG.md +274 -0
- package/node_modules/uuid/CONTRIBUTING.md +18 -0
- package/node_modules/uuid/LICENSE.md +9 -0
- package/node_modules/uuid/README.md +466 -0
- package/node_modules/uuid/dist/bin/uuid +2 -0
- package/node_modules/uuid/dist/commonjs-browser/index.js +79 -0
- package/node_modules/uuid/dist/commonjs-browser/md5.js +223 -0
- package/node_modules/uuid/dist/commonjs-browser/native.js +11 -0
- package/node_modules/uuid/dist/commonjs-browser/nil.js +8 -0
- package/node_modules/uuid/dist/commonjs-browser/parse.js +45 -0
- package/node_modules/uuid/dist/commonjs-browser/regex.js +8 -0
- package/node_modules/uuid/dist/commonjs-browser/rng.js +25 -0
- package/node_modules/uuid/dist/commonjs-browser/sha1.js +104 -0
- package/node_modules/uuid/dist/commonjs-browser/stringify.js +44 -0
- package/node_modules/uuid/dist/commonjs-browser/v1.js +107 -0
- package/node_modules/uuid/dist/commonjs-browser/v3.js +16 -0
- package/node_modules/uuid/dist/commonjs-browser/v35.js +80 -0
- package/node_modules/uuid/dist/commonjs-browser/v4.js +43 -0
- package/node_modules/uuid/dist/commonjs-browser/v5.js +16 -0
- package/node_modules/uuid/dist/commonjs-browser/validate.js +17 -0
- package/node_modules/uuid/dist/commonjs-browser/version.js +21 -0
- package/node_modules/uuid/dist/esm-browser/index.js +9 -0
- package/node_modules/uuid/dist/esm-browser/md5.js +215 -0
- package/node_modules/uuid/dist/esm-browser/native.js +4 -0
- package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
- package/node_modules/uuid/dist/esm-browser/parse.js +35 -0
- package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
- package/node_modules/uuid/dist/esm-browser/rng.js +18 -0
- package/node_modules/uuid/dist/esm-browser/sha1.js +96 -0
- package/node_modules/uuid/dist/esm-browser/stringify.js +33 -0
- package/node_modules/uuid/dist/esm-browser/v1.js +95 -0
- package/node_modules/uuid/dist/esm-browser/v3.js +4 -0
- package/node_modules/uuid/dist/esm-browser/v35.js +66 -0
- package/node_modules/uuid/dist/esm-browser/v4.js +29 -0
- package/node_modules/uuid/dist/esm-browser/v5.js +4 -0
- package/node_modules/uuid/dist/esm-browser/validate.js +7 -0
- package/node_modules/uuid/dist/esm-browser/version.js +11 -0
- package/node_modules/uuid/dist/esm-node/index.js +9 -0
- package/node_modules/uuid/dist/esm-node/md5.js +13 -0
- package/node_modules/uuid/dist/esm-node/native.js +4 -0
- package/node_modules/uuid/dist/esm-node/nil.js +1 -0
- package/node_modules/uuid/dist/esm-node/parse.js +35 -0
- package/node_modules/uuid/dist/esm-node/regex.js +1 -0
- package/node_modules/uuid/dist/esm-node/rng.js +12 -0
- package/node_modules/uuid/dist/esm-node/sha1.js +13 -0
- package/node_modules/uuid/dist/esm-node/stringify.js +33 -0
- package/node_modules/uuid/dist/esm-node/v1.js +95 -0
- package/node_modules/uuid/dist/esm-node/v3.js +4 -0
- package/node_modules/uuid/dist/esm-node/v35.js +66 -0
- package/node_modules/uuid/dist/esm-node/v4.js +29 -0
- package/node_modules/uuid/dist/esm-node/v5.js +4 -0
- package/node_modules/uuid/dist/esm-node/validate.js +7 -0
- package/node_modules/uuid/dist/esm-node/version.js +11 -0
- package/node_modules/uuid/dist/index.js +79 -0
- package/node_modules/uuid/dist/md5-browser.js +223 -0
- package/node_modules/uuid/dist/md5.js +23 -0
- package/node_modules/uuid/dist/native-browser.js +11 -0
- package/node_modules/uuid/dist/native.js +15 -0
- package/node_modules/uuid/dist/nil.js +8 -0
- package/node_modules/uuid/dist/parse.js +45 -0
- package/node_modules/uuid/dist/regex.js +8 -0
- package/node_modules/uuid/dist/rng-browser.js +25 -0
- package/node_modules/uuid/dist/rng.js +24 -0
- package/node_modules/uuid/dist/sha1-browser.js +104 -0
- package/node_modules/uuid/dist/sha1.js +23 -0
- package/node_modules/uuid/dist/stringify.js +44 -0
- package/node_modules/uuid/dist/uuid-bin.js +85 -0
- package/node_modules/uuid/dist/v1.js +107 -0
- package/node_modules/uuid/dist/v3.js +16 -0
- package/node_modules/uuid/dist/v35.js +80 -0
- package/node_modules/uuid/dist/v4.js +43 -0
- package/node_modules/uuid/dist/v5.js +16 -0
- package/node_modules/uuid/dist/validate.js +17 -0
- package/node_modules/uuid/dist/version.js +21 -0
- package/node_modules/uuid/package.json +135 -0
- package/node_modules/uuid/wrapper.mjs +10 -0
- package/package.json +5 -3
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/api.js +39 -23
- package/packages/daemon/src/introducer.js +21 -6
- package/packages/daemon/src/process.js +20 -2
- package/packages/daemon/src/providers/gemini.js +27 -28
- package/packages/gui/dist/assets/{index-VB4_k5Pz.js → index-BgTyFy4f.js} +331 -331
- package/packages/gui/dist/assets/{index-Bo6AeNmM.css → index-QADLyUj5.css} +1 -1
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/components/agents/agent-file-tree.jsx +68 -16
- package/packages/gui/src/components/agents/agent-panel.jsx +2 -0
- package/packages/gui/src/components/agents/code-review.jsx +9 -1
- package/packages/gui/src/components/agents/workspace-mode.jsx +2 -2
- package/packages/gui/src/components/editor/code-editor.jsx +1 -1
- package/packages/gui/src/stores/groove.js +40 -26
- package/packages/gui/src/views/agents.jsx +14 -65
- package/workspace.png +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
export class CodexParser {
|
|
4
|
+
constructor() {
|
|
5
|
+
this._sessionId = null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
parseEvent(jsonEvent) {
|
|
9
|
+
if (!jsonEvent || !jsonEvent.type) return null;
|
|
10
|
+
|
|
11
|
+
switch (jsonEvent.type) {
|
|
12
|
+
case 'thread.started': {
|
|
13
|
+
this._sessionId = jsonEvent.thread_id || null;
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
case 'item.started': {
|
|
18
|
+
const item = jsonEvent.item || {};
|
|
19
|
+
if (item.type === 'agent_message') {
|
|
20
|
+
return { type: 'thought', content: item.text || '' };
|
|
21
|
+
}
|
|
22
|
+
if (item.type === 'command_execution') {
|
|
23
|
+
return { type: 'action', tool: 'command_execution', arguments: { command: item.command }, content: `Executing: ${item.command || ''}` };
|
|
24
|
+
}
|
|
25
|
+
if (item.type === 'file_edit' || item.type === 'file_write') {
|
|
26
|
+
return { type: 'action', tool: item.type, arguments: { path: item.path || item.file || '' }, content: `${item.type}: ${item.path || item.file || ''}` };
|
|
27
|
+
}
|
|
28
|
+
if (item.type === 'file_read') {
|
|
29
|
+
return { type: 'action', tool: 'file_read', arguments: { path: item.path || item.file || '' }, content: `Reading: ${item.path || item.file || ''}` };
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
case 'item.completed': {
|
|
35
|
+
const item = jsonEvent.item || {};
|
|
36
|
+
if (item.type === 'agent_message') {
|
|
37
|
+
return { type: 'thought', content: item.text || '' };
|
|
38
|
+
}
|
|
39
|
+
if (item.type === 'command_execution') {
|
|
40
|
+
const output = (item.aggregated_output || '').slice(0, 2000);
|
|
41
|
+
if (item.exit_code !== 0) {
|
|
42
|
+
return { type: 'error', content: output || `Exit code: ${item.exit_code}` };
|
|
43
|
+
}
|
|
44
|
+
return { type: 'observation', content: output };
|
|
45
|
+
}
|
|
46
|
+
if (item.type === 'file_edit' || item.type === 'file_write' || item.type === 'file_read') {
|
|
47
|
+
const output = (item.output || item.content || '').slice(0, 2000);
|
|
48
|
+
return { type: 'observation', content: output };
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
case 'turn.completed': {
|
|
54
|
+
return { type: 'resolution', content: '' };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
default:
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
extractTokens(jsonEvent) {
|
|
63
|
+
if (!jsonEvent) return null;
|
|
64
|
+
const usage = jsonEvent.usage || jsonEvent.item?.usage;
|
|
65
|
+
if (!usage) return null;
|
|
66
|
+
return {
|
|
67
|
+
input: usage.input_tokens || 0,
|
|
68
|
+
output: usage.output_tokens || 0,
|
|
69
|
+
cacheRead: 0,
|
|
70
|
+
cacheCreation: 0,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
extractSessionId(jsonEvent) {
|
|
75
|
+
if (jsonEvent?.type === 'thread.started') {
|
|
76
|
+
return jsonEvent.thread_id || null;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
export class GeminiParser {
|
|
4
|
+
constructor() {
|
|
5
|
+
this._sessionId = null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
parseEvent(jsonEvent) {
|
|
9
|
+
if (!jsonEvent || !jsonEvent.type) return null;
|
|
10
|
+
|
|
11
|
+
switch (jsonEvent.type) {
|
|
12
|
+
case 'agent_start': {
|
|
13
|
+
this._sessionId = jsonEvent.streamId || null;
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
case 'message': {
|
|
18
|
+
if (jsonEvent.role === 'user') return null;
|
|
19
|
+
const raw = jsonEvent.content;
|
|
20
|
+
const parts = Array.isArray(raw) ? raw : (typeof raw === 'string' ? [{ text: raw }] : raw ? [raw] : []);
|
|
21
|
+
|
|
22
|
+
for (const part of parts) {
|
|
23
|
+
if (part.type === 'thought') {
|
|
24
|
+
return { type: 'thought', content: part.thought || part.text || '' };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const text = parts.map((p) => p.text || '').filter(Boolean).join('\n');
|
|
29
|
+
if (text) {
|
|
30
|
+
return { type: 'thought', content: text };
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
case 'tool_request': {
|
|
36
|
+
return {
|
|
37
|
+
type: 'action',
|
|
38
|
+
tool: jsonEvent.name || 'Tool',
|
|
39
|
+
arguments: jsonEvent.args || {},
|
|
40
|
+
content: `Using ${jsonEvent.name || 'Tool'}`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
case 'tool_response': {
|
|
45
|
+
const rawContent = jsonEvent.content;
|
|
46
|
+
const contentParts = Array.isArray(rawContent) ? rawContent : (typeof rawContent === 'string' ? [{ text: rawContent }] : rawContent ? [rawContent] : []);
|
|
47
|
+
const content = contentParts.map((p) => p.text || '').join('').slice(0, 2000);
|
|
48
|
+
return { type: 'observation', content };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
case 'error': {
|
|
52
|
+
return { type: 'error', content: jsonEvent.message || 'Unknown error' };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
case 'agent_end': {
|
|
56
|
+
return { type: 'resolution', content: '' };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
default:
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
extractTokens(jsonEvent) {
|
|
65
|
+
if (!jsonEvent || jsonEvent.type !== 'usage') return null;
|
|
66
|
+
return {
|
|
67
|
+
input: jsonEvent.inputTokens || 0,
|
|
68
|
+
output: jsonEvent.outputTokens || 0,
|
|
69
|
+
cacheRead: jsonEvent.cachedTokens || 0,
|
|
70
|
+
cacheCreation: 0,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
extractSessionId(jsonEvent) {
|
|
75
|
+
if (jsonEvent?.type === 'agent_start') {
|
|
76
|
+
return jsonEvent.streamId || null;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
export class GrokParser {
|
|
4
|
+
// TODO: Grok agentic CLI not yet available. Wire up when headless CLI is built.
|
|
5
|
+
parseEvent(_jsonEvent) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
extractTokens(_jsonEvent) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
extractSessionId(_jsonEvent) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
import { SUPPORTED_PROVIDERS } from '../../shared/constants.js';
|
|
4
|
+
import { ClaudeCodeParser } from './claude-code.js';
|
|
5
|
+
import { CodexParser } from './codex.js';
|
|
6
|
+
import { GeminiParser } from './gemini.js';
|
|
7
|
+
import { GrokParser } from './grok.js';
|
|
8
|
+
|
|
9
|
+
const constructors = {
|
|
10
|
+
'claude-code': ClaudeCodeParser,
|
|
11
|
+
'codex': CodexParser,
|
|
12
|
+
'gemini': GeminiParser,
|
|
13
|
+
'grok': GrokParser,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function getParser(providerName) {
|
|
17
|
+
if (!SUPPORTED_PROVIDERS.includes(providerName)) return null;
|
|
18
|
+
const Ctor = constructors[providerName];
|
|
19
|
+
return Ctor ? new Ctor() : null;
|
|
20
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
function luhnCheck(digits) {
|
|
4
|
+
let sum = 0;
|
|
5
|
+
let alt = false;
|
|
6
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
7
|
+
let n = parseInt(digits[i], 10);
|
|
8
|
+
if (alt) {
|
|
9
|
+
n *= 2;
|
|
10
|
+
if (n > 9) n -= 9;
|
|
11
|
+
}
|
|
12
|
+
sum += n;
|
|
13
|
+
alt = !alt;
|
|
14
|
+
}
|
|
15
|
+
return sum % 10 === 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class PIIScrubber {
|
|
19
|
+
constructor() {
|
|
20
|
+
this._patterns = [
|
|
21
|
+
{
|
|
22
|
+
name: 'pem_private_key',
|
|
23
|
+
regex: /-----BEGIN[A-Z ]*PRIVATE KEY-----[\s\S]*?-----END[A-Z ]*PRIVATE KEY-----/g,
|
|
24
|
+
replacement: '[PRIVATE_KEY]',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'aws_key',
|
|
28
|
+
regex: /AKIA[0-9A-Z]{16}/g,
|
|
29
|
+
replacement: '[AWS_KEY]',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'jwt_token',
|
|
33
|
+
regex: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g,
|
|
34
|
+
replacement: '[API_KEY]',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'bearer_token',
|
|
38
|
+
regex: /Bearer\s+[A-Za-z0-9._~+/\-]+=*/g,
|
|
39
|
+
replacement: '[API_KEY]',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'sk_pk_key',
|
|
43
|
+
regex: /(?:sk|pk)_[a-zA-Z0-9_]{20,}/g,
|
|
44
|
+
replacement: '[API_KEY]',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'credit_card',
|
|
48
|
+
regex: /\b(\d{4})[- ]?(\d{4})[- ]?(\d{4})[- ]?(\d{4})\b/g,
|
|
49
|
+
replacement: null, // handled in scrub() with Luhn
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'ssn',
|
|
53
|
+
regex: /\b\d{3}-\d{2}-\d{4}\b/g,
|
|
54
|
+
replacement: '[SSN]',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'email',
|
|
58
|
+
regex: /[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g,
|
|
59
|
+
replacement: '[EMAIL]',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'email_urlencoded',
|
|
63
|
+
regex: /[a-zA-Z0-9._%+-]+%40[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
64
|
+
replacement: '[EMAIL]',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'ipv6',
|
|
68
|
+
regex: /(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|::(?:[fF]{4}:)?(?:\d{1,3}\.){3}\d{1,3}|::1?\b/g,
|
|
69
|
+
replacement: '[IP]',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'ipv4',
|
|
73
|
+
regex: /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g,
|
|
74
|
+
replacement: '[IP]',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'intl_phone',
|
|
78
|
+
regex: /\+\d{1,3}[\s.-]?\(?\d{1,4}\)?[\s.-]?\d{2,4}[\s.-]?\d{2,4}(?:[\s.-]?\d{1,4})?/g,
|
|
79
|
+
replacement: '[PHONE]',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'phone',
|
|
83
|
+
regex: /(?:\+?1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g,
|
|
84
|
+
replacement: '[PHONE]',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'url_with_secret',
|
|
88
|
+
regex: /https?:\/\/[^\s]*[?&](?:token|key|secret|password|api_key|apikey|access_token|auth)=[^\s&]*/gi,
|
|
89
|
+
replacement: '[REDACTED_URL]',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'long_hex',
|
|
93
|
+
regex: /\b[0-9a-fA-F]{40,}\b/g,
|
|
94
|
+
replacement: '[API_KEY]',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'home_path',
|
|
98
|
+
regex: /(?:\/Users\/[^\/\s]+|\/home\/[^\/\s]+|C:\\Users\\[^\\\s]+)([\/\\][^\s]*)?/g,
|
|
99
|
+
replacement: null,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'base64_secret',
|
|
103
|
+
regex: /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{40,}={0,2}(?![A-Za-z0-9+/])/g,
|
|
104
|
+
replacement: '[API_KEY]',
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
scrub(text) {
|
|
110
|
+
if (!text || typeof text !== 'string') return text;
|
|
111
|
+
let result = text;
|
|
112
|
+
|
|
113
|
+
for (const pattern of this._patterns) {
|
|
114
|
+
if (pattern.name === 'credit_card') {
|
|
115
|
+
result = result.replace(pattern.regex, (match, g1, g2, g3, g4) => {
|
|
116
|
+
const digits = (g1 + g2 + g3 + g4);
|
|
117
|
+
return luhnCheck(digits) ? '[CREDIT_CARD]' : match;
|
|
118
|
+
});
|
|
119
|
+
} else if (pattern.name === 'home_path') {
|
|
120
|
+
result = result.replace(pattern.regex, (_match, relPath) => '~' + (relPath || ''));
|
|
121
|
+
} else {
|
|
122
|
+
result = result.replace(pattern.regex, pattern.replacement);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
import { platform, arch, cpus, totalmem, hostname, release, endianness } from 'node:os';
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { generateECDHKeypair, deriveSharedSecret, signEnvelope, computeAppHash } from '../shared/crypto.js';
|
|
7
|
+
|
|
8
|
+
export class SessionAttestation {
|
|
9
|
+
constructor(centralCommandUrl) {
|
|
10
|
+
this._centralCommandUrl = centralCommandUrl;
|
|
11
|
+
this._sessions = new Map();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async openSession(sessionId, metadata) {
|
|
15
|
+
const keypair = generateECDHKeypair();
|
|
16
|
+
let appVersionHash = '';
|
|
17
|
+
try {
|
|
18
|
+
appVersionHash = computeAppHash(fileURLToPath(import.meta.url));
|
|
19
|
+
} catch {
|
|
20
|
+
appVersionHash = 'unknown';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const body = {
|
|
24
|
+
session_id: sessionId,
|
|
25
|
+
public_key: keypair.publicKey,
|
|
26
|
+
app_version_hash: appVersionHash,
|
|
27
|
+
provider: metadata.provider,
|
|
28
|
+
model: metadata.model_engine,
|
|
29
|
+
machine_fingerprint: SessionAttestation.getMachineFingerprint(),
|
|
30
|
+
groove_version: metadata.groove_version,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
const res = await fetch(`${this._centralCommandUrl}/v1/sessions/open`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
body: JSON.stringify(body),
|
|
38
|
+
signal: AbortSignal.timeout(10_000),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
this._sessions.set(sessionId, { keypair, sharedSecret: null, sequence: 0, appVersionHash, offline: true });
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const data = await res.json();
|
|
47
|
+
const sharedSecret = deriveSharedSecret(keypair.privateKey, data.server_public_key);
|
|
48
|
+
this._sessions.set(sessionId, { keypair, sharedSecret, sequence: 0, appVersionHash, offline: false });
|
|
49
|
+
return true;
|
|
50
|
+
} catch {
|
|
51
|
+
this._sessions.set(sessionId, { keypair, sharedSecret: null, sequence: 0, appVersionHash, offline: true });
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
signEnvelope(sessionId, envelope) {
|
|
57
|
+
const session = this._sessions.get(sessionId);
|
|
58
|
+
if (!session) return envelope;
|
|
59
|
+
|
|
60
|
+
if (session.offline || !session.sharedSecret) {
|
|
61
|
+
envelope.attestation = {
|
|
62
|
+
session_hmac: 'OFFLINE',
|
|
63
|
+
sequence: session.sequence++,
|
|
64
|
+
app_version_hash: session.appVersionHash,
|
|
65
|
+
};
|
|
66
|
+
return envelope;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const forSigning = { ...envelope };
|
|
70
|
+
delete forSigning.attestation;
|
|
71
|
+
const envelopeBytes = JSON.stringify(forSigning);
|
|
72
|
+
const hmac = signEnvelope(session.sharedSecret, envelopeBytes, session.sequence);
|
|
73
|
+
envelope.attestation = {
|
|
74
|
+
session_hmac: hmac,
|
|
75
|
+
sequence: session.sequence++,
|
|
76
|
+
app_version_hash: session.appVersionHash,
|
|
77
|
+
};
|
|
78
|
+
return envelope;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async closeSession(sessionId) {
|
|
82
|
+
const session = this._sessions.get(sessionId);
|
|
83
|
+
if (!session || session.offline) {
|
|
84
|
+
this._sessions.delete(sessionId);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
await fetch(`${this._centralCommandUrl}/v1/sessions/close`, {
|
|
90
|
+
method: 'POST',
|
|
91
|
+
headers: { 'Content-Type': 'application/json' },
|
|
92
|
+
body: JSON.stringify({ session_id: sessionId }),
|
|
93
|
+
signal: AbortSignal.timeout(10_000),
|
|
94
|
+
});
|
|
95
|
+
} catch {
|
|
96
|
+
// fail silent
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this._sessions.delete(sessionId);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static getMachineFingerprint() {
|
|
103
|
+
const signals = [
|
|
104
|
+
platform(),
|
|
105
|
+
arch(),
|
|
106
|
+
cpus()[0]?.model || '',
|
|
107
|
+
String(totalmem()),
|
|
108
|
+
hostname(),
|
|
109
|
+
String(cpus().length),
|
|
110
|
+
release(),
|
|
111
|
+
endianness(),
|
|
112
|
+
];
|
|
113
|
+
return createHash('sha256').update(signals.join('|')).digest('hex');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// FSL-1.1-Apache-2.0 — see LICENSE
|
|
2
|
+
|
|
3
|
+
const ERROR_SIGNAL_RE = /\b(?:error|Error|ERROR|exception|Exception|EXCEPTION|failed|FAILED|exit code [1-9]|ENOENT|EACCES|EPERM|TypeError|ReferenceError|SyntaxError|Cannot find|Module not found|Command failed|non-zero exit)\b/;
|
|
4
|
+
const FIX_SIGNAL_RE = /\b(?:fix|correcting|I see the issue|let me fix|the (?:issue|problem|bug) (?:is|was)|instead I should|my mistake)\b/i;
|
|
5
|
+
|
|
6
|
+
export class StepClassifier {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.hasAgentActed = false;
|
|
9
|
+
this._lastStepType = null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
classifyUserMessage(text) {
|
|
13
|
+
if (!this.hasAgentActed) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
type: 'correction',
|
|
18
|
+
content: text,
|
|
19
|
+
source: 'user',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
classifyCoordinationEvent(event) {
|
|
24
|
+
return {
|
|
25
|
+
type: 'coordination',
|
|
26
|
+
coordination_id: event.coordination_id || event.id || '',
|
|
27
|
+
direction: event.direction || (event.source ? 'inbound' : 'outbound'),
|
|
28
|
+
target_agent: event.target_agent || event.targetAgent || '',
|
|
29
|
+
protocol: event.protocol || 'knock',
|
|
30
|
+
content: event.content || event.message || '',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
onStep(step) {
|
|
35
|
+
if (step.type === 'action') {
|
|
36
|
+
this.hasAgentActed = true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const content = step.content || '';
|
|
40
|
+
|
|
41
|
+
if ((step.type === 'action' || step.type === 'observation') && ERROR_SIGNAL_RE.test(content)) {
|
|
42
|
+
step.type = 'error';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (step.type === 'thought' && this._lastStepType === 'correction' && FIX_SIGNAL_RE.test(content)) {
|
|
46
|
+
step.correction_context = true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
this._lastStepType = step.type;
|
|
50
|
+
return step;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static detectErrorRecovery(steps) {
|
|
54
|
+
for (let i = 0; i < steps.length - 1; i++) {
|
|
55
|
+
if (steps[i].type === 'error') {
|
|
56
|
+
for (let j = i + 1; j < steps.length; j++) {
|
|
57
|
+
if (steps[j].type === 'resolution') return true;
|
|
58
|
+
if (steps[j].type === 'error') break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
static countUserInterventions(steps) {
|
|
66
|
+
return steps.filter((s) => s.type === 'correction').length;
|
|
67
|
+
}
|
|
68
|
+
}
|