pi-daddy 0.48.0 → 0.48.1
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/README.md +15 -5
- package/dist/executors/herdr-cli.d.ts.map +1 -1
- package/dist/executors/herdr-cli.js +5 -1
- package/dist/executors/herdr-cli.js.map +1 -1
- package/dist/executors/herdr-qualification.d.ts +1 -3
- package/dist/executors/herdr-qualification.d.ts.map +1 -1
- package/dist/executors/herdr-qualification.js +14 -19
- package/dist/executors/herdr-qualification.js.map +1 -1
- package/package.json +1 -1
- package/src/executors/herdr-cli.ts +4 -1
- package/src/executors/herdr-qualification.ts +14 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — pi-daddy
|
|
2
2
|
|
|
3
|
+
## 0.48.1 — 2026-10-09
|
|
4
|
+
|
|
5
|
+
Use Herdr's live structured CLI compatibility status instead of requiring exact client/server release 0.8.2 and private protocol 20. Compatible mixed releases can delegate in separate tabs; incompatible or malformed status still refuses. Require a successful actual tab-list response before selecting Herdr. Native ownership, final validation, cancellation and cleanup receipts remain unchanged.
|
|
6
|
+
|
|
7
|
+
The isolated live qualification fixture supports separate client/server binaries and an explicit Pi CLI, including retained tabs and direct cancellation of a worker with a detached descendant. All 44 live checks passed across Herdr 0.8.2/Pi 1.0.4, Herdr 0.8.2/Pi 1.1.0, Herdr client 0.9.3/server 0.9.0/Pi 1.1.0 and Herdr 0.9.3/Pi 1.1.0 on Ubuntu WSL2 with Node 24.19.0.
|
|
8
|
+
|
|
3
9
|
## 0.48.0 — 2026-10-09
|
|
4
10
|
|
|
5
11
|
- Admit a stable operation only once across the live delegation tree. Duplicate single/batch/chain requests return an execution reference; changed requests conflict and completed mutations never replay. Expose session-bound operation status and actual execution workspace to deterministic coordinators.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# pi-daddy
|
|
2
2
|
|
|
3
|
-
Source target: **0.48.
|
|
3
|
+
Source target: **0.48.1**. Before installation, verify that `npm view pi-daddy version` and Git tag `v0.48.1` both resolve to this release.
|
|
4
4
|
|
|
5
5
|
**Capability governance and coordination for [pi](https://github.com/badlogic/pi-mono)'s multi-level agent system.**
|
|
6
6
|
An orchestrator grants each sub-agent a deliberate subset of what it holds and withholds the rest. A sub-agent may
|
|
@@ -240,22 +240,32 @@ anything a child did.
|
|
|
240
240
|
|
|
241
241
|
## Executors and the dashboard
|
|
242
242
|
|
|
243
|
-
Captured and Herdr pane execution share the native owner and current-final validator on Linux x64.
|
|
243
|
+
Captured and Herdr pane execution share the native owner and current-final validator on Linux x64.
|
|
244
|
+
Initial qualification used Ubuntu WSL2, kernel `6.18.33.2-microsoft-standard-WSL2`, Node `v26.7.0`, and Pi 1.0.4.
|
|
245
|
+
Additional live Herdr qualification on Ubuntu WSL2 with Node `v24.19.0` covers client/server 0.8.2 with
|
|
246
|
+
Pi 1.0.4 and 1.1.0, client 0.9.3/server 0.9.0 with Pi 1.1.0, and client/server 0.9.3 with Pi 1.1.0.
|
|
247
|
+
Each combination exercises real child results, retained tabs, cancellation, coordinator loss and server loss.
|
|
248
|
+
These are measured combinations, not a product-version allowlist. Native Windows and WSL-to-Windows worker
|
|
249
|
+
interop remain unqualified.
|
|
244
250
|
A packaged native helper owns and reaps the cooperating child subtree. The final is accepted only when Pi's JSON
|
|
245
251
|
protocol settles and matches the exact persisted current turn and active branch. Complete final text is preserved;
|
|
246
252
|
work, final availability, subtree cleanup and optional observation completeness are separate result fields. A failed
|
|
247
253
|
execution returns `isError` with its available evidence. Display, diagnostics and optional recording cannot replace
|
|
248
254
|
the primary final. Unknown cleanup retains capacity and workspace exclusion.
|
|
249
255
|
|
|
250
|
-
Pi and TypeBox are wildcard host-provided peers so Pi's extension loader supplies one shared runtime copy. Development
|
|
256
|
+
Pi and TypeBox are wildcard host-provided peers so Pi's extension loader supplies one shared runtime copy. Development dependencies pin Pi **1.0.4**; additional native transport checks cover **1.1.0** as described above. Prefer a Pi-managed install under one of these measured hosts. An ordinary standalone npm install may resolve untested peer versions. In a Pi-managed no-peer install, standalone help, version and reporting remain available; run initialization inside Pi with `/grants init`. Use Principal **4.12.0** with this runtime's `delegate_describe` contract. Native phases use `plan`, `build`, `review`, `debug`, and `investigate` with their returned `definitionId`; independent parallel work uses one `delegate_all` batch.
|
|
251
257
|
|
|
252
258
|
Final capture preserves whitespace and concatenates text blocks without inserting separators. Tool-call terminals, empty visible finals and non-`stop` reasons are unavailable. Persisted message comparisons ignore object key order while preserving array order and every field value. The shared `final-conformance.json` table checks these semantics in both runtime and harness. Capture remains bounded: 4 MiB visible final, 32 MiB protocol line, 64 MiB persisted session, and a 3-second bounded session read. Exceeding a limit reports an unavailable final and blocks dependent handoffs; it does not imply the worker failed to settle.
|
|
253
259
|
|
|
254
260
|
Retained capacity is rechecked against the original bound ownership and settlement receipt before a new single, parallel or chain dispatch. Exact later proof refunds the reservation once; missing, malformed or mismatched proof and unbound ownership remain retained. Recovery does not rewrite the original failed/unknown outcome or mint new capacity on reload. A single delegation reserves its available subtree; use `delegate_all` to allocate independent parallel children.
|
|
255
261
|
|
|
256
262
|
Set `PI_DADDY_HERDR=0` for captured execution or `PI_DADDY_HERDR=1` to demand Herdr panes. An unset value
|
|
257
|
-
probes for a responding server.
|
|
258
|
-
a
|
|
263
|
+
probes for a responding server. Startup requires a successful tab-list response and live JSON server status
|
|
264
|
+
reporting a running, CLI-compatible transport. Newer release numbers and an older compatible server do not
|
|
265
|
+
cause refusal. An explicit endpoint incompatibility also refuses; endpoint compatibility alone cannot override
|
|
266
|
+
an incompatible CLI protocol. The status check uses Herdr's own compatibility decision, not a fixed private
|
|
267
|
+
protocol number or a client/server product-version comparison. Missing or incompatible status refuses
|
|
268
|
+
with no backend fallback. Each owned pane starts a packaged launcher
|
|
259
269
|
connected to the coordinator over a private bounded Unix socket. The launcher uses the same pinned native
|
|
260
270
|
subreaper, and the coordinator binds its identity before releasing the worker gate. Child environment and
|
|
261
271
|
arguments come from the governed plan, without inheriting the Herdr daemon's environment. Only public text is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-cli.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7G,eAAO,MAAM,WAAW,EAAE,SAkBtB,CAAC;AAEL;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAcA;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"herdr-cli.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7G,eAAO,MAAM,WAAW,EAAE,SAkBtB,CAAC;AAEL;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAcA;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAyB5G;AAED,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD,oGAAoG;AAEpG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAI3E"}
|
|
@@ -70,7 +70,11 @@ export async function probeHerdr(options = {}) {
|
|
|
70
70
|
return await Promise.race([
|
|
71
71
|
exec(["tab", "list"]).then((reply) => {
|
|
72
72
|
const parsed = parseReply(reply);
|
|
73
|
-
|
|
73
|
+
if (parsed.error)
|
|
74
|
+
return { ok: false, error: parsed.error };
|
|
75
|
+
if (reply.code !== 0 || !Array.isArray(parsed.result?.tabs))
|
|
76
|
+
return { ok: false, error: "Herdr tab list failed or returned an unsupported response" };
|
|
77
|
+
return { ok: true };
|
|
74
78
|
}),
|
|
75
79
|
new Promise((settle) => {
|
|
76
80
|
timer = setTimeout(() => settle({ ok: false, error: `probe timed out after ${timeoutMs}ms` }), timeoutMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-cli.js","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"herdr-cli.js","sourceRoot":"","sources":["../../src/executors/herdr-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Check the live CLI contract; product release numbers are not compatibility boundaries. */
|
|
2
2
|
import { type HerdrExec, type HerdrProbe } from "./herdr-cli.ts";
|
|
3
|
-
export declare const QUALIFIED_HERDR_VERSION = "0.8.2";
|
|
4
|
-
export declare const QUALIFIED_HERDR_PROTOCOL = 20;
|
|
5
3
|
export declare function qualifyHerdr(probe: HerdrProbe, exec?: HerdrExec): Promise<HerdrProbe>;
|
|
6
4
|
//# sourceMappingURL=herdr-qualification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-qualification.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-qualification.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"herdr-qualification.d.ts","sourceRoot":"","sources":["../../src/executors/herdr-qualification.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,SAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsBxG"}
|
|
@@ -1,29 +1,24 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Check the live CLI contract; product release numbers are not compatibility boundaries. */
|
|
2
2
|
import { defaultExec } from "./herdr-cli.js";
|
|
3
|
-
export const QUALIFIED_HERDR_VERSION = "0.8.2";
|
|
4
|
-
export const QUALIFIED_HERDR_PROTOCOL = 20;
|
|
5
3
|
export async function qualifyHerdr(probe, exec = defaultExec) {
|
|
6
4
|
if (!probe.ok)
|
|
7
5
|
return probe;
|
|
8
6
|
try {
|
|
9
7
|
if (process.platform !== "linux" || process.arch !== "x64")
|
|
10
8
|
throw Error("Herdr owned execution requires Linux x64");
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
13
|
-
throw Error("Herdr
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
fields.protocol !== String(QUALIFIED_HERDR_PROTOCOL) ||
|
|
25
|
-
fields.compatible !== "yes")
|
|
26
|
-
throw Error("Herdr server version/protocol is not qualified");
|
|
9
|
+
const reply = await exec(["status", "server", "--json"]);
|
|
10
|
+
if (reply.code !== 0)
|
|
11
|
+
throw Error("Herdr live server status failed: " + (reply.stderr.trim() || reply.stdout.trim()));
|
|
12
|
+
const status = JSON.parse(reply.stdout);
|
|
13
|
+
if (!status || status.status !== "running" || status.running !== true)
|
|
14
|
+
throw Error("Herdr server is not running");
|
|
15
|
+
// Our tab/pane CLI commands use the private protocol. Endpoint compatibility alone is insufficient.
|
|
16
|
+
if (!Number.isSafeInteger(status.protocol) || status.protocol < 1 || status.compatible !== true)
|
|
17
|
+
throw Error("Herdr client/server CLI protocol is incompatible or unavailable");
|
|
18
|
+
// Legacy servers do not advertise an endpoint generation. Respect an explicit modern incompatibility.
|
|
19
|
+
if ((status.endpoint_compatible !== undefined || status.capabilities?.endpoint_protocol_generation !== undefined) &&
|
|
20
|
+
status.endpoint_compatible !== true)
|
|
21
|
+
throw Error("Herdr client/server endpoint is incompatible or unavailable");
|
|
27
22
|
return { ...probe, qualified: true };
|
|
28
23
|
}
|
|
29
24
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-qualification.js","sourceRoot":"","sources":["../../src/executors/herdr-qualification.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"herdr-qualification.js","sourceRoot":"","sources":["../../src/executors/herdr-qualification.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAE,WAAW,EAAmC,MAAM,gBAAgB,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAiB,EAAE,OAAkB,WAAW;IACjF,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;YAAE,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACpH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAClB,MAAM,KAAK,CAAC,mCAAmC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;YAAE,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClH,oGAAoG;QACpG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI;YAC7F,MAAM,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,sGAAsG;QACtG,IACE,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE,4BAA4B,KAAK,SAAS,CAAC;YAC7G,MAAM,CAAC,mBAAmB,KAAK,IAAI;YAEnC,MAAM,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-daddy",
|
|
3
|
-
"version": "0.48.
|
|
3
|
+
"version": "0.48.1",
|
|
4
4
|
"description": "Capability governance for pi sub-agents: spawn Agent Skills (SKILL.md) definitions whose allowed-tools becomes a grant that can only narrow going down a delegation tree, enforced by pi's own --tools allowlist, with an append-only ledger.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -97,7 +97,10 @@ export async function probeHerdr(options: { exec?: HerdrExec; timeoutMs?: number
|
|
|
97
97
|
return await Promise.race<HerdrProbe>([
|
|
98
98
|
exec(["tab", "list"]).then((reply) => {
|
|
99
99
|
const parsed = parseReply(reply);
|
|
100
|
-
|
|
100
|
+
if (parsed.error) return { ok: false, error: parsed.error };
|
|
101
|
+
if (reply.code !== 0 || !Array.isArray(parsed.result?.tabs))
|
|
102
|
+
return { ok: false, error: "Herdr tab list failed or returned an unsupported response" };
|
|
103
|
+
return { ok: true };
|
|
101
104
|
}),
|
|
102
105
|
new Promise<HerdrProbe>((settle) => {
|
|
103
106
|
timer = setTimeout(() => settle({ ok: false, error: `probe timed out after ${timeoutMs}ms` }), timeoutMs);
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Check the live CLI contract; product release numbers are not compatibility boundaries. */
|
|
2
2
|
import { defaultExec, type HerdrExec, type HerdrProbe } from "./herdr-cli.ts";
|
|
3
|
-
|
|
4
|
-
export const QUALIFIED_HERDR_PROTOCOL = 20;
|
|
3
|
+
|
|
5
4
|
export async function qualifyHerdr(probe: HerdrProbe, exec: HerdrExec = defaultExec): Promise<HerdrProbe> {
|
|
6
5
|
if (!probe.ok) return probe;
|
|
7
6
|
try {
|
|
8
7
|
if (process.platform !== "linux" || process.arch !== "x64") throw Error("Herdr owned execution requires Linux x64");
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
11
|
-
throw Error("Herdr
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return [line.slice(0, at).trim(), line.slice(at + 1).trim()];
|
|
19
|
-
}),
|
|
20
|
-
);
|
|
8
|
+
const reply = await exec(["status", "server", "--json"]);
|
|
9
|
+
if (reply.code !== 0)
|
|
10
|
+
throw Error("Herdr live server status failed: " + (reply.stderr.trim() || reply.stdout.trim()));
|
|
11
|
+
const status = JSON.parse(reply.stdout);
|
|
12
|
+
if (!status || status.status !== "running" || status.running !== true) throw Error("Herdr server is not running");
|
|
13
|
+
// Our tab/pane CLI commands use the private protocol. Endpoint compatibility alone is insufficient.
|
|
14
|
+
if (!Number.isSafeInteger(status.protocol) || status.protocol < 1 || status.compatible !== true)
|
|
15
|
+
throw Error("Herdr client/server CLI protocol is incompatible or unavailable");
|
|
16
|
+
// Legacy servers do not advertise an endpoint generation. Respect an explicit modern incompatibility.
|
|
21
17
|
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
fields.version !== QUALIFIED_HERDR_VERSION ||
|
|
25
|
-
fields.protocol !== String(QUALIFIED_HERDR_PROTOCOL) ||
|
|
26
|
-
fields.compatible !== "yes"
|
|
18
|
+
(status.endpoint_compatible !== undefined || status.capabilities?.endpoint_protocol_generation !== undefined) &&
|
|
19
|
+
status.endpoint_compatible !== true
|
|
27
20
|
)
|
|
28
|
-
throw Error("Herdr server
|
|
21
|
+
throw Error("Herdr client/server endpoint is incompatible or unavailable");
|
|
29
22
|
return { ...probe, qualified: true };
|
|
30
23
|
} catch (error) {
|
|
31
24
|
return { ...probe, qualified: false, qualificationReason: String(error) };
|