@elizaos/autonomous 2.0.0-alpha.21 → 2.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1077) hide show
  1. package/package.json +14 -6
  2. package/test/agent-export.e2e.test.ts +376 -0
  3. package/test/agent-orchestration.e2e.test.ts +1568 -0
  4. package/test/agent-restart-recovery.e2e.test.ts +149 -0
  5. package/test/agent-runtime.e2e.test.ts +1515 -0
  6. package/test/anvil-contracts.e2e.test.ts +533 -0
  7. package/test/anvil-helper.ts +285 -0
  8. package/test/api-auth-live.e2e.test.ts +519 -0
  9. package/test/api-auth.e2e.test.ts +1039 -0
  10. package/test/api-server.e2e.test.ts +4582 -0
  11. package/test/apps-e2e.e2e.test.ts +1108 -0
  12. package/test/auth-modules.e2e.test.ts +71 -0
  13. package/test/cloud-auth-state.e2e.test.ts +145 -0
  14. package/test/cloud-persistence.e2e.test.ts +260 -0
  15. package/test/cloud-providers.e2e.test.ts +781 -0
  16. package/test/config-hot-reload.e2e.test.ts +131 -0
  17. package/test/contract-deployer.ts +151 -0
  18. package/test/contracts/MockMiladyAgentRegistry.sol +216 -0
  19. package/test/contracts/MockMiladyCollection.sol +195 -0
  20. package/test/contracts/cache/solidity-files-cache.json +1 -0
  21. package/test/contracts/foundry.toml +14 -0
  22. package/test/contracts/lib/openzeppelin-contracts/.changeset/config.json +12 -0
  23. package/test/contracts/lib/openzeppelin-contracts/.codecov.yml +12 -0
  24. package/test/contracts/lib/openzeppelin-contracts/.editorconfig +21 -0
  25. package/test/contracts/lib/openzeppelin-contracts/.eslintrc +20 -0
  26. package/test/contracts/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  27. package/test/contracts/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
  28. package/test/contracts/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  29. package/test/contracts/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  30. package/test/contracts/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +49 -0
  31. package/test/contracts/lib/openzeppelin-contracts/.github/actions/setup/action.yml +19 -0
  32. package/test/contracts/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +55 -0
  33. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
  34. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
  35. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/checks.yml +111 -0
  36. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
  37. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +68 -0
  38. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +218 -0
  39. package/test/contracts/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +30 -0
  40. package/test/contracts/lib/openzeppelin-contracts/.gitmodules +7 -0
  41. package/test/contracts/lib/openzeppelin-contracts/.mocharc.js +4 -0
  42. package/test/contracts/lib/openzeppelin-contracts/.prettierrc +14 -0
  43. package/test/contracts/lib/openzeppelin-contracts/.solcover.js +13 -0
  44. package/test/contracts/lib/openzeppelin-contracts/.solhint.json +14 -0
  45. package/test/contracts/lib/openzeppelin-contracts/CHANGELOG.md +743 -0
  46. package/test/contracts/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
  47. package/test/contracts/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
  48. package/test/contracts/lib/openzeppelin-contracts/GUIDELINES.md +117 -0
  49. package/test/contracts/lib/openzeppelin-contracts/LICENSE +22 -0
  50. package/test/contracts/lib/openzeppelin-contracts/README.md +90 -0
  51. package/test/contracts/lib/openzeppelin-contracts/RELEASING.md +47 -0
  52. package/test/contracts/lib/openzeppelin-contracts/SECURITY.md +42 -0
  53. package/test/contracts/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
  54. package/test/contracts/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
  55. package/test/contracts/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
  56. package/test/contracts/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
  57. package/test/contracts/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
  58. package/test/contracts/lib/openzeppelin-contracts/audits/README.md +16 -0
  59. package/test/contracts/lib/openzeppelin-contracts/certora/Makefile +54 -0
  60. package/test/contracts/lib/openzeppelin-contracts/certora/README.md +60 -0
  61. package/test/contracts/lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch +14 -0
  62. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/AccessControlDefaultAdminRulesHarness.sol +47 -0
  63. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol +7 -0
  64. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/DoubleEndedQueueHarness.sol +59 -0
  65. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC20FlashMintHarness.sol +36 -0
  66. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC20PermitHarness.sol +17 -0
  67. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC20WrapperHarness.sol +25 -0
  68. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
  69. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC721Harness.sol +37 -0
  70. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol +11 -0
  71. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/EnumerableMapHarness.sol +55 -0
  72. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/EnumerableSetHarness.sol +35 -0
  73. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/InitializableHarness.sol +23 -0
  74. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol +9 -0
  75. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol +9 -0
  76. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol +19 -0
  77. package/test/contracts/lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol +12 -0
  78. package/test/contracts/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
  79. package/test/contracts/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
  80. package/test/contracts/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
  81. package/test/contracts/lib/openzeppelin-contracts/certora/run.js +146 -0
  82. package/test/contracts/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +126 -0
  83. package/test/contracts/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +500 -0
  84. package/test/contracts/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +366 -0
  85. package/test/contracts/lib/openzeppelin-contracts/certora/specs/ERC20.spec +414 -0
  86. package/test/contracts/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +48 -0
  87. package/test/contracts/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +198 -0
  88. package/test/contracts/lib/openzeppelin-contracts/certora/specs/ERC721.spec +589 -0
  89. package/test/contracts/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +334 -0
  90. package/test/contracts/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +247 -0
  91. package/test/contracts/lib/openzeppelin-contracts/certora/specs/Initializable.spec +165 -0
  92. package/test/contracts/lib/openzeppelin-contracts/certora/specs/Ownable.spec +78 -0
  93. package/test/contracts/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
  94. package/test/contracts/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
  95. package/test/contracts/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +275 -0
  96. package/test/contracts/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +1 -0
  97. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +7 -0
  98. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
  99. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
  100. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
  101. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IERC3156.spec +5 -0
  102. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
  103. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +20 -0
  104. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
  105. package/test/contracts/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
  106. package/test/contracts/lib/openzeppelin-contracts/certora/specs.json +86 -0
  107. package/test/contracts/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +248 -0
  108. package/test/contracts/lib/openzeppelin-contracts/contracts/access/AccessControlCrossChain.sol +45 -0
  109. package/test/contracts/lib/openzeppelin-contracts/contracts/access/AccessControlDefaultAdminRules.sol +383 -0
  110. package/test/contracts/lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol +64 -0
  111. package/test/contracts/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +88 -0
  112. package/test/contracts/lib/openzeppelin-contracts/contracts/access/IAccessControlDefaultAdminRules.sol +172 -0
  113. package/test/contracts/lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol +31 -0
  114. package/test/contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol +83 -0
  115. package/test/contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +57 -0
  116. package/test/contracts/lib/openzeppelin-contracts/contracts/access/README.adoc +27 -0
  117. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/CrossChainEnabled.sol +54 -0
  118. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +34 -0
  119. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/amb/CrossChainEnabledAMB.sol +49 -0
  120. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/amb/LibAMB.sol +35 -0
  121. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/arbitrum/CrossChainEnabledArbitrumL1.sol +44 -0
  122. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/arbitrum/CrossChainEnabledArbitrumL2.sol +40 -0
  123. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/arbitrum/LibArbitrumL1.sol +42 -0
  124. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/arbitrum/LibArbitrumL2.sol +45 -0
  125. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/errors.sol +7 -0
  126. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/optimism/CrossChainEnabledOptimism.sol +41 -0
  127. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/optimism/LibOptimism.sol +36 -0
  128. package/test/contracts/lib/openzeppelin-contracts/contracts/crosschain/polygon/CrossChainEnabledPolygonChild.sol +72 -0
  129. package/test/contracts/lib/openzeppelin-contracts/contracts/finance/PaymentSplitter.sol +214 -0
  130. package/test/contracts/lib/openzeppelin-contracts/contracts/finance/README.adoc +20 -0
  131. package/test/contracts/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +145 -0
  132. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/Governor.sol +723 -0
  133. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +313 -0
  134. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/README.adoc +176 -0
  135. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +422 -0
  136. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/compatibility/GovernorCompatibilityBravo.sol +333 -0
  137. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol +118 -0
  138. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +100 -0
  139. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +105 -0
  140. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorProposalThreshold.sol +23 -0
  141. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +110 -0
  142. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +190 -0
  143. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +166 -0
  144. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +55 -0
  145. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesComp.sol +55 -0
  146. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +121 -0
  147. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/extensions/IGovernorTimelock.sol +26 -0
  148. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +56 -0
  149. package/test/contracts/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +244 -0
  150. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +6 -0
  151. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +6 -0
  152. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +6 -0
  153. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +19 -0
  154. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +80 -0
  155. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +35 -0
  156. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +29 -0
  157. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +6 -0
  158. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +6 -0
  159. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +6 -0
  160. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +26 -0
  161. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +6 -0
  162. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +6 -0
  163. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +21 -0
  164. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +8 -0
  165. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +25 -0
  166. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +7 -0
  167. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +29 -0
  168. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +43 -0
  169. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +232 -0
  170. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +20 -0
  171. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +28 -0
  172. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +18 -0
  173. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +9 -0
  174. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +17 -0
  175. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +6 -0
  176. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +6 -0
  177. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +6 -0
  178. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +6 -0
  179. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +6 -0
  180. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +6 -0
  181. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +6 -0
  182. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +73 -0
  183. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
  184. package/test/contracts/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC2612.sol +8 -0
  185. package/test/contracts/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +54 -0
  186. package/test/contracts/lib/openzeppelin-contracts/contracts/metatx/MinimalForwarder.sol +72 -0
  187. package/test/contracts/lib/openzeppelin-contracts/contracts/metatx/README.adoc +12 -0
  188. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/AccessControlCrossChainMock.sol +8 -0
  189. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ArraysMock.sol +51 -0
  190. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/Base64Dirty.sol +19 -0
  191. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/CallReceiverMock.sol +61 -0
  192. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ConditionalEscrowMock.sol +18 -0
  193. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ContextMock.sol +35 -0
  194. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/DummyImplementation.sol +57 -0
  195. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/EIP712Verifier.sol +16 -0
  196. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol +26 -0
  197. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MaliciousData.sol +12 -0
  198. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MissingData.sol +7 -0
  199. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165NotSupported.sol +5 -0
  200. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165ReturnBomb.sol +18 -0
  201. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC20Mock.sol +16 -0
  202. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC20Reentrant.sol +43 -0
  203. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +27 -0
  204. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC3156FlashBorrowerMock.sol +53 -0
  205. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ERC4626Mock.sol +16 -0
  206. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol +17 -0
  207. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/InitializableMock.sol +130 -0
  208. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/MulticallTest.sol +23 -0
  209. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/MultipleInheritanceInitializableMocks.sol +131 -0
  210. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/PausableMock.sol +31 -0
  211. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/PullPaymentMock.sol +15 -0
  212. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol +12 -0
  213. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/ReentrancyMock.sol +51 -0
  214. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/RegressionImplementation.sol +61 -0
  215. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/SafeMathMemoryCheck.sol +72 -0
  216. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/SingleInheritanceInitializableMocks.sol +49 -0
  217. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/StorageSlotMock.sol +77 -0
  218. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/TimelockReentrant.sol +26 -0
  219. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/TimersBlockNumberImpl.sol +39 -0
  220. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/TimersTimestampImpl.sol +39 -0
  221. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/VotesMock.sol +45 -0
  222. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/compound/CompTimelock.sol +174 -0
  223. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/crosschain/bridges.sol +94 -0
  224. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/crosschain/receivers.sol +54 -0
  225. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/docs/ERC4626Fees.sol +100 -0
  226. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyGovernor.sol +88 -0
  227. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyToken.sol +24 -0
  228. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +35 -0
  229. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenWrapped.sol +31 -0
  230. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCompMock.sol +20 -0
  231. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCompatibilityBravoMock.sol +100 -0
  232. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorMock.sol +28 -0
  233. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorPreventLateQuorumMock.sol +45 -0
  234. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockCompoundMock.sol +60 -0
  235. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockControlMock.sol +60 -0
  236. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVoteMock.sol +20 -0
  237. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorWithParamsMock.sol +50 -0
  238. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol +11 -0
  239. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/proxy/ClashingImplementation.sol +17 -0
  240. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSLegacy.sol +54 -0
  241. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSUpgradeableMock.sol +33 -0
  242. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC1155ReceiverMock.sol +47 -0
  243. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol +17 -0
  244. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol +9 -0
  245. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20FlashMintMock.sol +26 -0
  246. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +13 -0
  247. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol +8 -0
  248. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20NoReturnMock.sol +28 -0
  249. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20PermitNoRevertMock.sol +36 -0
  250. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ReturnFalseMock.sol +19 -0
  251. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesLegacyMock.sol +262 -0
  252. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol +17 -0
  253. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC4646FeesMock.sol +40 -0
  254. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveEnumerableMock.sol +51 -0
  255. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveMock.sol +61 -0
  256. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ReceiverMock.sol +42 -0
  257. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC721URIStorageMock.sol +17 -0
  258. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC777Mock.sol +13 -0
  259. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/ERC777SenderRecipientMock.sol +152 -0
  260. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/token/VotesTimestamp.sol +40 -0
  261. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/wizard/MyGovernor1.sol +79 -0
  262. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/wizard/MyGovernor2.sol +85 -0
  263. package/test/contracts/lib/openzeppelin-contracts/contracts/mocks/wizard/MyGovernor3.sol +94 -0
  264. package/test/contracts/lib/openzeppelin-contracts/contracts/package.json +32 -0
  265. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +88 -0
  266. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +32 -0
  267. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol +157 -0
  268. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +86 -0
  269. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
  270. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +61 -0
  271. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +16 -0
  272. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +65 -0
  273. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +81 -0
  274. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +191 -0
  275. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +166 -0
  276. package/test/contracts/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +99 -0
  277. package/test/contracts/lib/openzeppelin-contracts/contracts/security/Pausable.sol +105 -0
  278. package/test/contracts/lib/openzeppelin-contracts/contracts/security/PullPayment.sol +74 -0
  279. package/test/contracts/lib/openzeppelin-contracts/contracts/security/README.adoc +20 -0
  280. package/test/contracts/lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol +77 -0
  281. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +497 -0
  282. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +119 -0
  283. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +58 -0
  284. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +49 -0
  285. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +32 -0
  286. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +44 -0
  287. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +64 -0
  288. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +63 -0
  289. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +22 -0
  290. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/presets/ERC1155PresetMinterPauser.sol +114 -0
  291. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/presets/README.md +1 -0
  292. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +36 -0
  293. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Receiver.sol +19 -0
  294. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +365 -0
  295. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +78 -0
  296. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +80 -0
  297. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +39 -0
  298. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +37 -0
  299. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +109 -0
  300. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +35 -0
  301. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +95 -0
  302. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Snapshot.sol +191 -0
  303. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +290 -0
  304. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20VotesComp.sol +46 -0
  305. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +73 -0
  306. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +256 -0
  307. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +28 -0
  308. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +90 -0
  309. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Permit.sol +8 -0
  310. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol +8 -0
  311. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol +30 -0
  312. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol +94 -0
  313. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/presets/README.md +1 -0
  314. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +143 -0
  315. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/TokenTimelock.sol +72 -0
  316. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +466 -0
  317. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +132 -0
  318. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +27 -0
  319. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +73 -0
  320. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +26 -0
  321. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +148 -0
  322. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +159 -0
  323. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +40 -0
  324. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +38 -0
  325. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +74 -0
  326. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +43 -0
  327. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +97 -0
  328. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
  329. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +27 -0
  330. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/draft-ERC721Votes.sol +9 -0
  331. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol +132 -0
  332. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/presets/README.md +1 -0
  333. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +23 -0
  334. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/ERC777.sol +514 -0
  335. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol +200 -0
  336. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Recipient.sol +35 -0
  337. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Sender.sol +35 -0
  338. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/README.adoc +32 -0
  339. package/test/contracts/lib/openzeppelin-contracts/contracts/token/ERC777/presets/ERC777PresetFixedSupply.sol +30 -0
  340. package/test/contracts/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +107 -0
  341. package/test/contracts/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
  342. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol +244 -0
  343. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +105 -0
  344. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Base64.sol +101 -0
  345. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Checkpoints.sol +560 -0
  346. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol +28 -0
  347. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Counters.sol +43 -0
  348. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Create2.sol +75 -0
  349. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +39 -0
  350. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/README.adoc +113 -0
  351. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +122 -0
  352. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +138 -0
  353. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Strings.sol +85 -0
  354. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/Timers.sol +75 -0
  355. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +217 -0
  356. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +142 -0
  357. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +227 -0
  358. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +50 -0
  359. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol +8 -0
  360. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/escrow/ConditionalEscrow.sol +25 -0
  361. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/escrow/Escrow.sol +67 -0
  362. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/escrow/RefundEscrow.sol +100 -0
  363. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +29 -0
  364. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +126 -0
  365. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Storage.sol +42 -0
  366. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/ERC1820Implementer.sol +43 -0
  367. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +25 -0
  368. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC1820Implementer.sol +20 -0
  369. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/introspection/IERC1820Registry.sol +112 -0
  370. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +339 -0
  371. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +1136 -0
  372. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol +215 -0
  373. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +43 -0
  374. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/math/SignedSafeMath.sol +68 -0
  375. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +51 -0
  376. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +170 -0
  377. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +598 -0
  378. package/test/contracts/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +378 -0
  379. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/amb/IAMB.sol +41 -0
  380. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/arbitrum/IArbSys.sol +134 -0
  381. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/arbitrum/IBridge.sol +102 -0
  382. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/arbitrum/IDelayedMessageProvider.sol +16 -0
  383. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/arbitrum/IInbox.sol +152 -0
  384. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/arbitrum/IOutbox.sol +117 -0
  385. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +86 -0
  386. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
  387. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/optimism/ICrossDomainMessenger.sol +34 -0
  388. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/optimism/LICENSE +22 -0
  389. package/test/contracts/lib/openzeppelin-contracts/contracts/vendor/polygon/IFxMessageProcessor.sol +7 -0
  390. package/test/contracts/lib/openzeppelin-contracts/docs/README.md +16 -0
  391. package/test/contracts/lib/openzeppelin-contracts/docs/antora.yml +6 -0
  392. package/test/contracts/lib/openzeppelin-contracts/docs/config.js +21 -0
  393. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
  394. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
  395. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
  396. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
  397. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
  398. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
  399. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
  400. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
  401. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
  402. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
  403. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
  404. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +23 -0
  405. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +219 -0
  406. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crosschain.adoc +210 -0
  407. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crowdsales.adoc +11 -0
  408. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/drafts.adoc +19 -0
  409. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +153 -0
  410. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +113 -0
  411. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +85 -0
  412. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
  413. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +90 -0
  414. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc777.adoc +75 -0
  415. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +131 -0
  416. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +237 -0
  417. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +65 -0
  418. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/releases-stability.adoc +85 -0
  419. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +32 -0
  420. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +73 -0
  421. package/test/contracts/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +190 -0
  422. package/test/contracts/lib/openzeppelin-contracts/docs/templates/contract.hbs +85 -0
  423. package/test/contracts/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
  424. package/test/contracts/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
  425. package/test/contracts/lib/openzeppelin-contracts/docs/templates/properties.js +45 -0
  426. package/test/contracts/lib/openzeppelin-contracts/foundry.toml +3 -0
  427. package/test/contracts/lib/openzeppelin-contracts/hardhat/env-artifacts.js +24 -0
  428. package/test/contracts/lib/openzeppelin-contracts/hardhat/env-contract.js +10 -0
  429. package/test/contracts/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
  430. package/test/contracts/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
  431. package/test/contracts/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
  432. package/test/contracts/lib/openzeppelin-contracts/hardhat.config.js +118 -0
  433. package/test/contracts/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.prop.sol +404 -0
  434. package/test/contracts/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.test.sol +349 -0
  435. package/test/contracts/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
  436. package/test/contracts/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
  437. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +92 -0
  438. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/.gitmodules +3 -0
  439. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
  440. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
  441. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/README.md +250 -0
  442. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/foundry.toml +21 -0
  443. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/.github/workflows/build.yml +41 -0
  444. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/LICENSE +674 -0
  445. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/Makefile +14 -0
  446. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/default.nix +4 -0
  447. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/demo/demo.sol +222 -0
  448. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/package.json +15 -0
  449. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/test.sol +469 -0
  450. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/test.t.sol +313 -0
  451. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
  452. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/Base.sol +33 -0
  453. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/Script.sol +26 -0
  454. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdAssertions.sol +376 -0
  455. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdChains.sol +233 -0
  456. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdCheats.sol +624 -0
  457. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdError.sol +15 -0
  458. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdInvariant.sol +92 -0
  459. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdJson.sol +179 -0
  460. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdMath.sol +43 -0
  461. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdStorage.sol +327 -0
  462. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdStyle.sol +333 -0
  463. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/StdUtils.sol +189 -0
  464. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/Test.sol +32 -0
  465. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/Vm.sol +409 -0
  466. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/console.sol +1533 -0
  467. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/console2.sol +1546 -0
  468. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  469. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  470. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  471. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  472. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  473. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IMulticall3.sol +73 -0
  474. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdAssertions.t.sol +954 -0
  475. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdChains.t.sol +160 -0
  476. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdCheats.t.sol +401 -0
  477. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdError.t.sol +118 -0
  478. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdMath.t.sol +197 -0
  479. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdStorage.t.sol +283 -0
  480. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
  481. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/StdUtils.t.sol +297 -0
  482. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol +10 -0
  483. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +10 -0
  484. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol +10 -0
  485. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +10 -0
  486. package/test/contracts/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  487. package/test/contracts/lib/openzeppelin-contracts/logo.svg +15 -0
  488. package/test/contracts/lib/openzeppelin-contracts/netlify.toml +3 -0
  489. package/test/contracts/lib/openzeppelin-contracts/package-lock.json +28833 -0
  490. package/test/contracts/lib/openzeppelin-contracts/package.json +96 -0
  491. package/test/contracts/lib/openzeppelin-contracts/remappings.txt +1 -0
  492. package/test/contracts/lib/openzeppelin-contracts/renovate.json +4 -0
  493. package/test/contracts/lib/openzeppelin-contracts/requirements.txt +1 -0
  494. package/test/contracts/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +19 -0
  495. package/test/contracts/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +243 -0
  496. package/test/contracts/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +40 -0
  497. package/test/contracts/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
  498. package/test/contracts/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +54 -0
  499. package/test/contracts/lib/openzeppelin-contracts/scripts/gen-nav.js +41 -0
  500. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
  501. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/run.js +49 -0
  502. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +304 -0
  503. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +22 -0
  504. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +256 -0
  505. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +310 -0
  506. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +250 -0
  507. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +163 -0
  508. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +87 -0
  509. package/test/contracts/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
  510. package/test/contracts/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
  511. package/test/contracts/lib/openzeppelin-contracts/scripts/helpers.js +37 -0
  512. package/test/contracts/lib/openzeppelin-contracts/scripts/migrate-imports.js +180 -0
  513. package/test/contracts/lib/openzeppelin-contracts/scripts/prepack.sh +12 -0
  514. package/test/contracts/lib/openzeppelin-contracts/scripts/prepare-contracts-package.sh +15 -0
  515. package/test/contracts/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
  516. package/test/contracts/lib/openzeppelin-contracts/scripts/prepare.sh +10 -0
  517. package/test/contracts/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
  518. package/test/contracts/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
  519. package/test/contracts/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
  520. package/test/contracts/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
  521. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
  522. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +47 -0
  523. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
  524. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
  525. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
  526. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
  527. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
  528. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
  529. package/test/contracts/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
  530. package/test/contracts/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
  531. package/test/contracts/lib/openzeppelin-contracts/scripts/update-docs-branch.js +63 -0
  532. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
  533. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
  534. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
  535. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +44 -0
  536. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +35 -0
  537. package/test/contracts/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +481 -0
  538. package/test/contracts/lib/openzeppelin-contracts/slither.config.json +5 -0
  539. package/test/contracts/lib/openzeppelin-contracts/test/TESTING.md +3 -0
  540. package/test/contracts/lib/openzeppelin-contracts/test/access/AccessControl.behavior.js +867 -0
  541. package/test/contracts/lib/openzeppelin-contracts/test/access/AccessControl.test.js +12 -0
  542. package/test/contracts/lib/openzeppelin-contracts/test/access/AccessControlCrossChain.test.js +49 -0
  543. package/test/contracts/lib/openzeppelin-contracts/test/access/AccessControlDefaultAdminRules.test.js +25 -0
  544. package/test/contracts/lib/openzeppelin-contracts/test/access/AccessControlEnumerable.test.js +17 -0
  545. package/test/contracts/lib/openzeppelin-contracts/test/access/Ownable.test.js +59 -0
  546. package/test/contracts/lib/openzeppelin-contracts/test/access/Ownable2Step.test.js +67 -0
  547. package/test/contracts/lib/openzeppelin-contracts/test/crosschain/CrossChainEnabled.test.js +78 -0
  548. package/test/contracts/lib/openzeppelin-contracts/test/finance/PaymentSplitter.test.js +217 -0
  549. package/test/contracts/lib/openzeppelin-contracts/test/finance/VestingWallet.behavior.js +59 -0
  550. package/test/contracts/lib/openzeppelin-contracts/test/finance/VestingWallet.test.js +67 -0
  551. package/test/contracts/lib/openzeppelin-contracts/test/governance/Governor.t.sol +55 -0
  552. package/test/contracts/lib/openzeppelin-contracts/test/governance/Governor.test.js +782 -0
  553. package/test/contracts/lib/openzeppelin-contracts/test/governance/TimelockController.test.js +1254 -0
  554. package/test/contracts/lib/openzeppelin-contracts/test/governance/compatibility/GovernorCompatibilityBravo.test.js +283 -0
  555. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorComp.test.js +88 -0
  556. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorERC721.test.js +115 -0
  557. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorPreventLateQuorum.test.js +189 -0
  558. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockCompound.test.js +352 -0
  559. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockControl.test.js +445 -0
  560. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesQuorumFraction.test.js +154 -0
  561. package/test/contracts/lib/openzeppelin-contracts/test/governance/extensions/GovernorWithParams.test.js +173 -0
  562. package/test/contracts/lib/openzeppelin-contracts/test/governance/utils/EIP6372.behavior.js +23 -0
  563. package/test/contracts/lib/openzeppelin-contracts/test/governance/utils/Votes.behavior.js +361 -0
  564. package/test/contracts/lib/openzeppelin-contracts/test/governance/utils/Votes.test.js +71 -0
  565. package/test/contracts/lib/openzeppelin-contracts/test/helpers/chainid.js +10 -0
  566. package/test/contracts/lib/openzeppelin-contracts/test/helpers/create2.js +11 -0
  567. package/test/contracts/lib/openzeppelin-contracts/test/helpers/crosschain.js +61 -0
  568. package/test/contracts/lib/openzeppelin-contracts/test/helpers/customError.js +24 -0
  569. package/test/contracts/lib/openzeppelin-contracts/test/helpers/eip712.js +67 -0
  570. package/test/contracts/lib/openzeppelin-contracts/test/helpers/enums.js +12 -0
  571. package/test/contracts/lib/openzeppelin-contracts/test/helpers/erc1967.js +24 -0
  572. package/test/contracts/lib/openzeppelin-contracts/test/helpers/governance.js +201 -0
  573. package/test/contracts/lib/openzeppelin-contracts/test/helpers/map-values.js +7 -0
  574. package/test/contracts/lib/openzeppelin-contracts/test/helpers/sign.js +63 -0
  575. package/test/contracts/lib/openzeppelin-contracts/test/helpers/time.js +17 -0
  576. package/test/contracts/lib/openzeppelin-contracts/test/helpers/txpool.js +38 -0
  577. package/test/contracts/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +175 -0
  578. package/test/contracts/lib/openzeppelin-contracts/test/metatx/MinimalForwarder.test.js +169 -0
  579. package/test/contracts/lib/openzeppelin-contracts/test/migrate-imports.test.js +33 -0
  580. package/test/contracts/lib/openzeppelin-contracts/test/proxy/Clones.behaviour.js +136 -0
  581. package/test/contracts/lib/openzeppelin-contracts/test/proxy/Clones.test.js +61 -0
  582. package/test/contracts/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js +13 -0
  583. package/test/contracts/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +225 -0
  584. package/test/contracts/lib/openzeppelin-contracts/test/proxy/beacon/BeaconProxy.test.js +139 -0
  585. package/test/contracts/lib/openzeppelin-contracts/test/proxy/beacon/UpgradeableBeacon.test.js +44 -0
  586. package/test/contracts/lib/openzeppelin-contracts/test/proxy/transparent/ProxyAdmin.test.js +127 -0
  587. package/test/contracts/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.behaviour.js +433 -0
  588. package/test/contracts/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.test.js +17 -0
  589. package/test/contracts/lib/openzeppelin-contracts/test/proxy/utils/Initializable.test.js +218 -0
  590. package/test/contracts/lib/openzeppelin-contracts/test/proxy/utils/UUPSUpgradeable.test.js +85 -0
  591. package/test/contracts/lib/openzeppelin-contracts/test/security/Pausable.test.js +85 -0
  592. package/test/contracts/lib/openzeppelin-contracts/test/security/PullPayment.test.js +51 -0
  593. package/test/contracts/lib/openzeppelin-contracts/test/security/ReentrancyGuard.test.js +43 -0
  594. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.behavior.js +767 -0
  595. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +235 -0
  596. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Burnable.test.js +67 -0
  597. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Pausable.test.js +108 -0
  598. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js +107 -0
  599. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155URIStorage.test.js +66 -0
  600. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/presets/ERC1155PresetMinterPauser.test.js +156 -0
  601. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Holder.test.js +64 -0
  602. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/ERC20.behavior.js +322 -0
  603. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/ERC20.test.js +305 -0
  604. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.behavior.js +106 -0
  605. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.test.js +20 -0
  606. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.behavior.js +32 -0
  607. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.test.js +23 -0
  608. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20FlashMint.test.js +204 -0
  609. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Pausable.test.js +133 -0
  610. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Snapshot.test.js +207 -0
  611. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Votes.test.js +578 -0
  612. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20VotesComp.test.js +543 -0
  613. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Wrapper.test.js +190 -0
  614. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.t.sol +42 -0
  615. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +1031 -0
  616. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20Permit.test.js +103 -0
  617. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/presets/ERC20PresetFixedSupply.test.js +42 -0
  618. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/presets/ERC20PresetMinterPauser.test.js +110 -0
  619. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/utils/SafeERC20.test.js +350 -0
  620. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC20/utils/TokenTimelock.test.js +71 -0
  621. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +893 -0
  622. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js +15 -0
  623. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js +20 -0
  624. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Burnable.test.js +70 -0
  625. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.t.sol +122 -0
  626. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.test.js +206 -0
  627. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Pausable.test.js +92 -0
  628. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Royalty.test.js +41 -0
  629. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721URIStorage.test.js +100 -0
  630. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Votes.test.js +184 -0
  631. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Wrapper.test.js +283 -0
  632. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/presets/ERC721PresetMinterPauserAutoId.test.js +122 -0
  633. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Holder.test.js +22 -0
  634. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC777/ERC777.behavior.js +597 -0
  635. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC777/ERC777.test.js +556 -0
  636. package/test/contracts/lib/openzeppelin-contracts/test/token/ERC777/presets/ERC777PresetFixedSupply.test.js +49 -0
  637. package/test/contracts/lib/openzeppelin-contracts/test/token/common/ERC2981.behavior.js +157 -0
  638. package/test/contracts/lib/openzeppelin-contracts/test/utils/Address.test.js +361 -0
  639. package/test/contracts/lib/openzeppelin-contracts/test/utils/Arrays.test.js +123 -0
  640. package/test/contracts/lib/openzeppelin-contracts/test/utils/Base64.test.js +43 -0
  641. package/test/contracts/lib/openzeppelin-contracts/test/utils/Checkpoints.t.sol +347 -0
  642. package/test/contracts/lib/openzeppelin-contracts/test/utils/Checkpoints.test.js +255 -0
  643. package/test/contracts/lib/openzeppelin-contracts/test/utils/Context.behavior.js +42 -0
  644. package/test/contracts/lib/openzeppelin-contracts/test/utils/Context.test.js +17 -0
  645. package/test/contracts/lib/openzeppelin-contracts/test/utils/Counters.test.js +84 -0
  646. package/test/contracts/lib/openzeppelin-contracts/test/utils/Create2.test.js +89 -0
  647. package/test/contracts/lib/openzeppelin-contracts/test/utils/Multicall.test.js +68 -0
  648. package/test/contracts/lib/openzeppelin-contracts/test/utils/ShortStrings.t.sol +55 -0
  649. package/test/contracts/lib/openzeppelin-contracts/test/utils/ShortStrings.test.js +55 -0
  650. package/test/contracts/lib/openzeppelin-contracts/test/utils/StorageSlot.test.js +210 -0
  651. package/test/contracts/lib/openzeppelin-contracts/test/utils/Strings.test.js +150 -0
  652. package/test/contracts/lib/openzeppelin-contracts/test/utils/TimersBlockNumberImpl.test.js +55 -0
  653. package/test/contracts/lib/openzeppelin-contracts/test/utils/TimersTimestamp.test.js +55 -0
  654. package/test/contracts/lib/openzeppelin-contracts/test/utils/cryptography/ECDSA.test.js +260 -0
  655. package/test/contracts/lib/openzeppelin-contracts/test/utils/cryptography/EIP712.test.js +103 -0
  656. package/test/contracts/lib/openzeppelin-contracts/test/utils/cryptography/MerkleProof.test.js +200 -0
  657. package/test/contracts/lib/openzeppelin-contracts/test/utils/cryptography/SignatureChecker.test.js +87 -0
  658. package/test/contracts/lib/openzeppelin-contracts/test/utils/escrow/ConditionalEscrow.test.js +37 -0
  659. package/test/contracts/lib/openzeppelin-contracts/test/utils/escrow/Escrow.behavior.js +90 -0
  660. package/test/contracts/lib/openzeppelin-contracts/test/utils/escrow/Escrow.test.js +14 -0
  661. package/test/contracts/lib/openzeppelin-contracts/test/utils/escrow/RefundEscrow.test.js +143 -0
  662. package/test/contracts/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js +11 -0
  663. package/test/contracts/lib/openzeppelin-contracts/test/utils/introspection/ERC165Checker.test.js +302 -0
  664. package/test/contracts/lib/openzeppelin-contracts/test/utils/introspection/ERC165Storage.test.js +23 -0
  665. package/test/contracts/lib/openzeppelin-contracts/test/utils/introspection/ERC1820Implementer.test.js +71 -0
  666. package/test/contracts/lib/openzeppelin-contracts/test/utils/introspection/SupportsInterface.behavior.js +146 -0
  667. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/Math.t.sol +217 -0
  668. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/Math.test.js +289 -0
  669. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/SafeCast.test.js +152 -0
  670. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/SafeMath.test.js +433 -0
  671. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/SignedMath.test.js +95 -0
  672. package/test/contracts/lib/openzeppelin-contracts/test/utils/math/SignedSafeMath.test.js +152 -0
  673. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/BitMap.test.js +145 -0
  674. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/DoubleEndedQueue.test.js +99 -0
  675. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.behavior.js +185 -0
  676. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.test.js +154 -0
  677. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.behavior.js +129 -0
  678. package/test/contracts/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.test.js +79 -0
  679. package/test/contracts/out/AccessControl.sol/AccessControl.json +1 -0
  680. package/test/contracts/out/AccessControlCrossChain.sol/AccessControlCrossChain.json +1 -0
  681. package/test/contracts/out/AccessControlCrossChainMock.sol/AccessControlCrossChainMock.json +1 -0
  682. package/test/contracts/out/AccessControlDefaultAdminRules.sol/AccessControlDefaultAdminRules.json +1 -0
  683. package/test/contracts/out/AccessControlEnumerable.sol/AccessControlEnumerable.json +1 -0
  684. package/test/contracts/out/Address.sol/Address.json +1 -0
  685. package/test/contracts/out/Arrays.sol/Arrays.json +1 -0
  686. package/test/contracts/out/ArraysMock.sol/AddressArraysMock.json +1 -0
  687. package/test/contracts/out/ArraysMock.sol/Bytes32ArraysMock.json +1 -0
  688. package/test/contracts/out/ArraysMock.sol/Uint256ArraysMock.json +1 -0
  689. package/test/contracts/out/BadBeacon.sol/BadBeaconNoImpl.json +1 -0
  690. package/test/contracts/out/BadBeacon.sol/BadBeaconNotContract.json +1 -0
  691. package/test/contracts/out/Base.sol/CommonBase.json +1 -0
  692. package/test/contracts/out/Base.sol/ScriptBase.json +1 -0
  693. package/test/contracts/out/Base.sol/TestBase.json +1 -0
  694. package/test/contracts/out/Base64.sol/Base64.json +1 -0
  695. package/test/contracts/out/Base64Dirty.sol/Base64Dirty.json +1 -0
  696. package/test/contracts/out/BeaconProxy.sol/BeaconProxy.json +1 -0
  697. package/test/contracts/out/BitMaps.sol/BitMaps.json +1 -0
  698. package/test/contracts/out/CallReceiverMock.sol/CallReceiverMock.json +1 -0
  699. package/test/contracts/out/Checkpoints.sol/Checkpoints.json +1 -0
  700. package/test/contracts/out/Checkpoints.t.sol/CheckpointsHistoryTest.json +1 -0
  701. package/test/contracts/out/Checkpoints.t.sol/CheckpointsTrace160Test.json +1 -0
  702. package/test/contracts/out/Checkpoints.t.sol/CheckpointsTrace224Test.json +1 -0
  703. package/test/contracts/out/ClashingImplementation.sol/ClashingImplementation.json +1 -0
  704. package/test/contracts/out/Clones.sol/Clones.json +1 -0
  705. package/test/contracts/out/CompTimelock.sol/CompTimelock.json +1 -0
  706. package/test/contracts/out/CompilationScript.sol/CompilationScript.json +1 -0
  707. package/test/contracts/out/CompilationScriptBase.sol/CompilationScriptBase.json +1 -0
  708. package/test/contracts/out/CompilationTest.sol/CompilationTest.json +1 -0
  709. package/test/contracts/out/CompilationTestBase.sol/CompilationTestBase.json +1 -0
  710. package/test/contracts/out/ConditionalEscrow.sol/ConditionalEscrow.json +1 -0
  711. package/test/contracts/out/ConditionalEscrowMock.sol/ConditionalEscrowMock.json +1 -0
  712. package/test/contracts/out/Context.sol/Context.json +1 -0
  713. package/test/contracts/out/ContextMock.sol/ContextMock.json +1 -0
  714. package/test/contracts/out/ContextMock.sol/ContextMockCaller.json +1 -0
  715. package/test/contracts/out/Counters.sol/Counters.json +1 -0
  716. package/test/contracts/out/Create2.sol/Create2.json +1 -0
  717. package/test/contracts/out/CrossChainEnabled.sol/CrossChainEnabled.json +1 -0
  718. package/test/contracts/out/CrossChainEnabledAMB.sol/CrossChainEnabledAMB.json +1 -0
  719. package/test/contracts/out/CrossChainEnabledArbitrumL1.sol/CrossChainEnabledArbitrumL1.json +1 -0
  720. package/test/contracts/out/CrossChainEnabledArbitrumL2.sol/CrossChainEnabledArbitrumL2.json +1 -0
  721. package/test/contracts/out/CrossChainEnabledOptimism.sol/CrossChainEnabledOptimism.json +1 -0
  722. package/test/contracts/out/CrossChainEnabledPolygonChild.sol/CrossChainEnabledPolygonChild.json +1 -0
  723. package/test/contracts/out/DoubleEndedQueue.sol/DoubleEndedQueue.json +1 -0
  724. package/test/contracts/out/DummyImplementation.sol/DummyImplementation.json +1 -0
  725. package/test/contracts/out/DummyImplementation.sol/DummyImplementationV2.json +1 -0
  726. package/test/contracts/out/DummyImplementation.sol/Impl.json +1 -0
  727. package/test/contracts/out/ECDSA.sol/ECDSA.json +1 -0
  728. package/test/contracts/out/EIP712.sol/EIP712.json +1 -0
  729. package/test/contracts/out/EIP712Verifier.sol/EIP712Verifier.json +1 -0
  730. package/test/contracts/out/ERC1155.sol/ERC1155.json +1 -0
  731. package/test/contracts/out/ERC1155Burnable.sol/ERC1155Burnable.json +1 -0
  732. package/test/contracts/out/ERC1155Holder.sol/ERC1155Holder.json +1 -0
  733. package/test/contracts/out/ERC1155Pausable.sol/ERC1155Pausable.json +1 -0
  734. package/test/contracts/out/ERC1155PresetMinterPauser.sol/ERC1155PresetMinterPauser.json +1 -0
  735. package/test/contracts/out/ERC1155Receiver.sol/ERC1155Receiver.json +1 -0
  736. package/test/contracts/out/ERC1155ReceiverMock.sol/ERC1155ReceiverMock.json +1 -0
  737. package/test/contracts/out/ERC1155Supply.sol/ERC1155Supply.json +1 -0
  738. package/test/contracts/out/ERC1155URIStorage.sol/ERC1155URIStorage.json +1 -0
  739. package/test/contracts/out/ERC1271WalletMock.sol/ERC1271MaliciousMock.json +1 -0
  740. package/test/contracts/out/ERC1271WalletMock.sol/ERC1271WalletMock.json +1 -0
  741. package/test/contracts/out/ERC165.sol/ERC165.json +1 -0
  742. package/test/contracts/out/ERC165Checker.sol/ERC165Checker.json +1 -0
  743. package/test/contracts/out/ERC165MaliciousData.sol/ERC165MaliciousData.json +1 -0
  744. package/test/contracts/out/ERC165MissingData.sol/ERC165MissingData.json +1 -0
  745. package/test/contracts/out/ERC165NotSupported.sol/ERC165NotSupported.json +1 -0
  746. package/test/contracts/out/ERC165ReturnBomb.sol/ERC165ReturnBombMock.json +1 -0
  747. package/test/contracts/out/ERC165Storage.sol/ERC165Storage.json +1 -0
  748. package/test/contracts/out/ERC1820Implementer.sol/ERC1820Implementer.json +1 -0
  749. package/test/contracts/out/ERC1967Proxy.sol/ERC1967Proxy.json +1 -0
  750. package/test/contracts/out/ERC1967Upgrade.sol/ERC1967Upgrade.json +1 -0
  751. package/test/contracts/out/ERC20.sol/ERC20.json +1 -0
  752. package/test/contracts/out/ERC20Burnable.sol/ERC20Burnable.json +1 -0
  753. package/test/contracts/out/ERC20Capped.sol/ERC20Capped.json +1 -0
  754. package/test/contracts/out/ERC20DecimalsMock.sol/ERC20DecimalsMock.json +1 -0
  755. package/test/contracts/out/ERC20ExcessDecimalsMock.sol/ERC20ExcessDecimalsMock.json +1 -0
  756. package/test/contracts/out/ERC20FlashMint.sol/ERC20FlashMint.json +1 -0
  757. package/test/contracts/out/ERC20FlashMintMock.sol/ERC20FlashMintMock.json +1 -0
  758. package/test/contracts/out/ERC20ForceApproveMock.sol/ERC20ForceApproveMock.json +1 -0
  759. package/test/contracts/out/ERC20Mock.sol/ERC20Mock.json +1 -0
  760. package/test/contracts/out/ERC20MulticallMock.sol/ERC20MulticallMock.json +1 -0
  761. package/test/contracts/out/ERC20NoReturnMock.sol/ERC20NoReturnMock.json +1 -0
  762. package/test/contracts/out/ERC20Pausable.sol/ERC20Pausable.json +1 -0
  763. package/test/contracts/out/ERC20Permit.sol/ERC20Permit.json +1 -0
  764. package/test/contracts/out/ERC20PermitNoRevertMock.sol/ERC20PermitNoRevertMock.json +1 -0
  765. package/test/contracts/out/ERC20PresetFixedSupply.sol/ERC20PresetFixedSupply.json +1 -0
  766. package/test/contracts/out/ERC20PresetMinterPauser.sol/ERC20PresetMinterPauser.json +1 -0
  767. package/test/contracts/out/ERC20Reentrant.sol/ERC20Reentrant.json +1 -0
  768. package/test/contracts/out/ERC20ReturnFalseMock.sol/ERC20ReturnFalseMock.json +1 -0
  769. package/test/contracts/out/ERC20Snapshot.sol/ERC20Snapshot.json +1 -0
  770. package/test/contracts/out/ERC20Votes.sol/ERC20Votes.json +1 -0
  771. package/test/contracts/out/ERC20VotesComp.sol/ERC20VotesComp.json +1 -0
  772. package/test/contracts/out/ERC20VotesLegacyMock.sol/ERC20VotesLegacyMock.json +1 -0
  773. package/test/contracts/out/ERC20Wrapper.sol/ERC20Wrapper.json +1 -0
  774. package/test/contracts/out/ERC2771Context.sol/ERC2771Context.json +1 -0
  775. package/test/contracts/out/ERC2771ContextMock.sol/ERC2771ContextMock.json +1 -0
  776. package/test/contracts/out/ERC2981.sol/ERC2981.json +1 -0
  777. package/test/contracts/out/ERC3156FlashBorrowerMock.sol/ERC3156FlashBorrowerMock.json +1 -0
  778. package/test/contracts/out/ERC4626.prop.sol/ERC4626Prop.json +1 -0
  779. package/test/contracts/out/ERC4626.prop.sol/IERC20.json +1 -0
  780. package/test/contracts/out/ERC4626.prop.sol/IERC4626.json +1 -0
  781. package/test/contracts/out/ERC4626.sol/ERC4626.json +1 -0
  782. package/test/contracts/out/ERC4626.t.sol/ERC4626StdTest.json +1 -0
  783. package/test/contracts/out/ERC4626.t.sol/ERC4626VaultOffsetMock.json +1 -0
  784. package/test/contracts/out/ERC4626.test.sol/ERC4626Test.json +1 -0
  785. package/test/contracts/out/ERC4626.test.sol/IMockERC20.json +1 -0
  786. package/test/contracts/out/ERC4626Fees.sol/ERC4626Fees.json +1 -0
  787. package/test/contracts/out/ERC4626Mock.sol/ERC4626Mock.json +1 -0
  788. package/test/contracts/out/ERC4626OffsetMock.sol/ERC4626OffsetMock.json +1 -0
  789. package/test/contracts/out/ERC4646FeesMock.sol/ERC4626FeesMock.json +1 -0
  790. package/test/contracts/out/ERC721.sol/ERC721.json +1 -0
  791. package/test/contracts/out/ERC721Burnable.sol/ERC721Burnable.json +1 -0
  792. package/test/contracts/out/ERC721Consecutive.sol/ERC721Consecutive.json +1 -0
  793. package/test/contracts/out/ERC721Consecutive.t.sol/ERC721ConsecutiveTarget.json +1 -0
  794. package/test/contracts/out/ERC721Consecutive.t.sol/ERC721ConsecutiveTest.json +1 -0
  795. package/test/contracts/out/ERC721ConsecutiveEnumerableMock.sol/ERC721ConsecutiveEnumerableMock.json +1 -0
  796. package/test/contracts/out/ERC721ConsecutiveMock.sol/ERC721ConsecutiveMock.json +1 -0
  797. package/test/contracts/out/ERC721ConsecutiveMock.sol/ERC721ConsecutiveNoConstructorMintMock.json +1 -0
  798. package/test/contracts/out/ERC721Enumerable.sol/ERC721Enumerable.json +1 -0
  799. package/test/contracts/out/ERC721Holder.sol/ERC721Holder.json +1 -0
  800. package/test/contracts/out/ERC721Pausable.sol/ERC721Pausable.json +1 -0
  801. package/test/contracts/out/ERC721PresetMinterPauserAutoId.sol/ERC721PresetMinterPauserAutoId.json +1 -0
  802. package/test/contracts/out/ERC721ReceiverMock.sol/ERC721ReceiverMock.json +1 -0
  803. package/test/contracts/out/ERC721Royalty.sol/ERC721Royalty.json +1 -0
  804. package/test/contracts/out/ERC721URIStorage.sol/ERC721URIStorage.json +1 -0
  805. package/test/contracts/out/ERC721URIStorageMock.sol/ERC721URIStorageMock.json +1 -0
  806. package/test/contracts/out/ERC721Votes.sol/ERC721Votes.json +1 -0
  807. package/test/contracts/out/ERC721Wrapper.sol/ERC721Wrapper.json +1 -0
  808. package/test/contracts/out/ERC777.sol/ERC777.json +1 -0
  809. package/test/contracts/out/ERC777Mock.sol/ERC777Mock.json +1 -0
  810. package/test/contracts/out/ERC777PresetFixedSupply.sol/ERC777PresetFixedSupply.json +1 -0
  811. package/test/contracts/out/ERC777SenderRecipientMock.sol/ERC777SenderRecipientMock.json +1 -0
  812. package/test/contracts/out/EnumerableMap.sol/EnumerableMap.json +1 -0
  813. package/test/contracts/out/EnumerableSet.sol/EnumerableSet.json +1 -0
  814. package/test/contracts/out/Escrow.sol/Escrow.json +1 -0
  815. package/test/contracts/out/EtherReceiverMock.sol/EtherReceiverMock.json +1 -0
  816. package/test/contracts/out/Governor.sol/Governor.json +1 -0
  817. package/test/contracts/out/Governor.t.sol/GovernorInternalTest.json +1 -0
  818. package/test/contracts/out/GovernorCompMock.sol/GovernorCompMock.json +1 -0
  819. package/test/contracts/out/GovernorCompatibilityBravo.sol/GovernorCompatibilityBravo.json +1 -0
  820. package/test/contracts/out/GovernorCompatibilityBravoMock.sol/GovernorCompatibilityBravoMock.json +1 -0
  821. package/test/contracts/out/GovernorCountingSimple.sol/GovernorCountingSimple.json +1 -0
  822. package/test/contracts/out/GovernorMock.sol/GovernorMock.json +1 -0
  823. package/test/contracts/out/GovernorPreventLateQuorum.sol/GovernorPreventLateQuorum.json +1 -0
  824. package/test/contracts/out/GovernorPreventLateQuorumMock.sol/GovernorPreventLateQuorumMock.json +1 -0
  825. package/test/contracts/out/GovernorProposalThreshold.sol/GovernorProposalThreshold.json +1 -0
  826. package/test/contracts/out/GovernorSettings.sol/GovernorSettings.json +1 -0
  827. package/test/contracts/out/GovernorTimelockCompound.sol/GovernorTimelockCompound.json +1 -0
  828. package/test/contracts/out/GovernorTimelockCompoundMock.sol/GovernorTimelockCompoundMock.json +1 -0
  829. package/test/contracts/out/GovernorTimelockControl.sol/GovernorTimelockControl.json +1 -0
  830. package/test/contracts/out/GovernorTimelockControlMock.sol/GovernorTimelockControlMock.json +1 -0
  831. package/test/contracts/out/GovernorVoteMock.sol/GovernorVoteMocks.json +1 -0
  832. package/test/contracts/out/GovernorVotes.sol/GovernorVotes.json +1 -0
  833. package/test/contracts/out/GovernorVotesComp.sol/GovernorVotesComp.json +1 -0
  834. package/test/contracts/out/GovernorVotesQuorumFraction.sol/GovernorVotesQuorumFraction.json +1 -0
  835. package/test/contracts/out/GovernorWithParamsMock.sol/GovernorWithParamsMock.json +1 -0
  836. package/test/contracts/out/IAMB.sol/IAMB.json +1 -0
  837. package/test/contracts/out/IAccessControl.sol/IAccessControl.json +1 -0
  838. package/test/contracts/out/IAccessControlDefaultAdminRules.sol/IAccessControlDefaultAdminRules.json +1 -0
  839. package/test/contracts/out/IAccessControlEnumerable.sol/IAccessControlEnumerable.json +1 -0
  840. package/test/contracts/out/IArbSys.sol/IArbSys.json +1 -0
  841. package/test/contracts/out/IBeacon.sol/IBeacon.json +1 -0
  842. package/test/contracts/out/IBridge.sol/IBridge.json +1 -0
  843. package/test/contracts/out/ICompoundTimelock.sol/ICompoundTimelock.json +1 -0
  844. package/test/contracts/out/ICrossDomainMessenger.sol/ICrossDomainMessenger.json +1 -0
  845. package/test/contracts/out/IDelayedMessageProvider.sol/IDelayedMessageProvider.json +1 -0
  846. package/test/contracts/out/IERC1155.sol/IERC1155.json +1 -0
  847. package/test/contracts/out/IERC1155MetadataURI.sol/IERC1155MetadataURI.json +1 -0
  848. package/test/contracts/out/IERC1155Receiver.sol/IERC1155Receiver.json +1 -0
  849. package/test/contracts/out/IERC1271.sol/IERC1271.json +1 -0
  850. package/test/contracts/out/IERC1363.sol/IERC1363.json +1 -0
  851. package/test/contracts/out/IERC1363Receiver.sol/IERC1363Receiver.json +1 -0
  852. package/test/contracts/out/IERC1363Spender.sol/IERC1363Spender.json +1 -0
  853. package/test/contracts/out/IERC165.sol/IERC165.json +1 -0
  854. package/test/contracts/out/IERC1820Implementer.sol/IERC1820Implementer.json +1 -0
  855. package/test/contracts/out/IERC1820Registry.sol/IERC1820Registry.json +1 -0
  856. package/test/contracts/out/IERC1967.sol/IERC1967.json +1 -0
  857. package/test/contracts/out/IERC20.sol/IERC20.json +1 -0
  858. package/test/contracts/out/IERC20Metadata.sol/IERC20Metadata.json +1 -0
  859. package/test/contracts/out/IERC20Permit.sol/IERC20Permit.json +1 -0
  860. package/test/contracts/out/IERC2309.sol/IERC2309.json +1 -0
  861. package/test/contracts/out/IERC2612.sol/IERC2612.json +1 -0
  862. package/test/contracts/out/IERC2981.sol/IERC2981.json +1 -0
  863. package/test/contracts/out/IERC3156FlashBorrower.sol/IERC3156FlashBorrower.json +1 -0
  864. package/test/contracts/out/IERC3156FlashLender.sol/IERC3156FlashLender.json +1 -0
  865. package/test/contracts/out/IERC4626.sol/IERC4626.json +1 -0
  866. package/test/contracts/out/IERC4906.sol/IERC4906.json +1 -0
  867. package/test/contracts/out/IERC5267.sol/IERC5267.json +1 -0
  868. package/test/contracts/out/IERC5313.sol/IERC5313.json +1 -0
  869. package/test/contracts/out/IERC5805.sol/IERC5805.json +1 -0
  870. package/test/contracts/out/IERC6372.sol/IERC6372.json +1 -0
  871. package/test/contracts/out/IERC721.sol/IERC721.json +1 -0
  872. package/test/contracts/out/IERC721.sol/IERC721Enumerable.json +1 -0
  873. package/test/contracts/out/IERC721.sol/IERC721Metadata.json +1 -0
  874. package/test/contracts/out/IERC721.sol/IERC721TokenReceiver.json +1 -0
  875. package/test/contracts/out/IERC721Enumerable.sol/IERC721Enumerable.json +1 -0
  876. package/test/contracts/out/IERC721Metadata.sol/IERC721Metadata.json +1 -0
  877. package/test/contracts/out/IERC721Receiver.sol/IERC721Receiver.json +1 -0
  878. package/test/contracts/out/IERC777.sol/IERC777.json +1 -0
  879. package/test/contracts/out/IERC777Recipient.sol/IERC777Recipient.json +1 -0
  880. package/test/contracts/out/IERC777Sender.sol/IERC777Sender.json +1 -0
  881. package/test/contracts/out/IFxMessageProcessor.sol/IFxMessageProcessor.json +1 -0
  882. package/test/contracts/out/IGovernor.sol/IGovernor.json +1 -0
  883. package/test/contracts/out/IGovernorCompatibilityBravo.sol/IGovernorCompatibilityBravo.json +1 -0
  884. package/test/contracts/out/IGovernorTimelock.sol/IGovernorTimelock.json +1 -0
  885. package/test/contracts/out/IInbox.sol/IInbox.json +1 -0
  886. package/test/contracts/out/IMulticall3.sol/IMulticall3.json +1 -0
  887. package/test/contracts/out/IOutbox.sol/IOutbox.json +1 -0
  888. package/test/contracts/out/IVotes.sol/IVotes.json +1 -0
  889. package/test/contracts/out/Initializable.sol/Initializable.json +1 -0
  890. package/test/contracts/out/InitializableMock.sol/ChildConstructorInitializableMock.json +1 -0
  891. package/test/contracts/out/InitializableMock.sol/ConstructorInitializableMock.json +1 -0
  892. package/test/contracts/out/InitializableMock.sol/DisableBad1.json +1 -0
  893. package/test/contracts/out/InitializableMock.sol/DisableBad2.json +1 -0
  894. package/test/contracts/out/InitializableMock.sol/DisableNew.json +1 -0
  895. package/test/contracts/out/InitializableMock.sol/DisableOk.json +1 -0
  896. package/test/contracts/out/InitializableMock.sol/DisableOld.json +1 -0
  897. package/test/contracts/out/InitializableMock.sol/InitializableMock.json +1 -0
  898. package/test/contracts/out/InitializableMock.sol/ReinitializerMock.json +1 -0
  899. package/test/contracts/out/LibAMB.sol/LibAMB.json +1 -0
  900. package/test/contracts/out/LibArbitrumL1.sol/LibArbitrumL1.json +1 -0
  901. package/test/contracts/out/LibArbitrumL2.sol/LibArbitrumL2.json +1 -0
  902. package/test/contracts/out/LibOptimism.sol/LibOptimism.json +1 -0
  903. package/test/contracts/out/Math.sol/Math.json +1 -0
  904. package/test/contracts/out/Math.t.sol/MathTest.json +1 -0
  905. package/test/contracts/out/MerkleProof.sol/MerkleProof.json +1 -0
  906. package/test/contracts/out/MinimalForwarder.sol/MinimalForwarder.json +1 -0
  907. package/test/contracts/out/MockMiladyAgentRegistry.sol/MockMiladyAgentRegistry.json +1 -0
  908. package/test/contracts/out/MockMiladyCollection.sol/MockMiladyCollection.json +1 -0
  909. package/test/contracts/out/Multicall.sol/Multicall.json +1 -0
  910. package/test/contracts/out/MulticallTest.sol/MulticallTest.json +1 -0
  911. package/test/contracts/out/MultipleInheritanceInitializableMocks.sol/SampleChild.json +1 -0
  912. package/test/contracts/out/MultipleInheritanceInitializableMocks.sol/SampleFather.json +1 -0
  913. package/test/contracts/out/MultipleInheritanceInitializableMocks.sol/SampleGramps.json +1 -0
  914. package/test/contracts/out/MultipleInheritanceInitializableMocks.sol/SampleHuman.json +1 -0
  915. package/test/contracts/out/MultipleInheritanceInitializableMocks.sol/SampleMother.json +1 -0
  916. package/test/contracts/out/MyGovernor.sol/MyGovernor.json +1 -0
  917. package/test/contracts/out/MyGovernor1.sol/MyGovernor1.json +1 -0
  918. package/test/contracts/out/MyGovernor2.sol/MyGovernor2.json +1 -0
  919. package/test/contracts/out/MyGovernor3.sol/MyGovernor3.json +1 -0
  920. package/test/contracts/out/MyToken.sol/MyToken.json +1 -0
  921. package/test/contracts/out/MyTokenTimestampBased.sol/MyTokenTimestampBased.json +1 -0
  922. package/test/contracts/out/MyTokenWrapped.sol/MyTokenWrapped.json +1 -0
  923. package/test/contracts/out/Ownable.sol/Ownable.json +1 -0
  924. package/test/contracts/out/Ownable2Step.sol/Ownable2Step.json +1 -0
  925. package/test/contracts/out/Pausable.sol/Pausable.json +1 -0
  926. package/test/contracts/out/PausableMock.sol/PausableMock.json +1 -0
  927. package/test/contracts/out/PaymentSplitter.sol/PaymentSplitter.json +1 -0
  928. package/test/contracts/out/Proxy.sol/Proxy.json +1 -0
  929. package/test/contracts/out/ProxyAdmin.sol/ProxyAdmin.json +1 -0
  930. package/test/contracts/out/PullPayment.sol/PullPayment.json +1 -0
  931. package/test/contracts/out/PullPaymentMock.sol/PullPaymentMock.json +1 -0
  932. package/test/contracts/out/ReentrancyAttack.sol/ReentrancyAttack.json +1 -0
  933. package/test/contracts/out/ReentrancyGuard.sol/ReentrancyGuard.json +1 -0
  934. package/test/contracts/out/ReentrancyMock.sol/ReentrancyMock.json +1 -0
  935. package/test/contracts/out/RefundEscrow.sol/RefundEscrow.json +1 -0
  936. package/test/contracts/out/RegressionImplementation.sol/Implementation1.json +1 -0
  937. package/test/contracts/out/RegressionImplementation.sol/Implementation2.json +1 -0
  938. package/test/contracts/out/RegressionImplementation.sol/Implementation3.json +1 -0
  939. package/test/contracts/out/RegressionImplementation.sol/Implementation4.json +1 -0
  940. package/test/contracts/out/SafeCast.sol/SafeCast.json +1 -0
  941. package/test/contracts/out/SafeERC20.sol/SafeERC20.json +1 -0
  942. package/test/contracts/out/SafeMath.sol/SafeMath.json +1 -0
  943. package/test/contracts/out/SafeMathMemoryCheck.sol/SafeMathMemoryCheck.json +1 -0
  944. package/test/contracts/out/Script.sol/Script.json +1 -0
  945. package/test/contracts/out/ShortStrings.sol/ShortStrings.json +1 -0
  946. package/test/contracts/out/ShortStrings.t.sol/ShortStringsTest.json +1 -0
  947. package/test/contracts/out/SignatureChecker.sol/SignatureChecker.json +1 -0
  948. package/test/contracts/out/SignedMath.sol/SignedMath.json +1 -0
  949. package/test/contracts/out/SignedSafeMath.sol/SignedSafeMath.json +1 -0
  950. package/test/contracts/out/SingleInheritanceInitializableMocks.sol/MigratableMockV1.json +1 -0
  951. package/test/contracts/out/SingleInheritanceInitializableMocks.sol/MigratableMockV2.json +1 -0
  952. package/test/contracts/out/SingleInheritanceInitializableMocks.sol/MigratableMockV3.json +1 -0
  953. package/test/contracts/out/StdAssertions.sol/StdAssertions.json +1 -0
  954. package/test/contracts/out/StdAssertions.t.sol/StdAssertionsTest.json +1 -0
  955. package/test/contracts/out/StdAssertions.t.sol/TestMockCall.json +1 -0
  956. package/test/contracts/out/StdAssertions.t.sol/TestTest.json +1 -0
  957. package/test/contracts/out/StdChains.sol/StdChains.json +1 -0
  958. package/test/contracts/out/StdChains.t.sol/StdChainsTest.json +1 -0
  959. package/test/contracts/out/StdCheats.sol/StdCheats.json +1 -0
  960. package/test/contracts/out/StdCheats.sol/StdCheatsSafe.json +1 -0
  961. package/test/contracts/out/StdCheats.t.sol/Bar.json +1 -0
  962. package/test/contracts/out/StdCheats.t.sol/BarERC1155.json +1 -0
  963. package/test/contracts/out/StdCheats.t.sol/BarERC721.json +1 -0
  964. package/test/contracts/out/StdCheats.t.sol/RevertingContract.json +1 -0
  965. package/test/contracts/out/StdCheats.t.sol/StdCheatsTest.json +1 -0
  966. package/test/contracts/out/StdError.sol/stdError.json +1 -0
  967. package/test/contracts/out/StdError.t.sol/ErrorsTest.json +1 -0
  968. package/test/contracts/out/StdError.t.sol/StdErrorsTest.json +1 -0
  969. package/test/contracts/out/StdInvariant.sol/StdInvariant.json +1 -0
  970. package/test/contracts/out/StdJson.sol/stdJson.json +1 -0
  971. package/test/contracts/out/StdMath.sol/stdMath.json +1 -0
  972. package/test/contracts/out/StdMath.t.sol/StdMathTest.json +1 -0
  973. package/test/contracts/out/StdStorage.sol/stdStorage.json +1 -0
  974. package/test/contracts/out/StdStorage.sol/stdStorageSafe.json +1 -0
  975. package/test/contracts/out/StdStorage.t.sol/StdStorageTest.json +1 -0
  976. package/test/contracts/out/StdStorage.t.sol/StorageTest.json +1 -0
  977. package/test/contracts/out/StdStyle.sol/StdStyle.json +1 -0
  978. package/test/contracts/out/StdStyle.t.sol/StdStyleTest.json +1 -0
  979. package/test/contracts/out/StdUtils.sol/StdUtils.json +1 -0
  980. package/test/contracts/out/StdUtils.t.sol/StdUtilsForkTest.json +1 -0
  981. package/test/contracts/out/StdUtils.t.sol/StdUtilsMock.json +1 -0
  982. package/test/contracts/out/StdUtils.t.sol/StdUtilsTest.json +1 -0
  983. package/test/contracts/out/StorageSlot.sol/StorageSlot.json +1 -0
  984. package/test/contracts/out/StorageSlotMock.sol/StorageSlotMock.json +1 -0
  985. package/test/contracts/out/Strings.sol/Strings.json +1 -0
  986. package/test/contracts/out/TimelockController.sol/TimelockController.json +1 -0
  987. package/test/contracts/out/TimelockReentrant.sol/TimelockReentrant.json +1 -0
  988. package/test/contracts/out/Timers.sol/Timers.json +1 -0
  989. package/test/contracts/out/TimersBlockNumberImpl.sol/TimersBlockNumberImpl.json +1 -0
  990. package/test/contracts/out/TimersTimestampImpl.sol/TimersTimestampImpl.json +1 -0
  991. package/test/contracts/out/TokenTimelock.sol/TokenTimelock.json +1 -0
  992. package/test/contracts/out/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +1 -0
  993. package/test/contracts/out/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +1 -0
  994. package/test/contracts/out/UUPSLegacy.sol/UUPSUpgradeableLegacyMock.json +1 -0
  995. package/test/contracts/out/UUPSUpgradeable.sol/UUPSUpgradeable.json +1 -0
  996. package/test/contracts/out/UUPSUpgradeableMock.sol/NonUpgradeableMock.json +1 -0
  997. package/test/contracts/out/UUPSUpgradeableMock.sol/UUPSUpgradeableMock.json +1 -0
  998. package/test/contracts/out/UUPSUpgradeableMock.sol/UUPSUpgradeableUnsafeMock.json +1 -0
  999. package/test/contracts/out/UpgradeableBeacon.sol/UpgradeableBeacon.json +1 -0
  1000. package/test/contracts/out/VestingWallet.sol/VestingWallet.json +1 -0
  1001. package/test/contracts/out/Vm.sol/Vm.json +1 -0
  1002. package/test/contracts/out/Vm.sol/VmSafe.json +1 -0
  1003. package/test/contracts/out/Votes.sol/Votes.json +1 -0
  1004. package/test/contracts/out/VotesMock.sol/VotesMock.json +1 -0
  1005. package/test/contracts/out/VotesMock.sol/VotesTimestampMock.json +1 -0
  1006. package/test/contracts/out/VotesTimestamp.sol/ERC20VotesCompTimestampMock.json +1 -0
  1007. package/test/contracts/out/VotesTimestamp.sol/ERC20VotesTimestampMock.json +1 -0
  1008. package/test/contracts/out/VotesTimestamp.sol/ERC721VotesTimestampMock.json +1 -0
  1009. package/test/contracts/out/bridges.sol/BaseRelayMock.json +1 -0
  1010. package/test/contracts/out/bridges.sol/BridgeAMBMock.json +1 -0
  1011. package/test/contracts/out/bridges.sol/BridgeArbitrumL1Inbox.json +1 -0
  1012. package/test/contracts/out/bridges.sol/BridgeArbitrumL1Mock.json +1 -0
  1013. package/test/contracts/out/bridges.sol/BridgeArbitrumL1Outbox.json +1 -0
  1014. package/test/contracts/out/bridges.sol/BridgeArbitrumL2Mock.json +1 -0
  1015. package/test/contracts/out/bridges.sol/BridgeOptimismMock.json +1 -0
  1016. package/test/contracts/out/bridges.sol/BridgePolygonChildMock.json +1 -0
  1017. package/test/contracts/out/build-info/2be03bb8eb1ccda1.json +1 -0
  1018. package/test/contracts/out/console.sol/console.json +1 -0
  1019. package/test/contracts/out/console2.sol/console2.json +1 -0
  1020. package/test/contracts/out/demo.sol/DemoTest.json +1 -0
  1021. package/test/contracts/out/demo.sol/DemoTestWithSetUp.json +1 -0
  1022. package/test/contracts/out/draft-IERC1822.sol/IERC1822Proxiable.json +1 -0
  1023. package/test/contracts/out/interfaces/IERC1155.sol/IERC1155.json +1 -0
  1024. package/test/contracts/out/interfaces/IERC165.sol/IERC165.json +1 -0
  1025. package/test/contracts/out/interfaces/IERC20.sol/IERC20.json +1 -0
  1026. package/test/contracts/out/interfaces/IERC4626.sol/IERC4626.json +1 -0
  1027. package/test/contracts/out/interfaces/IERC721.sol/IERC721.json +1 -0
  1028. package/test/contracts/out/receivers.sol/CrossChainEnabledAMBMock.json +1 -0
  1029. package/test/contracts/out/receivers.sol/CrossChainEnabledArbitrumL1Mock.json +1 -0
  1030. package/test/contracts/out/receivers.sol/CrossChainEnabledArbitrumL2Mock.json +1 -0
  1031. package/test/contracts/out/receivers.sol/CrossChainEnabledOptimismMock.json +1 -0
  1032. package/test/contracts/out/receivers.sol/CrossChainEnabledPolygonChildMock.json +1 -0
  1033. package/test/contracts/out/receivers.sol/Receiver.json +1 -0
  1034. package/test/contracts/out/test.sol/DSTest.json +1 -0
  1035. package/test/contracts/out/test.sol/Test.json +1 -0
  1036. package/test/contracts/out/test.t.sol/DemoTest.json +1 -0
  1037. package/test/database-api.e2e.test.ts +666 -0
  1038. package/test/debug-anvil.ts +44 -0
  1039. package/test/deferred-restart.e2e.test.ts +368 -0
  1040. package/test/discord-connector.e2e.test.ts +463 -0
  1041. package/test/e2e-global-setup.ts +29 -0
  1042. package/test/e2e-validation.e2e.test.ts +1588 -0
  1043. package/test/health-endpoint.e2e.test.ts +95 -0
  1044. package/test/knowledge-e2e-flow.e2e.test.ts +134 -0
  1045. package/test/knowledge-live.e2e.test.ts +405 -0
  1046. package/test/mcp-config.e2e.test.ts +630 -0
  1047. package/test/native-modules.e2e.test.ts +470 -0
  1048. package/test/permissions-api.e2e.test.ts +637 -0
  1049. package/test/plugin-install.e2e.test.ts +645 -0
  1050. package/test/plugin-lifecycle.e2e.test.ts +617 -0
  1051. package/test/plugin-management.e2e.test.ts +308 -0
  1052. package/test/provider-switch.e2e.test.ts +322 -0
  1053. package/test/scripts/test-force.ts +139 -0
  1054. package/test/scripts/test-parallel.mjs +192 -0
  1055. package/test/scripts/validate-all-features.sh +557 -0
  1056. package/test/setup.ts +122 -0
  1057. package/test/signal-connector.e2e.test.ts +229 -0
  1058. package/test/skills-marketplace-api.e2e.test.ts +585 -0
  1059. package/test/skills-marketplace-services.e2e.test.ts +518 -0
  1060. package/test/skills-marketplace.e2e.test.ts +268 -0
  1061. package/test/stubs/coding-agent-module.ts +18 -0
  1062. package/test/stubs/electron-module.ts +17 -0
  1063. package/test/stubs/empty-module.mjs +4 -0
  1064. package/test/stubs/pi-ai-module.ts +12 -0
  1065. package/test/subscription-auth.e2e.test.ts +747 -0
  1066. package/test/terminal-execution.e2e.test.ts +134 -0
  1067. package/test/terminal-run-limits.e2e.test.ts +132 -0
  1068. package/test/test-env.ts +156 -0
  1069. package/test/trajectory-collection.e2e.test.ts +800 -0
  1070. package/test/trajectory-database.e2e.test.ts +209 -0
  1071. package/test/trajectory-embedding-filter.e2e.test.ts +317 -0
  1072. package/test/trajectory-restart-carryover.e2e.test.ts +306 -0
  1073. package/test/trigger-execution-flow.e2e.test.ts +132 -0
  1074. package/test/trigger-runtime.e2e.test.ts +247 -0
  1075. package/test/wallet-api.e2e.test.ts +1295 -0
  1076. package/test/wallet-live.e2e.test.ts +428 -0
  1077. package/vitest.e2e.config.ts +71 -0
@@ -0,0 +1,1588 @@
1
+ /**
2
+ * End-to-End Validation Tests — GitHub Issue #6
3
+ *
4
+ * Comprehensive E2E tests covering the full Milady validation matrix:
5
+ *
6
+ * 1. Fresh install simulation (build → CLI boot → onboarding → agent running)
7
+ * 2. CLI entry point test (npx miladyai equivalent)
8
+ * 3. Plugin stress test (all plugins loaded simultaneously)
9
+ * 4. Long-running session test (simulated via timeout-based operations)
10
+ * 5. Context integrity test (no corruption after multiple operations)
11
+ * 6. Deadlock detection test (concurrent operations under load)
12
+ * 7. Memory leak detection patterns
13
+ * 8. Rapid sequential operations
14
+ *
15
+ * NO MOCKS — all tests use real production code paths.
16
+ */
17
+ import { execFile } from "node:child_process";
18
+ import { promisify } from "node:util";
19
+
20
+ const execFileAsync = promisify(execFile);
21
+
22
+ import crypto from "node:crypto";
23
+ import fs from "node:fs";
24
+ import http from "node:http";
25
+ import os from "node:os";
26
+ import path from "node:path";
27
+ import { fileURLToPath } from "node:url";
28
+ import {
29
+ AgentRuntime,
30
+ ChannelType,
31
+ createCharacter,
32
+ createMessageMemory,
33
+ logger,
34
+ type Plugin,
35
+ stringToUuid,
36
+ type UUID,
37
+ } from "@elizaos/core";
38
+ import dotenv from "dotenv";
39
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
40
+ import { validateRuntimeContext } from "../src/api/plugin-validation";
41
+ import { startApiServer } from "../src/api/server";
42
+ import { ensureAgentWorkspace } from "../src/providers/workspace";
43
+ import {
44
+ extractPlugin,
45
+ isPackageImportResolvable,
46
+ type PluginModuleShape,
47
+ } from "../src/test-support/test-helpers";
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Environment
51
+ // ---------------------------------------------------------------------------
52
+
53
+ const testDir = path.dirname(fileURLToPath(import.meta.url));
54
+ const packageRoot = path.resolve(testDir, "..");
55
+
56
+ type RootPackageManifest = {
57
+ bin?: { milady?: string; miladyai?: string };
58
+ exports?: Record<string, string>;
59
+ engines?: { node?: string };
60
+ dependencies?: Record<string, string>;
61
+ };
62
+
63
+ const packageManifest = JSON.parse(
64
+ fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8"),
65
+ ) as RootPackageManifest;
66
+ const cliEntryRelativePath =
67
+ packageManifest.bin?.miladyai ?? packageManifest.bin?.milady ?? "milady.mjs";
68
+ const cliEntryPath = path.join(packageRoot, cliEntryRelativePath);
69
+
70
+ function fileExistsAny(candidates: string[]): boolean {
71
+ return candidates.some((candidate) => fs.existsSync(candidate));
72
+ }
73
+
74
+ dotenv.config({ path: path.resolve(packageRoot, ".env") });
75
+ dotenv.config({ path: path.resolve(packageRoot, "..", "eliza", ".env") });
76
+
77
+ const hasOpenAI = Boolean(process.env.OPENAI_API_KEY);
78
+ const hasAnthropic = Boolean(process.env.ANTHROPIC_API_KEY);
79
+ const hasGroq = Boolean(process.env.GROQ_API_KEY);
80
+ const liveModelTestsEnabled = process.env.MILADY_LIVE_TEST === "1";
81
+ const hasModelProvider =
82
+ liveModelTestsEnabled && (hasOpenAI || hasAnthropic || hasGroq);
83
+
84
+ // ---------------------------------------------------------------------------
85
+ const pluginLoadResults: Array<{
86
+ name: string;
87
+ loaded: boolean;
88
+ error?: string;
89
+ loadTimeMs: number;
90
+ }> = [];
91
+
92
+ async function loadPlugin(name: string): Promise<Plugin | null> {
93
+ const start = performance.now();
94
+ try {
95
+ const p = extractPlugin(
96
+ (await import(name)) as PluginModuleShape,
97
+ ) as Plugin | null;
98
+ const elapsed = performance.now() - start;
99
+ pluginLoadResults.push({
100
+ name,
101
+ loaded: p !== null,
102
+ error: p ? undefined : "no valid Plugin export",
103
+ loadTimeMs: elapsed,
104
+ });
105
+ return p;
106
+ } catch (err) {
107
+ const elapsed = performance.now() - start;
108
+ const msg = err instanceof Error ? err.message : String(err);
109
+ pluginLoadResults.push({
110
+ name,
111
+ loaded: false,
112
+ error: msg,
113
+ loadTimeMs: elapsed,
114
+ });
115
+ logger.warn(`[e2e-validation] FAILED to load plugin ${name}: ${msg}`);
116
+ return null;
117
+ }
118
+ }
119
+
120
+ function partitionResolvablePlugins(names: readonly string[]): {
121
+ resolvable: string[];
122
+ missing: string[];
123
+ } {
124
+ const resolvable: string[] = [];
125
+ const missing: string[] = [];
126
+
127
+ for (const name of names) {
128
+ if (isPackageImportResolvable(name)) {
129
+ resolvable.push(name);
130
+ } else {
131
+ missing.push(name);
132
+ }
133
+ }
134
+
135
+ return { resolvable, missing };
136
+ }
137
+
138
+ // ---------------------------------------------------------------------------
139
+ // HTTP helper
140
+ // ---------------------------------------------------------------------------
141
+
142
+ function http$(
143
+ port: number,
144
+ method: string,
145
+ p: string,
146
+ body?: Record<string, unknown>,
147
+ timeoutMs: number = 30_000,
148
+ ): Promise<{ status: number; data: Record<string, unknown> }> {
149
+ return new Promise((resolve, reject) => {
150
+ const timer = setTimeout(
151
+ () => reject(new Error(`HTTP request timed out: ${method} ${p}`)),
152
+ timeoutMs,
153
+ );
154
+ const b = body ? JSON.stringify(body) : undefined;
155
+ const req = http.request(
156
+ {
157
+ hostname: "127.0.0.1",
158
+ port,
159
+ path: p,
160
+ method,
161
+ headers: {
162
+ "Content-Type": "application/json",
163
+ ...(b ? { "Content-Length": Buffer.byteLength(b) } : {}),
164
+ },
165
+ },
166
+ (res) => {
167
+ const ch: Buffer[] = [];
168
+ res.on("data", (c: Buffer) => ch.push(c));
169
+ res.on("end", () => {
170
+ clearTimeout(timer);
171
+ const raw = Buffer.concat(ch).toString("utf-8");
172
+ let data: Record<string, unknown> = {};
173
+ try {
174
+ data = JSON.parse(raw) as Record<string, unknown>;
175
+ } catch {
176
+ data = { _raw: raw };
177
+ }
178
+ resolve({ status: res.statusCode ?? 0, data });
179
+ });
180
+ },
181
+ );
182
+ req.on("error", (err) => {
183
+ clearTimeout(timer);
184
+ reject(err);
185
+ });
186
+ if (b) req.write(b);
187
+ req.end();
188
+ });
189
+ }
190
+
191
+ function withTimeout<T>(
192
+ promise: Promise<T>,
193
+ ms: number,
194
+ label: string,
195
+ ): Promise<T> {
196
+ let timeoutHandle: ReturnType<typeof setTimeout> | null = null;
197
+ const timeoutPromise = new Promise<never>((_, reject) => {
198
+ timeoutHandle = setTimeout(() => {
199
+ reject(new Error(`${label} timed out after ${ms}ms`));
200
+ }, ms);
201
+ });
202
+ return Promise.race([promise, timeoutPromise]).finally(() => {
203
+ if (timeoutHandle) {
204
+ clearTimeout(timeoutHandle);
205
+ }
206
+ });
207
+ }
208
+
209
+ interface AutonomyServiceLike {
210
+ setLoopInterval(ms: number): void;
211
+ }
212
+
213
+ async function handleMessageAndCollectText(
214
+ runtime: AgentRuntime,
215
+ message: ReturnType<typeof createMessageMemory>,
216
+ ): Promise<string> {
217
+ let responseText = "";
218
+ const result = await runtime.messageService?.handleMessage(
219
+ runtime,
220
+ message,
221
+ async (content: { text?: string }) => {
222
+ if (content.text) responseText += content.text;
223
+ return [];
224
+ },
225
+ );
226
+ if (!responseText && result?.responseContent?.text) {
227
+ responseText = result.responseContent.text;
228
+ }
229
+ return responseText;
230
+ }
231
+
232
+ const modelProviderUnavailablePattern =
233
+ /exceeded your current quota|insufficient[_\s-]?quota|billing details|credit balance|rate limit|status code: 429|too many requests|invalid api key|unauthorized|authentication/i;
234
+
235
+ let cachedModelProviderUnavailableReason: string | null = null;
236
+
237
+ function errorMessage(err: unknown): string {
238
+ return err instanceof Error ? err.message : String(err);
239
+ }
240
+
241
+ function isModelProviderUnavailableError(message: string): boolean {
242
+ return modelProviderUnavailablePattern.test(message);
243
+ }
244
+
245
+ async function getGeneratedText(result: unknown): Promise<string> {
246
+ if (typeof result === "string") return result.trim();
247
+ if (!result || typeof result !== "object") {
248
+ return String(result ?? "").trim();
249
+ }
250
+ const textValue = (result as { text?: unknown }).text;
251
+ if (
252
+ textValue &&
253
+ typeof textValue === "object" &&
254
+ typeof (textValue as PromiseLike<unknown>).then === "function"
255
+ ) {
256
+ return String(await (textValue as PromiseLike<unknown>)).trim();
257
+ }
258
+ return String(textValue ?? "").trim();
259
+ }
260
+
261
+ async function shouldSkipDueModelProviderUnavailable(
262
+ runtime: AgentRuntime,
263
+ testName: string,
264
+ ): Promise<boolean> {
265
+ if (cachedModelProviderUnavailableReason) {
266
+ logger.warn(
267
+ `[e2e-validation] Skipping "${testName}" due to provider limit: ${cachedModelProviderUnavailableReason}`,
268
+ );
269
+ return true;
270
+ }
271
+
272
+ for (let attempt = 1; attempt <= 2; attempt += 1) {
273
+ try {
274
+ const probe = await runtime.generateText("Reply with exactly: ok", {
275
+ maxTokens: 32,
276
+ });
277
+ const text = await getGeneratedText(probe);
278
+ if (text.length > 0) return false;
279
+ } catch (err) {
280
+ const message = errorMessage(err);
281
+ if (isModelProviderUnavailableError(message)) {
282
+ cachedModelProviderUnavailableReason = message;
283
+ logger.warn(
284
+ `[e2e-validation] Skipping "${testName}" due to provider limit: ${message}`,
285
+ );
286
+ return true;
287
+ }
288
+ }
289
+ await new Promise((resolve) => {
290
+ setTimeout(resolve, 250 * attempt);
291
+ });
292
+ }
293
+
294
+ return false;
295
+ }
296
+
297
+ // ---------------------------------------------------------------------------
298
+ // Subprocess helper
299
+ // ---------------------------------------------------------------------------
300
+
301
+ // ===================================================================
302
+ // 1. FRESH INSTALL SIMULATION
303
+ // ===================================================================
304
+
305
+ describe("Fresh Install Simulation", () => {
306
+ it("builds successfully (dist/ exists)", () => {
307
+ const distDir = path.join(packageRoot, "dist");
308
+ expect(fs.existsSync(distDir)).toBe(true);
309
+ expect(
310
+ fileExistsAny([
311
+ path.join(distDir, "index.js"),
312
+ path.join(distDir, "index"),
313
+ ]),
314
+ ).toBe(true);
315
+ });
316
+
317
+ it("CLI entry point exists and is executable", () => {
318
+ expect(fs.existsSync(cliEntryPath)).toBe(true);
319
+ const content = fs.readFileSync(cliEntryPath, "utf-8");
320
+ expect(content).toContain("#!/usr/bin/env node");
321
+ });
322
+
323
+ it("CLI boots and prints help without errors", async () => {
324
+ const outPath = path.join(
325
+ os.tmpdir(),
326
+ `milady-cli-out-${Date.now()}-${Math.random().toString(36).slice(2)}.txt`,
327
+ );
328
+ try {
329
+ await execFileAsync(
330
+ "sh",
331
+ ["-c", `node ${cliEntryPath} --help > ${outPath} 2>&1`],
332
+ { timeout: 30_000 },
333
+ );
334
+ } catch {
335
+ // ignore Commander throwing if it throws
336
+ }
337
+ const output = fs.existsSync(outPath)
338
+ ? fs.readFileSync(outPath, "utf-8")
339
+ : "";
340
+ if (fs.existsSync(outPath)) fs.unlinkSync(outPath);
341
+
342
+ expect(output).toContain("milady");
343
+ }, 45_000);
344
+
345
+ it("API server starts and serves status endpoint", async () => {
346
+ const srv = await startApiServer({ port: 0 });
347
+ try {
348
+ const { status, data } = await http$(srv.port, "GET", "/api/status");
349
+ expect(status).toBe(200);
350
+ expect(data.state).toBe("not_started");
351
+ expect(typeof data.agentName).toBe("string");
352
+ } finally {
353
+ await srv.close();
354
+ }
355
+ }, 30_000);
356
+
357
+ it("onboarding flow: POST /api/onboarding creates agent config", async () => {
358
+ const srv = await startApiServer({ port: 0 });
359
+ try {
360
+ const { status, data } = await http$(
361
+ srv.port,
362
+ "POST",
363
+ "/api/onboarding",
364
+ {
365
+ name: "FreshInstallAgent",
366
+ bio: ["A freshly installed test agent"],
367
+ systemPrompt: "You are a test agent for E2E validation.",
368
+ connection: {
369
+ kind: "local-provider",
370
+ provider: "anthropic",
371
+ },
372
+ },
373
+ );
374
+ expect(status).toBe(200);
375
+ expect(data.ok).toBe(true);
376
+
377
+ // Verify the name persists in status
378
+ const statusRes = await http$(srv.port, "GET", "/api/status");
379
+ expect(statusRes.data.agentName).toBe("FreshInstallAgent");
380
+ } finally {
381
+ await srv.close();
382
+ }
383
+ }, 30_000);
384
+
385
+ it("full lifecycle: not_started → start → running → stop", async () => {
386
+ const srv = await startApiServer({ port: 0 });
387
+ try {
388
+ // Initial state
389
+ const s0 = await http$(srv.port, "GET", "/api/status");
390
+ expect(s0.data.state).toBe("not_started");
391
+
392
+ // Start
393
+ const startRes = await http$(srv.port, "POST", "/api/agent/start");
394
+ expect(startRes.data.ok).toBe(true);
395
+ const s1 = await http$(srv.port, "GET", "/api/status");
396
+ expect(s1.data.state).toBe("paused");
397
+
398
+ // Stop
399
+ const stopRes = await http$(srv.port, "POST", "/api/agent/stop");
400
+ expect(stopRes.data.ok).toBe(true);
401
+ const s2 = await http$(srv.port, "GET", "/api/status");
402
+ expect(s2.data.state).toBe("stopped");
403
+ } finally {
404
+ await srv.close();
405
+ }
406
+ }, 30_000);
407
+ });
408
+
409
+ // ===================================================================
410
+ // 2. CLI ENTRY POINT TEST (npx miladyai equivalent)
411
+ // ===================================================================
412
+
413
+ describe("CLI Entry Point (npx miladyai equivalent)", () => {
414
+ it("dist entry artifact exists and is loadable", () => {
415
+ expect(
416
+ fileExistsAny([
417
+ path.join(packageRoot, "dist", "entry.js"),
418
+ path.join(packageRoot, "dist", "entry"),
419
+ ]),
420
+ ).toBe(true);
421
+ });
422
+
423
+ it("CLI version command outputs version string", async () => {
424
+ const outPath = path.join(
425
+ os.tmpdir(),
426
+ `milady-cli-out-${Date.now()}-${Math.random().toString(36).slice(2)}.txt`,
427
+ );
428
+ try {
429
+ await execFileAsync(
430
+ "sh",
431
+ ["-c", `node ${cliEntryPath} --version > ${outPath} 2>&1`],
432
+ { timeout: 30_000 },
433
+ );
434
+ } catch {
435
+ // ignore
436
+ }
437
+ const output = fs.existsSync(outPath)
438
+ ? fs.readFileSync(outPath, "utf-8")
439
+ : "";
440
+ if (fs.existsSync(outPath)) fs.unlinkSync(outPath);
441
+
442
+ // Should contain a semver-like version
443
+ expect(output).toMatch(/\d+\.\d+\.\d+/);
444
+ }, 45_000);
445
+
446
+ it.skip("startEliza() boots, shows chat prompt, exits on 'exit' (covered by test/agent-runtime.e2e.test.ts)", () => {});
447
+ });
448
+
449
+ // ===================================================================
450
+ // 3. PLUGIN STRESS TEST — All Plugins Loaded Simultaneously
451
+ // ===================================================================
452
+
453
+ describe("Plugin Stress Test", () => {
454
+ // All known plugin packages from the Milady ecosystem
455
+ const ALL_CORE_PLUGINS: readonly string[] = [
456
+ "@elizaos/plugin-sql",
457
+ "@elizaos/plugin-local-embedding",
458
+ "@elizaos/plugin-trajectory-logger",
459
+ "@elizaos/plugin-agent-skills",
460
+ "@elizaos/plugin-agent-orchestrator",
461
+ "@elizaos/plugin-directives",
462
+ "@elizaos/plugin-commands",
463
+ "@elizaos/plugin-shell",
464
+ "@elizaos/plugin-personality",
465
+ "@elizaos/plugin-experience",
466
+ "@elizaos/plugin-plugin-manager",
467
+ "@elizaos/plugin-browser",
468
+ "@elizaos/plugin-cli",
469
+ "@elizaos/plugin-code",
470
+ "@elizaos/plugin-computeruse",
471
+ "@elizaos/plugin-edge-tts",
472
+ "@elizaos/plugin-knowledge",
473
+ "@elizaos/plugin-mcp",
474
+ "@elizaos/plugin-pdf",
475
+ "@elizaos/plugin-scratchpad",
476
+ "@elizaos/plugin-secrets-manager",
477
+ "@elizaos/plugin-todo",
478
+ "@elizaos/plugin-trust",
479
+ "@elizaos/plugin-vision",
480
+ "@elizaos/plugin-cron",
481
+ "@elizaos/plugin-form",
482
+ "@elizaos/plugin-goals",
483
+ "@elizaos/plugin-scheduling",
484
+ ];
485
+
486
+ const PROVIDER_PLUGINS: readonly string[] = [
487
+ "@elizaos/plugin-openai",
488
+ "@elizaos/plugin-anthropic",
489
+ "@elizaos/plugin-groq",
490
+ "@elizaos/plugin-google-genai",
491
+ "@elizaos/plugin-xai",
492
+ "@elizaos/plugin-openrouter",
493
+ "@elizaos/plugin-ollama",
494
+ ];
495
+
496
+ const CONNECTOR_PLUGINS: readonly string[] = [
497
+ "@elizaos/plugin-discord",
498
+ "@elizaos/plugin-telegram",
499
+ "@elizaos/plugin-slack",
500
+ "@miladyai/plugin-whatsapp",
501
+ "@elizaos/plugin-signal",
502
+ "@elizaos/plugin-imessage",
503
+ "@elizaos/plugin-bluebubbles",
504
+ "@elizaos/plugin-msteams",
505
+ "@elizaos/plugin-mattermost",
506
+ ];
507
+
508
+ it("all core plugins load without crashing", async () => {
509
+ const { resolvable: corePlugins, missing: missingCorePlugins } =
510
+ partitionResolvablePlugins(ALL_CORE_PLUGINS);
511
+
512
+ logger.info(
513
+ `[e2e-validation] Core plugins resolvable in this workspace: ${corePlugins.length}/${ALL_CORE_PLUGINS.length}`,
514
+ );
515
+ if (missingCorePlugins.length > 0) {
516
+ logger.info(
517
+ `[e2e-validation] Core plugins missing from workspace: ${missingCorePlugins.join(", ")}`,
518
+ );
519
+ }
520
+
521
+ expect(corePlugins.length).toBeGreaterThan(0);
522
+
523
+ const results: Array<{ name: string; ok: boolean; error?: string }> = [];
524
+
525
+ for (const name of corePlugins) {
526
+ try {
527
+ const mod = (await import(name)) as PluginModule;
528
+ const p = extractPlugin(mod);
529
+ results.push({
530
+ name,
531
+ ok: p !== null,
532
+ error: p ? undefined : "no Plugin export",
533
+ });
534
+ } catch (err) {
535
+ const msg = err instanceof Error ? err.message : String(err);
536
+ results.push({ name, ok: false, error: msg });
537
+ }
538
+ }
539
+
540
+ const loaded = results.filter((r) => r.ok);
541
+ const failed = results.filter((r) => !r.ok);
542
+
543
+ logger.info(
544
+ `[e2e-validation] Core plugins loaded: ${loaded.length}/${corePlugins.length}`,
545
+ );
546
+ if (failed.length > 0) {
547
+ logger.warn(
548
+ `[e2e-validation] Failed core plugins: ${failed.map((f) => `${f.name}: ${f.error}`).join("; ")}`,
549
+ );
550
+ }
551
+
552
+ // Plugin availability varies by workspace/dependency state; require a
553
+ // baseline percentage of resolvable core plugins rather than the full list.
554
+ const minRequired = process.env.CI
555
+ ? Math.min(2, corePlugins.length)
556
+ : Math.max(2, Math.floor(corePlugins.length * 0.3));
557
+ expect(loaded.length).toBeGreaterThanOrEqual(minRequired);
558
+ }, 60_000);
559
+
560
+ it("provider plugins load in parallel without interference", async () => {
561
+ const loadPromises = PROVIDER_PLUGINS.map(async (name) => {
562
+ try {
563
+ const mod = (await import(name)) as PluginModule;
564
+ return { name, ok: extractPlugin(mod) !== null };
565
+ } catch {
566
+ return { name, ok: false };
567
+ }
568
+ });
569
+
570
+ const results = await Promise.all(loadPromises);
571
+ const loaded = results.filter((r) => r.ok);
572
+
573
+ logger.info(
574
+ `[e2e-validation] Provider plugins: ${loaded.length}/${PROVIDER_PLUGINS.length} loaded`,
575
+ );
576
+
577
+ // At least some providers should be loadable
578
+ expect(loaded.length).toBeGreaterThan(0);
579
+ }, 30_000);
580
+
581
+ it("connector plugins load without crashing each other", async () => {
582
+ const results: Array<{ name: string; ok: boolean }> = [];
583
+
584
+ for (const name of CONNECTOR_PLUGINS) {
585
+ try {
586
+ const mod = (await import(name)) as PluginModule;
587
+ results.push({ name, ok: extractPlugin(mod) !== null });
588
+ } catch {
589
+ results.push({ name, ok: false });
590
+ }
591
+ }
592
+
593
+ const loaded = results.filter((r) => r.ok);
594
+ logger.info(
595
+ `[e2e-validation] Connector plugins: ${loaded.length}/${CONNECTOR_PLUGINS.length} loaded`,
596
+ );
597
+
598
+ // Channel plugins may fail without credentials, but loading should not crash
599
+ // Just ensure no unhandled exceptions propagated
600
+ expect(true).toBe(true);
601
+ }, 30_000);
602
+
603
+ it("simultaneous plugin loading does not cause import deadlocks", async () => {
604
+ const { resolvable: corePlugins } =
605
+ partitionResolvablePlugins(ALL_CORE_PLUGINS);
606
+ const { resolvable: providerPlugins } = partitionResolvablePlugins(
607
+ PROVIDER_PLUGINS.slice(0, 3),
608
+ );
609
+ const allPlugins = [...corePlugins, ...providerPlugins];
610
+ expect(allPlugins.length).toBeGreaterThan(0);
611
+
612
+ const startTime = performance.now();
613
+
614
+ // Load all at once — this should NOT deadlock
615
+ const results = await Promise.allSettled(
616
+ allPlugins.map(async (name) => {
617
+ const mod = (await import(name)) as PluginModule;
618
+ return { name, plugin: extractPlugin(mod) };
619
+ }),
620
+ );
621
+
622
+ const elapsed = performance.now() - startTime;
623
+ const fulfilled = results.filter((r) => r.status === "fulfilled");
624
+ const rejected = results.filter((r) => r.status === "rejected");
625
+
626
+ logger.info(
627
+ `[e2e-validation] Parallel load: ${fulfilled.length} ok, ${rejected.length} failed, ${elapsed.toFixed(0)}ms`,
628
+ );
629
+
630
+ // Should complete within 60s (deadlock would exceed this)
631
+ expect(elapsed).toBeLessThan(60_000);
632
+ // In CI, native deps may prevent loading; require at least 2 (sanity check).
633
+ const minParallel = process.env.CI ? 2 : Math.ceil(allPlugins.length / 2);
634
+ expect(fulfilled.length).toBeGreaterThanOrEqual(minParallel);
635
+ }, 90_000);
636
+ });
637
+
638
+ // ===================================================================
639
+ // 4. LONG-RUNNING SESSION TEST
640
+ // ===================================================================
641
+
642
+ describe("Long-Running Session Simulation", () => {
643
+ let server: { port: number; close: () => Promise<void> } | null = null;
644
+
645
+ beforeAll(async () => {
646
+ server = await startApiServer({ port: 0 });
647
+ }, 30_000);
648
+
649
+ afterAll(async () => {
650
+ if (server) await server.close();
651
+ });
652
+
653
+ it("server stays healthy after 100 sequential status requests", async () => {
654
+ for (let i = 0; i < 100; i++) {
655
+ const { status, data } = await http$(server?.port, "GET", "/api/status");
656
+ expect(status).toBe(200);
657
+ expect(typeof data.agentName).toBe("string");
658
+ }
659
+ }, 60_000);
660
+
661
+ it("server handles mixed endpoint traffic without errors", async () => {
662
+ const endpoints: Array<[string, string]> = [
663
+ ["GET", "/api/status"],
664
+ ["GET", "/api/plugins"],
665
+ ["GET", "/api/logs"],
666
+ ["GET", "/api/config"],
667
+ ["GET", "/api/onboarding/status"],
668
+ ["GET", "/api/onboarding/options"],
669
+ ["GET", "/api/skills"],
670
+ ];
671
+
672
+ // Run 50 requests cycling through all endpoints
673
+ for (let i = 0; i < 50; i++) {
674
+ const [method, path] = endpoints[i % endpoints.length];
675
+ const { status } = await http$(server?.port, method, path);
676
+ expect(status).toBe(200);
677
+ }
678
+ }, 60_000);
679
+
680
+ it("state machine remains consistent after rapid state transitions", async () => {
681
+ // Rapidly cycle through states
682
+ for (let cycle = 0; cycle < 5; cycle++) {
683
+ await http$(server?.port, "POST", "/api/agent/start");
684
+ const s1 = await http$(server?.port, "GET", "/api/status");
685
+ expect(s1.data.state).toBe("paused");
686
+
687
+ await http$(server?.port, "POST", "/api/agent/pause");
688
+ const s2 = await http$(server?.port, "GET", "/api/status");
689
+ expect(s2.data.state).toBe("paused");
690
+
691
+ await http$(server?.port, "POST", "/api/agent/resume");
692
+ const s3 = await http$(server?.port, "GET", "/api/status");
693
+ expect(s3.data.state).toBe("running");
694
+
695
+ await http$(server?.port, "POST", "/api/agent/stop");
696
+ const s4 = await http$(server?.port, "GET", "/api/status");
697
+ expect(s4.data.state).toBe("stopped");
698
+ }
699
+ }, 30_000);
700
+
701
+ it("log buffer grows without memory leak patterns (bounded size)", async () => {
702
+ // Generate activity by toggling states
703
+ for (let i = 0; i < 20; i++) {
704
+ await http$(server?.port, "POST", "/api/agent/start");
705
+ await http$(server?.port, "POST", "/api/agent/stop");
706
+ }
707
+
708
+ const { data } = await http$(server?.port, "GET", "/api/logs");
709
+ const entries = data.entries as Array<Record<string, unknown>>;
710
+
711
+ // Log buffer should be bounded (not growing infinitely)
712
+ // Typical ring buffers cap at 500-2000 entries
713
+ expect(entries.length).toBeLessThan(10_000);
714
+ expect(entries.length).toBeGreaterThan(0);
715
+
716
+ // Verify entries have proper shape (no corruption)
717
+ for (const entry of entries.slice(0, 10)) {
718
+ expect(typeof entry.timestamp).toBe("number");
719
+ expect(typeof entry.level).toBe("string");
720
+ expect(typeof entry.message).toBe("string");
721
+ }
722
+ }, 30_000);
723
+ });
724
+
725
+ // ===================================================================
726
+ // 5. CONTEXT INTEGRITY TEST
727
+ // ===================================================================
728
+
729
+ describe("Context Integrity (no corruption)", () => {
730
+ it("validateRuntimeContext detects null fields", () => {
731
+ const context: Record<string, unknown> = {
732
+ agentName: "Test",
733
+ model: null,
734
+ pluginCount: 5,
735
+ };
736
+ const result = validateRuntimeContext(context);
737
+ expect(result.nullFields).toContain("model");
738
+ expect(result.valid).toBe(false);
739
+ });
740
+
741
+ it("validateRuntimeContext detects undefined fields", () => {
742
+ const context: Record<string, unknown> = {
743
+ agentName: "Test",
744
+ model: undefined,
745
+ };
746
+ const result = validateRuntimeContext(context);
747
+ expect(result.undefinedFields).toContain("model");
748
+ });
749
+
750
+ it("validateRuntimeContext detects empty strings", () => {
751
+ const context: Record<string, unknown> = {
752
+ agentName: "",
753
+ model: "gpt-4",
754
+ };
755
+ const result = validateRuntimeContext(context);
756
+ expect(result.emptyFields).toContain("agentName");
757
+ });
758
+
759
+ it("validateRuntimeContext detects non-serializable values", () => {
760
+ const context: Record<string, unknown> = {
761
+ agentName: "Test",
762
+ callback: () => {},
763
+ sym: Symbol("test"),
764
+ };
765
+ const result = validateRuntimeContext(context);
766
+ expect(result.nonSerializableFields.length).toBeGreaterThan(0);
767
+ expect(result.serializable).toBe(false);
768
+ });
769
+
770
+ it("validateRuntimeContext handles nested objects", () => {
771
+ const context: Record<string, unknown> = {
772
+ agent: {
773
+ name: "Test",
774
+ config: {
775
+ model: null,
776
+ plugins: { count: 5, list: "" },
777
+ },
778
+ },
779
+ };
780
+ const result = validateRuntimeContext(context);
781
+ expect(result.nullFields).toContain("agent.config.model");
782
+ expect(result.emptyFields).toContain("agent.config.plugins.list");
783
+ });
784
+
785
+ it("valid context passes all checks", () => {
786
+ const context: Record<string, unknown> = {
787
+ agentName: "TestAgent",
788
+ pluginCount: 10,
789
+ providerCount: 2,
790
+ primaryModel: "anthropic",
791
+ workspaceDir: "/tmp/test",
792
+ };
793
+ const result = validateRuntimeContext(context);
794
+ expect(result.valid).toBe(true);
795
+ expect(result.serializable).toBe(true);
796
+ expect(result.nullFields.length).toBe(0);
797
+ expect(result.undefinedFields.length).toBe(0);
798
+ expect(result.emptyFields.length).toBe(0);
799
+ expect(result.nonSerializableFields.length).toBe(0);
800
+ });
801
+
802
+ it("config round-trip preserves integrity", async () => {
803
+ const srv = await startApiServer({ port: 0 });
804
+ try {
805
+ // Get original config
806
+ const { data: original } = await http$(srv.port, "GET", "/api/config");
807
+
808
+ // Write modified config — use "features" (an allowed top-level key)
809
+ const modified = {
810
+ ...original,
811
+ features: {
812
+ test_integrity: {
813
+ enabled: true,
814
+ timestamp: Date.now(),
815
+ nested: { value: 42, text: "integrity-check" },
816
+ },
817
+ },
818
+ };
819
+ await http$(srv.port, "PUT", "/api/config", modified);
820
+
821
+ // Read back and verify no corruption
822
+ const { data: readBack } = await http$(srv.port, "GET", "/api/config");
823
+ const features = readBack.features as Record<
824
+ string,
825
+ Record<string, unknown>
826
+ >;
827
+ const testData = features.test_integrity as Record<
828
+ string,
829
+ Record<string, unknown>
830
+ >;
831
+ expect(testData.nested.value).toBe(42);
832
+ expect(testData.nested.text).toBe("integrity-check");
833
+
834
+ // Restore
835
+ await http$(srv.port, "PUT", "/api/config", original);
836
+ } finally {
837
+ await srv.close();
838
+ }
839
+ }, 30_000);
840
+
841
+ it("multiple concurrent config writes do not corrupt state", async () => {
842
+ const srv = await startApiServer({ port: 0 });
843
+ try {
844
+ // Fire 10 concurrent writes with different values — use "features" (allowed key)
845
+ const writes = Array.from({ length: 10 }, (_, i) =>
846
+ http$(srv.port, "PUT", "/api/config", {
847
+ features: {
848
+ concurrent_test: {
849
+ enabled: true,
850
+ iteration: i,
851
+ timestamp: Date.now(),
852
+ },
853
+ },
854
+ }),
855
+ );
856
+ const results = await Promise.all(writes);
857
+
858
+ // All should succeed (no crashes)
859
+ for (const r of results) {
860
+ expect(r.status).toBe(200);
861
+ }
862
+
863
+ // Final read should have a valid config (one of the writes wins)
864
+ const { status, data } = await http$(srv.port, "GET", "/api/config");
865
+ expect(status).toBe(200);
866
+ const features = data.features as Record<string, Record<string, unknown>>;
867
+ expect(typeof features.concurrent_test.iteration).toBe("number");
868
+ } finally {
869
+ await srv.close();
870
+ }
871
+ }, 30_000);
872
+ });
873
+
874
+ // ===================================================================
875
+ // 6. DEADLOCK DETECTION
876
+ // ===================================================================
877
+
878
+ describe("Deadlock Detection", () => {
879
+ it("concurrent requests to different endpoints complete within timeout", async () => {
880
+ const srv = await startApiServer({ port: 0 });
881
+ try {
882
+ const startTime = performance.now();
883
+
884
+ // Fire many concurrent requests to different endpoints
885
+ const requests = [
886
+ ...Array.from({ length: 10 }, () =>
887
+ http$(srv.port, "GET", "/api/status"),
888
+ ),
889
+ ...Array.from({ length: 10 }, () =>
890
+ http$(srv.port, "GET", "/api/plugins"),
891
+ ),
892
+ ...Array.from({ length: 10 }, () =>
893
+ http$(srv.port, "GET", "/api/logs"),
894
+ ),
895
+ ...Array.from({ length: 5 }, () =>
896
+ http$(srv.port, "GET", "/api/config"),
897
+ ),
898
+ ...Array.from({ length: 5 }, () =>
899
+ http$(srv.port, "GET", "/api/skills"),
900
+ ),
901
+ ];
902
+
903
+ const results = await Promise.all(requests);
904
+ const elapsed = performance.now() - startTime;
905
+
906
+ // All should complete
907
+ for (const r of results) {
908
+ expect(r.status).toBe(200);
909
+ }
910
+
911
+ // Should complete within 30s (deadlock would timeout)
912
+ expect(elapsed).toBeLessThan(30_000);
913
+
914
+ logger.info(
915
+ `[e2e-validation] ${requests.length} concurrent requests completed in ${elapsed.toFixed(0)}ms`,
916
+ );
917
+ } finally {
918
+ await srv.close();
919
+ }
920
+ }, 45_000);
921
+
922
+ it("rapid state transitions do not cause deadlock", async () => {
923
+ const srv = await startApiServer({ port: 0 });
924
+ try {
925
+ const startTime = performance.now();
926
+
927
+ // Rapid fire state transitions — these interact with shared state
928
+ const transitions: Array<
929
+ Promise<{ status: number; data: Record<string, unknown> }>
930
+ > = [];
931
+ for (let i = 0; i < 20; i++) {
932
+ transitions.push(http$(srv.port, "POST", "/api/agent/start"));
933
+ transitions.push(http$(srv.port, "POST", "/api/agent/stop"));
934
+ }
935
+
936
+ // Wait for all — if there's a deadlock, this will timeout
937
+ const results = await Promise.allSettled(transitions);
938
+ const elapsed = performance.now() - startTime;
939
+
940
+ const fulfilled = results.filter((r) => r.status === "fulfilled");
941
+ expect(fulfilled.length).toBe(results.length);
942
+ expect(elapsed).toBeLessThan(30_000);
943
+ } finally {
944
+ await srv.close();
945
+ }
946
+ }, 45_000);
947
+
948
+ it("interleaved read/write operations do not deadlock", async () => {
949
+ const srv = await startApiServer({ port: 0 });
950
+ try {
951
+ // Interleave reads and writes
952
+ const ops: Array<
953
+ Promise<{ status: number; data: Record<string, unknown> }>
954
+ > = [];
955
+ for (let i = 0; i < 20; i++) {
956
+ ops.push(http$(srv.port, "GET", "/api/config"));
957
+ ops.push(
958
+ http$(srv.port, "PUT", "/api/config", {
959
+ features: { deadlock_test: { enabled: true, i, ts: Date.now() } },
960
+ }),
961
+ );
962
+ ops.push(http$(srv.port, "GET", "/api/status"));
963
+ ops.push(http$(srv.port, "GET", "/api/plugins"));
964
+ }
965
+
966
+ const results = await Promise.allSettled(ops);
967
+ const fulfilled = results.filter((r) => r.status === "fulfilled");
968
+
969
+ // All should complete without deadlock
970
+ expect(fulfilled.length).toBe(results.length);
971
+ } finally {
972
+ await srv.close();
973
+ }
974
+ }, 45_000);
975
+ });
976
+
977
+ // ===================================================================
978
+ // 7. MEMORY LEAK DETECTION PATTERNS
979
+ // ===================================================================
980
+
981
+ describe("Memory Leak Detection", () => {
982
+ it("repeated server start/stop does not leak file descriptors", async () => {
983
+ // Start and stop the server 10 times — leaked sockets would cause EMFILE
984
+ for (let i = 0; i < 10; i++) {
985
+ const srv = await startApiServer({ port: 0 });
986
+ const { status } = await http$(srv.port, "GET", "/api/status");
987
+ expect(status).toBe(200);
988
+ await srv.close();
989
+ }
990
+
991
+ // If we got here, no EMFILE error occurred
992
+ expect(true).toBe(true);
993
+ }, 60_000);
994
+
995
+ it("heap usage stays bounded after many requests", async () => {
996
+ const srv = await startApiServer({ port: 0 });
997
+ try {
998
+ // Force GC if available
999
+ if (global.gc) global.gc();
1000
+ const heapBefore = process.memoryUsage().heapUsed;
1001
+
1002
+ // Generate 200 requests
1003
+ for (let i = 0; i < 200; i++) {
1004
+ await http$(srv.port, "GET", "/api/status");
1005
+ if (i % 50 === 0 && global.gc) global.gc();
1006
+ }
1007
+
1008
+ if (global.gc) global.gc();
1009
+ const heapAfter = process.memoryUsage().heapUsed;
1010
+ const heapGrowthMB = (heapAfter - heapBefore) / (1024 * 1024);
1011
+
1012
+ logger.info(
1013
+ `[e2e-validation] Heap growth after 200 requests: ${heapGrowthMB.toFixed(2)}MB`,
1014
+ );
1015
+
1016
+ // Heap growth should be bounded — a leak would show unbounded growth
1017
+ // Allow up to 50MB growth (includes test framework overhead)
1018
+ expect(heapGrowthMB).toBeLessThan(50);
1019
+ } finally {
1020
+ await srv.close();
1021
+ }
1022
+ }, 60_000);
1023
+
1024
+ it("plugin list endpoint does not accumulate stale data", async () => {
1025
+ const srv = await startApiServer({ port: 0 });
1026
+ try {
1027
+ // Fetch plugins multiple times and verify list size is stable
1028
+ const sizes: number[] = [];
1029
+ for (let i = 0; i < 10; i++) {
1030
+ const { data } = await http$(srv.port, "GET", "/api/plugins");
1031
+ const plugins = data.plugins as Array<Record<string, unknown>>;
1032
+ sizes.push(plugins.length);
1033
+ }
1034
+
1035
+ // All reads should return the same count (no accumulation)
1036
+ const unique = new Set(sizes);
1037
+ expect(unique.size).toBe(1);
1038
+ } finally {
1039
+ await srv.close();
1040
+ }
1041
+ }, 30_000);
1042
+ });
1043
+
1044
+ // ===================================================================
1045
+ // 8. RAPID SEQUENTIAL OPERATIONS
1046
+ // ===================================================================
1047
+
1048
+ describe("Rapid Sequential Operations", () => {
1049
+ it("50 rapid onboarding status checks", async () => {
1050
+ const srv = await startApiServer({ port: 0 });
1051
+ try {
1052
+ const start = performance.now();
1053
+ for (let i = 0; i < 50; i++) {
1054
+ const { status } = await http$(
1055
+ srv.port,
1056
+ "GET",
1057
+ "/api/onboarding/status",
1058
+ );
1059
+ expect(status).toBe(200);
1060
+ }
1061
+ const elapsed = performance.now() - start;
1062
+ logger.info(
1063
+ `[e2e-validation] 50 onboarding status checks: ${elapsed.toFixed(0)}ms (${(elapsed / 50).toFixed(1)}ms/req)`,
1064
+ );
1065
+ } finally {
1066
+ await srv.close();
1067
+ }
1068
+ }, 30_000);
1069
+
1070
+ it("rapid plugin enable/disable cycling", async () => {
1071
+ const srv = await startApiServer({ port: 0 });
1072
+ try {
1073
+ const { data: listData } = await http$(srv.port, "GET", "/api/plugins");
1074
+ const plugins = listData.plugins as Array<Record<string, unknown>>;
1075
+ if (plugins.length === 0) return;
1076
+
1077
+ const target = plugins[0];
1078
+
1079
+ // Rapidly toggle enable/disable 20 times
1080
+ for (let i = 0; i < 20; i++) {
1081
+ const enabled = i % 2 === 0;
1082
+ const { status } = await http$(
1083
+ srv.port,
1084
+ "PUT",
1085
+ `/api/plugins/${target.id}`,
1086
+ { enabled },
1087
+ );
1088
+ expect(status).toBe(200);
1089
+ }
1090
+
1091
+ // Final state should be consistent
1092
+ const { data: finalList } = await http$(srv.port, "GET", "/api/plugins");
1093
+ const updated = (
1094
+ finalList.plugins as Array<Record<string, unknown>>
1095
+ ).find((p) => p.id === target.id);
1096
+ expect(typeof updated?.enabled).toBe("boolean");
1097
+ } finally {
1098
+ await srv.close();
1099
+ }
1100
+ }, 30_000);
1101
+
1102
+ it("rapid config read/write cycles maintain consistency", async () => {
1103
+ const srv = await startApiServer({ port: 0 });
1104
+ try {
1105
+ for (let i = 0; i < 20; i++) {
1106
+ // Write — use "features" (allowed key)
1107
+ await http$(srv.port, "PUT", "/api/config", {
1108
+ features: { rapid_test: { enabled: true, iteration: i } },
1109
+ });
1110
+ // Read
1111
+ const { data } = await http$(srv.port, "GET", "/api/config");
1112
+ const features = data.features as
1113
+ | Record<string, Record<string, number>>
1114
+ | undefined;
1115
+ const testData = features?.rapid_test;
1116
+ // The value should be the one we just wrote (or a later one from
1117
+ // concurrent writes if there were any — but the value must be a number)
1118
+ if (testData) {
1119
+ expect(typeof testData.iteration).toBe("number");
1120
+ }
1121
+ }
1122
+ } finally {
1123
+ await srv.close();
1124
+ }
1125
+ }, 30_000);
1126
+ });
1127
+
1128
+ // ===================================================================
1129
+ // 9. WORKSPACE INTEGRITY
1130
+ // ===================================================================
1131
+
1132
+ describe("Workspace Integrity", () => {
1133
+ it("ensureAgentWorkspace creates directory and is idempotent", async () => {
1134
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "milady-e2e-ws-"));
1135
+ const wsDir = path.join(dir, "workspace");
1136
+
1137
+ expect(fs.existsSync(wsDir)).toBe(false);
1138
+ await ensureAgentWorkspace({ dir: wsDir });
1139
+ expect(fs.existsSync(wsDir)).toBe(true);
1140
+
1141
+ // Idempotent — second call should not throw
1142
+ await ensureAgentWorkspace({ dir: wsDir });
1143
+ expect(fs.existsSync(wsDir)).toBe(true);
1144
+
1145
+ // Cleanup
1146
+ try {
1147
+ fs.rmSync(dir, { recursive: true, force: true });
1148
+ } catch {
1149
+ /* ignore */
1150
+ }
1151
+ });
1152
+
1153
+ it("workspace creation handles concurrent calls", async () => {
1154
+ const dir = fs.mkdtempSync(
1155
+ path.join(os.tmpdir(), "milady-e2e-ws-concurrent-"),
1156
+ );
1157
+ const wsDir = path.join(dir, "concurrent-workspace");
1158
+
1159
+ // Fire 5 concurrent workspace creates
1160
+ const results = await Promise.allSettled(
1161
+ Array.from({ length: 5 }, () => ensureAgentWorkspace({ dir: wsDir })),
1162
+ );
1163
+
1164
+ // All should succeed
1165
+ for (const r of results) {
1166
+ expect(r.status).toBe("fulfilled");
1167
+ }
1168
+ expect(fs.existsSync(wsDir)).toBe(true);
1169
+
1170
+ // Cleanup
1171
+ try {
1172
+ fs.rmSync(dir, { recursive: true, force: true });
1173
+ } catch {
1174
+ /* ignore */
1175
+ }
1176
+ });
1177
+ });
1178
+
1179
+ // ===================================================================
1180
+ // 10. RUNTIME INTEGRATION (requires model provider)
1181
+ // ===================================================================
1182
+
1183
+ describe("Runtime Integration (with model provider)", () => {
1184
+ let runtime: AgentRuntime | null = null;
1185
+ let server: { port: number; close: () => Promise<void> } | null = null;
1186
+ let initialized = false;
1187
+
1188
+ const pgliteDir = fs.mkdtempSync(
1189
+ path.join(os.tmpdir(), "milady-e2e-validation-pglite-"),
1190
+ );
1191
+ const roomId = stringToUuid("e2e-validation-room");
1192
+ const userId = crypto.randomUUID() as UUID;
1193
+ const worldId = stringToUuid("e2e-validation-world");
1194
+
1195
+ beforeAll(async () => {
1196
+ if (!hasModelProvider) return;
1197
+ process.env.LOG_LEVEL = process.env.MILADY_E2E_LOG_LEVEL ?? "error";
1198
+ process.env.PGLITE_DATA_DIR = pgliteDir;
1199
+
1200
+ const secrets: Record<string, string> = {};
1201
+ if (hasOpenAI)
1202
+ secrets.OPENAI_API_KEY = process.env.OPENAI_API_KEY as string;
1203
+ if (hasAnthropic)
1204
+ secrets.ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY as string;
1205
+ if (hasGroq) secrets.GROQ_API_KEY = process.env.GROQ_API_KEY as string;
1206
+
1207
+ const character = createCharacter({
1208
+ name: "ValidationAgent",
1209
+ bio: "An E2E validation agent for Issue #6.",
1210
+ secrets,
1211
+ });
1212
+
1213
+ const corePluginNames = [
1214
+ "@elizaos/plugin-trajectory-logger",
1215
+ "@elizaos/plugin-agent-skills",
1216
+ "@elizaos/plugin-directives",
1217
+ "@elizaos/plugin-commands",
1218
+ "@elizaos/plugin-personality",
1219
+ "@elizaos/plugin-experience",
1220
+ "@elizaos/plugin-form",
1221
+ ];
1222
+
1223
+ const sqlPlugin = await loadPlugin("@elizaos/plugin-sql");
1224
+ const localEmbeddingPlugin = await loadPlugin(
1225
+ "@elizaos/plugin-local-embedding",
1226
+ );
1227
+ const plugins: Plugin[] = [];
1228
+ for (const n of corePluginNames) {
1229
+ const p = await loadPlugin(n);
1230
+ if (p) plugins.push(p);
1231
+ }
1232
+ if (hasOpenAI) {
1233
+ const p = await loadPlugin("@elizaos/plugin-openai");
1234
+ if (p) plugins.push(p);
1235
+ }
1236
+ if (hasAnthropic) {
1237
+ const p = await loadPlugin("@elizaos/plugin-anthropic");
1238
+ if (p) plugins.push(p);
1239
+ }
1240
+ if (hasGroq) {
1241
+ const p = await loadPlugin("@elizaos/plugin-groq");
1242
+ if (p) plugins.push(p);
1243
+ }
1244
+
1245
+ runtime = new AgentRuntime({
1246
+ character,
1247
+ plugins,
1248
+ logLevel: "error",
1249
+ enableAutonomy: true,
1250
+ });
1251
+
1252
+ if (sqlPlugin) await runtime.registerPlugin(sqlPlugin);
1253
+ if (localEmbeddingPlugin) {
1254
+ await runtime.registerPlugin(localEmbeddingPlugin);
1255
+ } else {
1256
+ logger.warn(
1257
+ "[e2e-validation] @elizaos/plugin-local-embedding failed to load; runtime may use remote embeddings",
1258
+ );
1259
+ }
1260
+ await runtime.initialize();
1261
+ const autonomySvc = runtime.getService<AutonomyServiceLike>("AUTONOMY");
1262
+ autonomySvc?.setLoopInterval(5 * 60_000);
1263
+ initialized = true;
1264
+
1265
+ try {
1266
+ await runtime.ensureConnection({
1267
+ entityId: userId,
1268
+ roomId,
1269
+ worldId,
1270
+ userName: "ValidationUser",
1271
+ source: "test",
1272
+ channelId: "e2e-validation-channel",
1273
+ type: ChannelType.DM,
1274
+ });
1275
+ } catch {
1276
+ await runtime.ensureConnection({
1277
+ entityId: userId,
1278
+ roomId: crypto.randomUUID() as UUID,
1279
+ worldId: crypto.randomUUID() as UUID,
1280
+ userName: "ValidationUser",
1281
+ source: "test",
1282
+ channelId: "e2e-validation-channel",
1283
+ type: ChannelType.DM,
1284
+ });
1285
+ }
1286
+
1287
+ server = await startApiServer({ port: 0, runtime });
1288
+ }, 180_000);
1289
+
1290
+ afterAll(async () => {
1291
+ if (server) {
1292
+ try {
1293
+ await withTimeout(server.close(), 30_000, "server.close()");
1294
+ } catch (err) {
1295
+ logger.warn(
1296
+ `[e2e-validation] server.close cleanup failed: ${errorMessage(err)}`,
1297
+ );
1298
+ }
1299
+ }
1300
+ if (runtime) {
1301
+ try {
1302
+ runtime.enableAutonomy = false;
1303
+ await withTimeout(runtime.stop(), 90_000, "runtime.stop()");
1304
+ } catch (err) {
1305
+ logger.warn(
1306
+ `[e2e-validation] runtime.stop cleanup failed: ${errorMessage(err)}`,
1307
+ );
1308
+ }
1309
+ }
1310
+ try {
1311
+ fs.rmSync(pgliteDir, { recursive: true, force: true });
1312
+ } catch {
1313
+ /* ignore */
1314
+ }
1315
+ }, 150_000);
1316
+
1317
+ it.skipIf(!hasModelProvider)("runtime initializes with all plugins", () => {
1318
+ expect(initialized).toBe(true);
1319
+ expect(runtime?.plugins.length).toBeGreaterThanOrEqual(5);
1320
+ });
1321
+
1322
+ it.skipIf(!hasModelProvider)(
1323
+ "generates text response",
1324
+ async () => {
1325
+ const activeRuntime = runtime;
1326
+ if (!activeRuntime) throw new Error("Runtime not initialized");
1327
+
1328
+ // In the full E2E sweep, the first few provider calls can return
1329
+ // empty content while upstream sessions warm. Retry with bounded
1330
+ // backoff and alternate prompts to avoid false negatives.
1331
+ const prompts = [
1332
+ "Respond with exactly: validation ok.",
1333
+ "Return one short non-empty sentence confirming validation.",
1334
+ "Say hello in one short sentence.",
1335
+ ];
1336
+ const maxAttempts = 6;
1337
+ let text = "";
1338
+ let lastError = "";
1339
+
1340
+ for (
1341
+ let attempt = 0;
1342
+ attempt < maxAttempts && text.length === 0;
1343
+ attempt++
1344
+ ) {
1345
+ if (attempt > 0) {
1346
+ const backoffMs = Math.min(2000 * attempt, 10_000);
1347
+ await new Promise((resolve) => setTimeout(resolve, backoffMs));
1348
+ }
1349
+
1350
+ try {
1351
+ const result = await activeRuntime.generateText(
1352
+ prompts[attempt % prompts.length],
1353
+ { maxTokens: 256 },
1354
+ );
1355
+ if (typeof result === "string") {
1356
+ text = result.trim();
1357
+ } else if (result.text instanceof Promise) {
1358
+ text = (await result.text).trim();
1359
+ } else {
1360
+ text = String(result.text ?? result ?? "").trim();
1361
+ }
1362
+ } catch (err) {
1363
+ lastError = err instanceof Error ? err.message : String(err);
1364
+ }
1365
+ }
1366
+
1367
+ if (text.length === 0) {
1368
+ if (
1369
+ await shouldSkipDueModelProviderUnavailable(
1370
+ activeRuntime,
1371
+ "generates text response",
1372
+ )
1373
+ ) {
1374
+ return;
1375
+ }
1376
+ throw new Error(
1377
+ lastError
1378
+ ? `generateText produced empty output after ${maxAttempts} attempts (last error: ${lastError})`
1379
+ : `generateText produced empty output after ${maxAttempts} attempts`,
1380
+ );
1381
+ }
1382
+ expect(text.length).toBeGreaterThan(0);
1383
+ },
1384
+ 120_000,
1385
+ );
1386
+
1387
+ it.skipIf(!hasModelProvider)(
1388
+ "handleMessage produces response",
1389
+ async () => {
1390
+ const activeRuntime = runtime;
1391
+ if (!activeRuntime) throw new Error("Runtime not initialized");
1392
+ const msg = createMessageMemory({
1393
+ id: crypto.randomUUID() as UUID,
1394
+ entityId: userId,
1395
+ roomId,
1396
+ content: {
1397
+ text: "Say hello in one word.",
1398
+ source: "test",
1399
+ channelType: ChannelType.DM,
1400
+ },
1401
+ });
1402
+ const resp = await handleMessageAndCollectText(activeRuntime, msg);
1403
+ if (resp.length === 0) {
1404
+ if (
1405
+ await shouldSkipDueModelProviderUnavailable(
1406
+ activeRuntime,
1407
+ "handleMessage produces response",
1408
+ )
1409
+ ) {
1410
+ return;
1411
+ }
1412
+ }
1413
+ expect(resp.length).toBeGreaterThan(0);
1414
+ },
1415
+ 120_000,
1416
+ );
1417
+
1418
+ it.skipIf(!hasModelProvider)(
1419
+ "context integrity maintained across 5 sequential messages",
1420
+ async () => {
1421
+ const activeRuntime = runtime;
1422
+ if (!activeRuntime) throw new Error("Runtime not initialized");
1423
+ const messages = [
1424
+ "Remember: ALPHA-7. Reply OK.",
1425
+ "What code did I say? One line.",
1426
+ "Remember: BRAVO-3. Reply OK.",
1427
+ "List all codes. One line.",
1428
+ "How many codes total? Number only.",
1429
+ ];
1430
+
1431
+ let lastResponse = "";
1432
+ for (const text of messages) {
1433
+ const msg = createMessageMemory({
1434
+ id: crypto.randomUUID() as UUID,
1435
+ entityId: userId,
1436
+ roomId,
1437
+ content: { text, source: "test", channelType: ChannelType.DM },
1438
+ });
1439
+ lastResponse = await handleMessageAndCollectText(activeRuntime, msg);
1440
+ if (lastResponse.length === 0) {
1441
+ if (
1442
+ await shouldSkipDueModelProviderUnavailable(
1443
+ activeRuntime,
1444
+ "context integrity maintained across 5 sequential messages",
1445
+ )
1446
+ ) {
1447
+ return;
1448
+ }
1449
+ }
1450
+ expect(lastResponse.length).toBeGreaterThan(0);
1451
+ }
1452
+
1453
+ // The last response should reference "2" codes (ALPHA-7 and BRAVO-3)
1454
+ logger.info(
1455
+ `[e2e-validation] Context integrity check, final response: "${lastResponse}"`,
1456
+ );
1457
+ // We verify the model didn't crash or return empty — the content check
1458
+ // is a soft assertion since models can be unpredictable
1459
+ expect(lastResponse.length).toBeGreaterThan(0);
1460
+ },
1461
+ 300_000,
1462
+ );
1463
+
1464
+ it.skipIf(!hasModelProvider)(
1465
+ "3 parallel chat requests complete without crashes",
1466
+ async () => {
1467
+ const prompts = [
1468
+ "What is 2 + 2? Number only.",
1469
+ "What is 3 + 3? Number only.",
1470
+ "What is 4 + 4? Number only.",
1471
+ ];
1472
+
1473
+ const results = await Promise.all(
1474
+ prompts.map((text) =>
1475
+ http$(server?.port, "POST", "/api/chat", { text }, 60_000),
1476
+ ),
1477
+ );
1478
+
1479
+ for (const r of results) {
1480
+ expect(r.status).toBe(200);
1481
+ if (String(r.data.text ?? "").length === 0) {
1482
+ if (
1483
+ await shouldSkipDueModelProviderUnavailable(
1484
+ activeRuntime,
1485
+ "3 parallel chat requests complete without crashes",
1486
+ )
1487
+ ) {
1488
+ return;
1489
+ }
1490
+ }
1491
+ expect((r.data.text as string).length).toBeGreaterThan(0);
1492
+ }
1493
+ },
1494
+ 90_000,
1495
+ );
1496
+
1497
+ it.skipIf(!hasModelProvider)(
1498
+ "API server status reflects runtime state",
1499
+ async () => {
1500
+ const { status, data } = await http$(server?.port, "GET", "/api/status");
1501
+ expect(status).toBe(200);
1502
+ expect(data.state).toBe("running");
1503
+ expect(typeof data.startedAt).toBe("number");
1504
+ expect(typeof data.uptime).toBe("number");
1505
+ },
1506
+ );
1507
+ });
1508
+
1509
+ // ===================================================================
1510
+ // 11. DOCKER-COMPATIBLE FRESH MACHINE CHECKS
1511
+ // ===================================================================
1512
+
1513
+ describe("Fresh Machine Validation (non-Docker)", () => {
1514
+ it("package.json declares a Milady CLI bin that resolves on disk", () => {
1515
+ const cliBin = packageManifest.bin?.miladyai;
1516
+ expect(typeof cliBin).toBe("string");
1517
+ if (typeof cliBin === "string") {
1518
+ expect(fs.existsSync(path.join(packageRoot, cliBin))).toBe(true);
1519
+ }
1520
+ });
1521
+
1522
+ it("package.json exports point to existing files", () => {
1523
+ const exportsMap = packageManifest.exports ?? {};
1524
+ const rootExport = exportsMap["."];
1525
+ const cliExport = exportsMap["./cli-entry"];
1526
+ const elizaExport = exportsMap["./eliza"];
1527
+ expect(typeof rootExport).toBe("string");
1528
+ expect(typeof cliExport).toBe("string");
1529
+ expect(typeof elizaExport).toBe("string");
1530
+
1531
+ for (const value of [rootExport, cliExport, elizaExport]) {
1532
+ if (typeof value !== "string") continue;
1533
+ const resolved = path.join(packageRoot, value.replace(/^\.\//, ""));
1534
+ expect(fs.existsSync(resolved)).toBe(true);
1535
+ }
1536
+ });
1537
+
1538
+ it("dist/ contains expected entry files", () => {
1539
+ const distDir = path.join(packageRoot, "dist");
1540
+ if (!fs.existsSync(distDir)) {
1541
+ logger.warn(
1542
+ "[e2e-validation] dist/ not found — run `bun run build` first",
1543
+ );
1544
+ return;
1545
+ }
1546
+
1547
+ expect(
1548
+ fileExistsAny([
1549
+ path.join(distDir, "index.js"),
1550
+ path.join(distDir, "index"),
1551
+ ]),
1552
+ ).toBe(true);
1553
+ expect(
1554
+ fileExistsAny([
1555
+ path.join(distDir, "entry.js"),
1556
+ path.join(distDir, "entry"),
1557
+ ]),
1558
+ ).toBe(true);
1559
+ });
1560
+
1561
+ it("Node 22+ engine requirement is specified", () => {
1562
+ const pkg = JSON.parse(
1563
+ fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8"),
1564
+ ) as Record<string, Record<string, string>>;
1565
+ expect(pkg.engines?.node).toMatch(/>=22/);
1566
+ });
1567
+
1568
+ it("all runtime dependencies declared in package.json", () => {
1569
+ const pkg = JSON.parse(
1570
+ fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8"),
1571
+ ) as Record<string, Record<string, string>>;
1572
+ const deps = pkg.dependencies ?? {};
1573
+
1574
+ // Critical dependencies that must be present
1575
+ const required = [
1576
+ "@elizaos/core",
1577
+ "@clack/prompts",
1578
+ "chalk",
1579
+ "commander",
1580
+ "dotenv",
1581
+ "json5",
1582
+ "zod",
1583
+ ];
1584
+ for (const dep of required) {
1585
+ expect(deps[dep], `Missing dependency: ${dep}`).toBeDefined();
1586
+ }
1587
+ });
1588
+ });