ms-tau-sdk 1.2.9.dev17__tar.gz → 1.2.10.dev18__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 (74) hide show
  1. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/CHANGELOG.md +8 -0
  2. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/PKG-INFO +1 -1
  3. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/pyproject.toml +1 -1
  4. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/a2a.py +48 -22
  5. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/.gitignore +0 -0
  6. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/README.md +0 -0
  7. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  8. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  9. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  10. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  11. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  12. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  13. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  14. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  15. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  16. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  17. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  18. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  19. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  20. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/__init__.py +0 -0
  21. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  22. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  23. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +0 -0
  24. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  25. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/__init__.py +0 -0
  26. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/chat.py +0 -0
  27. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/dependencies.py +0 -0
  28. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/health.py +0 -0
  29. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/inspection.py +0 -0
  30. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/models.py +0 -0
  31. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/api/sessions.py +0 -0
  32. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/app.py +0 -0
  33. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/application.py +0 -0
  34. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/__init__.py +0 -0
  35. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/auth.py +0 -0
  36. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/client.py +0 -0
  37. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/local.py +0 -0
  38. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/mcp.py +0 -0
  39. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/models.py +0 -0
  40. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/backend/routes.py +0 -0
  41. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/cli.py +0 -0
  42. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/errors.py +0 -0
  43. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/logging.py +0 -0
  44. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  45. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  46. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  47. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  48. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  49. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  50. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/providers/__init__.py +0 -0
  51. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/providers/definitions.py +0 -0
  52. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/providers/factory.py +0 -0
  53. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  54. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/resources/__init__.py +0 -0
  55. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/resources/loader.py +0 -0
  56. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  57. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  58. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  59. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/events.py +0 -0
  60. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  61. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/failures.py +0 -0
  62. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/manager.py +0 -0
  63. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/observability.py +0 -0
  64. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  65. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/session.py +0 -0
  66. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  67. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  68. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  69. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/sessions/storage.py +0 -0
  70. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/settings.py +0 -0
  71. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/skills.py +0 -0
  72. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/tools/__init__.py +0 -0
  73. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  74. {ms_tau_sdk-1.2.9.dev17 → ms_tau_sdk-1.2.10.dev18}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.10 — 2026-09-26
4
+
5
+ - Restored the managed A2A Task creation and continuation adapter removed before the 1.2.9
6
+ release. It sends Django's required snake_case `message_id` and `reference_task_ids` fields
7
+ and omits empty `extensions`, which the backend defaults. Local Task messages retain the
8
+ complete A2A binding shape. A nonempty extension URI list on a managed Task returns HTTP 400
9
+ until the backend can persist it. A clean-wheel check now guards this contract. Fixes #42.
10
+
3
11
  ## 1.2.9 — 2026-09-26
4
12
 
5
13
  - Added bounded A2A Task Message history with hard-cut A2A v1 role projection, canonical durable
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 1.2.9.dev17
3
+ Version: 1.2.10.dev18
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 = "1.2.9.dev17"
7
+ version = "1.2.10.dev18"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -783,15 +783,53 @@ async def _collect_validated_turn(
783
783
  raise AssertionError("strict JSON repair loop did not terminate")
784
784
 
785
785
 
786
+ def _task_message_for_backend(
787
+ message: dict[str, Any],
788
+ *,
789
+ context_id: str,
790
+ task_id: str,
791
+ local_mode: bool,
792
+ ) -> dict[str, Any]:
793
+ extensions = message.get("extensions", [])
794
+ if local_mode:
795
+ return {
796
+ "messageId": message["messageId"],
797
+ "contextId": context_id,
798
+ "taskId": task_id,
799
+ "role": A2AMessageDirection.REQUESTER.value,
800
+ "parts": message["parts"],
801
+ "metadata": message.get("metadata", {}),
802
+ "extensions": extensions,
803
+ "referenceTaskIds": message.get("referenceTaskIds", []),
804
+ }
805
+ if extensions:
806
+ raise HTTPException(
807
+ status_code=400,
808
+ detail="message.extensions is not supported for managed Tasks",
809
+ )
810
+ # Django's AgentTaskInitialMessageSerializer requires message_id and defaults
811
+ # optional extensions. Omission works with both its dictionary and URI-list forms.
812
+ return {
813
+ "message_id": message["messageId"],
814
+ "parts": message["parts"],
815
+ "metadata": message.get("metadata", {}),
816
+ "reference_task_ids": message.get("referenceTaskIds", []),
817
+ }
818
+
819
+
786
820
  async def _create_backend_task(
787
821
  client: MainSequenceClient,
788
822
  *,
789
823
  message: dict[str, Any],
790
824
  task_id: str,
825
+ local_mode: bool,
791
826
  output_contract: StrictJsonContract | None = None,
792
827
  provenance: TurnProvenance | None = None,
793
828
  ) -> AgentTaskCreateResult:
794
829
  context_id = str(message["contextId"])
830
+ initial_message = _task_message_for_backend(
831
+ message, context_id=context_id, task_id=task_id, local_mode=local_mode
832
+ )
795
833
  session = await client.get_session(context_id)
796
834
  if not session.agent_uid:
797
835
  raise HTTPException(status_code=409, detail="Session has no bound agent")
@@ -801,16 +839,7 @@ async def _create_backend_task(
801
839
  "agent_session_uid": context_id,
802
840
  "context_id": context_id,
803
841
  "task_id": task_id,
804
- "initial_message": {
805
- "messageId": message["messageId"],
806
- "contextId": context_id,
807
- "taskId": task_id,
808
- "role": A2AMessageDirection.REQUESTER.value,
809
- "parts": message["parts"],
810
- "metadata": message.get("metadata", {}),
811
- "extensions": message.get("extensions", []),
812
- "referenceTaskIds": message.get("referenceTaskIds", []),
813
- },
842
+ "initial_message": initial_message,
814
843
  "metadata": {
815
844
  "transport": "a2a",
816
845
  "execution": {
@@ -2205,19 +2234,13 @@ async def message_send(
2205
2234
  detail="A Task continuation requires configuration.responseKind 'task'",
2206
2235
  )
2207
2236
  existing_task = await client.get_task_by_protocol_id(continuation_task_id)
2208
- task = await client.continue_task(
2209
- existing_task.uid,
2210
- {
2211
- "messageId": message["messageId"],
2212
- "contextId": existing_task.context_id,
2213
- "taskId": existing_task.task_id,
2214
- "role": A2AMessageDirection.REQUESTER.value,
2215
- "parts": message["parts"],
2216
- "metadata": message.get("metadata", {}),
2217
- "extensions": message.get("extensions", []),
2218
- "referenceTaskIds": message.get("referenceTaskIds", []),
2219
- },
2237
+ continued_message = _task_message_for_backend(
2238
+ message,
2239
+ context_id=existing_task.context_id,
2240
+ task_id=existing_task.task_id,
2241
+ local_mode=config.local_mode,
2220
2242
  )
2243
+ task = await client.continue_task(existing_task.uid, continued_message)
2221
2244
  if config.local_mode:
2222
2245
  task = await _persist_local_recovery_contract(
2223
2246
  client,
@@ -2251,6 +2274,7 @@ async def message_send(
2251
2274
  client,
2252
2275
  message=message,
2253
2276
  task_id=_task_id(body),
2277
+ local_mode=config.local_mode,
2254
2278
  output_contract=output_contract,
2255
2279
  provenance=provenance,
2256
2280
  )
@@ -2348,6 +2372,7 @@ async def message_stream(
2348
2372
  client,
2349
2373
  message=message,
2350
2374
  task_id=_task_id(body),
2375
+ local_mode=config.local_mode,
2351
2376
  output_contract=output_contract,
2352
2377
  provenance=provenance,
2353
2378
  )
@@ -2571,6 +2596,7 @@ async def json_rpc(
2571
2596
  client,
2572
2597
  message=message,
2573
2598
  task_id=_task_id(params),
2599
+ local_mode=config.local_mode,
2574
2600
  output_contract=output_contract,
2575
2601
  provenance=provenance,
2576
2602
  )