agentic-runner 3.26.0__tar.gz → 3.26.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 (80) hide show
  1. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/PKG-INFO +2 -2
  2. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/pyproject.toml +1 -1
  3. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/__init__.py +1 -1
  4. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/sign_in.py +42 -35
  5. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/.gitignore +0 -0
  6. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/LICENSE +0 -0
  7. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/README.md +0 -0
  8. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/activities.py +0 -0
  9. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/attempts.py +0 -0
  10. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/auth_mode.py +0 -0
  11. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/build.py +0 -0
  12. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/callback.py +0 -0
  13. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/child_watcher.py +0 -0
  14. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/cli.py +0 -0
  15. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/cli_floor.py +0 -0
  16. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/config.py +0 -0
  17. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/credentials.py +0 -0
  18. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/egress.py +0 -0
  19. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/harness_self_test.py +0 -0
  20. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/heartbeat_link.py +0 -0
  21. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/hooks.py +0 -0
  22. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/host_store.py +0 -0
  23. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/__init__.py +0 -0
  24. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/git/__init__.py +0 -0
  25. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/git/contracts.py +0 -0
  26. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/git/evidence.py +0 -0
  27. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/git/fake_workspace.py +0 -0
  28. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/git/workspace.py +0 -0
  29. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/github/__init__.py +0 -0
  30. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/github/auth.py +0 -0
  31. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/github/fake_client.py +0 -0
  32. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/github/gh_client.py +0 -0
  33. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/oauth/__init__.py +0 -0
  34. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/integrations/oauth/fake_provider.py +0 -0
  35. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/launch.py +0 -0
  36. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/lifecycle.py +0 -0
  37. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/llm_contracts.py +0 -0
  38. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/llm_proxy.py +0 -0
  39. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/mcp.py +0 -0
  40. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/message_store.py +0 -0
  41. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/oauth_connectors.py +0 -0
  42. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/pool_key.py +0 -0
  43. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/private_state.py +0 -0
  44. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/py.typed +0 -0
  45. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/recipient_key_secret.py +0 -0
  46. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/registration.py +0 -0
  47. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/runner_limit.py +0 -0
  48. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/runtime/__init__.py +0 -0
  49. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/runtime/verifier_command.py +0 -0
  50. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/sealed_box.py +0 -0
  51. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/service.py +0 -0
  52. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/skill.py +0 -0
  53. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/skills/agentic-runner-setup/SKILL.md +0 -0
  54. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/__init__.py +0 -0
  55. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/__main__.py +0 -0
  56. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/control_plane.py +0 -0
  57. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/plugin.py +0 -0
  58. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/test_conformance.py +0 -0
  59. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/testing/workflow.py +0 -0
  60. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/tiny_http.py +0 -0
  61. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/triage_activities.py +0 -0
  62. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/usage_windows.py +0 -0
  63. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/user_sources.py +0 -0
  64. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/__init__.py +0 -0
  65. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/_runtime_support.py +0 -0
  66. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/acp_runtime.py +0 -0
  67. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/agent_runtime.py +0 -0
  68. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/claude_runtime.py +0 -0
  69. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/claude_sign_in.py +0 -0
  70. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/codex_runtime.py +0 -0
  71. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/command_policy.py +0 -0
  72. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/contract_isolation.py +0 -0
  73. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/fastapi_client.py +0 -0
  74. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/harness_logins.py +0 -0
  75. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/harness_outcome.py +0 -0
  76. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/harness_usage.py +0 -0
  77. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/mcp_config.py +0 -0
  78. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/settings.py +0 -0
  79. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workers/skills.py +0 -0
  80. {agentic_runner-3.26.0 → agentic_runner-3.26.1}/src/agentic_runner/workstation.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentic-runner
3
- Version: 3.26.0
3
+ Version: 3.26.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
7
  Requires-Python: >=3.12
8
- Requires-Dist: agentic-runner-contracts==3.26.0
8
+ Requires-Dist: agentic-runner-contracts==3.26.1
9
9
  Requires-Dist: cryptography<51,>=50
10
10
  Requires-Dist: httpx<1.0,>=0.27
11
11
  Requires-Dist: pydantic-settings<3.0,>=2.0
@@ -10,7 +10,7 @@ dependencies = [
10
10
  # Exactly this release's contracts: the two ship as one version, and an unpinned
11
11
  # requirement let `uv tool upgrade` keep an older contracts wheel the Runner cannot
12
12
  # import from (QTS-1473). `scripts/set-version.py` moves it with the version.
13
- "agentic-runner-contracts==3.26.0",
13
+ "agentic-runner-contracts==3.26.1",
14
14
  # Imported directly by `registration.py` (the Ed25519 identity that signs every
15
15
  # heartbeat); already present transitively through pyjwt[crypto], declared because
16
16
  # we import it.
@@ -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.26.0"
10
+ __version__ = "3.26.1"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -14,9 +14,10 @@ personal Runner serves one Contract, which the last heartbeat ack named
14
14
  ``codex login --device-auth`` with the code shown here. No code or token passes through
15
15
  the control plane.
16
16
 
17
- It refuses on a pool Runner, which uses only its pool's keys. It refuses a subscription
18
- when the ack says the Contract lacks the right or the person has not acknowledged, and
19
- says which.
17
+ It refuses on a pool Runner, which uses only its pool's keys. It offers a subscription
18
+ only when the ack says the Contract allows it; otherwise it says which of the right or
19
+ the person's acknowledgment is missing, names the console page that turns it on, and
20
+ offers the key (QTS-1776).
20
21
  """
21
22
 
22
23
  from __future__ import annotations
@@ -92,14 +93,21 @@ class SignIn:
92
93
 
93
94
  async def _one(self, cli_kind: str) -> int:
94
95
  label = _LABELS[cli_kind]
95
- answer = self.ask(
96
- f"{label}: sign in with your [s]ubscription, store an API [k]ey, or skip? [s/k/N] "
97
- )
96
+ offer = self._subscription_offer()
97
+ if isinstance(offer, str):
98
+ # Offering `[s]` and then refusing it is what sent an Organisation Admin looking
99
+ # for a switch nothing named (QTS-1776).
100
+ self.say(f"{label}: {offer}")
101
+ answer = self.ask(f"{label}: store an API [k]ey, or skip? [k/N] ")
102
+ else:
103
+ answer = self.ask(
104
+ f"{label}: sign in with your [s]ubscription, store an API [k]ey, or skip? [s/k/N] "
105
+ )
98
106
  choice = answer.strip().lower()[:1]
99
107
  if choice == "k":
100
108
  return self._key(cli_kind)
101
- if choice == "s":
102
- return await self._subscription(cli_kind)
109
+ if choice == "s" and not isinstance(offer, str):
110
+ return await self._subscription(offer, cli_kind)
103
111
  self.say(f"{label}: skipped")
104
112
  return 0
105
113
 
@@ -118,39 +126,38 @@ class SignIn:
118
126
  )
119
127
  return 0
120
128
 
121
- async def _subscription(self, cli_kind: str) -> int:
122
- contract = self._contract()
123
- if contract is None:
124
- return 1
125
- if contract.subscription == SubscriptionRight.NO_RIGHT:
126
- self.say(
127
- "refusing a subscription: your Contract does not allow your own subscription. "
128
- "Ask an Organisation Admin to turn it on, or store an API key instead"
129
- )
130
- return 1
131
- if contract.subscription == SubscriptionRight.NOT_ACKNOWLEDGED:
132
- self.say(
133
- "refusing a subscription: you have not acknowledged the subscription terms. "
134
- "Acknowledge them on your Contract in the console, then run this again"
135
- )
136
- return 1
129
+ async def _subscription(self, contract: ContractLlmTerms, cli_kind: str) -> int:
137
130
  returncode = await self.subscription(str(contract.contract_id), cli_kind)
138
131
  if returncode != 0:
139
132
  self.say(f"{_LABELS[cli_kind]}: the sign-in exited {returncode}; nothing changed")
140
133
  return returncode
141
134
 
142
- def _contract(self) -> ContractLlmTerms | None:
135
+ def _subscription_offer(self) -> ContractLlmTerms | str:
136
+ """The one Contract a subscription signs in, or why the ack offers none."""
137
+
143
138
  if self.contracts is None:
144
- self.say(
145
- "refusing a subscription: this Runner has not yet been told its Contract. "
146
- "Start it, wait for its first heartbeat, and run this again (the control "
147
- "plane must be on contracts 3.25 or later)"
139
+ return (
140
+ "no subscription yet: this Runner has not yet been told its Contract. Start "
141
+ "it, wait for its first heartbeat, and run this again (the control plane must "
142
+ "be on contracts 3.25 or later)"
148
143
  )
149
- return None
150
144
  if len(self.contracts) != 1:
151
- self.say(
152
- f"refusing a subscription: a personal Runner serves one Contract, and the "
153
- f"control plane named {len(self.contracts)}"
145
+ return (
146
+ "no subscription: a personal Runner serves one Contract, and the control "
147
+ f"plane named {len(self.contracts)}"
148
+ )
149
+ contract = self.contracts[0]
150
+ if contract.subscription == SubscriptionRight.NO_RIGHT:
151
+ # TODO(QTS-1744): name the Contract editor once the right moves onto the Contract.
152
+ return (
153
+ "your own subscription is off for this Runner. An Organisation Admin turns it "
154
+ "on in the console with Allow subscription sign-in, on this Runner under "
155
+ "Personal Runners on /orgs/<organisation>/runners"
156
+ )
157
+ if contract.subscription == SubscriptionRight.NOT_ACKNOWLEDGED:
158
+ return (
159
+ "your own subscription is on for this Runner, and you have not acknowledged "
160
+ "the subscription terms. Acknowledge them in the console on My Contracts "
161
+ "(/me/contracts), then run this again"
154
162
  )
155
- return None
156
- return self.contracts[0]
163
+ return contract
File without changes