diff --git a/README.md b/README.md index e8c30aa..75b1bb8 100644 --- a/README.md +++ b/README.md @@ -54,11 +54,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.2.22 +## Current Status — v0.2.23 **Active build — this project is barely working. Experiment at your own risk.** -> Last release update: v0.2.22 — Improve markdown context documentation and skill authoring guidance: document context debug snapshot formats, clarify role-marker defaults, enrich skill_create/skill_edit tool schema guidance for markdown skills, and update tool docs examples +> Last release update: v0.2.23 — Improve skill authoring guidance and context viewing workflow: enrich skill_create/skill_edit schema descriptions for markdown content, role markers, template variables, and trigger/filter pairing; add external Anvil context.logs viewer assets (index.html + watch_context.sh) for Live Server markdown-to-HTML monitoring without Didactyl runtime changes - 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/main.h b/src/main.h index 96fb2a1..2a9b2fc 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 2 -#define DIDACTYL_VERSION_PATCH 22 -#define DIDACTYL_VERSION "v0.2.22" +#define DIDACTYL_VERSION_PATCH 23 +#define DIDACTYL_VERSION "v0.2.23" // Agent metadata #define DIDACTYL_NAME "Didactyl" diff --git a/src/tools/tools_schema.c b/src/tools/tools_schema.c index c2bcadb..2655e1b 100644 --- a/src/tools/tools_schema.c +++ b/src/tools/tools_schema.c @@ -754,7 +754,7 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON_AddStringToObject(t22, "type", "function"); cJSON_AddStringToObject(t22_fn, "name", "skill_create"); - cJSON_AddStringToObject(t22_fn, "description", "Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it. Write content as markdown context instructions: use role markers (system:/user:/assistant:) at line start when needed; unmarked content defaults to system. The runtime owns document H1 and will bump skill headings down one level, so prefer ## for top-level sections in skill content."); + cJSON_AddStringToObject(t22_fn, "description", "Create or update a skill definition as kind 31123/31124 and optionally auto-adopt it. Write content as markdown context instructions: use role markers (system:/user:/assistant:) at line start when needed; unmarked content defaults to system. The runtime owns document H1 and will bump skill headings down one level, so prefer ## for top-level sections in skill content. For auto-run behavior, set trigger + filter together."); cJSON_AddStringToObject(t22_params, "type", "object"); cJSON_AddItemToObject(t22_params, "properties", t22_props); cJSON_AddItemToObject(t22_params, "required", t22_required); @@ -766,7 +766,7 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON_AddStringToObject(p_skill_create_content, "type", "string"); cJSON_AddStringToObject(p_skill_create_content, "description", - "Markdown template for the skill body. May include role markers at line start (system:/user:/assistant:), markdown headings/lists/code fences, and template variables like {{message}} or {{skill_d_tag}}. Unmarked content defaults to system. Runtime will prepend document title and bump headings one level."); + "Markdown template for the skill body. May include role markers at line start (system:/user:/assistant:), markdown headings/lists/code fences, and template variables like {{message}}, {{dm_history}}, {{agent_identity}}, {{admin_profile}}, or {{skill_d_tag}} references. Unmarked content defaults to system. Runtime prepends document title and bumps headings one level."); cJSON_AddItemToObject(t22_props, "content", p_skill_create_content); cJSON* p_skill_create_scope = cJSON_CreateObject(); cJSON_AddStringToObject(p_skill_create_scope, "type", "string"); @@ -780,10 +780,16 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON* p_skill_create_trigger = cJSON_CreateObject(); cJSON_AddStringToObject(p_skill_create_trigger, "type", "string"); + cJSON_AddStringToObject(p_skill_create_trigger, + "description", + "Optional auto-run trigger. Must be one of: dm, cron, nostr-subscription, webhook, chain. If provided, filter is also required."); cJSON_AddItemToObject(t22_props, "trigger", p_skill_create_trigger); cJSON* p_skill_create_filter = cJSON_CreateObject(); cJSON_AddStringToObject(p_skill_create_filter, "type", "string"); + cJSON_AddStringToObject(p_skill_create_filter, + "description", + "Trigger-specific filter string. Required when trigger is provided. Examples: dm=>{\"from\":\"admin\"}, cron=>\"0 12 * * *\", chain=>\"source_d_tag\", webhook=>\"{}\", nostr-subscription=>JSON filter."); cJSON_AddItemToObject(t22_props, "filter", p_skill_create_filter); cJSON* p_skill_create_action = cJSON_CreateObject(); @@ -996,7 +1002,7 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON_AddStringToObject(t25b, "type", "function"); cJSON_AddStringToObject(t25b_fn, "name", "skill_edit"); - cJSON_AddStringToObject(t25b_fn, "description", "Edit an existing self skill by d tag and republish it as kind 31123/31124. Keep skill content markdown-first with optional role markers (system:/user:/assistant:) at line start; unmarked content defaults to system. Runtime owns H1 and bumps skill headings down one level."); + cJSON_AddStringToObject(t25b_fn, "description", "Edit an existing self skill by d tag and republish it as kind 31123/31124. Keep skill content markdown-first with optional role markers (system:/user:/assistant:) at line start; unmarked content defaults to system. Runtime owns H1 and bumps skill headings down one level. For triggered skills, update trigger and filter together."); cJSON_AddStringToObject(t25b_params, "type", "object"); cJSON_AddItemToObject(t25b_params, "properties", t25b_props); cJSON_AddItemToObject(t25b_params, "required", t25b_required); @@ -1009,7 +1015,7 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON_AddStringToObject(p_skill_edit_content, "type", "string"); cJSON_AddStringToObject(p_skill_edit_content, "description", - "Replacement markdown template for this skill. Supports role markers (system:/user:/assistant:) at line start, markdown structure, and template variables ({{...}}). If omitted, existing content is retained."); + "Replacement markdown template for this skill. Supports role markers (system:/user:/assistant:) at line start, markdown structure, and template variables such as {{message}}, {{dm_history}}, {{agent_identity}}, {{admin_profile}}, and {{skill_d_tag}} references. If omitted, existing content is retained."); cJSON_AddItemToObject(t25b_props, "content", p_skill_edit_content); cJSON* p_skill_edit_scope = cJSON_CreateObject(); @@ -1022,10 +1028,16 @@ char* tools_build_openai_schema_json_legacy(const tools_context_t* ctx) { cJSON* p_skill_edit_trigger = cJSON_CreateObject(); cJSON_AddStringToObject(p_skill_edit_trigger, "type", "string"); + cJSON_AddStringToObject(p_skill_edit_trigger, + "description", + "Optional trigger update. Valid values: dm, cron, nostr-subscription, webhook, chain. Must be paired with filter update when changing trigger config."); cJSON_AddItemToObject(t25b_props, "trigger", p_skill_edit_trigger); cJSON* p_skill_edit_filter = cJSON_CreateObject(); cJSON_AddStringToObject(p_skill_edit_filter, "type", "string"); + cJSON_AddStringToObject(p_skill_edit_filter, + "description", + "Trigger-specific filter update. Use with trigger. Examples: dm=>{\"from\":\"admin\"}, cron=>\"0 12 * * *\", chain=>\"source_d_tag\", webhook=>\"{}\", nostr-subscription=>JSON filter."); cJSON_AddItemToObject(t25b_props, "filter", p_skill_edit_filter); cJSON* p_skill_edit_action = cJSON_CreateObject();