agentnode-sdk 0.20.0__tar.gz → 0.22.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/CHANGELOG.md +58 -0
  2. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/PKG-INFO +1 -1
  3. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode.lock +236 -236
  4. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/__init__.py +1 -1
  5. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/commands.py +8 -3
  6. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/main.py +1 -1
  7. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/publish.py +44 -5
  8. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/setup_wizard.py +8 -12
  9. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/templates.py +86 -0
  10. agentnode_sdk-0.22.0/agentnode_sdk/compatibility.py +144 -0
  11. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/config.py +7 -1
  12. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/agent_sandbox.py +223 -218
  13. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/agent_container_wrapper.py +124 -83
  14. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/data/compatibility/current.json +3303 -999
  15. agentnode_sdk-0.22.0/data/compatibility/removed_2026-07-09.txt +40 -0
  16. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/pyproject.toml +1 -1
  17. agentnode_sdk-0.22.0/scripts/check_model_drift.py +67 -0
  18. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/ci_smoke_test.py +12 -3
  19. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/generate_compatibility_artifacts.py +8 -1
  20. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/merge_batches.py +259 -196
  21. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_runner.py +6 -0
  22. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_sandbox_e2e.py +182 -175
  23. agentnode_sdk-0.22.0/tests/test_agent_sandbox_hardening.py +174 -0
  24. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_sandbox_routing.py +56 -11
  25. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_config.py +129 -128
  26. agentnode_sdk-0.22.0/tests/test_mcp_cli_scaffold.py +91 -0
  27. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_publish.py +55 -0
  28. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_setup_wizard.py +18 -16
  29. agentnode_sdk-0.20.0/agentnode_sdk/compatibility.py +0 -139
  30. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/.env.example +0 -0
  31. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/.gitignore +0 -0
  32. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/README.md +0 -0
  33. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/REGISTRY_SIGNING_ACTIVATION.md +0 -0
  34. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/REGISTRY_SIGNING_SPEC.md +0 -0
  35. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/THREAT_MODEL.md +0 -0
  36. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/TRUST_STACK.md +0 -0
  37. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/_fileutil.py +0 -0
  38. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/async_client.py +0 -0
  39. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/capability_graph.py +0 -0
  40. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/capability_taxonomy.py +0 -0
  41. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/__init__.py +0 -0
  42. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/__main__.py +0 -0
  43. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/audit.py +0 -0
  44. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/auth.py +0 -0
  45. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/cassette_audit.py +0 -0
  46. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/complements.py +0 -0
  47. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/init.py +0 -0
  48. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/mcp_commands.py +0 -0
  49. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/mcp_status.py +0 -0
  50. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/mcp_submit.py +0 -0
  51. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/mcp_verify.py +0 -0
  52. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/output.py +0 -0
  53. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/record_cases.py +0 -0
  54. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/sandbox_commands.py +0 -0
  55. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/serve.py +0 -0
  56. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/smart_run.py +0 -0
  57. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/validate.py +0 -0
  58. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/cli/verify_local.py +0 -0
  59. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/client.py +0 -0
  60. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/credential_handle.py +0 -0
  61. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/credential_resolver.py +0 -0
  62. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/credential_store.py +0 -0
  63. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/detect.py +0 -0
  64. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/exceptions.py +0 -0
  65. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/guard.py +0 -0
  66. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/input_guard.py +0 -0
  67. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/installer.py +0 -0
  68. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/key_status.py +0 -0
  69. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/llm_providers.py +0 -0
  70. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/lock_integrity.py +0 -0
  71. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/mcp_server.py +0 -0
  72. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/models.py +0 -0
  73. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/planner.py +0 -0
  74. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/policy.py +0 -0
  75. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/references.py +0 -0
  76. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/registry_trust.py +0 -0
  77. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/resolve.py +0 -0
  78. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/resource_provider.py +0 -0
  79. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/risk_profile.py +0 -0
  80. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/run_log.py +0 -0
  81. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runner.py +0 -0
  82. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtime.py +0 -0
  83. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/__init__.py +0 -0
  84. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/agent_llm_broker.py +0 -0
  85. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/agent_llm_policy.py +0 -0
  86. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/agent_runner.py +0 -0
  87. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/mcp_consent.py +0 -0
  88. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/mcp_consent_store.py +0 -0
  89. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/mcp_runner.py +0 -0
  90. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/python_runner.py +0 -0
  91. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/remote_runner.py +0 -0
  92. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/runtimes/toolpack_credentials.py +0 -0
  93. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/__init__.py +0 -0
  94. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/agent_rpc.py +0 -0
  95. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/agent_session.py +0 -0
  96. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/backend.py +0 -0
  97. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/container_backend.py +0 -0
  98. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/domain_policy.py +0 -0
  99. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/egress.py +0 -0
  100. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/egress_proxy.py +0 -0
  101. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/mcp_preinstall.py +0 -0
  102. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/policy.py +0 -0
  103. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/sandbox/types.py +0 -0
  104. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/signature.py +0 -0
  105. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/signing_key.py +0 -0
  106. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/agentnode_sdk/skill.py +0 -0
  107. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/dist-0.18.0/.gitignore +0 -0
  108. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/dist-0.19.0/.gitignore +0 -0
  109. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/sandbox-image/Dockerfile +0 -0
  110. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/sandbox-image/README.md +0 -0
  111. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/analyze_scores.py +0 -0
  112. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/batch_verify.py +0 -0
  113. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/verify_toolcalls.py +0 -0
  114. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/scripts/weekly_retest.sh +0 -0
  115. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/README.md +0 -0
  116. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/__init__.py +0 -0
  117. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/container_agent_wrapper.py +0 -0
  118. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/fake_llm.py +0 -0
  119. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/host_driver.py +0 -0
  120. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/spikes/agent_sandbox_routing/trivial_agent.py +0 -0
  121. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/__init__.py +0 -0
  122. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/conftest.py +0 -0
  123. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/data/allowed_domains_vectors.json +0 -0
  124. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_llm_broker.py +0 -0
  125. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_llm_policy.py +0 -0
  126. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_rpc.py +0 -0
  127. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_sandbox_spike.py +0 -0
  128. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_agent_session_container.py +0 -0
  129. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_async_client.py +0 -0
  130. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_audit_ux.py +0 -0
  131. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_auth_cli_vault.py +0 -0
  132. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_auto_upgrade_policy.py +0 -0
  133. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_cli.py +0 -0
  134. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_cli_lock.py +0 -0
  135. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_cli_run_resolution.py +0 -0
  136. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_client.py +0 -0
  137. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_client_json_guard.py +0 -0
  138. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_client_sprint_b.py +0 -0
  139. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_consent_prompt.py +0 -0
  140. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_credential_handle.py +0 -0
  141. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_credential_integration.py +0 -0
  142. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_credential_resolver.py +0 -0
  143. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_credential_store.py +0 -0
  144. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_credential_vault.py +0 -0
  145. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_detect.py +0 -0
  146. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_detect_and_install.py +0 -0
  147. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_domain_policy.py +0 -0
  148. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_e2e_runtime.py +0 -0
  149. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_edge_cases.py +0 -0
  150. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_egress_domain_validation.py +0 -0
  151. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_egress_e2e.py +0 -0
  152. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_egress_lifecycle.py +0 -0
  153. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_egress_proxy_unit.py +0 -0
  154. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_egress_wrap.py +0 -0
  155. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_env_passthrough_wrap.py +0 -0
  156. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard.py +0 -0
  157. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_check.py +0 -0
  158. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_config_cache.py +0 -0
  159. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_policy.py +0 -0
  160. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_preview.py +0 -0
  161. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_schema.py +0 -0
  162. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_set.py +0 -0
  163. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_status.py +0 -0
  164. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_tool_override.py +0 -0
  165. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_tool_override_audit.py +0 -0
  166. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_tool_override_cli.py +0 -0
  167. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_guard_ux.py +0 -0
  168. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_host_trust_policy.py +0 -0
  169. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_host_trust_policy_routing.py +0 -0
  170. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_input_guard.py +0 -0
  171. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_input_guard_escalation.py +0 -0
  172. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_install_hardening.py +0 -0
  173. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_installer_sprint_b.py +0 -0
  174. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_intelligence.py +0 -0
  175. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_key_status.py +0 -0
  176. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_llm_binding.py +0 -0
  177. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_llm_call_runlog.py +0 -0
  178. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_llm_providers.py +0 -0
  179. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_llm_vault_binding.py +0 -0
  180. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_lock_integrity.py +0 -0
  181. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_lock_runtime.py +0 -0
  182. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_allowed_domains_seal.py +0 -0
  183. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_audit.py +0 -0
  184. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_consent.py +0 -0
  185. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_consent_resolver.py +0 -0
  186. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_consent_store.py +0 -0
  187. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_credentialed_launch.py +0 -0
  188. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_doctor.py +0 -0
  189. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_preinstall.py +0 -0
  190. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_preinstall_run.py +0 -0
  191. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_sandbox.py +0 -0
  192. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_server.py +0 -0
  193. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_mcp_submit.py +0 -0
  194. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_observability.py +0 -0
  195. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_planner.py +0 -0
  196. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_policy.py +0 -0
  197. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_policy_integration.py +0 -0
  198. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_prompt_specs.py +0 -0
  199. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_provider_matrix.py +0 -0
  200. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_references.py +0 -0
  201. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_registry_trust.py +0 -0
  202. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_remote_hardening.py +0 -0
  203. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_remote_runner.py +0 -0
  204. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_resource_provider.py +0 -0
  205. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_resource_specs.py +0 -0
  206. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_risk_profile.py +0 -0
  207. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_run_log.py +0 -0
  208. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_runner.py +0 -0
  209. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_runtime.py +0 -0
  210. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_runtime_audit.py +0 -0
  211. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_sandbox_backend.py +0 -0
  212. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_sandbox_doctor.py +0 -0
  213. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_sandbox_e2e.py +0 -0
  214. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_sandbox_gate.py +0 -0
  215. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_security_hardening.py +0 -0
  216. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_signature.py +0 -0
  217. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_signing_key.py +0 -0
  218. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_skill.py +0 -0
  219. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_smart.py +0 -0
  220. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_stability.py +0 -0
  221. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_toolpack_credentials.py +0 -0
  222. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_toolpack_credentials_b.py +0 -0
  223. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_toolpack_sandbox.py +0 -0
  224. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_v02.py +0 -0
  225. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_validate.py +0 -0
  226. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/test_validate_skill.py +0 -0
  227. {agentnode_sdk-0.20.0 → agentnode_sdk-0.22.0}/tests/validation_lockfile.json +0 -0
@@ -1,5 +1,63 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.22.0 — MCP from the terminal + refreshed compatibility
4
+
5
+ ### Added
6
+
7
+ - `agentnode init --type mcp` scaffolds an MCP server listing: a schema-valid
8
+ manifest (runtime `mcp`, a pinned `mcp_server` command with an npm/PyPI
9
+ package and `source_repo`, honest permissions) plus a README that walks
10
+ `agentnode mcp verify` → `agentnode mcp submit`. MCP now has the same
11
+ terminal starting point as toolpacks, skills, and agents.
12
+
13
+ ### Changed
14
+
15
+ - `agentnode publish` detects an MCP manifest (runtime `mcp` or an `mcp_server`
16
+ block) and routes you to `agentnode mcp verify` / `agentnode mcp submit`
17
+ instead of failing deep in toolpack validation. Non-MCP manifests are
18
+ unaffected.
19
+ - Refreshed model compatibility data: 246 scored models (222 S-tier), current
20
+ flagships added, models untestable in the latest batch kept with their prior
21
+ result marked legacy, and only hard-evidence removals delisted.
22
+
23
+ ## 0.21.0 — Community agents run sandboxed by default
24
+
25
+ ### Changed
26
+
27
+ - **`agent_sandbox.enabled` now defaults to ON.** Community agents
28
+ (`verified`/`unverified`/unknown) run **sandbox-or-refuse**, consistent with
29
+ toolpacks and MCP servers: in an isolated container when a container runtime
30
+ and the pinned image are present, otherwise **refused cleanly** — never a host
31
+ fallback. Set `agent_sandbox.enabled=false` (or `AGENTNODE_AGENT_SANDBOX=0`)
32
+ to restore the previous behavior (community agents refused outright).
33
+ - `trusted`/`curated` agents are **unchanged**: they still run on the host under
34
+ the `default` host-trust policy. `sandbox.host_trust_policy` can still tighten
35
+ this (`curated_only`, `none`).
36
+ - The setup wizard's sandbox screen now states community agents are isolated by
37
+ default and offers to disable, instead of prompting to opt in.
38
+
39
+ ### Security
40
+
41
+ - Agent containers are regression-locked to the hardened profile: CPU, memory
42
+ and PID limits, read-only rootfs, all Linux capabilities dropped,
43
+ `no-new-privileges`, a non-root user, `noexec`/`nosuid` `/tmp`, a clean
44
+ ephemeral HOME, and `network=none`. The container env carries only
45
+ `PYTHONPATH` — no host secret reaches the container in the environment or on
46
+ the argv; the LLM key stays host-side behind the broker.
47
+ - The in-container agent wrapper installs a fork/exec/subprocess guard before
48
+ loading agent code (defense-in-depth; the container flags are the real
49
+ boundary).
50
+ - End-to-end verified on a real container host: a community agent runs isolated
51
+ with tool calls brokered host-side (allowlist enforced), LLM calls through the
52
+ host broker, and no host env/filesystem/network/key leakage — with no host
53
+ fallback when the sandbox is unavailable.
54
+
55
+ ### Fixed
56
+
57
+ - The gated agent-sandbox end-to-end test now injects the real container backend
58
+ past the test-suite's fake, so it actually exercises the real
59
+ `run_agent → run_agent_sandboxed` path on a Docker host.
60
+
3
61
  ## 0.20.0 — Credentialed toolpacks (bring your own API key)
4
62
 
5
63
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentnode-sdk
3
- Version: 0.20.0
3
+ Version: 0.22.0
4
4
  Summary: Python SDK for AgentNode — the open upgrade and discovery infrastructure for AI agents.
5
5
  Project-URL: Homepage, https://agentnode.net
6
6
  Project-URL: Repository, https://github.com/agentnode-ai/agentnode
@@ -1,236 +1,236 @@
1
- {
2
- "lockfile_version": "0.1",
3
- "updated_at": "2026-05-28T19:20:23.936900+00:00",
4
- "packages": {
5
- "word-counter-pack": {
6
- "version": "1.0.0",
7
- "package_type": "toolpack",
8
- "runtime": "python",
9
- "entrypoint": "word_counter_pack.tool",
10
- "capability_ids": [
11
- "data_cleaning"
12
- ],
13
- "tools": [
14
- {
15
- "name": "count_words",
16
- "entrypoint": "word_counter_pack.tool:count_words"
17
- }
18
- ],
19
- "artifact_hash": "sha256:445388c86aa2b20c3e748f58b2d221548f1f3f71ff5c715a64cdc80966fab03c",
20
- "installed_at": "2026-03-18T02:18:53.827396+00:00",
21
- "source": "sdk",
22
- "trust_level": "trusted",
23
- "permissions": {
24
- "network_level": "none",
25
- "filesystem_level": "none",
26
- "code_execution_level": "none",
27
- "data_access_level": "input_only",
28
- "user_approval_level": "never"
29
- }
30
- },
31
- "pdf-reader-pack": {
32
- "version": "1.0.0",
33
- "package_type": "toolpack",
34
- "runtime": "python",
35
- "entrypoint": "pdf_reader_pack.tool",
36
- "capability_ids": [
37
- "pdf_extraction"
38
- ],
39
- "tools": [],
40
- "artifact_hash": "sha256:4635316cb5f8ee477f41ccad570c3bcd5026fc7cd1fbf402a12df575be54ae20",
41
- "installed_at": "2026-04-15T23:53:44.341323+00:00",
42
- "source": "sdk",
43
- "trust_level": "trusted",
44
- "permissions": {
45
- "network_level": "none",
46
- "filesystem_level": "temp",
47
- "code_execution_level": "none",
48
- "data_access_level": "input_only",
49
- "user_approval_level": "never"
50
- },
51
- "prompts": [],
52
- "resources": [],
53
- "connector": null,
54
- "agent": null
55
- },
56
- "web-search-pack": {
57
- "version": "1.0.0",
58
- "package_type": "toolpack",
59
- "runtime": "python",
60
- "entrypoint": "web_search_pack.tool",
61
- "capability_ids": [
62
- "web_search"
63
- ],
64
- "tools": [],
65
- "artifact_hash": "sha256:3e667ba523ceddf6137a1a15f4103d48a59085d1d277750f30addf2758228d12",
66
- "installed_at": "2026-04-16T13:48:00.554169+00:00",
67
- "source": "sdk",
68
- "trust_level": "trusted",
69
- "permissions": {
70
- "network_level": "restricted",
71
- "filesystem_level": "none",
72
- "code_execution_level": "none",
73
- "data_access_level": "input_only",
74
- "user_approval_level": "never"
75
- },
76
- "prompts": [],
77
- "resources": [],
78
- "connector": null,
79
- "agent": null
80
- },
81
- "web-design-pack": {
82
- "version": "1.0.0",
83
- "package_type": "toolpack",
84
- "runtime": "python",
85
- "entrypoint": "web_design_pack.tool",
86
- "capability_ids": [
87
- "web_design"
88
- ],
89
- "tools": [],
90
- "artifact_hash": "sha256:bf90bc3e2fb78682bc3df5f53d7a195675c564f0f3ede8dddfce403b59b73525",
91
- "installed_at": "2026-04-16T13:48:58.751523+00:00",
92
- "source": "sdk",
93
- "trust_level": "trusted",
94
- "permissions": {
95
- "network_level": "none",
96
- "filesystem_level": "temp",
97
- "code_execution_level": "none",
98
- "data_access_level": "input_only",
99
- "user_approval_level": "never"
100
- },
101
- "prompts": [],
102
- "resources": [],
103
- "connector": null,
104
- "agent": null
105
- },
106
- "csv-analyzer-pack": {
107
- "version": "1.0.0",
108
- "package_type": "toolpack",
109
- "runtime": "python",
110
- "entrypoint": "csv_analyzer_pack.tool",
111
- "capability_ids": [
112
- "csv_analysis"
113
- ],
114
- "tools": [],
115
- "artifact_hash": "sha256:62cfe9be62e97174ab41eff190e356d1c512b11ac88cb566d7c75e5f5e0f8d42",
116
- "installed_at": "2026-04-24T13:59:54.295800+00:00",
117
- "source": "sdk",
118
- "trust_level": "trusted",
119
- "permissions": {
120
- "network_level": "none",
121
- "filesystem_level": "temp",
122
- "code_execution_level": "none",
123
- "data_access_level": "input_only",
124
- "user_approval_level": "never"
125
- },
126
- "prompts": [],
127
- "resources": [],
128
- "connector": null,
129
- "agent": null
130
- },
131
- "data-visualizer-pack": {
132
- "version": "1.0.0",
133
- "package_type": "toolpack",
134
- "runtime": "python",
135
- "entrypoint": "data_visualizer_pack.tool",
136
- "capability_ids": [
137
- "data_visualization"
138
- ],
139
- "tools": [],
140
- "artifact_hash": "sha256:bc9485ae4d4eec2644fb0b5dc0d8108293142db673e877b30f64dd335298822b",
141
- "installed_at": "2026-05-05T10:30:55.275916+00:00",
142
- "source": "sdk",
143
- "trust_level": "trusted",
144
- "permissions": {
145
- "network_level": "none",
146
- "filesystem_level": "temp",
147
- "code_execution_level": "none",
148
- "data_access_level": "input_only",
149
- "user_approval_level": "never"
150
- },
151
- "prompts": [],
152
- "resources": [],
153
- "connector": null,
154
- "agent": null
155
- },
156
- "mcp-filesystem": {
157
- "version": "0.1.0",
158
- "package_type": "toolpack",
159
- "runtime": "mcp",
160
- "entrypoint": "",
161
- "capability_ids": [
162
- "file_read",
163
- "file_write",
164
- "file_read"
165
- ],
166
- "tools": [],
167
- "artifact_hash": "",
168
- "installed_at": "2026-05-28T19:19:36.026966+00:00",
169
- "source": "sdk",
170
- "trust_level": "unverified",
171
- "last_trust_check": "2026-05-28T19:19:36.026975+00:00",
172
- "permissions": {
173
- "network_level": "none",
174
- "filesystem_level": "none",
175
- "code_execution_level": "none",
176
- "data_access_level": "input_only",
177
- "user_approval_level": "once"
178
- },
179
- "prompts": [],
180
- "resources": [],
181
- "connector": null,
182
- "agent": null,
183
- "publisher_slug": "agentnode-community",
184
- "mcp_command": [
185
- "npx",
186
- "-y",
187
- "@modelcontextprotocol/server-filesystem@2025.3.28"
188
- ],
189
- "_integrity": {
190
- "algorithm": "sha256",
191
- "canonical_version": 3,
192
- "hash": "e328410426cb56408c78c3a8b4ca3e5149b0f9a69e209755a2473c5596344e77"
193
- }
194
- },
195
- "mcp-brave-search": {
196
- "version": "0.1.0",
197
- "package_type": "toolpack",
198
- "runtime": "mcp",
199
- "entrypoint": "",
200
- "capability_ids": [
201
- "web_search"
202
- ],
203
- "tools": [],
204
- "artifact_hash": "",
205
- "installed_at": "2026-05-28T19:20:23.929529+00:00",
206
- "source": "sdk",
207
- "trust_level": "unverified",
208
- "last_trust_check": "2026-05-28T19:20:23.929538+00:00",
209
- "permissions": {
210
- "network_level": "none",
211
- "filesystem_level": "none",
212
- "code_execution_level": "none",
213
- "data_access_level": "input_only",
214
- "user_approval_level": "once"
215
- },
216
- "prompts": [],
217
- "resources": [],
218
- "connector": null,
219
- "agent": null,
220
- "publisher_slug": "agentnode-community",
221
- "mcp_command": [
222
- "npx",
223
- "-y",
224
- "@modelcontextprotocol/server-brave-search@2025.3.28"
225
- ],
226
- "mcp_env_keys": [
227
- "BRAVE_API_KEY"
228
- ],
229
- "_integrity": {
230
- "algorithm": "sha256",
231
- "canonical_version": 3,
232
- "hash": "6971a6e31fc7b6364c7378cde6d6a2f86712aa7cc80ab53ddbcedf731b03632f"
233
- }
234
- }
235
- }
236
- }
1
+ {
2
+ "lockfile_version": "0.1",
3
+ "updated_at": "2026-05-28T19:20:23.936900+00:00",
4
+ "packages": {
5
+ "word-counter-pack": {
6
+ "version": "1.0.0",
7
+ "package_type": "toolpack",
8
+ "runtime": "python",
9
+ "entrypoint": "word_counter_pack.tool",
10
+ "capability_ids": [
11
+ "data_cleaning"
12
+ ],
13
+ "tools": [
14
+ {
15
+ "name": "count_words",
16
+ "entrypoint": "word_counter_pack.tool:count_words"
17
+ }
18
+ ],
19
+ "artifact_hash": "sha256:445388c86aa2b20c3e748f58b2d221548f1f3f71ff5c715a64cdc80966fab03c",
20
+ "installed_at": "2026-03-18T02:18:53.827396+00:00",
21
+ "source": "sdk",
22
+ "trust_level": "trusted",
23
+ "permissions": {
24
+ "network_level": "none",
25
+ "filesystem_level": "none",
26
+ "code_execution_level": "none",
27
+ "data_access_level": "input_only",
28
+ "user_approval_level": "never"
29
+ }
30
+ },
31
+ "pdf-reader-pack": {
32
+ "version": "1.0.0",
33
+ "package_type": "toolpack",
34
+ "runtime": "python",
35
+ "entrypoint": "pdf_reader_pack.tool",
36
+ "capability_ids": [
37
+ "pdf_extraction"
38
+ ],
39
+ "tools": [],
40
+ "artifact_hash": "sha256:4635316cb5f8ee477f41ccad570c3bcd5026fc7cd1fbf402a12df575be54ae20",
41
+ "installed_at": "2026-04-15T23:53:44.341323+00:00",
42
+ "source": "sdk",
43
+ "trust_level": "trusted",
44
+ "permissions": {
45
+ "network_level": "none",
46
+ "filesystem_level": "temp",
47
+ "code_execution_level": "none",
48
+ "data_access_level": "input_only",
49
+ "user_approval_level": "never"
50
+ },
51
+ "prompts": [],
52
+ "resources": [],
53
+ "connector": null,
54
+ "agent": null
55
+ },
56
+ "web-search-pack": {
57
+ "version": "1.0.0",
58
+ "package_type": "toolpack",
59
+ "runtime": "python",
60
+ "entrypoint": "web_search_pack.tool",
61
+ "capability_ids": [
62
+ "web_search"
63
+ ],
64
+ "tools": [],
65
+ "artifact_hash": "sha256:3e667ba523ceddf6137a1a15f4103d48a59085d1d277750f30addf2758228d12",
66
+ "installed_at": "2026-04-16T13:48:00.554169+00:00",
67
+ "source": "sdk",
68
+ "trust_level": "trusted",
69
+ "permissions": {
70
+ "network_level": "restricted",
71
+ "filesystem_level": "none",
72
+ "code_execution_level": "none",
73
+ "data_access_level": "input_only",
74
+ "user_approval_level": "never"
75
+ },
76
+ "prompts": [],
77
+ "resources": [],
78
+ "connector": null,
79
+ "agent": null
80
+ },
81
+ "web-design-pack": {
82
+ "version": "1.0.0",
83
+ "package_type": "toolpack",
84
+ "runtime": "python",
85
+ "entrypoint": "web_design_pack.tool",
86
+ "capability_ids": [
87
+ "web_design"
88
+ ],
89
+ "tools": [],
90
+ "artifact_hash": "sha256:bf90bc3e2fb78682bc3df5f53d7a195675c564f0f3ede8dddfce403b59b73525",
91
+ "installed_at": "2026-04-16T13:48:58.751523+00:00",
92
+ "source": "sdk",
93
+ "trust_level": "trusted",
94
+ "permissions": {
95
+ "network_level": "none",
96
+ "filesystem_level": "temp",
97
+ "code_execution_level": "none",
98
+ "data_access_level": "input_only",
99
+ "user_approval_level": "never"
100
+ },
101
+ "prompts": [],
102
+ "resources": [],
103
+ "connector": null,
104
+ "agent": null
105
+ },
106
+ "csv-analyzer-pack": {
107
+ "version": "1.0.0",
108
+ "package_type": "toolpack",
109
+ "runtime": "python",
110
+ "entrypoint": "csv_analyzer_pack.tool",
111
+ "capability_ids": [
112
+ "csv_analysis"
113
+ ],
114
+ "tools": [],
115
+ "artifact_hash": "sha256:62cfe9be62e97174ab41eff190e356d1c512b11ac88cb566d7c75e5f5e0f8d42",
116
+ "installed_at": "2026-04-24T13:59:54.295800+00:00",
117
+ "source": "sdk",
118
+ "trust_level": "trusted",
119
+ "permissions": {
120
+ "network_level": "none",
121
+ "filesystem_level": "temp",
122
+ "code_execution_level": "none",
123
+ "data_access_level": "input_only",
124
+ "user_approval_level": "never"
125
+ },
126
+ "prompts": [],
127
+ "resources": [],
128
+ "connector": null,
129
+ "agent": null
130
+ },
131
+ "data-visualizer-pack": {
132
+ "version": "1.0.0",
133
+ "package_type": "toolpack",
134
+ "runtime": "python",
135
+ "entrypoint": "data_visualizer_pack.tool",
136
+ "capability_ids": [
137
+ "data_visualization"
138
+ ],
139
+ "tools": [],
140
+ "artifact_hash": "sha256:bc9485ae4d4eec2644fb0b5dc0d8108293142db673e877b30f64dd335298822b",
141
+ "installed_at": "2026-05-05T10:30:55.275916+00:00",
142
+ "source": "sdk",
143
+ "trust_level": "trusted",
144
+ "permissions": {
145
+ "network_level": "none",
146
+ "filesystem_level": "temp",
147
+ "code_execution_level": "none",
148
+ "data_access_level": "input_only",
149
+ "user_approval_level": "never"
150
+ },
151
+ "prompts": [],
152
+ "resources": [],
153
+ "connector": null,
154
+ "agent": null
155
+ },
156
+ "mcp-filesystem": {
157
+ "version": "0.1.0",
158
+ "package_type": "toolpack",
159
+ "runtime": "mcp",
160
+ "entrypoint": "",
161
+ "capability_ids": [
162
+ "file_read",
163
+ "file_write",
164
+ "file_read"
165
+ ],
166
+ "tools": [],
167
+ "artifact_hash": "",
168
+ "installed_at": "2026-05-28T19:19:36.026966+00:00",
169
+ "source": "sdk",
170
+ "trust_level": "unverified",
171
+ "last_trust_check": "2026-05-28T19:19:36.026975+00:00",
172
+ "permissions": {
173
+ "network_level": "none",
174
+ "filesystem_level": "none",
175
+ "code_execution_level": "none",
176
+ "data_access_level": "input_only",
177
+ "user_approval_level": "once"
178
+ },
179
+ "prompts": [],
180
+ "resources": [],
181
+ "connector": null,
182
+ "agent": null,
183
+ "publisher_slug": "agentnode-community",
184
+ "mcp_command": [
185
+ "npx",
186
+ "-y",
187
+ "@modelcontextprotocol/server-filesystem@2025.3.28"
188
+ ],
189
+ "_integrity": {
190
+ "algorithm": "sha256",
191
+ "canonical_version": 3,
192
+ "hash": "e328410426cb56408c78c3a8b4ca3e5149b0f9a69e209755a2473c5596344e77"
193
+ }
194
+ },
195
+ "mcp-brave-search": {
196
+ "version": "0.1.0",
197
+ "package_type": "toolpack",
198
+ "runtime": "mcp",
199
+ "entrypoint": "",
200
+ "capability_ids": [
201
+ "web_search"
202
+ ],
203
+ "tools": [],
204
+ "artifact_hash": "",
205
+ "installed_at": "2026-05-28T19:20:23.929529+00:00",
206
+ "source": "sdk",
207
+ "trust_level": "unverified",
208
+ "last_trust_check": "2026-05-28T19:20:23.929538+00:00",
209
+ "permissions": {
210
+ "network_level": "none",
211
+ "filesystem_level": "none",
212
+ "code_execution_level": "none",
213
+ "data_access_level": "input_only",
214
+ "user_approval_level": "once"
215
+ },
216
+ "prompts": [],
217
+ "resources": [],
218
+ "connector": null,
219
+ "agent": null,
220
+ "publisher_slug": "agentnode-community",
221
+ "mcp_command": [
222
+ "npx",
223
+ "-y",
224
+ "@modelcontextprotocol/server-brave-search@2025.3.28"
225
+ ],
226
+ "mcp_env_keys": [
227
+ "BRAVE_API_KEY"
228
+ ],
229
+ "_integrity": {
230
+ "algorithm": "sha256",
231
+ "canonical_version": 3,
232
+ "hash": "6971a6e31fc7b6364c7378cde6d6a2f86712aa7cc80ab53ddbcedf731b03632f"
233
+ }
234
+ }
235
+ }
236
+ }
@@ -38,7 +38,7 @@ from agentnode_sdk.runtime import AgentNodeRuntime
38
38
  Client = AgentNodeClient
39
39
  ToolError = AgentNodeToolError
40
40
 
41
- __version__ = "0.20.0"
41
+ __version__ = "0.22.0"
42
42
  __all__ = [
43
43
  "AgentNode",
44
44
  "AsyncAgentNode",
@@ -2338,9 +2338,14 @@ def cmd_init(name: str | None = None, template_type: str | None = None) -> int:
2338
2338
  print()
2339
2339
  print(dim(" Next steps:"))
2340
2340
  print(dim(f" cd {pkg_id}"))
2341
- print(dim(" # Edit the tool code and manifest"))
2342
- print(dim(" agentnode validate ."))
2343
- print(dim(" # Publish via web UI at agentnode.net/publish"))
2341
+ if chosen == "mcp":
2342
+ print(dim(" # Fill in npm_package/pypi_package, pin the version, set source_repo"))
2343
+ print(dim(" agentnode mcp verify . --test # check ownership, package, pinning"))
2344
+ print(dim(" agentnode mcp submit . # submit for the catalog"))
2345
+ else:
2346
+ print(dim(" # Edit the tool code and manifest"))
2347
+ print(dim(" agentnode validate ."))
2348
+ print(dim(" agentnode publish . # or publish via agentnode.net/publish"))
2344
2349
  print()
2345
2350
  return 0
2346
2351
 
@@ -149,7 +149,7 @@ def main(argv: list[str] | None = None) -> int:
149
149
  # init
150
150
  init_parser = sub.add_parser("init", help="Create a new package from template")
151
151
  init_parser.add_argument("name", nargs="?", default=None, help="Package ID (optional, prompted if omitted)")
152
- init_parser.add_argument("--type", dest="template_type", choices=["local", "api", "file", "agent", "skill"], default=None)
152
+ init_parser.add_argument("--type", dest="template_type", choices=["local", "api", "file", "agent", "skill", "mcp"], default=None)
153
153
 
154
154
  # validate
155
155
  validate_parser = sub.add_parser("validate", help="Validate package before publishing")