@lightupai/polaris 0.0.35 → 0.0.36
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/package.json +1 -1
- package/src/client/client.ts +8 -5
- package/src/service/server.ts +11 -7
package/package.json
CHANGED
package/src/client/client.ts
CHANGED
|
@@ -267,14 +267,17 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
267
267
|
try {
|
|
268
268
|
const res = await daemonGet("/team");
|
|
269
269
|
if (res.ok) {
|
|
270
|
-
const body = await res.json() as { members: Array<{ name: string; participant_id: string; slack_id: string | null; slack_display: string | null }> };
|
|
270
|
+
const body = await res.json() as { members: Array<{ name: string; participant_id: string; slack_id: string | null; slack_handle: string | null; slack_display: string | null }> };
|
|
271
271
|
if (body.members.length === 0) {
|
|
272
272
|
return { content: [{ type: "text", text: "No team members found." }] };
|
|
273
273
|
}
|
|
274
|
-
const list = body.members
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
274
|
+
const list = body.members
|
|
275
|
+
.filter((m) => m.slack_id) // only show members with Slack identity
|
|
276
|
+
.map((m) => ` @${m.slack_handle ?? m.slack_display} — ${m.name} [${m.slack_id}]`)
|
|
277
|
+
.join("\n");
|
|
278
|
+
const unlinked = body.members.filter((m) => !m.slack_id);
|
|
279
|
+
const unlinkedNote = unlinked.length > 0 ? `\n\nNot linked to Slack: ${unlinked.map(m => m.name).join(", ")}` : "";
|
|
280
|
+
return { content: [{ type: "text", text: `Team members (use @handle to tag):\n${list}${unlinkedNote}` }] };
|
|
278
281
|
}
|
|
279
282
|
return { content: [{ type: "text", text: "Failed to fetch team list." }] };
|
|
280
283
|
} catch {
|
package/src/service/server.ts
CHANGED
|
@@ -451,36 +451,40 @@ export async function startServer(opts: {
|
|
|
451
451
|
const org = await getOrgFn(sql, orgId);
|
|
452
452
|
|
|
453
453
|
// Resolve Slack user info if bot token available
|
|
454
|
-
let slackMembers: Array<{ id: string; name: string; display_name: string }> = [];
|
|
454
|
+
let slackMembers: Array<{ id: string; name: string; display_name: string; email: string; username: string }> = [];
|
|
455
455
|
if (org?.slack_bot_token) {
|
|
456
456
|
try {
|
|
457
457
|
const slackRes = await fetch("https://slack.com/api/users.list?limit=200", {
|
|
458
458
|
headers: { Authorization: `Bearer ${org.slack_bot_token}` },
|
|
459
459
|
});
|
|
460
460
|
if (slackRes.ok) {
|
|
461
|
-
const slackData = (await slackRes.json()) as { members?: Array<{ id: string; real_name?: string; profile?: { display_name?: string }; deleted?: boolean; is_bot?: boolean }> };
|
|
461
|
+
const slackData = (await slackRes.json()) as { members?: Array<{ id: string; name: string; real_name?: string; profile?: { display_name?: string; email?: string }; deleted?: boolean; is_bot?: boolean }> };
|
|
462
462
|
slackMembers = (slackData.members ?? [])
|
|
463
463
|
.filter((m) => !m.deleted && !m.is_bot)
|
|
464
464
|
.map((m) => ({
|
|
465
465
|
id: m.id,
|
|
466
466
|
name: m.real_name ?? "",
|
|
467
467
|
display_name: m.profile?.display_name ?? "",
|
|
468
|
+
email: m.profile?.email ?? "",
|
|
469
|
+
username: m.name ?? "",
|
|
468
470
|
}));
|
|
469
471
|
}
|
|
470
472
|
} catch { /* Slack API unavailable */ }
|
|
471
473
|
}
|
|
472
474
|
|
|
473
|
-
// Join Polaris users with Slack members by email
|
|
475
|
+
// Join Polaris users with Slack members by email (most reliable)
|
|
474
476
|
const team = users.map((u) => {
|
|
475
|
-
const slack = slackMembers.find((m) =>
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
477
|
+
const slack = slackMembers.find((m) => m.email.toLowerCase() === u.email.toLowerCase())
|
|
478
|
+
?? slackMembers.find((m) =>
|
|
479
|
+
m.name.toLowerCase() === u.name.toLowerCase() ||
|
|
480
|
+
m.display_name.toLowerCase() === u.name.toLowerCase().replace(/\s+/g, ".")
|
|
481
|
+
);
|
|
479
482
|
return {
|
|
480
483
|
name: u.name,
|
|
481
484
|
participant_id: u.participant_id,
|
|
482
485
|
email: u.email,
|
|
483
486
|
slack_id: slack?.id ?? null,
|
|
487
|
+
slack_handle: slack?.username || null,
|
|
484
488
|
slack_display: slack?.display_name || slack?.name || null,
|
|
485
489
|
};
|
|
486
490
|
});
|