ms-tau-sdk 2.0.8.dev45__tar.gz → 2.0.8.dev46__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 (86) hide show
  1. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/CHANGELOG.md +9 -0
  2. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/PKG-INFO +1 -1
  3. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/pyproject.toml +1 -1
  4. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/sessions.py +50 -21
  5. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/.gitignore +0 -0
  6. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/README.md +0 -0
  7. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  8. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  9. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  10. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  11. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  12. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  13. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  14. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  15. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  16. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  17. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  18. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  19. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  20. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/__init__.py +0 -0
  21. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  22. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  23. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +0 -0
  24. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  25. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +0 -0
  26. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/__init__.py +0 -0
  27. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/a2a.py +0 -0
  28. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/chat.py +0 -0
  29. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/conversations.py +0 -0
  30. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/dependencies.py +0 -0
  31. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/health.py +0 -0
  32. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/inspection.py +0 -0
  33. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/local_chat.py +0 -0
  34. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/models.py +0 -0
  35. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/api/request_identity.py +0 -0
  36. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/app.py +0 -0
  37. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/application.py +0 -0
  38. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/__init__.py +0 -0
  39. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/assertions.py +0 -0
  40. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/auth.py +0 -0
  41. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/client.py +0 -0
  42. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/local.py +0 -0
  43. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/mcp.py +0 -0
  44. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/models.py +0 -0
  45. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/backend/routes.py +0 -0
  46. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/cli.py +0 -0
  47. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/errors.py +0 -0
  48. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/logging.py +0 -0
  49. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  50. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  51. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  52. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  53. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  54. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
  55. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  56. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/providers/__init__.py +0 -0
  57. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/providers/definitions.py +0 -0
  58. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/providers/factory.py +0 -0
  59. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
  60. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  61. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/resources/__init__.py +0 -0
  62. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/resources/loader.py +0 -0
  63. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  64. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  65. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  66. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/events.py +0 -0
  67. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  68. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/failures.py +0 -0
  69. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
  70. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/manager.py +0 -0
  71. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/observability.py +0 -0
  72. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  73. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/requester.py +0 -0
  74. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/session.py +0 -0
  75. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  76. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  77. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  78. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/sessions/storage.py +0 -0
  79. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/settings.py +0 -0
  80. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/skills.py +0 -0
  81. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/__init__.py +0 -0
  82. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  83. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
  84. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
  85. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/skill_read.py +0 -0
  86. {ms_tau_sdk-2.0.8.dev45 → ms_tau_sdk-2.0.8.dev46}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ - **A new local chat reports and accepts its model before the first message
6
+ ([#50](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/50)).** In local mode,
7
+ `GET /api/chat/session-model` for a session that has not had a turn returns the model it would
8
+ start on (`TAU_LOCAL_PROVIDER`, `TAU_LOCAL_MODEL`, `TAU_LOCAL_THINKING`) instead of
9
+ `session_not_found`. A model selected with `PUT /api/chat/session-model` before the first turn
10
+ is used by that turn; that already worked and is now tested. Managed mode is unchanged.
11
+
3
12
  ## 2.0.7 — 2026-10-08
4
13
 
5
14
  - **Breaking: one delegation envelope on every call made for the work
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 2.0.8.dev45
3
+ Version: 2.0.8.dev46
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.8.dev45"
7
+ version = "2.0.8.dev46"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -7,6 +7,7 @@ from typing import Annotated
7
7
  from fastapi import APIRouter, Depends, HTTPException, Query
8
8
 
9
9
  from ms_tau_sdk.backend.client import MainSequenceClient
10
+ from ms_tau_sdk.errors import SessionNotFoundError
10
11
  from ms_tau_sdk.runtime.manager import SessionRuntimeManager
11
12
  from ms_tau_sdk.settings import TauSDKSettings
12
13
 
@@ -20,6 +21,25 @@ RuntimeManagerDep = Annotated[SessionRuntimeManager, Depends(runtime_manager)]
20
21
  SettingsDep = Annotated[TauSDKSettings, Depends(settings)]
21
22
 
22
23
 
24
+ def _session_model(
25
+ session_uid: str,
26
+ *,
27
+ provider: str | None,
28
+ model: str | None,
29
+ thinking_level: str | None,
30
+ custom_id: str | None,
31
+ ) -> dict[str, object]:
32
+ return {
33
+ "sessionUid": session_uid,
34
+ "model": {
35
+ "provider": provider,
36
+ "model": model,
37
+ "thinkingLevel": thinking_level,
38
+ **({"customId": custom_id} if custom_id is not None else {}),
39
+ },
40
+ }
41
+
42
+
23
43
  @router.get("/session-model")
24
44
  async def session_model(
25
45
  client: BackendDep,
@@ -28,18 +48,29 @@ async def session_model(
28
48
  ) -> dict[str, object]:
29
49
  if config.local_mode:
30
50
  session_uid = config.local_session_uid(session_uid)
31
- session = await require_session_access(client, session_uid)
32
- if session is None:
33
- session = await client.get_session(session_uid)
34
- return {
35
- "sessionUid": session_uid,
36
- "model": {
37
- "provider": session.active_provider,
38
- "model": session.active_model,
39
- "thinkingLevel": session.active_thinking,
40
- **({"customId": session.custom_id} if session.custom_id is not None else {}),
41
- },
42
- }
51
+ try:
52
+ session = await require_session_access(client, session_uid)
53
+ if session is None:
54
+ session = await client.get_session(session_uid)
55
+ except SessionNotFoundError:
56
+ if not config.local_mode:
57
+ raise
58
+ # A local session is created by its first turn or model selection. Until then it reports
59
+ # the configured model it would start on.
60
+ return _session_model(
61
+ session_uid,
62
+ provider=config.local_provider,
63
+ model=config.local_model,
64
+ thinking_level=config.local_thinking,
65
+ custom_id=config.local_custom_id,
66
+ )
67
+ return _session_model(
68
+ session_uid,
69
+ provider=session.active_provider,
70
+ model=session.active_model,
71
+ thinking_level=session.active_thinking,
72
+ custom_id=session.custom_id,
73
+ )
43
74
 
44
75
 
45
76
  @router.get("/model-providers")
@@ -72,15 +103,13 @@ async def select_session_model(
72
103
  **({"custom_id": body.custom_id} if body.custom_id is not None else {}),
73
104
  )
74
105
  session = await manager.backend.get_session(session_uid)
75
- return {
76
- "sessionUid": session_uid,
77
- "model": {
78
- "provider": session.active_provider,
79
- "model": session.active_model,
80
- "thinkingLevel": session.active_thinking,
81
- **({"customId": session.custom_id} if session.custom_id is not None else {}),
82
- },
83
- }
106
+ return _session_model(
107
+ session_uid,
108
+ provider=session.active_provider,
109
+ model=session.active_model,
110
+ thinking_level=session.active_thinking,
111
+ custom_id=session.custom_id,
112
+ )
84
113
 
85
114
 
86
115
  @router.post("/session/cancel")