v0.0.77 - Wizard now verifies systemd service is active after install, reports admin inbox expectation, and exits to avoid duplicate foreground boot

This commit is contained in:
Your Name
2026-03-18 07:44:16 -04:00
parent 6b6e25c3f4
commit 326acb63d1
4 changed files with 33 additions and 9 deletions

View File

@@ -55,11 +55,11 @@ Skills compose by adoption-list order (`10123`) and trigger tags carry runtime e
Didactyl will support local inference, which is very privacy preserving. Remote inference does however have it's advantages, and in those cases Didactyl supports using Bitcoin Lightning and eCash inference providers.
## Current Status — v0.0.76
## Current Status — v0.0.77
**Active build — this project is barely working. Experiment at your own risk.**
> Last release update: v0.0.76Use sudo-prefixed privileged commands in setup wizard install flow with password prompting and remove root-shell handoff
> Last release update: v0.0.77Wizard now verifies systemd service is active after install, reports admin inbox expectation, and exits to avoid duplicate foreground boot
- Connects to configured relays with auto-reconnect and relay state transition logging
- Publishes configured startup events per relay as each relay becomes connected

View File

@@ -316,10 +316,11 @@ static int query_self_kind10002_relays(const didactyl_config_t* cfg,
return 0;
}
size_t events_json_len = strlen(events_json);
cJSON* events = cJSON_Parse(events_json);
free(events_json);
if (!events || !cJSON_IsArray(events)) {
DEBUG_WARN("[didactyl] kind10002 query parse failed or non-array payload (len=%zu)", strlen(events_json));
DEBUG_WARN("[didactyl] kind10002 query parse failed or non-array payload (len=%zu)", events_json_len);
cJSON_Delete(events);
return 0;
}

View File

@@ -12,8 +12,8 @@
// Using DIDACTYL_ prefix to avoid conflicts with nostr_core_lib VERSION macros
#define DIDACTYL_VERSION_MAJOR 0
#define DIDACTYL_VERSION_MINOR 0
#define DIDACTYL_VERSION_PATCH 76
#define DIDACTYL_VERSION "v0.0.76"
#define DIDACTYL_VERSION_PATCH 77
#define DIDACTYL_VERSION "v0.0.77"
// Agent metadata
#define DIDACTYL_NAME "Didactyl"

View File

@@ -1760,10 +1760,33 @@ static int new_agent_flow(didactyl_config_t* cfg, char* genesis_path_out, size_t
fprintf(stderr, "%sFailed to install dedicated-user system service.%s\n", ANSI_RED, ANSI_RESET);
return -1;
}
fprintf(stderr, "%sStep 7 of 7 -- Booting new agent. Check your messages for initial greeting.%s\n",
ANSI_YELLOW,
ANSI_RESET);
return 0;
char service_user[64] = {0};
sanitize_service_user_from_name(agent_name, service_user, sizeof(service_user));
char service_name[96] = {0};
snprintf(service_name, sizeof(service_name), "%s.service", service_user);
sleep(2);
char* is_active_argv[] = {"systemctl", "is-active", "--quiet", service_name, NULL};
if (run_privileged_command_local(is_active_argv) == 0) {
fprintf(stderr,
"%sStep 7 of 7 -- Service %s is active. Setup is complete; this wizard will now exit. "
"Expect a startup message in the admin inbox.%s\n",
ANSI_YELLOW,
service_name,
ANSI_RESET);
} else {
fprintf(stderr,
"%sStep 7 of 7 -- Service installed but not active yet. This wizard will now exit. "
"Check status with: sudo systemctl status %s ; logs with: sudo journalctl -u %s -f%s\n",
ANSI_RED,
service_name,
service_name,
ANSI_RESET);
}
return 1;
}
return -1;