crewly 1.20.197 → 1.20.198
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/config/roles/orchestrator/prompt.md +8 -9
- package/config/roles/team-leader/prompt.md +6 -0
- package/config/skills/agent/computer-use/SKILL.md +16 -0
- package/config/skills/agent/core/ask-owner/SKILL.md +14 -0
- package/config/skills/agent/core/ask-owner/execute.sh +19 -1
- package/config/skills/agent/core/ask-owner/execute.test.sh +12 -0
- package/config/skills/agent/core/gmail-send/SKILL.md +16 -0
- package/config/skills/agent/core/reply-channel/SKILL.md +16 -0
- package/config/skills/agent/core/slack-post/SKILL.md +16 -0
- package/config/skills/agent/core/whatsapp-send/SKILL.md +16 -0
- package/config/skills/agent/remote-browser/SKILL.md +43 -7
- package/config/skills/registry.json +7 -7
- package/dist/backend/backend/src/constants.d.ts +143 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +159 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +12 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +118 -3
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +5 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +37 -52
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +13 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +17 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +102 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +5 -8
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +12 -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 +275 -241
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +5 -6
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +6 -0
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +2 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +12 -8
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +32 -27
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts +44 -0
- package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/owner-stopped.registry.js +54 -0
- package/dist/backend/backend/src/services/agent/owner-stopped.registry.js.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +4 -4
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +4 -8
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +19 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -5
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts +2 -2
- package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-approval.service.js +13 -2
- package/dist/backend/backend/src/services/browser/browser-approval.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-outbound-guard.d.ts +214 -0
- package/dist/backend/backend/src/services/browser/browser-outbound-guard.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-outbound-guard.js +466 -0
- package/dist/backend/backend/src/services/browser/browser-outbound-guard.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +23 -2
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-session.service.js +110 -62
- package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/held-action-store.d.ts +4 -0
- package/dist/backend/backend/src/services/browser/held-action-store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/held-action-store.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js +6 -8
- package/dist/backend/backend/src/services/cloud/cloud-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts +129 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js +196 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +42 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +88 -10
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.js +5 -0
- package/dist/backend/backend/src/services/monitoring/agent-hook-state.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +5 -9
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +11 -0
- 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 +14 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +37 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +78 -0
- package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +13 -0
- 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.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +118 -105
- 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 +267 -298
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts +144 -0
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/tui-input-guard.js +312 -0
- package/dist/backend/backend/src/services/session/tui-input-guard.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +14 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +31 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +82 -4
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +2 -2
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.js +4 -0
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -1
- package/dist/backend/backend/src/services/trace/turn-origin.d.ts +70 -0
- package/dist/backend/backend/src/services/trace/turn-origin.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/turn-origin.js +198 -0
- package/dist/backend/backend/src/services/trace/turn-origin.js.map +1 -0
- package/dist/backend/backend/src/types/slack.types.d.ts +8 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js +3 -2
- package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +143 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +159 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +12 -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 +275 -241
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +5 -6
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +6 -0
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +2 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +12 -8
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +32 -27
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +4 -4
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +4 -8
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +19 -4
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -5
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts +129 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js +196 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +42 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +88 -10
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +11 -0
- 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 +14 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +37 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +78 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +13 -0
- 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.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +118 -105
- 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 +267 -298
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts +144 -0
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/tui-input-guard.js +312 -0
- package/dist/cli/backend/src/services/session/tui-input-guard.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +14 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +31 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +82 -4
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +2 -2
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.js +4 -0
- package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -1
- package/dist/cli/backend/src/services/trace/turn-origin.d.ts +70 -0
- package/dist/cli/backend/src/services/trace/turn-origin.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/turn-origin.js +198 -0
- package/dist/cli/backend/src/services/trace/turn-origin.js.map +1 -0
- package/dist/cli/backend/src/types/slack.types.d.ts +8 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js +3 -2
- package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +0 -118
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js +0 -304
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +0 -1
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +0 -100
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +0 -149
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input-blocked retry — keeps retrying messages the input guard held back,
|
|
3
|
+
* and tells someone when an agent's input stays blocked.
|
|
4
|
+
*
|
|
5
|
+
* Since crewly#1014 the harness types into an agent only when its input box
|
|
6
|
+
* is readable and empty, and presses Enter only on text it can prove it
|
|
7
|
+
* wrote. A refused message goes back on the agent's queue
|
|
8
|
+
* (`[INPUT_NOT_OURS]`). The queue otherwise drains only on registration or
|
|
9
|
+
* on a busy→idle change — an agent sitting idle in front of a box holding
|
|
10
|
+
* someone's half-typed text would never get it. This service:
|
|
11
|
+
*
|
|
12
|
+
* - retries on a timer while the queue is non-empty and the agent is idle,
|
|
13
|
+
* with backoff (15 s → 2 min);
|
|
14
|
+
* - after a few minutes or a few refusals, tells the owner/orchestrator once
|
|
15
|
+
* per blocked episode what kind of content blocks it (never the text: a
|
|
16
|
+
* box can hold a password or a code);
|
|
17
|
+
* - clears its state when a delivery to the agent succeeds.
|
|
18
|
+
*
|
|
19
|
+
* @module services/messaging/input-blocked-retry.service
|
|
20
|
+
*/
|
|
21
|
+
/** What the guard saw when it refused. */
|
|
22
|
+
export interface InputRefusal {
|
|
23
|
+
/** `unknown` (unreadable) or `foreign` (someone else's text) */
|
|
24
|
+
state: string;
|
|
25
|
+
/** How many characters the box held (its text is never kept or shown) */
|
|
26
|
+
inputLength: number;
|
|
27
|
+
/** The message that was held */
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
/** A blocked episode, as passed to the notifier. */
|
|
31
|
+
export interface InputBlockedNotice {
|
|
32
|
+
sessionName: string;
|
|
33
|
+
state: string;
|
|
34
|
+
/** How many characters of text not written by Crewly the box held */
|
|
35
|
+
inputLength: number;
|
|
36
|
+
refusals: number;
|
|
37
|
+
blockedForMs: number;
|
|
38
|
+
/** The first held message (to find its origin) */
|
|
39
|
+
message: string;
|
|
40
|
+
}
|
|
41
|
+
/** Collaborators (wired in index.ts). */
|
|
42
|
+
export interface InputBlockedRetryDeps {
|
|
43
|
+
/** Messages still queued for the agent */
|
|
44
|
+
hasQueued(sessionName: string): boolean;
|
|
45
|
+
/** The agent is not in a turn */
|
|
46
|
+
isIdle(sessionName: string): boolean;
|
|
47
|
+
/** Deliver the agent's queued messages now */
|
|
48
|
+
flush(sessionName: string): Promise<void>;
|
|
49
|
+
/** Tell the owner / orchestrator once */
|
|
50
|
+
notify(notice: InputBlockedNotice): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Retries held messages and reports agents whose input stays blocked.
|
|
54
|
+
*/
|
|
55
|
+
export declare class InputBlockedRetryService {
|
|
56
|
+
private static instance;
|
|
57
|
+
private deps;
|
|
58
|
+
private readonly episodes;
|
|
59
|
+
private readonly logger;
|
|
60
|
+
private readonly now;
|
|
61
|
+
/**
|
|
62
|
+
* @param now - Clock (tests)
|
|
63
|
+
*/
|
|
64
|
+
constructor(now?: () => number);
|
|
65
|
+
/**
|
|
66
|
+
* The process-wide service.
|
|
67
|
+
*
|
|
68
|
+
* @returns The singleton
|
|
69
|
+
*/
|
|
70
|
+
static getInstance(): InputBlockedRetryService;
|
|
71
|
+
/**
|
|
72
|
+
* Replace the singleton (tests).
|
|
73
|
+
*
|
|
74
|
+
* @param service - The service, or null to rebuild lazily
|
|
75
|
+
*/
|
|
76
|
+
static setInstance(service: InputBlockedRetryService | null): void;
|
|
77
|
+
/**
|
|
78
|
+
* Wire collaborators. Without them refusals are only counted.
|
|
79
|
+
*
|
|
80
|
+
* @param deps - Collaborators
|
|
81
|
+
*/
|
|
82
|
+
setDeps(deps: InputBlockedRetryDeps): void;
|
|
83
|
+
/**
|
|
84
|
+
* The guard refused to deliver to this agent; the message is queued.
|
|
85
|
+
*
|
|
86
|
+
* @param sessionName - The agent
|
|
87
|
+
* @param refusal - What the guard saw
|
|
88
|
+
*/
|
|
89
|
+
noteRefusal(sessionName: string, refusal: InputRefusal): void;
|
|
90
|
+
/**
|
|
91
|
+
* A delivery to this agent went through: the episode is over.
|
|
92
|
+
*
|
|
93
|
+
* @param sessionName - The agent
|
|
94
|
+
*/
|
|
95
|
+
noteDelivered(sessionName: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Whether an agent is in a blocked episode.
|
|
98
|
+
*
|
|
99
|
+
* @param sessionName - The agent
|
|
100
|
+
* @returns True while blocked
|
|
101
|
+
*/
|
|
102
|
+
isBlocked(sessionName: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Stop all timers (shutdown, tests).
|
|
105
|
+
*/
|
|
106
|
+
stop(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Schedule the next retry with backoff, unless one is pending.
|
|
109
|
+
*
|
|
110
|
+
* @param sessionName - The agent
|
|
111
|
+
* @param ep - Its episode
|
|
112
|
+
*/
|
|
113
|
+
private schedule;
|
|
114
|
+
/**
|
|
115
|
+
* One retry: flush the queue when the agent is idle, else wait again.
|
|
116
|
+
*
|
|
117
|
+
* @param sessionName - The agent
|
|
118
|
+
* @param ep - Its episode
|
|
119
|
+
*/
|
|
120
|
+
private retry;
|
|
121
|
+
/**
|
|
122
|
+
* Tell someone once per episode, after long enough or often enough.
|
|
123
|
+
*
|
|
124
|
+
* @param sessionName - The agent
|
|
125
|
+
* @param ep - Its episode
|
|
126
|
+
*/
|
|
127
|
+
private maybeNotify;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=input-blocked-retry.service.d.ts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC5B,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACrC,0CAA0C;IAC1C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,iCAAiC;IACjC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,8CAA8C;IAC9C,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,yCAAyC;IACzC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAaD;;GAEG;AACH,qBAAa,wBAAwB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyC;IAChE,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC;;OAEG;gBACS,GAAG,GAAE,MAAM,MAAiB;IAKxC;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,wBAAwB;IAK9C;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI;IAKlE;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAiB7D;;;;OAIG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQxC;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAYhB;;;;;OAKG;YACW,KAAK;IAqBnB;;;;;OAKG;YACW,WAAW;CAoBzB"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input-blocked retry — keeps retrying messages the input guard held back,
|
|
3
|
+
* and tells someone when an agent's input stays blocked.
|
|
4
|
+
*
|
|
5
|
+
* Since crewly#1014 the harness types into an agent only when its input box
|
|
6
|
+
* is readable and empty, and presses Enter only on text it can prove it
|
|
7
|
+
* wrote. A refused message goes back on the agent's queue
|
|
8
|
+
* (`[INPUT_NOT_OURS]`). The queue otherwise drains only on registration or
|
|
9
|
+
* on a busy→idle change — an agent sitting idle in front of a box holding
|
|
10
|
+
* someone's half-typed text would never get it. This service:
|
|
11
|
+
*
|
|
12
|
+
* - retries on a timer while the queue is non-empty and the agent is idle,
|
|
13
|
+
* with backoff (15 s → 2 min);
|
|
14
|
+
* - after a few minutes or a few refusals, tells the owner/orchestrator once
|
|
15
|
+
* per blocked episode what kind of content blocks it (never the text: a
|
|
16
|
+
* box can hold a password or a code);
|
|
17
|
+
* - clears its state when a delivery to the agent succeeds.
|
|
18
|
+
*
|
|
19
|
+
* @module services/messaging/input-blocked-retry.service
|
|
20
|
+
*/
|
|
21
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
22
|
+
import { INPUT_BLOCKED_RETRY_CONSTANTS } from '../../constants.js';
|
|
23
|
+
/**
|
|
24
|
+
* Retries held messages and reports agents whose input stays blocked.
|
|
25
|
+
*/
|
|
26
|
+
export class InputBlockedRetryService {
|
|
27
|
+
static instance = null;
|
|
28
|
+
deps = null;
|
|
29
|
+
episodes = new Map();
|
|
30
|
+
logger;
|
|
31
|
+
now;
|
|
32
|
+
/**
|
|
33
|
+
* @param now - Clock (tests)
|
|
34
|
+
*/
|
|
35
|
+
constructor(now = Date.now) {
|
|
36
|
+
this.logger = LoggerService.getInstance().createComponentLogger('InputBlockedRetry');
|
|
37
|
+
this.now = now;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The process-wide service.
|
|
41
|
+
*
|
|
42
|
+
* @returns The singleton
|
|
43
|
+
*/
|
|
44
|
+
static getInstance() {
|
|
45
|
+
if (!InputBlockedRetryService.instance)
|
|
46
|
+
InputBlockedRetryService.instance = new InputBlockedRetryService();
|
|
47
|
+
return InputBlockedRetryService.instance;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Replace the singleton (tests).
|
|
51
|
+
*
|
|
52
|
+
* @param service - The service, or null to rebuild lazily
|
|
53
|
+
*/
|
|
54
|
+
static setInstance(service) {
|
|
55
|
+
InputBlockedRetryService.instance?.stop();
|
|
56
|
+
InputBlockedRetryService.instance = service;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Wire collaborators. Without them refusals are only counted.
|
|
60
|
+
*
|
|
61
|
+
* @param deps - Collaborators
|
|
62
|
+
*/
|
|
63
|
+
setDeps(deps) {
|
|
64
|
+
this.deps = deps;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The guard refused to deliver to this agent; the message is queued.
|
|
68
|
+
*
|
|
69
|
+
* @param sessionName - The agent
|
|
70
|
+
* @param refusal - What the guard saw
|
|
71
|
+
*/
|
|
72
|
+
noteRefusal(sessionName, refusal) {
|
|
73
|
+
const ep = this.episodes.get(sessionName) ?? {
|
|
74
|
+
firstAt: this.now(),
|
|
75
|
+
refusals: 0,
|
|
76
|
+
attempt: 0,
|
|
77
|
+
notified: false,
|
|
78
|
+
last: refusal,
|
|
79
|
+
firstMessage: refusal.message,
|
|
80
|
+
timer: null,
|
|
81
|
+
};
|
|
82
|
+
ep.refusals += 1;
|
|
83
|
+
ep.last = refusal;
|
|
84
|
+
this.episodes.set(sessionName, ep);
|
|
85
|
+
void this.maybeNotify(sessionName, ep);
|
|
86
|
+
this.schedule(sessionName, ep);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A delivery to this agent went through: the episode is over.
|
|
90
|
+
*
|
|
91
|
+
* @param sessionName - The agent
|
|
92
|
+
*/
|
|
93
|
+
noteDelivered(sessionName) {
|
|
94
|
+
const ep = this.episodes.get(sessionName);
|
|
95
|
+
if (!ep)
|
|
96
|
+
return;
|
|
97
|
+
if (ep.timer)
|
|
98
|
+
clearTimeout(ep.timer);
|
|
99
|
+
this.episodes.delete(sessionName);
|
|
100
|
+
this.logger.info('Agent input unblocked — held messages are flowing again', { sessionName, refusals: ep.refusals });
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Whether an agent is in a blocked episode.
|
|
104
|
+
*
|
|
105
|
+
* @param sessionName - The agent
|
|
106
|
+
* @returns True while blocked
|
|
107
|
+
*/
|
|
108
|
+
isBlocked(sessionName) {
|
|
109
|
+
return this.episodes.has(sessionName);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stop all timers (shutdown, tests).
|
|
113
|
+
*/
|
|
114
|
+
stop() {
|
|
115
|
+
for (const ep of this.episodes.values())
|
|
116
|
+
if (ep.timer)
|
|
117
|
+
clearTimeout(ep.timer);
|
|
118
|
+
this.episodes.clear();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Schedule the next retry with backoff, unless one is pending.
|
|
122
|
+
*
|
|
123
|
+
* @param sessionName - The agent
|
|
124
|
+
* @param ep - Its episode
|
|
125
|
+
*/
|
|
126
|
+
schedule(sessionName, ep) {
|
|
127
|
+
if (ep.timer || !this.deps)
|
|
128
|
+
return;
|
|
129
|
+
const delays = INPUT_BLOCKED_RETRY_CONSTANTS.RETRY_DELAYS_MS;
|
|
130
|
+
const wait = delays[Math.min(ep.attempt, delays.length - 1)];
|
|
131
|
+
ep.attempt += 1;
|
|
132
|
+
ep.timer = setTimeout(() => {
|
|
133
|
+
ep.timer = null;
|
|
134
|
+
void this.retry(sessionName, ep);
|
|
135
|
+
}, wait);
|
|
136
|
+
ep.timer.unref?.();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* One retry: flush the queue when the agent is idle, else wait again.
|
|
140
|
+
*
|
|
141
|
+
* @param sessionName - The agent
|
|
142
|
+
* @param ep - Its episode
|
|
143
|
+
*/
|
|
144
|
+
async retry(sessionName, ep) {
|
|
145
|
+
const deps = this.deps;
|
|
146
|
+
if (!deps || this.episodes.get(sessionName) !== ep)
|
|
147
|
+
return;
|
|
148
|
+
if (!deps.hasQueued(sessionName)) {
|
|
149
|
+
this.episodes.delete(sessionName);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (deps.isIdle(sessionName)) {
|
|
153
|
+
try {
|
|
154
|
+
await deps.flush(sessionName);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
this.logger.warn('Retry of held messages failed', { sessionName, error: err instanceof Error ? err.message : String(err) });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Still blocked (a refusal re-queued it, or the agent was busy): again.
|
|
161
|
+
if (this.episodes.get(sessionName) === ep) {
|
|
162
|
+
await this.maybeNotify(sessionName, ep);
|
|
163
|
+
this.schedule(sessionName, ep);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Tell someone once per episode, after long enough or often enough.
|
|
168
|
+
*
|
|
169
|
+
* @param sessionName - The agent
|
|
170
|
+
* @param ep - Its episode
|
|
171
|
+
*/
|
|
172
|
+
async maybeNotify(sessionName, ep) {
|
|
173
|
+
if (ep.notified || !this.deps)
|
|
174
|
+
return;
|
|
175
|
+
const blockedForMs = this.now() - ep.firstAt;
|
|
176
|
+
if (blockedForMs < INPUT_BLOCKED_RETRY_CONSTANTS.NOTIFY_AFTER_MS && ep.refusals < INPUT_BLOCKED_RETRY_CONSTANTS.NOTIFY_AFTER_REFUSALS)
|
|
177
|
+
return;
|
|
178
|
+
ep.notified = true;
|
|
179
|
+
const notice = {
|
|
180
|
+
sessionName,
|
|
181
|
+
state: ep.last.state,
|
|
182
|
+
inputLength: ep.last.inputLength,
|
|
183
|
+
refusals: ep.refusals,
|
|
184
|
+
blockedForMs,
|
|
185
|
+
message: ep.firstMessage,
|
|
186
|
+
};
|
|
187
|
+
this.logger.error('Agent input blocked — telling the owner', { ...notice, message: undefined });
|
|
188
|
+
try {
|
|
189
|
+
await this.deps.notify(notice);
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
this.logger.warn('Could not send the input-blocked notice', { sessionName, error: err instanceof Error ? err.message : String(err) });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=input-blocked-retry.service.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -13,6 +13,16 @@
|
|
|
13
13
|
/**
|
|
14
14
|
* A single queued message destined for a sub-agent.
|
|
15
15
|
*/
|
|
16
|
+
/** Why queued messages were dropped undelivered. */
|
|
17
|
+
export type QueueDropReason = 'aged-out' | 'capacity' | 'undeliverable';
|
|
18
|
+
/**
|
|
19
|
+
* Told when undelivered messages are dropped, so someone hears about it.
|
|
20
|
+
*
|
|
21
|
+
* @param sessionName - The agent they were for
|
|
22
|
+
* @param dropped - The dropped messages
|
|
23
|
+
* @param reason - Why
|
|
24
|
+
*/
|
|
25
|
+
export type QueueDropListener = (sessionName: string, dropped: QueuedAgentMessage[], reason: QueueDropReason) => void;
|
|
16
26
|
export interface QueuedAgentMessage {
|
|
17
27
|
/** The raw data string to write to the agent's terminal */
|
|
18
28
|
data: string;
|
|
@@ -20,6 +30,8 @@ export interface QueuedAgentMessage {
|
|
|
20
30
|
queuedAt: number;
|
|
21
31
|
/** The target session name */
|
|
22
32
|
sessionName: string;
|
|
33
|
+
/** Failed delivery attempts so far (a send that threw or reported failure) */
|
|
34
|
+
attempts?: number;
|
|
23
35
|
}
|
|
24
36
|
/**
|
|
25
37
|
* Decides whether a queued message has gone stale and must not be delivered.
|
|
@@ -41,6 +53,10 @@ export declare class SubAgentMessageQueue {
|
|
|
41
53
|
private logger;
|
|
42
54
|
private readonly storePath;
|
|
43
55
|
private staleCheck;
|
|
56
|
+
/** Told when undelivered messages are dropped (never silently: crewly#1014) */
|
|
57
|
+
private dropListener;
|
|
58
|
+
/** Drops that happened before a listener was set (aged out at load) */
|
|
59
|
+
private unreportedDrops;
|
|
44
60
|
private constructor();
|
|
45
61
|
/**
|
|
46
62
|
* Read back anything that was still undelivered when the process ended.
|
|
@@ -66,6 +82,30 @@ export declare class SubAgentMessageQueue {
|
|
|
66
82
|
* Reset the singleton instance (for testing only).
|
|
67
83
|
*/
|
|
68
84
|
static resetInstance(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Whether this exact message is already queued for the agent.
|
|
87
|
+
*
|
|
88
|
+
* @param sessionName - The agent
|
|
89
|
+
* @param data - The message
|
|
90
|
+
* @returns True when queued
|
|
91
|
+
*/
|
|
92
|
+
contains(sessionName: string, data: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Install the listener told about messages dropped undelivered (aged out
|
|
95
|
+
* at load, or the oldest at capacity). Drops from before it was set are
|
|
96
|
+
* reported right away.
|
|
97
|
+
*
|
|
98
|
+
* @param listener - The listener, or null
|
|
99
|
+
*/
|
|
100
|
+
setDropListener(listener: QueueDropListener | null): void;
|
|
101
|
+
/**
|
|
102
|
+
* Tell the listener about a drop (or keep it until one is set).
|
|
103
|
+
*
|
|
104
|
+
* @param sessionName - The agent
|
|
105
|
+
* @param dropped - The dropped messages
|
|
106
|
+
* @param reason - Why
|
|
107
|
+
*/
|
|
108
|
+
private reportDrop;
|
|
69
109
|
/**
|
|
70
110
|
* Install the check that drops stale messages before delivery.
|
|
71
111
|
*
|
|
@@ -137,6 +177,8 @@ export declare class SubAgentMessageQueue {
|
|
|
137
177
|
*/
|
|
138
178
|
flush(sessionName: string, send: (data: string) => Promise<{
|
|
139
179
|
queued?: boolean;
|
|
180
|
+
success?: boolean;
|
|
181
|
+
error?: string;
|
|
140
182
|
}>, gapMs?: number): Promise<{
|
|
141
183
|
delivered: number;
|
|
142
184
|
deferred: number;
|
package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-message-queue.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/sub-agent-message-queue.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sub-agent-message-queue.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/sub-agent-message-queue.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,10 @@ export class SubAgentMessageQueue {
|
|
|
29
29
|
logger;
|
|
30
30
|
storePath;
|
|
31
31
|
staleCheck = null;
|
|
32
|
+
/** Told when undelivered messages are dropped (never silently: crewly#1014) */
|
|
33
|
+
dropListener = null;
|
|
34
|
+
/** Drops that happened before a listener was set (aged out at load) */
|
|
35
|
+
unreportedDrops = [];
|
|
32
36
|
constructor(storePath) {
|
|
33
37
|
this.logger = LoggerService.getInstance().createComponentLogger('SubAgentMessageQueue');
|
|
34
38
|
this.storePath = storePath ?? path.join(getCrewlyHomePath(), 'sub-agent-message-queue.json');
|
|
@@ -55,10 +59,11 @@ export class SubAgentMessageQueue {
|
|
|
55
59
|
return;
|
|
56
60
|
let restored = 0;
|
|
57
61
|
for (const [sessionName, messages] of Object.entries(stored.queues)) {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
const valid = (messages ?? []).filter((m) => m && typeof m.data === 'string' && typeof m.queuedAt === 'number');
|
|
63
|
+
const usable = valid.filter((m) => Date.now() - m.queuedAt <= SUB_AGENT_QUEUE_CONSTANTS.MAX_AGE_MS);
|
|
64
|
+
if (usable.length < valid.length) {
|
|
65
|
+
this.unreportedDrops.push({ sessionName, dropped: valid.filter((m) => !usable.includes(m)), reason: 'aged-out' });
|
|
66
|
+
}
|
|
62
67
|
if (usable.length === 0)
|
|
63
68
|
continue;
|
|
64
69
|
this.pendingMessages.set(sessionName, usable);
|
|
@@ -111,6 +116,51 @@ export class SubAgentMessageQueue {
|
|
|
111
116
|
static resetInstance() {
|
|
112
117
|
SubAgentMessageQueue.instance = null;
|
|
113
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Whether this exact message is already queued for the agent.
|
|
121
|
+
*
|
|
122
|
+
* @param sessionName - The agent
|
|
123
|
+
* @param data - The message
|
|
124
|
+
* @returns True when queued
|
|
125
|
+
*/
|
|
126
|
+
contains(sessionName, data) {
|
|
127
|
+
return (this.pendingMessages.get(sessionName) ?? []).some((m) => m.data === data);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Install the listener told about messages dropped undelivered (aged out
|
|
131
|
+
* at load, or the oldest at capacity). Drops from before it was set are
|
|
132
|
+
* reported right away.
|
|
133
|
+
*
|
|
134
|
+
* @param listener - The listener, or null
|
|
135
|
+
*/
|
|
136
|
+
setDropListener(listener) {
|
|
137
|
+
this.dropListener = listener;
|
|
138
|
+
if (!listener)
|
|
139
|
+
return;
|
|
140
|
+
const pending = this.unreportedDrops;
|
|
141
|
+
this.unreportedDrops = [];
|
|
142
|
+
for (const d of pending)
|
|
143
|
+
this.reportDrop(d.sessionName, d.dropped, d.reason);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Tell the listener about a drop (or keep it until one is set).
|
|
147
|
+
*
|
|
148
|
+
* @param sessionName - The agent
|
|
149
|
+
* @param dropped - The dropped messages
|
|
150
|
+
* @param reason - Why
|
|
151
|
+
*/
|
|
152
|
+
reportDrop(sessionName, dropped, reason) {
|
|
153
|
+
if (!this.dropListener) {
|
|
154
|
+
this.unreportedDrops.push({ sessionName, dropped, reason });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
this.dropListener(sessionName, dropped, reason);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
this.logger.warn('Queue drop listener failed', { sessionName, error: err instanceof Error ? err.message : String(err) });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
114
164
|
/**
|
|
115
165
|
* Install the check that drops stale messages before delivery.
|
|
116
166
|
*
|
|
@@ -215,6 +265,8 @@ export class SubAgentMessageQueue {
|
|
|
215
265
|
droppedAt: dropped?.queuedAt,
|
|
216
266
|
queueSize: queue.length,
|
|
217
267
|
});
|
|
268
|
+
if (dropped)
|
|
269
|
+
this.reportDrop(sessionName, [dropped], 'capacity');
|
|
218
270
|
}
|
|
219
271
|
queue.push({
|
|
220
272
|
data,
|
|
@@ -271,6 +323,24 @@ export class SubAgentMessageQueue {
|
|
|
271
323
|
async flush(sessionName, send, gapMs = 0) {
|
|
272
324
|
const pending = this.dequeueAll(sessionName);
|
|
273
325
|
const out = { delivered: 0, deferred: 0, failed: 0, skippedStale: 0 };
|
|
326
|
+
// A send that failed ("Session does not exist", "Runtime has exited")
|
|
327
|
+
// or threw is not a delivery: the message goes back on the queue, up
|
|
328
|
+
// to MAX_DELIVERY_ATTEMPTS, then the drop is reported (crewly#1014).
|
|
329
|
+
const maxAttempts = SUB_AGENT_QUEUE_CONSTANTS.MAX_DELIVERY_ATTEMPTS ?? 5;
|
|
330
|
+
const failedAgain = [];
|
|
331
|
+
const undeliverable = [];
|
|
332
|
+
const noteFailure = (queued, error) => {
|
|
333
|
+
out.failed += 1;
|
|
334
|
+
const attempts = (queued.attempts ?? 0) + 1;
|
|
335
|
+
if (attempts >= maxAttempts) {
|
|
336
|
+
undeliverable.push({ ...queued, attempts });
|
|
337
|
+
this.logger.error('Queued message could not be delivered — giving up and reporting it', { sessionName, attempts, error });
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
failedAgain.push({ ...queued, attempts });
|
|
341
|
+
this.logger.warn('Queued message not delivered — kept for the next attempt', { sessionName, attempts, error });
|
|
342
|
+
}
|
|
343
|
+
};
|
|
274
344
|
for (const [i, queued] of pending.entries()) {
|
|
275
345
|
if (await this.isStale(queued.data, sessionName)) {
|
|
276
346
|
out.skippedStale += 1;
|
|
@@ -278,7 +348,10 @@ export class SubAgentMessageQueue {
|
|
|
278
348
|
}
|
|
279
349
|
try {
|
|
280
350
|
const result = await send(queued.data);
|
|
281
|
-
if (result
|
|
351
|
+
if (result && result.success === false && !result.queued) {
|
|
352
|
+
noteFailure(queued, result.error ?? 'delivery failed');
|
|
353
|
+
}
|
|
354
|
+
else if (result?.queued) {
|
|
282
355
|
out.deferred += 1;
|
|
283
356
|
this.logger.info('Queued message deferred again — agent still busy', {
|
|
284
357
|
sessionName,
|
|
@@ -294,16 +367,21 @@ export class SubAgentMessageQueue {
|
|
|
294
367
|
}
|
|
295
368
|
}
|
|
296
369
|
catch (err) {
|
|
297
|
-
|
|
298
|
-
this.logger.error('Failed to deliver a queued message', {
|
|
299
|
-
sessionName,
|
|
300
|
-
error: err instanceof Error ? err.message : String(err),
|
|
301
|
-
});
|
|
370
|
+
noteFailure(queued, err instanceof Error ? err.message : String(err));
|
|
302
371
|
}
|
|
303
372
|
if (gapMs > 0 && i < pending.length - 1) {
|
|
304
373
|
await new Promise((r) => setTimeout(r, gapMs));
|
|
305
374
|
}
|
|
306
375
|
}
|
|
376
|
+
if (failedAgain.length > 0) {
|
|
377
|
+
// Back at the front, in their original order, ahead of anything
|
|
378
|
+
// queued meanwhile.
|
|
379
|
+
const queue = this.pendingMessages.get(sessionName) ?? [];
|
|
380
|
+
this.pendingMessages.set(sessionName, [...failedAgain, ...queue]);
|
|
381
|
+
this.save();
|
|
382
|
+
}
|
|
383
|
+
if (undeliverable.length > 0)
|
|
384
|
+
this.reportDrop(sessionName, undeliverable, 'undeliverable');
|
|
307
385
|
if (out.skippedStale > 0) {
|
|
308
386
|
this.logger.info('Dropped stale queued messages instead of delivering them', {
|
|
309
387
|
sessionName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-message-queue.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/sub-agent-message-queue.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sub-agent-message-queue.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/sub-agent-message-queue.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-hook-state.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/monitoring/agent-hook-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"agent-hook-state.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/monitoring/agent-hook-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,4CAA4C;AAC5C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,MAAM,CAAC;AAEpD,yCAAyC;AACzC,MAAM,WAAW,UAAU;IAC1B,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,qCAAqC;IACrC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,GACvB;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAS3D;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,EACzB,GAAG,GAAE,IAAiB,GACpB,UAAU,GAAG,IAAI,CAsBnB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* @module services/monitoring/agent-hook-state
|
|
13
13
|
*/
|
|
14
14
|
import { AGENT_STATUS_HOOK_CONSTANTS } from '../../constants.js';
|
|
15
|
+
import { notePromptSubmitted } from '../trace/turn-origin.js';
|
|
15
16
|
/**
|
|
16
17
|
* Map a hook event to a signal.
|
|
17
18
|
*
|
|
@@ -49,6 +50,10 @@ const signals = new Map();
|
|
|
49
50
|
* @returns The stored signal, or null when the event carries no waiting information
|
|
50
51
|
*/
|
|
51
52
|
export function recordHookEvent(sessionName, event, notificationType, now = new Date()) {
|
|
53
|
+
// A submitted prompt the harness did not type is an unsolicited turn —
|
|
54
|
+
// record it in the session's trace (2026-10-03 phantom owner input).
|
|
55
|
+
if (event === 'UserPromptSubmit')
|
|
56
|
+
notePromptSubmitted(sessionName);
|
|
52
57
|
const mapped = hookEventToSignal(event, notificationType);
|
|
53
58
|
if (!mapped)
|
|
54
59
|
return null;
|