agentic-runner 3.12.1__tar.gz → 3.12.2__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 (74) hide show
  1. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/PKG-INFO +1 -1
  2. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/__init__.py +1 -1
  3. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/cli.py +21 -0
  4. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workstation.py +28 -1
  5. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/.gitignore +0 -0
  6. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/LICENSE +0 -0
  7. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/README.md +0 -0
  8. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/pyproject.toml +0 -0
  9. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/activities.py +0 -0
  10. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/attempts.py +0 -0
  11. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/auth_mode.py +0 -0
  12. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/build.py +0 -0
  13. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/callback.py +0 -0
  14. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/child_watcher.py +0 -0
  15. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/cli_floor.py +0 -0
  16. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/config.py +0 -0
  17. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/credentials.py +0 -0
  18. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/device_login_activities.py +0 -0
  19. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/egress.py +0 -0
  20. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/harness_self_test.py +0 -0
  21. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/heartbeat_link.py +0 -0
  22. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/hooks.py +0 -0
  23. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/host_store.py +0 -0
  24. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/__init__.py +0 -0
  25. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/git/__init__.py +0 -0
  26. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/git/contracts.py +0 -0
  27. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/git/evidence.py +0 -0
  28. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/git/fake_workspace.py +0 -0
  29. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/git/workspace.py +0 -0
  30. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/github/__init__.py +0 -0
  31. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/github/auth.py +0 -0
  32. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/github/fake_client.py +0 -0
  33. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/github/gh_client.py +0 -0
  34. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/oauth/__init__.py +0 -0
  35. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/integrations/oauth/fake_provider.py +0 -0
  36. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/lifecycle.py +0 -0
  37. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/llm_proxy.py +0 -0
  38. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/mcp.py +0 -0
  39. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/message_store.py +0 -0
  40. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/oauth_connectors.py +0 -0
  41. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/private_state.py +0 -0
  42. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/py.typed +0 -0
  43. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/recipient_key_secret.py +0 -0
  44. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/registration.py +0 -0
  45. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/runtime/__init__.py +0 -0
  46. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/runtime/verifier_command.py +0 -0
  47. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/sealed_box.py +0 -0
  48. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/service.py +0 -0
  49. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/__init__.py +0 -0
  50. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/__main__.py +0 -0
  51. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/control_plane.py +0 -0
  52. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/plugin.py +0 -0
  53. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/test_conformance.py +0 -0
  54. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/testing/workflow.py +0 -0
  55. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/tiny_http.py +0 -0
  56. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/triage_activities.py +0 -0
  57. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/usage_windows.py +0 -0
  58. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/user_sources.py +0 -0
  59. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/__init__.py +0 -0
  60. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/_runtime_support.py +0 -0
  61. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/acp_runtime.py +0 -0
  62. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/agent_runtime.py +0 -0
  63. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/claude_runtime.py +0 -0
  64. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/claude_sign_in.py +0 -0
  65. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/codex_runtime.py +0 -0
  66. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/command_policy.py +0 -0
  67. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/contract_device_login.py +0 -0
  68. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/contract_isolation.py +0 -0
  69. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/fastapi_client.py +0 -0
  70. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/harness_outcome.py +0 -0
  71. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/harness_usage.py +0 -0
  72. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/mcp_config.py +0 -0
  73. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/settings.py +0 -0
  74. {agentic_runner-3.12.1 → agentic_runner-3.12.2}/src/agentic_runner/workers/skills.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentic-runner
3
- Version: 3.12.1
3
+ Version: 3.12.2
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.12.1"
10
+ __version__ = "3.12.2"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -158,6 +158,12 @@ def main(argv: Sequence[str] | None = None) -> int:
158
158
  action="store_true",
159
159
  help="no TLS to Temporal -- a local development server only",
160
160
  )
161
+ install.add_argument(
162
+ "--acp-cli-kinds",
163
+ default=None,
164
+ help="comma-separated cli_kinds served through the pinned ACP bridge (codex_cli, "
165
+ "claude_code); omitted keeps the previous install's, '' turns ACP off",
166
+ )
161
167
  install.add_argument("--no-start", action="store_true", help="write the agent, do not start")
162
168
  install.add_argument("--root", default=None, type=Path, help="state root (default per OS)")
163
169
  for service_verb in ("start", "stop"):
@@ -342,6 +348,11 @@ def _install(arguments: argparse.Namespace, paths: workstation.OrgPaths) -> int:
342
348
  if not arguments.control_plane:
343
349
  print(f"--control-plane (or {CONTROL_PLANE_ENV}) is required", file=sys.stderr)
344
350
  return 2
351
+ try:
352
+ acp_cli_kinds = _acp_cli_kinds(arguments.acp_cli_kinds, paths)
353
+ except ValueError as error:
354
+ print(str(error), file=sys.stderr)
355
+ return 2
345
356
  # Pasted, never a flag: a flag is in the process table for every uid on the box.
346
357
  token = os.environ.get(AGENT_TOKEN_ENV, "").strip() or getpass.getpass(
347
358
  "Agent Token (yours from /me/runners, or the Organisation Admin's for an "
@@ -354,6 +365,7 @@ def _install(arguments: argparse.Namespace, paths: workstation.OrgPaths) -> int:
354
365
  temporal_tls=not arguments.temporal_plaintext,
355
366
  path=os.environ.get("PATH", ""),
356
367
  install_channel=workstation.install_channel(),
368
+ acp_cli_kinds=acp_cli_kinds,
357
369
  )
358
370
  try:
359
371
  lines = asyncio.run(
@@ -369,6 +381,15 @@ def _install(arguments: argparse.Namespace, paths: workstation.OrgPaths) -> int:
369
381
  return 0
370
382
 
371
383
 
384
+ def _acp_cli_kinds(flag: str | None, paths: workstation.OrgPaths) -> str:
385
+ # A reinstall to pick up a new PATH or retry a token must not turn ACP off (QTS-1355).
386
+ if flag is not None:
387
+ return workstation.parse_acp_cli_kinds(flag)
388
+ if not paths.settings_file.is_file():
389
+ return ""
390
+ return workstation.WorkstationSettings.load(paths).acp_cli_kinds
391
+
392
+
372
393
  def _callback(arguments: argparse.Namespace) -> int:
373
394
  socket_path = os.environ.get(CALLBACK_SOCKET_ENV, "")
374
395
  token = os.environ.get(CALLBACK_TOKEN_ENV, "")
@@ -50,6 +50,7 @@ from agentic_runner.host_store import open_workstation_store
50
50
  from agentic_runner.lifecycle import LifecycleOutbox
51
51
  from agentic_runner.registration import load_state
52
52
  from agentic_runner.service import HEARTBEAT_STAMP_NAME, PIDFILE_NAME
53
+ from agentic_runner.workers.acp_runtime import ACP_BRIDGES
53
54
  from agentic_runner_contracts.runner_registration import (
54
55
  CliVersion,
55
56
  EgressPosture,
@@ -75,6 +76,7 @@ __all__ = [
75
76
  "install",
76
77
  "install_channel",
77
78
  "locate_clis",
79
+ "parse_acp_cli_kinds",
78
80
  "require_any_cli",
79
81
  "run_environment",
80
82
  "run_process",
@@ -204,6 +206,9 @@ class WorkstationSettings(BaseModel):
204
206
  # would not find a Homebrew or `~/.local/bin` CLI without it.
205
207
  path: str
206
208
  install_channel: InstallChannel
209
+ # The Runner's `ACP_CLI_KINDS`, kept here rather than hand-added to the login agent,
210
+ # which every `install` rewrites (QTS-1355).
211
+ acp_cli_kinds: str = ""
207
212
 
208
213
  def save(self, paths: OrgPaths) -> None:
209
214
  paths.settings_file.write_text(self.model_dump_json(indent=2), encoding="utf-8")
@@ -218,6 +223,23 @@ class WorkstationSettings(BaseModel):
218
223
  return cls.model_validate_json(paths.settings_file.read_text(encoding="utf-8"))
219
224
 
220
225
 
226
+ def parse_acp_cli_kinds(value: str) -> str:
227
+ """``--acp-cli-kinds``, refused if it names a kind with no pinned bridge.
228
+
229
+ The Runner itself drops such a kind without a word, so a typo here would turn ACP off
230
+ as quietly as the rewritten login agent did (QTS-1355).
231
+ """
232
+
233
+ kinds = [kind.strip() for kind in value.split(",") if kind.strip()]
234
+ unknown = sorted(set(kinds) - ACP_BRIDGES.keys())
235
+ if unknown:
236
+ raise ValueError(
237
+ f"--acp-cli-kinds names {', '.join(unknown)}; a pinned ACP bridge exists only for "
238
+ f"{', '.join(sorted(ACP_BRIDGES))}"
239
+ )
240
+ return ",".join(dict.fromkeys(kinds))
241
+
242
+
221
243
  def install_channel(
222
244
  platform: str = sys.platform, *, executable: str = sys.executable
223
245
  ) -> InstallChannel:
@@ -235,7 +257,7 @@ def run_environment(paths: OrgPaths, settings: WorkstationSettings) -> dict[str,
235
257
  a unit, a task -- stays a one-liner, and the three OSes cannot drift apart.
236
258
  """
237
259
 
238
- return {
260
+ environment = {
239
261
  "PATH": settings.path,
240
262
  "AGENTIC_RUNNER_STATE_DIR": str(paths.state_dir),
241
263
  "AGENTIC_RUNNER_WORKSPACE_ROOT": str(paths.workspaces),
@@ -254,6 +276,11 @@ def run_environment(paths: OrgPaths, settings: WorkstationSettings) -> dict[str,
254
276
  # port inherited from a pod-style environment would collide on the second one.
255
277
  service.READINESS_PORT_ENV: "0",
256
278
  }
279
+ # Only when set: a login agent hand-edited with `ACP_CLI_KINDS` before QTS-1355 keeps
280
+ # ACP on across an upgrade until its next `install`.
281
+ if settings.acp_cli_kinds:
282
+ environment["ACP_CLI_KINDS"] = settings.acp_cli_kinds
283
+ return environment
257
284
 
258
285
 
259
286
  # ------------------------------------------------------------------ the CLIs
File without changes