ms-tau-sdk 2.0.27.dev80__tar.gz → 2.0.28.dev82__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 (91) hide show
  1. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/CHANGELOG.md +22 -0
  2. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/PKG-INFO +1 -1
  3. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/pyproject.toml +1 -1
  4. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/providers/factory.py +5 -0
  5. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/.gitignore +0 -0
  6. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/README.md +0 -0
  7. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  8. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  9. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  10. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  11. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  12. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  13. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  14. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  15. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  16. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  17. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  18. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  19. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  20. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/__init__.py +0 -0
  21. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/design-agent-icons-and-motion/SKILL.md +0 -0
  22. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/design-agent-icons-and-motion/agents/openai.yaml +0 -0
  23. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/design-agent-icons-and-motion/references/metatables-example.html +0 -0
  24. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  25. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  26. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +0 -0
  27. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  28. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +0 -0
  29. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/__init__.py +0 -0
  30. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/a2a.py +0 -0
  31. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/chat.py +0 -0
  32. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/conversations.py +0 -0
  33. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/dependencies.py +0 -0
  34. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/health.py +0 -0
  35. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/inspection.py +0 -0
  36. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/local_chat.py +0 -0
  37. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/models.py +0 -0
  38. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/request_identity.py +0 -0
  39. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/api/sessions.py +0 -0
  40. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/app.py +0 -0
  41. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/application.py +0 -0
  42. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/__init__.py +0 -0
  43. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/assertions.py +0 -0
  44. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/auth.py +0 -0
  45. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/client.py +0 -0
  46. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/local.py +0 -0
  47. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/mcp.py +0 -0
  48. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/models.py +0 -0
  49. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/routes.py +0 -0
  50. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/backend/team_memberships.py +0 -0
  51. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/cli.py +0 -0
  52. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/errors.py +0 -0
  53. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/logging.py +0 -0
  54. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  55. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  56. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  57. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  58. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  59. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
  60. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  61. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/providers/__init__.py +0 -0
  62. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/providers/definitions.py +0 -0
  63. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
  64. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  65. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/resources/__init__.py +0 -0
  66. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/resources/context_compat.py +0 -0
  67. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/resources/loader.py +0 -0
  68. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  69. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  70. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  71. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/events.py +0 -0
  72. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  73. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/failures.py +0 -0
  74. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
  75. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/manager.py +0 -0
  76. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/observability.py +0 -0
  77. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  78. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/requester.py +0 -0
  79. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/session.py +0 -0
  80. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  81. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  82. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  83. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/sessions/storage.py +0 -0
  84. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/settings.py +0 -0
  85. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/skills.py +0 -0
  86. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/__init__.py +0 -0
  87. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  88. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
  89. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
  90. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/skill_read.py +0 -0
  91. {ms_tau_sdk-2.0.27.dev80 → ms_tau_sdk-2.0.28.dev82}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -2,6 +2,28 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - **Models that read images receive them on OpenAI-compatible, Google and Mistral providers
6
+ ([#121](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/121)).** The runtime built these
7
+ providers without telling Tau which models read images, and `tau-ai==0.4.2` then assumes that
8
+ none does: every image in a user message or a tool result, such as the image content of an MCP
9
+ tool result or Tau's `read` of an image file, was replaced by a note telling the model that the
10
+ image was unavailable. A model whose platform projection lists `image` in its input now receives
11
+ the image: an `image_url` part on Chat Completions (`openai-completions`), an `input_image` part
12
+ on Responses (`openai-responses`), and the image parts of the Google and Mistral APIs.
13
+ Organization custom providers and providers built from the platform's catalog definition, such
14
+ as Meta, follow the same rule. A text-only model still receives the note in place of the image.
15
+ The `tau-ai` pin and the ADR 0016 provider patch are unchanged.
16
+
17
+ - **Models that read images receive them on Anthropic Messages and OpenAI Codex providers
18
+ ([#123](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/123)).** These two transports had
19
+ the same gap: every image reached the model as the note saying it was unavailable. A model whose
20
+ platform projection lists `image` in its input now receives an `image` block on Anthropic
21
+ Messages, which serves Anthropic's Claude models and the other catalog models Tau routes to it,
22
+ such as GitHub Copilot's Claude models, and an `input_image` part on OpenAI Codex. A text-only
23
+ model still receives the note.
24
+
25
+ ## 2.0.27 — 2026-10-28
26
+
5
27
  - **Platform providers that this Tau release does not know run from the platform's catalog.**
6
28
  Beside each built-in provider credential, the platform now sends `catalog_definition`: the
7
29
  address and Tau compatibility settings its provider catalog publishes for the selected model.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 2.0.27.dev80
3
+ Version: 2.0.28.dev82
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.27.dev80"
7
+ version = "2.0.28.dev82"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -443,6 +443,8 @@ class ProviderFactory:
443
443
  ):
444
444
  mapped_thinking = model_metadata.thinking_level_map[normalized_thinking]
445
445
  api = provider_control.model.api
446
+ # Tau puts a placeholder in place of every image unless the model reads images.
447
+ supports_images = "image" in provider_control.model.input
446
448
  if outside_tau_catalog:
447
449
  if api not in CUSTOM_API_TRANSPORTS:
448
450
  raise ConfigurationError(
@@ -520,6 +522,7 @@ class ProviderFactory:
520
522
  headers=headers,
521
523
  timeout_seconds=timeout_seconds,
522
524
  reasoning_effort=mapped_thinking,
525
+ supports_images=supports_images,
523
526
  provider_name=credential.provider,
524
527
  )
525
528
  )
@@ -533,6 +536,7 @@ class ProviderFactory:
533
536
  provider_name=credential.provider,
534
537
  timeout_seconds=timeout_seconds,
535
538
  max_tokens=max_tokens,
539
+ supports_images=supports_images,
536
540
  thinking_budget_tokens=(
537
541
  anthropic_thinking_budget_for_level(normalized_thinking)
538
542
  if normalized_thinking is not None and mapped_thinking is not None
@@ -549,6 +553,7 @@ class ProviderFactory:
549
553
  provider_name=credential.provider,
550
554
  omit_authorization_header=is_custom_provider and not bool(secret),
551
555
  max_tokens=max_tokens,
556
+ supports_images=supports_images,
552
557
  timeout_seconds=timeout_seconds,
553
558
  reasoning_effort=mapped_thinking,
554
559
  reasoning_effort_parameter=(