ms-tau-sdk 2.0.17.dev66__tar.gz → 2.0.18.dev68__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.
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/CHANGELOG.md +70 -1
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/PKG-INFO +1 -1
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/pyproject.toml +1 -1
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +1 -1
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +80 -21
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/.gitignore +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/README.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/app.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/config.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/state.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/a2a.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/chat.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/conversations.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/dependencies.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/health.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/inspection.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/local_chat.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/models.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/request_identity.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/api/sessions.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/app.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/application.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/assertions.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/auth.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/client.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/local.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/mcp.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/models.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/routes.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/team_memberships.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/cli.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/errors.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/logging.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/providers/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/providers/definitions.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/providers/factory.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/resources/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/resources/loader.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/events.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/extensions.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/failures.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/manager.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/observability.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/provenance.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/requester.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/session.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/task_context.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/sessions/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/sessions/storage.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/settings.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/skills.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/__init__.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/skill_read.py +0 -0
- {ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/task_control.py +0 -0
|
@@ -1,6 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 2.0.18 — 2026-10-18
|
|
4
|
+
|
|
5
|
+
- **The Security and access guide and the Tau security skill describe Agent policies.** The
|
|
6
|
+
platform now decides Agents, and the releases they run on, by the policies on them. The
|
|
7
|
+
[guide](docs/reference/security-model.md#agent-policies) said that sharing an Agent lets another
|
|
8
|
+
person use it, that everyone who can view an Agent reads all its Tasks, that an Agent editor stops
|
|
9
|
+
conversations and cancels Tasks, and that calling another application needs view of it. It now
|
|
10
|
+
says that `user` talks to the Agent and gives it Tasks, seeing only the Tasks they asked for,
|
|
11
|
+
`viewer` also sees every Task, `operator` also stops other people's work, `editor` also
|
|
12
|
+
configures it, moves it to a new runtime build, deletes it and manages its workload, and `owner`
|
|
13
|
+
also decides who has access; that no policy opens another person's conversation; that whoever
|
|
14
|
+
creates an Agent holds `owner`, Organization admins hold every action, and owners give policies
|
|
15
|
+
through `/api/v1/agents/<uid>/access/`; that the Agent's release follows the Agent and takes no
|
|
16
|
+
policy of its own; that a workload sends an Agent work with its own policy, declared under
|
|
17
|
+
`access.agents`, and a delegation reaches only Agents the person holds a policy on; and that
|
|
18
|
+
`call_release()` needs a policy on the application's release that includes
|
|
19
|
+
`resource-releases.invoke`. `tau_security_and_access` gains an Agents section, the public API
|
|
20
|
+
reference links `call_release()` to that rule, and troubleshooting and the quickstart no longer
|
|
21
|
+
speak of sharing an Agent. Existing shares are kept. No SDK code changes.
|
|
22
|
+
- **The Security and access guide and the provider guide show workflow API `3.0.0`.** The
|
|
23
|
+
platform's workflow API `3.0.0` replaces `2.3.0`: an `access` entry names the policy its workload
|
|
24
|
+
gets (`policy:`) instead of `level: view` or `level: edit`, and a workflow file of any other
|
|
25
|
+
version is refused before anything of it is applied, so a project switches its
|
|
26
|
+
`.mainsequence/workflows` files to `3.0.0` before its next push. The
|
|
27
|
+
[Security and access guide](docs/reference/security-model.md#secrets) and
|
|
28
|
+
[Named providers and sharing](docs/guides/project-configuration.md#named-providers-and-sharing)
|
|
29
|
+
said that `access.secrets` and `access.model_providers` give a policy for a level. They now say
|
|
30
|
+
that the entry names the policy, such as `policy: value_reader` for a Secret's current value or
|
|
31
|
+
`policy: user` for a provider, and requester access is declared in a `3.0.0` file. No SDK code
|
|
32
|
+
changes.
|
|
33
|
+
- **The provider guide, the Security and access guide and the Tau security skill describe
|
|
34
|
+
model-provider policies.** The platform now decides model-provider credentials and custom
|
|
35
|
+
endpoints by the policies on them.
|
|
36
|
+
[Named providers and sharing](docs/guides/project-configuration.md#named-providers-and-sharing)
|
|
37
|
+
said that people share a configured provider and that Organization admins need no share. It now
|
|
38
|
+
says that on a credential `user` selects and receives it, including in local Tau, `editor` also
|
|
39
|
+
refreshes, reconnects and revokes it and sees who has access, and `owner` also decides who has
|
|
40
|
+
access; that on a custom endpoint `user` sends requests through it and `editor` also changes and
|
|
41
|
+
deletes it; that the credential's person and an endpoint's creator hold `owner`; that a session
|
|
42
|
+
counts its owner's policies, never the Agent's workload's; that owners give policies in Command
|
|
43
|
+
Center or through the record's `access/` routes, and `access.model_providers` gives a workload
|
|
44
|
+
`user` for `level: view` and `editor` for `level: edit`; and that a refused change answers `403`
|
|
45
|
+
`missing_action`. The disclosure now goes with giving `user`: the holder can copy the credential,
|
|
46
|
+
and removing the policy does not recall copies. The
|
|
47
|
+
[Security and access guide](docs/reference/security-model.md#model-providers) and
|
|
48
|
+
`tau_security_and_access` gain a Model providers section, and the settings and troubleshooting
|
|
49
|
+
pages no longer speak of shares. Selection rules and existing shares are kept. No SDK code
|
|
50
|
+
changes.
|
|
51
|
+
- **The Security and access guide and the Tau security skill describe Secret policies.** The
|
|
52
|
+
platform now decides Secrets by the policies on them. The
|
|
53
|
+
[guide](docs/reference/security-model.md#secrets) and `tau_security_and_access` said that a
|
|
54
|
+
Secret value follows view access, that its creator cannot be removed, and that `can-view/` and
|
|
55
|
+
`can-edit/` list who has access. They now say that `reader` sees a Secret without its value,
|
|
56
|
+
`value_reader` reads the current value, `editor` also reads earlier values, sets a new value,
|
|
57
|
+
deletes it and sees who has access, and `owner` also decides who has access; that the creator
|
|
58
|
+
becomes its owner and no policy is protected; that `access.secrets` gives a workload
|
|
59
|
+
`value_reader` for `level: view` and `editor` for `level: edit`; and that
|
|
60
|
+
`GET /api/v1/secrets/<uid>/access/` and `access/me/` replace `can-view/` and `can-edit/`.
|
|
61
|
+
Existing shares are kept. No SDK code changes.
|
|
62
|
+
- **The Tau security skill describes team policies.** The platform now decides who can see and
|
|
63
|
+
manage a team by the policies on it. `tau_security_and_access` said that Organization admins are
|
|
64
|
+
protected writer members of every team and the only people who manage membership. It now says
|
|
65
|
+
that any person creates a team and becomes its owner and first member, that the `viewer`,
|
|
66
|
+
`membership_manager`, `editor` and `owner` policies decide who can see and manage it, and that
|
|
67
|
+
Organization admins manage every team from their role, with no membership protected. Membership
|
|
68
|
+
still decides who receives what is shared with a team and what `in_teams()` answers, and a team
|
|
69
|
+
the person only manages is not in that answer. `in_teams()` is unchanged; the
|
|
70
|
+
[Security and access guide](docs/reference/security-model.md#teams-and-membership) says the same.
|
|
71
|
+
|
|
72
|
+
## 2.0.17 — 2026-10-15
|
|
4
73
|
|
|
5
74
|
- **`team_uids` is removed; the verifier refuses caller assertions that list teams
|
|
6
75
|
([#103](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/103), ADR 0019).** The platform no
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ms-tau-sdk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.18.dev68
|
|
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
|
|
@@ -184,7 +184,7 @@ Rules for tools that act for the requester:
|
|
|
184
184
|
a URL, and never sets `Authorization` or an `X-MainSequence-*` header.
|
|
185
185
|
- A delegated call uses the person's ordinary permissions, including administrative ones; any other
|
|
186
186
|
call uses the Agent's own. Each operation decides what it needs. Never infer write permission
|
|
187
|
-
from
|
|
187
|
+
from read access.
|
|
188
188
|
- Return to the model only business results, such as rows, numbers, and names. Never return the
|
|
189
189
|
response object, its headers, a token, a proof, or a raw error body.
|
|
190
190
|
- Keep nothing for another turn or another person. The delegation ends with the turn, and a task
|
|
@@ -163,8 +163,9 @@ What makes it safe:
|
|
|
163
163
|
|
|
164
164
|
- No tool takes a Secret value or a Secret name from the model. The name is built from
|
|
165
165
|
`current_requester().uid`, so prompt injection cannot point the tool at another Secret.
|
|
166
|
-
- `delegation="required"` reads the Secret as the person. The platform returns
|
|
167
|
-
person
|
|
166
|
+
- `delegation="required"` reads the Secret as the person. The platform returns the value only if
|
|
167
|
+
the person holds `value_reader`, `editor` or `owner` on it; the name is a lookup key, not the
|
|
168
|
+
protection.
|
|
168
169
|
- The value exists only inside one call. It never goes into the result, `details`, a log, an
|
|
169
170
|
exception message, a file or a cache for the next turn. It travels in a header, never in a URL,
|
|
170
171
|
because URLs reach logs. Errors from the outside call are caught, and the provider's raw body is
|
|
@@ -178,19 +179,19 @@ What makes it safe:
|
|
|
178
179
|
|
|
179
180
|
A delegated read returns anything the person can view in the Agent's Environment: what they
|
|
180
181
|
created and what others shared with them, directly or through a team. This holds for Secrets and
|
|
181
|
-
other shared resources.
|
|
182
|
-
can
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
182
|
+
other shared resources. A team's members receive what is shared with it, and `in_teams()` answers
|
|
183
|
+
membership. Who can see and manage a team is decided separately, by the `viewer`,
|
|
184
|
+
`membership_manager`, `editor` and `owner` policies on it: any person can create a team and
|
|
185
|
+
becomes its owner and first member, members can see the team and leave it, and Organization admins
|
|
186
|
+
manage every team from their role, without being members. No membership is protected. See the SDK
|
|
187
|
+
Security and access guide's **Teams and membership** section. The platform enforces sharing;
|
|
188
|
+
which of those objects a tool uses is part of the tool's design. For Secrets, the naming
|
|
189
|
+
convention states that design:
|
|
189
190
|
|
|
190
191
|
- **A personal credential:** a name tied to the person, such as `QUOTES_API_KEY__<person uid>`.
|
|
191
192
|
The person decides whether to share it.
|
|
192
|
-
- **A team credential:** a name the team agrees on,
|
|
193
|
-
it for any member.
|
|
193
|
+
- **A team credential:** a name the team agrees on, with `value_reader` attached to the team. The
|
|
194
|
+
tool reads it for any member.
|
|
194
195
|
- **Someone else's Secret shared with the person:** valid whenever the tool is meant to use it.
|
|
195
196
|
|
|
196
197
|
Whoever can edit a Secret decides its value, so the tool uses whatever value they set. Granting or
|
|
@@ -199,13 +200,68 @@ decision people make through sharing, not one the platform makes for them.
|
|
|
199
200
|
|
|
200
201
|
How sharing works:
|
|
201
202
|
|
|
202
|
-
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
- Policies on a Secret decide access: `reader` sees that it exists and its name, never its value;
|
|
204
|
+
`value_reader` also reads the current value; `editor` also reads earlier values, sets a new value,
|
|
205
|
+
deletes it and sees who has access; `owner` also decides who has access. The creator becomes its
|
|
206
|
+
owner, and Organization admins hold every policy on their Organization's Secrets from their role.
|
|
207
|
+
- Owners attach and detach these policies for people, teams and workloads; whoever manages a
|
|
208
|
+
workload can also give it a policy they hold, and anyone can remove their own. No policy is
|
|
209
|
+
protected: an owner can remove the creator's. Nobody gives a policy with more than they hold, and
|
|
210
|
+
people other than Organization admins give access only to people who share an active team with
|
|
211
|
+
them, to teams they belong to and to workloads they can view.
|
|
212
|
+
- `GET /api/v1/secrets/<uid>/access/` lists who holds which policy, for editors and owners, and
|
|
213
|
+
`GET /api/v1/secrets/<uid>/access/me/` answers what the caller may do with it. A tool can use
|
|
214
|
+
them when its design needs to, for example to refuse a team key where it expects a personal one.
|
|
215
|
+
That is a choice of the tool, not a platform rule.
|
|
216
|
+
|
|
217
|
+
## Model providers
|
|
218
|
+
|
|
219
|
+
The model a session runs on uses a provider credential or custom endpoint that the session owner
|
|
220
|
+
may use; a delegated child session uses its parent's owner. A policy that only the Agent's workload
|
|
221
|
+
holds does not count in a person's session. Policies on the record decide who may use it, held
|
|
222
|
+
directly or through a team:
|
|
223
|
+
|
|
224
|
+
- `user` uses it: a credential is selected and delivered to sessions and workloads, including local
|
|
225
|
+
Tau, and a custom endpoint receives their requests.
|
|
226
|
+
- `editor` also refreshes, reconnects or revokes a credential, or changes or deletes an endpoint,
|
|
227
|
+
and sees who has access; `owner` also decides who has access.
|
|
228
|
+
- The credential's person and the endpoint's creator hold `owner`, and Organization admins hold
|
|
229
|
+
every action on their Organization's records. Owners give and remove the policies in Command
|
|
230
|
+
Center's provider settings or through `/api/v1/model-provider-credentials/<uid>/access/` and
|
|
231
|
+
`/api/v1/custom-model-providers/<uid>/access/`; a refused change answers `403` `missing_action`
|
|
232
|
+
with the `granting_policies` that would allow it.
|
|
233
|
+
|
|
234
|
+
Holding `user` delivers the credential, or the endpoint's stored authentication, to the holder's own
|
|
235
|
+
runtime, including local Tau, where it can be copied; removing the policy stops later deliveries,
|
|
236
|
+
not copies already made. To let a team run an Agent on one credential, its owner gives the team
|
|
237
|
+
`user`.
|
|
238
|
+
|
|
239
|
+
## Agents
|
|
240
|
+
|
|
241
|
+
Policies on an Agent decide who may talk to it and manage it, held directly or through a team:
|
|
242
|
+
|
|
243
|
+
- `user` talks to it and gives it Tasks, seeing only the Tasks they asked for; `viewer` also sees
|
|
244
|
+
every Task of the Agent with its requests and results; `operator` also stops any Task or
|
|
245
|
+
conversation run, other people's included; `editor` also configures it, moves it to a new runtime
|
|
246
|
+
build, deletes it, manages what its workload can reach and sees who has access; `owner` also
|
|
247
|
+
decides who has access.
|
|
248
|
+
- A conversation stays its owner's: no Agent policy, `owner` included, reads another person's
|
|
249
|
+
conversation (Organization admins can read it, never change it), and only a Task's requesters
|
|
250
|
+
continue it. On an Agent that acts for its requester, a Task is visible only to its requesters
|
|
251
|
+
and Organization admins.
|
|
252
|
+
- Whoever creates an Agent holds `owner`, and Organization admins hold every action on their
|
|
253
|
+
Organization's Agents. Owners give and remove the policies through
|
|
254
|
+
`/api/v1/agents/<uid>/access/`; a refused change answers `403` `missing_action` with the
|
|
255
|
+
`granting_policies` that would allow it, and an Agent the caller holds no policy on answers `404`.
|
|
256
|
+
- The release an Agent runs on takes no policy of its own: `viewer` and `operator` on the Agent see
|
|
257
|
+
it, and `editor` and `owner` change it.
|
|
258
|
+
|
|
259
|
+
A tool reaches Agents and their Tasks with the caller's policies: the person's in a delegated call,
|
|
260
|
+
the Agent's workload's otherwise. To send another Agent work without a delegation, the workload
|
|
261
|
+
needs its own policy on that Agent, declared under `access.agents` in its workflow file, usually
|
|
262
|
+
`policy: user`. Calling another application with `call_release()` needs a policy on its release
|
|
263
|
+
that includes calling it (`resource-releases.invoke`, which every release policy has), and the
|
|
264
|
+
platform checks it again on every call.
|
|
209
265
|
|
|
210
266
|
## Checking the person's teams
|
|
211
267
|
|
|
@@ -220,7 +276,9 @@ if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM
|
|
|
220
276
|
```
|
|
221
277
|
|
|
222
278
|
- `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
|
|
279
|
+
person is an active member of, as a `frozenset`. Unknown and inactive teams are left out, and so
|
|
280
|
+
is a team the person only manages: managing a team, also as an Organization admin, does not make
|
|
281
|
+
anyone a member.
|
|
224
282
|
- On the turn's requester it answers only while that person is the verified caller of the request
|
|
225
283
|
the turn runs in, such as a chat or A2A Message they sent. A turn with no such request raises
|
|
226
284
|
`TauSDKError`: a Task attempt the platform dispatches, a turn that resumes a caller delivery, or
|
|
@@ -272,4 +330,5 @@ Patch the extension module's `current_requester` and `platform_client` with fake
|
|
|
272
330
|
- Secret values stay inside one call, in headers, never in results, logs, errors, URLs or caches.
|
|
273
331
|
- The naming convention says whose Secrets the tool uses, and the people sharing them know it.
|
|
274
332
|
- A refused delegated call is reported, never retried as the Agent.
|
|
275
|
-
- The Agent's workload holds no grants it does not need, and none on people's Secrets
|
|
333
|
+
- The Agent's workload holds no grants it does not need, and none on people's Secrets; `user` is
|
|
334
|
+
enough on an Agent it only sends work to.
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/__init__.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/app.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/cli.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/config.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/env_file.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/logs.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/proxy.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/packages/tau-board/src/ms_tau_board/state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/backend/team_memberships.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/assistant_ui.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/protocols/chat_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/runtime/deployment_health.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/mainsequence_mcp.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.17.dev66 → ms_tau_sdk-2.0.18.dev68}/src/ms_tau_sdk/tools/mcp_applications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|