@cplace/mcp-server 1.5.2 → 1.6.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.
Files changed (57) hide show
  1. package/README.md +44 -0
  2. package/dist/conditional-registration.d.ts.map +1 -1
  3. package/dist/conditional-registration.js +10 -0
  4. package/dist/conditional-registration.js.map +1 -1
  5. package/dist/profiles.d.ts.map +1 -1
  6. package/dist/profiles.js +7 -3
  7. package/dist/profiles.js.map +1 -1
  8. package/dist/tool-metadata.d.ts.map +1 -1
  9. package/dist/tool-metadata.js +8 -0
  10. package/dist/tool-metadata.js.map +1 -1
  11. package/dist/tools/board-widget.d.ts +140 -89
  12. package/dist/tools/board-widget.d.ts.map +1 -1
  13. package/dist/tools/board-widget.js +131 -112
  14. package/dist/tools/board-widget.js.map +1 -1
  15. package/dist/tools/documents.d.ts +18 -0
  16. package/dist/tools/documents.d.ts.map +1 -0
  17. package/dist/tools/documents.js +59 -0
  18. package/dist/tools/documents.js.map +1 -0
  19. package/dist/tools/expert-settings.d.ts +38 -0
  20. package/dist/tools/expert-settings.d.ts.map +1 -0
  21. package/dist/tools/expert-settings.js +145 -0
  22. package/dist/tools/expert-settings.js.map +1 -0
  23. package/dist/tools/job-schedule-trigger.d.ts +16 -0
  24. package/dist/tools/job-schedule-trigger.d.ts.map +1 -0
  25. package/dist/tools/job-schedule-trigger.js +32 -0
  26. package/dist/tools/job-schedule-trigger.js.map +1 -0
  27. package/dist/tools/job-scripts.d.ts +58 -0
  28. package/dist/tools/job-scripts.d.ts.map +1 -0
  29. package/dist/tools/job-scripts.js +215 -0
  30. package/dist/tools/job-scripts.js.map +1 -0
  31. package/dist/tools/layout-richstring-widgets.d.ts.map +1 -1
  32. package/dist/tools/layout-richstring-widgets.js +1 -42
  33. package/dist/tools/layout-richstring-widgets.js.map +1 -1
  34. package/dist/tools/layout.d.ts.map +1 -1
  35. package/dist/tools/layout.js +2 -34
  36. package/dist/tools/layout.js.map +1 -1
  37. package/dist/tools/resource-planner-widget.d.ts +280 -0
  38. package/dist/tools/resource-planner-widget.d.ts.map +1 -0
  39. package/dist/tools/resource-planner-widget.js +539 -0
  40. package/dist/tools/resource-planner-widget.js.map +1 -0
  41. package/dist/tools/widget-tool-helpers.d.ts +7 -0
  42. package/dist/tools/widget-tool-helpers.d.ts.map +1 -0
  43. package/dist/tools/widget-tool-helpers.js +43 -0
  44. package/dist/tools/widget-tool-helpers.js.map +1 -0
  45. package/dist/widget-specifications/cf.cplace.cboard.main.board/_implementation.md +24 -0
  46. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/_implementation.md +42 -0
  47. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/actionSearch.md +10 -0
  48. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/attributesConfiguration.md +30 -0
  49. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/chartSearch.md +10 -0
  50. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/dateCalculation.md +8 -0
  51. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/defaultColumnsConfiguration.md +7 -0
  52. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/searchFirstGroup.md +8 -0
  53. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/searchNode.md +8 -0
  54. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/searchRootNode.md +10 -0
  55. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/searchSecondGroup.md +8 -0
  56. package/dist/widget-specifications/cf.cplace.resourceManagement.resourcePlannerDefinition/treeStructure.md +1 -0
  57. package/package.json +1 -1
@@ -0,0 +1,539 @@
1
+ import { z } from "zod";
2
+ import { debugLogWithTag } from "../logger.js";
3
+ import { LayoutContextSchema } from './layout.js';
4
+ import { findWidgetById, determineApiEndpoint, buildRequestParams, buildUpdateRequestBody } from './widget-tool-helpers.js';
5
+ const TOOL_RP_GET_CONFIGURATION = 'cplace_resource_planner_get_configuration';
6
+ const TOOL_RP_CONFIGURE_DATA_SOURCE = 'cplace_resource_planner_configure_data_source';
7
+ const TOOL_RP_CONFIGURE_GROUPS = 'cplace_resource_planner_configure_groups';
8
+ const TOOL_RP_CONFIGURE_COLUMNS = 'cplace_resource_planner_configure_columns';
9
+ const TOOL_RP_CONFIGURE_DISPLAY = 'cplace_resource_planner_configure_display';
10
+ const RP_WIDGET_TYPE = 'cf.cplace.resourceManagement.resourcePlannerDefinition';
11
+ const RP_PREFIX = 'cf.cplace.resourceManagement.resourcePlanner.';
12
+ const DateCalculationMode = z.enum(['STATIC', 'DYNAMIC', 'ATTRIBUTE']);
13
+ const DataSourceInputSchema = {
14
+ context: LayoutContextSchema,
15
+ widgetId: z.string().describe("The widget ID of the resource planner widget"),
16
+ searchNode: z.string().describe("WARNING: Do not manually construct! Use cplaceJson from cplace_search_pages response. Primary data source search for the resource planner nodes."),
17
+ sortColumnNode: z.string().optional().describe("Sort column for node results (attribute internal name)"),
18
+ sortOrderNode: z.enum(['ascending', 'descending']).optional().describe("Sort order for node results"),
19
+ nodeSelection: z.string().optional().describe("Node selection grouping. Use the value from get_configuration or from the widget definition schema."),
20
+ dateCalculation: DateCalculationMode.describe("Date calculation mode: STATIC (fixed dates), DYNAMIC (relative offset from today, most common), or ATTRIBUTE (read from entity attributes)"),
21
+ start: z.string().optional().describe("Start date for STATIC mode (ISO date format, e.g., '2026-01-01'). Required when dateCalculation=STATIC."),
22
+ end: z.string().optional().describe("End date for STATIC mode (ISO date format). Required when dateCalculation=STATIC."),
23
+ startValueDynamic: z.number().optional().describe("Start offset value for DYNAMIC mode (negative = past). Required when dateCalculation=DYNAMIC."),
24
+ startUnitDynamic: z.enum(['DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR']).optional().describe("Start offset unit for DYNAMIC mode. Required when dateCalculation=DYNAMIC."),
25
+ endValueDynamic: z.number().optional().describe("End offset value for DYNAMIC mode (positive = future). Required when dateCalculation=DYNAMIC."),
26
+ endUnitDynamic: z.enum(['DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR']).optional().describe("End offset unit for DYNAMIC mode. Required when dateCalculation=DYNAMIC."),
27
+ startDateAttribute: z.string().optional().describe("Attribute name for start date in ATTRIBUTE mode. Required when dateCalculation=ATTRIBUTE."),
28
+ endDateAttribute: z.string().optional().describe("Attribute name for end date in ATTRIBUTE mode. Required when dateCalculation=ATTRIBUTE."),
29
+ };
30
+ const GroupConfigSchema = z.object({
31
+ enabled: z.boolean().describe("Whether this grouping layer is enabled"),
32
+ search: z.string().optional().describe("WARNING: Do not manually construct! Use cplaceJson from cplace_search_pages. Required when enabled=true."),
33
+ sortColumn: z.string().optional().describe("Sort column for group results"),
34
+ sortOrder: z.enum(['ascending', 'descending']).optional().describe("Sort order for group results"),
35
+ selection: z.string().optional().describe("Group selection value. Use the value from get_configuration or from the widget definition schema."),
36
+ name: z.record(z.string()).optional().describe("Localized group name. Format: {\"en\": \"English Name\", \"de\": \"German Name\"}")
37
+ });
38
+ const GroupsInputSchema = {
39
+ context: LayoutContextSchema,
40
+ widgetId: z.string().describe("The widget ID of the resource planner widget"),
41
+ firstGroup: GroupConfigSchema.optional().describe("First grouping layer configuration. When enabled=true, search is required. When enabled=false, all group attributes are cleared."),
42
+ secondGroup: GroupConfigSchema.optional().describe("Second grouping layer configuration. Same behavior as firstGroup."),
43
+ };
44
+ const ColumnSchema = z.object({
45
+ feature: z.string().describe("Fully-qualified attribute name (e.g., 'cf.cplace.resourceManagement.startDate')"),
46
+ header: z.string().describe("Display name for the column header"),
47
+ builtin: z.boolean().describe("Whether this is a built-in column (true) or a custom attribute column (false)"),
48
+ visible: z.boolean().describe("Whether the column is visible by default")
49
+ });
50
+ const ColumnsInputSchema = {
51
+ context: LayoutContextSchema,
52
+ widgetId: z.string().describe("The widget ID of the resource planner widget"),
53
+ attributesConfiguration: z.array(ColumnSchema).optional().describe("Column definitions for the attributes panel. Full replacement — omitting a column removes it. At least one of attributesConfiguration or defaultColumnsConfiguration must be provided."),
54
+ defaultColumnsConfiguration: z.array(ColumnSchema).optional().describe("Default visible columns configuration. Full replacement — omitting a column removes it. At least one of attributesConfiguration or defaultColumnsConfiguration must be provided."),
55
+ };
56
+ const DisplayInputSchema = {
57
+ context: LayoutContextSchema,
58
+ widgetId: z.string().describe("The widget ID of the resource planner widget"),
59
+ interval: z.string().optional().describe("Default time interval (e.g., 'MONTH', 'WEEK', 'QUARTER')"),
60
+ allowedIntervals: z.array(z.string()).optional().describe("Allowed time intervals the user can choose from (e.g., ['WEEK', 'MONTH', 'QUARTER'])"),
61
+ calculationSelection: z.enum(['RELATIVE', 'ABSOLUTE']).optional().describe("Utilization calculation mode"),
62
+ checkboxWeekend: z.boolean().optional().describe("Whether weekends are included in the time grid"),
63
+ boundaryLow: z.number().optional().describe("Low utilization threshold (e.g., 80)"),
64
+ boundaryHigh: z.number().optional().describe("High utilization threshold (e.g., 100)"),
65
+ colorLow: z.string().optional().describe("Color for low utilization (hex, e.g., '#4CAF50')"),
66
+ colorMedium: z.string().optional().describe("Color for medium utilization (hex, e.g., '#FF9800')"),
67
+ colorHigh: z.string().optional().describe("Color for high utilization (hex, e.g., '#F44336')"),
68
+ treeStructure: z.array(z.string()).optional().describe("Hierarchy attributes for tree display (fully-qualified attribute names)"),
69
+ collapseLevel: z.number().optional().describe("Default tree collapse level (0 = fully collapsed)"),
70
+ searchRootNode: z.string().optional().describe("WARNING: Do not manually construct! Use cplaceJson from cplace_search_pages. Root node search for tree structure."),
71
+ rootNodeSelection: z.string().optional().describe("Root node selection value. Use the value from get_configuration or from the widget definition schema."),
72
+ };
73
+ const RP_TOOL_DEFINITIONS = {
74
+ [TOOL_RP_GET_CONFIGURATION]: {
75
+ description: `Get current resource planner widget configuration in a structured, grouped format.
76
+
77
+ Returns all configuration organized into logical sections:
78
+ - dataSource: Node search, sort settings, date calculation mode and parameters
79
+ - firstGroup/secondGroup: Optional grouping layers with their search triplets
80
+ - columns: attributesConfiguration and defaultColumnsConfiguration (parsed from JSON)
81
+ - display: Time grid, utilization colors, tree structure settings
82
+ - actions/charts: App-conditional sections (if configured)
83
+
84
+ Use this to inspect current state before making changes with the configure tools.`,
85
+ inputSchema: {
86
+ context: LayoutContextSchema,
87
+ widgetId: z.string().describe("The widget ID of the resource planner widget"),
88
+ },
89
+ annotations: { title: "Get Resource Planner Configuration" }
90
+ },
91
+ [TOOL_RP_CONFIGURE_DATA_SOURCE]: {
92
+ description: `Configure the resource planner's primary data source and date calculation settings.
93
+
94
+ Sets the node search (primary data source) and date calculation mode with its parameters.
95
+ The dateCalculation mode determines which parameters are required:
96
+ - STATIC: requires start, end (fixed date range)
97
+ - DYNAMIC: requires startValueDynamic, startUnitDynamic, endValueDynamic, endUnitDynamic (relative to today)
98
+ - ATTRIBUTE: requires startDateAttribute, endDateAttribute (read from entity attributes)
99
+
100
+ Parameters for non-selected modes are ignored. Full replacement — all data source settings are overwritten.`,
101
+ inputSchema: DataSourceInputSchema,
102
+ annotations: { title: "Configure Resource Planner Data Source" }
103
+ },
104
+ [TOOL_RP_CONFIGURE_GROUPS]: {
105
+ description: `Configure the resource planner's optional grouping layers.
106
+
107
+ At least one of firstGroup or secondGroup must be provided.
108
+ Each group has a toggle pattern:
109
+ - enabled: true → requires search (cplaceJson from cplace_search_pages), enables group in the widget
110
+ - enabled: false → disables group and clears all group attributes
111
+
112
+ Full replacement per group — all attributes for the specified group(s) are overwritten.
113
+ Omitting a group parameter leaves that group unchanged.`,
114
+ inputSchema: GroupsInputSchema,
115
+ annotations: { title: "Configure Resource Planner Groups" }
116
+ },
117
+ [TOOL_RP_CONFIGURE_COLUMNS]: {
118
+ description: `Configure the resource planner's column definitions (attributesConfiguration and defaultColumnsConfiguration).
119
+
120
+ These are the two custom constraint attributes that control which columns appear in the resource planner.
121
+ At least one of attributesConfiguration or defaultColumnsConfiguration must be provided.
122
+
123
+ Each column entry requires all 4 fields: feature (attribute name), header (display name), builtin (true/false), visible (true/false).
124
+ Full replacement — the provided array completely replaces the current configuration.
125
+
126
+ Use cplace_resource_planner_get_configuration first to see current columns, then modify and send back the complete desired state.`,
127
+ inputSchema: ColumnsInputSchema,
128
+ annotations: { title: "Configure Resource Planner Columns" }
129
+ },
130
+ [TOOL_RP_CONFIGURE_DISPLAY]: {
131
+ description: `Configure the resource planner's display and visual settings.
132
+
133
+ Merge-based partial update — only provided settings are changed, omitted settings retain their current values.
134
+ Settings include:
135
+ - Time grid: interval, allowedIntervals, calculationSelection, checkboxWeekend
136
+ - Utilization colors: boundaryLow, boundaryHigh, colorLow, colorMedium, colorHigh
137
+ - Tree structure: treeStructure (hierarchy attributes), collapseLevel, searchRootNode, rootNodeSelection`,
138
+ inputSchema: DisplayInputSchema,
139
+ annotations: { title: "Configure Resource Planner Display" }
140
+ },
141
+ };
142
+ function extractResourcePlannerConfiguration(widget) {
143
+ const config = {};
144
+ const getShortName = (name) => {
145
+ return name.startsWith(RP_PREFIX) ? name.slice(RP_PREFIX.length) : name;
146
+ };
147
+ if (widget.configuration && typeof widget.configuration === 'object' && !Array.isArray(widget.configuration)) {
148
+ for (const [key, value] of Object.entries(widget.configuration)) {
149
+ config[getShortName(key)] = value;
150
+ }
151
+ }
152
+ else if (Array.isArray(widget.configuration)) {
153
+ for (const attr of widget.configuration) {
154
+ if (attr.name) {
155
+ config[getShortName(attr.name)] = attr.value;
156
+ }
157
+ }
158
+ }
159
+ return config;
160
+ }
161
+ function parseColumnConfig(value) {
162
+ if (!value)
163
+ return null;
164
+ try {
165
+ const parsed = typeof value === 'string' ? JSON.parse(value) : value;
166
+ return parsed?.columns || null;
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ }
172
+ function groupConfiguration(config) {
173
+ return {
174
+ dataSource: {
175
+ searchNode: config.searchNode || null,
176
+ sortColumnNode: config.sortColumnNode || null,
177
+ sortOrderNode: config.sortOrderNode || null,
178
+ nodeSelection: config.nodeSelection || null,
179
+ },
180
+ dateCalculation: {
181
+ mode: config.dateCalculation || null,
182
+ start: config.start || null,
183
+ end: config.end || null,
184
+ startValueDynamic: config.startValueDynamic ?? null,
185
+ startUnitDynamic: config.startUnitDynamic || null,
186
+ endValueDynamic: config.endValueDynamic ?? null,
187
+ endUnitDynamic: config.endUnitDynamic || null,
188
+ startDateAttribute: config.startDateAttribute || null,
189
+ endDateAttribute: config.endDateAttribute || null,
190
+ },
191
+ firstGroup: {
192
+ enabled: config.checkboxFirstGroup === true,
193
+ search: config.searchFirstGroup || null,
194
+ sortColumn: config.sortColumnFirstGroup || null,
195
+ sortOrder: config.sortOrderFirstGroup || null,
196
+ selection: config.firstGroupSelection || null,
197
+ name: config.firstGroupName || null,
198
+ },
199
+ secondGroup: {
200
+ enabled: config.checkboxSecondGroup === true,
201
+ search: config.searchSecondGroup || null,
202
+ sortColumn: config.sortColumnSecondGroup || null,
203
+ sortOrder: config.sortOrderSecondGroup || null,
204
+ selection: config.secondGroupSelection || null,
205
+ name: config.secondGroupName || null,
206
+ },
207
+ columns: {
208
+ attributesConfiguration: parseColumnConfig(config.attributesConfiguration),
209
+ defaultColumnsConfiguration: parseColumnConfig(config.defaultColumnsConfiguration),
210
+ },
211
+ display: {
212
+ interval: config.interval || null,
213
+ allowedIntervals: config.allowedIntervals || null,
214
+ calculationSelection: config.calculationSelection || null,
215
+ checkboxWeekend: config.checkboxWeekend ?? null,
216
+ boundaryLow: config.boundaryLow ?? null,
217
+ boundaryHigh: config.boundaryHigh ?? null,
218
+ colorLow: config.colorLow || null,
219
+ colorMedium: config.colorMedium || null,
220
+ colorHigh: config.colorHigh || null,
221
+ treeStructure: config.treeStructure || null,
222
+ collapseLevel: config.collapseLevel ?? null,
223
+ searchRootNode: config.searchRootNode || null,
224
+ rootNodeSelection: config.rootNodeSelection || null,
225
+ },
226
+ actions: config.actionSearch ? {
227
+ search: config.actionSearch,
228
+ sortColumn: config.sortColumnAction || null,
229
+ sortOrder: config.sortOrderAction || null,
230
+ selection: config.actionSelection || null,
231
+ } : null,
232
+ charts: config.chartSearch ? {
233
+ search: config.chartSearch,
234
+ sortColumn: config.sortColumnChart || null,
235
+ sortOrder: config.sortOrderChart || null,
236
+ selection: config.chartSelection || null,
237
+ } : null,
238
+ };
239
+ }
240
+ export function registerResourcePlannerTools(server, client) {
241
+ server.registerTool(TOOL_RP_GET_CONFIGURATION, RP_TOOL_DEFINITIONS[TOOL_RP_GET_CONFIGURATION], async ({ context, widgetId }) => {
242
+ debugLogWithTag('RESOURCE_PLANNER', `Getting configuration for widget ${widgetId}`);
243
+ try {
244
+ const endpoint = determineApiEndpoint(context);
245
+ const params = buildRequestParams(context);
246
+ const layoutResult = await client.makeApiRequest(endpoint, 'GET', params);
247
+ const widget = findWidgetById(layoutResult.rows, widgetId);
248
+ if (!widget) {
249
+ return {
250
+ content: [{ type: "text", text: `Resource planner widget with ID '${widgetId}' not found in layout` }],
251
+ isError: true
252
+ };
253
+ }
254
+ if (widget.widgetType !== RP_WIDGET_TYPE) {
255
+ return {
256
+ content: [{ type: "text", text: `Widget '${widgetId}' is not a resource planner widget (found: ${widget.widgetType})` }],
257
+ isError: true
258
+ };
259
+ }
260
+ const rawConfig = extractResourcePlannerConfiguration(widget);
261
+ const grouped = groupConfiguration(rawConfig);
262
+ const isUnconfigured = !rawConfig.searchNode && !rawConfig.dateCalculation;
263
+ return {
264
+ content: [{ type: "text", text: JSON.stringify({
265
+ context,
266
+ widgetId,
267
+ configuration: {
268
+ status: isUnconfigured ? "unconfigured" : "configured",
269
+ ...grouped
270
+ }
271
+ }, null, 2) }]
272
+ };
273
+ }
274
+ catch (error) {
275
+ debugLogWithTag('RESOURCE_PLANNER', `Error getting configuration: ${error instanceof Error ? error.message : String(error)}`);
276
+ return {
277
+ content: [{ type: "text", text: `Failed to get resource planner configuration: ${error instanceof Error ? error.message : String(error)}` }],
278
+ isError: true
279
+ };
280
+ }
281
+ });
282
+ server.registerTool(TOOL_RP_CONFIGURE_DATA_SOURCE, RP_TOOL_DEFINITIONS[TOOL_RP_CONFIGURE_DATA_SOURCE], async ({ context, widgetId, searchNode, sortColumnNode, sortOrderNode, nodeSelection, dateCalculation, start, end, startValueDynamic, startUnitDynamic, endValueDynamic, endUnitDynamic, startDateAttribute, endDateAttribute }) => {
283
+ debugLogWithTag('RESOURCE_PLANNER', `Configuring data source for widget ${widgetId}, mode=${dateCalculation}`);
284
+ try {
285
+ if (dateCalculation === 'STATIC') {
286
+ if (!start || !end) {
287
+ return {
288
+ content: [{ type: "text", text: "Error: dateCalculation=STATIC requires 'start' and 'end' parameters." }],
289
+ isError: true
290
+ };
291
+ }
292
+ }
293
+ else if (dateCalculation === 'DYNAMIC') {
294
+ if (startValueDynamic === undefined || !startUnitDynamic || endValueDynamic === undefined || !endUnitDynamic) {
295
+ return {
296
+ content: [{ type: "text", text: "Error: dateCalculation=DYNAMIC requires 'startValueDynamic', 'startUnitDynamic', 'endValueDynamic', and 'endUnitDynamic' parameters." }],
297
+ isError: true
298
+ };
299
+ }
300
+ }
301
+ else if (dateCalculation === 'ATTRIBUTE') {
302
+ if (!startDateAttribute || !endDateAttribute) {
303
+ return {
304
+ content: [{ type: "text", text: "Error: dateCalculation=ATTRIBUTE requires 'startDateAttribute' and 'endDateAttribute' parameters." }],
305
+ isError: true
306
+ };
307
+ }
308
+ }
309
+ const configuration = {
310
+ [`${RP_PREFIX}searchNode`]: searchNode,
311
+ [`${RP_PREFIX}dateCalculation`]: dateCalculation,
312
+ };
313
+ if (sortColumnNode !== undefined)
314
+ configuration[`${RP_PREFIX}sortColumnNode`] = sortColumnNode;
315
+ if (sortOrderNode !== undefined)
316
+ configuration[`${RP_PREFIX}sortOrderNode`] = sortOrderNode;
317
+ if (nodeSelection !== undefined)
318
+ configuration[`${RP_PREFIX}nodeSelection`] = nodeSelection;
319
+ if (dateCalculation === 'STATIC') {
320
+ configuration[`${RP_PREFIX}start`] = start;
321
+ configuration[`${RP_PREFIX}end`] = end;
322
+ }
323
+ else if (dateCalculation === 'DYNAMIC') {
324
+ configuration[`${RP_PREFIX}startValueDynamic`] = startValueDynamic;
325
+ configuration[`${RP_PREFIX}startUnitDynamic`] = startUnitDynamic;
326
+ configuration[`${RP_PREFIX}endValueDynamic`] = endValueDynamic;
327
+ configuration[`${RP_PREFIX}endUnitDynamic`] = endUnitDynamic;
328
+ }
329
+ else if (dateCalculation === 'ATTRIBUTE') {
330
+ configuration[`${RP_PREFIX}startDateAttribute`] = startDateAttribute;
331
+ configuration[`${RP_PREFIX}endDateAttribute`] = endDateAttribute;
332
+ }
333
+ const requestBody = buildUpdateRequestBody(context, widgetId, configuration);
334
+ const endpoint = determineApiEndpoint(context);
335
+ await client.makeApiRequest(endpoint, 'PATCH', undefined, requestBody);
336
+ return {
337
+ content: [{ type: "text", text: JSON.stringify({
338
+ operation: "CONFIGURE_DATA_SOURCE",
339
+ status: "SUCCESS",
340
+ context,
341
+ widgetId,
342
+ dateCalculationMode: dateCalculation,
343
+ message: `Resource planner data source configured with dateCalculation=${dateCalculation}`
344
+ }, null, 2) }]
345
+ };
346
+ }
347
+ catch (error) {
348
+ debugLogWithTag('RESOURCE_PLANNER', `Error configuring data source: ${error instanceof Error ? error.message : String(error)}`);
349
+ return {
350
+ content: [{ type: "text", text: `Failed to configure data source: ${error instanceof Error ? error.message : String(error)}` }],
351
+ isError: true
352
+ };
353
+ }
354
+ });
355
+ server.registerTool(TOOL_RP_CONFIGURE_GROUPS, RP_TOOL_DEFINITIONS[TOOL_RP_CONFIGURE_GROUPS], async ({ context, widgetId, firstGroup, secondGroup }) => {
356
+ debugLogWithTag('RESOURCE_PLANNER', `Configuring groups for widget ${widgetId}`);
357
+ try {
358
+ if (!firstGroup && !secondGroup) {
359
+ return {
360
+ content: [{ type: "text", text: "Error: At least one of 'firstGroup' or 'secondGroup' must be provided." }],
361
+ isError: true
362
+ };
363
+ }
364
+ if (firstGroup?.enabled && !firstGroup.search) {
365
+ return {
366
+ content: [{ type: "text", text: "Error: firstGroup.search is required when firstGroup.enabled=true." }],
367
+ isError: true
368
+ };
369
+ }
370
+ if (secondGroup?.enabled && !secondGroup.search) {
371
+ return {
372
+ content: [{ type: "text", text: "Error: secondGroup.search is required when secondGroup.enabled=true." }],
373
+ isError: true
374
+ };
375
+ }
376
+ const configuration = {};
377
+ if (firstGroup) {
378
+ configuration[`${RP_PREFIX}checkboxFirstGroup`] = firstGroup.enabled;
379
+ if (firstGroup.enabled) {
380
+ configuration[`${RP_PREFIX}searchFirstGroup`] = firstGroup.search;
381
+ if (firstGroup.sortColumn !== undefined)
382
+ configuration[`${RP_PREFIX}sortColumnFirstGroup`] = firstGroup.sortColumn;
383
+ if (firstGroup.sortOrder !== undefined)
384
+ configuration[`${RP_PREFIX}sortOrderFirstGroup`] = firstGroup.sortOrder;
385
+ if (firstGroup.selection !== undefined)
386
+ configuration[`${RP_PREFIX}firstGroupSelection`] = firstGroup.selection;
387
+ if (firstGroup.name !== undefined)
388
+ configuration[`${RP_PREFIX}firstGroupName`] = firstGroup.name;
389
+ }
390
+ else {
391
+ configuration[`${RP_PREFIX}searchFirstGroup`] = null;
392
+ configuration[`${RP_PREFIX}sortColumnFirstGroup`] = null;
393
+ configuration[`${RP_PREFIX}sortOrderFirstGroup`] = null;
394
+ configuration[`${RP_PREFIX}firstGroupSelection`] = null;
395
+ configuration[`${RP_PREFIX}firstGroupName`] = null;
396
+ }
397
+ }
398
+ if (secondGroup) {
399
+ configuration[`${RP_PREFIX}checkboxSecondGroup`] = secondGroup.enabled;
400
+ if (secondGroup.enabled) {
401
+ configuration[`${RP_PREFIX}searchSecondGroup`] = secondGroup.search;
402
+ if (secondGroup.sortColumn !== undefined)
403
+ configuration[`${RP_PREFIX}sortColumnSecondGroup`] = secondGroup.sortColumn;
404
+ if (secondGroup.sortOrder !== undefined)
405
+ configuration[`${RP_PREFIX}sortOrderSecondGroup`] = secondGroup.sortOrder;
406
+ if (secondGroup.selection !== undefined)
407
+ configuration[`${RP_PREFIX}secondGroupSelection`] = secondGroup.selection;
408
+ if (secondGroup.name !== undefined)
409
+ configuration[`${RP_PREFIX}secondGroupName`] = secondGroup.name;
410
+ }
411
+ else {
412
+ configuration[`${RP_PREFIX}searchSecondGroup`] = null;
413
+ configuration[`${RP_PREFIX}sortColumnSecondGroup`] = null;
414
+ configuration[`${RP_PREFIX}sortOrderSecondGroup`] = null;
415
+ configuration[`${RP_PREFIX}secondGroupSelection`] = null;
416
+ configuration[`${RP_PREFIX}secondGroupName`] = null;
417
+ }
418
+ }
419
+ const requestBody = buildUpdateRequestBody(context, widgetId, configuration);
420
+ const endpoint = determineApiEndpoint(context);
421
+ await client.makeApiRequest(endpoint, 'PATCH', undefined, requestBody);
422
+ return {
423
+ content: [{ type: "text", text: JSON.stringify({
424
+ operation: "CONFIGURE_GROUPS",
425
+ status: "SUCCESS",
426
+ context,
427
+ widgetId,
428
+ firstGroupEnabled: firstGroup?.enabled ?? "unchanged",
429
+ secondGroupEnabled: secondGroup?.enabled ?? "unchanged",
430
+ message: `Resource planner groups configured`
431
+ }, null, 2) }]
432
+ };
433
+ }
434
+ catch (error) {
435
+ debugLogWithTag('RESOURCE_PLANNER', `Error configuring groups: ${error instanceof Error ? error.message : String(error)}`);
436
+ return {
437
+ content: [{ type: "text", text: `Failed to configure groups: ${error instanceof Error ? error.message : String(error)}` }],
438
+ isError: true
439
+ };
440
+ }
441
+ });
442
+ server.registerTool(TOOL_RP_CONFIGURE_COLUMNS, RP_TOOL_DEFINITIONS[TOOL_RP_CONFIGURE_COLUMNS], async ({ context, widgetId, attributesConfiguration, defaultColumnsConfiguration }) => {
443
+ debugLogWithTag('RESOURCE_PLANNER', `Configuring columns for widget ${widgetId}`);
444
+ try {
445
+ if (!attributesConfiguration && !defaultColumnsConfiguration) {
446
+ return {
447
+ content: [{ type: "text", text: "Error: At least one of 'attributesConfiguration' or 'defaultColumnsConfiguration' must be provided." }],
448
+ isError: true
449
+ };
450
+ }
451
+ const configuration = {};
452
+ if (attributesConfiguration) {
453
+ configuration[`${RP_PREFIX}attributesConfiguration`] = JSON.stringify({ columns: attributesConfiguration });
454
+ }
455
+ if (defaultColumnsConfiguration) {
456
+ configuration[`${RP_PREFIX}defaultColumnsConfiguration`] = JSON.stringify({ columns: defaultColumnsConfiguration });
457
+ }
458
+ const requestBody = buildUpdateRequestBody(context, widgetId, configuration);
459
+ const endpoint = determineApiEndpoint(context);
460
+ await client.makeApiRequest(endpoint, 'PATCH', undefined, requestBody);
461
+ return {
462
+ content: [{ type: "text", text: JSON.stringify({
463
+ operation: "CONFIGURE_COLUMNS",
464
+ status: "SUCCESS",
465
+ context,
466
+ widgetId,
467
+ attributesConfigurationCount: attributesConfiguration?.length ?? "unchanged",
468
+ defaultColumnsConfigurationCount: defaultColumnsConfiguration?.length ?? "unchanged",
469
+ message: `Resource planner columns configured`
470
+ }, null, 2) }]
471
+ };
472
+ }
473
+ catch (error) {
474
+ debugLogWithTag('RESOURCE_PLANNER', `Error configuring columns: ${error instanceof Error ? error.message : String(error)}`);
475
+ return {
476
+ content: [{ type: "text", text: `Failed to configure columns: ${error instanceof Error ? error.message : String(error)}` }],
477
+ isError: true
478
+ };
479
+ }
480
+ });
481
+ server.registerTool(TOOL_RP_CONFIGURE_DISPLAY, RP_TOOL_DEFINITIONS[TOOL_RP_CONFIGURE_DISPLAY], async ({ context, widgetId, ...displaySettings }) => {
482
+ debugLogWithTag('RESOURCE_PLANNER', `Configuring display for widget ${widgetId}`);
483
+ try {
484
+ const configuration = {};
485
+ const settingsMap = {
486
+ interval: 'interval',
487
+ allowedIntervals: 'allowedIntervals',
488
+ calculationSelection: 'calculationSelection',
489
+ checkboxWeekend: 'checkboxWeekend',
490
+ boundaryLow: 'boundaryLow',
491
+ boundaryHigh: 'boundaryHigh',
492
+ colorLow: 'colorLow',
493
+ colorMedium: 'colorMedium',
494
+ colorHigh: 'colorHigh',
495
+ treeStructure: 'treeStructure',
496
+ collapseLevel: 'collapseLevel',
497
+ searchRootNode: 'searchRootNode',
498
+ rootNodeSelection: 'rootNodeSelection',
499
+ };
500
+ const appliedSettings = [];
501
+ const settings = displaySettings;
502
+ for (const [paramName, attrName] of Object.entries(settingsMap)) {
503
+ if (settings[paramName] !== undefined) {
504
+ configuration[`${RP_PREFIX}${attrName}`] = settings[paramName];
505
+ appliedSettings.push(paramName);
506
+ }
507
+ }
508
+ if (appliedSettings.length === 0) {
509
+ return {
510
+ content: [{ type: "text", text: "Error: At least one display setting must be provided." }],
511
+ isError: true
512
+ };
513
+ }
514
+ const requestBody = buildUpdateRequestBody(context, widgetId, configuration);
515
+ const endpoint = determineApiEndpoint(context);
516
+ await client.makeApiRequest(endpoint, 'PATCH', undefined, requestBody);
517
+ return {
518
+ content: [{ type: "text", text: JSON.stringify({
519
+ operation: "CONFIGURE_DISPLAY",
520
+ status: "SUCCESS",
521
+ context,
522
+ widgetId,
523
+ appliedSettings,
524
+ message: `Resource planner display configured (${appliedSettings.length} settings updated)`
525
+ }, null, 2) }]
526
+ };
527
+ }
528
+ catch (error) {
529
+ debugLogWithTag('RESOURCE_PLANNER', `Error configuring display: ${error instanceof Error ? error.message : String(error)}`);
530
+ return {
531
+ content: [{ type: "text", text: `Failed to configure display: ${error instanceof Error ? error.message : String(error)}` }],
532
+ isError: true
533
+ };
534
+ }
535
+ });
536
+ debugLogWithTag('RESOURCE_PLANNER', 'Resource planner widget tools registered');
537
+ }
538
+ export { RP_TOOL_DEFINITIONS };
539
+ //# sourceMappingURL=resource-planner-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-planner-widget.js","sourceRoot":"","sources":["../../src/tools/resource-planner-widget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ import { LayoutContextSchema } from './layout.js';
3
+ export declare function determineApiEndpoint(context: z.infer<typeof LayoutContextSchema>): string;
4
+ export declare function buildRequestParams(context: z.infer<typeof LayoutContextSchema>): any;
5
+ export declare function buildUpdateRequestBody(context: z.infer<typeof LayoutContextSchema>, widgetId: string, newConfiguration: Record<string, any>): any;
6
+ export declare function findWidgetById(rows: any[], widgetId: string): any | null;
7
+ //# sourceMappingURL=widget-tool-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-tool-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/widget-tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKlD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG,MAAM,CAEzF;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG,GAAG,CAUpF;AAKD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,EAC5C,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACpC,GAAG,CASL;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAexE"}
@@ -0,0 +1,43 @@
1
+ export function determineApiEndpoint(context) {
2
+ return context.type === "page" ? "json/pageLayout" : "json/typeLayout";
3
+ }
4
+ export function buildRequestParams(context) {
5
+ if (context.type === "page") {
6
+ return { pageUID: context.pageUID };
7
+ }
8
+ else {
9
+ return {
10
+ workspaceId: context.workspaceId,
11
+ typeInternalName: context.typeInternalName,
12
+ ...(context.alternativeLayoutName && { alternativeLayoutName: context.alternativeLayoutName })
13
+ };
14
+ }
15
+ }
16
+ export function buildUpdateRequestBody(context, widgetId, newConfiguration) {
17
+ return {
18
+ ...buildRequestParams(context),
19
+ operation: {
20
+ type: "UPDATE",
21
+ widgetId,
22
+ newConfiguration
23
+ }
24
+ };
25
+ }
26
+ export function findWidgetById(rows, widgetId) {
27
+ for (const row of rows || []) {
28
+ for (const column of row.columns || []) {
29
+ for (const widget of column.widgets || []) {
30
+ if (widget.id === widgetId) {
31
+ return widget;
32
+ }
33
+ if (widget.widgetsLayout?.rows) {
34
+ const nested = findWidgetById(widget.widgetsLayout.rows, widgetId);
35
+ if (nested)
36
+ return nested;
37
+ }
38
+ }
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ //# sourceMappingURL=widget-tool-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-tool-helpers.js","sourceRoot":"","sources":["../../src/tools/widget-tool-helpers.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB,CAAC,OAA4C;IAC/E,OAAO,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACzE,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAAC,OAA4C;IAC7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,GAAG,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC;SAC/F,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,sBAAsB,CACpC,OAA4C,EAC5C,QAAgB,EAChB,gBAAqC;IAErC,OAAO;QACL,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC9B,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,QAAQ;YACR,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,IAAW,EAAE,QAAgB;IAC1D,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC1C,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACnE,IAAI,MAAM;wBAAE,OAAO,MAAM,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}