#ifndef LUASKILLS_FFI_H
#define LUASKILLS_FFI_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define LUASKILLS_SKILL_AUTHORITY_SYSTEM 0
#define LUASKILLS_SKILL_AUTHORITY_DELEGATED_TOOL 1
typedef struct FfiLuaVmPoolConfig {
size_t min_size;
size_t max_size;
uint64_t idle_ttl_secs;
} FfiLuaVmPoolConfig;
typedef struct FfiToolCacheConfig {
size_t max_entries;
uint64_t default_ttl_secs;
uint64_t max_ttl_secs;
} FfiToolCacheConfig;
typedef struct FfiBorrowedBuffer {
const uint8_t *ptr;
size_t len;
} FfiBorrowedBuffer;
typedef struct FfiOwnedBuffer {
uint8_t *ptr;
size_t len;
} FfiOwnedBuffer;
typedef struct FfiLuaRuntimeHostOptions {
const char *temp_dir;
const char *resources_dir;
const char *lua_packages_dir;
const char *host_provided_tool_root;
const char *host_provided_lua_root;
const char *host_provided_ffi_root;
const char *download_cache_root;
const char *dependency_dir_name;
const char *state_dir_name;
const char *database_dir_name;
const char *skill_config_file_path;
uint8_t allow_network_download;
const char *github_base_url;
const char *github_api_base_url;
const char *sqlite_library_path;
int32_t sqlite_provider_mode;
int32_t sqlite_callback_mode;
const char *lancedb_library_path;
int32_t lancedb_provider_mode;
int32_t lancedb_callback_mode;
const char *space_controller_endpoint;
uint8_t space_controller_auto_spawn;
const char *space_controller_executable_path;
int32_t space_controller_process_mode;
const FfiToolCacheConfig *cache_config;
const FfiLuaVmPoolConfig *runlua_pool_config;
const char **reserved_entry_names;
size_t reserved_entry_names_len;
const char **ignored_skill_ids;
size_t ignored_skill_ids_len;
uint8_t enable_skill_management_bridge;
} FfiLuaRuntimeHostOptions;
typedef struct FfiLuaEngineOptions {
FfiLuaVmPoolConfig pool;
FfiLuaRuntimeHostOptions host;
} FfiLuaEngineOptions;
typedef struct FfiRuntimeSkillRoot {
const char *name;
const char *skills_dir;
} FfiRuntimeSkillRoot;
typedef struct FfiLuaInvocationContext {
FfiBorrowedBuffer request_context_json;
FfiBorrowedBuffer client_budget_json;
FfiBorrowedBuffer tool_config_json;
} FfiLuaInvocationContext;
enum {
FFI_SOURCE_TYPE_ABSENT = -1,
FFI_SOURCE_TYPE_GITHUB = 0,
FFI_SOURCE_TYPE_URL = 1
};
enum {
FFI_PROVIDER_MODE_DYNAMIC_LIBRARY = 0,
FFI_PROVIDER_MODE_HOST_CALLBACK = 1,
FFI_PROVIDER_MODE_SPACE_CONTROLLER = 2
};
enum {
FFI_CALLBACK_MODE_STANDARD = 0,
FFI_CALLBACK_MODE_JSON = 1
};
enum {
FFI_SPACE_CONTROLLER_PROCESS_MODE_SERVICE = 0,
FFI_SPACE_CONTROLLER_PROCESS_MODE_MANAGED = 1
};
enum {
FFI_DATABASE_KIND_SQLITE = 0,
FFI_DATABASE_KIND_LANCEDB = 1
};
enum {
FFI_SQLITE_PROVIDER_ACTION_EXECUTE_SCRIPT = 0,
FFI_SQLITE_PROVIDER_ACTION_EXECUTE_BATCH = 1,
FFI_SQLITE_PROVIDER_ACTION_QUERY_JSON = 2,
FFI_SQLITE_PROVIDER_ACTION_QUERY_STREAM = 3,
FFI_SQLITE_PROVIDER_ACTION_QUERY_STREAM_WAIT_METRICS = 4,
FFI_SQLITE_PROVIDER_ACTION_QUERY_STREAM_CHUNK = 5,
FFI_SQLITE_PROVIDER_ACTION_QUERY_STREAM_CLOSE = 6,
FFI_SQLITE_PROVIDER_ACTION_TOKENIZE_TEXT = 7,
FFI_SQLITE_PROVIDER_ACTION_UPSERT_CUSTOM_WORD = 8,
FFI_SQLITE_PROVIDER_ACTION_REMOVE_CUSTOM_WORD = 9,
FFI_SQLITE_PROVIDER_ACTION_LIST_CUSTOM_WORDS = 10,
FFI_SQLITE_PROVIDER_ACTION_ENSURE_FTS_INDEX = 11,
FFI_SQLITE_PROVIDER_ACTION_REBUILD_FTS_INDEX = 12,
FFI_SQLITE_PROVIDER_ACTION_UPSERT_FTS_DOCUMENT = 13,
FFI_SQLITE_PROVIDER_ACTION_DELETE_FTS_DOCUMENT = 14,
FFI_SQLITE_PROVIDER_ACTION_SEARCH_FTS = 15
};
enum {
FFI_LANCEDB_PROVIDER_ACTION_CREATE_TABLE = 0,
FFI_LANCEDB_PROVIDER_ACTION_VECTOR_UPSERT = 1,
FFI_LANCEDB_PROVIDER_ACTION_VECTOR_SEARCH = 2,
FFI_LANCEDB_PROVIDER_ACTION_DELETE = 3,
FFI_LANCEDB_PROVIDER_ACTION_DROP_TABLE = 4
};
typedef struct FfiSkillInstallRequest {
const char *skill_id;
const char *source;
int32_t source_type;
} FfiSkillInstallRequest;
typedef struct FfiSkillUninstallOptions {
uint8_t remove_sqlite;
uint8_t remove_lancedb;
} FfiSkillUninstallOptions;
typedef struct FfiRuntimeDatabaseBindingContext {
const char *space_label;
const char *skill_id;
const char *binding_tag;
const char *root_name;
const char *space_root;
const char *skill_dir;
const char *skill_dir_name;
int32_t database_kind;
const char *default_database_path;
} FfiRuntimeDatabaseBindingContext;
typedef struct FfiSqliteProviderRequest {
int32_t action;
FfiRuntimeDatabaseBindingContext binding;
FfiBorrowedBuffer input_json;
} FfiSqliteProviderRequest;
typedef struct FfiLanceDbProviderRequest {
int32_t action;
FfiRuntimeDatabaseBindingContext binding;
FfiBorrowedBuffer input_json;
} FfiLanceDbProviderRequest;
typedef struct FfiStringArray {
FfiOwnedBuffer *items;
size_t len;
} FfiStringArray;
typedef struct FfiRuntimeEntryParameterDescriptor {
FfiOwnedBuffer name;
FfiOwnedBuffer param_type;
FfiOwnedBuffer description;
uint8_t required;
} FfiRuntimeEntryParameterDescriptor;
typedef struct FfiRuntimeEntryDescriptor {
FfiOwnedBuffer canonical_name;
FfiOwnedBuffer skill_id;
FfiOwnedBuffer local_name;
FfiOwnedBuffer root_name;
FfiOwnedBuffer skill_dir;
FfiOwnedBuffer description;
struct FfiRuntimeEntryParameterDescriptor *parameters;
size_t parameters_len;
} FfiRuntimeEntryDescriptor;
typedef struct FfiRuntimeEntryDescriptorList {
struct FfiRuntimeEntryDescriptor *items;
size_t len;
} FfiRuntimeEntryDescriptorList;
typedef struct FfiRuntimeHelpNodeDescriptor {
FfiOwnedBuffer flow_name;
FfiOwnedBuffer description;
FfiOwnedBuffer *related_entries;
size_t related_entries_len;
uint8_t is_main;
} FfiRuntimeHelpNodeDescriptor;
typedef struct FfiRuntimeSkillHelpDescriptor {
FfiOwnedBuffer skill_id;
FfiOwnedBuffer skill_name;
FfiOwnedBuffer skill_version;
FfiOwnedBuffer root_name;
FfiOwnedBuffer skill_dir;
struct FfiRuntimeHelpNodeDescriptor main;
struct FfiRuntimeHelpNodeDescriptor *flows;
size_t flows_len;
} FfiRuntimeSkillHelpDescriptor;
typedef struct FfiRuntimeSkillHelpDescriptorList {
struct FfiRuntimeSkillHelpDescriptor *items;
size_t len;
} FfiRuntimeSkillHelpDescriptorList;
typedef struct FfiRuntimeHelpDetail {
FfiOwnedBuffer skill_id;
FfiOwnedBuffer skill_name;
FfiOwnedBuffer skill_version;
FfiOwnedBuffer root_name;
FfiOwnedBuffer skill_dir;
FfiOwnedBuffer flow_name;
FfiOwnedBuffer description;
FfiOwnedBuffer *related_entries;
size_t related_entries_len;
uint8_t is_main;
FfiOwnedBuffer content_type;
FfiOwnedBuffer content;
} FfiRuntimeHelpDetail;
typedef struct FfiRuntimeInvocationResult {
FfiOwnedBuffer content;
int32_t overflow_mode;
FfiOwnedBuffer template_hint;
size_t content_bytes;
size_t content_lines;
} FfiRuntimeInvocationResult;
typedef struct FfiSkillApplyResult {
FfiOwnedBuffer skill_id;
FfiOwnedBuffer status;
FfiOwnedBuffer message;
FfiOwnedBuffer version;
int32_t source_type;
FfiOwnedBuffer source_locator;
} FfiSkillApplyResult;
typedef struct FfiSkillUninstallResult {
FfiOwnedBuffer skill_id;
uint8_t skill_removed;
uint8_t sqlite_removed;
uint8_t lancedb_removed;
uint8_t sqlite_retained;
uint8_t lancedb_retained;
FfiOwnedBuffer message;
} FfiSkillUninstallResult;
typedef int32_t (*FfiSqliteProviderCallback)(
const FfiSqliteProviderRequest *request,
void *user_data,
FfiOwnedBuffer *response_json_out,
FfiOwnedBuffer *error_out
);
typedef int32_t (*FfiLanceDbProviderCallback)(
const FfiLanceDbProviderRequest *request,
void *user_data,
FfiOwnedBuffer *meta_json_out,
FfiOwnedBuffer *data_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_buffer_clone(
const uint8_t *value,
size_t len,
FfiOwnedBuffer *buffer_out,
FfiOwnedBuffer *error_out
);
uint8_t *luaskills_ffi_bytes_clone(const uint8_t *value, size_t len);
void luaskills_ffi_buffer_free(FfiOwnedBuffer value);
void luaskills_ffi_bytes_free(uint8_t *value, size_t len);
int32_t luaskills_ffi_set_sqlite_provider_callback(
FfiSqliteProviderCallback callback,
void *user_data,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_set_lancedb_provider_callback(
FfiLanceDbProviderCallback callback,
void *user_data,
FfiOwnedBuffer *error_out
);
void luaskills_ffi_string_array_free(FfiStringArray *value);
void luaskills_ffi_entry_list_free(FfiRuntimeEntryDescriptorList *value);
void luaskills_ffi_help_list_free(FfiRuntimeSkillHelpDescriptorList *value);
void luaskills_ffi_help_detail_free(FfiRuntimeHelpDetail *value);
void luaskills_ffi_invocation_result_free(FfiRuntimeInvocationResult *value);
void luaskills_ffi_skill_apply_result_free(FfiSkillApplyResult *value);
void luaskills_ffi_skill_uninstall_result_free(FfiSkillUninstallResult *value);
int32_t luaskills_ffi_version(FfiOwnedBuffer *version_out, FfiOwnedBuffer *error_out);
int32_t luaskills_ffi_describe(FfiStringArray **functions_out, FfiOwnedBuffer *error_out);
int32_t luaskills_ffi_engine_new(
const FfiLuaEngineOptions *options,
uint64_t *engine_id_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_engine_free(uint64_t engine_id, FfiOwnedBuffer *error_out);
int32_t luaskills_ffi_load_from_dirs(
uint64_t engine_id,
const char *base_dir,
const char *override_dir,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_load_from_roots(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_reload_from_dirs(
uint64_t engine_id,
const char *base_dir,
const char *override_dir,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_reload_from_roots(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_list_entries(
uint64_t engine_id,
int32_t authority,
FfiRuntimeEntryDescriptorList **entries_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_list_skill_help(
uint64_t engine_id,
int32_t authority,
FfiRuntimeSkillHelpDescriptorList **help_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_render_skill_help_detail(
uint64_t engine_id,
int32_t authority,
const char *skill_id,
const char *flow_name,
FfiBorrowedBuffer request_context_json,
FfiRuntimeHelpDetail **detail_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_prompt_argument_completions(
uint64_t engine_id,
int32_t authority,
const char *prompt_name,
const char *argument_name,
FfiStringArray **values_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_is_skill(
uint64_t engine_id,
int32_t authority,
const char *tool_name,
uint8_t *value_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_skill_name_for_tool(
uint64_t engine_id,
int32_t authority,
const char *tool_name,
FfiOwnedBuffer *skill_id_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_skill_config_list(
uint64_t engine_id,
const char *skill_id,
FfiOwnedBuffer *result_json_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_skill_config_get(
uint64_t engine_id,
const char *skill_id,
const char *key,
FfiOwnedBuffer *value_out,
uint8_t *found_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_skill_config_set(
uint64_t engine_id,
const char *skill_id,
const char *key,
const char *value,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_skill_config_delete(
uint64_t engine_id,
const char *skill_id,
const char *key,
uint8_t *deleted_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_call_skill(
uint64_t engine_id,
const char *tool_name,
FfiBorrowedBuffer args_json,
const FfiLuaInvocationContext *invocation_context,
FfiRuntimeInvocationResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_run_lua(
uint64_t engine_id,
const char *code,
FfiBorrowedBuffer args_json,
const FfiLuaInvocationContext *invocation_context,
FfiOwnedBuffer *result_json_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_disable_skill_in_dirs(
uint64_t engine_id,
const char *base_dir,
const char *override_dir,
const char *skill_id,
const char *reason,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_disable_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
const char *skill_id,
const char *reason,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_disable_skill_in_dirs(
uint64_t engine_id,
const char *base_dir,
const char *override_dir,
int32_t authority,
const char *skill_id,
const char *reason,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_disable_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
int32_t authority,
const char *skill_id,
const char *reason,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_enable_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
const char *skill_id,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_enable_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
int32_t authority,
const char *skill_id,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_uninstall_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
const char *skill_id,
const FfiSkillUninstallOptions *options,
FfiSkillUninstallResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_uninstall_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
int32_t authority,
const char *skill_id,
const FfiSkillUninstallOptions *options,
FfiSkillUninstallResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_install_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
const FfiSkillInstallRequest *request,
FfiSkillApplyResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_install_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
int32_t authority,
const FfiSkillInstallRequest *request,
FfiSkillApplyResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_update_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
const FfiSkillInstallRequest *request,
FfiSkillApplyResult **result_out,
FfiOwnedBuffer *error_out
);
int32_t luaskills_ffi_system_update_skill(
uint64_t engine_id,
const FfiRuntimeSkillRoot *skill_roots,
size_t skill_roots_len,
int32_t authority,
const FfiSkillInstallRequest *request,
FfiSkillApplyResult **result_out,
FfiOwnedBuffer *error_out
);
#ifdef __cplusplus
}
#endif
#endif