refactor: archive GUI clients; keep minimal TUI with hooks/API
ci / tcc-check (push) Successful in 1m8s
ci / linux (aarch64, 0) (push) Failing after 1h0m3s
ci / linux (x86, 1) (push) Failing after 1h0m3s
ci / linux (x86_64, 1) (push) Failing after 1h0m2s
ci / windows (push) Failing after 50s

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:
WHC
2026-10-30 22:49:23 +08:00
co-authored by Cursor
parent ea38247161
commit 5538ed3412
184 changed files with 14098 additions and 1858 deletions
@@ -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