feat: solo default, job completion reports, tools wave-1 (0.9.32)

Password Realm no longer auto-enables parliament (keeps task/worker tools);
finished jobs fan out to agent notes + TUI; raise PAR_MAX/grep caps and tag truncations.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WHC
2026-10-29 19:48:02 +08:00
co-authored by Cursor
parent 5917c48bd0
commit f00aad9e3e
12 changed files with 351 additions and 44 deletions
+3
View File
@@ -24,6 +24,9 @@ int main(void) {
cst_realm_keys_t bad, good;
assert(cst_realm_unlock_password(realm, "wrong", &bad) != 0);
assert(cst_realm_unlock_password(realm, "correct horse battery", &good) == 0);
/* Password Realm alone must not force parliament (solo keeps workers). */
unsetenv("CST_COLLABORATION");
assert(!cst_parliament_is_active());
char err[128];
char *hand = cst_parliament_login("correct horse battery", "phone-1", "pixel",
+12
View File
@@ -64,6 +64,18 @@ int main(void) {
assert(!cst_job_start(r, "read", "", 1, work, NULL, NULL, id, sizeof(id)));
assert(cst_runtime_finish(r, "completed", "premature", 0, error, sizeof(error)));
s = cst_job_read(r, id, 2000); assert(s && strstr(s, "completed") && strstr(s, "verified job output")); free(s);
/* Dual completion rings: agent and UI drain independently. */
{
cst_job_completion_t comps[4], ui[4];
int n = cst_runtime_take_completions(r, comps, 4);
assert(n >= 1);
assert(comps[0].id[0] && !strcmp(comps[0].status, "completed"));
assert(strstr(comps[0].summary, "exit=") || comps[0].exit_code == 0);
assert(cst_runtime_take_completions(r, comps, 4) == 0);
int nu = cst_runtime_take_ui_completions(r, ui, 4);
assert(nu >= 1 && !strcmp(ui[0].status, "completed"));
assert(cst_runtime_take_ui_completions(r, ui, 4) == 0);
}
assert(!cst_job_start(r, "external", "device:test", 0, work, NULL, NULL, id, sizeof(id)));
/* Let the scheduler start the operation before requesting a safe stop. */
for (int i = 0; i < 100; i++) {