diff --git a/ATTRIBUTIONS-Node.md b/ATTRIBUTIONS-Node.md index 715d2269..114be35d 100644 --- a/ATTRIBUTIONS-Node.md +++ b/ATTRIBUTIONS-Node.md @@ -9259,544 +9259,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## @lydell/node-pty-darwin-arm64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-darwin-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @lydell/node-pty-darwin-x64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-darwin-x64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @lydell/node-pty-linux-arm64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-linux-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @lydell/node-pty-linux-x64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-linux-x64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @lydell/node-pty-win32-arm64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-win32-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @lydell/node-pty-win32-x64 - 1.2.0-beta.12 -**Repository URL**: https://www.npmjs.com/package/@lydell/node-pty-win32-x64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2012-2015, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2016, Daniel Imms (http://www.growingwiththeweb.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -MIT License - -Copyright (c) 2018 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @mariozechner/clipboard - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard; see npm metadata.) -``` - -## @mariozechner/clipboard-darwin-arm64 - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-darwin-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-darwin-arm64; see npm metadata.) -``` - -## @mariozechner/clipboard-darwin-universal - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-darwin-universal -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-darwin-universal; see npm metadata.) -``` - -## @mariozechner/clipboard-darwin-x64 - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-darwin-x64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-darwin-x64; see npm metadata.) -``` - -## @mariozechner/clipboard-linux-arm64-gnu - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-linux-arm64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-linux-arm64-gnu; see npm metadata.) -``` - -## @mariozechner/clipboard-linux-arm64-musl - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-linux-arm64-musl -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-linux-arm64-musl; see npm metadata.) -``` - -## @mariozechner/clipboard-linux-riscv64-gnu - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-linux-riscv64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-linux-riscv64-gnu; see npm metadata.) -``` - -## @mariozechner/clipboard-linux-x64-gnu - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-linux-x64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-linux-x64-gnu; see npm metadata.) -``` - -## @mariozechner/clipboard-linux-x64-musl - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-linux-x64-musl -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-linux-x64-musl; see npm metadata.) -``` - -## @mariozechner/clipboard-win32-arm64-msvc - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-win32-arm64-msvc -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-win32-arm64-msvc; see npm metadata.) -``` - -## @mariozechner/clipboard-win32-x64-msvc - 0.3.6 -**Repository URL**: https://www.npmjs.com/package/@mariozechner/clipboard-win32-x64-msvc -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @mariozechner/clipboard-win32-x64-msvc; see npm metadata.) -``` - ## @mistralai/mistralai - 2.2.1 **Repository URL**: https://github.com/mistralai/client-ts **License Type(s)**: Apache-2.0 @@ -10050,121 +9512,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.``` -## @napi-rs/canvas - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) 2020 lynweklm@gmail.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.``` - -## @napi-rs/canvas-android-arm64 - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-android-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-android-arm64; see npm metadata.) -``` - -## @napi-rs/canvas-darwin-arm64 - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-darwin-arm64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-darwin-arm64; see npm metadata.) -``` - -## @napi-rs/canvas-darwin-x64 - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-darwin-x64 -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-darwin-x64; see npm metadata.) -``` - -## @napi-rs/canvas-linux-arm-gnueabihf - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-arm-gnueabihf -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-arm-gnueabihf; see npm metadata.) -``` - -## @napi-rs/canvas-linux-arm64-gnu - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-arm64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-arm64-gnu; see npm metadata.) -``` - -## @napi-rs/canvas-linux-arm64-musl - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-arm64-musl -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-arm64-musl; see npm metadata.) -``` - -## @napi-rs/canvas-linux-riscv64-gnu - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-riscv64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-riscv64-gnu; see npm metadata.) -``` - -## @napi-rs/canvas-linux-x64-gnu - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-x64-gnu -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-x64-gnu; see npm metadata.) -``` - -## @napi-rs/canvas-linux-x64-musl - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-linux-x64-musl -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-linux-x64-musl; see npm metadata.) -``` - -## @napi-rs/canvas-win32-arm64-msvc - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-win32-arm64-msvc -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-win32-arm64-msvc; see npm metadata.) -``` - -## @napi-rs/canvas-win32-x64-msvc - 0.1.100 -**Repository URL**: https://www.npmjs.com/package/@napi-rs/canvas-win32-x64-msvc -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -(No license file read from locked npm artifact for @napi-rs/canvas-win32-x64-msvc; see npm metadata.) -``` - ## @napi-rs/cli - 2.18.4 **Repository URL**: https://github.com/napi-rs/napi-rs **License Type(s)**: MIT @@ -22884,54 +22231,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` -## sqlite-vec - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec; see npm metadata.) -``` - -## sqlite-vec-darwin-arm64 - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec-darwin-arm64 -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec-darwin-arm64; see npm metadata.) -``` - -## sqlite-vec-darwin-x64 - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec-darwin-x64 -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec-darwin-x64; see npm metadata.) -``` - -## sqlite-vec-linux-arm64 - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec-linux-arm64 -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec-linux-arm64; see npm metadata.) -``` - -## sqlite-vec-linux-x64 - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec-linux-x64 -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec-linux-x64; see npm metadata.) -``` - -## sqlite-vec-windows-x64 - 0.1.9 -**Repository URL**: https://www.npmjs.com/package/sqlite-vec-windows-x64 -**License Type(s)**: MIT OR Apache -### License: https://spdx.org/licenses/ -``` -(No license file read from locked npm artifact for sqlite-vec-windows-x64; see npm metadata.) -``` - ## standardwebhooks - 1.0.0 **Repository URL**: https://github.com/standard-webhooks/standard-webhooks **License Type(s)**: MIT diff --git a/integrations/openclaw/src/hook-replay/llm.ts b/integrations/openclaw/src/hook-replay/llm.ts index 63eccef6..c74729e0 100644 --- a/integrations/openclaw/src/hook-replay/llm.ts +++ b/integrations/openclaw/src/hook-replay/llm.ts @@ -552,7 +552,9 @@ function replayLlmOutput(params: { const metadata = toJsonRecord({ source, runId: event.runId, - sessionId: event.sessionId, + sessionId: session.sessionId, + sessionKey: session.sessionKey, + agentId: session.agentId, provider: event.provider, model: event.model, callId: timing?.callId, @@ -791,7 +793,15 @@ function existingSessionForMessageWrite( const key = resolveSessionKey(manager.state, { sessionKey: event.sessionKey ?? ctx.sessionKey, }); - return key === undefined ? undefined : manager.state.sessions.get(key); + if (key === undefined) { + return undefined; + } + const session = manager.state.sessions.get(key); + const sessionKey = event.sessionKey ?? ctx.sessionKey; + if (session && session.sessionKey === undefined && sessionKey !== undefined) { + session.sessionKey = sessionKey; + } + return session; } /** Build a minimal request placeholder when only an llm_output hook is available. */ diff --git a/integrations/openclaw/src/hook-replay/marks.ts b/integrations/openclaw/src/hook-replay/marks.ts index 2677017d..720356d0 100644 --- a/integrations/openclaw/src/hook-replay/marks.ts +++ b/integrations/openclaw/src/hook-replay/marks.ts @@ -20,6 +20,7 @@ export function emitMark(params: { session: SessionState; name: string; data: JsonRecord; + metadata?: JsonRecord | null; timestamp?: number; }): void { if (!params.session.rootHandle) { @@ -27,7 +28,7 @@ export function emitMark(params: { return; } - params.nf.event(params.name, params.session.rootHandle, params.data, null, params.timestamp ?? null); + params.nf.event(params.name, params.session.rootHandle, params.data, params.metadata ?? null, params.timestamp ?? null); params.state.counters.marksEmitted += 1; } diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index f0984725..8b761d44 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -18,6 +18,7 @@ import type { import type { PluginLogger } from 'openclaw/plugin-sdk/plugin-entry'; import type { JsonObject as JsonRecord } from 'nemo-relay-node/typed'; import type { NemoRelayRuntimeModule } from '../modules.js'; +import { toJsonRecord } from './marks.js'; export type SessionLookupInput = { sessionId?: string | undefined; @@ -213,6 +214,7 @@ export function ensureSession(manager: SessionManager, input: EnsureSessionInput const existing = manager.state.sessions.get(key); if (existing) { + enrichSession(existing, input); rememberSessionAliases(manager.state, existing, input); return existing; } @@ -220,6 +222,7 @@ export function ensureSession(manager: SessionManager, input: EnsureSessionInput const canonicalSessionId = input.sessionId ?? key; const aliased = manager.state.sessions.get(canonicalSessionId); if (aliased) { + enrichSession(aliased, input); rememberSessionAliases(manager.state, aliased, input); return aliased; } @@ -247,6 +250,19 @@ export function ensureSession(manager: SessionManager, input: EnsureSessionInput return session; } +/** Fill stable session identifiers from later hooks without clobbering established values. */ +function enrichSession(session: SessionState, input: EnsureSessionInput): void { + if (session.sessionKey === undefined && input.sessionKey !== undefined) { + session.sessionKey = input.sessionKey; + } + if (session.agentId === undefined && input.agentId !== undefined) { + session.agentId = input.agentId; + } + if (session.resumedFrom === undefined && input.resumedFrom !== undefined) { + session.resumedFrom = input.resumedFrom; + } +} + /** Flush pending LLM output/timing state before the root session closes. */ export function drainSession(manager: SessionManager, session: SessionState): void { cancelPendingLlmOutputTimers(manager.state, session); @@ -261,6 +277,7 @@ export function closeSessionRoot( session: SessionState, summary: JsonRecord, rootOutput: JsonRecord = summary, + metadata?: JsonRecord | null, timestamp?: number, ): void { manager.emitCapturedUnderSession('session_end', session, () => { @@ -268,7 +285,7 @@ export function closeSessionRoot( return; } - manager.nf.event('openclaw.session_end', session.rootHandle, summary, null, timestamp ?? null); + manager.nf.event('openclaw.session_end', session.rootHandle, summary, metadata ?? null, timestamp ?? null); manager.state.counters.marksEmitted += 1; manager.nf.popScope(session.rootHandle, rootOutput, timestamp ?? null); delete session.rootHandle; @@ -313,6 +330,14 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: ...(input.runId === undefined ? {} : { runId: input.runId }), ...(session.resumedFrom === undefined ? {} : { resumedFrom: session.resumedFrom }), }; + const metadata = toJsonRecord({ + source: session.source === 'session_start' ? 'openclaw.session_start' : 'openclaw.lazy_session', + hook_event_name: session.source === 'session_start' ? 'session_start' : undefined, + sessionId: session.sessionId, + sessionKey: session.sessionKey, + agentId: session.agentId, + runId: input.runId, + }); manager.emitCapturedUnderSession('session_start', session, () => { session.rootHandle = manager.nf.pushScope( @@ -321,11 +346,11 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: null, null, data, - null, - null, + metadata, + data, input.timestamp ?? null, ); - manager.nf.event('openclaw.session_start', session.rootHandle, data, null, input.timestamp ?? null); + manager.nf.event('openclaw.session_start', session.rootHandle, data, metadata, input.timestamp ?? null); manager.state.counters.marksEmitted += 1; }); } diff --git a/integrations/openclaw/src/hook-replay/tool.ts b/integrations/openclaw/src/hook-replay/tool.ts index f60a1a48..1e1a21c9 100644 --- a/integrations/openclaw/src/hook-replay/tool.ts +++ b/integrations/openclaw/src/hook-replay/tool.ts @@ -67,6 +67,15 @@ export function replayAfterToolCall( session, name: 'openclaw.tool_blocked', data: blockedDetails, + metadata: toJsonRecord({ + source: 'openclaw.after_tool_call', + hook_event_name: 'after_tool_call', + sessionId: session.sessionId, + sessionKey: session.sessionKey, + agentId: session.agentId, + runId: event.runId ?? ctx.runId, + toolCallId: event.toolCallId ?? ctx.toolCallId, + }), }); }); return; @@ -80,8 +89,9 @@ export function replayAfterToolCall( const metadata = toJsonRecord({ source: 'openclaw.after_tool_call', runId: event.runId ?? ctx.runId, - sessionId: ctx.sessionId, - sessionKey: ctx.sessionKey, + sessionId: session.sessionId, + sessionKey: session.sessionKey, + agentId: session.agentId, toolCallId: event.toolCallId ?? ctx.toolCallId, durationMs: event.durationMs, }); diff --git a/integrations/openclaw/src/hooks-backend.ts b/integrations/openclaw/src/hooks-backend.ts index 436d5203..09cca479 100644 --- a/integrations/openclaw/src/hooks-backend.ts +++ b/integrations/openclaw/src/hooks-backend.ts @@ -119,7 +119,17 @@ export class HookReplayBackend { return; } - await this.closeSession(session, sessionEndSummary(event)); + await this.closeSession( + session, + sessionEndSummary(event), + toJsonRecord({ + source: 'openclaw.session_end', + hook_event_name: 'session_end', + sessionId: session.sessionId, + sessionKey: event.sessionKey ?? ctx.sessionKey, + agentId: ctx.agentId, + }), + ); } /** Buffer an LLM request snapshot until a matching response or trajectory replay arrives. */ @@ -373,9 +383,9 @@ export class HookReplayBackend { } /** Drain, close, export, and delete one session. */ - private async closeSession(session: SessionState, summary: JsonRecord): Promise { + private async closeSession(session: SessionState, summary: JsonRecord, metadata?: JsonRecord): Promise { drainSession(this.sessionManager(), session); - closeSessionRoot(this.sessionManager(), session, summary, session.finalOutput ?? summary); + closeSessionRoot(this.sessionManager(), session, summary, session.finalOutput ?? summary, metadata); this.flushSubscriberDelivery('session_close'); deleteSession(this.stateValue, session); } @@ -389,6 +399,14 @@ export class HookReplayBackend { session, name, data, + metadata: toJsonRecord({ + source: name, + hook_event_name: name.startsWith('openclaw.') ? name.slice('openclaw.'.length) : undefined, + sessionId: session.sessionId, + sessionKey: session.sessionKey, + agentId: session.agentId, + runId: typeof data.runId === 'string' ? data.runId : undefined, + }), }); }); } diff --git a/integrations/openclaw/test/hooks-backend.test.ts b/integrations/openclaw/test/hooks-backend.test.ts index c8163fc6..06f3bfd3 100644 --- a/integrations/openclaw/test/hooks-backend.test.ts +++ b/integrations/openclaw/test/hooks-backend.test.ts @@ -31,10 +31,33 @@ describe('HookReplayBackend', () => { assert.equal(session.resumedFrom, 'previous-session'); assert.equal(backend.state().sessionAliases.get('session-key-1'), 'session-1'); assert.equal(nf.calls.pushScope.length, 1); + assert.deepEqual(nf.calls.pushScope[0]?.metadata, { + source: 'openclaw.session_start', + hook_event_name: 'session_start', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + }); + assert.deepEqual(nf.calls.pushScope[0]?.input, { + sessionId: 'session-1', + source: 'session_start', + sessionKey: 'session-key-1', + agentId: 'agent-1', + resumedFrom: 'previous-session', + }); + assertNoOverclaimedHookMetadata(nf.calls.pushScope[0]?.metadata); assert.deepEqual( nf.calls.event.map((event) => event.name), ['openclaw.session_start'], ); + assert.deepEqual(nf.calls.event[0]?.metadata, { + source: 'openclaw.session_start', + hook_event_name: 'session_start', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[0]?.metadata); }); it('emits session_start when a session is created lazily from llm_input', () => { @@ -63,6 +86,23 @@ describe('HookReplayBackend', () => { source: 'lazy_session', runId: 'run-1', }); + assert.deepEqual(nf.calls.pushScope[0]?.metadata, { + source: 'openclaw.lazy_session', + sessionId: 'lazy-session', + runId: 'run-1', + }); + assert.deepEqual(nf.calls.pushScope[0]?.input, { + sessionId: 'lazy-session', + source: 'lazy_session', + runId: 'run-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.pushScope[0]?.metadata); + assert.deepEqual(nf.calls.event[0]?.metadata, { + source: 'openclaw.lazy_session', + sessionId: 'lazy-session', + runId: 'run-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[0]?.metadata); }); it('keeps concurrent sessions isolated by scope handle and alias', () => { @@ -133,6 +173,12 @@ describe('HookReplayBackend', () => { nf.calls.event.map((event) => event.name), ['openclaw.session_start', 'openclaw.model_call_timing_unpaired', 'openclaw.session_end'], ); + assert.deepEqual(nf.calls.event.at(-1)?.metadata, { + source: 'openclaw.session_end', + hook_event_name: 'session_end', + sessionId: 'session-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event.at(-1)?.metadata); assert.equal(nf.calls.popScope.length, 1); }); @@ -164,6 +210,15 @@ describe('HookReplayBackend', () => { deniedReason: 'policy', durationMs: 5, }); + assert.deepEqual(nf.calls.event[1]?.metadata, { + source: 'openclaw.after_tool_call', + hook_event_name: 'after_tool_call', + sessionId: 'session-1', + sessionKey: 'sk', + runId: 'run-1', + toolCallId: 'tool-call-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[1]?.metadata); }); it('safe replay restores the previous scope stack and fails open', () => { @@ -219,6 +274,14 @@ describe('HookReplayBackend', () => { nf.calls.event.map((event) => event.name), ['openclaw.session_start', 'openclaw.before_agent_finalize'], ); + assert.deepEqual(nf.calls.event[1]?.metadata, { + source: 'openclaw.before_agent_finalize', + hook_event_name: 'before_agent_finalize', + sessionId: 'session-1', + runId: 'run-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[1]?.metadata); + assert.equal(nf.calls.event[1]?.handle, nf.calls.event[0]?.handle); }); it('keeps gateway stop reason out of the root session output when a final answer is known', async () => { @@ -244,6 +307,14 @@ describe('HookReplayBackend', () => { runId: 'run-1', success: true, }); + assert.deepEqual(nf.calls.event[1]?.metadata, { + source: 'openclaw.agent_end', + hook_event_name: 'agent_end', + sessionId: 'session-1', + runId: 'run-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[1]?.metadata); + assert.equal(nf.calls.event[1]?.handle, nf.calls.event[0]?.handle); assert.deepEqual(nf.calls.event.at(-1)?.data, { reason: 'gateway stopping' }); }); @@ -271,6 +342,50 @@ describe('HookReplayBackend', () => { nf.calls.event.map((event) => event.name), ['openclaw.session_start', 'openclaw.subagent_spawned'], ); + assert.deepEqual(nf.calls.event[1]?.metadata, { + source: 'openclaw.subagent_spawned', + hook_event_name: 'subagent_spawned', + sessionId: 'parent-session', + sessionKey: 'parent-key', + runId: 'child-run', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[1]?.metadata); + assert.equal(nf.calls.event[1]?.handle, nf.calls.event[0]?.handle); + }); + + it('records subagent end marks under the requester alias without merging child session identity', () => { + const nf = createNemoRelayRuntime(); + const backend = createBackend(nf); + + backend.onSessionStart( + { sessionId: 'parent-session', sessionKey: 'parent-key' }, + { sessionId: 'parent-session', sessionKey: 'parent-key' }, + ); + backend.onSubagentEnded( + { + targetSessionKey: 'child-key', + targetKind: 'subagent', + reason: 'completed', + outcome: 'ok', + runId: 'child-run', + }, + { requesterSessionKey: 'parent-key', childSessionKey: 'child-key', runId: 'child-run' }, + ); + + assert.equal(backend.state().sessionAliases.get('child-key'), undefined); + assert.deepEqual( + nf.calls.event.map((event) => event.name), + ['openclaw.session_start', 'openclaw.subagent_ended'], + ); + assert.deepEqual(nf.calls.event[1]?.metadata, { + source: 'openclaw.subagent_ended', + hook_event_name: 'subagent_ended', + sessionId: 'parent-session', + sessionKey: 'parent-key', + runId: 'child-run', + }); + assertNoOverclaimedHookMetadata(nf.calls.event[1]?.metadata); + assert.equal(nf.calls.event[1]?.handle, nf.calls.event[0]?.handle); }); it('uses child session key as a lazy-session fallback without aliasing it away', () => { @@ -336,9 +451,9 @@ describe('HookReplayBackend', () => { type TestNemoRelayRuntime = NemoRelayRuntimeModule & { previousStack: { id: 'previous' }; calls: { - pushScope: Array<{ name: string; scopeType: number; data: unknown }>; + pushScope: Array<{ name: string; scopeType: number; data: unknown; metadata: unknown; input: unknown }>; popScope: Array<{ handle: unknown; output: unknown }>; - event: Array<{ name: string; handle: unknown; data: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown; metadata: unknown }>; setThreadScopeStack: unknown[]; toolConditionalExecution: Array<{ name: string; args: unknown }>; }; @@ -394,13 +509,17 @@ function createNemoRelayRuntime(): TestNemoRelayRuntime { ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), - pushScope: (name, scopeType, _handle, _attributes, data) => { + pushScope: (...args: Parameters) => { + const [name, scopeType, , , data, metadata, input] = args; const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data }); + calls.pushScope.push({ name, scopeType, data, metadata, input }); return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), - event: (name, handle, data) => calls.event.push({ name, handle, data }), + event: (...args: Parameters) => { + const [name, handle, data, metadata] = args; + calls.event.push({ name, handle, data, metadata }); + }, llmCall: () => ({}) as unknown as ReturnType, llmCallEnd: () => {}, toolCall: () => ({}) as unknown as ReturnType, @@ -410,3 +529,14 @@ function createNemoRelayRuntime(): TestNemoRelayRuntime { }, }; } + +function assertNoOverclaimedHookMetadata(metadata: unknown): void { + assert.ok(metadata && typeof metadata === 'object'); + const record = metadata as Record; + assert.equal('agent_kind' in record, false); + assert.equal('provider_payload_exact' in record, false); + assert.equal('fidelity_source' in record, false); + assert.equal('gateway_path' in record, false); + assert.equal('gateway_route' in record, false); + assert.equal('correlation' in record, false); +} diff --git a/integrations/openclaw/test/llm-replay.test.ts b/integrations/openclaw/test/llm-replay.test.ts index a68a67e8..dbc1bd2e 100644 --- a/integrations/openclaw/test/llm-replay.test.ts +++ b/integrations/openclaw/test/llm-replay.test.ts @@ -52,9 +52,27 @@ describe('LLM replay', () => { assert.deepEqual(request.content.messages, [{ role: 'user', content: 'hello' }]); assert.equal(request.content.systemPrompt, 'be concise'); assert.equal(nf.calls.llmCall[0]?.data, null); + assert.deepEqual(nf.calls.llmCall[0]?.metadata, { + source: 'openclaw.llm_output', + runId: 'run-1', + sessionId: 'session-1', + agentId: 'agent-1', + provider: 'openai', + model: 'gpt-4', + }); + assertNoOverclaimedReplayMetadata(nf.calls.llmCall[0]?.metadata); const response = nf.calls.llmCallEnd[0]?.response as ReplayResponse; assert.equal(response.content, 'hi'); assert.equal(nf.calls.llmCallEnd[0]?.data, null); + assert.deepEqual(nf.calls.llmCallEnd[0]?.metadata, { + source: 'openclaw.llm_output', + runId: 'run-1', + sessionId: 'session-1', + agentId: 'agent-1', + provider: 'openai', + model: 'gpt-4', + }); + assertNoOverclaimedReplayMetadata(nf.calls.llmCallEnd[0]?.metadata); assert.deepEqual(response.usage, { prompt_tokens: 2, completion_tokens: 3, @@ -509,9 +527,29 @@ describe('LLM replay', () => { const firstResponse = nf.calls.llmCallEnd[0]?.response as ReplayResponse; const firstRequest = nf.calls.llmCall[0]?.request as ReplayRequest; assert.deepEqual(firstRequest.content.messages, [{ role: 'user', content: 'Find the answer.' }]); + assert.deepEqual(nf.calls.llmCall[0]?.metadata, { + source: 'openclaw.before_message_write', + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-1', + provider: 'openai', + model: 'gpt-4', + callId: 'call-1', + correlation: 'fifo_model_call_timing', + }); assert.equal(firstResponse.content, 'tool calls: web_search'); assert.equal((firstResponse.openclaw as ResponseOpenClaw).assistant_tool_call_names?.[0], 'web_search'); assert.equal(firstResponse.openclaw.duration_ms, 42); + assert.deepEqual(nf.calls.llmCallEnd[0]?.metadata, { + source: 'openclaw.before_message_write', + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-1', + provider: 'openai', + model: 'gpt-4', + callId: 'call-1', + correlation: 'fifo_model_call_timing', + }); assert.deepEqual(firstResponse.usage, { prompt_tokens: 10, completion_tokens: 5, @@ -533,6 +571,17 @@ describe('LLM replay', () => { assert.deepEqual(secondRequest.content.messages?.at(-1), { role: 'toolResult', content: { stripped: true } }); assert.equal(secondResponse.content, 'Final answer.'); assert.equal(secondResponse.openclaw.duration_ms, 55); + assert.deepEqual(nf.calls.llmCallEnd[1]?.metadata, { + source: 'openclaw.before_message_write', + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-1', + provider: 'openai', + model: 'gpt-4', + callId: 'call-2', + correlation: 'fifo_model_call_timing', + }); + assertNoOverclaimedReplayMetadata(nf.calls.llmCallEnd[1]?.metadata); assert.deepEqual(secondResponse.usage, { prompt_tokens: 20, completion_tokens: 7, @@ -967,20 +1016,34 @@ type ResponseOpenClaw = { type TestNemoRelayRuntime = NemoRelayRuntimeModule & { calls: { - pushScope: Array<{ name: string; scopeType: number; data: unknown; timestamp: number | null | undefined }>; + pushScope: Array<{ + name: string; + scopeType: number; + data: unknown; + metadata: unknown; + input: unknown; + timestamp: number | null | undefined; + }>; popScope: Array<{ handle: unknown; output: unknown }>; - event: Array<{ name: string; handle: unknown; data: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown; metadata: unknown }>; setThreadScopeStack: unknown[]; llmCall: Array<{ name: string; request: unknown; data: unknown; + metadata: unknown; modelName: string | null | undefined; timestamp: number | null | undefined; }>; - llmCallEnd: Array<{ handle: unknown; response: unknown; data: unknown; timestamp: number | null | undefined }>; - toolCall: Array<{ name: string; args: unknown }>; - toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; + llmCallEnd: Array<{ + handle: unknown; + response: unknown; + data: unknown; + metadata: unknown; + timestamp: number | null | undefined; + }>; + toolCall: Array<{ name: string; args: unknown; metadata: unknown }>; + toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown; metadata: unknown }>; toolConditionalExecution: Array<{ name: string; args: unknown }>; }; }; @@ -1031,26 +1094,37 @@ function createNemoRelayRuntime(): TestNemoRelayRuntime { ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), - pushScope: (name, scopeType, _handle, _attributes, data, _links, _metadata, timestamp) => { + pushScope: (...args: Parameters) => { + const [name, scopeType, , , data, metadata, input, timestamp] = args; const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data, timestamp }); + calls.pushScope.push({ name, scopeType, data, metadata, input, timestamp }); return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), - event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: (name, request, _handle, _attributes, data, _metadata, modelName, timestamp) => { + event: (...args: Parameters) => { + const [name, handle, data, metadata] = args; + calls.event.push({ name, handle, data, metadata }); + }, + llmCall: (...args: Parameters) => { + const [name, request, , , data, metadata, modelName, timestamp] = args; const handle = { id: `llm-${nextScopeId++}` }; - calls.llmCall.push({ name, request, data, modelName, timestamp }); + calls.llmCall.push({ name, request, data, metadata, modelName, timestamp }); return handle as unknown as ReturnType; }, - llmCallEnd: (handle, response, data, _metadata, timestamp) => - calls.llmCallEnd.push({ handle, response, data, timestamp }), - toolCall: (name, args) => { + llmCallEnd: (...args: Parameters) => { + const [handle, response, data, metadata, timestamp] = args; + calls.llmCallEnd.push({ handle, response, data, metadata, timestamp }); + }, + toolCall: (...args: Parameters) => { + const [name, argsValue, , , , metadata] = args; const handle = { id: `tool-${nextScopeId++}` }; - calls.toolCall.push({ name, args }); + calls.toolCall.push({ name, args: argsValue, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + toolCallEnd: (...args: Parameters) => { + const [handle, result, data, metadata] = args; + calls.toolCallEnd.push({ handle, result, data, metadata }); + }, toolConditionalExecution: async (name, args) => { calls.toolConditionalExecution.push({ name, args }); }, @@ -1079,6 +1153,16 @@ function llmOutput() { }; } +function assertNoOverclaimedReplayMetadata(metadata: unknown): void { + assert.ok(metadata && typeof metadata === 'object'); + const record = metadata as Record; + assert.equal('agent_kind' in record, false); + assert.equal('provider_payload_exact' in record, false); + assert.equal('fidelity_source' in record, false); + assert.equal('gateway_path' in record, false); + assert.equal('gateway_route' in record, false); +} + function modelStarted(callId: string) { return { runId: 'run-1', diff --git a/integrations/openclaw/test/tool-replay.test.ts b/integrations/openclaw/test/tool-replay.test.ts index 2f360741..df1fcb2d 100644 --- a/integrations/openclaw/test/tool-replay.test.ts +++ b/integrations/openclaw/test/tool-replay.test.ts @@ -26,7 +26,13 @@ describe('Tool replay', () => { result: { text: 'secret' }, durationMs: 7, }, - { runId: 'run-1', sessionId: 'session-1', toolCallId: 'tool-call-1' }, + { + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + toolCallId: 'tool-call-1', + }, ); assert.equal(nf.calls.toolCall.length, 1); @@ -37,6 +43,16 @@ describe('Tool replay', () => { argKeys: ['path', 'token'], }); assert.equal(nf.calls.toolCall[0]?.data, null); + assert.deepEqual(nf.calls.toolCall[0]?.metadata, { + source: 'openclaw.after_tool_call', + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + toolCallId: 'tool-call-1', + durationMs: 7, + }); + assertNoOverclaimedHookMetadata(nf.calls.toolCall[0]?.metadata); assert.deepEqual(nf.calls.toolCallEnd[0]?.result, { content: 'Tool read_file completed.', openclaw: { @@ -49,6 +65,16 @@ describe('Tool replay', () => { }, }); assert.equal(nf.calls.toolCallEnd[0]?.data, null); + assert.deepEqual(nf.calls.toolCallEnd[0]?.metadata, { + source: 'openclaw.after_tool_call', + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + toolCallId: 'tool-call-1', + durationMs: 7, + }); + assertNoOverclaimedHookMetadata(nf.calls.toolCallEnd[0]?.metadata); }); it('captures full tool payloads only when trusted config opts in', () => { @@ -132,11 +158,27 @@ describe('Tool replay', () => { result: { details: { status: 'blocked', deniedReason: 'policy' } }, durationMs: 3, }, - { runId: 'run-1', sessionId: 'session-1', toolCallId: 'tool-call-1' }, + { + runId: 'run-1', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + toolCallId: 'tool-call-1', + }, ); assert.equal(nf.calls.toolCall.length, 0); assert.ok(nf.calls.event.some((event) => event.name === 'openclaw.tool_blocked')); + assert.deepEqual(nf.calls.event.find((event) => event.name === 'openclaw.tool_blocked')?.metadata, { + source: 'openclaw.after_tool_call', + hook_event_name: 'after_tool_call', + sessionId: 'session-1', + sessionKey: 'session-key-1', + agentId: 'agent-1', + runId: 'run-1', + toolCallId: 'tool-call-1', + }); + assertNoOverclaimedHookMetadata(nf.calls.event.find((event) => event.name === 'openclaw.tool_blocked')?.metadata); }); it('runs tool guardrails even when no session key is available', async () => { @@ -154,12 +196,12 @@ type TestNemoRelayRuntime = NemoRelayRuntimeModule & { calls: { pushScope: Array<{ name: string; scopeType: number; data: unknown }>; popScope: Array<{ handle: unknown; output: unknown }>; - event: Array<{ name: string; handle: unknown; data: unknown }>; + event: Array<{ name: string; handle: unknown; data: unknown; metadata: unknown }>; setThreadScopeStack: unknown[]; llmCall: Array<{ name: string; request: unknown }>; llmCallEnd: Array<{ handle: unknown; response: unknown }>; - toolCall: Array<{ name: string; args: unknown; data: unknown }>; - toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown }>; + toolCall: Array<{ name: string; args: unknown; data: unknown; metadata: unknown }>; + toolCallEnd: Array<{ handle: unknown; result: unknown; data: unknown; metadata: unknown }>; toolConditionalExecution: Array<{ name: string; args: unknown }>; }; }; @@ -210,27 +252,50 @@ function createNemoRelayRuntime(): TestNemoRelayRuntime { ({ id: `stack-${nextScopeId++}` }) as unknown as ReturnType, currentScopeStack: () => previousStack as unknown as ReturnType, setThreadScopeStack: (stack) => calls.setThreadScopeStack.push(stack), - pushScope: (name, scopeType, _handle, _attributes, data) => { + pushScope: (...args: Parameters) => { + const [name, scopeType, , , data] = args; const handle = { id: `scope-${nextScopeId++}` }; calls.pushScope.push({ name, scopeType, data }); return handle as unknown as ReturnType; }, popScope: (handle, output) => calls.popScope.push({ handle, output }), - event: (name, handle, data) => calls.event.push({ name, handle, data }), - llmCall: (name, request) => { + event: (...args: Parameters) => { + const [name, handle, data, metadata] = args; + calls.event.push({ name, handle, data, metadata }); + }, + llmCall: (...args: Parameters) => { + const [name, request] = args; const handle = { id: `llm-${nextScopeId++}` }; calls.llmCall.push({ name, request }); return handle as unknown as ReturnType; }, - llmCallEnd: (handle, response) => calls.llmCallEnd.push({ handle, response }), - toolCall: (name, args, _handle, _attributes, data) => { + llmCallEnd: (...args: Parameters) => { + const [handle, response] = args; + calls.llmCallEnd.push({ handle, response }); + }, + toolCall: (...args: Parameters) => { + const [name, argsValue, , , data, metadata] = args; const handle = { id: `tool-${nextScopeId++}` }; - calls.toolCall.push({ name, args, data }); + calls.toolCall.push({ name, args: argsValue, data, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + toolCallEnd: (...args: Parameters) => { + const [handle, result, data, metadata] = args; + calls.toolCallEnd.push({ handle, result, data, metadata }); + }, toolConditionalExecution: async (name, args) => { calls.toolConditionalExecution.push({ name, args }); }, }; } + +function assertNoOverclaimedHookMetadata(metadata: unknown): void { + assert.ok(metadata && typeof metadata === 'object'); + const record = metadata as Record; + assert.equal('agent_kind' in record, false); + assert.equal('provider_payload_exact' in record, false); + assert.equal('fidelity_source' in record, false); + assert.equal('gateway_path' in record, false); + assert.equal('gateway_route' in record, false); + assert.equal('correlation' in record, false); +} diff --git a/package-lock.json b/package-lock.json index d1090fd0..cabc5199 100644 --- a/package-lock.json +++ b/package-lock.json @@ -919,9 +919,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -939,9 +936,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -959,9 +953,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -979,9 +970,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2147,280 +2135,6 @@ "@lydell/node-pty-win32-x64": "1.2.0-beta.12" } }, - "node_modules/openclaw/node_modules/@lydell/node-pty-darwin-arm64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.2.0-beta.12.tgz", - "integrity": "sha512-tqaifcY9Cr41SblO1+FLzh8oxxtkNhuW9Dhl22lKme9BreYvKvxEZcdPIXTuqkJc5tagOEC4QHShKmJjLyLXLQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@lydell/node-pty-darwin-x64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.2.0-beta.12.tgz", - "integrity": "sha512-4LrS5pCJwqHKDVf1zS2gyNV0m4hKAXch+XZNhbZ6LY8uwVL8BhchzQBO40Os5anuRxRCWzHpw4Sp64Ie8q7E4Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@lydell/node-pty-linux-arm64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.2.0-beta.12.tgz", - "integrity": "sha512-Sx+A71x5BDGHt9ansfrtGxwq2VFVDWvJUAdlUL0Hv0qeiJUfts+hgopx+CgT4PSwahKjdEgtu0+FAfY9rICKRw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@lydell/node-pty-linux-x64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.2.0-beta.12.tgz", - "integrity": "sha512-bJzs94njofYhGg/UDqW1nj0dtvvu+2OvxMY+RlLS1T17VgcktKoIR6PuenTwE5HJ/D6StCPADmXcT0nNsCKmIQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@lydell/node-pty-win32-arm64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.2.0-beta.12.tgz", - "integrity": "sha512-p7POgjVEiFaBC3/y+AKuV1FzePCsJ6HmZDv2XK+jBZSfwP8+uBAw181ZiKYN1YuRa/XpmBGaWezcI8hZkbW++g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@lydell/node-pty-win32-x64": { - "version": "1.2.0-beta.12", - "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.2.0-beta.12.tgz", - "integrity": "sha512-IDFa00g7qUDGUYgByrUBJtC+mOjYVt/8KYyWivCg5JjGOHbBUACUQZLl0jTWmnr+tld/UyTpX90a2PY6oTVtRw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.6.tgz", - "integrity": "sha512-MXdtr+6+ntlIVHdrZYuZNQydu6o8yZswFJ2Ln81j2O/Y9B/LDHvEaIm95xWNPkjGTWriSOeLnQJRFs6dYb60bg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@mariozechner/clipboard-darwin-arm64": "0.3.6", - "@mariozechner/clipboard-darwin-universal": "0.3.6", - "@mariozechner/clipboard-darwin-x64": "0.3.6", - "@mariozechner/clipboard-linux-arm64-gnu": "0.3.6", - "@mariozechner/clipboard-linux-arm64-musl": "0.3.6", - "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.6", - "@mariozechner/clipboard-linux-x64-gnu": "0.3.6", - "@mariozechner/clipboard-linux-x64-musl": "0.3.6", - "@mariozechner/clipboard-win32-arm64-msvc": "0.3.6", - "@mariozechner/clipboard-win32-x64-msvc": "0.3.6" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-darwin-arm64": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.3.6.tgz", - "integrity": "sha512-HjaisYCAbHi/1+N1yDAQHc8ZXGffufIUT5NSOSVR3f3AuMDusxTtnbK8tZ7JFDkShua1oNGZoNwQHsc8MPtE0Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-darwin-universal": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-universal/-/clipboard-darwin-universal-0.3.6.tgz", - "integrity": "sha512-8BWtPjOtJOJoykml3w0fx0zRrfWP31mXrJwfoA7xzNprkZw1uolCNfgmjDiVBseoKjp16EGITz7bN+61qn8dWA==", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-darwin-x64": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-x64/-/clipboard-darwin-x64-0.3.6.tgz", - "integrity": "sha512-p9syiZD1kU4I+1ya7f7g+zD1GiUvR8fdlRlNmgsZNWlyjtc8rlV2EjTLd/35x1LsdBq020GVvtzp0ZmPgBI09Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-linux-arm64-gnu": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.3.6.tgz", - "integrity": "sha512-5JFf5rGofrm+V29HNF+wLthXphHdQpMbKDUYJ5tML6/Z5DLlLOV/9Ak4kDPtYyZ+Dzf+kAusE0VsFg4+tfP1IA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-linux-arm64-musl": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-musl/-/clipboard-linux-arm64-musl-0.3.6.tgz", - "integrity": "sha512-JlVjxxw0GbGC0djXYWRIqyteO3J1KZ/QG3udlEFaOD5TLOM1FnmXXAPDQBqr+aBVr720ef9K00dirYnJ0LDCtw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-linux-riscv64-gnu": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.3.6.tgz", - "integrity": "sha512-4t8BUi5zZ+L77otFQVnVSlaTyAX4TVk9EqQm4syMrEQp96trFEHEwwNHcNEBGzYv5+K7mxay50TthYkz47OWzQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-linux-x64-gnu": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-gnu/-/clipboard-linux-x64-gnu-0.3.6.tgz", - "integrity": "sha512-trtPwcNLW37irwQCJLtCxLw757jjJZk3TSnY/MU9bhtWtA3K9b/eLW0e4RGhUXDoFRds9opNWWaUDuFLa8dm0w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-linux-x64-musl": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-musl/-/clipboard-linux-x64-musl-0.3.6.tgz", - "integrity": "sha512-WfnzIvOCCWQiN0MmltCEo6cLceUDbYe+I7xyFZjaps5A+2Op/M2CY7Rey+C4ucQhrvmpoHmTSFgY9ODWk7snoA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-win32-arm64-msvc": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.3.6.tgz", - "integrity": "sha512-+8+1aHYsBPUjmW3otmWlg+Hijt0iJvoBBs5e0mxFeUd4gDaKMB8Bn6x7c6KVtscg7E5j5NFXnwQqNSIAO4p8zQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/openclaw/node_modules/@mariozechner/clipboard-win32-x64-msvc": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.3.6.tgz", - "integrity": "sha512-S4xfPmERC8ZkiLHe3vekZCjdDwNEETCuvCgQK2kP6/TnvmUkq1y2Pk+DjM4t8uh9KMX9bH4zs5ePcKa8GTXmfg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/openclaw/node_modules/@mistralai/mistralai": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-2.2.1.tgz", @@ -2484,268 +2198,6 @@ "node": ">=14.0.0" } }, - "node_modules/openclaw/node_modules/@napi-rs/canvas": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz", - "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==", - "license": "MIT", - "optional": true, - "peer": true, - "workspaces": [ - "e2e/*" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.100", - "@napi-rs/canvas-darwin-arm64": "0.1.100", - "@napi-rs/canvas-darwin-x64": "0.1.100", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", - "@napi-rs/canvas-linux-arm64-musl": "0.1.100", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", - "@napi-rs/canvas-linux-x64-gnu": "0.1.100", - "@napi-rs/canvas-linux-x64-musl": "0.1.100", - "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", - "@napi-rs/canvas-win32-x64-msvc": "0.1.100" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz", - "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz", - "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz", - "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz", - "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz", - "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz", - "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz", - "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz", - "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz", - "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz", - "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/openclaw/node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz", - "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, "node_modules/openclaw/node_modules/@nodable/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", @@ -5770,91 +5222,6 @@ "source-map": "^0.6.0" } }, - "node_modules/openclaw/node_modules/sqlite-vec": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec/-/sqlite-vec-0.1.9.tgz", - "integrity": "sha512-L7XJWRIBNvR9O5+vh1FQ+IGkh/3D2AzVksW5gdtk28m78Hy8skFD0pqReKH1Yp0/BUKRGcffgKvyO/EON5JXpA==", - "license": "MIT OR Apache", - "optional": true, - "peer": true, - "optionalDependencies": { - "sqlite-vec-darwin-arm64": "0.1.9", - "sqlite-vec-darwin-x64": "0.1.9", - "sqlite-vec-linux-arm64": "0.1.9", - "sqlite-vec-linux-x64": "0.1.9", - "sqlite-vec-windows-x64": "0.1.9" - } - }, - "node_modules/openclaw/node_modules/sqlite-vec-darwin-arm64": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec-darwin-arm64/-/sqlite-vec-darwin-arm64-0.1.9.tgz", - "integrity": "sha512-jSsZpE42OfBkGL/ItyJTVCUwl6o6Ka3U5rc4j+UBDIQzC1ulSSKMEhQLthsOnF/MdAf1MuAkYhkdKmmcjaIZQg==", - "cpu": [ - "arm64" - ], - "license": "MIT OR Apache", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/sqlite-vec-darwin-x64": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec-darwin-x64/-/sqlite-vec-darwin-x64-0.1.9.tgz", - "integrity": "sha512-KDlVyqQT7pnOhU1ymB9gs7dMbSoVmKHitT+k1/xkjarcX8bBqPxWrGlK/R+C5WmWkfvWwyq5FfXfiBYCBs6PlA==", - "cpu": [ - "x64" - ], - "license": "MIT OR Apache", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/sqlite-vec-linux-arm64": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec-linux-arm64/-/sqlite-vec-linux-arm64-0.1.9.tgz", - "integrity": "sha512-5wXVJ9c9kR4CHm/wVqXb/R+XUHTdpZ4nWbPHlS+gc9qQFVHs92Km4bPnCKX4rtcPMzvNis+SIzMJR1SCEwpuUw==", - "cpu": [ - "arm64" - ], - "license": "MIT OR Apache", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/sqlite-vec-linux-x64": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec-linux-x64/-/sqlite-vec-linux-x64-0.1.9.tgz", - "integrity": "sha512-w3tCH8xK2finW8fQJ/m8uqKodXUZ9KAuAar2UIhz4BHILfpE0WM/MTGCRfa7RjYbrYim5Luk3guvMOGI7T7JQA==", - "cpu": [ - "x64" - ], - "license": "MIT OR Apache", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/openclaw/node_modules/sqlite-vec-windows-x64": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/sqlite-vec-windows-x64/-/sqlite-vec-windows-x64-0.1.9.tgz", - "integrity": "sha512-y3gEIyy/17bq2QFPQOWLE68TYWcRZkBQVA2XLrTPHNTOp55xJi/BBBmOm40tVMDMjtP+Elpk6UBUXdaq+46b0Q==", - "cpu": [ - "x64" - ], - "license": "MIT OR Apache", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, "node_modules/openclaw/node_modules/standardwebhooks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz",