refactor: replace install_builtin with SPIFFS directory scan

Signed-off-by: Asklv <boironic@gmail.com>
This commit is contained in:
Asklv
2026-02-27 10:00:00 +08:00
parent f8b2a20c7a
commit fc17355640

View File

@@ -13,42 +13,29 @@ static const char *TAG = "skills";
* and pre-flashed into the SPIFFS partition at build time.
*/
/* ── Install built-in skills if missing ──────────────────────── */
static void install_builtin(const builtin_skill_t *skill)
{
char path[64];
snprintf(path, sizeof(path), "%s%s.md", MIMI_SKILLS_PREFIX, skill->filename);
/* Check if already exists */
FILE *f = fopen(path, "r");
if (f) {
fclose(f);
ESP_LOGD(TAG, "Skill exists: %s", path);
return;
}
/* Write built-in skill */
f = fopen(path, "w");
if (!f) {
ESP_LOGE(TAG, "Cannot write skill: %s", path);
return;
}
fputs(skill->content, f);
fclose(f);
ESP_LOGI(TAG, "Installed built-in skill: %s", path);
}
esp_err_t skill_loader_init(void)
{
ESP_LOGI(TAG, "Initializing skills system");
for (size_t i = 0; i < NUM_BUILTINS; i++) {
install_builtin(&s_builtins[i]);
DIR *dir = opendir(MIMI_SPIFFS_BASE);
if (!dir) {
ESP_LOGW(TAG, "Cannot open SPIFFS — skills may not be available");
return ESP_OK;
}
ESP_LOGI(TAG, "Skills system ready (%d built-in)", (int)NUM_BUILTINS);
int count = 0;
struct dirent *ent;
while ((ent = readdir(dir)) != NULL) {
const char *name = ent->d_name;
size_t len = strlen(name);
if (strncmp(name, "skills/", 7) == 0 && len > 10 &&
strcmp(name + len - 3, ".md") == 0) {
count++;
}
}
closedir(dir);
ESP_LOGI(TAG, "Skills system ready (%d skills on SPIFFS)", count);
return ESP_OK;
}