ms-tau-sdk 2.0.16.dev65__tar.gz → 2.0.17.dev66__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 (87) hide show
  1. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/CHANGELOG.md +12 -0
  2. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/PKG-INFO +1 -1
  3. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/pyproject.toml +1 -1
  4. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +1 -1
  5. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +1 -3
  6. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/assertions.py +9 -54
  7. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/team_memberships.py +0 -19
  8. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/manager.py +4 -21
  9. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/requester.py +3 -22
  10. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/.gitignore +0 -0
  11. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/README.md +0 -0
  12. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  13. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  14. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  15. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  16. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  17. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  18. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  19. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  20. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  21. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  22. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  23. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  24. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  25. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/__init__.py +0 -0
  26. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  27. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  28. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  29. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/__init__.py +0 -0
  30. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/a2a.py +0 -0
  31. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/chat.py +0 -0
  32. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/conversations.py +0 -0
  33. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/dependencies.py +0 -0
  34. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/health.py +0 -0
  35. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/inspection.py +0 -0
  36. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/local_chat.py +0 -0
  37. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/models.py +0 -0
  38. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/request_identity.py +0 -0
  39. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/api/sessions.py +0 -0
  40. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/app.py +0 -0
  41. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/application.py +0 -0
  42. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/__init__.py +0 -0
  43. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/auth.py +0 -0
  44. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/client.py +0 -0
  45. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/local.py +0 -0
  46. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/mcp.py +0 -0
  47. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/models.py +0 -0
  48. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/backend/routes.py +0 -0
  49. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/cli.py +0 -0
  50. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/errors.py +0 -0
  51. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/logging.py +0 -0
  52. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  53. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  54. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  55. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  56. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  57. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
  58. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  59. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/providers/__init__.py +0 -0
  60. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/providers/definitions.py +0 -0
  61. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/providers/factory.py +0 -0
  62. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
  63. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  64. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/resources/__init__.py +0 -0
  65. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/resources/loader.py +0 -0
  66. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  67. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  68. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  69. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/events.py +0 -0
  70. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  71. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/failures.py +0 -0
  72. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
  73. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/observability.py +0 -0
  74. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  75. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/session.py +0 -0
  76. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  77. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  78. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  79. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/sessions/storage.py +0 -0
  80. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/settings.py +0 -0
  81. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/skills.py +0 -0
  82. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/__init__.py +0 -0
  83. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  84. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
  85. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
  86. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/skill_read.py +0 -0
  87. {ms_tau_sdk-2.0.16.dev65 → ms_tau_sdk-2.0.17.dev66}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ - **`team_uids` is removed; the verifier refuses caller assertions that list teams
6
+ ([#103](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/103), ADR 0019).** The platform no
7
+ longer signs a team list in the caller assertion, so the runtime drops it. `in_teams()` is the
8
+ only membership check, and it is unchanged.
9
+ - `VerifiedCaller` and `Requester` have no `team_uids` and no `signed_team_uids`.
10
+ `VerifiedCaller(uid, is_organization_admin=False)` and `Requester(uid)` are their constructors.
11
+ - A caller assertion that carries `team_uids`, an empty or `null` list included, is refused with
12
+ 401.
13
+ - A runtime on this release refuses every caller of a platform that still signs team lists.
14
+
3
15
  ## 2.0.16 — 2026-10-15
4
16
 
5
17
  - **The Tau skills say when and how a tool checks the person's teams
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 2.0.16.dev65
3
+ Version: 2.0.17.dev66
4
4
  Summary: Workspace-bound Tau application primitives for Main Sequence projects
5
5
  Project-URL: Changelog, https://github.com/mainsequence-sdk/ms-tau-sdk/blob/development/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/mainsequence-sdk/ms-tau-sdk/tree/development/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ms-tau-sdk"
7
- version = "2.0.16.dev65"
7
+ version = "2.0.17.dev66"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -161,7 +161,7 @@ async def revenue_by_region(tool_call_id, arguments, signal=None, on_update=None
161
161
  - `current_requester()` returns the person the turn serves, with `uid` and
162
162
  `await in_teams(team_uids, *, max_age_seconds=None)`, or `None`. `in_teams()` answers while the
163
163
  person is the verified caller of the turn's request (see `tau_security_and_access`, "Checking the
164
- person's teams"); `team_uids` is deprecated. The platform names that person when the turn
164
+ person's teams"); the person carries no team list. The platform names that person when the turn
165
165
  starts, whoever called; it is `None` when the platform names nobody, in local mode, and in code
166
166
  outside a turn. Only it names the requester: never take a person's UID from tool arguments, the
167
167
  prompt, history, or a header.
@@ -230,9 +230,7 @@ if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM
230
230
  `0`: only within its request); set it in `harness_agent.spec.env_vars`. `max_age_seconds=0`
231
231
  always asks the platform: use it before a write that must see a removal at once.
232
232
  - A check the platform cannot answer raises `BackendError`; it never answers "not a member".
233
- - `team_uids` on the requester is deprecated and warns when read. It is empty when the turn does
234
- not know the person's teams, and raises when the caller's assertion carried no team list, as
235
- every assertion will once the platform stops signing them. Use `in_teams()`.
233
+ - The requester carries no team list; `in_teams()` is the only membership check.
236
234
 
237
235
  ## What never reaches the model
238
236
 
@@ -5,8 +5,8 @@ The platform signs two kinds of short-lived JWS with one Ed25519 key set and sen
5
5
 
6
6
  - a caller assertion, for a request a person or a workload sends to the runtime through the
7
7
  platform. It names the caller (``sub``) and whether the caller administers the Organization
8
- (``is_organization_admin``). While the platform still signs it, it also carries the caller's
9
- teams (``team_uids``), which is deprecated: ``in_teams()`` asks the platform instead (#103);
8
+ (``is_organization_admin``), and no teams: ``in_teams()`` asks the platform (#103), and an
9
+ assertion that lists teams is refused;
10
10
  - a platform assertion, for the platform's own background calls. It names no caller.
11
11
 
12
12
  Both are bound to this runtime's release (``aud``, ``resource_release_uid``) and Organization
@@ -33,7 +33,7 @@ import httpx
33
33
  import jwt
34
34
  from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
35
35
 
36
- from ms_tau_sdk.backend.team_memberships import deprecated_team_uids, member_team_uids
36
+ from ms_tau_sdk.backend.team_memberships import member_team_uids
37
37
  from ms_tau_sdk.errors import ConfigurationError
38
38
  from ms_tau_sdk.settings import (
39
39
  CALLER_ASSERTION_ISSUER_ENV,
@@ -83,40 +83,15 @@ class AssertionKeysUnavailableError(Exception):
83
83
  """The platform's verification keys could not be obtained."""
84
84
 
85
85
 
86
- @dataclass(frozen=True, slots=True, init=False)
86
+ @dataclass(frozen=True, slots=True)
87
87
  class VerifiedCaller:
88
88
  """The caller that a verified caller assertion names.
89
89
 
90
- ``in_teams()`` asks the platform which teams the caller belongs to. ``team_uids`` is the
91
- deprecated list earlier assertions carried; ``signed_team_uids`` is None when the assertion
92
- carried none (#103).
90
+ ``in_teams()`` asks the platform which teams the caller belongs to (#103).
93
91
  """
94
92
 
95
93
  uid: str
96
- is_organization_admin: bool
97
- signed_team_uids: tuple[str, ...] | None
98
-
99
- def __init__(
100
- self,
101
- uid: str,
102
- team_uids: tuple[str, ...] | None = None,
103
- is_organization_admin: bool = False,
104
- ) -> None:
105
- object.__setattr__(self, "uid", uid)
106
- object.__setattr__(self, "is_organization_admin", is_organization_admin)
107
- object.__setattr__(
108
- self, "signed_team_uids", None if team_uids is None else tuple(team_uids)
109
- )
110
-
111
- @property
112
- def team_uids(self) -> tuple[str, ...]:
113
- """Deprecated: the team UIDs the caller's assertion carried. Use ``in_teams()``.
114
-
115
- Warns when read, and raises ``TauSDKError`` when the assertion carried no team list; it
116
- never answers an empty list for that.
117
- """
118
-
119
- return deprecated_team_uids(self.signed_team_uids)
94
+ is_organization_admin: bool = False
120
95
 
121
96
  async def in_teams(
122
97
  self,
@@ -253,28 +228,10 @@ def _fresh_until(cache_control: str | None, now: float) -> float | None:
253
228
 
254
229
  def _verified_caller(payload: Mapping[str, Any]) -> VerifiedCaller:
255
230
  uid = payload["sub"]
256
- # The deprecated team list, checked while the platform still signs it (#103).
257
- team_uids = payload.get("team_uids")
258
231
  is_organization_admin = payload["is_organization_admin"]
259
- if (
260
- not _is_canonical_uid(uid)
261
- or (
262
- team_uids is not None
263
- and (
264
- not isinstance(team_uids, list)
265
- or not all(_is_canonical_uid(team_uid) for team_uid in team_uids)
266
- or team_uids != sorted(set(team_uids))
267
- )
268
- )
269
- or ("team_uids" in payload and team_uids is None)
270
- or type(is_organization_admin) is not bool
271
- ):
232
+ if not _is_canonical_uid(uid) or type(is_organization_admin) is not bool:
272
233
  raise InvalidAssertionError("The caller assertion does not name a valid caller")
273
- return VerifiedCaller(
274
- uid=uid,
275
- team_uids=None if team_uids is None else tuple(team_uids),
276
- is_organization_admin=is_organization_admin,
277
- )
234
+ return VerifiedCaller(uid=uid, is_organization_admin=is_organization_admin)
278
235
 
279
236
 
280
237
  class AssertionVerifier:
@@ -382,9 +339,7 @@ class AssertionVerifier:
382
339
  )
383
340
  except (jwt.PyJWTError, TypeError, ValueError) as error:
384
341
  raise InvalidAssertionError(f"The {kind} assertion did not verify") from error
385
- # A caller assertion may still carry the deprecated team list (#103).
386
- optional = {"team_uids"} if kind == "caller" else set()
387
- if set(payload) - optional != claims:
342
+ if set(payload) != claims:
388
343
  raise InvalidAssertionError(f"The {kind} assertion does not have the exact claim set")
389
344
  if (
390
345
  payload["iss"] != self.issuer
@@ -12,7 +12,6 @@ import math
12
12
  import threading
13
13
  import time
14
14
  import uuid
15
- import warnings
16
15
  from collections import OrderedDict
17
16
  from collections.abc import Iterable
18
17
  from contextvars import ContextVar, Token
@@ -209,21 +208,3 @@ async def _platform_members(
209
208
  if scope.client is None:
210
209
  raise TauSDKError("in_teams() needs the Agent runtime of this process")
211
210
  return await scope.client.team_memberships(person_uid, team_uids, caller_assertion=token)
212
-
213
-
214
- def deprecated_team_uids(signed: tuple[str, ...] | None) -> tuple[str, ...]:
215
- """Return the deprecated team list a caller assertion carried, with a warning.
216
-
217
- It raises when the assertion carried none; it never answers an empty list for that.
218
- """
219
-
220
- warnings.warn(
221
- "team_uids is deprecated; check membership with in_teams() instead",
222
- DeprecationWarning,
223
- stacklevel=3,
224
- )
225
- if signed is None:
226
- raise TauSDKError(
227
- "The caller assertion carries no team list; check membership with in_teams()"
228
- )
229
- return signed
@@ -30,7 +30,7 @@ from tau_agent.types import JSONValue
30
30
  from tau_coding import CodingSession, CodingSessionConfig
31
31
  from tau_coding.tools import create_coding_tools
32
32
 
33
- from ms_tau_sdk.backend.assertions import CallerAssertion, VerifiedCaller
33
+ from ms_tau_sdk.backend.assertions import CallerAssertion
34
34
  from ms_tau_sdk.backend.client import LeaseProof, MainSequenceClient
35
35
  from ms_tau_sdk.backend.mcp import MainSequenceMCPClient
36
36
  from ms_tau_sdk.backend.models import (
@@ -1573,16 +1573,7 @@ class SessionRuntimeManager:
1573
1573
  )
1574
1574
  requester_binding = TurnRequesterBinding(
1575
1575
  session_uid=session_uid,
1576
- requester=self._turn_requester(
1577
- runtime,
1578
- caller=(
1579
- presented.caller
1580
- if presented is not None
1581
- else task_context.caller
1582
- if task_context is not None
1583
- else None
1584
- ),
1585
- ),
1576
+ requester=self._turn_requester(runtime),
1586
1577
  lease_proof=lambda: LeaseProof(
1587
1578
  session_uid=session_uid,
1588
1579
  holder_id=self.holder_id,
@@ -1765,18 +1756,11 @@ class SessionRuntimeManager:
1765
1756
 
1766
1757
  return not self.settings.local_mode and self.settings.request_identity_mode == "assertion"
1767
1758
 
1768
- def _turn_requester(
1769
- self,
1770
- runtime: ActiveSessionRuntime,
1771
- *,
1772
- caller: VerifiedCaller | None,
1773
- ) -> Requester | None:
1759
+ def _turn_requester(self, runtime: ActiveSessionRuntime) -> Requester | None:
1774
1760
  """Name the person a turn serves, or None.
1775
1761
 
1776
1762
  The platform's answer to the turn start names that person, whoever called: a chat or A2A
1777
1763
  Message turn, a Task attempt, and a turn the platform starts for a caller delivery alike.
1778
- ``caller`` is the verified caller of the request, when there is one; it supplies the
1779
- deprecated team list its assertion carried only when it is that person.
1780
1764
  """
1781
1765
 
1782
1766
  if not self._requester_identity_verified():
@@ -1784,8 +1768,7 @@ class SessionRuntimeManager:
1784
1768
  uid = runtime.requester_user_uid
1785
1769
  if uid is None:
1786
1770
  return None
1787
- team_uids = caller.signed_team_uids if caller is not None and caller.uid == uid else ()
1788
- return Requester(uid=uid, team_uids=team_uids)
1771
+ return Requester(uid=uid)
1789
1772
 
1790
1773
  def _requester_http(self) -> httpx.AsyncClient:
1791
1774
  """The client for calls to platform applications, made when first used."""
@@ -31,7 +31,7 @@ import structlog
31
31
  from ms_tau_sdk.backend.auth import AccessToken, _jwt_expiry
32
32
  from ms_tau_sdk.backend.client import LeaseProof, answer_without_request_credentials
33
33
  from ms_tau_sdk.backend.models import ReleaseRuntimeAccess
34
- from ms_tau_sdk.backend.team_memberships import deprecated_team_uids, member_team_uids
34
+ from ms_tau_sdk.backend.team_memberships import member_team_uids
35
35
  from ms_tau_sdk.errors import (
36
36
  ApplicationReadinessTimeoutError,
37
37
  ApplicationWakingError,
@@ -52,34 +52,15 @@ type Delegation = Literal["auto", "none", "required"]
52
52
  _DELEGATIONS: tuple[Delegation, ...] = ("auto", "none", "required")
53
53
 
54
54
 
55
- @dataclass(frozen=True, slots=True, init=False)
55
+ @dataclass(frozen=True, slots=True)
56
56
  class Requester:
57
57
  """The verified person whose request the current turn serves.
58
58
 
59
59
  ``in_teams()`` asks the platform which teams the person belongs to while the person is the
60
- verified caller of the request the turn runs in, and raises otherwise. ``team_uids`` is the
61
- deprecated list the caller's assertion carried: empty when the turn does not know the person's
62
- teams, and ``signed_team_uids`` is None when the assertion carried no list (#103).
60
+ verified caller of the request the turn runs in, and raises otherwise (#103).
63
61
  """
64
62
 
65
63
  uid: str
66
- signed_team_uids: tuple[str, ...] | None
67
-
68
- def __init__(self, uid: str, team_uids: tuple[str, ...] | None = ()) -> None:
69
- object.__setattr__(self, "uid", uid)
70
- object.__setattr__(
71
- self, "signed_team_uids", None if team_uids is None else tuple(team_uids)
72
- )
73
-
74
- @property
75
- def team_uids(self) -> tuple[str, ...]:
76
- """Deprecated: the team UIDs the caller's assertion carried. Use ``in_teams()``.
77
-
78
- Warns when read, and raises ``TauSDKError`` when the assertion carried no team list; it
79
- never answers an empty list for that.
80
- """
81
-
82
- return deprecated_team_uids(self.signed_team_uids)
83
64
 
84
65
  async def in_teams(
85
66
  self,