@inetafrica/open-claudia 3.0.27 → 3.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/core/handlers.js +9 -1
- package/package.json +1 -1
- package/test-provider-language.js +11 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v3.0.28 — /upgrade stops crying wolf on a slow roll
|
|
4
|
+
|
|
5
|
+
- **A client-side `/upgrade` timeout is no longer reported as a failure.** When the bot runs inside an AgentSpace pod, `/upgrade` calls the control plane, which triggers a fire-and-forget rollout and returns 202. If the pod is mid-roll its own in-flight request gets cut off, so the 15s HTTP wait would expire and the bot announced "Upgrade request failed … timeout" — a false negative that invited repeated re-runs (and a storm of redundant rollouts, seen as 11 ReplicaSets in 7 minutes). A timed-out request now surfaces as **pending** ("sent but the reply timed out — likely because I'm already restarting; give it a minute"), and the request timeout is raised 15s → 30s.
|
|
6
|
+
- **Pairs with a control-plane probe fix (the actual root cause).** The pod's `/health` probes carried no `timeoutSeconds`, so k8s defaulted it to 1s; a cold-start event-loop stall past 1s flapped the liveness probe and SIGTERM'd the pod in a restart loop. That fix — explicit `timeoutSeconds: 5` on every probe and liveness `failureThreshold` 3 → 5 — ships in the agent-space control plane and reaches existing pods on their next reconcile (`/cluster sync`).
|
|
7
|
+
- **Agent-space / OpenClaw:** no new deps, no new env, no schema change; Docker image builds identically (FROM the pre-baked `:base`). Existing pods pick this up on their next approved upgrade.
|
|
8
|
+
|
|
3
9
|
## v3.0.27 — Agency ledger, advisory "what's next", owner-guardrail capture, and a reboot that waits for the turn to end
|
|
4
10
|
|
|
5
11
|
- **`/agenda` — one read-only work list across everything (Track B0).** A new aggregator normalises your persistent tasks, `spaces mine`, and connector inbox/notifications into a single list (source, title, status, due, staleness, blocked-on, last-touched). Pure visibility — it reads, it never acts. `/agency` is an alias.
|
package/core/handlers.js
CHANGED
|
@@ -624,7 +624,7 @@ async function requestAgentSpaceUpgrade() {
|
|
|
624
624
|
res.on("end", () => resolve({ status: res.statusCode, body: data }));
|
|
625
625
|
});
|
|
626
626
|
req.on("error", (e) => resolve({ status: 0, body: String(e.message || e) }));
|
|
627
|
-
req.setTimeout(
|
|
627
|
+
req.setTimeout(30000, () => { req.destroy(new Error("timeout")); });
|
|
628
628
|
req.end();
|
|
629
629
|
});
|
|
630
630
|
}
|
|
@@ -678,6 +678,14 @@ register({
|
|
|
678
678
|
await send("Upgrade requested — AgentSpace will pull latest image and restart, see you in a minute.");
|
|
679
679
|
return;
|
|
680
680
|
}
|
|
681
|
+
// A client-side timeout is not a failure: the control plane triggers the
|
|
682
|
+
// rollout fire-and-forget, and a pod being rolled is exactly when its own
|
|
683
|
+
// in-flight request gets cut off. Framing it as "failed" invites a retry
|
|
684
|
+
// storm of redundant rollouts, so surface it as pending instead.
|
|
685
|
+
if (result && result.status === 0 && /timeout/i.test(result.body || "")) {
|
|
686
|
+
await send("Upgrade request sent but the reply timed out — likely because I'm already restarting. Give it a minute before re-running; I should come back on the new image.");
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
681
689
|
await send(`Upgrade request failed (status ${result?.status || "?"}). ${(result?.body || "").slice(0, 300)}`);
|
|
682
690
|
return;
|
|
683
691
|
} catch (e) {
|
package/package.json
CHANGED
|
@@ -32,18 +32,17 @@ assert.doesNotMatch(setup, /Your Claude Code bot is connected|Description=Claude
|
|
|
32
32
|
|
|
33
33
|
const pkg = JSON.parse(read("package.json"));
|
|
34
34
|
assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
|
|
35
|
-
// 3.0.
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
assert.strictEqual(pkg.version, "3.0.27", "release version must remain unchanged without explicit approval");
|
|
35
|
+
// 3.0.28 approved by Sumeet 2026-07-15 ("Yep fix them up just ensure no data
|
|
36
|
+
// loss"): the bot-side half of the restart-loop fix. When /upgrade runs inside
|
|
37
|
+
// an AgentSpace pod it calls the control plane, which fires a rollout and
|
|
38
|
+
// returns 202; if the pod is mid-roll its own in-flight request is cut off, so
|
|
39
|
+
// the client HTTP wait expired and the bot announced "Upgrade request failed …
|
|
40
|
+
// timeout" — a false negative that invited a retry storm of redundant rollouts.
|
|
41
|
+
// A timed-out request now surfaces as pending (not failed), and the request
|
|
42
|
+
// timeout is raised 15s->30s. Pairs with the control-plane probe fix (explicit
|
|
43
|
+
// timeoutSeconds + higher liveness threshold) that removes the root-cause
|
|
44
|
+
// SIGTERM flapping. No autonomy change; B2+ and Track A stay gated.
|
|
45
|
+
assert.strictEqual(pkg.version, "3.0.28", "release version must remain unchanged without explicit approval");
|
|
47
46
|
for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
|
|
48
47
|
assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
|
|
49
48
|
}
|