ms-tau-sdk 2.0.15.dev63__tar.gz → 2.0.16.dev65__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.15.dev63 → ms_tau_sdk-2.0.16.dev65}/CHANGELOG.md +9 -0
  2. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/PKG-INFO +1 -1
  3. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/pyproject.toml +1 -1
  4. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +5 -4
  5. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +27 -0
  6. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/.gitignore +0 -0
  7. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/README.md +0 -0
  8. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  9. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  10. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  11. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  12. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  13. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  14. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  15. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  16. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  17. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  18. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  19. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  20. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  21. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/__init__.py +0 -0
  22. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  23. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  24. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  25. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/__init__.py +0 -0
  26. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/a2a.py +0 -0
  27. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/chat.py +0 -0
  28. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/conversations.py +0 -0
  29. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/dependencies.py +0 -0
  30. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/health.py +0 -0
  31. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/inspection.py +0 -0
  32. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/local_chat.py +0 -0
  33. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/models.py +0 -0
  34. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/request_identity.py +0 -0
  35. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/api/sessions.py +0 -0
  36. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/app.py +0 -0
  37. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/application.py +0 -0
  38. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/__init__.py +0 -0
  39. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/assertions.py +0 -0
  40. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/auth.py +0 -0
  41. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/client.py +0 -0
  42. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/local.py +0 -0
  43. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/mcp.py +0 -0
  44. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/models.py +0 -0
  45. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/routes.py +0 -0
  46. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/backend/team_memberships.py +0 -0
  47. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/cli.py +0 -0
  48. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/errors.py +0 -0
  49. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/logging.py +0 -0
  50. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  51. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  52. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  53. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  54. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  55. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
  56. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  57. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/providers/__init__.py +0 -0
  58. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/providers/definitions.py +0 -0
  59. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/providers/factory.py +0 -0
  60. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
  61. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  62. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/resources/__init__.py +0 -0
  63. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/resources/loader.py +0 -0
  64. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  65. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  66. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  67. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/events.py +0 -0
  68. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  69. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/failures.py +0 -0
  70. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
  71. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/manager.py +0 -0
  72. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/observability.py +0 -0
  73. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  74. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/requester.py +0 -0
  75. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/session.py +0 -0
  76. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  77. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  78. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  79. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/sessions/storage.py +0 -0
  80. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/settings.py +0 -0
  81. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/skills.py +0 -0
  82. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/__init__.py +0 -0
  83. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  84. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
  85. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
  86. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/skill_read.py +0 -0
  87. {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev65}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.16 — 2026-10-15
4
+
5
+ - **The Tau skills say when and how a tool checks the person's teams
6
+ ([#103](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/103)).** `tau_security_and_access`
7
+ has a section "Checking the person's teams". A delegated call already reaches what the person's
8
+ teams share, so a tool rarely checks teams itself; a tool whose own policy names teams asks with
9
+ `in_teams()`. That answers only while the person is the request's verified caller, and an error
10
+ is never a membership answer. `tau_project_customization` points to the section.
11
+
3
12
  ## 2.0.15 — 2026-10-15
4
13
 
5
14
  - **Team membership on demand; the caller assertion's team list is deprecated
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 2.0.15.dev63
3
+ Version: 2.0.16.dev65
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.15.dev63"
7
+ version = "2.0.16.dev65"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -160,10 +160,11 @@ async def revenue_by_region(tool_call_id, arguments, signal=None, on_update=None
160
160
 
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
- person is the verified caller of the turn's request; `team_uids` is deprecated. The platform
164
- names that person when the turn starts, whoever called; it is `None` when the platform names
165
- nobody, in local mode, and in code outside a turn. Only it names the requester: never take a
166
- person's UID from tool arguments, the prompt, history, or a header.
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
165
+ starts, whoever called; it is `None` when the platform names nobody, in local mode, and in code
166
+ outside a turn. Only it names the requester: never take a person's UID from tool arguments, the
167
+ prompt, history, or a header.
167
168
  - `platform_client()` returns a client. `await client.request("GET", "/api/v1/...")` calls a
168
169
  platform API path, and `await client.call_release(release_uid, method, path, ...)` calls another
169
170
  platform application. Both return an `httpx.Response`.
@@ -207,6 +207,33 @@ How sharing works:
207
207
  tool can use them when its design needs to, for example to refuse a team key where it expects a
208
208
  personal one. That is a choice of the tool, not a platform rule.
209
209
 
210
+ ## Checking the person's teams
211
+
212
+ A delegated call already reaches exactly what the person can, including what is shared with their
213
+ teams, so a tool rarely checks teams itself. When the tool's own policy names teams, ask the
214
+ platform with `in_teams()`:
215
+
216
+ ```python
217
+ person = current_requester()
218
+ if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM_UID]):
219
+ return AgentToolResult(content=[TextContent(text="These reports are for the team's members.")])
220
+ ```
221
+
222
+ - `await in_teams(team_uids, *, max_age_seconds=None)` returns the subset of `team_uids` the
223
+ person is an active member of, as a `frozenset`. Unknown and inactive teams are left out.
224
+ - On the turn's requester it answers only while that person is the verified caller of the request
225
+ the turn runs in, such as a chat or A2A Message they sent. A turn with no such request raises
226
+ `TauSDKError`: a Task attempt the platform dispatches, a turn that resumes a caller delivery, or
227
+ work another Agent asked for. Refuse the action then; never read the error as a membership
228
+ answer. An HTTP handler asks for its caller with `await request.state.user.in_teams(...)`.
229
+ - The process reuses an answer across requests for `TAU_TEAM_MEMBERSHIP_CACHE_SECONDS` (default
230
+ `0`: only within its request); set it in `harness_agent.spec.env_vars`. `max_age_seconds=0`
231
+ always asks the platform: use it before a write that must see a removal at once.
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()`.
236
+
210
237
  ## What never reaches the model
211
238
 
212
239
  Tool results, their `details`, and errors can reach the model provider and the session history.