macp-sdk-python 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl

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.
@@ -53,6 +53,12 @@ class GrpcTransportAdapter:
53
53
  """Open a stream and yield messages for the target session."""
54
54
  self._stream = self._client.open_stream(auth=self._auth, timeout=self._timeout)
55
55
  try:
56
+ # RFC-MACP-0006-A1: Subscribe to the session with history replay.
57
+ # The runtime replays accepted envelopes then switches to live
58
+ # broadcast, ensuring non-initiator agents receive SessionStart +
59
+ # Proposal regardless of spawn order or connection timing.
60
+ self._stream.send_subscribe(self._session_id)
61
+
56
62
  for envelope in self._stream.responses():
57
63
  if self._stopped:
58
64
  break
macp_sdk/client.py CHANGED
@@ -101,8 +101,12 @@ class MacpStream:
101
101
  item = self._requests.get()
102
102
  if item is self._END:
103
103
  return
104
- assert isinstance(item, envelope_pb2.Envelope)
105
- yield core_pb2.StreamSessionRequest(envelope=item)
104
+ # RFC-MACP-0006-A1: support both envelope sends and subscribe frames
105
+ if isinstance(item, core_pb2.StreamSessionRequest):
106
+ yield item
107
+ else:
108
+ assert isinstance(item, envelope_pb2.Envelope)
109
+ yield core_pb2.StreamSessionRequest(envelope=item)
106
110
 
107
111
  def _pump_responses(self) -> None:
108
112
  try:
@@ -147,6 +151,19 @@ class MacpStream:
147
151
  raise MacpSdkError("stream is already closed")
148
152
  self._requests.put(envelope)
149
153
 
154
+ def send_subscribe(self, session_id: str, after_sequence: int = 0) -> None:
155
+ """RFC-MACP-0006-A1: Send a subscribe-only frame to receive session
156
+ history + live broadcast. The runtime replays accepted envelopes from
157
+ ``after_sequence`` onwards, then continues with live broadcast.
158
+ """
159
+ if self._closed:
160
+ raise MacpSdkError("stream is already closed")
161
+ req = core_pb2.StreamSessionRequest(
162
+ subscribe_session_id=session_id,
163
+ after_sequence=after_sequence,
164
+ )
165
+ self._requests.put(req)
166
+
150
167
  def read(self, timeout: float | None = None) -> envelope_pb2.Envelope | None:
151
168
  item = self._responses.get(timeout=timeout)
152
169
  if item is self._END:
@@ -190,7 +207,7 @@ class MacpClient:
190
207
  root_certificates: bytes | None = None,
191
208
  default_timeout: float | None = None,
192
209
  client_name: str = "macp-sdk-python",
193
- client_version: str = "0.2.2",
210
+ client_version: str = "0.2.3",
194
211
  ) -> None:
195
212
  if secure is None:
196
213
  secure = not allow_insecure
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: macp-sdk-python
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Python SDK for the MACP Rust runtime
5
5
  Author-email: OpenAI <support@openai.com>
6
6
  License: Apache-2.0
@@ -17,7 +17,7 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: grpcio>=1.74.0
19
19
  Requires-Dist: protobuf>=5.27.0
20
- Requires-Dist: macp-proto<0.2.0,>=0.1.1
20
+ Requires-Dist: macp-proto<0.2.0,>=0.1.2
21
21
  Provides-Extra: dev
22
22
  Requires-Dist: grpcio-tools>=1.74.0; extra == "dev"
23
23
  Requires-Dist: pytest>=8.0; extra == "dev"
@@ -161,5 +161,5 @@ Business logic — voting rules, AI decision heuristics, policy enforcement —
161
161
  ## Known runtime limitations
162
162
 
163
163
  - `GetSession` returns metadata only (not mode state/transcript) — hence the local projection pattern
164
- - `StreamSession` has no late-attach handshake for already-running sessions
164
+ - `StreamSession` is scoped to one session per stream; use `MacpStream.send_subscribe(session_id)` (RFC-MACP-0006-A1, since SDK 0.2.3 / `macp-proto 0.1.2`) to replay accepted history before live broadcast
165
165
  - Business policy (majority, quorum, veto) belongs in your orchestrator/policy layer
@@ -3,7 +3,7 @@ macp_sdk/_logging.py,sha256=pHxyG89c9b_r8mcVSBA4E3e1GMAI5Jcc4_jslzKO6fM,431
3
3
  macp_sdk/auth.py,sha256=OnoLYjQTsHvj1nBMyIlcGtD-IoQy92RPXqSBKnY8ydA,2792
4
4
  macp_sdk/base_projection.py,sha256=j4mZmb2tua787qaK476xTY0o9MerjzCpT6SE1rTU8Ug,1708
5
5
  macp_sdk/base_session.py,sha256=EmaWmGboFvnJnvZMKXc0A3B0XUXZZVe5kMwuBtIV_P4,5962
6
- macp_sdk/client.py,sha256=SJbwDyl-2qfzAUdNENUm75Dxdm2G4_f-SrZKX5i87UA,23477
6
+ macp_sdk/client.py,sha256=MxECtzTHSGkyvIKFik8MGcXtsHnLpzTb7lEX84fKaF4,24253
7
7
  macp_sdk/constants.py,sha256=7BaQC6qycmPEc1ChOQVDxlhEBsBdI-RQBT07BQ2Uiis,481
8
8
  macp_sdk/decision.py,sha256=pjsz-KTuVw9wcDu3-ube_W6A_5pdRpV2wtupf0JgfO8,5265
9
9
  macp_sdk/envelope.py,sha256=1sdDZPcmUcaHzgCCfZ6PcYryaf2zeNmvggy6KBDGcco,4987
@@ -24,10 +24,10 @@ macp_sdk/agent/dispatcher.py,sha256=t1wLYGpqJdm2nIaaEVStp_8zUIetHL8FT2wYNniLDTA,
24
24
  macp_sdk/agent/participant.py,sha256=yzpxK3gmetmmh3IyfomeHokVR-6szbJdmzt2ogpm00I,15509
25
25
  macp_sdk/agent/runner.py,sha256=dGvx4B2SlAsO-cqtVU8rQCPqzVxbxxsJ2Uf3ww4a5vI,5084
26
26
  macp_sdk/agent/strategies.py,sha256=oCUeTE3fhDJu96OBA_BWei7E1GbAaWvmJlgmhhRTUUo,10489
27
- macp_sdk/agent/transports.py,sha256=VU3dTNIELMTU-5kTxZOE7jxvw1NqSroUi28OkUD0NvM,5430
27
+ macp_sdk/agent/transports.py,sha256=pccAavDPGADg8hsc7SIce3dRTsl6w7z1WrdsBHxpMpc,5791
28
28
  macp_sdk/agent/types.py,sha256=wtlF-tTRGnEGHhYknhu-5ZzOBZ1pRQ5GjYLKBR4YzQg,1610
29
- macp_sdk_python-0.2.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
- macp_sdk_python-0.2.2.dist-info/METADATA,sha256=q60i3JhbmxWK5Ne9O88Yqpvqm42A-Fv-gxt6r0aMHmI,5434
31
- macp_sdk_python-0.2.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
32
- macp_sdk_python-0.2.2.dist-info/top_level.txt,sha256=AoSstnUrSaVCCQw4KLxLkpO-9BLoVZ230mPBR6z-jh8,9
33
- macp_sdk_python-0.2.2.dist-info/RECORD,,
29
+ macp_sdk_python-0.2.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
+ macp_sdk_python-0.2.3.dist-info/METADATA,sha256=S471TbCdrv2jkgIEmUZkqnWswD1Dk1Y5IeYjcxeK8sM,5563
31
+ macp_sdk_python-0.2.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
32
+ macp_sdk_python-0.2.3.dist-info/top_level.txt,sha256=AoSstnUrSaVCCQw4KLxLkpO-9BLoVZ230mPBR6z-jh8,9
33
+ macp_sdk_python-0.2.3.dist-info/RECORD,,