crewly 1.20.181 → 1.20.183
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 +101 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +110 -1
- 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/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/controllers/system/runtime-fallback.controller.d.ts +11 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +44 -9
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js +99 -0
- package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +4 -0
- 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 +3 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js +5 -0
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts +14 -4
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.js +31 -10
- package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +40 -2
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +100 -8
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +7 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.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/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/runtime-fallback/runtime-availability.d.ts +8 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +5 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +2 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +2 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +3 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +15 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +13 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
- package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts +75 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js +218 -0
- package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts +39 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js +161 -0
- package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js.map +1 -0
- 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/types/decision.types.d.ts +29 -5
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +101 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +110 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js +5 -0
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts +165 -0
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-card.js +358 -0
- package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +83 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.js +226 -0
- package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts +80 -0
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision-store.js +151 -0
- package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +376 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js +821 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts +97 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.js +137 -0
- package/dist/cli/backend/src/services/decisions/ticket-thread-store.js.map +1 -0
- 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/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/runtime-fallback/runtime-fallback.types.d.ts +136 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +152 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +217 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +430 -0
- package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
- package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
- package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.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/types/decision.types.d.ts +192 -0
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/decision.types.js +13 -0
- package/dist/cli/backend/src/types/decision.types.js.map +1 -0
- package/dist/cli/cli/src/commands/harness-setup.js +2 -2
- package/frontend/dist/assets/{index-4271e95e.js → index-9c91de50.js} +138 -138
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-card.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision cards — Block Kit rendering and answer parsing
|
|
3
|
+
* (specs/2026-10-01-decision-cards.md §3). Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module services/decisions/decision-card
|
|
6
|
+
*/
|
|
7
|
+
import { DECISION_CONSTANTS } from '../../constants.js';
|
|
8
|
+
import { matchOption } from './decision-contract.js';
|
|
9
|
+
const DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
10
|
+
const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
11
|
+
/**
|
|
12
|
+
* Short local time for the card: "14:05" today, "tomorrow 12:00", else "Thu Oct 2 12:00".
|
|
13
|
+
*
|
|
14
|
+
* @param at - Moment
|
|
15
|
+
* @param now - Clock
|
|
16
|
+
* @returns Text
|
|
17
|
+
*/
|
|
18
|
+
export function formatWhen(at, now = new Date()) {
|
|
19
|
+
const hm = `${String(at.getHours()).padStart(2, '0')}:${String(at.getMinutes()).padStart(2, '0')}`;
|
|
20
|
+
const day = (d) => `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;
|
|
21
|
+
if (day(at) === day(now))
|
|
22
|
+
return hm;
|
|
23
|
+
const tomorrow = new Date(now.getTime());
|
|
24
|
+
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
25
|
+
if (day(at) === day(tomorrow))
|
|
26
|
+
return `tomorrow ${hm}`;
|
|
27
|
+
return `${DAYS[at.getDay()]} ${MONTHS[at.getMonth()]} ${at.getDate()} ${hm}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The label of the default, as the card says it ("wait" for none).
|
|
31
|
+
*
|
|
32
|
+
* @param d - Decision
|
|
33
|
+
* @returns Option label, or "wait"
|
|
34
|
+
*/
|
|
35
|
+
export function defaultLabel(d) {
|
|
36
|
+
return d.options.find((o) => o.key === d.defaultKey)?.label ?? DECISION_CONSTANTS.WAIT_DEFAULT;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The label of an option key.
|
|
40
|
+
*
|
|
41
|
+
* @param d - Decision
|
|
42
|
+
* @param key - Option key
|
|
43
|
+
* @returns Label (the key itself when unknown)
|
|
44
|
+
*/
|
|
45
|
+
export function optionLabel(d, key) {
|
|
46
|
+
return d.options.find((o) => o.key === key)?.label ?? String(key ?? '');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The card header: ticket id + title, else the asker's topic.
|
|
50
|
+
*
|
|
51
|
+
* @param d - Decision
|
|
52
|
+
* @returns Header text (≤ 150 characters, Slack's header limit)
|
|
53
|
+
*/
|
|
54
|
+
export function cardHeader(d) {
|
|
55
|
+
const text = d.title
|
|
56
|
+
? d.title
|
|
57
|
+
: d.ticket
|
|
58
|
+
? `${d.ticket.id} · ${d.ticket.title}`
|
|
59
|
+
: d.browser
|
|
60
|
+
? `Browser · ${d.browser.agentName} is waiting for your OK`
|
|
61
|
+
: `Decision ${d.id}`;
|
|
62
|
+
return text.length > 150 ? `${text.slice(0, 149)}…` : text;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The thread root for a ticket that has no thread yet.
|
|
66
|
+
*
|
|
67
|
+
* @param ticket - Ticket id + title
|
|
68
|
+
* @returns mrkdwn line
|
|
69
|
+
*/
|
|
70
|
+
export function ticketThreadRootText(ticket) {
|
|
71
|
+
return `*${ticket.id} · ${ticket.title}*`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Button value JSON.
|
|
75
|
+
*
|
|
76
|
+
* @param decisionId - Decision id
|
|
77
|
+
* @param option - Option key or `remind`
|
|
78
|
+
* @param instanceId - This instance (Cloud routes the click by it)
|
|
79
|
+
* @returns JSON string
|
|
80
|
+
*/
|
|
81
|
+
export function buttonValue(decisionId, option, instanceId) {
|
|
82
|
+
const v = { d: decisionId, o: option, i: instanceId };
|
|
83
|
+
return JSON.stringify(v);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse a button value.
|
|
87
|
+
*
|
|
88
|
+
* @param raw - `value` of the clicked button
|
|
89
|
+
* @returns The value, or null when it is not a decision button
|
|
90
|
+
*/
|
|
91
|
+
export function parseButtonValue(raw) {
|
|
92
|
+
if (typeof raw !== 'string' || !raw.startsWith('{'))
|
|
93
|
+
return null;
|
|
94
|
+
try {
|
|
95
|
+
const v = JSON.parse(raw);
|
|
96
|
+
if (typeof v.d !== 'string' || typeof v.o !== 'string')
|
|
97
|
+
return null;
|
|
98
|
+
return { d: v.d, o: v.o, i: typeof v.i === 'string' ? v.i : '' };
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The context line of a pending card.
|
|
106
|
+
*
|
|
107
|
+
* @param d - Decision
|
|
108
|
+
* @param now - Clock
|
|
109
|
+
* @returns mrkdwn text
|
|
110
|
+
*/
|
|
111
|
+
export function pendingContextLine(d, now = new Date()) {
|
|
112
|
+
const when = formatWhen(new Date(d.deadline), now);
|
|
113
|
+
const parts = [];
|
|
114
|
+
if (d.remindAt && Date.parse(d.remindAt) > now.getTime()) {
|
|
115
|
+
parts.push(`⏰ Reminding you ${formatWhen(new Date(d.remindAt), now)}.`);
|
|
116
|
+
}
|
|
117
|
+
if (d.system?.defaultIsDecline) {
|
|
118
|
+
parts.push(`Nothing is accepted until you answer. No answer by ${when}: ${defaultLabel(d)}.`);
|
|
119
|
+
}
|
|
120
|
+
else if (d.kind === 'browser_action') {
|
|
121
|
+
parts.push(`Nothing happens without your OK. If no answer by ${when}, the answer is ${defaultLabel(d)}.`);
|
|
122
|
+
}
|
|
123
|
+
else if (d.sensitive) {
|
|
124
|
+
parts.push(`This needs your OK (${d.sensitive}); I won't go ahead without an answer.`);
|
|
125
|
+
}
|
|
126
|
+
else if (d.defaultKey === DECISION_CONSTANTS.WAIT_DEFAULT) {
|
|
127
|
+
parts.push(`If no answer by ${when}, I'll keep waiting.`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
parts.push(`If no answer by ${when}, I'll go with ${defaultLabel(d)}.`);
|
|
131
|
+
}
|
|
132
|
+
parts.push(d.id);
|
|
133
|
+
return parts.join(' · ');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* The option lines under the question (only when some option has a detail).
|
|
137
|
+
*
|
|
138
|
+
* @param options - Options
|
|
139
|
+
* @returns mrkdwn, or null
|
|
140
|
+
*/
|
|
141
|
+
function optionDetails(options) {
|
|
142
|
+
if (!options.some((o) => o.detail))
|
|
143
|
+
return null;
|
|
144
|
+
return options.map((o) => `• *${o.label}*${o.detail ? ` — ${o.detail}` : ''}`).join('\n');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Blocks of an open card.
|
|
148
|
+
*
|
|
149
|
+
* @param d - Decision
|
|
150
|
+
* @param instanceId - This instance id (button values)
|
|
151
|
+
* @param now - Clock
|
|
152
|
+
* @returns Blocks
|
|
153
|
+
*/
|
|
154
|
+
export function renderOpenCard(d, instanceId, now = new Date()) {
|
|
155
|
+
const blocks = [
|
|
156
|
+
{ type: 'header', text: { type: 'plain_text', text: cardHeader(d), emoji: true } },
|
|
157
|
+
{ type: 'section', text: { type: 'mrkdwn', text: d.question } },
|
|
158
|
+
];
|
|
159
|
+
for (const text of d.body ?? [])
|
|
160
|
+
if (text.trim())
|
|
161
|
+
blocks.push({ type: 'section', text: { type: 'mrkdwn', text } });
|
|
162
|
+
const details = optionDetails(d.options);
|
|
163
|
+
if (details)
|
|
164
|
+
blocks.push({ type: 'section', text: { type: 'mrkdwn', text: details } });
|
|
165
|
+
blocks.push({
|
|
166
|
+
type: 'actions',
|
|
167
|
+
block_id: `decision:${d.id}`,
|
|
168
|
+
elements: [
|
|
169
|
+
...d.options.map((o) => ({
|
|
170
|
+
type: 'button',
|
|
171
|
+
action_id: `${DECISION_CONSTANTS.ACTION_PREFIX}${o.key}`,
|
|
172
|
+
text: { type: 'plain_text', text: o.label, emoji: true },
|
|
173
|
+
value: buttonValue(d.id, o.key, instanceId),
|
|
174
|
+
...(o.key === d.defaultKey && !d.sensitive ? { style: 'primary' } : {}),
|
|
175
|
+
})),
|
|
176
|
+
// Held browser actions (short deadline) and system decisions (exactly
|
|
177
|
+
// their options) cannot be snoozed.
|
|
178
|
+
...(canRemind(d)
|
|
179
|
+
? [
|
|
180
|
+
{
|
|
181
|
+
type: 'button',
|
|
182
|
+
action_id: DECISION_CONSTANTS.REMIND_ACTION_ID,
|
|
183
|
+
text: { type: 'plain_text', text: 'Remind me tomorrow', emoji: true },
|
|
184
|
+
value: buttonValue(d.id, 'remind', instanceId),
|
|
185
|
+
},
|
|
186
|
+
]
|
|
187
|
+
: []),
|
|
188
|
+
],
|
|
189
|
+
});
|
|
190
|
+
blocks.push({ type: 'context', elements: [{ type: 'mrkdwn', text: pendingContextLine(d, now) }] });
|
|
191
|
+
return blocks;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Whether "Remind me tomorrow" is offered: not for held browser actions
|
|
195
|
+
* (a deadline of hours), nor for system decisions (answered with exactly
|
|
196
|
+
* their options).
|
|
197
|
+
*
|
|
198
|
+
* @param d - Decision
|
|
199
|
+
* @returns True when snoozing is allowed
|
|
200
|
+
*/
|
|
201
|
+
export function canRemind(d) {
|
|
202
|
+
return d.kind !== 'browser_action' && !d.system;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Whether the default never lets anything through (a held browser action's
|
|
206
|
+
* "No", a declining system decision), so it is applied at the deadline even
|
|
207
|
+
* when the decision is sensitive.
|
|
208
|
+
*
|
|
209
|
+
* @param d - Decision
|
|
210
|
+
* @returns True when the default is safe to apply unanswered
|
|
211
|
+
*/
|
|
212
|
+
export function defaultIsSafe(d) {
|
|
213
|
+
return d.kind === 'browser_action' || d.system?.defaultIsDecline === true;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Blocks of a settled card (no buttons).
|
|
217
|
+
*
|
|
218
|
+
* @param d - Decision (resolved / defaulted / parked / cancelled)
|
|
219
|
+
* @param ownerName - How to name the owner ("Steve"), when known
|
|
220
|
+
* @param now - Clock
|
|
221
|
+
* @returns Blocks
|
|
222
|
+
*/
|
|
223
|
+
export function renderSettledCard(d, ownerName, now = new Date()) {
|
|
224
|
+
return [
|
|
225
|
+
{ type: 'header', text: { type: 'plain_text', text: cardHeader(d), emoji: true } },
|
|
226
|
+
{ type: 'section', text: { type: 'mrkdwn', text: d.question } },
|
|
227
|
+
{ type: 'context', elements: [{ type: 'mrkdwn', text: settledLine(d, ownerName, now) }] },
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The one line a settled card shows.
|
|
232
|
+
*
|
|
233
|
+
* @param d - Decision
|
|
234
|
+
* @param ownerName - Owner display name
|
|
235
|
+
* @param now - Clock
|
|
236
|
+
* @returns Text
|
|
237
|
+
*/
|
|
238
|
+
export function settledLine(d, ownerName, now = new Date()) {
|
|
239
|
+
const at = formatWhen(new Date(d.resolvedAt ?? d.updatedAt), now);
|
|
240
|
+
const who = ownerName || (d.answeredBy ? `<@${d.answeredBy}>` : 'The owner');
|
|
241
|
+
switch (d.status) {
|
|
242
|
+
case 'resolved':
|
|
243
|
+
return d.chosenKey
|
|
244
|
+
? `✔ ${who} chose *${optionLabel(d, d.chosenKey)}* · ${at}`
|
|
245
|
+
: `✔ ${who} answered: “${(d.answerText ?? '').slice(0, 200)}” · ${at}`;
|
|
246
|
+
case 'defaulted':
|
|
247
|
+
return deadlineDefaultLine(d, now);
|
|
248
|
+
case 'parked':
|
|
249
|
+
return `⏸ Parked — no answer, so I'm not going ahead. Answer from "Waiting on you" to reopen it. · ${d.id}`;
|
|
250
|
+
case 'cancelled':
|
|
251
|
+
return `Withdrawn · ${at}`;
|
|
252
|
+
case 'expired':
|
|
253
|
+
return `Expired — ${d.browser?.agentName ?? (d.asker || 'the agent')} will ask again · ${at}`;
|
|
254
|
+
default:
|
|
255
|
+
return pendingContextLine(d, now);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* "No answer by <deadline> — going with <default>." (or "— still waiting." for `wait`).
|
|
260
|
+
*
|
|
261
|
+
* @param d - Decision
|
|
262
|
+
* @param now - Clock
|
|
263
|
+
* @returns Text
|
|
264
|
+
*/
|
|
265
|
+
export function deadlineDefaultLine(d, now = new Date()) {
|
|
266
|
+
const when = formatWhen(new Date(d.deadline), now);
|
|
267
|
+
return d.defaultKey === DECISION_CONSTANTS.WAIT_DEFAULT
|
|
268
|
+
? `No answer by ${when} — I'll keep waiting.`
|
|
269
|
+
: `No answer by ${when} — going with ${defaultLabel(d)}.`;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* The plain-text fallback of a card (notifications, screen readers).
|
|
273
|
+
*
|
|
274
|
+
* @param d - Decision
|
|
275
|
+
* @returns Text
|
|
276
|
+
*/
|
|
277
|
+
export function cardFallbackText(d) {
|
|
278
|
+
return `${cardHeader(d)}: ${d.question} (${d.options.map((o) => o.label).join(' / ')})`;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The option that reads as "no", when one does.
|
|
282
|
+
*
|
|
283
|
+
* @param options - Options
|
|
284
|
+
* @returns Option, or null
|
|
285
|
+
*/
|
|
286
|
+
export function noOption(options) {
|
|
287
|
+
const words = DECISION_CONSTANTS.NO_WORDS;
|
|
288
|
+
return (options.find((o) => {
|
|
289
|
+
const l = o.label.toLowerCase().trim();
|
|
290
|
+
return words.includes(l) || words.includes(l.split(/[\s,—–-]+/)[0]) || words.some((w) => /[^\x00-\x7F]/.test(w) && l.startsWith(w));
|
|
291
|
+
}) ?? null);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* The option ✅ / "yes" means: `yesKey` when set, else the default, else the first option.
|
|
295
|
+
*
|
|
296
|
+
* @param d - Decision
|
|
297
|
+
* @returns Option key
|
|
298
|
+
*/
|
|
299
|
+
export function acceptKey(d) {
|
|
300
|
+
if (d.yesKey && d.options.some((o) => o.key === d.yesKey))
|
|
301
|
+
return d.yesKey;
|
|
302
|
+
return d.options.some((o) => o.key === d.defaultKey) ? d.defaultKey : d.options[0].key;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Map a reaction on a card to a choice.
|
|
306
|
+
*
|
|
307
|
+
* @param d - Decision
|
|
308
|
+
* @param reaction - Emoji name (no colons; skin tone suffix allowed)
|
|
309
|
+
* @returns Choice, or null when the reaction means nothing
|
|
310
|
+
*/
|
|
311
|
+
export function choiceFromReaction(d, reaction) {
|
|
312
|
+
const name = reaction.replace(/::skin-tone-\d$/, '');
|
|
313
|
+
if (DECISION_CONSTANTS.REACTION_ACCEPT.includes(name))
|
|
314
|
+
return { kind: 'option', key: acceptKey(d) };
|
|
315
|
+
if (DECISION_CONSTANTS.REACTION_REMIND.includes(name))
|
|
316
|
+
return { kind: 'remind' };
|
|
317
|
+
if (DECISION_CONSTANTS.REACTION_REJECT.includes(name)) {
|
|
318
|
+
const no = noOption(d.options);
|
|
319
|
+
return no ? { kind: 'option', key: no.key } : null;
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Map a free-text thread reply to a choice: an option (label, key, number),
|
|
325
|
+
* a yes word (the default / first option), a no word (the "no" option), a
|
|
326
|
+
* remind word — else the text itself, for the asker to read.
|
|
327
|
+
*
|
|
328
|
+
* @param d - Decision
|
|
329
|
+
* @param text - The owner's reply
|
|
330
|
+
* @returns Choice, or null for an empty reply
|
|
331
|
+
*/
|
|
332
|
+
export function choiceFromText(d, text) {
|
|
333
|
+
const clean = text.replace(/<@[A-Z0-9]+>/g, '').replace(/\s+/g, ' ').trim();
|
|
334
|
+
if (!clean)
|
|
335
|
+
return null;
|
|
336
|
+
const opt = matchOption(clean, d.options);
|
|
337
|
+
if (opt)
|
|
338
|
+
return { kind: 'option', key: opt.key };
|
|
339
|
+
const norm = clean.toLowerCase().replace(/[\s.。!!,,]+$/u, '');
|
|
340
|
+
if (DECISION_CONSTANTS.REMIND_WORDS.includes(norm))
|
|
341
|
+
return { kind: 'remind' };
|
|
342
|
+
if (DECISION_CONSTANTS.YES_WORDS.includes(norm))
|
|
343
|
+
return { kind: 'option', key: acceptKey(d) };
|
|
344
|
+
if (DECISION_CONSTANTS.NO_WORDS.includes(norm)) {
|
|
345
|
+
const no = noOption(d.options);
|
|
346
|
+
if (no)
|
|
347
|
+
return { kind: 'option', key: no.key };
|
|
348
|
+
}
|
|
349
|
+
// "go with Hold", "option 2", "let's do B"
|
|
350
|
+
const tail = /^(?:go with|option|choose|pick|let'?s do|do|选)\s*(.+)$/i.exec(norm);
|
|
351
|
+
if (tail) {
|
|
352
|
+
const o = matchOption(tail[1], d.options);
|
|
353
|
+
if (o)
|
|
354
|
+
return { kind: 'option', key: o.key };
|
|
355
|
+
}
|
|
356
|
+
return { kind: 'text', text: clean };
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=decision-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-card.js","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ask-owner contract (specs/2026-10-01-decision-cards.md §1): validate a
|
|
3
|
+
* structured owner question and turn it into a {@link ValidatedAsk}. Pure.
|
|
4
|
+
*
|
|
5
|
+
* Every rejection says what to fix and shows a correct ask, because the
|
|
6
|
+
* reader is an agent that will retry with whatever the error tells it.
|
|
7
|
+
*
|
|
8
|
+
* @module services/decisions/decision-contract
|
|
9
|
+
*/
|
|
10
|
+
import type { AskOwnerInput, DecisionOption, DecisionSensitiveKind, ValidatedAsk } from '../../types/decision.types.js';
|
|
11
|
+
/** A rejected ask. */
|
|
12
|
+
export declare class DecisionContractError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
/** The example appended to every contract error. */
|
|
16
|
+
export declare const ASK_OWNER_EXAMPLE = "Example: ask-owner --question \"Send the partner email on Monday?\" --option \"Send Monday \u2014 after the review call\" --option \"Hold \u2014 wait for legal\" --default \"Hold\" [--deadline 2026-10-02T12:00] [--ticket APP-12 --project P] [--sensitive email]";
|
|
17
|
+
/**
|
|
18
|
+
* The next day at {@link DECISION_CONSTANTS.DEFAULT_DEADLINE_HOUR_LOCAL}:00 local.
|
|
19
|
+
*
|
|
20
|
+
* @param now - Clock
|
|
21
|
+
* @returns Default deadline
|
|
22
|
+
*/
|
|
23
|
+
export declare function defaultDeadline(now: Date): Date;
|
|
24
|
+
/**
|
|
25
|
+
* Whether a question is too vague to put in front of the owner.
|
|
26
|
+
*
|
|
27
|
+
* @param question - One-line question
|
|
28
|
+
* @returns True for "thoughts?", "OK?", "可以吗" and the like
|
|
29
|
+
*/
|
|
30
|
+
export declare function isVagueQuestion(question: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Parse the options: an array of `{label, detail?}` objects or of strings
|
|
33
|
+
* (`"Label"` / `"Label — detail"`).
|
|
34
|
+
*
|
|
35
|
+
* @param raw - Input
|
|
36
|
+
* @returns Options with keys a/b/c
|
|
37
|
+
* @throws DecisionContractError
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseOptions(raw: unknown): DecisionOption[];
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the default to an option key or `wait`.
|
|
42
|
+
*
|
|
43
|
+
* @param raw - Label, key (a/b/c), number (1–3) or `wait`
|
|
44
|
+
* @param options - Parsed options
|
|
45
|
+
* @returns Option key or `wait`
|
|
46
|
+
* @throws DecisionContractError
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveDefault(raw: unknown, options: DecisionOption[]): string;
|
|
49
|
+
/**
|
|
50
|
+
* Find the option a label, key (a/b/c) or number (1–3) names.
|
|
51
|
+
*
|
|
52
|
+
* @param text - What was given
|
|
53
|
+
* @param options - Options
|
|
54
|
+
* @returns The option, or null
|
|
55
|
+
*/
|
|
56
|
+
export declare function matchOption(text: string, options: DecisionOption[]): DecisionOption | null;
|
|
57
|
+
/**
|
|
58
|
+
* Parse the deadline.
|
|
59
|
+
*
|
|
60
|
+
* @param raw - ISO / date-time string, or empty for the default
|
|
61
|
+
* @param now - Clock
|
|
62
|
+
* @returns The deadline
|
|
63
|
+
* @throws DecisionContractError when unreadable or not in the future
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseDeadline(raw: unknown, now: Date): Date;
|
|
66
|
+
/**
|
|
67
|
+
* Parse the sensitive kind.
|
|
68
|
+
*
|
|
69
|
+
* @param raw - `email` | `publish` | `deploy` | `spend`, or empty
|
|
70
|
+
* @returns The kind, or undefined
|
|
71
|
+
* @throws DecisionContractError on anything else
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseSensitive(raw: unknown): DecisionSensitiveKind | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Validate a whole ask.
|
|
76
|
+
*
|
|
77
|
+
* @param input - Raw input (skill / API body)
|
|
78
|
+
* @param now - Clock
|
|
79
|
+
* @returns The validated ask
|
|
80
|
+
* @throws DecisionContractError with a fix-it message
|
|
81
|
+
*/
|
|
82
|
+
export declare function validateAskOwner(input: AskOwnerInput, now?: Date): ValidatedAsk;
|
|
83
|
+
//# sourceMappingURL=decision-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-contract.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAExH,sBAAsB;AACtB,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,yQACwN,CAAC;AAiBvP;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAK/C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,CA8C3D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAa9E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,GAAG,IAAI,CAa1F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAQ3D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAO9E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,GAAE,IAAiB,GAAG,YAAY,CA+B3F"}
|