@codegame.dev/careerflow-mcp 1.1.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 +398 -0
- package/dist/client.js +110 -0
- package/dist/client.js.map +1 -0
- package/dist/config.js +37 -0
- package/dist/config.js.map +1 -0
- package/dist/helpers.js +192 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.js +194 -0
- package/dist/index.js.map +1 -0
- package/dist/setup.js +296 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/admin.js +232 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/benefit-funds.js +243 -0
- package/dist/tools/benefit-funds.js.map +1 -0
- package/dist/tools/chat-extra.js +172 -0
- package/dist/tools/chat-extra.js.map +1 -0
- package/dist/tools/chat.js +125 -0
- package/dist/tools/chat.js.map +1 -0
- package/dist/tools/cms.js +145 -0
- package/dist/tools/cms.js.map +1 -0
- package/dist/tools/crm-admin.js +269 -0
- package/dist/tools/crm-admin.js.map +1 -0
- package/dist/tools/crm.js +632 -0
- package/dist/tools/crm.js.map +1 -0
- package/dist/tools/dev-tickets.js +94 -0
- package/dist/tools/dev-tickets.js.map +1 -0
- package/dist/tools/forms.js +105 -0
- package/dist/tools/forms.js.map +1 -0
- package/dist/tools/hr.js +517 -0
- package/dist/tools/hr.js.map +1 -0
- package/dist/tools/kanban-extra.js +403 -0
- package/dist/tools/kanban-extra.js.map +1 -0
- package/dist/tools/misc.js +159 -0
- package/dist/tools/misc.js.map +1 -0
- package/dist/tools/projects.js +138 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/tasks.js +342 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/time.js +129 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/workplace.js +110 -0
- package/dist/tools/workplace.js.map +1 -0
- package/dist/tools/workspace.js +199 -0
- package/dist/tools/workspace.js.map +1 -0
- package/package.json +61 -0
package/dist/tools/hr.js
ADDED
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { boolParam, companyIdSchema, currentUserId, extractList, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Disciplinary notes are flat rows with no nested sub-objects, but repeat a
|
|
5
|
+
* name/staff-number/last_activity block twice per row (once for the issuer,
|
|
6
|
+
* once for the subject user) alongside ~15 penalty-escalation bookkeeping
|
|
7
|
+
* columns an assistant doesn't need to reason about.
|
|
8
|
+
*/
|
|
9
|
+
function summariseDisciplinaryNote(n) {
|
|
10
|
+
return {
|
|
11
|
+
id: n.id,
|
|
12
|
+
type: n.type,
|
|
13
|
+
status: n.status,
|
|
14
|
+
content: n.content,
|
|
15
|
+
penalty_type: n.penalty_type ?? undefined,
|
|
16
|
+
penalty_point: n.penalty_point ?? undefined,
|
|
17
|
+
penalty_message: n.penalty_message || undefined,
|
|
18
|
+
is_applied: Boolean(n.is_applied),
|
|
19
|
+
is_done: Boolean(n.is_done),
|
|
20
|
+
user_id: n.user_id,
|
|
21
|
+
user_name: [n.user_firstname, n.user_lastname].filter(Boolean).join(" ") || undefined,
|
|
22
|
+
user_staff_number: n.user_staff_number_with_prefix || n.user_staff_number || undefined,
|
|
23
|
+
issuer_id: n.issuer_id ?? undefined,
|
|
24
|
+
issuer_name: [n.issuer_firstname, n.issuer_lastname].filter(Boolean).join(" ") || undefined,
|
|
25
|
+
accepted_at: n.accepted_at || undefined,
|
|
26
|
+
created: n.created,
|
|
27
|
+
updated: n.updated
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Administrative notes carry a creator contact block on the note itself and
|
|
32
|
+
* another sender/recipient contact block (name/staff-number/last_activity +
|
|
33
|
+
* 2 image sizes each) per referral, plus a referral-scoped attachments array.
|
|
34
|
+
* A list result only needs enough to identify the note and who it's between —
|
|
35
|
+
* get_administrative_note fetches the full referral/attachment detail.
|
|
36
|
+
*/
|
|
37
|
+
function summariseAdministrativeNote(n) {
|
|
38
|
+
return {
|
|
39
|
+
id: n.id,
|
|
40
|
+
subject: n.subject,
|
|
41
|
+
priority: n.priority,
|
|
42
|
+
status: n.status,
|
|
43
|
+
is_archived: Boolean(n.is_archived),
|
|
44
|
+
creator_id: n.creator_id,
|
|
45
|
+
creator_name: [n.creator_firstname, n.creator_lastname].filter(Boolean).join(" ") || undefined,
|
|
46
|
+
recipients: Array.isArray(n.referrals)
|
|
47
|
+
? n.referrals.map((r) => ({
|
|
48
|
+
recipient_id: r.recipient_id,
|
|
49
|
+
recipient_name: [r.recipient_firstname, r.recipient_lastname].filter(Boolean).join(" ") || undefined
|
|
50
|
+
}))
|
|
51
|
+
: undefined,
|
|
52
|
+
released_at: n.released_at || undefined,
|
|
53
|
+
created: n.created,
|
|
54
|
+
updated: n.updated
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Trims a cafeteria meal-schedule row to what a caller needs to reserve or report on it. */
|
|
58
|
+
function summariseFoodSchedule(s) {
|
|
59
|
+
return {
|
|
60
|
+
id: s.id,
|
|
61
|
+
food_id: s.food_id,
|
|
62
|
+
food_date: s.food_date,
|
|
63
|
+
meal_type: s.meal_type,
|
|
64
|
+
max_capacity: s.max_capacity ?? undefined,
|
|
65
|
+
reservation_count: s.reservation_count ?? undefined,
|
|
66
|
+
price: s.price ?? undefined,
|
|
67
|
+
is_active: Boolean(s.is_active),
|
|
68
|
+
my_reservation: s.my_reservation ?? undefined
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* HR and people-ops tools: payroll and performance-review reading, disciplinary
|
|
73
|
+
* and administrative notes, careers/recruiting, onboarding, cafeteria
|
|
74
|
+
* reservations, and mood check-ins.
|
|
75
|
+
*
|
|
76
|
+
* Payroll and performance-review rows are created only from an HR-uploaded
|
|
77
|
+
* spreadsheet on the web app, and carry penalty/escalation logic that is easy
|
|
78
|
+
* to get wrong from the outside — this module intentionally reads them and
|
|
79
|
+
* lets a user respond to their own (accept/reject), but does not expose
|
|
80
|
+
* bulk-creation, column configuration, or penalty apply/undo.
|
|
81
|
+
*/
|
|
82
|
+
export function registerHrTools(server, client) {
|
|
83
|
+
// -------------------------------------------------------------- payroll
|
|
84
|
+
server.registerTool("list_my_payrolls", {
|
|
85
|
+
title: "List my payroll and reward slips",
|
|
86
|
+
description: "List the authenticated user's payroll (salary) and reward slips.",
|
|
87
|
+
inputSchema: {
|
|
88
|
+
company_id: companyIdSchema,
|
|
89
|
+
pay_date: z.string().optional().describe("YYYY-MM, filter to one month."),
|
|
90
|
+
status: z.enum(["pending", "accepted", "rejected"]).optional(),
|
|
91
|
+
limit: z.number().int().min(1).max(50).optional().default(10),
|
|
92
|
+
page: z.number().int().min(1).optional().default(1)
|
|
93
|
+
}
|
|
94
|
+
}, safeHandler(async (args) => {
|
|
95
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
96
|
+
const myId = await currentUserId(client);
|
|
97
|
+
const response = await client.get("payrolls/search", {
|
|
98
|
+
company_id: companyId,
|
|
99
|
+
user_id: myId,
|
|
100
|
+
pay_date: args.pay_date,
|
|
101
|
+
status: args.status,
|
|
102
|
+
limit: args.limit,
|
|
103
|
+
page: args.page
|
|
104
|
+
});
|
|
105
|
+
const { items, total } = extractList(response.data, "payrolls");
|
|
106
|
+
return textResult({
|
|
107
|
+
count: total ?? items.length,
|
|
108
|
+
payrolls: items.map((p) => ({
|
|
109
|
+
id: p.id,
|
|
110
|
+
pay_date: p.pay_date,
|
|
111
|
+
status: p.status,
|
|
112
|
+
group_type: p.group_type,
|
|
113
|
+
content: p.content,
|
|
114
|
+
reject_reason: p.reject_reason || undefined,
|
|
115
|
+
admin_answer: p.admin_answer || undefined
|
|
116
|
+
}))
|
|
117
|
+
});
|
|
118
|
+
}));
|
|
119
|
+
server.registerTool("respond_to_payroll", {
|
|
120
|
+
title: "Accept or reject a payroll slip",
|
|
121
|
+
description: "Accept or reject one of your own pending/rejected payroll or reward slips.",
|
|
122
|
+
inputSchema: {
|
|
123
|
+
company_id: companyIdSchema,
|
|
124
|
+
payroll_id: z.number().int(),
|
|
125
|
+
status: z.enum(["accepted", "rejected"]),
|
|
126
|
+
reject_reason: z.string().optional(),
|
|
127
|
+
reject_options: z.array(z.string()).optional()
|
|
128
|
+
}
|
|
129
|
+
}, safeHandler(async (args) => {
|
|
130
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
131
|
+
const response = await client.post("payrolls/update", {
|
|
132
|
+
company_id: companyId,
|
|
133
|
+
id: args.payroll_id,
|
|
134
|
+
status: args.status,
|
|
135
|
+
reject_reason: args.reject_reason,
|
|
136
|
+
reject_options: args.reject_options ? JSON.stringify(args.reject_options) : undefined
|
|
137
|
+
});
|
|
138
|
+
return textResult({ payroll_id: args.payroll_id, status: args.status, payroll: response.data });
|
|
139
|
+
}));
|
|
140
|
+
server.registerTool("list_my_performance_reviews", {
|
|
141
|
+
title: "List my performance reviews",
|
|
142
|
+
description: "List the authenticated user's performance review slips.",
|
|
143
|
+
inputSchema: {
|
|
144
|
+
company_id: companyIdSchema,
|
|
145
|
+
sent_date: z.string().optional().describe("YYYY-MM, filter to one month."),
|
|
146
|
+
status: z.enum(["pending", "accepted", "rejected"]).optional(),
|
|
147
|
+
limit: z.number().int().min(1).max(50).optional().default(10),
|
|
148
|
+
page: z.number().int().min(1).optional().default(1)
|
|
149
|
+
}
|
|
150
|
+
}, safeHandler(async (args) => {
|
|
151
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
152
|
+
const myId = await currentUserId(client);
|
|
153
|
+
const response = await client.get("performance-reviews/search", {
|
|
154
|
+
company_id: companyId,
|
|
155
|
+
user_id: myId,
|
|
156
|
+
sent_date: args.sent_date,
|
|
157
|
+
status: args.status,
|
|
158
|
+
limit: args.limit,
|
|
159
|
+
page: args.page
|
|
160
|
+
});
|
|
161
|
+
const { items, total } = extractList(response.data, "performance_reviews");
|
|
162
|
+
return textResult({
|
|
163
|
+
count: total ?? items.length,
|
|
164
|
+
performance_reviews: items.map((p) => ({
|
|
165
|
+
id: p.id,
|
|
166
|
+
sent_date: p.sent_date,
|
|
167
|
+
status: p.status,
|
|
168
|
+
content: p.content,
|
|
169
|
+
reject_reason: p.reject_reason || undefined,
|
|
170
|
+
admin_answer: p.admin_answer || undefined
|
|
171
|
+
}))
|
|
172
|
+
});
|
|
173
|
+
}));
|
|
174
|
+
server.registerTool("respond_to_performance_review", {
|
|
175
|
+
title: "Accept or reject a performance review",
|
|
176
|
+
description: "Accept or reject one of your own pending/rejected performance reviews.",
|
|
177
|
+
inputSchema: {
|
|
178
|
+
company_id: companyIdSchema,
|
|
179
|
+
review_id: z.number().int(),
|
|
180
|
+
status: z.enum(["accepted", "rejected"]),
|
|
181
|
+
reject_reason: z.string().optional(),
|
|
182
|
+
reject_options: z.array(z.string()).optional()
|
|
183
|
+
}
|
|
184
|
+
}, safeHandler(async (args) => {
|
|
185
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
186
|
+
const response = await client.post("performance-reviews/update", {
|
|
187
|
+
company_id: companyId,
|
|
188
|
+
id: args.review_id,
|
|
189
|
+
status: args.status,
|
|
190
|
+
reject_reason: args.reject_reason,
|
|
191
|
+
reject_options: args.reject_options ? JSON.stringify(args.reject_options) : undefined
|
|
192
|
+
});
|
|
193
|
+
return textResult({ review_id: args.review_id, status: args.status, review: response.data });
|
|
194
|
+
}));
|
|
195
|
+
// ------------------------------------------------------- disciplinary notes
|
|
196
|
+
server.registerTool("list_disciplinary_notes", {
|
|
197
|
+
title: "List disciplinary notes",
|
|
198
|
+
description: "List disciplinary notes. A regular user sees only their own visible notes; a supervisor " +
|
|
199
|
+
"with the right permission can see a company's notes by type.",
|
|
200
|
+
inputSchema: {
|
|
201
|
+
company_id: companyIdSchema,
|
|
202
|
+
user_id: z.number().int().optional(),
|
|
203
|
+
type: z.number().int().optional().describe("Penalty category id."),
|
|
204
|
+
status: z.enum(["pending", "accepted", "rejected"]).optional(),
|
|
205
|
+
limit: z.number().int().min(1).max(50).optional().default(10),
|
|
206
|
+
page: z.number().int().min(1).optional().default(1)
|
|
207
|
+
}
|
|
208
|
+
}, safeHandler(async (args) => {
|
|
209
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
210
|
+
const response = await client.get("disciplinary-notes/search", {
|
|
211
|
+
company_id: companyId,
|
|
212
|
+
user_id: args.user_id,
|
|
213
|
+
type: args.type,
|
|
214
|
+
status: args.status,
|
|
215
|
+
limit: args.limit,
|
|
216
|
+
page: args.page
|
|
217
|
+
});
|
|
218
|
+
const { items, total } = extractList(response.data, "disciplinary_notes");
|
|
219
|
+
return textResult({ count: total ?? items.length, notes: items.map(summariseDisciplinaryNote) });
|
|
220
|
+
}));
|
|
221
|
+
server.registerTool("estimate_disciplinary_penalty", {
|
|
222
|
+
title: "Preview a disciplinary note's penalty",
|
|
223
|
+
description: "Preview what penalty tier a new disciplinary note would land on for a user, without " +
|
|
224
|
+
"creating it. The tier (verbal warning, written warning, penalty points, disciplinary " +
|
|
225
|
+
"committee) escalates automatically based on the user's history — it is not something " +
|
|
226
|
+
"you choose directly.",
|
|
227
|
+
inputSchema: {
|
|
228
|
+
company_id: companyIdSchema,
|
|
229
|
+
user_id: z.number().int(),
|
|
230
|
+
type: z.number().int().describe("Top-level penalty category id."),
|
|
231
|
+
penalty_type: z.number().int().optional().describe("Specific penalty category id, if known.")
|
|
232
|
+
}
|
|
233
|
+
}, safeHandler(async (args) => {
|
|
234
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
235
|
+
const response = await client.post("disciplinary-notes/estimate-user-penalty", {
|
|
236
|
+
company_id: companyId,
|
|
237
|
+
user_id: args.user_id,
|
|
238
|
+
type: args.type,
|
|
239
|
+
penalty_type: args.penalty_type
|
|
240
|
+
});
|
|
241
|
+
return textResult(response.data);
|
|
242
|
+
}));
|
|
243
|
+
server.registerTool("create_disciplinary_note", {
|
|
244
|
+
title: "Create a disciplinary note",
|
|
245
|
+
description: "Record a disciplinary note against a user. The resulting penalty tier and approval status " +
|
|
246
|
+
"are computed automatically from the user's history — use estimate_disciplinary_penalty " +
|
|
247
|
+
"first to preview the outcome.",
|
|
248
|
+
inputSchema: {
|
|
249
|
+
company_id: companyIdSchema,
|
|
250
|
+
user_id: z.number().int(),
|
|
251
|
+
content: z.string().min(1),
|
|
252
|
+
type: z.number().int().describe("Top-level penalty category id."),
|
|
253
|
+
penalty_type: z.number().int().optional().describe("Specific penalty category id."),
|
|
254
|
+
is_visible_to_user: z.boolean().default(true)
|
|
255
|
+
}
|
|
256
|
+
}, safeHandler(async (args) => {
|
|
257
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
258
|
+
const response = await client.post("disciplinary-notes/create", {
|
|
259
|
+
company_id: companyId,
|
|
260
|
+
user_id: args.user_id,
|
|
261
|
+
content: args.content,
|
|
262
|
+
type: args.type,
|
|
263
|
+
penalty_type: args.penalty_type,
|
|
264
|
+
is_visible_to_user: boolParam(args.is_visible_to_user)
|
|
265
|
+
});
|
|
266
|
+
return textResult({ created: true, note: response.data });
|
|
267
|
+
}));
|
|
268
|
+
// ----------------------------------------------------- administrative notes
|
|
269
|
+
server.registerTool("list_administrative_notes", {
|
|
270
|
+
title: "List administrative notes (internal mail)",
|
|
271
|
+
description: "List internal memos/mail sent or received. Non-admins see only their own participation.",
|
|
272
|
+
inputSchema: {
|
|
273
|
+
company_id: companyIdSchema,
|
|
274
|
+
status: z.enum(["draft", "pending-approval", "released", "cancelled"]).optional(),
|
|
275
|
+
search: z.string().optional(),
|
|
276
|
+
limit: z.number().int().min(1).max(50).optional().default(10),
|
|
277
|
+
page: z.number().int().min(1).optional().default(1)
|
|
278
|
+
}
|
|
279
|
+
}, safeHandler(async (args) => {
|
|
280
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
281
|
+
const response = await client.get("administrative-notes/search", {
|
|
282
|
+
company_id: companyId,
|
|
283
|
+
status: args.status,
|
|
284
|
+
search: args.search,
|
|
285
|
+
limit: args.limit,
|
|
286
|
+
page: args.page
|
|
287
|
+
});
|
|
288
|
+
const { items, total } = extractList(response.data, "notes");
|
|
289
|
+
return textResult({ count: total ?? items.length, notes: items.map(summariseAdministrativeNote) });
|
|
290
|
+
}));
|
|
291
|
+
server.registerTool("get_administrative_note", {
|
|
292
|
+
title: "Get an administrative note",
|
|
293
|
+
description: "Fetch one internal memo/mail thread, with its referrals.",
|
|
294
|
+
inputSchema: { company_id: companyIdSchema, note_id: z.number().int() }
|
|
295
|
+
}, safeHandler(async (args) => {
|
|
296
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
297
|
+
const response = await client.get("administrative-notes/get", {
|
|
298
|
+
company_id: companyId,
|
|
299
|
+
note_id: args.note_id
|
|
300
|
+
});
|
|
301
|
+
return textResult(response.data);
|
|
302
|
+
}));
|
|
303
|
+
server.registerTool("create_administrative_note", {
|
|
304
|
+
title: "Create an administrative note (internal mail)",
|
|
305
|
+
description: "Send an internal memo to one or more colleagues. Each referral names a recipient, whether " +
|
|
306
|
+
"they're a to/cc/bcc target, and what's expected of them.",
|
|
307
|
+
inputSchema: {
|
|
308
|
+
company_id: companyIdSchema,
|
|
309
|
+
subject: z.string().min(1),
|
|
310
|
+
content: z.string().min(1),
|
|
311
|
+
status: z.enum(["draft", "released"]),
|
|
312
|
+
priority: z.enum(["low", "normal", "high", "urgent"]).optional().default("normal"),
|
|
313
|
+
referrals: z
|
|
314
|
+
.array(z.object({
|
|
315
|
+
recipient_id: z.number().int(),
|
|
316
|
+
type: z.enum(["to", "cc", "bcc"]),
|
|
317
|
+
action: z.enum(["action", "information", "signature", "follow-up", "review"]),
|
|
318
|
+
instructions: z.string().optional(),
|
|
319
|
+
deadline: z.string().optional()
|
|
320
|
+
}))
|
|
321
|
+
.min(1)
|
|
322
|
+
}
|
|
323
|
+
}, safeHandler(async (args) => {
|
|
324
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
325
|
+
const response = await client.post("administrative-notes/create", {
|
|
326
|
+
company_id: companyId,
|
|
327
|
+
subject: args.subject,
|
|
328
|
+
content: args.content,
|
|
329
|
+
status: args.status,
|
|
330
|
+
priority: args.priority,
|
|
331
|
+
referrals: JSON.stringify(args.referrals)
|
|
332
|
+
});
|
|
333
|
+
return textResult({ created: true, note: response.data });
|
|
334
|
+
}));
|
|
335
|
+
// --------------------------------------------------------------- careers
|
|
336
|
+
server.registerTool("list_careers", {
|
|
337
|
+
title: "List job postings",
|
|
338
|
+
description: "List a company's open job postings.",
|
|
339
|
+
inputSchema: { company_id: companyIdSchema }
|
|
340
|
+
}, safeHandler(async (args) => {
|
|
341
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
342
|
+
const response = await client.get("careers/all", { company_id: companyId });
|
|
343
|
+
return textResult(response.data);
|
|
344
|
+
}));
|
|
345
|
+
server.registerTool("list_career_requests", {
|
|
346
|
+
title: "List job applications",
|
|
347
|
+
description: "List applications submitted against a company's job postings. The API requires a status " +
|
|
348
|
+
"filter — there is no 'all statuses' option, so call this once per status you care about.",
|
|
349
|
+
inputSchema: {
|
|
350
|
+
company_id: companyIdSchema,
|
|
351
|
+
status: z.enum([
|
|
352
|
+
"not-checked",
|
|
353
|
+
"pending",
|
|
354
|
+
"screening",
|
|
355
|
+
"interview",
|
|
356
|
+
"offer",
|
|
357
|
+
"hired",
|
|
358
|
+
"checked",
|
|
359
|
+
"rejected"
|
|
360
|
+
]),
|
|
361
|
+
search: z.string().optional(),
|
|
362
|
+
limit: z.number().int().min(1).max(50).optional().default(10),
|
|
363
|
+
page: z.number().int().min(1).optional().default(1)
|
|
364
|
+
}
|
|
365
|
+
}, safeHandler(async (args) => {
|
|
366
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
367
|
+
const response = await client.get("careers/requests/search", {
|
|
368
|
+
company_id: companyId,
|
|
369
|
+
status: args.status,
|
|
370
|
+
search: args.search,
|
|
371
|
+
limit: args.limit,
|
|
372
|
+
page: args.page
|
|
373
|
+
});
|
|
374
|
+
const { items, total } = extractList(response.data, "requests");
|
|
375
|
+
return textResult({ count: total ?? items.length, requests: items });
|
|
376
|
+
}));
|
|
377
|
+
server.registerTool("update_career_request_status", {
|
|
378
|
+
title: "Update a job application's status",
|
|
379
|
+
description: "Move a job application to another stage of the hiring pipeline.",
|
|
380
|
+
inputSchema: {
|
|
381
|
+
company_id: companyIdSchema,
|
|
382
|
+
request_id: z.number().int(),
|
|
383
|
+
status: z.enum([
|
|
384
|
+
"not-checked",
|
|
385
|
+
"pending",
|
|
386
|
+
"screening",
|
|
387
|
+
"interview",
|
|
388
|
+
"offer",
|
|
389
|
+
"hired",
|
|
390
|
+
"checked",
|
|
391
|
+
"rejected"
|
|
392
|
+
])
|
|
393
|
+
}
|
|
394
|
+
}, safeHandler(async (args) => {
|
|
395
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
396
|
+
const response = await client.post("careers/requests/edit-status", {
|
|
397
|
+
company_id: companyId,
|
|
398
|
+
id: args.request_id,
|
|
399
|
+
status: args.status
|
|
400
|
+
});
|
|
401
|
+
return textResult({ updated: true, request: response.data });
|
|
402
|
+
}));
|
|
403
|
+
// ------------------------------------------------------------ onboarding
|
|
404
|
+
server.registerTool("get_onboarding_checklist", {
|
|
405
|
+
title: "Get an onboarding checklist",
|
|
406
|
+
description: "Get the company's onboarding checklist, or one user's if user_id is given.",
|
|
407
|
+
inputSchema: { company_id: companyIdSchema, user_id: z.number().int().optional() }
|
|
408
|
+
}, safeHandler(async (args) => {
|
|
409
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
410
|
+
const response = await client.get("onboarding/checklists", {
|
|
411
|
+
company_id: companyId,
|
|
412
|
+
user_id: args.user_id
|
|
413
|
+
});
|
|
414
|
+
return textResult(response.data);
|
|
415
|
+
}));
|
|
416
|
+
server.registerTool("set_onboarding_stage", {
|
|
417
|
+
title: "Set a user's onboarding stage",
|
|
418
|
+
description: "Advance a user's onboarding stage.",
|
|
419
|
+
inputSchema: {
|
|
420
|
+
company_id: companyIdSchema,
|
|
421
|
+
user_id: z.number().int(),
|
|
422
|
+
stage: z.enum(["pre-boarding", "day-1", "first-week", "first-month", "completed"]).nullable()
|
|
423
|
+
}
|
|
424
|
+
}, safeHandler(async (args) => {
|
|
425
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
426
|
+
await client.post("onboarding/stage/edit", {
|
|
427
|
+
company_id: companyId,
|
|
428
|
+
user_id: args.user_id,
|
|
429
|
+
stage: args.stage
|
|
430
|
+
});
|
|
431
|
+
return textResult({ user_id: args.user_id, stage: args.stage });
|
|
432
|
+
}));
|
|
433
|
+
// ------------------------------------------------------------- cafeteria
|
|
434
|
+
server.registerTool("list_food_schedules", {
|
|
435
|
+
title: "List cafeteria meal schedules",
|
|
436
|
+
description: "List upcoming (or past) meal slots and their capacity.",
|
|
437
|
+
inputSchema: {
|
|
438
|
+
company_id: companyIdSchema,
|
|
439
|
+
from_food_date: z.string().optional(),
|
|
440
|
+
to_food_date: z.string().optional(),
|
|
441
|
+
is_active: z.boolean().optional()
|
|
442
|
+
}
|
|
443
|
+
}, safeHandler(async (args) => {
|
|
444
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
445
|
+
const response = await client.get("foods/schedule", {
|
|
446
|
+
company_id: companyId,
|
|
447
|
+
from_food_date: args.from_food_date,
|
|
448
|
+
to_food_date: args.to_food_date,
|
|
449
|
+
is_active: args.is_active === undefined ? undefined : boolParam(args.is_active)
|
|
450
|
+
});
|
|
451
|
+
const { items } = extractList(response.data, "schedules");
|
|
452
|
+
return textResult({ count: items.length, food_schedules: items.map(summariseFoodSchedule) });
|
|
453
|
+
}));
|
|
454
|
+
server.registerTool("reserve_food", {
|
|
455
|
+
title: "Reserve or cancel a meal",
|
|
456
|
+
description: "Reserve or cancel meals for the authenticated user. Changes within 2 days of the meal " +
|
|
457
|
+
"date are silently ignored by the API.",
|
|
458
|
+
inputSchema: {
|
|
459
|
+
company_id: companyIdSchema,
|
|
460
|
+
reservations: z
|
|
461
|
+
.array(z.object({
|
|
462
|
+
food_date: z.string(),
|
|
463
|
+
schedule_id: z.number().int(),
|
|
464
|
+
status: z.enum(["reserved", "cancelled"]),
|
|
465
|
+
cancel_reason: z.string().optional()
|
|
466
|
+
}))
|
|
467
|
+
.min(1)
|
|
468
|
+
}
|
|
469
|
+
}, safeHandler(async (args) => {
|
|
470
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
471
|
+
const myId = await currentUserId(client);
|
|
472
|
+
const response = await client.post("foods/reserve", {
|
|
473
|
+
company_id: companyId,
|
|
474
|
+
user_id: myId,
|
|
475
|
+
reservations: JSON.stringify(args.reservations)
|
|
476
|
+
});
|
|
477
|
+
return textResult({ reservations: response.data });
|
|
478
|
+
}));
|
|
479
|
+
server.registerTool("list_my_food_reservations", {
|
|
480
|
+
title: "List my meal reservations",
|
|
481
|
+
description: "List the authenticated user's cafeteria reservations.",
|
|
482
|
+
inputSchema: {
|
|
483
|
+
company_id: companyIdSchema,
|
|
484
|
+
from_food_date: z.string().optional(),
|
|
485
|
+
to_food_date: z.string().optional()
|
|
486
|
+
}
|
|
487
|
+
}, safeHandler(async (args) => {
|
|
488
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
489
|
+
const myId = await currentUserId(client);
|
|
490
|
+
const response = await client.get("foods/schedule", {
|
|
491
|
+
company_id: companyId,
|
|
492
|
+
user_id: myId,
|
|
493
|
+
from_food_date: args.from_food_date,
|
|
494
|
+
to_food_date: args.to_food_date
|
|
495
|
+
});
|
|
496
|
+
return textResult(response.data);
|
|
497
|
+
}));
|
|
498
|
+
// ---------------------------------------------------------- mood check-in
|
|
499
|
+
server.registerTool("mood_checkin", {
|
|
500
|
+
title: "Log a mood check-in",
|
|
501
|
+
description: "Record the authenticated user's mood for today, 1 (worst) to 5 (best). Overwrites today's entry if called again.",
|
|
502
|
+
inputSchema: {
|
|
503
|
+
company_id: companyIdSchema,
|
|
504
|
+
mood_score: z.number().int().min(1).max(5),
|
|
505
|
+
note: z.string().optional()
|
|
506
|
+
}
|
|
507
|
+
}, safeHandler(async (args) => {
|
|
508
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
509
|
+
const response = await client.post("mood-checkins/checkin", {
|
|
510
|
+
company_id: companyId,
|
|
511
|
+
mood_score: args.mood_score,
|
|
512
|
+
note: args.note
|
|
513
|
+
});
|
|
514
|
+
return textResult(response.data);
|
|
515
|
+
}));
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=hr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hr.js","sourceRoot":"","sources":["../../src/tools/hr.ts"],"names":[],"mappings":"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"}
|