pyagentic-core 2.12.1.dev2__tar.gz → 2.12.1rc1__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 (135) hide show
  1. {pyagentic_core-2.12.1.dev2/pyagentic_core.egg-info → pyagentic_core-2.12.1rc1}/PKG-INFO +1 -1
  2. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_agent/_agent.py +23 -2
  3. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1/pyagentic_core.egg-info}/PKG-INFO +1 -1
  4. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  5. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  6. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.github/workflows/docs.yml +0 -0
  7. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.github/workflows/release.yml +0 -0
  8. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.github/workflows/testing.yml +0 -0
  9. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/.gitignore +0 -0
  10. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/CHANGELOG.md +0 -0
  11. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/LICENSE +0 -0
  12. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/README.md +0 -0
  13. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/agent-linking.md +0 -0
  14. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/api/creating-an-app.md +0 -0
  15. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/api/deploying.md +0 -0
  16. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/api/index.md +0 -0
  17. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/api/jobs.md +0 -0
  18. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/api/running.md +0 -0
  19. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/declaration.svg +0 -0
  20. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/instantiation.svg +0 -0
  21. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/runtime.svg +0 -0
  22. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/source/README.md +0 -0
  23. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/source/declaration.d2 +0 -0
  24. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/source/instantiation.d2 +0 -0
  25. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/diagrams/source/runtime.d2 +0 -0
  26. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/execution-modes.md +0 -0
  27. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/getting-started.md +0 -0
  28. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/images/langfuse.png +0 -0
  29. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/index.md +0 -0
  30. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/inheritance.md +0 -0
  31. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/observability.md +0 -0
  32. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/phases.md +0 -0
  33. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/policies.md +0 -0
  34. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/reference/architecture.md +0 -0
  35. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/reference/modules.md +0 -0
  36. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/responses.md +0 -0
  37. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/states.md +0 -0
  38. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/structured-output.md +0 -0
  39. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/docs/tools.md +0 -0
  40. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/mkdocs.yml +0 -0
  41. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/__init__.py +0 -0
  42. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/__init__.py +0 -0
  43. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_agent/__init__.py +0 -0
  44. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_agent/_agent_linking.py +0 -0
  45. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_agent/_agent_state.py +0 -0
  46. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_depends.py +0 -0
  47. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_exceptions.py +0 -0
  48. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_info.py +0 -0
  49. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_mcp.py +0 -0
  50. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_metaclasses.py +0 -0
  51. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_ref.py +0 -0
  52. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_spec.py +0 -0
  53. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_state.py +0 -0
  54. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_tool.py +0 -0
  55. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_base/_validation.py +0 -0
  56. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_utils/_typing.py +0 -0
  57. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_utils/_warnings.py +0 -0
  58. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/_version_scheme.py +0 -0
  59. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/__init__.py +0 -0
  60. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_app.py +0 -0
  61. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_build.py +0 -0
  62. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_config.py +0 -0
  63. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_docker.py +0 -0
  64. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_mcp_server.py +0 -0
  65. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_models.py +0 -0
  66. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/_sessions.py +0 -0
  67. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/__init__.py +0 -0
  68. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/_models.py +0 -0
  69. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/_orchestrator.py +0 -0
  70. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/_routes.py +0 -0
  71. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/backends/__init__.py +0 -0
  72. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/backends/_base.py +0 -0
  73. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/backends/_in_process.py +0 -0
  74. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/store/__init__.py +0 -0
  75. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/store/_base.py +0 -0
  76. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/api/jobs/store/_sqlite.py +0 -0
  77. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/__init__.py +0 -0
  78. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_anthropic.py +0 -0
  79. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_gemini.py +0 -0
  80. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_mock.py +0 -0
  81. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_openai.py +0 -0
  82. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_openaiv1.py +0 -0
  83. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/llm/_provider.py +0 -0
  84. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/logging.py +0 -0
  85. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/models/llm.py +0 -0
  86. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/models/response.py +0 -0
  87. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/models/tracing.py +0 -0
  88. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/policies/__init__.py +0 -0
  89. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/policies/_events.py +0 -0
  90. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/policies/_policy.py +0 -0
  91. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/tracing/__init__.py +0 -0
  92. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/tracing/_basic.py +0 -0
  93. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/tracing/_langfuse.py +0 -0
  94. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/tracing/_tracer.py +0 -0
  95. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic/updates.py +0 -0
  96. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic_core.egg-info/SOURCES.txt +0 -0
  97. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic_core.egg-info/dependency_links.txt +0 -0
  98. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic_core.egg-info/requires.txt +0 -0
  99. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyagentic_core.egg-info/top_level.txt +0 -0
  100. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/pyproject.toml +0 -0
  101. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/setup.cfg +0 -0
  102. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/setup.py +0 -0
  103. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/__init__.py +0 -0
  104. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/__init__.py +0 -0
  105. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_agent.py +0 -0
  106. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_agent_inheritance.py +0 -0
  107. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_agent_linking.py +0 -0
  108. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_agent_provider.py +0 -0
  109. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_params.py +0 -0
  110. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_phases.py +0 -0
  111. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_state.py +0 -0
  112. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_tool.py +0 -0
  113. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/_base/test_validator.py +0 -0
  114. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/__init__.py +0 -0
  115. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/jobs/__init__.py +0 -0
  116. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/jobs/test_orchestrator.py +0 -0
  117. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/jobs/test_routes.py +0 -0
  118. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/jobs/test_store_sqlite.py +0 -0
  119. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_app.py +0 -0
  120. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_build_agent.py +0 -0
  121. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_config.py +0 -0
  122. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_construct_model.py +0 -0
  123. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_dependencies_integration.py +0 -0
  124. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_docker.py +0 -0
  125. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_mcp_server.py +0 -0
  126. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_metaclass_models.py +0 -0
  127. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_router.py +0 -0
  128. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/api/test_sessions.py +0 -0
  129. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/conftest.py +0 -0
  130. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/models/test_responses.py +0 -0
  131. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/tracing/__init__.py +0 -0
  132. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/tracing/test_basic_tracer.py +0 -0
  133. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/tracing/test_models.py +0 -0
  134. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/tests/tracing/test_tracer.py +0 -0
  135. {pyagentic_core-2.12.1.dev2 → pyagentic_core-2.12.1rc1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyagentic-core
3
- Version: 2.12.1.dev2
3
+ Version: 2.12.1rc1
4
4
  Summary: Build LLM Agents in a Pythonic way
5
5
  Author-email: Ryan Mikulec <rmikulec.dev@gmail.com>
6
6
  License: MIT
@@ -347,10 +347,12 @@ class BaseAgent(metaclass=AgentMeta):
347
347
  self._mcp_connected = True
348
348
 
349
349
  async def close(self):
350
- """Tear down all MCP client connections.
350
+ """Tear down all MCP client connections, including linked agents'.
351
351
 
352
352
  Should be called when the agent is no longer needed to clean up
353
- any open connections or subprocesses.
353
+ any open connections or subprocesses. Linked sub-agents own their own
354
+ MCP clients, so closing must recurse into them (single-use forks already
355
+ close themselves after each call; this covers shared/persistent links).
354
356
  """
355
357
  for client in getattr(self, "_mcp_clients", {}).values():
356
358
  try:
@@ -361,6 +363,14 @@ class BaseAgent(metaclass=AgentMeta):
361
363
  self._mcp_tool_routing = {}
362
364
  self._mcp_connected = False
363
365
 
366
+ for name in getattr(self, "__linked_agents__", {}):
367
+ linked = getattr(self, name, None)
368
+ if isinstance(linked, BaseAgent):
369
+ try:
370
+ await linked.close()
371
+ except Exception:
372
+ pass
373
+
364
374
  def __post_init__(self):
365
375
  """
366
376
  Post-initialization hook called after agent instance is created.
@@ -540,6 +550,17 @@ class BaseAgent(metaclass=AgentMeta):
540
550
  self.tracer.record_exception(str(e))
541
551
  result = f"Agent `{tool_call.name}` failed: {e}. Please kindly state to the user that is failed, provide state, and ask if they want to try again." # noqa E501
542
552
  response = ErrorResponse(name=tool_call.name, kind="agent", error=result)
553
+ finally:
554
+ # A fork is single-use: tear down any MCP subprocesses it opened, in
555
+ # this same task (anyio forbids exiting an MCP client in a different
556
+ # task than it was entered, and this coroutine is where the fork's
557
+ # clients were connected). Shared agents persist and are closed by the
558
+ # owning agent's close().
559
+ if not shared:
560
+ try:
561
+ await agent.close()
562
+ except Exception:
563
+ pass
543
564
 
544
565
  # Add agent result to conversation history
545
566
  stringified_result = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyagentic-core
3
- Version: 2.12.1.dev2
3
+ Version: 2.12.1rc1
4
4
  Summary: Build LLM Agents in a Pythonic way
5
5
  Author-email: Ryan Mikulec <rmikulec.dev@gmail.com>
6
6
  License: MIT