@bli-cockpit/mcp 0.1.97 → 0.1.98

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/dist/cal-tools.js CHANGED
@@ -51,8 +51,9 @@ function eventLine(event) {
51
51
  ? `${event.starts_at.slice(0, 10)} (all day${days > 1 ? ` ×${days}d` : ""})`
52
52
  : `${event.starts_at.slice(0, 16).replace("T", " ")}–${event.ends_at.slice(11, 16)}`;
53
53
  const where = event.location ? ` @ ${event.location}` : "";
54
+ const meeting = meetingLinkText(event);
54
55
  const who = event.attendee_count > 0 ? ` (${event.attendee_count} attendees)` : "";
55
- return `${event.recurring ? "↻" : " "} ${when} ${event.title}${where}${who} [${event.calendar_name}]`;
56
+ return `${event.recurring ? "↻" : " "} ${when} ${event.title}${where}${who}${meeting} [${event.calendar_name}]`;
56
57
  }
57
58
  /** Every window read, so the three named windows cannot drift from each other. */
58
59
  function windowRenderer(label) {
@@ -151,7 +152,7 @@ export function registerCalTools(server, deps) {
151
152
  return textResult(matches.length === 0
152
153
  ? `Nothing in the calendars you may read matched "${String(args.query)}".`
153
154
  : `${matches.length} match(es):\n${matches
154
- .map((match) => `${match.recurring ? "↻" : " "} ${match.next_occurrence ?? match.starts_at} ${match.title} [${match.calendar_name}]`)
155
+ .map((match) => `${match.recurring ? "↻" : " "} ${match.next_occurrence ?? match.starts_at} ${match.title} [${match.calendar_name}]${meetingLinkText(match)}`)
155
156
  .join("\n")}`, { matches });
156
157
  }));
157
158
  register("cal_calendars", {
@@ -290,3 +291,9 @@ function towerIdLine(event) {
290
291
  }
291
292
  return "";
292
293
  }
294
+ function meetingLinkText(event) {
295
+ const label = { meet: "Meet link", zoom: "Zoom link", teams: "Teams link" }[event.meeting_kind ?? ""] ?? "Meeting link";
296
+ const meeting = event.meeting_url ? ` ${label}: ${event.meeting_url}` : "";
297
+ console.error("[cal render] meeting link", JSON.stringify({ reason: event.meeting_url ? "meeting_link_shown" : "no_meeting_link" }));
298
+ return meeting;
299
+ }
@@ -104,13 +104,13 @@ export function registerNotesTools(server, deps) {
104
104
  if (!response.ok)
105
105
  return errorResult(doorFailureText("notes_show", response));
106
106
  const body = response.body;
107
- const note = body.note;
107
+ const note = body.note ? { ...body.note, content: body.note.content.replace(/^In the room:/gm, "Invited:") } : null;
108
108
  if (!note) {
109
109
  return errorResult(`Tower answered notes_show without a note for "${ref}".${narrowingNote(body)}`);
110
110
  }
111
- const room = note.participants.length > 0 ? `\nIn the room: ${note.participants.join(", ")}` : "";
111
+ const invited = note.participants.length > 0 ? `\nInvited: ${note.participants.join(", ")}` : "";
112
112
  return textResult(`${note.title}\n${note.meetingDate} · ${note.shelf} · ${note.fileName} · ${note.lineCount} lines`
113
- + `${room}\n${note.visibility}${body.audio ? "\nTranscription: " + body.audio.transcription_status : ""}\n\n${note.content}${narrowingNote(body)}`, { scope: body.scope ?? null, note, audio: body.audio ?? null });
113
+ + `${invited}\n${note.visibility}${body.audio ? "\nTranscription: " + body.audio.transcription_status : ""}\n\n${note.content}${narrowingNote(body)}`, { scope: body.scope ?? null, note, audio: body.audio ?? null });
114
114
  }));
115
115
  register("notes_shelf", {
116
116
  title: "Your own Tower notes shelf",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bli-cockpit/mcp",
3
- "version": "0.1.97",
3
+ "version": "0.1.98",
4
4
  "private": false,
5
5
  "description": "bli-tower: an MCP server over BLI Cockpit's agent doors: JARVIS (jarvis_*), documents (docs_*), channels (msg_*), issues (work_*), the daily page (brief_*), meeting notes (notes_*), the ops board (ops_status/slack_*), settings/team/model, Scout and the workbook, plus the legacy event-stream tools (emit_event, get_ticket_timeline, get_active_tickets).",
6
6
  "type": "module",