From 05c8e0a31a0d4192c590e833b24393208e1c751f Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Tue, 30 Jun 2026 19:03:25 +0900 Subject: fix: MCPCをvendored fork化しMCP準拠と接続安定性を改善 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Git submoduleを廃止してMCPCを直接管理 - Windowsで254リクエスト付近に発生する切断を修正 - JSON-RPC 2.0エラー応答を標準化 - tool schemaとruntimeの必須・任意引数を一致 - 1000回連続呼び出しの回帰テストを追加 --- third_party/mcpc/src/anydata.h | 225 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 third_party/mcpc/src/anydata.h (limited to 'third_party/mcpc/src/anydata.h') diff --git a/third_party/mcpc/src/anydata.h b/third_party/mcpc/src/anydata.h new file mode 100644 index 0000000..1188e05 --- /dev/null +++ b/third_party/mcpc/src/anydata.h @@ -0,0 +1,225 @@ +// This file is part of the mcpc library. +// +// Copyright (C) 2025 Michael Lee +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef h_anydata +#define h_anydata + +#include + +#include "ext_stdint.h" + +#include +#include + +#include +#include + +// ---------------------------- anydata ---------------------------- + +#ifdef MCPC_C23GIVUP_FIXENUM +enum mcpc_anydata_flags +#else +enum mcpc_anydata_flags:u16_t +#endif +{ + ANYDATA_FL_REQUIRED = 1 << 0, + ANYDATA_FL_TOOL = 1 << 1, + ANYDATA_FL_TOOLPROP = 1 << 2, + ANYDATA_FL_RSC = 1 << 3, + ANYDATA_FL_PRMPT = 1 << 4, + ANYDATA_FL_PRMPTARG = 1 << 5, + ANYDATA_FL_USRCBRES_TOOLCALL = 1 << 6, + ANYDATA_FL_USRCBRES_TOOLCALL_TXTCTN = 1 << 7, + ANYDATA_FL_USRCBRES_TOOLCALL_IMGCTN = 1 << 8, + ANYDATA_FL_USRCBRES_PRMPTCALL = 1 << 9, + ANYDATA_FL_USRCBRES_PRMPTCALL_ASSIST = 1 << 10, + ANYDATA_FL_COMPLT = 1 << 11, + ANYDATA_FL_PRMPTARGHINT = 1 << 12, + ANYDATA_FL_PRESENT = 1 << 13, +}; +typedef enum mcpc_anydata_flags mcpc_anydata_flags_t; + +struct mcpc_anydata +{ + u8_t meta1_len; + mcpc_mime_t data_mime; + mcpc_anytype_t data_typ; + mcpc_anydata_flags_t flags; + u16_t meta2_len; + size_t data_len; + const char8_t *meta1; + const char8_t *meta2; + mcpc_anypool_t *chd_pool; + union + { + uintmax_t data_intlk; + uintptr_t *data_arrlk; + }; +}; + +mcpc_anydata_t *mcpc_anydata_new (); + +mcpc_anydata_t *mcpc_anydata_new_typ (mcpc_anytype_t typ); + +mcpc_anydata_t *mcpc_anydata_new_meta1_meta2 (const char8_t * meta1, + const size_t meta1_len, const char8_t * meta2, const size_t meta2_len); + +mcpc_anydata_t *mcpc_anydata_new_meta1nt_meta2nt (const char8_t * meta1nt, const char8_t * meta2nt); + +mcpc_anydata_t *mcpc_anydata_new_typ_meta1 (mcpc_anytype_t typ, const char8_t * meta1, const size_t meta1_len); + +mcpc_anydata_t *mcpc_anydata_new_typ_meta1_meta2 (mcpc_anytype_t typ, + const char8_t * meta1, + const size_t meta1_len, const char8_t * meta2, + const size_t meta2_len); + +mcpc_anydata_t *mcpc_anydata_new_typ_meta1nt_meta2nt (mcpc_anytype_t typ, + const char8_t * meta1nt, const char8_t * meta2nt); + +void mcpc_anydata_free (mcpc_anydata_t * data); + +void mcpc_anydata_copy (mcpc_anydata_t * dest_data, const mcpc_anydata_t * src_data); + +mcpc_errcode_t mcpc_anydata_set_meta1nt (mcpc_anydata_t * anydata, const char8_t * meta1); + +mcpc_errcode_t mcpc_anydata_set_i8 (mcpc_anydata_t * anydata, i8_t val); + +mcpc_errcode_t mcpc_anydata_set_u8 (mcpc_anydata_t * anydata, u8_t val); + +mcpc_errcode_t mcpc_anydata_set_i16 (mcpc_anydata_t * anydata, i16_t val); + +mcpc_errcode_t mcpc_anydata_set_u16 (mcpc_anydata_t * anydata, u16_t val); + +mcpc_errcode_t mcpc_anydata_set_i32 (mcpc_anydata_t * anydata, i32_t val); + +mcpc_errcode_t mcpc_anydata_set_u32 (mcpc_anydata_t * anydata, u32_t val); + +mcpc_errcode_t mcpc_anydata_set_i64 (mcpc_anydata_t * anydata, i64_t val); + +mcpc_errcode_t mcpc_anydata_set_u64 (mcpc_anydata_t * anydata, u64_t val); + +mcpc_errcode_t mcpc_anydata_set_func (mcpc_anydata_t * anydata, void *val); + +mcpc_errcode_t mcpc_anydata_get_i8 (const mcpc_anydata_t * anydata, i8_t * ret); + +mcpc_errcode_t mcpc_anydata_get_u8 (const mcpc_anydata_t * anydata, u8_t * ret); + +mcpc_errcode_t mcpc_anydata_get_i16 (const mcpc_anydata_t * anydata, i16_t * ret); + +mcpc_errcode_t mcpc_anydata_get_u16 (const mcpc_anydata_t * anydata, u16_t * ret); + +mcpc_errcode_t mcpc_anydata_get_i32 (const mcpc_anydata_t * anydata, i32_t * ret); + +mcpc_errcode_t mcpc_anydata_get_u32 (const mcpc_anydata_t * anydata, u32_t * ret); + +mcpc_errcode_t mcpc_anydata_get_i64 (const mcpc_anydata_t * anydata, i64_t * ret); + +mcpc_errcode_t mcpc_anydata_get_u64 (const mcpc_anydata_t * anydata, u64_t * ret); + +mcpc_errcode_t mcpc_anydata_get_func (const mcpc_anydata_t * anydata, void *ret); + +mcpc_errcode_t mcpc_anydata_set_i8s (mcpc_anydata_t * anydata, const i8_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_u8s (mcpc_anydata_t * anydata, const u8_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_i16s (mcpc_anydata_t * anydata, const i16_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_u16s (mcpc_anydata_t * anydata, const u16_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_i32s (mcpc_anydata_t * anydata, const i32_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_u32s (mcpc_anydata_t * anydata, const u32_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_i64s (mcpc_anydata_t * anydata, const i64_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_u64s (mcpc_anydata_t * anydata, const u64_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_set_u8str (mcpc_anydata_t * anydata, const char8_t * arr, size_t arr_len); + +mcpc_errcode_t mcpc_anydata_get_i8s (const mcpc_anydata_t * anydata, i8_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_u8s (const mcpc_anydata_t * anydata, u8_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_i16s (const mcpc_anydata_t * anydata, i16_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_u16s (const mcpc_anydata_t * anydata, u16_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_i32s (const mcpc_anydata_t * anydata, i32_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_u32s (const mcpc_anydata_t * anydata, u32_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_i64s (const mcpc_anydata_t * anydata, i64_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_u64s (const mcpc_anydata_t * anydata, u64_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_get_u8str (const mcpc_anydata_t * anydata, char8_t * ret, size_t ret_cap, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_getref_u8str (const mcpc_anydata_t * anydata, const char8_t ** ret, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_getref_meta1 (const mcpc_anydata_t * anydata, const char8_t ** ret, size_t *ret_len); + +mcpc_errcode_t mcpc_anydata_getref_meta2 (const mcpc_anydata_t * anydata, const char8_t ** ret, size_t *ret_len); + +const mcpc_anydata_t *mcpc_anydata_get_child (const mcpc_anydata_t * anydata, size_t idx); + +void mcpc_anydata_add_child (mcpc_anydata_t * data, mcpc_anydata_t * child); + +void mcpc_anydata_addcpy_child (mcpc_anydata_t * data, const mcpc_anydata_t * child); + +// ---------------------------- anypool ---------------------------- + +#ifdef MCPC_C23GIVUP_FIXENUM +enum mcpc_anypool_flags +#else +enum mcpc_anypool_flags:u16_t +#endif +{ + ANYPOOL_FL_USRCBRES_TOOLCALL = 1 << 0, + ANYPOOL_FL_USRCBRES_TOOLCALL_ERROR = 1 << 1, + ANYPOOL_FL_USRCBRES_PRMPTCALL = 1 << 2, +}; +typedef enum mcpc_anypool_flags mcpc_anypool_flags_t; + +struct mcpc_anypool +{ + mcpc_anypool_flags_t flags; + size_t cap; + size_t len; + const mcpc_anydata_t *head; +}; + +const mcpc_anydata_t *mcpc_anypool_get (const mcpc_anypool_t * anypool, size_t idx); + +const mcpc_anydata_t *mcpc_anypool_getbymeta1 (const mcpc_anypool_t * anypool, const char8_t * meta1, size_t meta1_len); + +const mcpc_anydata_t *mcpc_anypool_getbymeta1nt (const mcpc_anypool_t * pool, const char8_t * meta1nt); + +mcpc_anypool_t *mcpc_anypool_new (); + +void mcpc_anypool_free (mcpc_anypool_t * anypool); + +void mcpc_anypool_copy (mcpc_anypool_t * dest_pool, const mcpc_anypool_t * src_pool); + +void mcpc_anypool_addfre (mcpc_anypool_t * anypool, mcpc_anydata_t * tmp_data); + +void mcpc_anypool_addcpy (mcpc_anypool_t * anypool, const mcpc_anydata_t * tmp_data); + +#endif -- cgit v1.2.3