Copy disabled (too large)
Download .txt
Showing preview only (18,173K chars total). Download the full file to get everything.
Repository: fetchai/agents-aea
Branch: main
Commit: bec49adaeba6
Files: 2006
Total size: 16.9 MB
Directory structure:
gitextract_i5wtg620/
├── .dockerignore
├── .firebaserc
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ └── feature-request.yml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── release.md
│ ├── dependabot.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── codeql-analysis.yml
│ ├── docs_pr_preview.yml
│ ├── publish.yaml
│ ├── upload_docker_images.yaml
│ └── workflow.yml
├── .gitignore
├── .spelling
├── AUTHORS.md
├── CITATION.cff
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DEVELOPING.md
├── HISTORY.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── SECURITY.md
├── aea/
│ ├── __init__.py
│ ├── __version__.py
│ ├── abstract_agent.py
│ ├── aea.py
│ ├── aea_builder.py
│ ├── agent.py
│ ├── agent_loop.py
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── add.py
│ │ ├── add_key.py
│ │ ├── build.py
│ │ ├── config.py
│ │ ├── core.py
│ │ ├── create.py
│ │ ├── delete.py
│ │ ├── eject.py
│ │ ├── fetch.py
│ │ ├── fingerprint.py
│ │ ├── freeze.py
│ │ ├── generate.py
│ │ ├── generate_key.py
│ │ ├── generate_wealth.py
│ │ ├── get_address.py
│ │ ├── get_multiaddress.py
│ │ ├── get_public_key.py
│ │ ├── get_wealth.py
│ │ ├── init.py
│ │ ├── install.py
│ │ ├── interact.py
│ │ ├── issue_certificates.py
│ │ ├── launch.py
│ │ ├── list.py
│ │ ├── local_registry_sync.py
│ │ ├── login.py
│ │ ├── logout.py
│ │ ├── plugin.py
│ │ ├── publish.py
│ │ ├── push.py
│ │ ├── register.py
│ │ ├── registry/
│ │ │ ├── __init__.py
│ │ │ ├── add.py
│ │ │ ├── fetch.py
│ │ │ ├── login.py
│ │ │ ├── logout.py
│ │ │ ├── publish.py
│ │ │ ├── push.py
│ │ │ ├── registration.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── remove.py
│ │ ├── remove_key.py
│ │ ├── reset_password.py
│ │ ├── run.py
│ │ ├── scaffold.py
│ │ ├── search.py
│ │ ├── transfer.py
│ │ ├── upgrade.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── click_utils.py
│ │ ├── config.py
│ │ ├── constants.py
│ │ ├── context.py
│ │ ├── decorators.py
│ │ ├── exceptions.py
│ │ ├── formatting.py
│ │ ├── generic.py
│ │ ├── loggers.py
│ │ └── package_utils.py
│ ├── common.py
│ ├── components/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── loader.py
│ │ └── utils.py
│ ├── configurations/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── constants.py
│ │ ├── data_types.py
│ │ ├── loader.py
│ │ ├── manager.py
│ │ ├── pypi.py
│ │ ├── schemas/
│ │ │ ├── aea-config_schema.json
│ │ │ ├── configurable_parts/
│ │ │ │ ├── base-custom_config.json
│ │ │ │ ├── connection-custom_config.json
│ │ │ │ ├── contract-custom_config.json
│ │ │ │ ├── protocol-custom_config.json
│ │ │ │ └── skill-custom_config.json
│ │ │ ├── connection-config_schema.json
│ │ │ ├── contract-config_schema.json
│ │ │ ├── definitions.json
│ │ │ ├── protocol-config_schema.json
│ │ │ ├── protocol-specification_schema.json
│ │ │ └── skill-config_schema.json
│ │ ├── utils.py
│ │ └── validation.py
│ ├── connections/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── connection.yaml
│ │ └── readme.md
│ ├── context/
│ │ ├── __init__.py
│ │ └── base.py
│ ├── contracts/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── contract.py
│ │ └── contract.yaml
│ ├── crypto/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── helpers.py
│ │ ├── ledger_apis.py
│ │ ├── plugin.py
│ │ ├── registries/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ └── wallet.py
│ ├── decision_maker/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── default.py
│ │ ├── gop.py
│ │ └── scaffold.py
│ ├── error_handler/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── default.py
│ │ └── scaffold.py
│ ├── exceptions.py
│ ├── helpers/
│ │ ├── __init__.py
│ │ ├── acn/
│ │ │ ├── __init__.py
│ │ │ ├── agent_record.py
│ │ │ └── uri.py
│ │ ├── async_friendly_queue.py
│ │ ├── async_utils.py
│ │ ├── base.py
│ │ ├── constants.py
│ │ ├── env_vars.py
│ │ ├── exception_policy.py
│ │ ├── exec_timeout.py
│ │ ├── file_io.py
│ │ ├── file_lock.py
│ │ ├── http_requests.py
│ │ ├── install_dependency.py
│ │ ├── io.py
│ │ ├── ipfs/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── pb/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── merkledag.proto
│ │ │ │ ├── merkledag_pb2.py
│ │ │ │ ├── unixfs.proto
│ │ │ │ └── unixfs_pb2.py
│ │ │ └── utils.py
│ │ ├── logging.py
│ │ ├── multiaddr/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── crypto.proto
│ │ │ └── crypto_pb2.py
│ │ ├── multiple_executor.py
│ │ ├── pipe.py
│ │ ├── preference_representations/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── profiling.py
│ │ ├── search/
│ │ │ ├── __init__.py
│ │ │ ├── generic.py
│ │ │ ├── models.proto
│ │ │ ├── models.py
│ │ │ └── models_pb2.py
│ │ ├── serializers.py
│ │ ├── storage/
│ │ │ ├── __init__.py
│ │ │ ├── backends/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── binaries/
│ │ │ │ │ └── README.txt
│ │ │ │ └── sqlite.py
│ │ │ └── generic_storage.py
│ │ ├── sym_link.py
│ │ ├── transaction/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── win32.py
│ │ └── yaml_utils.py
│ ├── identity/
│ │ ├── __init__.py
│ │ └── base.py
│ ├── launcher.py
│ ├── mail/
│ │ ├── __init__.py
│ │ ├── base.proto
│ │ ├── base.py
│ │ └── base_pb2.py
│ ├── manager/
│ │ ├── __init__.py
│ │ ├── manager.py
│ │ ├── project.py
│ │ └── utils.py
│ ├── multiplexer.py
│ ├── protocols/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── dialogue/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── common.py
│ │ │ ├── extract_specification.py
│ │ │ ├── isort.cfg
│ │ │ └── validate.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── message.py
│ │ ├── protocol.yaml
│ │ └── serialization.py
│ ├── py.typed
│ ├── registries/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── filter.py
│ │ └── resources.py
│ ├── runner.py
│ ├── runtime.py
│ ├── skills/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── behaviours.py
│ │ ├── scaffold/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── handlers.py
│ │ │ ├── my_model.py
│ │ │ └── skill.yaml
│ │ └── tasks.py
│ └── test_tools/
│ ├── __init__.py
│ ├── click_testing.py
│ ├── constants.py
│ ├── exceptions.py
│ ├── generic.py
│ ├── test_cases.py
│ ├── test_contract.py
│ └── test_skill.py
├── benchmark/
│ ├── Dockerfile
│ ├── README.md
│ ├── __init__.py
│ ├── benchmark-deployment.yaml
│ ├── cases/
│ │ ├── __init__.py
│ │ ├── cpu_burn.py
│ │ ├── helpers/
│ │ │ ├── __init__.py
│ │ │ └── dummy_handler.py
│ │ ├── react_multi_agents_fake_connection.py
│ │ ├── react_speed_in_loop.py
│ │ └── react_speed_multi_agents.py
│ ├── checks/
│ │ ├── __init__.py
│ │ ├── check_agent_construction_time.py
│ │ ├── check_decision_maker.py
│ │ ├── check_dialogues_memory_usage.py
│ │ ├── check_mem_usage.py
│ │ ├── check_messages_memory_usage.py
│ │ ├── check_multiagent.py
│ │ ├── check_multiagent_http_dialogues.py
│ │ ├── check_proactive.py
│ │ ├── check_reactive.py
│ │ ├── data/
│ │ │ ├── 2020.09.05_17-49.txt
│ │ │ ├── 2020.10.27_mem_usage_report.txt
│ │ │ ├── 2020.10.30 optimized messages.txt
│ │ │ ├── 2020.12.10_optimized_messages.txt
│ │ │ ├── 2021.03.09_test_run.txt
│ │ │ └── 2021.04.01_v1_benchmark.txt
│ │ ├── run_benchmark.sh
│ │ ├── run_benchmark_messages_mem.sh
│ │ └── utils.py
│ ├── framework/
│ │ ├── __init__.py
│ │ ├── aea_test_wrapper.py
│ │ ├── benchmark.py
│ │ ├── cli.py
│ │ ├── executor.py
│ │ ├── fake_connection.py
│ │ ├── func_details.py
│ │ └── report_printer.py
│ ├── run_from_branch.sh
│ └── run_mem_check_in_cloud.sh
├── codecov.yml
├── deploy-image/
│ ├── .aea/
│ │ └── cli_config.yaml
│ ├── Dockerfile
│ ├── README.md
│ ├── build.sh
│ ├── entrypoint.sh
│ └── packages/
│ └── __init__.py
├── develop-image/
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-env.sh
│ ├── k8s/
│ │ └── deployment.yaml
│ ├── scripts/
│ │ ├── docker-build-img.sh
│ │ └── docker-publish-img.sh
│ └── skaffold.yaml
├── docs/
│ ├── 12-factor.md
│ ├── Pipfile
│ ├── acn-internals.md
│ ├── acn.md
│ ├── aea-vs-mvc.md
│ ├── aeas.md
│ ├── agent-oriented-development.md
│ ├── agent-vs-aea.md
│ ├── aggregation-demo.md
│ ├── api/
│ │ ├── abstract_agent.md
│ │ ├── aea.md
│ │ ├── aea_builder.md
│ │ ├── agent.md
│ │ ├── agent_loop.md
│ │ ├── common.md
│ │ ├── components/
│ │ │ ├── base.md
│ │ │ ├── loader.md
│ │ │ └── utils.md
│ │ ├── configurations/
│ │ │ ├── base.md
│ │ │ ├── constants.md
│ │ │ ├── data_types.md
│ │ │ ├── loader.md
│ │ │ ├── manager.md
│ │ │ ├── pypi.md
│ │ │ ├── utils.md
│ │ │ └── validation.md
│ │ ├── connections/
│ │ │ └── base.md
│ │ ├── context/
│ │ │ └── base.md
│ │ ├── contracts/
│ │ │ └── base.md
│ │ ├── crypto/
│ │ │ ├── base.md
│ │ │ ├── helpers.md
│ │ │ ├── ledger_apis.md
│ │ │ ├── plugin.md
│ │ │ ├── registries/
│ │ │ │ └── base.md
│ │ │ └── wallet.md
│ │ ├── decision_maker/
│ │ │ ├── base.md
│ │ │ ├── default.md
│ │ │ └── gop.md
│ │ ├── error_handler/
│ │ │ ├── base.md
│ │ │ └── default.md
│ │ ├── exceptions.md
│ │ ├── helpers/
│ │ │ ├── acn/
│ │ │ │ ├── agent_record.md
│ │ │ │ └── uri.md
│ │ │ ├── async_friendly_queue.md
│ │ │ ├── async_utils.md
│ │ │ ├── base.md
│ │ │ ├── constants.md
│ │ │ ├── env_vars.md
│ │ │ ├── exception_policy.md
│ │ │ ├── exec_timeout.md
│ │ │ ├── file_io.md
│ │ │ ├── file_lock.md
│ │ │ ├── http_requests.md
│ │ │ ├── install_dependency.md
│ │ │ ├── io.md
│ │ │ ├── ipfs/
│ │ │ │ ├── base.md
│ │ │ │ └── utils.md
│ │ │ ├── logging.md
│ │ │ ├── multiaddr/
│ │ │ │ └── base.md
│ │ │ ├── multiple_executor.md
│ │ │ ├── pipe.md
│ │ │ ├── preference_representations/
│ │ │ │ └── base.md
│ │ │ ├── profiling.md
│ │ │ ├── search/
│ │ │ │ ├── generic.md
│ │ │ │ └── models.md
│ │ │ ├── serializers.md
│ │ │ ├── storage/
│ │ │ │ ├── backends/
│ │ │ │ │ ├── base.md
│ │ │ │ │ └── sqlite.md
│ │ │ │ └── generic_storage.md
│ │ │ ├── sym_link.md
│ │ │ ├── transaction/
│ │ │ │ └── base.md
│ │ │ ├── win32.md
│ │ │ └── yaml_utils.md
│ │ ├── identity/
│ │ │ └── base.md
│ │ ├── launcher.md
│ │ ├── mail/
│ │ │ └── base.md
│ │ ├── manager/
│ │ │ ├── manager.md
│ │ │ ├── project.md
│ │ │ └── utils.md
│ │ ├── multiplexer.md
│ │ ├── plugins/
│ │ │ ├── aea_cli_ipfs/
│ │ │ │ ├── core.md
│ │ │ │ └── ipfs_utils.md
│ │ │ ├── aea_ledger_cosmos/
│ │ │ │ └── cosmos.md
│ │ │ ├── aea_ledger_ethereum/
│ │ │ │ └── ethereum.md
│ │ │ └── aea_ledger_fetchai/
│ │ │ ├── _cosmos.md
│ │ │ └── fetchai.md
│ │ ├── protocols/
│ │ │ ├── base.md
│ │ │ ├── default/
│ │ │ │ ├── custom_types.md
│ │ │ │ ├── dialogues.md
│ │ │ │ ├── message.md
│ │ │ │ └── serialization.md
│ │ │ ├── dialogue/
│ │ │ │ └── base.md
│ │ │ ├── generator/
│ │ │ │ ├── base.md
│ │ │ │ ├── common.md
│ │ │ │ ├── extract_specification.md
│ │ │ │ └── validate.md
│ │ │ ├── signing/
│ │ │ │ ├── custom_types.md
│ │ │ │ ├── dialogues.md
│ │ │ │ ├── message.md
│ │ │ │ └── serialization.md
│ │ │ └── state_update/
│ │ │ ├── dialogues.md
│ │ │ ├── message.md
│ │ │ └── serialization.md
│ │ ├── registries/
│ │ │ ├── base.md
│ │ │ ├── filter.md
│ │ │ └── resources.md
│ │ ├── runner.md
│ │ ├── runtime.md
│ │ ├── skills/
│ │ │ ├── base.md
│ │ │ ├── behaviours.md
│ │ │ └── tasks.md
│ │ └── test_tools/
│ │ ├── constants.md
│ │ ├── exceptions.md
│ │ ├── generic.md
│ │ ├── test_cases.md
│ │ ├── test_contract.md
│ │ └── test_skill.md
│ ├── application.md
│ ├── aries-cloud-agent-demo.md
│ ├── build-aea-programmatically.md
│ ├── build-aea-step-by-step.md
│ ├── car-park-skills.md
│ ├── cli-commands.md
│ ├── cli-vs-programmatic-aeas.md
│ ├── config.md
│ ├── connect-a-frontend.md
│ ├── connection.md
│ ├── contract.md
│ ├── core-components-1.md
│ ├── core-components-2.md
│ ├── core-components.md
│ ├── css/
│ │ ├── admonitions.css
│ │ └── my-styles.css
│ ├── debug.md
│ ├── decision-maker-transaction.md
│ ├── decision-maker.md
│ ├── defining-data-models.md
│ ├── demos.md
│ ├── deployment.md
│ ├── design-principles.md
│ ├── development-setup.md
│ ├── diagram.md
│ ├── ecosystem.md
│ ├── erc1155-skills.md
│ ├── generic-skills-step-by-step.md
│ ├── generic-skills.md
│ ├── generic-storage.md
│ ├── glossary.md
│ ├── gym-example.md
│ ├── gym-skill.md
│ ├── http-connection-and-skill.md
│ ├── identity.md
│ ├── index.md
│ ├── install.md
│ ├── interaction-protocol.md
│ ├── known-limits.md
│ ├── language-agnostic-definition.md
│ ├── ledger-integration.md
│ ├── limits.md
│ ├── logging.md
│ ├── message-routing.md
│ ├── ml-skills.md
│ ├── modes.md
│ ├── multi-agent-manager.md
│ ├── multiplexer-standalone.md
│ ├── oracle-demo.md
│ ├── orm-integration.md
│ ├── p2p-connection.md
│ ├── package-imports.md
│ ├── performance-benchmark.md
│ ├── por.md
│ ├── prometheus.md
│ ├── protocol-generator.md
│ ├── protocol.md
│ ├── query-language.md
│ ├── questions-and-answers.md
│ ├── quickstart.md
│ ├── raspberry-set-up.md
│ ├── runtime-cost.md
│ ├── scaffolding.md
│ ├── security.md
│ ├── setup.md
│ ├── simple-oef-usage.md
│ ├── simple-oef.md
│ ├── skill-guide.md
│ ├── skill-testing.md
│ ├── skill.md
│ ├── standalone-transaction.md
│ ├── step-one.md
│ ├── tac-skills-contract.md
│ ├── tac-skills.md
│ ├── tac.md
│ ├── thermometer-skills.md
│ ├── trust.md
│ ├── upgrading.md
│ ├── wealth.md
│ └── weather-skills.md
├── examples/
│ ├── __init__.py
│ ├── aealite_go/
│ │ ├── README.md
│ │ └── default/
│ │ ├── default.pb.go
│ │ └── default.proto
│ ├── gym_ex/
│ │ ├── README.md
│ │ ├── gyms/
│ │ │ ├── __init__.py
│ │ │ └── env.py
│ │ ├── proxy/
│ │ │ ├── __init__.py
│ │ │ ├── agent.py
│ │ │ └── env.py
│ │ ├── rl/
│ │ │ ├── __init__.py
│ │ │ └── agent.py
│ │ └── train.py
│ ├── http_ex/
│ │ └── petstore.yaml
│ ├── ml_ex/
│ │ └── model.json
│ ├── protocol_specification_ex/
│ │ └── sample.yaml
│ └── tac_deploy/
│ ├── .aea/
│ │ └── cli_config.yaml
│ ├── Dockerfile
│ ├── README.md
│ ├── build.sh
│ ├── entrypoint.sh
│ ├── packages/
│ │ └── __init__.py
│ ├── tac-deployment.yaml
│ └── tac_run.sh
├── firebase.json
├── install_packages.py
├── libs/
│ └── go/
│ ├── aea_end2end/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── fipa_dummy_seller.env
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── pexpect_popen.py
│ │ ├── protocols/
│ │ │ ├── fipa.pb.go
│ │ │ ├── fipa.proto
│ │ │ └── fipa.yaml
│ │ ├── run_buyer.sh
│ │ ├── run_seller.sh
│ │ └── test_fipa_end2end.py
│ ├── aealite/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── agent.go
│ │ ├── agent_test.go
│ │ ├── connections/
│ │ │ ├── acn/
│ │ │ │ ├── acn.go
│ │ │ │ ├── pipe_iface.go
│ │ │ │ └── protocol.go
│ │ │ ├── connections.go
│ │ │ ├── p2pclient.go
│ │ │ ├── p2pclient_test.go
│ │ │ └── tcpsocket.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── helpers/
│ │ │ ├── base.go
│ │ │ └── base_test.go
│ │ ├── protocols/
│ │ │ ├── acn/
│ │ │ │ └── v1_0_0/
│ │ │ │ ├── acn.pb.go
│ │ │ │ ├── acn.proto
│ │ │ │ └── acn.yaml
│ │ │ ├── base.pb.go
│ │ │ ├── base.proto
│ │ │ ├── dialogue.go
│ │ │ ├── dialogue_label.go
│ │ │ ├── dialogue_label_test.go
│ │ │ ├── dialogue_test.go
│ │ │ ├── dialogues.go
│ │ │ ├── message.go
│ │ │ ├── message_test.go
│ │ │ ├── search.pb.go
│ │ │ ├── search.proto
│ │ │ ├── storage.go
│ │ │ ├── storage_test.go
│ │ │ └── versions.go
│ │ ├── test_env_file.env
│ │ └── wallet/
│ │ ├── utils.go
│ │ ├── wallet.go
│ │ └── wallet_test.go
│ └── libp2p_node/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── Makefile
│ ├── README.md
│ ├── acn/
│ │ └── utils.go
│ ├── aea/
│ │ ├── api.go
│ │ ├── envelope.pb.go
│ │ ├── envelope.proto
│ │ ├── pipe.go
│ │ └── utils.go
│ ├── common/
│ │ └── common.go
│ ├── dht/
│ │ ├── common/
│ │ │ └── handlers.go
│ │ ├── dhtclient/
│ │ │ ├── dhtclient.go
│ │ │ ├── dhtclient_test.go
│ │ │ └── options.go
│ │ ├── dhtnode/
│ │ │ ├── dhtnode.go
│ │ │ ├── streams.go
│ │ │ └── utils.go
│ │ ├── dhtpeer/
│ │ │ ├── benchmarks_test.go
│ │ │ ├── dhtpeer.go
│ │ │ ├── dhtpeer_test.go
│ │ │ ├── mailbox.go
│ │ │ ├── notifee.go
│ │ │ ├── options.go
│ │ │ └── utils.go
│ │ ├── dhttests/
│ │ │ └── dhttests.go
│ │ └── monitoring/
│ │ ├── file.go
│ │ ├── prometheus.go
│ │ └── service.go
│ ├── go.mod
│ ├── go.sum
│ ├── libp2p_node.go
│ ├── link
│ ├── mocks/
│ │ ├── mock_host.go
│ │ ├── mock_net.go
│ │ ├── mock_network.go
│ │ └── mock_peerstore.go
│ ├── protocols/
│ │ └── acn/
│ │ └── v1_0_0/
│ │ ├── acn.pb.go
│ │ ├── acn.proto
│ │ └── acn.yaml
│ └── utils/
│ ├── utils.go
│ └── utils_test.go
├── mkdocs.yml
├── packages/
│ ├── __init__.py
│ ├── fetchai/
│ │ ├── __init__.py
│ │ ├── agents/
│ │ │ ├── aries_alice/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── aries_faber/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── car_data_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── car_detector/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_feed/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_oracle/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_oracle_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw1/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw3/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── erc1155_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── erc1155_deployer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── error_test/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── fipa_dummy_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── generic_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── generic_seller/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── gym_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── hello_world/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── latest_block_feed/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── ml_data_provider/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── ml_model_trainer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── my_first_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── registration_aea_aw1/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_aggregator/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_buyer_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_buyer_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_seller_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_seller_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_service_registration/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_service_search/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_controller/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_controller_contract/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_participant/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_participant_contract/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── thermometer_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── thermometer_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── weather_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ └── weather_station/
│ │ │ ├── README.md
│ │ │ └── aea-config.yaml
│ │ ├── connections/
│ │ │ ├── __init__.py
│ │ │ ├── gym/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── http_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── http_server/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── ledger/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── contract_dispatcher.py
│ │ │ │ └── ledger_dispatcher.py
│ │ │ ├── local/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── oef/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ └── object_translator.py
│ │ │ ├── p2p_libp2p/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── check_dependencies.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── consts.py
│ │ │ │ └── libp2p_node/
│ │ │ │ ├── .dockerignore
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── acn/
│ │ │ │ │ └── utils.go
│ │ │ │ ├── aea/
│ │ │ │ │ ├── api.go
│ │ │ │ │ ├── envelope.pb.go
│ │ │ │ │ ├── envelope.proto
│ │ │ │ │ ├── pipe.go
│ │ │ │ │ └── utils.go
│ │ │ │ ├── common/
│ │ │ │ │ └── common.go
│ │ │ │ ├── dht/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── handlers.go
│ │ │ │ │ ├── dhtclient/
│ │ │ │ │ │ ├── dhtclient.go
│ │ │ │ │ │ ├── dhtclient_test.go
│ │ │ │ │ │ └── options.go
│ │ │ │ │ ├── dhtnode/
│ │ │ │ │ │ ├── dhtnode.go
│ │ │ │ │ │ ├── streams.go
│ │ │ │ │ │ └── utils.go
│ │ │ │ │ ├── dhtpeer/
│ │ │ │ │ │ ├── benchmarks_test.go
│ │ │ │ │ │ ├── dhtpeer.go
│ │ │ │ │ │ ├── dhtpeer_test.go
│ │ │ │ │ │ ├── mailbox.go
│ │ │ │ │ │ ├── notifee.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ └── utils.go
│ │ │ │ │ ├── dhttests/
│ │ │ │ │ │ └── dhttests.go
│ │ │ │ │ └── monitoring/
│ │ │ │ │ ├── file.go
│ │ │ │ │ ├── prometheus.go
│ │ │ │ │ └── service.go
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── libp2p_node.go
│ │ │ │ ├── link
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── mock_host.go
│ │ │ │ │ ├── mock_net.go
│ │ │ │ │ ├── mock_network.go
│ │ │ │ │ └── mock_peerstore.go
│ │ │ │ ├── protocols/
│ │ │ │ │ └── acn/
│ │ │ │ │ └── v1_0_0/
│ │ │ │ │ ├── acn.pb.go
│ │ │ │ │ ├── acn.proto
│ │ │ │ │ └── acn.yaml
│ │ │ │ └── utils/
│ │ │ │ ├── utils.go
│ │ │ │ └── utils_test.go
│ │ │ ├── p2p_libp2p_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── p2p_libp2p_mailbox/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── p2p_stub/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── prometheus/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── soef/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── stub/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── tcp/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── tcp_client.py
│ │ │ │ └── tcp_server.py
│ │ │ └── webhook/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── connection.py
│ │ │ └── connection.yaml
│ │ ├── contracts/
│ │ │ ├── __init__.py
│ │ │ ├── erc1155/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── Migrations.json
│ │ │ │ │ ├── erc1155.json
│ │ │ │ │ └── erc1155.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ ├── contracts/
│ │ │ │ │ ├── Migrations.sol
│ │ │ │ │ └── erc1155.vy
│ │ │ │ └── migrations/
│ │ │ │ ├── 1_initial_migration.js
│ │ │ │ └── 2_deploy_contracts.js
│ │ │ ├── fet_erc20/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ └── FetERC20Mock.json
│ │ │ │ ├── contract.py
│ │ │ │ └── contract.yaml
│ │ │ ├── oracle/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── FetchOracle.json
│ │ │ │ │ └── oracle.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ └── contracts/
│ │ │ │ └── FetchOracle.sol
│ │ │ ├── oracle_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── FetchOracleTestClient.json
│ │ │ │ │ └── oracle_client.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ └── contracts/
│ │ │ │ └── FetchOracleTestClient.sol
│ │ │ └── staking_erc20/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── Migrations.json
│ │ │ │ └── staking_erc20.json
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ ├── protocols/
│ │ │ ├── __init__.py
│ │ │ ├── acn/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── acn.proto
│ │ │ │ ├── acn_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── aggregation/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aggregation.proto
│ │ │ │ ├── aggregation_pb2.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── contract_api/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── contract_api.proto
│ │ │ │ ├── contract_api_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── cosm_trade/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cosm_trade.proto
│ │ │ │ ├── cosm_trade_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── default/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── default.proto
│ │ │ │ ├── default_pb2.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── fipa/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── fipa.proto
│ │ │ │ ├── fipa_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── gym/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── gym.proto
│ │ │ │ ├── gym_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── http/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── http.proto
│ │ │ │ ├── http_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── ledger_api/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── ledger_api.proto
│ │ │ │ ├── ledger_api_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── ml_trade/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── ml_trade.proto
│ │ │ │ ├── ml_trade_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── oef_search/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── oef_search.proto
│ │ │ │ ├── oef_search_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── prometheus/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── prometheus.proto
│ │ │ │ ├── prometheus_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── register/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── register.proto
│ │ │ │ ├── register_pb2.py
│ │ │ │ └── serialization.py
│ │ │ ├── signing/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── signing.proto
│ │ │ │ └── signing_pb2.py
│ │ │ ├── state_update/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── state_update.proto
│ │ │ │ └── state_update_pb2.py
│ │ │ └── tac/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── custom_types.py
│ │ │ ├── dialogues.py
│ │ │ ├── message.py
│ │ │ ├── protocol.yaml
│ │ │ ├── serialization.py
│ │ │ ├── tac.proto
│ │ │ └── tac_pb2.py
│ │ └── skills/
│ │ ├── __init__.py
│ │ ├── advanced_data_request/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── api_spec.yaml
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── models.py
│ │ │ └── skill.yaml
│ │ ├── aries_alice/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── aries_faber/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── carpark_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── carpark_detection/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── database.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── temp_files_placeholder/
│ │ │ ├── mask.tiff
│ │ │ └── mask_ref.tiff
│ │ ├── confirmation_aw1/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── confirmation_aw2/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── confirmation_aw3/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── echo/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── erc1155_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── erc1155_deploy/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── error/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── error_test_skill/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ └── skill.yaml
│ │ ├── fetch_block/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── fipa_dummy_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── generic_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── generic_seller/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── gym/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── rl_agent.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── hello_world/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ └── skill.yaml
│ │ ├── http_echo/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── ml_data_provider/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── ml_train/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── tasks.py
│ │ ├── registration_aw1/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_aggregation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_data_request/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── simple_oracle/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_oracle_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_seller/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_service_registration/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_service_search/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── tac_control/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── parameters.py
│ │ │ └── skill.yaml
│ │ ├── tac_control_contract/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── parameters.py
│ │ │ └── skill.yaml
│ │ ├── tac_negotiation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── transactions.py
│ │ ├── tac_participation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── task_test_skill/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── thermometer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── thermometer_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── weather_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ └── weather_station/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── behaviours.py
│ │ ├── db_communication.py
│ │ ├── dialogues.py
│ │ ├── dummy_weather_station_data.py
│ │ ├── handlers.py
│ │ ├── skill.yaml
│ │ └── strategy.py
│ └── hashes.csv
├── plugins/
│ ├── aea-cli-ipfs/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_cli_ipfs/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── ipfs_utils.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ └── test_aea_cli_ipfs.py
│ ├── aea-ledger-cosmos/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_ledger_cosmos/
│ │ │ ├── __init__.py
│ │ │ └── cosmos.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── data/
│ │ │ ├── cosmos_private_key.txt
│ │ │ └── dummy_contract/
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── some.json
│ │ │ │ └── some.wasm
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ └── test_cosmos.py
│ ├── aea-ledger-ethereum/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_ledger_ethereum/
│ │ │ ├── __init__.py
│ │ │ └── ethereum.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── data/
│ │ │ ├── dummy_contract/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── some.json
│ │ │ │ │ └── some.wasm
│ │ │ │ ├── contract.py
│ │ │ │ └── contract.yaml
│ │ │ └── ethereum_private_key.txt
│ │ ├── docker_image.py
│ │ ├── test_ethereum.py
│ │ └── test_ethereum_contract.py
│ └── aea-ledger-fetchai/
│ ├── LICENSE
│ ├── MANIFEST.in
│ ├── README.md
│ ├── aea_ledger_fetchai/
│ │ ├── __init__.py
│ │ ├── _cosmos.py
│ │ └── fetchai.py
│ ├── pyproject.toml
│ ├── setup.py
│ └── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── data/
│ │ └── dummy_contract/
│ │ ├── __init__.py
│ │ ├── build/
│ │ │ ├── some.json
│ │ │ └── some.wasm
│ │ ├── contract.py
│ │ └── contract.yaml
│ └── test_fetchai.py
├── protolint.yaml
├── pyproject.toml
├── pytest.ini
├── scripts/
│ ├── NOTES.md
│ ├── RELEASE_PROCESS.md
│ ├── __init__.py
│ ├── acn/
│ │ ├── Dockerfile
│ │ ├── Dockerfile.dev
│ │ ├── README.md
│ │ ├── build_upload_img.sh
│ │ ├── helm-chart/
│ │ │ ├── Chart.yaml
│ │ │ ├── templates/
│ │ │ │ ├── acnnode.yaml
│ │ │ │ ├── boostrapistio.yaml
│ │ │ │ ├── bootstrapnode.yaml
│ │ │ │ ├── bootstrapsecret.yaml
│ │ │ │ ├── dns.yaml
│ │ │ │ ├── istio.yaml
│ │ │ │ └── secret.yaml
│ │ │ └── values.yaml
│ │ ├── k8s/
│ │ │ ├── deployment.yaml
│ │ │ ├── dns.yaml
│ │ │ ├── istio.yaml
│ │ │ └── secret.yaml
│ │ ├── k8s_deploy_acn_node.py
│ │ └── run_acn_node_standalone.py
│ ├── bump_aea_version.py
│ ├── bump_year.sh
│ ├── check_copyright_notice.py
│ ├── check_doc_links.py
│ ├── check_imports_and_dependencies.py
│ ├── check_package_versions_in_docs.py
│ ├── check_packages.py
│ ├── check_pipfile_and_toxini.py
│ ├── common.py
│ ├── deploy_to_registry.py
│ ├── freeze_dependencies.py
│ ├── generate_all_protocols.py
│ ├── generate_api_docs.py
│ ├── generate_ipfs_hashes.py
│ ├── install.ps1
│ ├── install.sh
│ ├── ledger_network_update.py
│ ├── oef/
│ │ ├── launch.py
│ │ ├── launch_config.json
│ │ └── node_config.json
│ ├── parse_main_dependencies_from_lock.py
│ ├── spell-check.sh
│ ├── update_package_versions.py
│ ├── update_plugin_versions.py
│ ├── update_symlinks_cross_platform.py
│ └── whitelist.py
├── setup.cfg
├── strategy.ini
├── tests/
│ ├── __init__.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── docker_image.py
│ │ ├── mocks.py
│ │ ├── oef_search_pluto_scripts/
│ │ │ ├── launch.py
│ │ │ ├── launch_config.json
│ │ │ └── node_config.json
│ │ ├── pexpect_popen.py
│ │ └── utils.py
│ ├── conftest.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── aea-config.example.yaml
│ │ ├── aea-config.example_multipage.yaml
│ │ ├── aea-config.example_w_keys.yaml
│ │ ├── certs/
│ │ │ ├── server.crt
│ │ │ ├── server.csr
│ │ │ └── server.key
│ │ ├── cosmos_private_key.txt
│ │ ├── custom_crypto.py
│ │ ├── dependencies_skill/
│ │ │ ├── __init__.py
│ │ │ └── skill.yaml
│ │ ├── dot_env_file
│ │ ├── dummy_aea/
│ │ │ ├── __init__.py
│ │ │ ├── aea-config.yaml
│ │ │ ├── bad_requirements.txt
│ │ │ ├── connections/
│ │ │ │ └── __init__.py
│ │ │ ├── contracts/
│ │ │ │ └── __init__.py
│ │ │ ├── cosmos_private_key.txt
│ │ │ ├── default_private_key.pem
│ │ │ ├── ethereum_private_key.txt
│ │ │ ├── fetchai_private_key.txt
│ │ │ ├── protocols/
│ │ │ │ └── __init__.py
│ │ │ ├── requirements.txt
│ │ │ ├── skills/
│ │ │ │ └── __init__.py
│ │ │ └── vendor/
│ │ │ ├── __init__.py
│ │ │ └── fetchai/
│ │ │ ├── __init__.py
│ │ │ ├── connections/
│ │ │ │ └── __init__.py
│ │ │ ├── contracts/
│ │ │ │ └── __init__.py
│ │ │ ├── protocols/
│ │ │ │ └── __init__.py
│ │ │ └── skills/
│ │ │ └── __init__.py
│ │ ├── dummy_connection/
│ │ │ ├── __init__.py
│ │ │ ├── connection.py
│ │ │ └── connection.yaml
│ │ ├── dummy_contract/
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── some.json
│ │ │ │ └── some.wasm
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ ├── dummy_protocol/
│ │ │ └── protocol.yaml
│ │ ├── dummy_skill/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dummy.py
│ │ │ ├── dummy_subpackage/
│ │ │ │ ├── __init__.py
│ │ │ │ └── foo.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── ethereum_private_key.txt
│ │ ├── ethereum_private_key_two.txt
│ │ ├── exception_skill/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── fetchai_private_key.txt
│ │ ├── fetchai_private_key_wrong.txt
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── t_protocol/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── t_protocol.proto
│ │ │ │ └── t_protocol_pb2.py
│ │ │ └── t_protocol_no_ct/
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── message.py
│ │ │ ├── protocol.yaml
│ │ │ ├── serialization.py
│ │ │ ├── t_protocol_no_ct.proto
│ │ │ └── t_protocol_no_ct_pb2.py
│ │ ├── gym-connection.yaml
│ │ ├── hashes.csv
│ │ ├── petstore_sim.yaml
│ │ ├── sample_specification.yaml
│ │ └── sample_specification_no_custom_types.yaml
│ ├── list_of_packages_for_aea_tests.txt
│ ├── oracle_contract_address.txt
│ ├── test_aea/
│ │ ├── __init__.py
│ │ ├── test_act_storage.py
│ │ ├── test_aea.py
│ │ ├── test_aea_builder.py
│ │ ├── test_agent.py
│ │ ├── test_agent_loop.py
│ │ ├── test_cli/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── test_add/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_contract.py
│ │ │ │ ├── test_generic.py
│ │ │ │ ├── test_protocol.py
│ │ │ │ └── test_skill.py
│ │ │ ├── test_add_key.py
│ │ │ ├── test_build.py
│ │ │ ├── test_config.py
│ │ │ ├── test_create.py
│ │ │ ├── test_delete.py
│ │ │ ├── test_eject.py
│ │ │ ├── test_fetch.py
│ │ │ ├── test_fingerprint.py
│ │ │ ├── test_freeze.py
│ │ │ ├── test_generate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_generate.py
│ │ │ │ └── test_protocols.py
│ │ │ ├── test_generate_key.py
│ │ │ ├── test_generate_wealth.py
│ │ │ ├── test_get_address.py
│ │ │ ├── test_get_multiaddress.py
│ │ │ ├── test_get_public_key.py
│ │ │ ├── test_get_wealth.py
│ │ │ ├── test_init.py
│ │ │ ├── test_install.py
│ │ │ ├── test_interact.py
│ │ │ ├── test_issue_certificates.py
│ │ │ ├── test_launch.py
│ │ │ ├── test_launch_end_to_end.py
│ │ │ ├── test_list.py
│ │ │ ├── test_local_registry_update.py
│ │ │ ├── test_loggers.py
│ │ │ ├── test_login.py
│ │ │ ├── test_logout.py
│ │ │ ├── test_misc.py
│ │ │ ├── test_plugin.py
│ │ │ ├── test_publish.py
│ │ │ ├── test_push.py
│ │ │ ├── test_register.py
│ │ │ ├── test_registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_add.py
│ │ │ │ ├── test_fetch.py
│ │ │ │ ├── test_login.py
│ │ │ │ ├── test_logout.py
│ │ │ │ ├── test_publish.py
│ │ │ │ ├── test_push.py
│ │ │ │ ├── test_registration.py
│ │ │ │ └── test_utils.py
│ │ │ ├── test_remove/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_base.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_contract.py
│ │ │ │ ├── test_dependencies.py
│ │ │ │ ├── test_protocol.py
│ │ │ │ └── test_skill.py
│ │ │ ├── test_remove_key.py
│ │ │ ├── test_reset_password.py
│ │ │ ├── test_run.py
│ │ │ ├── test_scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_decision_maker_handler.py
│ │ │ │ ├── test_error_handler.py
│ │ │ │ ├── test_generic.py
│ │ │ │ ├── test_protocols.py
│ │ │ │ └── test_skills.py
│ │ │ ├── test_search.py
│ │ │ ├── test_transfer.py
│ │ │ ├── test_upgrade.py
│ │ │ ├── test_utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_config.py
│ │ │ │ └── test_utils.py
│ │ │ └── tools_for_testing.py
│ │ ├── test_components/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_loader.py
│ │ │ └── test_utils.py
│ │ ├── test_configurations/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_config.py
│ │ │ ├── test_base.py
│ │ │ ├── test_loader.py
│ │ │ ├── test_manager.py
│ │ │ ├── test_pypi.py
│ │ │ ├── test_schema.py
│ │ │ ├── test_utils.py
│ │ │ └── test_validation.py
│ │ ├── test_connections/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_scaffold.py
│ │ │ └── test_sync_connection.py
│ │ ├── test_context/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_contracts/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_crypto/
│ │ │ ├── __init__.py
│ │ │ ├── test_helpers.py
│ │ │ ├── test_ledger_apis.py
│ │ │ ├── test_password_end2end.py
│ │ │ ├── test_registries.py
│ │ │ ├── test_registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_crypto_registry.py
│ │ │ │ ├── test_ledger_api_registry.py
│ │ │ │ └── test_misc.py
│ │ │ └── test_wallet.py
│ │ ├── test_decision_maker/
│ │ │ ├── __init__.py
│ │ │ ├── test_default.py
│ │ │ ├── test_gop.py
│ │ │ ├── test_ownership_state.py
│ │ │ ├── test_preferences.py
│ │ │ └── test_scaffold.py
│ │ ├── test_error_handler/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ └── test_scaffold.py
│ │ ├── test_exceptions.py
│ │ ├── test_helpers/
│ │ │ ├── __init__.py
│ │ │ ├── test_acn/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_agent_record.py
│ │ │ │ └── test_uri.py
│ │ │ ├── test_async_friendly_queue.py
│ │ │ ├── test_async_utils.py
│ │ │ ├── test_base.py
│ │ │ ├── test_env_vars.py
│ │ │ ├── test_exec_timeout.py
│ │ │ ├── test_file_io.py
│ │ │ ├── test_install_dependency.py
│ │ │ ├── test_io.py
│ │ │ ├── test_ipfs/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ ├── test_logging.py
│ │ │ ├── test_multiaddr.py
│ │ │ ├── test_multiple_executor.py
│ │ │ ├── test_pipe/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_pipe.py
│ │ │ ├── test_preference_representations/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ ├── test_profiling.py
│ │ │ ├── test_search/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── test_generic.py
│ │ │ │ └── test_models.py
│ │ │ ├── test_serializers.py
│ │ │ ├── test_storage.py
│ │ │ ├── test_sym_link.py
│ │ │ ├── test_transaction/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ └── test_yaml_utils.py
│ │ ├── test_identity/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_launcher.py
│ │ ├── test_mail/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_multiplexer.py
│ │ ├── test_package_loading.py
│ │ ├── test_protocols/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_dialogue/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_base.py
│ │ │ │ └── test_msg_resolve.py
│ │ │ ├── test_generator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common.py
│ │ │ │ ├── test_common.py
│ │ │ │ ├── test_end_to_end.py
│ │ │ │ ├── test_extract_specification.py
│ │ │ │ ├── test_generator.py
│ │ │ │ └── test_validate.py
│ │ │ └── test_scaffold.py
│ │ ├── test_registries/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ └── test_filter.py
│ │ ├── test_runner.py
│ │ ├── test_runtime.py
│ │ ├── test_skills/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_behaviours.py
│ │ │ ├── test_error.py
│ │ │ ├── test_scaffold.py
│ │ │ ├── test_task_subprocess.py
│ │ │ └── test_tasks.py
│ │ ├── test_task.py
│ │ └── test_test_tools/
│ │ ├── __init__.py
│ │ ├── test_click_testing.py
│ │ ├── test_test_cases.py
│ │ ├── test_test_contract.py
│ │ └── test_test_skill.py
│ ├── test_aea_core_packages/
│ │ ├── test_connections/
│ │ │ ├── test_http_client/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_http_client.py
│ │ │ ├── test_http_server/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_http_server.py
│ │ │ │ └── test_http_server_and_client.py
│ │ │ └── test_ledger/
│ │ │ ├── __init__.py
│ │ │ ├── test_contract_api.py
│ │ │ └── test_ledger_api.py
│ │ ├── test_contracts/
│ │ │ ├── __init__.py
│ │ │ └── test_erc1155/
│ │ │ ├── __init__.py
│ │ │ └── test_contract.py
│ │ └── test_skills_integration/
│ │ ├── test_echo.py
│ │ ├── test_generic.py
│ │ ├── test_hello_world.py
│ │ └── test_http_echo.py
│ ├── test_aea_extra/
│ │ ├── __init__.py
│ │ └── test_manager/
│ │ ├── __init__.py
│ │ ├── test_manager.py
│ │ └── test_utils.py
│ ├── test_docs/
│ │ ├── __init__.py
│ │ ├── helper.py
│ │ ├── test_agent_vs_aea/
│ │ │ ├── __init__.py
│ │ │ ├── agent_code_block.py
│ │ │ └── test_agent_vs_aea.py
│ │ ├── test_bash_yaml/
│ │ │ ├── __init__.py
│ │ │ ├── md_files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bash-aggregation-demo.md
│ │ │ │ ├── bash-aries-cloud-agent-demo.md
│ │ │ │ ├── bash-car-park-skills.md
│ │ │ │ ├── bash-cli-vs-programmatic-aeas.md
│ │ │ │ ├── bash-config.md
│ │ │ │ ├── bash-connection.md
│ │ │ │ ├── bash-contract.md
│ │ │ │ ├── bash-decision-maker.md
│ │ │ │ ├── bash-deployment.md
│ │ │ │ ├── bash-erc1155-skills.md
│ │ │ │ ├── bash-generic-skills-step-by-step.md
│ │ │ │ ├── bash-generic-skills.md
│ │ │ │ ├── bash-gym-example.md
│ │ │ │ ├── bash-gym-skill.md
│ │ │ │ ├── bash-http-connection-and-skill.md
│ │ │ │ ├── bash-language-agnostic-definition.md
│ │ │ │ ├── bash-ledger-integration.md
│ │ │ │ ├── bash-logging.md
│ │ │ │ ├── bash-ml-skills.md
│ │ │ │ ├── bash-oracle-demo.md
│ │ │ │ ├── bash-orm-integration.md
│ │ │ │ ├── bash-p2p-connection.md
│ │ │ │ ├── bash-package-imports.md
│ │ │ │ ├── bash-performance-benchmark.md
│ │ │ │ ├── bash-por.md
│ │ │ │ ├── bash-protocol-generator.md
│ │ │ │ ├── bash-quickstart.md
│ │ │ │ ├── bash-raspberry-set-up.md
│ │ │ │ ├── bash-scaffolding.md
│ │ │ │ ├── bash-skill-guide.md
│ │ │ │ ├── bash-skill.md
│ │ │ │ ├── bash-tac-skills-contract.md
│ │ │ │ ├── bash-tac-skills.md
│ │ │ │ ├── bash-tac.md
│ │ │ │ ├── bash-thermometer-skills.md
│ │ │ │ ├── bash-wealth.md
│ │ │ │ └── bash-weather-skills.md
│ │ │ └── test_demo_docs.py
│ │ ├── test_build_aea_programmatically/
│ │ │ ├── __init__.py
│ │ │ ├── programmatic_aea.py
│ │ │ └── test_programmatic_aea.py
│ │ ├── test_cli_commands.py
│ │ ├── test_cli_vs_programmatic_aeas/
│ │ │ ├── __init__.py
│ │ │ ├── programmatic_aea.py
│ │ │ └── test_cli_vs_programmatic_aea.py
│ │ ├── test_data_models.py
│ │ ├── test_decision_maker_transaction/
│ │ │ ├── __init__.py
│ │ │ ├── decision_maker_transaction.py
│ │ │ └── test_decision_maker_transaction.py
│ │ ├── test_docs_http_connection_and_skill.py
│ │ ├── test_docs_protocol.py
│ │ ├── test_docs_skill.py
│ │ ├── test_generic_step_by_step_guide/
│ │ │ ├── __init__.py
│ │ │ └── test_generic_step_by_step_guide.py
│ │ ├── test_generic_storage.py
│ │ ├── test_language_agnostic_definition.py
│ │ ├── test_ledger_integration.py
│ │ ├── test_multiagent_manager.py
│ │ ├── test_multiplexer_standalone/
│ │ │ ├── __init__.py
│ │ │ ├── multiplexer_standalone.py
│ │ │ └── test_multiplexer_standalone.py
│ │ ├── test_orm_integration/
│ │ │ ├── __init__.py
│ │ │ ├── orm_seller_strategy.py
│ │ │ └── test_orm_integration.py
│ │ ├── test_query_language.py
│ │ ├── test_quickstart.py
│ │ ├── test_simple_oef_usage.py
│ │ ├── test_skill_guide/
│ │ │ ├── __init__.py
│ │ │ └── test_skill_guide.py
│ │ ├── test_skill_testing.py
│ │ └── test_standalone_transaction/
│ │ ├── __init__.py
│ │ ├── standalone_transaction.py
│ │ └── test_standalone_transaction.py
│ ├── test_examples/
│ │ ├── __init__.py
│ │ ├── test_gym_ex.py
│ │ └── test_http_client_connection_to_aries_cloud_agent.py
│ ├── test_packages/
│ │ ├── __init__.py
│ │ ├── test_connections/
│ │ │ ├── __init__.py
│ │ │ ├── test_p2p_libp2p/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_aea_cli.py
│ │ │ │ ├── test_build.py
│ │ │ │ ├── test_communication.py
│ │ │ │ ├── test_errors.py
│ │ │ │ ├── test_fault_tolerance.py
│ │ │ │ ├── test_integration.py
│ │ │ │ ├── test_public_dht.py
│ │ │ │ └── test_slow_queue.py
│ │ │ ├── test_prometheus/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_prometheus.py
│ │ │ └── test_webhook/
│ │ │ ├── __init__.py
│ │ │ └── test_webhook.py
│ │ ├── test_contracts/
│ │ │ └── __init__.py
│ │ ├── test_protocols/
│ │ │ ├── __init__.py
│ │ │ ├── test_aggregation.py
│ │ │ ├── test_ml_trade.py
│ │ │ └── test_prometheus.py
│ │ ├── test_skills/
│ │ │ ├── __init__.py
│ │ │ ├── test_advanced_data_request/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_aries_alice/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_aries_faber/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_carpark_detection/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_database.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw1/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw2/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw3/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_erc1155_deploy/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_fetch_block/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_hello_world/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_behaviours.py
│ │ │ ├── test_http_echo/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_ml_data_provider/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_ml_train/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── helpers.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_strategy.py
│ │ │ │ └── test_task.py
│ │ │ ├── test_registration_aw1/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_aggregation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_buyer/
│ │ │ │ └── __init__.py
│ │ │ ├── test_simple_data_request/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_oracle/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_oracle_client/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_seller/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_service_registration/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_service_search/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_tac_control/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_game.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ └── test_parameters.py
│ │ │ ├── test_tac_control_contract/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ └── test_parameters.py
│ │ │ ├── test_tac_negotiation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ ├── test_logical.py
│ │ │ │ ├── test_strategy.py
│ │ │ │ └── test_transactions.py
│ │ │ ├── test_tac_participation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_game.py
│ │ │ │ └── test_handlers.py
│ │ │ └── test_thermometer/
│ │ │ ├── __init__.py
│ │ │ └── test_strategy.py
│ │ └── test_skills_integration/
│ │ ├── __init__.py
│ │ ├── test_aries_demo.py
│ │ ├── test_carpark.py
│ │ ├── test_coin_price.py
│ │ ├── test_erc1155.py
│ │ ├── test_fetch_block.py
│ │ ├── test_generic.py
│ │ ├── test_gym.py
│ │ ├── test_ml_skills.py
│ │ ├── test_simple_aggregation.py
│ │ ├── test_simple_oracle.py
│ │ ├── test_tac.py
│ │ ├── test_thermometer.py
│ │ └── test_weather.py
│ └── test_packages_for_aea_tests/
│ ├── __init__.py
│ ├── test_connections/
│ │ ├── __init__.py
│ │ ├── test_gym/
│ │ │ ├── __init__.py
│ │ │ └── test_gym.py
│ │ ├── test_local/
│ │ │ ├── __init__.py
│ │ │ ├── test_misc.py
│ │ │ └── test_search_services.py
│ │ ├── test_oef/
│ │ │ ├── __init__.py
│ │ │ ├── test_communication.py
│ │ │ ├── test_models.py
│ │ │ └── test_oef_serializer.py
│ │ ├── test_p2p_libp2p_client/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_cli.py
│ │ │ ├── test_communication.py
│ │ │ └── test_errors.py
│ │ ├── test_p2p_libp2p_mailbox/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_cli.py
│ │ │ ├── test_communication.py
│ │ │ ├── test_errors.py
│ │ │ └── test_mailbox_service.py
│ │ ├── test_p2p_stub/
│ │ │ ├── __init__.py
│ │ │ └── test_p2p_stub.py
│ │ ├── test_soef/
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── test_soef.py
│ │ │ └── test_soef_integration.py
│ │ ├── test_stub/
│ │ │ ├── __init__.py
│ │ │ └── test_stub.py
│ │ └── test_tcp/
│ │ ├── __init__.py
│ │ ├── test_base.py
│ │ └── test_communication.py
│ ├── test_protocols/
│ │ ├── test_acn.py
│ │ ├── test_contract_api.py
│ │ ├── test_default.py
│ │ ├── test_fipa.py
│ │ ├── test_gym.py
│ │ ├── test_http.py
│ │ ├── test_ledger_api.py
│ │ ├── test_oef_search.py
│ │ ├── test_register.py
│ │ ├── test_signing.py
│ │ ├── test_state_update.py
│ │ └── test_tac.py
│ └── test_skills/
│ ├── __init__.py
│ ├── test_echo/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ └── test_handlers.py
│ ├── test_erc1155_client/
│ │ ├── __init__.py
│ │ ├── intermediate_class.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_strategy.py
│ ├── test_generic_buyer/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_models.py
│ ├── test_generic_seller/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_models.py
│ ├── test_gym/
│ │ ├── __init__.py
│ │ ├── helpers.py
│ │ ├── intermediate_class.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ ├── test_helpers.py
│ │ ├── test_rl_agent.py
│ │ └── test_task.py
│ └── test_weather_station/
│ ├── __init__.py
│ ├── test_dummy_weather_station_data.py
│ ├── test_registration_db.py
│ └── test_strategy.py
├── tox.ini
└── user-image/
├── Dockerfile
├── README.md
├── docker-env.sh
└── scripts/
├── docker-build-img.sh
└── docker-publish-img.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.tox
.pytest_cache
build
dist
htmlcov
tac.egg-info
log*.txt
================================================
FILE: .firebaserc
================================================
{
"projects": {
"default": "fetch-docs-preview"
}
}
================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
# <pattern> text
# Declare files that will always have CRLF line endings on checkout.
# <pattern> text eol=crlf
# Declare files that will always have LF line endings on checkout.
*.css text eol=lf
*.html text eol=lf
*.java text eol=lf
*.js text eol=lf
*.json text eol=lf
*.properties text eol=lf
*.txt text eol=lf
*.xml text eol=lf
*.py text eol=lf
*.yaml text eol=lf
*.md text eol=lf
# Denote all files that are truly binary and should not be modified.
*.class binary
*.jar binary
*.gif binary
*.jpg binary
*.png binary
*.ico binary
================================================
FILE: .github/CODEOWNERS
================================================
* @5A11 @jrriehl
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: 🐛 Bug Report
description: Report a reproducible bug
title: "<Short description of the bug>"
labels: ["bug", "unconfirmed"]
body:
- type: markdown
attributes:
value: |
Thank you for reporting the issue you are facing. Please complete this form so we can have the necessary information to assist you.
- type: checkboxes
id: prerequisites
attributes:
label: Prerequisites
description: Please confirm before submitting a new issue
options:
- label: I am running the [latest version of the AEA Framework](https://docs.fetch.ai/aea/version/).
required: true
- label: I checked the [documentation](https://docs.fetch.ai/aea/) and found no answer to my problem.
required: true
- label: I checked the [existing issues](https://github.com/fetchai/agents-aea/issues) to make sure my problem has not already been reported.
required: true
- label: I have read the [code of conduct](https://github.com/fetchai/agents-aea/blob/main/CODE_OF_CONDUCT.md) before creating this issue.
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: Describe the behavior you are expecting
validations:
required: true
- type: textarea
id: actual
attributes:
label: Current Behavior
description: Describe the current behavior
validations:
required: true
- type: textarea
id: steps
attributes:
label: To Reproduce
description: Detailed steps for reproducing the issue
validations:
required: false
- type: textarea
id: context
attributes:
label: Context
description: Any relevant information about your setup (this is important in case the issue is not reproducible except under certain conditions)
placeholder: |
Operating system [e.g. MacOS], Python version [e.g. 3.8.5], AEA version [e.g. 1.2.0], ...
validations:
required: false
- type: textarea
id: logs
attributes:
label: Failure Logs
description: Include any relevant log snippets or files here
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: ☝️ Feature request
description: Suggest an idea for this project
title: "<Short description of the feature>"
labels: ["feature-request", "unconfirmed"]
body:
- type: markdown
attributes:
value: |
Thank you for suggesting a new idea for the AEA project. Please complete this form so we can have the necessary information about the feature you are requesting.
- type: checkboxes
id: prerequisites
attributes:
label: Prerequisites
description: Please confirm before submitting a feature request.
options:
- label: I checked the [documentation](https://docs.fetch.ai/aea/) and made sure this feature does not already exist.
required: true
- label: I checked the [existing issues](https://github.com/fetchai/agents-aea/issues) to make sure this feature has not already been requested.
required: true
- label: I have read the [code of conduct](https://github.com/fetchai/agents-aea/blob/main/CODE_OF_CONDUCT.md) before creating this issue.
required: true
- type: textarea
id: problem
attributes:
label: Problem
description: |
If your feature request relates to a problem, provide a description here, e.g. I'm always frustrated when [...]
validations:
required: false
- type: textarea
id: solution
attributes:
label: Feature / Solution
description: |
Provide a description of what you want to happen
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives
description: |
Provide any alternative solutions or features you've considered
- type: textarea
id: info
attributes:
label: Additional Context
description: |
Any other context or screenshots about the feature request
validations:
required: false
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/release.md
================================================
## Release summary
Version number: [e.g. 1.0.1]
## Release details
Describe in short the main changes with the new release.
## Checklist
_Put an `x` in the boxes that apply._
- [ ] I am making a pull request against the `main` branch from `develop`.
- [ ] Lint and unit tests pass locally.
- [ ] I have checked the fingerprint hashes are correct by running (`scripts/generate_ipfs_hashes.py`).
- [ ] I have regenerated and updated the latest API docs.
- [ ] I built the documentation and updated it with the latest changes.
- [ ] I have added an item in `HISTORY.md` for this release.
- [ ] I bumped the version number in the `aea/__version__.py` file.
- [ ] I bumped the version number in every Docker image of the repo and published it. Also, I built and published them with tag `latest`
(check the READMEs of [`aea-develop`](https://github.com/fetchai/agents-aea/blob/master/develop-image/README.md#publish)
and [`aea-user`](https://github.com/fetchai/agents-aea/blob/master/develop-image/user-image/README.md#publish))
- [ ] I have pushed the latest packages to the registry.
- [ ] I have uploaded the latest `aea` to PyPI.
- [ ] I have uploaded the latest plugins to PyPI.
## Further comments
Write here any other comment about the release, if any.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
# Maintain dependencies for Pip
- package-ecosystem: "pip"
directory: "."
schedule:
interval: "weekly"
target-branch: "develop"
labels:
- "dependencies"
================================================
FILE: .github/pull_request_template.md
================================================
## Proposed changes
Describe the changes here.
## Issues
Links to any issues resolved.
## Types of changes
What types of changes does your code introduce to agents-aea?
_Put an `x` in the boxes that apply_
- [ ] Bugfix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to stop working as expected)
- [ ] Something else (e.g. test, package, script, example, deployment, infrastructure, ...)
## Checklist
_Put an `x` in the boxes that apply._
- [ ] I have read the [CONTRIBUTING](https://github.com/fetchai/agents-aea/blob/main/CONTRIBUTING.md) document.
- [ ] I have based my branch, and I am making a pull request against, the `develop` branch.
- [ ] Lint and unit tests pass locally with my changes.
### If applicable
- [ ] I have added tests that prove my fix is effective or that my feature works.
- [ ] I have checked that code coverage does not decrease.
- [ ] I have added/updated the documentations.
- [ ] Dependent changes have been merged and published in downstream modules.
## Further comments
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did, what alternatives you considered, etc.
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main, develop ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '35 1 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'go', 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
================================================
FILE: .github/workflows/docs_pr_preview.yml
================================================
name: Documentation Preview
on:
pull_request:
branches:
- master
- develop
paths:
- 'docs/**'
jobs:
build:
name: Docs Ephemerial Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Use python 3.7
uses: actions/setup-python@v4
with:
python-version: '3.7'
- name: Install Dependencies
run: cd docs && pip3 install pipenv && pipenv install -d --skip-lock --python python3
- name: Build
run: cd docs && pipenv run mkdocs build -f ../mkdocs.yml
- name: Archive Production Artifact
uses: actions/upload-artifact@master
with:
name: dist
path: site
deploy:
name: Docs Ephemerial Deploy
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Download Artifact
uses: actions/download-artifact@master
with:
name: dist
path: site
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}"
expires: 2d
projectId: fetch-docs-preview
# entryPoint: docs/
================================================
FILE: .github/workflows/publish.yaml
================================================
name: Build, Publish and Deploy Docker Container
on:
push:
branches:
- develop
- main
jobs:
publish:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup GCloud - sandbox
uses: google-github-actions/setup-gcloud@v0
if: github.ref == 'refs/heads/develop'
with:
project_id: ${{ secrets.GCLOUD_FETCH_AI_SANDBOX_PROJECT }}
service_account_key: ${{ secrets.GCLOUD_FETCH_AI_SANDBOX_KEY }}
- name: Setup GCloud - production
uses: google-github-actions/setup-gcloud@v0
if: github.ref == 'refs/heads/main'
with:
project_id: ${{ secrets.GCLOUD_FETCH_AI_PROD_PROJECT }}
service_account_key: ${{ secrets.GCLOUD_FETCH_AI_PROD_KEY }}
- name: Configure Docker
run: |
gcloud auth configure-docker
- name: Set Image Tag
id: vars
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
# Push image to Google Container Registry
- name: Build and Push Images
run: |
chmod +x ./scripts/acn/build_upload_img.sh
if [ ${{ github.ref }} == 'refs/heads/develop' ]
then
./scripts/acn/build_upload_img.sh
fi
if [ ${{ github.ref }} == 'refs/heads/main' ]
then
./scripts/acn/build_upload_img.sh prod
fi
- name: Repository Dispatch
env:
IMAGE_TAG: ${{ steps.vars.outputs.sha_short }}
run: |
if [ ${{ github.ref }} == 'refs/heads/develop' ]
then
curl -H "Accept: application/vnd.github.everest-preview+json" \
-H "Authorization: token ${{ secrets.GH_PAT }}" \
--request POST \
--data '{"event_type": "agents-dht-testnet", "client_payload": {"image": "gcr.io/fetch-ai-sandbox/acn_node", "tag": "'"$IMAGE_TAG"'"}}' \
https://api.github.com/repos/fetchai/infra-sandbox-london-b-deployment/dispatches
fi
if [ ${{ github.ref }} == 'refs/heads/main' ]
then
curl -H "Accept: application/vnd.github.everest-preview+json" \
-H "Authorization: token ${{ secrets.GH_PAT }}" \
--request POST \
--data '{"event_type": "agents-dht", "client_payload": {"image": "gcr.io/fetch-ai-images/acn_node", "tag": "'"$IMAGE_TAG"'"}}' \
https://api.github.com/repos/fetchai/infra-mainnet-v2-deployment/dispatches
fi
================================================
FILE: .github/workflows/upload_docker_images.yaml
================================================
name: Build and upload develop-image to docker hub
on:
push:
branches: [ main ]
jobs:
build:
env:
BASE_TAG: fetchai/aea-develop
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up tag
run: echo export TAG=${BASE_TAG}:$(python3 -c "from setup import about; print(about[\"__version__\"])") > env.sh
- name: docker login
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
- name: Build the Docker image
run: |
source env.sh
docker build . -f ./develop-image/Dockerfile --tag $TAG
- name: Tag to latest
run: |
source env.sh
docker tag $TAG $BASE_TAG:latest
- name: Docker Push
run: |
source env.sh
docker push $TAG
docker push $BASE_TAG:latest
================================================
FILE: .github/workflows/workflow.yml
================================================
name: AEA framework sanity checks and tests
on: pull_request
jobs:
python_checks:
continue-on-error: False
runs-on: '${{ matrix.os }}'
strategy:
matrix:
os:
- ubuntu-latest
python-version:
- '3.8'
tox-job:
- check_plugins_code_consistency
- check_go_code_consistency
- bandit
- safety
- black-check
- isort-check
- flake8
- vulture
- mypy
- pylint
timeout-minutes: 30
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '${{ matrix.python-version }}'
- name: Install dependencies
run: pip install tox==3.25.1
- name: 'Run check ${{ matrix.tox-job }}'
run: |
tox -e ${{ matrix.tox-job }}
go_checks:
continue-on-error: False
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
- name: Golang code style check (libp2p_node)
uses: golangci/golangci-lint-action@v3.1.0
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
with:
version: v1.48.0
working-directory: libs/go/libp2p_node
- name: Golang code style check (aealite)
uses: golangci/golangci-lint-action@v3.1.0
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
with:
version: v1.48.0
working-directory: libs/go/aealite
misc_checks:
runs-on: ubuntu-latest
continue-on-error: False
timeout-minutes: 10
strategy:
matrix:
python-version:
- '3.8'
tox-job:
- liccheck
- copyright_check
- hash_check -- --timeout 40.0
- package_version_checks
- package_dependencies_checks
- check_generate_all_protocols
- docs
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '${{ matrix.python-version }}'
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install --user --upgrade setuptools
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
# install IPFS
sudo apt-get install -y wget
wget -O ./go-ipfs.tar.gz https://dist.ipfs.io/go-ipfs/v0.6.0/go-ipfs_v0.6.0_linux-amd64.tar.gz
tar xvfz go-ipfs.tar.gz
sudo mv go-ipfs/ipfs /usr/local/bin/ipfs
ipfs init
make protolint_install
- name: Install dependencies
run: pip install tox==3.25.1
- name: 'Run check ${{ matrix.tox-job }}'
run: |
tox -e ${{ matrix.tox-job }}
misc_checks_extra:
continue-on-error: False
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
- name: Check copyright year is up to date
run: |
./scripts/bump_year.sh $(date +%Y)
git diff --quiet||(echo "Some files have the incorrect year in their copyright header. Run ./scripts/bump_year.sh!"; exit 1)
echo "all good"
docs_check:
continue-on-error: False
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
- name: Install markdown-spellcheck
run: sudo npm install -g markdown-spellcheck
- name: Check Docs links
run: tox -e check-doc-links
- name: Check API Docs updated
run: tox -e check_api_docs
- name: Check spelling
run: tox -e spell_check
plugins_install:
continue-on-error: False
runs-on: ${{ matrix.sys.os }}
strategy:
matrix:
sys:
- { os: windows-latest, shell: "msys2 {0}" }
- { os: ubuntu-latest, shell: bash }
- { os: macos-latest, shell: bash }
python_version: [3.8]
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- if: matrix.sys.os == 'windows-latest'
uses: msys2/setup-msys2@v2
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
- if: matrix.os == 'ubuntu-latest'
name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
- name: Install tox
run: |
pip install tox==3.28.0
- name: Check plugin aea-ledger-cosmos
run: |
tox -r -e plugins_env -- sh -c "pip install ./plugins/aea-ledger-cosmos && aea generate-key cosmos && echo aea-ledger-cosmos checked!"
- name: Check plugin aea-ledger-ethereum
run: |
tox -r -e plugins_env -- sh -c "pip install ./plugins/aea-ledger-ethereum && aea generate-key ethereum && echo aea-ledger-ethereum checked!"
- name: Check plugin aea-ledger-fetchai
run: |
tox -r -e plugins_env -- sh -c "pip install ./plugins/aea-ledger-fetchai && aea generate-key fetchai && echo aea-ledger-fetchai checked!"
- name: Check plugin aea-cli-ipfs
run: |
tox -r -e plugins_env -- sh -c "pip install ./plugins/aea-cli-ipfs && aea ipfs --help && echo aea-cli-ipfs checked!"
protolint:
continue-on-error: False
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install protolint (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
make protolint_install
- name: Protolint check
run: |
make protolint
integration_tests:
if: github.base_ref == 'main'
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Setup GCloud - production
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ secrets.GCLOUD_FETCH_AI_PROD_PROJECT }}
service_account_key: ${{ secrets.GCLOUD_FETCH_AI_PROD_KEY }}
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
- name: Configure Docker
run: |
gcloud auth configure-docker
- name: Pull SOEF Image
run: |
docker pull gcr.io/fetch-ai-images/soef:9e78611 # change this to latest tag
- name: Pull fetchd
run: |
docker pull fetchai/fetchd:0.10.2
- name: Pull ganache
run: |
docker pull trufflesuite/ganache-cli:latest
- name: Async integration tests
run: tox -e py3.8 -- -m 'integration and not unstable and not ledger' ./tests --ignore=tests/test_aea_core_packages
core_packages_tests:
# tests intersection with ledger and integration
# limited tests set for quick checking primary functionality of the AEA
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Setup GCloud - production
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ secrets.GCLOUD_FETCH_AI_PROD_PROJECT }}
service_account_key: ${{ secrets.GCLOUD_FETCH_AI_PROD_KEY }}
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
- name: Configure Docker
run: |
gcloud auth configure-docker
- name: Pull SOEF Image
run: |
docker pull gcr.io/fetch-ai-images/soef:9e78611 # change this to latest tag
- name: Pull fetchd
run: |
docker pull fetchai/fetchd:0.10.2
- name: Pull ganache
run: |
docker pull trufflesuite/ganache-cli:latest
- name: Async integration tests
run: tox -e py3.8 -- tests/test_aea_core_packages/
integration_ledger_tests:
if: github.base_ref == 'main'
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- name: Setup GCloud - production
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ secrets.GCLOUD_FETCH_AI_PROD_PROJECT }}
service_account_key: ${{ secrets.GCLOUD_FETCH_AI_PROD_KEY }}
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
- name: Configure Docker
run: |
gcloud auth configure-docker
- name: Pull SOEF Image
run: |
docker pull gcr.io/fetch-ai-images/soef:9e78611 # change this to latest tag
- name: Integration tests
run: tox -e py3.8 -- -m 'integration and not unstable and ledger' ./tests --ignore=tests/test_aea_core_packages
aea-tests:
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python_version: [3.8, 3.9, "3.10"]
timeout-minutes: 90
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- if: matrix.os == 'ubuntu-latest'
name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
make protolint_install
# sudo apt-get install -y protobuf-compiler
# use sudo rm /var/lib/apt/lists/lock above in line above update if dependency install failures persist
# use sudo apt-get dist-upgrade above in line below update if dependency install failures persist
- if: matrix.os == 'macos-latest'
name: Install dependencies (macos-latest)
run: |
pip install tox
brew install gcc
# brew install protobuf
# brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/72457f0166d5619a83f508f2345b22d0617b5021/Formula/protobuf.rb
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-osx-x86_64.zip
unzip protoc-3.19.4-osx-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
brew tap yoheimuta/protolint
brew install protolint
- if: matrix.os == 'windows-latest'
name: Install dependencies (windows-latest)
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
python -m pip install -U pip
echo "::add-path::C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
choco install protoc --version 3.19.4
choco install mingw -y
choco install make -y
# to check make was installed
make --version
pip install tox
# wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
# unzip protoc-3.19.4-win64.zip -d protoc
# sudo mv protoc/bin/protoc /usr/local/bin/protoc
python scripts/update_symlinks_cross_platform.py
make protolint_install_win
# just check protolint runs
protolint version
- if: True
name: Unit tests
run: |
tox -e py${{ matrix.python_version }} -- -m 'not integration and not unstable and not ledger' ./tests/test_docs ./tests/test_aea
- name: Plugin tests
run: |
tox -e plugins-py${{ matrix.python_version }} -- -m 'not integration and not unstable'
examples-tests:
if: github.base_ref == 'main'
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
- name: Unit tests
run: tox -e py3.8 -- tests/test_examples
aea-extras-tests:
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python_version: [3.8, 3.9, "3.10"]
timeout-minutes: 90
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- if: matrix.os == 'ubuntu-latest'
name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
make protolint_install
# sudo apt-get install -y protobuf-compiler
# use sudo rm /var/lib/apt/lists/lock above in line above update if dependency install failures persist
# use sudo apt-get dist-upgrade above in line below update if dependency install failures persist
- if: matrix.os == 'macos-latest'
name: Install dependencies (macos-latest)
run: |
pip install tox
brew install gcc
# brew install protobuf
# brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/72457f0166d5619a83f508f2345b22d0617b5021/Formula/protobuf.rb
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-osx-x86_64.zip
unzip protoc-3.19.4-osx-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
brew tap yoheimuta/protolint
brew install protolint
- if: matrix.os == 'windows-latest'
name: Install dependencies (windows-latest)
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
python -m pip install -U pip
echo "::add-path::C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
choco install protoc --version 3.19.4
choco install mingw -y
choco install make -y
# to check make was installed
make --version
pip install tox
# wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
# unzip protoc-3.19.4-win64.zip -d protoc
# sudo mv protoc/bin/protoc /usr/local/bin/protoc
python scripts/update_symlinks_cross_platform.py
make protolint_install_win
# just check protolint runs
protolint version
- name: Unit tests
run: |
tox -e py${{ matrix.python_version }} -- ./tests/test_aea_extra
packages-tests:
if: github.base_ref == 'main'
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- plugins_install
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python_version: [3.8, 3.9, "3.10"]
timeout-minutes: 90
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- if: matrix.os == 'ubuntu-latest'
name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
make protolint_install
# sudo apt-get install -y protobuf-compiler
# use sudo rm /var/lib/apt/lists/lock above in line above update if dependency install failures persist
# use sudo apt-get dist-upgrade above in line below update if dependency install failures persist
- if: matrix.os == 'macos-latest'
name: Install dependencies (macos-latest)
run: |
pip install tox
brew install gcc
# brew install protobuf
# brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/72457f0166d5619a83f508f2345b22d0617b5021/Formula/protobuf.rb
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-osx-x86_64.zip
unzip protoc-3.19.4-osx-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
brew tap yoheimuta/protolint
brew install protolint
- if: matrix.os == 'windows-latest'
name: Install dependencies (windows-latest)
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
python -m pip install -U pip
echo "::add-path::C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
choco install protoc --version 3.19.4
choco install mingw -y
choco install make -y
# to check make was installed
make --version
pip install tox
# wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
# unzip protoc-3.19.4-win64.zip -d protoc
# sudo mv protoc/bin/protoc /usr/local/bin/protoc
python scripts/update_symlinks_cross_platform.py
make protolint_install_win
# just check protolint runs
protolint version
- if: True
name: Unit tests
run: |
tox -e py${{ matrix.python_version }} -- --cov=packages/fetchai/connections --cov=packages/fetchai/contracts --cov=packages/fetchai/protocols --cov=packages/fetchai/skills -m 'not integration and not unstable' ./tests/test_packages_for_aea_tests ./tests/test_packages
golang_tests:
continue-on-error: True
needs:
- go_checks
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
python-version: [3.8]
timeout-minutes: 45
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- if: matrix.os == 'macos-latest'
working-directory: ./libs/go/libp2p_node
run: |
export LINKPATH=`go env GOTOOLDIR`/link
echo $LINKPATH
sudo cp $LINKPATH ${LINKPATH}_orig
sudo cp link $LINKPATH
sudo chmod a+x $LINKPATH
- if: matrix.python-version == '3.8'
name: Golang unit tests (libp2p_node)
working-directory: ./libs/go/libp2p_node
run: make test
- if: matrix.python-version == '3.8'
name: Golang unit tests (aealite)
working-directory: ./libs/go/aealite
run: go test -p 1 -timeout 0 -count 1 -v ./...
libp2p_coverage:
name: libp2p_coverage
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.17
uses: actions/setup-go@v3
with:
go-version: 1.17
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install make -y
- name: Get dependencies
working-directory: ./libs/go/libp2p_node/
run: |
make install
- name: Generate coverage report
working-directory: ./libs/go/libp2p_node/
run: |
make test
- name: Print coverage report
working-directory: ./libs/go/libp2p_node/
run: |
go tool cover -func=coverage.txt
coverage_checks:
continue-on-error: True
needs:
- python_checks
- go_checks
- misc_checks
- misc_checks_extra
- docs_check
- plugins_install
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- uses: actions/setup-go@v3
with:
go-version: "^1.17.0"
- name: Install dependencies (ubuntu-latest)
run: |
sudo apt-get update --fix-missing
sudo apt-get install libmbedtls-dev
sudo apt-get autoremove
sudo apt-get autoclean
pip install tox
pip install coverage
# install Protobuf compiler
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
unzip protoc-3.19.4-linux-x86_64.zip -d protoc
sudo mv protoc/bin/protoc /usr/local/bin/protoc
make protolint_install
- name: Run all tests
run: |
tox -e py3.8-cov -- --ignore=tests/test_docs --ignore=tests/test_examples --ignore=tests/test_packages/test_skills_integration -m 'not unstable' ./tests
tox -e plugins-py3.8-cov -- --cov-append -m 'not unstable'
continue-on-error: true
- name: Show full coverage report
run: |
coverage report -m -i
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
Pipfile.lock
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
# .env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
*.sqlite3
pip-wheel-metadata/
.DS_Store
*/.DS_Store
data/*
!data/aea.png
!data/video-aea.png
temp_private_key.pem
.idea/
input_file
output_file
!packages/fetchai/contracts/erc1155/build
!packages/fetchai/contracts/staking_erc20/build
!packages/fetchai/contracts/oracle/build
!packages/fetchai/contracts/oracle_client/build
!packages/fetchai/contracts/fet_erc20/build
packages/fetchai/connections/p2p_libp2p/libp2p_node/libp2p_node
!tests/data/dummy_contract/build
!plugins/aea-ledger-ethereum/tests/data/dummy_contract/build
!plugins/aea-ledger-cosmos/tests/data/dummy_contract/build
!plugins/aea-ledger-fetchai/tests/data/dummy_contract/build
deploy-image/.env
libs/go/aealite/aealite
libs/go/libp2p_node/libp2p_node
libs/go/libp2p_node/coverage.txt
libs/go/libp2p_node/dht/dhtclient/agent_records_store*
libs/go/libp2p_node/dht/dhtpeer/agent_records_store*
!libs/go/aea_end2end/seller_agent
coverage.txt
================================================
FILE: .spelling
================================================
# markdown-spellcheck spelling configuration file
# Format - lines beginning # are comments
# global dictionary is at the start, file overrides afterwards
# one word per line, to define a file override use ' - filename'
# where filename is relative to this configuration file
liveness
pre-shared
Blockchain-based
Asynchronisation
asynchronisation
Wooldridge
driverless
AEA
AEAs
Fetch.ai
blockchains
blockchain
ACAs
Alice_AEA
Faber_AEA
Alice_ACA
Faber_ACA
webhook
webhooks
localhost
testnet
multiaddress
regex
scaffolded
Ethereum
stdlib
VSCode
booleans
Colab
Dockerfile
SDKs
Teardown
trustless
deployer
Ganache
Ropsten
faucet
Fetch.ai.
unregisters
teardown
unregister
Agentland
instantiable
startup
backend
SQLite
backends
stdout
sOEF
Simple-OEF
soef
OpenAI's
OpenAI
PyPI
OpenAPI
fingerprinter
Hyperledger
proactiveness
composable
reusability
Github
tradeoffs
protobuf
secp256k1
a-zA-Z_
a-zA-Z0-9_
a-zA-Z-
0-9a-zA-Z-
a-zA-Z
0-9a-zA-Z
DLTs
permissionless
libp2p
ORMs
standalone
namespaced
prometheus
toolset
deserialised
snake_case
proto3
deserialising
Rowling
subexpression
subexpressions
deserialise
frontend
plugins
MacOs
WiFi
pipenv
automobiles
IoT
positionless
11km
1.1km
mainnet
testnets
v2
75km
50km
outbox
subclassing
gotchas
trustlessness
submodules
setuptools
linters
Favorito
MarcoFavorito
Minarsch
DavidMinarsch
Hosseini
Aristotelis
Triantafyllidis
Totoual
Diarmid
dishmop
Panasevych
Panasevychol
Kevin-Chen0
Turchenkov
solarw
Lokman
Rahmani
lrahmani
Jiří
Vestfál
MissingNO57
ejfitzgerald
Riehl
jrriehl
README.md
reentrancy
serialiser
simple-oef
vendorised
white_check_mark
k8s
illustrational
OAuth
ssh
keychain
submodule
Django
Multiaddresses
Grafana
Fipa
Base64
Pi3
Raspbian
Visdom
PRs
multiaddresses
unregistration
unregistering
pipx
BibTex
Kubernetes
Golang
web3
CosmWasm
Shoham
Yoti
PowerShell
deregisters
plugin
Fetch.AI
AEALite
Pipfile
12-factor
Disposability
disposability
ad-hoc
Nuitka
Perun
1.0.0rc1
docstrings
1.0.0rc2
install.ps1
pylint
quickstart
CVE-2021-27291
AgentLand
GCloud
p2p
LookupRequest
LookupResponse
AeaEnvelope
_envelope_bytes_
AgentRecord
AgentApi
DHTPeer
sequenceDiagram
listenLoop
OutputQueue
outputLoop
SendQueue
sendLoop
DhtNode
alt
ack-timeout
conn-error
generic_error
DESERIALIZATION_ERROR
RouteEnvelope
PoR
choco
utc-0
docstring
utils
kademlia
Capricorn
stargateworld-3
v0.8.x
fetch.ai
RaiseError
serializer's
pywin32
CosmPy
dockerised
Mermaid-JS
darglint
aea-cli-ipfs
tensorflow
ethereum
mypy
ipfshttpclient
0.8.0a2
int64
int32
cosmpy
tx
asyncio
golang
basecontracttesttool
linter
stargateworld
faq
fetchai
agents-aea
ci
perf
scipy
numpy
scikit-image
hello_world
pis
prebuilt
jsonschema
tox
- docs/language-agnostic-definition.md
fetchai
protocol_id
- docs/simple-oef.md
_do_
CosmWasm
- docs/ledger-integration.md
atestfet
v0.2.x
dorado-1
- docs/questions-and-answers.md
state_update
txt
- docs/protocol-generator.md
java
javascript
protoc
- docs/acn.md
p2p_libp2p_mailbox
- docs/cli-commands.md
aea
- docs/contract.md
init
code_id
init_msg
fetchai
erc1155
ContractApiMessage.Performative.GET_DEPLOY_TRANSACTION
- docs/decision-maker.md
tac_
- docs/limits.md
spec
micropython
Subprotocols
mempool
- docs/p2p-connection.md
p2p_libp2p
- docs/quickstart.md
my_first_aea
output_file
AEATestCase
test.py
aea-config
yaml
- docs/skill-guide.md
TickerBehaviour
behaviours.py
strategy.py
dialogues.py
oef_search
handlers.py
skill.yaml
packages.fetchai.skills.my_search.dialogues
capricorn-1
dorado
dorado-1
- acapy-alice-bob/AdminAPI.md
ACA-Py
ACA-Py-based
prover
- CODE_OF_CONDUCT.md
color
behavior
================================================
FILE: AUTHORS.md
================================================
# Authors
This is the official list of the AEA Framework authors:
### Lead
- Ali Hosseini <ali.hosseini@fetch.ai> [5A11](https://github.com/5A11)
### Primary Current and Past Contributors
- James Riehl [jrriehl](https://github.com/jrriehl)
- David Minarsch [DavidMinarsch](https://github.com/DavidMinarsch)
- Marco Favorito [MarcoFavorito](https://github.com/MarcoFavorito)
- Yuri Turchenkov [solarw](https://github.com/solarw)
- Oleg Panasevych [Panasevychol](https://github.com/panasevychol)
- Lokman Rahmani [lrahmani](https://github.com/lrahmani)
- Jiří Vestfál [MissingNO57](https://github.com/MissingNO57)
================================================
FILE: CITATION.cff
================================================
cff-version: 1.2.0
message: "If you use the AEA framework in your research, please cite it as below:"
title: Autonomous Economic Agent (AEA) Framework
authors:
- family-names: Hosseini
given-names: Seyed Ali
- family-names: Minarsch
given-names: David
- family-names: Favorito
given-names: Marco
- family-names: Riehl
given-names: James
- family-names: Turchenkov
given-names: Yuri
- family-names: Panasevych
given-names: Oleg
- family-names: Rahmani
given-names: Lokman
- family-names: Vestfál
given-names: Jiří
- family-names: Triantafyllidis
given-names: Aristotelis
- family-names: Campbell
given-names: Diarmid
- family-names: Chen
given-names: Kevin
date-released: "2019-08-21"
url: "https://github.com/fetchai/agents-aea/"
license: "Apache-2.0"
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at developer@fetch.ai. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
## Attribution
This Code of Conduct is adapted from the <https://www.contributor-covenant.org>, version 2.1,
available at <https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
Community Impact Guidelines were inspired by [Mozilla’s code of conduct enforcement ladder](https://github.com/mozilla/diversity).
For answers to common questions about this code of conduct, see the FAQ at <https://www.contributor-covenant.org/faq>. Translations are available at <https://www.contributor-covenant.org/translations>.
================================================
FILE: CONTRIBUTING.md
================================================
# Contribution Guidelines
Contributions to the framework, plugins, packages and related tools are welcome. As a contributor, here are the guidelines we would like you to follow:
- [Code of Conduct](#coc)
- [Question or Problem?](#question)
- [Issues and Bugs](#issue)
- [Feature Requests](#feature)
- [Submission Guidelines](#submit)
- [Coding Rules](#rules)
- [Commit Message Guidelines](#commit)
## <a name="coc"></a> Code of Conduct
Please read and follow our [Code of Conduct][coc].
## <a name="question"></a> Question or Problem?
Please use [GitHub Discussions][ghdiscussion] for support related questions and general discussions. Do NOT open issues as they are for bug reports and feature requests. This is because:
- Questions and answers stay available for public viewing so your question/answer might help someone else.
- GitHub Discussions voting system ensures the best answers are prominently visible.
## <a name="issue"></a> Found a Bug?
If you find a bug in the source code [submit a bug report issue](#submit-issue).
Even better, you can [submit a Pull Request](#submit-pr) with a fix.
## <a name="feature"></a> Missing a Feature?
You can *request* a new feature by [submitting a feature request issue](#submit-issue).
If you would like to *implement* a new feature:
- For a **Major Feature**, first [open an issue](#submit-issue) and outline your proposal so that it can be discussed.
- **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr).
## <a name="submit"></a> Submission Guidelines
### <a name="submit-issue"></a> Submitting an Issue
Before you submit an issue, please search the [issue tracker][issues]. An issue for your problem might already exist and the discussion might inform you of workarounds readily available.
For bug reports, it is important that we can reproduce and confirm it. For this, we need you to provide a minimal reproduction instruction (this is part of the bug report issue template).
You can file new issues by selecting from our [new issue templates][new-issue] and filling out the issue template.
### <a name="submit-pr"></a> Submitting a Pull Request (PR)
Before you submit your Pull Request (PR) consider the following guidelines:
1. All Pull Requests should be based off of and opened against the `develop` branch. Do **not** open a Pull Request against `main`!
2. Search [Existing PRs][prs] for an open or closed PR that relates to your submission.
You don't want to duplicate existing efforts.
3. Be sure that an issue exists describing the problem you're fixing, or the design for the feature you'd like to add.
4. [Fork](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) the [repository][github].
5. In your forked repository, make your changes in a new git branch created from the `develop` branch.
6. Make your changes, **including test cases** and updating documentation where appropriate.
7. Follow our [coding rules](#rules).
8. Run all tests and checks locally, as described in the [development guide][developing], and ensure they pass. This saves CI hours and ensures you only commit clean code.
9. Commit your changes using a descriptive commit message that follows our [commit message conventions](#commit).
10. Push your branch to GitHub.
11. In GitHub, send a pull request to `fetchai:develop`.
> Where possible, try to take advantage of the modularity of the framework and add new functionality via a new module. Currently, ledger plugins are supported and packages (skills, connections, protocols, contracts) allow for extensibility.
#### Reviewing a Pull Request
The AEA team reserves the right not to accept pull requests from community members who haven't been good citizens of the community. Such behavior includes not following our [code of conduct][coc] and applies within or outside the managed channels.
When you contribute a new feature, the maintenance burden is transferred to the core team. This means that the benefit of the contribution must be compared against the cost of maintaining the feature.
#### Addressing review feedback
If we ask for changes via code reviews then:
1. Make the required updates to the code.
2. Re-run the tests and checks to ensure they are still passing.
3. Create a new commit and push to your GitHub repository (this will update your Pull Request).
#### After your pull request is merged
After your pull request is merged, you can safely delete your branch and pull the changes from the (upstream) repository.
## <a name="rules"></a> Coding Rules
To ensure consistency throughout the source code, keep these rules in mind as you are working:
- All code must pass our code quality checks (linters, formatters, etc). See the [development guide][developing] section for more detail.
- All features or bug fixes **must be tested** via unit-tests and if applicable integration-tests. These help to, a. prove that your code works correctly, and b. guard against future breaking changes and lower the maintenance cost.
- All public features **must be documented**.
- All files must include a license header.
## <a name="commit"></a> Commit Message Convention
Please follow the [Conventional Commits v1.0.0][convcommit]. The commit types must be one of the following:
- **build**: Changes that affect the build system or external dependencies
- **ci**: Changes to our CI configuration files and scripts
- **docs**: Documentation only changes
- **feat**: A new feature
- **fix**: A bug fix
- **nfunc**: Code that improves some non-functional characteristic, such as performance, security, ...
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **test**: Adding missing tests or correcting existing tests
[coc]: https://github.com/fetchai/agents-aea/blob/main/CODE_OF_CONDUCT.md
[developing]: https://github.com/fetchai/agents-aea/blob/main/DEVELOPING.md
[ghdiscussion]: https://github.com/fetchai/agents-aea/discussions
[issues]: https://github.com/fetchai/agents-aea/issues
[new-issue]: https://github.com/fetchai/agents-aea/issues/new/choose
[prs]: https://github.com/fetchai/agents-aea/pulls
[convcommit]: https://www.conventionalcommits.org/en/v1.0.0/
[github]: https://github.com/fetchai/agents-aea
================================================
FILE: DEVELOPING.md
================================================
# Development Guidelines
- [Getting the Source](#get)
- [Setting up a New Development Environment](#setup)
- [Development](#dev)
- [General code quality checks](#general)
- [Updating API documentation](#api)
- [Updating documentation](#docs)
- [Updating dependencies](#deps)
- [Updating packages](#package)
- [Tests](#tests)
- [Miscellaneous checks](#misc)
- [Contributing](#contributing)
- [Making Releases](#release)
## <a name="get"></a> Getting the Source
1. Fork the [agents-aea repository][repo].
2. Clone your fork of the agents-aea repository:
``` shell
git clone git@github.com:<github username>/agents-aea.git
```
3. Define an `upstream` remote pointing back to the main agents-aea repository:
``` shell
git remote add upstream https://github.com/fetchai/agents-aea.git
```
## <a name="setup"></a> Setting up a New Development Environment
1. Ensure you have Python (version `3.8`, `3.9` or `3.10`) and [`poetry`][poetry].
2. ``` shell
make new-env
```
This will create a new virtual environment using poetry with the project and all the development dependencies installed.
> We use <a href="https://python-poetry.org" target="_blank">poetry</a> to manage dependencies. All python specific dependencies are specified in `pyproject.toml` and installed with the framework.
>
> You can have more control on the installed dependencies by leveraging poetry's features.
3. ``` shell
poetry shell
```
To enter the virtual environment.
Depending on what you want to do, you might need extra tools on your system:
- The project uses [Google Protocol Buffers][protobuf] compiler for message serialization. The compiler's version must match the `protobuf` library installed with the project (see `pyproject.toml`).
- The `fetchai/p2p_libp2p` package is partially developed in Go. To make changes, [install Golang][go].
- To update fingerprint hashes of packages, you will need the [IPFS daemon][ipfs].
## <a name="dev"></a>Development
### <a name="general"></a>General code quality checks
To run general code quality checkers, formatters and linters:
- ``` shell
make lint
```
Automatically formats your code and sorts your imports, checks your code's quality and scans for any unused code.
- ``` shell
make mypy
```
Statically checks the correctness of the types.
- ``` shell
make pylint
```
Analyses the quality of your code.
- ``` shell
make security
```
Checks the code for known vulnerabilities and common security issues.
- ``` shell
make clean
```
Cleans your development environment and deletes temporary files and directories.
- For the Go parts, we use [`golines`][golines] and [`golangci-lint`][golangci-lint] for linting.
### <a name="docs"></a>Updating documentation
We use [`mkdocs`][mkdocs] and [`material-for-mkdocs`][material] for static documentation pages. To make changes to the documentation:
- ``` shell
make docs-live
```
This starts a live-reloading docs server on localhost which you can access by going to <http://127.0.0.1:8000/> in your browser. Making changes to the documentation automatically reloads this page, showing you the latest changes.
To create a new documentation page, add a markdown file under `/docs/` and add a reference to this page in `mkdocs.yml` under `nav`.
### <a name="api"></a>Updating API documentation
If you've made changes to the core `aea` package that affects the public API:
- ``` shell
make generate-api-docs
```
This regenerates the API docs. If pages are added/deleted, or there are changes in their structure, these need to be reflected manually in the `nav` section of `mkdocs.yaml`.
### <a name="deps"></a>Updating dependencies
We use [`poetry`][poetry] and `pyproject.toml` to manage the project's dependencies.
If you've made any changes to the dependencies (e.g. added/removed dependencies, or updated package version requirements):
- ``` shell
poetry lock
```
This re-locks the dependencies. Ensure that the `poetry.lock` file is pushed into the repository (by default it is).
- ``` shell
make liccheck
```
Checks that the licence for the framework is correct, taking into account the licences for all dependencies, their dependencies and so forth.
### <a name="package"></a>Updating packages
If you've made changes to the packages included in the repository (e.g. skills, protocols, connections, contracts):
- ``` shell
make update-package-hashes
```
Updates the fingerprint hashes of every package in the repository.
- ``` shell
make package-checks
```
Checks, a. that the package hashes are correct, b. the documentation correctly references the latest packages, and c) runs other correctness checks on packages.
### <a name="tests"></a>Tests
To test the Python part of the project, we use `pytest`. To run the tests:
- ``` shell
make test
```
Runs all the tests.
- ``` shell
make test-plugins
```
Runs all plugin tests.
- ``` shell
make dir={SUBMODULE} tdir={TESTMODULE} test-sub
```
Runs the tests for `aea.{SUBMODULE}`. For example, to run the tests for the CLI: `make dir=cli tdir=cli test-sub`
To test the Go parts of the project:
- ``` shell
go test -p 1 -timeout 0 -count 1 -v ./...
```
from the root directory of a Go package (e.g. `fetchai/p2p_libp2p`) to run the Golang tests.
If you experience installation or build issues, run `go clean -modcache`.
### <a name="misc"></a>Miscellaneous checks
- ``` shell
copyright-check
```
Checks that all files have the correct copyright header (where applicable).
- ``` shell
check-doc-links
```
Checks that the links in the documentations are valid and alive.
- ``` shell
make libp2p-diffs
```
Checks the libp2p code under `libs` and in the connection packages aren't different.
- ``` shell
make plugin-diffs
```
Checks the plugin licenses and the codes under `cosmos` and `fetchai` ledger plugins aren't different.
## <a name="contributing"></a>Contributing
For instructions on how to contribute to the project (e.g. creating Pull Requests, commit message convention, etc), see the [contributing guide][contributing guide].
## <a name="release"></a>Making Releases
For instructions on how to make a release, see the [release process][release process] guide.
[protobuf]: https://developers.google.com/protocol-buffers/
[ipfs]: https://docs.ipfs.tech/install/
[go]: https://golang.org/doc/install
[golines]: https://github.com/segmentio/golines
[golangci-lint]: https://golangci-lint.run
[mkdocs]: https://www.mkdocs.org
[material]: https://squidfunk.github.io/mkdocs-material/
[poetry]: https://python-poetry.org
[contributing guide]: https://github.com/fetchai/agents-aea/blob/main/CONTRIBUTING.md
[release process]: https://github.com/fetchai/agents-aea/blob/main/scripts/RELEASE_PROCESS.md
[repo]: https://github.com/fetchai/agents-aea
================================================
FILE: HISTORY.md
================================================
# Release History
## 1.2.5 (2023-01-18)
Docs:
- Sweeping foundational updates across all documentation
Misc:
- Update some dependencies
- Update copyright headers across all files (including year 2023)
- Remove `docker-images` submodule
- Various bug fixes
## 1.2.4 (2022-11-30)
Agents:
- Add hello_world skill and agent
Docs:
- Update repository documentations
- Update installation guide for Raspberry Pis (add a link to prebuilt image for Raspberry Pis)
Misc:
- Update the dependencies (protobuf, jsonschema, cosmpy)
- Various improvements in the repository structure (e.g. makefile, tox, workflows)
- Speed up CI/CD
- Various bug fixes
## 1.2.3 (2022-11-03)
AEA:
- core and development are dependencies updated.
- ci improvements
- cosmpy updated to 0.6.0
- Small code format improvements and better linting
Plugins:
- Small code format improvements
- cosmpy updated to 0.6.0
Packages:
- Small code format improvements
## 1.2.2 (2022-10-17)
AEA:
- Dependency management switched from pipenv to poetry.
- Protocol generator updated to support Unions
- Dependencies versions updates: click, mypy, black, ipfshttpclient
- Small code format improvements
Plugins:
- Update web3 to version 5.31
- Small code format improvements
- ipfshttpclient dependency version updated to 0.8.0a2
Packages:
- Protocols regenerated according to the latest protocol generator improvements: Union support
- Small code format improvements
## 1.2.1 (2022-07-12)
AEA:
- Protocol generator uses int64 instead of int32
- Dependencies versions updates
Plugins:
- Upgrades fetchai plugin to use cosmpy>=0.5.0
- Upgrades cosmos plugin to use cosmpy>=0.5.0
Packages:
- Fixes for skills to work with dorado testnet (tx fee adjusted)
## 1.2.0 (2022-05-05)
AEA:
- Adds support for Python 3.10
- Updates protobuf dependency
- Updates asyncio dependency
- Updates golang modules
- Updates many dependencies to their latest versions
- Fixes dependency issues
Plugins:
- Upgrades fetchai plugin to be compatible with Dorado networks
- Upgrades cosmos plugin to be compatible with Dorado networks
Packages:
- Adds more logging to the p2p_libp2p packages (vanilla, client, mailbox)
- Aries demo updated to cover the full base scenario
- Protocols were regenerated with newer protobuf
Chores:
- Fixed various tests
- Fixed docker container issue in tests
- Added automated script to add support for new versions of the Fetchai network
- Added automated script to update copyright headers and check their validity
- Apply the above script on all packages
- Adds tests for BaseContractTestTool
- Improves the script that automatically updates package versions
## 1.1.1 (2021-12-15)
AEA:
- Updates the protocol generator to generate protocols that satisfy linter constraints
Plugins:
- aea-cli-ipfs plugin small update
Packages:
- Fixes fetchai/p2p_libp2p connection to address a slow DHT lookup problem
- Updates protocols with the latest protocol generator
- Updates random beacon agent so it produces block data instead of the (now deprecated feature of the test-net) random beacon data
Misc
- Bumps go library versions
- Various fixes and improvements
## 1.1.0 (2021-10-13)
AEA:
- Adds public keys to agent identity and skill context
- Adds contract test tool
- Adds multiprocess support for task manager
- Adds multiprocess backed support to `MultiAgentManager`
- Adds support for excluding connection on `aea run`
- Adds support for adding a key that is being generated (`—add-key` option for `generate-key` command)
- Adds check for dependencies to be present in registry on a package push
- Makes more efficient installing of project dependencies on `aea install`
- Adds dependency conflict detection on `aea install`
- Improves pip install error details on `aea install`
- Adds validation of `aea_version` when loading configuration
- Adds a check for consistency of package versions in `MultiAgent Manager`
- Adds better error reporting for aea registry requests
- Fixes IPFS hash calculation for large files
- Fixes protobuf dictionary serializer's uncovered cases and makes it deterministic
- Fixes scaffolding of error and decision maker handlers
- Fixes pywin32 problem when checking dependency
- Improves existing testing tools
Benchmarks:
- Adds agents construction and decision maker benchmark cases
Plugins:
- Upgrades fetchai plugin to use CosmPy instead of CLI calls
- Upgrades cosmos plugin to use CosmPy instead of CLI calls
- Upgrades fetchai plugin to use StargateWorld
- Upgrades cosmos plugin to Stargate
- Sets the correct maximum Gas for fetch.ai plugin
Packages:
- Adds support for Tac to be run against fetchai StargateWorld test-net
- Adds more informative error messages to CosmWasm ERC1155 contract
- Adds support for atomic swap to CosmWasm ERC1155 contract
- Adds an ACN protocol that formalises ACN communication using the framework's protocol language
- Adds `cosm_trade` protocol for preparing atomic swap transactions for cosmos-based networks
- Adds https support for server connection
- Adds parametrising of http(s) in soef connection
- Fixes http server content length response problem
- Updates Oracle contract to 0.14
- Implements the full ACN spec throughout the ACN packages
- Implements correct error code usage in ACN packages
- Refactors ACN packages to unify reused logic
- Adds tests for gym skills
- Adds dockerised SOEF
- Adds libp2p mailbox connection
- Multiple fixes and stability improvements for `p2p_libp2p` connections
Docs:
- Adds ACN internals documentation
- Fixes tutorial for HTTP connection and skill
- Multiple additional docs updates
- Adds more context to private keys docs
Chores:
- Various development features bumped
- Bumped Mermaid-JS, for UML diagrams to major version 8
- Applies darglint to the code
Examples:
- Adds a unified script for running various versions/modes of Tac
## 1.0.2 (2021-06-03)
AEA:
- Bounds versions of dependencies by next major
- Fixes incoherent warning message during package loading
- Improves various incomprehensible error messages
- Adds debug log message when abstract components are loaded
- Adds tests and minor fixes for password related CLI commands and password usage in `MultiAgentManager`
- Adds default error handler in `MultiAgentManager`
- Ensures private key checks are performed after override setting in `MultiAgentManager`
- Applies docstring fixes suggested by `darglint`
- Fixes `aea push --local` command to use correct author
- Fixes `aea get-multiaddress` command to consider overrides
Plugins:
- Bounds versions of dependencies by next major
Packages:
- Updates `p2p_libp2p` connection to use TCP sockets for all platforms
- Multiple fixes on `libp2p_node` including better error handling and stream creation
- Adds sending queue in `p2p_libp2p` connection to handle sending failures
- Adds unit tests for `libp2p_node` utils
- Adds additional tests for `p2p_libp2p` connection
- Fixes location bug in AW5
- Improves connection check handling in soef connection
- Updates oracle and oracle client contracts for better access control
- Adds skill tests for `erc1155` skills
- Adds skill tests for `aries` skills
- Fixes minor bug in ML skills
- Multiple additional tests and test stability fixes
Docs:
- Extends demo docs to include guidance of usage in AEA Manager
- Adds short guide on Kubernetes deployment
- Multiple additional docs updates
Chores:
- Adds `--no-bump` option to `generate_all_protocols` script
- Adds script to detect if aea or plugins need bumping
- Bumps various development dependencies
- Adds Golang and GCC in Windows install script
- Adds `darglint` to CI
Examples:
- Updates TAC deployment scripts and images
## - (2021-05-05)
Packages:
- Adds node watcher to `p2p_libp2p` connection
- Improves logging and error handling in `p2p_libp2p` node
- Addresses potential overflow issue in `p2p_libp2p` node
- Fixes concurrency issue in `p2p_libp2p` node which could lead to wrongly ordered envelopes
- Improves logging in TAC skills
- Fixes Exception handling in connect/disconnect calls of soef connection
- Extends public DHT tests to include staging
- Adds tests for envelope ordering for all routes
- Multiple additional tests and test stability fixes
## 1.0.1 (2021-04-30)
AEA:
- Fixes wheels issue for Windows
- Fixes password propagation for certificate issuance in `MultiAgentManager`
- Improves error message when local registry not present
AEALite:
- Adds full protocol support
- Adds end-to-end interaction example with AEA (based on `fetchai/fipa` protocol)
- Multiple additional tests and test stability fixes
Packages:
- Fixes multiple bugs in `ERC1155` version of TAC
- Refactors p2p connections for better separation of concerns and maintainability
- Integrates aggregation with simple oracle skill
- Ensures genus and classifications are used in all skills using SOEF
- Extends SOEF connection to implement `oef_search` protocol fully
- Handles SOEF failures in skills
- Adds simple aggregation skills including tests and docs
- Adds tests for registration AW agents
- Adds tests for reconnection logic in p2p connections
- Multiple additional tests and test stability fixes
Docs:
- Extends car park demo with usage guide for AEA manager
- Multiple additional docs updates
Examples:
- Adds TAC deployment example
## 1.0.0 (2021-03-30)
- Improves contributor guide
- Enables additional pylint checks
- Adds configuration support on exception behaviour in ledger plugins
- Improves exception handling in `aea-ledger-cosmos` and `aea-ledger-fetchai` plugins
- Improves quickstart guide
- Fixes multiple flaky tests
- Fixes various outdated metadata
- Resolves a CVE (CVE-2021-27291) affecting development dependencies
- Adds end-to-end support and tests for simple oracle on Ethereum and Fetch.ai ledgers
- Multiple minor fixes
- Multiple additional tests and test stability fixes
## 1.0.0rc2 (2021-03-28)
- Extends CLI command `aea fingerprint` to allow fingerprinting of agents
- Improves `deploy-image` Docker example
- Fixes a bug in `MultiAgentManager` which leaves it in an unclean state when project adding fails
- Fixes dependencies of `aea-legder-fetchai`
- Improves guide on HTTP client and server connection
- Removes pickle library usage in the ML skills
- Adds various consistency checks in configurations
- Replaces usage of `pyaes` with `pycryptodome` in plugins
- Changes generator to avoid non-idiomatic usage of type checks
- Multiple minor fixes
- Multiple additional tests and test stability fixes
## 1.0.0rc1 (2021-03-24)
- Adds CLI command `aea get-public-key`
- Adds support for encrypting private keys at rest
- Adds support for configuration of decision maker and error handler instances from `aea-config.yaml`
- Adds support for explicitly marking behaviours and handlers as dynamic
- Adds support for fetchai ledger to oracle skills and contract
- Adds timeout support on multiplexer calls to connections
- Fixes bug in regex constrained string for id validation
- Adds docs section on how AEAs satisfy 12-factor methodology
- Adds docs section on tradeoffs made in `v1`
- Adds example for logs streaming to browser
- Removes multiple temporary hacks for backwards compatibility
- Adds skills tests coverage for `echo` and `http_echo` skills
- Adds `required_ledgers` field in `aea-config.yaml`
- Removes `registry_path` field in `aea-config.yaml`
- Adds `message_format` field to cert requests
- Removes requirement for exact protocol buffers compiler, prints version used in protocols
- Adds support to configure task manager mode via `aea-config.yaml`
- Fixed spelling across docstrings in code base
- Multiple minor fixes
- Multiple docs updates to fix order of CLI commands with respect to installing dependencies
- Multiple additional tests and test stability fixes
## 0.11.2 (2021-03-17)
- Fixes a package import issue
- Fixes an issue where `AgentLoop` did not teardown properly under certain conditions
- Fixes a bug in testing tools
- Fixes a bug where plugins are not loaded after installation in `MultiAgentManager`
- Adds unit tests for weather, thermometer and car park skills
- Fixes a missing dependency in Windows
- Improves SOEF connections' error handling
- Fixes bug in ML skills and adds unit tests
- Adds script to bump plugin versions
- Adds gas price strategy support in `aea-ledger-ethereum` plugin
- Adds CLI plugin for IPFS interactions (add/get)
- Adds support for CLI plugins to framework
- Multiple additional tests and test stability fixes
## 0.11.1 (2021-03-06)
- Bumps `aiohttp` to `>=3.7.4` to address a CVE affecting `http_server`, `http_client` and `webhook` connections
- Adds script to ensure Pipfile and `tox.ini` dependencies align
- Enforces presence of `protocol_specification_id` in `protocol.yaml`
- Adds support for installation of agent-level PyPI dependencies in `AEABuilder`
- Sets default ledger plugin during `aea create`
- Updates various agent packages with missing ledger plugin dependencies
- Bumps various development dependencies
- Renames `coin_price` skill to `advanced_data_request` skill and generalises it
- Updates `fetch_beacon` skill to use `ledger` connection
- Multiple docs updates to fix order of CLI commands with respect to installing dependencies
- Multiple additional tests and test stability fixes
## 0.11.0 (2021-03-04)
- Adds slots usage in frequently used framework objects, including `Dialogue`
- Fixes a bug in `aea upgrade` command where eject prompt was not offered
- Refactors skill component configurations to allow for skill components (`Handler`, `Behaviour`, `Model`) to be placed anywhere in a skill
- Extends skill component configuration to specify optional `file_path` field
- Extracts all ledger specific functionality in plugins
- Improves error logging in http server connection
- Updates `Development - Use case` documentation
- Adds restart support to `p2p_libp2p` connection on read/write failure
- Adds validation of default routing and default connection configuration
- Refactors and significantly simplifies routing between components
- Limits usage of `EnvelopeContext`
- Adds support for new CosmWasm message format in ledger plugins
- Adds project loading checks and optional auto removal in `MultiAgentManager`
- Adds support for reuse of threaded `Multiplexer`
- Fixes bug in TAC which caused agents to make suboptimal trades
- Adds support to specify dependencies on `aea-config.yaml` level
- Improves release scripts
- Adds lightweight Golang AEALite library
- Adds support for skill-to-skill messages
- Removes CLI GUI
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.10.1 (2021-02-21)
- Changes default URL of `soef` connection to https
- Improves teardown, retry and edge case handling of `p2p_libp2p` and `p2p_libp2p_client` connections
- Adds auto-generation of private keys to `MultiAgentManager`
- Exposes address getters on `MultiAgentManager`
- Improves package validation error messages
- Simplifies default `DecisionMakerHandler` and extracts advanced features in separate class
- Fixes task manager and its usage in skills
- Adds support for multi-language protocol stub generation
- Adds `data_dir` usage to additional connections
- Adds IO helper function for consistent file usage
- Extends release helper scripts
- Removes stub connection as default connection
- Adds support for AEA usage without connections
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.10.0 (2021-02-11)
- Removes error skill from agents which do not need it
- Adds support for relay connection reconnect in ACN
- Multiplexer refactoring for easier connection handling
- Fix `erc1155` skill tests on CosmWasm chains
- Extends docs on usage of CosmWasm chains
- Adds version compatibility in `aea upgrade` command
- Introduces protocol specification id and related changes for better interoperability
- Adds synchronous connection base class
- Exposes state setter in connection base class
- Adds Yoti protocol and connection
- Multiple updates to generic buyer
- Adds additional automation to `MultiAgentManager`, including automated handling of certs, keys and other package specific data
- Multiple test improvements and fixes
- Add stricter typing and checks
- Fixes to MacOS install script
- Adds threading patch for web3
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.9.2 (2021-01-21)
- Fixes `CosmosApi`, in particular for CosmWasm
- Fixes error output from `add-key` CLI command
- Update `aea_version` in non-vendor packages when calling `upgrade` CLI command
- Extend `upgrade` command to fetch newer agent if present on registry
- Add support for mixed fetch mode in `MultiAgentManager`
- Fixes logging overrides in `MultiAgentManager`
- Configuration overrides now properly handle `None` values
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.9.1 (2021-01-14)
- Fixes multiple issues with `MultiAgentManager` including overrides not being correctly applied
- Restructures docs navigation
- Updates `MultiAgentManager` documentation
- Extends functionality of `aea upgrade` command to cover more cases
- Fixes a bug in the `aea upgrade` command which prevented upgrading across version minors
- Fixes a bug in `aea fetch` where the console output was inconsistent with the actual error
- Fixes scaffold connection constructor
- Multiple additional tests to improve stability
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.9.0 (2021-01-06)
- Adds multiple bug fixes on `MultiAgentManager`
- Adds `AgentConfigManager` for better programmatic configuration management
- Fixes auto-filling of `aea_version` field in AEA configuration
- Adds tests for confirmation skills AW2/3
- Extends `MultiAgentManager` to support proper configuration overriding
- Fixes ML skills demo
- Fixes environment variable resolution in configuration files
- Adds support to fingerprint packages by providing a path
- Adds `local-registry-sync` CLI command to sync local and remote registry
- Adds support to push vendorised packages to local registry
- Adds missing tests for code in documentation
- Adds prompt in `scaffold protocol` CLI command to hint at protocol generator
- Adds `issue-certificates` CLI command for Proof of Representation
- Adds `cert_requests` support in connections for Proof of Representation
- Adds support for Proof of Representation in ACN (`p2p_libp2p*` connections)
- Adds automated spell checking for all `.md` files and makes related fixes
- Multiple additional tests to improve stability
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.8.0 (2020-12-17)
- Adds support for protocol dialogue rules validation
- Fixes URL forwarding in http server connection
- Revises protocols to correctly define terminal states
- Adds a build command
- Adds build command support for libp2p connection
- Adds multiple fixes to libp2p connection
- Adds prometheus connection and protocol
- Adds tests for confirmation AW1 skill
- Adds oracle demo docs
- Replaces pickle with protobuf in all protocols
- Refactors OEF models to account for semantic irregularities
- Updates docs for demos relying on Ganache
- Adds generic storage support
- Adds configurable dialogue offloading
- Fixes transaction generation on confirmation bugs
- Fixes transaction processing order in all buyer skills
- Extends ledger API protocol to query ledger state
- Adds remove-key command in CLI
- Multiple tac stability fixes
- Adds support for configurable error handler
- Multiple additional tests to improve stability
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.5 (2020-11-25)
- Adds AW3 AEAs
- Adds basic oracle skills and contracts
- Replaces usage of Ropsten testnet with Ganache in packages
- Fixes multiplexer setup when used outside AEA
- Improves help command output of CLI
- Adds integration tests for simple skills
- Adds version check on CLI push
- Adds integration tests for tac negotiation skills
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.4 (2020-11-18)
- Replaces error skill handler usage with built in handler
- Extends `MultiAgentManager` to support persistence between runs
- Replaces usage of Ropsten testnet with Ganache
- Adds support for symlink creation during scaffold and add
- Makes contract interface loading extensible
- Adds support for PEP561
- Adds integration tests for launcher command
- Adds support for storage of unique page address in SOEF
- Fixes publish command bug on Windows
- Refactors constants usage throughout
- Adds support for profiling on `aea run`
- Multiple stability improvements to core asynchronous modules
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.3 (2020-11-12)
- Extends AW AEAs
- Fixes overwriting of private key files on startup
- Fixes behaviour bugs
- Adds tests for tac participation skill
- Adds development setup guide
- Improves exception logging for easier debugging
- Fixes mixed mode in upgrade command
- Reduces verbosity of some CLI commands
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.2 (2020-11-09)
- Fixes some AW2 AEAs
- Improves generic buyer AEA
- Fixes a few backwards incompatibilities on CLI (upgrade, add, fetch) introduced in 0.7.1
- Fixes geolocation in some tests
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.1 (2020-11-05)
- Adds two AEAs for Agent World 2
- Refactors dialogue class to optimize for memory
- Refactors message class to optimize for memory
- Adds mixed registry mode to CLI and makes it default
- Extends upgrade command to automatically update references of non-vendor packages
- Adds deployment scripts for `kubernetes`
- Extends configuration set/get support for lists and dictionaries
- Fixes location specifiers throughout code base
- Imposes limits on length of user defined strings like author and package name
- Relaxes version specifiers for some dependencies
- Adds support for skills to reference connections as dependencies
- Makes ledger and currency ids configurable
- Adds test coverage for the tac control skills
- Improves quick start guidance and adds docker images
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.7.0 (2020-10-22)
- Adds two AEAs for Agent World 1
- Adds support to apply configuration overrides to CLI calls transfer and get-wealth
- Adds install scripts to install AEA and dependencies on all major OS (Windows, MacOs, Ubuntu)
- Adds developer mailing list opt-in step to CLI `init`
- Modifies custom configurations in `aea-config` to use public id
- Adds all non-optional fields in `aea-config` by default
- Fixes upgrade command to properly handle dependencies of non-vendor packages
- Remove all distributed packages and add them to registry
- Adds public ids to all skill `init` files and makes it a requirement
- Adds primitive benchmarks for libp2p node
- Adds Prometheus monitoring to libp2p node
- Makes body a private attribute in message base class
- Renames `bodyy` to `body` in HTTP protocol
- Adds support for abstract connections
- Refactors protobuf schemas for protocols to avoid code duplication
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.6.3 (2020-10-16)
- Adds skill testing tools and documentation
- Adds human readable log output regarding configuration for `p2p_libp2p` connection
- Adds support to install PyPI dependencies from `AEABuilder` and `MultiAgentManager`
- Adds CLI upgrade command to upgrade entire agent project and components
- Extends CLI remove command to include option to remove dependencies
- Extends SOEF chain identifier support
- Adds CLI transfer command to transfer wealth
- Adds integration tests for skills generic buyer and seller using skill testing tool
- Adds validation of component configurations when setting component configuration overrides
- Multiple refactoring of internal configuration and helper objects and methods
- Fix a bug on CLI push local with latest rather than version specifier
- Adds `README.md` files in all agent projects
- Adds agent name in logger paths of runnable objects
- Fixes tac skills to work with and without ERC1155 contract
- Adds additional validations on message flow
- Multiple docs updates based on user feedback
- Multiple additional tests and test stability fixes
## 0.6.2 (2020-10-01)
- Adds `MultiAgentManager` to manage multiple agent projects programmatically
- Improves SOEF connection reliability on unregister
- Extends configuration classes to handle overriding configurations programmatically
- Improves configuration schemas and validations
- Fixes Multiplexer termination errors
- Allow finer-grained override of component configurations from `aea-config`
- Fixes tac controller to work with Ethereum contracts again
- Fixes multiple deploy and development scripts
- Introduces `isort` to development dependencies for automated import sorting
- Adds reset password command to CLI
- Adds support for abbreviated public ids (latest) to CLI and configurations
- Adds additional documentation string linters for improved API documentation checks
- Multiple docs updates including additional explanations of ACN architecture
- Multiple additional tests and test stability fixes
## 0.6.1 (2020-09-17)
- Adds a standalone script to deploy an ACN node
- Adds filtering of out-dated addresses in DHT lookups
- Updates multiple developer scripts
- Increases code coverage of all protocols to 100%
- Fixes a disconnection issue of the multiplexer
- Extends soef connection to support additional registration commands and search responses
- Extends `oef_search` protocol to include success performative and agent info in search response
- Adds `README.md` files to all skills
- Adds configurable exception policy handling for multiplexer
- Fixes support for http headers in http server connection
- Adds additional consistency checks on addresses in dialogues
- Exposes decision maker address on skill context
- Adds comprehensive benchmark scripts
- Multiple docs updates including additional explanations of soef usage
- Multiple additional tests and test stability fixes
## 0.6.0 (2020-09-01)
- Makes `FetchAICrypto` default again
- Bumps `web3` dependencies
- Introduces support for arbitrary protocol handling by DM
- Removes custom fields in signing protocol
- Refactors and updates dialogue and dialogues models
- Moves dialogue module to protocols module
- Introduces `MultiplexerStatus` to collect aggregate connection status
- Moves Address types from mail to common
- Updates `FetchAICrypto` to work with Agentland
- Fixes circular dependencies in helpers and configurations
- Unifies contract loading with loading mechanism of other packages
- Adds get-multiaddress command to CLI
- Updates helpers scripts
- Introduces `MultiInbox` to unify internal message handling
- Adds additional linters (eradicate, more `pylint` options)
- Improves error reporting in libp2p connection
- Replaces all assert statements with proper exceptions
- Adds skill id to envelope context for improved routing
- Refactors IPC pipes
- Refactors core dependencies
- Adds support for multi-page agent configurations
- Adds type field to all package configurations
- Multiple docs updates including additional explanations of contracts usage
- Multiple additional tests and test stability fixes
## 0.5.4 (2020-08-13)
- Adds support for Windows in P2P connections
- Makes all tests Windows compatible
- Adds integration tests for P2P public DHT
- Modifies contract base class to make it cross-ledger compatible
- Changes dialogue reference nonce generation
- Fixes tac skills (non-contract versions)
- Fixes Aries identity skills
- Extends cosmos crypto API to support `cosmwasm`
- Adds full test coverage for framework and connection packages
- Multiple docs updates including automated link integrity checks
- Multiple additional tests and test stability fixes
## 0.5.3 (2020-08-05)
- Adds support for re-starting agent after stopping it
- Adds full test coverage for protocols generator
- Adds support for dynamically adding handlers
- Improves P2P connection startup reliability
- Addresses P2P connection race condition with long running processes
- Adds connection states in connections
- Applies consistent logger usage throughout
- Adds key rotation and randomised locations for integration tests
- Adds request delays in SOEF connection to avoid request limits
- Exposes runtime states on agent and removes agent liveness object
- Adds readme files in protocols and connections
- Improves edge case handling in dialogue models
- Adds support for `cosmwasm` message signing
- Adds test coverage for test tools
- Adds dialogues models in all connections where required
- Transitions ERC1155 skills and simple search to SOEF and P2P
- Adds full test coverage for skills modules
- Multiple docs updates
- Multiple additional tests and test stability fixes
## 0.5.2 (2020-07-21)
- Transitions demos to agent-land test network, P2P and SOEF connections
- Adds full test coverage for helpers modules
- Adds full test coverage for core modules
- Adds CLI functionality to upload `README.md` files with packages
- Adds full test coverage for registries module
- Multiple docs updates
- Multiple additional tests and test stability fixes
## 0.5.1 (2020-07-14)
- Adds support for agent name being appended to all log statements
- Adds redesigned GUI
- Extends dialogue API for easier dialogue maintenance
- Resolves blocking logic in OEF and gym connections
- Adds full test coverage on AEA modules configurations, components and mail
- Adds ping background task for soef connection
- Adds full test coverage for all connection packages
- Multiple docs updates
- Multiple additional tests and test stability fixes
## 0.5.0 (2020-07-06)
- Refactors all connections to be fully asynchronous friendly
- Adds almost complete test coverage on connections
- Adds complete test coverage for CLI and CLI GUI
- Fixes CLI GUI functionality and removes OEF node dependency
- Refactors P2P go code and increases test coverage
- Refactors protocol generator for higher code reusability
- Adds option for skills to depend on other skills
- Adds abstract skills option
- Adds ledger connections to execute ledger related queries and transactions, removes ledger APIs from skill context
- Adds contracts registry and removes them from skill context
- Rewrites all skills to be fully message based
- Replaces internal messages with protocols (signing and state update)
- Multiple refactoring to improve `pylint` adherence
- Multiple docs updates
- Multiple test stability fixes
## 0.4.1 (2020-06-15)
- Updates component package module loading for skill and connection
- Unifies component package loading across package types
- Adds connections registry to resources
- Upgrades CLI commands for easier programmatic usage
- Adds `AEARunner` and `AEALauncher` for programmatic launch of multiple agents
- Refactors `AEABuilder` to support reentrancy and resetting
- Fixes tac packages to work with ERC1155 contract
- Multiple refactoring to improve public and private access patterns
- Multiple docs updates
- Multiple test stability fixes
## 0.4.0 (2020-06-08)
- Updates message handling in skills
- Replaces serialiser implementation; all serialization is now performed framework side
- Updates all skills for compatibility with new message handling
- Updates all protocols and protocol generator
- Updates package loading mechanism
- Adds `p2p_libp2p_client` connection
- Fixes CLI bugs and refactors CLI
- Adds eject command to CLI
- Exposes identity and connection cryptos to all connections
- Updates connection loading mechanism
- Updates all connections for compatibility with new loading mechanism
- Extracts multiplexer into its own module
- Implements list all CLI command
- Updates wallet to split into several crypto stores
- Refactors component registry and resources
- Extends soef connection functionality
- Implements `AEABuilder` reentrancy
- Updates `p2p_libp2p` connection
- Adds support for configurable runtime
- Refactors documentation
- Multiple docs updates
- Multiple test stability fixes
## 0.3.3 (2020-05-24)
- Adds option to pass ledger APIs to `AEABuilder`
- Refactors decision maker: separates interface and implementation; adds loading mechanisms so framework users can provide their own implementation
- Adds asynchronous and synchronous agent loop implementations; agent can be run in both `sync` and `async` mode
- Completes transition to atomic CLI commands (fetch, generate, scaffold)
- Refactors dialogue API: adds much simplified API; updates generator accordingly; updates skills
- Adds support for crypto module extensions: framework users can register their own crypto module
- Adds crypto module and ledger support for cosmos
- Adds simple-oef (soef) connection
- Adds `p2p_libp2p` connection for true P2P connectivity
- Adds PyPI dependency consistency checks for AEA projects
- Refactors CLI for improved programmatic usage of components
- Adds skill exception handling policies and configuration options
- Adds comprehensive documentation of configuration files
- Multiple docs updates
- Multiple test stability fixes
## 0.3.2 (2020-05-07)
- Adds dialogue generation functionality to protocol generator
- Fixes add CLI commands to be atomic
- Adds Windows platform support
- Stability improvements to test pipeline
- Improves test coverage of CLI
- Implements missing doc tests
- Implements end-to-end tests for all skills
- Adds missing agent projects to registry
- Improves `AEABuilder` class for programmatic usage
- Exposes missing AEA configurations on agent configuration file
- Extends Aries demo
- Adds method to check stdout for test cases
- Adds code of conduct and security guidelines to repo
- Multiple docs updates
- Multiple additional unit tests
- Multiple additional minor fixes and changes
## 0.3.1 (2020-04-27)
- Adds `p2p_stub` connection
- Adds `p2p_noise` connection
- Adds webhook connection
- Upgrades error handling for error skill
- Fixes default timeout on main agent loop and provides setter in `AEABuilder`
- Adds multithreading support for launch command
- Provides support for keyword arguments to AEA constructor to be set on skill context
- Renames `ConfigurationType` with `PackageType` for consistency
- Provides a new `AEATestCase` class for improved testing
- Adds execution time limits for act/react calls
- TAC skills refactoring and contract integration
- Supports contract dependencies being added automatically
- Adds HTTP example skill
- Allows for skill inactivation during initialisation
- Improves error messages on skill loading errors
- Improves `README.md` files, particularly for PyPI
- Adds support for Location based queries and descriptions
- Refactors skills tests to use `AEATestCase`
- Adds fingerprint and scaffold CLI command for contract
- Adds multiple additional docs tests
- Makes task manager initialize pool lazily
- Multiple docs updates
- Multiple additional unit tests
- Multiple additional minor fixes and changes
## 0.3.0 (2020-04-02)
- Introduces IPFS based hashing of files to detect changes, ensure consistency and allow for content addressing
- Introduces `aea fingerprint` command to CLI
- Adds support for contract type packages which wrap smart contracts and their APIs
- Introduces `AEABuilder` class for much improved programmatic usage of the framework
- Moves protocol generator into alpha stage for light protocols
- Switches CLI to use remote registry by default
- Comprehensive documentation updates on new and existing features
- Additional demos to introduce the contracts functionality
- Protocol, Contract, Skill and Connection inherits from the same class, Component
- Improved APIs for Configuration classes
- All protocols now generated with protocol generator
- Multiple additional unit tests
- Multiple additional minor fixes and changes
## 0.2.4 (2020-03-25)
- Breaking change to all protocols as we transition to auto-generated protocols
- Fixes to protocol generator to move it to alpha status
- Updates to documentation on protocols and OEF search and communication nodes
- Improvements and fixes to AEA launch command
- Multiple docs updates and restructuring
- Multiple additional minor fixes and changes
## 0.2.3 (2020-03-19)
- Fixes stub connection file I/O
- Fixes OEF connection teardown
- Fixes CLI GUI subprocesses issues
- Adds support for URI based routing of envelopes
- Improves skill guide by adding a service provider agent
- Protocol generator bug fixes
- Add `aea_version` field to package YAML files for version management
- Multiple docs updates and restructuring
- Multiple additional minor fixes and changes
## 0.2.2 (2020-03-09)
- Fixes registry to only load registered packages
- Migrates default protocol to generator produced version
- Adds http connection and http protocol
- Adds CLI `init` command for easier setting of author
- Refactoring and behind the scenes improvements to CLI
- Multiple docs updates
- Protocol generator improvements and fixes
- Adds CLI launch command to launch multiple agents
- Increases test coverage for AEA package and tests package
- Make project comply with PEP 518
- Multiple additional minor fixes and changes
## 0.2.1 (2020-02-21)
- Add minimal `aea install`
- Updates finite state machine behaviour to use any simple behaviour in states
- Adds example of programmatic and CLI based AEAs interacting
- Exposes the logger on the skill context
- Adds serialization (encoding/decoding) support to protocol generator
- Adds additional docs and videos
- Introduces test coverage to all code in docs
- Increases test coverage for AEA package
- Multiple additional minor fixes and changes
## 0.2.0 (2020-02-07)
- Skills can now programmatically register behaviours
- Tasks are no longer a core component of the skill, the functor pattern is used
- Refactors the task manager
- Adds nonces to transaction data so transactions can be verified
- Adds documentation for the protocol generator
- Fixes several compatibility issues between CLI and registry
- Adds skills to connect a thermometer to an AEA
- Adds generic buyer and seller skills
- Adds much more documentation on AEA vs MVC frameworks, core components, new guides and more
- Removes the wallet from the agent constructor and moves it to the AEA constructor
- Allows behaviours to be initialized from a skill
- Adds multiple improvements to the protocol generator, including custom types and serialization
- Removes the default crypto object
- Replaces `SharedClass` with `Model` taxonomy for easier transition for web developers
- Adds bandit to CLI for security checks
- Makes private key paths in configurations a dictionary so values can be set from CLI
- Introduces Identity object
- Increases test coverage
- Multiple additional minor fixes and changes
## 0.1.17 (2020-01-27)
- Add programmatic mode flag to AEA
- Introduces vendorised project structure
- Adds further tests for decision maker
- Upgrades sign transaction function for Ethereum API proxy
- Adds black and bugbear to linters
- Applies public id usage throughout AEA business logic
- Adds guide on how to deploy an AEA on a raspberry pi
- Addresses multiple issues in the protocol generator
- Fixes `aea-config`
- Adds CLI commands to create wealth and get wealth and address
- Change default author and license
- Adds guide on agent vs AEAs
- Updates docs and improves guides
- Adds support for inactivating skills programmatically
- Makes decision maker run in separate thread
- Multiple additional minor fixes and changes
## 0.1.16 (2020-01-12)
- Completes tac skills implementation
- Adds default ledger field to agent configuration
- Converts ledger APIs to dictionary fields in agent configuration
- Introduces public ids to CLI and deprecate usage of package names only
- Adds local push and public commands to CLI
- Introduces ledger API abstract class
- Unifies import paths for static and dynamic imports
- Disambiguates import paths by introducing pattern of `packages.author.package_type_pluralized.package_name`
- Adds agent directory to packages with some samples
- Adds protocol generator and exposes on CLI
- Removes unused configuration fields
- Updates docs to align with recent changes
- Adds additional tests on CLI
- Multiple additional minor fixes and changes
## 0.1.15 (2019-12-19)
- Moves non-default packages from AEA to packages directory
- Supports get & set on package configurations
- Changes skill configuration resource types from lists to dictionaries
- Adds additional features to decision maker
- Refactors most protocols and improves their API
- Removes multiple unintended side-effects of the CLI
- Improves dependency referencing in configuration files
- Adds push and publish functionality to CLI
- Introduces simple and composite behaviours and applies them in skills
- Adds URI to envelopes
- Adds guide for programmatic assembly of an AEA
- Adds guide on agent-oriented development
- Multiple minor doc updates
- Adds additional tests
- Multiple additional minor fixes and changes
## 0.1.14 (2019-11-29)
- Removes dependency on OEF SDK's FIPA API
- Replaces dialogue id with dialogue references
- Improves CLI logging and list/search command output
- Introduces multiplexer and removes mailbox
- Adds much improved tac skills
- Adds support for CLI integration with registry
- Increases test coverage to 99%
- Introduces integration tests for skills and examples
- Adds support to run multiple connections from CLI
- Updates the docs and adds UML diagrams
- Multiple additional minor fixes and changes
## 0.1.13 (2019-11-08)
- Adds envelope serialiser
- Adds support for programmatically initializing an AEA
- Adds some tests for the GUI and other components
- Exposes connection status to skills
- Updates OEF connection to re-establish dropped connections
- Updates the car park agent
- Multiple additional minor fixes and changes
## 0.1.12 (2019-11-01)
- Adds TCP connection (server and client)
- Fixes some examples and docs
- Refactors crypto modules and adds additional tests
- Multiple additional minor fixes and changes
## 0.1.11 (2019-10-30)
- Adds Python 3.8 test coverage
- Adds almost complete test coverage on AEA package
- Adds filter concept for message routing
- Adds ledger integrations for Fetch.ai and Ethereum
- Adds car park examples and ledger examples
- Multiple additional minor fixes and changes
## 0.1.10 (2019-10-19)
- Compatibility fixes for Ubuntu and Windows platforms
- Multiple additional minor fixes and changes
## 0.1.9 (2019-10-18)
- Stability improvements
- Higher test coverage, including on Python 3.6
- Multiple additional minor fixes and changes
## 0.1.8 (2019-10-18)
- Multiple bug fixes and improvements to GUI of CLI
- Adds full test coverage on CLI
- Improves docs
- Multiple additional minor fixes and changes
## 0.1.7 (2019-10-14)
- Adds GUI to interact with CLI
- Adds new connection stub to read from/write to file
- Adds ledger entities (fetchai and Ethereum); creates wallet for ledger entities
- Adds more documentation and fixes old one
- Multiple additional minor fixes and changes
## 0.1.6 (2019-10-04)
- Adds several new skills
- Extended docs on framework and skills
- Introduces core framework components like decision maker and shared classes
- Multiple additional minor fixes and changes
## 0.1.5 (2019-09-26)
- Adds scaffolding command to the CLI tool
- Extended docs
- Increased test coverage
- Multiple additional minor fixes and changes
## 0.1.4 (2019-09-20)
- Adds CLI functionality to add connections
- Multiple additional minor fixes and changes
## 0.1.3 (2019-09-19)
- Adds Jenkins for CI
- Adds docker develop image
- Parses dependencies of connections/protocols/skills on the fly
- Adds validations of configuration files
- Adds first two working skills and fixes gym examples
- Adds docs
- Multiple additional minor fixes and changes
## 0.1.2 (2019-09-16)
- Adds AEA CLI tool.
- Adds AEA skills framework.
- Introduces static typing checks across AEA, using `Mypy`.
- Extends gym example
## 0.1.1 (2019-09-04)
- Provides examples and fixes.
## 0.1.0 (2019-08-21)
- Initial release of the package.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2019 Fetch.AI Limited
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: MANIFEST.in
================================================
include README.md LICENSE HISTORY.md AUTHORS.md SECURITY.md CODE_OF_CONDUCT.md Pipfile mkdocs.yml tox.ini pytest.ini strategy.ini
recursive-include aea *.json *.yaml *.proto *.ico *png *.html *.js *.css *.md *.cfg json1.dll
recursive-include docs *
recursive-include examples *
recursive-include packages *
recursive-include plugins *
recursive-include scripts *
recursive-include tests *
================================================
FILE: Makefile
================================================
AEA_SRC_DIR := aea
BENCHMARK_DIR := benchmark
EXAMPLES_DIR := examples
LIBS_DIR := libs
PACKAGES_DIR := packages
PLUGINS_DIR := plugins
SCRIPTS_DIR := scripts
AEA_TESTS_DIR := tests
AEA_CORE_TESTS_DIRS := tests/test_aea tests/test_aea_extra ./tests/test_docs
EXAMPLES_TESTS_DIRS := tests/test_examples
PACKAGES_TESTS_DIRS := packages/fetchai/protocols packages/fetchai/connections packages/fetchai/skills ./tests/test_packages ./tests/test_packages_for_aea_tests ./tests/test_aea_core_packages
DOCS_TESTS_DIR := tests/test_docs
CONNECTIONS_DIR := packages/fetchai/connections
CONTRACTS_DIR := packages/fetchai/contracts
PROTOCOLS_DIR := packages/fetchai/protocols
SKILLS_DIR := packages/fetchai/skills
PLUGIN_FETCHAI_SRC := plugins/aea-ledger-fetchai/aea_ledger_fetchai
PLUGIN_ETHEREUM_SRC := plugins/aea-ledger-ethereum/aea_ledger_ethereum
PLUGIN_COSMOS_SRC := plugins/aea-ledger-cosmos/aea_ledger_cosmos
PLUGIN_CLI_IPFS_SRC := plugins/aea-cli-ipfs/aea_cli_ipfs
PLUGINS_SRC := $(PLUGIN_FETCHAI_SRC) $(PLUGIN_ETHEREUM_SRC) $(PLUGIN_COSMOS_SRC) $(PLUGIN_CLI_IPFS_SRC)
PLUGIN_FETCHAI_TESTS := plugins/aea-ledger-fetchai/tests
PLUGIN_ETHEREUM_TESTS := plugins/aea-ledger-ethereum/tests
PLUGIN_COSMOS_TESTS := plugins/aea-ledger-cosmos/tests
PLUGIN_CLI_IPFS_TESTS := plugins/aea-cli-ipfs/tests
PLUGINS_TESTS := $(PLUGIN_FETCHAI_TESTS) $(PLUGIN_ETHEREUM_TESTS) $(PLUGIN_COSMOS_TESTS) $(PLUGIN_CLI_IPFS_TESTS)
PLUGIN_FETCHAI := plugins/aea-ledger-fetchai
PLUGIN_ETHEREUM := plugins/aea-ledger-ethereum
PLUGIN_COSMOS := plugins/aea-ledger-cosmos
PLUGIN_CLI_IPFS := plugins/aea-cli-ipfs
PYTHON_CODE_DIRS := $(AEA_SRC_DIR) $(BENCHMARK_DIR) $(EXAMPLES_DIR) $(PACKAGES_DIR) $(PLUGINS_DIR) $(SCRIPTS_DIR) $(AEA_TESTS_DIR)
########################################
### Initialise dev environment
########################################
# Create a new poetry virtual environment with all the necessary dependencies installed.
# Once finished, `poetry shell` to enter the virtual environment
v := $(shell pip -V | grep virtualenvs)
.PHONY: new-env
new-env: clean
if [ -z "$v" ];\
then\
poetry install --with dev,docs,packages,tools,testing,types;\
poetry run pip install --no-deps file:plugins/aea-ledger-ethereum;\
poetry run pip install --no-deps file:plugins/aea-ledger-cosmos;\
poetry run pip install --no-deps file:plugins/aea-ledger-fetchai;\
poetry run pip install --no-deps file:plugins/aea-cli-ipfs;\
echo "Enter virtual environment with all development dependencies now: 'poetry shell'.";\
else\
echo "In a virtual environment! Exit first: 'exit'.";\
fi
########################################
### Tests
########################################
# Run all tests
.PHONY: test
test: test-aea-all test-plugins
# Run all aea tests
.PHONY: test-aea-all
test-aea-all:
pytest -rfE --doctest-modules $(AEA_TESTS_DIR) --cov=$(AEA_SRC_DIR) --cov=$(CONNECTIONS_DIR) --cov=$(CONTRACTS_DIR) --cov=$(PROTOCOLS_DIR) --cov=$(SKILLS_DIR) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
.PHONY: test-aea-core
test-aea-core:
pytest -rfE --doctest-modules $(AEA_CORE_TESTS_DIRS) --cov=$(AEA_SRC_DIR) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
.PHONY: test-packages
test-packages:
pytest -rfE --doctest-modules $(PACKAGES_TESTS_DIRS) --cov=$(AEA_SRC_DIR) --cov=$(CONNECTIONS_DIR) --cov=$(CONTRACTS_DIR) --cov=$(PROTOCOLS_DIR) --cov=$(SKILLS_DIR) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
.PHONY: test-docs
test-docs:
pytest -rfE --doctest-modules $(DOCS_TESTS_DIR) --cov=$(AEA_SRC_DIR) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
.PHONY: test-examples
test-examples:
pytest -rfE --doctest-modules $(EXAMPLES_TESTS_DIRS) --cov=$(AEA_SRC_DIR) --cov=$(CONNECTIONS_DIR) --cov=$(CONTRACTS_DIR) --cov=$(PROTOCOLS_DIR) --cov=$(SKILLS_DIR) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
# Run all plugin tests
.PHONY: test-plugins
test-plugins:
pytest -rfE $(PLUGIN_FETCHAI_TESTS) --cov=aea_ledger_fetchai --cov-report=term-missing --cov-config=pyproject.toml
pytest -rfE $(PLUGIN_ETHEREUM_TESTS) --cov=aea_ledger_ethereum --cov-report=term-missing --cov-config=pyproject.toml
pytest -rfE $(PLUGIN_COSMOS_TESTS) --cov=aea_ledger_cosmos --cov-report=term-missing --cov-config=pyproject.toml
pytest -rfE $(PLUGIN_CLI_IPFS_TESTS) --cov=aea_cli_ipfs --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
# Run tests for a particular python package
.PHONY: test-sub
test-sub:
pytest -rfE --doctest-modules $(AEA_TESTS_DIR)/test_$(tdir) --cov=aea.$(dir) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
# Run tests for a particular aea package
.PHONY: test-sub-p
test-sub-p:
pytest -rfE --doctest-modules $(AEA_TESTS_DIR)/test_packages/test_$(tdir) --cov=packages.fetchai.$(dir) --cov-report=html --cov-report=term-missing --cov-config=pyproject.toml
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
# Produce the coverage report. Can see a report summary on the terminal.
# Detailed report on all modules are placed under /htmlcov
.PHONY: coverage-report
coverage-report:
coverage report -m -i
coverage html
########################################
### Code Styling
########################################
# Automatically run black and isort to format the code, and run flake8 and vulture checks
.PHONY: lint
lint: black isort flake8 vulture
# Automatically format the code using black
.PHONY: black
black:
black $(PYTHON_CODE_DIRS)
# Automatically sort the imports
.PHONY: isort
isort:
isort $(PYTHON_CODE_DIRS)
# Check the code format
.PHONY: black-check
black-check:
black --check --verbose $(PYTHON_CODE_DIRS)
# Check the imports are sorted
.PHONY: isort-check
isort-check:
isort --check-only --verbose $(PYTHON_CODE_DIRS)
# Run flake8 linter
.PHONY: flake8
flake8:
flake8 $(PYTHON_CODE_DIRS)
# Check for unused code
.PHONY: vulture
vulture:
vulture $(AEA_SRC_DIR) scripts/whitelist.py --exclude '*_pb2.py'
########################################
### Security & safety checks
########################################
# Run bandit and safety
.PHONY: security
security: bandit safety
# Check the security of the code
.PHONY: bandit
bandit:
bandit -r $(AEA_SRC_DIR) $(BENCHMARK_DIR) $(EXAMPLES_DIR) $(PACKAGES_DIR) $(PLUGIN_FETCHAI_SRC) $(PLUGIN_ETHEREUM_SRC) $(PLUGIN_COSMOS_SRC) $(PLUGIN_CLI_IPFS_SRC)
bandit -s B101 -r $(AEA_TESTS_DIR) $(SCRIPTS_DIR)
# Check the security of the code for known vulnerabilities
.PHONY: safety
safety:
safety check -i 44610 -i 50473
########################################
### Linters
########################################
# Check types (statically) using mypy
.PHONY: mypy
mypy:
mypy aea packages benchmark --disallow-untyped-defs
mypy examples --check-untyped-defs
mypy scripts
mypy tests --exclude "serialization.py"
# Lint the code using pylint
.PHONY: pylint
pylint:
pylint -j0 -d E1136 $(AEA_SRC_DIR) $(BENCHMARK_DIR) $(EXAMPLES_DIR) $(PACKAGES_DIR) $(SCRIPTS_DIR) $(PLUGIN_FETCHAI_SRC) $(PLUGIN_ETHEREUM_SRC) $(PLUGIN_COSMOS_SRC) $(PLUGIN_CLI_IPFS_SRC)
########################################
### License and copyright checks
########################################
# Check dependency licenses
.PHONY: liccheck
liccheck:
poetry export > tmp-requirements.txt
liccheck -s strategy.ini -r tmp-requirements.txt -l PARANOID
rm -frv tmp-requirements.txt
# Check that the relevant files have appropriate Copyright header
.PHONY: copyright-check
copyright-check:
python scripts/check_copyright_notice.py --directory .
########################################
### Docs
########################################
# Build documentation
.PHONY: docs
docs:
mkdocs build --clean
# Live documentation server
.PHONY: docs-live
docs-live:
mkdocs serve
# Generate API documentation (ensure you add the new pages created into /mkdocs.yml --> nav)
.PHONY: generate-api-docs
generate-api-docs:
python scripts/generate_api_docs.py $(args)
# Check links are live in the documentation
.PHONY: check-doc-links
check-doc-links:
python scripts/check_doc_links.py
########################################
### Poetry Lock
########################################
# Updates the poetry lock
poetry.lock: pyproject.toml
poetry lock
########################################
### Clear the caches and temporary files
########################################
# clean the caches and temporary files and directories
.PHONY: clean
clean: clean-build clean-pyc clean-test clean-docs
.PHONY: clean-build
clean-build:
rm -fr build/
rm -fr dist/
rm -fr .eggs/
rm -fr pip-wheel-metadata
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -fr {} +
rm -rf plugins/*/build
rm -rf plugins/*/dist
.PHONY: clean-docs
clean-docs:
rm -fr site/
.PHONY: clean-pyc
clean-pyc:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
find . -name '.DS_Store' -exec rm -fr {} +
.PHONY: clean-test
clean-test:
rm -fr .tox/
rm -f .coverage
find . -name ".coverage*" -not -name ".coveragerc" -exec rm -fr "{}" \;
rm -fr coverage.xml
rm -fr htmlcov/
rm -fr .hypothesis
rm -fr .pytest_cache
rm -fr .mypy_cache/
rm -fr input_file
rm -fr output_file
find . -name 'log.txt' -exec rm -fr {} +
find . -name 'log.*.txt' -exec rm -fr {} +
########################################
### Packages
########################################
# Update package hashes
.PHONY: update-package-hashes
update-package-hashes:
python scripts/generate_ipfs_hashes.py
# Run all package checks
.PHONY: package-checks
package-checks: check-package-hashes check-package-versions-in-docs check-packages
# Check package hashes
.PHONY: check-package-hashes
check-package-hashes:
python scripts/generate_ipfs_hashes.py --check
# Check correct package version in the docs
.PHONY: check-package-versions-in-docs
check-package-versions-in-docs:
python scripts/check_package_versions_in_docs.py
# Perform various checks on packages
.PHONY: check-packages
check-packages:
python scripts/check_packages.py
########################################
### Other checks
########################################
# Check that libp2p code in libs and connection aren't different
.PHONY: libp2p-diffs
libp2p-diffs:
diff libs/go/libp2p_node packages/fetchai/connections/p2p_libp2p/libp2p_node -r
# Check that plugins for Cosmos and Fetch.ai, and Plugins' and main Licenses aren't different
.PHONY: plugin-diffs
plugin-diffs:
diff $(PLUGIN_COSMOS_SRC)/cosmos.py $(PLUGIN_FETCHAI_SRC)/_cosmos.py
diff LICENSE $(PLUGIN_COSMOS)/LICENSE
diff LICENSE $(PLUGIN_ETHEREUM)/LICENSE
diff LICENSE $(PLUGIN_FETCHAI)/LICENSE
########################################
### Build
########################################
# Build the project
.PHONY: dist
dist: clean
poetry build
protolint_install:
GO111MODULE=on GOPATH=~/go go install github.com/yoheimuta/protolint/cmd/protolint@v0.27.0
protolint:
PATH=${PATH}:${GOPATH}/bin/:~/go/bin protolint lint -config_path=./protolint.yaml -fix ./aea/mail ./packages/fetchai/protocols
protolint_install_win:
powershell -command '$$env:GO111MODULE="on"; go install github.com/yoheimuta/protolint/cmd/protolint@v0.27.0'
protolint_win:
protolint lint -config_path=./protolint.yaml -fix ./aea/mail ./packages/fetchai/protocols
================================================
FILE: README.md
================================================
<h1 align="center">
<b>AEA Framework</b>
</h1>
<p align="center">
Create Autonomous Economic Agents (AEAs)
</p>
<p align="center">
<a href="https://pypi.org/project/aea/">
<img alt="PyPI" src="https://img.shields.io/pypi/v/aea">
</a>
<a href="https://pypi.org/project/aea/">
<img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/aea">
</a>
<a href="https://github.com/fetchai/agents-aea/blob/main/LICENSE">
<img alt="License" src="https://img.shields.io/pypi/l/aea">
</a>
<a href="https://pypi.org/project/aea/">
<img alt="License" src="https://img.shields.io/pypi/dm/aea">
</a>
<br />
<a href="https://github.com/fetchai/agents-aea/workflows/AEA%20framework%20sanity%20checks%20and%20tests">
<img alt="AEA framework sanity checks and tests" src="https://github.com/fetchai/agents-aea/workflows/AEA%20framework%20sanity%20checks%20and%20tests/badge.svg?branch=main">
</a>
<a href="">
<img alt="Codecov" src="https://img.shields.io/codecov/c/github/fetchai/agents-aea">
</a>
<a href="https://discord.gg/hy8SyhNnXf">
<img src="https://img.shields.io/discord/441214316524339210.svg?logo=discord&logoColor=fff&label=Discord&color=7389d8" alt="Discord conversation" />
</a>
</p>
The AEA framework allows you to create **Autonomous Economic Agents**:
- An AEA is an <b>Agent</b>, representing an individual, family, organisation or object (a.k.a. its "owner") in the digital world. It looks after its owner's interests and has their preferences in mind when acting on their behalf.
- AEAs are <b>Autonomous</b>; acting with no, or minimal, interference from their owners.
- AEAs have a narrow and specific focus: creating <b>Economic</b> value for their owners.
<p align="center">
<a href="https://www.youtube.com/embed/xpJA4IT5X88">
<img src="/data/video-aea.png?raw=true" alt="AEA Video" width="70%"/>
</a>
</p>
## To install
1. Ensure you have Python (version `3.8`, `3.9` or `3.10`).
2. (optional) Use a virtual environment (e.g. [`pipenv`][pipenv] or [`poetry`][poetry]).
3. Install: `pip install aea[all]`
Please see the [installation page][docs-install] for more details.
## Documentation
The full documentation, including how to get started, can be found [here][docs].
## Contributing
All contributions are very welcome! Remember, contribution is not only PRs and code, but any help with docs or helping other developers solve their issues are very appreciated!
Read below to learn how you can take part in the AEA project.
### Code of Conduct
Please be sure to read and follow our [Code of Conduct][coc]. By participating, you are expected to uphold this code.
### Contribution Guidelines
Read our [contribution guidelines][contributing] to learn about our issue and PR submission processes, coding rules, and more.
### Development Guidelines
Read our [development guidelines][developing] to learn about the development processes and workflows when contributing to different parts of the AEA project.
### Issues, Questions and Discussions
We use [GitHub Issues][issues] for tracking requests and bugs, and [GitHub Discussions][discussion] for general questions and discussion.
## License
The AEA project is licensed under [Apache License 2.0][license].
[poetry]: https://python-poetry.org
[pipenv]: https://pypi.org/project/pipenv/
[docs]: https://docs.fetch.ai
[contributing]: https://github.com/fetchai/agents-aea/blob/main/CONTRIBUTING.md
[developing]: https://github.com/fetchai/agents-aea/blob/main/DEVELOPING.md
[coc]: https://github.com/fetchai/agents-aea/blob/main/CODE_OF_CONDUCT.md
[discussion]: https://github.com/fetchai/agents-aea/discussions
[issues]: https://github.com/fetchai/agents-aea/issues
[license]: https://github.com/fetchai/agents-aea/blob/main/LICENSE
[docs-install]: https://docs.fetch.ai/aea/installation/
================================================
FILE: SECURITY.md
================================================
# Security Policy
This document outlines security procedures and general policies for the `aea` project.
## Supported Versions
The following table shows which versions of `aea` are currently being supported with security updates.
| Version | Supported |
|-----------|--------------------|
| `1.2.x` | :white_check_mark: |
| `< 1.2.0` | :x: |
## Reporting a Vulnerability
The `aea` team and community take all security bugs in `aea` seriously. Thank you for improving the security of `aea`. We appreciate your efforts and responsible disclosure and will make every effort to acknowledge your contributions.
Report security bugs by emailing `developer@fetch.ai`.
The lead maintainer will acknowledge your email within 48 hours, and will send a more detailed response within 48 hours indicating the next steps in handling your report. After the initial reply to your report, the security team will endeavour to keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
Report security bugs in third-party modules to the person or team maintaining the module.
## Disclosure Policy
When the security team receives a security bug report, they will assign it to a primary handler. This person will coordinate the fix and release process, involving the following steps:
- Confirm the problem and determine the affected versions.
- Audit code to find any potential similar problems.
- Prepare fixes for all releases still under maintenance. These fixes will be released as fast as possible to PyPI.
## Comments on this Policy
If you have suggestions on how this process could be improved please submit a pull request.
================================================
FILE: aea/__init__.py
================================================
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2018-2023 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ------------------------------------------------------------------------------
"""Contains the AEA package."""
import inspect
import os
from packaging.version import Version
import aea.crypto # triggers registry population
from aea.__version__ import (
__author__,
__copyright__,
__description__,
__license__,
__title__,
__url__,
__version__,
)
from aea.crypto.plugin import load_all_plugins
AEA_DIR = os.path.dirname(inspect.getfile(inspect.currentframe())) # type: ignore
load_all_plugins()
def get_current_aea_version() -> Version:
"""Get current version."""
return Version(__version__)
================================================
FILE: aea/__version__.py
================================================
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2018-2023 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ------------------------------------------------------------------------------
"""Specifies the version of the AEA package."""
__title__ = "aea"
__description__ = "Autonomous Economic Agent framework"
__url__ = "https://github.com/fetchai/agents-aea.git"
__version__ = "1.2.5"
__author__ = "Fetch.AI Limited"
__license__ = "Apache-2.0"
__copyright__ = "2022 Fetch.AI Limited"
================================================
FILE: aea/abstract_agent.py
================================================
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2018-2023 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ------------------------------------------------------------------------------
"""This module contains the interface definition of the abstract agent."""
import datetime
from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Tuple
from aea.mail.base import Envelope
class AbstractAgent(ABC):
"""This class provides an abstract base interface for an agent."""
@property
@abstractmethod
def name(self) -> str:
"""Get agent's name."""
@property
@abstractmethod
def storage_uri(self) -> Optional[str]:
"""Return storage uri."""
@abstractmethod
def start(self) -> None:
"""
Start the agent.
:return: None
"""
@abstractmethod
def stop(self) -> None:
"""
Stop the agent.
:return: None
"""
@abstractmethod
def setup(self) -> None:
"""
Set up the agent.
:return: None
"""
@abstractmethod
def act(self) -> None:
"""
Perform actions on period.
:return: None
"""
@abstractmethod
def handle_envelope(self, envelope: Envelope) -> None:
"""
Handle an envelope.
:param envelope: the envelope to handle.
:return: None
"""
@abstractmethod
def get_periodic_tasks(
self,
) -> Dict[Callable, Tuple[float, Optional[datetime.datetime]]]:
"""
Get all periodic tasks for agent.
:return: dict of callable with period specified
"""
@abstractmethod
def get_message_handlers(self) -> List[Tuple[Callable[[Any], None], Callable]]:
"""
Get handlers with message getters.
:return: List of tuples of callables: handler and coroutine to get a message
"""
@abstractmethod
def exception_handler(
self, exception: Exception, function: Callable
) -> Optional[bool]:
"""
Handle exception raised during agent main loop execution.
:param exception: exception raised
:param function: a callable exception raised in.
:return: skip exception if True, otherwise re-raise it
"""
@abstractmethod
def teardown(self) -> None:
"""
Tear down the agent.
:return: None
"""
================================================
FILE: aea/aea.py
================================================
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2018-2023 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ------------------------------------------------------------------------------
"""This module contains the implementation of an autonomous economic agent (AEA)."""
import datetime
from asyncio import AbstractEventLoop
from logging import Logger
from multiprocessing.pool import AsyncResult
from typing import (
Any,
Callable,
Collection,
Dict,
List,
Optional,
Sequence,
Tuple,
Type,
cast,
)
from aea.agent import Agent
from aea.agent_loop import AsyncAgentLoop, BaseAgentLoop, SyncAgentLoop
from aea.configurations.base import PublicId
from aea.configurations.constants import (
DEFAULT_BUILD_DIR_NAME,
DEFAULT_SEARCH_SERVICE_ADDRESS,
)
from aea.context.base import AgentContext
from aea.crypto.ledger_apis import DEFAULT_CURRENCY_DENOMINATIONS
from aea.crypto.wallet import Wallet
from aea.decision_maker.base import DecisionMakerHandler
from aea.error_handler.base import AbstractErrorHandler
from aea.error_handler.default import ErrorHandler as DefaultErrorHandler
from aea.exceptions import AEAException, _StopRuntime
from aea.helpers.exception_policy import ExceptionPolicyEnum
from aea.helpers.logging import AgentLoggerAdapter, WithLogger, get_logger
from aea.identity.base import Identity
from aea.mail.base import Envelope
from aea.protocols.base import Message, Protocol
from aea.registries.filter import Filter
from aea.registries.resources import Resources
from aea.skills.base import Behaviour, Handler
class AEA(Agent):
"""This class implements an autonomous economic agent."""
RUN_LOOPS: Dict[str, Type[BaseAgentLoop]] = {
"async": AsyncAgentLoop,
"sync": SyncAgentLoop,
}
DEFAULT_RUN_LOOP: str = "async"
DEFAULT_BUILD_DIR_NAME = DEFAULT_BUILD_DIR_NAME
def __init__(
self,
identity: Identity,
wallet: Wallet,
resources: Resources,
data_dir: str,
loop: Optional[AbstractEventLoop] = None,
period: float = 0.05,
execution_timeout: float = 0,
max_reactions: int = 20,
error_handler_class: Optional[Type[AbstractErrorHandler]] = None,
error_handler_config: Optional[Dict[str, Any]] = None,
decision_maker_handler_class: Optional[Type[DecisionMakerHandler]] = None,
decision_maker_handler_config: Optional[Dict[str, Any]] = None,
skill_exception_policy: ExceptionPolicyEnum = ExceptionPolicyEnum.propagate,
connection_exception_policy: ExceptionPolicyEnum = ExceptionPolicyEnum.propagate,
loop_mode: Optional[str] = None,
runtime_mode: Optional[str] = None,
default_ledger: Optional[str] = None,
currency_denominations: Optional[Dict[str, str]] = None,
default_connection: Optional[PublicId] = None,
default_routing: Optional[Dict[PublicId, PublicId]] = None,
connection_ids: Optional[Collection[PublicId]] = None,
search_service_address: str = DEFAULT_SEARCH_SERVICE_ADDRESS,
storage_uri: Optional[str] = None,
task_manager_mode: Optional[str] = None,
**kwargs: Any,
) -> None:
"""
Instantiate the agent.
:param identity: the identity of the agent
:param wallet: the wallet of the agent.
:param resources: the resources (protocols and skills) of the agent.
:param data_dir: directory where to put local files.
:param loop: the event loop to run the connections.
:param period: period to call agent's act
:param execution_timeout: amount of time to limit single act/handle to execute.
:param max_reactions: the processing rate of envelopes per tick (i.e. single loop).
:param error_handler_class: the class implementing the error handler
:param error_handler_config: the configuration of the error handler
:param decision_maker_handler_class: the class implementing the decision maker handler to be used.
:param decision_maker_handler_config: the configuration of the decision maker handler
:param skill_exception_policy: the skill exception policy enum
:param connection_exception_policy: the connection exception policy enum
:param loop_mode: loop_mode to choose agent run loop.
:param runtime_mode: runtime mode (async, threaded) to run AEA in.
:param default_ledger: default ledger id
:param currency_denominations: mapping from ledger id to currency denomination
:param default_connection: public id to the default connection
:param default_routing: dictionary for default routing.
:param connection_ids: active connection ids. Default: consider all the ones in the resources.
:param search_service_address: the address of the search service used.
:param storage_uri: optional uri to set generic storage
:param task_manager_mode: task manager mode (threaded) to run tasks with.
:param kwargs: keyword arguments to be attached in the agent context namespace.
"""
self._skills_exception_policy = skill_exception_policy
self._connection_exception_policy = connection_exception_policy
aea_logger = AgentLoggerAdapter(
logger=get_logger(__name__, identity.name),
agent_name=identity.name,
)
self._resources = resources
super().__init__(
identity=identity,
connections=[],
loop=loop,
period=period,
loop_mode=loop_mode,
runtime_mode=runtime_mode,
storage_uri=storage_uri,
logger=cast(Logger, aea_logger),
task_manager_mode=task_manager_mode,
)
default_routing = default_routing if default_routing is not None else {}
connection_ids = connection_ids or []
connections = [
c
for c in self.resources.get_all_connections()
if (not connection_ids) or (c.connection_id in connection_ids)
]
if not bool(self.resources.get_all_connections()):
self.logger.warning(
"Resource's connections list is empty! Instantiating AEA without connections..."
)
elif bool(self.resources.get_all_connections()) and not bool(connections):
self.logger.warning( # pragma: nocover
"No connection left after filtering! Instantiating AEA without connections..."
)
self._set_runtime_and_mail_boxes(
runtime_class=self._get_runtime_class(),
loop_mode=loop_mode,
loop=loop,
multiplexer_options=dict(
connections=connections,
default_routing=default_routing,
default_connection=default_connection,
protocols=self.resources.get_all_protocols(),
),
)
self.max_reactions = max_reactions
if decision_maker_handler_class is None:
from aea.decision_maker.default import ( # isort:skip # pylint: disable=import-outside-toplevel
DecisionMakerHandler as DefaultDecisionMakerHandler,
)
decision_maker_handler_class = DefaultDecisionMakerHandler
if decision_maker_handler_config is None:
decision_maker_handler_config = {}
decision_maker_handler = decision_maker_handler_class(
identity=identity, wallet=wallet, config=decision_maker_handler_config
)
self.runtime.set_decision_maker(decision_maker_handler)
if error_handler_class is None:
error_handler_class = DefaultErrorHandler
if error_handler_config is None:
error_handler_config = {}
self._error_handler = error_handler_class(**error_handler_config)
default_ledger_id = (
default_ledger
if default_ledger is not None
else identity.default_address_key
)
currency_denominations = (
currency_denominations
if currency_denominations is not None
else DEFAULT_CURRENCY_DENOMINATIONS
)
self._context = AgentContext(
self.identity,
self.runtime.multiplexer.connection_status,
self.outbox,
self.runtime.decision_maker.message_in_queue,
decision_maker_handler.context,
self.runtime.task_manager,
default_ledger_id,
currency_denominations,
default_connection,
default_routing,
search_service_address,
decision_maker_handler.self_address,
data_dir,
storage_callable=lambda: self.runtime.storage,
build_dir=self.get_build_dir(),
send_to_skill=self.runtime.agent_loop.send_to_skill,
**kwargs,
)
self._execution_timeout = execution_timeout
self._filter = Filter(
self.resources, self.runtime.decision_maker.message_out_queue
)
self._setup_loggers()
@classmethod
def get_build_dir(cls) -> str:
"""Get agent build directory."""
return cls.DEFAULT_BUILD_DIR_NAME
@property
def context(self) -> AgentContext:
"""Get (agent) context."""
return self._context
@property
def resources(self) -> Resources:
"""Get resources."""
return self._resources
@resources.setter
def resources(self, resources: "Resources") -> None:
"""Set resources."""
self._resources = resources
@property
def filter(self) -> Filter:
"""Get the filter."""
return self._filter
@property
def active_behaviours(self) -> List[Behaviour]:
"""Get all active behaviours to use in act."""
return self.filter.get_active_behaviours()
def setup(self) -> None:
"""
Set up the agent.
Calls setup() on the resources.
"""
self.resources.setup()
def act(self) -> None:
"""
Perform actions.
Adds new handlers and behaviours for use/execution by the runtime.
"""
self.filter.handle_new_handlers_and_behaviours()
def _get_error_handler(self) -> AbstractErrorHandler:
"""Get error handler."""
return self._error_handler
def _get_msg_and_handlers_for_envelope(
self, envelope: Envelope
) -> Tuple[Optional[Message], List[Handler]]:
"""Get the msg and its handlers."""
protocol = self.resources.get_protocol_by_specification_id(
envelope.protocol_specification_id
)
error_handler = self._get_error_handler()
if protocol is None:
error_handler.send_unsupported_protocol(envelope, self.logger)
return None, []
msg, handlers = self._handle_decoding(envelope, protocol, error_handler)
return msg, handlers
def _handle_decoding(
self,
envelope: Envelope,
protocol: Protocol,
error_handler: AbstractErrorHandler,
) -> Tuple[Optional[Message], List[Handler]]:
handlers = self.filter.get_active_handlers(
protocol.public_id, envelope.to_as_public_id
)
if len(handlers) == 0:
reason = (
f"no active handler for protocol={protocol.public_id} in skill={envelope.to_as_public_id}"
if envelope.is_component_to_component_message
else f"no active handler for protocol={protocol.public_id}"
)
error_handler.send_no_active_handler(envelope, reason, self.logger)
return None, []
if isinstance(envelope.message, Message):
msg = envelope.message
return msg, handlers
try:
msg = protocol.serializer.decode(envelope.message)
msg.sender = envelope.sender
msg.to = envelope.to
return msg, handlers
except Exception as e: # pylint: disable=broad-except # thats ok, because we send the decoding error back
error_handler.send_decoding_error(envelope, e, self.logger)
return None, []
def handle_envelope(self, envelope: Envelope) -> None:
"""
Handle an envelope.
Performs the following:
- fetching the protocol referenced by the envelope, and
- handling if the protocol is unsupported, using the error handler, or
- handling if there is a decoding error, using the error handler, or
- handling if no active handler is available for the specified protocol, using the error handler, or
- handling the message recovered from the envelope with all active handlers for the specified protocol.
:param envelope: the envelope to handle.
:return: None
"""
self.logger.debug("Handling envelope: {}".format(envelope))
msg, handlers = self._get_msg_and_handlers_for_envelope(envelope)
if msg is None:
return
for handler in handlers:
handler.handle_wrapper(msg)
def _setup_loggers(self) -> None:
"""Set up logger with agent name."""
for element in [
self.runtime.agent_loop,
self.runtime.multiplexer,
self.runtime.task_manager,
self.resources.component_registry,
self.resources.behaviour_registry,
self.resources.handler_registry,
self.resources.model_registry,
]:
element = cast(WithLogger, element)
element.logger = cast(
Logger,
AgentLoggerAdapter(element.logger, agent_name=self._identity.name),
)
def get_periodic_tasks(
self,
) -> Dict[Callable, Tuple[float, Optional[datetime.datetime]]]:
"""
Get all periodic tasks for agent.
:return: dict of callable with period specified
"""
tasks = super().get_periodic_tasks()
tasks.update(self._get_behaviours_tasks())
return tasks
def _get_behaviours_tasks(
self,
) -> Dict[Callable, Tuple[float, Optional[datetime.datetime]]]:
"""
Get all periodic tasks for AEA behaviours.
:return: dict of callable with period specified
"""
tasks = {}
for behaviour in self.active_behaviours:
tasks[behaviour.act_wrapper] = (behaviour.tick_interval, behaviour.start_at)
return tasks
def get_message_handlers(self) -> List[Tuple[Callable[[Any], None], Callable]]:
"""
Get handlers with message getters.
:return: List of tuples of callables: handler and coroutine to get a message
"""
return super().get_message_handlers() + [
(
self.filter.handle_internal_message,
self.filter.get_internal_message,
),
(self.handle_envelope, self.runtime.agent_loop.skill2skill_queue.get),
]
def exception_handler(self, exception: Exception, function: Callable) -> bool:
"""
Handle exception raised during agent main loop execution.
:param exception: exception raised
:param function: a callable exception raised in.
:return: bool, propagate exception if True otherwise skip it.
"""
# docstyle: ignore # noqa: E800
def log_exception(e: Exception, fn: Callable, is_debug: bool = False) -> None:
if is_debug:
self.logger.debug(f"<{e}> raised during `{fn}`")
else:
self.logger.exception(f"<{e}> raised during `{fn}`")
if self._skills_exception_policy == ExceptionPolicyEnum.propagate:
log_exception(exception, function, is_debug=True)
return True
if self._skills_exception_policy == ExceptionPolicyEnum.stop_and_exit:
log_exception(exception, function)
raise _StopRuntime(
AEAException(
f"AEA was terminated cause exception `{exception}` in skills {function}! Please check logs."
)
)
if self._skills_exception_policy == ExceptionPolicyEnum.just_log:
log_exception(exception, function)
return False
raise AEAException(
f"Unsupported exception policy: {self._skills_exception_policy}"
)
def teardown(self) -> None:
"""
Tear down the agent.
Performs the following:
- tears down the resources.
"""
self.resources.teardown()
def get_task_result(self, task_id: int) -> AsyncResult:
"""
Get the result from a task.
:param task_id: the id of the task
:return: async result for task_id
"""
return self.runtime.task_manager.get_task_result(task_id)
def enqueue_task(
self,
func: Callable,
args: Sequence = (),
kwargs: Optional[Dict[str, Any]] = None,
) -> int:
"""
Enqueue a task with the task manager.
:param func: the callable instance to be enqueued
:param args: the positional arguments to be passed to the function.
:param kwargs: the keyword arguments to be passed to the function.
:return: the task id to get the the result.
"""
return self.runtime.task_manager.enqueue_task(func, args, kwargs)
================================================
FILE: aea/aea_builder.py
================================================
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------------
#
# Copyright 2018-2023 Fetch.AI Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ------------------------------------------------------------------------------
"""This module contains utilities for building an AEA."""
import ast
import logging
import logging.config
import os
import pprint
import subprocess # nosec
import sys
from collections import defaultdict
from copy import deepcopy
from importlib import import_module
from pathlib import Path
from typing import Any, Collection, Dict, List, Optional, Set, Tuple, Type, Union, cast
import jsonschema
from packaging.specifiers import SpecifierSet
from aea.aea import AEA
from aea.common import PathLike
from aea.components.base import Component, load_aea_package
from aea.components.loader import load_component_from_config
from aea.configurations.base import (
AgentConfig,
ComponentConfiguration,
ComponentId,
ComponentType,
ConnectionConfig,
ContractConfig,
Dependencies,
PackageType,
ProtocolConfig,
PublicId,
SkillConfig,
)
from aea.configurations.constants import (
CONNECTIONS,
DEFAULT_AEA_CONFIG_FILE,
DEFAULT_ENV_DOTFILE,
DEFAULT_LEDGER,
DEFAULT_LOGGING_CONFIG,
DEFAULT_PROTOCOL,
DEFAULT_REGISTRY_NAME,
)
from aea.configurations.constants import (
DEFAULT_SEARCH_SERVICE_ADDRESS as _DEFAULT_SEARCH_SERVICE_ADDRESS,
)
from aea.configurations.constants import (
DOTTED_PATH_MODULE_ELEMENT_SEPARATOR,
PROTOCOLS,
SIGNING_PROTOCOL,
SKILLS,
STATE_UPDATE_PROTOCOL,
_FETCHAI_IDENTIFIER,
)
from aea.configurations.data_types import PackageIdPrefix
from aea.configurations.loader import ConfigLoader, load_component_configuration
from aea.configurations.manager import (
AgentConfigManager,
find_component_directory_from_component_id,
)
from aea.configurations.pypi import (
is_satisfiable,
merge_dependencies,
merge_dependencies_list,
)
from aea.configurations.validation import ExtraPropertiesError
from aea.crypto.helpers import private_key_verify
from aea.crypto.ledger_apis import DEFAULT_CURRENCY_DENOMINATIONS
from aea.crypto.wallet import Wallet
from aea.decision_maker.base import DecisionMakerHandler
from aea.error_handler.base import AbstractErrorHandler
from aea.exceptions import (
AEAException,
AEAValidationError,
AEAWalletNoAddressException,
enforce,
)
from aea.helpers.base import (
SimpleId,
find_topological_order,
load_env_file,
load_module,
)
from aea.helpers.exception_policy import ExceptionPolicyEnum
from aea.helpers.install_dependency import install_dependency
from aea.helpers.io import open_file
from aea.helpers.logging import AgentLoggerAdapter, WithLogger, get_logger
from aea.identity.base import Identity
from aea.registries.resources import Resources
_default_logger = logging.getLogger(__name__)
class _DependenciesManager:
"""Class to manage dependencies of agent packages."""
def __init__(self) -> None:
"""Initialize the dependency graph."""
# adjacency list of the dependency DAG
# an arc means "depends on"
self._dependencies = {} # type: Dict[ComponentId, ComponentConfiguration]
self._all_dependencies_by_type = (
{}
) # type: Dict[ComponentType, Dict[ComponentId, ComponentConfiguration]]
self._prefix_to_components = {} # type: Dict[PackageIdPrefix, Set[ComponentId]]
self._inverse_dependency_graph = {} # type: Dict[ComponentId, Set[ComponentId]]
self.agent_pypi_dependencies: Dependencies = {}
@property
def all_dependencies(self) -> Set[ComponentId]:
"""Get all dependencies."""
result = set(self._dependencies.keys())
return result
@property
def dependencies_highest_version(self) -> Set[ComponentId]:
"""Get the dependencies with highest version."""
return {max(ids) for _, ids in self._prefix_to_components.items()}
def get_components_by_type(
self, component_type: ComponentType
) -> Dict[ComponentId, ComponentConfiguration]:
"""Get the components by type."""
return self._all_dependencies_by_type.get(component_type, {})
@property
def protocols(self) -> Dict[ComponentId, ProtocolConfig]:
"""Get the protocols."""
return cast(
Dict[ComponentId, ProtocolConfig],
self._all_dependencies_by_type.get(ComponentType.PROTOCOL, {}),
)
@property
def connections(self) -> Dict[ComponentId, ConnectionConfig]:
"""Get the connections."""
return cast(
Dict[ComponentId, ConnectionConfig],
self._all_dependencies_by_type.get(ComponentType.CONNECTION, {}),
)
@property
def skills(self) -> Dict[ComponentId, SkillConfig]:
"""Get the skills."""
return cast(
Dict[ComponentId, SkillConfig],
self._all_dependencies_by_type.get(ComponentType.SKILL, {}),
)
@property
def contracts(self) -> Dict[ComponentId, ContractConfig]:
"""Get the contracts."""
return cast(
Dict[ComponentId, ContractConfig],
self._all_dependencies_by_type.get(ComponentType.CONTRACT, {}),
)
def add_component(self, configuration: ComponentConfiguration) -> None:
"""
Add a component to the dependency manager.
:param configuration: the component configuration to add.
"""
# add to main index
self._dependencies[configuration.component_id] = configuration
# add to index by type
self._all_dependencies_by_type.setdefault(configuration.component_type, {})[
configuration.component_id
] = configuration
# add to prefix to id index
self._prefix_to_components.setdefault(
configuration.component_id.component_prefix, set()
).add(configuration.component_id)
# populate inverse dependency
for dependency in configuration.package_dependencies:
self._inverse_dependency_graph.setdefault(dependency, set()).add(
configuration.component_id
)
def remove_component(self, component_id: ComponentId) -> None:
"""
Remove a component.
:param component_id: the component id
:raises ValueError: if some component depends on this package.
"""
if component_id not in self.all_dependencies:
raise ValueError(
"Component {} of type {} not present.".format(
component_id.public_id, component_id.component_type
)
)
dependencies = self._inverse_dependency_graph.get(component_id, set())
if len(dependencies) != 0:
raise ValueError(
"Cannot remove component {} of type {}. Other components depends on it: {}".format(
component_id.public_id, component_id.component_type, dependencies
)
)
# remove from the index of all dependencies
component = self._dependencies.pop(component_id)
# remove from the index of all dependencies grouped by type
self._all_dependencies_by_type[component_id.component_type].pop(component_id)
if len(self._all_dependencies_by_type[component_id.component_type]) == 0:
self._all_dependencies_by_type.pop(component_id.component_type)
# remove from prefix to id index
self._prefix_to_components.get(component_id.component_prefix, set()).discard(
component_id
)
# update inverse dependency graph
for dependency in component.package_dependencies:
self._inverse_dependency_graph[dependency].discard(component_id)
@property
def pypi_dependencies(self) -> Dependencies:
"""
Get all the PyPI dependencies.
We currently consider only dependency that have the
default PyPI index url and that specify only the
version field.
:return: the merged PyPI dependencies
"""
all_pypi_dependencies = merge_dependencies_list(
self.agent_pypi_dependencies,
*[
configuration.pypi_dependencies
for configuration in self._dependencies.values()
],
)
return all_pypi_dependencies
def install_dependencies(self) -> None:
"""Install extra dependencies for components."""
for name, d in self.pypi_dependencies.items():
install_dependency(name, d, _default_logger)
class AEABuilder(WithLogger): # pylint: disable=too-many-public-methods
"""
This class helps to build an AEA.
It follows the fluent interface. Every method of the builder
returns the instance of the builder itself.
Note: the method 'build()' is guaranteed of being
re-entrant with respect to the 'add_component(path)'
method. That is, you can invoke the building method
many times against the same builder instance, and the
returned agent instance will not share the
components with other agents, e.g.:
builder = AEABuilder()
builder.add_component(...)
...
# first call
my_aea_1 = builder.build()
# following agents will have different components.
my_aea_2 = builder.build() # all good
However, if you manually loaded some of the components and added
them with the method 'add_component_instance()', then calling build
more than one time is prevented:
builder = AEABuilder()
builder.add_component_instance(...)
... # other initialization code
# first call
my_aea_1 = builder.build()
# second call to `build()` would raise a Value Error.
# call reset
builder.reset()
# re-add the component and private keys
builder.add_component_instance(...)
... # add private keys
# second call
my_aea_2 = builder.builder()
"""
DEFAULT_LEDGER = DEFAULT_LEDGER
DEFAULT_CURRENCY_DENOMINATIONS = DEFAULT_CURRENCY_DENOMINATIONS
DEFAULT_AGENT_ACT_PERIOD = 0.05 # seconds
DEFAULT_EXECUTION_TIMEOUT = 0
DEFAULT_MAX_REACTIONS = 20
DEFAULT_SKILL_EXCEPTION_POLICY = ExceptionPolicyEnum.propagate
DEFAULT_CONNECTION_EXCEPTION_POLICY = ExceptionPolicyEnum.propagate
DEFAULT_LOOP_MODE = "async"
DEFAULT_RUNTIME_MODE = "threaded"
DEFAULT_TASKMANAGER_MODE = "threaded"
DEFAULT_SEARCH_SERVICE_ADDRESS = _DEFAULT_SEARCH_SERVICE_ADDRESS
AEA_CLASS = AEA
BUILD_TIMEOUT = 120
loader = ConfigLoader.from_configuration_type(PackageType.AGENT)
# pylint: disable=attribute-defined-outside-init
def __init__(
self,
with_default_packages: bool = True,
registry_dir: str = DEFAULT_REGISTRY_NAME,
build_dir_root: Optional[str] = None,
) -> None:
"""
Initialize the builder.
:param with_default_packages: add the default packages.
:param registry_dir: the registry directory.
:param build_dir_root: the root of the build directory.
"""
WithLogger.__init__(self, logger=_default_logger)
self.registry_dir = os.path.join(os.getcwd(), registry_dir)
self._with_default_packages = with_default_packages
self.build_dir_root = build_dir_root
self._reset(is_full_reset=True)
def reset(self, is_full_reset: bool = False) -> None:
"""
Reset the builder.
A full reset causes a reset of all data on the builder. A partial reset
only resets:
- name,
- private keys, and
- component instances
:param is_full_reset: whether it is a full reset or not.
"""
self._reset(is_full_reset)
def _reset(self, is_full_reset: bool = False) -> None:
"""
Reset the builder (private usage).
:param is_full_reset: whether it is a full reset or not.
"""
self._name: Optional[str] = None
self._private_key_paths: Dict[str, Optional[str]] = {}
self._connection_private_key_paths: Dict[str, Optional[str]] = {}
if not is_full_reset:
self._remove_components_from_dependency_manager()
self._component_instances: Dict[
ComponentType, Dict[ComponentConfiguration, Component]
] = {
ComponentType.CONNECTION: {},
ComponentType.CONTRACT: {},
ComponentType.PROTOCOL: {},
ComponentType.SKILL: {},
}
self._custom_component_configurations: Dict[ComponentId, Dict] = {}
self._to_reset: bool = False
self._build_called: bool = False
if not is_full_reset:
return
self._default_ledger: Optional[str] = None
self._required_ledgers: Optional[List[str]] = None
self._build_entrypoint: Optional[str] = None
self._currency_denominations: Dict[str, str] = {}
self._default_connection: Optional[PublicId] = None
self._context_namespace: Dict[str, Any] = {}
self._period: Optional[float] = None
self._execution_timeout: Optional[float] = None
self._max_reactions: Optional[int] = None
self._decision_maker_handler_class: Optional[Type[DecisionMakerHandler]] = None
self._decision_maker_handler_dotted_path: Optional[str] = None
self._decision_maker_handler_file_path: Optional[str] = None
self._decision_maker_handler_config: Optional[Dict[str, Any]] = None
self._error_handler_class: Optional[Type[AbstractErrorHandler]] = None
self._error_handler_dotted_path: Optional[str] = None
self._error_handler_file_path: Optional[str] = None
self._error_handler_config: Optional[Dict[str, Any]] = None
self._skill_exception_policy: Optional[ExceptionPolicyEnum] = None
self._connection_exception_policy: Optional[ExceptionPolicyEnum] = None
self._default_routing: Dict[PublicId, PublicId] = {}
self._loop_mode: Optional[str] = None
self._runtime_mode: Optional[str] = None
self._task_manager_mode: Optional[str] = None
self._search_service_address: Optional[str] = None
self._storage_uri: Optional[str] = None
self._data_dir: Optional[str] = None
self._logging_config: Dict = DEFAULT_LOGGING_CONFIG
self._package_dependency_manager = _DependenciesManager()
if self._with_default_packages:
self._add_default_packages()
def _remove_components_from_dependency_manager(self) -> None:
"""Remove components added via 'add_component' from the dependency manager."""
for (
component_type
) in (
self._component_instances.keys()
): # pylint: disable=consider-using-dict-items
for component_config in self._component_instances[component_type].keys():
self._package_dependency_manager.remove_component(
component_config.component_id
)
def set_period(self, period: Optional[float]) -> "AEABuilder":
"""
Set agent act period.
:param period: period in seconds
:return: self
"""
self._period = period
return self
def set_execution_timeout(self, execution_timeout: Optional[float]) -> "AEABuilder":
"""
Set agent execution timeout in seconds.
:param execution_timeout: execution_timeout in seconds
:return: self
"""
self._execution_timeout = execution_timeout
return self
def set_max_reactions(self, max_reactions: Optional[int]) -> "AEABuilder":
"""
Set agent max reaction in one react.
:param max_reactions: int
:return: self
"""
self._max_reactions = max_reactions
return self
def set_decision_maker_handler_details(
self,
decision_maker_handler_dotted_path: str,
file_path: str,
config: Dict[str, Any],
) -> "AEABuilder":
"""
Set error handler details.
:param decision_maker_handler_dotted_path: the dotted path to the decision maker handler
:param file_path: the file path to the file which contains the decision maker handler
:param config: the configuration passed to the decision maker handler on instantiation
:return: self
"""
self._decision_maker_handler_dotted_path = decision_maker_handler_dotted_path
self._decision_maker_handler_file_path = file_path
self._decision_maker_handler_config = config
return self
def _load_decision_maker_handler_class(
self,
) -> Optional[Type[DecisionMakerHandler]]:
"""
Load decision maker handler class.
:return: decision maker handler class
"""
_class = self._get_decision_maker_handler_class()
if _class is not None and self._decision_maker_handler_dotted_path is not None:
raise ValueError( # pragma: nocover
"DecisionMakerHandler class and dotted path set: can only set one!"
)
if _class is not None:
return _class # pragma: nocover
if self._decision_maker_handler_dotted_path is None:
return None
dotted_path, class_name = self._decision_maker_handler_dotted_path.split(
DOTTED_PATH_MODULE_ELEMENT_SEPARATOR
)
try:
if self._decision_maker_handler_file_path is None:
module = import_module(dotted_path)
else:
module = load_module(
dotted_path, Path(self._decision_maker_handler_file_path)
)
except Exception as e: # pragma: nocover
self.logger.error(
"Could not locate decision maker handler for dotted path '{}' and file path '{}'. Error message: {}".format(
dotted_path, self._decision_maker_handler_file_path, e
)
)
raise # log and re-raise because we should not build an agent from an invalid configuration
try:
_class = getattr(module, class_name)
except Exception as e: # pragma: nocover
self.logger.error(
"Could not locate decision maker handler for dotted path '{}', class name '{}' and file path '{}'. Error message: {}".format(
dotted_path, class_name, self._decision_maker_handler_file_path, e
)
)
raise # log and re-raise because we should not build an agent from an invalid configuration
return _class
def _load_error_handler_class(
self,
) -> Optional[Type[AbstractErrorHandler]]:
"""
Load error handler class.
:return: error handler class
"""
_class = self._get_error_handler_class()
if _class is not None and self._error_handler_dotted_path is not None:
raise ValueError( # pragma: nocover
"ErrorHandler class and dotted path set: can only set one!"
)
if _class is not None:
return _class # pragma: nocover
if self._error_handler_dotted_path is None:
return None
dotted_path, class_name = self._error_handler_dotted_path.split(
DOTTED_PATH_MODULE_ELEMENT_SEPARATOR
)
try:
if self._error_handler_file_path is None:
module = import_module(dotted_path)
else:
module = load_module(dotted_path, Path(self._error_handler_file_path))
except Exception as e: # pragma: nocover
self.logger.error(
"Could not locate error handler for dotted path '{}' and file path '{}'. Error message: {}".format(
dotted_path, self._error_handler_file_path, e
)
)
raise # log and re-raise because we should not build an agent from an invalid configuration
try:
_class = getattr(module, class_name)
except Exception as e: # pragma: nocover
self.logger.error(
"Could not locate error handler for dotted path '{}', class name '{}' and file path '{}'. Error message: {}".format(
dotted_path, class_name, self._error_handler_file_path, e
)
)
raise # log and re-raise because we should not build an agent from an invalid configuration
return _class
def set_error_handler_details(
self, error_handler_dotted_path: str, file_path: str, config: Dict[str, Any]
) -> "AEABuilder":
"""
Set error handler details.
:param error_handler_dotted_path: the dotted path to the error handler
:param file_path: the file path to the file which contains the error handler
:param config: the configuration passed to the error handler on instantiation
:return: self
"""
self._error_handler_dotted_path = error_handler_dotted_path
self._error_handler_file_path = file_path
self._error_handler_config = config
return self
def set_skill_exception_policy(
self, skill_exception_policy: Optional[ExceptionPolicyEnum]
) -> "AEABuilder": # pragma: nocover
"""
Set skill exception policy.
:param skill_exception_policy: the policy
:return: self
"""
self._skill_exception_policy = skill_exception_policy
return self
def set_connection_exception_policy(
self, connection_exception_policy: Optional[ExceptionPolicyEnum]
) -> "AEABuilder": # pragma: nocover
"""
Set connection exception policy.
:param connection_exception_policy: the policy
:return: self
"""
self._connection_exception_policy = connection_exception_policy
return self
def set_default_routing(
self, default_routing: Dict[PublicId, PublicId]
) -> "AEABuilder":
"""
Set default routing.
This is a map from public ids (protocols) to public ids (connections).
:param default_routing: the default routing mapping
:return: self
"""
for protocol_id, connection_id in default_routing.items():
if (
ComponentId("protocol", protocol_id)
not in self._package_dependency_manager.protocols
):
raise ValueError(
f"Protocol {protocol_id} specified in `default_routing` is not a project dependency!"
)
if (
ComponentId("connection", connection_id)
not in self._package_dependency_manager.connections
):
raise ValueError(
f"Connection {connection_id} specified in `default_routing` is not a project dependency!"
)
self._default_routing = default_routing # pragma: nocover
return self
def set_loop_mode(
self, loop_mode: Optional[str]
) -> "AEABuilder": # pragma: nocover
"""
Set the loop mode.
:param loop_mode: the agent loop mode
:return: self
"""
self._loop_mode = loop_mode
return self
def set_runtime_mode(
self, runtime_mode: Optional[str]
) -> "AEABuilder": # pragma: nocover
"""
Set the runtime mode.
:param runtime_mode: the agent runtime mode
:return: self
"""
self._runtime_mode = runtime_mode
return self
def set_task_manager_mode(
self, task_manager_mode: Optional[str]
) -> "AEABuilder": # pragma: nocover
"""
Set the task_manager_mode.
:param task_manager_mode: the agent task_manager_mode
:return: self
"""
self._task_manager_mode = task_manager_mode
return self
def set_storage_uri(
self, storage_uri: Optional[str]
) -> "AEABuilder": # pragma: nocover
"""
Set the storage uri.
:param storage_uri: storage uri
:return: self
"""
self._storage_uri = storage_uri
return self
def set_data_dir(self, data_dir: Optional[str]) -> "AEABuilder": # pragma: nocover
"""
Set the data directory.
:param data_dir: path to directory where to store data.
:return: self
"""
self._data_dir = data_dir
return self
def set_logging_config(
self, logging_config: Dict
) -> "AEABuilder": # pragma: nocover
"""
Set the logging configurations.
The dictionary must satisfy the following schema:
https://docs.python.org/3/library/logging.config.html#logging-config-dictschema
:param logging_config: the logging configurations.
:return: self
"""
self._logging_config = logging_config
return self
def set_search_service_address(
self, search_service_address: str
) -> "AEABuilder": # pragma: nocover
"""
Set the search service address.
:param search_service_address: the search service address
:return: self
"""
self._search_service_address = search_service_address
return self
def _add_default_packages(self) -> None:
"""Add default packages."""
# add default protocol
default_protocol = PublicId.from_str(DEFAULT_PROTOCOL)
self.add_protocol(
Path(
self.registry_dir, _FETCHAI_IDENTIFIER, PROTOCOLS, default_protocol.name
)
)
# add signing protocol
signing_protocol = PublicId.from_str(SIGNING_PROTOCOL)
self.add_protocol(
Path(
self.registry_dir, _FETCHAI_IDENTIFIER, PROTOCOLS, signing_protocol.name
)
)
# add state update protocol
state_update_protocol = PublicId.from_str(STATE_UPDATE_PROTOCOL)
self.add_protocol(
Path(
self.registry_dir,
_FETCHAI_IDENTIFIER,
PROTOCOLS,
state_update_protocol.name,
)
)
def _check_can_remove(self, component_id: ComponentId) -> None:
"""
Check if a component can be removed.
:param component_id: the component id.
:raises ValueError: if the component is already present.
"""
if component_id not in self._package_dependency_manager.all_dependencies:
raise ValueError(
"Component {} of type {} not present.".format(
component_id.public_id, component_id.component_type
)
)
def _check_can_add(self, configuration: ComponentConfiguration) -> None:
"""
Check if the component can be added, given its configuration.
:param configuration: the configuration of the component.
"""
self._check_configuration_not_already_added(configuration)
self._check_package_dependencies(configuration)
self._check_pypi_dependencies(configuration)
def set_name(self, name: str) -> "AEABuilder": # pragma: nocover
"""
Set the name of the agent.
:param name: the name of the agent.
:return: the AEABuilder
"""
self._name = name
return self
def set_default_connection(
self, public_id: Optional[PublicId] = None
) -> "AEABuilder": # pragma: nocover
"""
Set the default connection.
:param public_id: the public id of the default connection package.
:return: the AEABuilder
"""
if (
public_id
and ComponentId("connection", public_id)
not in self._package_dependency_manager.connections
):
raise ValueError(
f"Connection {public_id} specified as `default_connection` is not a project dependency!"
)
self._default_connection = public_id
return self
def add_private_key(
self,
identifier: str,
private_key_path: Optional[PathLike] = None,
is_connection: bool = False,
) -> "AEABuilder":
"""
Add a private key path.
:param identifier: the identifier for that private key path.
:param private_key_path: an (optional) path to the private key file.
If None, the key will be created at build time.
:param is_connection: if the pair is for the connection cryptos
:return: the AEABuilder
"""
if is_connection:
self._connection_private_key_paths[identifier] = (
str(private_key_path) if private_key_path is not None else None
)
else:
self._private_key_paths[identifier] = (
str(private_key_path) if private_key_path is not None else None
)
if private_key_path is not None:
self._to_reset = True
return self
def remove_private_key(
self, identifier: str, is_connection: bool = False
) -> "AEABuilder":
"""
Remove a private key path by identifier, if present.
:param identifier: the identifier of the private key.
:param is_connection: if the pair is for the connection cryptos
:return: the AEABuilder
"""
if is_connection:
self._connection_private_key_paths.pop(identifier, None)
else:
self._private_key_paths.pop(identifier, None)
return self
@property
def private_key_paths(self) -> Dict[str, Optional[str]]:
"""Get the private key paths."""
return self._private_key_paths
@property
def connection_private_key_paths(self) -> Dict[str, Optional[str]]:
"""Get the connection private key paths."""
return self._connection_private_key_paths
def set_default_ledger(
self, identifier: Optional[str]
) -> "AEABuilder": # pragma: nocover
"""
Set a default ledger API to use.
:param identifier: the identifier of the ledger api
:return: the AEABuilder
"""
self._default_ledger = (
str(SimpleId(identifier)) if identifier is not None else None
)
return self
def set_required_ledgers(
self, required_ledgers: Optional[List[str]]
) -> "AEABuilder": # pragma: nocover
"""
Set the required ledger ident
gitextract_i5wtg620/
├── .dockerignore
├── .firebaserc
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ └── feature-request.yml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ └── release.md
│ ├── dependabot.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── codeql-analysis.yml
│ ├── docs_pr_preview.yml
│ ├── publish.yaml
│ ├── upload_docker_images.yaml
│ └── workflow.yml
├── .gitignore
├── .spelling
├── AUTHORS.md
├── CITATION.cff
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DEVELOPING.md
├── HISTORY.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── SECURITY.md
├── aea/
│ ├── __init__.py
│ ├── __version__.py
│ ├── abstract_agent.py
│ ├── aea.py
│ ├── aea_builder.py
│ ├── agent.py
│ ├── agent_loop.py
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── add.py
│ │ ├── add_key.py
│ │ ├── build.py
│ │ ├── config.py
│ │ ├── core.py
│ │ ├── create.py
│ │ ├── delete.py
│ │ ├── eject.py
│ │ ├── fetch.py
│ │ ├── fingerprint.py
│ │ ├── freeze.py
│ │ ├── generate.py
│ │ ├── generate_key.py
│ │ ├── generate_wealth.py
│ │ ├── get_address.py
│ │ ├── get_multiaddress.py
│ │ ├── get_public_key.py
│ │ ├── get_wealth.py
│ │ ├── init.py
│ │ ├── install.py
│ │ ├── interact.py
│ │ ├── issue_certificates.py
│ │ ├── launch.py
│ │ ├── list.py
│ │ ├── local_registry_sync.py
│ │ ├── login.py
│ │ ├── logout.py
│ │ ├── plugin.py
│ │ ├── publish.py
│ │ ├── push.py
│ │ ├── register.py
│ │ ├── registry/
│ │ │ ├── __init__.py
│ │ │ ├── add.py
│ │ │ ├── fetch.py
│ │ │ ├── login.py
│ │ │ ├── logout.py
│ │ │ ├── publish.py
│ │ │ ├── push.py
│ │ │ ├── registration.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── remove.py
│ │ ├── remove_key.py
│ │ ├── reset_password.py
│ │ ├── run.py
│ │ ├── scaffold.py
│ │ ├── search.py
│ │ ├── transfer.py
│ │ ├── upgrade.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── click_utils.py
│ │ ├── config.py
│ │ ├── constants.py
│ │ ├── context.py
│ │ ├── decorators.py
│ │ ├── exceptions.py
│ │ ├── formatting.py
│ │ ├── generic.py
│ │ ├── loggers.py
│ │ └── package_utils.py
│ ├── common.py
│ ├── components/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── loader.py
│ │ └── utils.py
│ ├── configurations/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── constants.py
│ │ ├── data_types.py
│ │ ├── loader.py
│ │ ├── manager.py
│ │ ├── pypi.py
│ │ ├── schemas/
│ │ │ ├── aea-config_schema.json
│ │ │ ├── configurable_parts/
│ │ │ │ ├── base-custom_config.json
│ │ │ │ ├── connection-custom_config.json
│ │ │ │ ├── contract-custom_config.json
│ │ │ │ ├── protocol-custom_config.json
│ │ │ │ └── skill-custom_config.json
│ │ │ ├── connection-config_schema.json
│ │ │ ├── contract-config_schema.json
│ │ │ ├── definitions.json
│ │ │ ├── protocol-config_schema.json
│ │ │ ├── protocol-specification_schema.json
│ │ │ └── skill-config_schema.json
│ │ ├── utils.py
│ │ └── validation.py
│ ├── connections/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── connection.yaml
│ │ └── readme.md
│ ├── context/
│ │ ├── __init__.py
│ │ └── base.py
│ ├── contracts/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── contract.py
│ │ └── contract.yaml
│ ├── crypto/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── helpers.py
│ │ ├── ledger_apis.py
│ │ ├── plugin.py
│ │ ├── registries/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ └── wallet.py
│ ├── decision_maker/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── default.py
│ │ ├── gop.py
│ │ └── scaffold.py
│ ├── error_handler/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── default.py
│ │ └── scaffold.py
│ ├── exceptions.py
│ ├── helpers/
│ │ ├── __init__.py
│ │ ├── acn/
│ │ │ ├── __init__.py
│ │ │ ├── agent_record.py
│ │ │ └── uri.py
│ │ ├── async_friendly_queue.py
│ │ ├── async_utils.py
│ │ ├── base.py
│ │ ├── constants.py
│ │ ├── env_vars.py
│ │ ├── exception_policy.py
│ │ ├── exec_timeout.py
│ │ ├── file_io.py
│ │ ├── file_lock.py
│ │ ├── http_requests.py
│ │ ├── install_dependency.py
│ │ ├── io.py
│ │ ├── ipfs/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── pb/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── merkledag.proto
│ │ │ │ ├── merkledag_pb2.py
│ │ │ │ ├── unixfs.proto
│ │ │ │ └── unixfs_pb2.py
│ │ │ └── utils.py
│ │ ├── logging.py
│ │ ├── multiaddr/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── crypto.proto
│ │ │ └── crypto_pb2.py
│ │ ├── multiple_executor.py
│ │ ├── pipe.py
│ │ ├── preference_representations/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── profiling.py
│ │ ├── search/
│ │ │ ├── __init__.py
│ │ │ ├── generic.py
│ │ │ ├── models.proto
│ │ │ ├── models.py
│ │ │ └── models_pb2.py
│ │ ├── serializers.py
│ │ ├── storage/
│ │ │ ├── __init__.py
│ │ │ ├── backends/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── binaries/
│ │ │ │ │ └── README.txt
│ │ │ │ └── sqlite.py
│ │ │ └── generic_storage.py
│ │ ├── sym_link.py
│ │ ├── transaction/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── win32.py
│ │ └── yaml_utils.py
│ ├── identity/
│ │ ├── __init__.py
│ │ └── base.py
│ ├── launcher.py
│ ├── mail/
│ │ ├── __init__.py
│ │ ├── base.proto
│ │ ├── base.py
│ │ └── base_pb2.py
│ ├── manager/
│ │ ├── __init__.py
│ │ ├── manager.py
│ │ ├── project.py
│ │ └── utils.py
│ ├── multiplexer.py
│ ├── protocols/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── dialogue/
│ │ │ ├── __init__.py
│ │ │ └── base.py
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── common.py
│ │ │ ├── extract_specification.py
│ │ │ ├── isort.cfg
│ │ │ └── validate.py
│ │ └── scaffold/
│ │ ├── __init__.py
│ │ ├── message.py
│ │ ├── protocol.yaml
│ │ └── serialization.py
│ ├── py.typed
│ ├── registries/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── filter.py
│ │ └── resources.py
│ ├── runner.py
│ ├── runtime.py
│ ├── skills/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── behaviours.py
│ │ ├── scaffold/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── handlers.py
│ │ │ ├── my_model.py
│ │ │ └── skill.yaml
│ │ └── tasks.py
│ └── test_tools/
│ ├── __init__.py
│ ├── click_testing.py
│ ├── constants.py
│ ├── exceptions.py
│ ├── generic.py
│ ├── test_cases.py
│ ├── test_contract.py
│ └── test_skill.py
├── benchmark/
│ ├── Dockerfile
│ ├── README.md
│ ├── __init__.py
│ ├── benchmark-deployment.yaml
│ ├── cases/
│ │ ├── __init__.py
│ │ ├── cpu_burn.py
│ │ ├── helpers/
│ │ │ ├── __init__.py
│ │ │ └── dummy_handler.py
│ │ ├── react_multi_agents_fake_connection.py
│ │ ├── react_speed_in_loop.py
│ │ └── react_speed_multi_agents.py
│ ├── checks/
│ │ ├── __init__.py
│ │ ├── check_agent_construction_time.py
│ │ ├── check_decision_maker.py
│ │ ├── check_dialogues_memory_usage.py
│ │ ├── check_mem_usage.py
│ │ ├── check_messages_memory_usage.py
│ │ ├── check_multiagent.py
│ │ ├── check_multiagent_http_dialogues.py
│ │ ├── check_proactive.py
│ │ ├── check_reactive.py
│ │ ├── data/
│ │ │ ├── 2020.09.05_17-49.txt
│ │ │ ├── 2020.10.27_mem_usage_report.txt
│ │ │ ├── 2020.10.30 optimized messages.txt
│ │ │ ├── 2020.12.10_optimized_messages.txt
│ │ │ ├── 2021.03.09_test_run.txt
│ │ │ └── 2021.04.01_v1_benchmark.txt
│ │ ├── run_benchmark.sh
│ │ ├── run_benchmark_messages_mem.sh
│ │ └── utils.py
│ ├── framework/
│ │ ├── __init__.py
│ │ ├── aea_test_wrapper.py
│ │ ├── benchmark.py
│ │ ├── cli.py
│ │ ├── executor.py
│ │ ├── fake_connection.py
│ │ ├── func_details.py
│ │ └── report_printer.py
│ ├── run_from_branch.sh
│ └── run_mem_check_in_cloud.sh
├── codecov.yml
├── deploy-image/
│ ├── .aea/
│ │ └── cli_config.yaml
│ ├── Dockerfile
│ ├── README.md
│ ├── build.sh
│ ├── entrypoint.sh
│ └── packages/
│ └── __init__.py
├── develop-image/
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-env.sh
│ ├── k8s/
│ │ └── deployment.yaml
│ ├── scripts/
│ │ ├── docker-build-img.sh
│ │ └── docker-publish-img.sh
│ └── skaffold.yaml
├── docs/
│ ├── 12-factor.md
│ ├── Pipfile
│ ├── acn-internals.md
│ ├── acn.md
│ ├── aea-vs-mvc.md
│ ├── aeas.md
│ ├── agent-oriented-development.md
│ ├── agent-vs-aea.md
│ ├── aggregation-demo.md
│ ├── api/
│ │ ├── abstract_agent.md
│ │ ├── aea.md
│ │ ├── aea_builder.md
│ │ ├── agent.md
│ │ ├── agent_loop.md
│ │ ├── common.md
│ │ ├── components/
│ │ │ ├── base.md
│ │ │ ├── loader.md
│ │ │ └── utils.md
│ │ ├── configurations/
│ │ │ ├── base.md
│ │ │ ├── constants.md
│ │ │ ├── data_types.md
│ │ │ ├── loader.md
│ │ │ ├── manager.md
│ │ │ ├── pypi.md
│ │ │ ├── utils.md
│ │ │ └── validation.md
│ │ ├── connections/
│ │ │ └── base.md
│ │ ├── context/
│ │ │ └── base.md
│ │ ├── contracts/
│ │ │ └── base.md
│ │ ├── crypto/
│ │ │ ├── base.md
│ │ │ ├── helpers.md
│ │ │ ├── ledger_apis.md
│ │ │ ├── plugin.md
│ │ │ ├── registries/
│ │ │ │ └── base.md
│ │ │ └── wallet.md
│ │ ├── decision_maker/
│ │ │ ├── base.md
│ │ │ ├── default.md
│ │ │ └── gop.md
│ │ ├── error_handler/
│ │ │ ├── base.md
│ │ │ └── default.md
│ │ ├── exceptions.md
│ │ ├── helpers/
│ │ │ ├── acn/
│ │ │ │ ├── agent_record.md
│ │ │ │ └── uri.md
│ │ │ ├── async_friendly_queue.md
│ │ │ ├── async_utils.md
│ │ │ ├── base.md
│ │ │ ├── constants.md
│ │ │ ├── env_vars.md
│ │ │ ├── exception_policy.md
│ │ │ ├── exec_timeout.md
│ │ │ ├── file_io.md
│ │ │ ├── file_lock.md
│ │ │ ├── http_requests.md
│ │ │ ├── install_dependency.md
│ │ │ ├── io.md
│ │ │ ├── ipfs/
│ │ │ │ ├── base.md
│ │ │ │ └── utils.md
│ │ │ ├── logging.md
│ │ │ ├── multiaddr/
│ │ │ │ └── base.md
│ │ │ ├── multiple_executor.md
│ │ │ ├── pipe.md
│ │ │ ├── preference_representations/
│ │ │ │ └── base.md
│ │ │ ├── profiling.md
│ │ │ ├── search/
│ │ │ │ ├── generic.md
│ │ │ │ └── models.md
│ │ │ ├── serializers.md
│ │ │ ├── storage/
│ │ │ │ ├── backends/
│ │ │ │ │ ├── base.md
│ │ │ │ │ └── sqlite.md
│ │ │ │ └── generic_storage.md
│ │ │ ├── sym_link.md
│ │ │ ├── transaction/
│ │ │ │ └── base.md
│ │ │ ├── win32.md
│ │ │ └── yaml_utils.md
│ │ ├── identity/
│ │ │ └── base.md
│ │ ├── launcher.md
│ │ ├── mail/
│ │ │ └── base.md
│ │ ├── manager/
│ │ │ ├── manager.md
│ │ │ ├── project.md
│ │ │ └── utils.md
│ │ ├── multiplexer.md
│ │ ├── plugins/
│ │ │ ├── aea_cli_ipfs/
│ │ │ │ ├── core.md
│ │ │ │ └── ipfs_utils.md
│ │ │ ├── aea_ledger_cosmos/
│ │ │ │ └── cosmos.md
│ │ │ ├── aea_ledger_ethereum/
│ │ │ │ └── ethereum.md
│ │ │ └── aea_ledger_fetchai/
│ │ │ ├── _cosmos.md
│ │ │ └── fetchai.md
│ │ ├── protocols/
│ │ │ ├── base.md
│ │ │ ├── default/
│ │ │ │ ├── custom_types.md
│ │ │ │ ├── dialogues.md
│ │ │ │ ├── message.md
│ │ │ │ └── serialization.md
│ │ │ ├── dialogue/
│ │ │ │ └── base.md
│ │ │ ├── generator/
│ │ │ │ ├── base.md
│ │ │ │ ├── common.md
│ │ │ │ ├── extract_specification.md
│ │ │ │ └── validate.md
│ │ │ ├── signing/
│ │ │ │ ├── custom_types.md
│ │ │ │ ├── dialogues.md
│ │ │ │ ├── message.md
│ │ │ │ └── serialization.md
│ │ │ └── state_update/
│ │ │ ├── dialogues.md
│ │ │ ├── message.md
│ │ │ └── serialization.md
│ │ ├── registries/
│ │ │ ├── base.md
│ │ │ ├── filter.md
│ │ │ └── resources.md
│ │ ├── runner.md
│ │ ├── runtime.md
│ │ ├── skills/
│ │ │ ├── base.md
│ │ │ ├── behaviours.md
│ │ │ └── tasks.md
│ │ └── test_tools/
│ │ ├── constants.md
│ │ ├── exceptions.md
│ │ ├── generic.md
│ │ ├── test_cases.md
│ │ ├── test_contract.md
│ │ └── test_skill.md
│ ├── application.md
│ ├── aries-cloud-agent-demo.md
│ ├── build-aea-programmatically.md
│ ├── build-aea-step-by-step.md
│ ├── car-park-skills.md
│ ├── cli-commands.md
│ ├── cli-vs-programmatic-aeas.md
│ ├── config.md
│ ├── connect-a-frontend.md
│ ├── connection.md
│ ├── contract.md
│ ├── core-components-1.md
│ ├── core-components-2.md
│ ├── core-components.md
│ ├── css/
│ │ ├── admonitions.css
│ │ └── my-styles.css
│ ├── debug.md
│ ├── decision-maker-transaction.md
│ ├── decision-maker.md
│ ├── defining-data-models.md
│ ├── demos.md
│ ├── deployment.md
│ ├── design-principles.md
│ ├── development-setup.md
│ ├── diagram.md
│ ├── ecosystem.md
│ ├── erc1155-skills.md
│ ├── generic-skills-step-by-step.md
│ ├── generic-skills.md
│ ├── generic-storage.md
│ ├── glossary.md
│ ├── gym-example.md
│ ├── gym-skill.md
│ ├── http-connection-and-skill.md
│ ├── identity.md
│ ├── index.md
│ ├── install.md
│ ├── interaction-protocol.md
│ ├── known-limits.md
│ ├── language-agnostic-definition.md
│ ├── ledger-integration.md
│ ├── limits.md
│ ├── logging.md
│ ├── message-routing.md
│ ├── ml-skills.md
│ ├── modes.md
│ ├── multi-agent-manager.md
│ ├── multiplexer-standalone.md
│ ├── oracle-demo.md
│ ├── orm-integration.md
│ ├── p2p-connection.md
│ ├── package-imports.md
│ ├── performance-benchmark.md
│ ├── por.md
│ ├── prometheus.md
│ ├── protocol-generator.md
│ ├── protocol.md
│ ├── query-language.md
│ ├── questions-and-answers.md
│ ├── quickstart.md
│ ├── raspberry-set-up.md
│ ├── runtime-cost.md
│ ├── scaffolding.md
│ ├── security.md
│ ├── setup.md
│ ├── simple-oef-usage.md
│ ├── simple-oef.md
│ ├── skill-guide.md
│ ├── skill-testing.md
│ ├── skill.md
│ ├── standalone-transaction.md
│ ├── step-one.md
│ ├── tac-skills-contract.md
│ ├── tac-skills.md
│ ├── tac.md
│ ├── thermometer-skills.md
│ ├── trust.md
│ ├── upgrading.md
│ ├── wealth.md
│ └── weather-skills.md
├── examples/
│ ├── __init__.py
│ ├── aealite_go/
│ │ ├── README.md
│ │ └── default/
│ │ ├── default.pb.go
│ │ └── default.proto
│ ├── gym_ex/
│ │ ├── README.md
│ │ ├── gyms/
│ │ │ ├── __init__.py
│ │ │ └── env.py
│ │ ├── proxy/
│ │ │ ├── __init__.py
│ │ │ ├── agent.py
│ │ │ └── env.py
│ │ ├── rl/
│ │ │ ├── __init__.py
│ │ │ └── agent.py
│ │ └── train.py
│ ├── http_ex/
│ │ └── petstore.yaml
│ ├── ml_ex/
│ │ └── model.json
│ ├── protocol_specification_ex/
│ │ └── sample.yaml
│ └── tac_deploy/
│ ├── .aea/
│ │ └── cli_config.yaml
│ ├── Dockerfile
│ ├── README.md
│ ├── build.sh
│ ├── entrypoint.sh
│ ├── packages/
│ │ └── __init__.py
│ ├── tac-deployment.yaml
│ └── tac_run.sh
├── firebase.json
├── install_packages.py
├── libs/
│ └── go/
│ ├── aea_end2end/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── fipa_dummy_seller.env
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── pexpect_popen.py
│ │ ├── protocols/
│ │ │ ├── fipa.pb.go
│ │ │ ├── fipa.proto
│ │ │ └── fipa.yaml
│ │ ├── run_buyer.sh
│ │ ├── run_seller.sh
│ │ └── test_fipa_end2end.py
│ ├── aealite/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── agent.go
│ │ ├── agent_test.go
│ │ ├── connections/
│ │ │ ├── acn/
│ │ │ │ ├── acn.go
│ │ │ │ ├── pipe_iface.go
│ │ │ │ └── protocol.go
│ │ │ ├── connections.go
│ │ │ ├── p2pclient.go
│ │ │ ├── p2pclient_test.go
│ │ │ └── tcpsocket.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── helpers/
│ │ │ ├── base.go
│ │ │ └── base_test.go
│ │ ├── protocols/
│ │ │ ├── acn/
│ │ │ │ └── v1_0_0/
│ │ │ │ ├── acn.pb.go
│ │ │ │ ├── acn.proto
│ │ │ │ └── acn.yaml
│ │ │ ├── base.pb.go
│ │ │ ├── base.proto
│ │ │ ├── dialogue.go
│ │ │ ├── dialogue_label.go
│ │ │ ├── dialogue_label_test.go
│ │ │ ├── dialogue_test.go
│ │ │ ├── dialogues.go
│ │ │ ├── message.go
│ │ │ ├── message_test.go
│ │ │ ├── search.pb.go
│ │ │ ├── search.proto
│ │ │ ├── storage.go
│ │ │ ├── storage_test.go
│ │ │ └── versions.go
│ │ ├── test_env_file.env
│ │ └── wallet/
│ │ ├── utils.go
│ │ ├── wallet.go
│ │ └── wallet_test.go
│ └── libp2p_node/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── Makefile
│ ├── README.md
│ ├── acn/
│ │ └── utils.go
│ ├── aea/
│ │ ├── api.go
│ │ ├── envelope.pb.go
│ │ ├── envelope.proto
│ │ ├── pipe.go
│ │ └── utils.go
│ ├── common/
│ │ └── common.go
│ ├── dht/
│ │ ├── common/
│ │ │ └── handlers.go
│ │ ├── dhtclient/
│ │ │ ├── dhtclient.go
│ │ │ ├── dhtclient_test.go
│ │ │ └── options.go
│ │ ├── dhtnode/
│ │ │ ├── dhtnode.go
│ │ │ ├── streams.go
│ │ │ └── utils.go
│ │ ├── dhtpeer/
│ │ │ ├── benchmarks_test.go
│ │ │ ├── dhtpeer.go
│ │ │ ├── dhtpeer_test.go
│ │ │ ├── mailbox.go
│ │ │ ├── notifee.go
│ │ │ ├── options.go
│ │ │ └── utils.go
│ │ ├── dhttests/
│ │ │ └── dhttests.go
│ │ └── monitoring/
│ │ ├── file.go
│ │ ├── prometheus.go
│ │ └── service.go
│ ├── go.mod
│ ├── go.sum
│ ├── libp2p_node.go
│ ├── link
│ ├── mocks/
│ │ ├── mock_host.go
│ │ ├── mock_net.go
│ │ ├── mock_network.go
│ │ └── mock_peerstore.go
│ ├── protocols/
│ │ └── acn/
│ │ └── v1_0_0/
│ │ ├── acn.pb.go
│ │ ├── acn.proto
│ │ └── acn.yaml
│ └── utils/
│ ├── utils.go
│ └── utils_test.go
├── mkdocs.yml
├── packages/
│ ├── __init__.py
│ ├── fetchai/
│ │ ├── __init__.py
│ │ ├── agents/
│ │ │ ├── aries_alice/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── aries_faber/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── car_data_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── car_detector/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_feed/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_oracle/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── coin_price_oracle_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw1/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw3/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── confirmation_aea_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── erc1155_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── erc1155_deployer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── error_test/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── fipa_dummy_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── generic_buyer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── generic_seller/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── gym_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── hello_world/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── latest_block_feed/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── ml_data_provider/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── ml_model_trainer/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── my_first_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── registration_aea_aw1/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_aggregator/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_buyer_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_buyer_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_seller_aw2/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_seller_aw5/
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_service_registration/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── simple_service_search/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_controller/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_controller_contract/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_participant/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── tac_participant_contract/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── thermometer_aea/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── thermometer_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ ├── weather_client/
│ │ │ │ ├── README.md
│ │ │ │ └── aea-config.yaml
│ │ │ └── weather_station/
│ │ │ ├── README.md
│ │ │ └── aea-config.yaml
│ │ ├── connections/
│ │ │ ├── __init__.py
│ │ │ ├── gym/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── http_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── http_server/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── ledger/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── contract_dispatcher.py
│ │ │ │ └── ledger_dispatcher.py
│ │ │ ├── local/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── oef/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ └── object_translator.py
│ │ │ ├── p2p_libp2p/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── check_dependencies.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── consts.py
│ │ │ │ └── libp2p_node/
│ │ │ │ ├── .dockerignore
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── acn/
│ │ │ │ │ └── utils.go
│ │ │ │ ├── aea/
│ │ │ │ │ ├── api.go
│ │ │ │ │ ├── envelope.pb.go
│ │ │ │ │ ├── envelope.proto
│ │ │ │ │ ├── pipe.go
│ │ │ │ │ └── utils.go
│ │ │ │ ├── common/
│ │ │ │ │ └── common.go
│ │ │ │ ├── dht/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── handlers.go
│ │ │ │ │ ├── dhtclient/
│ │ │ │ │ │ ├── dhtclient.go
│ │ │ │ │ │ ├── dhtclient_test.go
│ │ │ │ │ │ └── options.go
│ │ │ │ │ ├── dhtnode/
│ │ │ │ │ │ ├── dhtnode.go
│ │ │ │ │ │ ├── streams.go
│ │ │ │ │ │ └── utils.go
│ │ │ │ │ ├── dhtpeer/
│ │ │ │ │ │ ├── benchmarks_test.go
│ │ │ │ │ │ ├── dhtpeer.go
│ │ │ │ │ │ ├── dhtpeer_test.go
│ │ │ │ │ │ ├── mailbox.go
│ │ │ │ │ │ ├── notifee.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ └── utils.go
│ │ │ │ │ ├── dhttests/
│ │ │ │ │ │ └── dhttests.go
│ │ │ │ │ └── monitoring/
│ │ │ │ │ ├── file.go
│ │ │ │ │ ├── prometheus.go
│ │ │ │ │ └── service.go
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ ├── libp2p_node.go
│ │ │ │ ├── link
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── mock_host.go
│ │ │ │ │ ├── mock_net.go
│ │ │ │ │ ├── mock_network.go
│ │ │ │ │ └── mock_peerstore.go
│ │ │ │ ├── protocols/
│ │ │ │ │ └── acn/
│ │ │ │ │ └── v1_0_0/
│ │ │ │ │ ├── acn.pb.go
│ │ │ │ │ ├── acn.proto
│ │ │ │ │ └── acn.yaml
│ │ │ │ └── utils/
│ │ │ │ ├── utils.go
│ │ │ │ └── utils_test.go
│ │ │ ├── p2p_libp2p_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── p2p_libp2p_mailbox/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── p2p_stub/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── prometheus/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── soef/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── stub/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── connection.py
│ │ │ │ └── connection.yaml
│ │ │ ├── tcp/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── connection.py
│ │ │ │ ├── connection.yaml
│ │ │ │ ├── tcp_client.py
│ │ │ │ └── tcp_server.py
│ │ │ └── webhook/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── connection.py
│ │ │ └── connection.yaml
│ │ ├── contracts/
│ │ │ ├── __init__.py
│ │ │ ├── erc1155/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── Migrations.json
│ │ │ │ │ ├── erc1155.json
│ │ │ │ │ └── erc1155.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ ├── contracts/
│ │ │ │ │ ├── Migrations.sol
│ │ │ │ │ └── erc1155.vy
│ │ │ │ └── migrations/
│ │ │ │ ├── 1_initial_migration.js
│ │ │ │ └── 2_deploy_contracts.js
│ │ │ ├── fet_erc20/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ └── FetERC20Mock.json
│ │ │ │ ├── contract.py
│ │ │ │ └── contract.yaml
│ │ │ ├── oracle/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── FetchOracle.json
│ │ │ │ │ └── oracle.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ └── contracts/
│ │ │ │ └── FetchOracle.sol
│ │ │ ├── oracle_client/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── FetchOracleTestClient.json
│ │ │ │ │ └── oracle_client.wasm
│ │ │ │ ├── contract.py
│ │ │ │ ├── contract.yaml
│ │ │ │ └── contracts/
│ │ │ │ └── FetchOracleTestClient.sol
│ │ │ └── staking_erc20/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── Migrations.json
│ │ │ │ └── staking_erc20.json
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ ├── protocols/
│ │ │ ├── __init__.py
│ │ │ ├── acn/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── acn.proto
│ │ │ │ ├── acn_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── aggregation/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aggregation.proto
│ │ │ │ ├── aggregation_pb2.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── contract_api/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── contract_api.proto
│ │ │ │ ├── contract_api_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── cosm_trade/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cosm_trade.proto
│ │ │ │ ├── cosm_trade_pb2.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── default/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── default.proto
│ │ │ │ ├── default_pb2.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── fipa/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── fipa.proto
│ │ │ │ ├── fipa_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── gym/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── gym.proto
│ │ │ │ ├── gym_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── http/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── http.proto
│ │ │ │ ├── http_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── ledger_api/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── ledger_api.proto
│ │ │ │ ├── ledger_api_pb2.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── ml_trade/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── ml_trade.proto
│ │ │ │ ├── ml_trade_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── oef_search/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── oef_search.proto
│ │ │ │ ├── oef_search_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── prometheus/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── prometheus.proto
│ │ │ │ ├── prometheus_pb2.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ └── serialization.py
│ │ │ ├── register/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── register.proto
│ │ │ │ ├── register_pb2.py
│ │ │ │ └── serialization.py
│ │ │ ├── signing/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── signing.proto
│ │ │ │ └── signing_pb2.py
│ │ │ ├── state_update/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── state_update.proto
│ │ │ │ └── state_update_pb2.py
│ │ │ └── tac/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── custom_types.py
│ │ │ ├── dialogues.py
│ │ │ ├── message.py
│ │ │ ├── protocol.yaml
│ │ │ ├── serialization.py
│ │ │ ├── tac.proto
│ │ │ └── tac_pb2.py
│ │ └── skills/
│ │ ├── __init__.py
│ │ ├── advanced_data_request/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── api_spec.yaml
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── models.py
│ │ │ └── skill.yaml
│ │ ├── aries_alice/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── aries_faber/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── carpark_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── carpark_detection/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── database.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── temp_files_placeholder/
│ │ │ ├── mask.tiff
│ │ │ └── mask_ref.tiff
│ │ ├── confirmation_aw1/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── confirmation_aw2/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── confirmation_aw3/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── registration_db.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── echo/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── erc1155_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── erc1155_deploy/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── error/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── error_test_skill/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ └── skill.yaml
│ │ ├── fetch_block/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── fipa_dummy_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── generic_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── generic_seller/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── gym/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── rl_agent.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── hello_world/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ └── skill.yaml
│ │ ├── http_echo/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── ml_data_provider/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── ml_train/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── tasks.py
│ │ ├── registration_aw1/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_aggregation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_buyer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_data_request/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── simple_oracle/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_oracle_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_seller/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_service_registration/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── simple_service_search/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── tac_control/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── parameters.py
│ │ │ └── skill.yaml
│ │ ├── tac_control_contract/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── parameters.py
│ │ │ └── skill.yaml
│ │ ├── tac_negotiation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── helpers.py
│ │ │ ├── skill.yaml
│ │ │ ├── strategy.py
│ │ │ └── transactions.py
│ │ ├── tac_participation/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── game.py
│ │ │ ├── handlers.py
│ │ │ └── skill.yaml
│ │ ├── task_test_skill/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── thermometer/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── thermometer_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ ├── weather_client/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dialogues.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── strategy.py
│ │ └── weather_station/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── behaviours.py
│ │ ├── db_communication.py
│ │ ├── dialogues.py
│ │ ├── dummy_weather_station_data.py
│ │ ├── handlers.py
│ │ ├── skill.yaml
│ │ └── strategy.py
│ └── hashes.csv
├── plugins/
│ ├── aea-cli-ipfs/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_cli_ipfs/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── ipfs_utils.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ └── test_aea_cli_ipfs.py
│ ├── aea-ledger-cosmos/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_ledger_cosmos/
│ │ │ ├── __init__.py
│ │ │ └── cosmos.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── data/
│ │ │ ├── cosmos_private_key.txt
│ │ │ └── dummy_contract/
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── some.json
│ │ │ │ └── some.wasm
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ └── test_cosmos.py
│ ├── aea-ledger-ethereum/
│ │ ├── LICENSE
│ │ ├── MANIFEST.in
│ │ ├── README.md
│ │ ├── aea_ledger_ethereum/
│ │ │ ├── __init__.py
│ │ │ └── ethereum.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── data/
│ │ │ ├── dummy_contract/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build/
│ │ │ │ │ ├── some.json
│ │ │ │ │ └── some.wasm
│ │ │ │ ├── contract.py
│ │ │ │ └── contract.yaml
│ │ │ └── ethereum_private_key.txt
│ │ ├── docker_image.py
│ │ ├── test_ethereum.py
│ │ └── test_ethereum_contract.py
│ └── aea-ledger-fetchai/
│ ├── LICENSE
│ ├── MANIFEST.in
│ ├── README.md
│ ├── aea_ledger_fetchai/
│ │ ├── __init__.py
│ │ ├── _cosmos.py
│ │ └── fetchai.py
│ ├── pyproject.toml
│ ├── setup.py
│ └── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── data/
│ │ └── dummy_contract/
│ │ ├── __init__.py
│ │ ├── build/
│ │ │ ├── some.json
│ │ │ └── some.wasm
│ │ ├── contract.py
│ │ └── contract.yaml
│ └── test_fetchai.py
├── protolint.yaml
├── pyproject.toml
├── pytest.ini
├── scripts/
│ ├── NOTES.md
│ ├── RELEASE_PROCESS.md
│ ├── __init__.py
│ ├── acn/
│ │ ├── Dockerfile
│ │ ├── Dockerfile.dev
│ │ ├── README.md
│ │ ├── build_upload_img.sh
│ │ ├── helm-chart/
│ │ │ ├── Chart.yaml
│ │ │ ├── templates/
│ │ │ │ ├── acnnode.yaml
│ │ │ │ ├── boostrapistio.yaml
│ │ │ │ ├── bootstrapnode.yaml
│ │ │ │ ├── bootstrapsecret.yaml
│ │ │ │ ├── dns.yaml
│ │ │ │ ├── istio.yaml
│ │ │ │ └── secret.yaml
│ │ │ └── values.yaml
│ │ ├── k8s/
│ │ │ ├── deployment.yaml
│ │ │ ├── dns.yaml
│ │ │ ├── istio.yaml
│ │ │ └── secret.yaml
│ │ ├── k8s_deploy_acn_node.py
│ │ └── run_acn_node_standalone.py
│ ├── bump_aea_version.py
│ ├── bump_year.sh
│ ├── check_copyright_notice.py
│ ├── check_doc_links.py
│ ├── check_imports_and_dependencies.py
│ ├── check_package_versions_in_docs.py
│ ├── check_packages.py
│ ├── check_pipfile_and_toxini.py
│ ├── common.py
│ ├── deploy_to_registry.py
│ ├── freeze_dependencies.py
│ ├── generate_all_protocols.py
│ ├── generate_api_docs.py
│ ├── generate_ipfs_hashes.py
│ ├── install.ps1
│ ├── install.sh
│ ├── ledger_network_update.py
│ ├── oef/
│ │ ├── launch.py
│ │ ├── launch_config.json
│ │ └── node_config.json
│ ├── parse_main_dependencies_from_lock.py
│ ├── spell-check.sh
│ ├── update_package_versions.py
│ ├── update_plugin_versions.py
│ ├── update_symlinks_cross_platform.py
│ └── whitelist.py
├── setup.cfg
├── strategy.ini
├── tests/
│ ├── __init__.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── docker_image.py
│ │ ├── mocks.py
│ │ ├── oef_search_pluto_scripts/
│ │ │ ├── launch.py
│ │ │ ├── launch_config.json
│ │ │ └── node_config.json
│ │ ├── pexpect_popen.py
│ │ └── utils.py
│ ├── conftest.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── aea-config.example.yaml
│ │ ├── aea-config.example_multipage.yaml
│ │ ├── aea-config.example_w_keys.yaml
│ │ ├── certs/
│ │ │ ├── server.crt
│ │ │ ├── server.csr
│ │ │ └── server.key
│ │ ├── cosmos_private_key.txt
│ │ ├── custom_crypto.py
│ │ ├── dependencies_skill/
│ │ │ ├── __init__.py
│ │ │ └── skill.yaml
│ │ ├── dot_env_file
│ │ ├── dummy_aea/
│ │ │ ├── __init__.py
│ │ │ ├── aea-config.yaml
│ │ │ ├── bad_requirements.txt
│ │ │ ├── connections/
│ │ │ │ └── __init__.py
│ │ │ ├── contracts/
│ │ │ │ └── __init__.py
│ │ │ ├── cosmos_private_key.txt
│ │ │ ├── default_private_key.pem
│ │ │ ├── ethereum_private_key.txt
│ │ │ ├── fetchai_private_key.txt
│ │ │ ├── protocols/
│ │ │ │ └── __init__.py
│ │ │ ├── requirements.txt
│ │ │ ├── skills/
│ │ │ │ └── __init__.py
│ │ │ └── vendor/
│ │ │ ├── __init__.py
│ │ │ └── fetchai/
│ │ │ ├── __init__.py
│ │ │ ├── connections/
│ │ │ │ └── __init__.py
│ │ │ ├── contracts/
│ │ │ │ └── __init__.py
│ │ │ ├── protocols/
│ │ │ │ └── __init__.py
│ │ │ └── skills/
│ │ │ └── __init__.py
│ │ ├── dummy_connection/
│ │ │ ├── __init__.py
│ │ │ ├── connection.py
│ │ │ └── connection.yaml
│ │ ├── dummy_contract/
│ │ │ ├── __init__.py
│ │ │ ├── build/
│ │ │ │ ├── some.json
│ │ │ │ └── some.wasm
│ │ │ ├── contract.py
│ │ │ └── contract.yaml
│ │ ├── dummy_protocol/
│ │ │ └── protocol.yaml
│ │ ├── dummy_skill/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── dummy.py
│ │ │ ├── dummy_subpackage/
│ │ │ │ ├── __init__.py
│ │ │ │ └── foo.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── ethereum_private_key.txt
│ │ ├── ethereum_private_key_two.txt
│ │ ├── exception_skill/
│ │ │ ├── __init__.py
│ │ │ ├── behaviours.py
│ │ │ ├── handlers.py
│ │ │ ├── skill.yaml
│ │ │ └── tasks.py
│ │ ├── fetchai_private_key.txt
│ │ ├── fetchai_private_key_wrong.txt
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── t_protocol/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── custom_types.py
│ │ │ │ ├── dialogues.py
│ │ │ │ ├── message.py
│ │ │ │ ├── protocol.yaml
│ │ │ │ ├── serialization.py
│ │ │ │ ├── t_protocol.proto
│ │ │ │ └── t_protocol_pb2.py
│ │ │ └── t_protocol_no_ct/
│ │ │ ├── __init__.py
│ │ │ ├── dialogues.py
│ │ │ ├── message.py
│ │ │ ├── protocol.yaml
│ │ │ ├── serialization.py
│ │ │ ├── t_protocol_no_ct.proto
│ │ │ └── t_protocol_no_ct_pb2.py
│ │ ├── gym-connection.yaml
│ │ ├── hashes.csv
│ │ ├── petstore_sim.yaml
│ │ ├── sample_specification.yaml
│ │ └── sample_specification_no_custom_types.yaml
│ ├── list_of_packages_for_aea_tests.txt
│ ├── oracle_contract_address.txt
│ ├── test_aea/
│ │ ├── __init__.py
│ │ ├── test_act_storage.py
│ │ ├── test_aea.py
│ │ ├── test_aea_builder.py
│ │ ├── test_agent.py
│ │ ├── test_agent_loop.py
│ │ ├── test_cli/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── test_add/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_contract.py
│ │ │ │ ├── test_generic.py
│ │ │ │ ├── test_protocol.py
│ │ │ │ └── test_skill.py
│ │ │ ├── test_add_key.py
│ │ │ ├── test_build.py
│ │ │ ├── test_config.py
│ │ │ ├── test_create.py
│ │ │ ├── test_delete.py
│ │ │ ├── test_eject.py
│ │ │ ├── test_fetch.py
│ │ │ ├── test_fingerprint.py
│ │ │ ├── test_freeze.py
│ │ │ ├── test_generate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_generate.py
│ │ │ │ └── test_protocols.py
│ │ │ ├── test_generate_key.py
│ │ │ ├── test_generate_wealth.py
│ │ │ ├── test_get_address.py
│ │ │ ├── test_get_multiaddress.py
│ │ │ ├── test_get_public_key.py
│ │ │ ├── test_get_wealth.py
│ │ │ ├── test_init.py
│ │ │ ├── test_install.py
│ │ │ ├── test_interact.py
│ │ │ ├── test_issue_certificates.py
│ │ │ ├── test_launch.py
│ │ │ ├── test_launch_end_to_end.py
│ │ │ ├── test_list.py
│ │ │ ├── test_local_registry_update.py
│ │ │ ├── test_loggers.py
│ │ │ ├── test_login.py
│ │ │ ├── test_logout.py
│ │ │ ├── test_misc.py
│ │ │ ├── test_plugin.py
│ │ │ ├── test_publish.py
│ │ │ ├── test_push.py
│ │ │ ├── test_register.py
│ │ │ ├── test_registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_add.py
│ │ │ │ ├── test_fetch.py
│ │ │ │ ├── test_login.py
│ │ │ │ ├── test_logout.py
│ │ │ │ ├── test_publish.py
│ │ │ │ ├── test_push.py
│ │ │ │ ├── test_registration.py
│ │ │ │ └── test_utils.py
│ │ │ ├── test_remove/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_base.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_contract.py
│ │ │ │ ├── test_dependencies.py
│ │ │ │ ├── test_protocol.py
│ │ │ │ └── test_skill.py
│ │ │ ├── test_remove_key.py
│ │ │ ├── test_reset_password.py
│ │ │ ├── test_run.py
│ │ │ ├── test_scaffold/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_connection.py
│ │ │ │ ├── test_decision_maker_handler.py
│ │ │ │ ├── test_error_handler.py
│ │ │ │ ├── test_generic.py
│ │ │ │ ├── test_protocols.py
│ │ │ │ └── test_skills.py
│ │ │ ├── test_search.py
│ │ │ ├── test_transfer.py
│ │ │ ├── test_upgrade.py
│ │ │ ├── test_utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_config.py
│ │ │ │ └── test_utils.py
│ │ │ └── tools_for_testing.py
│ │ ├── test_components/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_loader.py
│ │ │ └── test_utils.py
│ │ ├── test_configurations/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_config.py
│ │ │ ├── test_base.py
│ │ │ ├── test_loader.py
│ │ │ ├── test_manager.py
│ │ │ ├── test_pypi.py
│ │ │ ├── test_schema.py
│ │ │ ├── test_utils.py
│ │ │ └── test_validation.py
│ │ ├── test_connections/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_scaffold.py
│ │ │ └── test_sync_connection.py
│ │ ├── test_context/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_contracts/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_crypto/
│ │ │ ├── __init__.py
│ │ │ ├── test_helpers.py
│ │ │ ├── test_ledger_apis.py
│ │ │ ├── test_password_end2end.py
│ │ │ ├── test_registries.py
│ │ │ ├── test_registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_crypto_registry.py
│ │ │ │ ├── test_ledger_api_registry.py
│ │ │ │ └── test_misc.py
│ │ │ └── test_wallet.py
│ │ ├── test_decision_maker/
│ │ │ ├── __init__.py
│ │ │ ├── test_default.py
│ │ │ ├── test_gop.py
│ │ │ ├── test_ownership_state.py
│ │ │ ├── test_preferences.py
│ │ │ └── test_scaffold.py
│ │ ├── test_error_handler/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ └── test_scaffold.py
│ │ ├── test_exceptions.py
│ │ ├── test_helpers/
│ │ │ ├── __init__.py
│ │ │ ├── test_acn/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_agent_record.py
│ │ │ │ └── test_uri.py
│ │ │ ├── test_async_friendly_queue.py
│ │ │ ├── test_async_utils.py
│ │ │ ├── test_base.py
│ │ │ ├── test_env_vars.py
│ │ │ ├── test_exec_timeout.py
│ │ │ ├── test_file_io.py
│ │ │ ├── test_install_dependency.py
│ │ │ ├── test_io.py
│ │ │ ├── test_ipfs/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ ├── test_logging.py
│ │ │ ├── test_multiaddr.py
│ │ │ ├── test_multiple_executor.py
│ │ │ ├── test_pipe/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_pipe.py
│ │ │ ├── test_preference_representations/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ ├── test_profiling.py
│ │ │ ├── test_search/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── base.py
│ │ │ │ ├── test_generic.py
│ │ │ │ └── test_models.py
│ │ │ ├── test_serializers.py
│ │ │ ├── test_storage.py
│ │ │ ├── test_sym_link.py
│ │ │ ├── test_transaction/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_base.py
│ │ │ └── test_yaml_utils.py
│ │ ├── test_identity/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_launcher.py
│ │ ├── test_mail/
│ │ │ ├── __init__.py
│ │ │ └── test_base.py
│ │ ├── test_multiplexer.py
│ │ ├── test_package_loading.py
│ │ ├── test_protocols/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_dialogue/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_base.py
│ │ │ │ └── test_msg_resolve.py
│ │ │ ├── test_generator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common.py
│ │ │ │ ├── test_common.py
│ │ │ │ ├── test_end_to_end.py
│ │ │ │ ├── test_extract_specification.py
│ │ │ │ ├── test_generator.py
│ │ │ │ └── test_validate.py
│ │ │ └── test_scaffold.py
│ │ ├── test_registries/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ └── test_filter.py
│ │ ├── test_runner.py
│ │ ├── test_runtime.py
│ │ ├── test_skills/
│ │ │ ├── __init__.py
│ │ │ ├── test_base.py
│ │ │ ├── test_behaviours.py
│ │ │ ├── test_error.py
│ │ │ ├── test_scaffold.py
│ │ │ ├── test_task_subprocess.py
│ │ │ └── test_tasks.py
│ │ ├── test_task.py
│ │ └── test_test_tools/
│ │ ├── __init__.py
│ │ ├── test_click_testing.py
│ │ ├── test_test_cases.py
│ │ ├── test_test_contract.py
│ │ └── test_test_skill.py
│ ├── test_aea_core_packages/
│ │ ├── test_connections/
│ │ │ ├── test_http_client/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_http_client.py
│ │ │ ├── test_http_server/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_http_server.py
│ │ │ │ └── test_http_server_and_client.py
│ │ │ └── test_ledger/
│ │ │ ├── __init__.py
│ │ │ ├── test_contract_api.py
│ │ │ └── test_ledger_api.py
│ │ ├── test_contracts/
│ │ │ ├── __init__.py
│ │ │ └── test_erc1155/
│ │ │ ├── __init__.py
│ │ │ └── test_contract.py
│ │ └── test_skills_integration/
│ │ ├── test_echo.py
│ │ ├── test_generic.py
│ │ ├── test_hello_world.py
│ │ └── test_http_echo.py
│ ├── test_aea_extra/
│ │ ├── __init__.py
│ │ └── test_manager/
│ │ ├── __init__.py
│ │ ├── test_manager.py
│ │ └── test_utils.py
│ ├── test_docs/
│ │ ├── __init__.py
│ │ ├── helper.py
│ │ ├── test_agent_vs_aea/
│ │ │ ├── __init__.py
│ │ │ ├── agent_code_block.py
│ │ │ └── test_agent_vs_aea.py
│ │ ├── test_bash_yaml/
│ │ │ ├── __init__.py
│ │ │ ├── md_files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bash-aggregation-demo.md
│ │ │ │ ├── bash-aries-cloud-agent-demo.md
│ │ │ │ ├── bash-car-park-skills.md
│ │ │ │ ├── bash-cli-vs-programmatic-aeas.md
│ │ │ │ ├── bash-config.md
│ │ │ │ ├── bash-connection.md
│ │ │ │ ├── bash-contract.md
│ │ │ │ ├── bash-decision-maker.md
│ │ │ │ ├── bash-deployment.md
│ │ │ │ ├── bash-erc1155-skills.md
│ │ │ │ ├── bash-generic-skills-step-by-step.md
│ │ │ │ ├── bash-generic-skills.md
│ │ │ │ ├── bash-gym-example.md
│ │ │ │ ├── bash-gym-skill.md
│ │ │ │ ├── bash-http-connection-and-skill.md
│ │ │ │ ├── bash-language-agnostic-definition.md
│ │ │ │ ├── bash-ledger-integration.md
│ │ │ │ ├── bash-logging.md
│ │ │ │ ├── bash-ml-skills.md
│ │ │ │ ├── bash-oracle-demo.md
│ │ │ │ ├── bash-orm-integration.md
│ │ │ │ ├── bash-p2p-connection.md
│ │ │ │ ├── bash-package-imports.md
│ │ │ │ ├── bash-performance-benchmark.md
│ │ │ │ ├── bash-por.md
│ │ │ │ ├── bash-protocol-generator.md
│ │ │ │ ├── bash-quickstart.md
│ │ │ │ ├── bash-raspberry-set-up.md
│ │ │ │ ├── bash-scaffolding.md
│ │ │ │ ├── bash-skill-guide.md
│ │ │ │ ├── bash-skill.md
│ │ │ │ ├── bash-tac-skills-contract.md
│ │ │ │ ├── bash-tac-skills.md
│ │ │ │ ├── bash-tac.md
│ │ │ │ ├── bash-thermometer-skills.md
│ │ │ │ ├── bash-wealth.md
│ │ │ │ └── bash-weather-skills.md
│ │ │ └── test_demo_docs.py
│ │ ├── test_build_aea_programmatically/
│ │ │ ├── __init__.py
│ │ │ ├── programmatic_aea.py
│ │ │ └── test_programmatic_aea.py
│ │ ├── test_cli_commands.py
│ │ ├── test_cli_vs_programmatic_aeas/
│ │ │ ├── __init__.py
│ │ │ ├── programmatic_aea.py
│ │ │ └── test_cli_vs_programmatic_aea.py
│ │ ├── test_data_models.py
│ │ ├── test_decision_maker_transaction/
│ │ │ ├── __init__.py
│ │ │ ├── decision_maker_transaction.py
│ │ │ └── test_decision_maker_transaction.py
│ │ ├── test_docs_http_connection_and_skill.py
│ │ ├── test_docs_protocol.py
│ │ ├── test_docs_skill.py
│ │ ├── test_generic_step_by_step_guide/
│ │ │ ├── __init__.py
│ │ │ └── test_generic_step_by_step_guide.py
│ │ ├── test_generic_storage.py
│ │ ├── test_language_agnostic_definition.py
│ │ ├── test_ledger_integration.py
│ │ ├── test_multiagent_manager.py
│ │ ├── test_multiplexer_standalone/
│ │ │ ├── __init__.py
│ │ │ ├── multiplexer_standalone.py
│ │ │ └── test_multiplexer_standalone.py
│ │ ├── test_orm_integration/
│ │ │ ├── __init__.py
│ │ │ ├── orm_seller_strategy.py
│ │ │ └── test_orm_integration.py
│ │ ├── test_query_language.py
│ │ ├── test_quickstart.py
│ │ ├── test_simple_oef_usage.py
│ │ ├── test_skill_guide/
│ │ │ ├── __init__.py
│ │ │ └── test_skill_guide.py
│ │ ├── test_skill_testing.py
│ │ └── test_standalone_transaction/
│ │ ├── __init__.py
│ │ ├── standalone_transaction.py
│ │ └── test_standalone_transaction.py
│ ├── test_examples/
│ │ ├── __init__.py
│ │ ├── test_gym_ex.py
│ │ └── test_http_client_connection_to_aries_cloud_agent.py
│ ├── test_packages/
│ │ ├── __init__.py
│ │ ├── test_connections/
│ │ │ ├── __init__.py
│ │ │ ├── test_p2p_libp2p/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_aea_cli.py
│ │ │ │ ├── test_build.py
│ │ │ │ ├── test_communication.py
│ │ │ │ ├── test_errors.py
│ │ │ │ ├── test_fault_tolerance.py
│ │ │ │ ├── test_integration.py
│ │ │ │ ├── test_public_dht.py
│ │ │ │ └── test_slow_queue.py
│ │ │ ├── test_prometheus/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_prometheus.py
│ │ │ └── test_webhook/
│ │ │ ├── __init__.py
│ │ │ └── test_webhook.py
│ │ ├── test_contracts/
│ │ │ └── __init__.py
│ │ ├── test_protocols/
│ │ │ ├── __init__.py
│ │ │ ├── test_aggregation.py
│ │ │ ├── test_ml_trade.py
│ │ │ └── test_prometheus.py
│ │ ├── test_skills/
│ │ │ ├── __init__.py
│ │ │ ├── test_advanced_data_request/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_aries_alice/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_aries_faber/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_carpark_detection/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_database.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw1/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw2/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_confirmation_aw3/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_registration_db.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_erc1155_deploy/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_fetch_block/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_hello_world/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_behaviours.py
│ │ │ ├── test_http_echo/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_ml_data_provider/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_ml_train/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── helpers.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_strategy.py
│ │ │ │ └── test_task.py
│ │ │ ├── test_registration_aw1/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_aggregation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_buyer/
│ │ │ │ └── __init__.py
│ │ │ ├── test_simple_data_request/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── intermediate_class.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_oracle/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_oracle_client/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ └── test_handlers.py
│ │ │ ├── test_simple_seller/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_service_registration/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_simple_service_search/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ └── test_strategy.py
│ │ │ ├── test_tac_control/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_game.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ └── test_parameters.py
│ │ │ ├── test_tac_control_contract/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ └── test_parameters.py
│ │ │ ├── test_tac_negotiation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_handlers.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ ├── test_logical.py
│ │ │ │ ├── test_strategy.py
│ │ │ │ └── test_transactions.py
│ │ │ ├── test_tac_participation/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_behaviours.py
│ │ │ │ ├── test_dialogues.py
│ │ │ │ ├── test_game.py
│ │ │ │ └── test_handlers.py
│ │ │ └── test_thermometer/
│ │ │ ├── __init__.py
│ │ │ └── test_strategy.py
│ │ └── test_skills_integration/
│ │ ├── __init__.py
│ │ ├── test_aries_demo.py
│ │ ├── test_carpark.py
│ │ ├── test_coin_price.py
│ │ ├── test_erc1155.py
│ │ ├── test_fetch_block.py
│ │ ├── test_generic.py
│ │ ├── test_gym.py
│ │ ├── test_ml_skills.py
│ │ ├── test_simple_aggregation.py
│ │ ├── test_simple_oracle.py
│ │ ├── test_tac.py
│ │ ├── test_thermometer.py
│ │ └── test_weather.py
│ └── test_packages_for_aea_tests/
│ ├── __init__.py
│ ├── test_connections/
│ │ ├── __init__.py
│ │ ├── test_gym/
│ │ │ ├── __init__.py
│ │ │ └── test_gym.py
│ │ ├── test_local/
│ │ │ ├── __init__.py
│ │ │ ├── test_misc.py
│ │ │ └── test_search_services.py
│ │ ├── test_oef/
│ │ │ ├── __init__.py
│ │ │ ├── test_communication.py
│ │ │ ├── test_models.py
│ │ │ └── test_oef_serializer.py
│ │ ├── test_p2p_libp2p_client/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_cli.py
│ │ │ ├── test_communication.py
│ │ │ └── test_errors.py
│ │ ├── test_p2p_libp2p_mailbox/
│ │ │ ├── __init__.py
│ │ │ ├── test_aea_cli.py
│ │ │ ├── test_communication.py
│ │ │ ├── test_errors.py
│ │ │ └── test_mailbox_service.py
│ │ ├── test_p2p_stub/
│ │ │ ├── __init__.py
│ │ │ └── test_p2p_stub.py
│ │ ├── test_soef/
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── test_soef.py
│ │ │ └── test_soef_integration.py
│ │ ├── test_stub/
│ │ │ ├── __init__.py
│ │ │ └── test_stub.py
│ │ └── test_tcp/
│ │ ├── __init__.py
│ │ ├── test_base.py
│ │ └── test_communication.py
│ ├── test_protocols/
│ │ ├── test_acn.py
│ │ ├── test_contract_api.py
│ │ ├── test_default.py
│ │ ├── test_fipa.py
│ │ ├── test_gym.py
│ │ ├── test_http.py
│ │ ├── test_ledger_api.py
│ │ ├── test_oef_search.py
│ │ ├── test_register.py
│ │ ├── test_signing.py
│ │ ├── test_state_update.py
│ │ └── test_tac.py
│ └── test_skills/
│ ├── __init__.py
│ ├── test_echo/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ └── test_handlers.py
│ ├── test_erc1155_client/
│ │ ├── __init__.py
│ │ ├── intermediate_class.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_strategy.py
│ ├── test_generic_buyer/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_models.py
│ ├── test_generic_seller/
│ │ ├── __init__.py
│ │ ├── test_behaviours.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ └── test_models.py
│ ├── test_gym/
│ │ ├── __init__.py
│ │ ├── helpers.py
│ │ ├── intermediate_class.py
│ │ ├── test_dialogues.py
│ │ ├── test_handlers.py
│ │ ├── test_helpers.py
│ │ ├── test_rl_agent.py
│ │ └── test_task.py
│ └── test_weather_station/
│ ├── __init__.py
│ ├── test_dummy_weather_station_data.py
│ ├── test_registration_db.py
│ └── test_strategy.py
├── tox.ini
└── user-image/
├── Dockerfile
├── README.md
├── docker-env.sh
└── scripts/
├── docker-build-img.sh
└── docker-publish-img.sh
Showing preview only (1,281K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (14578 symbols across 926 files)
FILE: aea/__init__.py
function get_current_aea_version (line 45) | def get_current_aea_version() -> Version:
FILE: aea/abstract_agent.py
class AbstractAgent (line 27) | class AbstractAgent(ABC):
method name (line 32) | def name(self) -> str:
method storage_uri (line 37) | def storage_uri(self) -> Optional[str]:
method start (line 41) | def start(self) -> None:
method stop (line 49) | def stop(self) -> None:
method setup (line 57) | def setup(self) -> None:
method act (line 65) | def act(self) -> None:
method handle_envelope (line 73) | def handle_envelope(self, envelope: Envelope) -> None:
method get_periodic_tasks (line 82) | def get_periodic_tasks(
method get_message_handlers (line 92) | def get_message_handlers(self) -> List[Tuple[Callable[[Any], None], Ca...
method exception_handler (line 100) | def exception_handler(
method teardown (line 113) | def teardown(self) -> None:
FILE: aea/aea.py
class AEA (line 61) | class AEA(Agent):
method __init__ (line 72) | def __init__(
method get_build_dir (line 237) | def get_build_dir(cls) -> str:
method context (line 242) | def context(self) -> AgentContext:
method resources (line 247) | def resources(self) -> Resources:
method resources (line 252) | def resources(self, resources: "Resources") -> None:
method filter (line 257) | def filter(self) -> Filter:
method active_behaviours (line 262) | def active_behaviours(self) -> List[Behaviour]:
method setup (line 266) | def setup(self) -> None:
method act (line 274) | def act(self) -> None:
method _get_error_handler (line 282) | def _get_error_handler(self) -> AbstractErrorHandler:
method _get_msg_and_handlers_for_envelope (line 286) | def _get_msg_and_handlers_for_envelope(
method _handle_decoding (line 304) | def _handle_decoding(
method handle_envelope (line 336) | def handle_envelope(self, envelope: Envelope) -> None:
method _setup_loggers (line 360) | def _setup_loggers(self) -> None:
method get_periodic_tasks (line 377) | def get_periodic_tasks(
method _get_behaviours_tasks (line 389) | def _get_behaviours_tasks(
method get_message_handlers (line 404) | def get_message_handlers(self) -> List[Tuple[Callable[[Any], None], Ca...
method exception_handler (line 418) | def exception_handler(self, exception: Exception, function: Callable) ...
method teardown (line 454) | def teardown(self) -> None:
method get_task_result (line 464) | def get_task_result(self, task_id: int) -> AsyncResult:
method enqueue_task (line 473) | def enqueue_task(
FILE: aea/aea_builder.py
class _DependenciesManager (line 113) | class _DependenciesManager:
method __init__ (line 116) | def __init__(self) -> None:
method all_dependencies (line 130) | def all_dependencies(self) -> Set[ComponentId]:
method dependencies_highest_version (line 136) | def dependencies_highest_version(self) -> Set[ComponentId]:
method get_components_by_type (line 140) | def get_components_by_type(
method protocols (line 147) | def protocols(self) -> Dict[ComponentId, ProtocolConfig]:
method connections (line 155) | def connections(self) -> Dict[ComponentId, ConnectionConfig]:
method skills (line 163) | def skills(self) -> Dict[ComponentId, SkillConfig]:
method contracts (line 171) | def contracts(self) -> Dict[ComponentId, ContractConfig]:
method add_component (line 178) | def add_component(self, configuration: ComponentConfiguration) -> None:
method remove_component (line 200) | def remove_component(self, component_id: ComponentId) -> None:
method pypi_dependencies (line 237) | def pypi_dependencies(self) -> Dependencies:
method install_dependencies (line 256) | def install_dependencies(self) -> None:
class AEABuilder (line 262) | class AEABuilder(WithLogger): # pylint: disable=too-many-public-methods
method __init__ (line 327) | def __init__(
method reset (line 346) | def reset(self, is_full_reset: bool = False) -> None:
method _reset (line 360) | def _reset(self, is_full_reset: bool = False) -> None:
method _remove_components_from_dependency_manager (line 416) | def _remove_components_from_dependency_manager(self) -> None:
method set_period (line 428) | def set_period(self, period: Optional[float]) -> "AEABuilder":
method set_execution_timeout (line 439) | def set_execution_timeout(self, execution_timeout: Optional[float]) ->...
method set_max_reactions (line 450) | def set_max_reactions(self, max_reactions: Optional[int]) -> "AEABuild...
method set_decision_maker_handler_details (line 461) | def set_decision_maker_handler_details(
method _load_decision_maker_handler_class (line 481) | def _load_decision_maker_handler_class(
method _load_error_handler_class (line 528) | def _load_error_handler_class(
method set_error_handler_details (line 573) | def set_error_handler_details(
method set_skill_exception_policy (line 590) | def set_skill_exception_policy(
method set_connection_exception_policy (line 603) | def set_connection_exception_policy(
method set_default_routing (line 616) | def set_default_routing(
method set_loop_mode (line 647) | def set_loop_mode(
method set_runtime_mode (line 659) | def set_runtime_mode(
method set_task_manager_mode (line 671) | def set_task_manager_mode(
method set_storage_uri (line 683) | def set_storage_uri(
method set_data_dir (line 695) | def set_data_dir(self, data_dir: Optional[str]) -> "AEABuilder": # pr...
method set_logging_config (line 705) | def set_logging_config(
method set_search_service_address (line 721) | def set_search_service_address(
method _add_default_packages (line 733) | def _add_default_packages(self) -> None:
method _check_can_remove (line 760) | def _check_can_remove(self, component_id: ComponentId) -> None:
method _check_can_add (line 774) | def _check_can_add(self, configuration: ComponentConfiguration) -> None:
method set_name (line 784) | def set_name(self, name: str) -> "AEABuilder": # pragma: nocover
method set_default_connection (line 794) | def set_default_connection(
method add_private_key (line 814) | def add_private_key(
method remove_private_key (line 841) | def remove_private_key(
method private_key_paths (line 858) | def private_key_paths(self) -> Dict[str, Optional[str]]:
method connection_private_key_paths (line 863) | def connection_private_key_paths(self) -> Dict[str, Optional[str]]:
method set_default_ledger (line 867) | def set_default_ledger(
method set_required_ledgers (line 881) | def set_required_ledgers(
method set_build_entrypoint (line 899) | def set_build_entrypoint(
method set_currency_denominations (line 911) | def set_currency_denominations(
method add_component (line 923) | def add_component(
method _set_component_build_directory (line 951) | def _set_component_build_directory(
method add_component_instance (line 966) | def add_component_instance(self, component: Component) -> "AEABuilder":
method set_context_namespace (line 987) | def set_context_namespace(
method set_agent_pypi_dependencies (line 994) | def set_agent_pypi_dependencies(self, dependencies: Dependencies) -> "...
method remove_component (line 1004) | def remove_component(self, component_id: ComponentId) -> "AEABuilder":
method _remove (line 1015) | def _remove(self, component_id: ComponentId) -> None:
method add_protocol (line 1018) | def add_protocol(self, directory: PathLike) -> "AEABuilder":
method remove_protocol (line 1028) | def remove_protocol(self, public_id: PublicId) -> "AEABuilder":
method add_connection (line 1038) | def add_connection(self, directory: PathLike) -> "AEABuilder":
method remove_connection (line 1048) | def remove_connection(self, public_id: PublicId) -> "AEABuilder":
method add_skill (line 1058) | def add_skill(self, directory: PathLike) -> "AEABuilder":
method remove_skill (line 1068) | def remove_skill(self, public_id: PublicId) -> "AEABuilder":
method add_contract (line 1078) | def add_contract(self, directory: PathLike) -> "AEABuilder":
method remove_contract (line 1088) | def remove_contract(self, public_id: PublicId) -> "AEABuilder":
method call_all_build_entrypoints (line 1098) | def call_all_build_entrypoints(self) -> None:
method get_build_root_directory (line 1113) | def get_build_root_directory(self) -> str:
method run_build_for_component_configuration (line 1118) | def run_build_for_component_configuration(
method _run_build_entrypoint (line 1143) | def _run_build_entrypoint(
method _run_in_subprocess (line 1174) | def _run_in_subprocess(
method _build_wallet (line 1197) | def _build_wallet(
method _build_identity_from_wallet (line 1231) | def _build_identity_from_wallet(self, wallet: Wallet) -> Identity:
method _process_connection_ids (line 1266) | def _process_connection_ids( # pylint: disable=unsubscriptable-object
method install_pypi_dependencies (line 1326) | def install_pypi_dependencies(self) -> None:
method build (line 1330) | def build( # pylint: disable=unsubscriptable-object
method get_default_ledger (line 1399) | def get_default_ledger(self) -> str:
method get_required_ledgers (line 1407) | def get_required_ledgers(self) -> List[str]:
method _get_agent_act_period (line 1417) | def _get_agent_act_period(self) -> float:
method _get_execution_timeout (line 1425) | def _get_execution_timeout(self) -> float:
method _get_max_reactions (line 1437) | def _get_max_reactions(self) -> int:
method _get_error_handler_class (line 1449) | def _get_error_handler_class(
method _get_error_handler_config (line 1459) | def _get_error_handler_config(
method _get_decision_maker_handler_class (line 1469) | def _get_decision_maker_handler_class(
method _get_decision_maker_handler_config (line 1479) | def _get_decision_maker_handler_config(
method _get_skill_exception_policy (line 1489) | def _get_skill_exception_policy(self) -> ExceptionPolicyEnum:
method _get_connection_exception_policy (line 1501) | def _get_connection_exception_policy(self) -> ExceptionPolicyEnum:
method _get_currency_denominations (line 1513) | def _get_currency_denominations(self) -> Dict[str, str]:
method _get_default_routing (line 1525) | def _get_default_routing(self) -> Dict[PublicId, PublicId]:
method _get_default_connection (line 1533) | def _get_default_connection(self) -> Optional[PublicId]:
method _get_loop_mode (line 1541) | def _get_loop_mode(self) -> str:
method _get_runtime_mode (line 1551) | def _get_runtime_mode(self) -> str:
method _get_task_manager_mode (line 1563) | def _get_task_manager_mode(self) -> str:
method _get_storage_uri (line 1575) | def _get_storage_uri(self) -> Optional[str]:
method _get_data_dir (line 1583) | def _get_data_dir(self) -> str:
method _get_search_service_address (line 1591) | def _get_search_service_address(self) -> str:
method _check_configuration_not_already_added (line 1603) | def _check_configuration_not_already_added(
method _check_package_dependencies (line 1622) | def _check_package_dependencies(
method _check_pypi_dependencies (line 1644) | def _check_pypi_dependencies(self, configuration: ComponentConfigurati...
method try_to_load_agent_configuration_file (line 1663) | def try_to_load_agent_configuration_file(
method _check_valid_entrypoint (line 1692) | def _check_valid_entrypoint(build_entrypoint: str, directory: str) -> ...
method set_from_configuration (line 1721) | def set_from_configuration(
method _find_import_order (line 1809) | def _find_import_order(
method from_aea_project (line 1864) | def from_aea_project(
method get_configuration_file_path (line 1912) | def get_configuration_file_path(aea_project_path: Union[Path, str]) ->...
method _load_and_add_components (line 1916) | def _load_and_add_components(
method _check_we_can_build (line 1956) | def _check_we_can_build(self) -> None:
method _overwrite_custom_configuration (line 1965) | def _overwrite_custom_configuration(
method _add_components_of_type (line 1984) | def _add_components_of_type(
method _preliminary_checks_before_build (line 2020) | def _preliminary_checks_before_build(self) -> None:
function make_component_logger (line 2035) | def make_component_logger(
FILE: aea/agent.py
class Agent (line 40) | class Agent(AbstractAgent, WithLogger):
method __init__ (line 53) | def __init__(
method _set_runtime_and_mail_boxes (line 96) | def _set_runtime_and_mail_boxes(
method _get_runtime_class (line 114) | def _get_runtime_class(self) -> Type[BaseRuntime]:
method storage_uri (line 123) | def storage_uri(self) -> Optional[str]:
method is_running (line 128) | def is_running(self) -> bool:
method is_stopped (line 133) | def is_stopped(self) -> bool:
method identity (line 138) | def identity(self) -> Identity:
method inbox (line 143) | def inbox(self) -> InBox: # pragma: nocover
method outbox (line 155) | def outbox(self) -> OutBox: # pragma: nocover
method name (line 167) | def name(self) -> str:
method tick (line 172) | def tick(self) -> int: # pragma: nocover
method state (line 183) | def state(self) -> RuntimeStates:
method period (line 192) | def period(self) -> float:
method runtime (line 197) | def runtime(self) -> BaseRuntime:
method setup (line 201) | def setup(self) -> None:
method start (line 205) | def start(self) -> None:
method handle_envelope (line 221) | def handle_envelope(self, envelope: Envelope) -> None:
method act (line 229) | def act(self) -> None:
method stop (line 233) | def stop(self) -> None:
method teardown (line 245) | def teardown(self) -> None:
method get_periodic_tasks (line 249) | def get_periodic_tasks(
method get_message_handlers (line 259) | def get_message_handlers(self) -> List[Tuple[Callable[[Any], None], Ca...
method exception_handler (line 269) | def exception_handler(
FILE: aea/agent_loop.py
class AgentLoopException (line 42) | class AgentLoopException(AEAException):
class AgentLoopStates (line 46) | class AgentLoopStates(Enum):
class BaseAgentLoop (line 57) | class BaseAgentLoop(Runnable, WithLogger, ABC):
method __init__ (line 60) | def __init__(
method agent (line 82) | def agent(self) -> AbstractAgent: # pragma: nocover
method state (line 87) | def state(self) -> AgentLoopStates:
method wait_state (line 91) | async def wait_state(
method is_running (line 105) | def is_running(self) -> bool:
method set_loop (line 109) | def set_loop(self, loop: AbstractEventLoop) -> None:
method _setup (line 113) | def _setup(self) -> None:
method _teardown (line 118) | def _teardown(self) -> None:
method run (line 123) | async def run(self) -> None:
method _stop (line 136) | async def _stop(self) -> None:
method _gather_tasks (line 147) | async def _gather_tasks(self) -> None:
method _set_tasks (line 152) | def _set_tasks(self) -> None: # pragma: nocover
method _stop_tasks (line 156) | def _stop_tasks(self) -> None:
method send_to_skill (line 162) | def send_to_skill(
method skill2skill_queue (line 178) | def skill2skill_queue(self) -> Queue:
class AsyncAgentLoop (line 182) | class AsyncAgentLoop(BaseAgentLoop):
method __init__ (line 187) | def __init__(
method _setup (line 206) | def _setup(self) -> None:
method skill2skill_queue (line 212) | def skill2skill_queue(self) -> Queue:
method send_to_skill (line 218) | def send_to_skill(
method _periodic_task_exception_callback (line 254) | def _periodic_task_exception_callback( # pylint: disable=unused-argument
method _execution_control (line 265) | def _execution_control(
method _register_periodic_task (line 304) | def _register_periodic_task(
method _register_periodic_tasks (line 334) | def _register_periodic_tasks(self) -> None:
method _unregister_periodic_task (line 342) | def _unregister_periodic_task(self, task_callable: Callable) -> None:
method _stop_all_behaviours (line 354) | def _stop_all_behaviours(self) -> None:
method _task_wait_for_error (line 359) | async def _task_wait_for_error(self) -> None:
method _stop_tasks (line 364) | def _stop_tasks(self) -> None:
method _set_tasks (line 369) | def _set_tasks(self) -> None:
method _create_tasks (line 374) | def _create_tasks(self) -> List[Task]:
method _message_processor (line 387) | async def _message_processor(
method _message_handlers (line 403) | def _message_handlers(self) -> List[Tuple[Callable[[Any], None], Calla...
method _process_messages (line 407) | async def _process_messages(self) -> None:
method _task_register_periodic_tasks (line 418) | async def _task_register_periodic_tasks(self) -> None:
FILE: aea/cli/add.py
function add (line 57) | def add(click_context: click.Context, local: bool, remote: bool) -> None:
function connection (line 77) | def connection(ctx: Context, connection_public_id: PublicId) -> None:
function contract (line 85) | def contract(ctx: Context, contract_public_id: PublicId) -> None:
function protocol (line 93) | def protocol(ctx: Context, protocol_public_id: PublicId) -> None:
function skill (line 101) | def skill(ctx: Context, skill_public_id: PublicId) -> None:
function add_item (line 107) | def add_item(ctx: Context, item_type: str, item_public_id: PublicId) -> ...
function _add_item_deps (line 154) | def _add_item_deps(
function find_item_locally_or_distributed (line 189) | def find_item_locally_or_distributed(
function fetch_item_mixed (line 212) | def fetch_item_mixed(
FILE: aea/cli/add_key.py
function add_key (line 61) | def add_key(
function _add_private_key (line 72) | def _add_private_key(
function _try_add_key (line 100) | def _try_add_key(
FILE: aea/cli/build.py
function build (line 33) | def build(click_context: click.Context) -> None:
function build_aea (line 40) | def build_aea(skip_consistency_check: bool) -> None:
FILE: aea/cli/config.py
function config (line 39) | def config(click_context: click.Context) -> None: # pylint: disable=unu...
function get (line 46) | def get(ctx: Context, json_path: str) -> None:
function set_command (line 71) | def set_command(
FILE: aea/cli/core.py
function cli (line 87) | def cli(
FILE: aea/cli/create.py
function create (line 73) | def create(
function create_aea (line 87) | def create_aea(
function _create_agent_config (line 183) | def _create_agent_config(ctx: Context, agent_name: str, set_author: str)...
function _check_is_parent_folders_are_aea_projects_recursively (line 214) | def _check_is_parent_folders_are_aea_projects_recursively() -> None:
function _setup_package_folder (line 231) | def _setup_package_folder(path: Path) -> None:
FILE: aea/cli/delete.py
function delete (line 39) | def delete(click_context: click.Context, agent_name: str) -> None:
function delete_aea (line 46) | def delete_aea(ctx: Context, agent_name: str) -> None:
FILE: aea/cli/eject.py
function eject (line 89) | def eject(click_context: click.core.Context, quiet: bool, with_symlinks:...
function connection (line 99) | def connection(ctx: Context, public_id: PublicId) -> None:
function contract (line 109) | def contract(ctx: Context, public_id: PublicId) -> None:
function protocol (line 119) | def protocol(ctx: Context, public_id: PublicId) -> None:
function skill (line 129) | def skill(ctx: Context, public_id: PublicId) -> None:
function _eject_item (line 137) | def _eject_item(
FILE: aea/cli/fetch.py
function fetch (line 61) | def fetch(
function do_fetch (line 73) | def do_fetch(
function _is_version_correct (line 111) | def _is_version_correct(ctx: Context, agent_public_id: PublicId) -> bool:
function fetch_agent_locally (line 127) | def fetch_agent_locally(
function _fetch_agent_deps (line 188) | def _fetch_agent_deps(ctx: Context) -> None:
function fetch_mixed (line 201) | def fetch_mixed(
FILE: aea/cli/fingerprint.py
function fingerprint (line 49) | def fingerprint(
function connection (line 60) | def connection(ctx: Context, connection_public_id: PublicId) -> None:
function contract (line 68) | def contract(ctx: Context, contract_public_id: PublicId) -> None:
function protocol (line 76) | def protocol(ctx: Context, protocol_public_id: PublicId) -> None:
function skill (line 84) | def skill(ctx: Context, skill_public_id: PublicId) -> None:
function by_path (line 92) | def by_path(ctx: Context, path: str) -> None:
function fingerprint_item (line 102) | def fingerprint_item(ctx: Context, item_type: str, item_public_id: Publi...
function fingerprint_package_by_path (line 124) | def fingerprint_package_by_path(package_dir: Path) -> None:
function determine_package_type_for_directory (line 134) | def determine_package_type_for_directory(package_dir: Path) -> PackageType:
function fingerprint_package (line 163) | def fingerprint_package(
function fingerprint_agent (line 193) | def fingerprint_agent(click_context: click.Context) -> None:
FILE: aea/cli/freeze.py
function freeze (line 33) | def freeze(click_context: click.Context) -> None:
function _get_deps (line 40) | def _get_deps(click_context: click.core.Context) -> List[str]:
FILE: aea/cli/generate.py
function generate (line 50) | def generate(
function protocol (line 67) | def protocol(ctx: Context, protocol_specification_path: str, language: s...
function _generate_protocol (line 74) | def _generate_protocol(ctx: Context, protocol_specification_path: str) -...
function _generate_full_mode (line 147) | def _generate_full_mode(
function _generate_protobuf_mode (line 188) | def _generate_protobuf_mode(
FILE: aea/cli/generate_key.py
function generate_key (line 56) | def generate_key(
function _generate_private_key (line 74) | def _generate_private_key(
function _can_write (line 100) | def _can_write(path: str) -> bool:
FILE: aea/cli/generate_wealth.py
function generate_wealth (line 46) | def generate_wealth(
function _try_generate_wealth (line 58) | def _try_generate_wealth(
FILE: aea/cli/get_address.py
function get_address (line 43) | def get_address(
function _try_get_address (line 52) | def _try_get_address(ctx: Context, type_: str, password: Optional[str] =...
FILE: aea/cli/get_multiaddress.py
function get_multiaddress (line 82) | def get_multiaddress(
function _try_get_multiaddress (line 106) | def _try_get_multiaddress(
function _try_get_peerid (line 163) | def _try_get_peerid(crypto: Crypto) -> str:
function _read_host_and_port_from_config (line 172) | def _read_host_and_port_from_config(
function _try_get_connection_multiaddress (line 228) | def _try_get_connection_multiaddress(
FILE: aea/cli/get_public_key.py
function get_public_key (line 41) | def get_public_key(
function _try_get_public_key (line 50) | def _try_get_public_key(
FILE: aea/cli/get_wealth.py
function get_wealth (line 47) | def get_wealth(
function _try_get_wealth (line 56) | def _try_get_wealth(ctx: Context, type_: str, password: Optional[str] = ...
FILE: aea/cli/init.py
function init (line 44) | def init( # pylint: disable=unused-argument
function do_init (line 51) | def do_init(author: str, reset: bool, registry: bool, no_subscribe: bool...
function _registry_init (line 79) | def _registry_init(username: str, no_subscribe: bool) -> None:
FILE: aea/cli/install.py
function install (line 45) | def install(click_context: click.Context, requirement: Optional[str]) ->...
function do_install (line 51) | def do_install(ctx: Context, requirement: Optional[str] = None) -> None:
function _find_unsatisfiable_dependencies (line 86) | def _find_unsatisfiable_dependencies(dependencies: Dependencies) -> Depe...
function _install_from_requirement (line 103) | def _install_from_requirement(file: str, install_timeout: float = 300) -...
FILE: aea/cli/interact.py
function interact (line 70) | def interact(
function _load_packages (line 78) | def _load_packages(agent_identity: Identity) -> None:
function _run_interaction_channel (line 115) | def _run_interaction_channel() -> None:
function _process_envelopes (line 177) | def _process_envelopes(
function _check_for_incoming_envelope (line 201) | def _check_for_incoming_envelope(inbox: InBox, message_class: Type[Messa...
function _construct_message (line 211) | def _construct_message(
function _try_construct_envelope (line 233) | def _try_construct_envelope(
FILE: aea/cli/issue_certificates.py
function issue_certificates (line 43) | def issue_certificates(click_context: click.Context, password: Optional[...
function issue_certificates_ (line 50) | def issue_certificates_(
function _get_cert_requests (line 76) | def _get_cert_requests(
function _process_certificate (line 104) | def _process_certificate(
function _process_connection (line 160) | def _process_connection(
FILE: aea/cli/launch.py
function launch (line 40) | def launch(
function _launch_agents (line 50) | def _launch_agents(
FILE: aea/cli/list.py
function list_command (line 44) | def list_command(
function all_command (line 52) | def all_command(ctx: Context) -> None:
function connections (line 66) | def connections(ctx: Context) -> None:
function contracts (line 74) | def contracts(ctx: Context) -> None:
function protocols (line 82) | def protocols(ctx: Context) -> None:
function skills (line 90) | def skills(ctx: Context) -> None:
function list_agent_items (line 96) | def list_agent_items(ctx: Context, item_type: str) -> List[Dict]:
FILE: aea/cli/local_registry_sync.py
function local_registry_sync (line 43) | def local_registry_sync(ctx: Context) -> None:
function do_local_registry_update (line 49) | def do_local_registry_update(
function replace_package (line 70) | def replace_package(
function get_package_latest_public_id (line 90) | def get_package_latest_public_id(package_id: PackageId) -> PublicId:
function enlist_packages (line 104) | def enlist_packages(
FILE: aea/cli/login.py
function login (line 32) | def login(username: str, password: str) -> None:
function do_login (line 37) | def do_login(username: str, password: str) -> None:
FILE: aea/cli/logout.py
function logout (line 30) | def logout() -> None:
function do_logout (line 37) | def do_logout() -> None:
FILE: aea/cli/plugin.py
function with_plugins (line 30) | def with_plugins(plugins: Iterable[pkg_resources.EntryPoint]) -> Callable:
class BrokenCommand (line 58) | class BrokenCommand(click.Command):
method __init__ (line 69) | def __init__(self, name: str) -> None:
method invoke (line 88) | def invoke(self, ctx: click.Context) -> None:
method parse_args (line 98) | def parse_args(self, ctx: click.Context, args: List) -> List:
FILE: aea/cli/publish.py
function publish (line 69) | def publish(
function _validate_config (line 85) | def _validate_config(ctx: Context) -> None:
function _validate_pkp (line 99) | def _validate_pkp(private_key_paths: CRUDCollection) -> None:
class BaseRegistry (line 112) | class BaseRegistry(ABC):
method check_item_present (line 116) | def check_item_present(self, item_type_plural: str, public_id: PublicI...
method push_item (line 129) | def push_item(self, item_type_plural: str, public_id: PublicId) -> None:
method check_item_present_and_push (line 139) | def check_item_present_and_push(
class LocalRegistry (line 171) | class LocalRegistry(BaseRegistry):
method __init__ (line 174) | def __init__(self, ctx: Context):
method check_item_present (line 182) | def check_item_present(self, item_type_plural: str, public_id: PublicI...
method push_item (line 200) | def push_item(self, item_type_plural: str, public_id: PublicId) -> None:
class MixedRegistry (line 211) | class MixedRegistry(LocalRegistry):
method check_item_present (line 214) | def check_item_present(self, item_type_plural: str, public_id: PublicI...
class RemoteRegistry (line 239) | class RemoteRegistry(BaseRegistry):
method __init__ (line 242) | def __init__(self, ctx: Context) -> None:
method check_item_present (line 246) | def check_item_present(self, item_type_plural: str, public_id: PublicI...
method push_item (line 263) | def push_item(self, item_type_plural: str, public_id: PublicId) -> None:
function _check_dependencies_in_registry (line 274) | def _check_dependencies_in_registry(
function _save_agent_locally (line 287) | def _save_agent_locally(
function _publish_agent_remote (line 325) | def _publish_agent_remote(ctx: Context, push_missing: bool) -> None:
FILE: aea/cli/push.py
function push (line 43) | def push(click_context: click.Context, local: bool) -> None:
function connection (line 52) | def connection(ctx: Context, connection_id: PublicId) -> None:
function contract (line 63) | def contract(ctx: Context, contract_id: PublicId) -> None:
function protocol (line 74) | def protocol(ctx: Context, protocol_id: PublicId) -> None:
function skill (line 85) | def skill(ctx: Context, skill_id: PublicId) -> None:
function _save_item_locally (line 93) | def _save_item_locally(ctx: Context, item_type: str, item_id: PublicId) ...
FILE: aea/cli/register.py
function register (line 38) | def register(
function do_register (line 45) | def do_register(
FILE: aea/cli/registry/add.py
function fetch_package (line 30) | def fetch_package(obj_type: str, public_id: PublicId, cwd: str, dest: st...
FILE: aea/cli/registry/fetch.py
function fetch_agent (line 46) | def fetch_agent(
FILE: aea/cli/registry/login.py
function registry_login (line 27) | def registry_login(username: str, password: str) -> str:
function registry_reset_password (line 47) | def registry_reset_password(email: str) -> None:
FILE: aea/cli/registry/logout.py
function registry_logout (line 24) | def registry_logout() -> None:
FILE: aea/cli/registry/publish.py
function _compress (line 49) | def _compress(output_filename: str, *filepaths: str) -> None:
function publish_agent (line 57) | def publish_agent(ctx: Context) -> None:
FILE: aea/cli/registry/push.py
function _remove_pycache (line 49) | def _remove_pycache(source_dir: str) -> None:
function _compress_dir (line 55) | def _compress_dir(output_filename: str, source_dir: str) -> None:
function load_component_public_id (line 61) | def load_component_public_id(source_path: str, item_type: str) -> PublicId:
function check_package_public_id (line 70) | def check_package_public_id(
function push_item (line 102) | def push_item(ctx: Context, item_type: str, item_id: PublicId) -> None:
FILE: aea/cli/registry/registration.py
function register (line 28) | def register(
FILE: aea/cli/registry/utils.py
function get_auth_token (line 42) | def get_auth_token() -> str:
function request_api (line 52) | def request_api(
function _perform_registry_request (line 132) | def _perform_registry_request(
function download_file (line 153) | def download_file(url: str, cwd: str, timeout: float = FILE_DOWNLOAD_TIM...
function extract (line 177) | def extract(source: str, target: str) -> None:
function _rm_tarfiles (line 194) | def _rm_tarfiles() -> None:
function clean_tarfiles (line 202) | def clean_tarfiles(func: Callable) -> Callable:
function check_is_author_logged_in (line 218) | def check_is_author_logged_in(author_name: str) -> None:
function is_auth_token_present (line 236) | def is_auth_token_present() -> bool:
function get_package_meta (line 245) | def get_package_meta(
function get_latest_public_id_mixed (line 265) | def get_latest_public_id_mixed(
function get_latest_version_available_in_registry (line 298) | def get_latest_version_available_in_registry(
function list_missing_packages (line 338) | def list_missing_packages(
FILE: aea/cli/remove.py
function remove (line 66) | def remove(
function connection (line 78) | def connection(ctx: Context, connection_id: PublicId) -> None:
function contract (line 86) | def contract(ctx: Context, contract_id: PublicId) -> None:
function protocol (line 94) | def protocol(ctx: Context, protocol_id: PublicId) -> None:
function skill (line 102) | def skill(ctx: Context, skill_id: PublicId) -> None:
class ItemRemoveHelper (line 107) | class ItemRemoveHelper:
method __init__ (line 110) | def __init__(self, ctx: Context, ignore_non_vendor: bool = False) -> N...
method get_agent_dependencies_with_reverse_dependencies (line 116) | def get_agent_dependencies_with_reverse_dependencies(
method get_item_config (line 140) | def get_item_config(cls, package_id: PackageId) -> PackageConfiguration:
method get_component_directory (line 156) | def get_component_directory(package_id: PackageId) -> Path:
method _get_item_requirements (line 169) | def _get_item_requirements(
method get_item_dependencies_with_reverse_dependencies (line 192) | def get_item_dependencies_with_reverse_dependencies(
method is_present_in_agent_config (line 225) | def is_present_in_agent_config(self, package_id: PackageId) -> bool:
method check_remove (line 235) | def check_remove(
function remove_unused_component_configurations (line 268) | def remove_unused_component_configurations(ctx: Context) -> Generator:
class RemoveItem (line 300) | class RemoveItem:
method __init__ (line 303) | def __init__(
method get_current_item (line 347) | def get_current_item(self) -> PublicId:
method remove (line 361) | def remove(self) -> None:
method agent_items (line 370) | def agent_items(self) -> Set[PublicId]:
method is_required_by (line 375) | def is_required_by(self) -> bool:
method remove_item (line 379) | def remove_item(self) -> None:
method cwd (line 396) | def cwd(self) -> str:
method agent_config (line 401) | def agent_config(self) -> AgentConfig:
method agent_name (line 406) | def agent_name(self) -> str: # pragma: nocover
method _get_item_folder (line 410) | def _get_item_folder(self) -> Path:
method _remove_package (line 416) | def _remove_package(self) -> None:
method _remove_from_config (line 426) | def _remove_from_config(self) -> None:
method remove_dependencies (line 438) | def remove_dependencies(self) -> None:
function remove_item (line 458) | def remove_item(ctx: Context, item_type: str, item_id: PublicId) -> None:
FILE: aea/cli/remove_key.py
function remove_key (line 46) | def remove_key(click_context: click.Context, type_: str, connection: boo...
function _remove_private_key (line 51) | def _remove_private_key(
function _try_remove_key (line 67) | def _try_remove_key(ctx: Context, type_: str, connection: bool = False) ...
FILE: aea/cli/reset_password.py
function reset_password (line 31) | def reset_password(email: str) -> None:
function _do_password_reset (line 36) | def _do_password_reset(email: str) -> None:
FILE: aea/cli/run.py
function run (line 89) | def run(
function _calculate_connection_ids (line 116) | def _calculate_connection_ids(
function _profiling_context (line 137) | def _profiling_context(period: int) -> Generator:
function run_aea (line 172) | def run_aea(
function _prepare_environment (line 210) | def _prepare_environment(ctx: Context, env_file: str, is_install_deps: b...
function _build_aea (line 224) | def _build_aea(
FILE: aea/cli/scaffold.py
function scaffold (line 65) | def scaffold(
function connection (line 76) | def connection(ctx: Context, connection_name: str) -> None:
function contract (line 84) | def contract(ctx: Context, contract_name: str) -> None:
function protocol (line 93) | def protocol(ctx: Context, protocol_name: str, yes: bool) -> None:
function skill (line 106) | def skill(ctx: Context, skill_name: str) -> None:
function decision_maker_handler (line 113) | def decision_maker_handler(ctx: Context) -> None:
function error_handler (line 120) | def error_handler(ctx: Context) -> None:
function scaffold_item (line 126) | def scaffold_item(ctx: Context, item_type: str, item_name: str) -> None:
function _scaffold_dm_handler (line 221) | def _scaffold_dm_handler(ctx: Context) -> None:
function _scaffold_error_handler (line 232) | def _scaffold_error_handler(ctx: Context) -> None:
function _scaffold_non_package_item (line 239) | def _scaffold_non_package_item(
FILE: aea/cli/search.py
function search (line 56) | def search(click_context: click.Context, local: bool) -> None:
function connections (line 67) | def connections(ctx: Context, query: str, page: int) -> None:
function contracts (line 77) | def contracts(ctx: Context, query: str, page: int) -> None:
function protocols (line 87) | def protocols(ctx: Context, query: str, page: int) -> None:
function skills (line 97) | def skills(ctx: Context, query: str, page: int) -> None:
function agents (line 107) | def agents(ctx: Context, query: str, page: int) -> None:
function _is_invalid_item (line 113) | def _is_invalid_item(name: str, dir_path: Path, config_path: Path) -> bool:
function _get_details_from_dir (line 122) | def _get_details_from_dir(
function _search_items_locally (line 139) | def _search_items_locally(ctx: Context, item_type_plural: str) -> List[D...
function search_items (line 183) | def search_items(
function _output_search_results (line 215) | def _output_search_results(
FILE: aea/cli/transfer.py
function transfer (line 67) | def transfer(
function wait_tx_settled (line 109) | def wait_tx_settled(
function do_transfer (line 130) | def do_transfer(
FILE: aea/cli/upgrade.py
function upgrade (line 76) | def upgrade(
function connection (line 93) | def connection(ctx: Context, connection_public_id: PublicId) -> None:
function contract (line 101) | def contract(ctx: Context, contract_public_id: PublicId) -> None:
function protocol (line 109) | def protocol(ctx: Context, protocol_public_id: PublicId) -> None:
function skill (line 117) | def skill(ctx: Context, skill_public_id: PublicId) -> None:
function update_agent_config (line 122) | def update_agent_config(ctx: Context) -> None:
function update_aea_version_in_nonvendor_packages (line 142) | def update_aea_version_in_nonvendor_packages(cwd: str) -> None:
function upgrade_project (line 156) | def upgrade_project(ctx: Context) -> None: # pylint: disable=unused-arg...
class UpgraderException (line 226) | class UpgraderException(Exception):
class NotAddedException (line 230) | class NotAddedException(UpgraderException):
class AlreadyActualVersionException (line 234) | class AlreadyActualVersionException(UpgraderException):
method __init__ (line 237) | def __init__(self, version: str) -> None:
class IsRequiredException (line 243) | class IsRequiredException(UpgraderException):
method __init__ (line 246) | def __init__(self, required_by: Iterable[PackageId]) -> None:
class ProjectUpgrader (line 252) | class ProjectUpgrader:
method __init__ (line 257) | def __init__(self, ctx: Context, yes_by_default: bool = False) -> None:
method upgrade (line 264) | def upgrade(self) -> bool:
method _unpack_fetched_agent (line 313) | def _unpack_fetched_agent(self) -> None:
method _ask_user_if_wants_to_upgrade (line 321) | def _ask_user_if_wants_to_upgrade(
class ItemUpgrader (line 339) | class ItemUpgrader:
method __init__ (line 342) | def __init__(self, ctx: Context, item_type: str, item_public_id: Publi...
method get_current_item (line 367) | def get_current_item(self) -> PublicId:
method check_item_present (line 380) | def check_item_present(self) -> None:
method get_dependencies (line 393) | def get_dependencies(
method is_non_vendor (line 406) | def is_non_vendor(self) -> bool:
method check_in_requirements (line 413) | def check_in_requirements(self) -> None:
method check_is_non_vendor (line 418) | def check_is_non_vendor(self) -> None:
method check_not_at_latest_version (line 423) | def check_not_at_latest_version(self) -> str:
method check_upgrade_is_required (line 444) | def check_upgrade_is_required(self) -> str:
method remove_item (line 454) | def remove_item(self) -> None:
method add_item (line 466) | def add_item(self) -> None:
class InteractiveEjectHelper (line 471) | class InteractiveEjectHelper:
method __init__ (line 479) | def __init__(
method get_latest_versions (line 501) | def get_latest_versions(self) -> None:
method _reverse_adjacency_list (line 523) | def _reverse_adjacency_list(
method eject (line 534) | def eject(self) -> None:
method get_updated_inverse_adjacency_list (line 540) | def get_updated_inverse_adjacency_list(self) -> Dict[PackageId, Set[Pa...
method can_eject (line 549) | def can_eject(self) -> bool:
method _prompt (line 575) | def _prompt(
function _try_to_confirm (line 596) | def _try_to_confirm(message: str, yes_by_default: bool) -> bool:
function upgrade_item (line 614) | def upgrade_item(ctx: Context, item_type: str, item_public_id: PublicId)...
function _compute_replacements (line 655) | def _compute_replacements(
function _compute_upgraders_and_shared_deps_to_remove (line 670) | def _compute_upgraders_and_shared_deps_to_remove(
FILE: aea/cli/utils/click_utils.py
class ConnectionsOption (line 35) | class ConnectionsOption(click.Option):
method type_cast_value (line 38) | def type_cast_value(
class PublicIdParameter (line 71) | class PublicIdParameter(click.ParamType):
method __init__ (line 74) | def __init__( # pylint: disable=useless-super-delegation
method get_metavar (line 87) | def get_metavar(self, param: Any) -> str:
method convert (line 91) | def convert( # pylint: disable=inconsistent-return-statements
class AgentDirectory (line 101) | class AgentDirectory(click.Path):
method __init__ (line 104) | def __init__(self) -> None:
method get_metavar (line 110) | def get_metavar(self, param: Any) -> str:
method convert (line 114) | def convert(self, value: str, param: Any, ctx: click.Context) -> str: ...
function registry_flag (line 134) | def registry_flag(
function registry_path_option (line 161) | def registry_path_option(f: Callable) -> Callable:
class MutuallyExclusiveOption (line 171) | class MutuallyExclusiveOption(Option):
method __init__ (line 174) | def __init__(self, *args: Any, **kwargs: Any) -> None:
method handle_parse_result (line 186) | def handle_parse_result(
function password_option (line 206) | def password_option(confirmation_prompt: bool = False, **kwargs) -> Call...
FILE: aea/cli/utils/config.py
function try_to_load_agent_config (line 45) | def try_to_load_agent_config(
function _init_cli_config (line 85) | def _init_cli_config() -> None:
function update_cli_config (line 94) | def update_cli_config(dict_conf: Dict) -> None:
function get_or_create_cli_config (line 106) | def get_or_create_cli_config() -> Dict:
function set_cli_author (line 119) | def set_cli_author(click_context: click.Context) -> None:
function get_registry_path_from_cli_config (line 136) | def get_registry_path_from_cli_config() -> Optional[str]:
function load_item_config (line 142) | def load_item_config(item_type: str, package_path: Path) -> PackageConfi...
function dump_item_config (line 159) | def dump_item_config(
function update_item_config (line 179) | def update_item_config(item_type: str, package_path: Path, **kwargs: Any...
function validate_item_config (line 199) | def validate_item_config(item_type: str, package_path: Path) -> None:
function get_non_vendor_package_path (line 221) | def get_non_vendor_package_path(aea_project_path: Path) -> Set[Path]:
FILE: aea/cli/utils/context.py
class Context (line 46) | class Context:
method __init__ (line 51) | def __init__(self, cwd: str, verbosity: str, registry_path: Optional[s...
method registry_path (line 60) | def registry_path(self) -> str:
method skip_aea_validation (line 82) | def skip_aea_validation(self) -> bool:
method agent_loader (line 94) | def agent_loader(self) -> ConfigLoader:
method protocol_loader (line 101) | def protocol_loader(self) -> ConfigLoader:
method connection_loader (line 108) | def connection_loader(self) -> ConfigLoader:
method skill_loader (line 115) | def skill_loader(self) -> ConfigLoader:
method contract_loader (line 122) | def contract_loader(self) -> ConfigLoader:
method set_config (line 128) | def set_config(self, key: str, value: Any) -> None:
method _get_item_dependencies (line 139) | def _get_item_dependencies(item_type: str, public_id: PublicId) -> Dep...
method get_dependencies (line 160) | def get_dependencies(self) -> Dependencies:
method dump_agent_config (line 194) | def dump_agent_config(self) -> None:
FILE: aea/cli/utils/decorators.py
function _validate_config_consistency (line 50) | def _validate_config_consistency(ctx: Context, check_aea_version: bool =...
function _check_aea_project (line 120) | def _check_aea_project(
function check_aea_project (line 145) | def check_aea_project(
function _rmdirs (line 171) | def _rmdirs(*paths: str) -> None:
function _cast_ctx (line 182) | def _cast_ctx(context: Union[Context, click.core.Context]) -> Context:
function clean_after (line 201) | def clean_after(func: Callable) -> Callable:
FILE: aea/cli/utils/exceptions.py
class AEAConfigException (line 25) | class AEAConfigException(AEAException):
class InterruptInputException (line 29) | class InterruptInputException(Exception):
FILE: aea/cli/utils/formatting.py
function format_items (line 30) | def format_items(items: List[Dict]) -> str:
function retrieve_details (line 53) | def retrieve_details(name: str, loader: ConfigLoader, config_filepath: s...
function sort_items (line 68) | def sort_items(items: List[Dict]) -> List[Dict]:
FILE: aea/cli/utils/generic.py
function load_yaml (line 29) | def load_yaml(filepath: str) -> Dict:
function is_readme_present (line 47) | def is_readme_present(readme_path: str) -> bool:
FILE: aea/cli/utils/loggers.py
class ColorFormatter (line 35) | class ColorFormatter(logging.Formatter):
method format (line 47) | def format(self, record: logging.LogRecord) -> str:
function simple_verbosity_option (line 59) | def simple_verbosity_option(
function default_logging_config (line 99) | def default_logging_config(
FILE: aea/cli/utils/package_utils.py
function verify_private_keys_ctx (line 79) | def verify_private_keys_ctx(
function validate_package_name (line 109) | def validate_package_name(package_name: str) -> None:
function _is_valid_author_handle (line 124) | def _is_valid_author_handle(author: str) -> bool:
function _is_permitted_author_handle (line 143) | def _is_permitted_author_handle(author: str) -> bool:
function is_path_exist (line 155) | def is_path_exist(path: Union[str, Path]) -> bool:
function try_get_item_source_path (line 166) | def try_get_item_source_path(
function try_get_item_target_path (line 190) | def try_get_item_target_path(
function get_package_path (line 212) | def get_package_path(
function get_package_path_unified (line 237) | def get_package_path_unified(
function get_dotted_package_path_unified (line 268) | def get_dotted_package_path_unified(
function copy_package_directory (line 286) | def copy_package_directory(src: Path, dst: str) -> Path:
function find_item_locally (line 309) | def find_item_locally(
function find_item_in_distribution (line 368) | def find_item_in_distribution( # pylint: disable=unused-argument
function validate_author_name (line 418) | def validate_author_name(author: Optional[str] = None) -> str:
function is_fingerprint_correct (line 461) | def is_fingerprint_correct(
function register_item (line 477) | def register_item(ctx: Context, item_type: str, item_public_id: PublicId...
function is_item_present_unified (line 494) | def is_item_present_unified(
function is_item_present (line 520) | def is_item_present(
function get_item_id_present (line 559) | def get_item_id_present(
function get_item_public_id_by_author_name (line 580) | def get_item_public_id_by_author_name(
function get_items (line 599) | def get_items(agent_config: AgentConfig, item_type: str) -> Set[PublicId]:
function is_distributed_item (line 612) | def is_distributed_item(item_public_id: PublicId) -> bool:
function _override_ledger_configurations (line 627) | def _override_ledger_configurations(agent_config: AgentConfig) -> None:
function try_get_balance (line 644) | def try_get_balance( # pylint: disable=unused-argument
function get_wallet_from_context (line 670) | def get_wallet_from_context(ctx: Context, password: Optional[str] = None...
function update_item_public_id_in_init (line 684) | def update_item_public_id_in_init(
function update_references (line 709) | def update_references(
function create_symlink_vendor_to_local (line 744) | def create_symlink_vendor_to_local(
function create_symlink_packages_to_vendor (line 762) | def create_symlink_packages_to_vendor(ctx: Context) -> None:
function replace_all_import_statements (line 772) | def replace_all_import_statements(
function fingerprint_all (line 812) | def fingerprint_all(ctx: Context) -> None:
function update_aea_version_range (line 825) | def update_aea_version_range(package_configuration: PackageConfiguration...
FILE: aea/components/base.py
class Component (line 42) | class Component(ABC, WithLogger):
method __init__ (line 47) | def __init__(
method component_type (line 66) | def component_type(self) -> ComponentType:
method is_vendor (line 71) | def is_vendor(self) -> bool:
method prefix_import_path (line 76) | def prefix_import_path(self) -> str:
method component_id (line 81) | def component_id(self) -> ComponentId:
method public_id (line 86) | def public_id(self) -> PublicId:
method configuration (line 91) | def configuration(self) -> ComponentConfiguration:
method directory (line 98) | def directory(self) -> Path:
method directory (line 105) | def directory(self, path: Path) -> None:
method build_directory (line 112) | def build_directory(self) -> Optional[str]:
function load_aea_package (line 117) | def load_aea_package(configuration: ComponentConfiguration) -> None:
function perform_load_aea_package (line 134) | def perform_load_aea_package(
FILE: aea/components/loader.py
function component_type_to_class (line 39) | def component_type_to_class(component_type: ComponentType) -> Type[Compo...
function load_component_from_config (line 55) | def load_component_from_config( # type: ignore # pylint: disable=incon...
class AEAPackageNotFound (line 84) | class AEAPackageNotFound(Exception):
function _handle_error_while_loading_component_module_not_found (line 88) | def _handle_error_while_loading_component_module_not_found(
function _handle_error_while_loading_component_generic_error (line 168) | def _handle_error_while_loading_component_generic_error(
FILE: aea/components/utils.py
function _enlist_component_packages (line 34) | def _enlist_component_packages() -> Dict[str, List[Dict[str, str]]]:
function _populate_packages (line 56) | def _populate_packages(packages: dict) -> None: # pragma: nocover
FILE: aea/configurations/base.py
function dependencies_from_json (line 94) | def dependencies_from_json(obj: Dict[str, Dict]) -> Dependencies:
function dependencies_to_json (line 104) | def dependencies_to_json(dependencies: Dependencies) -> Dict[str, Dict]:
function _get_default_configuration_file_name_from_type (line 123) | def _get_default_configuration_file_name_from_type(
class ProtocolSpecificationParseError (line 143) | class ProtocolSpecificationParseError(Exception):
class Configuration (line 147) | class Configuration(JSONSerializable, ABC):
method __init__ (line 152) | def __init__(self) -> None:
method from_json (line 159) | def from_json(cls, obj: Dict) -> "Configuration":
method ordered_json (line 163) | def ordered_json(self) -> OrderedDict:
class PackageConfiguration (line 197) | class PackageConfiguration(Configuration, ABC):
method __init__ (line 228) | def __init__(
method name (line 271) | def name(self) -> str:
method name (line 276) | def name(self, value: SimpleIdOrStr) -> None:
method author (line 281) | def author(self) -> str:
method author (line 286) | def author(self, value: SimpleIdOrStr) -> None:
method aea_version (line 291) | def aea_version(self) -> str:
method aea_version (line 296) | def aea_version(self, new_aea_version: str) -> None:
method check_aea_version (line 301) | def check_aea_version(self) -> None:
method directory (line 310) | def directory(self) -> Optional[Path]:
method directory (line 315) | def directory(self, directory: Path) -> None:
method package_id (line 322) | def package_id(self) -> PackageId:
method parse_aea_version_specifier (line 327) | def parse_aea_version_specifier(aea_version_specifiers: str) -> Specif...
method aea_version_specifiers (line 345) | def aea_version_specifiers(self) -> SpecifierSet:
method public_id (line 350) | def public_id(self) -> PublicId:
method package_dependencies (line 355) | def package_dependencies(self) -> Set[ComponentId]:
method update (line 359) | def update(self, data: Dict, env_vars_friendly: bool = False) -> None:
method validate_config_data (line 375) | def validate_config_data(
method from_json (line 384) | def from_json(cls, obj: Dict) -> "PackageConfiguration":
method _create_or_update_from_json (line 389) | def _create_or_update_from_json(
method make_resulting_config_data (line 395) | def make_resulting_config_data(self, overrides: Dict) -> Dict:
method check_overrides_valid (line 408) | def check_overrides_valid(
method _check_overrides_corresponds_to_overridable (line 421) | def _check_overrides_corresponds_to_overridable(
method get_overridable (line 434) | def get_overridable(self) -> dict:
method _apply_params_to_instance (line 439) | def _apply_params_to_instance(
class ComponentConfiguration (line 458) | class ComponentConfiguration(PackageConfiguration, ABC):
method __init__ (line 465) | def __init__(
method build_directory (line 495) | def build_directory(self) -> Optional[str]:
method build_directory (line 500) | def build_directory(self, value: Optional[str]) -> None:
method component_type (line 505) | def component_type(self) -> ComponentType:
method component_id (line 510) | def component_id(self) -> ComponentId:
method prefix_import_path (line 515) | def prefix_import_path(self) -> str:
method is_abstract_component (line 522) | def is_abstract_component(self) -> bool:
method _check_configuration_consistency (line 526) | def _check_configuration_consistency(self, directory: Path) -> None:
method check_fingerprint (line 532) | def check_fingerprint(self, directory: Path) -> None:
method check_public_id_consistency (line 547) | def check_public_id_consistency(self, directory: Path) -> None:
class ConnectionConfig (line 561) | class ConnectionConfig(ComponentConfiguration):
method __init__ (line 585) | def __init__(
method package_dependencies (line 669) | def package_dependencies(self) -> Set[ComponentId]:
method is_abstract_component (line 682) | def is_abstract_component(self) -> bool:
method json (line 687) | def json(self) -> Dict:
method _create_or_update_from_json (line 722) | def _create_or_update_from_json(
class ProtocolConfig (line 777) | class ProtocolConfig(ComponentConfiguration):
method __init__ (line 787) | def __init__(
method json (line 826) | def json(self) -> Dict:
method _create_or_update_from_json (line 850) | def _create_or_update_from_json(
class SkillComponentConfiguration (line 877) | class SkillComponentConfiguration:
method __init__ (line 882) | def __init__(
method json (line 897) | def json(self) -> Dict:
method from_json (line 905) | def from_json(cls, obj: Dict) -> "SkillComponentConfiguration":
method _create_or_update_from_json (line 910) | def _create_or_update_from_json(
method _apply_params_to_instance (line 926) | def _apply_params_to_instance(
class SkillConfig (line 937) | class SkillConfig(ComponentConfiguration):
method __init__ (line 966) | def __init__(
method package_dependencies (line 1011) | def package_dependencies(self) -> Set[ComponentId]:
method is_abstract_component (line 1036) | def is_abstract_component(self) -> bool:
method json (line 1041) | def json(self) -> Dict:
method _create_or_update_from_json (line 1072) | def _create_or_update_from_json(
method get_overridable (line 1128) | def get_overridable(self) -> dict:
class AgentConfig (line 1150) | class AgentConfig(PackageConfiguration):
method __init__ (line 1219) | def __init__( # pylint: disable=too-many-arguments
method component_configurations (line 1322) | def component_configurations(self) -> Dict[ComponentId, Dict]:
method component_configurations (line 1327) | def component_configurations(self, d: Dict[ComponentId, Dict]) -> None:
method package_dependencies (line 1347) | def package_dependencies(self) -> Set[ComponentId]:
method private_key_paths_dict (line 1369) | def private_key_paths_dict(self) -> Dict[str, str]:
method connection_private_key_paths_dict (line 1376) | def connection_private_key_paths_dict(self) -> Dict[str, str]:
method component_configurations_json (line 1382) | def component_configurations_json(self) -> List[OrderedDict]:
method json (line 1396) | def json(self) -> Dict:
method _create_or_update_from_json (line 1462) | def _create_or_update_from_json(
method all_components_id (line 1560) | def all_components_id(self) -> List[ComponentId]:
method update (line 1575) | def update(self, data: Dict, env_vars_friendly: bool = False) -> None:
class SpeechActContentConfig (line 1607) | class SpeechActContentConfig(Configuration):
method __init__ (line 1612) | def __init__(self, **args: Any) -> None:
method json (line 1618) | def json(self) -> Dict:
method from_json (line 1623) | def from_json(cls, obj: Dict) -> "SpeechActContentConfig":
class ProtocolSpecification (line 1628) | class ProtocolSpecification(ProtocolConfig):
method __init__ (line 1633) | def __init__(
method protobuf_snippets (line 1658) | def protobuf_snippets(self) -> Dict:
method protobuf_snippets (line 1663) | def protobuf_snippets(self, protobuf_snippets: Dict) -> None:
method dialogue_config (line 1668) | def dialogue_config(self) -> Dict:
method dialogue_config (line 1673) | def dialogue_config(self, dialogue_config: Dict) -> None:
method json (line 1678) | def json(self) -> Dict:
method _create_or_update_from_json (line 1698) | def _create_or_update_from_json( # type: ignore
class ContractConfig (line 1728) | class ContractConfig(ComponentConfiguration):
method __init__ (line 1744) | def __init__(
method json (line 1781) | def json(self) -> Dict:
method _create_or_update_from_json (line 1806) | def _create_or_update_from_json(
function _compute_fingerprint (line 1841) | def _compute_fingerprint( # pylint: disable=unsubscriptable-object
function _compare_fingerprints (line 1872) | def _compare_fingerprints(
class AEAVersionError (line 1934) | class AEAVersionError(ValueError):
method __init__ (line 1937) | def __init__(
function _check_aea_version (line 1949) | def _check_aea_version(package_configuration: PackageConfiguration) -> N...
function _compare_public_ids (line 1960) | def _compare_public_ids(
function _get_public_id_from_file (line 1979) | def _get_public_id_from_file(
FILE: aea/configurations/data_types.py
class JSONSerializable (line 65) | class JSONSerializable(ABC):
method json (line 70) | def json(self) -> Dict:
method from_json (line 75) | def from_json(cls, obj: Dict) -> "JSONSerializable":
class PackageVersion (line 80) | class PackageVersion:
method __init__ (line 85) | def __init__(self, version_like: PackageVersionLike) -> None:
method is_latest (line 103) | def is_latest(self) -> bool:
method __str__ (line 107) | def __str__(self) -> str:
method __eq__ (line 111) | def __eq__(self, other: Any) -> bool:
method __lt__ (line 115) | def __lt__(self, other: Any) -> bool:
class PackageType (line 127) | class PackageType(Enum):
method to_plural (line 136) | def to_plural(self) -> str:
method __str__ (line 155) | def __str__(self) -> str:
class ComponentType (line 160) | class ComponentType(Enum):
method to_package_type (line 168) | def to_package_type(self) -> PackageType:
method plurals (line 173) | def plurals() -> Collection[str]: # pylint: disable=unsubscriptable-o...
method to_plural (line 184) | def to_plural(self) -> str:
method __str__ (line 201) | def __str__(self) -> str:
class PublicId (line 209) | class PublicId(JSONSerializable):
method __init__ (line 249) | def __init__(
method author (line 265) | def author(self) -> str:
method name (line 270) | def name(self) -> str:
method version (line 275) | def version(self) -> str:
method package_version (line 280) | def package_version(self) -> PackageVersion:
method to_any (line 284) | def to_any(self) -> "PublicId":
method same_prefix (line 288) | def same_prefix(self, other: "PublicId") -> bool:
method to_latest (line 292) | def to_latest(self) -> "PublicId":
method is_valid_str (line 297) | def is_valid_str(cls, public_id_string: str) -> bool:
method from_str (line 308) | def from_str(cls, public_id_string: str) -> "PublicId":
method try_from_str (line 336) | def try_from_str(cls, public_id_string: str) -> Optional["PublicId"]:
method from_uri_path (line 351) | def from_uri_path(cls, public_id_uri_path: str) -> "PublicId":
method to_uri_path (line 378) | def to_uri_path(self) -> str:
method json (line 389) | def json(self) -> Dict:
method from_json (line 394) | def from_json(cls, obj: Dict) -> "PublicId":
method __hash__ (line 402) | def __hash__(self) -> int:
method __str__ (line 406) | def __str__(self) -> str:
method __repr__ (line 412) | def __repr__(self) -> str:
method __eq__ (line 416) | def __eq__(self, other: Any) -> bool:
method __lt__ (line 425) | def __lt__(self, other: Any) -> bool:
class PackageId (line 459) | class PackageId:
method __init__ (line 475) | def __init__(
method package_type (line 488) | def package_type(self) -> PackageType:
method public_id (line 493) | def public_id(self) -> PublicId:
method author (line 498) | def author(self) -> str:
method name (line 503) | def name(self) -> str:
method version (line 508) | def version(self) -> str:
method package_prefix (line 513) | def package_prefix(self) -> Tuple[PackageType, str, str]:
method from_uri_path (line 518) | def from_uri_path(cls, package_id_uri_path: str) -> "PackageId":
method to_uri_path (line 547) | def to_uri_path(self) -> str:
method __hash__ (line 555) | def __hash__(self) -> int:
method __str__ (line 559) | def __str__(self) -> str:
method __repr__ (line 566) | def __repr__(self) -> str:
method __eq__ (line 570) | def __eq__(self, other: Any) -> bool:
method __lt__ (line 578) | def __lt__(self, other: Any) -> bool:
class ComponentId (line 583) | class ComponentId(PackageId):
method __init__ (line 598) | def __init__(
method component_type (line 611) | def component_type(self) -> ComponentType:
method component_prefix (line 616) | def component_prefix(self) -> PackageIdPrefix:
method same_prefix (line 622) | def same_prefix(self, other: "ComponentId") -> bool:
method prefix_import_path (line 630) | def prefix_import_path(self) -> str:
method json (line 637) | def json(self) -> Dict:
method from_json (line 642) | def from_json(cls, json_data: Dict) -> "ComponentId":
class PyPIPackageName (line 649) | class PyPIPackageName(RegexConstrainedString):
class GitRef (line 655) | class GitRef(RegexConstrainedString):
class Dependency (line 665) | class Dependency:
method __init__ (line 681) | def __init__(
method name (line 705) | def name(self) -> str:
method version (line 710) | def version(self) -> str:
method index (line 715) | def index(self) -> Optional[str]:
method git (line 720) | def git(self) -> Optional[str]:
method ref (line 725) | def ref(self) -> Optional[str]:
method _parse_version (line 730) | def _parse_version(version: Union[str, SpecifierSet]) -> SpecifierSet:
method from_json (line 740) | def from_json(cls, obj: Dict[str, Dict[str, str]]) -> "Dependency":
method to_json (line 757) | def to_json(self) -> Dict[str, Dict[str, str]]:
method get_pip_install_args (line 770) | def get_pip_install_args(self) -> List[str]:
method __str__ (line 786) | def __str__(self) -> str:
method __eq__ (line 790) | def __eq__(self, other: Any) -> bool:
class CRUDCollection (line 812) | class CRUDCollection(Generic[T]):
method __init__ (line 817) | def __init__(self) -> None:
method create (line 821) | def create(self, item_id: str, item: T) -> None:
method read (line 833) | def read(self, item_id: str) -> Optional[T]:
method update (line 842) | def update(self, item_id: str, item: T) -> None:
method delete (line 851) | def delete(self, item_id: str) -> None:
method read_all (line 856) | def read_all(self) -> List[Tuple[str, T]]:
method keys (line 862) | def keys(self) -> Set[str]:
FILE: aea/configurations/loader.py
class BaseConfigLoader (line 61) | class BaseConfigLoader:
method __init__ (line 64) | def __init__(self, schema_filename: str) -> None:
method validator (line 73) | def validator(self) -> ConfigValidator:
method validate (line 77) | def validate(self, json_data: Dict) -> None:
method required_fields (line 86) | def required_fields(self) -> List[str]:
class ConfigLoader (line 95) | class ConfigLoader(Generic[T], BaseConfigLoader):
method __init__ (line 98) | def __init__(
method configuration_class (line 116) | def configuration_class(self) -> Type[T]:
method validate (line 120) | def validate(self, json_data: Dict) -> None:
method load_protocol_specification (line 140) | def load_protocol_specification(
method load (line 181) | def load(self, file_pointer: TextIO) -> T:
method dump (line 192) | def dump(self, configuration: T, file_pointer: TextIO) -> None:
method from_configuration_type (line 204) | def from_configuration_type(
method _load_component_config (line 217) | def _load_component_config(self, file_pointer: TextIO) -> T:
method _load_from_json (line 222) | def _load_from_json(self, configuration_file_json: Dict) -> T:
method load_agent_config_from_json (line 232) | def load_agent_config_from_json(
method _get_component_configurations (line 262) | def _get_component_configurations(
method _load_agent_config (line 286) | def _load_agent_config(self, file_pointer: TextIO) -> AgentConfig:
method _dump_agent_config (line 291) | def _dump_agent_config(
method _dump_component_config (line 301) | def _dump_component_config(self, configuration: T, file_pointer: TextI...
method _process_component_section (line 307) | def _process_component_section(
class ConfigLoaders (line 331) | class ConfigLoaders:
method from_package_type (line 335) | def from_package_type(
function load_component_configuration (line 351) | def load_component_configuration(
function load_package_configuration (line 374) | def load_package_configuration(
function _load_configuration_object (line 401) | def _load_configuration_object(
FILE: aea/configurations/manager.py
class VariableDoesNotExist (line 78) | class VariableDoesNotExist(ValueError):
function _try_get_configuration_object_from_aea_config (line 86) | def _try_get_configuration_object_from_aea_config(
function _try_get_component_id_from_prefix (line 115) | def _try_get_component_id_from_prefix(
function handle_dotted_path (line 141) | def handle_dotted_path(
function find_component_directory_from_component_id (line 263) | def find_component_directory_from_component_id(
class AgentConfigManager (line 290) | class AgentConfigManager:
method __init__ (line 296) | def __init__(
method load_component_configuration (line 313) | def load_component_configuration(
method agent_config_file_path (line 337) | def agent_config_file_path(self) -> Path:
method _get_agent_config_file_path (line 342) | def _get_agent_config_file_path(cls, aea_project_path: Union[str, Path...
method load (line 347) | def load(
method _load_config_data (line 362) | def _load_config_data(cls, aea_project_path: Path) -> List[Dict]:
method set_variable (line 367) | def set_variable(self, path: VariablePath, value: JSON_TYPES) -> None:
method _make_dict_for_path_and_value (line 386) | def _make_dict_for_path_and_value(json_path: JsonPath, value: JSON_TYP...
method get_variable (line 403) | def get_variable(self, path: VariablePath) -> JSON_TYPES:
method _get_value_for_json_path (line 434) | def _get_value_for_json_path(
method _parse_path (line 459) | def _parse_path(self, path: VariablePath) -> Tuple[Optional[ComponentI...
method update_config (line 486) | def update_config(self, overrides: Dict) -> None:
method _filter_overrides (line 514) | def _filter_overrides(self, overrides: Dict) -> Dict:
method validate_current_config (line 523) | def validate_current_config(self) -> None:
method json (line 535) | def json(self) -> Dict:
method dump_config (line 539) | def dump_config(self) -> None:
method verify_private_keys (line 551) | def verify_private_keys(
method get_overridables (line 578) | def get_overridables(self) -> Tuple[Dict, Dict[ComponentId, Dict]]:
FILE: aea/configurations/pypi.py
function and_ (line 34) | def and_(s1: SpecifierSet, s2: SpecifierSet) -> SpecifierSet:
function _handle_compatibility_operator (line 39) | def _handle_compatibility_operator(
function is_satisfiable (line 79) | def is_satisfiable(specifier_set: SpecifierSet) -> bool:
function _handle_range_constraints (line 181) | def _handle_range_constraints(
function is_simple_dep (line 219) | def is_simple_dep(dep: Dependency) -> bool:
function to_set_specifier (line 231) | def to_set_specifier(dep: Dependency) -> SpecifierSet:
function merge_dependencies (line 236) | def merge_dependencies(dep1: Dependencies, dep2: Dependencies) -> Depend...
function merge_dependencies_list (line 297) | def merge_dependencies_list(*deps: Dependencies) -> Dependencies:
FILE: aea/configurations/utils.py
function replace_component_ids (line 39) | def replace_component_ids(
function _ (line 51) | def _(
function _ (line 114) | def _(
function _ (line 122) | def _(
function _ (line 144) | def _( # type: ignore
function _ (line 152) | def _(
function _replace_component_id (line 169) | def _replace_component_id(
function get_latest_component_id_from_prefix (line 192) | def get_latest_component_id_from_prefix(
FILE: aea/configurations/validation.py
function make_jsonschema_base_uri (line 50) | def make_jsonschema_base_uri(base_uri_path: Path) -> str:
function _get_path_to_custom_config_schema_from_type (line 64) | def _get_path_to_custom_config_schema_from_type(component_type: Componen...
class ExtraPropertiesError (line 80) | class ExtraPropertiesError(ValueError):
method __str__ (line 83) | def __str__(self) -> str: # pragma: nocover
method __repr__ (line 89) | def __repr__(self) -> str: # pragma: nocover
class CustomTypeChecker (line 94) | class CustomTypeChecker(TypeChecker):
method is_type (line 97) | def is_type(self, instance, type) -> bool: # type: ignore # pylint: d...
function own_additional_properties (line 104) | def own_additional_properties(validator, aP, instance, schema) -> Iterat...
class ConfigValidator (line 125) | class ConfigValidator:
method __init__ (line 128) | def __init__(self, schema_filename: str, env_vars_friendly: bool = Fal...
method split_component_id_and_config (line 150) | def split_component_id_and_config(
method validate_component_configuration (line 176) | def validate_component_configuration(
method validate (line 209) | def validate(self, json_data: Dict) -> None:
method _validate (line 228) | def _validate(self, instance: Dict) -> None:
method _build_message_from_errors (line 238) | def _build_message_from_errors(errors: List[jsonschema.ValidationError...
method validate_agent_components_configuration (line 249) | def validate_agent_components_configuration(
method required_fields (line 266) | def required_fields(self) -> List[str]:
function validate_data_with_pattern (line 275) | def validate_data_with_pattern(
function filter_data (line 345) | def filter_data(base: Any, updates: Any) -> Any:
FILE: aea/connections/base.py
class ConnectionStates (line 50) | class ConnectionStates(Enum):
class Connection (line 59) | class Connection(Component, ABC):
method __init__ (line 64) | def __init__(
method loop (line 108) | def loop(self) -> asyncio.AbstractEventLoop:
method _ensure_connected (line 113) | def _ensure_connected(self) -> None: # pragma: nocover
method _ensure_valid_envelope_for_external_comms (line 119) | def _ensure_valid_envelope_for_external_comms(envelope: "Envelope") ->...
method _connect_context (line 131) | def _connect_context(self) -> Generator:
method address (line 141) | def address(self) -> "Address": # pragma: nocover
method crypto_store (line 150) | def crypto_store(self) -> CryptoStore: # pragma: nocover
method has_crypto_store (line 157) | def has_crypto_store(self) -> bool: # pragma: nocover
method data_dir (line 162) | def data_dir(self) -> str: # pragma: nocover
method component_type (line 167) | def component_type(self) -> ComponentType: # pragma: nocover
method configuration (line 172) | def configuration(self) -> ConnectionConfig:
method restricted_to_protocols (line 179) | def restricted_to_protocols(self) -> Set[PublicId]: # pragma: nocover
method excluded_protocols (line 186) | def excluded_protocols(self) -> Set[PublicId]: # pragma: nocover
method state (line 193) | def state(self) -> ConnectionStates:
method state (line 198) | def state(self, value: ConnectionStates) -> None:
method connect (line 205) | async def connect(self) -> None:
method disconnect (line 209) | async def disconnect(self) -> None:
method send (line 213) | async def send(self, envelope: "Envelope") -> None:
method receive (line 222) | async def receive(self, *args: Any, **kwargs: Any) -> Optional["Envelo...
method from_dir (line 232) | def from_dir(
method from_config (line 260) | def from_config(
method is_connected (line 318) | def is_connected(self) -> bool: # pragma: nocover
method is_connecting (line 323) | def is_connecting(self) -> bool: # pragma: nocover
method is_disconnected (line 328) | def is_disconnected(self) -> bool: # pragma: nocover
class BaseSyncConnection (line 333) | class BaseSyncConnection(Connection):
method __init__ (line 342) | def __init__(
method _set_executor_pool (line 378) | def _set_executor_pool(self, max_workers: Optional[int] = None) -> None:
method _task_done_callback (line 388) | def _task_done_callback(self, task: asyncio.Task) -> None:
method _run_in_pool (line 399) | async def _run_in_pool(self, fn: Callable, *args: Any) -> Any:
method put_envelope (line 403) | def put_envelope(self, envelope: Optional["Envelope"]) -> None:
method connect (line 410) | async def connect(self) -> None:
method disconnect (line 419) | async def disconnect(self) -> None:
method send (line 432) | async def send(self, envelope: "Envelope") -> None:
method _send_wrapper (line 441) | def _send_wrapper(self, *args: Any) -> None:
method receive (line 446) | async def receive(self, *args: Any, **kwargs: Any) -> Optional["Envelo...
method start_main (line 451) | def start_main(self) -> None:
method main (line 463) | def main(self) -> None:
method on_connect (line 467) | def on_connect(self) -> None:
method on_disconnect (line 471) | def on_disconnect(self) -> None:
method on_send (line 475) | def on_send(self, envelope: "Envelope") -> None:
FILE: aea/connections/scaffold/connection.py
class MyScaffoldAsyncConnection (line 36) | class MyScaffoldAsyncConnection(Connection):
method __init__ (line 41) | def __init__(self, **kwargs: Any) -> None:
method connect (line 60) | async def connect(self) -> None:
method disconnect (line 68) | async def disconnect(self) -> None:
method send (line 76) | async def send(self, envelope: Envelope) -> None:
method receive (line 84) | async def receive(self, *args: Any, **kwargs: Any) -> Optional[Envelope]:
class MyScaffoldSyncConnection (line 95) | class MyScaffoldSyncConnection(BaseSyncConnection):
method __init__ (line 102) | def __init__(self, *args: Any, **kwargs: Any) -> None: # pragma: no c...
method main (line 123) | def main(self) -> None:
method on_send (line 149) | def on_send(self, envelope: Envelope) -> None:
method on_connect (line 157) | def on_connect(self) -> None:
method on_disconnect (line 165) | def on_disconnect(self) -> None:
FILE: aea/context/base.py
class AgentContext (line 34) | class AgentContext:
method __init__ (line 57) | def __init__(
method send_to_skill (line 114) | def send_to_skill(
method storage (line 132) | def storage(self) -> Optional[Storage]:
method data_dir (line 137) | def data_dir(self) -> str:
method shared_state (line 142) | def shared_state(self) -> Dict[str, Any]:
method identity (line 155) | def identity(self) -> Identity:
method agent_name (line 160) | def agent_name(self) -> str:
method addresses (line 165) | def addresses(self) -> Dict[str, Address]:
method public_keys (line 170) | def public_keys(self) -> Dict[str, str]:
method address (line 175) | def address(self) -> Address:
method public_key (line 180) | def public_key(self) -> str:
method connection_status (line 185) | def connection_status(self) -> MultiplexerStatus:
method outbox (line 190) | def outbox(self) -> OutBox:
method decision_maker_message_queue (line 195) | def decision_maker_message_queue(self) -> Queue:
method decision_maker_handler_context (line 200) | def decision_maker_handler_context(self) -> SimpleNamespace:
method task_manager (line 205) | def task_manager(self) -> TaskManager:
method search_service_address (line 210) | def search_service_address(self) -> Address:
method decision_maker_address (line 215) | def decision_maker_address(self) -> Address:
method default_ledger_id (line 220) | def default_ledger_id(self) -> str:
method currency_denominations (line 225) | def currency_denominations(self) -> Dict[str, str]:
method default_connection (line 230) | def default_connection(self) -> Optional[PublicId]:
method default_routing (line 235) | def default_routing(self) -> Dict[PublicId, PublicId]:
method namespace (line 240) | def namespace(self) -> SimpleNamespace:
FILE: aea/contracts/base.py
class Contract (line 42) | class Contract(Component):
method __init__ (line 48) | def __init__(self, contract_config: ContractConfig, **kwargs: Any) -> ...
method id (line 58) | def id(self) -> PublicId:
method configuration (line 63) | def configuration(self) -> ContractConfig:
method get_instance (line 70) | def get_instance(
method from_dir (line 87) | def from_dir(cls, directory: str, **kwargs: Any) -> "Contract":
method from_config (line 103) | def from_config(cls, configuration: ContractConfig, **kwargs: Any) -> ...
method get_deploy_transaction (line 134) | def get_deploy_transaction(
method get_raw_transaction (line 155) | def get_raw_transaction(
method get_raw_message (line 172) | def get_raw_message(
method get_state (line 189) | def get_state(
function _try_to_register_contract (line 206) | def _try_to_register_contract(configuration: ContractConfig) -> None:
function _load_contract_interfaces (line 233) | def _load_contract_interfaces(
FILE: aea/contracts/scaffold/contract.py
class MyScaffoldContract (line 30) | class MyScaffoldContract(Contract):
method get_raw_transaction (line 36) | def get_raw_transaction(
method get_raw_message (line 53) | def get_raw_message(
method get_state (line 70) | def get_state(
FILE: aea/crypto/base.py
class Crypto (line 32) | class Crypto(Generic[EntityClass], ABC):
method __init__ (line 37) | def __init__(
method generate_private_key (line 65) | def generate_private_key(cls) -> EntityClass:
method load_private_key_from_path (line 74) | def load_private_key_from_path(
method entity (line 86) | def entity(self) -> EntityClass:
method private_key (line 96) | def private_key(self) -> str:
method public_key (line 105) | def public_key(self) -> str:
method address (line 114) | def address(self) -> str:
method sign_message (line 122) | def sign_message(self, message: bytes, is_deprecated_mode: bool = Fals...
method sign_transaction (line 132) | def sign_transaction(self, transaction: JSONLike) -> JSONLike:
method load (line 141) | def load(cls, private_key_file: str, password: Optional[str] = None) -...
method dump (line 158) | def dump(self, private_key_file: str, password: Optional[str] = None) ...
method encrypt (line 174) | def encrypt(self, password: str) -> str:
method decrypt (line 184) | def decrypt(cls, keyfile_json: str, password: str) -> str:
class Helper (line 194) | class Helper(ABC):
method is_transaction_settled (line 199) | def is_transaction_settled(tx_receipt: JSONLike) -> bool:
method is_transaction_valid (line 209) | def is_transaction_valid(
method get_contract_address (line 229) | def get_contract_address(tx_receipt: JSONLike) -> Optional[str]:
method generate_tx_nonce (line 239) | def generate_tx_nonce(seller: Address, client: Address) -> str:
method get_address_from_public_key (line 250) | def get_address_from_public_key(cls, public_key: str) -> str:
method recover_message (line 260) | def recover_message(
method recover_public_keys_from_message (line 274) | def recover_public_keys_from_message(
method get_hash (line 288) | def get_hash(message: bytes) -> str:
method is_valid_address (line 298) | def is_valid_address(cls, address: Address) -> bool:
method load_contract_interface (line 307) | def load_contract_interface(cls, file_path: Path) -> Dict[str, str]:
class LedgerApi (line 316) | class LedgerApi(Helper, ABC):
method api (line 323) | def api(self) -> Any:
method get_balance (line 332) | def get_balance(self, address: Address) -> Optional[int]:
method get_state (line 343) | def get_state(
method get_transfer_transaction (line 358) | def get_transfer_transaction(
method send_signed_transaction (line 380) | def send_signed_transaction(self, tx_signed: JSONLike) -> Optional[str]:
method get_transaction_receipt (line 390) | def get_transaction_receipt(self, tx_digest: str) -> Optional[JSONLike]:
method get_transaction (line 399) | def get_transaction(self, tx_digest: str) -> Optional[JSONLike]:
method get_contract_instance (line 408) | def get_contract_instance(
method get_deploy_transaction (line 420) | def get_deploy_transaction(
method update_with_gas_estimate (line 436) | def update_with_gas_estimate(self, transaction: JSONLike) -> JSONLike:
class FaucetApi (line 445) | class FaucetApi(ABC):
method get_wealth (line 452) | def get_wealth(self, address: Address, url: Optional[str] = None) -> N...
FILE: aea/crypto/helpers.py
function try_validate_private_key_path (line 38) | def try_validate_private_key_path(
function create_private_key (line 65) | def create_private_key(
function try_generate_testnet_wealth (line 80) | def try_generate_testnet_wealth(
function private_key_verify (line 96) | def private_key_verify(
function make_certificate (line 140) | def make_certificate(
function get_wallet_from_agent_config (line 166) | def get_wallet_from_agent_config(
class DecryptError (line 188) | class DecryptError(ValueError):
method __init__ (line 193) | def __init__(self, msg: Optional[str] = None) -> None:
class KeyIsIncorrect (line 198) | class KeyIsIncorrect(ValueError):
function hex_to_bytes_for_key (line 202) | def hex_to_bytes_for_key(data: str) -> bytes:
FILE: aea/crypto/ledger_apis.py
class LedgerApis (line 74) | class LedgerApis:
method has_ledger (line 80) | def has_ledger(identifier: str) -> bool:
method get_api (line 85) | def get_api(cls, identifier: str) -> LedgerApi:
method get_balance (line 95) | def get_balance(cls, identifier: str, address: str) -> Optional[int]:
method get_transfer_transaction (line 112) | def get_transfer_transaction(
method send_signed_transaction (line 151) | def send_signed_transaction(cls, identifier: str, tx_signed: Any) -> O...
method get_transaction_receipt (line 168) | def get_transaction_receipt(cls, identifier: str, tx_digest: str) -> O...
method get_transaction (line 185) | def get_transaction(cls, identifier: str, tx_digest: str) -> Optional[...
method get_contract_address (line 202) | def get_contract_address(identifier: str, tx_receipt: Any) -> Optional...
method is_transaction_settled (line 219) | def is_transaction_settled(identifier: str, tx_receipt: Any) -> bool:
method is_transaction_valid (line 236) | def is_transaction_valid(
method generate_tx_nonce (line 264) | def generate_tx_nonce(identifier: str, seller: Address, client: Addres...
method recover_message (line 282) | def recover_message(
method get_hash (line 308) | def get_hash(identifier: str, message: bytes) -> str:
method is_valid_address (line 326) | def is_valid_address(identifier: str, address: Address) -> bool:
FILE: aea/crypto/plugin.py
class Plugin (line 47) | class Plugin:
method __init__ (line 52) | def __init__(self, group: str, entry_point: EntryPoint):
method _check_consistency (line 63) | def _check_consistency(self) -> None:
method name (line 96) | def name(self) -> str:
method group (line 101) | def group(self) -> str:
method attr (line 106) | def attr(self) -> str:
method entry_point_path (line 111) | def entry_point_path(self) -> str:
function _check_no_duplicates (line 117) | def _check_no_duplicates(plugins: List[EntryPoint]) -> None:
function _get_plugins (line 125) | def _get_plugins(group: str) -> List[Plugin]:
function _get_cryptos (line 137) | def _get_cryptos() -> List[Plugin]:
function _get_ledger_apis (line 142) | def _get_ledger_apis() -> List[Plugin]:
function _get_faucet_apis (line 147) | def _get_faucet_apis() -> List[Plugin]:
function _iter_plugins (line 152) | def _iter_plugins() -> Iterator[Plugin]:
function _register_plugin (line 160) | def _register_plugin(plugin: Plugin, is_raising_exception: bool = True) ...
function load_all_plugins (line 170) | def load_all_plugins(is_raising_exception: bool = True) -> None:
FILE: aea/crypto/registries/base.py
function _handle_malformed_string (line 38) | def _handle_malformed_string(class_name: str, malformed_id: str) -> None:
class ItemId (line 46) | class ItemId(RegexConstrainedString):
method name (line 52) | def name(self) -> str:
method _handle_no_match (line 56) | def _handle_no_match(self) -> None:
class EntryPoint (line 60) | class EntryPoint(Generic[ItemType], RegexConstrainedString):
method __init__ (line 75) | def __init__(self, seq: Union["EntryPoint", str]) -> None:
method import_path (line 89) | def import_path(self) -> str:
method class_name (line 94) | def class_name(self) -> str:
method _handle_no_match (line 98) | def _handle_no_match(self) -> None:
method load (line 101) | def load(self) -> Type[ItemType]:
class ItemSpec (line 113) | class ItemSpec(Generic[ItemType]):
method __init__ (line 116) | def __init__(
method make (line 136) | def make(self, **kwargs: Any) -> ItemType:
method get_class (line 149) | def get_class(self) -> Type[ItemType]:
class Registry (line 161) | class Registry(Generic[ItemType]):
method __init__ (line 164) | def __init__(self) -> None:
method supported_ids (line 169) | def supported_ids(self) -> Set[str]:
method register (line 173) | def register(
method make (line 196) | def make(
method make_cls (line 220) | def make_cls(
method has_spec (line 243) | def has_spec(self, item_id: ItemId) -> bool:
method _get_spec (line 252) | def _get_spec(
FILE: aea/crypto/wallet.py
class CryptoStore (line 33) | class CryptoStore:
method __init__ (line 38) | def __init__(
method public_keys (line 70) | def public_keys(self) -> Dict[str, str]:
method crypto_objects (line 75) | def crypto_objects(self) -> Dict[str, Crypto]:
method addresses (line 80) | def addresses(self) -> Dict[str, str]:
method private_keys (line 85) | def private_keys(self) -> Dict[str, str]:
class Wallet (line 90) | class Wallet:
method __init__ (line 101) | def __init__(
method public_keys (line 120) | def public_keys(self) -> Dict[str, str]:
method crypto_objects (line 125) | def crypto_objects(self) -> Dict[str, Crypto]:
method addresses (line 130) | def addresses(self) -> Dict[str, str]:
method private_keys (line 135) | def private_keys(self) -> Dict[str, str]:
method main_cryptos (line 140) | def main_cryptos(self) -> CryptoStore:
method connection_cryptos (line 145) | def connection_cryptos(self) -> CryptoStore:
method sign_message (line 149) | def sign_message(
method sign_transaction (line 170) | def sign_transaction(self, crypto_id: str, transaction: Any) -> Option...
FILE: aea/decision_maker/base.py
function _hash (line 38) | def _hash(access_code: str) -> str:
class OwnershipState (line 49) | class OwnershipState(ABC):
method set (line 53) | def set(self, **kwargs: Any) -> None:
method apply_delta (line 61) | def apply_delta(self, **kwargs: Any) -> None:
method is_initialized (line 72) | def is_initialized(self) -> bool:
method is_affordable_transaction (line 76) | def is_affordable_transaction(self, terms: Terms) -> bool:
method apply_transactions (line 85) | def apply_transactions(self, list_of_terms: List[Terms]) -> "Ownership...
method __copy__ (line 94) | def __copy__(self) -> "OwnershipState":
class Preferences (line 98) | class Preferences(ABC):
method set (line 102) | def set(self, **kwargs: Any) -> None:
method is_initialized (line 111) | def is_initialized(self) -> bool:
method marginal_utility (line 119) | def marginal_utility(self, ownership_state: OwnershipState, **kwargs: ...
method utility_diff_from_transaction (line 129) | def utility_diff_from_transaction(
method __copy__ (line 141) | def __copy__(self) -> "Preferences":
class ProtectedQueue (line 145) | class ProtectedQueue(Queue):
method __init__ (line 148) | def __init__(self, access_code: str) -> None:
method put (line 157) | def put( # pylint: disable=arguments-differ,arguments-renamed
method put_nowait (line 183) | def put_nowait( # pylint: disable=arguments-differ,arguments-renamed
method get (line 198) | def get(self, block: bool = True, timeout: Optional[float] = None) -> ...
method get_nowait (line 208) | def get_nowait(self) -> None:
method protected_get (line 216) | def protected_get(
class DecisionMakerHandler (line 236) | class DecisionMakerHandler(WithLogger, ABC):
method __init__ (line 243) | def __init__(
method agent_name (line 263) | def agent_name(self) -> str:
method identity (line 268) | def identity(self) -> Identity:
method wallet (line 273) | def wallet(self) -> Wallet:
method config (line 278) | def config(self) -> Dict[str, Any]:
method context (line 283) | def context(self) -> SimpleNamespace:
method message_out_queue (line 288) | def message_out_queue(self) -> AsyncFriendlyQueue:
method handle (line 293) | def handle(self, message: Message) -> None:
class DecisionMaker (line 301) | class DecisionMaker(WithLogger):
method __init__ (line 314) | def __init__(
method agent_name (line 335) | def agent_name(self) -> str:
method message_in_queue (line 340) | def message_in_queue(self) -> ProtectedQueue:
method message_out_queue (line 345) | def message_out_queue(self) -> AsyncFriendlyQueue:
method decision_maker_handler (line 350) | def decision_maker_handler(self) -> DecisionMakerHandler:
method start (line 354) | def start(self) -> None:
method stop (line 367) | def stop(self) -> None:
method execute (line 377) | def execute(self) -> None:
method handle (line 400) | def handle(self, message: Message) -> None:
FILE: aea/decision_maker/default.py
class DecisionMakerHandler (line 33) | class DecisionMakerHandler(BaseDecisionMakerHandler):
class SigningDialogues (line 45) | class SigningDialogues(BaseSigningDialogues):
method __init__ (line 48) | def __init__(self, self_address: Address, **kwargs: Any) -> None:
method __init__ (line 88) | def __init__(
method handle (line 109) | def handle(self, message: Message) -> None:
method _handle_signing_message (line 124) | def _handle_signing_message(self, signing_msg: SigningMessage) -> None:
method _handle_message_signing (line 155) | def _handle_message_signing(
method _handle_transaction_signing (line 188) | def _handle_transaction_signing(
FILE: aea/decision_maker/gop.py
class GoalPursuitReadiness (line 51) | class GoalPursuitReadiness:
class Status (line 56) | class Status(Enum):
method __init__ (line 69) | def __init__(self) -> None:
method is_ready (line 74) | def is_ready(self) -> bool:
method update (line 78) | def update(self, new_status: Status) -> None:
class OwnershipState (line 87) | class OwnershipState(BaseOwnershipState):
method __init__ (line 92) | def __init__(self) -> None:
method set (line 97) | def set( # pylint: disable=arguments-differ,arguments-renamed
method apply_delta (line 122) | def apply_delta( # pylint: disable=arguments-differ,arguments-renamed
method is_initialized (line 171) | def is_initialized(self) -> bool:
method amount_by_currency_id (line 179) | def amount_by_currency_id(self) -> CurrencyHoldings:
method quantities_by_good_id (line 186) | def quantities_by_good_id(self) -> GoodHoldings:
method is_affordable_transaction (line 192) | def is_affordable_transaction(self, terms: Terms) -> bool:
method is_affordable (line 227) | def is_affordable(self, terms: Terms) -> bool:
method update (line 243) | def update(self, terms: Terms) -> None:
method apply_transactions (line 259) | def apply_transactions(self, list_of_terms: List[Terms]) -> "Ownership...
method __copy__ (line 272) | def __copy__(self) -> "OwnershipState":
class Preferences (line 281) | class Preferences(BasePreferences):
method __init__ (line 286) | def __init__(self) -> None:
method set (line 291) | def set( # pylint: disable=arguments-differ,arguments-renamed
method is_initialized (line 317) | def is_initialized(self) -> bool:
method exchange_params_by_currency_id (line 328) | def exchange_params_by_currency_id(self) -> ExchangeParams:
method utility_params_by_good_id (line 335) | def utility_params_by_good_id(self) -> UtilityParams:
method logarithmic_utility (line 341) | def logarithmic_utility(self, quantities_by_good_id: GoodHoldings) -> ...
method linear_utility (line 355) | def linear_utility(self, amount_by_currency_id: CurrencyHoldings) -> f...
method utility (line 368) | def utility(
method marginal_utility (line 386) | def marginal_utility( # pylint: disable=arguments-differ,arguments-re...
method utility_diff_from_transaction (line 432) | def utility_diff_from_transaction(
method is_utility_enhancing (line 456) | def is_utility_enhancing(
method __copy__ (line 477) | def __copy__(self) -> "Preferences":
class DecisionMakerHandler (line 488) | class DecisionMakerHandler(BaseDecisionMakerHandler):
class SigningDialogues (line 514) | class SigningDialogues(BaseSigningDialogues):
method __init__ (line 517) | def __init__(self, self_address: Address, **kwargs: Any) -> None:
class StateUpdateDialogues (line 552) | class StateUpdateDialogues(BaseStateUpdateDialogues):
method __init__ (line 555) | def __init__(self, self_address: Address, **kwargs: Any) -> None:
method __init__ (line 592) | def __init__(
method handle (line 615) | def handle(self, message: Message) -> None:
method _handle_signing_message (line 632) | def _handle_signing_message(self, signing_msg: SigningMessage) -> None:
method _handle_message_signing (line 671) | def _handle_message_signing(
method _handle_transaction_signing (line 705) | def _handle_transaction_signing(
method _is_acceptable_for_signing (line 735) | def _is_acceptable_for_signing(self, signing_msg: SigningMessage) -> b...
method _handle_state_update_message (line 747) | def _handle_state_update_message(
FILE: aea/decision_maker/scaffold.py
class DecisionMakerHandler (line 30) | class DecisionMakerHandler(BaseDecisionMakerHandler):
method __init__ (line 33) | def __init__(
method handle (line 55) | def handle(self, message: Message) -> None:
FILE: aea/error_handler/base.py
class AbstractErrorHandler (line 27) | class AbstractErrorHandler(ABC):
method __init__ (line 32) | def __init__(self, **kwargs: Any):
method config (line 37) | def config(self) -> Dict[str, Any]:
method send_unsupported_protocol (line 42) | def send_unsupported_protocol(self, envelope: Envelope, logger: Logger...
method send_decoding_error (line 52) | def send_decoding_error(
method send_no_active_handler (line 65) | def send_no_active_handler(
FILE: aea/error_handler/default.py
class ErrorHandler (line 29) | class ErrorHandler(AbstractErrorHandler):
method __init__ (line 38) | def __init__(self, **kwargs: Any):
method send_unsupported_protocol (line 45) | def send_unsupported_protocol(self, envelope: Envelope, logger: Logger...
method send_decoding_error (line 57) | def send_decoding_error(
method send_no_active_handler (line 72) | def send_no_active_handler(
FILE: aea/error_handler/scaffold.py
class ErrorHandler (line 27) | class ErrorHandler(AbstractErrorHandler):
method send_unsupported_protocol (line 30) | def send_unsupported_protocol(self, envelope: Envelope, logger: Logger...
method send_decoding_error (line 39) | def send_decoding_error(
method send_no_active_handler (line 51) | def send_no_active_handler(
FILE: aea/exceptions.py
class AEAException (line 26) | class AEAException(Exception):
class AEAPackageLoadingError (line 30) | class AEAPackageLoadingError(AEAException):
class AEASetupError (line 34) | class AEASetupError(AEAException):
class AEATeardownError (line 38) | class AEATeardownError(AEAException):
class AEAActException (line 42) | class AEAActException(AEAException):
class AEAHandleException (line 46) | class AEAHandleException(AEAException):
class AEAInstantiationException (line 50) | class AEAInstantiationException(AEAException):
class AEAPluginError (line 54) | class AEAPluginError(AEAException):
class AEAEnforceError (line 58) | class AEAEnforceError(AEAException):
class AEAValidationError (line 62) | class AEAValidationError(AEAException):
class AEAComponentLoadException (line 66) | class AEAComponentLoadException(AEAException):
class AEAWalletNoAddressException (line 70) | class AEAWalletNoAddressException(AEAException):
class _StopRuntime (line 74) | class _StopRuntime(Exception):
method __init__ (line 82) | def __init__(self, reraise: Optional[Exception] = None) -> None:
function enforce (line 92) | def enforce(
function parse_exception (line 108) | def parse_exception(exception: Exception, limit: int = -1) -> str:
FILE: aea/helpers/acn/agent_record.py
class AgentRecord (line 28) | class AgentRecord:
method __init__ (line 44) | def __init__(
method _check_validity (line 84) | def _check_validity(self) -> str:
method address (line 113) | def address(self) -> str:
method public_key (line 118) | def public_key(self) -> str:
method representative_public_key (line 123) | def representative_public_key(self) -> str:
method signature (line 128) | def signature(self) -> str:
method message (line 133) | def message(self) -> bytes:
method identifier (line 138) | def identifier(self) -> SimpleIdOrStr:
method ledger_id (line 143) | def ledger_id(self) -> SimpleIdOrStr:
method not_before (line 148) | def not_before(self) -> str:
method not_after (line 153) | def not_after(self) -> str:
method message_format (line 158) | def message_format(self) -> str:
method __str__ (line 162) | def __str__(self) -> str: # pragma: no cover
method from_cert_request (line 167) | def from_cert_request(
FILE: aea/helpers/acn/uri.py
class Uri (line 26) | class Uri:
method __init__ (line 31) | def __init__(
method __str__ (line 49) | def __str__(self) -> str:
method __repr__ (line 53) | def __repr__(self) -> str: # pragma: no cover
method host (line 58) | def host(self) -> str:
method port (line 63) | def port(self) -> int:
FILE: aea/helpers/async_friendly_queue.py
class AsyncFriendlyQueue (line 28) | class AsyncFriendlyQueue(queue.Queue):
method __init__ (line 31) | def __init__(self, *args: Any, **kwargs: Any) -> None:
method put (line 36) | def put( # pylint: disable=signature-differs
method _set_waiter (line 54) | def _set_waiter(waiter: Any) -> None:
method get (line 60) | def get( # pylint: disable=signature-differs
method async_wait (line 72) | async def async_wait(self) -> None:
method async_get (line 90) | async def async_get(self) -> Any:
FILE: aea/helpers/async_utils.py
function ensure_list (line 60) | def ensure_list(value: Any) -> List:
class AsyncState (line 74) | class AsyncState:
method __init__ (line 77) | def __init__(
method set (line 90) | def set(self, state: Any) -> None:
method add_callback (line 103) | def add_callback(self, callback_fn: Callable[[Any], None]) -> None:
method get (line 111) | def get(self) -> Any:
method _state_changed (line 115) | def _state_changed(self, state: Any) -> None:
method _remove_watcher (line 132) | def _remove_watcher(self, watcher: Future) -> None:
method _watcher_result_callback (line 140) | def _watcher_result_callback(watcher: Future) -> Callable:
method wait (line 150) | async def wait(self, state_or_states: Union[Any, Sequence[Any]]) -> Tu...
method transit (line 171) | def transit(
class PeriodicCaller (line 194) | class PeriodicCaller:
method __init__ (line 201) | def __init__(
method _callback (line 225) | def _callback(self) -> None:
method _schedule_call (line 236) | def _schedule_call(self) -> None:
method start (line 245) | def start(self) -> None:
method stop (line 252) | def stop(self) -> None:
class AnotherThreadTask (line 261) | class AnotherThreadTask:
method __init__ (line 268) | def __init__(self, coro: Coroutine[Any, Any, Any], loop: AbstractEvent...
method _get_task_result (line 280) | async def _get_task_result(self) -> Any:
method result (line 289) | def result(self, timeout: Optional[float] = None) -> Any:
method cancel (line 298) | def cancel(self) -> None:
method done (line 305) | def done(self) -> bool:
class ThreadedAsyncRunner (line 310) | class ThreadedAsyncRunner(Thread):
method __init__ (line 313) | def __init__(self, loop: Optional[AbstractEventLoop] = None) -> None:
method start (line 324) | def start(self) -> None:
method run (line 331) | def run(self) -> None:
method call (line 338) | def call(self, coro: Coroutine[Any, Any, Any]) -> Any:
method stop (line 347) | def stop(self) -> None:
class Runnable (line 367) | class Runnable(ABC):
method __init__ (line 376) | def __init__(
method start (line 398) | def start(self) -> bool:
method _thread_target (line 431) | def _thread_target(self) -> None:
method _set_loop (line 444) | def _set_loop(self) -> None:
method _set_task (line 455) | def _set_task(self) -> None:
method _run_wrapper (line 462) | async def _run_wrapper(self) -> None:
method is_running (line 476) | def is_running(self) -> bool: # pragma: nocover
method run (line 481) | async def run(self) -> Any:
method wait_completed (line 484) | def wait_completed(
method _wait_sync (line 508) | def _wait_sync(self, timeout: Optional[float] = None) -> None:
method _wait_async (line 532) | def _wait_async(self, timeout: Optional[float] = None) -> Awaitable:
method _wait (line 563) | async def _wait(self) -> None:
method stop (line 576) | def stop(self, force: bool = False) -> None:
method _task_cancel (line 588) | def _task_cancel(self, force: bool = False) -> None:
method start_and_wait_completed (line 599) | def start_and_wait_completed(
FILE: aea/helpers/base.py
function _get_module (line 71) | def _get_module(spec: ModuleSpec) -> Optional[types.ModuleType]:
function locate (line 81) | def locate(path: str) -> Any:
function load_module (line 118) | def load_module(dotted_path: str, filepath: Path) -> types.ModuleType:
function load_env_file (line 136) | def load_env_file(env_file: str) -> None:
function sigint_crossplatform (line 145) | def sigint_crossplatform(process: subprocess.Popen) -> None: # pragma: ...
function win_popen_kwargs (line 166) | def win_popen_kwargs() -> dict:
function send_control_c (line 186) | def send_control_c(
class RegexConstrainedString (line 206) | class RegexConstrainedString(UserString):
method __init__ (line 217) | def __init__(self, seq: Union[UserString, str]) -> None:
method _handle_no_match (line 224) | def _handle_no_match(self) -> None:
class SimpleId (line 232) | class SimpleId(RegexConstrainedString):
function cd (line 270) | def cd(path: PathLike) -> Generator: # pragma: nocover
function get_logger_method (line 280) | def get_logger_method(fn: Callable, logger_method: Union[str, Callable])...
function try_decorator (line 300) | def try_decorator(
class MaxRetriesError (line 333) | class MaxRetriesError(Exception):
function retry_decorator (line 337) | def retry_decorator(
function exception_log_and_reraise (line 376) | def exception_log_and_reraise(log_method: Callable, message: str) -> Gen...
function _is_dict_like (line 391) | def _is_dict_like(obj: Any) -> bool:
function recursive_update (line 401) | def recursive_update(
function _get_aea_logger_name_prefix (line 451) | def _get_aea_logger_name_prefix(module_name: str, agent_name: str) -> str:
function find_topological_order (line 476) | def find_topological_order(adjacency_list: Dict[T, Set[T]]) -> List[T]:
function reachable_nodes (line 520) | def reachable_nodes(
class cached_property (line 557) | class cached_property: # pragma: nocover
method __init__ (line 560) | def __init__(self, func: Callable) -> None:
method __set_name__ (line 567) | def __set_name__(self, _: Any, name: Any) -> None:
method __get__ (line 577) | def __get__(self, instance: Any, _: Optional[Any] = None) -> Any:
function ensure_dir (line 611) | def ensure_dir(dir_path: str) -> None:
function dict_to_path_value (line 619) | def dict_to_path_value(
function parse_datetime_from_str (line 633) | def parse_datetime_from_str(date_string: str) -> datetime.datetime:
class CertRequest (line 640) | class CertRequest:
method __init__ (line 643) | def __init__(
method _parse_datetime (line 679) | def _parse_datetime(cls, obj: Union[str, datetime.datetime]) -> dateti...
method _check_validation_boundaries (line 696) | def _check_validation_boundaries(self) -> None:
method _parse_public_key (line 708) | def _parse_public_key(self, public_key_str: str) -> None:
method public_key (line 735) | def public_key(self) -> Optional[str]:
method ledger_id (line 740) | def ledger_id(self) -> str:
method key_identifier (line 745) | def key_identifier(self) -> Optional[str]:
method identifier (line 750) | def identifier(self) -> str:
method not_before_string (line 755) | def not_before_string(self) -> str:
method not_after_string (line 760) | def not_after_string(self) -> str:
method not_before (line 765) | def not_before(self) -> datetime.datetime:
method not_after (line 770) | def not_after(self) -> datetime.datetime:
method message_format (line 775) | def message_format(self) -> str:
method save_path (line 780) | def save_path(self) -> Path:
method get_absolute_save_path (line 791) | def get_absolute_save_path(self, path_prefix: Optional[PathLike] = Non...
method public_key_or_identifier (line 811) | def public_key_or_identifier(self) -> str:
method get_message (line 825) | def get_message(self, public_key: str) -> bytes:
method construct_message (line 837) | def construct_message(
method get_signature (line 863) | def get_signature(self, path_prefix: Optional[PathLike] = None) -> str:
method json (line 882) | def json(self) -> Dict:
method from_json (line 896) | def from_json(cls, obj: Dict) -> "CertRequest":
method __eq__ (line 903) | def __eq__(self, other: Any) -> bool:
function compute_specifier_from_version (line 918) | def compute_specifier_from_version(version: Version) -> str:
function decorator_with_optional_params (line 943) | def decorator_with_optional_params(decorator: Callable) -> Callable:
function delete_directory_contents (line 977) | def delete_directory_contents(directory: Path) -> None:
function prepend_if_not_absolute (line 987) | def prepend_if_not_absolute(path: PathLike, prefix: PathLike) -> PathLike:
FILE: aea/helpers/env_vars.py
function is_env_variable (line 34) | def is_env_variable(value: Any) -> bool:
function replace_with_env_var (line 42) | def replace_with_env_var(
function apply_env_variables (line 72) | def apply_env_variables(
function convert_value_str_to_type (line 98) | def convert_value_str_to_type(value: str, type_str: str) -> JSON_TYPES:
FILE: aea/helpers/exception_policy.py
class ExceptionPolicyEnum (line 24) | class ExceptionPolicyEnum(Enum):
FILE: aea/helpers/exec_timeout.py
class TimeoutResult (line 37) | class TimeoutResult:
method __init__ (line 40) | def __init__(self) -> None:
method set_cancelled_by_timeout (line 44) | def set_cancelled_by_timeout(self) -> None:
method is_cancelled_by_timeout (line 48) | def is_cancelled_by_timeout(self) -> bool:
class TimeoutException (line 57) | class TimeoutException(BaseException):
class BaseExecTimeout (line 65) | class BaseExecTimeout(ABC):
method __init__ (line 74) | def __init__(self, timeout: float = 0.0) -> None:
method _on_timeout (line 83) | def _on_timeout(self, *args: Any, **kwargs: Any) -> None:
method __enter__ (line 87) | def __enter__(self) -> TimeoutResult:
method __exit__ (line 98) | def __exit__(
method _set_timeout_watch (line 115) | def _set_timeout_watch(self) -> None:
method _remove_timeout_watch (line 124) | def _remove_timeout_watch(self) -> None:
class ExecTimeoutSigAlarm (line 133) | class ExecTimeoutSigAlarm(BaseExecTimeout): # pylint: disable=too-few-p...
method _set_timeout_watch (line 140) | def _set_timeout_watch(self) -> None:
method _remove_timeout_watch (line 145) | def _remove_timeout_watch(self) -> None:
class ExecTimeoutThreadGuard (line 150) | class ExecTimeoutThreadGuard(BaseExecTimeout):
method __init__ (line 166) | def __init__(self, timeout: float = 0.0) -> None:
method start (line 178) | def start(cls) -> None:
method stop (line 198) | def stop(cls, force: bool = False) -> None:
method _set_stopped_future (line 220) | def _set_stopped_future(cls) -> None:
method _supervisor_event_loop (line 227) | def _supervisor_event_loop(cls) -> None:
method _guard_task (line 237) | async def _guard_task(self) -> None:
method _set_thread_exception (line 243) | def _set_thread_exception(thread_id: int, exception_class: Type[Except...
method _set_timeout_watch (line 249) | def _set_timeout_watch(self) -> None:
method _remove_timeout_watch (line 267) | def _remove_timeout_watch(self) -> None:
FILE: aea/helpers/file_io.py
function _encode (line 40) | def _encode(e: Envelope, separator: bytes = SEPARATOR) -> bytes:
function _decode (line 54) | def _decode(e: bytes, separator: bytes = SEPARATOR) -> Envelope:
function lock_file (line 83) | def lock_file(
function write_envelope (line 104) | def write_envelope(
function write_with_lock (line 116) | def write_with_lock(
function envelope_from_bytes (line 125) | def envelope_from_bytes(
FILE: aea/helpers/file_lock.py
function lock (line 38) | def lock(file: IO, flags: int) -> None:
function unlock (line 45) | def unlock(file: IO) -> None:
function lock (line 56) | def lock(file: IO, flags: int) -> None:
function unlock (line 60) | def unlock(file: IO) -> None:
FILE: aea/helpers/http_requests.py
function add_default_timeout (line 42) | def add_default_timeout(fn: Callable, timeout: float) -> Callable:
FILE: aea/helpers/install_dependency.py
function install_dependency (line 31) | def install_dependency(
function install_dependencies (line 55) | def install_dependencies(
function call_pip (line 78) | def call_pip(pip_args: List[str], timeout: float = 300, retry: bool = Fa...
function run_install_subprocess (line 102) | def run_install_subprocess(
FILE: aea/helpers/io.py
function open_file (line 55) | def open_file(
FILE: aea/helpers/ipfs/base.py
function _dos2unix (line 42) | def _dos2unix(file_content: bytes) -> bytes:
function _is_text (line 52) | def _is_text(file_path: str) -> bool:
function _read (line 62) | def _read(file_path: str) -> bytes:
function chunks (line 73) | def chunks(data: Sized, size: int) -> Generator:
class IPFSHashOnly (line 79) | class IPFSHashOnly:
method get (line 85) | def get(self, file_path: str) -> str:
method _make_unixfs_pb2 (line 98) | def _make_unixfs_pb2(cls, data: bytes) -> bytes:
method _pb_serialize_data (line 109) | def _pb_serialize_data(cls, data: bytes) -> bytes:
method _pb_serialize_file (line 116) | def _pb_serialize_file(cls, data: bytes) -> bytes:
method _generate_multihash_bytes (line 141) | def _generate_multihash_bytes(pb_data: bytes) -> bytes:
method _generate_multihash (line 148) | def _generate_multihash(cls, pb_data: bytes) -> str:
method _generate_hash (line 162) | def _generate_hash(cls, data: bytes) -> str:
method _serialize (line 168) | def _serialize(cls, pb_node: PBNode) -> bytes: # type: ignore
FILE: aea/helpers/ipfs/utils.py
function _protobuf_python_implementation (line 27) | def _protobuf_python_implementation() -> Generator:
FILE: aea/helpers/logging.py
function get_logger (line 27) | def get_logger(module_path: str, agent_name: str) -> Logger:
class AgentLoggerAdapter (line 33) | class AgentLoggerAdapter(LoggerAdapter):
method __init__ (line 36) | def __init__(self, logger: Logger, agent_name: str) -> None:
method process (line 45) | def process(
class WithLogger (line 52) | class WithLogger:
method __init__ (line 57) | def __init__(
method logger (line 72) | def logger(self) -> Logger:
method logger (line 81) | def logger(self, logger: Optional[Logger]) -> None:
FILE: aea/helpers/multiaddr/base.py
class IdentityHash (line 47) | class IdentityHash:
method __init__ (line 52) | def __init__(self) -> None:
method update (line 56) | def update(self, input_data: bytes) -> None:
method digest (line 64) | def digest(self) -> bytes:
function _pad_scalar (line 77) | def _pad_scalar(scalar: bytes) -> bytes:
function _pad_hex (line 82) | def _pad_hex(hexed: str) -> str:
function _hex_to_bytes (line 87) | def _hex_to_bytes(hexed: str) -> bytes:
class MultiAddr (line 92) | class MultiAddr:
method __init__ (line 95) | def __init__(
method compute_peerid (line 142) | def compute_peerid(public_key: str) -> str:
method from_string (line 163) | def from_string(cls, maddr: str) -> "MultiAddr":
method public_key (line 177) | def public_key(self) -> str:
method peer_id (line 182) | def peer_id(self) -> str:
method host (line 187) | def host(self) -> str:
method port (line 192) | def port(self) -> int:
method format (line 196) | def format(self) -> str:
method __str__ (line 200) | def __str__(self) -> str:
FILE: aea/helpers/multiple_executor.py
class ExecutorExceptionPolicies (line 50) | class ExecutorExceptionPolicies(Enum):
class AbstractExecutorTask (line 58) | class AbstractExecutorTask(ABC):
method __init__ (line 61) | def __init__(self) -> None:
method future (line 66) | def future(self) -> Optional[TaskAwaitable]:
method future (line 71) | def future(self, future: TaskAwaitable) -> None:
method start (line 76) | def start(self) -> Tuple[Callable, Sequence[Any]]:
method stop (line 80) | def stop(self) -> None:
method create_async_task (line 84) | def create_async_task(self, loop: AbstractEventLoop) -> TaskAwaitable:
method id (line 93) | def id(self) -> Any: # pragma: nocover
method failed (line 98) | def failed(self) -> bool:
class AbstractMultiprocessExecutorTask (line 121) | class AbstractMultiprocessExecutorTask(AbstractExecutorTask):
method start (line 125) | def start(self) -> Tuple[Callable, Sequence[Any]]:
method create_async_task (line 128) | def create_async_task(
class AbstractMultipleExecutor (line 144) | class AbstractMultipleExecutor(ABC): # pragma: nocover
method __init__ (line 147) | def __init__(
method is_running (line 167) | def is_running(self) -> bool:
method start (line 171) | def start(self) -> None:
method stop (line 177) | def stop(self) -> None:
method _start_tasks (line 192) | def _start_tasks(self) -> None:
method _wait_tasks_complete (line 199) | async def _wait_tasks_complete(
method _handle_exception (line 232) | async def _handle_exception(
method _start_task (line 259) | def _start_task(self, task: AbstractExecutorTask) -> TaskAwaitable:
method _set_executor_pool (line 268) | def _set_executor_pool(self) -> None:
method _stop_task (line 272) | def _stop_task(task: AbstractExecutorTask) -> None:
method num_failed (line 281) | def num_failed(self) -> int: # pragma: nocover
method failed_tasks (line 286) | def failed_tasks(self) -> Sequence[AbstractExecutorTask]: # pragma: n...
method not_failed_tasks (line 291) | def not_failed_tasks(self) -> Sequence[AbstractExecutorTask]: # pragm...
class ThreadExecutor (line 296) | class ThreadExecutor(AbstractMultipleExecutor): # pragma: nocover
method _set_executor_pool (line 299) | def _set_executor_pool(self) -> None:
method _start_task (line 303) | def _start_task(self, task: AbstractExecutorTask) -> TaskAwaitable:
class ProcessExecutor (line 315) | class ProcessExecutor(ThreadExecutor): # pragma: nocover
method _set_executor_pool (line 318) | def _set_executor_pool(self) -> None:
method _start_task (line 322) | def _start_task(self, task: AbstractExecutorTask) -> TaskAwaitable:
class AsyncExecutor (line 335) | class AsyncExecutor(AbstractMultipleExecutor): # pragma: nocover
method _set_executor_pool (line 338) | def _set_executor_pool(self) -> None:
method _start_task (line 341) | def _start_task(self, task: AbstractExecutorTask) -> TaskAwaitable:
class AbstractMultipleRunner (line 351) | class AbstractMultipleRunner: # pragma: nocover
method __init__ (line 356) | def __init__(
method is_running (line 376) | def is_running(self) -> bool:
method start (line 380) | def start(self, threaded: bool = False) -> None:
method stop (line 392) | def stop(self, timeout: Optional[float] = None) -> None:
method _make_executor (line 402) | def _make_executor(
method _make_tasks (line 417) | def _make_tasks(self) -> Sequence[AbstractExecutorTask]:
method num_failed (line 421) | def num_failed(self) -> int: # pragma: nocover
method failed (line 426) | def failed(self) -> Sequence[Task]: # pragma: nocover
method not_failed (line 431) | def not_failed(self) -> Sequence[Task]: # pragma: nocover
method try_join_thread (line 435) | def try_join_thread(self) -> None: # pragma: nocover
FILE: aea/helpers/pipe.py
class IPCChannelClient (line 45) | class IPCChannelClient(ABC):
method connect (line 49) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method write (line 58) | async def write(self, data: bytes) -> None:
method read (line 68) | async def read(self) -> Optional[bytes]:
method close (line 78) | async def close(self) -> None:
class IPCChannel (line 82) | class IPCChannel(IPCChannelClient):
method in_path (line 87) | def in_path(self) -> str:
method out_path (line 96) | def out_path(self) -> str:
class PosixNamedPipeProtocol (line 104) | class PosixNamedPipeProtocol:
method __init__ (line 107) | def __init__(
method connect (line 137) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method __reader_protocol (line 185) | def __reader_protocol(self) -> asyncio.StreamReaderProtocol:
method write (line 191) | async def write(self, data: bytes) -> None:
method read (line 202) | async def read(self) -> Optional[bytes]:
method close (line 232) | async def close(self) -> None:
class TCPSocketProtocol (line 249) | class TCPSocketProtocol:
method __init__ (line 252) | def __init__(
method writer (line 274) | def writer(self) -> StreamWriter:
method write (line 278) | async def write(self, data: bytes) -> None:
method read (line 291) | async def read(self) -> Optional[bytes]:
method close (line 321) | async def close(self) -> None:
class TCPSocketChannel (line 333) | class TCPSocketChannel(IPCChannel):
method __init__ (line 336) | def __init__(
method connect (line 354) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method _handle_connection (line 384) | async def _handle_connection(
method write (line 395) | async def write(self, data: bytes) -> None:
method read (line 405) | async def read(self) -> Optional[bytes]:
method close (line 415) | async def close(self) -> None:
method in_path (line 422) | def in_path(self) -> str:
method out_path (line 427) | def out_path(self) -> str:
class PosixNamedPipeChannel (line 432) | class PosixNamedPipeChannel(IPCChannel):
method __init__ (line 435) | def __init__(
method connect (line 463) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method write (line 476) | async def write(self, data: bytes) -> None:
method read (line 484) | async def read(self) -> Optional[bytes]:
method close (line 492) | async def close(self) -> None:
method in_path (line 498) | def in_path(self) -> str:
method out_path (line 503) | def out_path(self) -> str:
class TCPSocketChannelClient (line 508) | class TCPSocketChannelClient(IPCChannelClient):
method __init__ (line 511) | def __init__( # pylint: disable=unused-argument
method connect (line 541) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method _open_connection (line 572) | async def _open_connection(self) -> TCPSocketProtocol:
method write (line 579) | async def write(self, data: bytes) -> None:
method read (line 589) | async def read(self) -> Optional[bytes]:
method close (line 599) | async def close(self) -> None:
class PosixNamedPipeChannelClient (line 606) | class PosixNamedPipeChannelClient(IPCChannelClient):
method __init__ (line 609) | def __init__(
method connect (line 633) | async def connect(self, timeout: float = PIPE_CONN_TIMEOUT) -> bool:
method write (line 653) | async def write(self, data: bytes) -> None:
method read (line 663) | async def read(self) -> Optional[bytes]:
method close (line 673) | async def close(self) -> None:
function make_ipc_channel (line 680) | def make_ipc_channel(
function make_ipc_channel_client (line 699) | def make_ipc_channel_client(
FILE: aea/helpers/preference_representations/base.py
function logarithmic_utility (line 28) | def logarithmic_utility(
function linear_utility (line 55) | def linear_utility(
FILE: aea/helpers/profiling.py
function get_current_process_memory_usage (line 47) | def get_current_process_memory_usage() -> float:
function get_current_process_cpu_time (line 52) | def get_current_process_cpu_time() -> float:
function get_current_process_memory_usage (line 63) | def get_current_process_memory_usage() -> float:
function get_current_process_cpu_time (line 72) | def get_current_process_cpu_time() -> float:
class Profiling (line 77) | class Profiling(Runnable):
method __init__ (line 80) | def __init__(
method set_counters (line 105) | def set_counters(self) -> None:
method run (line 126) | async def run(self) -> None:
method output_profile_data (line 139) | def output_profile_data(self) -> None:
method get_profile_data (line 165) | def get_profile_data(self) -> Dict:
method get_objects_instances (line 179) | def get_objects_instances(self) -> Dict:
method get_objecst_created (line 193) | def get_objecst_created(self) -> Dict:
FILE: aea/helpers/search/generic.py
class GenericDataModel (line 31) | class GenericDataModel(DataModel): # pylint: disable=too-few-public-met...
method __init__ (line 34) | def __init__(
FILE: aea/helpers/search/models.py
class Location (line 96) | class Location:
method __init__ (line 101) | def __init__(self, latitude: float, longitude: float) -> None:
method tuple (line 112) | def tuple(self) -> Tuple[float, float]:
method distance (line 116) | def distance(self, other: "Location") -> float:
method __eq__ (line 125) | def __eq__(self, other: Any) -> bool:
method __str__ (line 131) | def __str__(self) -> str:
method encode (line 137) | def encode(self) -> models_pb2.Query.Location: # type: ignore
method decode (line 149) | def decode(cls, location_pb: Any) -> "Location":
class AttributeInconsistencyException (line 168) | class AttributeInconsistencyException(Exception):
class Attribute (line 177) | class Attribute:
method __init__ (line 190) | def __init__(
method __eq__ (line 210) | def __eq__(self, other: Any) -> bool:
method __str__ (line 219) | def __str__(self) -> str:
method encode (line 225) | def encode(self) -> models_pb2.Query.Attribute: # type: ignore
method decode (line 240) | def decode(cls, attribute_pb: models_pb2.Query.Attribute) -> "Attribut...
class DataModel (line 256) | class DataModel:
method __init__ (line 261) | def __init__(
method attributes_by_name (line 279) | def attributes_by_name(self) -> Dict[str, Attribute]:
method _check_validity (line 283) | def _check_validity(self) -> None:
method __eq__ (line 293) | def __eq__(self, other: Any) -> bool:
method __str__ (line 301) | def __str__(self) -> str:
method encode (line 307) | def encode(self) -> models_pb2.Query.DataModel: # type: ignore
method decode (line 321) | def decode(cls, data_model_pb: Any) -> "DataModel":
function generate_data_model (line 334) | def generate_data_model(
class Description (line 353) | class Description:
method __init__ (line 358) | def __init__(
method values (line 380) | def values(self) -> Dict:
method __eq__ (line 384) | def __eq__(self, other: Any) -> bool:
method __iter__ (line 392) | def __iter__(self) -> Iterator:
method _check_consistency (line 396) | def _check_consistency(self) -> None:
method __str__ (line 454) | def __str__(self) -> str:
method _to_key_value_pb (line 461) | def _to_key_value_pb(key: str, value: ATTRIBUTE_TYPES) -> models_pb2.Q...
method _encode (line 486) | def _encode(self) -> models_pb2.Query.Instance: # type: ignore
method encode (line 500) | def encode(cls, description_pb: Any, description: "Description") -> None:
method _extract_value (line 515) | def _extract_value(value: models_pb2.Query.Value) -> ATTRIBUTE_TYPES: ...
method _decode (line 542) | def _decode(cls, description_pb: Any) -> "Description":
method decode (line 556) | def decode(cls, description_pb: Any) -> "Description":
class ConstraintTypes (line 572) | class ConstraintTypes(Enum):
method __str__ (line 586) | def __str__(self) -> str: # pragma: nocover
class ConstraintType (line 591) | class ConstraintType:
method __init__ (line 613) | def __init__(self, type_: Union[ConstraintTypes, str], value: Any) -> ...
method check_validity (line 627) | def check_validity(self) -> bool:
method is_valid (line 732) | def is_valid(self, attribute: Attribute) -> bool:
method get_data_type (line 760) | def get_data_type(self) -> Type[ATTRIBUTE_TYPES]:
method check (line 778) | def check(self, value: ATTRIBUTE_TYPES) -> bool:
method __eq__ (line 816) | def __eq__(self, other: Any) -> bool:
method __str__ (line 824) | def __str__(self) -> str:
method encode (line 828) | def encode(self) -> Optional[Any]:
method decode (line 936) | def decode(cls, constraint_type_pb: Any, category: str) -> "Constraint...
class ConstraintExpr (line 1048) | class ConstraintExpr(ABC):
method check (line 1052) | def check(self, description: Description) -> bool:
method is_valid (line 1061) | def is_valid(self, data_model: DataModel) -> bool:
method check_validity (line 1072) | def check_validity( # noqa: B027
method _encode (line 1082) | def _encode(expression: Any) -> models_pb2.Query.ConstraintExpr: # ty...
method _decode (line 1107) | def _decode(constraint_expression_pb: Any) -> "ConstraintExpr":
class And (line 1134) | class And(ConstraintExpr):
method __init__ (line 1139) | def __init__(self, constraints: List[ConstraintExpr]) -> None:
method check (line 1148) | def check(self, description: Description) -> bool:
method is_valid (line 1157) | def is_valid(self, data_model: DataModel) -> bool:
method check_validity (line 1166) | def check_validity(self) -> None:
method __eq__ (line 1181) | def __eq__(self, other: Any) -> bool: # pragma: nocover
method encode (line 1185) | def encode(self) -> models_pb2.Query.ConstraintExpr.And: # type: ignore
method decode (line 1199) | def decode(cls, and_pb: Any) -> "And":
class Or (line 1210) | class Or(ConstraintExpr):
method __init__ (line 1215) | def __init__(self, constraints: List[ConstraintExpr]) -> None:
method check (line 1224) | def check(self, description: Description) -> bool:
method is_valid (line 1233) | def is_valid(self, data_model: DataModel) -> bool:
method check_validity (line 1242) | def check_validity(self) -> None:
method __eq__ (line 1257) | def __eq__(self, other: Any) -> bool: # pragma: nocover
method encode (line 1261) | def encode(self) -> models_pb2.Query.ConstraintExpr.Or: # type: ignore
method decode (line 1275) | def decode(cls, or_pb: Any) -> "Or":
class Not (line 1286) | class Not(ConstraintExpr):
method __init__ (line 1291) | def __init__(self, constraint: ConstraintExpr) -> None:
method check (line 1299) | def check(self, description: Description) -> bool:
method is_valid (line 1308) | def is_valid(self, data_model: DataModel) -> bool:
method __eq__ (line 1317) | def __eq__(self, other: Any) -> bool: # pragma: nocover
method encode (line 1321) | def encode(self) -> models_pb2.Query.ConstraintExpr.Not: # type: ignore
method decode (line 1333) | def decode(cls, not_pb: Any) -> "Not":
class Constraint (line 1344) | class Constraint(ConstraintExpr):
method __init__ (line 1349) | def __init__(self, attribute_name: str, constraint_type: ConstraintTyp...
method check (line 1359) | def check(self, description: Description) -> bool:
method is_valid (line 1423) | def is_valid(self, data_model: DataModel) -> bool:
method __eq__ (line 1437) | def __eq__(self, other: Any) -> bool:
method __str__ (line 1445) | def __str__(self) -> str:
method encode (line 1451) | def encode(self) -> models_pb2.Query.ConstraintExpr.Constraint: # typ...
method decode (line 1482) | def decode(cls, constraint_pb: Any) -> "Constraint":
class Query (line 1506) | class Query:
method __init__ (line 1511) | def __init__(
method check (line 1524) | def check(self, description: Description) -> bool:
method is_valid (line 1535) | def is_valid(self, data_model: Optional[DataModel]) -> bool:
method check_validity (line 1547) | def check_validity(self) -> None:
method __eq__ (line 1572) | def __eq__(self, other: Any) -> bool:
method __str__ (line 1580) | def __str__(self) -> str:
method _encode (line 1586) | def _encode(self) -> models_pb2.Query.Model: # type: ignore
method encode (line 1604) | def encode(cls, query_pb: Any, query: "Query") -> None:
method _decode (line 1619) | def _decode(cls, query_pb: Any) -> "Query":
method decode (line 1638) | def decode(cls, query_pb: Any) -> "Query":
function haversine (line 1654) | def haversine(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
FILE: aea/helpers/serializers.py
class DictProtobufStructSerializer (line 27) | class DictProtobufStructSerializer:
method encode (line 38) | def encode(cls, dictionary: Dict[str, Any]) -> bytes:
method decode (line 58) | def decode(cls, buffer: bytes) -> Dict[str, Any]:
method _bytes_to_str (line 67) | def _bytes_to_str(cls, value: bytes) -> str:
method _str_to_bytes (line 71) | def _str_to_bytes(cls, value: str) -> bytes:
method _patch_dict (line 75) | def _patch_dict(cls, dictionnary: Dict[str, Any]) -> None:
method _patch_value (line 89) | def _patch_value(cls, value: Any) -> Tuple[Any, bool]:
method _restore_value (line 123) | def _restore_value(cls, value: Any) -> Any:
method _patch_dict_restore (line 147) | def _patch_dict_restore(cls, dictionary: Dict[str, Any]) -> None:
FILE: aea/helpers/storage/backends/base.py
class AbstractStorageBackend (line 31) | class AbstractStorageBackend(ABC):
method __init__ (line 36) | def __init__(self, uri: str) -> None:
method _check_collection_name (line 40) | def _check_collection_name(self, collection_name: str) -> None:
method connect (line 53) | async def connect(self) -> None:
method disconnect (line 57) | async def disconnect(self) -> None:
method ensure_collection (line 61) | async def ensure_collection(self, collection_name: str) -> None:
method put (line 70) | async def put(
method get (line 83) | async def get(self, collection_name: str, object_id: str) -> Optional[...
method remove (line 94) | async def remove(self, collection_name: str, object_id: str) -> None:
method find (line 105) | async def find(
method list (line 119) | async def list(self, collection_name: str) -> List[OBJECT_ID_AND_BODY]:
FILE: aea/helpers/storage/backends/sqlite.py
class SqliteStorageBackend (line 40) | class SqliteStorageBackend(AbstractStorageBackend):
method __init__ (line 43) | def __init__(self, uri: str) -> None:
method _execute_sql_sync (line 53) | def _execute_sql_sync(self, query: str, args: Optional[List] = None) -...
method _executute_sql (line 69) | async def _executute_sql(
method connect (line 86) | async def connect(self) -> None:
method _do_connect (line 94) | def _do_connect(fname: str) -> sqlite3.Connection:
method disconnect (line 108) | async def disconnect(self) -> None:
method ensure_collection (line 116) | async def ensure_collection(self, collection_name: str) -> None:
method put (line 129) | async def put(
method get (line 145) | async def get(self, collection_name: str, object_id: str) -> Optional[...
method remove (line 167) | async def remove(self, collection_name: str, object_id: str) -> None:
method find (line 178) | async def find(
method list (line 198) | async def list(self, collection_name: str) -> List[OBJECT_ID_AND_BODY]:
FILE: aea/helpers/storage/generic_storage.py
class AsyncCollection (line 37) | class AsyncCollection:
method __init__ (line 40) | def __init__(
method put (line 52) | async def put(self, object_id: str, object_body: JSON_TYPES) -> None:
method get (line 65) | async def get(self, object_id: str) -> Optional[JSON_TYPES]:
method remove (line 75) | async def remove(self, object_id: str) -> None:
method find (line 85) | async def find(self, field: str, equals: EQUALS_TYPE) -> List[OBJECT_I...
method list (line 96) | async def list(self) -> List[OBJECT_ID_AND_BODY]:
class SyncCollection (line 105) | class SyncCollection:
method __init__ (line 108) | def __init__(
method _run_sync (line 120) | def _run_sync(self, coro: Coroutine) -> Any:
method put (line 123) | def put(self, object_id: str, object_body: JSON_TYPES) -> None:
method get (line 133) | def get(self, object_id: str) -> Optional[JSON_TYPES]:
method remove (line 143) | def remove(self, object_id: str) -> None:
method find (line 153) | def find(self, field: str, equals: EQUALS_TYPE) -> List[OBJECT_ID_AND_...
method list (line 164) | def list(self) -> List[OBJECT_ID_AND_BODY]:
class Storage (line 173) | class Storage(Runnable):
method __init__ (line 176) | def __init__(
method wait_connected (line 195) | async def wait_connected(self) -> None:
method is_connected (line 200) | def is_connected(self) -> bool:
method run (line 204) | async def run(self) -> None:
method _get_backend_instance (line 217) | def _get_backend_instance(cls, uri: str) -> AbstractStorageBackend:
method get_collection (line 227) | async def get_collection(self, collection_name: str) -> AsyncCollection:
method get_sync_collection (line 234) | def get_sync_collection(self, collection_name: str) -> SyncCollection:
method __repr__ (line 240) | def __repr__(self) -> str:
FILE: aea/helpers/sym_link.py
function make_symlink (line 29) | def make_symlink(link_name: str, target: str) -> None:
function cd (line 44) | def cd(path: Path) -> Generator:
function create_symlink (line 56) | def create_symlink(link_path: Path, target_path: Path, root_path: Path) ...
FILE: aea/helpers/transaction/base.py
class RawTransaction (line 35) | class RawTransaction:
method __init__ (line 40) | def __init__(
method _check_consistency (line 50) | def _check_consistency(self) -> None:
method ledger_id (line 56) | def ledger_id(self) -> str:
method body (line 61) | def body(self) -> JSONLike:
method encode (line 66) | def encode(
method decode (line 88) | def decode(cls, raw_transaction_protobuf_object: Any) -> "RawTransacti...
method __eq__ (line 102) | def __eq__(self, other: Any) -> bool:
method __str__ (line 110) | def __str__(self) -> str:
class RawMessage (line 118) | class RawMessage:
method __init__ (line 123) | def __init__(
method _check_consistency (line 135) | def _check_consistency(self) -> None:
method ledger_id (line 145) | def ledger_id(self) -> str:
method body (line 150) | def body(self) -> bytes:
method is_deprecated_mode (line 155) | def is_deprecated_mode(self) -> bool:
method encode (line 160) | def encode(
method decode (line 182) | def decode(cls, raw_message_protobuf_object: Any) -> "RawMessage":
method __eq__ (line 200) | def __eq__(self, other: Any) -> bool:
method __str__ (line 209) | def __str__(self) -> str:
class SignedTransaction (line 218) | class SignedTransaction:
method __init__ (line 223) | def __init__(
method _check_consistency (line 233) | def _check_consistency(self) -> None:
method ledger_id (line 239) | def ledger_id(self) -> str:
method body (line 244) | def body(self) -> JSONLike:
method encode (line 249) | def encode(
method decode (line 271) | def decode(cls, signed_transaction_protobuf_object: Any) -> "SignedTra...
method __eq__ (line 287) | def __eq__(self, other: Any) -> bool:
method __str__ (line 295) | def __str__(self) -> str:
class SignedMessage (line 303) | class SignedMessage:
method __init__ (line 308) | def __init__(
method _check_consistency (line 320) | def _check_consistency(self) -> None:
method ledger_id (line 330) | def ledger_id(self) -> str:
method body (line 335) | def body(self) -> str:
method is_deprecated_mode (line 340) | def is_deprecated_mode(self) -> bool:
method encode (line 345) | def encode(
method decode (line 367) | def decode(cls, signed_message_protobuf_object: Any) -> "SignedMessage":
method __eq__ (line 385) | def __eq__(self, other: Any) -> bool:
method __str__ (line 394) | def __str__(self) -> str:
class State (line 403) | class State:
method __init__ (line 408) | def __init__(self, ledger_id: str, body: JSONLike) -> None:
method _check_consistency (line 414) | def _check_consistency(self) -> None:
method ledger_id (line 420) | def ledger_id(self) -> str:
method body (line 425) | def body(self) -> JSONLike:
method encode (line 430) | def encode(state_protobuf_object: Any, state_object: "State") -> None:
method decode (line 447) | def decode(cls, state_protobuf_object: Any) -> "State":
method __eq__ (line 459) | def __eq__(self, other: Any) -> bool:
method __str__ (line 467) | def __str__(self) -> str:
class Terms (line 472) | class Terms:
method __init__ (line 493) | def __init__(
method _check_consistency (line 564) | def _check_consistency(self) -> None:
method id (line 639) | def id(self) -> str:
method sender_hash (line 644) | def sender_hash(self) -> str:
method counterparty_hash (line 649) | def counterparty_hash(self) -> str:
method ledger_id (line 654) | def ledger_id(self) -> str:
method sender_address (line 659) | def sender_address(self) -> Address:
method counterparty_address (line 664) | def counterparty_address(self) -> Address:
method counterparty_address (line 669) | def counterparty_address(self, counterparty_address: Address) -> None:
method amount_by_currency_id (line 677) | def amount_by_currency_id(self) -> Dict[str, int]:
method is_sender_payable_tx_fee (line 682) | def is_sender_payable_tx_fee(self) -> bool:
method is_single_currency (line 687) | def is_single_currency(self) -> bool:
method is_empty_currency (line 694) | def is_empty_currency(self) -> bool:
method currency_id (line 699) | def currency_id(self) -> str:
method sender_payable_amount (line 706) | def sender_payable_amount(self) -> int:
method sender_payable_amount_incl_fee (line 721) | def sender_payable_amount_incl_fee(self) -> int:
method counterparty_payable_amount (line 733) | def counterparty_payable_amount(self) -> int:
method counterparty_payable_amount_incl_fee (line 748) | def counterparty_payable_amount_incl_fee(self) -> int:
method quantities_by_good_id (line 760) | def quantities_by_good_id(self) -> Dict[str, int]:
method good_ids (line 765) | def good_ids(self) -> List[str]:
method sender_supplied_quantities (line 770) | def sender_supplied_quantities(self) -> List[int]:
method counterparty_supplied_quantities (line 775) | def counterparty_supplied_quantities(self) -> List[int]:
method nonce (line 780) | def nonce(self) -> str:
method has_fee (line 785) | def has_fee(self) -> bool:
method fee (line 790) | def fee(self) -> int:
method sender_fee (line 800) | def sender_fee(self) -> int:
method counterparty_fee (line 806) | def counterparty_fee(self) -> int:
method fee_by_currency_id (line 812) | def fee_by_currency_id(self) -> Dict[str, int]:
method kwargs (line 817) | def kwargs(self) -> JSONLike:
method is_strict (line 822) | def is_strict(self) -> bool:
method _get_lists (line 826) | def _get_lists(self) -> Tuple[List[str], List[int], List[int]]:
method get_hash (line 842) | def get_hash(
method encode (line 906) | def encode(terms_protobuf_object: Any, terms_object: "Terms") -> None:
method decode (line 930) | def decode(cls, terms_protobuf_object: Any) -> "Terms":
method __eq__ (line 954) | def __eq__(self, other: Any) -> bool:
method __str__ (line 971) | def __str__(self) -> str:
class TransactionDigest (line 986) | class TransactionDigest:
method __init__ (line 991) | def __init__(self, ledger_id: str, body: str) -> None:
method _check_consistency (line 997) | def _check_consistency(self) -> None:
method ledger_id (line 1003) | def ledger_id(self) -> str:
method body (line 1008) | def body(self) -> str:
method encode (line 1013) | def encode(
method decode (line 1035) | def decode(cls, transaction_digest_protobuf_object: Any) -> "Transacti...
method __eq__ (line 1052) | def __eq__(self, other: Any) -> bool:
method __str__ (line 1060) | def __str__(self) -> str:
class TransactionReceipt (line 1067) | class TransactionReceipt:
method __init__ (line 1072) | def __init__(
method _check_consistency (line 1081) | def _check_consistency(self) -> None:
method ledger_id (line 1088) | def ledger_id(self) -> str:
method receipt (line 1093) | def receipt(self) -> JSONLike:
method transaction (line 1098) | def transaction(self) -> JSONLike:
method encode (line 1103) | def encode(
method decode (line 1126) | def decode(cls, transaction_receipt_protobuf_object: Any) -> "Transact...
method __eq__ (line 1144) | def __eq__(self, other: Any) -> bool:
method __str__ (line 1153) | def __str__(self) -> str:
FILE: aea/helpers/win32.py
function enable_ctrl_c_support (line 29) | def enable_ctrl_c_support() -> None: # pragma: no cover
FILE: aea/helpers/yaml_utils.py
class _AEAYamlLoader (line 27) | class _AEAYamlLoader(yaml.SafeLoader):
method __init__ (line 39) | def __init__(self, *args: Any, **kwargs: Any) -> None:
method _construct_mapping (line 54) | def _construct_mapping(loader: "_AEAYamlLoader", node: MappingNode) ->...
class _AEAYamlDumper (line 61) | class _AEAYamlDumper(yaml.SafeDumper):
method __init__ (line 72) | def __init__(self, *args: Any, **kwargs: Any) -> None:
method _dict_representer (line 85) | def _dict_representer(dumper: "_AEAYamlDumper", data: OrderedDict) -> ...
function yaml_load (line 92) | def yaml_load(stream: TextIO) -> Dict[str, Any]:
function yaml_load_all (line 103) | def yaml_load_all(stream: TextIO) -> List[Dict[str, Any]]:
function yaml_dump (line 113) | def yaml_dump(data: Dict, stream: Optional[TextIO] = None) -> None:
function yaml_dump_all (line 123) | def yaml_dump_all(data: Sequence[Dict], stream: Optional[TextIO] = None)...
FILE: aea/identity/base.py
class Identity (line 30) | class Identity:
method __init__ (line 49) | def __init__(
method default_address_key (line 120) | def default_address_key(self) -> str:
method name (line 125) | def name(self) -> str:
method addresses (line 130) | def addresses(self) -> Dict[str, Address]:
method address (line 135) | def address(self) -> Address:
method public_keys (line 140) | def public_keys(self) -> Dict[str, str]:
method public_key (line 145) | def public_key(self) -> str:
FILE: aea/launcher.py
function load_agent (line 50) | def load_agent(agent_dir: Union[PathLike, str], password: Optional[str] ...
function _set_logger (line 65) | def _set_logger(
function _run_agent (line 79) | def _run_agent(
class AEADirTask (line 136) | class AEADirTask(AbstractExecutorTask):
method __init__ (line 139) | def __init__(
method id (line 153) | def id(self) -> Union[PathLike, str]:
method start (line 157) | def start(self) -> None: # type: ignore
method stop (line 161) | def stop(self) -> None:
method create_async_task (line 167) | def create_async_task(self, loop: AbstractEventLoop) -> TaskAwaitable:
class AEADirMultiprocessTask (line 177) | class AEADirMultiprocessTask(AbstractMultiprocessExecutorTask):
method __init__ (line 184) | def __init__(
method id (line 205) | def id(self) -> Union[PathLike, str]:
method failed (line 210) | def failed(self) -> bool:
method start (line 230) | def start(self) -> Tuple[Callable, Sequence[Any]]:
method stop (line 237) | def stop(self) -> None:
class AEALauncher (line 253) | class AEALauncher(AbstractMultipleRunner):
method __init__ (line 262) | def __init__(
method _make_tasks (line 284) | def _make_tasks(self) -> Sequence[AbstractExecutorTask]:
FILE: aea/mail/base.py
class URI (line 36) | class URI:
method __init__ (line 41) | def __init__(self, uri_raw: str) -> None:
method scheme (line 52) | def scheme(self) -> str:
method netloc (line 58) | def netloc(self) -> str:
method path (line 64) | def path(self) -> str:
method params (line 70) | def params(self) -> str:
method query (line 76) | def query(self) -> str:
method fragment (line 82) | def fragment(self) -> str:
method username (line 88) | def username(self) -> Optional[str]:
method password (line 94) | def password(self) -> Optional[str]:
method host (line 100) | def host(self) -> Optional[str]:
method port (line 106) | def port(self) -> Optional[int]:
method __str__ (line 111) | def __str__(self) -> str:
method __eq__ (line 115) | def __eq__(self, other: Any) -> bool:
class EnvelopeContext (line 120) | class EnvelopeContext:
method __init__ (line 125) | def __init__(
method uri (line 140) | def uri(self) -> Optional[URI]:
method connection_id (line 145) | def connection_id(self) -> Optional[PublicId]:
method connection_id (line 150) | def connection_id(self, connection_id: PublicId) -> None:
method __str__ (line 156) | def __str__(self) -> str:
method __eq__ (line 160) | def __eq__(self, other: Any) -> bool:
class AEAConnectionError (line 169) | class AEAConnectionError(Exception):
class Empty (line 173) | class Empty(Exception):
class EnvelopeSerializer (line 177) | class EnvelopeSerializer(ABC):
method encode (line 181) | def encode(self, envelope: "Envelope") -> bytes:
method decode (line 190) | def decode(self, envelope_bytes: bytes) -> "Envelope":
class ProtobufEnvelopeSerializer (line 199) | class ProtobufEnvelopeSerializer(EnvelopeSerializer):
method encode (line 202) | def encode(self, envelope: "Envelope") -> bytes:
method decode (line 220) | def decode(self, envelope_bytes: bytes) -> "Envelope":
class Envelope (line 263) | class Envelope:
method __init__ (line 270) | def __init__(
method to (line 337) | def to(self) -> Address:
method to (line 342) | def to(self, to: Address) -> None:
method sender (line 348) | def sender(self) -> Address:
method sender (line 353) | def sender(self, sender: Address) -> None:
method protocol_specification_id (line 361) | def protocol_specification_id(self) -> PublicId:
method message (line 366) | def message(self) -> Union[Message, bytes]:
method message (line 371) | def message(self, message: Union[Message, bytes]) -> None:
method message_bytes (line 376) | def message_bytes(self) -> bytes:
method context (line 383) | def context(self) -> Optional[EnvelopeContext]:
method to_as_public_id (line 388) | def to_as_public_id(self) -> Optional[PublicId]:
method is_sender_public_id (line 393) | def is_sender_public_id(self) -> bool:
method is_to_public_id (line 398) | def is_to_public_id(self) -> bool:
method is_component_to_component_message (line 403) | def is_component_to_component_message(self) -> bool:
method _check_consistency (line 408) | def _check_consistency(message: Message, to: str, sender: str) -> Mess...
method __eq__ (line 425) | def __eq__(self, other: Any) -> bool:
method encode (line 436) | def encode(
method decode (line 452) | def decode(
method __str__ (line 467) | def __str__(self) -> str:
FILE: aea/manager/manager.py
class ProjectNotFoundError (line 50) | class ProjectNotFoundError(ValueError):
class ProjectCheckError (line 54) | class ProjectCheckError(ValueError):
method __init__ (line 57) | def __init__(self, msg: str, source_exception: Exception):
class ProjectPackageConsistencyCheckError (line 63) | class ProjectPackageConsistencyCheckError(ValueError):
method __init__ (line 66) | def __init__(
method _build_error_message (line 81) | def _build_error_message(self) -> str:
class BaseAgentRunTask (line 95) | class BaseAgentRunTask(ABC):
method start (line 99) | def start(self) -> None:
method wait (line 103) | def wait(self) -> asyncio.Future:
method stop (line 107) | def stop(self) -> None:
method is_running (line 112) | def is_running(self) -> bool:
class AgentRunAsyncTask (line 116) | class AgentRunAsyncTask(BaseAgentRunTask):
method __init__ (line 119) | def __init__(self, agent: AEA, loop: asyncio.AbstractEventLoop) -> None:
method create_run_loop (line 127) | def create_run_loop(self) -> None:
method start (line 130) | def start(self) -> None:
method wait (line 136) | def wait(self) -> asyncio.Future:
method stop (line 142) | def stop(self) -> None:
method _run_wrapper (line 148) | async def _run_wrapper(self) -> None:
method _set_result (line 162) | def _set_result(self, exc: Optional[BaseException]) -> None:
method run (line 171) | async def run(self) -> None:
method is_running (line 177) | def is_running(self) -> bool:
class AgentRunThreadTask (line 182) | class AgentRunThreadTask(AgentRunAsyncTask):
method __init__ (line 185) | def __init__(self, agent: AEA, loop: asyncio.AbstractEventLoop) -> None:
method create_run_loop (line 190) | def create_run_loop(self) -> None:
method start (line 194) | def start(self) -> None:
method stop (line 202) | def stop(
class AgentRunProcessTask (line 211) | class AgentRunProcessTask(BaseAgentRunTask):
method __init__ (line 217) | def __init__( # pylint: disable=super-init-not-called
method start (line 229) | def start(self) -> None:
method _wait_for_result (line 240) | async def _wait_for_result(self) -> Any:
method wait (line 254) | def wait(self) -> asyncio.Future:
method _run_agent (line 262) | def _run_agent(
method stop (line 303) | def stop(self) -> None:
method is_running (line 318) | def is_running(self) -> bool:
class MultiAgentManager (line 331) | class MultiAgentManager:
method __init__ (line 344) | def __init__(
method data_dir (line 414) | def data_dir(self) -> str:
method get_data_dir_of_agent (line 418) | def get_data_dir_of_agent(self, agent_name: str) -> str:
method is_running (line 423) | def is_running(self) -> bool:
method dict_state (line 428) | def dict_state(self) -> Dict[str, Any]:
method projects (line 436) | def projects(self) -> Dict[PublicId, Project]:
method _run_thread (line 440) | def _run_thread(self) -> None:
method _manager_loop (line 445) | async def _manager_loop(self) -> None:
method add_error_callback (line 479) | def add_error_callback(
method start_manager (line 490) | def start_manager(
method last_start_status (line 519) | def last_start_status(
method stop_manager (line 531) | def stop_manager(
method _cleanup (line 577) | def _cleanup(self, only_data: bool = False) -> None:
method add_project (line 585) | def add_project(
method _project_install_and_build (line 638) | def _project_install_and_build(self, project: Project) -> None:
method _check_project (line 649) | def _check_project(self, project: Project) -> None:
method remove_project (line 656) | def remove_project(
method list_projects (line 676) | def list_projects(self) -> List[PublicId]:
method add_agent (line 684) | def add_agent(
method add_agent_with_config (line 733) | def add_agent_with_config(
method get_agent_overridables (line 771) | def get_agent_overridables(self, agent_name: str) -> Tuple[Dict, List[...
method set_agent_overrides (line 784) | def set_agent_overrides(
method list_agents_info (line 807) | def list_agents_info(self) -> List[Dict[str, Any]]:
method list_agents (line 823) | def list_agents(self, running_only: bool = False) -> List[str]:
method remove_agent (line 835) | def remove_agent(
method start_agent (line 865) | def start_agent(self, agent_name: str) -> "MultiAgentManager":
method _make_agent_task (line 894) | def _make_agent_task(
method _is_agent_running (line 909) | def _is_agent_running(self, agent_name: str) -> bool:
method start_all_agents (line 917) | def start_all_agents(self) -> "MultiAgentManager":
method stop_agent (line 932) | def stop_agent(self, agent_name: str) -> "MultiAgentManager":
method stop_all_agents (line 972) | def stop_all_agents(self) -> "MultiAgentManager":
method stop_agents (line 983) | def stop_agents(self, agent_names: List[str]) -> "MultiAgentManager":
method start_agents (line 999) | def start_agents(self, agent_names: List[str]) -> "MultiAgentManager":
method get_agent_alias (line 1011) | def get_agent_alias(self, agent_name: str) -> AgentAlias:
method _ensure_working_dir (line 1022) | def _ensure_working_dir(self) -> None:
method _load_state (line 1033) | def _load_state(
method _save_state (line 1097) | def _save_state(self) -> None:
method _default_error_callback (line 1102) | def _default_error_callback(
method _print_exception_occurred_but_no_error_callback (line 1116) | def _print_exception_occurred_but_no_error_callback(
method _check_version_consistency (line 1136) | def _check_version_consistency(self, agent_config: AgentConfig) -> None:
method _add_new_package_versions (line 1181) | def _add_new_package_versions(self, agent_config: AgentConfig) -> None:
method _remove_package_versions (line 1208) | def _remove_package_versions(self, agent_config: AgentConfig) -> None:
FILE: aea/manager/project.py
class _Base (line 39) | class _Base:
method _get_agent_config (line 43) | def _get_agent_config(cls, path: Union[Path, str]) -> AgentConfig:
method _get_builder (line 50) | def _get_builder(
method builder (line 66) | def builder(self) -> AEABuilder:
method install_pypi_dependencies (line 70) | def install_pypi_dependencies(self) -> None:
class Project (line 75) | class Project(_Base):
method __init__ (line 80) | def __init__(self, public_id: PublicId, path: str) -> None:
method build (line 86) | def build(self) -> None:
method load (line 91) | def load(
method remove (line 134) | def remove(self) -> None:
method agent_config (line 139) | def agent_config(self) -> AgentConfig:
method builder (line 144) | def builder(self) -> AEABuilder:
method check (line 148) | def check(self) -> None:
class AgentAlias (line 153) | class AgentAlias(_Base):
method __init__ (line 158) | def __init__(
method set_agent_config_from_data (line 175) | def set_agent_config_from_data(self, json_data: List[Dict]) -> None:
method _ensure_private_keys (line 184) | def _ensure_private_keys(self) -> None:
method builder (line 212) | def builder(self) -> AEABuilder:
method agent_config (line 221) | def agent_config(self) -> AgentConfig:
method _create_private_key (line 225) | def _create_private_key(
method remove_from_project (line 252) | def remove_from_project(self) -> None:
method dict (line 257) | def dict(self) -> Dict[str, Any]:
method config_json (line 266) | def config_json(self) -> List[Dict]:
method get_aea_instance (line 272) | def get_aea_instance(self) -> AEA:
method issue_certificates (line 282) | def issue_certificates(self) -> None:
method set_overrides (line 291) | def set_overrides(
method agent_config_manager (line 321) | def agent_config_manager(self) -> AgentConfigManager:
method get_overridables (line 325) | def get_overridables(self) -> Tuple[Dict, List[Dict]]:
method get_addresses (line 340) | def get_addresses(self) -> Dict[str, str]:
method get_connections_addresses (line 351) | def get_connections_addresses(self) -> Dict[str, str]:
FILE: aea/manager/utils.py
function get_lib_path (line 33) | def get_lib_path(env_dir: str) -> str:
function make_venv (line 44) | def make_venv(env_dir: str, set_env: bool = False) -> None:
function project_install_and_build (line 59) | def project_install_and_build(project: Project) -> None:
function get_venv_dir_for_project (line 66) | def get_venv_dir_for_project(project: Project) -> str:
function project_check (line 71) | def project_check(project: Project) -> None:
function run_in_venv (line 76) | def run_in_venv(env_dir: str, fn: Callable, timeout: float, *args: Any) ...
function _run_in_venv_handler (line 99) | def _run_in_venv_handler(
FILE: aea/multiplexer.py
class MultiplexerStatus (line 52) | class MultiplexerStatus(AsyncState):
method __init__ (line 55) | def __init__(self) -> None:
method is_connected (line 62) | def is_connected(self) -> bool: # pragma: nocover
method is_connecting (line 67) | def is_connecting(self) -> bool: # pragma: nocover
method is_disconnected (line 72) | def is_disconnected(self) -> bool: # pragma: nocover
method is_disconnecting (line 77) | def is_disconnecting(self) -> bool: # pragma: nocover
class AsyncMultiplexer (line 82) | class AsyncMultiplexer(Runnable, WithLogger):
method __init__ (line 91) | def __init__(
method default_connection (line 168) | def default_connection(self) -> Optional[Connection]:
method in_queue (line 173) | def in_queue(self) -> AsyncFriendlyQueue:
method out_queue (line 178) | def out_queue(self) -> asyncio.Queue:
method connections (line 185) | def connections(self) -> Tuple[Connection, ...]:
method is_connected (line 190) | def is_connected(self) -> bool:
method default_routing (line 195) | def default_routing(self) -> Dict[PublicId, PublicId]:
method default_routing (line 200) | def default_routing(self, default_routing: Dict[PublicId, PublicId]) -...
method connection_status (line 205) | def connection_status(self) -> MultiplexerStatus:
method run (line 209) | async def run(self) -> None:
method _get_protocol_id_for_envelope (line 222) | def _get_protocol_id_for_envelope(self, envelope: Envelope) -> PublicId:
method set_loop (line 238) | def set_loop(self, loop: AbstractEventLoop) -> None:
method _handle_exception (line 247) | def _handle_exception(self, fn: Callable, exc: Exception) -> None:
method add_connection (line 263) | def add_connection(self, connection: Connection, is_default: bool = Fa...
method _connection_consistency_checks (line 280) | def _connection_consistency_checks(self) -> None:
method _set_default_connection_if_none (line 295) | def _set_default_connection_if_none(self) -> None:
method connect (line 300) | async def connect(self) -> None:
method disconnect (line 337) | async def disconnect(self) -> None:
method _stop_receive_send_loops (line 357) | async def _stop_receive_send_loops(self) -> None:
method _check_and_set_disconnected_state (line 381) | def _check_and_set_disconnected_state(self) -> None:
method _stop (line 393) | async def _stop(self) -> None:
method _connect_all (line 408) | async def _connect_all(self) -> None:
method _connect_one (line 428) | async def _connect_one(self, connection_id: PublicId) -> None:
method _disconnect_all (line 448) | async def _disconnect_all(self) -> None:
method _disconnect_one (line 467) | async def _disconnect_one(self, connection_id: PublicId) -> None:
method _send_loop (line 487) | async def _send_loop(self) -> None:
method _receiving_loop (line 514) | async def _receiving_loop(self) -> None:
method _send (line 552) | async def _send(self, envelope: Envelope) -> None:
method _get_connection_id_from_envelope (line 582) | def _get_connection_id_from_envelope(
method _get_connection (line 645) | def _get_connection(self, connection_id: PublicId) -> Optional[Connect...
method _is_connection_supported_protocol (line 656) | def _is_connection_supported_protocol(
method get (line 677) | def get(
method async_get (line 692) | async def async_get(self) -> Envelope:
method async_wait (line 703) | async def async_wait(self) -> None:
method _put (line 711) | async def _put(self, envelope: Envelope) -> None:
method put (line 722) | def put(self, envelope: Envelope) -> None:
method _setup (line 736) | def _setup(
method _update_routing_helper (line 758) | def _update_routing_helper(
class Multiplexer (line 774) | class Multiplexer(AsyncMultiplexer):
method __init__ (line 780) | def __init__(self, *args: Any, **kwargs: Any) -> None:
method _init (line 791) | def _init(self) -> None:
method set_loop (line 796) | def set_loop(self, loop: AbstractEventLoop) -> None:
method connect (line 805) | def connect(self) -> None: # type: ignore # cause overrides coroutine...
method disconnect (line 819) | def disconnect(self) -> None: # type: ignore # cause overrides corout...
method put (line 845) | def put(self, envelope: Envelope) -> None: # type: ignore # cause ov...
class InBox (line 857) | class InBox:
method __init__ (line 860) | def __init__(self, multiplexer: AsyncMultiplexer) -> None:
method empty (line 869) | def empty(self) -> bool:
method get (line 877) | def get(self, block: bool = False, timeout: Optional[float] = None) ->...
method get_nowait (line 896) | def get_nowait(self) -> Optional[Envelope]:
method async_get (line 907) | async def async_get(self) -> Envelope:
method async_wait (line 924) | async def async_wait(self) -> None:
class OutBox (line 932) | class OutBox:
method __init__ (line 935) | def __init__(self, multiplexer: AsyncMultiplexer) -> None:
method empty (line 944) | def empty(self) -> bool:
method put (line 952) | def put(self, envelope: Envelope) -> None:
method put_message (line 970) | def put_message(
FILE: aea/protocols/base.py
class Message (line 44) | class Message:
class Performative (line 53) | class Performative(Enum):
method __str__ (line 56) | def __str__(self) -> str:
class _SlotsCls (line 60) | class _SlotsCls: # pylint: disable=too-few-public-methods
method __init__ (line 70) | def __init__(self, _body: Optional[Dict] = None, **kwargs: Any) -> None:
method json (line 90) | def json(self) -> dict:
method from_json (line 99) | def from_json(cls, data: dict) -> "Message":
method valid_performatives (line 114) | def valid_performatives(self) -> Set[str]:
method has_sender (line 119) | def has_sender(self) -> bool:
method sender (line 124) | def sender(self) -> Address:
method sender (line 131) | def sender(self, sender: Address) -> None:
method has_to (line 141) | def has_to(self) -> bool:
method to (line 146) | def to(self) -> Address:
method to (line 153) | def to(self, to: Address) -> None:
method _body (line 160) | def _body(self) -> Dict:
method _body (line 171) | def _body(self, body: Dict) -> None:
method dialogue_reference (line 181) | def dialogue_reference(self) -> Tuple[str, str]:
method message_id (line 188) | def message_id(self) -> int:
method performative (line 195) | def performative(self) -> "Performative":
method target (line 202) | def target(self) -> int:
method set (line 208) | def set(self, key: str, value: Any) -> None:
method get (line 220) | def get(self, key: str) -> Optional[Any]:
method is_set (line 224) | def is_set(self, key: str) -> bool:
method _update_slots_from_dict (line 228) | def _update_slots_from_dict(self, data: dict) -> None:
method _is_consistent (line 233) | def _is_consistent(self) -> bool:
method __eq__ (line 237) | def __eq__(self, other: Any) -> bool:
method __repr__ (line 246) | def __repr__(self) -> str:
method __str__ (line 256) | def __str__(self) -> str:
method encode (line 266) | def encode(self) -> bytes:
method decode (line 271) | def decode(cls, data: bytes) -> "Message":
method has_dialogue_info (line 276) | def has_dialogue_info(self) -> bool:
class Encoder (line 292) | class Encoder(ABC):
method encode (line 297) | def encode(msg: Message) -> bytes:
class Decoder (line 306) | class Decoder(ABC):
method decode (line 311) | def decode(obj: bytes) -> Message:
class Serializer (line 320) | class Serializer(Encoder, Decoder, ABC):
class Protocol (line 324) | class Protocol(Component):
method __init__ (line 333) | def __init__(
method serializer (line 347) | def serializer(self) -> Type[Serializer]:
method from_dir (line 352) | def from_dir(cls, directory: str, **kwargs: Any) -> "Protocol":
method from_config (line 368) | def from_config(cls, configuration: ProtocolConfig, **kwargs: Any) -> ...
method protocol_id (line 412) | def protocol_id(self) -> PublicId:
method protocol_specification_id (line 417) | def protocol_specification_id(self) -> PublicId:
method __repr__ (line 421) | def __repr__(self) -> str:
FILE: aea/protocols/dialogue/base.py
class InvalidDialogueMessage (line 72) | class InvalidDialogueMessage(Exception):
class DialogueLabel (line 76) | class DialogueLabel:
method __init__ (line 87) | def __init__(
method dialogue_reference (line 105) | def dialogue_reference(self) -> Tuple[str, str]:
method dialogue_starter_reference (line 110) | def dialogue_starter_reference(self) -> str:
method dialogue_responder_reference (line 115) | def dialogue_responder_reference(self) -> str:
method dialogue_opponent_addr (line 120) | def dialogue_opponent_addr(self) -> str:
method dialogue_starter_addr (line 125) | def dialogue_starter_addr(self) -> str:
method __eq__ (line 129) | def __eq__(self, other: Any) -> bool:
method __hash__ (line 138) | def __hash__(self) -> int:
method json (line 149) | def json(self) -> Dict:
method from_json (line 159) | def from_json(cls, obj: Dict[str, str]) -> "DialogueLabel":
method get_incomplete_version (line 171) | def get_incomplete_version(self) -> "DialogueLabel":
method __str__ (line 180) | def __str__(self) -> str:
method from_str (line 190) | def from_str(cls, obj: str) -> "DialogueLabel":
class _DialogueMeta (line 206) | class _DialogueMeta(type):
method __new__ (line 213) | def __new__(cls, name: str, bases: Tuple[Type], dct: Dict) -> "_Dialog...
class Dialogue (line 226) | class Dialogue(metaclass=_DialogueMeta):
class Rules (line 251) | class Rules:
method __init__ (line 254) | def __init__(
method initial_performatives (line 272) | def initial_performatives(self) -> FrozenSet[Message.Performative]:
method terminal_performatives (line 281) | def terminal_performatives(self) -> FrozenSet[Message.Performative]:
method valid_replies (line 290) | def valid_replies(
method get_valid_replies (line 300) | def get_valid_replies(
class Role (line 315) | class Role(Enum):
method __str__ (line 318) | def __str__(self) -> str:
class EndState (line 322) | class EndState(Enum):
method __str__ (line 325) | def __str__(self) -> str:
method __init__ (line 331) | def __init__(
method add_terminal_state_callback (line 362) | def add_terminal_state_callback(self, fn: Callable[["Dialogue"], None]...
method __eq__ (line 370) | def __eq__(self, other: Any) -> bool:
method json (line 383) | def json(self) -> dict:
method from_json (line 397) | def from_json(cls, message_class: Type[Message], data: dict) -> "Dialo...
method dialogue_label (line 429) | def dialogue_label(self) -> DialogueLabel:
method incomplete_dialogue_label (line 438) | def incomplete_dialogue_label(self) -> DialogueLabel:
method dialogue_labels (line 447) | def dialogue_labels(self) -> Set[DialogueLabel]:
method self_address (line 456) | def self_address(self) -> Address:
method role (line 467) | def role(self) -> "Role":
method rules (line 478) | def rules(self) -> "Rules":
method message_class (line 489) | def message_class(self) -> Type[Message]:
method is_self_initiated (line 498) | def is_self_initiated(self) -> bool:
method last_incoming_message (line 510) | def last_incoming_message(self) -> Optional[Message]:
method last_outgoing_message (line 519) | def last_outgoing_message(self) -> Optional[Message]:
method last_message (line 528) | def last_message(self) -> Optional[Message]:
method is_empty (line 545) | def is_empty(self) -> bool:
method _counterparty_from_message (line 553) | def _counterparty_from_message(self, message: Message) -> Address:
method _is_message_by_self (line 565) | def _is_message_by_self(self, message: Message) -> bool:
method _is_message_by_other (line 574) | def _is_message_by_other(self, message: Message) -> bool:
method _has_message_id (line 583) | def _has_message_id(self, message_id: int) -> bool:
method _update (line 592) | def _update(self, message: Message) -> None:
method _is_belonging_to_dialogue (line 634) | def _is_belonging_to_dialogue(self, message: Message) -> bool:
method reply (line 661) | def reply(
method _validate_next_message (line 718) | def _validate_next_message(self, message: Message) -> Tuple[bool, str]:
method _basic_validation (line 741) | def _basic_validation(self, message: Message) -> Tuple[bool, str]:
method _basic_validation_initial_message (line 756) | def _basic_validation_initial_message(self, message: Message) -> Tuple...
method _basic_validation_non_initial_message (line 803) | def _basic_validation_non_initial_message(
method _validate_message_target (line 838) | def _validate_message_target(self, message: Message) -> Optional[str]:
method _validate_message_id (line 888) | def _validate_message_id(self, message: Message) -> Optional[str]:
method get_message_by_id (line 906) | def get_message_by_id(self, message_id: int) -> Optional[Message]:
method get_outgoing_next_message_id (line 927) | def get_outgoing_next_message_id(self) -> int:
method get_incoming_next_message_id (line 939) | def get_incoming_next_message_id(self) -> int:
method _update_dialogue_label (line 951) | def _update_dialogue_label(self, final_dialogue_label: DialogueLabel) ...
method _custom_validation (line 966) | def _custom_validation( # pylint: disable=unused-argument
method __str__ (line 979) | def __str__(self) -> str:
class DialogueStats (line 995) | class DialogueStats:
method __init__ (line 998) | def __init__(self, end_states: FrozenSet[Dialogue.EndState]) -> None:
method self_initiated (line 1012) | def self_initiated(self) -> Dict[Dialogue.EndState, int]:
method other_initiated (line 1017) | def other_initiated(self) -> Dict[Dialogue.EndState, int]:
method add_dialogue_endstate (line 1021) | def add_dialogue_endstate(
function find_caller_object (line 1038) | def find_caller_object(object_type: Type) -> Any:
class BasicDialoguesStorage (line 1052) | class BasicDialoguesStorage:
method __init__ (line 1055) | def __init__(self, dialogues: "Dialogues") -> None:
method dialogues_in_terminal_state (line 1068) | def dialogues_in_terminal_state(self) -> List["Dialogue"]:
method dialogues_in_active_state (line 1081) | def dialogues_in_active_state(self) -> List["Dialogue"]:
method is_terminal_dialogues_kept (line 1095) | def is_terminal_dialogues_kept(self) -> bool:
method dialogue_terminal_state_callback (line 1099) | def dialogue_terminal_state_callback(self, dialogue: "Dialogue") -> None:
method setup (line 1106) | def setup(self) -> None:
method teardown (line 1109) | def teardown(self) -> None:
method add (line 1112) | def add(self, dialogue: Dialogue) -> None:
method _add_terminal_state_dialogue (line 1124) | def _add_terminal_state_dialogue(self, dialogue: Dialogue) -> None:
method remove (line 1133) | def remove(self, dialogue_label: DialogueLabel) -> None:
method get (line 1151) | def get(self, dialogue_label: DialogueLabel) -> Optional[Dialogue]:
method get_dialogues_with_counterparty (line 1160) | def get_dialogues_with_counterparty(self, counterparty: Address) -> Li...
method is_in_incomplete (line 1169) | def is_in_incomplete(self, dialogue_label: DialogueLabel) -> bool:
method set_incomplete_dialogue (line 1173) | def set_incomplete_dialogue(
method is_dialogue_present (line 1183) | def is_dialogue_present(self, dialogue_label: DialogueLabel) -> bool:
method get_latest_label (line 1187) | def get_latest_label(self, dialogue_label: DialogueLabel) -> DialogueL...
class PersistDialoguesStorage (line 1194) | class PersistDialoguesStorage(BasicDialoguesStorage):
method __init__ (line 1204) | def __init__(self, dialogues: "Dialogues") -> None:
method get_skill_component (line 1211) | def get_skill_component() -> Optional[SkillComponent]:
method _get_collection_name (line 1218) | def _get_collection_name(self) -> Optional[str]:
method _get_collection_instance (line 1232) | def _get_collection_instance(self, col_name: str) -> Optional[SyncColl...
method _terminal_dialogues_collection (line 1241) | def _terminal_dialogues_collection(self) -> Optional[SyncCollection]:
method _active_dialogues_collection (line 1249) | def _active_dialogues_collection(self) -> Optional[SyncCollection]:
method _dump (line 1255) | def _dump(self) -> None:
method _dump_incomplete_dialogues_labels (line 1271) | def _dump_incomplete_dialogues_labels(self, collection: SyncCollection...
method _load_incomplete_dialogues_labels (line 1278) | def _load_incomplete_dialogues_labels(self, collection: SyncCollection...
method _load_dialogues (line 1287) | def _load_dialogues(self, collection: SyncCollection) -> Iterable[Dial...
method _dialogue_from_json (line 1297) | def _dialogue_from_json(self, dialogue_data: dict) -> "Dialogue":
method _dump_dialogues (line 1303) | def _dump_dialogues(
method _load (line 1310) | def _load(self) -> None:
method _load_active_dialogues (line 1322) | def _load_active_dialogues(self) -> None:
method _load_terminated_dialogues (line 1327) | def _load_terminated_dialogues(self) -> None:
method _incomplete_dialogues_labels_to_json (line 1332) | def _incomplete_dialogues_labels_to_json(self) -> List:
method _set_incomplete_dialogues_labels_from_json (line 1339) | def _set_incomplete_dialogues_labels_from_json(self, data: List) -> None:
method setup (line 1345) | def setup(self) -> None:
method teardown (line 1351) | def teardown(self) -> None:
method remove (line 1357) | def remove(self, dialogue_label: DialogueLabel) -> None:
class PersistDialoguesStorageWithOffloading (line 1370) | class PersistDialoguesStorageWithOffloading(PersistDialoguesStorage):
method dialogue_terminal_state_callback (line 1373) | def dialogue_terminal_state_callback(self, dialogue: "Dialogue") -> None:
method get (line 1390) | def get(self, dialogue_label: DialogueLabel) -> Optional[Dialogue]:
method _get_dialogue_from_collection (line 1405) | def _get_dialogue_from_collection(
method _load_terminated_dialogues (line 1423) | def _load_terminated_dialogues(self) -> None:
method _get_dialogues_by_address_from_collection (line 1426) | def _get_dialogues_by_address_from_collection(
method get_dialogues_with_counterparty (line 1445) | def get_dialogues_with_counterparty(self, counterparty: Address) -> Li...
method _unique_dialogues_by_label (line 1464) | def _unique_dialogues_by_label(dialogues: List[Dialogue]) -> List[Dial...
method dialogues_in_terminal_state (line 1471) | def dialogues_in_terminal_state(self) -> List["Dialogue"]:
class Dialogues (line 1479) | class Dialogues:
method __init__ (line 1484) | def __init__(
method is_keep_dialogues_in_terminal_state (line 1558) | def is_keep_dialogues_in_terminal_state(self) -> bool:
method self_address (line 1563) | def self_address(self) -> Address:
method dialogue_stats (line 1569) | def dialogue_stats(self) -> DialogueStats:
method message_class (line 1578) | def message_class(self) -> Type[Message]:
method dialogue_class (line 1587) | def dialogue_class(self) -> Type[Dialogue]:
method get_dialogues_with_counterparty (line 1595) | def get_dialogues_with_counterparty(self, counterparty: Address) -> Li...
method _is_message_by_self (line 1604) | def _is_message_by_self(self, message: Message) -> bool:
method _is_message_by_other (line 1613) | def _is_message_by_other(self, message: Message) -> bool:
method _counterparty_from_message (line 1622) | def _counterparty_from_message(self, message: Message) -> Address:
method new_self_initiated_dialogue_reference (line 1635) | def new_self_initiated_dialogue_reference(cls) -> Tuple[str, str]:
method create (line 1643) | def create(
method create_with_message (line 1672) | def create_with_message(
method _create_dialogue (line 1698) | def _create_dialogue(
method update (line 1724) | def update(self, message: Message) -> Optional[Dialogue]:
method _complete_dialogue_reference (line 1797) | def _complete_dialogue_reference(self, message: Message) -> None:
method get_dialogue (line 1840) | def get_dialogue(self, message: Message) -> Optional[Dialogue]:
method _get_latest_label (line 1875) | def _get_latest_label(self, dialogue_label: DialogueLabel) -> Dialogue...
method get_dialogue_from_label (line 1884) | def get_dialogue_from_label(
method _create_self_initiated (line 1895) | def _create_self_initiated(
method _create_opponent_initiated (line 1921) | def _create_opponent_initiated(
method _create (line 1956) | def _create(
method _generate_dialogue_nonce (line 1996) | def _generate_dialogue_nonce() -> str:
method setup (line 2004) | def setup(self) -> None:
method teardown (line 2011) | def teardown(self) -> None:
FILE: aea/protocols/generator/base.py
function _type_check (line 87) | def _type_check(variable_name: str, variable_type: str) -> str:
function _copyright_header_str (line 112) | def _copyright_header_str(author: str) -> str:
class ProtocolGenerator (line 122) | class ProtocolGenerator:
method __init__ (line 125) | def __init__(
method _change_indent (line 182) | def _change_indent(self, number: int, mode: str = None) -> None:
method _import_from_typing_module (line 212) | def _import_from_typing_module(self) -> str:
method _import_from_custom_types_module (line 234) | def _import_from_custom_types_module(self) -> str:
method _performatives_str (line 253) | def _performatives_str(self) -> str:
method _performatives_enum_str (line 266) | def _performatives_enum_str(self) -> str:
method _to_custom_custom (line 292) | def _to_custom_custom(self, content_type: str) -> str:
method _check_content_type_str (line 309) | def _check_content_type_str(self, content_name: str, content_type: str...
method _message_class_str (line 625) | def _message_class_str(self) -> str:
method _valid_replies_str (line 950) | def _valid_replies_str(self) -> str:
method _end_state_enum_str (line 985) | def _end_state_enum_str(self) -> str:
method _agent_role_enum_str (line 1006) | def _agent_role_enum_str(self) -> str:
method _dialogue_class_str (line 1025) | def _dialogue_class_str(self) -> str:
method _custom_types_module_str (line 1236) | def _custom_types_module_str(self) -> str:
method _to_python_type (line 1347) | def _to_python_type(self, content_type: str) -> str:
method _encoding_message_content_from_python_to_protobuf (line 1367) | def _encoding_message_content_from_python_to_protobuf(
method _decoding_message_content_from_protobuf_to_python (line 1474) | def _decoding_message_content_from_protobuf_to_python(
method _serialization_class_str (line 1603) | def _serialization_class_str(self) -> str:
method _content_to_proto_field_str (line 1830) | def _content_to_proto_field_str(
method _protocol_buffer_schema_str (line 1891) | def _protocol_buffer_schema_str(self) -> str:
method _protocol_yaml_str (line 1982) | def _protocol_yaml_str(self) -> str:
method _init_str (line 2011) | def _init_str(self) -> str:
method generate_protobuf_only_mode (line 2037) | def generate_protobuf_only_mode(
method generate_full_mode (line 2102) | def generate_full_mode(self, language: str) -> Optional[str]:
method generate (line 2180) | def generate(
function public_id_to_package_name (line 2208) | def public_id_to_package_name(public_id: PublicId) -> str:
FILE: aea/protocols/generator/common.py
function _to_camel_case (line 99) | def _to_camel_case(text: str) -> str:
function _camel_case_to_snake_case (line 109) | def _camel_case_to_snake_case(text: str) -> str:
function _match_brackets (line 119) | def _match_brackets(text: str, index_of_open_bracket: int) -> int:
function _has_matched_brackets (line 151) | def _has_matched_brackets(text: str) -> bool:
function _get_sub_types_of_compositional_types (line 169) | def _get_sub_types_of_compositional_types(compositional_type: str) -> Tu...
function _union_sub_type_to_protobuf_variable_name (line 241) | def _union_sub_type_to_protobuf_variable_name(
function _python_pt_or_ct_type_to_proto_type (line 270) | def _python_pt_or_ct_type_to_proto_type(content_type: str) -> str:
function _includes_custom_type (line 284) | def _includes_custom_type(content_type: str) -> bool:
function is_installed (line 314) | def is_installed(programme: str) -> bool:
function base_protolint_command (line 325) | def base_protolint_command() -> str:
function check_prerequisites (line 339) | def check_prerequisites() -> None:
function get_protoc_version (line 366) | def get_protoc_version() -> str:
function load_protocol_specification (line 375) | def load_protocol_specification(specification_path: str) -> ProtocolSpec...
function _create_protocol_file (line 391) | def _create_protocol_file(
function try_run_black_formatting (line 407) | def try_run_black_formatting(path_to_protocol_package: str) -> None:
function try_run_isort_formatting (line 419) | def try_run_isort_formatting(path_to_protocol_package: str) -> None:
function try_run_protoc (line 431) | def try_run_protoc(
function try_run_protolint (line 464) | def try_run_protolint(path_to_generated_protocol_package: str, name: str...
function check_protobuf_using_protoc (line 503) | def check_protobuf_using_protoc(
function compile_protobuf_using_protoc (line 527) | def compile_protobuf_using_protoc(
function apply_protolint (line 551) | def apply_protolint(path_to_proto_file: str, name: str) -> Tuple[bool, s...
function _is_compositional_type (line 581) | def _is_compositional_type(content_type: str) -> bool:
FILE: aea/protocols/generator/extract_specification.py
function _ct_specification_type_to_python_type (line 35) | def _ct_specification_type_to_python_type(specification_type: str) -> str:
function _pt_specification_type_to_python_type (line 46) | def _pt_specification_type_to_python_type(specification_type: str) -> str:
function _pct_specification_type_to_python_type (line 57) | def _pct_specification_type_to_python_type(specification_type: str) -> str:
function _pmt_specification_type_to_python_type (line 73) | def _pmt_specification_type_to_python_type(specification_type: str) -> str:
function _mt_specification_type_to_python_type (line 89) | def _mt_specification_type_to_python_type(specification_type: str) -> str:
function _optional_specification_type_to_python_type (line 105) | def _optional_specification_type_to_python_type(specification_type: str)...
function _specification_type_to_python_type (line 118) | def _specification_type_to_python_type(specification_type: str) -> str:
class PythonicProtocolSpecification (line 146) | class PythonicProtocolSpecification: # pylint: disable=too-few-public-m...
method __init__ (line 149) | def __init__(self) -> None:
function extract (line 176) | def extract(
FILE: aea/protocols/generator/validate.py
function _is_reserved_name (line 60) | def _is_reserved_name(content_name: str) -> bool:
function _is_valid_regex (line 70) | def _is_valid_regex(regex_pattern: str, text: str) -> bool:
function _has_brackets (line 83) | def _has_brackets(content_type: str) -> bool:
function _is_valid_ct (line 99) | def _is_valid_ct(content_type: str) -> bool:
function _is_valid_pt (line 110) | def _is_valid_pt(content_type: str) -> bool:
function _is_valid_set (line 121) | def _is_valid_set(content_type: str) -> bool:
function _is_valid_list (line 147) | def _is_valid_list(content_type: str) -> bool:
function _is_valid_dict (line 173) | def _is_valid_dict(content_type: str) -> bool:
function _is_valid_union (line 200) | def _is_valid_union(content_type: str) -> bool:
function _is_valid_optional (line 241) | def _is_valid_optional(content_type: str) -> bool:
function _is_valid_content_type_format (line 274) | def _is_valid_content_type_format(content_type: str) -> bool:
function _validate_performatives (line 292) | def _validate_performatives(performative: str) -> Tuple[bool, str]:
function _validate_content_name (line 320) | def _validate_content_name(content_name: str, performative: str) -> Tupl...
function _validate_content_type (line 356) | def _validate_content_type(
function _validate_speech_acts_section (line 385) | def _validate_speech_acts_section(
function _validate_protocol_buffer_schema_code_snippets (line 498) | def _validate_protocol_buffer_schema_code_snippets(
function _validate_field_existence (line 536) | def _validate_field_existence(dialogue_config: List[str]) -> Tuple[bool,...
function _validate_initiation (line 557) | def _validate_initiation(
function _validate_reply (line 597) | def _validate_reply(
function _validate_termination (line 671) | def _validate_termination(
function _validate_roles (line 744) | def _validate_roles(roles: Dict[str, Any]) -> Tuple[bool, str]:
function _validate_end_states (line 780) | def _validate_end_states(end_states: List[str]) -> Tuple[bool, str]:
function _validate_keep_terminal (line 809) | def _validate_keep_terminal(keep_terminal_state_dialogues: bool) -> Tupl...
function _validate_dialogue_section (line 831) | def _validate_dialogue_section(
function validate (line 921) | def validate(protocol_specification: ProtocolSpecification) -> Tuple[boo...
FILE: aea/protocols/scaffold/message.py
class MyScaffoldMessage (line 31) | class MyScaffoldMessage(Message):
class Performative (line 37) | class Performative(Enum):
method __str__ (line 40) | def __str__(self) -> str:
method __init__ (line 44) | def __init__(self, performative: Performative, **kwargs: Any) -> None:
method _is_consistent (line 56) | def _is_consistent(self) -> bool:
FILE: aea/protocols/scaffold/serialization.py
class MyScaffoldSerializer (line 26) | class MyScaffoldSerializer(Serializer): # pragma: no cover
method encode (line 30) | def encode(msg: Message) -> bytes:
method decode (line 40) | def decode(obj: bytes) -> Message:
FILE: aea/registries/base.py
class Registry (line 39) | class Registry(Generic[ItemId, Item], WithLogger, ABC):
method __init__ (line 42) | def __init__(self, agent_name: str = "standalone") -> None:
method register (line 52) | def register(
method unregister (line 66) | def unregister(self, item_id: ItemId) -> Optional[Item]:
method fetch (line 76) | def fetch(self, item_id: ItemId) -> Optional[Item]:
method fetch_all (line 85) | def fetch_all(self) -> List[Item]:
method ids (line 93) | def ids(self) -> Set[ItemId]:
method setup (line 101) | def setup(self) -> None:
method teardown (line 109) | def teardown(self) -> None:
class PublicIdRegistry (line 117) | class PublicIdRegistry(Generic[Item], Registry[PublicId, Item]):
method __init__ (line 127) | def __init__(self) -> None:
method register (line 132) | def register( # pylint: disable=arguments-differ,unused-argument,argu...
method unregister (line 144) | def unregister( # pylint: disable=arguments-differ,arguments-renamed
method fetch (line 153) | def fetch( # pylint: disable=arguments-differ,arguments-renamed
method fetch_all (line 174) | def fetch_all(self) -> List[Item]:
method ids (line 178) | def ids(self) -> Set[PublicId]:
method setup (line 182) | def setup(self) -> None:
method teardown (line 185) | def teardown(self) -> None:
class AgentComponentRegistry (line 189) | class AgentComponentRegistry(Registry[ComponentId, Component]):
method __init__ (line 194) | def __init__(self, **kwargs: Any) -> None:
method register (line 204) | def register( # pylint: disable=arguments-differ,unused-argument,argu...
method _register (line 229) | def _register(self, component_id: ComponentId, component: Component) -...
method _unregister (line 241) | def _unregister(self, component_id: ComponentId) -> Optional[Component]:
method unregister (line 258) | def unregister( # pylint: disable=arguments-differ,arguments-renamed
method fetch (line 273) | def fetch( # pylint: disable=arguments-differ,arguments-renamed
method fetch_all (line 286) | def fetch_all(self) -> List[Component]:
method fetch_by_type (line 298) | def fetch_by_type(self, component_type: ComponentType) -> List[Compone...
method ids (line 307) | def ids(self) -> Set[ComponentId]:
method setup (line 311) | def setup(self) -> None:
method teardown (line 314) | def teardown(self) -> None:
class ComponentRegistry (line 318) | class ComponentRegistry(
method __init__ (line 325) | def __init__(self, **kwargs: Any) -> None:
method register (line 337) | def register(
method unregister (line 369) | def unregister(self, item_id: Tuple[PublicId, str]) -> Optional[SkillC...
method _unregister_from_main_index (line 379) | def _unregister_from_main_index(
method fetch (line 411) | def fetch(self, item_id: Tuple[PublicId, str]) -> Optional[SkillCompon...
method fetch_by_skill (line 425) | def fetch_by_skill(self, skill_id: PublicId) -> List[SkillComponentType]:
method fetch_all (line 431) | def fetch_all(self) -> List[SkillComponentType]:
method unregister_by_skill (line 435) | def unregister_by_skill(self, skill_id: PublicId) -> None:
method ids (line 444) | def ids(self) -> Set[Tuple[PublicId, str]]:
method setup (line 455) | def setup(self) -> None:
method teardown (line 477) | def teardown(self) -> None:
class HandlerRegistry (line 499) | class HandlerRegistry(ComponentRegistry[Handler]):
method __init__ (line 504) | def __init__(self, **kwargs: Any) -> None:
method register (line 516) | def register(
method unregister (line 560) | def unregister(self, item_id: Tuple[PublicId, str]) -> Handler:
method unregister_by_skill (line 581) | def unregister_by_skill(self, skill_id: PublicId) -> None:
method fetch_by_protocol (line 604) | def fetch_by_protocol(self, protocol_id: PublicId) -> List[Handler]:
method fetch_by_protocol_and_skill (line 623) | def fetch_by_protocol_and_skill(
FILE: aea/registries/filter.py
class Filter (line 31) | class Filter(WithLogger):
method __init__ (line 34) | def __init__(
method resources (line 49) | def resources(self) -> Resources:
method decision_maker_out_queue (line 54) | def decision_maker_out_queue(self) -> AsyncFriendlyQueue:
method get_active_handlers (line 58) | def get_active_handlers(
method get_active_behaviours (line 80) | def get_active_behaviours(self) -> List[Behaviour]:
method handle_new_handlers_and_behaviours (line 92) | def handle_new_handlers_and_behaviours(self) -> None:
method get_internal_message (line 97) | async def get_internal_message(self) -> Optional[Message]:
method handle_internal_message (line 101) | def handle_internal_message(self, internal_message: Optional[Message])...
method _handle_new_behaviours (line 108) | def _handle_new_behaviours(self) -> None:
method _handle_new_handlers (line 124) | def _handle_new_handlers(self) -> None:
method _handle_internal_message (line 140) | def _handle_internal_message(self, message: Message) -> None:
FILE: aea/registries/resources.py
class Resources (line 38) | class Resources:
method __init__ (line 51) | def __init__(self, agent_name: str = "standalone") -> None:
method agent_name (line 72) | def agent_name(self) -> str:
method component_registry (line 77) | def component_registry(self) -> AgentComponentRegistry:
method behaviour_registry (line 82) | def behaviour_registry(self) -> ComponentRegistry[Behaviour]:
method handler_registry (line 87) | def handler_registry(self) -> HandlerRegistry:
method model_registry (line 92) | def model_registry(self) -> ComponentRegistry[Model]:
method add_component (line 96) | def add_component(self, component: Component) -> None:
method add_protocol (line 113) | def add_protocol(self, protocol: Protocol) -> None:
method get_protocol (line 124) | def get_protocol(self, protocol_id: PublicId) -> Optional[Protocol]:
method get_protocol_by_specification_id (line 136) | def get_protocol_by_specification_id(
method get_all_protocols (line 154) | def get_all_protocols(self) -> List[Protocol]:
method remove_protocol (line 163) | def remove_protocol(self, protocol_id: PublicId) -> None:
method add_contract (line 178) | def add_contract(self, contract: Contract) -> None:
method get_contract (line 186) | def get_contract(self, contract_id: PublicId) -> Optional[Contract]:
method get_all_contracts (line 198) | def get_all_contracts(self) -> List[Contract]:
method remove_contract (line 207) | def remove_contract(self, contract_id: PublicId) -> None:
method add_connection (line 217) | def add_connection(self, connection: Connection) -> None:
method get_connection (line 225) | def get_connection(self, connection_id: PublicId) -> Optional[Connecti...
method get_all_connections (line 237) | def get_all_connections(self) -> List[Connection]:
method remove_connection (line 246) | def remove_connection(self, connection_id: PublicId) -> None:
method add_skill (line 256) | def add_skill(self, skill: Skill) -> None:
method get_skill (line 277) | def get_skill(self, skill_id: PublicId) -> Optional[Skill]:
method get_all_skills (line 289) | def get_all_skills(self) -> List[Skill]:
method remove_skill (line 298) | def remove_skill(self, skill_id: PublicId) -> None:
method get_handler (line 312) | def get_handler(
method get_handlers (line 327) | def get_handlers(self, protocol_id: PublicId) -> List[Handler]:
method get_all_handlers (line 337) | def get_all_handlers(self) -> List[Handler]:
method get_behaviour (line 346) | def get_beha
Copy disabled (too large)
Download .json
Condensed preview — 2006 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,871K chars).
[
{
"path": ".dockerignore",
"chars": 60,
"preview": ".tox\n.pytest_cache\nbuild\ndist\nhtmlcov\ntac.egg-info\nlog*.txt\n"
},
{
"path": ".firebaserc",
"chars": 60,
"preview": "{\n \"projects\": {\n \"default\": \"fetch-docs-preview\"\n }\n}\n"
},
{
"path": ".gitattributes",
"chars": 900,
"preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files yo"
},
{
"path": ".github/CODEOWNERS",
"chars": 23,
"preview": "* @5A11 @jrriehl\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 2188,
"preview": "name: 🐛 Bug Report\ndescription: Report a reproducible bug\ntitle: \"<Short description of the bug>\"\nlabels: [\"bug\", \"uncon"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 1891,
"preview": "name: ☝️ Feature request\ndescription: Suggest an idea for this project\ntitle: \"<Short description of the feature>\"\nlabel"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/release.md",
"chars": 1276,
"preview": "## Release summary\n\nVersion number: [e.g. 1.0.1]\n\n## Release details\n\nDescribe in short the main changes with the new re"
},
{
"path": ".github/dependabot.yml",
"chars": 206,
"preview": "version: 2\nupdates:\n\n # Maintain dependencies for Pip\n - package-ecosystem: \"pip\"\n directory: \".\"\n schedule:\n "
},
{
"path": ".github/pull_request_template.md",
"chars": 1314,
"preview": "## Proposed changes\n\nDescribe the changes here.\n\n## Issues\n\nLinks to any issues resolved.\n\n## Types of changes\n\nWhat typ"
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2374,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/docs_pr_preview.yml",
"chars": 1316,
"preview": "name: Documentation Preview\n\non:\n pull_request:\n branches:\n - master\n - develop\n paths:\n - 'docs/*"
},
{
"path": ".github/workflows/publish.yaml",
"chars": 2479,
"preview": "name: Build, Publish and Deploy Docker Container\n\non:\n push:\n branches:\n - develop\n - main\n\njobs:\n publis"
},
{
"path": ".github/workflows/upload_docker_images.yaml",
"chars": 923,
"preview": "name: Build and upload develop-image to docker hub\n\non:\n push:\n branches: [ main ]\n\njobs:\n build:\n env:\n BAS"
},
{
"path": ".github/workflows/workflow.yml",
"chars": 26531,
"preview": "name: AEA framework sanity checks and tests\n\non: pull_request\n\njobs:\n python_checks:\n continue-on-error: False\n r"
},
{
"path": ".gitignore",
"chars": 2131,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": ".spelling",
"chars": 3551,
"preview": "# markdown-spellcheck spelling configuration file\n# Format - lines beginning # are comments\n# global dictionary is at th"
},
{
"path": "AUTHORS.md",
"chars": 617,
"preview": "# Authors\n\nThis is the official list of the AEA Framework authors:\n\n### Lead\n\n- Ali Hosseini <ali.hosseini@fetch.ai> [5A"
},
{
"path": "CITATION.cff",
"chars": 818,
"preview": "cff-version: 1.2.0\nmessage: \"If you use the AEA framework in your research, please cite it as below:\"\ntitle: Autonomous "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5164,
"preview": "# Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our community"
},
{
"path": "CONTRIBUTING.md",
"chars": 6245,
"preview": "# Contribution Guidelines\n\nContributions to the framework, plugins, packages and related tools are welcome. As a contrib"
},
{
"path": "DEVELOPING.md",
"chars": 6939,
"preview": "# Development Guidelines\n\n- [Getting the Source](#get)\n- [Setting up a New Development Environment](#setup)\n- [Developme"
},
{
"path": "HISTORY.md",
"chars": 44736,
"preview": "# Release History\n\n## 1.2.5 (2023-01-18)\n\nDocs:\n\n- Sweeping foundational updates across all documentation\n\nMisc:\n\n- Upda"
},
{
"path": "LICENSE",
"chars": 11346,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MANIFEST.in",
"chars": 390,
"preview": "include README.md LICENSE HISTORY.md AUTHORS.md SECURITY.md CODE_OF_CONDUCT.md Pipfile mkdocs.yml tox.ini pytest.ini str"
},
{
"path": "Makefile",
"chars": 11929,
"preview": "AEA_SRC_DIR := aea\nBENCHMARK_DIR := benchmark\nEXAMPLES_DIR := examples\nLIBS_DIR := libs\nPACKAGES_DIR := packages\nPLUGINS"
},
{
"path": "README.md",
"chars": 3854,
"preview": "<h1 align=\"center\">\n <b>AEA Framework</b>\n</h1>\n\n<p align=\"center\">\nCreate Autonomous Economic Agents (AEAs)\n</p>\n\n<p"
},
{
"path": "SECURITY.md",
"chars": 1716,
"preview": "# Security Policy\n\nThis document outlines security procedures and general policies for the `aea` project.\n\n## Supported "
},
{
"path": "aea/__init__.py",
"chars": 1353,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/__version__.py",
"chars": 1094,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/abstract_agent.py",
"chars": 3050,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/aea.py",
"chars": 18133,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/aea_builder.py",
"chars": 74237,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/agent.py",
"chars": 8705,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/agent_loop.py",
"chars": 14760,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/__init__.py",
"chars": 893,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/__main__.py",
"chars": 972,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/cli/add.py",
"chars": 8370,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/add_key.py",
"chars": 3473,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/build.py",
"chars": 1901,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/config.py",
"chars": 3786,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/core.py",
"chars": 4770,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/cli/create.py",
"chars": 7935,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/delete.py",
"chars": 1887,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/eject.py",
"chars": 9169,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/fetch.py",
"chars": 7112,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/fingerprint.py",
"chars": 7216,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/freeze.py",
"chars": 1691,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/generate.py",
"chars": 7923,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/generate_key.py",
"chars": 3496,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/generate_wealth.py",
"chars": 2907,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/get_address.py",
"chars": 2176,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/get_multiaddress.py",
"chars": 8387,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/get_public_key.py",
"chars": 2215,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/get_wealth.py",
"chars": 2027,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/init.py",
"chars": 4260,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/install.py",
"chars": 4216,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/interact.py",
"chars": 9053,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/issue_certificates.py",
"chars": 7077,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/launch.py",
"chars": 3369,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/list.py",
"chars": 4147,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/local_registry_sync.py",
"chars": 5684,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/login.py",
"chars": 1764,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/logout.py",
"chars": 1387,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/plugin.py",
"chars": 3571,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/publish.py",
"chars": 11032,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/push.py",
"chars": 4547,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/register.py",
"chars": 2759,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/__init__.py",
"chars": 862,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/add.py",
"chars": 2492,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/fetch.py",
"chars": 3754,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/login.py",
"chars": 1590,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/logout.py",
"chars": 1012,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/publish.py",
"chars": 3700,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/push.py",
"chars": 6379,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/registration.py",
"chars": 2111,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/settings.py",
"chars": 1088,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/registry/utils.py",
"chars": 11683,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/remove.py",
"chars": 16935,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/remove_key.py",
"chars": 2662,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/reset_password.py",
"chars": 1456,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/run.py",
"chars": 8041,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/scaffold.py",
"chars": 10164,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/search.py",
"chars": 7919,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/transfer.py",
"chars": 5434,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/upgrade.py",
"chars": 26632,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/__init__.py",
"chars": 838,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/click_utils.py",
"chars": 8209,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/config.py",
"chars": 8159,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/constants.py",
"chars": 1762,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/context.py",
"chars": 7055,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/decorators.py",
"chars": 7931,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/exceptions.py",
"chars": 1067,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/formatting.py",
"chars": 2591,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/generic.py",
"chars": 1712,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/loggers.py",
"chars": 3738,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/cli/utils/package_utils.py",
"chars": 28619,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/common.py",
"chars": 1259,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/components/__init__.py",
"chars": 853,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/components/base.py",
"chars": 6532,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/components/loader.py",
"chars": 7046,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/components/utils.py",
"chars": 2452,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/__init__.py",
"chars": 850,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/base.py",
"chars": 74614,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/constants.py",
"chars": 4501,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/data_types.py",
"chars": 27803,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/loader.py",
"chars": 16024,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/manager.py",
"chars": 21219,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/pypi.py",
"chars": 11502,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/configurations/schemas/aea-config_schema.json",
"chars": 4660,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the agent configuration file.\",\n "
},
{
"path": "aea/configurations/schemas/configurable_parts/base-custom_config.json",
"chars": 429,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Base schema for a custom component configura"
},
{
"path": "aea/configurations/schemas/configurable_parts/connection-custom_config.json",
"chars": 783,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the configurable part of a connec"
},
{
"path": "aea/configurations/schemas/configurable_parts/contract-custom_config.json",
"chars": 535,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the configurable part of a contra"
},
{
"path": "aea/configurations/schemas/configurable_parts/protocol-custom_config.json",
"chars": 535,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the configurable part of a protoc"
},
{
"path": "aea/configurations/schemas/configurable_parts/skill-custom_config.json",
"chars": 2107,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the configurable part of a skill "
},
{
"path": "aea/configurations/schemas/connection-config_schema.json",
"chars": 2583,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the connection configuration file"
},
{
"path": "aea/configurations/schemas/contract-config_schema.json",
"chars": 1765,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the contract configuration file.\""
},
{
"path": "aea/configurations/schemas/definitions.json",
"chars": 7429,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"title\": \"Definitions\",\n \"type\": \"object\",\n \"additionalPro"
},
{
"path": "aea/configurations/schemas/protocol-config_schema.json",
"chars": 1552,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the protocol configuration file.\""
},
{
"path": "aea/configurations/schemas/protocol-specification_schema.json",
"chars": 1267,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the protocol-specification file.\""
},
{
"path": "aea/configurations/schemas/skill-config_schema.json",
"chars": 3200,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"description\": \"Schema for the skill configuration file.\",\n "
},
{
"path": "aea/configurations/utils.py",
"chars": 7348,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/configurations/validation.py",
"chars": 13077,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/connections/__init__.py",
"chars": 847,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/connections/base.py",
"chars": 17870,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/connections/scaffold/__init__.py",
"chars": 828,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/connections/scaffold/connection.py",
"chars": 6247,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/connections/scaffold/connection.yaml",
"chars": 649,
"preview": "name: scaffold\nauthor: fetchai\nversion: 0.1.0\ntype: connection\ndescription: The scaffold connection provides a scaffold "
},
{
"path": "aea/connections/scaffold/readme.md",
"chars": 226,
"preview": "# Scaffold connection\n\nThe scaffold connection acts as a boilerplate for a newly created connection.\n\n## Usage\n\nCreate a"
},
{
"path": "aea/context/__init__.py",
"chars": 844,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/context/base.py",
"chars": 8527,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/contracts/__init__.py",
"chars": 919,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/contracts/base.py",
"chars": 9330,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/contracts/scaffold/__init__.py",
"chars": 872,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/contracts/scaffold/contract.py",
"chars": 2835,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/contracts/scaffold/contract.yaml",
"chars": 450,
"preview": "name: scaffold\nauthor: fetchai\nversion: 0.1.0\ntype: contract\ndescription: The scaffold contract scaffolds a contract to "
},
{
"path": "aea/crypto/__init__.py",
"chars": 961,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/base.py",
"chars": 13984,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/helpers.py",
"chars": 7045,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/ledger_apis.py",
"chars": 11712,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/plugin.py",
"chars": 5822,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/registries/__init__.py",
"chars": 1710,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/registries/base.py",
"chars": 9473,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/crypto/wallet.py",
"chars": 6385,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/decision_maker/__init__.py",
"chars": 851,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/decision_maker/base.py",
"chars": 13162,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/decision_maker/default.py",
"chars": 8138,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/decision_maker/gop.py",
"chars": 31835,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/decision_maker/scaffold.py",
"chars": 2283,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/error_handler/__init__.py",
"chars": 850,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/error_handler/base.py",
"chars": 2369,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/error_handler/default.py",
"chars": 3154,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/error_handler/scaffold.py",
"chars": 2078,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/exceptions.py",
"chars": 3635,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/__init__.py",
"chars": 873,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/acn/__init__.py",
"chars": 869,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/acn/agent_record.py",
"chars": 6211,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/acn/uri.py",
"chars": 2004,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/async_friendly_queue.py",
"chars": 3147,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/async_utils.py",
"chars": 19352,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/base.py",
"chars": 32886,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/constants.py",
"chars": 1161,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/env_vars.py",
"chars": 3587,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/exception_policy.py",
"chars": 1259,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/exec_timeout.py",
"chars": 8971,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/file_io.py",
"chars": 4679,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/helpers/file_lock.py",
"chars": 2381,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/helpers/http_requests.py",
"chars": 2061,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/install_dependency.py",
"chars": 3983,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/io.py",
"chars": 3272,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/ipfs/__init__.py",
"chars": 1370,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/ipfs/base.py",
"chars": 6388,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/ipfs/pb/__init__.py",
"chars": 873,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/ipfs/pb/merkledag.proto",
"chars": 530,
"preview": "// source: https://github.com/ipfs/go-merkledag/blob/master/pb/merkledag.proto\nsyntax = \"proto2\";\n\npackage merkledag.pb;"
},
{
"path": "aea/helpers/ipfs/pb/merkledag_pb2.py",
"chars": 5570,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: merkledag.proto\n\"\"\"Generate"
},
{
"path": "aea/helpers/ipfs/pb/unixfs.proto",
"chars": 471,
"preview": "// source: https://github.com/ipfs/go-unixfs/blob/master/pb/unixfs.proto\nsyntax = \"proto2\";\n\npackage unixfs.pb;\n\nmessage"
},
{
"path": "aea/helpers/ipfs/pb/unixfs_pb2.py",
"chars": 8883,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: unixfs.proto\n\"\"\"Generated p"
},
{
"path": "aea/helpers/ipfs/utils.py",
"chars": 2382,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/logging.py",
"chars": 2904,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/multiaddr/__init__.py",
"chars": 843,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/multiaddr/base.py",
"chars": 6243,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/multiaddr/crypto.proto",
"chars": 279,
"preview": "syntax = \"proto2\";\n\npackage crypto.pb;\n\nenum KeyType {\n RSA = 0;\n Ed25519 = 1;\n Secp256k1 = 2;\n ECDSA = 3;\n}\n\nmessag"
},
{
"path": "aea/helpers/multiaddr/crypto_pb2.py",
"chars": 6757,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: crypto.proto\n\"\"\"Generated p"
},
{
"path": "aea/helpers/multiple_executor.py",
"chars": 14803,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/pipe.py",
"chars": 23051,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
},
{
"path": "aea/helpers/preference_representations/__init__.py",
"chars": 882,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/preference_representations/base.py",
"chars": 2469,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/profiling.py",
"chars": 7074,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/search/__init__.py",
"chars": 847,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/search/generic.py",
"chars": 3372,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/search/models.proto",
"chars": 3621,
"preview": "syntax = \"proto3\";\n\npackage aea.helpers.search.models;\n\nmessage Query {\n message Attribute {\n enum Type {\n "
},
{
"path": "aea/helpers/search/models.py",
"chars": 66272,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/search/models_pb2.py",
"chars": 84033,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: models.proto\n\"\"\"Generated p"
},
{
"path": "aea/helpers/serializers.py",
"chars": 5795,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/storage/__init__.py",
"chars": 845,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/storage/backends/__init__.py",
"chars": 868,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/storage/backends/base.py",
"chars": 3820,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/storage/backends/binaries/README.txt",
"chars": 55,
"preview": "json1.dll - is sqlite extension for windows python<3.9\n"
},
{
"path": "aea/helpers/storage/backends/sqlite.py",
"chars": 7516,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/storage/generic_storage.py",
"chars": 7965,
"preview": "# -*- coding: utf-8 -*-\n# ------------------------------------------------------------------------------\n#\n# Copyright"
},
{
"path": "aea/helpers/sym_link.py",
"chars": 3446,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# -----------------------------------------------------------------------"
}
]
// ... and 1806 more files (download for full content)
About this extraction
This page contains the full source code of the fetchai/agents-aea GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2006 files (16.9 MB), approximately 4.5M tokens, and a symbol index with 14578 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.