pi-daddy 0.25.0 → 0.25.2
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 +19 -0
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES/herdr-Apache-2.0.txt +201 -0
- package/THIRD_PARTY_NOTICES.md +7 -0
- package/dist/daily-dashboard-host.js +2 -2
- package/dist/daily-dashboard-host.js.map +1 -1
- package/dist/dashboard-host.d.ts.map +1 -1
- package/dist/dashboard-host.js +24 -6
- package/dist/dashboard-host.js.map +1 -1
- package/dist/herdr-pi-lifecycle.d.ts +8 -0
- package/dist/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/herdr-pi-lifecycle.js +22 -0
- package/dist/herdr-pi-lifecycle.js.map +1 -0
- package/dist/herdr-poll.d.ts +21 -0
- package/dist/herdr-poll.d.ts.map +1 -1
- package/dist/herdr-poll.js +52 -3
- package/dist/herdr-poll.js.map +1 -1
- package/dist/herdr-start.d.ts +9 -0
- package/dist/herdr-start.d.ts.map +1 -0
- package/dist/herdr-start.js +15 -0
- package/dist/herdr-start.js.map +1 -0
- package/dist/run-herdr.d.ts +3 -3
- package/dist/run-herdr.d.ts.map +1 -1
- package/dist/run-herdr.js +28 -33
- package/dist/run-herdr.js.map +1 -1
- package/dist/vendor/herdr-pi-lifecycle.d.ts +2 -0
- package/dist/vendor/herdr-pi-lifecycle.d.ts.map +1 -0
- package/dist/vendor/herdr-pi-lifecycle.js +223 -0
- package/dist/vendor/herdr-pi-lifecycle.js.map +1 -0
- package/package.json +3 -1
- package/src/daily-dashboard-host.ts +3 -3
- package/src/dashboard-host.ts +18 -5
- package/src/herdr-pi-lifecycle.ts +21 -0
- package/src/herdr-poll.ts +52 -2
- package/src/herdr-start.ts +20 -0
- package/src/run-herdr.ts +28 -40
- package/src/vendor/herdr-pi-lifecycle.ts +257 -0
package/dist/herdr-poll.d.ts
CHANGED
|
@@ -44,6 +44,15 @@ export declare function observeHerdrSession(agent: unknown, pane: string | undef
|
|
|
44
44
|
export declare function seqOf(result: Record<string, unknown> | undefined): number;
|
|
45
45
|
/** How often to poll `agent get` while waiting for the child to settle. */
|
|
46
46
|
export declare const POLL_INTERVAL_MS = 750;
|
|
47
|
+
/**
|
|
48
|
+
* A prompt accepted from a terminal state must produce an observable lifecycle change promptly.
|
|
49
|
+
*
|
|
50
|
+
* Herdr 0.8's `agent prompt --wait` documents this same five-second bound. We retain polling because it
|
|
51
|
+
* supplies the bounded live pane snapshots, but refuse rather than holding a parent for twenty minutes when
|
|
52
|
+
* the only reported state remains the pre-prompt terminal state. That is a detector/integration failure, not
|
|
53
|
+
* evidence that a child settled.
|
|
54
|
+
*/
|
|
55
|
+
export declare const FRESH_LIFECYCLE_TIMEOUT_MS = 5000;
|
|
47
56
|
/** Lines of pane tail reported per poll. Matches the status block's own tail, so nothing is fetched unused. */
|
|
48
57
|
export declare const DEFAULT_SNAPSHOT_LINES = 3;
|
|
49
58
|
/**
|
|
@@ -59,6 +68,18 @@ export declare const DEFAULT_SNAPSHOT_LINES = 3;
|
|
|
59
68
|
* `state_change_seq` has advanced past the value observed before prompting. `agent wait` is deliberately
|
|
60
69
|
* not used at all: its contract cannot express "settled *after* this point".
|
|
61
70
|
*/
|
|
71
|
+
/**
|
|
72
|
+
* Establish the bundled Pi lifecycle reporter's idle baseline before prompt dispatch.
|
|
73
|
+
*
|
|
74
|
+
* `screen_detection_skipped` is Herdr's reported fact that a full lifecycle authority owns this pane.
|
|
75
|
+
* Waiting for it prevents the reporter's asynchronously queued initial idle report from becoming a
|
|
76
|
+
* post-prompt sequence advance. This is not completion: no prompt has been sent at this point.
|
|
77
|
+
*/
|
|
78
|
+
export declare function waitForLifecycleBaseline(exec: HerdrExec, request: PollTarget, deadline: number): Promise<{
|
|
79
|
+
before?: number;
|
|
80
|
+
aborted?: boolean;
|
|
81
|
+
spawnError?: string;
|
|
82
|
+
}>;
|
|
62
83
|
export declare function waitForSettled(exec: HerdrExec, request: PollTarget, before: number, deadline: number, maxOutputBytes: number): Promise<{
|
|
63
84
|
status?: string;
|
|
64
85
|
timedOut?: boolean;
|
package/dist/herdr-poll.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-poll.d.ts","sourceRoot":"","sources":["../src/herdr-poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,KAAK,IAAI,CAAC;IAChG,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kGAAkG;IAClG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAG1H;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAGzE;AAED,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"herdr-poll.d.ts","sourceRoot":"","sources":["../src/herdr-poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,KAAK,IAAI,CAAC;IAChG,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kGAAkG;IAClG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAG1H;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAGzE;AAED,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYtE;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsD1F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAalE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBpE"}
|
package/dist/herdr-poll.js
CHANGED
|
@@ -31,6 +31,15 @@ export function seqOf(result) {
|
|
|
31
31
|
}
|
|
32
32
|
/** How often to poll `agent get` while waiting for the child to settle. */
|
|
33
33
|
export const POLL_INTERVAL_MS = 750;
|
|
34
|
+
/**
|
|
35
|
+
* A prompt accepted from a terminal state must produce an observable lifecycle change promptly.
|
|
36
|
+
*
|
|
37
|
+
* Herdr 0.8's `agent prompt --wait` documents this same five-second bound. We retain polling because it
|
|
38
|
+
* supplies the bounded live pane snapshots, but refuse rather than holding a parent for twenty minutes when
|
|
39
|
+
* the only reported state remains the pre-prompt terminal state. That is a detector/integration failure, not
|
|
40
|
+
* evidence that a child settled.
|
|
41
|
+
*/
|
|
42
|
+
export const FRESH_LIFECYCLE_TIMEOUT_MS = 5_000;
|
|
34
43
|
/** Lines of pane tail reported per poll. Matches the status block's own tail, so nothing is fetched unused. */
|
|
35
44
|
export const DEFAULT_SNAPSHOT_LINES = 3;
|
|
36
45
|
/**
|
|
@@ -46,6 +55,30 @@ export const DEFAULT_SNAPSHOT_LINES = 3;
|
|
|
46
55
|
* `state_change_seq` has advanced past the value observed before prompting. `agent wait` is deliberately
|
|
47
56
|
* not used at all: its contract cannot express "settled *after* this point".
|
|
48
57
|
*/
|
|
58
|
+
/**
|
|
59
|
+
* Establish the bundled Pi lifecycle reporter's idle baseline before prompt dispatch.
|
|
60
|
+
*
|
|
61
|
+
* `screen_detection_skipped` is Herdr's reported fact that a full lifecycle authority owns this pane.
|
|
62
|
+
* Waiting for it prevents the reporter's asynchronously queued initial idle report from becoming a
|
|
63
|
+
* post-prompt sequence advance. This is not completion: no prompt has been sent at this point.
|
|
64
|
+
*/
|
|
65
|
+
export async function waitForLifecycleBaseline(exec, request, deadline) {
|
|
66
|
+
const interval = request.pollIntervalMs ?? POLL_INTERVAL_MS;
|
|
67
|
+
for (;;) {
|
|
68
|
+
if (request.signal?.aborted)
|
|
69
|
+
return { aborted: true };
|
|
70
|
+
if (Date.now() >= deadline)
|
|
71
|
+
return { spawnError: "Herdr did not activate the bundled Pi lifecycle reporter before prompt dispatch" };
|
|
72
|
+
const reply = parseReply(await exec(["agent", "get", request.name]));
|
|
73
|
+
if (reply.error)
|
|
74
|
+
return { spawnError: `herdr agent get failed: ${reply.error}` };
|
|
75
|
+
const agent = (reply.result?.agent ?? reply.result ?? {});
|
|
76
|
+
const seq = typeof agent.state_change_seq === "number" ? agent.state_change_seq : -1;
|
|
77
|
+
if (agent.screen_detection_skipped === true && agent.agent_status && TERMINAL.has(agent.agent_status) && seq >= 0)
|
|
78
|
+
return { before: seq };
|
|
79
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(interval, Math.max(0, deadline - Date.now()))));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
49
82
|
export async function waitForSettled(exec, request, before, deadline, maxOutputBytes) {
|
|
50
83
|
const interval = request.pollIntervalMs ?? POLL_INTERVAL_MS;
|
|
51
84
|
// ADR-0032. The pane is read on every poll so the parent can show what the child is doing, rather than the
|
|
@@ -54,6 +87,7 @@ export async function waitForSettled(exec, request, before, deadline, maxOutputB
|
|
|
54
87
|
// No cross-poll state is kept, deliberately: the previous design remembered what it had reported so it could
|
|
55
88
|
// send a diff, and that is what broke — see `tailLines`. A snapshot needs no memory.
|
|
56
89
|
const keep = request.snapshotLines ?? DEFAULT_SNAPSHOT_LINES;
|
|
90
|
+
let staleTerminalSince;
|
|
57
91
|
for (;;) {
|
|
58
92
|
if (request.signal?.aborted)
|
|
59
93
|
return { aborted: true };
|
|
@@ -84,9 +118,24 @@ export async function waitForSettled(exec, request, before, deadline, maxOutputB
|
|
|
84
118
|
/* display only — a renderer must not break a governed run */
|
|
85
119
|
}
|
|
86
120
|
}
|
|
87
|
-
if (status && TERMINAL.has(status)
|
|
88
|
-
|
|
89
|
-
|
|
121
|
+
if (status && TERMINAL.has(status)) {
|
|
122
|
+
if (seq > before)
|
|
123
|
+
return { status };
|
|
124
|
+
// Do not turn this pane's text into a completion signal. A known agent whose screen rule misses a new
|
|
125
|
+
// UI shape falls back to idle, precisely the state R-33 says is unsafe to accept. A stable stale
|
|
126
|
+
// terminal state for this bounded interval is instead a loud compatibility refusal (issue #43).
|
|
127
|
+
staleTerminalSince ??= Date.now();
|
|
128
|
+
if (Date.now() - staleTerminalSince >= FRESH_LIFECYCLE_TIMEOUT_MS) {
|
|
129
|
+
return {
|
|
130
|
+
spawnError: `herdr reported ${status} without a post-prompt lifecycle change for ${FRESH_LIFECYCLE_TIMEOUT_MS}ms; ` +
|
|
131
|
+
"refusing to treat the pre-prompt terminal state as completion. Update Herdr's Pi detector or inspect its lifecycle reporting.",
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
staleTerminalSince = undefined;
|
|
137
|
+
}
|
|
138
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(interval, Math.max(0, deadline - Date.now()))));
|
|
90
139
|
}
|
|
91
140
|
}
|
|
92
141
|
/**
|
package/dist/herdr-poll.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herdr-poll.js","sourceRoot":"","sources":["../src/herdr-poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA8B5D,4GAA4G;AAC5G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtD,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,IAAwB,EAAE,IAAsC;IAClH,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO;IAC3B,IAAI,CAAC;QAAC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAAC,IAAI,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;AACpI,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,MAA2C;IAC/D,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAkC,CAAC;IACrE,OAAO,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,+GAA+G;AAC/G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAe,EACf,OAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,cAAsB;IAEtB,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,gBAAgB,CAAC;IAC5D,2GAA2G;IAC3G,2DAA2D;IAC3D,EAAE;IACF,6GAA6G;IAC7G,qFAAqF;IACrF,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"herdr-poll.js","sourceRoot":"","sources":["../src/herdr-poll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Start a Pi agent only after its newly-created Herdr pane reaches a shell prompt. */
|
|
2
|
+
import { type HerdrExec } from "./herdr-cli.ts";
|
|
3
|
+
/** Retry cadence for Herdr's documented `agent_pane_busy` startup race. */
|
|
4
|
+
export declare const PANE_READY_POLL_MS = 300;
|
|
5
|
+
export declare function startHerdrAgent(exec: HerdrExec, name: string, paneId: string, args: string[], deadline: number): Promise<{
|
|
6
|
+
result?: Record<string, unknown>;
|
|
7
|
+
error?: string;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=herdr-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-start.d.ts","sourceRoot":"","sources":["../src/herdr-start.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Start a Pi agent only after its newly-created Herdr pane reaches a shell prompt. */
|
|
2
|
+
import { parseReply } from "./herdr-cli.js";
|
|
3
|
+
/** Retry cadence for Herdr's documented `agent_pane_busy` startup race. */
|
|
4
|
+
export const PANE_READY_POLL_MS = 300;
|
|
5
|
+
export async function startHerdrAgent(exec, name, paneId, args, deadline) {
|
|
6
|
+
for (;;) {
|
|
7
|
+
const reply = parseReply(await exec(["agent", "start", name, "--kind", "pi", "--pane", paneId, "--", ...args]));
|
|
8
|
+
if (!reply.error)
|
|
9
|
+
return reply;
|
|
10
|
+
if (!/not an available shell|agent_pane_busy/.test(reply.error) || Date.now() >= deadline)
|
|
11
|
+
return reply;
|
|
12
|
+
await new Promise((resolve) => setTimeout(resolve, PANE_READY_POLL_MS));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=herdr-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-start.js","sourceRoot":"","sources":["../src/herdr-start.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAE5D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAe,EACf,IAAY,EACZ,MAAc,EACd,IAAc,EACd,QAAgB;IAEhB,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
package/dist/run-herdr.d.ts
CHANGED
|
@@ -34,13 +34,15 @@ export { type HerdrExec, parseReply } from "./herdr-cli.ts";
|
|
|
34
34
|
export { splitSystemPrompt, stageSystemPrompt } from "./herdr-stage.ts";
|
|
35
35
|
/** Re-exported: the name rules moved to `./herdr-name.ts` under the ceiling; tests import them here. */
|
|
36
36
|
export { uniqueAgentName } from "./herdr-name.ts";
|
|
37
|
+
/** Re-exported after startup retry extraction; existing executor importers keep this public constant. */
|
|
38
|
+
export { PANE_READY_POLL_MS } from "./herdr-start.ts";
|
|
37
39
|
/**
|
|
38
40
|
* Re-exported so `test/run-herdr.test.ts` and any importer keep reaching these where they always were.
|
|
39
41
|
*
|
|
40
42
|
* `POLL_INTERVAL_MS` and `newSuffix` moved to `./herdr-poll.ts` under the 400-line ceiling; the names are part
|
|
41
43
|
* of this module's surface and moving a file should not move an export.
|
|
42
44
|
*/
|
|
43
|
-
export { DEFAULT_SNAPSHOT_LINES, POLL_INTERVAL_MS, readPane, tailLines, waitForSettled, type PollTarget } from "./herdr-poll.ts";
|
|
45
|
+
export { DEFAULT_SNAPSHOT_LINES, POLL_INTERVAL_MS, readPane, tailLines, waitForLifecycleBaseline, waitForSettled, type PollTarget } from "./herdr-poll.ts";
|
|
44
46
|
export interface HerdrRunRequest {
|
|
45
47
|
/** `planSpawn` args **without** the prompt — see `prompt`. */
|
|
46
48
|
args: string[];
|
|
@@ -107,8 +109,6 @@ export interface HerdrRunRequest {
|
|
|
107
109
|
export declare class HerdrWriterCloseError extends Error {
|
|
108
110
|
constructor(tabId: string);
|
|
109
111
|
}
|
|
110
|
-
/** How often to retry `agent start` while a freshly created pane is still reaching its shell prompt. */
|
|
111
|
-
export declare const PANE_READY_POLL_MS = 300;
|
|
112
112
|
/**
|
|
113
113
|
* Run one governed child in a pane and return its output.
|
|
114
114
|
*
|
package/dist/run-herdr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-herdr.d.ts","sourceRoot":"","sources":["../src/run-herdr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"run-herdr.d.ts","sourceRoot":"","sources":["../src/run-herdr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAuG,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMvJ;;;;;GAKG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,gHAAgH;AAChH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,wGAAwG;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,yGAAyG;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE3J,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,yFAAyF;IACzF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,sGAAsG;IACtG,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,4GAA4G;IAC5G,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kBAAkB,CAAC,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACtD,uGAAuG;IACvG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kGAAkG;IAClG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,KAAK,EAAE,MAAM;CAI1B;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA2PpF"}
|
package/dist/run-herdr.js
CHANGED
|
@@ -25,9 +25,11 @@ import { runWithFinalizers } from "./finalization.js";
|
|
|
25
25
|
import { DEFAULT_MAX_OUTPUT_BYTES, DEFAULT_TIMEOUT_MS } from "./run-child.js";
|
|
26
26
|
import { MAX_OPEN_PANES, markPaneSettled, trackPane, trimOpenPanes, untrackPane } from "./pane-reaper.js";
|
|
27
27
|
import { defaultExec, parseReply } from "./herdr-cli.js";
|
|
28
|
-
import { readPane,
|
|
28
|
+
import { FRESH_LIFECYCLE_TIMEOUT_MS, readPane, waitForLifecycleBaseline, waitForSettled, observeHerdrSession } from "./herdr-poll.js";
|
|
29
29
|
import { stageSystemPrompt } from "./herdr-stage.js";
|
|
30
30
|
import { uniqueAgentName } from "./herdr-name.js";
|
|
31
|
+
import { bundledHerdrPiLifecycleExtension } from "./herdr-pi-lifecycle.js";
|
|
32
|
+
import { startHerdrAgent } from "./herdr-start.js";
|
|
31
33
|
/**
|
|
32
34
|
* Re-exported so importers of the executor still reach the protocol at the name they always used.
|
|
33
35
|
*
|
|
@@ -39,21 +41,21 @@ export { parseReply } from "./herdr-cli.js";
|
|
|
39
41
|
export { splitSystemPrompt, stageSystemPrompt } from "./herdr-stage.js";
|
|
40
42
|
/** Re-exported: the name rules moved to `./herdr-name.ts` under the ceiling; tests import them here. */
|
|
41
43
|
export { uniqueAgentName } from "./herdr-name.js";
|
|
44
|
+
/** Re-exported after startup retry extraction; existing executor importers keep this public constant. */
|
|
45
|
+
export { PANE_READY_POLL_MS } from "./herdr-start.js";
|
|
42
46
|
/**
|
|
43
47
|
* Re-exported so `test/run-herdr.test.ts` and any importer keep reaching these where they always were.
|
|
44
48
|
*
|
|
45
49
|
* `POLL_INTERVAL_MS` and `newSuffix` moved to `./herdr-poll.ts` under the 400-line ceiling; the names are part
|
|
46
50
|
* of this module's surface and moving a file should not move an export.
|
|
47
51
|
*/
|
|
48
|
-
export { DEFAULT_SNAPSHOT_LINES, POLL_INTERVAL_MS, readPane, tailLines, waitForSettled } from "./herdr-poll.js";
|
|
52
|
+
export { DEFAULT_SNAPSHOT_LINES, POLL_INTERVAL_MS, readPane, tailLines, waitForLifecycleBaseline, waitForSettled } from "./herdr-poll.js";
|
|
49
53
|
export class HerdrWriterCloseError extends Error {
|
|
50
54
|
constructor(tabId) {
|
|
51
55
|
super(`herdr writer tab ${tabId} could not be closed; retaining its workspace lease`);
|
|
52
56
|
this.name = "HerdrWriterCloseError";
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
|
-
/** How often to retry `agent start` while a freshly created pane is still reaching its shell prompt. */
|
|
56
|
-
export const PANE_READY_POLL_MS = 300;
|
|
57
59
|
/**
|
|
58
60
|
* Run one governed child in a pane and return its output.
|
|
59
61
|
*
|
|
@@ -88,7 +90,18 @@ export async function runHerdrPane(request) {
|
|
|
88
90
|
if (staged.error)
|
|
89
91
|
return { ...empty, spawnError: staged.error };
|
|
90
92
|
const promptDir = staged.promptDir;
|
|
91
|
-
|
|
93
|
+
let lifecycleExtension;
|
|
94
|
+
try {
|
|
95
|
+
lifecycleExtension = bundledHerdrPiLifecycleExtension();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (promptDir)
|
|
99
|
+
await rm(promptDir, { recursive: true, force: true }).catch(() => undefined);
|
|
100
|
+
return { ...empty, spawnError: String(error) };
|
|
101
|
+
}
|
|
102
|
+
// Pi's `--no-extensions` disables discovery, not this explicit, package-pinned lifecycle reporter. It
|
|
103
|
+
// registers no tools; pi's existing `--tools` allowlist remains the governed child surface.
|
|
104
|
+
const effectiveArgs = [...staged.args, "-e", lifecycleExtension];
|
|
92
105
|
const create = ["tab", "create", "--label", request.name, "--cwd", request.cwd];
|
|
93
106
|
if (request.workspace)
|
|
94
107
|
create.push("--workspace", request.workspace);
|
|
@@ -239,11 +252,17 @@ export async function runHerdrPane(request) {
|
|
|
239
252
|
// early `return` from a failed start or prompt — leaves it false, so `cleanup` closes the tab.
|
|
240
253
|
let settledCleanly = false;
|
|
241
254
|
return runWithFinalizers(async () => {
|
|
242
|
-
const started = await
|
|
255
|
+
const started = await startHerdrAgent(exec, agentName, paneId, effectiveArgs, deadline);
|
|
243
256
|
if (started.error)
|
|
244
257
|
return { ...empty, spawnError: `herdr agent start failed: ${started.error}` };
|
|
245
|
-
// The
|
|
246
|
-
|
|
258
|
+
// The bundled reporter queues its initial idle state asynchronously. Establish its native-authority
|
|
259
|
+
// baseline before prompting, otherwise that initial report could advance the counter after prompt and
|
|
260
|
+
// be mistaken for settlement.
|
|
261
|
+
const baseline = await waitForLifecycleBaseline(exec, { ...request, name: agentName, nativePaneId: paneId }, Math.min(deadline, Date.now() + FRESH_LIFECYCLE_TIMEOUT_MS));
|
|
262
|
+
if (baseline.aborted)
|
|
263
|
+
return { ...empty, aborted: true };
|
|
264
|
+
if (baseline.spawnError || baseline.before === undefined)
|
|
265
|
+
return { ...empty, spawnError: baseline.spawnError ?? "Herdr lifecycle baseline is unavailable" };
|
|
247
266
|
observeHerdrSession(started.result?.agent, paneId, request.onSessionReference);
|
|
248
267
|
const prompted = parseReply(await exec(["agent", "prompt", agentName, request.prompt]));
|
|
249
268
|
if (prompted.error)
|
|
@@ -256,7 +275,7 @@ export async function runHerdrPane(request) {
|
|
|
256
275
|
/* display/observation only */
|
|
257
276
|
}
|
|
258
277
|
}
|
|
259
|
-
const settled = await waitForSettled(exec, { ...request, name: agentName, nativePaneId: paneId }, before, deadline, maxOutputBytes);
|
|
278
|
+
const settled = await waitForSettled(exec, { ...request, name: agentName, nativePaneId: paneId }, baseline.before, deadline, maxOutputBytes);
|
|
260
279
|
if (settled.aborted || settled.timedOut) {
|
|
261
280
|
// Still read: a timed-out child usually produced something, and a partial answer labelled partial is
|
|
262
281
|
// more useful than none. R-03's rule — a missing result must never look like an empty one.
|
|
@@ -313,28 +332,4 @@ export async function runHerdrPane(request) {
|
|
|
313
332
|
run: () => cleanup(settledCleanly),
|
|
314
333
|
}]);
|
|
315
334
|
}
|
|
316
|
-
/**
|
|
317
|
-
* Start the agent, retrying while the pane is still coming up.
|
|
318
|
-
*
|
|
319
|
-
* **Measured, and only visible once automated.** A pane created by `tab create` is not immediately at a
|
|
320
|
-
* shell prompt, and `herdr agent start` requires one — it fails with
|
|
321
|
-
* `agent_pane_busy: … is not an available shell`. Driving the two commands by hand hid this completely,
|
|
322
|
-
* because the think-time between them was longer than the shell took to start; the first scripted run hit
|
|
323
|
-
* it every time.
|
|
324
|
-
*
|
|
325
|
-
* Retried rather than preceded by a fixed sleep: a sleep long enough for a loaded machine is wasted on
|
|
326
|
-
* every spawn, and a fan-out pays it per child. Only the busy condition is retried — any other error is a
|
|
327
|
-
* real failure and returns immediately.
|
|
328
|
-
*/
|
|
329
|
-
async function startAgent(exec, name, paneId, args, deadline) {
|
|
330
|
-
for (;;) {
|
|
331
|
-
const reply = parseReply(await exec(["agent", "start", name, "--kind", "pi", "--pane", paneId, "--", ...args]));
|
|
332
|
-
if (!reply.error)
|
|
333
|
-
return reply;
|
|
334
|
-
const busy = /not an available shell|agent_pane_busy/.test(reply.error);
|
|
335
|
-
if (!busy || Date.now() >= deadline)
|
|
336
|
-
return reply;
|
|
337
|
-
await new Promise((r) => setTimeout(r, PANE_READY_POLL_MS));
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
335
|
//# sourceMappingURL=run-herdr.js.map
|
package/dist/run-herdr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-herdr.js","sourceRoot":"","sources":["../src/run-herdr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"run-herdr.js","sourceRoot":"","sources":["../src/run-herdr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-pi-lifecycle.d.ts","sourceRoot":"","sources":["../../src/vendor/herdr-pi-lifecycle.ts"],"names":[],"mappings":"AA8KA,MAAM,CAAC,OAAO,WAAW,EAAE,KAAA,QAkF1B"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// installed by herdr
|
|
2
|
+
// managed by herdr; reinstalling or updating the integration overwrites this file.
|
|
3
|
+
// add custom hooks/plugins beside this file instead of editing it.
|
|
4
|
+
// HERDR_INTEGRATION_ID=pi
|
|
5
|
+
// HERDR_INTEGRATION_VERSION=8
|
|
6
|
+
// @ts-nocheck
|
|
7
|
+
import net from "node:net";
|
|
8
|
+
const HERDR_ENV = process.env.HERDR_ENV;
|
|
9
|
+
const socketPath = process.env.HERDR_SOCKET_PATH;
|
|
10
|
+
const socketEndpoint = process.platform === "win32" && socketPath ? `\\\\.\\pipe\\${socketPath}` : socketPath;
|
|
11
|
+
const paneId = process.env.HERDR_PANE_ID;
|
|
12
|
+
const source = "herdr:pi";
|
|
13
|
+
function enabled() {
|
|
14
|
+
return HERDR_ENV === "1" && !!socketPath && !!paneId;
|
|
15
|
+
}
|
|
16
|
+
function sendRequestAttempt(request, timeoutMs) {
|
|
17
|
+
if (!enabled()) {
|
|
18
|
+
return Promise.resolve(true);
|
|
19
|
+
}
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
let done = false;
|
|
22
|
+
let timeout;
|
|
23
|
+
const finish = (delivered) => {
|
|
24
|
+
if (done)
|
|
25
|
+
return;
|
|
26
|
+
done = true;
|
|
27
|
+
if (timeout) {
|
|
28
|
+
clearTimeout(timeout);
|
|
29
|
+
}
|
|
30
|
+
socket.destroy();
|
|
31
|
+
resolve(delivered);
|
|
32
|
+
};
|
|
33
|
+
const socket = net.createConnection(socketEndpoint);
|
|
34
|
+
socket.on("error", () => finish(false));
|
|
35
|
+
socket.on("connect", () => socket.write(`${JSON.stringify(request)}\n`));
|
|
36
|
+
socket.on("data", () => finish(true));
|
|
37
|
+
socket.on("end", () => finish(false));
|
|
38
|
+
timeout = setTimeout(() => finish(false), timeoutMs);
|
|
39
|
+
timeout.unref?.();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async function sendRequest(request) {
|
|
43
|
+
if (await sendRequestAttempt(request, 500)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await sendRequestAttempt(request, 1500);
|
|
47
|
+
}
|
|
48
|
+
let reportSeq = Date.now() * 1000;
|
|
49
|
+
let currentAgentSessionId;
|
|
50
|
+
let currentAgentSessionPath;
|
|
51
|
+
function nextReportSeq() {
|
|
52
|
+
reportSeq += 1;
|
|
53
|
+
return reportSeq;
|
|
54
|
+
}
|
|
55
|
+
function updateSessionRef(ctx) {
|
|
56
|
+
try {
|
|
57
|
+
const file = ctx?.sessionManager?.getSessionFile?.();
|
|
58
|
+
currentAgentSessionPath =
|
|
59
|
+
typeof file === "string" && file.startsWith("/") ? file : undefined;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
currentAgentSessionPath = undefined;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const id = ctx?.sessionManager?.getSessionId?.();
|
|
66
|
+
currentAgentSessionId = typeof id === "string" && id.length > 0 ? id : undefined;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
currentAgentSessionId = undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function withSessionRef(params) {
|
|
73
|
+
if (currentAgentSessionPath) {
|
|
74
|
+
return { ...params, agent_session_path: currentAgentSessionPath };
|
|
75
|
+
}
|
|
76
|
+
if (currentAgentSessionId) {
|
|
77
|
+
return { ...params, agent_session_id: currentAgentSessionId };
|
|
78
|
+
}
|
|
79
|
+
return params;
|
|
80
|
+
}
|
|
81
|
+
function currentSessionRef() {
|
|
82
|
+
if (currentAgentSessionPath) {
|
|
83
|
+
return { agent_session_path: currentAgentSessionPath };
|
|
84
|
+
}
|
|
85
|
+
if (currentAgentSessionId) {
|
|
86
|
+
return { agent_session_id: currentAgentSessionId };
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function reportSession(sessionStartSource) {
|
|
91
|
+
const sessionRef = currentSessionRef();
|
|
92
|
+
if (!sessionRef) {
|
|
93
|
+
return Promise.resolve();
|
|
94
|
+
}
|
|
95
|
+
return sendRequest({
|
|
96
|
+
id: `${source}:session:${Date.now()}:${Math.random().toString(36).slice(2)}`,
|
|
97
|
+
method: "pane.report_agent_session",
|
|
98
|
+
params: {
|
|
99
|
+
pane_id: paneId,
|
|
100
|
+
source,
|
|
101
|
+
agent: "pi",
|
|
102
|
+
seq: nextReportSeq(),
|
|
103
|
+
session_start_source: sessionStartSource,
|
|
104
|
+
...sessionRef,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function sendState(state, message, seq = nextReportSeq()) {
|
|
109
|
+
return sendRequest({
|
|
110
|
+
id: `${source}:${Date.now()}:${Math.random().toString(36).slice(2)}`,
|
|
111
|
+
method: "pane.report_agent",
|
|
112
|
+
params: withSessionRef({
|
|
113
|
+
pane_id: paneId,
|
|
114
|
+
source,
|
|
115
|
+
agent: "pi",
|
|
116
|
+
state,
|
|
117
|
+
message,
|
|
118
|
+
seq,
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
let sendInFlight = false;
|
|
123
|
+
let queuedState;
|
|
124
|
+
function queueState(state, message) {
|
|
125
|
+
queuedState = { state, message, seq: nextReportSeq() };
|
|
126
|
+
if (!sendInFlight) {
|
|
127
|
+
void drainStateQueue();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function drainStateQueue() {
|
|
131
|
+
if (sendInFlight) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
sendInFlight = true;
|
|
135
|
+
try {
|
|
136
|
+
while (queuedState) {
|
|
137
|
+
const next = queuedState;
|
|
138
|
+
queuedState = undefined;
|
|
139
|
+
await sendState(next.state, next.message, next.seq);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
sendInFlight = false;
|
|
144
|
+
if (queuedState) {
|
|
145
|
+
void drainStateQueue();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export default function (pi) {
|
|
150
|
+
if (!enabled()) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
let agentActive = false;
|
|
154
|
+
let blockedCount = 0;
|
|
155
|
+
let blockedMessage;
|
|
156
|
+
let lastState;
|
|
157
|
+
let lastMessage;
|
|
158
|
+
let rootSession = false;
|
|
159
|
+
function desiredState() {
|
|
160
|
+
if (blockedCount > 0) {
|
|
161
|
+
return { state: "blocked", message: blockedMessage };
|
|
162
|
+
}
|
|
163
|
+
if (agentActive) {
|
|
164
|
+
return { state: "working", message: undefined };
|
|
165
|
+
}
|
|
166
|
+
return { state: "idle", message: undefined };
|
|
167
|
+
}
|
|
168
|
+
function publishState(force = false) {
|
|
169
|
+
const next = desiredState();
|
|
170
|
+
if (!force && next.state === lastState && next.message === lastMessage) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
lastState = next.state;
|
|
174
|
+
lastMessage = next.message;
|
|
175
|
+
queueState(next.state, next.message);
|
|
176
|
+
}
|
|
177
|
+
pi.events.on("herdr:blocked", (data) => {
|
|
178
|
+
if (!rootSession) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (!data?.active) {
|
|
182
|
+
blockedCount = Math.max(0, blockedCount - 1);
|
|
183
|
+
if (blockedCount === 0) {
|
|
184
|
+
blockedMessage = undefined;
|
|
185
|
+
}
|
|
186
|
+
publishState();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
blockedCount += 1;
|
|
190
|
+
blockedMessage = data.label;
|
|
191
|
+
publishState();
|
|
192
|
+
});
|
|
193
|
+
pi.on("session_start", async (event, ctx) => {
|
|
194
|
+
// TUI only: RPC/JSON/print modes are headless (no PTY herdr can display),
|
|
195
|
+
// and RPC still reports hasUI=true, so mode is the reliable gate.
|
|
196
|
+
if (ctx?.mode !== "tui") {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
rootSession = true;
|
|
200
|
+
updateSessionRef(ctx);
|
|
201
|
+
await reportSession(event?.reason);
|
|
202
|
+
// A reload can replace this extension mid-run without emitting another agent_start.
|
|
203
|
+
agentActive = ctx?.isIdle?.() === false;
|
|
204
|
+
publishState(true);
|
|
205
|
+
});
|
|
206
|
+
pi.on("agent_start", (_event, ctx) => {
|
|
207
|
+
if (!rootSession) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
updateSessionRef(ctx);
|
|
211
|
+
void reportSession();
|
|
212
|
+
agentActive = true;
|
|
213
|
+
publishState();
|
|
214
|
+
});
|
|
215
|
+
pi.on("agent_settled", (_event, ctx) => {
|
|
216
|
+
if (!rootSession || ctx?.isIdle?.() !== true) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
agentActive = false;
|
|
220
|
+
publishState();
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=herdr-pi-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-pi-lifecycle.js","sourceRoot":"","sources":["../../src/vendor/herdr-pi-lifecycle.ts"],"names":[],"mappings":"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"}
|