crewly 1.20.182 → 1.20.184
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 +4 -0
- package/config/skills/agent/core/report-status/execute.sh +4 -2
- package/dist/backend/backend/src/constants.d.ts +79 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +79 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +22 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +25 -24
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts +25 -0
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/request/open-items.controller.js +68 -0
- package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/request/request.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/request/request.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.routes.js +6 -0
- package/dist/backend/backend/src/controllers/request/request.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +15 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +57 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/open-items-backfill.d.ts +16 -0
- package/dist/backend/backend/src/scripts/open-items-backfill.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/open-items-backfill.js +112 -0
- package/dist/backend/backend/src/scripts/open-items-backfill.js.map +1 -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 +4 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +9 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +11 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +20 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +8 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +12 -2
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +2 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +6 -3
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +6 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts +66 -0
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-item-card.js +208 -0
- package/dist/backend/backend/src/services/open-items/open-item-card.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +114 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.js +394 -0
- package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts +70 -0
- package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items-backfill.js +147 -0
- package/dist/backend/backend/src/services/open-items/open-items-backfill.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +332 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.js +785 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts +44 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js +172 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +3 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +7 -4
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts +110 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +229 -0
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.d.ts +108 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.js +145 -0
- package/dist/backend/backend/src/services/orc/orc-status-routing.js.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.d.ts +86 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.js +130 -0
- package/dist/backend/backend/src/services/orc/orc-wake-counter.js.map +1 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +33 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.js +49 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +2 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +10 -4
- package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +4 -0
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +16 -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 +31 -8
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js +2 -0
- package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +61 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +15 -1
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.js +5 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +15 -1
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +2 -0
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -0
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts +73 -0
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/v2/open-item.types.js +14 -0
- package/dist/backend/backend/src/types/v2/open-item.types.js.map +1 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts +22 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js +10 -5
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +79 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +79 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- 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 +4 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +9 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +11 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +20 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +8 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +12 -2
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts +2 -1
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/message-queue.service.js +6 -3
- package/dist/cli/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +6 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts +66 -0
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts.map +1 -0
- package/dist/cli/backend/src/services/open-items/open-item-card.js +208 -0
- package/dist/cli/backend/src/services/open-items/open-item-card.js.map +1 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +114 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.js +394 -0
- package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +3 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +7 -4
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-status-routing.d.ts +108 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.js +145 -0
- package/dist/cli/backend/src/services/orc/orc-status-routing.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.d.ts +86 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.js +130 -0
- package/dist/cli/backend/src/services/orc/orc-wake-counter.js.map +1 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +198 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.js +288 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +16 -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 +31 -8
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +61 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +15 -1
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.js +5 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +15 -1
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +2 -0
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -0
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts +73 -0
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/open-item.types.js +14 -0
- package/dist/cli/backend/src/types/v2/open-item.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts +22 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js +10 -5
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/frontend/dist/assets/{index-9c91de50.js → index-a6cb8533.js} +265 -265
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open items — Crewly tracks what agents promise and ask the owner in their
|
|
3
|
+
* replies, so nothing is silently dropped (specs/2026-10-01-reply-open-items.md).
|
|
4
|
+
*
|
|
5
|
+
* Incident (TKT-185, 2026-10-01): in #book-publish Atlas told the owner "Kai is
|
|
6
|
+
* going through the four episodes… 明天中午给我,我核过以后挑最有用的几条发你"
|
|
7
|
+
* and asked "第 13 章「互评当体检用」这个读法,你同意吗?". The ticket was already
|
|
8
|
+
* closed. Kai finished at 18:14 and Atlas verified it, but nobody delivered
|
|
9
|
+
* it and Atlas went idle; the question was never tracked.
|
|
10
|
+
*
|
|
11
|
+
* Now, for every agent message in a ticket's conversation:
|
|
12
|
+
*
|
|
13
|
+
* - **Extract** commitments and owner questions (rules, {@link extractOpenItems}).
|
|
14
|
+
* - **Hold the ticket open**: items live on `Request.openItems`; while one is
|
|
15
|
+
* active the ticket is `awaiting_followup` (RequestService gates `done`).
|
|
16
|
+
* - **Commitments**: a follow-up WorkItem for the agent, due at the parsed
|
|
17
|
+
* time; the delegated child work is linked; when that work is finished
|
|
18
|
+
* before the agent delivers, the agent is woken at once ("the work you
|
|
19
|
+
* promised the owner is ready — deliver it now"); past the due time the
|
|
20
|
+
* agent is nudged once, then the owner is told in the thread what is late
|
|
21
|
+
* and why; the agent's next post in the thread once the work is ready
|
|
22
|
+
* marks it delivered.
|
|
23
|
+
* - **Questions**: a decision card in the same thread, asked as the agent,
|
|
24
|
+
* with options and a default derived from its words ({@link deriveQuestionCard});
|
|
25
|
+
* answers reach the agent through the decision flow. No second card when
|
|
26
|
+
* the agent already asked the same thing with ask-owner.
|
|
27
|
+
*
|
|
28
|
+
* Collaborators are injected ({@link OpenItemsDeps}); `open-items.wiring.ts`
|
|
29
|
+
* connects the real ones.
|
|
30
|
+
*
|
|
31
|
+
* @module services/open-items/open-items.service
|
|
32
|
+
*/
|
|
33
|
+
import { type ComponentLogger } from '../core/logger.service.js';
|
|
34
|
+
import type { Request } from '../../types/v2/request.types.js';
|
|
35
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
36
|
+
import { type RequestOpenItem } from '../../types/v2/open-item.types.js';
|
|
37
|
+
import type { OwnerDecision } from '../../types/decision.types.js';
|
|
38
|
+
import { type DerivedQuestionCard } from './open-item-card.js';
|
|
39
|
+
/** The chat-v2 message fields the service reads. */
|
|
40
|
+
export interface OpenItemsChatMessage {
|
|
41
|
+
id: string;
|
|
42
|
+
channelId: string;
|
|
43
|
+
senderType: string;
|
|
44
|
+
senderId: string;
|
|
45
|
+
content: string;
|
|
46
|
+
threadId?: string;
|
|
47
|
+
/** Epoch ms (defaults to now) */
|
|
48
|
+
createdAt?: number;
|
|
49
|
+
metadata?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/** Where a request's conversation lives in Slack, when it does. */
|
|
52
|
+
export interface OpenItemsSlackPlace {
|
|
53
|
+
slackChannelId: string;
|
|
54
|
+
threadTs: string;
|
|
55
|
+
}
|
|
56
|
+
/** Input to create a commitment's follow-up WorkItem. */
|
|
57
|
+
export interface FollowUpInput {
|
|
58
|
+
request: Request;
|
|
59
|
+
item: RequestOpenItem;
|
|
60
|
+
/** Slack thread of the conversation, when it has one */
|
|
61
|
+
place: OpenItemsSlackPlace | null;
|
|
62
|
+
}
|
|
63
|
+
/** Input to card a question. */
|
|
64
|
+
export interface QuestionCardInput {
|
|
65
|
+
request: Request;
|
|
66
|
+
item: RequestOpenItem;
|
|
67
|
+
card: DerivedQuestionCard;
|
|
68
|
+
place: OpenItemsSlackPlace | null;
|
|
69
|
+
}
|
|
70
|
+
/** Collaborators. */
|
|
71
|
+
export interface OpenItemsDeps {
|
|
72
|
+
requests: {
|
|
73
|
+
getById(id: string): Promise<Request | null>;
|
|
74
|
+
listAll(): Promise<Request[]>;
|
|
75
|
+
update(id: string, updates: Parameters<import('../v3/request.service.js').RequestService['update']>[1]): Promise<Request>;
|
|
76
|
+
};
|
|
77
|
+
/** Every WorkItem in the pool */
|
|
78
|
+
listWorkItems: () => Promise<WorkItem[]>;
|
|
79
|
+
/** Queue the follow-up WorkItem (held until delivered); returns its id */
|
|
80
|
+
createFollowUp?: (input: FollowUpInput) => Promise<string | null>;
|
|
81
|
+
/** Close the follow-up WorkItem: `delivered` → done, else cancelled */
|
|
82
|
+
closeFollowUp?: (workItemId: string, outcome: 'delivered' | 'cancelled', reason: string) => Promise<void>;
|
|
83
|
+
/** Decisions the agent asked recently (for the ask-owner dedupe) */
|
|
84
|
+
recentDecisionsBy?: (agent: string, sinceMs: number) => Promise<OwnerDecision[]>;
|
|
85
|
+
/** Post a card for a question; returns the decision */
|
|
86
|
+
askQuestion?: (input: QuestionCardInput) => Promise<OwnerDecision | null>;
|
|
87
|
+
/** Withdraw a question's card (the ticket was cancelled) */
|
|
88
|
+
cancelQuestion?: (decisionId: string, note: string) => Promise<void>;
|
|
89
|
+
/** A decision by id (sweep catches answers a missed handler call left behind) */
|
|
90
|
+
getDecision?: (decisionId: string) => Promise<OwnerDecision | null>;
|
|
91
|
+
/** Deliver a note to an agent, waking it; false when it could not */
|
|
92
|
+
deliverToAgent: (session: string, text: string) => Promise<boolean>;
|
|
93
|
+
/** Post a note for the owner in the request's conversation */
|
|
94
|
+
postOwnerNote: (request: Request, text: string) => Promise<boolean>;
|
|
95
|
+
/** Display name of an agent ("Atlas") */
|
|
96
|
+
displayName?: (session: string) => Promise<string>;
|
|
97
|
+
/** Names of the agent's colleagues (questions to them are not for the owner) */
|
|
98
|
+
colleagueNames?: (session: string) => Promise<string[]>;
|
|
99
|
+
/** The owner's Slack user id */
|
|
100
|
+
ownerSlackUserId?: () => string | null;
|
|
101
|
+
now?: () => Date;
|
|
102
|
+
logger?: ComponentLogger;
|
|
103
|
+
}
|
|
104
|
+
/** What one extraction would add (also the backfill's dry-run row). */
|
|
105
|
+
export interface PlannedOpenItem {
|
|
106
|
+
item: RequestOpenItem;
|
|
107
|
+
/** Question: the card it would post (absent when an ask-owner card already covers it) */
|
|
108
|
+
card?: DerivedQuestionCard;
|
|
109
|
+
/** Question: the ask-owner decision it is linked to instead of a new card */
|
|
110
|
+
linkedDecisionId?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The Slack thread of a request's conversation (`origin.threadRef` is
|
|
114
|
+
* `slack:<channel>:<ts>`).
|
|
115
|
+
*
|
|
116
|
+
* @param request - Request
|
|
117
|
+
* @returns Place, or null for chat-only conversations
|
|
118
|
+
*/
|
|
119
|
+
export declare function slackPlaceOf(request: Pick<Request, 'origin'>): OpenItemsSlackPlace | null;
|
|
120
|
+
/**
|
|
121
|
+
* Whether a message is in the request's conversation.
|
|
122
|
+
*
|
|
123
|
+
* @param request - Ticket with a chatRef
|
|
124
|
+
* @param message - chat-v2 message
|
|
125
|
+
* @returns True for its thread (or its root)
|
|
126
|
+
*/
|
|
127
|
+
export declare function inRequestThread(request: Pick<Request, 'chatRef'>, message: Pick<OpenItemsChatMessage, 'channelId' | 'threadId' | 'id'>): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* The delegated child work a commitment waits on: WorkItems of the request
|
|
130
|
+
* given to someone else, started around the promise and not already finished
|
|
131
|
+
* before it.
|
|
132
|
+
*
|
|
133
|
+
* @param request - Request
|
|
134
|
+
* @param item - Commitment
|
|
135
|
+
* @param pool - Every WorkItem
|
|
136
|
+
* @returns Child WorkItem ids
|
|
137
|
+
*/
|
|
138
|
+
export declare function childWorkFor(request: Request, item: Pick<RequestOpenItem, 'agent' | 'createdAt'>, pool: readonly WorkItem[]): string[];
|
|
139
|
+
/**
|
|
140
|
+
* Whether every child of a commitment is finished (cancelled ones ignored).
|
|
141
|
+
*
|
|
142
|
+
* @param ids - Child ids
|
|
143
|
+
* @param pool - Every WorkItem
|
|
144
|
+
* @returns `ready` with the latest finish time, or not ready (with what is left)
|
|
145
|
+
*/
|
|
146
|
+
export declare function childrenState(ids: readonly string[], pool: readonly WorkItem[]): {
|
|
147
|
+
ready: boolean;
|
|
148
|
+
finishedAt?: string;
|
|
149
|
+
pending: WorkItem[];
|
|
150
|
+
done: WorkItem[];
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Whether two items are the same thing said once: same message, or the same
|
|
154
|
+
* words by the same agent within {@link OPEN_ITEMS_CONSTANTS.DUPLICATE_WINDOW_MS}.
|
|
155
|
+
*
|
|
156
|
+
* @param a - Item
|
|
157
|
+
* @param b - Item
|
|
158
|
+
* @returns True for a duplicate
|
|
159
|
+
*/
|
|
160
|
+
export declare function isSameItem(a: Pick<RequestOpenItem, 'sourceMessageId' | 'text' | 'agent' | 'createdAt'>, b: Pick<RequestOpenItem, 'sourceMessageId' | 'text' | 'agent' | 'createdAt'>): boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Tracks commitments and questions on Requests. See module docs.
|
|
163
|
+
*/
|
|
164
|
+
export declare class OpenItemsService {
|
|
165
|
+
private readonly deps;
|
|
166
|
+
private static instance;
|
|
167
|
+
private readonly logger;
|
|
168
|
+
private readonly now;
|
|
169
|
+
private chain;
|
|
170
|
+
private timer;
|
|
171
|
+
/**
|
|
172
|
+
* @param deps - Collaborators
|
|
173
|
+
*/
|
|
174
|
+
constructor(deps: OpenItemsDeps);
|
|
175
|
+
/** @returns The process-wide instance, or null before wiring */
|
|
176
|
+
static getInstance(): OpenItemsService | null;
|
|
177
|
+
/** @param service - Instance to install (null clears) */
|
|
178
|
+
static setInstance(service: OpenItemsService | null): void;
|
|
179
|
+
/** Start the periodic sweep. */
|
|
180
|
+
start(): void;
|
|
181
|
+
/** Stop the sweep. */
|
|
182
|
+
stop(): void;
|
|
183
|
+
/**
|
|
184
|
+
* One change at a time (a chat message, a WorkItem event and the sweep may
|
|
185
|
+
* touch the same request).
|
|
186
|
+
*/
|
|
187
|
+
private serial;
|
|
188
|
+
/**
|
|
189
|
+
* The ticket an agent message belongs to: the one whose thread it is in
|
|
190
|
+
* (any status but cancelled, closed within the lookback), else — for a
|
|
191
|
+
* top-level message — the newest open ticket in that channel the agent is
|
|
192
|
+
* answering.
|
|
193
|
+
*
|
|
194
|
+
* @param message - chat-v2 message
|
|
195
|
+
* @param all - Every request
|
|
196
|
+
* @returns The request, or null
|
|
197
|
+
*/
|
|
198
|
+
findRequestFor(message: OpenItemsChatMessage, all: readonly Request[]): Request | null;
|
|
199
|
+
/**
|
|
200
|
+
* An agent posted in chat-v2: mark what it delivered, and track what it
|
|
201
|
+
* newly promised or asked.
|
|
202
|
+
*
|
|
203
|
+
* @param message - The message
|
|
204
|
+
* @returns The request it changed, or null
|
|
205
|
+
*/
|
|
206
|
+
onAgentMessage(message: OpenItemsChatMessage): Promise<Request | null>;
|
|
207
|
+
/**
|
|
208
|
+
* What a message would add, without side effects (also the backfill's view).
|
|
209
|
+
*
|
|
210
|
+
* @param request - Its request
|
|
211
|
+
* @param message - The agent message
|
|
212
|
+
* @param at - When it was posted
|
|
213
|
+
* @returns Planned items
|
|
214
|
+
*/
|
|
215
|
+
plan(request: Request, message: OpenItemsChatMessage, at: Date): Promise<PlannedOpenItem[]>;
|
|
216
|
+
/**
|
|
217
|
+
* The ask-owner decision the agent already made for this question, if any.
|
|
218
|
+
*
|
|
219
|
+
* @param agent - Asking agent
|
|
220
|
+
* @param q - The question
|
|
221
|
+
* @param at - When it was asked in the reply
|
|
222
|
+
* @returns The decision, or null
|
|
223
|
+
*/
|
|
224
|
+
private alreadyAsked;
|
|
225
|
+
/**
|
|
226
|
+
* Turn a planned item into a tracked one: link child work and queue the
|
|
227
|
+
* follow-up (commitment), or post / link the card (question).
|
|
228
|
+
*
|
|
229
|
+
* @param request - Its request
|
|
230
|
+
* @param p - Planned item
|
|
231
|
+
* @param pool - Every WorkItem
|
|
232
|
+
* @returns The stored item
|
|
233
|
+
*/
|
|
234
|
+
private activate;
|
|
235
|
+
/**
|
|
236
|
+
* Commitments this message delivers.
|
|
237
|
+
*
|
|
238
|
+
* @param items - Current items
|
|
239
|
+
* @param message - The post
|
|
240
|
+
* @param at - Its time
|
|
241
|
+
* @param pool - Every WorkItem
|
|
242
|
+
* @returns Updated (delivered) items
|
|
243
|
+
*/
|
|
244
|
+
private deliveries;
|
|
245
|
+
/**
|
|
246
|
+
* Whether a post in the thread delivers a commitment: by the promising
|
|
247
|
+
* agent (or one doing the child work), once the child work is finished.
|
|
248
|
+
* With no child work: a later post by the promising agent, at least
|
|
249
|
+
* {@link OPEN_ITEMS_CONSTANTS.MIN_DELIVERY_GAP_MS} after the promise, that
|
|
250
|
+
* does not itself promise something new.
|
|
251
|
+
*
|
|
252
|
+
* @param item - Commitment
|
|
253
|
+
* @param message - The post (`createdAt` set)
|
|
254
|
+
* @param pool - Every WorkItem
|
|
255
|
+
* @returns True when it is the delivery
|
|
256
|
+
*/
|
|
257
|
+
deliveredBy(item: RequestOpenItem, message: OpenItemsChatMessage, pool: readonly WorkItem[]): boolean;
|
|
258
|
+
/**
|
|
259
|
+
* Take planned items onto a request (the backfill's apply step).
|
|
260
|
+
*
|
|
261
|
+
* @param requestId - Request
|
|
262
|
+
* @param planned - Items from {@link plan}
|
|
263
|
+
* @returns Updated request, or null when it is gone
|
|
264
|
+
*/
|
|
265
|
+
adopt(requestId: string, planned: PlannedOpenItem[]): Promise<Request | null>;
|
|
266
|
+
/**
|
|
267
|
+
* Store items, and move the request between `done` and `awaiting_followup`.
|
|
268
|
+
*
|
|
269
|
+
* @param request - Request as read
|
|
270
|
+
* @param items - New item list
|
|
271
|
+
* @param added - New active items were added
|
|
272
|
+
* @returns Updated request
|
|
273
|
+
*/
|
|
274
|
+
private save;
|
|
275
|
+
/**
|
|
276
|
+
* A WorkItem finished (task:done / task:verified): wake whoever promised
|
|
277
|
+
* the owner the result, if that was the last piece.
|
|
278
|
+
*
|
|
279
|
+
* @param workItemId - The WorkItem
|
|
280
|
+
* @returns Items that became ready
|
|
281
|
+
*/
|
|
282
|
+
onWorkItemSettled(workItemId: string): Promise<RequestOpenItem[]>;
|
|
283
|
+
/**
|
|
284
|
+
* The child work is finished: wake the agent to deliver.
|
|
285
|
+
*
|
|
286
|
+
* @param request - Request
|
|
287
|
+
* @param item - Commitment
|
|
288
|
+
* @param finishedAt - When the last child finished
|
|
289
|
+
* @param done - Finished children
|
|
290
|
+
* @returns Updated item (`ready`)
|
|
291
|
+
*/
|
|
292
|
+
private markReady;
|
|
293
|
+
/**
|
|
294
|
+
* A `reply_question` decision settled: close its open item and give the
|
|
295
|
+
* agent the answer (the generic decision note).
|
|
296
|
+
*
|
|
297
|
+
* @param d - The decision
|
|
298
|
+
* @param fallback - The generic note
|
|
299
|
+
* @returns The note for the agent (null when withdrawn)
|
|
300
|
+
*/
|
|
301
|
+
onDecisionSettled(d: OwnerDecision, fallback: string | null | undefined): Promise<string | null>;
|
|
302
|
+
/**
|
|
303
|
+
* Periodic pass: link late child work, catch missed readiness, nudge
|
|
304
|
+
* overdue promises once and then tell the owner, sync answered questions,
|
|
305
|
+
* expire stale items, close cancelled tickets' items.
|
|
306
|
+
*
|
|
307
|
+
* @returns Counts of what happened
|
|
308
|
+
*/
|
|
309
|
+
sweep(): Promise<{
|
|
310
|
+
ready: number;
|
|
311
|
+
nudged: number;
|
|
312
|
+
ownerNotes: number;
|
|
313
|
+
expired: number;
|
|
314
|
+
closed: number;
|
|
315
|
+
}>;
|
|
316
|
+
/**
|
|
317
|
+
* One item's sweep step.
|
|
318
|
+
*/
|
|
319
|
+
private sweepItem;
|
|
320
|
+
/**
|
|
321
|
+
* The owner's note for a late promise: what, by when, and why it is late.
|
|
322
|
+
*
|
|
323
|
+
* @param request - Request
|
|
324
|
+
* @param item - Commitment
|
|
325
|
+
* @param pool - Every WorkItem
|
|
326
|
+
* @param now - Clock
|
|
327
|
+
* @returns Note text (English harness text; the agent's words quoted)
|
|
328
|
+
*/
|
|
329
|
+
ownerNote(request: Request, item: RequestOpenItem, pool: readonly WorkItem[], now: Date): Promise<string>;
|
|
330
|
+
private closeFollowUp;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=open-items.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-items.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAA0C,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAOvG,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,wDAAwD;IACxD,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnC;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnC;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,0BAA0B,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC3H,CAAC;IACF,iCAAiC;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClE,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1G,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACjF,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC1E,4DAA4D;IAC5D,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACpE,qEAAqE;IACrE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,8DAA8D;IAC9D,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,gFAAgF;IAChF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,yFAAyF;IACzF,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAYD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAKzF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,OAAO,CAKhJ;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,EAAE,CAgBtI;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAiB/J;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,GAAG,OAAO,CAI9L;AAuCD;;GAEG;AACH,qBAAa,gBAAgB;IAUf,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAA+C;IAE5D;;OAEG;gBAC0B,IAAI,EAAE,aAAa;IAKhD,gEAAgE;IAChE,MAAM,CAAC,WAAW,IAAI,gBAAgB,GAAG,IAAI;IAI7C,yDAAyD;IACzD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAI1D,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAQb,sBAAsB;IACtB,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,OAAO,CAAC,MAAM;IAUd;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAuBtF;;;;;;OAMG;IACG,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoC5E;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA6BjG;;;;;;;OAOG;YACW,YAAY;IAc1B;;;;;;;;OAQG;YACW,QAAQ;IAiCtB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO;IAmBrG;;;;;;OAMG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcnF;;;;;;;OAOG;YACW,IAAI;IAiBlB;;;;;;OAMG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA6BvE;;;;;;;;OAQG;YACW,SAAS;IAevB;;;;;;;OAOG;IACG,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgCtG;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B9G;;OAEG;YACW,SAAS;IAgEvB;;;;;;;;OAQG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAqBjG,aAAa;CAK5B"}
|