Files
didactyl/src/trigger_manager.h
T

62 lines
2.1 KiB
C

#ifndef DIDACTYL_TRIGGER_MANAGER_H
#define DIDACTYL_TRIGGER_MANAGER_H
#include <pthread.h>
#include <time.h>
#include "config.h"
#include "../nostr_core_lib/nostr_core/nostr_core.h"
#define TRIGGER_DEFAULT_MAX_ACTIVE 16
#define TRIGGER_SKILL_SLUG_MAX 65
#define TRIGGER_SKILL_CONTENT_MAX 4096
#define TRIGGER_FILTER_JSON_MAX 2048
typedef enum {
TRIGGER_ACTION_LLM = 0,
TRIGGER_ACTION_TEMPLATE = 1
} trigger_action_type_t;
typedef struct {
char skill_slug[TRIGGER_SKILL_SLUG_MAX];
char skill_content[TRIGGER_SKILL_CONTENT_MAX];
char filter_json[TRIGGER_FILTER_JSON_MAX];
trigger_action_type_t action_type;
int enabled;
time_t last_fired;
time_t last_seen_created_at;
nostr_pool_subscription_t* subscription;
void* subscription_ctx;
} active_trigger_t;
typedef struct trigger_manager {
active_trigger_t* triggers;
int count;
int capacity;
didactyl_config_t* cfg;
pthread_mutex_t mutex;
time_t last_poll_at;
} trigger_manager_t;
int trigger_manager_init(trigger_manager_t* mgr, didactyl_config_t* cfg);
int trigger_manager_load_from_skills(trigger_manager_t* mgr);
int trigger_manager_load_from_startup_events(trigger_manager_t* mgr);
int trigger_manager_add(trigger_manager_t* mgr,
const char* skill_slug,
const char* content,
const char* filter_json,
trigger_action_type_t action_type,
int enabled);
int trigger_manager_remove(trigger_manager_t* mgr, const char* skill_slug);
int trigger_manager_update(trigger_manager_t* mgr,
const char* skill_slug,
const char* content,
const char* filter_json,
trigger_action_type_t action_type,
int enabled);
int trigger_manager_active_count(trigger_manager_t* mgr);
int trigger_manager_poll(trigger_manager_t* mgr);
char* trigger_manager_status_json(trigger_manager_t* mgr);
void trigger_manager_cleanup(trigger_manager_t* mgr);
#endif