@ddse/acm-examples 0.5.0
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/LICENSE +21 -0
- package/README.md +113 -0
- package/bin/acm-demo.ts +495 -0
- package/data/coaching/agents.json +16 -0
- package/data/coaching/transcripts.json +37 -0
- package/data/documents.json +72 -0
- package/data/entitlement/customers.json +38 -0
- package/data/entitlement/policies.json +38 -0
- package/data/incidents/incidents.json +30 -0
- package/data/incidents/routing_rules.json +36 -0
- package/data/invoices/invoices.json +38 -0
- package/data/invoices/purchase-orders.json +38 -0
- package/data/issues.json +99 -0
- package/data/knowledge/docs/kb-001.md +7 -0
- package/data/knowledge/docs/kb-002.md +7 -0
- package/data/knowledge/docs/kb-003.md +9 -0
- package/data/knowledge/index.json +25 -0
- package/data/orders.json +106 -0
- package/dist/bin/acm-demo.d.ts +3 -0
- package/dist/bin/acm-demo.d.ts.map +1 -0
- package/dist/bin/acm-demo.js +392 -0
- package/dist/bin/acm-demo.js.map +1 -0
- package/dist/src/context/directives.d.ts +3 -0
- package/dist/src/context/directives.d.ts.map +1 -0
- package/dist/src/context/directives.js +325 -0
- package/dist/src/context/directives.js.map +1 -0
- package/dist/src/context/index.d.ts +2 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +2 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/data/coaching.d.ts +19 -0
- package/dist/src/data/coaching.d.ts.map +1 -0
- package/dist/src/data/coaching.js +22 -0
- package/dist/src/data/coaching.js.map +1 -0
- package/dist/src/data/entitlement.d.ts +25 -0
- package/dist/src/data/entitlement.d.ts.map +1 -0
- package/dist/src/data/entitlement.js +26 -0
- package/dist/src/data/entitlement.js.map +1 -0
- package/dist/src/data/incidents.d.ts +23 -0
- package/dist/src/data/incidents.d.ts.map +1 -0
- package/dist/src/data/incidents.js +37 -0
- package/dist/src/data/incidents.js.map +1 -0
- package/dist/src/data/invoices.d.ts +34 -0
- package/dist/src/data/invoices.d.ts.map +1 -0
- package/dist/src/data/invoices.js +49 -0
- package/dist/src/data/invoices.js.map +1 -0
- package/dist/src/data/knowledge.d.ts +11 -0
- package/dist/src/data/knowledge.d.ts.map +1 -0
- package/dist/src/data/knowledge.js +57 -0
- package/dist/src/data/knowledge.js.map +1 -0
- package/dist/src/data/loader.d.ts +4 -0
- package/dist/src/data/loader.d.ts.map +1 -0
- package/dist/src/data/loader.js +69 -0
- package/dist/src/data/loader.js.map +1 -0
- package/dist/src/examples/scenarios.d.ts +23 -0
- package/dist/src/examples/scenarios.d.ts.map +1 -0
- package/dist/src/examples/scenarios.js +609 -0
- package/dist/src/examples/scenarios.js.map +1 -0
- package/dist/src/goals/index.d.ts +8 -0
- package/dist/src/goals/index.d.ts.map +1 -0
- package/dist/src/goals/index.js +12 -0
- package/dist/src/goals/index.js.map +1 -0
- package/dist/src/policy.d.ts +5 -0
- package/dist/src/policy.d.ts.map +1 -0
- package/dist/src/policy.js +24 -0
- package/dist/src/policy.js.map +1 -0
- package/dist/src/registries.d.ts +18 -0
- package/dist/src/registries.d.ts.map +1 -0
- package/dist/src/registries.js +38 -0
- package/dist/src/registries.js.map +1 -0
- package/dist/src/renderer.d.ts +9 -0
- package/dist/src/renderer.d.ts.map +1 -0
- package/dist/src/renderer.js +76 -0
- package/dist/src/renderer.js.map +1 -0
- package/dist/src/search/bm25.d.ts +68 -0
- package/dist/src/search/bm25.d.ts.map +1 -0
- package/dist/src/search/bm25.js +131 -0
- package/dist/src/search/bm25.js.map +1 -0
- package/dist/src/search/index.d.ts +2 -0
- package/dist/src/search/index.d.ts.map +1 -0
- package/dist/src/search/index.js +3 -0
- package/dist/src/search/index.js.map +1 -0
- package/dist/src/tasks/coaching.d.ts +30 -0
- package/dist/src/tasks/coaching.d.ts.map +1 -0
- package/dist/src/tasks/coaching.js +143 -0
- package/dist/src/tasks/coaching.js.map +1 -0
- package/dist/src/tasks/entitlement.d.ts +29 -0
- package/dist/src/tasks/entitlement.d.ts.map +1 -0
- package/dist/src/tasks/entitlement.js +135 -0
- package/dist/src/tasks/entitlement.js.map +1 -0
- package/dist/src/tasks/incidents.d.ts +42 -0
- package/dist/src/tasks/incidents.d.ts.map +1 -0
- package/dist/src/tasks/incidents.js +189 -0
- package/dist/src/tasks/incidents.js.map +1 -0
- package/dist/src/tasks/index.d.ts +7 -0
- package/dist/src/tasks/index.d.ts.map +1 -0
- package/dist/src/tasks/index.js +7 -0
- package/dist/src/tasks/index.js.map +1 -0
- package/dist/src/tasks/invoices.d.ts +40 -0
- package/dist/src/tasks/invoices.d.ts.map +1 -0
- package/dist/src/tasks/invoices.js +180 -0
- package/dist/src/tasks/invoices.js.map +1 -0
- package/dist/src/tasks/knowledge.d.ts +23 -0
- package/dist/src/tasks/knowledge.d.ts.map +1 -0
- package/dist/src/tasks/knowledge.js +115 -0
- package/dist/src/tasks/knowledge.js.map +1 -0
- package/dist/src/tasks/legacy.d.ts +50 -0
- package/dist/src/tasks/legacy.d.ts.map +1 -0
- package/dist/src/tasks/legacy.js +85 -0
- package/dist/src/tasks/legacy.js.map +1 -0
- package/dist/src/tools/coaching/index.d.ts +49 -0
- package/dist/src/tools/coaching/index.d.ts.map +1 -0
- package/dist/src/tools/coaching/index.js +119 -0
- package/dist/src/tools/coaching/index.js.map +1 -0
- package/dist/src/tools/entitlement/index.d.ts +52 -0
- package/dist/src/tools/entitlement/index.d.ts.map +1 -0
- package/dist/src/tools/entitlement/index.js +120 -0
- package/dist/src/tools/entitlement/index.js.map +1 -0
- package/dist/src/tools/incidents/index.d.ts +55 -0
- package/dist/src/tools/incidents/index.d.ts.map +1 -0
- package/dist/src/tools/incidents/index.js +109 -0
- package/dist/src/tools/incidents/index.js.map +1 -0
- package/dist/src/tools/index.d.ts +90 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +109 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/invoices/index.d.ts +56 -0
- package/dist/src/tools/invoices/index.d.ts.map +1 -0
- package/dist/src/tools/invoices/index.js +85 -0
- package/dist/src/tools/invoices/index.js.map +1 -0
- package/dist/src/tools/knowledge/index.d.ts +52 -0
- package/dist/src/tools/knowledge/index.d.ts.map +1 -0
- package/dist/src/tools/knowledge/index.js +120 -0
- package/dist/src/tools/knowledge/index.js.map +1 -0
- package/dist/tests/bm25.test.d.ts +2 -0
- package/dist/tests/bm25.test.d.ts.map +1 -0
- package/dist/tests/bm25.test.js +98 -0
- package/dist/tests/bm25.test.js.map +1 -0
- package/dist/tests/integration.test.d.ts +2 -0
- package/dist/tests/integration.test.d.ts.map +1 -0
- package/dist/tests/integration.test.js +126 -0
- package/dist/tests/integration.test.js.map +1 -0
- package/dist/tests/plan-hydration.test.d.ts +2 -0
- package/dist/tests/plan-hydration.test.d.ts.map +1 -0
- package/dist/tests/plan-hydration.test.js +28 -0
- package/dist/tests/plan-hydration.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/examples-architecture.md +144 -0
- package/docs/successrun.md +1022 -0
- package/package.json +33 -0
- package/src/context/directives.ts +366 -0
- package/src/context/index.ts +1 -0
- package/src/data/coaching.ts +50 -0
- package/src/data/entitlement.ts +60 -0
- package/src/data/incidents.ts +78 -0
- package/src/data/invoices.ts +103 -0
- package/src/data/knowledge.ts +77 -0
- package/src/data/loader.ts +80 -0
- package/src/examples/scenarios.ts +724 -0
- package/src/goals/index.ts +18 -0
- package/src/policy.ts +30 -0
- package/src/registries.ts +48 -0
- package/src/renderer.ts +82 -0
- package/src/search/bm25.ts +173 -0
- package/src/search/index.ts +2 -0
- package/src/tasks/coaching.ts +217 -0
- package/src/tasks/entitlement.ts +197 -0
- package/src/tasks/incidents.ts +277 -0
- package/src/tasks/index.ts +6 -0
- package/src/tasks/invoices.ts +269 -0
- package/src/tasks/knowledge.ts +169 -0
- package/src/tasks/legacy.ts +112 -0
- package/src/tools/coaching/index.ts +197 -0
- package/src/tools/entitlement/index.ts +199 -0
- package/src/tools/incidents/index.ts +185 -0
- package/src/tools/index.ts +192 -0
- package/src/tools/invoices/index.ts +165 -0
- package/src/tools/knowledge/index.ts +203 -0
- package/tests/bm25.test.ts +129 -0
- package/tests/integration.test.ts +163 -0
- package/tests/plan-hydration.test.ts +33 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { getCustomerProfile, getPolicy, } from '../../data/entitlement.js';
|
|
3
|
+
export class FetchCustomerProfileTool extends Tool {
|
|
4
|
+
name() {
|
|
5
|
+
return 'fetch_customer_profile';
|
|
6
|
+
}
|
|
7
|
+
async call(input) {
|
|
8
|
+
if (!input?.customerId) {
|
|
9
|
+
throw new Error('customerId is required');
|
|
10
|
+
}
|
|
11
|
+
const customer = await getCustomerProfile(input.customerId);
|
|
12
|
+
if (!customer) {
|
|
13
|
+
throw new Error(`Customer ${input.customerId} not found`);
|
|
14
|
+
}
|
|
15
|
+
return { customer };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const tierRank = {
|
|
19
|
+
STANDARD: 1,
|
|
20
|
+
GOLD: 2,
|
|
21
|
+
PLATINUM: 3,
|
|
22
|
+
};
|
|
23
|
+
export class EvaluateEntitlementTool extends Tool {
|
|
24
|
+
name() {
|
|
25
|
+
return 'evaluate_entitlement';
|
|
26
|
+
}
|
|
27
|
+
async call(input) {
|
|
28
|
+
if (!input?.customerId || !input?.benefitCode) {
|
|
29
|
+
throw new Error('customerId and benefitCode are required');
|
|
30
|
+
}
|
|
31
|
+
const [customer, policy] = await Promise.all([
|
|
32
|
+
getCustomerProfile(input.customerId),
|
|
33
|
+
getPolicy(input.benefitCode),
|
|
34
|
+
]);
|
|
35
|
+
const violations = [];
|
|
36
|
+
const rationale = [];
|
|
37
|
+
if (!customer) {
|
|
38
|
+
violations.push({
|
|
39
|
+
code: 'customer_missing',
|
|
40
|
+
message: `Customer ${input.customerId} was not found in CRM snapshot`,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!policy) {
|
|
44
|
+
violations.push({
|
|
45
|
+
code: 'policy_missing',
|
|
46
|
+
message: `Policy ${input.benefitCode} was not found in entitlement catalog`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (!customer || !policy) {
|
|
50
|
+
throw new Error(`Unable to evaluate entitlement: ${violations.map(v => v.message).join('; ')}`);
|
|
51
|
+
}
|
|
52
|
+
if (tierRank[customer.tier] < tierRank[policy.requiredTier]) {
|
|
53
|
+
violations.push({
|
|
54
|
+
code: 'tier_mismatch',
|
|
55
|
+
message: `Customer tier ${customer.tier} does not meet required tier ${policy.requiredTier}`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
rationale.push(`Customer tier ${customer.tier} satisfies required tier ${policy.requiredTier}`);
|
|
60
|
+
}
|
|
61
|
+
if (customer.accountAgeDays < policy.minAccountAgeDays) {
|
|
62
|
+
violations.push({
|
|
63
|
+
code: 'account_age',
|
|
64
|
+
message: `Account age ${customer.accountAgeDays} days is below minimum ${policy.minAccountAgeDays} days`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
rationale.push(`Account age ${customer.accountAgeDays} days exceeds minimum ${policy.minAccountAgeDays} days`);
|
|
69
|
+
}
|
|
70
|
+
const hasComplianceHold = customer.complianceFlags.length > 0;
|
|
71
|
+
if (policy.requiresComplianceClearance && hasComplianceHold) {
|
|
72
|
+
violations.push({
|
|
73
|
+
code: 'compliance_hold',
|
|
74
|
+
message: `Compliance flags present: ${customer.complianceFlags.join(', ')}`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else if (policy.requiresComplianceClearance) {
|
|
78
|
+
rationale.push('No compliance holds found for customer');
|
|
79
|
+
}
|
|
80
|
+
const decision = violations.length === 0 ? 'allow' : 'deny';
|
|
81
|
+
if (decision === 'deny') {
|
|
82
|
+
rationale.push('Entitlement denied due to policy violations');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
rationale.push('Entitlement approved according to policy requirements');
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
decision,
|
|
89
|
+
policy,
|
|
90
|
+
customer,
|
|
91
|
+
slaMinutes: policy.slaMinutes,
|
|
92
|
+
rationale,
|
|
93
|
+
violations,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class EntitlementNotifySupervisorTool extends Tool {
|
|
98
|
+
name() {
|
|
99
|
+
return 'notify_supervisor';
|
|
100
|
+
}
|
|
101
|
+
async call(input) {
|
|
102
|
+
if (!input?.customerId || !input?.message) {
|
|
103
|
+
throw new Error('customerId and message are required');
|
|
104
|
+
}
|
|
105
|
+
const customer = await getCustomerProfile(input.customerId);
|
|
106
|
+
if (!customer) {
|
|
107
|
+
throw new Error(`Customer ${input.customerId} not found`);
|
|
108
|
+
}
|
|
109
|
+
const channel = input.channel ?? 'email';
|
|
110
|
+
const messageId = `notif-${Date.now()}`;
|
|
111
|
+
return {
|
|
112
|
+
notified: true,
|
|
113
|
+
channel,
|
|
114
|
+
supervisor: customer.supervisor,
|
|
115
|
+
messageId,
|
|
116
|
+
timestamp: new Date().toISOString(),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/entitlement/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { type IncidentRecord, type IncidentSeverity, type RoutingRule } from '../../data/incidents.js';
|
|
3
|
+
export type FetchIncidentInput = {
|
|
4
|
+
incidentId: string;
|
|
5
|
+
};
|
|
6
|
+
export type FetchIncidentOutput = {
|
|
7
|
+
incident: IncidentRecord;
|
|
8
|
+
};
|
|
9
|
+
export declare class FetchIncidentTool extends Tool<FetchIncidentInput, FetchIncidentOutput> {
|
|
10
|
+
name(): string;
|
|
11
|
+
call(input: FetchIncidentInput): Promise<FetchIncidentOutput>;
|
|
12
|
+
}
|
|
13
|
+
export type ClassifySeverityInput = {
|
|
14
|
+
incident: IncidentRecord;
|
|
15
|
+
};
|
|
16
|
+
export type ClassifySeverityOutput = {
|
|
17
|
+
severity: IncidentSeverity;
|
|
18
|
+
score: number;
|
|
19
|
+
rationale: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare class ClassifySeverityTool extends Tool<ClassifySeverityInput, ClassifySeverityOutput> {
|
|
22
|
+
name(): string;
|
|
23
|
+
call(input: ClassifySeverityInput): Promise<ClassifySeverityOutput>;
|
|
24
|
+
}
|
|
25
|
+
export type SelectQueueInput = {
|
|
26
|
+
incident: IncidentRecord;
|
|
27
|
+
severityOverride?: IncidentSeverity;
|
|
28
|
+
};
|
|
29
|
+
export type SelectQueueOutput = {
|
|
30
|
+
queue: string;
|
|
31
|
+
rule: RoutingRule;
|
|
32
|
+
escalationRequired: boolean;
|
|
33
|
+
rationale: string[];
|
|
34
|
+
};
|
|
35
|
+
export declare class SelectQueueTool extends Tool<SelectQueueInput, SelectQueueOutput> {
|
|
36
|
+
name(): string;
|
|
37
|
+
call(input: SelectQueueInput): Promise<SelectQueueOutput>;
|
|
38
|
+
}
|
|
39
|
+
export type EscalateIncidentInput = {
|
|
40
|
+
incidentId: string;
|
|
41
|
+
target: string;
|
|
42
|
+
reason: string;
|
|
43
|
+
};
|
|
44
|
+
export type EscalateIncidentOutput = {
|
|
45
|
+
escalated: boolean;
|
|
46
|
+
ticketId: string;
|
|
47
|
+
target: string;
|
|
48
|
+
reason: string;
|
|
49
|
+
timestamp: string;
|
|
50
|
+
};
|
|
51
|
+
export declare class EscalateIncidentTool extends Tool<EscalateIncidentInput, EscalateIncidentOutput> {
|
|
52
|
+
name(): string;
|
|
53
|
+
call(input: EscalateIncidentInput): Promise<EscalateIncidentOutput>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/incidents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;IAClF,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAYpE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAyCF,qBAAa,oBAAqB,SAAQ,IAAI,CAC5C,qBAAqB,EACrB,sBAAsB,CACvB;IACC,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAO1E;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,qBAAa,eAAgB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAC5E,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA2BhE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,IAAI,CAC5C,qBAAqB,EACrB,sBAAsB,CACvB;IACC,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAc1E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { getIncident, findRoutingRule, } from '../../data/incidents.js';
|
|
3
|
+
export class FetchIncidentTool extends Tool {
|
|
4
|
+
name() {
|
|
5
|
+
return 'fetch_incident';
|
|
6
|
+
}
|
|
7
|
+
async call(input) {
|
|
8
|
+
if (!input?.incidentId) {
|
|
9
|
+
throw new Error('incidentId is required');
|
|
10
|
+
}
|
|
11
|
+
const incident = await getIncident(input.incidentId);
|
|
12
|
+
if (!incident) {
|
|
13
|
+
throw new Error(`Incident ${input.incidentId} not found`);
|
|
14
|
+
}
|
|
15
|
+
return { incident };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function scoreSeverity(incident) {
|
|
19
|
+
const rationale = [];
|
|
20
|
+
let score = 0;
|
|
21
|
+
const declaredRank = rank(incident.declaredSeverity);
|
|
22
|
+
score += declaredRank * 20;
|
|
23
|
+
rationale.push(`Declared severity ${incident.declaredSeverity} provides base score ${declaredRank * 20}`);
|
|
24
|
+
if (incident.customerImpact === 'MAJOR') {
|
|
25
|
+
score += 30;
|
|
26
|
+
rationale.push('Major customer impact adds 30 points');
|
|
27
|
+
}
|
|
28
|
+
else if (incident.customerImpact === 'MINOR') {
|
|
29
|
+
score += 15;
|
|
30
|
+
rationale.push('Minor customer impact adds 15 points');
|
|
31
|
+
}
|
|
32
|
+
score += Math.min(incident.signalScore, 40);
|
|
33
|
+
rationale.push(`Signal score contribution: ${Math.min(incident.signalScore, 40)}`);
|
|
34
|
+
if (incident.vipCustomer) {
|
|
35
|
+
score += 10;
|
|
36
|
+
rationale.push('VIP customer flag adds 10 points');
|
|
37
|
+
}
|
|
38
|
+
const severity = score >= 80 ? 'CRITICAL' : score >= 60 ? 'HIGH' : score >= 40 ? 'MEDIUM' : 'LOW';
|
|
39
|
+
rationale.push(`Composite score ${score} maps to severity ${severity}`);
|
|
40
|
+
return { severity, score, rationale };
|
|
41
|
+
}
|
|
42
|
+
function rank(severity) {
|
|
43
|
+
switch (severity) {
|
|
44
|
+
case 'LOW': return 1;
|
|
45
|
+
case 'MEDIUM': return 2;
|
|
46
|
+
case 'HIGH': return 3;
|
|
47
|
+
case 'CRITICAL': return 4;
|
|
48
|
+
default: return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class ClassifySeverityTool extends Tool {
|
|
52
|
+
name() {
|
|
53
|
+
return 'classify_severity';
|
|
54
|
+
}
|
|
55
|
+
async call(input) {
|
|
56
|
+
if (!input?.incident) {
|
|
57
|
+
throw new Error('incident is required');
|
|
58
|
+
}
|
|
59
|
+
return scoreSeverity(input.incident);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class SelectQueueTool extends Tool {
|
|
63
|
+
name() {
|
|
64
|
+
return 'select_queue';
|
|
65
|
+
}
|
|
66
|
+
async call(input) {
|
|
67
|
+
if (!input?.incident) {
|
|
68
|
+
throw new Error('incident is required');
|
|
69
|
+
}
|
|
70
|
+
const rule = await findRoutingRule(input.incident, input.severityOverride);
|
|
71
|
+
if (!rule) {
|
|
72
|
+
throw new Error(`No routing rule found for incident ${input.incident.id}`);
|
|
73
|
+
}
|
|
74
|
+
const rationale = [
|
|
75
|
+
`Matched routing rule ${rule.id} for service ${rule.service} category ${rule.category}`,
|
|
76
|
+
];
|
|
77
|
+
if (rule.escalatesTo) {
|
|
78
|
+
rationale.push(`Escalation target defined: ${rule.escalatesTo}`);
|
|
79
|
+
}
|
|
80
|
+
if (rule.notes) {
|
|
81
|
+
rationale.push(`Routing notes: ${rule.notes}`);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
queue: rule.queue,
|
|
85
|
+
rule,
|
|
86
|
+
escalationRequired: Boolean(rule.escalatesTo),
|
|
87
|
+
rationale,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export class EscalateIncidentTool extends Tool {
|
|
92
|
+
name() {
|
|
93
|
+
return 'escalate_incident';
|
|
94
|
+
}
|
|
95
|
+
async call(input) {
|
|
96
|
+
if (!input?.incidentId || !input?.target || !input?.reason) {
|
|
97
|
+
throw new Error('incidentId, target, and reason are required');
|
|
98
|
+
}
|
|
99
|
+
const ticketId = `esc-${Date.now()}`;
|
|
100
|
+
return {
|
|
101
|
+
escalated: true,
|
|
102
|
+
ticketId,
|
|
103
|
+
target: input.target,
|
|
104
|
+
reason: input.reason,
|
|
105
|
+
timestamp: new Date().toISOString(),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/incidents/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { FetchCustomerProfileTool, EvaluateEntitlementTool, EntitlementNotifySupervisorTool } from './entitlement/index.js';
|
|
3
|
+
import { SearchKnowledgeTool, SummarizeSnippetTool, SuggestFollowupsTool } from './knowledge/index.js';
|
|
4
|
+
import { FetchIncidentTool, ClassifySeverityTool, SelectQueueTool, EscalateIncidentTool } from './incidents/index.js';
|
|
5
|
+
import { FetchInvoiceTool, FetchPurchaseOrderTool, CompareLineItemsTool, RecordFindingsTool } from './invoices/index.js';
|
|
6
|
+
import { AnalyzeTranscriptTool, GenerateFeedbackTool, LogCoachingNoteTool } from './coaching/index.js';
|
|
7
|
+
export { FetchCustomerProfileTool, EvaluateEntitlementTool, EntitlementNotifySupervisorTool, SearchKnowledgeTool, SummarizeSnippetTool, SuggestFollowupsTool, FetchIncidentTool, ClassifySeverityTool, SelectQueueTool, EscalateIncidentTool, FetchInvoiceTool, FetchPurchaseOrderTool, CompareLineItemsTool, RecordFindingsTool, AnalyzeTranscriptTool, GenerateFeedbackTool, LogCoachingNoteTool, };
|
|
8
|
+
export type ExampleToolInstance = {
|
|
9
|
+
tool: Tool<any, any>;
|
|
10
|
+
category: 'entitlement' | 'knowledge' | 'incident' | 'invoice' | 'coaching';
|
|
11
|
+
};
|
|
12
|
+
export declare function createExampleTools(): ExampleToolInstance[];
|
|
13
|
+
export type SearchToolInput = {
|
|
14
|
+
query: string;
|
|
15
|
+
limit?: number;
|
|
16
|
+
};
|
|
17
|
+
export type SearchToolOutput = {
|
|
18
|
+
results: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
score: number;
|
|
22
|
+
type: string;
|
|
23
|
+
summary: string;
|
|
24
|
+
tags: string[];
|
|
25
|
+
}>;
|
|
26
|
+
};
|
|
27
|
+
export declare class SearchTool extends Tool<SearchToolInput, SearchToolOutput> {
|
|
28
|
+
name(): string;
|
|
29
|
+
call(input: SearchToolInput): Promise<SearchToolOutput>;
|
|
30
|
+
}
|
|
31
|
+
export declare class ExtractEntitiesTool extends Tool<{
|
|
32
|
+
text: string;
|
|
33
|
+
}, {
|
|
34
|
+
entities: string[];
|
|
35
|
+
}> {
|
|
36
|
+
name(): string;
|
|
37
|
+
call(input: {
|
|
38
|
+
text: string;
|
|
39
|
+
}): Promise<{
|
|
40
|
+
entities: string[];
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
export declare class AssessRiskTool extends Tool<{
|
|
44
|
+
context: any;
|
|
45
|
+
}, {
|
|
46
|
+
riskTier: string;
|
|
47
|
+
score: number;
|
|
48
|
+
}> {
|
|
49
|
+
name(): string;
|
|
50
|
+
call(input: {
|
|
51
|
+
context: any;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
riskTier: string;
|
|
54
|
+
score: number;
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
export declare class CreateRefundTxnTool extends Tool<{
|
|
58
|
+
orderId: string;
|
|
59
|
+
amount: number;
|
|
60
|
+
}, {
|
|
61
|
+
transactionId: string;
|
|
62
|
+
status: string;
|
|
63
|
+
}> {
|
|
64
|
+
name(): string;
|
|
65
|
+
call(input: {
|
|
66
|
+
orderId: string;
|
|
67
|
+
amount: number;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
transactionId: string;
|
|
70
|
+
status: string;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
export declare class NotifySupervisorToolLegacy extends Tool<{
|
|
74
|
+
message: string;
|
|
75
|
+
channel: string;
|
|
76
|
+
}, {
|
|
77
|
+
sent: boolean;
|
|
78
|
+
messageId: string;
|
|
79
|
+
}> {
|
|
80
|
+
name(): string;
|
|
81
|
+
call(input: {
|
|
82
|
+
message: string;
|
|
83
|
+
channel: string;
|
|
84
|
+
}): Promise<{
|
|
85
|
+
sent: boolean;
|
|
86
|
+
messageId: string;
|
|
87
|
+
}>;
|
|
88
|
+
}
|
|
89
|
+
export { NotifySupervisorToolLegacy as NotifySupervisorTool };
|
|
90
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { FetchCustomerProfileTool, EvaluateEntitlementTool, EntitlementNotifySupervisorTool, } from './entitlement/index.js';
|
|
3
|
+
import { SearchKnowledgeTool, SummarizeSnippetTool, SuggestFollowupsTool, } from './knowledge/index.js';
|
|
4
|
+
import { FetchIncidentTool, ClassifySeverityTool, SelectQueueTool, EscalateIncidentTool, } from './incidents/index.js';
|
|
5
|
+
import { FetchInvoiceTool, FetchPurchaseOrderTool, CompareLineItemsTool, RecordFindingsTool, } from './invoices/index.js';
|
|
6
|
+
import { AnalyzeTranscriptTool, GenerateFeedbackTool, LogCoachingNoteTool, } from './coaching/index.js';
|
|
7
|
+
import { searchSnippets } from '../data/knowledge.js';
|
|
8
|
+
export { FetchCustomerProfileTool, EvaluateEntitlementTool, EntitlementNotifySupervisorTool, SearchKnowledgeTool, SummarizeSnippetTool, SuggestFollowupsTool, FetchIncidentTool, ClassifySeverityTool, SelectQueueTool, EscalateIncidentTool, FetchInvoiceTool, FetchPurchaseOrderTool, CompareLineItemsTool, RecordFindingsTool, AnalyzeTranscriptTool, GenerateFeedbackTool, LogCoachingNoteTool, };
|
|
9
|
+
export function createExampleTools() {
|
|
10
|
+
return [
|
|
11
|
+
{ tool: new FetchCustomerProfileTool(), category: 'entitlement' },
|
|
12
|
+
{ tool: new EvaluateEntitlementTool(), category: 'entitlement' },
|
|
13
|
+
{ tool: new EntitlementNotifySupervisorTool(), category: 'entitlement' },
|
|
14
|
+
{ tool: new SearchKnowledgeTool(), category: 'knowledge' },
|
|
15
|
+
{ tool: new SummarizeSnippetTool(), category: 'knowledge' },
|
|
16
|
+
{ tool: new SuggestFollowupsTool(), category: 'knowledge' },
|
|
17
|
+
{ tool: new FetchIncidentTool(), category: 'incident' },
|
|
18
|
+
{ tool: new ClassifySeverityTool(), category: 'incident' },
|
|
19
|
+
{ tool: new SelectQueueTool(), category: 'incident' },
|
|
20
|
+
{ tool: new EscalateIncidentTool(), category: 'incident' },
|
|
21
|
+
{ tool: new FetchInvoiceTool(), category: 'invoice' },
|
|
22
|
+
{ tool: new FetchPurchaseOrderTool(), category: 'invoice' },
|
|
23
|
+
{ tool: new CompareLineItemsTool(), category: 'invoice' },
|
|
24
|
+
{ tool: new RecordFindingsTool(), category: 'invoice' },
|
|
25
|
+
{ tool: new AnalyzeTranscriptTool(), category: 'coaching' },
|
|
26
|
+
{ tool: new GenerateFeedbackTool(), category: 'coaching' },
|
|
27
|
+
{ tool: new LogCoachingNoteTool(), category: 'coaching' },
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
export class SearchTool extends Tool {
|
|
31
|
+
name() {
|
|
32
|
+
return 'search';
|
|
33
|
+
}
|
|
34
|
+
async call(input) {
|
|
35
|
+
const query = input?.query?.trim();
|
|
36
|
+
if (!query) {
|
|
37
|
+
throw new Error('query is required');
|
|
38
|
+
}
|
|
39
|
+
const limit = Math.max(1, Math.min(input.limit ?? 5, 10));
|
|
40
|
+
const snippets = await searchSnippets(query);
|
|
41
|
+
const results = snippets.slice(0, limit).map((snippet, index) => ({
|
|
42
|
+
id: snippet.id,
|
|
43
|
+
title: snippet.title,
|
|
44
|
+
summary: snippet.summary,
|
|
45
|
+
tags: snippet.tags,
|
|
46
|
+
type: 'knowledge',
|
|
47
|
+
score: Math.max(1, snippets.length - index),
|
|
48
|
+
}));
|
|
49
|
+
return { results };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export class ExtractEntitiesTool extends Tool {
|
|
53
|
+
name() {
|
|
54
|
+
return 'extract_entities';
|
|
55
|
+
}
|
|
56
|
+
async call(input) {
|
|
57
|
+
const text = input?.text ?? '';
|
|
58
|
+
const entities = Array.from(new Set(text.match(/[A-Z]{2,}-\d+/g) ?? []));
|
|
59
|
+
if (!entities.includes('ORDER-REF')) {
|
|
60
|
+
entities.push('ORDER-REF');
|
|
61
|
+
}
|
|
62
|
+
return { entities };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export class AssessRiskTool extends Tool {
|
|
66
|
+
name() {
|
|
67
|
+
return 'assess_risk';
|
|
68
|
+
}
|
|
69
|
+
async call(input) {
|
|
70
|
+
const serialized = JSON.stringify(input?.context ?? {});
|
|
71
|
+
let hash = 0;
|
|
72
|
+
for (let i = 0; i < serialized.length; i++) {
|
|
73
|
+
hash = (hash + serialized.charCodeAt(i) * (i + 1)) % 101;
|
|
74
|
+
}
|
|
75
|
+
const score = hash;
|
|
76
|
+
const riskTier = score > 70 ? 'HIGH' : score > 40 ? 'MEDIUM' : 'LOW';
|
|
77
|
+
return { riskTier, score };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class CreateRefundTxnTool extends Tool {
|
|
81
|
+
name() {
|
|
82
|
+
return 'create_refund_txn';
|
|
83
|
+
}
|
|
84
|
+
async call(input) {
|
|
85
|
+
if (!input?.orderId || typeof input.amount !== 'number') {
|
|
86
|
+
throw new Error('orderId and amount are required');
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
transactionId: `TXN-${Date.now()}`,
|
|
90
|
+
status: input.amount > 0 ? 'COMPLETED' : 'REJECTED',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export class NotifySupervisorToolLegacy extends Tool {
|
|
95
|
+
name() {
|
|
96
|
+
return 'notify_supervisor_legacy';
|
|
97
|
+
}
|
|
98
|
+
async call(input) {
|
|
99
|
+
if (!input?.message) {
|
|
100
|
+
throw new Error('message is required');
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
sent: true,
|
|
104
|
+
messageId: `MSG-${Date.now()}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export { NotifySupervisorToolLegacy as NotifySupervisorTool };
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Tool } from '@ddse/acm-sdk';
|
|
2
|
+
import { compareLineItems, type InvoiceRecord, type PurchaseOrderRecord } from '../../data/invoices.js';
|
|
3
|
+
export type FetchInvoiceInput = {
|
|
4
|
+
invoiceId: string;
|
|
5
|
+
};
|
|
6
|
+
export type FetchInvoiceOutput = {
|
|
7
|
+
invoice: InvoiceRecord;
|
|
8
|
+
};
|
|
9
|
+
export declare class FetchInvoiceTool extends Tool<FetchInvoiceInput, FetchInvoiceOutput> {
|
|
10
|
+
name(): string;
|
|
11
|
+
call(input: FetchInvoiceInput): Promise<FetchInvoiceOutput>;
|
|
12
|
+
}
|
|
13
|
+
export type FetchPurchaseOrderInput = {
|
|
14
|
+
purchaseOrderId: string;
|
|
15
|
+
};
|
|
16
|
+
export type FetchPurchaseOrderOutput = {
|
|
17
|
+
purchaseOrder: PurchaseOrderRecord;
|
|
18
|
+
};
|
|
19
|
+
export declare class FetchPurchaseOrderTool extends Tool<FetchPurchaseOrderInput, FetchPurchaseOrderOutput> {
|
|
20
|
+
name(): string;
|
|
21
|
+
call(input: FetchPurchaseOrderInput): Promise<FetchPurchaseOrderOutput>;
|
|
22
|
+
}
|
|
23
|
+
export type CompareLineItemsInput = {
|
|
24
|
+
invoice: InvoiceRecord;
|
|
25
|
+
purchaseOrder: PurchaseOrderRecord;
|
|
26
|
+
};
|
|
27
|
+
export type Discrepancy = ReturnType<typeof compareLineItems>[number] & {
|
|
28
|
+
varianceAmount: number;
|
|
29
|
+
};
|
|
30
|
+
export type CompareLineItemsOutput = {
|
|
31
|
+
discrepancies: Discrepancy[];
|
|
32
|
+
variance: number;
|
|
33
|
+
matchedLines: number;
|
|
34
|
+
};
|
|
35
|
+
export declare class CompareLineItemsTool extends Tool<CompareLineItemsInput, CompareLineItemsOutput> {
|
|
36
|
+
name(): string;
|
|
37
|
+
call(input: CompareLineItemsInput): Promise<CompareLineItemsOutput>;
|
|
38
|
+
}
|
|
39
|
+
export type RecordFindingsInput = {
|
|
40
|
+
invoice: InvoiceRecord;
|
|
41
|
+
purchaseOrder: PurchaseOrderRecord;
|
|
42
|
+
discrepancies: Discrepancy[];
|
|
43
|
+
variance: number;
|
|
44
|
+
};
|
|
45
|
+
export type RecordFindingsOutput = {
|
|
46
|
+
reportId: string;
|
|
47
|
+
status: 'clean' | 'needs_remediation';
|
|
48
|
+
summary: string;
|
|
49
|
+
nextSteps: string[];
|
|
50
|
+
generatedAt: string;
|
|
51
|
+
};
|
|
52
|
+
export declare class RecordFindingsTool extends Tool<RecordFindingsInput, RecordFindingsOutput> {
|
|
53
|
+
name(): string;
|
|
54
|
+
call(input: RecordFindingsInput): Promise<RecordFindingsOutput>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/invoices/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAGL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAC/E,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAYlE;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,IAAI,CAC9C,uBAAuB,EACvB,wBAAwB,CACzB;IACC,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAY9E;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG;IACtE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,IAAI,CAC5C,qBAAqB,EACrB,sBAAsB,CACvB;IACC,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAqB1E;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,mBAAmB,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,IAAI,CAC1C,mBAAmB,EACnB,oBAAoB,CACrB;IACC,IAAI,IAAI,MAAM;IAIR,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA6BtE"}
|