crewly 1.20.261 → 1.20.263
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/dist/backend/backend/src/constants.d.ts +43 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +43 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +22 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +22 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +62 -18
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +25 -0
- package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts +43 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js +108 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +14 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +26 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts +3 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +4 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/session/index.d.ts +1 -1
- package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/index.js +1 -1
- package/dist/backend/backend/src/services/session/index.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +14 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +28 -2
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +27 -3
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.js +17 -3
- package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +28 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +89 -0
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/utils/member-default-model.utils.d.ts +14 -0
- package/dist/backend/backend/src/utils/member-default-model.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/member-default-model.utils.js +23 -0
- package/dist/backend/backend/src/utils/member-default-model.utils.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +43 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +43 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +22 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +62 -18
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +13 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +25 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts +43 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js +108 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +14 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +26 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/index.d.ts +1 -1
- package/dist/cli/backend/src/services/session/index.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/index.js +1 -1
- package/dist/cli/backend/src/services/session/index.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +14 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +28 -2
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +27 -3
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-backend.interface.js +17 -3
- package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +28 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +89 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/utils/member-default-model.utils.d.ts +14 -0
- package/dist/cli/backend/src/utils/member-default-model.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/member-default-model.utils.js +23 -0
- package/dist/cli/backend/src/utils/member-default-model.utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,6 +23,8 @@ export declare class PtyActivityTrackerService {
|
|
|
23
23
|
private lastApiActivityMap;
|
|
24
24
|
/** Last time a session's PTY produced any output at all (spinner repaints included). */
|
|
25
25
|
private lastRawOutputMap;
|
|
26
|
+
/** Until when a session's PTY output is Crewly's own resize redraw, not activity (epoch ms) */
|
|
27
|
+
private ignoreOutputUntilMap;
|
|
26
28
|
private constructor();
|
|
27
29
|
/**
|
|
28
30
|
* Get the singleton instance.
|
|
@@ -98,6 +100,17 @@ export declare class PtyActivityTrackerService {
|
|
|
98
100
|
* @param rawData - Raw PTY output data to evaluate
|
|
99
101
|
*/
|
|
100
102
|
recordFilteredActivity(sessionName: string, rawData: string): void;
|
|
103
|
+
/**
|
|
104
|
+
* Crewly is resizing a session's terminal: the runtime redraws its whole
|
|
105
|
+
* screen, which is not the agent working. Filtered output for the next
|
|
106
|
+
* `durationMs` is not recorded as activity (raw output still is: that is
|
|
107
|
+
* liveness), so a stuck agent Crewly keeps repainting can still read as
|
|
108
|
+
* quiet.
|
|
109
|
+
*
|
|
110
|
+
* @param sessionName - The session being resized
|
|
111
|
+
* @param durationMs - How long its output is ignored
|
|
112
|
+
*/
|
|
113
|
+
ignoreOutputFor(sessionName: string, durationMs: number): void;
|
|
101
114
|
/**
|
|
102
115
|
* Record that a session's PTY produced output — any output, TUI repaints
|
|
103
116
|
* included. Liveness, not activity: a busy screen that stopped repainting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-activity-tracker.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/pty-activity-tracker.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IACjE,OAAO,CAAC,MAAM,CAAkB;IAEhC,4FAA4F;IAC5F,OAAO,CAAC,eAAe,CAAkC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,wFAAwF;IACxF,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO;IAIP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;OAMG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;OAQG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ7C;;;;;;;;OAQG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ1C;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIzC;;;;;;;;;OASG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"pty-activity-tracker.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/pty-activity-tracker.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IACjE,OAAO,CAAC,MAAM,CAAkB;IAEhC,4FAA4F;IAC5F,OAAO,CAAC,eAAe,CAAkC;IAEzD,yEAAyE;IACzE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,wFAAwF;IACxF,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAkC;IAE9D,OAAO;IAIP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;OAMG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5C;;;;;;;;OAQG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ7C;;;;;;;;OAQG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQ1C;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIzC;;;;;;;;;OASG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYlE;;;;;;;;;OASG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAM9D;;;;;;OAMG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKtD;;;;;OAKG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQvC;;;;OAIG;IACH,sBAAsB,IAAI,MAAM;CAGhC"}
|
|
@@ -26,6 +26,8 @@ export class PtyActivityTrackerService {
|
|
|
26
26
|
lastApiActivityMap = new Map();
|
|
27
27
|
/** Last time a session's PTY produced any output at all (spinner repaints included). */
|
|
28
28
|
lastRawOutputMap = new Map();
|
|
29
|
+
/** Until when a session's PTY output is Crewly's own resize redraw, not activity (epoch ms) */
|
|
30
|
+
ignoreOutputUntilMap = new Map();
|
|
29
31
|
constructor() {
|
|
30
32
|
this.logger = LoggerService.getInstance().createComponentLogger('PtyActivityTracker');
|
|
31
33
|
}
|
|
@@ -135,11 +137,33 @@ export class PtyActivityTrackerService {
|
|
|
135
137
|
* @param rawData - Raw PTY output data to evaluate
|
|
136
138
|
*/
|
|
137
139
|
recordFilteredActivity(sessionName, rawData) {
|
|
140
|
+
const ignoreUntil = this.ignoreOutputUntilMap.get(sessionName);
|
|
141
|
+
if (ignoreUntil !== undefined) {
|
|
142
|
+
if (Date.now() < ignoreUntil)
|
|
143
|
+
return;
|
|
144
|
+
this.ignoreOutputUntilMap.delete(sessionName);
|
|
145
|
+
}
|
|
138
146
|
const stripped = stripAnsiCodes(rawData).replace(/\s/g, '');
|
|
139
147
|
if (stripped.length >= PTY_CONSTANTS.MIN_MEANINGFUL_OUTPUT_BYTES) {
|
|
140
148
|
this.recordActivity(sessionName);
|
|
141
149
|
}
|
|
142
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Crewly is resizing a session's terminal: the runtime redraws its whole
|
|
153
|
+
* screen, which is not the agent working. Filtered output for the next
|
|
154
|
+
* `durationMs` is not recorded as activity (raw output still is: that is
|
|
155
|
+
* liveness), so a stuck agent Crewly keeps repainting can still read as
|
|
156
|
+
* quiet.
|
|
157
|
+
*
|
|
158
|
+
* @param sessionName - The session being resized
|
|
159
|
+
* @param durationMs - How long its output is ignored
|
|
160
|
+
*/
|
|
161
|
+
ignoreOutputFor(sessionName, durationMs) {
|
|
162
|
+
const until = Date.now() + durationMs;
|
|
163
|
+
const current = this.ignoreOutputUntilMap.get(sessionName) ?? 0;
|
|
164
|
+
if (until > current)
|
|
165
|
+
this.ignoreOutputUntilMap.set(sessionName, until);
|
|
166
|
+
}
|
|
143
167
|
/**
|
|
144
168
|
* Record that a session's PTY produced output — any output, TUI repaints
|
|
145
169
|
* included. Liveness, not activity: a busy screen that stopped repainting
|
|
@@ -170,6 +194,7 @@ export class PtyActivityTrackerService {
|
|
|
170
194
|
this.lastActivityMap.delete(sessionName);
|
|
171
195
|
this.lastApiActivityMap.delete(sessionName);
|
|
172
196
|
this.lastRawOutputMap.delete(sessionName);
|
|
197
|
+
this.ignoreOutputUntilMap.delete(sessionName);
|
|
173
198
|
this.logger.debug('Cleared activity tracking for session', { sessionName });
|
|
174
199
|
}
|
|
175
200
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-activity-tracker.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/pty-activity-tracker.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pty-activity-tracker.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/pty-activity-tracker.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
* per blocked episode what kind of content blocks it (never the text: a
|
|
16
16
|
* box can hold a password or a code);
|
|
17
17
|
* - clears its state when a delivery to the agent succeeds;
|
|
18
|
+
* - restarts the agent's session when its input box has stayed unreadable
|
|
19
|
+
* for RESTART_AFTER_UNREADABLE_MS with messages queued and the agent not
|
|
20
|
+
* mid-turn — the last step of the unreadable ladder (2026-10-08 Ella:
|
|
21
|
+
* held 50 min until the owner restarted her by hand). Once per agent per
|
|
22
|
+
* RESTART_COOLDOWN_MS, traced as `harness.recover` (`input-unreadable`).
|
|
23
|
+
* A box holding someone else's text is never a reason to restart;
|
|
18
24
|
* - sends at most one alert per agent per NOTIFY_COOLDOWN_MS (30 min). The
|
|
19
25
|
* one exception: an alert the owner must act on (box unreadable or holding
|
|
20
26
|
* someone's text) still goes out once after an informational "busy in a
|
|
@@ -60,7 +66,20 @@ export interface InputBlockedRetryDeps {
|
|
|
60
66
|
flush(sessionName: string): Promise<void>;
|
|
61
67
|
/** Tell the owner / orchestrator once */
|
|
62
68
|
notify(notice: InputBlockedNotice): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* The agent may be mid-turn (live spinner / busy bar, or output within
|
|
71
|
+
* RESTART_QUIET_MS). Without it the unreadable-input restart never runs.
|
|
72
|
+
*/
|
|
73
|
+
isMidTurn?(sessionName: string): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Restart the agent's session through the normal stop/start path,
|
|
76
|
+
* resuming its conversation (or starting fresh with a handover when it
|
|
77
|
+
* is too big). Without it the unreadable-input restart never runs.
|
|
78
|
+
*/
|
|
79
|
+
restart?(sessionName: string): Promise<boolean>;
|
|
63
80
|
}
|
|
81
|
+
/** Why messages to an agent are held right now, for the owner's notes. */
|
|
82
|
+
export type InputHold = 'unreadable' | 'foreign';
|
|
64
83
|
/**
|
|
65
84
|
* Retries held messages and reports agents whose input stays blocked.
|
|
66
85
|
*/
|
|
@@ -74,6 +93,10 @@ export declare class InputBlockedRetryService {
|
|
|
74
93
|
private readonly circuitNotified;
|
|
75
94
|
/** Last alert sent per agent, for the per-agent cooldown (survives deliveries) */
|
|
76
95
|
private readonly lastAlert;
|
|
96
|
+
/** Last unreadable-input restart per agent (survives deliveries, for the cooldown) */
|
|
97
|
+
private readonly lastRestart;
|
|
98
|
+
/** Agents being restarted right now */
|
|
99
|
+
private readonly restarting;
|
|
77
100
|
private readonly logger;
|
|
78
101
|
private readonly now;
|
|
79
102
|
/**
|
|
@@ -155,6 +178,15 @@ export declare class InputBlockedRetryService {
|
|
|
155
178
|
* @returns True while blocked
|
|
156
179
|
*/
|
|
157
180
|
isBlocked(sessionName: string): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Why messages to an agent are held, while they are: its box cannot be
|
|
183
|
+
* read, or holds text Crewly did not write. Null when nothing is held
|
|
184
|
+
* for those reasons (busy agents are not "held" here).
|
|
185
|
+
*
|
|
186
|
+
* @param sessionName - The agent
|
|
187
|
+
* @returns The hold, or null
|
|
188
|
+
*/
|
|
189
|
+
holdOf(sessionName: string): InputHold | null;
|
|
158
190
|
/**
|
|
159
191
|
* Stop all timers (shutdown, tests).
|
|
160
192
|
*/
|
|
@@ -173,6 +205,17 @@ export declare class InputBlockedRetryService {
|
|
|
173
205
|
* @param ep - Its episode
|
|
174
206
|
*/
|
|
175
207
|
private retry;
|
|
208
|
+
/**
|
|
209
|
+
* Last step of the unreadable ladder: restart the agent's session when
|
|
210
|
+
* its box has been unreadable for RESTART_AFTER_UNREADABLE_MS, messages
|
|
211
|
+
* are still queued for it, it is not mid-turn, and it was not restarted
|
|
212
|
+
* for this within RESTART_COOLDOWN_MS. The queue drains once the
|
|
213
|
+
* restarted agent registers. Never throws.
|
|
214
|
+
*
|
|
215
|
+
* @param sessionName - The agent
|
|
216
|
+
* @param ep - Its episode
|
|
217
|
+
*/
|
|
218
|
+
private maybeRestart;
|
|
176
219
|
/**
|
|
177
220
|
* Whether an alert about this agent may go out now, and if so record it.
|
|
178
221
|
* One alert per agent per NOTIFY_COOLDOWN_MS; an actionable alert may
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-blocked-retry.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/input-blocked-retry.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-blocked-retry.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/input-blocked-retry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
* per blocked episode what kind of content blocks it (never the text: a
|
|
16
16
|
* box can hold a password or a code);
|
|
17
17
|
* - clears its state when a delivery to the agent succeeds;
|
|
18
|
+
* - restarts the agent's session when its input box has stayed unreadable
|
|
19
|
+
* for RESTART_AFTER_UNREADABLE_MS with messages queued and the agent not
|
|
20
|
+
* mid-turn — the last step of the unreadable ladder (2026-10-08 Ella:
|
|
21
|
+
* held 50 min until the owner restarted her by hand). Once per agent per
|
|
22
|
+
* RESTART_COOLDOWN_MS, traced as `harness.recover` (`input-unreadable`).
|
|
23
|
+
* A box holding someone else's text is never a reason to restart;
|
|
18
24
|
* - sends at most one alert per agent per NOTIFY_COOLDOWN_MS (30 min). The
|
|
19
25
|
* one exception: an alert the owner must act on (box unreadable or holding
|
|
20
26
|
* someone's text) still goes out once after an informational "busy in a
|
|
@@ -24,6 +30,7 @@
|
|
|
24
30
|
*/
|
|
25
31
|
import { LoggerService } from '../core/logger.service.js';
|
|
26
32
|
import { INPUT_BLOCKED_RETRY_CONSTANTS, TUI_INPUT_GUARD } from '../../constants.js';
|
|
33
|
+
import { traceHarness } from '../trace/trace-recorder.js';
|
|
27
34
|
/**
|
|
28
35
|
* Retries held messages and reports agents whose input stays blocked.
|
|
29
36
|
*/
|
|
@@ -37,6 +44,10 @@ export class InputBlockedRetryService {
|
|
|
37
44
|
circuitNotified = new Set();
|
|
38
45
|
/** Last alert sent per agent, for the per-agent cooldown (survives deliveries) */
|
|
39
46
|
lastAlert = new Map();
|
|
47
|
+
/** Last unreadable-input restart per agent (survives deliveries, for the cooldown) */
|
|
48
|
+
lastRestart = new Map();
|
|
49
|
+
/** Agents being restarted right now */
|
|
50
|
+
restarting = new Set();
|
|
40
51
|
logger;
|
|
41
52
|
now;
|
|
42
53
|
/**
|
|
@@ -91,6 +102,10 @@ export class InputBlockedRetryService {
|
|
|
91
102
|
};
|
|
92
103
|
ep.refusals += 1;
|
|
93
104
|
ep.last = refusal;
|
|
105
|
+
if (refusal.state === 'unknown')
|
|
106
|
+
ep.unreadableSince ??= this.now();
|
|
107
|
+
else
|
|
108
|
+
ep.unreadableSince = undefined;
|
|
94
109
|
this.episodes.set(sessionName, ep);
|
|
95
110
|
void this.maybeNotify(sessionName, ep);
|
|
96
111
|
this.schedule(sessionName, ep);
|
|
@@ -195,6 +210,26 @@ export class InputBlockedRetryService {
|
|
|
195
210
|
isBlocked(sessionName) {
|
|
196
211
|
return this.episodes.has(sessionName);
|
|
197
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Why messages to an agent are held, while they are: its box cannot be
|
|
215
|
+
* read, or holds text Crewly did not write. Null when nothing is held
|
|
216
|
+
* for those reasons (busy agents are not "held" here).
|
|
217
|
+
*
|
|
218
|
+
* @param sessionName - The agent
|
|
219
|
+
* @returns The hold, or null
|
|
220
|
+
*/
|
|
221
|
+
holdOf(sessionName) {
|
|
222
|
+
if (this.restarting.has(sessionName))
|
|
223
|
+
return 'unreadable';
|
|
224
|
+
const ep = this.episodes.get(sessionName);
|
|
225
|
+
if (!ep)
|
|
226
|
+
return null;
|
|
227
|
+
if (ep.last.state === 'unknown')
|
|
228
|
+
return 'unreadable';
|
|
229
|
+
if (ep.last.state === 'foreign')
|
|
230
|
+
return 'foreign';
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
198
233
|
/**
|
|
199
234
|
* Stop all timers (shutdown, tests).
|
|
200
235
|
*/
|
|
@@ -245,11 +280,84 @@ export class InputBlockedRetryService {
|
|
|
245
280
|
}
|
|
246
281
|
}
|
|
247
282
|
// Still blocked (a refusal re-queued it, or the agent was busy): again.
|
|
283
|
+
if (this.episodes.get(sessionName) === ep) {
|
|
284
|
+
await this.maybeRestart(sessionName, ep);
|
|
285
|
+
}
|
|
248
286
|
if (this.episodes.get(sessionName) === ep) {
|
|
249
287
|
await this.maybeNotify(sessionName, ep);
|
|
250
288
|
this.schedule(sessionName, ep);
|
|
251
289
|
}
|
|
252
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Last step of the unreadable ladder: restart the agent's session when
|
|
293
|
+
* its box has been unreadable for RESTART_AFTER_UNREADABLE_MS, messages
|
|
294
|
+
* are still queued for it, it is not mid-turn, and it was not restarted
|
|
295
|
+
* for this within RESTART_COOLDOWN_MS. The queue drains once the
|
|
296
|
+
* restarted agent registers. Never throws.
|
|
297
|
+
*
|
|
298
|
+
* @param sessionName - The agent
|
|
299
|
+
* @param ep - Its episode
|
|
300
|
+
*/
|
|
301
|
+
async maybeRestart(sessionName, ep) {
|
|
302
|
+
const deps = this.deps;
|
|
303
|
+
if (!deps?.restart || !deps.isMidTurn || ep.unreadableSince === undefined)
|
|
304
|
+
return;
|
|
305
|
+
if (this.restarting.has(sessionName))
|
|
306
|
+
return;
|
|
307
|
+
const now = this.now();
|
|
308
|
+
const unreadableForMs = now - ep.unreadableSince;
|
|
309
|
+
if (unreadableForMs < INPUT_BLOCKED_RETRY_CONSTANTS.RESTART_AFTER_UNREADABLE_MS)
|
|
310
|
+
return;
|
|
311
|
+
const last = this.lastRestart.get(sessionName);
|
|
312
|
+
if (last !== undefined && now - last < INPUT_BLOCKED_RETRY_CONSTANTS.RESTART_COOLDOWN_MS)
|
|
313
|
+
return;
|
|
314
|
+
if (!deps.hasQueued(sessionName))
|
|
315
|
+
return;
|
|
316
|
+
let midTurn = true;
|
|
317
|
+
try {
|
|
318
|
+
midTurn = await deps.isMidTurn(sessionName);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
midTurn = true;
|
|
322
|
+
}
|
|
323
|
+
if (midTurn) {
|
|
324
|
+
this.logger.info('Input box unreadable for a long time, but the agent may be mid-turn — not restarting it yet', {
|
|
325
|
+
sessionName,
|
|
326
|
+
unreadableForMs,
|
|
327
|
+
});
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
this.lastRestart.set(sessionName, now);
|
|
331
|
+
this.restarting.add(sessionName);
|
|
332
|
+
const minutes = Math.round(unreadableForMs / 60_000);
|
|
333
|
+
this.logger.error('Input box unreadable with messages queued — restarting the agent session', {
|
|
334
|
+
sessionName,
|
|
335
|
+
unreadableForMs,
|
|
336
|
+
refusals: ep.refusals,
|
|
337
|
+
});
|
|
338
|
+
let restarted = false;
|
|
339
|
+
let error;
|
|
340
|
+
try {
|
|
341
|
+
restarted = await deps.restart(sessionName);
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
error = err instanceof Error ? err.message : String(err);
|
|
345
|
+
}
|
|
346
|
+
finally {
|
|
347
|
+
this.restarting.delete(sessionName);
|
|
348
|
+
}
|
|
349
|
+
// The next unreadable stretch starts counting from now.
|
|
350
|
+
ep.unreadableSince = undefined;
|
|
351
|
+
traceHarness('harness.recover', {
|
|
352
|
+
session: sessionName,
|
|
353
|
+
summary: `Restarted ${sessionName}: its input box was unreadable for ${minutes} min with messages queued (${ep.refusals} held deliveries)${restarted ? '' : `; restart failed${error ? ` (${error})` : ''}`}`,
|
|
354
|
+
outcome: restarted ? 'ok' : 'failed',
|
|
355
|
+
data: { reason: 'input-unreadable', unreadableMinutes: minutes, refusals: ep.refusals, ...(error ? { error } : {}) },
|
|
356
|
+
});
|
|
357
|
+
if (!restarted) {
|
|
358
|
+
this.logger.warn('Could not restart the agent with an unreadable input box', { sessionName, error });
|
|
359
|
+
}
|
|
360
|
+
}
|
|
253
361
|
/**
|
|
254
362
|
* Whether an alert about this agent may go out now, and if so record it.
|
|
255
363
|
* One alert per agent per NOTIFY_COOLDOWN_MS; an actionable alert may
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-blocked-retry.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/input-blocked-retry.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input-blocked-retry.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/input-blocked-retry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,6 +91,8 @@ export interface OwnerMessageEntry {
|
|
|
91
91
|
reason: NudgeBlockReason;
|
|
92
92
|
detail?: string;
|
|
93
93
|
};
|
|
94
|
+
/** The nudge was queued for the agent, not typed into its session */
|
|
95
|
+
nudgeQueued?: boolean;
|
|
94
96
|
/** An interim note was posted in chat (a visible "working on it") */
|
|
95
97
|
interimAt?: number;
|
|
96
98
|
/** The nudged agent started a turn after the nudge */
|
|
@@ -103,8 +105,11 @@ export interface OwnerMessageEntry {
|
|
|
103
105
|
/** Why a nudge could not reach the agent. */
|
|
104
106
|
export type NudgeBlockReason = 'asleep' | 'login' | 'error' | 'spend_cap';
|
|
105
107
|
/** Outcome of one nudge. */
|
|
106
|
-
export type NudgeOutcome =
|
|
108
|
+
export type NudgeOutcome =
|
|
109
|
+
/** `queued`: accepted into the agent's queue (busy, or its input held), not delivered yet */
|
|
110
|
+
{
|
|
107
111
|
outcome: 'sent';
|
|
112
|
+
queued?: boolean;
|
|
108
113
|
} | {
|
|
109
114
|
outcome: 'blocked';
|
|
110
115
|
reason: NudgeBlockReason;
|
|
@@ -135,6 +140,12 @@ export interface OwnerMessageWatchdogDeps {
|
|
|
135
140
|
scope?: string;
|
|
136
141
|
teamName?: string;
|
|
137
142
|
} | null;
|
|
143
|
+
/**
|
|
144
|
+
* Why messages to the agent are held, if they are: its input box cannot be
|
|
145
|
+
* read (Crewly recovers it: resize, then restart), or holds text Crewly did
|
|
146
|
+
* not write. A note never claims a reminder was sent while it is held.
|
|
147
|
+
*/
|
|
148
|
+
inputHeld?: (agentSession: string) => 'unreadable' | 'foreign' | null;
|
|
138
149
|
/** Display name for notes ("Ella"); defaults to the session name. */
|
|
139
150
|
displayNameOf?: (agentSession: string) => string;
|
|
140
151
|
/** Persisted state; omitted in tests that do not exercise restarts. */
|
|
@@ -182,6 +193,8 @@ export declare class OwnerMessageWatchdogService {
|
|
|
182
193
|
private readonly resolved;
|
|
183
194
|
/** Thread → when an answer was last seen there (answers can beat the tracking call). */
|
|
184
195
|
private readonly recentAnswers;
|
|
196
|
+
/** Last "session is stuck" note per agent (one per STUCK_NOTE_COOLDOWN_MS) */
|
|
197
|
+
private readonly stuckNotedAt;
|
|
185
198
|
private timer;
|
|
186
199
|
private ticking;
|
|
187
200
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-message-watchdog.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-message-watchdog.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,iGAAiG;AACjG,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,yFAAyF;IACzF,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2BAA2B;AAC3B,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,mBAAmB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;IAC3D,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,6CAA6C;AAC7C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;AAE1E,4BAA4B;AAC5B,MAAM,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"owner-message-watchdog.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/owner-message-watchdog.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,8 @@ export class OwnerMessageWatchdogService {
|
|
|
67
67
|
resolved = new Map();
|
|
68
68
|
/** Thread → when an answer was last seen there (answers can beat the tracking call). */
|
|
69
69
|
recentAnswers = new Map();
|
|
70
|
+
/** Last "session is stuck" note per agent (one per STUCK_NOTE_COOLDOWN_MS) */
|
|
71
|
+
stuckNotedAt = new Map();
|
|
70
72
|
timer = null;
|
|
71
73
|
ticking = false;
|
|
72
74
|
/**
|
|
@@ -480,6 +482,7 @@ export class OwnerMessageWatchdogService {
|
|
|
480
482
|
}
|
|
481
483
|
entry.stage = 'nudged';
|
|
482
484
|
entry.nudgedAt = this.now();
|
|
485
|
+
entry.nudgeQueued = outcome.outcome === 'sent' && outcome.queued === true;
|
|
483
486
|
entry.busyAfterNudge = false;
|
|
484
487
|
entry.turnDoneAfterNudge = false;
|
|
485
488
|
if (outcome.outcome === 'blocked') {
|
|
@@ -511,6 +514,20 @@ export class OwnerMessageWatchdogService {
|
|
|
511
514
|
*/
|
|
512
515
|
async note(entry, kind) {
|
|
513
516
|
const text = this.noteText(entry, kind);
|
|
517
|
+
if (text === fill(C.NOTE_STUCK_TEXT, { name: this.deps.displayNameOf?.(entry.responsible) || entry.responsible })) {
|
|
518
|
+
// One "session is stuck" note per agent: every waiting message would
|
|
519
|
+
// otherwise repeat it.
|
|
520
|
+
const last = this.stuckNotedAt.get(entry.responsible);
|
|
521
|
+
if (last !== undefined && this.now() - last < C.STUCK_NOTE_COOLDOWN_MS) {
|
|
522
|
+
this.logger.info('Owner message waits on a stuck session already reported — no second note', {
|
|
523
|
+
key: entry.key,
|
|
524
|
+
responsible: entry.responsible,
|
|
525
|
+
});
|
|
526
|
+
this.finish(entry, 'noted (stuck, already reported)');
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
this.stuckNotedAt.set(entry.responsible, this.now());
|
|
530
|
+
}
|
|
514
531
|
let posted = false;
|
|
515
532
|
try {
|
|
516
533
|
posted = await this.deps.postNote(entry, text);
|
|
@@ -555,6 +572,15 @@ export class OwnerMessageWatchdogService {
|
|
|
555
572
|
}
|
|
556
573
|
if (kind === 'cap')
|
|
557
574
|
return fill(C.NOTE_BUSY_CAP_TEXT, { name, waited });
|
|
575
|
+
// "I've sent a reminder" only when the reminder really reached the agent
|
|
576
|
+
// (2026-10-08 Ella: it went into the same stuck queue, twice).
|
|
577
|
+
const held = this.deps.inputHeld?.(entry.responsible) ?? null;
|
|
578
|
+
if (held === 'unreadable')
|
|
579
|
+
return fill(C.NOTE_STUCK_TEXT, { name });
|
|
580
|
+
if (held === 'foreign')
|
|
581
|
+
return fill(C.NOTE_INPUT_FOREIGN_TEXT, { name, waited });
|
|
582
|
+
if (entry.nudgeQueued)
|
|
583
|
+
return fill(C.NOTE_SILENT_QUEUED_TEXT, { name, waited });
|
|
558
584
|
return fill(C.NOTE_SILENT_TEXT, { name, waited });
|
|
559
585
|
}
|
|
560
586
|
/**
|