agentic-runner 3.30.1__tar.gz → 3.30.3__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.30.1 → agentic_runner-3.30.3}/PKG-INFO +2 -2
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/pyproject.toml +1 -1
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/__init__.py +1 -1
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workstation.py +27 -5
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/.gitignore +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/LICENSE +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/README.md +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/activities.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/attempts.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/auth_mode.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/build.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/callback.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/child_watcher.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/cli.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/cli_floor.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/config.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/credentials.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/egress.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/harness_self_test.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/heartbeat_link.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/hooks.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/host_store.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/contracts.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/evidence.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/fake_workspace.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/workspace.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/auth.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/fake_client.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/gh_client.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/oauth/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/oauth/fake_provider.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/launch.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/lifecycle.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/llm_contracts.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/llm_proxy.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/mcp.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/message_store.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/oauth_connectors.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/organisation_name.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/pool_key.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/private_state.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/py.typed +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/recipient_key_secret.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/registration.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/runner_limit.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/runtime/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/runtime/verifier_command.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/sealed_box.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/service.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/sign_in.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/skill.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/skills/agentic-runner-setup/SKILL.md +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/__main__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/control_plane.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/plugin.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/test_conformance.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/testing/workflow.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/tiny_http.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/triage_activities.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/usage_windows.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/user_sources.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/__init__.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/_runtime_support.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/acp_runtime.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/agent_runtime.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/claude_runtime.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/claude_sign_in.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/codex_runtime.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/command_policy.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/contract_isolation.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/fastapi_client.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/harness_logins.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/harness_outcome.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/harness_usage.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/mcp_config.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/settings.py +0 -0
- {agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/skills.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentic-runner
|
|
3
|
-
Version: 3.30.
|
|
3
|
+
Version: 3.30.3
|
|
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.30.
|
|
8
|
+
Requires-Dist: agentic-runner-contracts==3.30.3
|
|
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.30.
|
|
13
|
+
"agentic-runner-contracts==3.30.3",
|
|
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.
|
|
@@ -39,7 +39,7 @@ import sys
|
|
|
39
39
|
import tempfile
|
|
40
40
|
import time
|
|
41
41
|
from collections.abc import Callable, Mapping, Sequence
|
|
42
|
-
from dataclasses import dataclass
|
|
42
|
+
from dataclasses import dataclass, field
|
|
43
43
|
from datetime import UTC, datetime
|
|
44
44
|
from pathlib import Path
|
|
45
45
|
from typing import Any, Final, Literal
|
|
@@ -81,6 +81,7 @@ from agentic_runner_contracts.runner_registration import (
|
|
|
81
81
|
__all__ = [
|
|
82
82
|
"CLI_FLOORS",
|
|
83
83
|
"CLI_NAMES",
|
|
84
|
+
"DRAIN_TIMEOUT_SECONDS",
|
|
84
85
|
"ROOT_ENV",
|
|
85
86
|
"CliMissingError",
|
|
86
87
|
"RunnerPaths",
|
|
@@ -111,6 +112,11 @@ __all__ = [
|
|
|
111
112
|
ROOT_ENV: Final = "AGENTIC_RUNNER_WORKSTATION_ROOT"
|
|
112
113
|
|
|
113
114
|
_LABEL_PREFIX: Final = "agentic-runner"
|
|
115
|
+
# The drain waits out an in-flight Directive (issue 02), as the chart's
|
|
116
|
+
# terminationGracePeriodSeconds does. Without it the service manager SIGKILLs the drain:
|
|
117
|
+
# systemd after 90 s, launchd after 20 s (QTS-2166), and launchd caps it at 60 s however
|
|
118
|
+
# high ExitTimeOut is set (QTS-2178), so on macOS `stop` and `restart` drain first.
|
|
119
|
+
DRAIN_TIMEOUT_SECONDS: Final = 2100
|
|
114
120
|
|
|
115
121
|
Run = Callable[..., subprocess.CompletedProcess[str]]
|
|
116
122
|
|
|
@@ -458,6 +464,9 @@ class ServiceDefinition:
|
|
|
458
464
|
start: list[list[str]]
|
|
459
465
|
stop: list[list[str]]
|
|
460
466
|
restart: list[list[str]]
|
|
467
|
+
# Sends SIGTERM outside the service manager's own stop, which `stop` and `restart` then
|
|
468
|
+
# run only once the process has drained. Empty where that stop already waits it out.
|
|
469
|
+
drain: list[list[str]] = field(default_factory=list)
|
|
461
470
|
|
|
462
471
|
|
|
463
472
|
def runner_command(name: str, root: Path) -> list[str]:
|
|
@@ -507,6 +516,7 @@ def _launch_agent(
|
|
|
507
516
|
"RunAtLoad": True,
|
|
508
517
|
# Restart a crash, not a clean `stop`: SIGTERM drains and exits 0.
|
|
509
518
|
"KeepAlive": {"SuccessfulExit": False},
|
|
519
|
+
"ExitTimeOut": DRAIN_TIMEOUT_SECONDS,
|
|
510
520
|
"ProcessType": "Background",
|
|
511
521
|
"StandardOutPath": str(paths.log),
|
|
512
522
|
"StandardErrorPath": str(paths.log),
|
|
@@ -521,6 +531,10 @@ def _launch_agent(
|
|
|
521
531
|
# One call, not bootout then bootstrap: launchd refuses a bootstrap of a label it
|
|
522
532
|
# still holds, and it holds it until the old process has drained.
|
|
523
533
|
restart=[["launchctl", "kickstart", "-k", f"{domain}/{name}"]],
|
|
534
|
+
# launchd SIGKILLs a stop of its own after at most 60 s, whatever ExitTimeOut says,
|
|
535
|
+
# but leaves alone a process that exits on a signal it only forwarded (CI, QTS-2178).
|
|
536
|
+
# A clean exit is not restarted: KeepAlive above.
|
|
537
|
+
drain=[["launchctl", "kill", "SIGTERM", f"{domain}/{name}"]],
|
|
524
538
|
)
|
|
525
539
|
|
|
526
540
|
|
|
@@ -544,9 +558,7 @@ def _systemd_user_unit(
|
|
|
544
558
|
f"Environment={_systemd_quote('PATH=' + settings.path)}\n"
|
|
545
559
|
"Restart=on-failure\n"
|
|
546
560
|
"RestartSec=10\n"
|
|
547
|
-
|
|
548
|
-
# would SIGKILL it.
|
|
549
|
-
"TimeoutStopSec=2100\n"
|
|
561
|
+
f"TimeoutStopSec={DRAIN_TIMEOUT_SECONDS}\n"
|
|
550
562
|
"KillMode=mixed\n\n"
|
|
551
563
|
"[Install]\n"
|
|
552
564
|
"WantedBy=default.target\n"
|
|
@@ -875,7 +887,9 @@ def restart(
|
|
|
875
887
|
"""
|
|
876
888
|
|
|
877
889
|
previous = process_id(paths)
|
|
878
|
-
_drive_service(paths, "restart", **driver)
|
|
890
|
+
_drive_service(paths, "restart", sleep=sleep, clock=clock, **driver)
|
|
891
|
+
# Taken after the call: the drain and then `kickstart -k`, or `systemctl restart`, return
|
|
892
|
+
# only once the old process has exited, so the drain spends none of it (QTS-2172).
|
|
879
893
|
deadline = clock() + timeout
|
|
880
894
|
while (pid := process_id(paths)) is None or pid == previous:
|
|
881
895
|
if clock() >= deadline:
|
|
@@ -893,9 +907,17 @@ def _drive_service(
|
|
|
893
907
|
platform: str = sys.platform,
|
|
894
908
|
home: Path | None = None,
|
|
895
909
|
run: Run = subprocess.run,
|
|
910
|
+
sleep: Callable[[float], None] = time.sleep,
|
|
911
|
+
clock: Callable[[], float] = time.monotonic,
|
|
896
912
|
) -> None:
|
|
897
913
|
settings = WorkstationSettings.load(paths)
|
|
898
914
|
definition = service_definition(paths, settings, platform=platform, home=home)
|
|
915
|
+
if verb != "start" and definition.drain and process_id(paths) is not None:
|
|
916
|
+
drive(definition.drain, run=run)
|
|
917
|
+
# Past the budget the service manager's stop below ends it, as systemd's would.
|
|
918
|
+
deadline = clock() + DRAIN_TIMEOUT_SECONDS
|
|
919
|
+
while process_id(paths) is not None and clock() < deadline:
|
|
920
|
+
sleep(1.0)
|
|
899
921
|
drive(getattr(definition, verb), run=run)
|
|
900
922
|
|
|
901
923
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/__init__.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/contracts.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/evidence.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/git/workspace.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/__init__.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/integrations/github/gh_client.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/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.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/_runtime_support.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/claude_runtime.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/claude_sign_in.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/command_policy.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/contract_isolation.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/fastapi_client.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/harness_logins.py
RENAMED
|
File without changes
|
{agentic_runner-3.30.1 → agentic_runner-3.30.3}/src/agentic_runner/workers/harness_outcome.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|