summaryrefslogtreecommitdiff
path: root/src/mcp/tools/update_message.c
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-07-17 12:15:41 +0900
committertanaka takashi <isazaka@gmail.com>2026-07-17 12:15:41 +0900
commitd57577637c1c1a16176d63d5a89e9eec3c1e4d7c (patch)
tree55087498ab17601845446174a2f41f2490a53820 /src/mcp/tools/update_message.c
parentdda043b0ec9d8d9e5da7fe51fc48791086417a9b (diff)
fix: sessions paginationとhealth診断を改善
- sessions cursorのエンコード不具合と長いsession IDのバッファ問題を修正 - response budgetに基づくsessionsページングを追加 - get_system_healthにsession_countを追加 - metadata_jsonのフィールド別エラー診断を追加 - CRUD互換性とDebug/Release/ASanテストを確認
Diffstat (limited to 'src/mcp/tools/update_message.c')
-rw-r--r--src/mcp/tools/update_message.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/mcp/tools/update_message.c b/src/mcp/tools/update_message.c
index aca1bed..9b02a6f 100644
--- a/src/mcp/tools/update_message.c
+++ b/src/mcp/tools/update_message.c
@@ -22,6 +22,8 @@ call_update_message(const mcpc_tool_t *tool, mcpc_ucbr_t *result)
tiny_json_buffer_t json;
bool changed = false;
tiny_metadata_mask_t metadata_mask = 0;
+ const char *metadata_error = NULL;
+ tiny_metadata_parse_status_t metadata_status = TINY_METADATA_PARSE_OK;
tiny_message_init(&parsed);
tiny_message_init(&updated);
patch.content = content;
@@ -29,10 +31,22 @@ call_update_message(const mcpc_tool_t *tool, mcpc_ucbr_t *result)
patch.metadata_mask = 0;
patch.expected_revision = (uint64_t)expected;
patch.has_expected_revision = expected_status == MCPC_EC_0;
- if (!context || !message_id || (!content && !metadata_json)
- || (metadata_json && !tiny_mcp_parse_metadata(metadata_json, &parsed, &metadata_mask))
- || (expected_status != MCPC_EC_0 && expected_status != MCPC_EC_ANYDATA_NOTFOUND)
- || (patch.has_expected_revision && expected < 1))
+ if (metadata_json)
+ {
+ metadata_status
+ = tiny_mcp_parse_metadata(metadata_json, &parsed, &metadata_mask, &metadata_error);
+ }
+ if (metadata_status == TINY_METADATA_PARSE_NO_MEMORY)
+ {
+ tiny_mcp_tool_add_error(result, "INTERNAL_ERROR", metadata_error);
+ }
+ else if (metadata_status == TINY_METADATA_PARSE_INVALID)
+ {
+ tiny_mcp_tool_add_error(result, "VALIDATION_ERROR", metadata_error);
+ }
+ else if (!context || !message_id || (!content && !metadata_json)
+ || (expected_status != MCPC_EC_0 && expected_status != MCPC_EC_ANYDATA_NOTFOUND)
+ || (patch.has_expected_revision && expected < 1))
{
tiny_mcp_tool_add_error(result, "VALIDATION_ERROR", "invalid update_message arguments");
}