agentnode-sdk 0.24.0__tar.gz → 0.25.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 (814) hide show
  1. agentnode_sdk-0.25.0/.gitignore +85 -0
  2. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/CHANGELOG.md +143 -0
  3. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/PKG-INFO +3 -3
  4. agentnode_sdk-0.25.0/agentnode_sdk/__init__.py +155 -0
  5. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/_agent_pip.py +22 -0
  6. agentnode_sdk-0.25.0/agentnode_sdk/_provenance.py +61 -0
  7. agentnode_sdk-0.25.0/agentnode_sdk/access/__init__.py +10 -0
  8. agentnode_sdk-0.25.0/agentnode_sdk/access/client.py +191 -0
  9. agentnode_sdk-0.25.0/agentnode_sdk/access/compatibility.py +271 -0
  10. agentnode_sdk-0.25.0/agentnode_sdk/access/contract.py +877 -0
  11. agentnode_sdk-0.25.0/agentnode_sdk/access/credentials.py +115 -0
  12. agentnode_sdk-0.25.0/agentnode_sdk/access/dispatch.py +2059 -0
  13. agentnode_sdk-0.25.0/agentnode_sdk/access/enrolment.py +278 -0
  14. agentnode_sdk-0.25.0/agentnode_sdk/access/mcp.py +166 -0
  15. agentnode_sdk-0.25.0/agentnode_sdk/access/rest.py +227 -0
  16. agentnode_sdk-0.25.0/agentnode_sdk/access/routes.py +160 -0
  17. agentnode_sdk-0.25.0/agentnode_sdk/access/schemas.py +224 -0
  18. agentnode_sdk-0.25.0/agentnode_sdk/access/sessions.py +235 -0
  19. agentnode_sdk-0.25.0/agentnode_sdk/access/stopping.py +427 -0
  20. agentnode_sdk-0.25.0/agentnode_sdk/capability/USABILITY.md +177 -0
  21. agentnode_sdk-0.25.0/agentnode_sdk/capability/__init__.py +56 -0
  22. agentnode_sdk-0.25.0/agentnode_sdk/capability/_handshake.py +154 -0
  23. agentnode_sdk-0.25.0/agentnode_sdk/capability/_pack_shim.py +210 -0
  24. agentnode_sdk-0.25.0/agentnode_sdk/capability/_sandbox_stdlib.py +328 -0
  25. agentnode_sdk-0.25.0/agentnode_sdk/capability/adapter.py +152 -0
  26. agentnode_sdk-0.25.0/agentnode_sdk/capability/approval.py +240 -0
  27. agentnode_sdk-0.25.0/agentnode_sdk/capability/audit.py +175 -0
  28. agentnode_sdk-0.25.0/agentnode_sdk/capability/cli.py +52 -0
  29. agentnode_sdk-0.25.0/agentnode_sdk/capability/client.py +61 -0
  30. agentnode_sdk-0.25.0/agentnode_sdk/capability/client_config.py +119 -0
  31. agentnode_sdk-0.25.0/agentnode_sdk/capability/contract.py +126 -0
  32. agentnode_sdk-0.25.0/agentnode_sdk/capability/execution.py +187 -0
  33. agentnode_sdk-0.25.0/agentnode_sdk/capability/importer.py +107 -0
  34. agentnode_sdk-0.25.0/agentnode_sdk/capability/index.py +198 -0
  35. agentnode_sdk-0.25.0/agentnode_sdk/capability/manifest.py +486 -0
  36. agentnode_sdk-0.25.0/agentnode_sdk/capability/npm_import.py +135 -0
  37. agentnode_sdk-0.25.0/agentnode_sdk/capability/npm_vendor.py +180 -0
  38. agentnode_sdk-0.25.0/agentnode_sdk/capability/pack_import.py +1695 -0
  39. agentnode_sdk-0.25.0/agentnode_sdk/capability/pipeline.py +54 -0
  40. agentnode_sdk-0.25.0/agentnode_sdk/capability/tree_execution.py +205 -0
  41. agentnode_sdk-0.25.0/agentnode_sdk/capability/tree_pack.py +165 -0
  42. agentnode_sdk-0.25.0/agentnode_sdk/capability/tree_pipeline.py +58 -0
  43. agentnode_sdk-0.25.0/agentnode_sdk/capability/usability.py +174 -0
  44. agentnode_sdk-0.25.0/agentnode_sdk/capability/usability_adapter.py +151 -0
  45. agentnode_sdk-0.25.0/agentnode_sdk/capability/usability_cli.py +260 -0
  46. agentnode_sdk-0.25.0/agentnode_sdk/cli/api_auth.py +17 -0
  47. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/commands.py +54 -5
  48. agentnode_sdk-0.25.0/agentnode_sdk/cli/gateway_commands.py +1829 -0
  49. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/main.py +310 -5
  50. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/mcp_ownership.py +4 -2
  51. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/mcp_status.py +3 -1
  52. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/mcp_submit.py +2 -1
  53. agentnode_sdk-0.25.0/agentnode_sdk/cli/output.py +107 -0
  54. agentnode_sdk-0.25.0/agentnode_sdk/cli/pki_commands.py +395 -0
  55. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/publish.py +141 -34
  56. agentnode_sdk-0.25.0/agentnode_sdk/cli/remote_commands.py +712 -0
  57. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/sandbox_commands.py +33 -6
  58. agentnode_sdk-0.25.0/agentnode_sdk/cli/serve.py +13 -0
  59. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/validate.py +41 -17
  60. agentnode_sdk-0.25.0/agentnode_sdk/cli/worker_commands.py +856 -0
  61. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/client.py +15 -5
  62. agentnode_sdk-0.25.0/agentnode_sdk/conformance/__init__.py +47 -0
  63. agentnode_sdk-0.25.0/agentnode_sdk/conformance/checks.py +828 -0
  64. agentnode_sdk-0.25.0/agentnode_sdk/conformance/doubles.py +233 -0
  65. agentnode_sdk-0.25.0/agentnode_sdk/conformance/probe.py +375 -0
  66. agentnode_sdk-0.25.0/agentnode_sdk/conformance/report.py +217 -0
  67. agentnode_sdk-0.25.0/agentnode_sdk/conformance/runner.py +827 -0
  68. agentnode_sdk-0.25.0/agentnode_sdk/console/__init__.py +52 -0
  69. agentnode_sdk-0.25.0/agentnode_sdk/console/app.css +159 -0
  70. agentnode_sdk-0.25.0/agentnode_sdk/console/app.js +1151 -0
  71. agentnode_sdk-0.25.0/agentnode_sdk/console/index.html +28 -0
  72. agentnode_sdk-0.25.0/agentnode_sdk/gateway/__init__.py +52 -0
  73. agentnode_sdk-0.25.0/agentnode_sdk/gateway/accounts.py +347 -0
  74. agentnode_sdk-0.25.0/agentnode_sdk/gateway/activation.py +487 -0
  75. agentnode_sdk-0.25.0/agentnode_sdk/gateway/admission.py +416 -0
  76. agentnode_sdk-0.25.0/agentnode_sdk/gateway/allowance.py +895 -0
  77. agentnode_sdk-0.25.0/agentnode_sdk/gateway/archive.py +290 -0
  78. agentnode_sdk-0.25.0/agentnode_sdk/gateway/backup.py +339 -0
  79. agentnode_sdk-0.25.0/agentnode_sdk/gateway/billing.py +161 -0
  80. agentnode_sdk-0.25.0/agentnode_sdk/gateway/boot.py +18 -0
  81. agentnode_sdk-0.25.0/agentnode_sdk/gateway/capacity.py +305 -0
  82. agentnode_sdk-0.25.0/agentnode_sdk/gateway/certificate.py +147 -0
  83. agentnode_sdk-0.25.0/agentnode_sdk/gateway/challenge.py +231 -0
  84. agentnode_sdk-0.25.0/agentnode_sdk/gateway/client.py +597 -0
  85. agentnode_sdk-0.25.0/agentnode_sdk/gateway/connections.py +192 -0
  86. agentnode_sdk-0.25.0/agentnode_sdk/gateway/filelock.py +311 -0
  87. agentnode_sdk-0.25.0/agentnode_sdk/gateway/health.py +755 -0
  88. agentnode_sdk-0.25.0/agentnode_sdk/gateway/identity.py +1444 -0
  89. agentnode_sdk-0.25.0/agentnode_sdk/gateway/invitation.py +119 -0
  90. agentnode_sdk-0.25.0/agentnode_sdk/gateway/joining.py +316 -0
  91. agentnode_sdk-0.25.0/agentnode_sdk/gateway/ledger.py +703 -0
  92. agentnode_sdk-0.25.0/agentnode_sdk/gateway/lifecycle.py +284 -0
  93. agentnode_sdk-0.25.0/agentnode_sdk/gateway/meter.py +931 -0
  94. agentnode_sdk-0.25.0/agentnode_sdk/gateway/observability.py +418 -0
  95. agentnode_sdk-0.25.0/agentnode_sdk/gateway/operator_policy.py +361 -0
  96. agentnode_sdk-0.25.0/agentnode_sdk/gateway/pinning.py +115 -0
  97. agentnode_sdk-0.25.0/agentnode_sdk/gateway/policy_paths.py +148 -0
  98. agentnode_sdk-0.25.0/agentnode_sdk/gateway/policy_version.py +112 -0
  99. agentnode_sdk-0.25.0/agentnode_sdk/gateway/protocol.py +713 -0
  100. agentnode_sdk-0.25.0/agentnode_sdk/gateway/readiness.py +478 -0
  101. agentnode_sdk-0.25.0/agentnode_sdk/gateway/redaction.py +155 -0
  102. agentnode_sdk-0.25.0/agentnode_sdk/gateway/retention.py +998 -0
  103. agentnode_sdk-0.25.0/agentnode_sdk/gateway/runs.py +261 -0
  104. agentnode_sdk-0.25.0/agentnode_sdk/gateway/runtime_pin.py +359 -0
  105. agentnode_sdk-0.25.0/agentnode_sdk/gateway/securedir.py +280 -0
  106. agentnode_sdk-0.25.0/agentnode_sdk/gateway/server.py +5184 -0
  107. agentnode_sdk-0.25.0/agentnode_sdk/gateway/statedir.py +114 -0
  108. agentnode_sdk-0.25.0/agentnode_sdk/gateway/throttle.py +500 -0
  109. agentnode_sdk-0.25.0/agentnode_sdk/gateway/transport.py +270 -0
  110. agentnode_sdk-0.25.0/agentnode_sdk/gateway/website_link.py +248 -0
  111. agentnode_sdk-0.25.0/agentnode_sdk/machine.py +77 -0
  112. agentnode_sdk-0.25.0/agentnode_sdk/mcp_server.py +276 -0
  113. agentnode_sdk-0.25.0/agentnode_sdk/mcp_tools.py +226 -0
  114. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/models.py +1 -0
  115. agentnode_sdk-0.25.0/agentnode_sdk/pki/__init__.py +17 -0
  116. agentnode_sdk-0.25.0/agentnode_sdk/pki/enrolment.py +330 -0
  117. agentnode_sdk-0.25.0/agentnode_sdk/pki/files.py +376 -0
  118. agentnode_sdk-0.25.0/agentnode_sdk/pki/floor.py +370 -0
  119. agentnode_sdk-0.25.0/agentnode_sdk/pki/identity.py +292 -0
  120. agentnode_sdk-0.25.0/agentnode_sdk/pki/issuer.py +1229 -0
  121. agentnode_sdk-0.25.0/agentnode_sdk/pki/localfloor.py +213 -0
  122. agentnode_sdk-0.25.0/agentnode_sdk/pki/revocation.py +163 -0
  123. agentnode_sdk-0.25.0/agentnode_sdk/pki/tombstones.py +149 -0
  124. agentnode_sdk-0.25.0/agentnode_sdk/pki/trust.py +226 -0
  125. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/__init__.py +21 -0
  126. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/accounts_login.py +160 -0
  127. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/activation_export.py +219 -0
  128. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/agent_authority.py +229 -0
  129. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/agent_service.py +663 -0
  130. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/catalog.py +584 -0
  131. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/catalog_adapter.py +740 -0
  132. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/catalog_audit.py +169 -0
  133. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/catalog_cli.py +128 -0
  134. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/cert_check.py +149 -0
  135. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/control_floor.py +71 -0
  136. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/http_transport.py +884 -0
  137. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/limits.py +164 -0
  138. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/oauth_as.py +512 -0
  139. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/pairing_helper.py +283 -0
  140. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/personal_tokens.py +112 -0
  141. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/prm.py +57 -0
  142. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/probe_slot.py +312 -0
  143. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/production.py +90 -0
  144. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/retire.py +90 -0
  145. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/reverse_edge.py +386 -0
  146. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/reverse_hub.py +599 -0
  147. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/scheduler.py +191 -0
  148. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/server.py +492 -0
  149. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/target_ops.py +1195 -0
  150. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/target_probe.py +465 -0
  151. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/target_router.py +250 -0
  152. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/targets.py +858 -0
  153. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/targets_cli.py +340 -0
  154. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/tokens.py +315 -0
  155. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/trust_publication.py +1002 -0
  156. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/trust_timers.py +629 -0
  157. agentnode_sdk-0.25.0/agentnode_sdk/remote_mcp/trust_watchdog.py +1009 -0
  158. agentnode_sdk-0.25.0/agentnode_sdk/roles.py +207 -0
  159. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runner.py +7 -0
  160. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/mcp_runner.py +17 -0
  161. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/python_runner.py +66 -6
  162. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/backend.py +60 -0
  163. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/composition.py +167 -0
  164. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/container_backend.py +849 -0
  165. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/contract.py +573 -0
  166. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/egress.py +721 -0
  167. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/egress_proxy.py +49 -1
  168. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/egress_verify.py +166 -0
  169. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/policy.py +21 -14
  170. agentnode_sdk-0.25.0/agentnode_sdk/sandbox/refusal.py +318 -0
  171. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/types.py +20 -0
  172. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/signing_key.py +18 -5
  173. agentnode_sdk-0.25.0/agentnode_sdk/tools/__init__.py +1 -0
  174. agentnode_sdk-0.25.0/agentnode_sdk/tools/evidence.py +1717 -0
  175. agentnode_sdk-0.25.0/agentnode_sdk/tools/external_check.py +320 -0
  176. agentnode_sdk-0.25.0/agentnode_sdk/tools/external_run.py +41 -0
  177. agentnode_sdk-0.25.0/agentnode_sdk/verification/__init__.py +38 -0
  178. agentnode_sdk-0.25.0/agentnode_sdk/verification/channels.py +224 -0
  179. agentnode_sdk-0.25.0/agentnode_sdk/verification/config.py +244 -0
  180. agentnode_sdk-0.25.0/agentnode_sdk/verification/launcher.py +127 -0
  181. agentnode_sdk-0.25.0/agentnode_sdk/verification/run.py +870 -0
  182. agentnode_sdk-0.25.0/agentnode_sdk/verification/sentinels.py +231 -0
  183. agentnode_sdk-0.25.0/agentnode_sdk/verification/transport.py +117 -0
  184. agentnode_sdk-0.25.0/agentnode_sdk/worker/__init__.py +575 -0
  185. agentnode_sdk-0.25.0/agentnode_sdk/worker/dialback.py +265 -0
  186. agentnode_sdk-0.25.0/agentnode_sdk/worker/edge.py +349 -0
  187. agentnode_sdk-0.25.0/agentnode_sdk/worker/journal.py +538 -0
  188. agentnode_sdk-0.25.0/agentnode_sdk/worker/lease.py +278 -0
  189. agentnode_sdk-0.25.0/agentnode_sdk/worker/local.py +532 -0
  190. agentnode_sdk-0.25.0/agentnode_sdk/worker/pairing.py +364 -0
  191. agentnode_sdk-0.25.0/agentnode_sdk/worker/pairkeys.py +276 -0
  192. agentnode_sdk-0.25.0/agentnode_sdk/worker/pins.py +169 -0
  193. agentnode_sdk-0.25.0/agentnode_sdk/worker/protocol.py +595 -0
  194. agentnode_sdk-0.25.0/agentnode_sdk/worker/reconcile.py +208 -0
  195. agentnode_sdk-0.25.0/agentnode_sdk/worker/release.py +280 -0
  196. agentnode_sdk-0.25.0/agentnode_sdk/worker/remote.py +910 -0
  197. agentnode_sdk-0.25.0/agentnode_sdk/worker/rollback_proof.py +443 -0
  198. agentnode_sdk-0.25.0/agentnode_sdk/worker/service.py +1300 -0
  199. agentnode_sdk-0.25.0/agentnode_sdk/worker/service_isolation.py +51 -0
  200. agentnode_sdk-0.25.0/agentnode_sdk/worker/tls.py +643 -0
  201. agentnode_sdk-0.25.0/agentnode_sdk/worker/topology.py +250 -0
  202. agentnode_sdk-0.25.0/agentnode_sdk/worker/trust_install.py +212 -0
  203. agentnode_sdk-0.25.0/deploy/ISOLATION_TRADE.md +100 -0
  204. agentnode_sdk-0.25.0/deploy/README.md +142 -0
  205. agentnode_sdk-0.25.0/deploy/RISKS.md +96 -0
  206. agentnode_sdk-0.25.0/deploy/agentnode-gateway.service +78 -0
  207. agentnode_sdk-0.25.0/deploy/agentnode-pki-tick.service +26 -0
  208. agentnode_sdk-0.25.0/deploy/agentnode-pki-tick.timer +18 -0
  209. agentnode_sdk-0.25.0/deploy/agentnode-worker.service +139 -0
  210. agentnode_sdk-0.25.0/deploy/agentnode-worker.tmpfiles.conf +11 -0
  211. agentnode_sdk-0.25.0/deploy/backup-and-restore.sh +450 -0
  212. agentnode_sdk-0.25.0/deploy/build-from-commit.sh +52 -0
  213. agentnode_sdk-0.25.0/deploy/counter-check-r5.sh +155 -0
  214. agentnode_sdk-0.25.0/deploy/counter-linux.sh +39 -0
  215. agentnode_sdk-0.25.0/deploy/customer-worker/activate-customer-worker.sh +32 -0
  216. agentnode_sdk-0.25.0/deploy/customer-worker/customer-worker-floor.service.in +10 -0
  217. agentnode_sdk-0.25.0/deploy/customer-worker/customer-worker-floor.timer.in +10 -0
  218. agentnode_sdk-0.25.0/deploy/customer-worker/customer-worker-runtime.service.in +18 -0
  219. agentnode_sdk-0.25.0/deploy/customer-worker/customer-worker.service.in +52 -0
  220. agentnode_sdk-0.25.0/deploy/customer-worker/install-customer-worker.sh +103 -0
  221. agentnode_sdk-0.25.0/deploy/customer-worker/remove-customer-worker.sh +43 -0
  222. agentnode_sdk-0.25.0/deploy/deploy-pinned.sh +179 -0
  223. agentnode_sdk-0.25.0/deploy/encrypted-restore-drill.sh +211 -0
  224. agentnode_sdk-0.25.0/deploy/local-worker/README-slice1.md +114 -0
  225. agentnode_sdk-0.25.0/deploy/local-worker/README.md +264 -0
  226. agentnode_sdk-0.25.0/deploy/local-worker/control/nginx-agent-http.conf +5 -0
  227. agentnode_sdk-0.25.0/deploy/local-worker/control/nginx-agent-locations.conf +32 -0
  228. agentnode_sdk-0.25.0/deploy/local-worker/control/units.txt +88 -0
  229. agentnode_sdk-0.25.0/deploy/local-worker/linux/check-runtime.sh +50 -0
  230. agentnode_sdk-0.25.0/deploy/local-worker/linux/install.sh +388 -0
  231. agentnode_sdk-0.25.0/deploy/local-worker/linux/uninstall.sh +64 -0
  232. agentnode_sdk-0.25.0/deploy/local-worker/release-tools/build_bundle.py +162 -0
  233. agentnode_sdk-0.25.0/deploy/local-worker/release-tools/prepare-wsl-inputs.sh +74 -0
  234. agentnode_sdk-0.25.0/deploy/local-worker/windows/Ed25519.ps1 +100 -0
  235. agentnode_sdk-0.25.0/deploy/local-worker/windows/install-agentnode-worker.ps1 +210 -0
  236. agentnode_sdk-0.25.0/deploy/local-worker/windows/tests/ed25519-vectors.ps1 +40 -0
  237. agentnode_sdk-0.25.0/deploy/local-worker/windows/wsl-inner.sh +61 -0
  238. agentnode_sdk-0.25.0/deploy/remote-mcp/README.md +232 -0
  239. agentnode_sdk-0.25.0/deploy/remote-mcp/cert-drill.sh +232 -0
  240. agentnode_sdk-0.25.0/deploy/remote-mcp/cert.env.example +22 -0
  241. agentnode_sdk-0.25.0/deploy/remote-mcp/nginx-main.conf +24 -0
  242. agentnode_sdk-0.25.0/deploy/remote-mcp/nginx-mcp.conf +67 -0
  243. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-alert@.service +11 -0
  244. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-attest-renew.service +17 -0
  245. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-attest-renew.timer +15 -0
  246. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-check.service +18 -0
  247. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-check.service.d/trust-watchdog.conf +6 -0
  248. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-check.timer +11 -0
  249. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-renew.service +18 -0
  250. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-renew.sh +132 -0
  251. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-cert-renew.timer +10 -0
  252. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-control-floor.service +13 -0
  253. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-control-floor.timer +12 -0
  254. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-cycle.service +14 -0
  255. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-cycle.timer +11 -0
  256. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-refresh.service +16 -0
  257. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-refresh.timer +15 -0
  258. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-watchdog.service +19 -0
  259. agentnode_sdk-0.25.0/deploy/remote-mcp/rmcp-trust-watchdog.timer +10 -0
  260. agentnode_sdk-0.25.0/deploy/remote-mcp/trust-timers.sh +23 -0
  261. agentnode_sdk-0.25.0/deploy/rollback-artefact.sh +80 -0
  262. agentnode_sdk-0.25.0/deploy/rollback-drill.sh +119 -0
  263. agentnode_sdk-0.25.0/deploy/separate-worker-host/README.md +211 -0
  264. agentnode_sdk-0.25.0/deploy/separate-worker-host/agentnode-floor-advance.service +37 -0
  265. agentnode_sdk-0.25.0/deploy/separate-worker-host/agentnode-floor-advance.timer +19 -0
  266. agentnode_sdk-0.25.0/deploy/separate-worker-host/agentnode-worker-runtime.service +96 -0
  267. agentnode_sdk-0.25.0/deploy/separate-worker-host/build_artefacts.py +279 -0
  268. agentnode_sdk-0.25.0/deploy/separate-worker-host/control-plane.service +75 -0
  269. agentnode_sdk-0.25.0/deploy/separate-worker-host/diagnose.sh +111 -0
  270. agentnode_sdk-0.25.0/deploy/separate-worker-host/install-control-plane.sh +491 -0
  271. agentnode_sdk-0.25.0/deploy/separate-worker-host/install-worker-host.sh +590 -0
  272. agentnode_sdk-0.25.0/deploy/separate-worker-host/prerequisites.py +313 -0
  273. agentnode_sdk-0.25.0/deploy/separate-worker-host/rollback-one-host.sh +371 -0
  274. agentnode_sdk-0.25.0/deploy/separate-worker-host/upgrade-one-host.sh +313 -0
  275. agentnode_sdk-0.25.0/deploy/separate-worker-host/worker-host.service +126 -0
  276. agentnode_sdk-0.25.0/deploy/single-host-development.sh +321 -0
  277. agentnode_sdk-0.25.0/docs/RELIABILITY-test_verification_run.md +87 -0
  278. agentnode_sdk-0.25.0/docs/accounts-and-limits.md +159 -0
  279. agentnode_sdk-0.25.0/docs/cloud-sandbox-production-gaps.md +53 -0
  280. agentnode_sdk-0.25.0/docs/compatibility-matrix.md +109 -0
  281. agentnode_sdk-0.25.0/docs/evidence-contract-limits.md +98 -0
  282. agentnode_sdk-0.25.0/docs/evidence-criteria-split.md +123 -0
  283. agentnode_sdk-0.25.0/docs/incident-process.md +116 -0
  284. agentnode_sdk-0.25.0/docs/managed-access-migration.md +154 -0
  285. agentnode_sdk-0.25.0/docs/managed-sandbox-binding.md +63 -0
  286. agentnode_sdk-0.25.0/docs/production-readiness.md +90 -0
  287. agentnode_sdk-0.25.0/docs/review/BACKUP-SECRETS-CRITERION-V2.md +70 -0
  288. agentnode_sdk-0.25.0/docs/review/BUILD-IDENTITY-AND-WHAT-SIGNS-IT.md +100 -0
  289. agentnode_sdk-0.25.0/docs/review/CAPACITY-QUEUE-WHAT-WAS-FROZEN-FIRST.md +28 -0
  290. agentnode_sdk-0.25.0/docs/review/EARLY-ENDING-WHAT-WAS-FROZEN-FIRST.md +49 -0
  291. agentnode_sdk-0.25.0/docs/review/EXISTENCE-ISOLATION-CRITERION-V2.md +95 -0
  292. agentnode_sdk-0.25.0/docs/review/FREEZE-R2.md +73 -0
  293. agentnode_sdk-0.25.0/docs/review/FREEZE.md +71 -0
  294. agentnode_sdk-0.25.0/docs/review/GOVERNANCE-LIMIT-B-EVIDENCE-OF-A-REVIEW-IS-A-VERDICT.md +92 -0
  295. agentnode_sdk-0.25.0/docs/review/INTERRUPTED-AUDIT-WHAT-WAS-FROZEN-FIRST.md +43 -0
  296. agentnode_sdk-0.25.0/docs/review/PROFILE-R1-COULD-NOT-BE-SATISFIED.md +57 -0
  297. agentnode_sdk-0.25.0/docs/review/TIMING-PROTOCOL-V2.md +126 -0
  298. agentnode_sdk-0.25.0/docs/review/alpha-capacity-queue-r1.json +127 -0
  299. agentnode_sdk-0.25.0/docs/review/alpha-r2-admission-r1.json +89 -0
  300. agentnode_sdk-0.25.0/docs/review/alpha-r2-admission-r2.json +124 -0
  301. agentnode_sdk-0.25.0/docs/review/alpha-r2-admission-r3.json +151 -0
  302. agentnode_sdk-0.25.0/docs/review/alpha-r2-admission-r4.json +202 -0
  303. agentnode_sdk-0.25.0/docs/review/alpha-r2-dataops-r1.json +84 -0
  304. agentnode_sdk-0.25.0/docs/review/alpha-r2-dataops-r2.json +117 -0
  305. agentnode_sdk-0.25.0/docs/review/alpha-r2-dataops-r3.json +144 -0
  306. agentnode_sdk-0.25.0/docs/review/alpha-r2-dataops-r4.json +197 -0
  307. agentnode_sdk-0.25.0/docs/review/alpha-r2-tenancy-r1.json +75 -0
  308. agentnode_sdk-0.25.0/docs/review/alpha-r2-tenancy-r2.json +109 -0
  309. agentnode_sdk-0.25.0/docs/review/alpha-r2-tenancy-r3.json +139 -0
  310. agentnode_sdk-0.25.0/docs/review/alpha-r2-tenancy-r4.json +188 -0
  311. agentnode_sdk-0.25.0/docs/review/alpha-runtime-pin-r2.json +134 -0
  312. agentnode_sdk-0.25.0/docs/review/counter-checks.md +198 -0
  313. agentnode_sdk-0.25.0/docs/review/early-ending-success-r1.json +117 -0
  314. agentnode_sdk-0.25.0/docs/review/interrupted-audit-record-r1.json +125 -0
  315. agentnode_sdk-0.25.0/docs/review/managed-console-final-r1.json +160 -0
  316. agentnode_sdk-0.25.0/docs/self-hosted-sandbox.md +289 -0
  317. agentnode_sdk-0.25.0/docs/what-is-kept.md +226 -0
  318. agentnode_sdk-0.25.0/pyproject.toml +85 -0
  319. agentnode_sdk-0.25.0/scripts/counter-check-mtls-stage5.sh +12 -0
  320. agentnode_sdk-0.25.0/scripts/counter-check-mtls.sh +8 -0
  321. agentnode_sdk-0.25.0/scripts/counter_check_cancel.py +296 -0
  322. agentnode_sdk-0.25.0/scripts/counter_check_commit_range.py +518 -0
  323. agentnode_sdk-0.25.0/scripts/health_counter_checks.py +357 -0
  324. agentnode_sdk-0.25.0/scripts/mtls_counter_checks.py +339 -0
  325. agentnode_sdk-0.25.0/scripts/mtls_stage5_counter_checks.py +416 -0
  326. agentnode_sdk-0.25.0/scripts/remote_worker_counter_checks.py +593 -0
  327. agentnode_sdk-0.25.0/scripts/the_access_layer.py +236 -0
  328. agentnode_sdk-0.25.0/scripts/the_usage_records.py +225 -0
  329. agentnode_sdk-0.25.0/security-lane/test_timing_microbenchmark.py +192 -0
  330. agentnode_sdk-0.25.0/tests/a_resolver_that_can_change_its_mind.py +187 -0
  331. agentnode_sdk-0.25.0/tests/capability/_doubles.py +26 -0
  332. agentnode_sdk-0.25.0/tests/capability/_pack_fixtures.py +85 -0
  333. agentnode_sdk-0.25.0/tests/capability/fixtures/deterministic_add_server.py +86 -0
  334. agentnode_sdk-0.25.0/tests/capability/fixtures/multifile_echo_server/app/server.py +78 -0
  335. agentnode_sdk-0.25.0/tests/capability/fixtures/multifile_echo_server/app/toolimpl.py +12 -0
  336. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/multi-tool-pack/agentnode.yaml +32 -0
  337. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/multi-tool-pack/pyproject.toml +13 -0
  338. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/multi-tool-pack/src/multi_tool_pack/__init__.py +1 -0
  339. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/multi-tool-pack/src/multi_tool_pack/slug.py +18 -0
  340. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/multi-tool-pack/src/multi_tool_pack/tool.py +14 -0
  341. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/slow-pack/agentnode.yaml +32 -0
  342. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/slow-pack/pyproject.toml +13 -0
  343. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/slow-pack/src/slow_pack/__init__.py +1 -0
  344. agentnode_sdk-0.25.0/tests/capability/fixtures/packs/slow-pack/src/slow_pack/tool.py +10 -0
  345. agentnode_sdk-0.25.0/tests/capability/test_adapter_client.py +102 -0
  346. agentnode_sdk-0.25.0/tests/capability/test_capability_cli.py +55 -0
  347. agentnode_sdk-0.25.0/tests/capability/test_client_config.py +42 -0
  348. agentnode_sdk-0.25.0/tests/capability/test_contract_execution_audit.py +263 -0
  349. agentnode_sdk-0.25.0/tests/capability/test_index_import.py +110 -0
  350. agentnode_sdk-0.25.0/tests/capability/test_manifest.py +162 -0
  351. agentnode_sdk-0.25.0/tests/capability/test_npm_vendor.py +39 -0
  352. agentnode_sdk-0.25.0/tests/capability/test_pack_import.py +1563 -0
  353. agentnode_sdk-0.25.0/tests/capability/test_tree_capability.py +173 -0
  354. agentnode_sdk-0.25.0/tests/capability/test_tree_pack.py +76 -0
  355. agentnode_sdk-0.25.0/tests/capability/test_usability_adapter.py +104 -0
  356. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/conftest.py +650 -378
  357. agentnode_sdk-0.25.0/tests/consent.py +66 -0
  358. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/lanes/FROZEN_INVENTORY.json +308 -9
  359. agentnode_sdk-0.25.0/tests/lanes/eg8_counter_check.py +115 -0
  360. agentnode_sdk-0.25.0/tests/real_answers.py +163 -0
  361. agentnode_sdk-0.25.0/tests/reliability.py +115 -0
  362. agentnode_sdk-0.25.0/tests/remote_mcp/catalog_fixtures.py +171 -0
  363. agentnode_sdk-0.25.0/tests/remote_mcp/data/targets_a36ddcdd.py.txt +743 -0
  364. agentnode_sdk-0.25.0/tests/remote_mcp/target_fixtures.py +80 -0
  365. agentnode_sdk-0.25.0/tests/remote_mcp/target_stand.py +172 -0
  366. agentnode_sdk-0.25.0/tests/remote_mcp/test_attest_old_reader.py +69 -0
  367. agentnode_sdk-0.25.0/tests/remote_mcp/test_attest_renewal.py +942 -0
  368. agentnode_sdk-0.25.0/tests/remote_mcp/test_attest_watchdog.py +300 -0
  369. agentnode_sdk-0.25.0/tests/remote_mcp/test_catalog.py +730 -0
  370. agentnode_sdk-0.25.0/tests/remote_mcp/test_cert_check.py +147 -0
  371. agentnode_sdk-0.25.0/tests/remote_mcp/test_cimd_bounds.py +194 -0
  372. agentnode_sdk-0.25.0/tests/remote_mcp/test_cimd_hardening.py +177 -0
  373. agentnode_sdk-0.25.0/tests/remote_mcp/test_e2e_standard_client.py +343 -0
  374. agentnode_sdk-0.25.0/tests/remote_mcp/test_limits_runtime.py +249 -0
  375. agentnode_sdk-0.25.0/tests/remote_mcp/test_live_token_revocation.py +170 -0
  376. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker.py +1270 -0
  377. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker_catalog.py +169 -0
  378. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker_edge.py +652 -0
  379. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker_pairing.py +591 -0
  380. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker_release.py +434 -0
  381. agentnode_sdk-0.25.0/tests/remote_mcp/test_local_worker_slice2_units.py +378 -0
  382. agentnode_sdk-0.25.0/tests/remote_mcp/test_probe_slot.py +433 -0
  383. agentnode_sdk-0.25.0/tests/remote_mcp/test_production_fail_closed.py +224 -0
  384. agentnode_sdk-0.25.0/tests/remote_mcp/test_production_login.py +555 -0
  385. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_invariants.py +51 -0
  386. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_lifecycle.py +338 -0
  387. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_negatives.py +277 -0
  388. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_negatives_2.py +580 -0
  389. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_register.py +235 -0
  390. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_routing.py +604 -0
  391. agentnode_sdk-0.25.0/tests/remote_mcp/test_target_scheduler.py +150 -0
  392. agentnode_sdk-0.25.0/tests/remote_mcp/test_transport.py +716 -0
  393. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_floor_units.py +314 -0
  394. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_install_legacy.py +807 -0
  395. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_publication.py +822 -0
  396. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_refresh_confirm.py +375 -0
  397. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_schedule.py +421 -0
  398. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_watchdog.py +320 -0
  399. agentnode_sdk-0.25.0/tests/remote_mcp/test_trust_watchdog_wd1.py +1169 -0
  400. agentnode_sdk-0.25.0/tests/serving.py +220 -0
  401. agentnode_sdk-0.25.0/tests/shell_commands.py +394 -0
  402. agentnode_sdk-0.25.0/tests/smoke/__init__.py +0 -0
  403. agentnode_sdk-0.25.0/tests/smoke/test_smoke_sdk.py +357 -0
  404. agentnode_sdk-0.25.0/tests/test_a_device_is_called_what_it_was_paired_as.py +73 -0
  405. agentnode_sdk-0.25.0/tests/test_a_failed_read_is_not_an_answer.py +420 -0
  406. agentnode_sdk-0.25.0/tests/test_a_failed_settlement_leaves_a_trace.py +277 -0
  407. agentnode_sdk-0.25.0/tests/test_a_half_written_file.py +323 -0
  408. agentnode_sdk-0.25.0/tests/test_a_hangup_is_not_an_internal_error.py +130 -0
  409. agentnode_sdk-0.25.0/tests/test_a_joining_is_a_small_transaction.py +205 -0
  410. agentnode_sdk-0.25.0/tests/test_a_name_that_changes_where_it_points.py +260 -0
  411. agentnode_sdk-0.25.0/tests/test_a_pairing_is_a_small_transaction.py +308 -0
  412. agentnode_sdk-0.25.0/tests/test_a_policy_change_takes_effect_at_once.py +810 -0
  413. agentnode_sdk-0.25.0/tests/test_a_policy_refusal_is_named_as_one.py +336 -0
  414. agentnode_sdk-0.25.0/tests/test_a_property_this_sandbox_lacks_is_named_as_one.py +236 -0
  415. agentnode_sdk-0.25.0/tests/test_a_reader_is_not_refused_for_a_transient.py +171 -0
  416. agentnode_sdk-0.25.0/tests/test_a_rebooted_worker_comes_back.py +369 -0
  417. agentnode_sdk-0.25.0/tests/test_a_refusal_keeps_its_name.py +78 -0
  418. agentnode_sdk-0.25.0/tests/test_a_refusal_that_names_the_right_cause.py +137 -0
  419. agentnode_sdk-0.25.0/tests/test_a_sealed_backup.py +269 -0
  420. agentnode_sdk-0.25.0/tests/test_a_secret_does_not_outlive_its_use.py +221 -0
  421. agentnode_sdk-0.25.0/tests/test_a_self_repair_guard_can_actually_fire.py +145 -0
  422. agentnode_sdk-0.25.0/tests/test_a_spent_secret_does_not_linger.py +1099 -0
  423. agentnode_sdk-0.25.0/tests/test_a_stop_reaches_work_that_has_not_started.py +104 -0
  424. agentnode_sdk-0.25.0/tests/test_a_stopped_waiting_job_says_why_it_stopped.py +497 -0
  425. agentnode_sdk-0.25.0/tests/test_a_waiting_job_has_no_network.py +345 -0
  426. agentnode_sdk-0.25.0/tests/test_a_wedged_measurement.py +119 -0
  427. agentnode_sdk-0.25.0/tests/test_a_withdrawn_identity_stays_withdrawn.py +234 -0
  428. agentnode_sdk-0.25.0/tests/test_account_ceilings.py +278 -0
  429. agentnode_sdk-0.25.0/tests/test_activation_lock_liveness.py +109 -0
  430. agentnode_sdk-0.25.0/tests/test_adding_a_second_machine.py +287 -0
  431. agentnode_sdk-0.25.0/tests/test_admission.py +866 -0
  432. agentnode_sdk-0.25.0/tests/test_admission_measured.py +582 -0
  433. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_amendment.py +8 -0
  434. agentnode_sdk-0.25.0/tests/test_allowance.py +1400 -0
  435. agentnode_sdk-0.25.0/tests/test_an_answer_that_was_lost_can_be_recovered.py +412 -0
  436. agentnode_sdk-0.25.0/tests/test_an_interrupted_install_can_still_say_it_is_not_ready.py +208 -0
  437. agentnode_sdk-0.25.0/tests/test_an_unreadable_revocation_list_is_not_a_missing_one.py +501 -0
  438. agentnode_sdk-0.25.0/tests/test_approval_targets.py +217 -0
  439. agentnode_sdk-0.25.0/tests/test_backup_drill.py +525 -0
  440. agentnode_sdk-0.25.0/tests/test_browser_sessions.py +400 -0
  441. agentnode_sdk-0.25.0/tests/test_cancel_consistency.py +684 -0
  442. agentnode_sdk-0.25.0/tests/test_cancel_is_not_a_wait.py +662 -0
  443. agentnode_sdk-0.25.0/tests/test_capacity_billing.py +277 -0
  444. agentnode_sdk-0.25.0/tests/test_capacity_queue.py +311 -0
  445. agentnode_sdk-0.25.0/tests/test_capacity_standing.py +894 -0
  446. agentnode_sdk-0.25.0/tests/test_challenge.py +513 -0
  447. agentnode_sdk-0.25.0/tests/test_ci_full_lanes.py +217 -0
  448. agentnode_sdk-0.25.0/tests/test_ci_pr_lane.py +94 -0
  449. agentnode_sdk-0.25.0/tests/test_cleanup_is_the_products_own.py +1013 -0
  450. agentnode_sdk-0.25.0/tests/test_cli_api_key_header.py +75 -0
  451. agentnode_sdk-0.25.0/tests/test_cli_manifest_json.py +303 -0
  452. agentnode_sdk-0.25.0/tests/test_cli_run_failure_is_reported.py +91 -0
  453. agentnode_sdk-0.25.0/tests/test_closing_a_policy_needs_no_worker.py +449 -0
  454. agentnode_sdk-0.25.0/tests/test_compatibility.py +218 -0
  455. agentnode_sdk-0.25.0/tests/test_compatibility_challenge.py +328 -0
  456. agentnode_sdk-0.25.0/tests/test_conformance_checks.py +1023 -0
  457. agentnode_sdk-0.25.0/tests/test_conformance_report.py +123 -0
  458. agentnode_sdk-0.25.0/tests/test_consent_and_tools.py +648 -0
  459. agentnode_sdk-0.25.0/tests/test_console_browser.py +556 -0
  460. agentnode_sdk-0.25.0/tests/test_contract_and_schemas.py +236 -0
  461. agentnode_sdk-0.25.0/tests/test_credentials.py +157 -0
  462. agentnode_sdk-0.25.0/tests/test_crosshost_rebuild_request.py +262 -0
  463. agentnode_sdk-0.25.0/tests/test_deleting_an_account_clears_its_ceilings.py +176 -0
  464. agentnode_sdk-0.25.0/tests/test_deploying_refuses.py +221 -0
  465. agentnode_sdk-0.25.0/tests/test_dispatch.py +228 -0
  466. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_e2e_runtime.py +6 -2
  467. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_egress_lifecycle.py +37 -3
  468. agentnode_sdk-0.25.0/tests/test_em3_contract.py +481 -0
  469. agentnode_sdk-0.25.0/tests/test_em3c_cli.py +974 -0
  470. agentnode_sdk-0.25.0/tests/test_em3c_gateway.py +4318 -0
  471. agentnode_sdk-0.25.0/tests/test_end_to_end_rest.py +244 -0
  472. agentnode_sdk-0.25.0/tests/test_endings.py +668 -0
  473. agentnode_sdk-0.25.0/tests/test_ever_started_means_the_worker_took_it.py +111 -0
  474. agentnode_sdk-0.25.0/tests/test_every_door.py +406 -0
  475. agentnode_sdk-0.25.0/tests/test_every_refusal_is_actionable.py +122 -0
  476. agentnode_sdk-0.25.0/tests/test_evidence.py +1991 -0
  477. agentnode_sdk-0.25.0/tests/test_existence_is_not_disclosed.py +328 -0
  478. agentnode_sdk-0.25.0/tests/test_export_carries_limits_and_one_off_use.py +240 -0
  479. agentnode_sdk-0.25.0/tests/test_external_config.py +271 -0
  480. agentnode_sdk-0.25.0/tests/test_finding_p_a_pathname_lock.py +216 -0
  481. agentnode_sdk-0.25.0/tests/test_frozen_inventory_controls.py +109 -0
  482. agentnode_sdk-0.25.0/tests/test_github_action_contract.py +114 -0
  483. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_schema.py +26 -2
  484. agentnode_sdk-0.25.0/tests/test_interrupted_record.py +1437 -0
  485. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_layer3_interpreter_and_no_runtime_install.py +9 -3
  486. agentnode_sdk-0.25.0/tests/test_lifecycle_deadlock.py +318 -0
  487. agentnode_sdk-0.25.0/tests/test_lifecycle_release.py +324 -0
  488. agentnode_sdk-0.25.0/tests/test_mcp_catalog_install.py +126 -0
  489. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_server.py +9 -9
  490. agentnode_sdk-0.25.0/tests/test_mcp_tool_error_result.py +79 -0
  491. agentnode_sdk-0.25.0/tests/test_measurement_is_about_this_state.py +221 -0
  492. agentnode_sdk-0.25.0/tests/test_mtls_fail_closed.py +375 -0
  493. agentnode_sdk-0.25.0/tests/test_mtls_floor.py +482 -0
  494. agentnode_sdk-0.25.0/tests/test_mtls_issuer.py +478 -0
  495. agentnode_sdk-0.25.0/tests/test_mtls_only_door.py +126 -0
  496. agentnode_sdk-0.25.0/tests/test_mtls_parity.py +236 -0
  497. agentnode_sdk-0.25.0/tests/test_mtls_publication.py +189 -0
  498. agentnode_sdk-0.25.0/tests/test_mtls_renewal.py +232 -0
  499. agentnode_sdk-0.25.0/tests/test_mtls_revocation.py +471 -0
  500. agentnode_sdk-0.25.0/tests/test_mtls_transport.py +513 -0
  501. agentnode_sdk-0.25.0/tests/test_no_tool_cache_is_tracked.py +40 -0
  502. agentnode_sdk-0.25.0/tests/test_one_key_per_pair.py +238 -0
  503. agentnode_sdk-0.25.0/tests/test_one_off_allowance.py +332 -0
  504. agentnode_sdk-0.25.0/tests/test_one_way_in.py +277 -0
  505. agentnode_sdk-0.25.0/tests/test_one_writer_of_the_token_file_at_a_time.py +321 -0
  506. agentnode_sdk-0.25.0/tests/test_only_narrowing.py +420 -0
  507. agentnode_sdk-0.25.0/tests/test_only_one_control_plane_owns_a_worker.py +313 -0
  508. agentnode_sdk-0.25.0/tests/test_optional_providers_skip_cleanly.py +93 -0
  509. agentnode_sdk-0.25.0/tests/test_p13_control_plane_statement.py +387 -0
  510. agentnode_sdk-0.25.0/tests/test_p13_rollback_waiver_needs_evidence.py +52 -0
  511. agentnode_sdk-0.25.0/tests/test_policy_composition.py +219 -0
  512. agentnode_sdk-0.25.0/tests/test_private_read_retry_windows_share.py +230 -0
  513. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_provider_matrix.py +20 -2
  514. agentnode_sdk-0.25.0/tests/test_r1_both_revisions.py +106 -0
  515. agentnode_sdk-0.25.0/tests/test_r1_counter_checks.py +235 -0
  516. agentnode_sdk-0.25.0/tests/test_r1_runtime_remediation.py +826 -0
  517. agentnode_sdk-0.25.0/tests/test_reachable.py +1307 -0
  518. agentnode_sdk-0.25.0/tests/test_readme_sandbox_platforms.py +41 -0
  519. agentnode_sdk-0.25.0/tests/test_remote_connect_link.py +131 -0
  520. agentnode_sdk-0.25.0/tests/test_retention_every_class.py +414 -0
  521. agentnode_sdk-0.25.0/tests/test_risks_page_matches_the_transport.py +81 -0
  522. agentnode_sdk-0.25.0/tests/test_root_lockfile_is_sealed.py +53 -0
  523. agentnode_sdk-0.25.0/tests/test_routes_register.py +306 -0
  524. agentnode_sdk-0.25.0/tests/test_runtime_pin.py +719 -0
  525. agentnode_sdk-0.25.0/tests/test_sandbox_availability_docs.py +134 -0
  526. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_sandbox_backend.py +7 -0
  527. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_sandbox_doctor.py +35 -2
  528. agentnode_sdk-0.25.0/tests/test_self_hosted_guide.py +197 -0
  529. agentnode_sdk-0.25.0/tests/test_serve_stdio.py +168 -0
  530. agentnode_sdk-0.25.0/tests/test_serve_tools.py +277 -0
  531. agentnode_sdk-0.25.0/tests/test_serving_ownership.py +134 -0
  532. agentnode_sdk-0.25.0/tests/test_socket_worker.py +2024 -0
  533. agentnode_sdk-0.25.0/tests/test_start_boundary.py +275 -0
  534. agentnode_sdk-0.25.0/tests/test_start_rehearsal.py +237 -0
  535. agentnode_sdk-0.25.0/tests/test_state_consistency.py +2902 -0
  536. agentnode_sdk-0.25.0/tests/test_stop_reason.py +563 -0
  537. agentnode_sdk-0.25.0/tests/test_stopping.py +691 -0
  538. agentnode_sdk-0.25.0/tests/test_target_pki_permanence.py +93 -0
  539. agentnode_sdk-0.25.0/tests/test_target_trust_install.py +105 -0
  540. agentnode_sdk-0.25.0/tests/test_tenancy_on_every_surface.py +915 -0
  541. agentnode_sdk-0.25.0/tests/test_the_binding_describes_the_right_machine.py +92 -0
  542. agentnode_sdk-0.25.0/tests/test_the_build_id_is_readable_while_it_serves.py +98 -0
  543. agentnode_sdk-0.25.0/tests/test_the_counter_is_not_a_run_record.py +202 -0
  544. agentnode_sdk-0.25.0/tests/test_the_durable_record_carries_the_real_ending.py +321 -0
  545. agentnode_sdk-0.25.0/tests/test_the_durable_record_comes_before_the_answer.py +362 -0
  546. agentnode_sdk-0.25.0/tests/test_the_floor_under_concurrent_accepts.py +399 -0
  547. agentnode_sdk-0.25.0/tests/test_the_gateway_refuses_while_its_worker_is_gone.py +615 -0
  548. agentnode_sdk-0.25.0/tests/test_the_gateways_own_fault_is_named_as_one.py +225 -0
  549. agentnode_sdk-0.25.0/tests/test_the_lease_is_kept_alive.py +240 -0
  550. agentnode_sdk-0.25.0/tests/test_the_meter_key_is_written_whole.py +75 -0
  551. agentnode_sdk-0.25.0/tests/test_the_operators_withdrawal_reaches_a_waiting_job.py +290 -0
  552. agentnode_sdk-0.25.0/tests/test_the_reason_reaches_the_ledger.py +229 -0
  553. agentnode_sdk-0.25.0/tests/test_the_repair_of_what_two_machines_found.py +494 -0
  554. agentnode_sdk-0.25.0/tests/test_the_route_out_is_owned_and_verified.py +1038 -0
  555. agentnode_sdk-0.25.0/tests/test_the_two_roles_are_separable.py +376 -0
  556. agentnode_sdk-0.25.0/tests/test_the_worker_may_be_on_another_host.py +400 -0
  557. agentnode_sdk-0.25.0/tests/test_the_worker_remembers_what_it_ran.py +436 -0
  558. agentnode_sdk-0.25.0/tests/test_timeout_rc_is_gone_loudly.py +59 -0
  559. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_toolpack_credentials_b.py +31 -2
  560. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_toolpack_sandbox.py +63 -6
  561. agentnode_sdk-0.25.0/tests/test_transport_bytes.py +136 -0
  562. agentnode_sdk-0.25.0/tests/test_transport_claims_match_the_code.py +86 -0
  563. agentnode_sdk-0.25.0/tests/test_trust_install_confirm.py +200 -0
  564. agentnode_sdk-0.25.0/tests/test_two_accounts.py +475 -0
  565. agentnode_sdk-0.25.0/tests/test_two_accounts_every_door.py +245 -0
  566. agentnode_sdk-0.25.0/tests/test_two_accounts_in_a_browser.py +435 -0
  567. agentnode_sdk-0.25.0/tests/test_two_machine_claim.py +30 -0
  568. agentnode_sdk-0.25.0/tests/test_under_change_and_restart.py +517 -0
  569. agentnode_sdk-0.25.0/tests/test_upgrade_and_rollback_are_real.py +411 -0
  570. agentnode_sdk-0.25.0/tests/test_verification_channels.py +575 -0
  571. agentnode_sdk-0.25.0/tests/test_verification_run.py +716 -0
  572. agentnode_sdk-0.25.0/tests/test_watching.py +123 -0
  573. agentnode_sdk-0.25.0/tests/test_website_link.py +214 -0
  574. agentnode_sdk-0.25.0/tests/test_website_link_door.py +238 -0
  575. agentnode_sdk-0.25.0/tests/test_what_is_kept.py +1127 -0
  576. agentnode_sdk-0.25.0/tests/test_what_the_gateway_says_about_its_worker.py +674 -0
  577. agentnode_sdk-0.25.0/tests/test_what_the_host_needs_first.py +908 -0
  578. agentnode_sdk-0.25.0/tests/test_what_the_worker_says_about_its_doors.py +237 -0
  579. agentnode_sdk-0.25.0/tests/test_worker_autostart_contract.py +71 -0
  580. agentnode_sdk-0.25.0/tests/the_lock_contention_child.py +280 -0
  581. agentnode_sdk-0.25.0/tests/timing_investigation.py +187 -0
  582. agentnode_sdk-0.25.0/tests/timing_v2.py +301 -0
  583. agentnode_sdk-0.25.0/tests/two_machine_claim.py +47 -0
  584. agentnode_sdk-0.24.0/agentnode_sdk/__init__.py +0 -83
  585. agentnode_sdk-0.24.0/agentnode_sdk/cli/output.py +0 -48
  586. agentnode_sdk-0.24.0/agentnode_sdk/cli/serve.py +0 -10
  587. agentnode_sdk-0.24.0/agentnode_sdk/mcp_server.py +0 -187
  588. agentnode_sdk-0.24.0/agentnode_sdk/sandbox/container_backend.py +0 -350
  589. agentnode_sdk-0.24.0/agentnode_sdk/sandbox/egress.py +0 -178
  590. agentnode_sdk-0.24.0/pyproject.toml +0 -50
  591. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/.env.example +0 -0
  592. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/README.md +0 -0
  593. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/REGISTRY_SIGNING_ACTIVATION.md +0 -0
  594. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/REGISTRY_SIGNING_SPEC.md +0 -0
  595. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/THREAT_MODEL.md +0 -0
  596. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/TRUST_STACK.md +0 -0
  597. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode.lock +0 -0
  598. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/_env_lock.py +0 -0
  599. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/_env_rwlock.py +0 -0
  600. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/_fileutil.py +0 -0
  601. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/_wheel_meta.py +0 -0
  602. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/async_client.py +0 -0
  603. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/capability_graph.py +0 -0
  604. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/capability_taxonomy.py +0 -0
  605. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/__init__.py +0 -0
  606. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/__main__.py +0 -0
  607. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/audit.py +0 -0
  608. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/auth.py +0 -0
  609. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/cassette_audit.py +0 -0
  610. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/complements.py +0 -0
  611. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/init.py +0 -0
  612. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/mcp_commands.py +0 -0
  613. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/mcp_verify.py +0 -0
  614. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/record_cases.py +0 -0
  615. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/setup_wizard.py +0 -0
  616. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/smart_run.py +0 -0
  617. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/templates.py +0 -0
  618. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/cli/verify_local.py +0 -0
  619. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/compatibility.py +0 -0
  620. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/config.py +0 -0
  621. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/credential_handle.py +0 -0
  622. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/credential_resolver.py +0 -0
  623. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/credential_store.py +0 -0
  624. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/detect.py +0 -0
  625. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/exceptions.py +0 -0
  626. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/guard.py +0 -0
  627. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/input_guard.py +0 -0
  628. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/installer.py +0 -0
  629. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/key_status.py +0 -0
  630. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/llm_providers.py +0 -0
  631. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/lock_integrity.py +0 -0
  632. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/lock_surface.py +0 -0
  633. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/planner.py +0 -0
  634. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/policy.py +0 -0
  635. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/references.py +0 -0
  636. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/registry_trust.py +0 -0
  637. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/resolve.py +0 -0
  638. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/resource_provider.py +0 -0
  639. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/risk_profile.py +0 -0
  640. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/run_log.py +0 -0
  641. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtime.py +0 -0
  642. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtime_integrity.py +0 -0
  643. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/__init__.py +0 -0
  644. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/agent_llm_broker.py +0 -0
  645. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/agent_llm_policy.py +0 -0
  646. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/agent_runner.py +0 -0
  647. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/agent_sandbox.py +0 -0
  648. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/mcp_consent.py +0 -0
  649. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/mcp_consent_store.py +0 -0
  650. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/mcp_launch.py +0 -0
  651. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/remote_runner.py +0 -0
  652. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/runtimes/toolpack_credentials.py +0 -0
  653. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/__init__.py +0 -0
  654. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/agent_container_wrapper.py +0 -0
  655. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/agent_rpc.py +0 -0
  656. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/agent_session.py +0 -0
  657. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/domain_policy.py +0 -0
  658. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/sandbox/mcp_preinstall.py +0 -0
  659. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/signature.py +0 -0
  660. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/agentnode_sdk/skill.py +0 -0
  661. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/data/compatibility/current.json +0 -0
  662. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/data/compatibility/removed_2026-07-09.txt +0 -0
  663. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/sandbox-image/Dockerfile +0 -0
  664. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/sandbox-image/README.md +0 -0
  665. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/analyze_scores.py +0 -0
  666. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/batch_verify.py +0 -0
  667. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/check_model_drift.py +0 -0
  668. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/ci_smoke_test.py +0 -0
  669. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/generate_compatibility_artifacts.py +0 -0
  670. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/merge_batches.py +0 -0
  671. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/verify_toolcalls.py +0 -0
  672. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/scripts/weekly_retest.sh +0 -0
  673. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/README.md +0 -0
  674. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/__init__.py +0 -0
  675. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/container_agent_wrapper.py +0 -0
  676. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/fake_llm.py +0 -0
  677. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/host_driver.py +0 -0
  678. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/spikes/agent_sandbox_routing/trivial_agent.py +0 -0
  679. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/agent_m1_helpers.py +0 -0
  680. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/data/allowed_domains_vectors.json +0 -0
  681. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/hostpolicy.py +0 -0
  682. {agentnode_sdk-0.24.0/tests → agentnode_sdk-0.25.0/tests/lanes}/__init__.py +0 -0
  683. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/lanes/conftest_report.py +0 -0
  684. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/lanes/constraints.txt +0 -0
  685. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/lanes/freeze_inventory.py +0 -0
  686. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/lanes/npm_e2e_pins.json +0 -0
  687. {agentnode_sdk-0.24.0/tests/lanes → agentnode_sdk-0.25.0/tests/remote_mcp}/__init__.py +0 -0
  688. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/rwlock_worker.py +0 -0
  689. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_host_unsupported.py +0 -0
  690. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_llm_broker.py +0 -0
  691. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_llm_policy.py +0 -0
  692. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_env_lock.py +0 -0
  693. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_fileutil.py +0 -0
  694. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_lock_fields.py +0 -0
  695. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_transaction.py +0 -0
  696. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_m1_wheel_meta.py +0 -0
  697. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_rpc.py +0 -0
  698. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_runner.py +0 -0
  699. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_sandbox_e2e.py +0 -0
  700. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_sandbox_hardening.py +0 -0
  701. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_sandbox_routing.py +0 -0
  702. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_sandbox_spike.py +0 -0
  703. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_agent_session_container.py +0 -0
  704. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_async_client.py +0 -0
  705. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_audit_ux.py +0 -0
  706. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_auth_cli_vault.py +0 -0
  707. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_auto_upgrade_policy.py +0 -0
  708. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_cli.py +0 -0
  709. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_cli_lock.py +0 -0
  710. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_cli_lock_verify_structure.py +0 -0
  711. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_cli_run_resolution.py +0 -0
  712. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_client.py +0 -0
  713. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_client_json_guard.py +0 -0
  714. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_client_sprint_b.py +0 -0
  715. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_config.py +0 -0
  716. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_consent_prompt.py +0 -0
  717. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_credential_handle.py +0 -0
  718. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_credential_integration.py +0 -0
  719. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_credential_resolver.py +0 -0
  720. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_credential_store.py +0 -0
  721. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_credential_vault.py +0 -0
  722. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_detect.py +0 -0
  723. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_detect_and_install.py +0 -0
  724. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_domain_policy.py +0 -0
  725. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_edge_cases.py +0 -0
  726. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_egress_domain_validation.py +0 -0
  727. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_egress_e2e.py +0 -0
  728. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_egress_proxy_unit.py +0 -0
  729. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_egress_wrap.py +0 -0
  730. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_env_passthrough_wrap.py +0 -0
  731. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_env_rwlock.py +0 -0
  732. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard.py +0 -0
  733. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_check.py +0 -0
  734. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_config_cache.py +0 -0
  735. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_policy.py +0 -0
  736. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_preview.py +0 -0
  737. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_set.py +0 -0
  738. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_status.py +0 -0
  739. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_tool_override.py +0 -0
  740. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_tool_override_audit.py +0 -0
  741. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_tool_override_cli.py +0 -0
  742. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_guard_ux.py +0 -0
  743. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_host_policy_snapshot.py +0 -0
  744. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_host_trust_policy.py +0 -0
  745. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_host_trust_policy_routing.py +0 -0
  746. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_input_guard.py +0 -0
  747. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_input_guard_escalation.py +0 -0
  748. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_install_hardening.py +0 -0
  749. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_installer_sprint_b.py +0 -0
  750. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_intelligence.py +0 -0
  751. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_key_status.py +0 -0
  752. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_layer3_admin_funnel.py +0 -0
  753. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_layer3_env_write_lock_core.py +0 -0
  754. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_layer3_install_snapshot.py +0 -0
  755. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_layer3_installer_concurrency.py +0 -0
  756. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_llm_binding.py +0 -0
  757. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_llm_call_runlog.py +0 -0
  758. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_llm_providers.py +0 -0
  759. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_llm_vault_binding.py +0 -0
  760. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_load_tool_integrity.py +0 -0
  761. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_lock_integrity.py +0 -0
  762. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_lock_runtime.py +0 -0
  763. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_lockfile_duplicate_keys.py +0 -0
  764. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_allowed_domains_seal.py +0 -0
  765. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_audit.py +0 -0
  766. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_cli_scaffold.py +0 -0
  767. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_consent.py +0 -0
  768. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_consent_resolver.py +0 -0
  769. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_consent_store.py +0 -0
  770. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_credentialed_launch.py +0 -0
  771. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_doctor.py +0 -0
  772. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_doctor_integrity.py +0 -0
  773. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_ownership_cli.py +0 -0
  774. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_preinstall.py +0 -0
  775. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_preinstall_cache.py +0 -0
  776. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_preinstall_run.py +0 -0
  777. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_sandbox.py +0 -0
  778. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_submit.py +0 -0
  779. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_mcp_verify_pinning.py +0 -0
  780. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_observability.py +0 -0
  781. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_planner.py +0 -0
  782. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_policy.py +0 -0
  783. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_policy_integration.py +0 -0
  784. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_prompt_specs.py +0 -0
  785. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_publish.py +0 -0
  786. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_references.py +0 -0
  787. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_registry_trust.py +0 -0
  788. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_remote_hardening.py +0 -0
  789. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_remote_runner.py +0 -0
  790. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_resource_provider.py +0 -0
  791. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_resource_specs.py +0 -0
  792. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_risk_profile.py +0 -0
  793. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_run_log.py +0 -0
  794. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_runner.py +0 -0
  795. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_runtime.py +0 -0
  796. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_runtime_audit.py +0 -0
  797. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_sandbox_e2e.py +0 -0
  798. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_sandbox_gate.py +0 -0
  799. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_security_hardening.py +0 -0
  800. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_setup_wizard.py +0 -0
  801. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_shipped_default_live_paths.py +0 -0
  802. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_shipped_default_routing.py +0 -0
  803. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_signature.py +0 -0
  804. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_signing_key.py +0 -0
  805. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_skill.py +0 -0
  806. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_smart.py +0 -0
  807. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_stability.py +0 -0
  808. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_structure_digest.py +0 -0
  809. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_structure_writer_seal.py +0 -0
  810. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_toolpack_credentials.py +0 -0
  811. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_v02.py +0 -0
  812. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_validate.py +0 -0
  813. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/test_validate_skill.py +0 -0
  814. {agentnode_sdk-0.24.0 → agentnode_sdk-0.25.0}/tests/validation_lockfile.json +0 -0
@@ -0,0 +1,85 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .venv/
8
+ *.egg
9
+
10
+ # Node
11
+ node_modules/
12
+ cli/dist/
13
+
14
+ # Next.js
15
+ web/.next/
16
+ web/out/
17
+
18
+ # Environment & Secrets
19
+ .env
20
+ .env.local
21
+ .env.production
22
+ .pypirc
23
+
24
+ # IDE
25
+ .idea/
26
+ .vscode/
27
+ *.swp
28
+ *.swo
29
+
30
+ # OS
31
+ .DS_Store
32
+ Thumbs.db
33
+
34
+ # Test
35
+ .pytest_cache/
36
+ .ruff_cache/
37
+ .coverage
38
+ htmlcov/
39
+
40
+ # Build artifacts
41
+ *.tar.gz
42
+ *.whl
43
+
44
+ # Test score artifacts
45
+ .artifacts/
46
+
47
+ # Spec documents
48
+ *.docx
49
+
50
+ # Screenshots & temp files
51
+ *.png
52
+ screenshots/
53
+ test-screenshots/
54
+ spec_extracted.txt
55
+ calendar.ics
56
+ events.json
57
+
58
+ # Playwright
59
+ .playwright-mcp/
60
+
61
+ # Claude Code
62
+ .claude/
63
+
64
+ # Internal growth / marketing content
65
+ growth/
66
+ backend/.next/
67
+ kwfinder-*.md
68
+ packages_dump.json
69
+ snapshot_nonowner.txt
70
+ seo/
71
+ backend/scripts/enrichment_*.json
72
+
73
+ # Internal documentation (not for GitHub)
74
+ internal/
75
+
76
+ # Internal ops scripts (crawl, enrichment, import)
77
+ scripts/crawl_*.py
78
+ scripts/enrich_*.py
79
+ scripts/import_candidates.py
80
+ scripts/.mcp_cache/
81
+ candidates*.json
82
+ *.lock.lk
83
+
84
+ # Counter-check and exercise output: evidence for a review bundle, not source.
85
+ sdk/remote-worker-counter-check-results/
@@ -1,5 +1,148 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.25.0 — refuse what cannot be enforced
4
+
5
+ A pre-1.0 security release. Several things 0.24.1 did quietly -- run a pack with an open network because
6
+ its network level was unknown, start a run on a network that could not show it had no route out, report
7
+ a conformance boundary as passed when it could not be measured -- are now refused or reported as not
8
+ checked. That is what makes the breaking changes below; each is listed with what to do.
9
+
10
+ ### Breaking changes since 0.24.1
11
+
12
+ They were measured against the published 0.24.1 wheel: the public API, the CLI and the behaviour tests
13
+ of 0.24.1 were run against this tree. Nothing else in the public API, the signatures, the defaults or
14
+ the command line was removed or changed.
15
+
16
+ - **Python 3.13 and newer are no longer supported.** `requires-python` is now `>=3.10,<3.13`. An
17
+ installer on Python 3.13 or 3.14 is not offered this release and stays on 0.24.1.
18
+ - **Network permissions are a contract.** `permissions.network_level` must be one of:
19
+ - `none`;
20
+ - `unrestricted`;
21
+ - `restricted`, which needs a non-empty `allowed_domains`.
22
+
23
+ A pack declaring `full`, an unknown value, or `restricted` without domains is refused and nothing
24
+ runs. 0.24.1 ran such packs with network access.
25
+ - **A network meant to have no route out must show that it is internal.** If the container runtime
26
+ does not report it, the run is refused rather than started.
27
+ - **Conformance checks say `not_checked`** where a boundary cannot be measured on the host, instead of
28
+ a pass or a fail.
29
+ - `agentnode_sdk.conformance.runner.TIMEOUT_RC` is now `SUPERSEDED_TIMEOUT_RC`; there is no alias.
30
+ A timeout no longer has an exit code: test `Outcome.reason == agentnode_sdk.gateway.protocol.TIMED_OUT`
31
+ instead of comparing the code with -1. An alias would import and then never match, so a timeout would
32
+ pass for an ordinary ending. Reading `runner.TIMEOUT_RC` raises an `AttributeError` that says this.
33
+
34
+ ### Migrating from 0.24.1
35
+
36
+ 1. **Python.** Use Python 3.10, 3.11 or 3.12. On 3.13 or 3.14 pip does not offer 0.25.0 and keeps
37
+ 0.24.1; pin `agentnode-sdk==0.24.1` there if you need a stable choice.
38
+ 2. **Pack network permission.** In `agentnode.yaml` it is `permissions.network.level` (with
39
+ `permissions.network.allowed_domains`); an installed entry carries it as `permissions.network_level`
40
+ and `permissions.allowed_domains`.
41
+ - Missing or empty means `none` (no network), as before.
42
+ - `full` and `limited` are refused, not translated. Write `unrestricted` if the pack really needs any
43
+ destination, or `restricted` with `allowed_domains`.
44
+ - `restricted` needs at least one domain, and each must be a real host name: no IP literal, no
45
+ `localhost`, no single-label name.
46
+ - Values are read case-insensitively; anything else is refused with the reason before anything runs.
47
+ - `agentnode validate` does not apply this rule yet (it only warns about broad network access): a
48
+ pack that validates can still be refused when it runs. Check the level by hand before publishing.
49
+ 3. **Container runtime.** A run that asks for no network now needs a runtime that reports the network
50
+ it created as internal. If yours does not, the run is refused with the reason; it is not started
51
+ with a route out.
52
+ 4. **Conformance reports.** Treat `not_checked` as its own outcome. It is neither a pass nor a fail:
53
+ the boundary could not be measured on that host.
54
+ 5. **Timeouts in your own code.** Replace `rc == TIMEOUT_RC` with
55
+ `outcome.reason == agentnode_sdk.gateway.protocol.TIMED_OUT`. The exit code of a stopped run is
56
+ `None`. `SUPERSEDED_TIMEOUT_RC` (-1) exists only for reading old reports.
57
+ 6. **`mcp` dependency.** The bound is now `mcp>=1.0.0,<3`, so an environment with mcp 2.x installs
58
+ without a conflict.
59
+
60
+ ### Added
61
+
62
+ - **Remote MCP:** `agentnode serve` serves on mcp 1.x and 2.x (`mcp>=1.0.0,<3`), offers the pack
63
+ tools and the platform tools, and `--packs` limits what is exposed. A tool error is a failure
64
+ result.
65
+ - **Website to gateway identity link.** The website signs a single-use link, valid for two minutes.
66
+ The gateway redeems it with `POST /v1/link`; on the device this is
67
+ `agentnode remote connect ... --link`. It is inactive until the website's signing key is set.
68
+ - **Per-account ceilings** on a gateway (`--account-runs-per-window`, `--account-lifetime-runs`,
69
+ `--trial`). Deleting an account clears its ceilings, and an account export carries them.
70
+ - **Self-hosted gateway as a documented beta path.** The gateway refuses to start unpinned unless
71
+ `AGENTNODE_ALLOW_UNPINNED` is set.
72
+ - **A paired worker rollback needs the control plane's signed statement** (P13). An operator's
73
+ assertion is no longer enough.
74
+ - **The CLI:** a failed run says why and exits 1, and a dashboard API key is sent as `X-API-Key`.
75
+ - **`agentnode validate` and `agentnode publish` take `--manifest <file>` and `--json`.** The manifest
76
+ may be `.yaml`, `.yml` or `.json` and need not be called `agentnode.yaml` (publish packs it under
77
+ that name). `--json` prints one JSON document on stdout. Without the new options both commands
78
+ behave exactly as before.
79
+
80
+ ### Fixed
81
+
82
+ - **An edge refusal closes in order,** so its answer reaches a client whose request the edge left
83
+ unread. Before, the connection could end in a reset.
84
+
85
+ ### Not yet true
86
+
87
+ - **A worker on its own machine** was accepted by cross-host run r3 for an earlier build (df821f65).
88
+ The current build was **not** accepted by r4. r5 has not run.
89
+
90
+ ## 0.24.1 — the sandbox does what it said
91
+
92
+ Three defects in the local sandbox runtime, found by the backend conformance suite (EM-3B)
93
+ measuring a real container rather than reading its configuration. Each is a case where
94
+ AgentNode reported a property it was not enforcing.
95
+
96
+ ### Fixed
97
+
98
+ - **A wall-clock timeout now ends the payload.** It killed the `docker run` client, which is
99
+ a pipe to a daemon that owns the process — so the SDK reported a timeout while the
100
+ container kept running, and `--rm` never removed it because it never exited. Every run now
101
+ carries an exact identity (a unique name *and* a cidfile); a timeout removes that exact
102
+ container, waits, and verifies that neither the id nor the name remains. If any of that
103
+ cannot be shown, `SandboxContainmentError` is raised instead of the ordinary timeout
104
+ result: a stop nobody could verify is not a stop. Nothing outside the run being stopped is
105
+ ever addressed, and an identity in doubt stops the removal rather than guessing.
106
+ - **The declared memory ceiling now binds.** `--memory` was passed without `--memory-swap`,
107
+ and a runtime with only the first set grants a swap allowance of twice the limit — the
108
+ suite watched a 768 MiB allocation finish with exit code 0 under a 512 MiB "limit". The
109
+ two are now equal, so the total of memory and swap *is* the limit. Whether an engine can
110
+ account for swap at all is recorded from `docker info` rather than assumed, so a report can
111
+ say the ceiling is unproven on that engine instead of resting on the flag having been
112
+ passed.
113
+ - **A refusal now carries a way out.** It said `no container runtime (docker or podman)
114
+ found on PATH` and nothing more. There were also two answers to the same question — the
115
+ SDK's bare sentence and the CLI doctor's structured checks — and only one of them ever had
116
+ a next step. Both now render one classifier, which distinguishes *not installed*, *not
117
+ running*, *not permitted*, *an engine in the wrong mode* and *a device where no local
118
+ sandbox is possible*, and offers only actions that exist on the platform in front of you,
119
+ each followed by the check that tells you whether it worked. Joining the `docker` group is
120
+ deliberately not among them: it is administrator-equivalent power on the machine.
121
+
122
+ ### Changed
123
+
124
+ - `SandboxAvailability` carries `probe_error`, `engine_os` and `memory_limit_enforceable`;
125
+ `check_available(force=True)` re-asks rather than returning the cached answer, which is what
126
+ a re-check after a fix needs.
127
+ - One-shot sandboxed runs are now named and labelled like the long-lived ones. Nothing
128
+ filters on that label; it makes a run identifiable, which is the point.
129
+
130
+ ### Not fixed in this release
131
+
132
+ - **Declared network levels are still not distinguished from one another.** A toolpack that
133
+ declares `restricted` receives the same open container network as one that declares
134
+ `unrestricted`: six recognised level names all map to the engine's default bridge. An unknown or
135
+ missing level is still correctly isolated (`--network none`), so this is not a case of an
136
+ unrecognised value being let through — the recognised names simply do not differ in what they
137
+ grant. The risk score meanwhile rates `internal` below `external`, which points the opposite way
138
+ from what the runtime does.
139
+
140
+ This release deliberately does not correct it. The correction requires a declared domain
141
+ allowlist in the package manifest, registry validation for it, and a refusal for packages that
142
+ ask for `restricted` without one — a behaviour change that refuses packages which work today,
143
+ and too large to carry inside a patch that exists to get two proven runtime fixes to people.
144
+ It ships separately, at a version that reflects the break.
145
+
3
146
  ## 0.24.0 — The container is the boundary
4
147
 
5
148
  This release makes the execution boundary real rather than advisory. Third-party code
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentnode-sdk
3
- Version: 0.24.0
3
+ Version: 0.25.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
@@ -13,11 +13,11 @@ Classifier: Programming Language :: Python :: 3.10
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Topic :: Software Development :: Libraries
16
- Requires-Python: >=3.10
16
+ Requires-Python: <3.13,>=3.10
17
17
  Requires-Dist: cryptography>=41.0
18
18
  Requires-Dist: httpx>=0.25
19
19
  Requires-Dist: keyring>=24
20
- Requires-Dist: mcp<2,>=1.0.0
20
+ Requires-Dist: mcp<3,>=1.0.0
21
21
  Requires-Dist: packaging>=21
22
22
  Requires-Dist: pyyaml>=6.0
23
23
  Provides-Extra: dev
@@ -0,0 +1,155 @@
1
+ """AgentNode Python SDK — discover, resolve, and install AI agent capabilities."""
2
+
3
+ # THE EXCEPTION TYPES FIRST, and outside the guard below, because they need nothing but the
4
+ # standard library and the refusal this module may have to raise has to be a real AgentNodeError
5
+ # rather than something invented on the spot.
6
+ from agentnode_sdk.exceptions import (
7
+ AgentNodeError,
8
+ AgentNodeToolError,
9
+ AuthError,
10
+ NotFoundError,
11
+ RateLimitError,
12
+ ValidationError,
13
+ )
14
+
15
+ #: WHICH DEPENDENCY THIS INSTALLATION IS MISSING, or "" when nothing is.
16
+ #:
17
+ #: WHY THIS EXISTS. `cli/main.py` does `import agentnode_sdk`, and importing any name of this
18
+ #: package executes this file -- which imports the client, the async client and the installer, each
19
+ #: of which imports `httpx` at module scope. On a host whose install was interrupted after the
20
+ #: package arrived and before its dependencies did, that raised `ModuleNotFoundError` three imports
21
+ #: deep and the WHOLE CLI died before argparse existed. The third beta acceptance measured exactly
22
+ #: that: `agentnode gateway doctor` -- the published way to ask whether a host is ready -- answered
23
+ #: with a traceback. A host that cannot say it is not ready is PR7 of that profile at WARN.
24
+ _MISSING_DEPENDENCY = ""
25
+ # EVERYTHING THAT CAN NEED A THIRD-PARTY PACKAGE, under one guard.
26
+ #
27
+ # `ModuleNotFoundError` ONLY, and re-raised at once when the missing module is one of ours. A
28
+ # missing third-party package means the dependencies never arrived -- an incomplete installation,
29
+ # which this package can report. A missing `agentnode_sdk` submodule means this BUILD is wrong, and
30
+ # swallowing that would hide the one class of error that must never be hidden.
31
+ try:
32
+ from agentnode_sdk.async_client import AsyncAgentNode
33
+ from agentnode_sdk.client import AgentNode, AgentNodeClient
34
+ from agentnode_sdk.config import load_config, config_path, installation_behavior_label
35
+ from agentnode_sdk.detect import detect_gap
36
+ from agentnode_sdk.installer import load_tool
37
+ from agentnode_sdk.skill import load_skill, SkillContext, SkillAsset
38
+ from agentnode_sdk.models import (
39
+ CanInstallResult,
40
+ DetectAndInstallResult,
41
+ DetectedGap,
42
+ InstallMetadata,
43
+ InstallResult,
44
+ PackageDetail,
45
+ ResolvedPackage,
46
+ ResolveResult,
47
+ RunToolResult,
48
+ SearchHit,
49
+ SearchResult,
50
+ SmartRunResult,
51
+ )
52
+ from agentnode_sdk.compatibility import recommend_model
53
+ from agentnode_sdk.risk_profile import RiskProfile, compute_risk_profile, get_risk_profile
54
+ from agentnode_sdk.policy import PolicyResult, check_install, check_run
55
+ from agentnode_sdk.runner import run_tool
56
+ from agentnode_sdk.runtime import AgentNodeRuntime
57
+
58
+ # Convenience aliases
59
+ Client = AgentNodeClient
60
+ ToolError = AgentNodeToolError
61
+ except ModuleNotFoundError as _missing: # noqa: BLE001
62
+ _name = str(getattr(_missing, "name", "") or "")
63
+ if _name.split(".")[0] == "agentnode_sdk":
64
+ raise
65
+ _MISSING_DEPENDENCY = _name or str(_missing)
66
+
67
+ #: THE ONE PLACE THE VERSION IS WRITTEN. `pyproject.toml` builds the wheel's version from this
68
+ #: line rather than carrying its own copy, because it did carry one: the project said 0.25.0
69
+ #: while this said 0.24.1, so the gateway announced 0.24.1 to every client it answered while
70
+ #: running the 0.25.0 build. Two copies of one number drift, and the drift is invisible until
71
+ #: something reports the wrong one.
72
+ __version__ = "0.25.0"
73
+ __all__ = [
74
+ "AgentNode",
75
+ "AsyncAgentNode",
76
+ "AgentNodeClient",
77
+ "Client",
78
+ "load_config",
79
+ "config_path",
80
+ "installation_behavior_label",
81
+ "detect_gap",
82
+ "load_tool",
83
+ "load_skill",
84
+ "SkillContext",
85
+ "SkillAsset",
86
+ "run_tool",
87
+ "AgentNodeError",
88
+ "AgentNodeToolError",
89
+ "ToolError",
90
+ "NotFoundError",
91
+ "AuthError",
92
+ "RateLimitError",
93
+ "ValidationError",
94
+ "PackageDetail",
95
+ "SearchResult",
96
+ "SearchHit",
97
+ "ResolveResult",
98
+ "ResolvedPackage",
99
+ "InstallMetadata",
100
+ "InstallResult",
101
+ "CanInstallResult",
102
+ "RunToolResult",
103
+ "DetectedGap",
104
+ "DetectAndInstallResult",
105
+ "SmartRunResult",
106
+ "AgentNodeRuntime",
107
+ "PolicyResult",
108
+ "check_install",
109
+ "check_run",
110
+ "recommend_model",
111
+ "RiskProfile",
112
+ "compute_risk_profile",
113
+ "get_risk_profile",
114
+ ]
115
+
116
+
117
+ def what_this_installation_is_missing() -> str:
118
+ """The third-party package this installation needs and does not have, or "".
119
+
120
+ Read by the readiness paths -- `gateway doctor`, `gateway status`, `worker preflight` -- so that
121
+ a host whose install was interrupted can SAY SO in words and in a machine-readable form, rather
122
+ than dying three imports deep on a package nobody asked it about.
123
+ """
124
+ return _MISSING_DEPENDENCY
125
+
126
+
127
+ if _MISSING_DEPENDENCY:
128
+ # BIND EVERY PUBLIC NAME THAT DID NOT GET ONE, to something that explains itself.
129
+ #
130
+ # Driven by `__all__` rather than by a hand-written list, so the stub set cannot drift from the
131
+ # public API -- a name added above and forgotten here would be an `AttributeError` on an
132
+ # incomplete installation instead of the sentence this is for.
133
+ #
134
+ # A STUB THAT RAISES, never one that returns something. A silent no-op would be worse than the
135
+ # traceback it replaces: the traceback at least said what was wrong.
136
+ def _needs_the_missing_package(_name):
137
+ def refuse(*_args, **_kwargs):
138
+ # `AgentNodeError(code, message)`, which is the signature it has. The first version of
139
+ # this passed one string and the stub raised `TypeError` instead of saying anything.
140
+ raise AgentNodeError(
141
+ "installation_incomplete",
142
+ "%s needs the %r package, which this installation does not have. The install "
143
+ "was interrupted before its dependencies arrived; re-run the installer for this "
144
+ "host, or `pip install %s`. Ask this host what it is missing with "
145
+ "`agentnode gateway doctor`."
146
+ % (_name, _MISSING_DEPENDENCY, _MISSING_DEPENDENCY))
147
+ refuse.__name__ = str(_name)
148
+ refuse.__doc__ = ("Unavailable: this installation is missing %r."
149
+ % _MISSING_DEPENDENCY)
150
+ return refuse
151
+
152
+ for _public in __all__:
153
+ if _public not in globals():
154
+ globals()[_public] = _needs_the_missing_package(_public)
155
+ del _public
@@ -274,11 +274,33 @@ for dist in im.distributions():
274
274
  "editable": is_editable(dist),
275
275
  "has_record": has_record,
276
276
  "provides_top": expected_top in tops,
277
+ # WHERE it really is, so two paths to one directory can be seen as one thing. A venv
278
+ # with lib64 symlinked to lib puts both on sys.path, and an interpreter that walks
279
+ # both reports the same installation twice.
280
+ "where": canon(dip) if dip else "",
277
281
  })
278
282
  else:
279
283
  if expected_top in tops:
280
284
  other_top_providers.append(nm or "?")
281
285
 
286
+ # ONE INSTALLATION SEEN DOWN TWO PATHS IS ONE INSTALLATION. Deduplicated by the resolved
287
+ # location before anything counts them, because the question `post_verify` asks -- is this
288
+ # installed exactly once -- is about installations and was being answered about paths. Entries
289
+ # with no resolvable location are kept as they are: an unlocatable match is not a duplicate of
290
+ # anything, and silently folding them together would hide the case worth seeing.
291
+ seen = {}
292
+ unique = []
293
+ for m in matches:
294
+ where = m.get("where") or ""
295
+ if not where:
296
+ unique.append(m)
297
+ continue
298
+ if where in seen:
299
+ continue
300
+ seen[where] = True
301
+ unique.append(m)
302
+ matches = unique
303
+
282
304
  print(json.dumps({"matches": matches, "other_top_providers": other_top_providers}))
283
305
  '''
284
306
 
@@ -0,0 +1,61 @@
1
+ """Which source this artefact was built from, written INTO it at build time.
2
+
3
+ A deployment used to be handed a commit and believe it. `deploy-pinned.sh` took the commit as an
4
+ argument and compared it against an expectation only when an optional environment variable
5
+ supplied one, so the answer to "which source is this wheel?" was whatever the caller said.
6
+ `ALPHA-RUNTIME-PIN-0002` named that, and it was right: nothing tied the artefact to a commit.
7
+
8
+ So the build writes it in. `PROVENANCE_NAME` is part of the package, which means it is part of the
9
+ wheel, which means it is covered by the wheel's digest -- changing the commit changes the artefact.
10
+ A deployment reads it back OUT of the wheel before installing anything and refuses if it is absent
11
+ or disagrees. The operator can still lie to the build; what they can no longer do is hand a
12
+ deployment an artefact and a commit that have nothing to do with each other.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ import pathlib
18
+ import zipfile
19
+
20
+ #: Inside the installed package and inside the wheel, at the same relative path.
21
+ PROVENANCE_NAME = "_provenance.json"
22
+
23
+
24
+ def written_beside_this_module() -> pathlib.Path:
25
+ return pathlib.Path(__file__).resolve().parent / PROVENANCE_NAME
26
+
27
+
28
+ def record(commit: str, where: pathlib.Path | None = None) -> pathlib.Path:
29
+ """Write the commit into the source tree, so the build carries it into the wheel."""
30
+ path = where or written_beside_this_module()
31
+ path.write_text(json.dumps({"commit": str(commit or "")}, indent=1) + "\n",
32
+ encoding="utf-8")
33
+ return path
34
+
35
+
36
+ def of_this_installation() -> str:
37
+ """The commit this installed package was built from, or "" when it does not say."""
38
+ try:
39
+ said = json.loads(written_beside_this_module().read_text(encoding="utf-8"))
40
+ except Exception: # noqa: BLE001
41
+ return ""
42
+ return str(said.get("commit") or "") if isinstance(said, dict) else ""
43
+
44
+
45
+ def of_a_wheel(wheel) -> str:
46
+ """The commit a wheel was built from, read WITHOUT installing it.
47
+
48
+ Before anything is installed is the only moment this is worth asking: a deployment that
49
+ discovers the artefact is the wrong one after replacing the running code has discovered it
50
+ too late.
51
+ """
52
+ try:
53
+ with zipfile.ZipFile(str(wheel)) as inside:
54
+ names = [n for n in inside.namelist()
55
+ if n.endswith("agentnode_sdk/" + PROVENANCE_NAME)]
56
+ if not names:
57
+ return ""
58
+ said = json.loads(inside.read(names[0]).decode("utf-8"))
59
+ except Exception: # noqa: BLE001
60
+ return ""
61
+ return str(said.get("commit") or "") if isinstance(said, dict) else ""
@@ -0,0 +1,10 @@
1
+ """How anything reaches AgentNode.
2
+
3
+ One contract, several transports over it, and no security decision anywhere but the server. What
4
+ lives here is the part that is the same for every client: which systems can reach us at all
5
+ (`compatibility`), and -- as it is built -- the canonical operation contract that MCP, REST, the
6
+ SDK, the CLI and the web client are each a rendering of.
7
+
8
+ Nothing here is specific to any AI vendor. A provider name may appear in a test or in a
9
+ compatibility record as data; it may not appear in a decision.
10
+ """