diff --git a/.github/workflows/publish_typescript.yml b/.github/workflows/publish_typescript.yml
index b848a4efa..c2d9c53e0 100644
--- a/.github/workflows/publish_typescript.yml
+++ b/.github/workflows/publish_typescript.yml
@@ -149,6 +149,7 @@ jobs:
adapter-contract/typescript \
adapters/typescript/common \
adapters/typescript/cline \
+ adapters/typescript/droid \
adapters/typescript/pi \
adapters/typescript/opencode \
adapters/typescript/qwen \
diff --git a/ATTRIBUTIONS-Node.md b/ATTRIBUTIONS-Node.md
index f8e4b01e8..77a0758e3 100644
--- a/ATTRIBUTIONS-Node.md
+++ b/ATTRIBUTIONS-Node.md
@@ -11,10 +11,14 @@ Each package is open-source and licensed under the terms indicated below.
This file is automatically generated from the maintained TypeScript package lockfiles.
Please do not edit it directly. Regenerate with `./scripts/generate_attributions.sh node`
+
## @ai-sdk/cohere - 3.0.27
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -32,9 +36,12 @@ limitations under the License.
```
## @ai-sdk/gateway - 3.0.104
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -52,9 +59,12 @@ limitations under the License.
```
## @ai-sdk/openai-compatible - 2.0.37
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -72,9 +82,12 @@ limitations under the License.
```
## @ai-sdk/perplexity - 3.0.26
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -92,9 +105,12 @@ limitations under the License.
```
## @ai-sdk/provider - 3.0.8
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -112,25 +128,34 @@ limitations under the License.
```
## @ai-sdk/provider-utils - 4.0.21
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# AI SDK - Provider Implementation Utilities
```
## @ai-sdk/provider-utils - 4.0.23
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# AI SDK - Provider Implementation Utilities
```
## @ai-sdk/vercel - 2.0.39
+
**Repository URL**: https://github.com/vercel/ai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023 Vercel, Inc.
@@ -148,9 +173,12 @@ limitations under the License.
```
## @anthropic-ai/sdk - 0.129.0
+
**Repository URL**: https://github.com/anthropics/anthropic-sdk-typescript
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2023 Anthropic, PBC.
@@ -162,9 +190,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## @anthropic-ai/sdk - 0.71.2
+
**Repository URL**: https://github.com/anthropics/anthropic-sdk-typescript
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2023 Anthropic, PBC.
@@ -176,17 +207,23 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## @anycable/core - 0.9.2
+
**Repository URL**: https://github.com/anycable/anycable-client
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @anycable/core; see npm metadata.)
```
## @apidevtools/json-schema-ref-parser - 11.9.3
+
**Repository URL**: https://github.com/APIDevTools/json-schema-ref-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -212,9 +249,12 @@ THE SOFTWARE.
```
## @aws-crypto/crc32 - 5.2.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -420,9 +460,12 @@ Apache License
```
## @aws-crypto/sha256-browser - 5.2.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -628,9 +671,12 @@ Apache License
```
## @aws-crypto/sha256-js - 5.2.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -836,9 +882,12 @@ Apache License
```
## @aws-crypto/supports-web-crypto - 5.2.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -1044,217 +1093,223 @@ Apache License
```
## @aws-crypto/util - 5.2.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-crypto-helpers
**License Type(s)**: Apache-2.0
-### License: https://spdx.org/licenses/Apache-2.0.html
-```
-Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- 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.
-```
-
-## @aws-sdk/client-bedrock-runtime - 3.1127.0
-**Repository URL**: https://github.com/aws/aws-sdk-js-v3
-**License Type(s)**: Apache-2.0
### License: https://spdx.org/licenses/Apache-2.0.html
+
+```
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ 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.
+```
+
+## @aws-sdk/client-bedrock-runtime - 3.1127.0
+
+**Repository URL**: https://github.com/aws/aws-sdk-js-v3
+**License Type(s)**: Apache-2.0
+
+### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -1460,9 +1515,12 @@ Apache License
```
## @aws-sdk/client-cognito-identity - 3.1057.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -1668,9 +1726,12 @@ Apache License
```
## @aws-sdk/core - 3.978.1
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -1876,9 +1937,12 @@ Apache License
```
## @aws-sdk/credential-provider-cognito-identity - 3.972.71
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -2084,9 +2148,12 @@ Apache License
```
## @aws-sdk/credential-provider-env - 3.972.72
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -2292,9 +2359,12 @@ Apache License
```
## @aws-sdk/credential-provider-http - 3.972.74
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# @aws-sdk/credential-provider-http
@@ -2309,9 +2379,12 @@ See https://www.npmjs.com/package/@aws-sdk/credential-providers
```
## @aws-sdk/credential-provider-ini - 3.973.17
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -2517,9 +2590,12 @@ Apache License
```
## @aws-sdk/credential-provider-login - 3.972.79
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# @aws-sdk/credential-provider-login
@@ -2540,9 +2616,12 @@ Please use [@aws-sdk/credential-providers](https://www.npmjs.com/package/@aws-sd
```
## @aws-sdk/credential-provider-node - 3.972.84
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -2748,9 +2827,12 @@ Apache License
```
## @aws-sdk/credential-provider-process - 3.972.72
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -2956,9 +3038,12 @@ Apache License
```
## @aws-sdk/credential-provider-sso - 3.973.16
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -3164,9 +3249,12 @@ Apache License
```
## @aws-sdk/credential-provider-web-identity - 3.972.78
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -3372,9 +3460,12 @@ Apache License
```
## @aws-sdk/credential-providers - 3.1057.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -3580,9 +3671,12 @@ Apache License
```
## @aws-sdk/eventstream-handler-node - 3.972.35
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -3788,9 +3882,12 @@ Apache License
```
## @aws-sdk/middleware-eventstream - 3.972.30
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -3996,9 +4093,12 @@ Apache License
```
## @aws-sdk/middleware-websocket - 3.972.54
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -4204,9 +4304,12 @@ Apache License
```
## @aws-sdk/nested-clients - 3.997.46
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# @aws-sdk/nested-clients
@@ -4224,9 +4327,12 @@ in your credential resolution process.
```
## @aws-sdk/signature-v4-multi-region - 3.996.47
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -4432,9 +4538,12 @@ Apache License
```
## @aws-sdk/token-providers - 3.1127.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -4640,9 +4749,12 @@ Apache License
```
## @aws-sdk/token-providers - 3.1138.0
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -4848,9 +4960,12 @@ Apache License
```
## @aws-sdk/types - 3.974.6
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -5056,9 +5171,12 @@ Apache License
```
## @aws-sdk/util-locate-window - 3.965.10
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -5264,9 +5382,12 @@ Apache License
```
## @aws-sdk/xml-builder - 3.972.41
+
**Repository URL**: https://github.com/aws/aws-sdk-js-v3
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -5472,9 +5593,12 @@ Apache License
```
## @aws/lambda-invoke-store - 0.3.0
+
**Repository URL**: https://github.com/awslabs/aws-lambda-invoke-store
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -5653,9 +5777,12 @@ Apache License
```
## @babel/runtime - 7.29.7
+
**Repository URL**: https://github.com/babel/babel
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -5682,9 +5809,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## @earendil-works/chord - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/chord
@@ -5953,9 +6083,12 @@ architecture.
````
## @earendil-works/pi-agent-core - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-agent-core
@@ -6524,9 +6657,12 @@ MIT
````
## @earendil-works/pi-ai - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-ai
@@ -8469,9 +8605,12 @@ MIT
````
## @earendil-works/pi-codemode - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-codemode
@@ -8666,9 +8805,12 @@ The worker keeps script execution off the host thread: QuickJS runs synchronousl
````
## @earendil-works/pi-coding-agent - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
@@ -8768,9 +8910,12 @@ MIT
````
## @earendil-works/pi-mcp - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-mcp
@@ -8911,9 +9056,12 @@ Batch JSON-RPC messages, legacy HTTP+SSE, servers, sampling, and tasks are outsi
````
## @earendil-works/pi-telemetry - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-telemetry
@@ -9382,9 +9530,12 @@ MIT
````
## @earendil-works/pi-tui - 1.0.3
+
**Repository URL**: https://github.com/earendil-works/pi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @earendil-works/pi-tui
@@ -10336,9 +10487,12 @@ PI_TUI_WRITE_LOG=/tmp/tui-ansi.log node test/chat-simple.ts
````
## @effect/opentelemetry - 4.0.0-rc.112
+
**Repository URL**: https://github.com/Effect-TS/effect
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -10364,9 +10518,12 @@ SOFTWARE.
```
## @effect/platform-node - 4.0.0-rc.112
+
**Repository URL**: https://github.com/Effect-TS/effect
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -10392,9 +10549,12 @@ SOFTWARE.
```
## @effect/platform-node-shared - 4.0.0-rc.112
+
**Repository URL**: https://github.com/Effect-TS/effect
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -10420,305 +10580,620 @@ SOFTWARE.
```
## @esbuild/aix-ppc64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/aix-ppc64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/aix-ppc64; see npm metadata.)
```
## @esbuild/android-arm - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/android-arm
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/android-arm; see npm metadata.)
```
## @esbuild/android-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/android-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/android-arm64; see npm metadata.)
```
## @esbuild/android-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/android-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/android-x64; see npm metadata.)
```
## @esbuild/darwin-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/darwin-arm64; see npm metadata.)
```
## @esbuild/darwin-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/darwin-x64; see npm metadata.)
```
## @esbuild/freebsd-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/freebsd-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/freebsd-arm64; see npm metadata.)
```
## @esbuild/freebsd-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/freebsd-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/freebsd-x64; see npm metadata.)
```
## @esbuild/linux-arm - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-arm
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-arm; see npm metadata.)
```
## @esbuild/linux-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-arm64; see npm metadata.)
```
## @esbuild/linux-ia32 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-ia32
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-ia32; see npm metadata.)
```
## @esbuild/linux-loong64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-loong64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-loong64; see npm metadata.)
```
## @esbuild/linux-mips64el - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-mips64el
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-mips64el; see npm metadata.)
```
## @esbuild/linux-ppc64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-ppc64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-ppc64; see npm metadata.)
```
## @esbuild/linux-riscv64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-riscv64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-riscv64; see npm metadata.)
```
## @esbuild/linux-s390x - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-s390x
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-s390x; see npm metadata.)
```
## @esbuild/linux-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/linux-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/linux-x64; see npm metadata.)
```
## @esbuild/netbsd-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/netbsd-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/netbsd-arm64; see npm metadata.)
```
## @esbuild/netbsd-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/netbsd-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/netbsd-x64; see npm metadata.)
```
## @esbuild/openbsd-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/openbsd-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/openbsd-arm64; see npm metadata.)
```
## @esbuild/openbsd-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/openbsd-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/openbsd-x64; see npm metadata.)
```
## @esbuild/openharmony-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/openharmony-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/openharmony-arm64; see npm metadata.)
```
## @esbuild/sunos-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/sunos-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/sunos-x64; see npm metadata.)
```
## @esbuild/win32-arm64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/win32-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/win32-arm64; see npm metadata.)
```
## @esbuild/win32-ia32 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/win32-ia32
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/win32-ia32; see npm metadata.)
```
## @esbuild/win32-x64 - 0.28.2
+
**Repository URL**: https://www.npmjs.com/package/@esbuild/win32-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @esbuild/win32-x64; see npm metadata.)
```
+## @factory/droid-sdk - 0.9.1
+
+**Repository URL**: https://github.com/Factory-AI/droid-sdk-typescript
+**License Type(s)**: Apache-2.0
+
+### License: https://spdx.org/licenses/Apache-2.0.html
+
+```
+Copyright 2025 The San Francisco AI Factory, Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+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.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+```
+
## @ff-labs/fff-bin-android-arm64 - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-android-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-android-arm64; see npm metadata.)
```
## @ff-labs/fff-bin-darwin-arm64 - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-darwin-arm64; see npm metadata.)
```
## @ff-labs/fff-bin-darwin-x64 - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-darwin-x64; see npm metadata.)
```
## @ff-labs/fff-bin-linux-arm64-gnu - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-linux-arm64-gnu
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-linux-arm64-gnu; see npm metadata.)
```
## @ff-labs/fff-bin-linux-arm64-musl - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-linux-arm64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-linux-arm64-musl; see npm metadata.)
```
## @ff-labs/fff-bin-linux-x64-gnu - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-linux-x64-gnu
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-linux-x64-gnu; see npm metadata.)
```
## @ff-labs/fff-bin-linux-x64-musl - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-linux-x64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-linux-x64-musl; see npm metadata.)
```
## @ff-labs/fff-bin-win32-arm64 - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-win32-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-win32-arm64; see npm metadata.)
```
## @ff-labs/fff-bin-win32-x64 - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bin-win32-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bin-win32-x64; see npm metadata.)
```
## @ff-labs/fff-bun - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-bun
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-bun; see npm metadata.)
```
## @ff-labs/fff-node - 0.10.5
+
**Repository URL**: https://www.npmjs.com/package/@ff-labs/fff-node
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @ff-labs/fff-node; see npm metadata.)
```
## @gar/promise-retry - 1.0.3
+
**Repository URL**: https://github.com/wraithgar/node-promise-retry
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011 Tim Koschützki (tim@debuggable.com), Felix Geisendörfer (felix@debuggable.com)
Copyright (c) 2014 IndigoUnited
@@ -10743,9 +11218,12 @@ THE SOFTWARE.
```
## @google/genai - 2.21.0
+
**Repository URL**: https://github.com/googleapis/js-genai
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -10951,9 +11429,12 @@ Apache License
```
## @graphql-typed-document-node/core - 3.2.0
+
**Repository URL**: https://github.com/dotansimha/graphql-typed-document-node
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -10967,9 +11448,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## @hono/node-server - 1.19.17
+
**Repository URL**: https://github.com/honojs/node-server
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -10995,9 +11479,12 @@ SOFTWARE.
```
## @isaacs/fs-minipass - 4.0.1
+
**Repository URL**: https://github.com/npm/fs-minipass
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -11017,9 +11504,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @isaacs/string-locale-compare - 1.1.0
+
**Repository URL**: https://github.com/isaacs/string-locale-compare
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -11039,9 +11529,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @jsdevtools/ono - 7.1.3
+
**Repository URL**: https://github.com/JS-DevTools/ono
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -11069,17 +11562,23 @@ THE SOFTWARE.
```
## @kilocode/sdk - 7.7.12
+
**Repository URL**: https://github.com/Kilo-Org/kilocode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @kilocode/sdk; see npm metadata.)
```
## @lydell/node-pty - 1.2.0-beta.12
+
**Repository URL**: https://github.com/lydell/node-pty
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -11107,9 +11606,12 @@ 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/)
@@ -11183,9 +11685,12 @@ 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/)
@@ -11259,9 +11764,12 @@ 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/)
@@ -11335,9 +11843,12 @@ 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/)
@@ -11411,9 +11922,12 @@ 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/)
@@ -11487,9 +12001,12 @@ 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/)
@@ -11563,9 +12080,12 @@ SOFTWARE.
```
## @modelcontextprotocol/client - 2.2.0
+
**Repository URL**: https://github.com/modelcontextprotocol/typescript-sdk
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MCP project is undergoing a licensing transition from the MIT License to the Apache License, Version 2.0 ("Apache-2.0"). All new code and specification contributions to the project are licensed under Apache-2.0. Documentation contributions (excluding specifications) are licensed under CC-BY-4.0.
@@ -11786,9 +12306,12 @@ the full license text.
```
## @modelcontextprotocol/core - 2.2.0
+
**Repository URL**: https://github.com/modelcontextprotocol/typescript-sdk
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MCP project is undergoing a licensing transition from the MIT License to the Apache License, Version 2.0 ("Apache-2.0"). All new code and specification contributions to the project are licensed under Apache-2.0. Documentation contributions (excluding specifications) are licensed under CC-BY-4.0.
@@ -12009,9 +12532,12 @@ the full license text.
```
## @modelcontextprotocol/sdk - 1.32.1
+
**Repository URL**: https://github.com/modelcontextprotocol/typescript-sdk
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -12037,57 +12563,78 @@ SOFTWARE.
```
## @msgpackr-extract/msgpackr-extract-darwin-arm64 - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-darwin-arm64; see npm metadata.)
```
## @msgpackr-extract/msgpackr-extract-darwin-x64 - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-darwin-x64; see npm metadata.)
```
## @msgpackr-extract/msgpackr-extract-linux-arm - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-linux-arm
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-linux-arm; see npm metadata.)
```
## @msgpackr-extract/msgpackr-extract-linux-arm64 - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-linux-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-linux-arm64; see npm metadata.)
```
## @msgpackr-extract/msgpackr-extract-linux-x64 - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-linux-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-linux-x64; see npm metadata.)
```
## @msgpackr-extract/msgpackr-extract-win32-x64 - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/@msgpackr-extract/msgpackr-extract-win32-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @msgpackr-extract/msgpackr-extract-win32-x64; see npm metadata.)
```
## @npmcli/agent - 4.0.2
+
**Repository URL**: https://github.com/npm/agent
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
````
## @npmcli/agent
@@ -12132,9 +12679,12 @@ Options that have been added by this module include:
````
## @npmcli/arborist - 9.4.0
+
**Repository URL**: https://github.com/npm/cli
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -12159,9 +12709,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/config - 10.8.1
+
**Repository URL**: https://github.com/npm/cli
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12181,9 +12734,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/fs - 5.0.0
+
**Repository URL**: https://github.com/npm/fs
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -12208,9 +12764,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/git - 7.0.2
+
**Repository URL**: https://github.com/npm/git
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12230,9 +12789,12 @@ SOFTWARE.
```
## @npmcli/installed-package-contents - 4.0.0
+
**Repository URL**: https://github.com/npm/installed-package-contents
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12252,9 +12814,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/map-workspaces - 5.0.3
+
**Repository URL**: https://github.com/npm/map-workspaces
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -12279,9 +12844,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/metavuln-calculator - 9.0.3
+
**Repository URL**: https://github.com/npm/metavuln-calculator
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12301,9 +12869,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/name-from-folder - 4.0.0
+
**Repository URL**: https://github.com/npm/name-from-folder
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12323,9 +12894,12 @@ SOFTWARE.
```
## @npmcli/node-gyp - 5.0.0
+
**Repository URL**: https://github.com/npm/node-gyp
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License:
@@ -12337,9 +12911,12 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE
```
## @npmcli/package-json - 7.0.5
+
**Repository URL**: https://github.com/npm/package-json
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
@@ -12362,9 +12939,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/promise-spawn - 9.0.1
+
**Repository URL**: https://github.com/npm/promise-spawn
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12384,9 +12964,12 @@ SOFTWARE.
```
## @npmcli/query - 5.0.0
+
**Repository URL**: https://github.com/npm/query
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -12411,9 +12994,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @npmcli/redact - 4.0.0
+
**Repository URL**: https://github.com/npm/redact
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
MIT License
@@ -12439,9 +13025,12 @@ SOFTWARE.
```
## @npmcli/run-script - 10.0.4
+
**Repository URL**: https://github.com/npm/run-script
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -12461,9 +13050,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## @opencode-ai/pty - 0.2.0
+
**Repository URL**: https://github.com/anomalyco/opencode-pty
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -12489,9 +13081,12 @@ SOFTWARE.
```
## @opencode-ai/pty-darwin-arm64 - 0.2.0
+
**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -12517,9 +13112,12 @@ SOFTWARE.
```
## @opencode-ai/pty-darwin-x64 - 0.2.0
+
**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -12545,9 +13143,105 @@ SOFTWARE.
```
## @opencode-ai/pty-linux-arm64-gnu - 0.2.0
+
**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-arm64-gnu
**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2026 James Long
+
+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.
+```
+
+## @opencode-ai/pty-linux-arm64-musl - 0.2.0
+
+**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-arm64-musl
+**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2026 James Long
+
+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.
+```
+
+## @opencode-ai/pty-linux-x64-gnu - 0.2.0
+
+**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-x64-gnu
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2026 James Long
+
+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.
+```
+
+## @opencode-ai/pty-linux-x64-musl - 0.2.0
+
+**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-x64-musl
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -12572,94 +13266,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
-## @opencode-ai/pty-linux-arm64-musl - 0.2.0
-**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-arm64-musl
-**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-
-Copyright (c) 2026 James Long
-
-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.
-```
+## @opencode/ai - 2.0.23
-## @opencode-ai/pty-linux-x64-gnu - 0.2.0
-**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-x64-gnu
+**Repository URL**: https://www.npmjs.com/package/@opencode/ai
**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-Copyright (c) 2026 James Long
-
-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.
-```
-
-## @opencode-ai/pty-linux-x64-musl - 0.2.0
-**Repository URL**: https://www.npmjs.com/package/@opencode-ai/pty-linux-x64-musl
-**License Type(s)**: MIT
### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-
-Copyright (c) 2026 James Long
-
-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.
-```
-
-## @opencode/ai - 2.0.23
-**Repository URL**: https://www.npmjs.com/package/@opencode/ai
-**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
````
# @opencode/ai
@@ -14060,9 +14673,12 @@ This package is built on Effect. Public methods return `Effect` or `Stream`; pro
````
## @opencode/client - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @opencode/client
@@ -14094,9 +14710,12 @@ yield * client.sessions.prompt({ sessionID, prompt: Prompt.make({ text: "Hello"
````
## @opencode/codemode - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @opencode/codemode
@@ -14299,9 +14918,12 @@ tool calls and busy loops, while a result returned before cleanup times out rema
````
## @opencode/core - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
# @opencode/core
@@ -14309,17 +14931,23 @@ Core runtime services for OpenCode.
```
## @opencode/plugin - 2.0.23
+
**Repository URL**: https://www.npmjs.com/package/@opencode/plugin
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/plugin; see npm metadata.)
```
## @opencode/plugin-browser - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# Browser plugin
@@ -14452,25 +15080,34 @@ Disable through normal configuration:
````
## @opencode/protocol - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/protocol; see npm metadata.)
```
## @opencode/schema - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/schema; see npm metadata.)
```
## @opencode/sdk - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @opencode/sdk
@@ -14618,33 +15255,45 @@ Resources acquired in `configure` still belong to the instance, not to the Scope
````
## @opencode/server - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/server; see npm metadata.)
```
## @opencode/simulation - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/simulation; see npm metadata.)
```
## @opencode/util - 2.0.23
+
**Repository URL**: https://github.com/anomalyco/opencode
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @opencode/util; see npm metadata.)
```
## @opentelemetry/api - 1.9.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -14850,9 +15499,12 @@ Apache License
```
## @opentelemetry/api-logs - 0.219.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -15058,9 +15710,12 @@ Apache License
```
## @opentelemetry/context-async-hooks - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -15266,9 +15921,12 @@ Apache License
```
## @opentelemetry/core - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -15474,9 +16132,12 @@ Apache License
```
## @opentelemetry/exporter-trace-otlp-http - 0.219.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -15682,9 +16343,12 @@ Apache License
```
## @opentelemetry/otlp-exporter-base - 0.219.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -15890,9 +16554,12 @@ Apache License
```
## @opentelemetry/otlp-transformer - 0.219.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -16098,9 +16765,12 @@ Apache License
```
## @opentelemetry/resources - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -16306,9 +16976,12 @@ Apache License
```
## @opentelemetry/sdk-logs - 0.219.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -16514,9 +17187,12 @@ Apache License
```
## @opentelemetry/sdk-metrics - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -16722,9 +17398,12 @@ Apache License
```
## @opentelemetry/sdk-trace-base - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -16930,9 +17609,12 @@ Apache License
```
## @opentelemetry/sdk-trace-node - 2.8.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -17138,9 +17820,12 @@ Apache License
```
## @opentelemetry/semantic-conventions - 1.43.0
+
**Repository URL**: https://github.com/open-telemetry/opentelemetry-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -17346,9 +18031,12 @@ Apache License
```
## @opentui/core - 0.5.14
+
**Repository URL**: https://github.com/anomalyco/opentui
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17374,9 +18062,12 @@ SOFTWARE.
```
## @opentui/core-darwin-arm64 - 0.5.14
+
**Repository URL**: https://www.npmjs.com/package/@opentui/core-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17402,9 +18093,12 @@ SOFTWARE.
```
## @opentui/core-darwin-x64 - 0.5.14
+
**Repository URL**: https://www.npmjs.com/package/@opentui/core-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17430,9 +18124,12 @@ SOFTWARE.
```
## @opentui/core-linux-arm64 - 0.5.14
+
**Repository URL**: https://www.npmjs.com/package/@opentui/core-linux-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17458,9 +18155,12 @@ SOFTWARE.
```
## @opentui/core-linux-arm64-musl - 0.5.14
+
**Repository URL**: https://www.npmjs.com/package/@opentui/core-linux-arm64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17486,9 +18186,105 @@ SOFTWARE.
```
## @opentui/core-linux-x64 - 0.5.14
+
**Repository URL**: https://www.npmjs.com/package/@opentui/core-linux-x64
**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2025 opentui
+
+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.
+```
+
+## @opentui/core-linux-x64-musl - 0.5.14
+
+**Repository URL**: https://www.npmjs.com/package/@opentui/core-linux-x64-musl
+**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2025 opentui
+
+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.
+```
+
+## @opentui/core-win32-arm64 - 0.5.14
+
+**Repository URL**: https://www.npmjs.com/package/@opentui/core-win32-arm64
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2025 opentui
+
+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.
+```
+
+## @opentui/core-win32-x64 - 0.5.14
+
+**Repository URL**: https://www.npmjs.com/package/@opentui/core-win32-x64
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17513,94 +18309,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
-## @opentui/core-linux-x64-musl - 0.5.14
-**Repository URL**: https://www.npmjs.com/package/@opentui/core-linux-x64-musl
-**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-
-Copyright (c) 2025 opentui
-
-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.
-```
+## @parcel/watcher - 2.6.0
-## @opentui/core-win32-arm64 - 0.5.14
-**Repository URL**: https://www.npmjs.com/package/@opentui/core-win32-arm64
+**Repository URL**: https://github.com/parcel-bundler/watcher
**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-
-Copyright (c) 2025 opentui
-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.
-```
-
-## @opentui/core-win32-x64 - 0.5.14
-**Repository URL**: https://www.npmjs.com/package/@opentui/core-win32-x64
-**License Type(s)**: MIT
### License: https://spdx.org/licenses/MIT.html
-```
-MIT License
-
-Copyright (c) 2025 opentui
-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.
-```
-
-## @parcel/watcher - 2.6.0
-**Repository URL**: https://github.com/parcel-bundler/watcher
-**License Type(s)**: MIT
-### License: https://spdx.org/licenses/MIT.html
```
MIT License
@@ -17626,9 +18341,12 @@ SOFTWARE.
```
## @parcel/watcher-android-arm64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-android-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17654,9 +18372,12 @@ SOFTWARE.
```
## @parcel/watcher-darwin-arm64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17682,9 +18403,12 @@ SOFTWARE.
```
## @parcel/watcher-darwin-x64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17710,9 +18434,12 @@ SOFTWARE.
```
## @parcel/watcher-freebsd-x64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-freebsd-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17738,9 +18465,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-arm-glibc - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-arm-glibc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17766,9 +18496,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-arm-musl - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-arm-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17794,9 +18527,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-arm64-glibc - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-arm64-glibc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17822,9 +18558,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-arm64-musl - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-arm64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17850,9 +18589,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-x64-glibc - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-x64-glibc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17878,9 +18620,12 @@ SOFTWARE.
```
## @parcel/watcher-linux-x64-musl - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-linux-x64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17906,9 +18651,12 @@ SOFTWARE.
```
## @parcel/watcher-win32-arm64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-win32-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17934,9 +18682,12 @@ SOFTWARE.
```
## @parcel/watcher-win32-x64 - 2.6.0
+
**Repository URL**: https://www.npmjs.com/package/@parcel/watcher-win32-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -17962,9 +18713,12 @@ SOFTWARE.
```
## @protobufjs/aspromise - 1.1.2
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -17995,9 +18749,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/base64 - 1.1.2
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18028,9 +18785,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/codegen - 2.0.5
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18061,9 +18821,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/eventemitter - 1.1.1
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18094,9 +18857,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/fetch - 1.1.1
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18127,9 +18893,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/float - 1.0.2
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18160,9 +18929,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/path - 1.1.2
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18193,9 +18965,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/pool - 1.1.0
+
**Repository URL**: https://github.com/dcodeIO/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18226,9 +19001,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @protobufjs/utf8 - 1.1.2
+
**Repository URL**: https://github.com/protobufjs/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2016, Daniel Wirtz All rights reserved.
@@ -18259,9 +19037,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## @qwen-code/sdk - 0.1.16
+
**Repository URL**: https://github.com/QwenLM/qwen-code
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
````
# @qwen-code/sdk
@@ -18928,9 +19709,12 @@ Apache-2.0 - see [LICENSE](../../LICENSE) for details.
````
## @redis/bloom - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
# @redis/bloom
@@ -18952,9 +19736,12 @@ For some examples, see [`bloom-filter.js`](https://github.com/redis/node-redis/t
```
## @redis/client - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
# @redis/client
@@ -18962,9 +19749,12 @@ The source code and documentation for this package are in the main [node-redis](
```
## @redis/json - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @redis/json
@@ -19045,9 +19835,12 @@ await client.json.arrAppend('noderedis:jsondata', '.pets', {
````
## @redis/search - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @redis/search
@@ -19191,9 +19984,12 @@ await client.ft.search('idx:users', '@age:[0 30]');
````
## @redis/time-series - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# @redis/time-series
@@ -19365,9 +20161,12 @@ const tsInfo = await client.ts.info('temperature');
````
## @sigstore/bundle - 4.0.0
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -19573,9 +20372,12 @@ Apache License
```
## @sigstore/core - 3.2.1
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -19781,9 +20583,12 @@ Apache License
```
## @sigstore/protobuf-specs - 0.5.2
+
**Repository URL**: https://github.com/sigstore/protobuf-specs
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -19989,9 +20794,12 @@ Apache License
```
## @sigstore/sign - 4.1.1
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -20197,9 +21005,12 @@ Apache License
```
## @sigstore/tuf - 4.0.2
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -20405,9 +21216,12 @@ Apache License
```
## @sigstore/verify - 3.1.1
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
# @sigstore/verify · [](https://www.npmjs.com/package/@sigstore/verify) [](https://github.com/sigstore/sigstore-js/actions/workflows/ci.yml) [](https://github.com/sigstore/sigstore-js/actions/workflows/smoke-test.yml)
@@ -20421,9 +21235,12 @@ A library for verifying [Sigstore][1] signatures.
```
## @silvia-odwyer/photon-node - 0.3.4
+
**Repository URL**: https://github.com/silvia-odwyer/photon
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -20629,9 +21446,12 @@ Apache License
```
## @smithy/core - 3.35.0
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -20837,9 +21657,12 @@ Apache License
```
## @smithy/credential-provider-imds - 4.5.2
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -21045,9 +21868,12 @@ Apache License
```
## @smithy/eventstream-codec - 4.2.14
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -21253,9 +22079,12 @@ Apache License
```
## @smithy/fetch-http-handler - 5.8.0
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -21461,9 +22290,12 @@ Apache License
```
## @smithy/is-array-buffer - 2.2.0
+
**Repository URL**: https://github.com/awslabs/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -21669,9 +22501,12 @@ Apache License
```
## @smithy/node-http-handler - 4.12.1
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -21877,9 +22712,12 @@ Apache License
```
## @smithy/signature-v4 - 5.7.3
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -22085,9 +22923,12 @@ Apache License
```
## @smithy/types - 4.19.0
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -22293,9 +23134,12 @@ Apache License
```
## @smithy/util-buffer-from - 2.2.0
+
**Repository URL**: https://github.com/awslabs/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -22501,9 +23345,12 @@ Apache License
```
## @smithy/util-buffer-from - 4.5.2
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -22709,9 +23556,12 @@ Apache License
```
## @smithy/util-hex-encoding - 4.5.2
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -22917,9 +23767,12 @@ Apache License
```
## @smithy/util-utf8 - 2.3.0
+
**Repository URL**: https://github.com/awslabs/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -23125,9 +23978,12 @@ Apache License
```
## @smithy/util-utf8 - 4.2.2
+
**Repository URL**: https://github.com/smithy-lang/smithy-typescript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -23333,9 +24189,12 @@ Apache License
```
## @socket.io/component-emitter - 3.1.2
+
**Repository URL**: https://github.com/socketio/emitter
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -23364,9 +24223,12 @@ OTHER DEALINGS IN THE SOFTWARE.
```
## @stablelib/base64 - 1.0.1
+
**Repository URL**: https://github.com/StableLib/stablelib
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
This software is licensed under the MIT license:
@@ -23392,9 +24254,12 @@ SOFTWARE.
```
## @standard-schema/spec - 1.1.0
+
**Repository URL**: https://github.com/standard-schema/standard-schema
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23420,9 +24285,12 @@ SOFTWARE.
```
## @tufjs/canonical-json - 2.0.0
+
**Repository URL**: https://github.com/theupdateframework/tuf-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23448,9 +24316,12 @@ SOFTWARE.
```
## @tufjs/models - 4.1.0
+
**Repository URL**: https://github.com/theupdateframework/tuf-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23476,9 +24347,12 @@ SOFTWARE.
```
## @types/json-schema - 7.0.15
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23504,9 +24378,12 @@ MIT License
```
## @types/lodash - 4.17.25
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23532,9 +24409,12 @@ MIT License
```
## @types/node - 22.19.19
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23560,9 +24440,12 @@ MIT License
```
## @types/node - 24.12.4
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23588,9 +24471,12 @@ MIT License
```
## @types/retry - 0.12.0
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23616,9 +24502,12 @@ MIT License
```
## @types/ws - 8.18.2
+
**Repository URL**: https://github.com/DefinitelyTyped/DefinitelyTyped
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -23644,9 +24533,12 @@ MIT License
```
## @vercel/oidc - 3.2.0
+
**Repository URL**: https://github.com/vercel/vercel
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -23852,97 +24744,133 @@ Apache License
```
## @yuuang/ffi-rs-android-arm64 - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-android-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-android-arm64; see npm metadata.)
```
## @yuuang/ffi-rs-darwin-arm64 - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-darwin-arm64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-darwin-arm64; see npm metadata.)
```
## @yuuang/ffi-rs-darwin-x64 - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-darwin-x64
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-darwin-x64; see npm metadata.)
```
## @yuuang/ffi-rs-linux-arm-gnueabihf - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-linux-arm-gnueabihf
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-linux-arm-gnueabihf; see npm metadata.)
```
## @yuuang/ffi-rs-linux-arm64-gnu - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-linux-arm64-gnu
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-linux-arm64-gnu; see npm metadata.)
```
## @yuuang/ffi-rs-linux-arm64-musl - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-linux-arm64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-linux-arm64-musl; see npm metadata.)
```
## @yuuang/ffi-rs-linux-x64-gnu - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-linux-x64-gnu
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-linux-x64-gnu; see npm metadata.)
```
## @yuuang/ffi-rs-linux-x64-musl - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-linux-x64-musl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-linux-x64-musl; see npm metadata.)
```
## @yuuang/ffi-rs-win32-arm64-msvc - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-win32-arm64-msvc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-win32-arm64-msvc; see npm metadata.)
```
## @yuuang/ffi-rs-win32-ia32-msvc - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-win32-ia32-msvc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-win32-ia32-msvc; see npm metadata.)
```
## @yuuang/ffi-rs-win32-x64-msvc - 1.3.7
+
**Repository URL**: https://www.npmjs.com/package/@yuuang/ffi-rs-win32-x64-msvc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for @yuuang/ffi-rs-win32-x64-msvc; see npm metadata.)
```
## abbrev - 4.0.0
+
**Repository URL**: https://github.com/npm/abbrev-js
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
This software is dual-licensed under the ISC and MIT licenses.
You may use this software under EITHER of the following licenses.
@@ -23993,9 +24921,12 @@ OTHER DEALINGS IN THE SOFTWARE.
```
## accepts - 2.0.0
+
**Repository URL**: https://github.com/jshttp/accepts
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24023,9 +24954,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## acorn - 8.15.0
+
**Repository URL**: https://github.com/acornjs/acorn
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24051,9 +24985,12 @@ THE SOFTWARE.
```
## agent-base - 7.1.4
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24080,9 +25017,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## agent-base - 9.0.0
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24109,9 +25049,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ajv - 8.20.0
+
**Repository URL**: https://github.com/ajv-validator/ajv
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -24137,9 +25080,12 @@ SOFTWARE.
```
## ajv-formats - 3.0.1
+
**Repository URL**: https://github.com/ajv-validator/ajv-formats
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24165,9 +25111,12 @@ SOFTWARE.
```
## ansi-regex - 6.4.0
+
**Repository URL**: https://github.com/chalk/ansi-regex
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24181,9 +25130,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## argparse - 1.0.10
+
**Repository URL**: https://github.com/nodeca/argparse
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24209,9 +25161,12 @@ THE SOFTWARE.
```
## argparse - 2.0.1
+
**Repository URL**: https://github.com/nodeca/argparse
**License Type(s)**: Python-2.0
+
### License: https://spdx.org/licenses/Python-2.0.html
+
```
A. HISTORY OF THE SOFTWARE
==========================
@@ -24470,9 +25425,12 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## aws4fetch - 1.0.20
+
**Repository URL**: https://github.com/mhart/aws4fetch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2018 Michael Hart (michael.hart.au@gmail.com)
@@ -24496,9 +25454,12 @@ SOFTWARE.
```
## balanced-match - 4.0.4
+
**Repository URL**: https://github.com/juliangruber/balanced-match
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(MIT)
@@ -24526,9 +25487,12 @@ SOFTWARE.
```
## base64-js - 1.5.1
+
**Repository URL**: https://github.com/beatgammit/base64-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -24554,9 +25518,12 @@ THE SOFTWARE.
```
## bignumber.js - 9.3.1
+
**Repository URL**: https://github.com/MikeMcl/bignumber.js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
=====================
@@ -24586,9 +25553,12 @@ OTHER DEALINGS IN THE SOFTWARE.
```
## bin-links - 6.0.2
+
**Repository URL**: https://github.com/npm/bin-links
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -24608,9 +25578,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## body-parser - 2.3.0
+
**Repository URL**: https://github.com/expressjs/body-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24638,9 +25611,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## bowser - 2.14.1
+
**Repository URL**: https://github.com/bowser-js/bowser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2015, Dustin Diaz (the "Original Author")
All rights reserved.
@@ -24684,9 +25660,12 @@ Original Author, when distributed with the Software.
```
## brace-expansion - 5.0.12
+
**Repository URL**: https://github.com/juliangruber/brace-expansion
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24714,9 +25693,12 @@ SOFTWARE.
```
## buffer-equal-constant-time - 1.0.1
+
**Repository URL**: https://github.com/goinstant/buffer-equal-constant-time
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2013, GoInstant Inc., a salesforce.com company
All rights reserved.
@@ -24733,9 +25715,12 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
```
## bun-ffi-structs - 0.3.1
+
**Repository URL**: https://github.com/anomalyco/bun-ffi-structs
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2025 Anomaly
@@ -24747,9 +25732,12 @@ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR I
```
## bun-pty - 0.4.9
+
**Repository URL**: https://github.com/sursaone/bun-pty
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24775,9 +25763,12 @@ SOFTWARE.
```
## bundle-name - 4.1.1
+
**Repository URL**: https://github.com/sindresorhus/bundle-name
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24791,9 +25782,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## bytes - 3.1.2
+
**Repository URL**: https://github.com/visionmedia/bytes.js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -24821,9 +25815,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## cacache - 20.0.4
+
**Repository URL**: https://github.com/npm/cacache
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
@@ -24844,9 +25841,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## call-bind-apply-helpers - 1.0.2
+
**Repository URL**: https://github.com/ljharb/call-bind-apply-helpers
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24872,9 +25872,12 @@ SOFTWARE.
```
## call-bound - 1.0.4
+
**Repository URL**: https://github.com/ljharb/call-bound
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24900,9 +25903,12 @@ SOFTWARE.
```
## chalk - 6.0.0
+
**Repository URL**: https://github.com/chalk/chalk
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -24916,9 +25922,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## chownr - 3.0.0
+
**Repository URL**: https://github.com/isaacs/chownr
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
All packages under `src/` are licensed according to the terms in
their respective `LICENSE` or `LICENSE.md` files.
@@ -24986,9 +25995,12 @@ software or this license, under any kind of legal claim.***
```
## ci-info - 4.4.0
+
**Repository URL**: https://github.com/watson/ci-info
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -25014,9 +26026,12 @@ SOFTWARE.
```
## cmd-shim - 8.0.0
+
**Repository URL**: https://github.com/npm/cmd-shim
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -25036,9 +26051,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## common-ancestor-path - 2.0.0
+
**Repository URL**: https://github.com/isaacs/common-ancestor-path
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -25098,9 +26116,12 @@ software or this license, under any kind of legal claim.***
```
## content-disposition - 1.1.0
+
**Repository URL**: https://github.com/jshttp/content-disposition
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25127,9 +26148,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## content-type - 1.0.5
+
**Repository URL**: https://github.com/jshttp/content-type
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25156,9 +26180,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## content-type - 2.1.0
+
**Repository URL**: https://github.com/jshttp/content-type
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25185,9 +26212,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## cookie - 0.7.2
+
**Repository URL**: https://github.com/jshttp/cookie
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25215,9 +26245,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## cookie-signature - 1.2.2
+
**Repository URL**: https://github.com/visionmedia/node-cookie-signature
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25244,9 +26277,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## cors - 2.8.6
+
**Repository URL**: https://github.com/expressjs/cors
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25273,9 +26309,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## cross-fetch - 3.2.0
+
**Repository URL**: https://github.com/lquixada/cross-fetch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -25301,9 +26340,12 @@ SOFTWARE.
```
## cross-spawn - 7.0.6
+
**Repository URL**: https://github.com/moxystudio/node-cross-spawn
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -25329,9 +26371,12 @@ THE SOFTWARE.
```
## cssesc - 3.0.0
+
**Repository URL**: https://github.com/mathiasbynens/cssesc
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright Mathias Bynens
@@ -25356,9 +26401,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## data-uri-to-buffer - 4.0.1
+
**Repository URL**: https://github.com/TooTallNate/node-data-uri-to-buffer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
data-uri-to-buffer
==================
@@ -25451,9 +26499,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
````
## debug - 4.4.3
+
**Repository URL**: https://github.com/debug-js/debug
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25477,9 +26528,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## default-browser - 5.5.1
+
**Repository URL**: https://github.com/sindresorhus/default-browser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -25493,9 +26547,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## default-browser-id - 5.0.1
+
**Repository URL**: https://github.com/sindresorhus/default-browser-id
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -25509,9 +26566,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## define-lazy-prop - 3.0.0
+
**Repository URL**: https://github.com/sindresorhus/define-lazy-prop
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -25525,9 +26585,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## depd - 2.0.0
+
**Repository URL**: https://github.com/dougwilson/nodejs-depd
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -25554,9 +26617,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## detect-libc - 2.1.2
+
**Repository URL**: https://github.com/lovell/detect-libc
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -25762,9 +26828,12 @@ Apache License
```
## diff - 8.0.4
+
**Repository URL**: https://github.com/kpdecker/jsdiff
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
BSD 3-Clause License
@@ -25798,9 +26867,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## diff - 9.0.0
+
**Repository URL**: https://github.com/kpdecker/jsdiff
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
BSD 3-Clause License
@@ -25834,9 +26906,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## dom-serializer - 2.0.0
+
**Repository URL**: https://github.com/cheeriojs/dom-serializer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
License
@@ -25852,9 +26927,12 @@ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## domelementtype - 2.3.0
+
**Repository URL**: https://github.com/fb55/domelementtype
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright (c) Felix Böhm
All rights reserved.
@@ -25870,9 +26948,12 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## domhandler - 5.0.3
+
**Repository URL**: https://github.com/fb55/domhandler
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright (c) Felix Böhm
All rights reserved.
@@ -25888,9 +26969,12 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## domutils - 3.2.2
+
**Repository URL**: https://github.com/fb55/domutils
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright (c) Felix Böhm
All rights reserved.
@@ -25906,9 +26990,12 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## drizzle-orm - 1.0.0-rc.5-169397b
+
**Repository URL**: https://github.com/drizzle-team/drizzle-orm
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```

@@ -25957,9 +27044,12 @@ Check out the full documentation on [the website](https://orm.drizzle.team/docs/
```
## dunder-proto - 1.0.1
+
**Repository URL**: https://github.com/es-shims/dunder-proto
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -25985,9 +27075,12 @@ SOFTWARE.
```
## ecdsa-sig-formatter - 1.0.11
+
**Repository URL**: https://github.com/Brightspace/node-ecdsa-sig-formatter
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -26193,9 +27286,12 @@ Apache License
```
## ee-first - 1.1.1
+
**Repository URL**: https://github.com/jonathanong/ee-first
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -26221,9 +27317,12 @@ THE SOFTWARE.
```
## effect - 4.0.0-rc.112
+
**Repository URL**: https://github.com/Effect-TS/effect
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26249,9 +27348,12 @@ SOFTWARE.
```
## emoji-regex - 10.6.0
+
**Repository URL**: https://github.com/mathiasbynens/emoji-regex
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright Mathias Bynens
@@ -26276,9 +27378,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## encodeurl - 2.0.0
+
**Repository URL**: https://github.com/pillarjs/encodeurl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26305,9 +27410,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## engine.io-client - 6.6.7
+
**Repository URL**: https://github.com/socketio/socket.io
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26334,9 +27442,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## engine.io-parser - 5.2.3
+
**Repository URL**: https://github.com/socketio/socket.io
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26363,9 +27474,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## entities - 4.5.0
+
**Repository URL**: https://github.com/fb55/entities
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright (c) Felix Böhm
All rights reserved.
@@ -26381,9 +27495,12 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## env-paths - 2.2.1
+
**Repository URL**: https://github.com/sindresorhus/env-paths
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26397,9 +27514,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## es-define-property - 1.0.1
+
**Repository URL**: https://github.com/ljharb/es-define-property
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26425,9 +27545,12 @@ SOFTWARE.
```
## es-errors - 1.3.0
+
**Repository URL**: https://github.com/ljharb/es-errors
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26453,9 +27576,12 @@ SOFTWARE.
```
## es-object-atoms - 1.1.2
+
**Repository URL**: https://github.com/ljharb/es-object-atoms
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26481,9 +27607,12 @@ SOFTWARE.
```
## esbuild - 0.28.2
+
**Repository URL**: https://github.com/evanw/esbuild
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26509,9 +27638,12 @@ SOFTWARE.
```
## escape-html - 1.0.3
+
**Repository URL**: https://github.com/component/escape-html
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26540,9 +27672,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## esprima - 4.0.1
+
**Repository URL**: https://github.com/jquery/esprima
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright JS Foundation and other contributors, https://js.foundation/
@@ -26568,9 +27703,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## etag - 1.8.1
+
**Repository URL**: https://github.com/jshttp/etag
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26596,10 +27734,44 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
+## eventemitter3 - 5.0.4
+
+**Repository URL**: https://github.com/primus/eventemitter3
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+The MIT License (MIT)
+
+Copyright (c) 2014 Arnout Kazemier
+
+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.
+```
+
## eventsource - 3.0.7
+
**Repository URL**: git://git@github.com/EventSource/eventsource
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License
@@ -26626,9 +27798,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## eventsource-parser - 3.1.1
+
**Repository URL**: https://github.com/rexxars/eventsource-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26654,9 +27829,12 @@ SOFTWARE.
```
## exponential-backoff - 3.1.3
+
**Repository URL**: https://github.com/coveooss/exponential-backoff
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -26862,9 +28040,12 @@ Apache License
```
## express - 5.2.1
+
**Repository URL**: https://github.com/expressjs/express
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -26893,9 +28074,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## express-rate-limit - 8.7.0
+
**Repository URL**: https://github.com/express-rate-limit/express-rate-limit
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -26921,9 +28105,12 @@ SOFTWARE.
```
## extend - 3.0.2
+
**Repository URL**: https://github.com/justmoon/node-extend
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -26950,9 +28137,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## extend-shallow - 2.0.1
+
**Repository URL**: https://github.com/jonschlinkert/extend-shallow
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -26978,9 +28168,12 @@ THE SOFTWARE.
```
## fast-check - 4.10.0
+
**Repository URL**: https://github.com/dubzzz/fast-check
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27006,9 +28199,12 @@ SOFTWARE.
```
## fast-deep-equal - 3.1.3
+
**Repository URL**: https://github.com/epoberezkin/fast-deep-equal
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27034,9 +28230,12 @@ SOFTWARE.
```
## fast-sha256 - 1.3.0
+
**Repository URL**: https://github.com/dchest/fast-sha256-js
**License Type(s)**: Unlicense
+
### License: https://spdx.org/licenses/Unlicense.html
+
```
This is free and unencumbered software released into the public domain.
@@ -27065,9 +28264,12 @@ For more information, please refer to
```
## fast-uri - 3.1.8
+
**Repository URL**: https://github.com/fastify/fast-uri
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae
Copyright (c) 2021-present The Fastify team
@@ -27102,9 +28304,12 @@ The complete list of contributors can be found at:
```
## fdir - 6.5.0
+
**Repository URL**: https://github.com/thecodrr/fdir
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2023 Abdullah Atta
@@ -27116,9 +28321,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## fetch-blob - 3.2.0
+
**Repository URL**: https://github.com/node-fetch/fetch-blob
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27144,9 +28352,12 @@ SOFTWARE.
```
## ffi-rs - 1.3.7
+
**Repository URL**: https://github.com/zhangyuang/node-ffi-rs
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27172,9 +28383,12 @@ SOFTWARE.
```
## finalhandler - 2.1.1
+
**Repository URL**: https://github.com/pillarjs/finalhandler
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -27201,9 +28415,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## formdata-polyfill - 4.0.10
+
**Repository URL**: git+https://jimmywarting@github.com/jimmywarting/FormData
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27229,9 +28446,12 @@ SOFTWARE.
```
## forwarded - 0.2.0
+
**Repository URL**: https://github.com/jshttp/forwarded
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -27258,9 +28478,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## fresh - 2.0.0
+
**Repository URL**: https://github.com/jshttp/fresh
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -27288,9 +28511,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## fs-minipass - 3.0.3
+
**Repository URL**: https://github.com/npm/fs-minipass
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -27310,9 +28536,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## function-bind - 1.1.2
+
**Repository URL**: https://github.com/Raynos/function-bind
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2013 Raynos.
@@ -27336,9 +28565,12 @@ THE SOFTWARE.
```
## fuzzysort - 3.1.0
+
**Repository URL**: https://github.com/farzher/fuzzysort
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27364,9 +28596,12 @@ SOFTWARE.
```
## gaxios - 7.3.1
+
**Repository URL**: https://github.com/googleapis/google-cloud-node
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -27572,9 +28807,12 @@ Apache License
```
## gcp-metadata - 8.1.2
+
**Repository URL**: https://github.com/googleapis/google-cloud-node-core
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -27780,9 +29018,12 @@ Apache License
```
## get-east-asian-width - 1.6.0
+
**Repository URL**: https://github.com/sindresorhus/get-east-asian-width
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27796,9 +29037,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## get-east-asian-width - 1.7.0
+
**Repository URL**: https://github.com/sindresorhus/get-east-asian-width
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27812,9 +29056,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## get-intrinsic - 1.3.0
+
**Repository URL**: https://github.com/ljharb/get-intrinsic
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27840,9 +29087,12 @@ SOFTWARE.
```
## get-proto - 1.0.1
+
**Repository URL**: https://github.com/ljharb/get-proto
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -27868,9 +29118,12 @@ SOFTWARE.
```
## gitlab-ai-provider - 6.18.0
+
**Repository URL**: git+https://gitlab.com/vglafirov/gitlab-ai-provider
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011-present GitLab Inc.
@@ -27903,9 +29156,12 @@ SOFTWARE.
```
## glob - 13.0.5
+
**Repository URL**: https://github.com/isaacs/node-glob
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
All packages under `src/` are licensed according to the terms in
their respective `LICENSE` or `LICENSE.md` files.
@@ -27973,9 +29229,12 @@ software or this license, under any kind of legal claim.***
```
## google-auth-library - 10.5.0
+
**Repository URL**: https://github.com/googleapis/google-auth-library-nodejs
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -28181,9 +29440,12 @@ Apache License
```
## google-auth-library - 10.9.1
+
**Repository URL**: https://github.com/googleapis/google-cloud-node
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -28389,9 +29651,12 @@ Apache License
```
## google-logging-utils - 1.1.3
+
**Repository URL**: https://github.com/googleapis/google-cloud-node-core
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -28597,9 +29862,12 @@ Apache License
```
## gopd - 1.2.0
+
**Repository URL**: https://github.com/ljharb/gopd
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -28625,9 +29893,12 @@ SOFTWARE.
```
## graceful-fs - 4.2.11
+
**Repository URL**: https://github.com/isaacs/node-graceful-fs
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -28647,9 +29918,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## graphql - 16.14.2
+
**Repository URL**: https://github.com/graphql/graphql-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -28675,9 +29949,12 @@ SOFTWARE.
```
## graphql-request - 6.1.0
+
**Repository URL**: https://github.com/jasonkuhrt/graphql-request
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -28703,9 +29980,12 @@ SOFTWARE.
```
## gray-matter - 4.0.3
+
**Repository URL**: https://github.com/jonschlinkert/gray-matter
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -28731,9 +30011,12 @@ THE SOFTWARE.
```
## grok-mermaid - 0.2.3
+
**Repository URL**: https://github.com/xl0/grok-mermaid
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Copyright 2023-2026 SpaceXAI
Copyright 2026 Alexey Zaytsev
@@ -28943,9 +30226,12 @@ Copyright 2026 Alexey Zaytsev
```
## gtoken - 8.0.0
+
**Repository URL**: https://github.com/google/node-gtoken
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -28971,9 +30257,12 @@ THE SOFTWARE.
```
## has-symbols - 1.1.0
+
**Repository URL**: https://github.com/inspect-js/has-symbols
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -28999,9 +30288,12 @@ SOFTWARE.
```
## hasown - 2.0.4
+
**Repository URL**: https://github.com/inspect-js/hasOwn
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29027,9 +30319,12 @@ SOFTWARE.
```
## highlight.js - 10.7.3
+
**Repository URL**: https://github.com/highlightjs/highlight.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
BSD 3-Clause License
@@ -29063,9 +30358,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## hono - 4.13.7
+
**Repository URL**: https://github.com/honojs/hono
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29091,9 +30389,12 @@ SOFTWARE.
```
## hosted-git-info - 9.0.3
+
**Repository URL**: https://github.com/npm/hosted-git-info
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright (c) 2015, Rebecca Turner
@@ -29111,9 +30412,12 @@ PERFORMANCE OF THIS SOFTWARE.
```
## htmlparser2 - 8.0.2
+
**Repository URL**: https://github.com/fb55/htmlparser2
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2010, 2011, Chris Winberry . All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -29136,9 +30440,12 @@ IN THE SOFTWARE.
```
## http-cache-semantics - 4.3.0
+
**Repository URL**: https://github.com/kornelski/http-cache-semantics
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright 2016-2018 Kornel Lesiński
@@ -29152,9 +30459,12 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
```
## http-errors - 2.0.1
+
**Repository URL**: https://github.com/jshttp/http-errors
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29181,9 +30491,12 @@ THE SOFTWARE.
```
## http-proxy-agent - 7.0.2
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29210,9 +30523,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## http-proxy-agent - 9.1.0
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29239,9 +30555,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## https-proxy-agent - 7.0.6
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29268,9 +30587,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## https-proxy-agent - 9.1.0
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29297,9 +30619,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## iconv-lite - 0.7.3
+
**Repository URL**: https://github.com/pillarjs/iconv-lite
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011 Alexander Shtuchkin
@@ -29324,9 +30649,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ignore - 7.0.5
+
**Repository URL**: https://github.com/kaelzhang/node-ignore
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2013 Kael Zhang , contributors
http://kael.me/
@@ -29352,9 +30680,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ignore - 7.0.8
+
**Repository URL**: https://github.com/kaelzhang/node-ignore
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2013 Kael Zhang , contributors
http://kael.me/
@@ -29380,9 +30711,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ignore-walk - 8.0.0
+
**Repository URL**: https://github.com/npm/ignore-walk
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -29402,9 +30736,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## immer - 11.1.4
+
**Repository URL**: https://github.com/immerjs/immer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29430,9 +30767,12 @@ SOFTWARE.
```
## inherits - 2.0.4
+
**Repository URL**: https://github.com/isaacs/inherits
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -29452,9 +30792,12 @@ PERFORMANCE OF THIS SOFTWARE.
```
## ini - 6.0.0
+
**Repository URL**: https://github.com/npm/ini
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -29474,9 +30817,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## ip-address - 10.7.3
+
**Repository URL**: https://github.com/beaugunderson/ip-address
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (C) 2011 by Beau Gunderson
@@ -29500,9 +30846,12 @@ THE SOFTWARE.
```
## ipaddr.js - 1.9.1
+
**Repository URL**: https://github.com/whitequark/ipaddr.js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (C) 2011-2017 whitequark
@@ -29526,9 +30875,12 @@ THE SOFTWARE.
```
## is-docker - 3.0.0
+
**Repository URL**: https://github.com/sindresorhus/is-docker
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29542,9 +30894,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## is-extendable - 0.1.1
+
**Repository URL**: https://github.com/jonschlinkert/is-extendable
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29570,9 +30925,12 @@ THE SOFTWARE.
```
## is-extglob - 2.1.1
+
**Repository URL**: https://github.com/jonschlinkert/is-extglob
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29598,9 +30956,12 @@ THE SOFTWARE.
```
## is-glob - 4.0.3
+
**Repository URL**: https://github.com/micromatch/is-glob
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29626,9 +30987,12 @@ THE SOFTWARE.
```
## is-in-ssh - 1.0.0
+
**Repository URL**: https://github.com/sindresorhus/is-in-ssh
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29642,9 +31006,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## is-inside-container - 1.0.0
+
**Repository URL**: https://github.com/sindresorhus/is-inside-container
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29658,9 +31025,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## is-promise - 4.0.0
+
**Repository URL**: https://github.com/then/is-promise
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2014 Forbes Lindesay
@@ -29684,9 +31054,12 @@ THE SOFTWARE.
```
## is-wsl - 3.1.1
+
**Repository URL**: https://github.com/sindresorhus/is-wsl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29700,9 +31073,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## isexe - 2.0.0
+
**Repository URL**: https://github.com/isaacs/isexe
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -29722,9 +31098,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## isexe - 4.0.0
+
**Repository URL**: https://github.com/isaacs/isexe
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -29784,9 +31163,12 @@ software or this license, under any kind of legal claim.***
```
## isomorphic-ws - 5.0.0
+
**Repository URL**: https://github.com/heineiuo/isomorphic-ws
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29811,10 +31193,44 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
+## isows - 1.0.7
+
+**Repository URL**: https://github.com/wevm/isows
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+MIT License
+
+Copyright (c) 2023-present weth, LLC
+
+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.
+```
+
## jiti - 2.7.0
+
**Repository URL**: https://github.com/unjs/jiti
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -29840,9 +31256,12 @@ SOFTWARE.
```
## jose - 6.0.11
+
**Repository URL**: https://github.com/panva/jose
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29868,9 +31287,12 @@ SOFTWARE.
```
## jose - 6.2.12
+
**Repository URL**: https://github.com/panva/jose
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29896,9 +31318,12 @@ SOFTWARE.
```
## js-yaml - 3.15.2
+
**Repository URL**: https://github.com/nodeca/js-yaml
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29924,9 +31349,12 @@ THE SOFTWARE.
```
## js-yaml - 4.3.2
+
**Repository URL**: https://github.com/nodeca/js-yaml
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -29952,9 +31380,12 @@ THE SOFTWARE.
```
## json-bigint - 1.0.0
+
**Repository URL**: https://github.com/sidorares/json-bigint
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -29979,9 +31410,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## json-parse-even-better-errors - 5.0.0
+
**Repository URL**: https://github.com/npm/json-parse-even-better-errors
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2017 Kat Marchán
Copyright npm, Inc.
@@ -30011,9 +31445,12 @@ distributed under the terms of the MIT license above.
```
## json-schema - 0.4.0
+
**Repository URL**: https://github.com/kriszyp/json-schema
**License Type(s)**: (AFL-2.1 OR BSD-3-Clause)
+
### License: https://spdx.org/licenses/
+
```
Dojo is available under *either* the terms of the BSD 3-Clause "New" License *or* the
Academic Free License version 2.1. As a recipient of Dojo, you may choose which
@@ -30213,9 +31650,12 @@ permission of its copyright owner.
```
## json-schema-to-ts - 3.1.1
+
**Repository URL**: https://github.com/ThomasAribart/json-schema-to-ts
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -30241,9 +31681,12 @@ SOFTWARE.
```
## json-schema-to-typescript - 15.0.4
+
**Repository URL**: https://github.com/bcherny/json-schema-to-typescript
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright 2022 Boris Cherny
@@ -30255,9 +31698,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## json-schema-traverse - 1.0.0
+
**Repository URL**: https://github.com/epoberezkin/json-schema-traverse
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -30283,9 +31729,12 @@ SOFTWARE.
```
## json-schema-typed - 8.0.2
+
**Repository URL**: https://github.com/RemyRylan/json-schema-typed
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
BSD 2-Clause License
@@ -30347,9 +31796,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## json-stringify-nice - 1.1.4
+
**Repository URL**: https://github.com/isaacs/json-stringify-nice
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -30369,9 +31821,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## jsonc-parser - 3.3.1
+
**Repository URL**: https://github.com/microsoft/node-jsonc-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -30397,9 +31852,12 @@ SOFTWARE.
```
## jsonparse - 1.3.1
+
**Repository URL**: https://github.com/creationix/jsonparse
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License
@@ -30428,9 +31886,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## just-diff - 6.0.2
+
**Repository URL**: https://github.com/angus-c/just
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -30456,9 +31917,12 @@ SOFTWARE.
```
## just-diff-apply - 5.5.0
+
**Repository URL**: https://github.com/angus-c/just
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -30484,9 +31948,12 @@ SOFTWARE.
```
## jwa - 2.0.1
+
**Repository URL**: https://github.com/brianloveswords/node-jwa
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2013 Brian J. Brennan
@@ -30508,9 +31975,12 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL
```
## jws - 4.0.1
+
**Repository URL**: https://github.com/brianloveswords/node-jws
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2013 Brian J. Brennan
@@ -30532,9 +32002,12 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL
```
## kind-of - 6.0.3
+
**Repository URL**: https://github.com/jonschlinkert/kind-of
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -30560,9 +32033,12 @@ THE SOFTWARE.
```
## lodash - 4.18.1
+
**Repository URL**: https://github.com/lodash/lodash
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright OpenJS Foundation and other contributors
@@ -30614,9 +32090,12 @@ terms above.
```
## long - 5.3.2
+
**Repository URL**: https://github.com/dcodeIO/long.js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -30822,9 +32301,12 @@ Apache License
```
## lru-cache - 11.5.3
+
**Repository URL**: https://github.com/isaacs/node-lru-cache
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -30884,9 +32366,12 @@ software or this license, under any kind of legal claim.***
```
## make-fetch-happen - 15.0.6
+
**Repository URL**: https://github.com/npm/make-fetch-happen
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
@@ -30907,9 +32392,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## marked - 17.0.1
+
**Repository URL**: https://github.com/markedjs/marked
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
# License information
@@ -30958,9 +32446,12 @@ This software is provided by the copyright holders and contributors “as is”
```
## marked - 18.0.11
+
**Repository URL**: https://github.com/markedjs/marked
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
# License information
@@ -31009,9 +32500,12 @@ This software is provided by the copyright holders and contributors “as is”
```
## math-intrinsics - 1.1.0
+
**Repository URL**: https://github.com/es-shims/math-intrinsics
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31037,9 +32531,12 @@ SOFTWARE.
```
## media-typer - 1.1.1
+
**Repository URL**: https://github.com/jshttp/media-typer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -31066,9 +32563,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## merge-descriptors - 2.0.0
+
**Repository URL**: https://github.com/sindresorhus/merge-descriptors
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31084,9 +32584,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## mime - 4.1.0
+
**Repository URL**: https://github.com/broofa/mime
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31112,9 +32615,12 @@ SOFTWARE.
```
## mime-db - 1.54.0
+
**Repository URL**: https://github.com/jshttp/mime-db
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -31142,9 +32648,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## mime-types - 3.0.2
+
**Repository URL**: https://github.com/jshttp/mime-types
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -31172,9 +32681,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## minimatch - 10.2.5
+
**Repository URL**: https://github.com/isaacs/minimatch
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -31234,9 +32746,12 @@ software or this license, under any kind of legal claim._**
```
## minimatch - 10.2.6
+
**Repository URL**: https://github.com/isaacs/minimatch
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -31296,9 +32811,12 @@ software or this license, under any kind of legal claim._**
```
## minimist - 1.2.8
+
**Repository URL**: https://github.com/minimistjs/minimist
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
This software is released under the MIT license:
@@ -31321,9 +32839,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## minipass - 3.3.6
+
**Repository URL**: https://github.com/isaacs/minipass
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31343,9 +32864,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## minipass - 7.1.3
+
**Repository URL**: https://github.com/isaacs/minipass
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -31405,9 +32929,12 @@ software or this license, under any kind of legal claim.***
```
## minipass-collect - 2.0.1
+
**Repository URL**: https://github.com/isaacs/minipass-collect
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31427,9 +32954,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## minipass-fetch - 5.0.2
+
**Repository URL**: https://github.com/npm/minipass-fetch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31462,9 +32992,12 @@ https://github.com/bitinn/node-fetch
```
## minipass-flush - 1.0.7
+
**Repository URL**: https://github.com/isaacs/minipass-flush
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -31524,9 +33057,12 @@ software or this license, under any kind of legal claim.***
```
## minipass-pipeline - 1.2.4
+
**Repository URL**: https://www.npmjs.com/package/minipass-pipeline
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31546,9 +33082,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## minipass-sized - 2.0.0
+
**Repository URL**: https://github.com/isaacs/minipass-sized
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31568,9 +33107,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## minizlib - 3.1.0
+
**Repository URL**: https://github.com/isaacs/minizlib
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Minizlib was created by Isaac Z. Schlueter.
It is a derivative work of the Node.js project.
@@ -31601,9 +33143,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ms - 2.1.3
+
**Repository URL**: https://github.com/vercel/ms
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31629,9 +33174,12 @@ SOFTWARE.
```
## msgpackr - 2.1.0
+
**Repository URL**: https://github.com/kriszyp/msgpackr
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31657,9 +33205,12 @@ SOFTWARE.
```
## msgpackr-extract - 3.0.4
+
**Repository URL**: https://www.npmjs.com/package/msgpackr-extract
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31685,9 +33236,12 @@ SOFTWARE.
```
## nanoevents - 7.0.1
+
**Repository URL**: https://github.com/ai/nanoevents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31712,9 +33266,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## negotiator - 1.1.0
+
**Repository URL**: https://github.com/jshttp/negotiator
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -31743,9 +33300,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## node-addon-api - 7.1.1
+
**Repository URL**: https://github.com/nodejs/node-addon-api
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31759,9 +33319,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## node-addon-api - 8.9.2
+
**Repository URL**: https://github.com/nodejs/node-addon-api
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31775,9 +33338,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## node-domexception - 1.0.0
+
**Repository URL**: https://github.com/jimmywarting/node-domexception
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -31803,9 +33369,12 @@ SOFTWARE.
```
## node-fetch - 2.7.0
+
**Repository URL**: https://github.com/bitinn/node-fetch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31831,9 +33400,12 @@ SOFTWARE.
```
## node-fetch - 3.3.2
+
**Repository URL**: https://github.com/node-fetch/node-fetch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31859,9 +33431,12 @@ SOFTWARE.
```
## node-gyp - 12.4.0
+
**Repository URL**: https://github.com/nodejs/node-gyp
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -31890,9 +33465,12 @@ OTHER DEALINGS IN THE SOFTWARE.
```
## node-gyp-build - 4.8.4
+
**Repository URL**: https://github.com/prebuild/node-gyp-build
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31918,9 +33496,12 @@ THE SOFTWARE.
```
## node-gyp-build-optional-packages - 5.2.2
+
**Repository URL**: https://www.npmjs.com/package/node-gyp-build-optional-packages
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -31946,9 +33527,12 @@ THE SOFTWARE.
```
## nopt - 9.0.0
+
**Repository URL**: https://github.com/npm/nopt
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31968,9 +33552,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-bundled - 5.0.0
+
**Repository URL**: https://github.com/npm/npm-bundled
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -31990,9 +33577,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-install-checks - 8.0.0
+
**Repository URL**: https://github.com/npm/npm-install-checks
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
Copyright (c) Robert Kowalski and Isaac Z. Schlueter ("Authors")
All rights reserved.
@@ -32024,9 +33614,12 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## npm-normalize-package-bin - 5.0.0
+
**Repository URL**: https://github.com/npm/npm-normalize-package-bin
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -32046,9 +33639,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-package-arg - 13.0.2
+
**Repository URL**: https://github.com/npm/npm-package-arg
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -32068,9 +33664,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-packlist - 10.0.4
+
**Repository URL**: https://github.com/npm/npm-packlist
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -32090,9 +33689,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-pick-manifest - 11.0.3
+
**Repository URL**: https://github.com/npm/npm-pick-manifest
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
@@ -32113,9 +33715,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## npm-registry-fetch - 19.1.1
+
**Repository URL**: https://github.com/npm/npm-registry-fetch
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -32140,9 +33745,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## object-assign - 4.1.1
+
**Repository URL**: https://github.com/sindresorhus/object-assign
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -32168,9 +33776,12 @@ THE SOFTWARE.
```
## object-inspect - 1.13.4
+
**Repository URL**: https://github.com/inspect-js/object-inspect
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32196,9 +33807,12 @@ SOFTWARE.
```
## on-finished - 2.4.1
+
**Repository URL**: https://github.com/jshttp/on-finished
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -32226,9 +33840,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## once - 1.4.0
+
**Repository URL**: https://github.com/isaacs/once
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -32248,9 +33865,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## open - 11.0.4
+
**Repository URL**: https://github.com/sindresorhus/open
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32264,9 +33884,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## openai - 6.40.0
+
**Repository URL**: https://github.com/openai/openai-node
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -32472,9 +34095,12 @@ Apache License
```
## openai - 7.19.0
+
**Repository URL**: https://github.com/openai/openai-node
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -32680,9 +34306,12 @@ Apache License
```
## p-map - 7.0.8
+
**Repository URL**: https://github.com/sindresorhus/p-map
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32696,9 +34325,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## p-retry - 4.6.2
+
**Repository URL**: https://github.com/sindresorhus/p-retry
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32712,9 +34344,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## pacote - 21.5.1
+
**Repository URL**: https://github.com/npm/pacote
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -32734,9 +34369,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## parse-conflict-json - 5.0.1
+
**Repository URL**: https://github.com/npm/parse-conflict-json
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
@@ -32761,9 +34399,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## parseurl - 1.3.3
+
**Repository URL**: https://github.com/pillarjs/parseurl
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -32791,9 +34432,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## partial-json - 0.1.7
+
**Repository URL**: https://github.com/promplate/partial-json-parser-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32819,9 +34463,12 @@ SOFTWARE.
```
## path-key - 3.1.1
+
**Repository URL**: https://github.com/sindresorhus/path-key
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -32835,9 +34482,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## path-scurry - 2.0.2
+
**Repository URL**: https://github.com/isaacs/path-scurry
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -32897,9 +34547,12 @@ software or this license, under any kind of legal claim.***
```
## path-to-regexp - 8.4.2
+
**Repository URL**: https://github.com/pillarjs/path-to-regexp
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -32925,9 +34578,12 @@ THE SOFTWARE.
```
## picomatch - 4.0.5
+
**Repository URL**: https://github.com/micromatch/picomatch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -32953,9 +34609,12 @@ THE SOFTWARE.
```
## picomatch - 4.0.7
+
**Repository URL**: https://github.com/micromatch/picomatch
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -32981,9 +34640,12 @@ THE SOFTWARE.
```
## pkce-challenge - 5.0.1
+
**Repository URL**: https://github.com/crouchcd/pkce-challenge
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33009,9 +34671,12 @@ SOFTWARE.
```
## postcss-selector-parser - 7.1.6
+
**Repository URL**: https://github.com/postcss/postcss-selector-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) Ben Briggs (http://beneb.info)
@@ -33038,9 +34703,12 @@ OTHER DEALINGS IN THE SOFTWARE.
```
## powershell-utils - 0.2.1
+
**Repository URL**: https://github.com/sindresorhus/powershell-utils
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33054,9 +34722,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## prettier - 3.9.6
+
**Repository URL**: https://github.com/prettier/prettier
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright © James Long and contributors
@@ -33068,9 +34739,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## proc-log - 6.1.0
+
**Repository URL**: https://github.com/npm/proc-log
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -33090,9 +34764,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## proggy - 4.0.0
+
**Repository URL**: https://github.com/npm/proggy
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -33112,9 +34789,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## promise-all-reject-late - 1.0.1
+
**Repository URL**: https://www.npmjs.com/package/promise-all-reject-late
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -33134,9 +34814,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## promise-call-limit - 3.0.2
+
**Repository URL**: https://github.com/isaacs/promise-call-limit
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -33156,9 +34839,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## proper-lockfile - 4.1.2
+
**Repository URL**: https://github.com/moxystudio/node-proper-lockfile
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -33184,9 +34870,12 @@ THE SOFTWARE.
```
## protobufjs - 7.6.5
+
**Repository URL**: https://github.com/protobufjs/protobuf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
This license applies to all parts of protobuf.js except those files
either explicitly including or referencing a different license or
@@ -33230,9 +34919,12 @@ support library is itself covered by the above license.
```
## proxy-addr - 2.0.8
+
**Repository URL**: https://github.com/jshttp/proxy-addr
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -33259,17 +34951,23 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## proxy-agent-negotiate - 1.1.0
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for proxy-agent-negotiate; see npm metadata.)
```
## pure-rand - 8.4.2
+
**Repository URL**: https://github.com/dubzzz/pure-rand
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33295,9 +34993,12 @@ SOFTWARE.
```
## qs - 6.16.0
+
**Repository URL**: https://github.com/ljharb/qs
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
BSD 3-Clause License
@@ -33331,9 +35032,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## quickjs-wasi - 3.6.2
+
**Repository URL**: https://github.com/vercel-labs/quickjs-wasi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33359,9 +35063,12 @@ THE SOFTWARE.
```
## range-parser - 1.3.0
+
**Repository URL**: https://github.com/jshttp/range-parser
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -33389,9 +35096,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## raw-body - 3.0.2
+
**Repository URL**: https://github.com/stream-utils/raw-body
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -33418,9 +35128,12 @@ THE SOFTWARE.
```
## read-cmd-shim - 6.0.0
+
**Repository URL**: https://github.com/npm/read-cmd-shim
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright (c) 2015, Rebecca Turner
@@ -33438,9 +35151,12 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## redis - 6.3.0
+
**Repository URL**: https://github.com/redis/node-redis
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
# Node-Redis
@@ -33787,9 +35503,12 @@ This repository is licensed under the "MIT" license. See [LICENSE](https://githu
````
## require-from-string - 2.0.2
+
**Repository URL**: https://github.com/floatdrop/require-from-string
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -33815,9 +35534,12 @@ THE SOFTWARE.
```
## retry - 0.12.0
+
**Repository URL**: https://github.com/tim-kos/node-retry
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011:
Tim Koschützki (tim@debuggable.com)
@@ -33843,9 +35565,12 @@ Felix Geisendörfer (felix@debuggable.com)
```
## retry - 0.13.1
+
**Repository URL**: https://github.com/tim-kos/node-retry
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011:
Tim Koschützki (tim@debuggable.com)
@@ -33871,9 +35596,12 @@ Felix Geisendörfer (felix@debuggable.com)
```
## router - 2.2.0
+
**Repository URL**: https://github.com/pillarjs/router
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -33901,9 +35629,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## run-applescript - 7.1.0
+
**Repository URL**: https://github.com/sindresorhus/run-applescript
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33917,9 +35648,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## safe-buffer - 5.2.1
+
**Repository URL**: https://github.com/feross/safe-buffer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -33945,9 +35679,12 @@ THE SOFTWARE.
```
## safer-buffer - 2.1.2
+
**Repository URL**: https://github.com/ChALkeR/safer-buffer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -33973,9 +35710,12 @@ SOFTWARE.
```
## section-matter - 1.0.0
+
**Repository URL**: https://github.com/jonschlinkert/section-matter
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34001,9 +35741,12 @@ SOFTWARE.
```
## semver - 7.8.5
+
**Repository URL**: https://github.com/npm/node-semver
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -34023,9 +35766,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## send - 1.2.1
+
**Repository URL**: https://github.com/pillarjs/send
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -34053,9 +35799,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## serve-static - 2.2.1
+
**Repository URL**: https://github.com/expressjs/serve-static
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -34085,9 +35834,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## setprototypeof - 1.2.0
+
**Repository URL**: https://github.com/wesleytodd/setprototypeof
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright (c) 2015, Wes Todd
@@ -34105,9 +35857,12 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## shebang-command - 2.0.0
+
**Repository URL**: https://github.com/kevva/shebang-command
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34121,9 +35876,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## shebang-regex - 3.0.0
+
**Repository URL**: https://github.com/sindresorhus/shebang-regex
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34137,9 +35895,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## side-channel - 1.1.1
+
**Repository URL**: https://github.com/ljharb/side-channel
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34165,9 +35926,12 @@ SOFTWARE.
```
## side-channel-list - 1.0.1
+
**Repository URL**: https://github.com/ljharb/side-channel-list
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34193,9 +35957,12 @@ SOFTWARE.
```
## side-channel-map - 1.0.1
+
**Repository URL**: https://github.com/ljharb/side-channel-map
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34221,9 +35988,12 @@ SOFTWARE.
```
## side-channel-weakmap - 1.0.2
+
**Repository URL**: https://github.com/ljharb/side-channel-weakmap
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34249,9 +36019,12 @@ SOFTWARE.
```
## signal-exit - 3.0.7
+
**Repository URL**: https://github.com/tapjs/signal-exit
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -34272,9 +36045,12 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## signal-exit - 4.1.0
+
**Repository URL**: https://github.com/tapjs/signal-exit
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -34295,9 +36071,12 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## sigstore - 4.1.1
+
**Repository URL**: https://github.com/sigstore/sigstore-js
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
Version 2.0, January 2004
@@ -34503,9 +36282,12 @@ Apache License
```
## smart-buffer - 4.2.0
+
**Repository URL**: https://github.com/JoshGlazebrook/smart-buffer
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34530,9 +36312,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## socket.io-client - 4.8.4
+
**Repository URL**: https://github.com/socketio/socket.io
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34558,9 +36343,12 @@ THE SOFTWARE.
```
## socket.io-parser - 4.2.7
+
**Repository URL**: https://github.com/socketio/socket.io
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -34585,9 +36373,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## socks - 2.8.10
+
**Repository URL**: https://github.com/JoshGlazebrook/socks
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34612,9 +36403,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## socks-proxy-agent - 8.0.5
+
**Repository URL**: https://github.com/TooTallNate/proxy-agents
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -34641,9 +36435,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## spdx-exceptions - 2.5.0
+
**Repository URL**: https://github.com/kemitchell/spdx-exceptions.json
**License Type(s)**: CC-BY-3.0
+
### License: https://spdx.org/licenses/CC-BY-3.0.html
+
```
The package exports an array of strings. Each string is an identifier
for a license exception under the [Software Package Data Exchange
@@ -34684,9 +36481,12 @@ discuss the following Supreme Court decisions with their attorneys:
```
## spdx-expression-parse - 4.0.0
+
**Repository URL**: https://github.com/jslicense/spdx-expression-parse.js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License
@@ -34713,9 +36513,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## spdx-license-ids - 3.0.24
+
**Repository URL**: https://github.com/jslicense/spdx-license-ids
**License Type(s)**: CC0-1.0
+
### License: https://spdx.org/licenses/CC0-1.0.html
+
````
# spdx-license-ids
@@ -34771,9 +36574,12 @@ deprecatedIds.includes('GPL-3.0'); //=> true
````
## sprintf-js - 1.0.3
+
**Repository URL**: https://github.com/alexei/sprintf.js
**License Type(s)**: BSD-3-Clause
+
### License: https://spdx.org/licenses/BSD-3-Clause.html
+
```
Copyright (c) 2007-2014, Alexandru Marasteanu
All rights reserved.
@@ -34802,9 +36608,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
## ssri - 13.0.1
+
**Repository URL**: https://github.com/npm/ssri
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
@@ -34825,9 +36634,12 @@ USE OR PERFORMANCE OF THIS SOFTWARE.
```
## standardwebhooks - 1.1.1
+
**Repository URL**: https://github.com/standard-webhooks/standard-webhooks
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
````
Typescript/Javascript library for Standard Webhooks
@@ -34873,9 +36685,12 @@ npm test
````
## statuses - 2.0.2
+
**Repository URL**: https://github.com/jshttp/statuses
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34902,9 +36717,12 @@ THE SOFTWARE.
```
## string-width - 7.2.0
+
**Repository URL**: https://github.com/sindresorhus/string-width
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34918,9 +36736,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## strip-ansi - 7.1.2
+
**Repository URL**: https://github.com/chalk/strip-ansi
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -34934,9 +36755,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## strip-bom-string - 1.0.0
+
**Repository URL**: https://github.com/jonschlinkert/strip-bom-string
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -34962,9 +36786,12 @@ THE SOFTWARE.
```
## tar - 7.5.22
+
**Repository URL**: https://github.com/isaacs/node-tar
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
# Blue Oak Model License
@@ -35024,9 +36851,12 @@ software or this license, under any kind of legal claim.***
```
## tinyglobby - 0.2.17
+
**Repository URL**: https://github.com/SuperchupuDev/tinyglobby
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35052,9 +36882,12 @@ SOFTWARE.
```
## toidentifier - 1.0.1
+
**Repository URL**: https://github.com/component/toidentifier
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35080,17 +36913,23 @@ SOFTWARE.
```
## tr46 - 0.0.3
+
**Repository URL**: https://github.com/Sebmaster/tr46.js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(No license file read from locked npm artifact for tr46; see npm metadata.)
```
## tree-sitter-bash - 0.25.0
+
**Repository URL**: https://github.com/tree-sitter/tree-sitter-bash
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -35116,9 +36955,12 @@ SOFTWARE.
```
## tree-sitter-powershell - 0.25.10
+
**Repository URL**: https://www.npmjs.com/package/tree-sitter-powershell
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35144,9 +36986,12 @@ SOFTWARE.
```
## treeverse - 3.0.0
+
**Repository URL**: https://github.com/npm/treeverse
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -35166,9 +37011,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## ts-algebra - 2.0.0
+
**Repository URL**: https://github.com/ThomasAribart/ts-algebra
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35194,9 +37042,12 @@ SOFTWARE.
```
## tslib - 2.8.1
+
**Repository URL**: https://github.com/Microsoft/tslib
**License Type(s)**: 0BSD
+
### License: https://spdx.org/licenses/0BSD.html
+
```
Copyright (c) Microsoft Corporation.
@@ -35213,9 +37064,12 @@ PERFORMANCE OF THIS SOFTWARE.
```
## tuf-js - 4.1.0
+
**Repository URL**: https://github.com/theupdateframework/tuf-js
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35241,9 +37095,12 @@ SOFTWARE.
```
## type-is - 2.1.0
+
**Repository URL**: https://github.com/jshttp/type-is
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -35271,9 +37128,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## typebox - 1.3.27
+
**Repository URL**: https://github.com/sinclairzx81/typebox
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
TypeBox
@@ -35301,9 +37161,12 @@ THE SOFTWARE.
```
## typescript - 5.6.3
+
**Repository URL**: https://github.com/microsoft/TypeScript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
@@ -35363,9 +37226,12 @@ END OF TERMS AND CONDITIONS
```
## typescript - 5.9.3
+
**Repository URL**: https://github.com/microsoft/TypeScript
**License Type(s)**: Apache-2.0
+
### License: https://spdx.org/licenses/Apache-2.0.html
+
```
Apache License
@@ -35425,9 +37291,12 @@ END OF TERMS AND CONDITIONS
```
## undici - 6.29.0
+
**Repository URL**: https://github.com/nodejs/undici
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35453,9 +37322,12 @@ SOFTWARE.
```
## undici - 8.10.2
+
**Repository URL**: https://github.com/nodejs/undici
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35481,9 +37353,12 @@ SOFTWARE.
```
## undici - 8.11.2
+
**Repository URL**: https://github.com/nodejs/undici
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35509,9 +37384,12 @@ SOFTWARE.
```
## undici-types - 6.21.0
+
**Repository URL**: https://github.com/nodejs/undici
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35537,9 +37415,12 @@ SOFTWARE.
```
## undici-types - 7.16.0
+
**Repository URL**: https://github.com/nodejs/undici
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35565,9 +37446,12 @@ SOFTWARE.
```
## unpipe - 1.0.0
+
**Repository URL**: https://github.com/stream-utils/unpipe
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -35594,9 +37478,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## util-deprecate - 1.0.2
+
**Repository URL**: https://github.com/TooTallNate/util-deprecate
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -35624,10 +37511,32 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
```
+## uuid - 9.0.1
+
+**Repository URL**: https://github.com/uuidjs/uuid
+**License Type(s)**: MIT
+
+### License: https://spdx.org/licenses/MIT.html
+
+```
+The MIT License (MIT)
+
+Copyright (c) 2010-2020 Robert Kieffer and other contributors
+
+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.
+```
+
## validate-npm-package-name - 7.0.2
+
**Repository URL**: https://github.com/npm/validate-npm-package-name
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright (c) 2015, npm, Inc
@@ -35638,9 +37547,12 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE
```
## vary - 1.1.2
+
**Repository URL**: https://github.com/jshttp/vary
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
(The MIT License)
@@ -35667,9 +37579,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## vscode-jsonrpc - 8.2.1
+
**Repository URL**: https://github.com/Microsoft/vscode-languageserver-node
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) Microsoft Corporation
@@ -35685,9 +37600,12 @@ THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## walk-up-path - 4.0.0
+
**Repository URL**: https://github.com/isaacs/walk-up-path
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -35707,9 +37625,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## web-streams-polyfill - 3.3.3
+
**Repository URL**: https://github.com/MattiasBuelens/web-streams-polyfill
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -35736,9 +37657,12 @@ SOFTWARE.
```
## web-tree-sitter - 0.25.10
+
**Repository URL**: https://github.com/tree-sitter/tree-sitter
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -35764,9 +37688,12 @@ SOFTWARE.
```
## webidl-conversions - 3.0.1
+
**Repository URL**: https://github.com/jsdom/webidl-conversions
**License Type(s)**: BSD-2-Clause
+
### License: https://spdx.org/licenses/BSD-2-Clause.html
+
```
# The BSD 2-Clause License
@@ -35783,9 +37710,12 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
```
## whatwg-url - 5.0.0
+
**Repository URL**: https://github.com/jsdom/whatwg-url
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
The MIT License (MIT)
@@ -35811,9 +37741,12 @@ THE SOFTWARE.
```
## which - 2.0.2
+
**Repository URL**: https://github.com/isaacs/node-which
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -35833,9 +37766,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## which - 6.0.1
+
**Repository URL**: https://github.com/npm/node-which
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -35855,9 +37791,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## wrappy - 1.0.2
+
**Repository URL**: https://github.com/npm/wrappy
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -35877,9 +37816,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## write-file-atomic - 7.0.1
+
**Repository URL**: https://github.com/npm/write-file-atomic
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright (c) 2015, Rebecca Turner
@@ -35889,9 +37831,12 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE
```
## ws - 8.21.0
+
**Repository URL**: https://github.com/websockets/ws
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011 Einar Otto Stangvik
Copyright (c) 2013 Arnout Kazemier and contributors
@@ -35916,9 +37861,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## ws - 8.21.3
+
**Repository URL**: https://github.com/websockets/ws
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2011 Einar Otto Stangvik
Copyright (c) 2013 Arnout Kazemier and contributors
@@ -35943,9 +37891,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
## wsl-utils - 1.0.1
+
**Repository URL**: https://github.com/sindresorhus/wsl-utils
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -35959,9 +37910,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
```
## xmlhttprequest-ssl - 2.1.2
+
**Repository URL**: https://github.com/mjwwit/node-XMLHttpRequest
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
Copyright (c) 2010 passive.ly LLC
@@ -35988,9 +37942,12 @@ Copyright (c) 2010 passive.ly LLC
```
## yallist - 4.0.0
+
**Repository URL**: https://github.com/isaacs/yallist
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
The ISC License
@@ -36010,9 +37967,12 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
## yallist - 5.0.0
+
**Repository URL**: https://github.com/isaacs/yallist
**License Type(s)**: BlueOak-1.0.0
+
### License: https://spdx.org/licenses/BlueOak-1.0.0.html
+
```
All packages under `src/` are licensed according to the terms in
their respective `LICENSE` or `LICENSE.md` files.
@@ -36080,9 +38040,12 @@ software or this license, under any kind of legal claim.***
```
## yaml - 2.9.0
+
**Repository URL**: https://github.com/eemeli/yaml
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
Copyright Eemeli Aro
@@ -36100,9 +38063,12 @@ THIS SOFTWARE.
```
## zod - 3.25.76
+
**Repository URL**: https://github.com/colinhacks/zod
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -36128,9 +38094,12 @@ SOFTWARE.
```
## zod - 4.1.8
+
**Repository URL**: https://github.com/colinhacks/zod
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -36156,9 +38125,12 @@ SOFTWARE.
```
## zod - 4.6.5
+
**Repository URL**: https://github.com/colinhacks/zod
**License Type(s)**: MIT
+
### License: https://spdx.org/licenses/MIT.html
+
```
MIT License
@@ -36184,9 +38156,12 @@ SOFTWARE.
```
## zod-to-json-schema - 3.25.2
+
**Repository URL**: https://github.com/StefanTerdell/zod-to-json-schema
**License Type(s)**: ISC
+
### License: https://spdx.org/licenses/ISC.html
+
```
ISC License
diff --git a/README.md b/README.md
index 37aa6fcb7..e8231724a 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,7 @@ NeMo Fabric includes adapters for the following harnesses and execution targets.
| [Claude Code](adapters/python/claude/README.md) | ✅ | ✅ | ✅ | ✅ |
| [Cline](adapters/typescript/cline/README.md) | ✅ | ✅ | ✅ | — |
| [Codex](adapters/python/codex/README.md) | — | ✅ | ✅ | ✅ |
+| [Factory Droid](adapters/typescript/droid/README.md) | ✅ | ✅ | ✅ | — |
| [Hermes Agent](adapters/python/hermes/README.md) | ✅ | ✅ | ✅ | ✅ |
| [Kilo Code](adapters/typescript/kilo/README.md) | ✅ | ✅ | ✅ | — |
| [LangChain Deep Agents](adapters/python/deepagents/README.md) | ✅ | ✅ | ✅ | ✅ |
diff --git a/RELEASING.md b/RELEASING.md
index e50de1d3b..f9e0a6a9e 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -32,7 +32,7 @@ package-specific tag pushes:
| Ecosystem | Published Surface |
|---|---|
| crates.io | `nemo-fabric-core`, `nemo-fabric-cli` |
-| npm | `nemo-fabric-adapter-contract`, `nemo-fabric-adapters-common`, `nemo-fabric-adapters-pi`, `nemo-fabric-adapters-opencode`, `nemo-fabric-adapters-qwen` |
+| npm | `nemo-fabric-adapter-contract`, `nemo-fabric-adapters-common`, `nemo-fabric-adapters-droid`, `nemo-fabric-adapters-pi`, `nemo-fabric-adapters-opencode`, `nemo-fabric-adapters-qwen` |
| GitHub Actions | `nemo-fabric`, `nemo-fabric-runtime`, `nemo-fabric-collector`, `nemo-fabric-adapter-catalog`, `nemo-fabric-adapters-common`, `nemo-fabric-adapters-claude`, `nemo-fabric-adapters-codex`, `nemo-fabric-adapters-deepagents`, `nemo-fabric-adapters-hermes`, and `nemo-fabric-adapters-nooa` wheel artifacts |
| Fern | The documentation site |
@@ -53,10 +53,10 @@ NeMo Fabric versions are anchored on the workspace SemVer in the repository root
dependency pins and must stay aligned with the same release version. The
root `pyproject.toml` is a private development coordinator and remains at
`0.0.0`.
-- The TypeScript contract, Common adapter support package, Pi adapter, private
- adapter workspace, exact internal dependency pins, and their lockfiles all
- use the canonical NeMo Fabric release version. The package version is independent
- of the `fabric.adapter/v1alpha2` wire contract version.
+- The TypeScript contract, Common adapter support package, bundled TypeScript
+ adapters, private adapter workspace, exact internal dependency pins, and their
+ lockfiles all use the canonical NeMo Fabric release version. The package
+ version is independent of the `fabric.adapter/v1alpha2` wire contract version.
- The `nemo-fabric-runtime` Python package version is derived at packaging time.
`sdk/python/nemo-fabric-runtime/pyproject.toml` stays
`dynamic = ["version"]` in the repository, and Maturin derives the version
@@ -271,6 +271,7 @@ bootstraps:
- `nemo-fabric-adapter-contract`
- `nemo-fabric-adapters-common`
+- `nemo-fabric-adapters-droid`
- `nemo-fabric-adapters-pi`
The first supported versions must be published by the trusted GitHub Actions
@@ -290,6 +291,7 @@ Before the first supported TypeScript package release:
for package in \
nemo-fabric-adapter-contract \
nemo-fabric-adapters-common \
+ nemo-fabric-adapters-droid \
nemo-fabric-adapters-pi; do
npm owner add "$package"
done
@@ -315,10 +317,11 @@ Before the first supported TypeScript package release:
|---|---|
| `nemo-fabric-adapter-contract` | `publish_typescript.yml` |
| `nemo-fabric-adapters-common` | `publish_typescript.yml` |
+ | `nemo-fabric-adapters-droid` | `publish_typescript.yml` |
| `nemo-fabric-adapters-pi` | `publish_typescript.yml` |
4. Cut the canonical release tag. The publishing workflow uses that tag to
- publish the contract, Common adapter, and Pi adapter packages in dependency
+ publish the contract and bundled TypeScript adapter packages in dependency
order, then verifies them in that order.
5. Approve the `npmjs` environment when prompted. The workflows test, pack, and
publish through OIDC; do not manually pre-publish a supported version. On a
@@ -429,11 +432,11 @@ git push upstream "refs/tags/${RELEASE_TAG}"
## Publish the TypeScript Adapter Packages
-Pushing the canonical beta, RC, or stable tag publishes the TypeScript contract,
-Common, Pi, OpenCode, and Qwen Code packages in dependency order. The workflow
-submits all five packages before it starts deployment verification, then verifies them in
-the same order. Do not create package-specific npm tags. The nightly workflow
-runs the TypeScript tests against alpha tags without publishing to npm.
+Pushing the canonical beta, RC, or stable tag publishes the TypeScript contract
+and bundled TypeScript adapter packages in dependency order. The workflow
+submits every package before it starts deployment verification, then verifies
+them in the same order. Do not create package-specific npm tags. The nightly
+workflow runs the TypeScript tests against alpha tags without publishing to npm.
## What CI Does on a Canonical Tag Push
@@ -458,8 +461,8 @@ The release pipeline then:
3. Publishes `nemo-fabric-core` and `nemo-fabric-cli` to crates.io through
trusted publishing for stable, beta, and RC tags. Alpha tags are not
published to crates.io.
-4. Publishes the contract, Common, Pi, OpenCode, and Qwen Code packages to npm from the canonical
- tag in dependency order, then verifies the deployment in that order. Stable
+4. Publishes the contract and bundled TypeScript adapter packages to npm from
+ the canonical tag in dependency order, then verifies the deployment in that order. Stable
releases use the `latest` dist-tag and beta and RC releases use `next`.
Alpha tags validate the packages without publishing them.
5. Publishes Fern documentation versions for stable, beta, and RC tags. Alpha
@@ -528,6 +531,7 @@ After the release is live, verify:
for package in \
nemo-fabric-adapter-contract \
nemo-fabric-adapters-common \
+ nemo-fabric-adapters-droid \
nemo-fabric-adapters-pi \
nemo-fabric-adapters-opencode \
nemo-fabric-adapters-qwen; do
@@ -543,6 +547,7 @@ After the release is live, verify:
--registry="$npmjs_registry" \
"nemo-fabric-adapter-contract@" \
"nemo-fabric-adapters-common@" \
+ "nemo-fabric-adapters-droid@" \
"nemo-fabric-adapters-pi@" \
"nemo-fabric-adapters-opencode@" \
"nemo-fabric-adapters-qwen@"
diff --git a/adapters/README.md b/adapters/README.md
index 13658a3da..d46f758b3 100644
--- a/adapters/README.md
+++ b/adapters/README.md
@@ -59,6 +59,7 @@ build, and packaging conventions.
| Agent Harness | Adapter ID | npm Package | Supported Runtime |
| --- | --- | --- | --- |
| [Cline](typescript/cline/README.md) | `nvidia.fabric.cline` | `nemo-fabric-adapters-cline` | Node.js 22.19+ |
+| [Factory Droid](typescript/droid/README.md) | `nvidia.fabric.droid` | `nemo-fabric-adapters-droid` | Node.js 22.19+ |
| [Kilo Code](typescript/kilo/README.md) | `nvidia.fabric.kilo` | `nemo-fabric-adapters-kilo` | Node.js 22.19+ |
| [OpenCode](typescript/opencode/README.md) | `nvidia.fabric.opencode` | `nemo-fabric-adapters-opencode` | Bun 1.4.2+ |
| [Pi](typescript/pi/README.md) | `nvidia.fabric.pi` | `nemo-fabric-adapters-pi` | Node.js 22.19+ |
@@ -96,6 +97,7 @@ integration shape and implement the minimum lifecycle.
| [OpenClaw](python/openclaw/README.md) | Native OpenClaw providers or a configured OpenAI Chat Completions-compatible provider | OpenClaw native policy only | Normalized: stdio, HTTP, streamable HTTP, and SSE without normalized authentication | Normalized `skills.paths` | OpenClaw native behavior |
| [OpenHands](python/openhands/README.md) | Configured LiteLLM provider and model | `tools.enabled` and `tools.blocked` select terminal and file-editor built-ins | Normalized: stdio, HTTP, streamable HTTP, and SSE without authentication or per-server tool filters | Normalized `skills.paths` | Not exposed |
| [Cline](typescript/cline/README.md) | Configured Cline provider and model with an optional compatible base URL | `tools.enabled` and `tools.blocked` map to Cline built-ins | Normalized unauthenticated stdio, streamable HTTP, and SSE without per-server tool filters | Normalized through Cline Agent Plugins v1 | Disabled |
+| [Factory Droid](typescript/droid/README.md) | Factory-managed model ID; custom endpoints remain Droid-owned settings | Exact built-in allow/block policy through session tool IDs | Normalized unauthenticated stdio, streamable HTTP, and SSE without per-server tool filters | Normalized `skills.paths` through an isolated personal compatibility directory | Not exposed |
| [Kilo Code](typescript/kilo/README.md) | Local Kilo server and one Kilo session | Not supported | Reuses the session and submits one SDK prompt for ordered text input | Deletes the session, terminates the server, and removes the isolated profile | Adapter-owned loopback service |
| [Kilo Code](typescript/kilo/README.md) | Configured Kilo provider and model with an optional OpenAI-compatible base URL | `tools.enabled` and `tools.blocked` map to native Kilo tool names | Normalized: stdio, streamable HTTP, and SSE | Normalized `skills.paths` | Not exposed |
| [OpenCode](typescript/opencode/README.md) | Configured OpenCode provider and model with an optional OpenAI-compatible base URL | Not exposed | Normalized: stdio and streamable HTTP | Normalized `skills.paths` | Not exposed |
@@ -127,39 +129,39 @@ its harness. `No` means an explicitly configured value fails planning instead
of being ignored. The following table groups provider-specific Relay subfields
and additive extension maps because their support does not vary by adapter:
-| `FabricConfig` Field | Claude | Codex | Deep Agents | Hermes Agent | mini-SWE-agent | NOOA | OpenClaw | OpenHands | Cline | OpenCode | Pi | Qwen Code | Kilo Code | Remote Agent |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| `schema_version` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `metadata.name`, `.description` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `harness.adapter_id`, `.resolution` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `harness.settings` | Closed adapter schema | Closed adapter schema | Closed adapter schema | Closed adapter schema | Closed `timeout` schema | Closed schema | Closed command, port-range, and timeout schema | Closed empty schema | Closed schema with no properties | No settings declared | Closed local-extension and Relay-extension schema | Closed `permission_mode` schema | Closed schema | Closed `base_url`, `api_type`, transport-timeout, and `relay_streaming` schema |
-| `workflow.target_id`, `.settings` | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
-| `models..provider` | `anthropic` uses native auth; custom names require an Anthropic Messages-compatible `base_url` and `api_key_env` | `openai` uses native auth; custom names require a Responses-compatible `base_url` and `api_key_env` | Dynamic LangChain provider; custom OpenAI-compatible endpoints require `base_url` and `api_key_env` | Dynamic Hermes provider | Configured provider | Configured provider | OpenClaw provider; custom providers require an OpenAI Chat Completions-compatible `base_url` | Prefixes unqualified model names for LiteLLM | Cline provider | OpenCode provider | Pi catalog provider | `openai` | Kilo provider | Configured provider |
-| `models..model` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes; passed to OpenCode | Yes; must exist in the Pi catalog | Yes | Yes | Yes |
-| `models..api_key_env` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
-| `models..base_url` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes; compatible endpoint | Yes; OpenAI-compatible Chat Completions endpoint | Yes; known catalog models only | Yes; OpenAI-compatible Chat Completions endpoint | Yes; OpenAI-compatible endpoint | No; use `harness.settings.base_url` |
-| `models..temperature` | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes: OpenAI-compatible `base_url` only | No | Yes | Yes | Yes |
-| `models..settings.` | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | `client_type` | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | `max_tokens` for Anthropic Messages |
-| `models..top_p` | No | No | Yes | Yes | Yes: passed through LiteLLM | No | Yes | Yes | No | Yes: OpenAI-compatible `base_url` only | No | Yes | Yes | Yes: translated to the selected API protocol |
-| `models..max_tokens` | No | No | Yes | Yes | Yes: passed through LiteLLM | No | Yes | Yes | No | No | No | No | No | Yes: translated to the selected API protocol |
-| `instructions.system` | `replace`, `append` | `replace` with base instructions | `replace` | `replace` | `replace` | `replace` | `replace` | `replace`, `append` | `replace` with Cline override prompt | `replace` with OpenCode base instructions | `replace` with Pi base instructions | `replace`, `append` | `replace` | `replace` |
-| `runtime.input_schema`, `.output_schema` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `runtime.artifacts`, `.timeout_seconds` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `runtime.max_turns` | Yes | No | Yes; maps to LangGraph supersteps | Yes; iteration limit | Yes | No | No | Yes; per invocation | No | No | No | No | Yes; maps to build-agent steps | No |
-| `environment.provider`, `.control_location`, `.ownership` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `environment.workspace`, `.artifacts`, `.env` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
-| `environment.connection`, `.metadata`, `.settings` | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned |
-| `tools.definitions` | No | No | No | No | No | No | No | No | No | No | Yes; trusted local module factories | No | No | No |
-| `tools.enabled`, `.blocked` | Yes | No | Yes | Yes; native selectors are Hermes toolset names | No | No | Yes | Yes; terminal and file editor | Yes; Cline built-in names | No | Yes | `tools.blocked`: Yes; `tools.enabled`: No | Yes; native Kilo tool names | No |
-| `skills.paths` | Yes | Yes | Yes | Yes | No | InteractiveAgent: Yes, BenchAgent: No | Yes | Yes | Yes; Agent Plugins v1 | Yes | Yes | Yes | Yes | No |
-| `mcp.servers..transport`, `.url` with `harness_native` exposure | Yes | Yes | Yes | Yes | No | InteractiveAgent: Yes, BenchAgent: No | Yes | Yes; no authentication or per-server tool filters | Yes; unauthenticated only | Yes: stdio `args` and `env`, streamable HTTP `custom_headers` | No | Yes: stdio and streamable HTTP with per-server tool filters | Yes: stdio, streamable HTTP, and SSE | No |
-| `mcp.servers..exposure = "fabric_managed"` | No; not implemented | No; not implemented | No; not implemented | No; not implemented | No | No; not implemented | No; not implemented | No | No | No | No | No | No | No |
-| `telemetry.providers.relay` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes, supports embedded collector-backed Agent Trajectory Observability Format (ATOF) streaming | No | No | Yes, supports collector-backed ATOF streaming |
-| `telemetry.providers.native` | No | Yes; OpenTelemetry | Yes; OpenTelemetry and OpenInference | No | No | No | No | No | No | No | No | No | No | No |
-| `telemetry.providers..config` | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | No | No | No | No | Declared-provider pass-through | No | No | No |
-| `relay.project`, `.output_dir`, `.observability` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | No | No | Uses the named external collector sink when selected; config is not sent to the remote service |
-| `relay.components`, `.policy` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | No | No | Not sent to the remote service |
-| Other additive `extensions` on typed config objects | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor |
+| `FabricConfig` Field | Claude | Codex | Deep Agents | Hermes Agent | mini-SWE-agent | NOOA | OpenClaw | OpenHands | Cline | Factory Droid | OpenCode | Pi | Qwen Code | Kilo Code | Remote Agent |
+| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| `schema_version` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `metadata.name`, `.description` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `harness.adapter_id`, `.resolution` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `harness.settings` | Closed adapter schema | Closed adapter schema | Closed adapter schema | Closed adapter schema | Closed `timeout` schema | Closed schema | Closed command, port-range, and timeout schema | Closed empty schema | Closed schema with no properties | Closed schema with no properties | No settings declared | Closed local-extension and Relay-extension schema | Closed `permission_mode` schema | Closed schema | Closed `base_url`, `api_type`, transport-timeout, and `relay_streaming` schema |
+| `workflow.target_id`, `.settings` | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
+| `models..provider` | `anthropic` uses native auth; custom names require an Anthropic Messages-compatible `base_url` and `api_key_env` | `openai` uses native auth; custom names require a Responses-compatible `base_url` and `api_key_env` | Dynamic LangChain provider; custom OpenAI-compatible endpoints require `base_url` and `api_key_env` | Dynamic Hermes provider | Configured provider | Configured provider | OpenClaw provider; custom providers require an OpenAI Chat Completions-compatible `base_url` | Prefixes unqualified model names for LiteLLM | Cline provider | `factory` | OpenCode provider | Pi catalog provider | `openai` | Kilo provider | Configured provider |
+| `models..model` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes; Factory-managed model ID | Yes; passed to OpenCode | Yes; must exist in the Pi catalog | Yes | Yes | Yes |
+| `models..api_key_env` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
+| `models..base_url` | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes; compatible endpoint | No; use external Droid settings | Yes; OpenAI-compatible Chat Completions endpoint | Yes; known catalog models only | Yes; OpenAI-compatible Chat Completions endpoint | Yes; OpenAI-compatible endpoint | No; use `harness.settings.base_url` |
+| `models..temperature` | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes: OpenAI-compatible `base_url` only | No | Yes | Yes | Yes |
+| `models..settings.` | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | `client_type` | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | No keys declared | `max_tokens` for Anthropic Messages |
+| `models..top_p` | No | No | Yes | Yes | Yes: passed through LiteLLM | No | Yes | Yes | No | No | Yes: OpenAI-compatible `base_url` only | No | Yes | Yes | Yes: translated to the selected API protocol |
+| `models..max_tokens` | No | No | Yes | Yes | Yes: passed through LiteLLM | No | Yes | Yes | No | No | No | No | No | No | Yes: translated to the selected API protocol |
+| `instructions.system` | `replace`, `append` | `replace` with base instructions | `replace` | `replace` | `replace` | `replace` | `replace` | `replace`, `append` | `replace` with Cline override prompt | `replace`, `append` | `replace` with OpenCode base instructions | `replace` with Pi base instructions | `replace`, `append` | `replace` | `replace` |
+| `runtime.input_schema`, `.output_schema` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `runtime.artifacts`, `.timeout_seconds` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `runtime.max_turns` | Yes | No | Yes; maps to LangGraph supersteps | Yes; iteration limit | Yes | No | No | Yes; per invocation | No | No | No | No | No | Yes; maps to build-agent steps | No |
+| `environment.provider`, `.control_location`, `.ownership` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `environment.workspace`, `.artifacts`, `.env` | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core | Core |
+| `environment.connection`, `.metadata`, `.settings` | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned | Environment-provider-owned |
+| `tools.definitions` | No | No | No | No | No | No | No | No | No | No | No | Yes; trusted local module factories | No | No | No |
+| `tools.enabled`, `.blocked` | Yes | No | Yes | Yes; native selectors are Hermes toolset names | No | No | Yes | Yes; terminal and file editor | Yes; Cline built-in names | Yes; Droid built-in IDs | No | Yes | `tools.blocked`: Yes; `tools.enabled`: No | Yes; native Kilo tool names | No |
+| `skills.paths` | Yes | Yes | Yes | Yes | No | InteractiveAgent: Yes, BenchAgent: No | Yes | Yes | Yes; Agent Plugins v1 | Yes; isolated personal compatibility directory | Yes | Yes | Yes | Yes | No |
+| `mcp.servers..transport`, `.url` with `harness_native` exposure | Yes | Yes | Yes | Yes | No | InteractiveAgent: Yes, BenchAgent: No | Yes | Yes; no authentication or per-server tool filters | Yes; unauthenticated only | Yes; unauthenticated stdio, streamable HTTP, and SSE | Yes: stdio `args` and `env`, streamable HTTP `custom_headers` | No | Yes: stdio and streamable HTTP with per-server tool filters | Yes: stdio, streamable HTTP, and SSE | No |
+| `mcp.servers..exposure = "fabric_managed"` | No; not implemented | No; not implemented | No; not implemented | No; not implemented | No | No; not implemented | No; not implemented | No | No | No | No | No | No | No | No |
+| `telemetry.providers.relay` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes, supports embedded collector-backed Agent Trajectory Observability Format (ATOF) streaming | No | No | Yes, supports collector-backed ATOF streaming |
+| `telemetry.providers.native` | No | Yes; OpenTelemetry | Yes; OpenTelemetry and OpenInference | No | No | No | No | No | No | No | No | No | No | No | No |
+| `telemetry.providers..config` | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | Declared-provider pass-through | No | No | No | No | No | Declared-provider pass-through | No | No | No |
+| `relay.project`, `.output_dir`, `.observability` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | No | No | Uses the named external collector sink when selected; config is not sent to the remote service |
+| `relay.components`, `.policy` | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | No | No | Not sent to the remote service |
+| Other additive `extensions` on typed config objects | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor | Rejected unless declared by the descriptor |
The selected model role is `default`, or the sole configured role when no
`default` exists. More than one role without `default` fails planning.
@@ -197,6 +199,7 @@ Agent Trajectory Interchange Format (ATIF).
| [OpenClaw](python/openclaw/README.md) | OpenClaw Gateway session selected by Fabric runtime ID | Not supported | Sends a terminal Chat Completions request to the isolated loopback Gateway | Terminates the Gateway process tree and removes its temporary config and state | Adapter-owned loopback service |
| [OpenHands](python/openhands/README.md) | OpenHands `Conversation` and event history | Not supported | Sends one message and runs the existing conversation to its next terminal state | Closes the conversation | Not implemented |
| [Cline](typescript/cline/README.md) | Local `ClineCore` and interactive Cline session | Not supported | Starts on the first prompt, then calls `send()` with the retained session ID | Stops the session, disposes the core, and removes runtime-scoped plugin and data directories | Not implemented |
+| [Factory Droid](typescript/droid/README.md) | TypeScript SDK `DroidSession` | Not supported | Calls `stream()` for each ordered prompt on the retained session | Closes the session and its caller-installed CLI subprocess | Not implemented |
| [OpenCode](typescript/opencode/README.md) | Embedded OpenCode host and session | Not supported | Reuses the session and calls `prompt()`, `wait()`, and `context()` for ordered text input | Removes the session and closes the host | Not implemented |
| [Pi](typescript/pi/README.md) | In-memory Pi `AgentSession` | Runtime-owned Relay 0.9 CLI gateway and explicit Pi extension | Reuses the session and calls `prompt()` for ordered text input; with `streaming=True`, routes per-invocation model-turn ATOF for successful redirects through the embedded collector; startup `model_redirect` marks remain in configured Relay ATOF artifacts and are not included in `invoke_stream()`; `relay_artifacts` does not include local ATIF | Aborts work, emits extension shutdown so local ATIF finalizes on disk, disposes the session, and then stops the gateway | Not implemented |
| [Qwen Code](typescript/qwen/README.md) | SDK query and bundled Qwen CLI child process | Not supported | Reuses one live SDK query across ordered text turns | Closes the query and removes isolated temporary settings | Not implemented |
diff --git a/adapters/typescript/droid/LICENSE b/adapters/typescript/droid/LICENSE
new file mode 100644
index 000000000..d1cb60ccd
--- /dev/null
+++ b/adapters/typescript/droid/LICENSE
@@ -0,0 +1,17 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ Copyright 2026 NVIDIA CORPORATION & AFFILIATES
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ 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.
diff --git a/adapters/typescript/droid/README.md b/adapters/typescript/droid/README.md
new file mode 100644
index 000000000..89e59ec01
--- /dev/null
+++ b/adapters/typescript/droid/README.md
@@ -0,0 +1,97 @@
+
+
+# NVIDIA NeMo Fabric Factory Droid Adapter
+
+This package provides the bundled `nvidia.fabric.droid` process adapter. It
+uses Factory's supported TypeScript SDK and retains one Droid session for the
+lifetime of each NeMo Fabric runtime.
+
+Install the supported SDK and caller-owned Droid CLI separately, then install
+the adapter in the same Node.js project:
+
+```bash
+npm install --global droid@0.233.0
+npm install --save-exact @factory/droid-sdk@0.9.1
+npm install nemo-fabric-adapters-droid
+```
+
+The adapter never installs the Droid CLI at runtime. A missing SDK returns
+`droid_harness_unavailable`; a missing CLI returns `droid_cli_unavailable`.
+Set the Factory API key referenced by the Fabric model configuration before
+starting a runtime.
+
+For source development, install and build the focused workspace from the
+repository root:
+
+```bash
+just install-typescript-droid
+npm run build --prefix adapter-contract/typescript
+npm run build --prefix adapters/typescript --workspace nemo-fabric-adapters-common
+npm run build --prefix adapters/typescript --workspace nemo-fabric-adapters-droid
+```
+
+Point `DiscoveryConfig.local_paths` at the installed descriptor:
+
+```python
+from nemo_fabric import DiscoveryConfig, FabricConfig, HarnessConfig
+from nemo_fabric import InstructionConfig, InstructionsConfig
+from nemo_fabric import MetadataConfig, ModelConfig, ToolsConfig
+
+config = FabricConfig(
+ metadata=MetadataConfig(name="droid-agent"),
+ discovery=DiscoveryConfig(
+ local_paths=[
+ "./node_modules/nemo-fabric-adapters-droid/droid.fabric-adapter.json"
+ ]
+ ),
+ harness=HarnessConfig(adapter_id="nvidia.fabric.droid"),
+ models={
+ "default": ModelConfig(
+ provider="factory",
+ model="auto",
+ api_key_env="FACTORY_API_KEY",
+ )
+ },
+ instructions=InstructionsConfig(
+ system=InstructionConfig(
+ content="Review code for correctness risks.",
+ mode="append",
+ )
+ ),
+ tools=ToolsConfig(enabled=["Read", "Grep", "Glob"]),
+)
+config.add_skill_path("./skills/code-review")
+```
+
+For a source build, use
+`adapters/typescript/droid/droid.fabric-adapter.json`.
+
+The initial adapter supports Factory-managed model IDs, a Factory API-key
+environment reference, replacement or appended system instructions, exact
+Droid built-in tool enable/block policy, normalized skill paths, and
+unauthenticated stdio, SSE, and streamable HTTP MCP servers. Tool values are
+Droid tool IDs; inspect the IDs
+available to a model with `droid exec --model MODEL_ID --list-tools
+--output-format json`.
+
+Each NeMo Fabric runtime owns one SDK session. Ordered invocations call
+`session.stream()` on that retained session, so the caller does not replay
+history. `stop()` closes the session and its CLI subprocess. Independent
+runtimes create separate sessions.
+
+Configured skill directories are copied into a runtime-scoped temporary home
+using Droid's compatible personal `.agents/skills` layout. The adapter verifies
+them with `listSkills()` and removes the temporary home during shutdown. This
+keeps Fabric-provided skills isolated without modifying the workspace.
+The isolated profile preserves Factory `settings.json` for custom model
+definitions but does not copy ambient MCP configuration or authentication
+state.
+
+The adapter intentionally does not accept normalized custom model endpoints.
+Droid custom endpoints are configured outside a session in Droid settings. It
+also does not advertise streaming, telemetry, or Relay integration. Unsupported
+normalized fields, MCP authentication and per-server tool filters, unknown
+settings, and unknown built-in tool IDs fail instead of being ignored.
diff --git a/adapters/typescript/droid/droid.fabric-adapter.json b/adapters/typescript/droid/droid.fabric-adapter.json
new file mode 100644
index 000000000..0c11ce867
--- /dev/null
+++ b/adapters/typescript/droid/droid.fabric-adapter.json
@@ -0,0 +1,72 @@
+{
+ "contract_version": "fabric.adapter/v1alpha2",
+ "adapter_id": "nvidia.fabric.droid",
+ "adapter_kind": "process",
+ "runner": {
+ "command": "node",
+ "script": "dist/cli.js"
+ },
+ "requirements": {
+ "binaries": ["node", "droid"]
+ },
+ "config": {
+ "accepts": [
+ "models",
+ "instructions.system",
+ "tools.enabled",
+ "tools.blocked",
+ "mcp",
+ "skills"
+ ],
+ "system_instruction_modes": ["replace", "append"]
+ },
+ "settings_schema": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": false
+ },
+ "model_schema": {
+ "type": "object",
+ "properties": {
+ "provider": {"const": "factory"},
+ "model": {"type": "string", "minLength": 1},
+ "api_key_env": {"type": "string", "minLength": 1}
+ },
+ "required": ["provider", "model", "api_key_env"],
+ "additionalProperties": false
+ },
+ "extension_schemas": {
+ "run_result": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "session_id": {"type": "string", "minLength": 1},
+ "finish_reason": {
+ "type": "string",
+ "enum": ["success", "interrupted", "error_during_execution", "error_structured_output"]
+ },
+ "duration_ms": {"type": "integer", "minimum": 0},
+ "turn_count": {"type": "integer", "minimum": 0}
+ },
+ "required": ["session_id", "finish_reason", "duration_ms", "turn_count"],
+ "additionalProperties": false
+ },
+ "usage": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "cache_read_tokens": {"type": "integer", "minimum": 0},
+ "cache_write_tokens": {"type": "integer", "minimum": 0},
+ "thinking_tokens": {"type": "integer", "minimum": 0},
+ "factory_credits": {"type": "number", "minimum": 0}
+ },
+ "additionalProperties": false
+ }
+ },
+ "capabilities": {
+ "streaming": false,
+ "cancellation": false,
+ "updates": false,
+ "service": false
+ }
+}
diff --git a/adapters/typescript/droid/package.json b/adapters/typescript/droid/package.json
new file mode 100644
index 000000000..94964b9a9
--- /dev/null
+++ b/adapters/typescript/droid/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "nemo-fabric-adapters-droid",
+ "version": "0.5.0",
+ "description": "Factory Droid SDK harness adapter for NVIDIA NeMo Fabric.",
+ "license": "Apache-2.0",
+ "type": "module",
+ "sideEffects": false,
+ "exports": {
+ "./descriptor": "./droid.fabric-adapter.json",
+ "./package.json": "./package.json"
+ },
+ "bin": {
+ "nemo-fabric-adapters-droid": "dist/cli.js"
+ },
+ "files": [
+ "dist",
+ "droid.fabric-adapter.json",
+ "README.md",
+ "LICENSE"
+ ],
+ "scripts": {
+ "build": "tsc -p tsconfig.build.json",
+ "clean": "rm -rf dist",
+ "pack:check": "npm run build && node ../scripts/check-package.mjs",
+ "prepack": "npm run build",
+ "test": "npm run clean && npm run build && node --test test/*.test.mjs"
+ },
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://registry.npmjs.org"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/NVIDIA/NeMo-Fabric.git",
+ "directory": "adapters/typescript/droid"
+ },
+ "bugs": {
+ "url": "https://github.com/NVIDIA/NeMo-Fabric/issues"
+ },
+ "homepage": "https://github.com/NVIDIA/NeMo-Fabric/tree/main/adapters/typescript/droid#readme",
+ "engines": {
+ "node": ">=22.19.0"
+ },
+ "dependencies": {
+ "nemo-fabric-adapter-contract": "0.5.0",
+ "nemo-fabric-adapters-common": "0.5.0"
+ },
+ "peerDependencies": {
+ "@factory/droid-sdk": "^0.9.1"
+ },
+ "peerDependenciesMeta": {
+ "@factory/droid-sdk": {
+ "optional": true
+ }
+ },
+ "devDependencies": {
+ "@factory/droid-sdk": "0.9.1",
+ "@types/node": "24.12.4",
+ "typescript": "5.9.3"
+ }
+}
diff --git a/adapters/typescript/droid/src/cli.ts b/adapters/typescript/droid/src/cli.ts
new file mode 100644
index 000000000..fe522cdac
--- /dev/null
+++ b/adapters/typescript/droid/src/cli.ts
@@ -0,0 +1,13 @@
+#!/usr/bin/env node
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import { serve } from "nemo-fabric-adapters-common";
+
+await serve(async () => {
+ const [{ DroidSdkSessionFactory }, { DroidAdapterRuntime }] = await Promise.all([
+ import("./droid-sdk.js"),
+ import("./runtime.js"),
+ ]);
+ return new DroidAdapterRuntime(new DroidSdkSessionFactory());
+});
diff --git a/adapters/typescript/droid/src/droid-sdk.ts b/adapters/typescript/droid/src/droid-sdk.ts
new file mode 100644
index 000000000..b1ca292dc
--- /dev/null
+++ b/adapters/typescript/droid/src/droid-sdk.ts
@@ -0,0 +1,764 @@
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import { cp, mkdir, mkdtemp, realpath, rm, stat } from "node:fs/promises";
+import { tmpdir } from "node:os";
+import { basename, join, resolve } from "node:path";
+
+import type {
+ AgentConfig,
+ AgentMcpServerConfig,
+ AgentModelConfig,
+ AgentUsage,
+ JsonObject,
+} from "nemo-fabric-adapter-contract";
+import { LifecycleError, type AdapterStartInput } from "nemo-fabric-adapters-common";
+
+import type { DroidPromptOutcome, DroidSessionFactory, DroidSessionHandle } from "./runtime.js";
+
+const DROID_SDK_INSTALL_COMMAND = "npm install @factory/droid-sdk@0.9.1";
+const MCP_STARTUP_TIMEOUT_MS = 10_000;
+const MCP_STATUS_POLL_INTERVAL_MS = 50;
+const INHERITED_ENVIRONMENT_NAMES = new Set([
+ "APPDATA",
+ "BUN_INSTALL",
+ "COMSPEC",
+ "ComSpec",
+ "DBUS_SESSION_BUS_ADDRESS",
+ "HOME",
+ "HTTP_PROXY",
+ "HTTPS_PROXY",
+ "LANG",
+ "LC_ALL",
+ "LC_CTYPE",
+ "LOCALAPPDATA",
+ "NO_PROXY",
+ "PATH",
+ "PATHEXT",
+ "Path",
+ "PathExt",
+ "SHELL",
+ "SSL_CERT_DIR",
+ "SSL_CERT_FILE",
+ "SYSTEMROOT",
+ "SystemRoot",
+ "TEMP",
+ "TERM",
+ "TERM_PROGRAM",
+ "TMP",
+ "TMPDIR",
+ "USER",
+ "USERPROFILE",
+ "XDG_CACHE_HOME",
+ "XDG_CONFIG_HOME",
+ "XDG_DATA_HOME",
+ "XDG_RUNTIME_DIR",
+ "http_proxy",
+ "https_proxy",
+ "no_proxy",
+]);
+
+interface DroidTokenUsage {
+ inputTokens: number;
+ outputTokens: number;
+ cacheCreationTokens: number;
+ cacheReadTokens: number;
+ thinkingTokens: number;
+ factoryCredits?: number;
+}
+
+interface DroidErrorEvent {
+ message?: unknown;
+}
+
+interface DroidResult {
+ type: "result";
+ sessionId: unknown;
+ durationMs: unknown;
+ tokenUsage: unknown;
+ text: unknown;
+ turnCount: unknown;
+ success: unknown;
+ subtype: unknown;
+ interrupted: unknown;
+ error: DroidErrorEvent | null | unknown;
+}
+
+interface DroidToolInfo {
+ id?: unknown;
+}
+
+interface DroidMcpToolInfo {
+ serverName?: unknown;
+ name?: unknown;
+}
+
+interface DroidSkillInfo {
+ name?: unknown;
+ filePath?: unknown;
+ enabled?: unknown;
+}
+
+interface DroidMcpStdioConfig {
+ name: string;
+ command: string;
+ args: string[];
+ env: Record;
+}
+
+interface DroidMcpNetworkConfig {
+ name: string;
+ type: "http" | "sse";
+ url: string;
+ headers: Array<{ name: string; value: string }>;
+}
+
+type DroidMcpServerConfig = DroidMcpStdioConfig | DroidMcpNetworkConfig;
+
+interface DroidSdkSession {
+ readonly id: string;
+ stream(prompt: string): AsyncGenerator;
+ close(): Promise;
+ listTools(): Promise;
+ updateSettings(settings: { disabledToolIds: string[] }): Promise;
+ listMcpTools(): Promise;
+ listSkills(): Promise<{ skills: DroidSkillInfo[] }>;
+}
+
+interface DroidSdkModule {
+ createSession(options: Record): Promise;
+}
+
+interface EnvironmentLease {
+ release(): void;
+}
+
+export type DroidSdkLoader = () => Promise;
+
+function isMissingModuleError(error: unknown): boolean {
+ return (
+ typeof error === "object" &&
+ error !== null &&
+ "code" in error &&
+ (error.code === "ERR_MODULE_NOT_FOUND" || error.code === "MODULE_NOT_FOUND")
+ );
+}
+
+async function loadDroidSdk(): Promise {
+ try {
+ const moduleName: string = "@factory/droid-sdk/node";
+ const sdk = (await import(moduleName)) as DroidSdkModule;
+ if (typeof sdk.createSession !== "function") {
+ throw new LifecycleError(
+ "droid_harness_incompatible",
+ "The installed Factory Droid SDK does not expose createSession",
+ );
+ }
+ return sdk;
+ } catch (error) {
+ if (error instanceof LifecycleError) throw error;
+ if (isMissingModuleError(error)) {
+ throw new LifecycleError(
+ "droid_harness_unavailable",
+ `The Factory Droid SDK is not installed. Install the supported SDK with: ${DROID_SDK_INSTALL_COMMAND}`,
+ );
+ }
+ throw new LifecycleError("droid_harness_load_failed", "The installed Factory Droid SDK could not be loaded");
+ }
+}
+
+function selectModel(config: AgentConfig): AgentModelConfig {
+ const entries = Object.entries(config.models ?? {});
+ if (entries.length === 0) {
+ throw new LifecycleError("droid_model_required", "The Droid adapter requires one configured model");
+ }
+ const selected = config.models?.default ?? (entries.length === 1 ? entries[0]?.[1] : undefined);
+ if (selected === undefined) {
+ throw new LifecycleError(
+ "droid_model_ambiguous",
+ "Configure a default model role when the Droid adapter receives multiple models",
+ );
+ }
+ if (selected.provider !== "factory") {
+ throw new LifecycleError("droid_provider_unsupported", "The Droid adapter supports Factory-managed model IDs only");
+ }
+ return selected;
+}
+
+function credentialValue(
+ input: AdapterStartInput,
+ name: string,
+ parentEnvironment: NodeJS.ProcessEnv,
+): string | undefined {
+ return input.runtimeContext.environment.env?.[name] ?? parentEnvironment[name];
+}
+
+function replaceEnvironment(values: NodeJS.ProcessEnv): void {
+ for (const name of Object.keys(process.env)) {
+ delete process.env[name];
+ }
+ for (const [name, value] of Object.entries(values)) {
+ if (value !== undefined) process.env[name] = value;
+ }
+}
+
+function leaseEnvironment(
+ configured: Record,
+ credentialName: string,
+ credential: string,
+ parentEnvironment: NodeJS.ProcessEnv,
+): EnvironmentLease {
+ const original = { ...process.env };
+ const values = Object.create(null) as NodeJS.ProcessEnv;
+ for (const name of INHERITED_ENVIRONMENT_NAMES) {
+ const value = parentEnvironment[name];
+ if (value !== undefined) values[name] = value;
+ }
+ Object.assign(values, configured);
+ values[credentialName] = credential;
+ replaceEnvironment(values);
+ return { release: () => replaceEnvironment(original) };
+}
+
+async function resolveWorkspace(input: AdapterStartInput): Promise {
+ try {
+ const workspace = await realpath(resolve(input.runtimeContext.environment.workspace ?? input.baseDir));
+ if (!(await stat(workspace)).isDirectory()) throw new Error("not a directory");
+ return workspace;
+ } catch {
+ throw new LifecycleError("droid_workspace_invalid", "The NeMo Fabric runtime workspace must be a directory");
+ }
+}
+
+function rejectMcpExtensions(name: string, server: AgentMcpServerConfig): void {
+ if (server.extensions !== undefined && Object.keys(server.extensions).length > 0) {
+ throw new LifecycleError("droid_mcp_extensions_unsupported", "Droid does not support MCP extensions", {
+ metadata: { server: name },
+ });
+ }
+ if (server.authentication !== undefined && server.authentication !== null) {
+ throw new LifecycleError(
+ "droid_mcp_authentication_unsupported",
+ "Droid MCP authentication is not supported by this adapter",
+ { metadata: { server: name } },
+ );
+ }
+ if (server.allowed_tools !== undefined && server.allowed_tools !== null) {
+ throw new LifecycleError(
+ "droid_mcp_allowlist_unsupported",
+ "Droid MCP allowed_tools filtering is not supported by this adapter",
+ { metadata: { server: name } },
+ );
+ }
+ if (server.blocked_tools !== undefined && server.blocked_tools.length > 0) {
+ throw new LifecycleError(
+ "droid_mcp_blocklist_unsupported",
+ "Droid MCP blocked_tools filtering is not supported by this adapter",
+ { metadata: { server: name } },
+ );
+ }
+}
+
+function validateRemoteUrl(name: string, value: string): void {
+ let parsed: URL;
+ try {
+ parsed = new URL(value);
+ } catch {
+ throw new LifecycleError("droid_mcp_url_invalid", "Droid network MCP servers require an absolute URL", {
+ metadata: { server: name },
+ });
+ }
+ const loopback = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1" || parsed.hostname === "[::1]";
+ if (parsed.protocol !== "https:" && !(parsed.protocol === "http:" && loopback)) {
+ throw new LifecycleError(
+ "droid_mcp_url_insecure",
+ "Droid network MCP servers require HTTPS except for loopback development endpoints",
+ { metadata: { server: name } },
+ );
+ }
+}
+
+function normalizedMcpServer(name: string, server: AgentMcpServerConfig): DroidMcpServerConfig {
+ rejectMcpExtensions(name, server);
+ if (server.transport === "stdio") {
+ if (server.custom_headers !== undefined && Object.keys(server.custom_headers).length > 0) {
+ throw new LifecycleError("droid_mcp_headers_unsupported", "Droid stdio MCP servers do not support custom_headers", {
+ metadata: { server: name },
+ });
+ }
+ return {
+ name,
+ command: server.url,
+ args: server.args ?? [],
+ env: server.env ?? {},
+ };
+ }
+ if (server.transport === "streamable-http" || server.transport === "sse") {
+ if ((server.args?.length ?? 0) > 0 || Object.keys(server.env ?? {}).length > 0) {
+ throw new LifecycleError(
+ "droid_mcp_process_fields_unsupported",
+ "Droid network MCP servers do not support args or env",
+ { metadata: { server: name } },
+ );
+ }
+ validateRemoteUrl(name, server.url);
+ return {
+ name,
+ type: server.transport === "sse" ? "sse" : "http",
+ url: server.url,
+ headers: Object.entries(server.custom_headers ?? {}).map(([headerName, value]) => ({
+ name: headerName,
+ value,
+ })),
+ };
+ }
+ throw new LifecycleError("droid_mcp_transport_unsupported", "Droid does not support the configured MCP transport", {
+ metadata: { server: name, transport: server.transport },
+ });
+}
+
+function normalizedMcp(input: AdapterStartInput): DroidMcpServerConfig[] {
+ if (input.config.mcp?.extensions !== undefined && Object.keys(input.config.mcp.extensions).length > 0) {
+ throw new LifecycleError("droid_mcp_extensions_unsupported", "Droid does not support top-level MCP extensions");
+ }
+ return Object.entries(input.config.mcp?.servers ?? {}).map(([name, server]) => normalizedMcpServer(name, server));
+}
+
+interface RuntimeProfile {
+ root?: string;
+ home?: string;
+ entrypoints: string[];
+}
+
+async function prepareRuntimeProfile(
+ input: AdapterStartInput,
+ hasMcpServers: boolean,
+ parentEnvironment: NodeJS.ProcessEnv,
+): Promise {
+ if (input.config.skills?.extensions !== undefined) {
+ throw new LifecycleError("droid_skill_extensions_unsupported", "Droid does not support skill extensions");
+ }
+ const configured = input.config.skills?.paths ?? [];
+ if (configured.length === 0 && !hasMcpServers) return { entrypoints: [] };
+
+ const root = await mkdtemp(join(tmpdir(), "nemo-fabric-droid-"));
+ const home = join(root, "home");
+ const factoryRoot = join(home, ".factory");
+ const skillsRoot = join(home, ".agents", "skills");
+ try {
+ const runtimeEnvironment = input.runtimeContext.environment.env ?? {};
+ const sourceHome =
+ runtimeEnvironment.FACTORY_HOME_OVERRIDE ||
+ runtimeEnvironment.HOME ||
+ runtimeEnvironment.USERPROFILE ||
+ parentEnvironment.FACTORY_HOME_OVERRIDE ||
+ parentEnvironment.HOME ||
+ parentEnvironment.USERPROFILE;
+ if (sourceHome !== undefined) {
+ const sourceSettings = join(sourceHome, ".factory", "settings.json");
+ try {
+ if ((await stat(sourceSettings)).isFile()) {
+ await mkdir(factoryRoot, { recursive: true });
+ await cp(sourceSettings, join(factoryRoot, "settings.json"), { errorOnExist: true });
+ }
+ } catch (error) {
+ if (!(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")) {
+ throw new LifecycleError(
+ "droid_settings_unavailable",
+ "Droid settings could not be copied into the isolated NeMo Fabric runtime",
+ );
+ }
+ }
+ }
+ if (configured.length > 0) await mkdir(skillsRoot, { recursive: true });
+ const names = new Set();
+ const entrypoints: string[] = [];
+ for (const configuredPath of configured) {
+ let source: string;
+ try {
+ source = await realpath(resolve(input.baseDir, configuredPath));
+ if (!(await stat(source)).isDirectory() || !(await stat(join(source, "SKILL.md"))).isFile()) {
+ throw new Error("invalid skill directory");
+ }
+ } catch {
+ throw new LifecycleError(
+ "droid_skill_invalid",
+ "Droid skill paths must be directories containing a SKILL.md file",
+ { metadata: { path: configuredPath } },
+ );
+ }
+ const name = basename(source);
+ if (name.length === 0 || names.has(name)) {
+ throw new LifecycleError("droid_skill_collision", "Configured Droid skills must use distinct directory names", {
+ metadata: { skill: name },
+ });
+ }
+ names.add(name);
+ const destination = join(skillsRoot, name);
+ await cp(source, destination, { recursive: true, errorOnExist: true });
+ entrypoints.push(await realpath(join(destination, "SKILL.md")));
+ }
+ return { root, home, entrypoints };
+ } catch (error) {
+ await rm(root, { recursive: true, force: true });
+ throw error;
+ }
+}
+
+async function validateSkills(session: DroidSdkSession, expectedEntrypoints: string[]): Promise {
+ if (expectedEntrypoints.length === 0) return;
+ const report = await session.listSkills();
+ if (!Array.isArray(report.skills)) {
+ throw new LifecycleError("droid_skill_status_unavailable", "Droid could not determine configured skill status");
+ }
+ const loaded = new Map();
+ for (const skill of report.skills) {
+ if (typeof skill.filePath !== "string") continue;
+ try {
+ loaded.set(await realpath(skill.filePath), skill);
+ } catch {
+ // A malformed or stale ambient skill cannot satisfy a configured path.
+ }
+ }
+ const missing = expectedEntrypoints.filter((entrypoint) => !loaded.has(entrypoint));
+ const disabled = expectedEntrypoints.filter((entrypoint) => loaded.get(entrypoint)?.enabled === false);
+ if (missing.length > 0 || disabled.length > 0) {
+ throw new LifecycleError("droid_skill_load_failed", "Droid did not load every configured NeMo Fabric skill", {
+ metadata: { missing, disabled },
+ });
+ }
+}
+
+function validNonNegativeNumber(value: unknown): value is number {
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
+}
+
+function validTokenCount(value: unknown): value is number {
+ return Number.isSafeInteger(value) && Number(value) >= 0;
+}
+
+function normalizeUsage(value: unknown): AgentUsage | undefined {
+ if (value === null || value === undefined) return undefined;
+ if (typeof value !== "object") {
+ throw new LifecycleError("droid_malformed_result", "Droid returned malformed usage metadata");
+ }
+ const usage = value as Partial;
+ const counts = [
+ usage.inputTokens,
+ usage.outputTokens,
+ usage.cacheCreationTokens,
+ usage.cacheReadTokens,
+ usage.thinkingTokens,
+ ];
+ if (!counts.every(validTokenCount) || (usage.factoryCredits !== undefined && !validNonNegativeNumber(usage.factoryCredits))) {
+ throw new LifecycleError("droid_malformed_result", "Droid returned malformed usage metadata");
+ }
+ const total = usage.inputTokens! + usage.outputTokens!;
+ if (!Number.isSafeInteger(total)) {
+ throw new LifecycleError("droid_malformed_result", "Droid returned malformed usage metadata");
+ }
+ return {
+ input_tokens: usage.inputTokens!,
+ output_tokens: usage.outputTokens!,
+ total_tokens: total,
+ extensions: {
+ cache_read_tokens: usage.cacheReadTokens!,
+ cache_write_tokens: usage.cacheCreationTokens!,
+ thinking_tokens: usage.thinkingTokens!,
+ ...(usage.factoryCredits === undefined ? {} : { factory_credits: usage.factoryCredits }),
+ },
+ };
+}
+
+function normalizeResult(value: unknown): DroidPromptOutcome {
+ if (typeof value !== "object" || value === null) {
+ throw new LifecycleError("droid_malformed_result", "Droid did not return a terminal result");
+ }
+ const result = value as DroidResult;
+ if (
+ result.type !== "result" ||
+ typeof result.sessionId !== "string" ||
+ result.sessionId.length === 0 ||
+ !validTokenCount(result.durationMs) ||
+ !validTokenCount(result.turnCount) ||
+ typeof result.text !== "string" ||
+ typeof result.success !== "boolean" ||
+ typeof result.interrupted !== "boolean" ||
+ !["success", "interrupted", "error_during_execution", "error_structured_output"].includes(String(result.subtype))
+ ) {
+ throw new LifecycleError("droid_malformed_result", "Droid returned a malformed terminal result");
+ }
+ const usage = normalizeUsage(result.tokenUsage);
+ const extensions: JsonObject = {
+ session_id: result.sessionId,
+ finish_reason: String(result.subtype),
+ duration_ms: Number(result.durationMs),
+ turn_count: Number(result.turnCount),
+ };
+ if (result.success && result.subtype === "success" && !result.interrupted) {
+ return { status: "completed", text: result.text, ...(usage === undefined ? {} : { usage }), extensions };
+ }
+ if (result.interrupted && result.subtype === "interrupted" && !result.success) {
+ return { status: "interrupted", text: result.text, ...(usage === undefined ? {} : { usage }), extensions };
+ }
+ if (!result.success && !result.interrupted && String(result.subtype).startsWith("error_")) {
+ const error = result.error as { message?: unknown } | null;
+ const errorMessage =
+ error !== null && typeof error === "object" && typeof error.message === "string"
+ ? error.message
+ : result.text;
+ return {
+ status: "failed",
+ text: result.text,
+ errorMessage: errorMessage.length === 0 ? "The Droid invocation failed" : errorMessage,
+ ...(usage === undefined ? {} : { usage }),
+ extensions,
+ };
+ }
+ throw new LifecycleError("droid_malformed_result", "Droid returned inconsistent terminal result fields");
+}
+
+function sdkErrorMessage(error: unknown): string {
+ if (error instanceof Error && error.message.trim().length > 0) return error.message;
+ if (typeof error === "string" && error.trim().length > 0) return error;
+ return "Droid session communication failed";
+}
+
+async function applyToolPolicy(
+ session: DroidSdkSession,
+ config: AgentConfig,
+ mcpServers: DroidMcpServerConfig[],
+): Promise {
+ const enabled = config.tools?.enabled;
+ const blocked = config.tools?.blocked ?? [];
+ if (enabled === undefined && blocked.length === 0) return;
+
+ const listed = await session.listTools();
+ const mcpPrefixes = mcpServers.map((server) => `${server.name}___`);
+ const available = listed
+ .map((tool) => tool.id)
+ .filter((id): id is string =>
+ typeof id === "string" && id.length > 0 && !mcpPrefixes.some((prefix) => id.startsWith(prefix)),
+ );
+ const malformed = listed.some((tool) => typeof tool.id !== "string" || tool.id.length === 0);
+ if (malformed || new Set(available).size !== available.length) {
+ throw new LifecycleError("droid_tool_status_invalid", "Droid returned malformed built-in tool metadata");
+ }
+ const known = new Set(available);
+ const requested = [...(enabled ?? []), ...blocked];
+ const unknown = [...new Set(requested.filter((name) => !known.has(name)))].sort();
+ if (unknown.length > 0) {
+ throw new LifecycleError("droid_tool_unknown", "One or more configured tools are not Droid built-in tool IDs", {
+ metadata: { tools: unknown },
+ });
+ }
+ const disabled = new Set(blocked);
+ if (enabled !== undefined && enabled !== null) {
+ const selected = new Set(enabled);
+ for (const name of available) {
+ if (!selected.has(name)) disabled.add(name);
+ }
+ }
+ await session.updateSettings({ disabledToolIds: [...disabled].sort() });
+}
+
+async function validateMcpTools(
+ session: DroidSdkSession,
+ configured: DroidMcpServerConfig[],
+ timeoutMs: number,
+): Promise {
+ const expected = new Set(configured.map((server) => server.name));
+ if (expected.size === 0) return;
+ const deadline = Date.now() + timeoutMs;
+ let missing = [...expected];
+ while (true) {
+ const remainingBeforeRequestMs = deadline - Date.now();
+ if (remainingBeforeRequestMs <= 0) {
+ throw new LifecycleError("droid_mcp_load_failed", "Droid did not load tools from every configured MCP server", {
+ metadata: { missing },
+ });
+ }
+ let cancelTimer: () => void = () => undefined;
+ let tools: DroidMcpToolInfo[] | undefined;
+ try {
+ tools = await Promise.race([
+ session.listMcpTools(),
+ new Promise((resolve) => {
+ const timer = setTimeout(resolve, remainingBeforeRequestMs);
+ cancelTimer = () => clearTimeout(timer);
+ }),
+ ]);
+ } catch {
+ throw new LifecycleError("droid_mcp_status_unavailable", "Droid could not determine configured MCP tool status");
+ } finally {
+ cancelTimer();
+ }
+ if (tools === undefined) {
+ throw new LifecycleError("droid_mcp_load_failed", "Droid did not load tools from every configured MCP server", {
+ metadata: { missing },
+ });
+ }
+ if (
+ !Array.isArray(tools) ||
+ tools.some(
+ (tool) =>
+ typeof tool.serverName !== "string" ||
+ tool.serverName.length === 0 ||
+ typeof tool.name !== "string" ||
+ tool.name.length === 0,
+ )
+ ) {
+ throw new LifecycleError("droid_mcp_status_unavailable", "Droid returned malformed MCP tool metadata");
+ }
+ const discovered = new Set(tools.map((tool) => tool.serverName as string));
+ missing = [...expected].filter((name) => !discovered.has(name));
+ if (missing.length === 0) return;
+ const remainingMs = deadline - Date.now();
+ if (remainingMs <= 0) {
+ throw new LifecycleError("droid_mcp_load_failed", "Droid did not load tools from every configured MCP server", {
+ metadata: { missing },
+ });
+ }
+ await new Promise((resolve) => setTimeout(resolve, Math.min(MCP_STATUS_POLL_INTERVAL_MS, remainingMs)));
+ }
+}
+
+class DroidSdkSessionHandle implements DroidSessionHandle {
+ private readonly session: DroidSdkSession;
+ private readonly runtimeRoot?: string;
+ private stopped = false;
+
+ constructor(session: DroidSdkSession, runtimeRoot?: string) {
+ this.session = session;
+ this.runtimeRoot = runtimeRoot;
+ }
+
+ async prompt(text: string): Promise {
+ if (this.stopped) {
+ throw new LifecycleError("droid_session_stopped", "The Droid session is already stopped");
+ }
+ let terminal: unknown;
+ try {
+ for await (const message of this.session.stream(text)) {
+ if (typeof message === "object" && message !== null && "type" in message && message.type === "result") {
+ terminal = message;
+ }
+ }
+ } catch (error) {
+ throw new LifecycleError("droid_session_failed", sdkErrorMessage(error), { retryable: true });
+ }
+ if (terminal === undefined) {
+ throw new LifecycleError("droid_session_failed", "Droid session ended without a terminal result", {
+ retryable: true,
+ });
+ }
+ return normalizeResult(terminal);
+ }
+
+ async stop(): Promise {
+ if (this.stopped) return;
+ this.stopped = true;
+ try {
+ await this.session.close();
+ } finally {
+ if (this.runtimeRoot !== undefined) {
+ await rm(this.runtimeRoot, { recursive: true, force: true });
+ }
+ }
+ }
+}
+
+export class DroidSdkSessionFactory implements DroidSessionFactory {
+ private readonly loader: DroidSdkLoader;
+ private readonly mcpStartupTimeoutMs: number;
+ private readonly parentEnvironment: NodeJS.ProcessEnv;
+
+ constructor(
+ loader: DroidSdkLoader = loadDroidSdk,
+ mcpStartupTimeoutMs = MCP_STARTUP_TIMEOUT_MS,
+ parentEnvironment: NodeJS.ProcessEnv = process.env,
+ ) {
+ this.loader = loader;
+ this.mcpStartupTimeoutMs = mcpStartupTimeoutMs;
+ this.parentEnvironment = parentEnvironment;
+ }
+
+ async create(input: AdapterStartInput): Promise {
+ const selected = selectModel(input.config);
+ const apiKeyEnv = selected.api_key_env;
+ if (apiKeyEnv === undefined || apiKeyEnv === null || apiKeyEnv.length === 0) {
+ throw new LifecycleError("droid_api_key_env_required", "The selected Factory model requires api_key_env");
+ }
+ const apiKey = credentialValue(input, apiKeyEnv, this.parentEnvironment);
+ if (apiKey === undefined || apiKey.length === 0) {
+ throw new LifecycleError("droid_credential_missing", `Credential environment variable ${apiKeyEnv} is not set`);
+ }
+ const workspace = await resolveWorkspace(input);
+ const mcpServers = normalizedMcp(input);
+ const instruction = input.config.instructions?.system;
+ if (instruction?.extensions !== undefined && Object.keys(instruction.extensions).length > 0) {
+ throw new LifecycleError("droid_instruction_extensions_unsupported", "Droid does not support instruction extensions");
+ }
+ if (instruction?.mode !== undefined && instruction.mode !== "replace" && instruction.mode !== "append") {
+ throw new LifecycleError(
+ "unsupported_system_instruction_mode",
+ `Droid does not support instructions.system.mode='${instruction.mode}'; supported modes: replace, append`,
+ );
+ }
+ const runtimeProfile = await prepareRuntimeProfile(input, mcpServers.length > 0, this.parentEnvironment);
+ const runtimeEnvironment = input.runtimeContext.environment.env ?? {};
+ const sessionEnvironment =
+ runtimeProfile.home === undefined
+ ? { ...runtimeEnvironment }
+ : {
+ ...runtimeEnvironment,
+ HOME: runtimeProfile.home,
+ USERPROFILE: runtimeProfile.home,
+ FACTORY_HOME_OVERRIDE: runtimeProfile.home,
+ };
+
+ let session: DroidSdkSession | undefined;
+ try {
+ const environment = leaseEnvironment(sessionEnvironment, apiKeyEnv, apiKey, this.parentEnvironment);
+ try {
+ const sdk = await this.loader();
+ session = await sdk.createSession({
+ cwd: workspace,
+ modelId: selected.model,
+ apiKey,
+ autonomyLevel: "high",
+ ...(mcpServers.length === 0 ? {} : { mcpServers }),
+ env: sessionEnvironment,
+ ...(instruction === undefined || instruction === null
+ ? {}
+ : {
+ systemPrompt:
+ instruction.mode === "append"
+ ? { type: "preset", preset: "droid", append: instruction.content }
+ : instruction.content,
+ }),
+ });
+ } finally {
+ environment.release();
+ }
+ await applyToolPolicy(session, input.config, mcpServers);
+ await validateMcpTools(session, mcpServers, this.mcpStartupTimeoutMs);
+ await validateSkills(session, runtimeProfile.entrypoints);
+ return new DroidSdkSessionHandle(session, runtimeProfile.root);
+ } catch (error) {
+ await session?.close().catch(() => undefined);
+ if (runtimeProfile.root !== undefined) {
+ await rm(runtimeProfile.root, { recursive: true, force: true });
+ }
+ if (error instanceof LifecycleError) throw error;
+ const message = sdkErrorMessage(error);
+ if (/\b(?:ENOENT|not found|spawn droid)\b/i.test(message)) {
+ throw new LifecycleError(
+ "droid_cli_unavailable",
+ "The Factory Droid CLI is not installed or is not available on PATH",
+ );
+ }
+ throw new LifecycleError("droid_start_failed", "Factory Droid SDK initialization failed");
+ }
+ }
+}
diff --git a/adapters/typescript/droid/src/runtime.ts b/adapters/typescript/droid/src/runtime.ts
new file mode 100644
index 000000000..0850714f3
--- /dev/null
+++ b/adapters/typescript/droid/src/runtime.ts
@@ -0,0 +1,119 @@
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import type { AgentRunRequest, AgentRunResult, AgentUsage, JsonObject, RuntimeContext } from "nemo-fabric-adapter-contract";
+import { LifecycleError, type AdapterRuntime, type AdapterStartInput } from "nemo-fabric-adapters-common";
+
+export interface DroidPromptOutcome {
+ status: "completed" | "interrupted" | "failed";
+ text?: string;
+ errorMessage?: string;
+ usage?: AgentUsage;
+ extensions?: JsonObject;
+}
+
+export interface DroidSessionHandle {
+ prompt(text: string): Promise;
+ stop(): Promise;
+}
+
+export interface DroidSessionFactory {
+ create(input: AdapterStartInput): Promise;
+}
+
+function failed(code: string, message: string, usage?: AgentUsage, extensions?: JsonObject): AgentRunResult {
+ return {
+ status: "failed",
+ output: null,
+ error: { code, message, retryable: false },
+ ...(usage === undefined ? {} : { usage }),
+ ...(extensions === undefined ? {} : { extensions }),
+ };
+}
+
+export class DroidAdapterRuntime implements AdapterRuntime {
+ private readonly factory: DroidSessionFactory;
+ private session?: DroidSessionHandle;
+
+ constructor(factory: DroidSessionFactory) {
+ this.factory = factory;
+ }
+
+ async start(input: AdapterStartInput): Promise {
+ if (this.session !== undefined) {
+ throw new LifecycleError("droid_already_started", "Droid adapter runtime is already started");
+ }
+ this.session = await this.factory.create(input);
+ }
+
+ private async invalidate(session: DroidSessionHandle): Promise {
+ if (this.session !== session) return;
+ this.session = undefined;
+ try {
+ await session.stop();
+ } catch {
+ // Preserve the invocation failure after invalidating the unusable session.
+ }
+ }
+
+ async invoke(request: AgentRunRequest, _context: RuntimeContext): Promise {
+ if (this.session === undefined) {
+ throw new LifecycleError("droid_not_started", "Droid adapter runtime is not started");
+ }
+ if (typeof request.input !== "string") {
+ return failed("droid_unsupported_input", "The Droid adapter accepts only plain-text input");
+ }
+
+ const session = this.session;
+ let outcome: DroidPromptOutcome;
+ try {
+ outcome = await session.prompt(request.input);
+ } catch (error) {
+ await this.invalidate(session);
+ if (error instanceof LifecycleError) throw error;
+ throw new LifecycleError("droid_session_failed", "Droid session communication failed", { retryable: true });
+ }
+
+ if (outcome.status === "interrupted") {
+ return {
+ status: "cancelled",
+ output: null,
+ error: {
+ code: "droid_interrupted",
+ message: outcome.errorMessage ?? "The Droid invocation was interrupted",
+ retryable: false,
+ },
+ ...(outcome.usage === undefined ? {} : { usage: outcome.usage }),
+ ...(outcome.extensions === undefined ? {} : { extensions: outcome.extensions }),
+ };
+ }
+ if (outcome.status === "failed") {
+ return failed(
+ "droid_invocation_failed",
+ outcome.errorMessage ?? "The Droid invocation failed",
+ outcome.usage,
+ outcome.extensions,
+ );
+ }
+ if (outcome.text === undefined || outcome.text.length === 0) {
+ return failed(
+ "droid_no_assistant_response",
+ "Droid completed without a final assistant text response",
+ outcome.usage,
+ outcome.extensions,
+ );
+ }
+ return {
+ status: "succeeded",
+ output: { response: outcome.text },
+ ...(outcome.usage === undefined ? {} : { usage: outcome.usage }),
+ ...(outcome.extensions === undefined ? {} : { extensions: outcome.extensions }),
+ };
+ }
+
+ async stop(): Promise {
+ const session = this.session;
+ this.session = undefined;
+ if (session !== undefined) await session.stop();
+ }
+}
diff --git a/adapters/typescript/droid/test/droid-sdk.test.mjs b/adapters/typescript/droid/test/droid-sdk.test.mjs
new file mode 100644
index 000000000..87faad58f
--- /dev/null
+++ b/adapters/typescript/droid/test/droid-sdk.test.mjs
@@ -0,0 +1,502 @@
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import assert from "node:assert/strict";
+import { mkdir, mkdtemp, readFile, realpath, rm, stat, writeFile } from "node:fs/promises";
+import { tmpdir } from "node:os";
+import { basename, dirname, join } from "node:path";
+import test from "node:test";
+
+import { DroidSdkSessionFactory } from "../dist/droid-sdk.js";
+
+function input(overrides = {}) {
+ return {
+ agentName: "droid-test",
+ baseDir: "/tmp",
+ config: {
+ models: {
+ default: { provider: "factory", model: "auto", api_key_env: "FACTORY_API_KEY" },
+ },
+ instructions: { system: { content: "Be concise.", mode: "append" } },
+ tools: { enabled: ["Read"], blocked: ["Execute"] },
+ ...overrides,
+ },
+ runtimeContext: {
+ artifacts: {},
+ environment: {
+ control_location: "external_control",
+ env: { FACTORY_API_KEY: "secret" },
+ environment_id: "environment-1",
+ ownership: "caller_owned",
+ provider: "local",
+ workspace: "/tmp",
+ },
+ invocation_id: "start",
+ request_id: "request-start",
+ runtime_id: "runtime-1",
+ },
+ };
+}
+
+function result(overrides = {}) {
+ return {
+ type: "result",
+ sessionId: "droid-session-1",
+ durationMs: 12,
+ tokenUsage: {
+ inputTokens: 4,
+ outputTokens: 3,
+ cacheCreationTokens: 1,
+ cacheReadTokens: 2,
+ thinkingTokens: 5,
+ factoryCredits: 0.25,
+ },
+ text: "done",
+ turnCount: 1,
+ success: true,
+ subtype: "success",
+ interrupted: false,
+ error: null,
+ ...overrides,
+ };
+}
+
+function fakeSdk(options = {}) {
+ const calls = {
+ create: [], createEnvironment: [], stream: [], close: 0, listTools: 0, updateSettings: [], listMcpTools: 0, listSkills: 0,
+ };
+ const results = [...(options.results ?? [result(), result({ text: "second", turnCount: 2 })])];
+ const session = {
+ id: "droid-session-1",
+ async *stream(prompt) {
+ calls.stream.push(prompt);
+ if (options.streamError) throw options.streamError;
+ yield { type: "assistant", text: "intermediate" };
+ yield results.shift();
+ },
+ async close() { calls.close += 1; },
+ async listTools() {
+ calls.listTools += 1;
+ if (options.toolError) throw options.toolError;
+ return options.tools ?? [{ id: "Read" }, { id: "Edit" }, { id: "Execute" }];
+ },
+ async updateSettings(value) { calls.updateSettings.push(value); },
+ async listMcpTools() {
+ calls.listMcpTools += 1;
+ if (typeof options.mcpTools === "function") return options.mcpTools(calls.listMcpTools);
+ return options.mcpTools ?? (calls.create.at(-1)?.mcpServers ?? []).map((server) => ({
+ serverName: server.name,
+ name: "test-tool",
+ }));
+ },
+ async listSkills() {
+ calls.listSkills += 1;
+ return typeof options.skillReport === "function"
+ ? options.skillReport(calls.create.at(-1))
+ : options.skillReport ?? { skills: [] };
+ },
+ };
+ return {
+ calls,
+ loader: async () => ({
+ async createSession(value) {
+ calls.create.push(value);
+ calls.createEnvironment.push({ ...process.env });
+ if (options.createError) throw options.createError;
+ return session;
+ },
+ }),
+ };
+}
+
+test("maps model, credential, append instructions, and an exact built-in tool policy", async () => {
+ const sdk = fakeSdk();
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(input());
+ const first = await handle.prompt("one");
+ const second = await handle.prompt("two");
+
+ assert.deepEqual(sdk.calls.create, [{
+ cwd: await realpath("/tmp"),
+ modelId: "auto",
+ apiKey: "secret",
+ autonomyLevel: "high",
+ env: { FACTORY_API_KEY: "secret" },
+ systemPrompt: { type: "preset", preset: "droid", append: "Be concise." },
+ }]);
+ assert.deepEqual(sdk.calls.updateSettings, [{ disabledToolIds: ["Edit", "Execute"] }]);
+ assert.deepEqual(sdk.calls.stream, ["one", "two"]);
+ assert.deepEqual(first.usage, {
+ input_tokens: 4,
+ output_tokens: 3,
+ total_tokens: 7,
+ extensions: {
+ cache_read_tokens: 2,
+ cache_write_tokens: 1,
+ thinking_tokens: 5,
+ factory_credits: 0.25,
+ },
+ });
+ assert.deepEqual(first.extensions, {
+ session_id: "droid-session-1",
+ finish_reason: "success",
+ duration_ms: 12,
+ turn_count: 1,
+ });
+ assert.equal(second.text, "second");
+ await handle.stop();
+ await handle.stop();
+ assert.equal(sdk.calls.close, 1);
+});
+
+test("isolates the Droid child environment and restores the adapter environment", async () => {
+ const ambientName = "DROID_TEST_AMBIENT_SECRET";
+ const explicitName = "DROID_TEST_EXPLICIT_VALUE";
+ const previousAmbient = process.env[ambientName];
+ process.env[ambientName] = "must-not-leak";
+ try {
+ const configured = input();
+ configured.runtimeContext.environment.env[explicitName] = "configured";
+ const sdk = fakeSdk();
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(configured);
+
+ assert.equal(sdk.calls.createEnvironment[0][ambientName], undefined);
+ assert.equal(sdk.calls.createEnvironment[0][explicitName], "configured");
+ assert.equal(sdk.calls.createEnvironment[0].FACTORY_API_KEY, "secret");
+ assert.equal(process.env[ambientName], "must-not-leak");
+ await handle.stop();
+
+ const failing = fakeSdk({ createError: new Error("failed") });
+ await assert.rejects(
+ new DroidSdkSessionFactory(failing.loader).create(configured),
+ (error) => error.code === "droid_start_failed",
+ );
+ assert.equal(failing.calls.createEnvironment[0][ambientName], undefined);
+ assert.equal(process.env[ambientName], "must-not-leak");
+ } finally {
+ if (previousAmbient === undefined) delete process.env[ambientName];
+ else process.env[ambientName] = previousAmbient;
+ }
+});
+
+test("maps replacement instructions and native stdio, HTTP, and SSE MCP configuration", async () => {
+ const sdk = fakeSdk();
+ const configured = input({
+ instructions: { system: { content: "Replace the prompt.", mode: "replace" } },
+ tools: undefined,
+ mcp: {
+ servers: {
+ local: { transport: "stdio", url: "node", args: ["server.js"], env: { MODE: "test" } },
+ remote: {
+ transport: "streamable-http",
+ url: "https://mcp.example.test/rpc",
+ custom_headers: { Authorization: "Bearer token" },
+ },
+ events: { transport: "sse", url: "http://127.0.0.1:3000/sse" },
+ ipv6: { transport: "sse", url: "http://[::1]:3001/sse" },
+ },
+ },
+ });
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(configured);
+ const { env, ...created } = sdk.calls.create[0];
+ assert.deepEqual(created, {
+ cwd: await realpath("/tmp"),
+ modelId: "auto",
+ apiKey: "secret",
+ autonomyLevel: "high",
+ mcpServers: [
+ { name: "local", command: "node", args: ["server.js"], env: { MODE: "test" } },
+ {
+ name: "remote",
+ type: "http",
+ url: "https://mcp.example.test/rpc",
+ headers: [{ name: "Authorization", value: "Bearer token" }],
+ },
+ { name: "events", type: "sse", url: "http://127.0.0.1:3000/sse", headers: [] },
+ { name: "ipv6", type: "sse", url: "http://[::1]:3001/sse", headers: [] },
+ ],
+ systemPrompt: "Replace the prompt.",
+ });
+ assert.equal(env.HOME, env.USERPROFILE);
+ assert.equal(env.HOME, env.FACTORY_HOME_OVERRIDE);
+ assert.equal(env.FACTORY_API_KEY, "secret");
+ await assert.rejects(readFile(join(env.HOME, ".factory", "mcp.json"), "utf8"), { code: "ENOENT" });
+ assert.equal(sdk.calls.listMcpTools, 1);
+ await handle.stop();
+});
+
+test("preserves Factory settings without copying ambient MCP configuration", async (t) => {
+ const sourceHome = await mkdtemp(join(tmpdir(), "fabric-droid-factory-home-"));
+ t.after(() => rm(sourceHome, { recursive: true, force: true }));
+ const sourceFactory = join(sourceHome, ".factory");
+ await mkdir(sourceFactory, { recursive: true });
+ const settings = {
+ customModels: [{
+ model: "nvidia/nemotron-3-super-120b-a12b",
+ displayName: "NVIDIA Nemotron 3 Super",
+ baseUrl: "https://integrate.api.nvidia.com/v1",
+ apiKey: "${NVIDIA_API_KEY}",
+ provider: "generic-chat-completion-api",
+ maxOutputTokens: 4096,
+ }],
+ };
+ await writeFile(join(sourceFactory, "settings.json"), `${JSON.stringify(settings)}\n`);
+ await writeFile(join(sourceFactory, "mcp.json"), '{"mcpServers":{"ambient":{"type":"stdio"}}}\n');
+ const sdk = fakeSdk();
+
+ const configured = input({
+ tools: undefined,
+ mcp: { servers: { configured: { transport: "stdio", url: "node" } } },
+ });
+ configured.runtimeContext.environment.env.FACTORY_HOME_OVERRIDE = sourceHome;
+ const handle = await new DroidSdkSessionFactory(
+ sdk.loader,
+ 10_000,
+ { FACTORY_HOME_OVERRIDE: join(sourceHome, "missing") },
+ ).create(configured);
+ const runtimeFactory = join(sdk.calls.create[0].env.HOME, ".factory");
+ assert.equal(sdk.calls.create[0].env.FACTORY_API_KEY, "secret");
+ assert.deepEqual(JSON.parse(await readFile(join(runtimeFactory, "settings.json"), "utf8")), settings);
+ assert.deepEqual(sdk.calls.create[0].mcpServers, [
+ { name: "configured", command: "node", args: [], env: {} },
+ ]);
+ await assert.rejects(readFile(join(runtimeFactory, "mcp.json"), "utf8"), { code: "ENOENT" });
+
+ await handle.stop();
+});
+
+test("waits for configured MCP servers to expose tools", async () => {
+ const sdk = fakeSdk({
+ mcpTools(call) {
+ return call === 1 ? [] : [{ serverName: "test", name: "echo" }];
+ },
+ });
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(
+ input({ tools: undefined, mcp: { servers: { test: { transport: "stdio", url: "node" } } } }),
+ );
+
+ assert.equal(sdk.calls.listMcpTools, 2);
+ await handle.stop();
+});
+
+test("keeps configured MCP tools outside the built-in tool policy", async () => {
+ const sdk = fakeSdk({
+ tools: [{ id: "Read" }, { id: "Edit" }, { id: "test___echo" }],
+ });
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(
+ input({
+ tools: { enabled: ["Read"] },
+ mcp: { servers: { test: { transport: "stdio", url: "node" } } },
+ }),
+ );
+
+ assert.deepEqual(sdk.calls.updateSettings, [{ disabledToolIds: ["Edit"] }]);
+ await handle.stop();
+});
+
+test("rejects an MCP server that does not expose a tool", async () => {
+ const sdk = fakeSdk({
+ mcpTools: [],
+ });
+
+ await assert.rejects(
+ new DroidSdkSessionFactory(sdk.loader, 1).create(
+ input({ tools: undefined, mcp: { servers: { test: { transport: "stdio", url: "node" } } } }),
+ ),
+ (error) =>
+ error.code === "droid_mcp_load_failed" &&
+ error.metadata?.missing?.includes("test"),
+ );
+ assert.equal(sdk.calls.close, 1);
+});
+
+test("times out when Droid does not return MCP tool status", async () => {
+ const sdk = fakeSdk({
+ mcpTools: () => new Promise(() => undefined),
+ });
+
+ await assert.rejects(
+ new DroidSdkSessionFactory(sdk.loader, 1).create(
+ input({ tools: undefined, mcp: { servers: { test: { transport: "stdio", url: "node" } } } }),
+ ),
+ (error) => error.code === "droid_mcp_load_failed",
+ );
+ assert.equal(sdk.calls.close, 1);
+});
+
+test("stages configured skills in an isolated Droid home and verifies discovery", async (t) => {
+ const source = await mkdtemp(join(tmpdir(), "fabric-droid-skill-source-"));
+ t.after(() => rm(source, { recursive: true, force: true }));
+ await writeFile(join(source, "SKILL.md"), "---\nname: review-code\ndescription: Review code.\n---\n");
+ const sdk = fakeSdk({
+ skillReport: (created) => ({
+ skills: [{
+ name: "review-code",
+ filePath: join(created.env.HOME, ".agents", "skills", basename(source), "SKILL.md"),
+ enabled: true,
+ }],
+ }),
+ });
+
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(input({
+ tools: undefined,
+ skills: { paths: [source] },
+ }));
+ const created = sdk.calls.create[0];
+ assert.equal(created.env.HOME, created.env.USERPROFILE);
+ assert.equal(created.env.HOME, created.env.FACTORY_HOME_OVERRIDE);
+ const stagedEntrypoint = join(created.env.HOME, ".agents", "skills", basename(source), "SKILL.md");
+ assert.equal((await stat(stagedEntrypoint)).isFile(), true);
+ assert.equal(sdk.calls.listSkills, 1);
+
+ await handle.stop();
+ await assert.rejects(stat(dirname(created.env.HOME)), { code: "ENOENT" });
+});
+
+test("rejects invalid, colliding, disabled, and extended skill configuration", async (t) => {
+ const root = await mkdtemp(join(tmpdir(), "fabric-droid-skills-"));
+ t.after(() => rm(root, { recursive: true, force: true }));
+ const first = join(root, "first", "same");
+ const second = join(root, "second", "same");
+ await mkdir(first, { recursive: true });
+ await mkdir(second, { recursive: true });
+ await writeFile(join(first, "SKILL.md"), "---\nname: first\ndescription: First.\n---\n");
+ await writeFile(join(second, "SKILL.md"), "---\nname: second\ndescription: Second.\n---\n");
+
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(input({ skills: { paths: [join(root, "missing")] } })),
+ (error) => error.code === "droid_skill_invalid",
+ );
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(input({ skills: { paths: [first, second] } })),
+ (error) => error.code === "droid_skill_collision",
+ );
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(input({ skills: { extensions: {} } })),
+ (error) => error.code === "droid_skill_extensions_unsupported",
+ );
+
+ const disabled = fakeSdk({
+ skillReport: (created) => ({
+ skills: [{
+ name: "first",
+ filePath: join(created.env.HOME, ".agents", "skills", "same", "SKILL.md"),
+ enabled: false,
+ }],
+ }),
+ });
+ await assert.rejects(
+ new DroidSdkSessionFactory(disabled.loader).create(input({ tools: undefined, skills: { paths: [first] } })),
+ (error) => error.code === "droid_skill_load_failed",
+ );
+ assert.equal(disabled.calls.close, 1);
+});
+
+test("normalizes interrupted and failed terminal results", async () => {
+ const sdk = fakeSdk({ results: [
+ result({ success: false, subtype: "interrupted", interrupted: true, text: "stopped" }),
+ result({
+ success: false,
+ subtype: "error_during_execution",
+ interrupted: false,
+ text: "",
+ error: { message: "provider failed" },
+ }),
+ ] });
+ const handle = await new DroidSdkSessionFactory(sdk.loader).create(input({ tools: undefined }));
+ assert.equal((await handle.prompt("one")).status, "interrupted");
+ assert.deepEqual(await handle.prompt("two"), {
+ status: "failed",
+ text: "",
+ errorMessage: "provider failed",
+ usage: {
+ input_tokens: 4,
+ output_tokens: 3,
+ total_tokens: 7,
+ extensions: {
+ cache_read_tokens: 2,
+ cache_write_tokens: 1,
+ thinking_tokens: 5,
+ factory_credits: 0.25,
+ },
+ },
+ extensions: {
+ session_id: "droid-session-1",
+ finish_reason: "error_during_execution",
+ duration_ms: 12,
+ turn_count: 1,
+ },
+ });
+ await handle.stop();
+});
+
+test("rejects unknown tools and cleans up after partial startup", async () => {
+ const sdk = fakeSdk();
+ await assert.rejects(
+ new DroidSdkSessionFactory(sdk.loader).create(input({ tools: { enabled: ["Invented"] } })),
+ (error) => error.code === "droid_tool_unknown",
+ );
+ assert.equal(sdk.calls.close, 1);
+
+ const failed = fakeSdk({ toolError: new Error("transport closed") });
+ await assert.rejects(
+ new DroidSdkSessionFactory(failed.loader).create(input()),
+ (error) => error.code === "droid_start_failed",
+ );
+ assert.equal(failed.calls.close, 1);
+});
+
+test("rejects unsupported or incompatible normalized MCP fields", async () => {
+ const cases = [
+ [{ transport: "stdio", url: "node", custom_headers: { X: "value" } }, "droid_mcp_headers_unsupported"],
+ [{ transport: "streamable-http", url: "https://example.test", args: ["no"] }, "droid_mcp_process_fields_unsupported"],
+ [{ transport: "streamable-http", url: "http://example.test" }, "droid_mcp_url_insecure"],
+ [{ transport: "stdio", url: "node", allowed_tools: ["one"] }, "droid_mcp_allowlist_unsupported"],
+ [{ transport: "stdio", url: "node", blocked_tools: ["one"] }, "droid_mcp_blocklist_unsupported"],
+ [{ transport: "stdio", url: "node", authentication: { type: "none" } }, "droid_mcp_authentication_unsupported"],
+ [{ transport: "stdio", url: "node", extensions: { custom: true } }, "droid_mcp_extensions_unsupported"],
+ ];
+ for (const [server, code] of cases) {
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(input({ mcp: { servers: { test: server } } })),
+ (error) => error.code === code,
+ );
+ }
+});
+
+test("rejects invalid startup inputs and missing or malformed terminal results", async () => {
+ const missing = input();
+ missing.runtimeContext.environment.env = {};
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(missing),
+ (error) => error.code === "droid_credential_missing",
+ );
+
+ const provider = input();
+ provider.config.models.default.provider = "openai";
+ await assert.rejects(
+ new DroidSdkSessionFactory(fakeSdk().loader).create(provider),
+ (error) => error.code === "droid_provider_unsupported",
+ );
+
+ const mcp = fakeSdk({ mcpTools: [] });
+ await assert.rejects(
+ new DroidSdkSessionFactory(mcp.loader, 1).create(input({ mcp: { servers: { test: { transport: "stdio", url: "missing" } } } })),
+ (error) => error.code === "droid_mcp_load_failed",
+ );
+ assert.equal(mcp.calls.close, 1);
+
+ const missingTerminal = fakeSdk({ results: [] });
+ const missingTerminalHandle = await new DroidSdkSessionFactory(missingTerminal.loader).create(
+ input({ tools: undefined }),
+ );
+ await assert.rejects(
+ missingTerminalHandle.prompt("one"),
+ (error) => error.code === "droid_session_failed" && error.retryable,
+ );
+ await missingTerminalHandle.stop();
+
+ const malformed = fakeSdk({ results: [{ type: "result", text: "not terminal" }] });
+ const handle = await new DroidSdkSessionFactory(malformed.loader).create(input({ tools: undefined }));
+ await assert.rejects(handle.prompt("one"), (error) => error.code === "droid_malformed_result");
+ await handle.stop();
+});
diff --git a/adapters/typescript/droid/test/process.test.mjs b/adapters/typescript/droid/test/process.test.mjs
new file mode 100644
index 000000000..2d226717e
--- /dev/null
+++ b/adapters/typescript/droid/test/process.test.mjs
@@ -0,0 +1,62 @@
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import assert from "node:assert/strict";
+import { mkdtemp, rm } from "node:fs/promises";
+import { tmpdir } from "node:os";
+import { join } from "node:path";
+import { spawn } from "node:child_process";
+import test from "node:test";
+import { fileURLToPath } from "node:url";
+
+async function exchange(workspace, requests) {
+ const childEnv = { ...process.env };
+ delete childEnv.NODE_TEST_CONTEXT;
+ const child = spawn(process.execPath, [fileURLToPath(new URL("../dist/cli.js", import.meta.url))], {
+ cwd: workspace,
+ env: childEnv,
+ stdio: ["pipe", "pipe", "pipe"],
+ });
+ let stdout = "";
+ let stderr = "";
+ child.stdout.setEncoding("utf8").on("data", (chunk) => { stdout += chunk; });
+ child.stderr.setEncoding("utf8").on("data", (chunk) => { stderr += chunk; });
+ child.stdin.end(`${requests.map((request) => JSON.stringify(request)).join("\n")}\n`);
+ const exitCode = await new Promise((resolve, reject) => {
+ child.once("error", reject);
+ child.once("close", resolve);
+ });
+ return {
+ exitCode,
+ stderr,
+ responses: stdout.trim().split("\n").filter(Boolean).map((line) => JSON.parse(line)),
+ };
+}
+
+test("returns a stable lifecycle error for an invalid Droid start", async () => {
+ const workspace = await mkdtemp(join(tmpdir(), "fabric-droid-invalid-"));
+ try {
+ const context = {
+ artifacts: {},
+ environment: {
+ control_location: "external_control",
+ environment_id: "environment-1",
+ ownership: "caller_owned",
+ provider: "local",
+ workspace,
+ },
+ invocation_id: "start",
+ request_id: "request-start",
+ runtime_id: "runtime-1",
+ };
+ const { exitCode, responses, stderr } = await exchange(workspace, [{
+ operation: "start",
+ payload: { agent_name: "droid-process-test", base_dir: workspace, config: {}, runtime_context: context },
+ }]);
+ assert.equal(exitCode, 0, stderr);
+ assert.equal(responses[0].outcome.status, "failed");
+ assert.equal(responses[0].outcome.error.code, "droid_model_required");
+ } finally {
+ await rm(workspace, { recursive: true, force: true });
+ }
+});
diff --git a/adapters/typescript/droid/test/runtime.test.mjs b/adapters/typescript/droid/test/runtime.test.mjs
new file mode 100644
index 000000000..76a2c9ed3
--- /dev/null
+++ b/adapters/typescript/droid/test/runtime.test.mjs
@@ -0,0 +1,142 @@
+// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+import assert from "node:assert/strict";
+import test from "node:test";
+
+import { LifecycleError } from "nemo-fabric-adapters-common";
+
+import { DroidAdapterRuntime } from "../dist/runtime.js";
+
+function startInput(runtimeId = "runtime-1") {
+ return {
+ agentName: "droid-test",
+ baseDir: "/tmp",
+ config: {},
+ runtimeContext: {
+ artifacts: {},
+ environment: {
+ control_location: "external_control",
+ environment_id: "environment-1",
+ ownership: "caller_owned",
+ provider: "local",
+ workspace: "/tmp",
+ },
+ invocation_id: "start",
+ request_id: "request-start",
+ runtime_id: runtimeId,
+ },
+ };
+}
+
+const context = startInput().runtimeContext;
+
+test("enforces lifecycle ordering and idempotent stop", async () => {
+ let stops = 0;
+ const runtime = new DroidAdapterRuntime({
+ async create() {
+ return { async prompt() { return { status: "completed", text: "ok" }; }, async stop() { stops += 1; } };
+ },
+ });
+ await assert.rejects(runtime.invoke({ input: "early" }, context), (error) => error.code === "droid_not_started");
+ await runtime.stop();
+ await runtime.start(startInput());
+ await assert.rejects(runtime.start(startInput()), (error) => error.code === "droid_already_started");
+ await runtime.stop();
+ await runtime.stop();
+ assert.equal(stops, 1);
+});
+
+test("reuses one session for ordered invocations", async () => {
+ const prompts = [];
+ const runtime = new DroidAdapterRuntime({
+ async create() {
+ return {
+ async prompt(text) {
+ prompts.push(text);
+ return {
+ status: "completed",
+ text: prompts.length === 1 ? "remembered alpha" : `context:${prompts[0]}`,
+ extensions: { session_id: "session-1", finish_reason: "success", duration_ms: 1, turn_count: prompts.length },
+ };
+ },
+ async stop() {},
+ };
+ },
+ });
+ await runtime.start(startInput());
+ await runtime.invoke({ input: "alpha" }, context);
+ const second = await runtime.invoke({ input: "what did I say?" }, context);
+ assert.deepEqual(second.output, { response: "context:alpha" });
+ assert.deepEqual(prompts, ["alpha", "what did I say?"]);
+});
+
+test("isolates independent runtimes", async () => {
+ const sessions = [];
+ const factory = {
+ async create(input) {
+ const prompts = [];
+ sessions.push({ runtimeId: input.runtimeContext.runtime_id, prompts });
+ return {
+ async prompt(text) {
+ prompts.push(text);
+ return { status: "completed", text: `${input.runtimeContext.runtime_id}:${prompts.join(",")}` };
+ },
+ async stop() {},
+ };
+ },
+ };
+ const first = new DroidAdapterRuntime(factory);
+ const second = new DroidAdapterRuntime(factory);
+ await first.start(startInput("runtime-one"));
+ await second.start(startInput("runtime-two"));
+ await first.invoke({ input: "one" }, { ...context, runtime_id: "runtime-one" });
+ const result = await second.invoke({ input: "two" }, { ...context, runtime_id: "runtime-two" });
+ assert.deepEqual(result.output, { response: "runtime-two:two" });
+ assert.deepEqual(sessions, [
+ { runtimeId: "runtime-one", prompts: ["one"] },
+ { runtimeId: "runtime-two", prompts: ["two"] },
+ ]);
+});
+
+test("normalizes failures, interruption, malformed output, and non-text input", async () => {
+ const outcomes = [
+ { status: "failed", errorMessage: "provider failed" },
+ { status: "interrupted" },
+ { status: "completed" },
+ ];
+ let calls = 0;
+ const runtime = new DroidAdapterRuntime({
+ async create() {
+ return {
+ async prompt() { calls += 1; return outcomes.shift(); },
+ async stop() {},
+ };
+ },
+ });
+ await runtime.start(startInput());
+ assert.equal((await runtime.invoke({ input: { task: "no" } }, context)).error.code, "droid_unsupported_input");
+ assert.equal((await runtime.invoke({ input: "one" }, context)).error.code, "droid_invocation_failed");
+ assert.equal((await runtime.invoke({ input: "two" }, context)).status, "cancelled");
+ assert.equal((await runtime.invoke({ input: "three" }, context)).error.code, "droid_no_assistant_response");
+ assert.equal(calls, 3);
+});
+
+test("invalidates a runtime after an SDK or process failure", async () => {
+ let stops = 0;
+ const runtime = new DroidAdapterRuntime({
+ async create() {
+ return {
+ async prompt() { throw new Error("connection lost"); },
+ async stop() { stops += 1; },
+ };
+ },
+ });
+ await runtime.start(startInput());
+ await assert.rejects(
+ runtime.invoke({ input: "fail" }, context),
+ (error) => error instanceof LifecycleError && error.code === "droid_session_failed" && error.retryable,
+ );
+ await assert.rejects(runtime.invoke({ input: "again" }, context), (error) => error.code === "droid_not_started");
+ assert.equal(stops, 1);
+});
diff --git a/adapters/typescript/droid/tsconfig.build.json b/adapters/typescript/droid/tsconfig.build.json
new file mode 100644
index 000000000..b0a2ed237
--- /dev/null
+++ b/adapters/typescript/droid/tsconfig.build.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "declaration": true,
+ "esModuleInterop": true,
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "noUncheckedIndexedAccess": true,
+ "outDir": "dist",
+ "rootDir": "src",
+ "skipLibCheck": true,
+ "strict": true,
+ "target": "ES2022"
+ },
+ "include": ["src/**/*.ts"]
+}
diff --git a/adapters/typescript/package-lock.json b/adapters/typescript/package-lock.json
index 19a10466d..0ac875e01 100644
--- a/adapters/typescript/package-lock.json
+++ b/adapters/typescript/package-lock.json
@@ -11,6 +11,7 @@
"workspaces": [
"common",
"cline",
+ "droid",
"pi",
"opencode",
"qwen",
@@ -101,6 +102,65 @@
"node": ">=20.18.3"
}
},
+ "droid": {
+ "name": "nemo-fabric-adapters-droid",
+ "version": "0.5.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "nemo-fabric-adapter-contract": "0.5.0",
+ "nemo-fabric-adapters-common": "0.5.0"
+ },
+ "bin": {
+ "nemo-fabric-adapters-droid": "dist/cli.js"
+ },
+ "devDependencies": {
+ "@factory/droid-sdk": "0.9.1",
+ "@types/node": "24.12.4",
+ "typescript": "5.9.3"
+ },
+ "engines": {
+ "node": ">=22.19.0"
+ },
+ "peerDependencies": {
+ "@factory/droid-sdk": "^0.9.1"
+ },
+ "peerDependenciesMeta": {
+ "@factory/droid-sdk": {
+ "optional": true
+ }
+ }
+ },
+ "droid/node_modules/@types/node": {
+ "version": "24.12.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz",
+ "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "droid/node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "droid/node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
+ "license": "MIT"
+ },
"kilo": {
"name": "nemo-fabric-adapters-kilo",
"version": "0.5.0",
@@ -1698,6 +1758,36 @@
"node": ">=18"
}
},
+ "node_modules/@factory/droid-sdk": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@factory/droid-sdk/-/droid-sdk-0.9.1.tgz",
+ "integrity": "sha512-KhMAQQejZWt4jTobuE1QK0UQIc+JtRvm4NcocyaFayE7RQIdsQM0d5ClfcrOvxjND9BYLq1f45KjySjREzJUwQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.29.0",
+ "@opentelemetry/api": "^1.9.0",
+ "eventemitter3": "^5.0.1",
+ "fast-deep-equal": "^3.1.3",
+ "isows": "^1.0.7",
+ "uuid": "^9.0.0",
+ "ws": "^8.21.0",
+ "zod": "^3.24.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@factory/droid-sdk/node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/@ff-labs/fff-bin-android-arm64": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/@ff-labs/fff-bin-android-arm64/-/fff-bin-android-arm64-0.10.5.tgz",
@@ -5392,6 +5482,13 @@
"node": ">= 0.6"
}
},
+ "node_modules/eventemitter3": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/eventsource": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
@@ -6302,6 +6399,22 @@
"ws": "*"
}
},
+ "node_modules/isows": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz",
+ "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/wevm"
+ }
+ ],
+ "license": "MIT",
+ "peerDependencies": {
+ "ws": "*"
+ }
+ },
"node_modules/jiti": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
@@ -6838,6 +6951,10 @@
"resolved": "common",
"link": true
},
+ "node_modules/nemo-fabric-adapters-droid": {
+ "resolved": "droid",
+ "link": true
+ },
"node_modules/nemo-fabric-adapters-kilo": {
"resolved": "kilo",
"link": true
@@ -8290,6 +8407,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/validate-npm-package-name": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz",
diff --git a/adapters/typescript/package.json b/adapters/typescript/package.json
index dcffda6bb..5dcf515b2 100644
--- a/adapters/typescript/package.json
+++ b/adapters/typescript/package.json
@@ -7,19 +7,20 @@
"workspaces": [
"common",
"cline",
+ "droid",
"pi",
"opencode",
"qwen",
"kilo"
],
"scripts": {
- "build": "npm run build --workspace nemo-fabric-adapters-common && npm run build --workspace nemo-fabric-adapters-cline && npm run build --workspace nemo-fabric-adapters-pi && npm run build --workspace nemo-fabric-adapters-opencode && npm run build --workspace nemo-fabric-adapters-qwen && npm run build --workspace nemo-fabric-adapters-kilo",
+ "build": "npm run build --workspace nemo-fabric-adapters-common && npm run build --workspace nemo-fabric-adapters-cline && npm run build --workspace nemo-fabric-adapters-droid && npm run build --workspace nemo-fabric-adapters-pi && npm run build --workspace nemo-fabric-adapters-opencode && npm run build --workspace nemo-fabric-adapters-qwen && npm run build --workspace nemo-fabric-adapters-kilo",
"pack:check": "npm run pack:contents && npm run pack:install-check",
- "pack:contents": "npm run pack:check --workspace nemo-fabric-adapters-common && npm run pack:check --workspace nemo-fabric-adapters-cline && npm run pack:check --workspace nemo-fabric-adapters-pi && npm run pack:check --workspace nemo-fabric-adapters-opencode && npm run pack:check --workspace nemo-fabric-adapters-qwen && npm run pack:check --workspace nemo-fabric-adapters-kilo",
+ "pack:contents": "npm run pack:check --workspace nemo-fabric-adapters-common && npm run pack:check --workspace nemo-fabric-adapters-cline && npm run pack:check --workspace nemo-fabric-adapters-droid && npm run pack:check --workspace nemo-fabric-adapters-pi && npm run pack:check --workspace nemo-fabric-adapters-opencode && npm run pack:check --workspace nemo-fabric-adapters-qwen && npm run pack:check --workspace nemo-fabric-adapters-kilo",
"pack:install-check": "node scripts/check-install.mjs",
"test": "npm run test:units && npm run test:dependencies && npm run pack:check",
"test:dependencies": "npm ls --all && node scripts/audit-dependencies.mjs",
- "test:units": "node --test scripts/audit-dependencies.test.mjs && npm test --workspace nemo-fabric-adapters-common && npm test --workspace nemo-fabric-adapters-cline && npm test --workspace nemo-fabric-adapters-pi && npm test --workspace nemo-fabric-adapters-opencode && npm test --workspace nemo-fabric-adapters-qwen && npm test --workspace nemo-fabric-adapters-kilo"
+ "test:units": "node --test scripts/audit-dependencies.test.mjs && npm test --workspace nemo-fabric-adapters-common && npm test --workspace nemo-fabric-adapters-cline && npm test --workspace nemo-fabric-adapters-droid && npm test --workspace nemo-fabric-adapters-pi && npm test --workspace nemo-fabric-adapters-opencode && npm test --workspace nemo-fabric-adapters-qwen && npm test --workspace nemo-fabric-adapters-kilo"
},
"devDependencies": {
"nemo-fabric-adapter-contract": "file:../../adapter-contract/typescript"
diff --git a/adapters/typescript/scripts/check-install.mjs b/adapters/typescript/scripts/check-install.mjs
index 1bfc0b447..35c3e15a7 100644
--- a/adapters/typescript/scripts/check-install.mjs
+++ b/adapters/typescript/scripts/check-install.mjs
@@ -23,6 +23,7 @@ const packageRoots = [
join(repositoryRoot, "adapter-contract/typescript"),
join(repositoryRoot, "adapters/typescript/common"),
join(repositoryRoot, "adapters/typescript/cline"),
+ join(repositoryRoot, "adapters/typescript/droid"),
join(repositoryRoot, "adapters/typescript/pi"),
join(repositoryRoot, "adapters/typescript/opencode"),
join(repositoryRoot, "adapters/typescript/qwen"),
@@ -82,6 +83,20 @@ function runClineCli(clineRoot, consumerRoot, requests) {
return invocation.stdout.trim().split("\n").filter(Boolean).map((line) => JSON.parse(line));
}
+function runDroidCli(droidRoot, consumerRoot, requests) {
+ const invocation = spawnSync(process.execPath, [join(droidRoot, "dist/cli.js")], {
+ cwd: consumerRoot,
+ encoding: "utf8",
+ input: `${requests.map((request) => JSON.stringify(request)).join("\n")}\n`,
+ timeout: 60_000,
+ });
+ if (invocation.error) throw invocation.error;
+ if (invocation.status !== 0) {
+ throw new Error(`Installed Droid CLI failed (status ${invocation.status}): ${invocation.stderr}`);
+ }
+ return invocation.stdout.trim().split("\n").filter(Boolean).map((line) => JSON.parse(line));
+}
+
function runOpenCodeCli(opencodeRoot, consumerRoot, requests) {
const invocation = spawnSync(process.env.BUN_EXECUTABLE ?? "bun", [join(opencodeRoot, "dist/cli.js")], {
cwd: consumerRoot,
@@ -170,6 +185,26 @@ function clineStartRequest(consumerRoot) {
};
}
+function droidStartRequest(consumerRoot) {
+ const request = startRequest(consumerRoot);
+ return {
+ ...request,
+ payload: {
+ ...request.payload,
+ agent_name: "droid-install-check",
+ config: {
+ models: {
+ default: {
+ api_key_env: "TEST_API_KEY",
+ model: "auto",
+ provider: "factory",
+ },
+ },
+ },
+ },
+ };
+}
+
function openCodeStartRequest(consumerRoot) {
return {
operation: "start",
@@ -296,6 +331,41 @@ try {
throw new Error(`Consumer-managed Cline harness failed to start: ${JSON.stringify(clineResponses)}`);
}
+ const droidRoot = join(consumerRoot, "node_modules/nemo-fabric-adapters-droid");
+ const droidDescriptor = JSON.parse(await readFile(join(droidRoot, "droid.fabric-adapter.json"), "utf8"));
+ if (droidDescriptor.runner?.command !== "node" || droidDescriptor.runner?.script !== "dist/cli.js") {
+ throw new Error("Installed Droid descriptor does not reference its packaged CLI");
+ }
+ const [invalidDroidResponse] = runDroidCli(droidRoot, consumerRoot, [{}]);
+ if (invalidDroidResponse.outcome?.error?.code !== "lifecycle_invalid_operation") {
+ throw new Error(`Installed Droid CLI returned an unexpected response: ${JSON.stringify(invalidDroidResponse)}`);
+ }
+ if (!(await pathExists(join(consumerRoot, "node_modules/@factory/droid-sdk/package.json")))) {
+ const [missingDroidHarnessResponse] = runDroidCli(droidRoot, consumerRoot, [droidStartRequest(consumerRoot)]);
+ if (missingDroidHarnessResponse.outcome?.error?.code !== "droid_harness_unavailable") {
+ throw new Error(
+ `Adapter-only install did not report the missing Droid SDK: ${JSON.stringify(missingDroidHarnessResponse)}`,
+ );
+ }
+ npm(
+ [
+ "install",
+ "--ignore-scripts",
+ "--no-audit",
+ "--no-fund",
+ "--package-lock=false",
+ "@factory/droid-sdk@0.9.1",
+ ],
+ consumerRoot,
+ );
+ }
+ const [missingDroidCliResponse] = runDroidCli(droidRoot, consumerRoot, [droidStartRequest(consumerRoot)]);
+ if (missingDroidCliResponse.outcome?.error?.code !== "droid_cli_unavailable") {
+ throw new Error(
+ `Consumer-managed Droid SDK did not report the missing CLI: ${JSON.stringify(missingDroidCliResponse)}`,
+ );
+ }
+
const piRoot = join(consumerRoot, "node_modules/nemo-fabric-adapters-pi");
const descriptor = JSON.parse(await readFile(join(piRoot, "pi.fabric-adapter.json"), "utf8"));
if (descriptor.runner?.command !== "node" || descriptor.runner?.script !== "dist/cli.js") {
diff --git a/adapters/typescript/scripts/check-package.mjs b/adapters/typescript/scripts/check-package.mjs
index 3bb650878..ff4e7b5ff 100644
--- a/adapters/typescript/scripts/check-package.mjs
+++ b/adapters/typescript/scripts/check-package.mjs
@@ -40,6 +40,18 @@ const expectedByPackage = {
"dist/runtime.js",
"package.json",
],
+ "nemo-fabric-adapters-droid": [
+ "LICENSE",
+ "README.md",
+ "dist/cli.d.ts",
+ "dist/cli.js",
+ "dist/droid-sdk.d.ts",
+ "dist/droid-sdk.js",
+ "dist/runtime.d.ts",
+ "dist/runtime.js",
+ "droid.fabric-adapter.json",
+ "package.json",
+ ],
"nemo-fabric-adapters-pi": [
"LICENSE",
"README.md",
@@ -164,6 +176,21 @@ if (manifest.name === "nemo-fabric-adapters-cline") {
throw new Error("The caller-managed Cline SDK harness must not be an adapter package dependency");
}
}
+if (manifest.name === "nemo-fabric-adapters-droid") {
+ if (manifest.exports?.["./descriptor"] !== "./droid.fabric-adapter.json") {
+ throw new Error("The Droid package must export its adapter descriptor");
+ }
+ const descriptor = JSON.parse(await readFile(join(packageRoot, "droid.fabric-adapter.json"), "utf8"));
+ if (descriptor.runner?.command !== "node" || descriptor.runner?.script !== "dist/cli.js") {
+ throw new Error("The Droid descriptor must run its packaged CLI with Node.js");
+ }
+ if (manifest.dependencies?.["@factory/droid-sdk"] !== undefined ||
+ manifest.peerDependencies?.["@factory/droid-sdk"] !== "^0.9.1" ||
+ manifest.peerDependenciesMeta?.["@factory/droid-sdk"]?.optional !== true ||
+ manifest.devDependencies?.["@factory/droid-sdk"] !== "0.9.1") {
+ throw new Error("The Droid SDK must be a compatible optional peer and exact-pinned development dependency");
+ }
+}
if (manifest.name === "nemo-fabric-adapters-opencode") {
if (manifest.exports?.["./descriptor"] !== "./opencode.fabric-adapter.json") {
throw new Error("The OpenCode package must export its adapter descriptor");
diff --git a/docs/getting-started/install.mdx b/docs/getting-started/install.mdx
index 0f6183e53..35aafb517 100644
--- a/docs/getting-started/install.mdx
+++ b/docs/getting-started/install.mdx
@@ -177,6 +177,19 @@ npm install nemo-fabric-adapters-cline
The adapter does not declare or install the Cline SDK as a package dependency. Refer to the [Cline adapter guide](../integrations/harness/cline.mdx) to configure adapter discovery and supported capabilities.
+### Install Factory Droid
+
+The [Factory Droid adapter](../integrations/harness/droid.mdx) requires Node.js 22.19.0 or newer, Factory's supported TypeScript SDK, and a caller-installed Droid CLI:
+
+```bash
+pip install nemo-fabric
+npm install --global droid@0.233.0
+npm install --save-exact @factory/droid-sdk@0.9.1
+npm install nemo-fabric-adapters-droid
+```
+
+The adapter never installs the Droid CLI at runtime. Refer to the [Factory Droid adapter guide](../integrations/harness/droid.mdx) for supported configuration and discovery.
+
### Install an Adapter and Harness Without the Runtime
Use an adapter package's `harness` extra when a different environment runs NeMo
diff --git a/docs/index.yml b/docs/index.yml
index acc8a5ed7..37135895e 100644
--- a/docs/index.yml
+++ b/docs/index.yml
@@ -66,6 +66,8 @@ navigation:
path: ./integrations/harness/codex.mdx
- page: Cline
path: ./integrations/harness/cline.mdx
+ - page: Factory Droid
+ path: ./integrations/harness/droid.mdx
- page: Hermes Agent
path: ./integrations/harness/hermes.mdx
- page: LangChain Deep Agents
diff --git a/docs/integrations/harness/droid.mdx b/docs/integrations/harness/droid.mdx
new file mode 100644
index 000000000..3ebf4b0ba
--- /dev/null
+++ b/docs/integrations/harness/droid.mdx
@@ -0,0 +1,156 @@
+---
+title: "Use the Factory Droid Adapter"
+description: "Install and configure the NVIDIA NeMo Fabric harness integration for Factory Droid."
+---
+{/* SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+SPDX-License-Identifier: Apache-2.0 */}
+
+Use the NVIDIA NeMo Fabric `nvidia.fabric.droid` adapter to run Factory Droid
+through its supported TypeScript SDK while retaining conversation context for
+the lifetime of a NeMo Fabric runtime.
+
+## Install Droid, the SDK, and the Adapter
+
+The adapter requires Node.js 22.19.0 or newer. Install the supported caller-owned
+Droid CLI, SDK, and adapter:
+
+```bash
+npm install --global droid@0.233.0
+npm install --save-exact @factory/droid-sdk@0.9.1
+npm install nemo-fabric-adapters-droid
+```
+
+The adapter never installs Droid at runtime. A missing SDK produces
+`droid_harness_unavailable`, and a missing CLI produces
+`droid_cli_unavailable`.
+
+For source development in the NeMo Fabric repository, run:
+
+```bash
+just install-typescript-droid
+npm run build --prefix adapter-contract/typescript
+npm run build --prefix adapters/typescript --workspace nemo-fabric-adapters-common
+npm run build --prefix adapters/typescript --workspace nemo-fabric-adapters-droid
+```
+
+## Configure the Adapter
+
+Select the Droid adapter and point discovery at its installed descriptor:
+
+```python
+from nemo_fabric import DiscoveryConfig, FabricConfig, HarnessConfig
+from nemo_fabric import InstructionConfig, InstructionsConfig
+from nemo_fabric import MetadataConfig, ModelConfig, ToolsConfig
+
+config = FabricConfig(
+ metadata=MetadataConfig(name="droid-review"),
+ discovery=DiscoveryConfig(
+ local_paths=[
+ "./node_modules/nemo-fabric-adapters-droid/droid.fabric-adapter.json"
+ ]
+ ),
+ harness=HarnessConfig(adapter_id="nvidia.fabric.droid"),
+ models={
+ "default": ModelConfig(
+ provider="factory",
+ model="auto",
+ api_key_env="FACTORY_API_KEY",
+ )
+ },
+ instructions=InstructionsConfig(
+ system=InstructionConfig(
+ content="Review code for correctness risks.",
+ mode="append",
+ )
+ ),
+ tools=ToolsConfig(enabled=["Read", "Grep", "Glob"]),
+)
+config.add_skill_path("./skills/code-review")
+```
+
+For a source build, use
+`adapters/typescript/droid/droid.fabric-adapter.json`. Set the environment
+variable named by `api_key_env` before starting the runtime.
+
+Start one runtime and reuse it for ordered turns:
+
+```python
+from nemo_fabric import Fabric
+
+async with await Fabric().start_runtime(config) as runtime:
+ first = await runtime.invoke(input="Review the authentication changes.")
+ second = await runtime.invoke(input="Now summarize the highest-risk finding.")
+```
+
+The second invocation uses the conversation retained by the Droid session.
+
+## Understand Configuration Mapping
+
+The initial adapter selects a Factory-managed model by ID and passes the
+credential named by `api_key_env` to the SDK as the Factory API key. It does
+not map `models.base_url` or arbitrary providers because custom model endpoints
+are configured through external Droid settings, not the SDK session API.
+
+System instructions support both modes. `replace` replaces Droid's default
+system prompt. `append` preserves the native Droid prompt and appends the
+configured content.
+
+Tool policy names are Droid built-in tool IDs. The adapter lists the tools
+available to the created session, rejects unknown IDs, and translates
+`tools.enabled` into an exact allowlist by disabling every unselected tool.
+It then applies `tools.blocked`. Inspect tool IDs with:
+
+```bash
+droid exec --model MODEL_ID --list-tools --output-format json
+```
+
+Tool policy limits Droid's available tools; it is not a host sandbox. Use an
+isolated task environment when enabling tools that edit files or execute
+commands.
+
+## Configure MCP Servers
+
+Normalized MCP servers are supplied directly to the runtime-scoped Droid
+session. The adapter supports unauthenticated stdio, SSE, and
+streamable HTTP servers. Stdio servers accept `args` and `env`, but not HTTP
+headers. Network servers accept `custom_headers`, but not process arguments or
+environment variables. Remote network endpoints require HTTPS; loopback HTTP
+is allowed for development.
+
+Normalized MCP authentication, `allowed_tools`, and `blocked_tools` are not
+supported and fail during startup. Each configured server must expose at least
+one tool so the adapter can verify session-scoped discovery before invocation.
+The Droid process and its stdio MCP children inherit safe operating-system
+variables, Fabric `environment.env`, the selected model credential, and each
+server's explicit `env`; unrelated variables from the adapter host are removed.
+
+## Configure Skills
+
+The adapter supports normalized `skills.paths`. It validates each configured
+directory and its `SKILL.md`, copies the skill into a runtime-scoped temporary
+home using Droid's compatible personal `.agents/skills` layout, and verifies
+discovery through the SDK. Runtime shutdown removes the temporary files.
+Project skills already placed in Droid's documented discovery locations remain
+Droid-owned ambient configuration.
+
+When an isolated profile is required for MCP servers or skills, the adapter
+copies the user's Factory `settings.json` into it so externally configured
+custom models remain available. Fabric supplies MCP servers directly to the
+Droid session; ambient MCP configuration and Factory authentication state are
+not copied.
+
+## Understand Runtime Behavior
+
+Each NeMo Fabric runtime creates an isolated `DroidSession`. Every ordered
+invocation streams one prompt through the same session, and runtime shutdown
+closes the session and its CLI subprocess. Independent runtimes do not share
+session history.
+
+Successful results include normalized response text and token usage. Usage
+extensions preserve cache, thinking-token, and Factory-credit metadata.
+Result extensions preserve the Droid session ID, finish reason, duration, and
+turn count.
+
+The initial adapter does not support NeMo Relay telemetry, native Fabric
+streaming, Relay-backed streaming, custom model endpoints, or adapter-specific
+`harness.settings`.
diff --git a/docs/integrations/harness/overview.mdx b/docs/integrations/harness/overview.mdx
index 6cc2b67e5..362043b0c 100644
--- a/docs/integrations/harness/overview.mdx
+++ b/docs/integrations/harness/overview.mdx
@@ -18,6 +18,7 @@ NeMo Fabric includes the following harness integrations:
| Claude Code | [Use the Claude Code adapter](./claude.mdx) |
| Codex | [Use the Codex adapter](./codex.mdx) |
| Cline | [Use the Cline adapter](./cline.mdx) |
+| Factory Droid | [Use the Factory Droid adapter](./droid.mdx) |
| Hermes Agent | [Use the Hermes Agent adapter](./hermes.mdx) |
| LangChain Deep Agents | [Use the LangChain Deep Agents adapter](./deepagents.mdx) |
| Kilo Code | [Use the Kilo Code adapter](./kilo.mdx) |
diff --git a/examples/code_review_agent/README.md b/examples/code_review_agent/README.md
index 79071963c..c67c57259 100644
--- a/examples/code_review_agent/README.md
+++ b/examples/code_review_agent/README.md
@@ -256,6 +256,35 @@ input.
The initial Cline adapter does not support Relay telemetry or streaming.
+### Factory Droid (`droid`)
+
+Install Node.js 22.19 or newer and follow the
+[Factory Droid adapter installation instructions](../../adapters/typescript/droid/README.md).
+The source workspace pins `@factory/droid-sdk@0.9.1`; install the caller-owned
+`droid@0.233.0` CLI separately and set `FACTORY_API_KEY`.
+
+This variant selects Factory's `auto` model, appends the code-review
+instruction to Droid's native system prompt, restricts built-in tools to
+`Read`, `Grep`, and `Glob`, and loads the default code-review skill.
+
+Inspect its plan with:
+
+```bash
+.venv/bin/python -m examples.code_review_agent --variant droid --plan
+```
+
+Run the review with:
+
+```bash
+.venv/bin/python -m examples.code_review_agent \
+ --variant droid \
+ --input "Review calculator.py for correctness risks." \
+ --show-output
+```
+
+The initial Factory Droid adapter does not support Relay telemetry or NeMo Fabric
+streaming.
+
### Kilo Code (`kilo`)
Install Node.js 22.19 or later, install the source adapter dependencies, and
diff --git a/examples/code_review_agent/__init__.py b/examples/code_review_agent/__init__.py
index bb17350d7..4a34f4a21 100644
--- a/examples/code_review_agent/__init__.py
+++ b/examples/code_review_agent/__init__.py
@@ -9,6 +9,7 @@
claude_config,
cline_config,
codex_config,
+ droid_config,
deepagents_config,
hermes_config,
kilo_config,
@@ -32,6 +33,7 @@
"claude_config",
"cline_config",
"codex_config",
+ "droid_config",
"deepagents_config",
"hermes_config",
"kilo_config",
diff --git a/examples/code_review_agent/__main__.py b/examples/code_review_agent/__main__.py
index e420877b1..f376c189e 100644
--- a/examples/code_review_agent/__main__.py
+++ b/examples/code_review_agent/__main__.py
@@ -22,6 +22,7 @@
cline_config,
codex_config,
deepagents_config,
+ droid_config,
hermes_config,
kilo_config,
nooa_config,
@@ -40,6 +41,7 @@
"cline": cline_config,
"codex": codex_config,
"deepagents": deepagents_config,
+ "droid": droid_config,
"nooa": nooa_config,
"openclaw": openclaw_config,
"openhands": openhands_config,
@@ -160,9 +162,10 @@ async def main() -> None:
parser.error("--stream requires --relay")
if args.stream and args.plan:
parser.error("--stream cannot be combined with --plan")
- if args.variant in {"cline", "kilo", "openclaw", "openhands", "qwen"} and args.relay:
+ if args.variant in {"cline", "droid", "kilo", "openclaw", "openhands", "qwen"} and args.relay:
display_name = {
"cline": "Cline",
+ "droid": "Factory Droid",
"kilo": "Kilo Code",
"openclaw": "OpenClaw",
"openhands": "OpenHands",
diff --git a/examples/code_review_agent/config.py b/examples/code_review_agent/config.py
index 050b175c7..a6476e65a 100644
--- a/examples/code_review_agent/config.py
+++ b/examples/code_review_agent/config.py
@@ -32,6 +32,7 @@
SKILL_PATH = "./skills/code-review"
PI_DESCRIPTOR = "../../adapters/typescript/pi/pi.fabric-adapter.json"
CLINE_DESCRIPTOR = "../../adapters/typescript/cline/cline.fabric-adapter.json"
+DROID_DESCRIPTOR = "../../adapters/typescript/droid/droid.fabric-adapter.json"
QWEN_DESCRIPTOR = "../../adapters/typescript/qwen/qwen.fabric-adapter.json"
KILO_DESCRIPTOR = "../../adapters/typescript/kilo/kilo.fabric-adapter.json"
CODE_REVIEW_INSTRUCTION = (
@@ -206,6 +207,40 @@ def cline_config() -> FabricConfig:
return config
+def droid_config() -> FabricConfig:
+ """Return the complete Factory Droid SDK adapter variant."""
+
+ config = base_config().model_copy(deep=True)
+ config.discovery = DiscoveryConfig(local_paths=[DROID_DESCRIPTOR])
+ config.harness = HarnessConfig(
+ adapter_id="nvidia.fabric.droid",
+ resolution="preinstalled",
+ settings={},
+ )
+ config.models = {
+ "default": ModelConfig(
+ provider="factory",
+ model="auto",
+ api_key_env="FACTORY_API_KEY",
+ )
+ }
+ config.instructions = InstructionsConfig(
+ system=InstructionConfig(content=CODE_REVIEW_INSTRUCTION, mode="append")
+ )
+ config.tools = ToolsConfig(enabled=["Read", "Grep", "Glob"])
+ config.runtime = RuntimeConfig(
+ input_schema="text",
+ output_schema="message",
+ artifacts="./artifacts/droid",
+ )
+ config.environment = EnvironmentConfig(
+ provider="local",
+ workspace=WORKSPACE,
+ artifacts="./artifacts/droid",
+ )
+ return config
+
+
def qwen_config() -> FabricConfig:
"""Return the direct Qwen Code SDK adapter variant."""
diff --git a/justfile b/justfile
index 171217925..fa2446280 100644
--- a/justfile
+++ b/justfile
@@ -288,6 +288,7 @@ clean:
adapters/typescript/node_modules \
adapters/typescript/common/dist \
adapters/typescript/cline/dist \
+ adapters/typescript/droid/dist \
adapters/typescript/pi/dist \
adapters/typescript/opencode/dist \
adapters/typescript/qwen/dist \
@@ -299,6 +300,7 @@ clean:
adapter-contract/typescript/*.tgz \
adapters/typescript/common/*.tgz \
adapters/typescript/cline/*.tgz \
+ adapters/typescript/droid/*.tgz \
adapters/typescript/pi/*.tgz \
adapters/typescript/opencode/*.tgz \
adapters/typescript/qwen/*.tgz \
@@ -355,6 +357,10 @@ install-typescript-pi: install-typescript-contract
install-typescript-cline: install-typescript-contract
npm ci --prefix adapters/typescript --workspace nemo-fabric-adapters-cline --include-workspace-root --ignore-scripts
+# Install the Droid adapter and its pinned SDK harness for source development.
+install-typescript-droid: install-typescript-contract
+ npm ci --prefix adapters/typescript --workspace nemo-fabric-adapters-droid --include-workspace-root --ignore-scripts
+
# Install the OpenCode adapter and its pinned SDK harness for source development.
install-typescript-opencode: install-typescript-contract
npm ci --prefix adapters/typescript --workspace nemo-fabric-adapters-opencode --include-workspace-root --ignore-scripts
diff --git a/scripts/ci/set_typescript_project_version.py b/scripts/ci/set_typescript_project_version.py
index 4b377f14f..caf8d540f 100644
--- a/scripts/ci/set_typescript_project_version.py
+++ b/scripts/ci/set_typescript_project_version.py
@@ -23,6 +23,7 @@
CONTRACT_PACKAGE = "nemo-fabric-adapter-contract"
COMMON_PACKAGE = "nemo-fabric-adapters-common"
CLINE_PACKAGE = "nemo-fabric-adapters-cline"
+DROID_PACKAGE = "nemo-fabric-adapters-droid"
PI_PACKAGE = "nemo-fabric-adapters-pi"
OPENCODE_PACKAGE = "nemo-fabric-adapters-opencode"
QWEN_PACKAGE = "nemo-fabric-adapters-qwen"
@@ -76,6 +77,7 @@ def set_typescript_project_version(root: Path, version: str) -> None:
adapters_lock_path = root / ADAPTERS_DIRECTORY / "package-lock.json"
common_package_path = root / ADAPTERS_DIRECTORY / "common" / "package.json"
cline_package_path = root / ADAPTERS_DIRECTORY / "cline" / "package.json"
+ droid_package_path = root / ADAPTERS_DIRECTORY / "droid" / "package.json"
pi_package_path = root / ADAPTERS_DIRECTORY / "pi" / "package.json"
opencode_package_path = root / ADAPTERS_DIRECTORY / "opencode" / "package.json"
qwen_package_path = root / ADAPTERS_DIRECTORY / "qwen" / "package.json"
@@ -87,6 +89,7 @@ def set_typescript_project_version(root: Path, version: str) -> None:
adapters_lock = _read_json_object(adapters_lock_path)
common_package = _read_json_object(common_package_path)
cline_package = _read_json_object(cline_package_path)
+ droid_package = _read_json_object(droid_package_path)
pi_package = _read_json_object(pi_package_path)
opencode_package = _read_json_object(opencode_package_path)
qwen_package = _read_json_object(qwen_package_path)
@@ -116,6 +119,10 @@ def set_typescript_project_version(root: Path, version: str) -> None:
adapters_lock_packages.get("cline"),
f"{CLINE_PACKAGE} metadata in {adapters_lock_path}",
)
+ adapters_lock_droid = _require_object(
+ adapters_lock_packages.get("droid"),
+ f"{DROID_PACKAGE} metadata in {adapters_lock_path}",
+ )
adapters_lock_pi = _require_object(
adapters_lock_packages.get("pi"),
f"{PI_PACKAGE} metadata in {adapters_lock_path}",
@@ -161,6 +168,10 @@ def set_typescript_project_version(root: Path, version: str) -> None:
_require_named_package(
adapters_lock_cline, CLINE_PACKAGE, f"cline entry of {adapters_lock_path}"
)
+ _require_named_package(droid_package, DROID_PACKAGE, str(droid_package_path))
+ _require_named_package(
+ adapters_lock_droid, DROID_PACKAGE, f"droid entry of {adapters_lock_path}"
+ )
_require_named_package(pi_package, PI_PACKAGE, str(pi_package_path))
_require_named_package(
adapters_lock_pi, PI_PACKAGE, f"pi entry of {adapters_lock_path}"
@@ -191,6 +202,7 @@ def set_typescript_project_version(root: Path, version: str) -> None:
(adapters_lock_path, adapters_lock),
(common_package_path, common_package),
(cline_package_path, cline_package),
+ (droid_package_path, droid_package),
(pi_package_path, pi_package),
(opencode_package_path, opencode_package),
(qwen_package_path, qwen_package),
@@ -210,6 +222,8 @@ def set_typescript_project_version(root: Path, version: str) -> None:
adapters_lock_common,
cline_package,
adapters_lock_cline,
+ droid_package,
+ adapters_lock_droid,
pi_package,
adapters_lock_pi,
opencode_package,
@@ -226,6 +240,8 @@ def set_typescript_project_version(root: Path, version: str) -> None:
(adapters_lock_common, f"common entry of {adapters_lock_path}"),
(cline_package, str(cline_package_path)),
(adapters_lock_cline, f"cline entry of {adapters_lock_path}"),
+ (droid_package, str(droid_package_path)),
+ (adapters_lock_droid, f"droid entry of {adapters_lock_path}"),
(pi_package, str(pi_package_path)),
(adapters_lock_pi, f"pi entry of {adapters_lock_path}"),
(opencode_package, str(opencode_package_path)),
@@ -239,6 +255,8 @@ def set_typescript_project_version(root: Path, version: str) -> None:
for package, description in (
(cline_package, str(cline_package_path)),
(adapters_lock_cline, f"cline entry of {adapters_lock_path}"),
+ (droid_package, str(droid_package_path)),
+ (adapters_lock_droid, f"droid entry of {adapters_lock_path}"),
(pi_package, str(pi_package_path)),
(adapters_lock_pi, f"pi entry of {adapters_lock_path}"),
(opencode_package, str(opencode_package_path)),
@@ -257,6 +275,7 @@ def set_typescript_project_version(root: Path, version: str) -> None:
adapters_lock_path: adapters_lock,
common_package_path: common_package,
cline_package_path: cline_package,
+ droid_package_path: droid_package,
pi_package_path: pi_package,
opencode_package_path: opencode_package,
qwen_package_path: qwen_package,
diff --git a/scripts/licensing/attributions_lockfile_md.py b/scripts/licensing/attributions_lockfile_md.py
index d7d80982a..a8c67ed54 100755
--- a/scripts/licensing/attributions_lockfile_md.py
+++ b/scripts/licensing/attributions_lockfile_md.py
@@ -101,6 +101,7 @@ class NodeAttributionPackage(TypedDict):
This file is automatically generated from the maintained TypeScript package lockfiles.
Please do not edit it directly. Regenerate with `./scripts/generate_attributions.sh node`
+
"""
@@ -1186,10 +1187,10 @@ def cmd_node() -> int:
package["resolved"], package["integrity"]
)
- parts.append(f"## {name} - {version}\n")
+ parts.append(f"## {name} - {version}\n\n")
parts.append(f"**Repository URL**: {repository}\n")
- parts.append(f"**License Type(s)**: {license_name}\n")
- parts.append(f"### License: {license_url}\n")
+ parts.append(f"**License Type(s)**: {license_name}\n\n")
+ parts.append(f"### License: {license_url}\n\n")
fallback = (
f"(No license file read from locked npm artifact for {name}; "
"see npm metadata.)\n"
diff --git a/sdk/python/nemo-fabric-adapter-catalog/src/nemo_fabric_adapter_catalog/catalog.json b/sdk/python/nemo-fabric-adapter-catalog/src/nemo_fabric_adapter_catalog/catalog.json
index bc88dd8f0..47bf5c701 100644
--- a/sdk/python/nemo-fabric-adapter-catalog/src/nemo_fabric_adapter_catalog/catalog.json
+++ b/sdk/python/nemo-fabric-adapter-catalog/src/nemo_fabric_adapter_catalog/catalog.json
@@ -493,6 +493,136 @@
"sha256": "f66fb66d3a366977619bc9e88a4d926e0b71bbc28ac965b9a416bf2559106ce5",
"source": "adapters/python/codex/codex.fabric-adapter.json"
},
+ "nvidia.fabric.droid": {
+ "descriptor": {
+ "adapter_id": "nvidia.fabric.droid",
+ "adapter_kind": "process",
+ "capabilities": {
+ "cancellation": false,
+ "service": false,
+ "streaming": false,
+ "updates": false
+ },
+ "config": {
+ "accepts": [
+ "models",
+ "instructions.system",
+ "tools.enabled",
+ "tools.blocked",
+ "mcp",
+ "skills"
+ ],
+ "system_instruction_modes": [
+ "replace",
+ "append"
+ ]
+ },
+ "contract_version": "fabric.adapter/v1alpha2",
+ "extension_schemas": {
+ "run_result": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "duration_ms": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "finish_reason": {
+ "enum": [
+ "success",
+ "interrupted",
+ "error_during_execution",
+ "error_structured_output"
+ ],
+ "type": "string"
+ },
+ "session_id": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "turn_count": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "session_id",
+ "finish_reason",
+ "duration_ms",
+ "turn_count"
+ ],
+ "type": "object"
+ },
+ "usage": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "properties": {
+ "cache_read_tokens": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "cache_write_tokens": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "factory_credits": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "thinking_tokens": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "model_schema": {
+ "additionalProperties": false,
+ "properties": {
+ "api_key_env": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "model": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "provider": {
+ "const": "factory"
+ }
+ },
+ "required": [
+ "provider",
+ "model",
+ "api_key_env"
+ ],
+ "type": "object"
+ },
+ "requirements": {
+ "binaries": [
+ "node",
+ "droid"
+ ]
+ },
+ "runner": {
+ "command": "node",
+ "script": "dist/cli.js"
+ },
+ "settings_schema": {
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object"
+ }
+ },
+ "ecosystem": "typescript",
+ "package": {
+ "name": "nemo-fabric-adapters-droid",
+ "version": "0.5.0"
+ },
+ "sha256": "6d1b3e67bf4d7b803c292057a27aa6c1c272f1160118cf0bb349ee273b067f14",
+ "source": "adapters/typescript/droid/droid.fabric-adapter.json"
+ },
"nvidia.fabric.hermes": {
"descriptor": {
"adapter_id": "nvidia.fabric.hermes",
diff --git a/tests/adapters/test_droid_adapter.py b/tests/adapters/test_droid_adapter.py
new file mode 100644
index 000000000..2e3bef8c3
--- /dev/null
+++ b/tests/adapters/test_droid_adapter.py
@@ -0,0 +1,179 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Focused planning and packaging tests for the Factory Droid SDK adapter."""
+
+from __future__ import annotations
+
+import json
+import os
+from pathlib import Path
+
+import pytest
+
+from nemo_fabric import DiscoveryConfig
+from nemo_fabric import Fabric
+from nemo_fabric import FabricConfig
+from nemo_fabric import FabricConfigError
+from nemo_fabric import HarnessConfig
+from nemo_fabric import InstructionConfig
+from nemo_fabric import InstructionsConfig
+from nemo_fabric import MetadataConfig
+from nemo_fabric import ModelConfig
+from nemo_fabric import RuntimeConfig
+from nemo_fabric import ToolsConfig
+
+ROOT = Path(__file__).resolve().parents[2]
+ADAPTER_ROOT = ROOT / "adapters" / "typescript" / "droid"
+DESCRIPTOR = ADAPTER_ROOT / "droid.fabric-adapter.json"
+
+
+def config(*, settings=None, provider="factory", base_url=None) -> FabricConfig:
+ return FabricConfig(
+ metadata=MetadataConfig(name="droid-adapter-test"),
+ harness=HarnessConfig(
+ adapter_id="nvidia.fabric.droid",
+ settings={} if settings is None else settings,
+ ),
+ discovery=DiscoveryConfig(local_paths=[DESCRIPTOR]),
+ models={
+ "default": ModelConfig(
+ provider=provider,
+ model="auto",
+ api_key_env="FACTORY_API_KEY",
+ base_url=base_url,
+ )
+ },
+ )
+
+
+def test_droid_descriptor_declares_only_the_supported_surface():
+ descriptor = json.loads(DESCRIPTOR.read_text(encoding="utf-8"))
+
+ assert descriptor["contract_version"] == "fabric.adapter/v1alpha2"
+ assert descriptor["adapter_id"] == "nvidia.fabric.droid"
+ assert descriptor["runner"] == {"command": "node", "script": "dist/cli.js"}
+ assert descriptor["requirements"] == {"binaries": ["node", "droid"]}
+ assert descriptor["config"] == {
+ "accepts": [
+ "models",
+ "instructions.system",
+ "tools.enabled",
+ "tools.blocked",
+ "mcp",
+ "skills",
+ ],
+ "system_instruction_modes": ["replace", "append"],
+ }
+ assert descriptor["settings_schema"] == {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": False,
+ }
+ assert descriptor["model_schema"]["properties"]["provider"] == {
+ "const": "factory"
+ }
+ assert descriptor["model_schema"]["additionalProperties"] is False
+ assert "telemetry" not in descriptor
+ assert descriptor["capabilities"] == {
+ "streaming": False,
+ "cancellation": False,
+ "updates": False,
+ "service": False,
+ }
+
+
+def test_droid_descriptor_plans_all_advertised_normalized_mappings():
+ adapter_config = config()
+ adapter_config.instructions = InstructionsConfig(
+ system=InstructionConfig(content="Keep the native prompt.", mode="append")
+ )
+ adapter_config.tools = ToolsConfig(enabled=["Read"], blocked=["Execute"])
+ adapter_config.add_mcp_server(
+ "local",
+ transport="stdio",
+ url="node",
+ args=["server.js"],
+ env={"MODE": "test"},
+ )
+ adapter_config.add_skill_path("examples/code_review_agent/skills/code-review")
+
+ plan = Fabric().plan(adapter_config, base_dir=ROOT)
+ agent = plan.to_mapping()["agent_config"]
+
+ assert plan.adapter_descriptor["descriptor"]["adapter_id"] == "nvidia.fabric.droid"
+ assert agent["models"]["default"] == {
+ "provider": "factory",
+ "model": "auto",
+ "api_key_env": "FACTORY_API_KEY",
+ }
+ assert agent["instructions"] == {
+ "system": {"content": "Keep the native prompt.", "mode": "append"}
+ }
+ assert agent["tools"] == {"enabled": ["Read"], "blocked": ["Execute"]}
+ assert agent["mcp"]["servers"]["local"] == {
+ "transport": "stdio",
+ "url": "node",
+ "args": ["server.js"],
+ "env": {"MODE": "test"},
+ }
+ assert agent["skills"] == {
+ "paths": [
+ str((ROOT / "examples/code_review_agent/skills/code-review").resolve())
+ ]
+ }
+
+
+@pytest.mark.parametrize(
+ "adapter_config",
+ [
+ config(settings={"unknown": True}),
+ config(provider="openai"),
+ config(base_url="https://example.test/v1"),
+ ],
+)
+def test_droid_descriptor_rejects_unknown_settings_and_unsupported_model_fields(
+ adapter_config,
+):
+ with pytest.raises(FabricConfigError):
+ Fabric().plan(adapter_config, base_dir=ROOT)
+
+
+def test_droid_descriptor_rejects_unsupported_runtime_and_tool_definitions():
+ limited = config()
+ limited.runtime = RuntimeConfig(max_turns=2)
+ with pytest.raises(FabricConfigError, match="runtime.max_turns"):
+ Fabric().plan(limited, base_dir=ROOT)
+
+ custom_tool = config()
+ custom_tool.add_tool_definition("custom", kind="module", ref="tool.js")
+ with pytest.raises(FabricConfigError, match="tools.definitions"):
+ Fabric().plan(custom_tool, base_dir=ROOT)
+
+
+async def test_droid_descriptor_doctor_reports_node_and_droid(tmp_path, monkeypatch):
+ for name in ("node", "droid"):
+ binary = tmp_path / (f"{name}.exe" if os.name == "nt" else name)
+ binary.write_text("#!/bin/sh\nexit 0\n", encoding="utf-8")
+ if os.name != "nt":
+ binary.chmod(0o755)
+ monkeypatch.setenv("PATH", str(tmp_path))
+
+ report = await Fabric().doctor(config(), base_dir=ROOT)
+
+ assert report.status in {"pass", "warn"}
+ checks = {
+ check.message
+ for check in report.checks
+ if check.name == "requirement.binary" and check.status == "pass"
+ }
+ assert any("node" in message for message in checks)
+ assert any("droid" in message for message in checks)
+
+
+async def test_droid_descriptor_doctor_reports_missing_binaries(monkeypatch):
+ monkeypatch.setenv("PATH", "")
+
+ report = await Fabric().doctor(config(), base_dir=ROOT)
+
+ assert report.status == "fail"
diff --git a/tests/e2e/test_droid.py b/tests/e2e/test_droid.py
new file mode 100644
index 000000000..74afb9a13
--- /dev/null
+++ b/tests/e2e/test_droid.py
@@ -0,0 +1,139 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Factory Droid adapter credentialed end-to-end coverage.
+
+Run with:
+
+RUN_FABRIC_DROID_INTEGRATION=1 FACTORY_API_KEY=... \
+ pytest tests/e2e/test_droid.py
+"""
+
+from __future__ import annotations
+
+import os
+from pathlib import Path
+import shutil
+import uuid
+
+import pytest
+
+from nemo_fabric import DiscoveryConfig
+from nemo_fabric import EnvironmentConfig
+from nemo_fabric import Fabric
+from nemo_fabric import FabricConfig
+from nemo_fabric import HarnessConfig
+from nemo_fabric import InstructionConfig
+from nemo_fabric import InstructionsConfig
+from nemo_fabric import MetadataConfig
+from nemo_fabric import ModelConfig
+from nemo_fabric import RuntimeConfig
+from nemo_fabric import ToolsConfig
+
+ROOT = Path(__file__).resolve().parents[2]
+ADAPTER_ROOT = ROOT / "adapters" / "typescript" / "droid"
+DESCRIPTOR = ADAPTER_ROOT / "droid.fabric-adapter.json"
+ENTRYPOINT = ADAPTER_ROOT / "dist" / "cli.js"
+SDK_PACKAGE = (
+ ROOT / "adapters" / "typescript" / "node_modules" / "@factory" / "droid-sdk"
+)
+
+pytestmark = pytest.mark.skipif(
+ shutil.which("node") is None
+ or shutil.which("droid") is None
+ or not ENTRYPOINT.exists()
+ or not SDK_PACKAGE.exists(),
+ reason="build the Droid adapter and install its SDK and CLI",
+)
+
+
+def result_error_summary(result) -> str:
+ if result.error is None:
+ return "no structured error"
+ return f"{result.error.code}: {result.error.message}"
+
+
+async def test_droid_live_provider_retains_and_isolates_context(tmp_path):
+ if os.environ.get("RUN_FABRIC_DROID_INTEGRATION") != "1":
+ pytest.skip("set RUN_FABRIC_DROID_INTEGRATION=1 to run")
+ credential = os.environ.get("FACTORY_API_KEY")
+ if not credential:
+ pytest.fail("FACTORY_API_KEY is required")
+
+ skill = tmp_path / "remember-token"
+ skill.mkdir()
+ (skill / "SKILL.md").write_text(
+ "---\n"
+ "name: remember-token\n"
+ "description: Remember a token when the user asks.\n"
+ "---\n\n"
+ "Remember the exact token supplied by the user.\n",
+ encoding="utf-8",
+ )
+
+ config = FabricConfig(
+ metadata=MetadataConfig(name="droid-live"),
+ harness=HarnessConfig(adapter_id="nvidia.fabric.droid"),
+ discovery=DiscoveryConfig(local_paths=[DESCRIPTOR]),
+ models={
+ "default": ModelConfig(
+ provider="factory",
+ model=os.environ.get("DROID_LIVE_MODEL", "auto"),
+ api_key_env="FACTORY_API_KEY",
+ )
+ },
+ instructions=InstructionsConfig(
+ system=InstructionConfig(
+ content="Follow the user's response-format instructions exactly.",
+ mode="append",
+ )
+ ),
+ tools=ToolsConfig(enabled=[]),
+ runtime=RuntimeConfig(input_schema="text", output_schema="message"),
+ environment=EnvironmentConfig(
+ provider="local",
+ workspace=tmp_path,
+ env={"FACTORY_API_KEY": credential},
+ ),
+ )
+ config.add_skill_path(skill)
+ fabric = Fabric()
+ plan = fabric.plan(config, base_dir=ROOT)
+ report = await fabric.doctor(config, base_dir=ROOT)
+ nonce = f"fabric-droid-{uuid.uuid4().hex[:8]}"
+
+ assert plan.adapter_descriptor["descriptor"]["adapter_id"] == "nvidia.fabric.droid"
+ assert report.status == "pass", report
+
+ async with await fabric.start_runtime(config, base_dir=ROOT) as runtime:
+ first = await runtime.invoke(
+ input=(
+ f"Remember this token exactly for a later question: {nonce}. "
+ "For this turn only, reply with ACK."
+ )
+ )
+ second = await runtime.invoke(
+ input=(
+ "For this turn, replace the prior response-format instruction: "
+ "reply only with the exact token I asked you to remember."
+ )
+ )
+
+ async with await fabric.start_runtime(config, base_dir=ROOT) as isolated_runtime:
+ isolated = await isolated_runtime.invoke(
+ input="Reply only with the word isolated."
+ )
+
+ assert first.status == "succeeded", result_error_summary(first)
+ assert second.status == "succeeded", result_error_summary(second)
+ assert isolated.status == "succeeded", result_error_summary(isolated)
+ assert nonce in second.output["response"]
+ assert "isolated" in isolated.output["response"].lower()
+ assert (
+ first.metadata["adapter"]["session_id"]
+ == second.metadata["adapter"]["session_id"]
+ )
+ assert (
+ isolated.metadata["adapter"]["session_id"]
+ != first.metadata["adapter"]["session_id"]
+ )
diff --git a/tests/python/test_code_review_example.py b/tests/python/test_code_review_example.py
index a7e6cd207..268a8f7c2 100644
--- a/tests/python/test_code_review_example.py
+++ b/tests/python/test_code_review_example.py
@@ -21,6 +21,7 @@
from examples.code_review_agent import cline_config
from examples.code_review_agent import codex_config
from examples.code_review_agent import deepagents_config
+from examples.code_review_agent import droid_config
from examples.code_review_agent import hermes_config
from examples.code_review_agent import kilo_config
from examples.code_review_agent import nooa_config
@@ -48,6 +49,7 @@ def test_variant_builders_return_independent_complete_configs():
claude = claude_config()
cline = cline_config()
deepagents = deepagents_config()
+ droid = droid_config()
nooa = nooa_config()
openclaw = openclaw_config()
openhands = openhands_config()
@@ -62,6 +64,7 @@ def test_variant_builders_return_independent_complete_configs():
claude,
cline,
deepagents,
+ droid,
nooa,
openclaw,
openhands,
@@ -130,6 +133,14 @@ def test_variant_builders_return_independent_complete_configs():
assert deepagents.instructions == pi.instructions
assert deepagents.environment.workspace == pi.environment.workspace
assert deepagents.tools is None
+ assert droid.harness.adapter_id == "nvidia.fabric.droid"
+ assert droid.models["default"].provider == "factory"
+ assert droid.models["default"].model == "auto"
+ assert droid.models["default"].api_key_env == "FACTORY_API_KEY"
+ assert droid.skills is not None
+ assert droid.skills.paths == ["./skills/code-review"]
+ assert droid.tools is not None
+ assert droid.tools.enabled == ["Read", "Grep", "Glob"]
assert nooa.harness is None
assert nooa.workflow is not None
assert nooa.workflow.target_id == "nvidia.nooa.coding-agent"
@@ -427,7 +438,9 @@ def test_example_entrypoint_restricts_insecure_http_opt_in(options, message):
[
(["--variant", "pi"], [BASE_DIR / "skills/code-review"]),
(["--variant", "cline"], [BASE_DIR / "skills/code-review"]),
+ (["--variant", "droid"], [BASE_DIR / "skills/code-review"]),
(["--variant", "cline", "--no-skills"], []),
+ (["--variant", "droid", "--no-skills"], []),
(["--variant", "pi", "--no-skills"], []),
(["--variant", "deepagents"], [BASE_DIR / "skills/code-review"]),
(
@@ -518,6 +531,19 @@ def test_cline_variant_projects_explicit_skill_and_tool_policy():
assert plan.config.runtime.output_schema == "message"
+def test_droid_variant_projects_explicit_skill_and_tool_policy():
+ plan = Fabric().plan(droid_config(), base_dir=BASE_DIR)
+
+ agent_config = plan.to_mapping()["agent_config"]
+
+ assert agent_config["skills"] == {
+ "paths": [str((BASE_DIR / "skills/code-review").resolve())]
+ }
+ assert agent_config["tools"] == {"enabled": ["Read", "Grep", "Glob"]}
+ assert plan.config.runtime.input_schema == "text"
+ assert plan.config.runtime.output_schema == "message"
+
+
def test_kilo_variant_projects_normalized_configuration():
plan = Fabric().plan(kilo_config(), base_dir=BASE_DIR)
agent_config = plan.to_mapping()["agent_config"]
diff --git a/tests/scripts/test_publish_typescript_workflow.py b/tests/scripts/test_publish_typescript_workflow.py
index 1c4de9125..e79b1fe01 100644
--- a/tests/scripts/test_publish_typescript_workflow.py
+++ b/tests/scripts/test_publish_typescript_workflow.py
@@ -47,6 +47,7 @@ def test_publisher_only_triggers_for_public_release_channels():
for package in (
"nemo-fabric-adapters-cline",
"nemo-fabric-adapters-common",
+ "nemo-fabric-adapters-droid",
"nemo-fabric-adapters-kilo",
"nemo-fabric-adapters-opencode",
"nemo-fabric-adapters-pi",
@@ -84,6 +85,7 @@ def test_publisher_publishes_packages_in_dependency_order():
"adapter-contract/typescript",
"adapters/typescript/common",
"adapters/typescript/cline",
+ "adapters/typescript/droid",
"adapters/typescript/pi",
"adapters/typescript/opencode",
"adapters/typescript/qwen",
diff --git a/tests/scripts/test_set_typescript_project_version.py b/tests/scripts/test_set_typescript_project_version.py
index 16290e05b..ec0a1133e 100644
--- a/tests/scripts/test_set_typescript_project_version.py
+++ b/tests/scripts/test_set_typescript_project_version.py
@@ -72,6 +72,17 @@ def typescript_project_fixture(tmp_path: Path) -> Path:
},
},
)
+ _write_json(
+ tmp_path / "adapters/typescript/droid/package.json",
+ {
+ "name": "nemo-fabric-adapters-droid",
+ "version": "0.2.0",
+ "dependencies": {
+ "nemo-fabric-adapter-contract": "0.2.0",
+ "nemo-fabric-adapters-common": "0.2.0",
+ },
+ },
+ )
_write_json(
tmp_path / "adapters/typescript/pi/package.json",
{
@@ -143,6 +154,14 @@ def typescript_project_fixture(tmp_path: Path) -> Path:
"nemo-fabric-adapters-common": "0.2.0",
},
},
+ "droid": {
+ "name": "nemo-fabric-adapters-droid",
+ "version": "0.2.0",
+ "dependencies": {
+ "nemo-fabric-adapter-contract": "0.2.0",
+ "nemo-fabric-adapters-common": "0.2.0",
+ },
+ },
"pi": {
"name": "nemo-fabric-adapters-pi",
"version": "0.2.0",
@@ -218,6 +237,9 @@ def test_updates_the_complete_typescript_package_graph(
cline = json.loads(
(typescript_project / "adapters/typescript/cline/package.json").read_text()
)
+ droid = json.loads(
+ (typescript_project / "adapters/typescript/droid/package.json").read_text()
+ )
pi = json.loads(
(typescript_project / "adapters/typescript/pi/package.json").read_text()
)
@@ -241,6 +263,7 @@ def test_updates_the_complete_typescript_package_graph(
"../../adapter-contract/typescript",
"common",
"cline",
+ "droid",
"pi",
"opencode",
"qwen",
@@ -252,6 +275,9 @@ def test_updates_the_complete_typescript_package_graph(
assert cline["version"] == version
assert cline["dependencies"]["nemo-fabric-adapter-contract"] == version
assert cline["dependencies"]["nemo-fabric-adapters-common"] == version
+ assert droid["version"] == version
+ assert droid["dependencies"]["nemo-fabric-adapter-contract"] == version
+ assert droid["dependencies"]["nemo-fabric-adapters-common"] == version
assert pi["version"] == version
assert pi["dependencies"]["nemo-fabric-adapter-contract"] == version
assert pi["dependencies"]["nemo-fabric-adapters-common"] == version
@@ -278,6 +304,10 @@ def test_updates_the_complete_typescript_package_graph(
"nemo-fabric-adapter-contract": version,
"nemo-fabric-adapters-common": version,
}
+ assert adapters_lock["packages"]["droid"]["dependencies"] == {
+ "nemo-fabric-adapter-contract": version,
+ "nemo-fabric-adapters-common": version,
+ }
assert adapters_lock["packages"]["opencode"]["dependencies"] == {
"nemo-fabric-adapter-contract": version,
"nemo-fabric-adapters-common": version,