agentic-runner 3.1.0__tar.gz → 3.1.1__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 (64) hide show
  1. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/PKG-INFO +1 -1
  2. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/__init__.py +1 -1
  3. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/registration.py +21 -0
  4. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/.gitignore +0 -0
  5. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/LICENSE +0 -0
  6. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/README.md +0 -0
  7. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/pyproject.toml +0 -0
  8. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/activities.py +0 -0
  9. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/attempts.py +0 -0
  10. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/build.py +0 -0
  11. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/callback.py +0 -0
  12. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/child_watcher.py +0 -0
  13. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/cli.py +0 -0
  14. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/config.py +0 -0
  15. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/credentials.py +0 -0
  16. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/device_login_activities.py +0 -0
  17. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/egress.py +0 -0
  18. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/heartbeat_link.py +0 -0
  19. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/hooks.py +0 -0
  20. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/host_store.py +0 -0
  21. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/__init__.py +0 -0
  22. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/git/__init__.py +0 -0
  23. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/git/contracts.py +0 -0
  24. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/git/evidence.py +0 -0
  25. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/git/fake_workspace.py +0 -0
  26. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/git/workspace.py +0 -0
  27. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/github/__init__.py +0 -0
  28. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/github/auth.py +0 -0
  29. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/github/fake_client.py +0 -0
  30. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/integrations/github/gh_client.py +0 -0
  31. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/lifecycle.py +0 -0
  32. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/llm_proxy.py +0 -0
  33. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/mcp.py +0 -0
  34. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/message_store.py +0 -0
  35. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/private_state.py +0 -0
  36. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/py.typed +0 -0
  37. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/recipient_key_secret.py +0 -0
  38. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/runtime/__init__.py +0 -0
  39. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/runtime/verifier_command.py +0 -0
  40. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/sealed_box.py +0 -0
  41. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/service.py +0 -0
  42. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/__init__.py +0 -0
  43. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/__main__.py +0 -0
  44. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/control_plane.py +0 -0
  45. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/plugin.py +0 -0
  46. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/test_conformance.py +0 -0
  47. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/testing/workflow.py +0 -0
  48. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/tiny_http.py +0 -0
  49. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/triage_activities.py +0 -0
  50. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/user_sources.py +0 -0
  51. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/__init__.py +0 -0
  52. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/_runtime_support.py +0 -0
  53. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/agent_runtime.py +0 -0
  54. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/claude_runtime.py +0 -0
  55. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/codex_runtime.py +0 -0
  56. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/command_policy.py +0 -0
  57. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/contract_device_login.py +0 -0
  58. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/contract_isolation.py +0 -0
  59. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/fastapi_client.py +0 -0
  60. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/harness_usage.py +0 -0
  61. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/mcp_config.py +0 -0
  62. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/settings.py +0 -0
  63. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workers/skills.py +0 -0
  64. {agentic_runner-3.1.0 → agentic_runner-3.1.1}/src/agentic_runner/workstation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentic-runner
3
- Version: 3.1.0
3
+ Version: 3.1.1
4
4
  Summary: The Agentic OS Runner: an activity-only Temporal executor for workspaces, Agent Runtimes and verb seams
5
5
  License-Expression: AGPL-3.0-only
6
6
  License-File: LICENSE
@@ -7,6 +7,6 @@ stay on the platform; this package imports none of them, and a CI partition test
7
7
  (``tests/test_package_partition.py``) fails the build if that changes.
8
8
  """
9
9
 
10
- __version__ = "3.1.0"
10
+ __version__ = "3.1.1"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -69,6 +69,7 @@ INTAKE_IGNORED_PATH = "/api/runner/v1/runners/intake/ignored"
69
69
  # The refusal a revoked Runner's heartbeat earns (06 §2: revocation *is* the refused
70
70
  # heartbeat). The one reason this process stops on rather than retries.
71
71
  RUNNER_REVOKED_REASON = "runner_revoked"
72
+ CONTROL_PLANE_OLDER_REASON = "control_plane_older"
72
73
 
73
74
  # What the state directory holds after a successful bootstrap. One file, mode 0600: the
74
75
  # private key is in it, and a Runner that loses it re-bootstraps rather than recovering.
@@ -346,9 +347,29 @@ def _refusal(response: httpx.Response) -> tuple[str, str]:
346
347
  detail = None
347
348
  if isinstance(detail, dict) and "reason" in detail:
348
349
  return str(detail["reason"]), str(detail.get("detail", detail["reason"]))
350
+ if unknown := _fields_the_control_plane_does_not_know(response.status_code, detail):
351
+ return CONTROL_PLANE_OLDER_REASON, (
352
+ f"the control plane is older than this Runner (agentic-runner {runner_version}, "
353
+ f"agentic-runner-contracts {contracts_version}): it does not know "
354
+ f"{', '.join(unknown)}. Install the agentic-runner release that matches the "
355
+ "control plane, or ask your Organisation's Admin to upgrade it."
356
+ )
349
357
  return "refused", f"{response.status_code}: {response.text[:200]}"
350
358
 
351
359
 
360
+ def _fields_the_control_plane_does_not_know(status_code: int, detail: Any) -> list[str]:
361
+ # A strict request model (extra="forbid") answering 422 with nothing but
362
+ # `extra_forbidden` errors is version skew, not a bad token: this Runner's contracts
363
+ # added fields the control plane's pinned contracts have not caught up to (RR-13).
364
+ if status_code != 422 or not isinstance(detail, list) or not detail:
365
+ return []
366
+ if not all(
367
+ isinstance(error, dict) and error.get("type") == "extra_forbidden" for error in detail
368
+ ):
369
+ return []
370
+ return [str(error.get("loc", ["?"])[-1]) for error in detail]
371
+
372
+
352
373
  class SignedIntakeStream:
353
374
  """:class:`agentic_runner.user_sources.IntakeStream` over the signed outbound stream."""
354
375
 
File without changes
File without changes