/* Thin C façade over cst_agent.h for the Tauri desktop host. */ #pragma once #include #ifdef __cplusplus extern "C" { #endif typedef void (*hermit_on_text_fn)(const char *text, size_t len, void *ud); typedef void (*hermit_on_tool_fn)(const char *phase, const char *id, const char *name, const char *detail, void *ud); typedef void (*hermit_on_tool_result_fn)(const char *id, const char *name, const char *out, size_t out_len, int exit_code, void *ud); typedef void (*hermit_on_todo_fn)(const char *text, void *ud); typedef void (*hermit_on_status_fn)(const char *msg, void *ud); /* Return CST_PERM_* . preview may be NULL. */ typedef int (*hermit_on_perm_fn)(const char *tool, const char *detail, const char *preview, void *ud); /* Fill ans; return 0 ok, -1 dismiss. options is CSV or JSON-ish string. */ typedef int (*hermit_on_ask_fn)(const char *question, const char *options, char *ans, size_t ans_sz, void *ud); typedef void (*hermit_on_turn_begin_fn)(const char *user_text, void *ud); typedef void (*hermit_on_turn_end_fn)(int rc, const char *err, void *ud); typedef void (*hermit_on_error_fn)(const char *kind, const char *message, void *ud); typedef struct { hermit_on_text_fn on_assistant; hermit_on_text_fn on_thought; hermit_on_tool_fn on_tool; hermit_on_tool_result_fn on_tool_result; hermit_on_todo_fn on_todo; hermit_on_status_fn on_status; hermit_on_perm_fn on_perm; hermit_on_ask_fn on_ask; hermit_on_turn_begin_fn on_turn_begin; hermit_on_turn_end_fn on_turn_end; hermit_on_error_fn on_error; void *ud; } hermit_hooks_t; void *hermit_agent_open(const char *workspace, const char *provider, const char *model, const char *approval, const char *api_key, const char *effort, char *err, size_t err_sz); void hermit_agent_close(void *agent); int hermit_agent_turn(void *agent, const char *user_text, const hermit_hooks_t *hooks, char *err, size_t err_sz); void hermit_agent_cancel(void *agent); int hermit_agent_set_workspace(void *agent, const char *path, char *err, size_t err_sz); int hermit_agent_new_session(void *agent, char *id_out, size_t id_sz); int hermit_agent_switch_session(void *agent, const char *id); int hermit_agent_session_id(void *agent, char *out, size_t out_sz); int hermit_agent_set_plan_mode(void *agent, int on); int hermit_agent_set_approval(void *agent, const char *approval); int hermit_agent_set_effort(void *agent, const char *effort); int hermit_agent_attach_file(void *agent, const char *path, char *err, size_t err_sz); void hermit_agent_pending_clear(void *agent); int hermit_agent_compact(void *agent, char *err, size_t err_sz); void hermit_agent_usage(void *agent, long *prompt, long *out_tokens, double *cost, int *priced); /* Malloc'd JSON array of chat items; caller frees. NULL on failure. */ char *hermit_agent_history_json(void *agent); /* Malloc'd todo text or NULL. */ char *hermit_agent_todo(void *agent); /* Malloc'd markdown export; caller frees. */ char *hermit_agent_export_md(void *agent, const char *title); /* 1 if a saved/env key exists for provider. */ int hermit_creds_has(const char *provider); int hermit_store_list(const char *workspace, char ids[][128], int max_ids); int hermit_store_info(const char *workspace, const char *id, char *title, size_t title_sz, long long *mtime_ms); int hermit_store_title_set(const char *workspace, const char *id, const char *title); int hermit_store_delete(const char *workspace, const char *id); int hermit_creds_save(const char *provider, const char *key); #ifdef __cplusplus } #endif