agent-framework-ag-ui 1.2.0__tar.gz → 1.2.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 (104) hide show
  1. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/.gitignore +7 -0
  2. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/AGENTS.md +7 -0
  3. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/PKG-INFO +2 -2
  4. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_a2ui/_agent.py +9 -0
  5. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_agent.py +8 -0
  6. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_agent_run.py +306 -31
  7. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_approval_lifecycle.py +38 -3
  8. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_approval_state.py +3 -1
  9. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_message_adapters.py +36 -11
  10. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_run_common.py +71 -18
  11. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_snapshots.py +2 -1
  12. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_utils.py +25 -0
  13. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_workflow_run.py +6 -22
  14. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/__init__.py +7 -7
  15. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/__main__.py +8 -8
  16. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/pyproject.toml +2 -2
  17. {agent_framework_ag_ui-1.2.0/agent_framework_ag_ui_examples/server → agent_framework_ag_ui-1.2.2/tests/ag_ui/golden}/__init__.py +1 -1
  18. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_a2ui.py +73 -1
  19. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_agent_wrapper_comprehensive.py +48 -27
  20. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_endpoint.py +1675 -552
  21. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_message_adapters.py +67 -0
  22. agent_framework_ag_ui-1.2.2/tests/ag_ui/test_multi_turn.py +818 -0
  23. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_run.py +166 -3
  24. agent_framework_ag_ui-1.2.0/tests/ag_ui/test_multi_turn.py +0 -332
  25. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/LICENSE +0 -0
  26. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/README.md +0 -0
  27. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/__init__.py +0 -0
  28. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_a2ui/__init__.py +0 -0
  29. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_a2ui/_factory.py +0 -0
  30. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_a2ui/_state.py +0 -0
  31. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_client.py +0 -0
  32. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_endpoint.py +0 -0
  33. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_event_converters.py +0 -0
  34. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_feature_usage.py +0 -0
  35. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_http_service.py +0 -0
  36. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_predictive_state.py +0 -0
  37. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_snapshot_session.py +0 -0
  38. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_state.py +0 -0
  39. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_tooling.py +0 -0
  40. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_types.py +0 -0
  41. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/_workflow.py +0 -0
  42. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui/py.typed +0 -0
  43. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/.env.example +0 -0
  44. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/.vscode/settings.json +0 -0
  45. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/README.md +0 -0
  46. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/__init__.py +0 -0
  47. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/a2ui_agents.py +0 -0
  48. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/document_writer_agent.py +0 -0
  49. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/human_in_the_loop_agent.py +0 -0
  50. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/recipe_agent.py +0 -0
  51. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/research_assistant_agent.py +0 -0
  52. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/simple_agent.py +0 -0
  53. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/subgraphs_agent.py +0 -0
  54. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/task_planner_agent.py +0 -0
  55. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/task_steps_agent.py +0 -0
  56. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/ui_generator_agent.py +0 -0
  57. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/weather_agent.py +0 -0
  58. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/agents/weather_state_agent.py +0 -0
  59. {agent_framework_ag_ui-1.2.0/tests/ag_ui/golden → agent_framework_ag_ui-1.2.2/agent_framework_ag_ui_examples/server}/__init__.py +0 -0
  60. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/server/api/backend_tool_rendering.py +0 -0
  61. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/agent_framework_ag_ui_examples/server/main.py +0 -0
  62. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/getting_started/README.md +0 -0
  63. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/getting_started/client.py +0 -0
  64. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/getting_started/client_advanced.py +0 -0
  65. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/getting_started/client_with_agent.py +0 -0
  66. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/getting_started/server.py +0 -0
  67. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/conftest.py +0 -0
  68. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/event_stream.py +0 -0
  69. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/conftest.py +0 -0
  70. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_agentic_chat.py +0 -0
  71. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_backend_tools.py +0 -0
  72. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_deterministic_state.py +0 -0
  73. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_generative_ui_agent.py +0 -0
  74. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_generative_ui_tool.py +0 -0
  75. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_hitl.py +0 -0
  76. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_predictive_state.py +0 -0
  77. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_shared_state.py +0 -0
  78. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_subgraphs.py +0 -0
  79. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/golden/test_scenario_workflow.py +0 -0
  80. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/sse_helpers.py +0 -0
  81. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_ag_ui_client.py +0 -0
  82. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_approval_lifecycle.py +0 -0
  83. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_approval_result_event.py +0 -0
  84. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_approval_state.py +0 -0
  85. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_confirm_changes_snapshot.py +0 -0
  86. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_event_converters.py +0 -0
  87. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_forwarded_props_in_metadata.py +0 -0
  88. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_handoff_replay.py +0 -0
  89. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_http_round_trip.py +0 -0
  90. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_http_service.py +0 -0
  91. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_message_hygiene.py +0 -0
  92. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_predictive_state.py +0 -0
  93. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_public_exports.py +0 -0
  94. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_run_common.py +0 -0
  95. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_service_thread_id.py +0 -0
  96. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_snapshot_session.py +0 -0
  97. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_snapshots.py +0 -0
  98. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_structured_output.py +0 -0
  99. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_subgraphs_example_agent.py +0 -0
  100. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_tooling.py +0 -0
  101. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_types.py +0 -0
  102. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_utils.py +0 -0
  103. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_workflow_agent.py +0 -0
  104. {agent_framework_ag_ui-1.2.0 → agent_framework_ag_ui-1.2.2}/tests/ag_ui/test_workflow_run.py +0 -0
@@ -207,6 +207,10 @@ temp*/
207
207
 
208
208
  # AI
209
209
  **/.checkpoints/
210
+ # Local AgentServer file store + crash-recovery HOME roots used by hosted samples
211
+ **/.agentserver-state/
212
+ **/.agentserver-state-*/
213
+ **/.home-*/
210
214
  .claude/
211
215
  .omc/
212
216
  .omx/
@@ -245,6 +249,9 @@ python/dotnet-ref
245
249
  dotnet/filtered-*.slnx
246
250
  **/*.lscache
247
251
 
252
+ # Local .NET build overrides
253
+ /dotnet/Directory.Build.rsp
254
+
248
255
  # Local tool state
249
256
  .omc/
250
257
  .omx/
@@ -40,9 +40,16 @@ AG-UI protocol integration for building agent UIs with the AG-UI standard.
40
40
  - `_approval_lifecycle.py` is the sole owner of approval occurrence registration, trusted aliases, authority
41
41
  validation, claims, terminal outcomes, and retry deduplication. Runner code normalizes AG-UI protocol values and
42
42
  projects lifecycle outcomes but must not maintain a parallel pending-approval registry.
43
+ - Local tool-approval interrupt ids use the Agent Framework `function_call.id` occurrence identity; `toolCallId`
44
+ remains the provider/service `call_id`. Hosted approvals preserve the provider-issued approval request id. The
45
+ lifecycle stores these identities separately so resume responses carry the authoritative approval occurrence id
46
+ without rewriting tool-result correlation ids.
43
47
  - Default stateless conversation history is client-controlled, including historical tool calls and results. Never
44
48
  document conversational tool results as authorization or policy evidence; use deterministic server-side checks,
45
49
  server-validated approvals, or scoped authoritative snapshots.
50
+ - AG-UI Thread and Run ids are client-owned protocol correlation ids. Service-session mode stores provider conversation
51
+ or response ids privately in the thread snapshot. Set `service_session_id_from_thread_id=True` only for compatibility
52
+ when the application intentionally uses a provider continuation id as its AG-UI Thread id.
46
53
  - `confirm_changes` snapshot cleanup resolves the synthetic confirmation back to its original `function_call_id`;
47
54
  it must never concatenate unrelated tool results or record accepted changes without a matching real result.
48
55
  - SSE keepalive is endpoint-owned transport behavior configured through
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-framework-ag-ui
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: AG-UI protocol integration for Agent Framework
5
5
  Project-URL: homepage, https://aka.ms/agent-framework
6
6
  Project-URL: source, https://github.com/microsoft/agent-framework/tree/main/python
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Requires-Dist: ag-ui-protocol<0.2,>=0.1.19
22
- Requires-Dist: agent-framework-core<2,>=1.15.0
22
+ Requires-Dist: agent-framework-core<2,>=1.17.0
23
23
  Requires-Dist: fastapi<0.140.0,>=0.121.0
24
24
  Requires-Dist: httpx<1,>=0.28.1
25
25
  Requires-Dist: sse-starlette<4,>=3.4.5
@@ -351,6 +351,15 @@ class A2UIAgent:
351
351
  def context_providers(self) -> Any:
352
352
  return getattr(self.inner_agent, "context_providers", [])
353
353
 
354
+ @property
355
+ def service_session_state_keys(self) -> Any:
356
+ return getattr(self.inner_agent, "service_session_state_keys", ())
357
+
358
+ def __getattr__(self, name: str) -> Any:
359
+ if name == "create_conversation":
360
+ return getattr(self.inner_agent, name)
361
+ raise AttributeError(name)
362
+
354
363
  # -- public run -------------------------------------------------------
355
364
 
356
365
  def run(self, messages: Any = None, *, stream: bool = False, **kwargs: Any) -> Any:
@@ -26,6 +26,7 @@ class AgentConfig:
26
26
  require_confirmation: bool = True,
27
27
  snapshot_store: AGUIThreadSnapshotStore | None = None,
28
28
  a2ui_config: dict[str, Any] | None = None,
29
+ service_session_id_from_thread_id: bool = False,
29
30
  ):
30
31
  """Initialize agent configuration.
31
32
 
@@ -33,6 +34,8 @@ class AgentConfig:
33
34
  state_schema: Optional state schema for state management; accepts dict or Pydantic model/class
34
35
  predict_state_config: Configuration for predictive state updates
35
36
  use_service_session: Whether the agent session is service-managed
37
+ service_session_id_from_thread_id: Compatibility option that treats the
38
+ client-owned AG-UI Thread id as the provider service-session id.
36
39
  require_confirmation: When True (default), emit a ``confirm_changes`` tool call for
37
40
  approval-gated tools so a human-in-the-loop frontend can prompt for approval, and require
38
41
  confirmation for predictive state updates. When False, no ``confirm_changes`` call is
@@ -46,6 +49,7 @@ class AgentConfig:
46
49
  self.state_schema = self._normalize_state_schema(state_schema)
47
50
  self.predict_state_config = predict_state_config or {}
48
51
  self.use_service_session = use_service_session
52
+ self.service_session_id_from_thread_id = service_session_id_from_thread_id
49
53
  self.require_confirmation = require_confirmation
50
54
  self.snapshot_store = snapshot_store
51
55
  self.a2ui_config = a2ui_config
@@ -96,6 +100,7 @@ class AgentFrameworkAgent:
96
100
  use_service_session: bool = False,
97
101
  snapshot_store: AGUIThreadSnapshotStore | None = None,
98
102
  a2ui_config: dict[str, Any] | None = None,
103
+ service_session_id_from_thread_id: bool = False,
99
104
  ):
100
105
  """Initialize the AG-UI compatible agent wrapper.
101
106
 
@@ -110,6 +115,8 @@ class AgentFrameworkAgent:
110
115
  confirmation for predictive state updates. When False, no ``confirm_changes`` call is
111
116
  emitted; tools remain gated server-side.
112
117
  use_service_session: Whether the agent session is service-managed
118
+ service_session_id_from_thread_id: Compatibility option that treats the
119
+ client-owned AG-UI Thread id as the provider service-session id.
113
120
  snapshot_store: Optional AG-UI Thread Snapshot store. Snapshot persistence remains inactive unless
114
121
  endpoint setup also provides an explicit Snapshot Scope resolver.
115
122
  a2ui_config: Optional backend A2UI config consumed by auto-injection.
@@ -122,6 +129,7 @@ class AgentFrameworkAgent:
122
129
  state_schema=state_schema,
123
130
  predict_state_config=predict_state_config,
124
131
  use_service_session=use_service_session,
132
+ service_session_id_from_thread_id=service_session_id_from_thread_id,
125
133
  require_confirmation=require_confirmation,
126
134
  snapshot_store=snapshot_store,
127
135
  a2ui_config=a2ui_config,