crewly 1.20.169 → 1.20.171
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/skills/agent/core/reply/SKILL.md +71 -0
- package/config/skills/agent/core/reply/execute.sh +81 -0
- package/config/skills/agent/core/reply/execute.test.sh +87 -0
- package/config/skills/agent/core/schedule-followup/execute.sh +1 -1
- package/config/skills/agent/core/watch-for-event/execute.sh +1 -1
- package/config/skills/orchestrator/delegate-task/execute.sh +1 -0
- package/dist/backend/backend/src/constants.d.ts +70 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +76 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts +36 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +182 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +30 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +171 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.routes.js +4 -0
- package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts +55 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.d.ts +13 -2
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.js +31 -8
- package/dist/backend/backend/src/controllers/trigger/trigger.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +10 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +143 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +6 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +18 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +48 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +271 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +605 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts +179 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +327 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/orc/agent-reply-target.d.ts +95 -0
- package/dist/backend/backend/src/services/orc/agent-reply-target.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/agent-reply-target.js +85 -0
- package/dist/backend/backend/src/services/orc/agent-reply-target.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts +20 -0
- package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-reply-route.service.js +34 -1
- package/dist/backend/backend/src/services/orc/orc-reply-route.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +5 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +13 -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 +40 -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.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +2 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +33 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +68 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +16 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +22 -5
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js +4 -2
- package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js +4 -1
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-classification.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.js +120 -0
- package/dist/backend/backend/src/services/v3/trigger-classification.js.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +50 -2
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js +101 -4
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-expiry.d.ts +70 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.js +136 -0
- package/dist/backend/backend/src/services/v3/trigger-expiry.js.map +1 -0
- package/dist/backend/backend/src/types/slack.types.d.ts +6 -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/types/v2/index.d.ts +2 -2
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts +80 -4
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.js +35 -0
- package/dist/backend/backend/src/types/v2/trigger.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +70 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +76 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +18 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +48 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +271 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +605 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts +20 -0
- package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-reply-route.service.js +34 -1
- package/dist/cli/backend/src/services/orc/orc-reply-route.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +13 -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 +40 -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.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +2 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +33 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +68 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +16 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +22 -5
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +6 -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/types/v2/index.d.ts +2 -2
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts +80 -4
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.js +35 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js.map +1 -1
- package/frontend/dist/assets/{index-9153caca.js → index-212a6639.js} +291 -290
- package/frontend/dist/assets/index-769ba7ac.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-0707e2ac.css +0 -42
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unanswered-owner-message watchdog.
|
|
3
|
+
*
|
|
4
|
+
* Every owner message delivered to an agent on this machine ends in either an
|
|
5
|
+
* answer the owner can see, or ONE plain-words note in the same thread saying
|
|
6
|
+
* who it is waiting on and why. Four different bugs on 2026-09-30 each lost an
|
|
7
|
+
* owner message silently; each was fixed on its own, but nothing guaranteed
|
|
8
|
+
* the end-to-end property. This does.
|
|
9
|
+
*
|
|
10
|
+
* Timeline per message (constants in OWNER_MESSAGE_WATCHDOG_CONSTANTS):
|
|
11
|
+
* - an answer (or a settled placeholder, or `reply --none`) clears it;
|
|
12
|
+
* - a placeholder showing while the agent is mid-turn extends the wait, up
|
|
13
|
+
* to BUSY_EXTEND_CAP_MS, then a note;
|
|
14
|
+
* - T1 → one re-delivery ("nudge") to the responsible agent, waking it;
|
|
15
|
+
* an agent that cannot be reached skips straight to the note;
|
|
16
|
+
* - T2 → one note, and the message is no longer tracked.
|
|
17
|
+
*
|
|
18
|
+
* The service is transport-agnostic: what counts as "delivered", "answered",
|
|
19
|
+
* "busy" and how to nudge / post a note are injected (see the wiring module).
|
|
20
|
+
*
|
|
21
|
+
* @module services/messaging/owner-message-watchdog.service
|
|
22
|
+
* @see specs/2026-09-30-owner-message-guarantee.md
|
|
23
|
+
*/
|
|
24
|
+
/** Where the owner wrote: a Slack conversation, or a Crewly chat (portal / Talk / dashboard). */
|
|
25
|
+
export type OwnerMessageSurface = 'slack' | 'chat';
|
|
26
|
+
/** What a watched message needs to be tracked. */
|
|
27
|
+
export interface OwnerMessageTrackInput {
|
|
28
|
+
surface: OwnerMessageSurface;
|
|
29
|
+
/** Slack channel / DM id (slack surface) */
|
|
30
|
+
slackChannelId?: string;
|
|
31
|
+
/** Slack thread root the answer belongs in (slack surface) */
|
|
32
|
+
threadTs?: string;
|
|
33
|
+
/** The owner's Slack message ts (dedupe key for slack) */
|
|
34
|
+
sourceTs?: string;
|
|
35
|
+
/** chat-v2 channel / conversation the message was recorded in (both surfaces when known) */
|
|
36
|
+
chatChannelId?: string;
|
|
37
|
+
/** chat-v2 thread the answer belongs in (huddles) */
|
|
38
|
+
chatThreadId?: string;
|
|
39
|
+
/** chat-v2 message id (dedupe key for chat) */
|
|
40
|
+
messageId?: string;
|
|
41
|
+
/** The agent that must answer (nudged at T1, named in the note) */
|
|
42
|
+
responsible: string;
|
|
43
|
+
/** Every agent that holds the message */
|
|
44
|
+
recipients: readonly string[];
|
|
45
|
+
/** True when at least one recipient was required to answer (DM, @mention, woken lead) */
|
|
46
|
+
required: boolean;
|
|
47
|
+
/** The owner's words */
|
|
48
|
+
text: string;
|
|
49
|
+
/** When it arrived (epoch ms); defaults to now */
|
|
50
|
+
receivedAt?: number;
|
|
51
|
+
}
|
|
52
|
+
/** One tracked message. */
|
|
53
|
+
export interface OwnerMessageEntry {
|
|
54
|
+
key: string;
|
|
55
|
+
surface: OwnerMessageSurface;
|
|
56
|
+
slackChannelId?: string;
|
|
57
|
+
threadTs?: string;
|
|
58
|
+
sourceTs?: string;
|
|
59
|
+
chatChannelId?: string;
|
|
60
|
+
chatThreadId?: string;
|
|
61
|
+
messageId?: string;
|
|
62
|
+
responsible: string;
|
|
63
|
+
recipients: string[];
|
|
64
|
+
required: boolean;
|
|
65
|
+
/** Clipped owner text */
|
|
66
|
+
preview: string;
|
|
67
|
+
receivedAt: number;
|
|
68
|
+
stage: 'waiting' | 'nudged';
|
|
69
|
+
nudgedAt?: number;
|
|
70
|
+
/** A nudge that could not reach the agent */
|
|
71
|
+
nudgeBlocked?: {
|
|
72
|
+
reason: NudgeBlockReason;
|
|
73
|
+
detail?: string;
|
|
74
|
+
};
|
|
75
|
+
/** An interim note was posted in chat (a visible "working on it") */
|
|
76
|
+
interimAt?: number;
|
|
77
|
+
/** The nudged agent started a turn after the nudge */
|
|
78
|
+
busyAfterNudge?: boolean;
|
|
79
|
+
/** …and finished it */
|
|
80
|
+
turnDoneAfterNudge?: boolean;
|
|
81
|
+
/** Extension already logged */
|
|
82
|
+
extendedLogged?: boolean;
|
|
83
|
+
}
|
|
84
|
+
/** Why a nudge could not reach the agent. */
|
|
85
|
+
export type NudgeBlockReason = 'asleep' | 'login' | 'error';
|
|
86
|
+
/** Outcome of one nudge. */
|
|
87
|
+
export type NudgeOutcome = {
|
|
88
|
+
outcome: 'sent';
|
|
89
|
+
} | {
|
|
90
|
+
outcome: 'blocked';
|
|
91
|
+
reason: NudgeBlockReason;
|
|
92
|
+
detail?: string;
|
|
93
|
+
};
|
|
94
|
+
/** Pending sign-in, for the one-tap fix in the note. */
|
|
95
|
+
export interface LoginHint {
|
|
96
|
+
/** Human name of the runtime ("Claude", "Codex") */
|
|
97
|
+
runtime: string;
|
|
98
|
+
/** Word the owner types after 重新登录 ("claude", "codex") */
|
|
99
|
+
runtimeCmd: string;
|
|
100
|
+
}
|
|
101
|
+
/** Injected behaviour. */
|
|
102
|
+
export interface OwnerMessageWatchdogDeps {
|
|
103
|
+
/** Is the agent mid-turn right now? */
|
|
104
|
+
isBusy: (agentSession: string) => boolean;
|
|
105
|
+
/** Is a "working on it" placeholder showing where the answer will land (slack surface)? */
|
|
106
|
+
hasVisiblePlaceholder?: (entry: OwnerMessageEntry) => boolean;
|
|
107
|
+
/** Re-deliver the message to its responsible agent, waking it when stopped. */
|
|
108
|
+
nudge: (entry: OwnerMessageEntry, waitedMinutes: number) => Promise<NudgeOutcome>;
|
|
109
|
+
/** Post the note where the owner wrote. Returns false when it could not be posted. */
|
|
110
|
+
postNote: (entry: OwnerMessageEntry, text: string) => Promise<boolean>;
|
|
111
|
+
/** A sign-in the agent's runtime is waiting for, if any. */
|
|
112
|
+
loginRequired?: (agentSession: string) => LoginHint | null;
|
|
113
|
+
/** Display name for notes ("Ella"); defaults to the session name. */
|
|
114
|
+
displayNameOf?: (agentSession: string) => string;
|
|
115
|
+
/** Persisted state; omitted in tests that do not exercise restarts. */
|
|
116
|
+
storePath?: string;
|
|
117
|
+
/** Clock (tests). */
|
|
118
|
+
now?: () => number;
|
|
119
|
+
}
|
|
120
|
+
/** Row of the debug listing. */
|
|
121
|
+
export interface OwnerMessageListing {
|
|
122
|
+
key: string;
|
|
123
|
+
surface: OwnerMessageSurface;
|
|
124
|
+
where: string;
|
|
125
|
+
responsible: string;
|
|
126
|
+
recipients: string[];
|
|
127
|
+
required: boolean;
|
|
128
|
+
ageMinutes: number;
|
|
129
|
+
stage: OwnerMessageEntry['stage'];
|
|
130
|
+
nudgedMinutesAgo?: number;
|
|
131
|
+
nudgeBlocked?: OwnerMessageEntry['nudgeBlocked'];
|
|
132
|
+
preview: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Whether a whole message is a bare acknowledgement ("好", "ok", "👍", "谢谢")
|
|
136
|
+
* that needs no answer.
|
|
137
|
+
*
|
|
138
|
+
* @param text - The owner's message
|
|
139
|
+
* @returns True for an acknowledgement from ACK_WORDS
|
|
140
|
+
*/
|
|
141
|
+
export declare function isAcknowledgement(text: string): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* The dedupe key of a message.
|
|
144
|
+
*
|
|
145
|
+
* @param input - Track input (or entry)
|
|
146
|
+
* @returns `slack:<channel>:<ts>` / `chat:<channel>:<messageId>`, or null when underspecified
|
|
147
|
+
*/
|
|
148
|
+
export declare function ownerMessageKey(input: Pick<OwnerMessageTrackInput, 'surface' | 'slackChannelId' | 'sourceTs' | 'threadTs' | 'chatChannelId' | 'messageId'>): string | null;
|
|
149
|
+
/**
|
|
150
|
+
* Tracks owner messages until they are answered, nudging and then noting.
|
|
151
|
+
*/
|
|
152
|
+
export declare class OwnerMessageWatchdogService {
|
|
153
|
+
private readonly deps;
|
|
154
|
+
private readonly logger;
|
|
155
|
+
private readonly entries;
|
|
156
|
+
/** Recently finished keys, oldest first (Map keeps insertion order). */
|
|
157
|
+
private readonly resolved;
|
|
158
|
+
/** Thread → when an answer was last seen there (answers can beat the tracking call). */
|
|
159
|
+
private readonly recentAnswers;
|
|
160
|
+
private timer;
|
|
161
|
+
private ticking;
|
|
162
|
+
/**
|
|
163
|
+
* @param deps - Injected behaviour (see {@link OwnerMessageWatchdogDeps})
|
|
164
|
+
*/
|
|
165
|
+
constructor(deps: OwnerMessageWatchdogDeps);
|
|
166
|
+
private now;
|
|
167
|
+
/** Start the periodic evaluation. */
|
|
168
|
+
start(): void;
|
|
169
|
+
/** Stop the periodic evaluation. */
|
|
170
|
+
stop(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Start watching an owner message that was delivered to at least one agent.
|
|
173
|
+
* A second delivery of the same message (a hand-off, a re-dispatch) updates
|
|
174
|
+
* the entry rather than adding one; a message already answered is ignored.
|
|
175
|
+
*
|
|
176
|
+
* @param input - The message and who holds it
|
|
177
|
+
* @returns The entry, or null when it is not tracked (ack, answered, underspecified)
|
|
178
|
+
*/
|
|
179
|
+
track(input: OwnerMessageTrackInput): OwnerMessageEntry | null;
|
|
180
|
+
/**
|
|
181
|
+
* Something the owner can see was posted in a Slack thread (an answer, a
|
|
182
|
+
* file, a settled placeholder, a colleague on another machine).
|
|
183
|
+
*
|
|
184
|
+
* @param slackChannelId - Slack channel / DM
|
|
185
|
+
* @param threadTs - Thread root (undefined = top level: clears nothing)
|
|
186
|
+
* @param why - For the log
|
|
187
|
+
* @returns How many entries were cleared
|
|
188
|
+
*/
|
|
189
|
+
noteSlackAnswer(slackChannelId: string, threadTs: string | undefined, why: string): number;
|
|
190
|
+
/**
|
|
191
|
+
* An agent (or the orchestrator) spoke in a Crewly chat channel.
|
|
192
|
+
*
|
|
193
|
+
* @param chatChannelId - chat-v2 channel
|
|
194
|
+
* @param threadId - Thread of the turn (null/undefined = top level)
|
|
195
|
+
* @param interim - An interim note: shown, but the answer is still owed
|
|
196
|
+
* @returns How many entries were cleared
|
|
197
|
+
*/
|
|
198
|
+
noteChatAnswer(chatChannelId: string, threadId: string | null | undefined, interim: boolean): number;
|
|
199
|
+
/**
|
|
200
|
+
* The responsible agent said no answer is needed (`reply --none`) for what
|
|
201
|
+
* it was asked in this conversation.
|
|
202
|
+
*
|
|
203
|
+
* @param agentSession - The agent
|
|
204
|
+
* @param where - Conversation (and thread) of its turn origin
|
|
205
|
+
* @returns How many entries were closed
|
|
206
|
+
*/
|
|
207
|
+
closeByAgent(agentSession: string, where: {
|
|
208
|
+
chatChannelId?: string;
|
|
209
|
+
slackChannelId?: string;
|
|
210
|
+
threadTs?: string;
|
|
211
|
+
}): number;
|
|
212
|
+
/**
|
|
213
|
+
* An agent's working status changed. After a nudge, an optional-only
|
|
214
|
+
* message whose agent then finished a whole turn without answering is
|
|
215
|
+
* that agent's judgement ("not for me") — closed quietly at the next tick.
|
|
216
|
+
*
|
|
217
|
+
* @param agentSession - The agent
|
|
218
|
+
* @param busy - True when a turn started, false when it ended
|
|
219
|
+
*/
|
|
220
|
+
noteAgentTurn(agentSession: string, busy: boolean): void;
|
|
221
|
+
/**
|
|
222
|
+
* Open messages an agent holds (responsible or recipient), oldest first.
|
|
223
|
+
*
|
|
224
|
+
* @param agentSession - The agent
|
|
225
|
+
* @returns Entries
|
|
226
|
+
*/
|
|
227
|
+
owedBy(agentSession: string): OwnerMessageEntry[];
|
|
228
|
+
/**
|
|
229
|
+
* Debug listing of what is still waiting.
|
|
230
|
+
*
|
|
231
|
+
* @returns One row per tracked message, oldest first
|
|
232
|
+
*/
|
|
233
|
+
list(): OwnerMessageListing[];
|
|
234
|
+
/** Number of tracked messages. */
|
|
235
|
+
get size(): number;
|
|
236
|
+
/**
|
|
237
|
+
* Evaluate every tracked message once. Safe to call concurrently (a second
|
|
238
|
+
* call while one runs is a no-op).
|
|
239
|
+
*
|
|
240
|
+
* @returns When the evaluation is done
|
|
241
|
+
*/
|
|
242
|
+
tick(): Promise<void>;
|
|
243
|
+
private evaluate;
|
|
244
|
+
private isVisiblyWorking;
|
|
245
|
+
private runNudge;
|
|
246
|
+
/**
|
|
247
|
+
* Post the one note and stop tracking.
|
|
248
|
+
*
|
|
249
|
+
* @param entry - The message
|
|
250
|
+
* @param kind - Why now
|
|
251
|
+
*/
|
|
252
|
+
private note;
|
|
253
|
+
/**
|
|
254
|
+
* The note in plain words.
|
|
255
|
+
*
|
|
256
|
+
* @param entry - The message
|
|
257
|
+
* @param kind - Why now
|
|
258
|
+
* @returns The note text
|
|
259
|
+
*/
|
|
260
|
+
noteText(entry: OwnerMessageEntry, kind: 'cap' | 'silent' | 'blocked'): string;
|
|
261
|
+
private noteRecentAnswer;
|
|
262
|
+
private remember;
|
|
263
|
+
private finish;
|
|
264
|
+
private persist;
|
|
265
|
+
private load;
|
|
266
|
+
}
|
|
267
|
+
/** @returns The wired watchdog, or null before it started (and in tests). */
|
|
268
|
+
export declare function getOwnerMessageWatchdog(): OwnerMessageWatchdogService | null;
|
|
269
|
+
/** @param service - The watchdog to expose (null to clear) */
|
|
270
|
+
export declare function setOwnerMessageWatchdog(service: OwnerMessageWatchdogService | null): void;
|
|
271
|
+
//# sourceMappingURL=owner-message-watchdog.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|