From 8824a000b891f5e093c5df6e6d2d0a9a4dd5d421 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 3 Jun 2026 14:01:44 -0700 Subject: [PATCH 1/3] fix: tighten OpenClaw ATOF hook-backed provenance metadata Signed-off-by: mnajafian-nv --- ATTRIBUTIONS-Node.md | 701 ------------------ ATTRIBUTIONS-Rust.md | 202 +---- integrations/openclaw/src/hook-replay/llm.ts | 14 +- .../openclaw/src/hook-replay/marks.ts | 3 +- .../openclaw/src/hook-replay/session.ts | 31 +- integrations/openclaw/src/hook-replay/tool.ts | 14 +- integrations/openclaw/src/hooks-backend.ts | 24 +- .../openclaw/test/hooks-backend.test.ts | 124 +++- integrations/openclaw/test/llm-replay.test.ts | 102 ++- .../openclaw/test/tool-replay.test.ts | 71 +- package-lock.json | 633 ---------------- 11 files changed, 373 insertions(+), 1546 deletions(-) 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/ATTRIBUTIONS-Rust.md b/ATTRIBUTIONS-Rust.md index 38dd9222..30290863 100644 --- a/ATTRIBUTIONS-Rust.md +++ b/ATTRIBUTIONS-Rust.md @@ -3123,9 +3123,8 @@ limitations under the License. ## block-buffer - 0.10.4 **Repository URL**: https://github.com/RustCrypto/utils -**License Type(s)**: MIT OR Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -3328,35 +3327,7 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. -``` - -### License File: LICENSE-MIT -``` -Copyright (c) 2018-2019 The RustCrypto Project Developers - -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. ``` ## block-buffer - 0.12.0 @@ -7927,9 +7898,8 @@ limitations under the License. ## crypto-common - 0.1.7 **Repository URL**: https://github.com/RustCrypto/traits -**License Type(s)**: MIT OR Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -8132,35 +8102,7 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. -``` -### License File: LICENSE-MIT -``` -Copyright (c) 2021 RustCrypto Developers - -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. ``` ## crypto-common - 0.2.1 @@ -8613,9 +8555,8 @@ SOFTWARE. ## digest - 0.10.7 **Repository URL**: https://github.com/RustCrypto/traits -**License Type(s)**: MIT OR Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -8818,35 +8759,7 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. -``` - -### License File: LICENSE-MIT -``` -Copyright (c) 2017 Artyom Pavlov - -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. ``` ## digest - 0.11.2 @@ -13360,28 +13273,27 @@ limitations under the License. **Repository URL**: https://github.com/fizyk20/generic-array.git **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html -### License File: LICENSE ``` -The MIT License (MIT) - -Copyright (c) 2015 Bartłomiej Kamiński - -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 +The MIT License (MIT) + +Copyright (c) 2015 Bartłomiej Kamiński + +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. ``` @@ -20430,9 +20342,8 @@ SOFTWARE. ## md-5 - 0.10.6 **Repository URL**: https://github.com/RustCrypto/hashes -**License Type(s)**: MIT OR Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -20635,37 +20546,7 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. -``` -### License File: LICENSE-MIT -``` -Copyright (c) 2006-2009 Graydon Hoare -Copyright (c) 2009-2013 Mozilla Foundation -Copyright (c) 2016 Artyom Pavlov - -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. ``` ## memchr - 2.8.0 @@ -38917,9 +38798,8 @@ limitations under the License. ## version_check - 0.9.5 **Repository URL**: https://github.com/SergioBenitez/version_check -**License Type(s)**: MIT/Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -39122,29 +39002,7 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. -``` - -### License File: LICENSE-MIT -``` -The MIT License (MIT) -Copyright (c) 2017-2018 Sergio Benitez -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. ``` ## walkdir - 2.5.0 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..267fa34d 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( @@ -322,10 +347,10 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: null, data, null, - null, + metadata, 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..1e0a3937 100644 --- a/integrations/openclaw/test/hooks-backend.test.ts +++ b/integrations/openclaw/test/hooks-backend.test.ts @@ -31,10 +31,26 @@ 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', + }); + 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 +79,18 @@ 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', + }); + 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 +161,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 +198,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 +262,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 +295,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 +330,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 +439,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 }>; 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 +497,13 @@ 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: (name, scopeType, _handle, _attributes, data, _links, metadata) => { const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data }); + calls.pushScope.push({ name, scopeType, data, metadata }); 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: (name, handle, data, metadata) => calls.event.push({ name, handle, data, metadata }), llmCall: () => ({}) as unknown as ReturnType, llmCallEnd: () => {}, toolCall: () => ({}) as unknown as ReturnType, @@ -410,3 +513,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..85375d33 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,33 @@ 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; + 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 +1093,26 @@ 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: (name, scopeType, _handle, _attributes, data, _links, metadata, timestamp) => { const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data, timestamp }); + calls.pushScope.push({ name, scopeType, data, metadata, 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: (name, handle, data, metadata) => calls.event.push({ name, handle, data, metadata }), + llmCall: (name, request, _handle, _attributes, data, metadata, modelName, timestamp) => { 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: (handle, response, data, metadata, timestamp) => + calls.llmCallEnd.push({ handle, response, data, metadata, timestamp }), + toolCall: (name, args, _handle, _attributes, data, metadata) => { const handle = { id: `tool-${nextScopeId++}` }; - calls.toolCall.push({ name, args }); + calls.toolCall.push({ name, args, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + toolCallEnd: (handle, result, data, metadata) => calls.toolCallEnd.push({ handle, result, data, metadata }), toolConditionalExecution: async (name, args) => { calls.toolConditionalExecution.push({ name, args }); }, @@ -1079,6 +1141,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..38883ba6 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 }>; }; }; @@ -216,21 +258,32 @@ function createNemoRelayRuntime(): TestNemoRelayRuntime { 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: (name, handle, data, metadata) => calls.event.push({ name, handle, data, metadata }), llmCall: (name, request) => { 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) => { + toolCall: (name, args, _handle, _attributes, data, metadata) => { const handle = { id: `tool-${nextScopeId++}` }; - calls.toolCall.push({ name, args, data }); + calls.toolCall.push({ name, args, data, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data) => calls.toolCallEnd.push({ handle, result, data }), + toolCallEnd: (handle, result, data, metadata) => 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", From 7ea77a77cafe3b1b3bcfac6d661b622fec59a579 Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 3 Jun 2026 14:43:17 -0700 Subject: [PATCH 2/3] fix: align OpenClaw replay metadata with runtime API Signed-off-by: mnajafian-nv --- .../openclaw/src/hook-replay/session.ts | 2 +- .../openclaw/test/hooks-backend.test.ts | 24 ++++++++++++--- integrations/openclaw/test/llm-replay.test.ts | 30 +++++++++++++------ .../openclaw/test/tool-replay.test.ts | 26 +++++++++++----- 4 files changed, 61 insertions(+), 21 deletions(-) diff --git a/integrations/openclaw/src/hook-replay/session.ts b/integrations/openclaw/src/hook-replay/session.ts index 267fa34d..8b761d44 100644 --- a/integrations/openclaw/src/hook-replay/session.ts +++ b/integrations/openclaw/src/hook-replay/session.ts @@ -346,8 +346,8 @@ function openSessionRoot(manager: SessionManager, session: SessionState, input: null, null, data, - null, metadata, + data, input.timestamp ?? null, ); manager.nf.event('openclaw.session_start', session.rootHandle, data, metadata, input.timestamp ?? null); diff --git a/integrations/openclaw/test/hooks-backend.test.ts b/integrations/openclaw/test/hooks-backend.test.ts index 1e0a3937..06f3bfd3 100644 --- a/integrations/openclaw/test/hooks-backend.test.ts +++ b/integrations/openclaw/test/hooks-backend.test.ts @@ -38,6 +38,13 @@ describe('HookReplayBackend', () => { 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), @@ -84,6 +91,11 @@ describe('HookReplayBackend', () => { 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', @@ -439,7 +451,7 @@ describe('HookReplayBackend', () => { type TestNemoRelayRuntime = NemoRelayRuntimeModule & { previousStack: { id: 'previous' }; calls: { - pushScope: Array<{ name: string; scopeType: number; data: unknown; metadata: 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; metadata: unknown }>; setThreadScopeStack: unknown[]; @@ -497,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, _links, metadata) => { + pushScope: (...args: Parameters) => { + const [name, scopeType, , , data, metadata, input] = args; const handle = { id: `scope-${nextScopeId++}` }; - calls.pushScope.push({ name, scopeType, data, metadata }); + 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, metadata) => calls.event.push({ name, handle, data, metadata }), + 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, diff --git a/integrations/openclaw/test/llm-replay.test.ts b/integrations/openclaw/test/llm-replay.test.ts index 85375d33..dbc1bd2e 100644 --- a/integrations/openclaw/test/llm-replay.test.ts +++ b/integrations/openclaw/test/llm-replay.test.ts @@ -1021,6 +1021,7 @@ type TestNemoRelayRuntime = NemoRelayRuntimeModule & { scopeType: number; data: unknown; metadata: unknown; + input: unknown; timestamp: number | null | undefined; }>; popScope: Array<{ handle: unknown; output: unknown }>; @@ -1093,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, metadata, 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, metadata) => calls.event.push({ name, handle, data, metadata }), - 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, metadata, modelName, timestamp }); return handle as unknown as ReturnType; }, - llmCallEnd: (handle, response, data, metadata, timestamp) => - calls.llmCallEnd.push({ handle, response, data, metadata, timestamp }), - toolCall: (name, args, _handle, _attributes, data, metadata) => { + 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, metadata }); + calls.toolCall.push({ name, args: argsValue, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data, metadata) => calls.toolCallEnd.push({ handle, result, data, metadata }), + 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 }); }, diff --git a/integrations/openclaw/test/tool-replay.test.ts b/integrations/openclaw/test/tool-replay.test.ts index 38883ba6..df1fcb2d 100644 --- a/integrations/openclaw/test/tool-replay.test.ts +++ b/integrations/openclaw/test/tool-replay.test.ts @@ -252,25 +252,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) => { + 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, metadata) => calls.event.push({ name, handle, data, metadata }), - 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, metadata) => { + 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, metadata }); + calls.toolCall.push({ name, args: argsValue, data, metadata }); return handle as unknown as ReturnType; }, - toolCallEnd: (handle, result, data, metadata) => calls.toolCallEnd.push({ handle, result, data, metadata }), + 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 }); }, From a08e4223f56183293030a43b35f5a7bdae47d77f Mon Sep 17 00:00:00 2001 From: mnajafian-nv Date: Wed, 3 Jun 2026 14:58:51 -0700 Subject: [PATCH 3/3] chore: refresh Rust attribution output Signed-off-by: mnajafian-nv --- ATTRIBUTIONS-Rust.md | 202 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 172 insertions(+), 30 deletions(-) diff --git a/ATTRIBUTIONS-Rust.md b/ATTRIBUTIONS-Rust.md index 30290863..38dd9222 100644 --- a/ATTRIBUTIONS-Rust.md +++ b/ATTRIBUTIONS-Rust.md @@ -3123,8 +3123,9 @@ limitations under the License. ## block-buffer - 0.10.4 **Repository URL**: https://github.com/RustCrypto/utils -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +**License Type(s)**: MIT OR Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -3327,7 +3328,35 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. +``` + +### License File: LICENSE-MIT +``` +Copyright (c) 2018-2019 The RustCrypto Project Developers + +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. ``` ## block-buffer - 0.12.0 @@ -7898,8 +7927,9 @@ limitations under the License. ## crypto-common - 0.1.7 **Repository URL**: https://github.com/RustCrypto/traits -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +**License Type(s)**: MIT OR Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -8102,7 +8132,35 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. +``` +### License File: LICENSE-MIT +``` +Copyright (c) 2021 RustCrypto Developers + +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. ``` ## crypto-common - 0.2.1 @@ -8555,8 +8613,9 @@ SOFTWARE. ## digest - 0.10.7 **Repository URL**: https://github.com/RustCrypto/traits -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +**License Type(s)**: MIT OR Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -8759,7 +8818,35 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. +``` + +### License File: LICENSE-MIT +``` +Copyright (c) 2017 Artyom Pavlov + +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. ``` ## digest - 0.11.2 @@ -13273,27 +13360,28 @@ limitations under the License. **Repository URL**: https://github.com/fizyk20/generic-array.git **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html +### License File: LICENSE ``` -The MIT License (MIT) - -Copyright (c) 2015 Bartłomiej Kamiński - -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 +The MIT License (MIT) + +Copyright (c) 2015 Bartłomiej Kamiński + +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. ``` @@ -20342,8 +20430,9 @@ SOFTWARE. ## md-5 - 0.10.6 **Repository URL**: https://github.com/RustCrypto/hashes -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +**License Type(s)**: MIT OR Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -20546,7 +20635,37 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. +``` +### License File: LICENSE-MIT +``` +Copyright (c) 2006-2009 Graydon Hoare +Copyright (c) 2009-2013 Mozilla Foundation +Copyright (c) 2016 Artyom Pavlov + +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. ``` ## memchr - 2.8.0 @@ -38798,8 +38917,9 @@ limitations under the License. ## version_check - 0.9.5 **Repository URL**: https://github.com/SergioBenitez/version_check -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +**License Type(s)**: MIT/Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -39002,7 +39122,29 @@ distributed under the License is distributed on an "AS IS" BASIS, 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. +``` + +### License File: LICENSE-MIT +``` +The MIT License (MIT) +Copyright (c) 2017-2018 Sergio Benitez +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. ``` ## walkdir - 2.5.0