ms-tau-sdk 1.2.6.dev1__tar.gz → 1.2.6.dev3__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 (60) hide show
  1. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/CHANGELOG.md +10 -0
  2. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/PKG-INFO +12 -1
  3. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/README.md +11 -0
  4. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/pyproject.toml +1 -1
  5. ms_tau_sdk-1.2.6.dev3/src/ms_tau_sdk/resources/loader.py +30 -0
  6. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/manager.py +4 -1
  7. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/settings.py +25 -2
  8. ms_tau_sdk-1.2.6.dev1/src/ms_tau_sdk/resources/loader.py +0 -17
  9. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/.gitignore +0 -0
  10. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/__init__.py +0 -0
  11. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  12. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  13. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +0 -0
  14. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  15. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/__init__.py +0 -0
  16. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/a2a.py +0 -0
  17. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/chat.py +0 -0
  18. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/dependencies.py +0 -0
  19. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/health.py +0 -0
  20. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/models.py +0 -0
  21. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/api/sessions.py +0 -0
  22. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/app.py +0 -0
  23. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/application.py +0 -0
  24. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/__init__.py +0 -0
  25. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/auth.py +0 -0
  26. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/client.py +0 -0
  27. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/local.py +0 -0
  28. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/mcp.py +0 -0
  29. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/models.py +0 -0
  30. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/backend/routes.py +0 -0
  31. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/cli.py +0 -0
  32. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/errors.py +0 -0
  33. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/logging.py +0 -0
  34. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  35. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  36. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  37. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  38. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  39. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/providers/__init__.py +0 -0
  40. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/providers/definitions.py +0 -0
  41. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/providers/factory.py +0 -0
  42. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  43. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/resources/__init__.py +0 -0
  44. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  45. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  46. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  47. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/events.py +0 -0
  48. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  49. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/failures.py +0 -0
  50. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/observability.py +0 -0
  51. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  52. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/session.py +0 -0
  53. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  54. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  55. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  56. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/sessions/storage.py +0 -0
  57. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/skills.py +0 -0
  58. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/tools/__init__.py +0 -0
  59. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  60. {ms_tau_sdk-1.2.6.dev1 → ms_tau_sdk-1.2.6.dev3}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Moved durable Tau runtime state out of the installed package. Built-in extension state, provider
6
+ credentials, project trust, and agent-call diagnostics now live under
7
+ `MAINSEQUENCE_TAU_STATE_ROOT/<workspace-hash>`, defaulting to an XDG-style user state directory,
8
+ instead of `ms_tau_sdk/resources/`. An installed wheel no longer writes to its own site-packages
9
+ directory, so a read-only install works, and a test run no longer leaves runtime files in `src`
10
+ for the next build to package. Managed-mode and local-mode behavior is otherwise unchanged.
11
+ - Made the release gate reject runtime residue. `scripts/verify_distribution.py` now holds an
12
+ explicit allowlist of the entries and file types the package ships, and refuses any `state/`
13
+ directory, so this class of leak fails the gate instead of shipping.
14
+
5
15
  - Adopted one branch and release standard. A final release is a `vX.Y.Z` tag on `main`, and the
6
16
  publish workflow refuses a tag whose commit `main` does not contain. Every push to `development`
7
17
  publishes one `X.Y.Z.devN` release automatically, after the same quality gate as `quality.yml`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 1.2.6.dev1
3
+ Version: 1.2.6.dev3
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
@@ -43,6 +43,7 @@ Description-Content-Type: text/markdown
43
43
  <a href="https://pypi.org/project/ms-tau-sdk/"><img src="https://img.shields.io/pypi/pyversions/ms-tau-sdk.svg" alt="Supported Python versions"></a>
44
44
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/quality.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/quality.yml/badge.svg?branch=development" alt="Quality checks"></a>
45
45
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-to-pipy.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-to-pipy.yml/badge.svg" alt="PyPI publication"></a>
46
+ <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-development-release.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-development-release.yml/badge.svg?branch=development" alt="Development release publication"></a>
46
47
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/issues"><img src="https://img.shields.io/github/issues/mainsequence-sdk/ms-tau-sdk.svg" alt="Open issues"></a>
47
48
  </p>
48
49
 
@@ -68,6 +69,16 @@ Add the SDK to the project that will host the agent:
68
69
  uv add ms-tau-sdk
69
70
  ```
70
71
 
72
+ Every push to `development` also publishes one `X.Y.Z.devN` release to the same PyPI project.
73
+ `pip` and `uv` skip development releases, so take one only on purpose:
74
+
75
+ ```bash
76
+ uv add --prerelease=allow ms-tau-sdk # or pin one exactly: uv add "ms-tau-sdk==X.Y.Z.devN"
77
+ ```
78
+
79
+ See the [release process](docs/reference/releasing.md#registry-publication) for what each workflow
80
+ publishes.
81
+
71
82
  Provide the runtime credential that Main Sequence assigned to the deployment:
72
83
 
73
84
  ```bash
@@ -15,6 +15,7 @@
15
15
  <a href="https://pypi.org/project/ms-tau-sdk/"><img src="https://img.shields.io/pypi/pyversions/ms-tau-sdk.svg" alt="Supported Python versions"></a>
16
16
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/quality.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/quality.yml/badge.svg?branch=development" alt="Quality checks"></a>
17
17
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-to-pipy.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-to-pipy.yml/badge.svg" alt="PyPI publication"></a>
18
+ <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-development-release.yml"><img src="https://github.com/mainsequence-sdk/ms-tau-sdk/actions/workflows/publish-development-release.yml/badge.svg?branch=development" alt="Development release publication"></a>
18
19
  <a href="https://github.com/mainsequence-sdk/ms-tau-sdk/issues"><img src="https://img.shields.io/github/issues/mainsequence-sdk/ms-tau-sdk.svg" alt="Open issues"></a>
19
20
  </p>
20
21
 
@@ -40,6 +41,16 @@ Add the SDK to the project that will host the agent:
40
41
  uv add ms-tau-sdk
41
42
  ```
42
43
 
44
+ Every push to `development` also publishes one `X.Y.Z.devN` release to the same PyPI project.
45
+ `pip` and `uv` skip development releases, so take one only on purpose:
46
+
47
+ ```bash
48
+ uv add --prerelease=allow ms-tau-sdk # or pin one exactly: uv add "ms-tau-sdk==X.Y.Z.devN"
49
+ ```
50
+
51
+ See the [release process](docs/reference/releasing.md#registry-publication) for what each workflow
52
+ publishes.
53
+
43
54
  Provide the runtime credential that Main Sequence assigned to the deployment:
44
55
 
45
56
  ```bash
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ms-tau-sdk"
7
- version = "1.2.6.dev1"
7
+ version = "1.2.6.dev3"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -0,0 +1,30 @@
1
+ """Packaged Tau resource paths with project-native override semantics."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from importlib.resources import files
6
+ from pathlib import Path
7
+
8
+ from tau_coding.paths import TauPaths
9
+ from tau_coding.resources import TauResourcePaths
10
+
11
+
12
+ def resource_root() -> Path:
13
+ return Path(str(files("ms_tau_sdk.resources")))
14
+
15
+
16
+ def tau_resource_paths(cwd: Path, *, state_home: Path) -> TauResourcePaths:
17
+ """Return SDK defaults plus Tau-native project resource discovery.
18
+
19
+ `root` stays on the packaged resources, which are read-only inputs: an
20
+ installed wheel lives in site-packages, so the SDK must never write there.
21
+ `paths` therefore sends every durable Tau write — built-in extension state,
22
+ provider credentials, project trust, diagnostics, sessions — to the
23
+ writable `state_home` instead.
24
+ """
25
+ return TauResourcePaths(
26
+ root=resource_root(),
27
+ cwd=cwd,
28
+ agents_root=None,
29
+ paths=TauPaths(home=state_home),
30
+ )
@@ -426,7 +426,10 @@ class SessionRuntimeManager:
426
426
  tools=tools,
427
427
  session_id=session_uid,
428
428
  append_system_prompt=mainsequence_mcp_resource_prompt(mcp_client),
429
- resource_paths=tau_resource_paths(cwd),
429
+ resource_paths=tau_resource_paths(
430
+ cwd,
431
+ state_home=self.settings.tau_state_home,
432
+ ),
430
433
  project_extensions_enabled=True,
431
434
  trust_override="approve",
432
435
  )
@@ -14,6 +14,13 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
14
14
  from .errors import ConfigurationError
15
15
 
16
16
 
17
+ def _default_state_root() -> Path:
18
+ """Return the XDG-style user state directory for SDK-owned runtime state."""
19
+ override = os.environ.get("XDG_STATE_HOME", "").strip()
20
+ base = Path(override) if override else Path.home() / ".local" / "state"
21
+ return base / "ms-tau-sdk"
22
+
23
+
17
24
  class TauSDKSettings(BaseSettings):
18
25
  model_config = SettingsConfigDict(
19
26
  env_file=".env",
@@ -66,6 +73,10 @@ class TauSDKSettings(BaseSettings):
66
73
  default_factory=lambda: Path.home() / ".tau" / "mainsequence",
67
74
  validation_alias="TAU_LOCAL_STATE_ROOT",
68
75
  )
76
+ state_root: Path = Field(
77
+ default_factory=_default_state_root,
78
+ validation_alias="MAINSEQUENCE_TAU_STATE_ROOT",
79
+ )
69
80
  host: str = Field(default="0.0.0.0", validation_alias="MAINSEQUENCE_TAU_HOST")
70
81
  port: int = Field(default=8787, validation_alias="MAINSEQUENCE_TAU_PORT")
71
82
  trusted_origins: tuple[str, ...] = Field(
@@ -240,9 +251,9 @@ class TauSDKSettings(BaseSettings):
240
251
  normalized = str(value or "").strip()
241
252
  return normalized or None
242
253
 
243
- @field_validator("local_state_root")
254
+ @field_validator("local_state_root", "state_root")
244
255
  @classmethod
245
- def normalize_local_state_root(cls, value: Path) -> Path:
256
+ def normalize_state_roots(cls, value: Path) -> Path:
246
257
  return value.expanduser().resolve()
247
258
 
248
259
  @model_validator(mode="after")
@@ -291,6 +302,18 @@ class TauSDKSettings(BaseSettings):
291
302
  def workspace_digest(self) -> str:
292
303
  return sha256(str(self.workspace).encode("utf-8")).hexdigest()[:12]
293
304
 
305
+ @property
306
+ def tau_state_home(self) -> Path:
307
+ """Return the writable Tau home holding this workspace's runtime state.
308
+
309
+ Tau keeps durable runtime data (built-in extension state, provider
310
+ credentials, project trust, diagnostics) under one home directory. That
311
+ home must never be the packaged resource directory: an installed wheel
312
+ lives in site-packages, which is read-only on hardened installs and must
313
+ not mutate itself at runtime.
314
+ """
315
+ return self.state_root / self.workspace_digest
316
+
294
317
  @property
295
318
  def local_state_path(self) -> Path:
296
319
  return self.local_state_root / self.workspace_digest / "runtime.sqlite3"
@@ -1,17 +0,0 @@
1
- """Packaged Tau resource paths with project-native override semantics."""
2
-
3
- from __future__ import annotations
4
-
5
- from importlib.resources import files
6
- from pathlib import Path
7
-
8
- from tau_coding.resources import TauResourcePaths
9
-
10
-
11
- def resource_root() -> Path:
12
- return Path(str(files("ms_tau_sdk.resources")))
13
-
14
-
15
- def tau_resource_paths(cwd: Path) -> TauResourcePaths:
16
- """Return SDK defaults plus Tau-native project resource discovery."""
17
- return TauResourcePaths(root=resource_root(), cwd=cwd, agents_root=None)