@sonenta/mcp 0.28.0 → 0.29.0
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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sonenta/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "MCP server for Sonenta translation management \u2014 wires Claude Desktop and other MCP clients into your project's keys, missing-key feed, and translation drafts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://sonenta.com",
|
|
Binary file
|
package/python/pyproject.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sonenta-mcp"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.29.0"
|
|
4
4
|
description = "Model Context Protocol server for Sonenta — list projects, missing keys, propose translations from Claude Desktop and other MCP clients."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.14"
|
|
@@ -89,6 +89,29 @@ from .client import VerbumiaApiError, VerbumiaClient
|
|
|
89
89
|
# visible text. `surfaceKinds` in the variants matrix tags each as a11y.
|
|
90
90
|
A11Y_SURFACES = ("aria_label", "alt_text", "screen_reader", "plain_language")
|
|
91
91
|
|
|
92
|
+
# RS1 (task 1367): audit trail of code edits an agent made while resolving a
|
|
93
|
+
# duplicate group — passed on set_source_duplicate_merge_plan / set_duplicate_status,
|
|
94
|
+
# persisted + surfaced in resolved_duplicates[]. Supplying it overwrites; omitting
|
|
95
|
+
# preserves the prior value.
|
|
96
|
+
_FILES_MODIFIED_SCHEMA = {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"description": (
|
|
99
|
+
"Optional audit trail of the code edits you made (e.g. t() repoints) while "
|
|
100
|
+
"resolving this group: each {path (required), line?, key_name?}. Supplying it "
|
|
101
|
+
"overwrites the stored record; omit to preserve the prior value."
|
|
102
|
+
),
|
|
103
|
+
"items": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"properties": {
|
|
106
|
+
"path": {"type": "string", "description": "Repo-relative file path that was edited."},
|
|
107
|
+
"line": {"type": "integer", "description": "Optional 1-based line number of the edit."},
|
|
108
|
+
"key_name": {"type": "string", "description": "Optional key (namespace::name or name) the edit concerns."},
|
|
109
|
+
},
|
|
110
|
+
"required": ["path"],
|
|
111
|
+
"additionalProperties": False,
|
|
112
|
+
},
|
|
113
|
+
}
|
|
114
|
+
|
|
92
115
|
# Key semantic types (a11y key.type pivot). Default "text". The type decides
|
|
93
116
|
# which a11y treatments a key offers (e.g. an `image` key's base value IS its
|
|
94
117
|
# alt text; a `button` offers aria_label) — the engine gates variant/a11y tools
|
|
@@ -2158,6 +2181,7 @@ def register(server: Server, client: VerbumiaClient) -> tuple[Any, Any]:
|
|
|
2158
2181
|
"type": "string",
|
|
2159
2182
|
"description": "Optional human/agent note recording why the status was set (audit trail).",
|
|
2160
2183
|
},
|
|
2184
|
+
"files_modified": _FILES_MODIFIED_SCHEMA,
|
|
2161
2185
|
},
|
|
2162
2186
|
"required": ["source_value", "status"],
|
|
2163
2187
|
"additionalProperties": False,
|
|
@@ -2217,6 +2241,7 @@ def register(server: Server, client: VerbumiaClient) -> tuple[Any, Any]:
|
|
|
2217
2241
|
},
|
|
2218
2242
|
},
|
|
2219
2243
|
},
|
|
2244
|
+
"files_modified": _FILES_MODIFIED_SCHEMA,
|
|
2220
2245
|
},
|
|
2221
2246
|
"required": ["source_value"],
|
|
2222
2247
|
"additionalProperties": False,
|
|
@@ -2975,6 +3000,8 @@ def register(server: Server, client: VerbumiaClient) -> tuple[Any, Any]:
|
|
|
2975
3000
|
}
|
|
2976
3001
|
if args.get("note"):
|
|
2977
3002
|
body["note"] = args["note"]
|
|
3003
|
+
if args.get("files_modified"):
|
|
3004
|
+
body["files_modified"] = args["files_modified"]
|
|
2978
3005
|
data = await client.put(
|
|
2979
3006
|
f"/v1/mcp/projects/{project_uuid}/source-duplicates/status",
|
|
2980
3007
|
json=body,
|
|
@@ -2989,6 +3016,8 @@ def register(server: Server, client: VerbumiaClient) -> tuple[Any, Any]:
|
|
|
2989
3016
|
# whenever the key is present at all.
|
|
2990
3017
|
if "merge_plan" in args:
|
|
2991
3018
|
body["merge_plan"] = args["merge_plan"]
|
|
3019
|
+
if args.get("files_modified"):
|
|
3020
|
+
body["files_modified"] = args["files_modified"]
|
|
2992
3021
|
data = await client.put(
|
|
2993
3022
|
f"/v1/mcp/projects/{project_uuid}/source-duplicates/merge-plan",
|
|
2994
3023
|
json=body,
|
|
Binary file
|