From 49d172cfff01f287633fcee226d228b9ccacbc66 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 18 Mar 2026 16:48:04 -0400 Subject: [PATCH] v0.0.84 - Remove duplicated read-only tool payload fields and make slash output prefer content --- README.md | 4 ++-- src/agent.c | 20 +++++++++++++++++--- src/http_api.c | 11 ++++++++--- src/main.h | 4 ++-- src/tools/tool_admin.c | 6 ------ src/tools/tool_agent.c | 8 -------- 6 files changed, 29 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 42ea068..8a74053 100644 --- a/README.md +++ b/README.md @@ -55,11 +55,11 @@ Skills compose by adoption-list order (`10123`) and trigger tags carry runtime e Didactyl will support local inference, which is very privacy preserving. Remote inference does however have it's advantages, and in those cases Didactyl supports using Bitcoin Lightning and eCash inference providers. -## Current Status — v0.0.83 +## Current Status — v0.0.84 **Active build — this project is barely working. Experiment at your own risk.** -> Last release update: v0.0.83 — Add my_kind0_profile cache-miss fallback to query kind-0 from relays and cache result +> Last release update: v0.0.84 — Remove duplicated read-only tool payload fields and make slash output prefer content - Connects to configured relays with auto-reconnect and relay state transition logging - Publishes configured startup events per relay as each relay becomes connected diff --git a/src/agent.c b/src/agent.c index 2fac31e..ec211c0 100644 --- a/src/agent.c +++ b/src/agent.c @@ -437,6 +437,15 @@ static char* format_result_markdown_local(const char* raw_result) { return strdup(raw_result); } + if (cJSON_IsObject(root)) { + cJSON* content = cJSON_GetObjectItemCaseSensitive(root, "content"); + if (content && cJSON_IsString(content) && content->valuestring) { + char* direct = strdup(content->valuestring); + cJSON_Delete(root); + return direct ? direct : strdup(raw_result); + } + } + size_t cap = strlen(raw_result) * 2U + 512U; if (cap < 2048U) cap = 2048U; size_t used = 0U; @@ -574,10 +583,15 @@ static char* build_slash_help_all_json(void) { char* adopted_json = tools_execute(&g_tools_ctx, "adopted_skills", "{}"); cJSON* adopted_root = adopted_json ? cJSON_Parse(adopted_json) : NULL; + cJSON* adoption_events_content = adopted_root ? cJSON_GetObjectItemCaseSensitive(adopted_root, "content") : NULL; cJSON* adoption_events_json = adopted_root ? cJSON_GetObjectItemCaseSensitive(adopted_root, "adoption_events_json") : NULL; - cJSON* adoption_events = (adoption_events_json && cJSON_IsString(adoption_events_json) && adoption_events_json->valuestring) - ? cJSON_Parse(adoption_events_json->valuestring) - : NULL; + const char* adoption_events_text = NULL; + if (adoption_events_content && cJSON_IsString(adoption_events_content) && adoption_events_content->valuestring) { + adoption_events_text = adoption_events_content->valuestring; + } else if (adoption_events_json && cJSON_IsString(adoption_events_json) && adoption_events_json->valuestring) { + adoption_events_text = adoption_events_json->valuestring; + } + cJSON* adoption_events = adoption_events_text ? cJSON_Parse(adoption_events_text) : NULL; int adopted_count = 0; if (adoption_events && cJSON_IsArray(adoption_events) && cJSON_GetArraySize(adoption_events) > 0) { diff --git a/src/http_api.c b/src/http_api.c index cc75ab5..f3b72d9 100644 --- a/src/http_api.c +++ b/src/http_api.c @@ -726,10 +726,15 @@ static char* build_slash_help_all_json_local(void) { char* adopted_json = tools_execute(g_api_ctx.tools_ctx, "adopted_skills", "{}"); cJSON* adopted_root = adopted_json ? cJSON_Parse(adopted_json) : NULL; + cJSON* adoption_events_content = adopted_root ? cJSON_GetObjectItemCaseSensitive(adopted_root, "content") : NULL; cJSON* adoption_events_json = adopted_root ? cJSON_GetObjectItemCaseSensitive(adopted_root, "adoption_events_json") : NULL; - cJSON* adoption_events = (adoption_events_json && cJSON_IsString(adoption_events_json) && adoption_events_json->valuestring) - ? cJSON_Parse(adoption_events_json->valuestring) - : NULL; + const char* adoption_events_text = NULL; + if (adoption_events_content && cJSON_IsString(adoption_events_content) && adoption_events_content->valuestring) { + adoption_events_text = adoption_events_content->valuestring; + } else if (adoption_events_json && cJSON_IsString(adoption_events_json) && adoption_events_json->valuestring) { + adoption_events_text = adoption_events_json->valuestring; + } + cJSON* adoption_events = adoption_events_text ? cJSON_Parse(adoption_events_text) : NULL; int adopted_count = 0; if (adoption_events && cJSON_IsArray(adoption_events) && cJSON_GetArraySize(adoption_events) > 0) { diff --git a/src/main.h b/src/main.h index f62365a..bb542fe 100644 --- a/src/main.h +++ b/src/main.h @@ -12,8 +12,8 @@ // Using DIDACTYL_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define DIDACTYL_VERSION_MAJOR 0 #define DIDACTYL_VERSION_MINOR 0 -#define DIDACTYL_VERSION_PATCH 83 -#define DIDACTYL_VERSION "v0.0.83" +#define DIDACTYL_VERSION_PATCH 84 +#define DIDACTYL_VERSION "v0.0.84" // Agent metadata #define DIDACTYL_NAME "Didactyl" diff --git a/src/tools/tool_admin.c b/src/tools/tool_admin.c index 6155ef4..6a7157e 100644 --- a/src/tools/tool_admin.c +++ b/src/tools/tool_admin.c @@ -47,8 +47,6 @@ char* execute_admin_identity(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "admin_pubkey", ctx->cfg->admin.pubkey[0] ? ctx->cfg->admin.pubkey : "unknown"); - cJSON_AddStringToObject(out, "sender_verification", tier_text); char content[768]; snprintf(content, @@ -82,7 +80,6 @@ char* execute_nostr_admin_profile(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "admin_kind0_json", profile_json); size_t content_len = strlen("## Administrator Kind 0 Profile (source: nostr kind 0)\n\nAdministrator kind 0 profile content (JSON): ") + strlen(profile_json) + 1U; char* content = (char*)malloc(content_len); @@ -121,7 +118,6 @@ char* execute_nostr_admin_contacts(tools_context_t* ctx, const char* args_json) } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "admin_kind3_json", contacts_json); size_t content_len = strlen("## Administrator Kind 3 Contacts (source: nostr kind 3)\n\nAdministrator contacts (JSON): ") + strlen(contacts_json) + 1U; char* content = (char*)malloc(content_len); @@ -160,7 +156,6 @@ char* execute_nostr_admin_relays(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "admin_kind10002_json", relays_json); size_t content_len = strlen("## Administrator Kind 10002 Relays (source: nostr kind 10002)\n\nAdministrator relay list (JSON): ") + strlen(relays_json) + 1U; char* content = (char*)malloc(content_len); @@ -199,7 +194,6 @@ char* execute_nostr_admin_notes(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "admin_notes_content", notes_text); size_t content_len = strlen("## Administrator Recent Kind 1 Notes\n\n") + strlen(notes_text) + 1U; char* content = (char*)malloc(content_len); diff --git a/src/tools/tool_agent.c b/src/tools/tool_agent.c index 4d1ae16..f59c323 100644 --- a/src/tools/tool_agent.c +++ b/src/tools/tool_agent.c @@ -62,8 +62,6 @@ char* execute_agent_identity(tools_context_t* ctx, const char* args_json) { cJSON* out = cJSON_CreateObject(); if (!out) return NULL; cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "agent_pubkey", ctx->cfg->keys.public_key_hex[0] ? ctx->cfg->keys.public_key_hex : "unknown"); - cJSON_AddStringToObject(out, "agent_npub", npub); char content[384]; snprintf(content, @@ -95,7 +93,6 @@ char* execute_nostr_agent_profile(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "agent_kind0_json", profile_json); size_t content_len = strlen("## Agent Kind 0 Profile (source: nostr kind 0)\n\nAgent kind 0 profile content (JSON): ") + strlen(profile_json) + 1U; char* content = (char*)malloc(content_len); @@ -134,7 +131,6 @@ char* execute_nostr_agent_contacts(tools_context_t* ctx, const char* args_json) } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "agent_kind3_json", contacts_json); size_t content_len = strlen("## Agent Kind 3 Contacts (source: nostr kind 3)\n\nAgent contacts (JSON): ") + strlen(contacts_json) + 1U; char* content = (char*)malloc(content_len); @@ -173,7 +169,6 @@ char* execute_nostr_agent_relays(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "agent_kind10002_json", relays_json); size_t content_len = strlen("## Agent Kind 10002 Relays (source: nostr kind 10002)\n\nAgent relay list (JSON): ") + strlen(relays_json) + 1U; char* content = (char*)malloc(content_len); @@ -212,7 +207,6 @@ char* execute_nostr_agent_notes(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); - cJSON_AddStringToObject(out, "agent_notes_content", notes_text); size_t content_len = strlen("## Agent Recent Kind 1 Notes\n\n") + strlen(notes_text) + 1U; char* content = (char*)malloc(content_len); @@ -267,7 +261,6 @@ char* execute_adopted_skills(tools_context_t* ctx, const char* args_json) { } cJSON_AddBoolToObject(out, "success", 1); cJSON_AddStringToObject(out, "content", (events_json && events_json[0]) ? events_json : "[]"); - cJSON_AddStringToObject(out, "adoption_events_json", (events_json && events_json[0]) ? events_json : "[]"); char* json = cJSON_PrintUnformatted(out); cJSON_Delete(out); @@ -302,7 +295,6 @@ char* execute_trigger_event(tools_context_t* ctx, const char* args_json) { if (!out) return NULL; cJSON_AddBoolToObject(out, "success", 1); cJSON_AddStringToObject(out, "content", trigger_json); - cJSON_AddStringToObject(out, "trigger_event_json", trigger_json); char* json = cJSON_PrintUnformatted(out); cJSON_Delete(out); return json;