agentic-runner 3.16.2__tar.gz → 3.17.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.
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/PKG-INFO +2 -2
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/pyproject.toml +1 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/__init__.py +1 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/activities.py +1 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/registration.py +4 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/service.py +11 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/control_plane.py +9 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/settings.py +9 -1
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/.gitignore +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/LICENSE +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/README.md +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/attempts.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/auth_mode.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/build.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/callback.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/child_watcher.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/cli.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/cli_floor.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/config.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/credentials.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/device_login_activities.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/egress.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/harness_self_test.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/heartbeat_link.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/hooks.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/host_store.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/contracts.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/evidence.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/fake_workspace.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/workspace.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/auth.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/fake_client.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/gh_client.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/oauth/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/oauth/fake_provider.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/lifecycle.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/llm_proxy.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/mcp.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/message_store.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/oauth_connectors.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/private_state.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/py.typed +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/recipient_key_secret.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/runtime/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/runtime/verifier_command.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/sealed_box.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/skill.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/skills/agentic-runner-setup/SKILL.md +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/__main__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/plugin.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/test_conformance.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/workflow.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/tiny_http.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/triage_activities.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/usage_windows.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/user_sources.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/__init__.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/_runtime_support.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/acp_runtime.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/agent_runtime.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/claude_runtime.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/claude_sign_in.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/codex_runtime.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/command_policy.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/contract_device_login.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/contract_isolation.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/fastapi_client.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/harness_outcome.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/harness_usage.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/mcp_config.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/skills.py +0 -0
- {agentic_runner-3.16.2 → agentic_runner-3.17.0}/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.
|
|
3
|
+
Version: 3.17.0
|
|
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.
|
|
8
|
+
Requires-Dist: agentic-runner-contracts==3.17.0
|
|
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.
|
|
13
|
+
"agentic-runner-contracts==3.17.0",
|
|
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.
|
|
@@ -3888,7 +3888,7 @@ class RunnerRalphActivities:
|
|
|
3888
3888
|
"event": "directive.repository_refused",
|
|
3889
3889
|
"product_id": product_id,
|
|
3890
3890
|
"runner_id": str(self._routing_identity.runner_id),
|
|
3891
|
-
"selector":
|
|
3891
|
+
"selector": [requirement.as_payload() for requirement in selector or ()],
|
|
3892
3892
|
},
|
|
3893
3893
|
)
|
|
3894
3894
|
|
|
@@ -123,6 +123,9 @@ class RunnerState(BaseModel):
|
|
|
123
123
|
# The control plane's cadence, as bootstrap told it (06 §4's 30 s by default); a
|
|
124
124
|
# state file written before issue 47 carries none and keeps the default.
|
|
125
125
|
heartbeat_interval_seconds: int = 30
|
|
126
|
+
# Where bootstrap said the namespace lives (ADR-0022 §4). Blank in a state file written
|
|
127
|
+
# before it, or from an older control plane: the process then uses `TEMPORAL_ADDRESS`.
|
|
128
|
+
temporal_address: str = ""
|
|
126
129
|
|
|
127
130
|
def signer(self) -> Ed25519PrivateKey:
|
|
128
131
|
key = serialization.load_pem_private_key(
|
|
@@ -279,6 +282,7 @@ class RunnerRegistrationClient:
|
|
|
279
282
|
tags=dict(tags),
|
|
280
283
|
max_concurrent_directives=max_concurrent_directives,
|
|
281
284
|
heartbeat_interval_seconds=response.heartbeat_interval_seconds,
|
|
285
|
+
temporal_address=response.temporal_address,
|
|
282
286
|
)
|
|
283
287
|
return state, response
|
|
284
288
|
|
|
@@ -1112,6 +1112,14 @@ async def _serve(
|
|
|
1112
1112
|
print(f"refusing to start ({error.reason}): {error}", flush=True)
|
|
1113
1113
|
return 1
|
|
1114
1114
|
print(outcome, flush=True)
|
|
1115
|
+
temporal_address = state.temporal_address or settings.TEMPORAL_ADDRESS
|
|
1116
|
+
if not temporal_address:
|
|
1117
|
+
print(
|
|
1118
|
+
"refusing to start (configuration_missing): the control plane gave no Temporal "
|
|
1119
|
+
"address and TEMPORAL_ADDRESS is not set",
|
|
1120
|
+
flush=True,
|
|
1121
|
+
)
|
|
1122
|
+
return 1
|
|
1115
1123
|
interval = (
|
|
1116
1124
|
heartbeat_interval if heartbeat_interval is not None else state.heartbeat_interval_seconds
|
|
1117
1125
|
)
|
|
@@ -1125,6 +1133,7 @@ async def _serve(
|
|
|
1125
1133
|
config=config,
|
|
1126
1134
|
settings=settings,
|
|
1127
1135
|
state=state,
|
|
1136
|
+
temporal_address=temporal_address,
|
|
1128
1137
|
mode=mode,
|
|
1129
1138
|
can_change_uid=can_change_uid,
|
|
1130
1139
|
control_plane=control_plane,
|
|
@@ -1148,6 +1157,7 @@ async def _serve_registered(
|
|
|
1148
1157
|
config: RunnerConfig,
|
|
1149
1158
|
settings: WorkerSettings,
|
|
1150
1159
|
state: RunnerState,
|
|
1160
|
+
temporal_address: str,
|
|
1151
1161
|
mode: IsolationMode,
|
|
1152
1162
|
can_change_uid: bool,
|
|
1153
1163
|
control_plane: str,
|
|
@@ -1241,7 +1251,7 @@ async def _serve_registered(
|
|
|
1241
1251
|
await asyncio.sleep(interval)
|
|
1242
1252
|
|
|
1243
1253
|
client = await connect(
|
|
1244
|
-
|
|
1254
|
+
temporal_address,
|
|
1245
1255
|
namespace=state.temporal_namespace,
|
|
1246
1256
|
api_key=stream.runner_token,
|
|
1247
1257
|
tls=os.environ.get(TEMPORAL_TLS_ENV, "").strip().lower() in {"1", "true", "yes"},
|
|
@@ -167,6 +167,8 @@ class FakeControlPlane:
|
|
|
167
167
|
contract_id: UUID = DEFAULT_CONTRACT_ID
|
|
168
168
|
agent_id: UUID = DEFAULT_AGENT_ID
|
|
169
169
|
cli_kind: str = "codex_cli"
|
|
170
|
+
# Blank answers as a control plane from before ADR-0022 §4 does: no address at all.
|
|
171
|
+
temporal_address: str = ""
|
|
170
172
|
|
|
171
173
|
bootstraps: list[BootstrapRequest] = field(default_factory=list)
|
|
172
174
|
runner_ids: list[UUID] = field(default_factory=list)
|
|
@@ -396,8 +398,14 @@ class FakeControlPlane:
|
|
|
396
398
|
contracts_floor=self.contracts_floor,
|
|
397
399
|
host_party=self.host_party,
|
|
398
400
|
heartbeat_interval_seconds=self.heartbeat_interval_seconds,
|
|
401
|
+
temporal_address=self.temporal_address,
|
|
402
|
+
)
|
|
403
|
+
return _Answer(
|
|
404
|
+
200,
|
|
405
|
+
response.model_dump(
|
|
406
|
+
mode="json", exclude=None if self.temporal_address else {"temporal_address"}
|
|
407
|
+
),
|
|
399
408
|
)
|
|
400
|
-
return _Answer(200, response.model_dump(mode="json"))
|
|
401
409
|
|
|
402
410
|
def _heartbeat(self, method: str, target: str, headers: dict[str, str], body: bytes) -> _Answer:
|
|
403
411
|
runner_id, runner = self._signed(method, target, headers, body)
|
|
@@ -13,7 +13,13 @@ from agentic_runner_contracts.activity_io import DEFAULT_BUDGET, Budget
|
|
|
13
13
|
class WorkerSettings(BaseSettings):
|
|
14
14
|
"""Runtime configuration for worker-only processes."""
|
|
15
15
|
|
|
16
|
-
TEMPORAL_ADDRESS: str = Field(
|
|
16
|
+
TEMPORAL_ADDRESS: str = Field(
|
|
17
|
+
default="",
|
|
18
|
+
description=(
|
|
19
|
+
"Temporal server address in host:port format. Only a fallback: the Runner uses "
|
|
20
|
+
"the address its registration response carries (ADR-0022 §4)."
|
|
21
|
+
),
|
|
22
|
+
)
|
|
17
23
|
TEMPORAL_NAMESPACE: str = Field(default="default", description="Temporal namespace name")
|
|
18
24
|
PLATFORM_WORKER_SHARD_INDEX: int = Field(
|
|
19
25
|
default=0,
|
|
@@ -216,6 +222,8 @@ class WorkerSettings(BaseSettings):
|
|
|
216
222
|
"""Validate host:port shape for Temporal server address."""
|
|
217
223
|
|
|
218
224
|
stripped_value = value.strip()
|
|
225
|
+
if not stripped_value:
|
|
226
|
+
return stripped_value
|
|
219
227
|
if stripped_value.count(":") < 1:
|
|
220
228
|
raise ValueError("TEMPORAL_ADDRESS must follow host:port")
|
|
221
229
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/device_login_activities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/__init__.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/contracts.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/evidence.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/git/workspace.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/__init__.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/github/gh_client.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/integrations/oauth/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/runtime/verifier_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/testing/test_conformance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/_runtime_support.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/claude_runtime.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/claude_sign_in.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/command_policy.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/contract_device_login.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/contract_isolation.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/fastapi_client.py
RENAMED
|
File without changes
|
{agentic_runner-3.16.2 → agentic_runner-3.17.0}/src/agentic_runner/workers/harness_outcome.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|