ms-tau-sdk 1.2.8.dev13__tar.gz → 1.2.8.dev14__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-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/CHANGELOG.md +9 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/PKG-INFO +6 -6
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/README.md +5 -5
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/pyproject.toml +1 -1
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +29 -2
- ms_tau_sdk-1.2.8.dev14/src/ms_tau_sdk/resources/SYSTEM.md +11 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/extensions.py +32 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/manager.py +50 -15
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/session.py +14 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/settings.py +5 -0
- ms_tau_sdk-1.2.8.dev13/src/ms_tau_sdk/resources/SYSTEM.md +0 -12
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/.gitignore +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/app.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/config.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/state.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/a2a.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/chat.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/dependencies.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/health.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/models.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/api/sessions.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/app.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/application.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/auth.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/client.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/local.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/mcp.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/models.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/backend/routes.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/cli.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/errors.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/logging.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/protocols/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/providers/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/providers/definitions.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/providers/factory.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/resources/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/resources/loader.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/events.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/failures.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/observability.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/provenance.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/runtime/task_context.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/sessions/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/sessions/storage.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/skills.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/tools/__init__.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
- {ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/src/ms_tau_sdk/tools/task_control.py +0 -0
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.8 — 2026-09-24
|
|
4
|
+
|
|
5
|
+
- Added independent `TAU_EXCLUDE_BASE_TOOLS` and `TAU_EXCLUDE_MAINSEQUENCE_MCP` process settings.
|
|
6
|
+
Deployments can expose only project extension tools plus the two required A2A Task controls.
|
|
7
|
+
The runtime skips MCP connection and resource guidance when excluded, rejects project overrides
|
|
8
|
+
of the Task controls, and checks the effective catalog on load and after extension reload.
|
|
9
|
+
- Documented the settings for managed workflow `env_vars` and local runtimes in ADR 0011, the
|
|
10
|
+
reference guides, and the version-matched `tau-project-customization` skill.
|
|
11
|
+
|
|
3
12
|
## 1.2.7 — 2026-09-21
|
|
4
13
|
|
|
5
14
|
- Bundle the local Tau Board command, Python package, and UI assets in the `ms-tau-sdk` wheel.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ms-tau-sdk
|
|
3
|
-
Version: 1.2.8.
|
|
3
|
+
Version: 1.2.8.dev14
|
|
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
|
|
@@ -169,10 +169,10 @@ the board process's safe environment values and edits named non-secret variables
|
|
|
169
169
|
file; Tau or the board must restart before saved startup values take effect.
|
|
170
170
|
|
|
171
171
|
Platform discovery of the unregistered process, internal backend dispatch/caller-delivery hooks,
|
|
172
|
-
push notifications, and `resume_caller` remain unavailable.
|
|
173
|
-
supports Messages and Tasks with polling under authenticated-user semantics
|
|
174
|
-
`127.0.0.1` unless a host was
|
|
175
|
-
|
|
172
|
+
push notifications, and `resume_caller` remain unavailable. When Main Sequence MCP is enabled,
|
|
173
|
+
outbound A2A supports Messages and Tasks with polling under authenticated-user semantics, and MCP
|
|
174
|
+
tools can read or mutate real platform resources. Local mode binds to `127.0.0.1` unless a host was
|
|
175
|
+
explicitly configured.
|
|
176
176
|
|
|
177
177
|
## Workspace-owned Tau behavior
|
|
178
178
|
|
|
@@ -201,7 +201,7 @@ are not bundled into the SDK. Main Sequence transport and protocol behavior rema
|
|
|
201
201
|
- durable Tau sessions, leases, restore, persistence, cancellation, eviction, and shutdown
|
|
202
202
|
- local Tau execution without backend AgentSession pre-creation
|
|
203
203
|
- chat, SSE, A2A, health, and readiness transports
|
|
204
|
-
- Main Sequence MCP and protocol-required task controls
|
|
204
|
+
- optional Main Sequence MCP and always-present protocol-required task controls
|
|
205
205
|
- packaged defaults that participate in Tau's normal workspace configuration
|
|
206
206
|
- explicit, version-matched development skills for repository integration, local debugging,
|
|
207
207
|
project customization, and TAU's A2A host adapter
|
|
@@ -138,10 +138,10 @@ the board process's safe environment values and edits named non-secret variables
|
|
|
138
138
|
file; Tau or the board must restart before saved startup values take effect.
|
|
139
139
|
|
|
140
140
|
Platform discovery of the unregistered process, internal backend dispatch/caller-delivery hooks,
|
|
141
|
-
push notifications, and `resume_caller` remain unavailable.
|
|
142
|
-
supports Messages and Tasks with polling under authenticated-user semantics
|
|
143
|
-
`127.0.0.1` unless a host was
|
|
144
|
-
|
|
141
|
+
push notifications, and `resume_caller` remain unavailable. When Main Sequence MCP is enabled,
|
|
142
|
+
outbound A2A supports Messages and Tasks with polling under authenticated-user semantics, and MCP
|
|
143
|
+
tools can read or mutate real platform resources. Local mode binds to `127.0.0.1` unless a host was
|
|
144
|
+
explicitly configured.
|
|
145
145
|
|
|
146
146
|
## Workspace-owned Tau behavior
|
|
147
147
|
|
|
@@ -170,7 +170,7 @@ are not bundled into the SDK. Main Sequence transport and protocol behavior rema
|
|
|
170
170
|
- durable Tau sessions, leases, restore, persistence, cancellation, eviction, and shutdown
|
|
171
171
|
- local Tau execution without backend AgentSession pre-creation
|
|
172
172
|
- chat, SSE, A2A, health, and readiness transports
|
|
173
|
-
- Main Sequence MCP and protocol-required task controls
|
|
173
|
+
- optional Main Sequence MCP and always-present protocol-required task controls
|
|
174
174
|
- packaged defaults that participate in Tau's normal workspace configuration
|
|
175
175
|
- explicit, version-matched development skills for repository integration, local debugging,
|
|
176
176
|
project customization, and TAU's A2A host adapter
|
|
@@ -46,6 +46,33 @@ The project author owns:
|
|
|
46
46
|
The SDK does not sandbox these extensions. Web, fetch, search, browser, video, and other optional
|
|
47
47
|
tools are project choices and are not part of the base SDK.
|
|
48
48
|
|
|
49
|
+
## Runtime tool composition
|
|
50
|
+
|
|
51
|
+
Two independent process settings select the host-provided tools. Both default to `false`:
|
|
52
|
+
|
|
53
|
+
| Setting | Effect when `true` |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| `TAU_EXCLUDE_BASE_TOOLS` | Omit Tau's `read`, `write`, `edit`, and `bash`. |
|
|
56
|
+
| `TAU_EXCLUDE_MAINSEQUENCE_MCP` | Skip Main Sequence MCP connection, tools, resources, and resource prompt. |
|
|
57
|
+
|
|
58
|
+
Set them in `harness_agent.spec.env_vars` in a managed repository workflow, in the process
|
|
59
|
+
environment for local `ms-tau`, or through explicit `TauSDKSettings` fields in a Python host. They
|
|
60
|
+
apply to all sessions in that process; neither Agent Card skills nor prompt text removes tools.
|
|
61
|
+
|
|
62
|
+
| Exclude base tools | Exclude Main Sequence MCP | Model-facing sources |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| `false` | `false` | Coding tools, Main Sequence MCP, project extension tools, A2A Task controls. |
|
|
65
|
+
| `true` | `false` | Main Sequence MCP, project extension tools, A2A Task controls. |
|
|
66
|
+
| `false` | `true` | Coding tools, project extension tools, A2A Task controls. |
|
|
67
|
+
| `true` | `true` | Project extension tools and A2A Task controls. |
|
|
68
|
+
|
|
69
|
+
The A2A Task controls are `task_request_input` and `task_request_authorization`. They remain
|
|
70
|
+
available in every mode for the agent's own Task; extensions must not register those names.
|
|
71
|
+
Register project tools under `.tau/extensions/` and verify the effective catalog after loading.
|
|
72
|
+
With `read` excluded, Tau 0.4.2 does not insert discovered skills into the system prompt. Put
|
|
73
|
+
needed guidance in the effective `.tau/SYSTEM.md` or expose it through a declared retrieval tool.
|
|
74
|
+
Excluding coding tools does not sandbox extension Python code.
|
|
75
|
+
|
|
49
76
|
## Invariants extensions must not replace
|
|
50
77
|
|
|
51
78
|
Extensions may change effective agent capabilities, but they must not replace or bypass:
|
|
@@ -57,8 +84,8 @@ Extensions may change effective agent capabilities, but they must not replace or
|
|
|
57
84
|
- secret redaction and payload limits; or
|
|
58
85
|
- HTTP, SSE, Responses, and A2A wire validation.
|
|
59
86
|
|
|
60
|
-
|
|
61
|
-
platform permissions merely because they run inside TAU.
|
|
87
|
+
When Main Sequence MCP is enabled, use its canonical operations for live platform state. Project
|
|
88
|
+
tools do not grant new platform permissions merely because they run inside TAU.
|
|
62
89
|
|
|
63
90
|
## Validation
|
|
64
91
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
You are an agent running through the Main Sequence TAU SDK in the current project workspace.
|
|
2
|
+
|
|
3
|
+
Work directly toward the user's requested outcome. Follow relevant project instructions, keep
|
|
4
|
+
changes focused, preserve unrelated work, and verify material changes when appropriate tools exist.
|
|
5
|
+
|
|
6
|
+
Use the tools available in this runtime for the work they support. When Main Sequence MCP tools and
|
|
7
|
+
resources are available, use them for Main Sequence platform knowledge and operations. Never expose runtime
|
|
8
|
+
credentials, access tokens, or other secrets in code, logs, diagnostics, or responses.
|
|
9
|
+
|
|
10
|
+
Project-owned Tau configuration, instructions, skills, hooks, and extensions are authoritative for
|
|
11
|
+
project behavior within the host's safety and protocol boundaries.
|
|
@@ -7,8 +7,40 @@ from dataclasses import dataclass
|
|
|
7
7
|
from tau_agent.types import JSONValue
|
|
8
8
|
from tau_coding import CodingSession
|
|
9
9
|
|
|
10
|
+
from ms_tau_sdk.errors import ConfigurationError
|
|
10
11
|
from ms_tau_sdk.runtime.snapshots import sha256_json
|
|
11
12
|
|
|
13
|
+
TASK_CONTROL_TOOL_NAMES = frozenset({"task_request_input", "task_request_authorization"})
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_tool_catalog(
|
|
17
|
+
session: CodingSession,
|
|
18
|
+
*,
|
|
19
|
+
sdk_tool_names: frozenset[str],
|
|
20
|
+
require_complete_project_catalog: bool,
|
|
21
|
+
) -> None:
|
|
22
|
+
"""Reject extension overrides and catalog drift before a model can use tools."""
|
|
23
|
+
sources = session.extension_tool_sources
|
|
24
|
+
reserved = TASK_CONTROL_TOOL_NAMES & sources.keys()
|
|
25
|
+
if reserved:
|
|
26
|
+
raise ConfigurationError(
|
|
27
|
+
"Project extensions cannot replace A2A Task controls: " + ", ".join(sorted(reserved))
|
|
28
|
+
)
|
|
29
|
+
names = [tool.name for tool in session.tools]
|
|
30
|
+
expected = sdk_tool_names | sources.keys()
|
|
31
|
+
if len(names) != len(set(names)) or set(names) != expected:
|
|
32
|
+
raise ConfigurationError("Effective Tau tool catalog differs from configured tool sources")
|
|
33
|
+
if require_complete_project_catalog:
|
|
34
|
+
metadata = session.extension_runtime.extension_metadata
|
|
35
|
+
for owner in set(sources.values()):
|
|
36
|
+
matches = [item for item in metadata if item.name == owner]
|
|
37
|
+
if len(matches) != 1 or matches[0].source != "project":
|
|
38
|
+
raise ConfigurationError("Tool-only runtime includes a non-project extension tool")
|
|
39
|
+
if require_complete_project_catalog and any(
|
|
40
|
+
diagnostic.severity == "error" for diagnostic in session.extension_runtime.diagnostics
|
|
41
|
+
):
|
|
42
|
+
raise ConfigurationError("Project extension loading failed in tool-only runtime mode")
|
|
43
|
+
|
|
12
44
|
|
|
13
45
|
@dataclass(slots=True)
|
|
14
46
|
class ProjectExtensionState:
|
|
@@ -38,7 +38,7 @@ from ms_tau_sdk.logging import conversation_log_fields
|
|
|
38
38
|
from ms_tau_sdk.providers.factory import ProviderFactory
|
|
39
39
|
from ms_tau_sdk.resources.loader import tau_resource_paths
|
|
40
40
|
from ms_tau_sdk.runtime.events import TauRuntimeEvent
|
|
41
|
-
from ms_tau_sdk.runtime.extensions import ProjectExtensionState
|
|
41
|
+
from ms_tau_sdk.runtime.extensions import ProjectExtensionState, validate_tool_catalog
|
|
42
42
|
from ms_tau_sdk.runtime.observability import TauTurnObserver
|
|
43
43
|
from ms_tau_sdk.runtime.provenance import TurnProvenance
|
|
44
44
|
from ms_tau_sdk.runtime.snapshots import (
|
|
@@ -139,7 +139,8 @@ class SessionRuntimeManager:
|
|
|
139
139
|
if prefetch_provider is not None:
|
|
140
140
|
await prefetch_provider()
|
|
141
141
|
self._provider_control_ready = True
|
|
142
|
-
|
|
142
|
+
if not self.settings.exclude_mainsequence_mcp:
|
|
143
|
+
await self._get_mcp_client()
|
|
143
144
|
self._startup_ready = True
|
|
144
145
|
if self._eviction_task is None:
|
|
145
146
|
self._eviction_task = asyncio.create_task(
|
|
@@ -158,6 +159,10 @@ class SessionRuntimeManager:
|
|
|
158
159
|
}
|
|
159
160
|
return {
|
|
160
161
|
"mode": "local" if self.settings.local_mode else "managed",
|
|
162
|
+
"exclude_base_tools": self.settings.exclude_base_tools,
|
|
163
|
+
"exclude_mainsequence_mcp": self.settings.exclude_mainsequence_mcp,
|
|
164
|
+
"base_tool_count": 0 if self.settings.exclude_base_tools else 4,
|
|
165
|
+
"task_control_tool_count": 2,
|
|
161
166
|
"workspace_digest": self.settings.workspace_digest,
|
|
162
167
|
"holder_id": self.holder_id,
|
|
163
168
|
"loaded_sessions": len(self._runtimes),
|
|
@@ -396,7 +401,9 @@ class SessionRuntimeManager:
|
|
|
396
401
|
provider_control=bootstrap.provider_control,
|
|
397
402
|
),
|
|
398
403
|
)
|
|
399
|
-
mcp_client =
|
|
404
|
+
mcp_client = (
|
|
405
|
+
None if self.settings.exclude_mainsequence_mcp else await self._get_mcp_client()
|
|
406
|
+
)
|
|
400
407
|
cwd = self._resolve_cwd()
|
|
401
408
|
project_extension_state = ProjectExtensionState(enabled=True)
|
|
402
409
|
caller_session_proof = None
|
|
@@ -406,15 +413,32 @@ class SessionRuntimeManager:
|
|
|
406
413
|
"lease_holder_id": lease.holder_id,
|
|
407
414
|
"lease_token": lease.lease_token,
|
|
408
415
|
}
|
|
409
|
-
tools = [
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
416
|
+
tools = []
|
|
417
|
+
if not self.settings.exclude_base_tools:
|
|
418
|
+
tools.extend(create_coding_tools(cwd=cwd))
|
|
419
|
+
if mcp_client is not None:
|
|
420
|
+
tools.extend(
|
|
421
|
+
create_mainsequence_mcp_tools(
|
|
422
|
+
mcp_client,
|
|
423
|
+
caller_session_proof=caller_session_proof,
|
|
424
|
+
allow_missing_session_proof=self.settings.local_mode,
|
|
425
|
+
)
|
|
426
|
+
)
|
|
427
|
+
tools.extend(create_task_control_tools())
|
|
428
|
+
sdk_tool_names = frozenset(tool.name for tool in tools)
|
|
429
|
+
if len(sdk_tool_names) != len(tools):
|
|
430
|
+
raise ConfigurationError("SDK tool sources contain duplicate names")
|
|
431
|
+
require_complete_project_catalog = (
|
|
432
|
+
self.settings.exclude_base_tools and self.settings.exclude_mainsequence_mcp
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
def check_catalog(session: CodingSession) -> None:
|
|
436
|
+
validate_tool_catalog(
|
|
437
|
+
session,
|
|
438
|
+
sdk_tool_names=sdk_tool_names,
|
|
439
|
+
require_complete_project_catalog=require_complete_project_catalog,
|
|
440
|
+
)
|
|
441
|
+
|
|
418
442
|
coding_session = await CodingSession.load(
|
|
419
443
|
CodingSessionConfig(
|
|
420
444
|
provider=provider_runtime.provider,
|
|
@@ -425,7 +449,11 @@ class SessionRuntimeManager:
|
|
|
425
449
|
cwd=cwd,
|
|
426
450
|
tools=tools,
|
|
427
451
|
session_id=session_uid,
|
|
428
|
-
append_system_prompt=
|
|
452
|
+
append_system_prompt=(
|
|
453
|
+
mainsequence_mcp_resource_prompt(mcp_client)
|
|
454
|
+
if mcp_client is not None
|
|
455
|
+
else None
|
|
456
|
+
),
|
|
429
457
|
resource_paths=tau_resource_paths(
|
|
430
458
|
cwd,
|
|
431
459
|
state_home=self.settings.tau_state_home,
|
|
@@ -434,6 +462,12 @@ class SessionRuntimeManager:
|
|
|
434
462
|
trust_override="approve",
|
|
435
463
|
)
|
|
436
464
|
)
|
|
465
|
+
try:
|
|
466
|
+
check_catalog(coding_session)
|
|
467
|
+
except BaseException:
|
|
468
|
+
with contextlib.suppress(Exception):
|
|
469
|
+
await coding_session.aclose()
|
|
470
|
+
raise
|
|
437
471
|
project_extension_state.update_from_session(coding_session)
|
|
438
472
|
self._log_project_extension_diagnostics(
|
|
439
473
|
session_uid=session_uid,
|
|
@@ -454,6 +488,7 @@ class SessionRuntimeManager:
|
|
|
454
488
|
provider_control_schema=bootstrap.provider_control.schema_version,
|
|
455
489
|
catalog_digest=bootstrap.provider_control.catalog_digest,
|
|
456
490
|
project_extension_state=project_extension_state,
|
|
491
|
+
validate_tool_catalog=check_catalog,
|
|
457
492
|
)
|
|
458
493
|
state = bootstrap.runtime_state
|
|
459
494
|
runtime.runtime_activity = state.runtime_activity or "loading"
|
|
@@ -479,8 +514,8 @@ class SessionRuntimeManager:
|
|
|
479
514
|
snapshot_selected=snapshot_selected,
|
|
480
515
|
snapshot_fallback_reason=fallback_reason,
|
|
481
516
|
history_entry_count=len(initial_entries),
|
|
482
|
-
mcp_tool_count=len(mcp_client.tools),
|
|
483
|
-
mcp_resource_count=len(mcp_client.resources),
|
|
517
|
+
mcp_tool_count=len(mcp_client.tools) if mcp_client is not None else 0,
|
|
518
|
+
mcp_resource_count=len(mcp_client.resources) if mcp_client is not None else 0,
|
|
484
519
|
provider_control_schema=bootstrap.provider_control.schema_version,
|
|
485
520
|
catalog_digest=bootstrap.provider_control.catalog_digest,
|
|
486
521
|
project_extensions_enabled=project_extension_state.enabled,
|
|
@@ -9,6 +9,7 @@ from dataclasses import dataclass, field
|
|
|
9
9
|
|
|
10
10
|
from tau_agent.types import JSONValue
|
|
11
11
|
from tau_coding import CodingSession
|
|
12
|
+
from tau_coding.reload import CodingReloadSummary
|
|
12
13
|
|
|
13
14
|
from ms_tau_sdk.backend.mcp import MainSequenceMCPClient
|
|
14
15
|
from ms_tau_sdk.backend.models import TauTurnCommit
|
|
@@ -46,6 +47,17 @@ class ActiveSessionRuntime:
|
|
|
46
47
|
provider_control_schema: int = 0
|
|
47
48
|
catalog_digest: str = ""
|
|
48
49
|
project_extension_state: ProjectExtensionState | None = None
|
|
50
|
+
validate_tool_catalog: Callable[[CodingSession], None] | None = None
|
|
51
|
+
|
|
52
|
+
async def reload(self) -> CodingReloadSummary:
|
|
53
|
+
"""Reload Tau resources and reject an invalid replacement catalog."""
|
|
54
|
+
async with self.lock:
|
|
55
|
+
summary = await self.coding_session.reload()
|
|
56
|
+
if self.validate_tool_catalog is not None:
|
|
57
|
+
self.validate_tool_catalog(self.coding_session)
|
|
58
|
+
if self.project_extension_state is not None:
|
|
59
|
+
self.project_extension_state.update_from_session(self.coding_session)
|
|
60
|
+
return summary
|
|
49
61
|
|
|
50
62
|
async def prompt(
|
|
51
63
|
self,
|
|
@@ -64,6 +76,8 @@ class ActiveSessionRuntime:
|
|
|
64
76
|
async with self.lock:
|
|
65
77
|
if self.evicting:
|
|
66
78
|
raise RuntimeError("Session runtime is being reconfigured")
|
|
79
|
+
if self.validate_tool_catalog is not None:
|
|
80
|
+
self.validate_tool_catalog(self.coding_session)
|
|
67
81
|
self.last_used_at = time.monotonic()
|
|
68
82
|
settled_event: TauRuntimeEvent | None = None
|
|
69
83
|
if provenance:
|
|
@@ -55,6 +55,11 @@ class TauSDKSettings(BaseSettings):
|
|
|
55
55
|
validation_alias="MAINSEQUENCE_REFRESH_TOKEN",
|
|
56
56
|
)
|
|
57
57
|
local_mode: bool = Field(default=False, validation_alias="TAU_LOCAL_MODE")
|
|
58
|
+
exclude_base_tools: bool = Field(default=False, validation_alias="TAU_EXCLUDE_BASE_TOOLS")
|
|
59
|
+
exclude_mainsequence_mcp: bool = Field(
|
|
60
|
+
default=False,
|
|
61
|
+
validation_alias="TAU_EXCLUDE_MAINSEQUENCE_MCP",
|
|
62
|
+
)
|
|
58
63
|
local_provider: str | None = Field(default=None, validation_alias="TAU_LOCAL_PROVIDER")
|
|
59
64
|
local_model: str | None = Field(default=None, validation_alias="TAU_LOCAL_MODEL")
|
|
60
65
|
local_thinking: (
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
You are a coding agent running through the Main Sequence TAU SDK in the current project workspace.
|
|
2
|
-
|
|
3
|
-
Work directly toward the user's requested outcome. Inspect relevant project instructions and files
|
|
4
|
-
before editing, keep changes focused, preserve unrelated work, and verify material changes with the
|
|
5
|
-
project's available tests or checks.
|
|
6
|
-
|
|
7
|
-
Use the available coding tools for workspace work. Use the injected Main Sequence MCP tools and
|
|
8
|
-
advertised resources for Main Sequence platform knowledge and operations. Never expose runtime
|
|
9
|
-
credentials, access tokens, or other secrets in code, logs, diagnostics, or responses.
|
|
10
|
-
|
|
11
|
-
Project-owned Tau configuration, instructions, skills, hooks, and extensions are authoritative for
|
|
12
|
-
project behavior within the host's safety and protocol boundaries.
|
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/__init__.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/app.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/cli.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/config.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/env_file.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/logs.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/proxy.py
RENAMED
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/state.py
RENAMED
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/packages/tau-board/src/ms_tau_board/static/app.js
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
|
|
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-1.2.8.dev13 → ms_tau_sdk-1.2.8.dev14}/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
|