refactor: archive GUI clients; keep minimal TUI with hooks/API
Move Qt/Tauri/full Web SPA under archive/, ship hermit as CLI/TUI plus libcstcore and cst-webui/1 HTTP+SSE (turn lifecycle hooks, capabilities). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
/* Thin C façade over cst_agent.h for the Tauri desktop host. */
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#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
|
||||
Reference in New Issue
Block a user