@wilnertech/halopsa-mcp-server 1.1.0 → 1.3.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/README.md +81 -2
- package/dist/cache/memory-cache.d.ts +3 -0
- package/dist/cache/memory-cache.d.ts.map +1 -1
- package/dist/cache/memory-cache.js +4 -0
- package/dist/cache/memory-cache.js.map +1 -1
- package/dist/schemas/common.d.ts +1 -1
- package/dist/tools/assets.d.ts +18 -0
- package/dist/tools/assets.d.ts.map +1 -1
- package/dist/tools/assets.js +7 -3
- package/dist/tools/assets.js.map +1 -1
- package/dist/tools/batch-operations.d.ts +47 -0
- package/dist/tools/batch-operations.d.ts.map +1 -1
- package/dist/tools/batch-operations.js +144 -1
- package/dist/tools/batch-operations.js.map +1 -1
- package/dist/tools/budgets.d.ts +130 -0
- package/dist/tools/budgets.d.ts.map +1 -0
- package/dist/tools/budgets.js +277 -0
- package/dist/tools/budgets.js.map +1 -0
- package/dist/tools/milestones.d.ts +90 -0
- package/dist/tools/milestones.d.ts.map +1 -0
- package/dist/tools/milestones.js +170 -0
- package/dist/tools/milestones.js.map +1 -0
- package/dist/tools/registrations.d.ts +6 -2
- package/dist/tools/registrations.d.ts.map +1 -1
- package/dist/tools/registrations.js +38 -5
- package/dist/tools/registrations.js.map +1 -1
- package/dist/tools/sites.d.ts +9 -0
- package/dist/tools/sites.d.ts.map +1 -1
- package/dist/tools/sites.js +4 -2
- package/dist/tools/sites.js.map +1 -1
- package/dist/tools/ticket-actions.d.ts +9 -0
- package/dist/tools/ticket-actions.d.ts.map +1 -1
- package/dist/tools/ticket-actions.js +4 -2
- package/dist/tools/ticket-actions.js.map +1 -1
- package/dist/tools/ticket-links.d.ts +41 -0
- package/dist/tools/ticket-links.d.ts.map +1 -0
- package/dist/tools/ticket-links.js +84 -0
- package/dist/tools/ticket-links.js.map +1 -0
- package/dist/tools/tickets.d.ts +24 -0
- package/dist/tools/tickets.d.ts.map +1 -1
- package/dist/tools/tickets.js +39 -4
- package/dist/tools/tickets.js.map +1 -1
- package/dist/tools/users.d.ts +18 -0
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +7 -3
- package/dist/tools/users.js.map +1 -1
- package/dist/tools/workflows.d.ts +125 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +355 -0
- package/dist/tools/workflows.js.map +1 -0
- package/dist/types/budgets.d.ts +45 -0
- package/dist/types/budgets.d.ts.map +1 -0
- package/dist/types/budgets.js +12 -0
- package/dist/types/budgets.js.map +1 -0
- package/dist/types/milestones.d.ts +37 -0
- package/dist/types/milestones.d.ts.map +1 -0
- package/dist/types/milestones.js +14 -0
- package/dist/types/milestones.js.map +1 -0
- package/dist/types/tickets.d.ts +1 -0
- package/dist/types/tickets.d.ts.map +1 -1
- package/dist/types/workflows.d.ts +77 -0
- package/dist/types/workflows.d.ts.map +1 -0
- package/dist/types/workflows.js +11 -0
- package/dist/types/workflows.js.map +1 -0
- package/dist/utils/formatter.d.ts +19 -0
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +171 -0
- package/dist/utils/formatter.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HaloPSA milestone management tools.
|
|
3
|
+
*
|
|
4
|
+
* Milestones are stored as a nested `milestones[]` array on the ticket
|
|
5
|
+
* itself — there is no top-level /Milestone endpoint (GET /Milestone
|
|
6
|
+
* returns 404). All reads use GET /Tickets/{id}?includedetails=true
|
|
7
|
+
* and all writes use POST /Tickets with a read-before-write merge,
|
|
8
|
+
* replacing the milestones array in its entirety (same pattern as
|
|
9
|
+
* customfields).
|
|
10
|
+
*
|
|
11
|
+
* Discovery note (2026-05-11): confirmed `milestones: []` (empty array)
|
|
12
|
+
* on ticket 22541; Swagger declares `MileStone` schema with 24 props.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { formatResponse, stripWriteResponse } from '../utils/formatter.js';
|
|
16
|
+
import { TTL } from '../cache/memory-cache.js';
|
|
17
|
+
import { FormatOptionsSchema } from '../schemas/common.js';
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Schemas
|
|
20
|
+
// =============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Single milestone input — reused by set (array element) and add (single).
|
|
23
|
+
*/
|
|
24
|
+
const MilestoneInputSchema = z.object({
|
|
25
|
+
name: z.string().min(1)
|
|
26
|
+
.describe('Milestone name (required)'),
|
|
27
|
+
target_date: z.string()
|
|
28
|
+
.describe('Target completion date — ISO 8601 (required)'),
|
|
29
|
+
start_date: z.string().optional()
|
|
30
|
+
.describe('Start date — ISO 8601'),
|
|
31
|
+
sequence: z.number().int().optional()
|
|
32
|
+
.describe('Ordering sequence number'),
|
|
33
|
+
billing_amount: z.number().optional()
|
|
34
|
+
.describe('Billing amount associated with this milestone'),
|
|
35
|
+
status_id: z.number().int().optional()
|
|
36
|
+
.describe('Milestone status ID'),
|
|
37
|
+
});
|
|
38
|
+
export const ListTicketMilestonesArgsSchema = z.object({
|
|
39
|
+
ticket_id: z.number().int()
|
|
40
|
+
.describe('HaloPSA project ticket ID to read milestones from'),
|
|
41
|
+
format_options: FormatOptionsSchema,
|
|
42
|
+
});
|
|
43
|
+
export const SetTicketMilestonesArgsSchema = z.object({
|
|
44
|
+
ticket_id: z.number().int()
|
|
45
|
+
.describe('HaloPSA project ticket ID'),
|
|
46
|
+
milestones: z.array(MilestoneInputSchema).min(1)
|
|
47
|
+
.describe('Full replacement array of milestones. This REPLACES all existing milestones on the ticket.'),
|
|
48
|
+
format_options: FormatOptionsSchema,
|
|
49
|
+
});
|
|
50
|
+
export const AddTicketMilestoneArgsSchema = z.object({
|
|
51
|
+
ticket_id: z.number().int()
|
|
52
|
+
.describe('HaloPSA project ticket ID'),
|
|
53
|
+
milestone: MilestoneInputSchema
|
|
54
|
+
.describe('Milestone to append to the existing list'),
|
|
55
|
+
format_options: FormatOptionsSchema,
|
|
56
|
+
});
|
|
57
|
+
export const RemoveTicketMilestoneArgsSchema = z.object({
|
|
58
|
+
ticket_id: z.number().int()
|
|
59
|
+
.describe('HaloPSA project ticket ID'),
|
|
60
|
+
milestone_id: z.number().int()
|
|
61
|
+
.describe('ID of the milestone to remove'),
|
|
62
|
+
format_options: FormatOptionsSchema,
|
|
63
|
+
});
|
|
64
|
+
// =============================================================================
|
|
65
|
+
// Helpers
|
|
66
|
+
// =============================================================================
|
|
67
|
+
/**
|
|
68
|
+
* Halo write endpoints sometimes return `[{...}]` and sometimes `{...}`.
|
|
69
|
+
* Normalize to a single object so handlers don't have to branch.
|
|
70
|
+
*/
|
|
71
|
+
function unwrapWriteResponse(response) {
|
|
72
|
+
return Array.isArray(response) ? response[0] : response;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Fetch ticket with includedetails=true, bypassing cache so we always
|
|
76
|
+
* have a fresh baseline before a write.
|
|
77
|
+
*/
|
|
78
|
+
async function fetchTicketFresh(client, ticketId) {
|
|
79
|
+
return client.get(`/Tickets/${ticketId}`, { includedetails: true });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* POST the merged ticket payload to Halo and return the stripped, formatted
|
|
83
|
+
* milestones array from the response.
|
|
84
|
+
*/
|
|
85
|
+
async function writeMilestones(client, ticketId, existing, newMilestones, format) {
|
|
86
|
+
const payload = { ...existing, id: ticketId, milestones: newMilestones };
|
|
87
|
+
const response = unwrapWriteResponse(await client.post('/Tickets', [payload]));
|
|
88
|
+
client.invalidateCache(`ticket-milestones:${ticketId}*`);
|
|
89
|
+
client.invalidateCache(`ticket:${ticketId}*`);
|
|
90
|
+
client.invalidateCache('tickets:*');
|
|
91
|
+
// Return the milestones array from the written ticket.
|
|
92
|
+
const strippedTicket = stripWriteResponse(response, format, 'ticket');
|
|
93
|
+
const milestones = strippedTicket['milestones'] ?? [];
|
|
94
|
+
const resolvedFormat = format ?? 'compact';
|
|
95
|
+
return formatResponse(milestones, { format: resolvedFormat }, {
|
|
96
|
+
ticket_id: ticketId,
|
|
97
|
+
milestone_count: milestones.length,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// =============================================================================
|
|
101
|
+
// Implementations
|
|
102
|
+
// =============================================================================
|
|
103
|
+
export async function listTicketMilestones(client, args) {
|
|
104
|
+
const response = await client.getCached(`/Tickets/${args.ticket_id}`, { includedetails: true }, {
|
|
105
|
+
enabled: true,
|
|
106
|
+
ttl: TTL.TICKET_LIST,
|
|
107
|
+
keyPrefix: `ticket-milestones:${args.ticket_id}`,
|
|
108
|
+
});
|
|
109
|
+
const milestones = response.milestones ?? [];
|
|
110
|
+
const formatOpts = args.format_options ?? { format: 'standard' };
|
|
111
|
+
return formatResponse(milestones, formatOpts, {
|
|
112
|
+
ticket_id: args.ticket_id,
|
|
113
|
+
milestone_count: milestones.length,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
export async function setTicketMilestones(client, args) {
|
|
117
|
+
const existing = await fetchTicketFresh(client, args.ticket_id);
|
|
118
|
+
const format = args.format_options?.format;
|
|
119
|
+
return writeMilestones(client, args.ticket_id, existing, args.milestones, format);
|
|
120
|
+
}
|
|
121
|
+
export async function addTicketMilestone(client, args) {
|
|
122
|
+
const existing = await fetchTicketFresh(client, args.ticket_id);
|
|
123
|
+
const format = args.format_options?.format;
|
|
124
|
+
const currentMilestones = existing.milestones ?? [];
|
|
125
|
+
const merged = [...currentMilestones, args.milestone];
|
|
126
|
+
return writeMilestones(client, args.ticket_id, existing, merged, format);
|
|
127
|
+
}
|
|
128
|
+
export async function removeTicketMilestone(client, args) {
|
|
129
|
+
const existing = await fetchTicketFresh(client, args.ticket_id);
|
|
130
|
+
const format = args.format_options?.format;
|
|
131
|
+
const currentMilestones = existing.milestones ?? [];
|
|
132
|
+
const filtered = currentMilestones.filter((m) => m.id !== args.milestone_id);
|
|
133
|
+
if (filtered.length === currentMilestones.length) {
|
|
134
|
+
return JSON.stringify({
|
|
135
|
+
removed: false,
|
|
136
|
+
ticket_id: args.ticket_id,
|
|
137
|
+
milestone_id: args.milestone_id,
|
|
138
|
+
message: `Milestone id=${args.milestone_id} not found on ticket ${args.ticket_id}.`,
|
|
139
|
+
}, null, 2);
|
|
140
|
+
}
|
|
141
|
+
return writeMilestones(client, args.ticket_id, existing, filtered, format);
|
|
142
|
+
}
|
|
143
|
+
// =============================================================================
|
|
144
|
+
// Tool Definitions
|
|
145
|
+
// =============================================================================
|
|
146
|
+
export const listTicketMilestonesTool = {
|
|
147
|
+
name: 'list_halopsa_ticket_milestones',
|
|
148
|
+
description: 'Read the milestones[] array from a HaloPSA project ticket. Milestones are nested on the ticket — GET /Ticket/{id}?includedetails=true. Returns [] if none defined. Cached 1 min.',
|
|
149
|
+
schema: ListTicketMilestonesArgsSchema,
|
|
150
|
+
handler: listTicketMilestones,
|
|
151
|
+
};
|
|
152
|
+
export const setTicketMilestonesTool = {
|
|
153
|
+
name: 'set_halopsa_ticket_milestones',
|
|
154
|
+
description: 'Replace ALL milestones on a HaloPSA project ticket with the provided array. Uses read-before-write merge via POST /Tickets (REPLACE semantics). Returns updated milestones[].',
|
|
155
|
+
schema: SetTicketMilestonesArgsSchema,
|
|
156
|
+
handler: setTicketMilestones,
|
|
157
|
+
};
|
|
158
|
+
export const addTicketMilestoneTool = {
|
|
159
|
+
name: 'add_halopsa_ticket_milestone',
|
|
160
|
+
description: 'Append a single milestone to a HaloPSA project ticket. Reads existing milestones, appends the new one, then writes the full array via POST /Tickets. Returns updated milestones[].',
|
|
161
|
+
schema: AddTicketMilestoneArgsSchema,
|
|
162
|
+
handler: addTicketMilestone,
|
|
163
|
+
};
|
|
164
|
+
export const removeTicketMilestoneTool = {
|
|
165
|
+
name: 'remove_halopsa_ticket_milestone',
|
|
166
|
+
description: 'Remove a single milestone (by ID) from a HaloPSA project ticket. Reads existing milestones, filters out the target, then writes the remaining array via POST /Tickets. Returns updated milestones[] or a not-found message.',
|
|
167
|
+
schema: RemoveTicketMilestoneArgsSchema,
|
|
168
|
+
handler: removeTicketMilestone,
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=milestones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones.js","sourceRoot":"","sources":["../../src/tools/milestones.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
* Central tool registration — imports all ZodToolDefinition exports
|
|
3
3
|
* and registers them with a ToolRegistry instance.
|
|
4
4
|
*
|
|
5
|
-
* Tool inventory (
|
|
5
|
+
* Tool inventory (66 total):
|
|
6
6
|
* Assets (11), Users (7), Sites (4), Clients (3),
|
|
7
7
|
* Reference data (4), Ticket reference data (5),
|
|
8
8
|
* Tickets (7), Ticket actions (2), Ticket custom fields (2),
|
|
9
|
-
* Batch operations (
|
|
9
|
+
* Batch operations (5 — assets, users, sites, tickets, bulk-update),
|
|
10
|
+
* Ticket links (1 — read-side only),
|
|
11
|
+
* Workflows (6 — list/get/list-steps/create/update/delete),
|
|
12
|
+
* Ticket milestones (4 — list/set/add/remove on parent ticket),
|
|
13
|
+
* Budgets (5 — list/create/delete BudgetType, get/set per-ticket)
|
|
10
14
|
*/
|
|
11
15
|
import type { ToolRegistry } from './registry.js';
|
|
12
16
|
export declare function registerAllTools(registry: ToolRegistry): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrations.d.ts","sourceRoot":"","sources":["../../src/tools/registrations.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registrations.d.ts","sourceRoot":"","sources":["../../src/tools/registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AA+MlD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAI7D"}
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
* Central tool registration — imports all ZodToolDefinition exports
|
|
3
3
|
* and registers them with a ToolRegistry instance.
|
|
4
4
|
*
|
|
5
|
-
* Tool inventory (
|
|
5
|
+
* Tool inventory (66 total):
|
|
6
6
|
* Assets (11), Users (7), Sites (4), Clients (3),
|
|
7
7
|
* Reference data (4), Ticket reference data (5),
|
|
8
8
|
* Tickets (7), Ticket actions (2), Ticket custom fields (2),
|
|
9
|
-
* Batch operations (
|
|
9
|
+
* Batch operations (5 — assets, users, sites, tickets, bulk-update),
|
|
10
|
+
* Ticket links (1 — read-side only),
|
|
11
|
+
* Workflows (6 — list/get/list-steps/create/update/delete),
|
|
12
|
+
* Ticket milestones (4 — list/set/add/remove on parent ticket),
|
|
13
|
+
* Budgets (5 — list/create/delete BudgetType, get/set per-ticket)
|
|
10
14
|
*/
|
|
11
15
|
// Asset tools (11)
|
|
12
16
|
import { listAssetsTool, getAssetTool, searchAssetsBySerialTool, searchAssetsByHostnameTool, createAssetTool, updateAssetTool, deleteAssetTool, listAssetCustomFieldsTool, getAssetFieldSchemaTool, findAssetMatchTool, scanAssetDuplicatesTool, } from './assets.js';
|
|
@@ -26,8 +30,16 @@ import { listTicketsTool, getTicketTool, searchTicketsTool, createTicketTool, up
|
|
|
26
30
|
import { addTicketActionTool, listTicketActionsTool, } from './ticket-actions.js';
|
|
27
31
|
// Ticket custom field tools (2)
|
|
28
32
|
import { listTicketCustomFieldsTool, getTicketFieldSchemaTool, } from './ticket-custom-fields.js';
|
|
29
|
-
// Batch operations tools (
|
|
30
|
-
import { getAssetsBatchTool, getUsersBatchTool, getSitesBatchTool, getTicketsBatchTool, } from './batch-operations.js';
|
|
33
|
+
// Batch operations tools (5)
|
|
34
|
+
import { getAssetsBatchTool, getUsersBatchTool, getSitesBatchTool, getTicketsBatchTool, bulkUpdateTicketsTool, } from './batch-operations.js';
|
|
35
|
+
// Ticket links tools (1)
|
|
36
|
+
import { listLinkedTicketsTool, } from './ticket-links.js';
|
|
37
|
+
// Workflow tools (6)
|
|
38
|
+
import { listWorkflowsTool, getWorkflowTool, listWorkflowStepsTool, createWorkflowTool, updateWorkflowTool, deleteWorkflowTool, } from './workflows.js';
|
|
39
|
+
// Ticket milestone tools (4)
|
|
40
|
+
import { listTicketMilestonesTool, setTicketMilestonesTool, addTicketMilestoneTool, removeTicketMilestoneTool, } from './milestones.js';
|
|
41
|
+
// Budget tools (5)
|
|
42
|
+
import { listBudgetTypesTool, createBudgetTypeTool, deleteBudgetTypeTool, getTicketBudgetTool, setTicketBudgetTool, } from './budgets.js';
|
|
31
43
|
const allTools = [
|
|
32
44
|
// Assets (11)
|
|
33
45
|
listAssetsTool,
|
|
@@ -83,11 +95,32 @@ const allTools = [
|
|
|
83
95
|
// Ticket custom fields (2)
|
|
84
96
|
listTicketCustomFieldsTool,
|
|
85
97
|
getTicketFieldSchemaTool,
|
|
86
|
-
// Batch operations (
|
|
98
|
+
// Batch operations (5)
|
|
87
99
|
getAssetsBatchTool,
|
|
88
100
|
getUsersBatchTool,
|
|
89
101
|
getSitesBatchTool,
|
|
90
102
|
getTicketsBatchTool,
|
|
103
|
+
bulkUpdateTicketsTool,
|
|
104
|
+
// Ticket links (1)
|
|
105
|
+
listLinkedTicketsTool,
|
|
106
|
+
// Workflows (6)
|
|
107
|
+
listWorkflowsTool,
|
|
108
|
+
getWorkflowTool,
|
|
109
|
+
listWorkflowStepsTool,
|
|
110
|
+
createWorkflowTool,
|
|
111
|
+
updateWorkflowTool,
|
|
112
|
+
deleteWorkflowTool,
|
|
113
|
+
// Ticket milestones (4)
|
|
114
|
+
listTicketMilestonesTool,
|
|
115
|
+
setTicketMilestonesTool,
|
|
116
|
+
addTicketMilestoneTool,
|
|
117
|
+
removeTicketMilestoneTool,
|
|
118
|
+
// Budgets (5)
|
|
119
|
+
listBudgetTypesTool,
|
|
120
|
+
createBudgetTypeTool,
|
|
121
|
+
deleteBudgetTypeTool,
|
|
122
|
+
getTicketBudgetTool,
|
|
123
|
+
setTicketBudgetTool,
|
|
91
124
|
];
|
|
92
125
|
export function registerAllTools(registry) {
|
|
93
126
|
for (const tool of allTools) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrations.js","sourceRoot":"","sources":["../../src/tools/registrations.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registrations.js","sourceRoot":"","sources":["../../src/tools/registrations.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/sites.d.ts
CHANGED
|
@@ -55,6 +55,15 @@ export declare const CreateSiteArgsSchema: z.ZodObject<{
|
|
|
55
55
|
postalcode: z.ZodOptional<z.ZodString>;
|
|
56
56
|
country: z.ZodOptional<z.ZodString>;
|
|
57
57
|
}, z.core.$strip>>;
|
|
58
|
+
format_options: z.ZodOptional<z.ZodObject<{
|
|
59
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
60
|
+
compact: "compact";
|
|
61
|
+
standard: "standard";
|
|
62
|
+
detailed: "detailed";
|
|
63
|
+
}>>;
|
|
64
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
65
|
+
omit_empty: z.ZodOptional<z.ZodBoolean>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
58
67
|
}, z.core.$strip>;
|
|
59
68
|
/**
|
|
60
69
|
* Find site match schema (deduplication)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAcvD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;iBAU9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAcvD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;iBAU9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;iBAqB/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;iBAOlC,CAAC;AAMH;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GACzC,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAqGjB;AAMD,eAAO,MAAM,aAAa,EAAE,iBAK3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,iBAKzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAK5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC"}
|
package/dist/tools/sites.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Provides CRUD operations for sites with caching and deduplication
|
|
4
4
|
*/
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
import { formatResponse } from '../utils/formatter.js';
|
|
6
|
+
import { formatResponse, stripWriteResponse } from '../utils/formatter.js';
|
|
7
7
|
import { getStringSimilarity, getAddressSimilarity } from '../utils/similarity.js';
|
|
8
8
|
import { TTL } from '../cache/memory-cache.js';
|
|
9
9
|
import { FormatOptionsSchema, ConfidenceThresholds } from '../schemas/common.js';
|
|
@@ -55,6 +55,7 @@ export const CreateSiteArgsSchema = z.object({
|
|
|
55
55
|
country: z.string().optional(),
|
|
56
56
|
}).optional()
|
|
57
57
|
.describe('Address object'),
|
|
58
|
+
format_options: FormatOptionsSchema,
|
|
58
59
|
});
|
|
59
60
|
/**
|
|
60
61
|
* Find site match schema (deduplication)
|
|
@@ -133,7 +134,8 @@ export async function createSite(client, args) {
|
|
|
133
134
|
// Invalidate site caches
|
|
134
135
|
client.invalidateCache(`sites:client_${args.client_id}*`);
|
|
135
136
|
client.invalidateCache('sites:client_all*');
|
|
136
|
-
|
|
137
|
+
const format = args.format_options?.format ?? 'compact';
|
|
138
|
+
return formatResponse(stripWriteResponse(response, format, 'site'), { format });
|
|
137
139
|
}
|
|
138
140
|
/**
|
|
139
141
|
* Find matching site using deduplication algorithm
|
package/dist/tools/sites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/tools/sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,15 @@ export declare const AddTicketActionArgsSchema: z.ZodObject<{
|
|
|
19
19
|
outcome_id: z.ZodOptional<z.ZodNumber>;
|
|
20
20
|
email_reply: z.ZodOptional<z.ZodBoolean>;
|
|
21
21
|
hiddenfromuser: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
format_options: z.ZodOptional<z.ZodObject<{
|
|
23
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
compact: "compact";
|
|
25
|
+
standard: "standard";
|
|
26
|
+
detailed: "detailed";
|
|
27
|
+
}>>;
|
|
28
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
|
+
omit_empty: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>>;
|
|
22
31
|
}, z.core.$strip>;
|
|
23
32
|
export declare const ListTicketActionsArgsSchema: z.ZodObject<{
|
|
24
33
|
ticket_id: z.ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket-actions.d.ts","sourceRoot":"","sources":["../../src/tools/ticket-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAevD,eAAO,MAAM,yBAAyB
|
|
1
|
+
{"version":3,"file":"ticket-actions.d.ts","sourceRoot":"","sources":["../../src/tools/ticket-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAevD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAYpC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;iBAQtC,CAAC;AA2IH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2CjB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAMD,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,iBAKnC,CAAC"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
import { HaloPSAError } from '../api/errors.js';
|
|
15
|
-
import { formatResponse } from '../utils/formatter.js';
|
|
15
|
+
import { formatResponse, stripWriteResponse } from '../utils/formatter.js';
|
|
16
16
|
import { TTL } from '../cache/memory-cache.js';
|
|
17
17
|
import { FormatOptionsSchema } from '../schemas/common.js';
|
|
18
18
|
// =============================================================================
|
|
@@ -29,6 +29,7 @@ export const AddTicketActionArgsSchema = z.object({
|
|
|
29
29
|
.describe('If true, sends the note as an email reply to the ticket requester'),
|
|
30
30
|
hiddenfromuser: z.boolean().optional()
|
|
31
31
|
.describe('If true, hides the action from the customer portal'),
|
|
32
|
+
format_options: FormatOptionsSchema,
|
|
32
33
|
});
|
|
33
34
|
export const ListTicketActionsArgsSchema = z.object({
|
|
34
35
|
ticket_id: z.number().int()
|
|
@@ -182,7 +183,8 @@ export async function addTicketAction(client, args) {
|
|
|
182
183
|
const created = Array.isArray(raw) ? raw[0] : raw;
|
|
183
184
|
client.invalidateCache(`ticket-actions:${args.ticket_id}*`);
|
|
184
185
|
client.invalidateCache(`ticket:${args.ticket_id}*`);
|
|
185
|
-
|
|
186
|
+
const format = args.format_options?.format ?? 'compact';
|
|
187
|
+
return formatResponse(stripWriteResponse(created, format, 'action'), { format });
|
|
186
188
|
}
|
|
187
189
|
export async function listTicketActions(client, args) {
|
|
188
190
|
const params = { ticket_id: args.ticket_id };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket-actions.js","sourceRoot":"","sources":["../../src/tools/ticket-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQhD,OAAO,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ticket-actions.js","sourceRoot":"","sources":["../../src/tools/ticket-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HaloPSA Ticket Links tools (read-side only).
|
|
3
|
+
*
|
|
4
|
+
* The dedicated /IntegrationData/Get/HaloLink endpoint returned HTTP 400 on
|
|
5
|
+
* empirical testing against the live tenant (2026-05-11) with naive params —
|
|
6
|
+
* the correct invocation parameters have not yet been isolated. Deferred to
|
|
7
|
+
* v1.4. This file ships the read-side only via the ticket's nested
|
|
8
|
+
* `linked_tickets` array returned by GET /Tickets/{id}?includedetails=true.
|
|
9
|
+
*
|
|
10
|
+
* TODO(v1.4): probe /IntegrationData/Get/HaloLink with corrected params and
|
|
11
|
+
* implement create_halopsa_ticket_link / delete_halopsa_ticket_link.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import type { HaloPSAAPIClient } from '../api/client.js';
|
|
15
|
+
import type { ZodToolDefinition } from './registry.js';
|
|
16
|
+
export declare const ListLinkedTicketsArgsSchema: z.ZodObject<{
|
|
17
|
+
ticket_id: z.ZodNumber;
|
|
18
|
+
format_options: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
compact: "compact";
|
|
21
|
+
standard: "standard";
|
|
22
|
+
detailed: "detailed";
|
|
23
|
+
}>>;
|
|
24
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
omit_empty: z.ZodOptional<z.ZodBoolean>;
|
|
26
|
+
}, z.core.$strip>>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
/**
|
|
29
|
+
* Retrieve linked tickets for a given ticket ID.
|
|
30
|
+
*
|
|
31
|
+
* Fetches GET /Tickets/{id}?includedetails=true and surfaces:
|
|
32
|
+
* - linked_tickets[] (or [] if absent) — compact shape: {linked_ticket_id, link_type?, summary?}
|
|
33
|
+
* - parent_id (canonical "depends on / blocks" link)
|
|
34
|
+
* - child_count
|
|
35
|
+
* - linked_halo_ticket_count
|
|
36
|
+
*
|
|
37
|
+
* Cache key: 'ticket-links:{id}', TTL 1 min (same cadence as TICKET_LIST).
|
|
38
|
+
*/
|
|
39
|
+
export declare function listLinkedTickets(client: HaloPSAAPIClient, args: z.infer<typeof ListLinkedTicketsArgsSchema>): Promise<string>;
|
|
40
|
+
export declare const listLinkedTicketsTool: ZodToolDefinition;
|
|
41
|
+
//# sourceMappingURL=ticket-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-links.d.ts","sourceRoot":"","sources":["../../src/tools/ticket-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAiDvD,eAAO,MAAM,2BAA2B;;;;;;;;;;;iBAItC,CAAC;AAMH;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAMD,eAAO,MAAM,qBAAqB,EAAE,iBAUnC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HaloPSA Ticket Links tools (read-side only).
|
|
3
|
+
*
|
|
4
|
+
* The dedicated /IntegrationData/Get/HaloLink endpoint returned HTTP 400 on
|
|
5
|
+
* empirical testing against the live tenant (2026-05-11) with naive params —
|
|
6
|
+
* the correct invocation parameters have not yet been isolated. Deferred to
|
|
7
|
+
* v1.4. This file ships the read-side only via the ticket's nested
|
|
8
|
+
* `linked_tickets` array returned by GET /Tickets/{id}?includedetails=true.
|
|
9
|
+
*
|
|
10
|
+
* TODO(v1.4): probe /IntegrationData/Get/HaloLink with corrected params and
|
|
11
|
+
* implement create_halopsa_ticket_link / delete_halopsa_ticket_link.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { formatResponse } from '../utils/formatter.js';
|
|
15
|
+
import { TTL } from '../cache/memory-cache.js';
|
|
16
|
+
import { FormatOptionsSchema } from '../schemas/common.js';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Schema
|
|
19
|
+
// =============================================================================
|
|
20
|
+
export const ListLinkedTicketsArgsSchema = z.object({
|
|
21
|
+
ticket_id: z.number().int()
|
|
22
|
+
.describe('HaloPSA ticket ID whose linked tickets to retrieve'),
|
|
23
|
+
format_options: FormatOptionsSchema,
|
|
24
|
+
});
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Implementation
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Retrieve linked tickets for a given ticket ID.
|
|
30
|
+
*
|
|
31
|
+
* Fetches GET /Tickets/{id}?includedetails=true and surfaces:
|
|
32
|
+
* - linked_tickets[] (or [] if absent) — compact shape: {linked_ticket_id, link_type?, summary?}
|
|
33
|
+
* - parent_id (canonical "depends on / blocks" link)
|
|
34
|
+
* - child_count
|
|
35
|
+
* - linked_halo_ticket_count
|
|
36
|
+
*
|
|
37
|
+
* Cache key: 'ticket-links:{id}', TTL 1 min (same cadence as TICKET_LIST).
|
|
38
|
+
*/
|
|
39
|
+
export async function listLinkedTickets(client, args) {
|
|
40
|
+
const formatOptions = args.format_options || {};
|
|
41
|
+
const ticket = await client.getCached(`/Tickets/${args.ticket_id}`, { includedetails: true }, {
|
|
42
|
+
enabled: true,
|
|
43
|
+
ttl: TTL.TICKET_LIST,
|
|
44
|
+
keyPrefix: `ticket-links:${args.ticket_id}`,
|
|
45
|
+
});
|
|
46
|
+
// Surface the link-context fields from the ticket.
|
|
47
|
+
const rawLinks = ticket.linked_tickets ?? [];
|
|
48
|
+
// Compact shape: strip to {linked_ticket_id, link_type?, summary?} per entry.
|
|
49
|
+
const compactLinks = rawLinks.map((entry) => {
|
|
50
|
+
const slim = {
|
|
51
|
+
linked_ticket_id: entry.linked_ticket_id,
|
|
52
|
+
};
|
|
53
|
+
if (entry.link_type !== undefined)
|
|
54
|
+
slim.link_type = entry.link_type;
|
|
55
|
+
if (entry.summary !== undefined)
|
|
56
|
+
slim.summary = entry.summary;
|
|
57
|
+
return slim;
|
|
58
|
+
});
|
|
59
|
+
const context = {
|
|
60
|
+
ticket_id: args.ticket_id,
|
|
61
|
+
...(ticket.parent_id !== undefined && { parent_id: ticket.parent_id }),
|
|
62
|
+
...(ticket.child_count !== undefined && { child_count: ticket.child_count }),
|
|
63
|
+
...(ticket.linked_halo_ticket_count !== undefined && {
|
|
64
|
+
linked_halo_ticket_count: ticket.linked_halo_ticket_count,
|
|
65
|
+
}),
|
|
66
|
+
linked_tickets: compactLinks,
|
|
67
|
+
};
|
|
68
|
+
const meta = { total_linked: compactLinks.length };
|
|
69
|
+
return formatResponse(context, formatOptions, meta);
|
|
70
|
+
}
|
|
71
|
+
// =============================================================================
|
|
72
|
+
// Tool Definition
|
|
73
|
+
// =============================================================================
|
|
74
|
+
export const listLinkedTicketsTool = {
|
|
75
|
+
name: 'list_halopsa_linked_tickets',
|
|
76
|
+
description: 'Return the linked_tickets[] array for a HaloPSA ticket (read-side only). ' +
|
|
77
|
+
'Fetches GET /Tickets/{id}?includedetails=true and surfaces linked_tickets[], ' +
|
|
78
|
+
'parent_id, child_count, and linked_halo_ticket_count. ' +
|
|
79
|
+
'Compact response shape per entry: {linked_ticket_id, link_type?, summary?}. ' +
|
|
80
|
+
'Cache key ticket-links:{id}, TTL 1 min.',
|
|
81
|
+
schema: ListLinkedTicketsArgsSchema,
|
|
82
|
+
handler: listLinkedTickets,
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=ticket-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-links.js","sourceRoot":"","sources":["../../src/tools/ticket-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA0C3D,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;SACxB,QAAQ,CAAC,oDAAoD,CAAC;IACjE,cAAc,EAAE,mBAAmB;CACpC,CAAC,CAAC;AAEH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAwB,EACxB,IAAiD;IAEjD,MAAM,aAAa,GAAkB,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IAE/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,YAAY,IAAI,CAAC,SAAS,EAAE,EAC5B,EAAE,cAAc,EAAE,IAAI,EAAE,EACxB;QACE,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG,CAAC,WAAW;QACpB,SAAS,EAAE,gBAAgB,IAAI,CAAC,SAAS,EAAE;KAC5C,CACF,CAAC;IAEF,mDAAmD;IACnD,MAAM,QAAQ,GAA0B,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IAEpE,8EAA8E;IAC9E,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAA4B;YACpC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC,CAAC;QACF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACpE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAyB;QACpC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QACtE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,wBAAwB,KAAK,SAAS,IAAI;YACnD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC1D,CAAC;QACF,cAAc,EAAE,YAAY;KAC7B,CAAC;IAEF,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;IAEnD,OAAO,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,2EAA2E;QAC3E,+EAA+E;QAC/E,wDAAwD;QACxD,8EAA8E;QAC9E,yCAAyC;IAC3C,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,iBAAiB;CAC3B,CAAC"}
|