@foldedspacelabs/metistry-mcp-eventkit 0.13.0 → 0.14.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.
@@ -0,0 +1,67 @@
1
+ /** A participant as the helper reports it (`participant()` in ek-helper.swift). */
2
+ export interface HelperParticipant {
3
+ name?: string | null;
4
+ email?: string | null;
5
+ status?: string;
6
+ role?: string;
7
+ type?: string;
8
+ self?: boolean;
9
+ }
10
+ /** One event as the helper's `list_events` reports it. Every field past `calendar` arrived with T2-11; an older helper sends none of them. */
11
+ export interface HelperEvent {
12
+ id?: string;
13
+ title?: string;
14
+ start?: string;
15
+ end?: string;
16
+ all_day?: boolean;
17
+ location?: string;
18
+ calendar?: string;
19
+ attendees?: string[];
20
+ participants?: HelperParticipant[];
21
+ organizer?: HelperParticipant | null;
22
+ ical_uid?: string | null;
23
+ recurring?: boolean;
24
+ occurrence?: string | null;
25
+ notes?: string | null;
26
+ }
27
+ /** A participant as `GET /events` serves it: the address as EventKit gave it (the sync lowercases), the owner's own row marked. */
28
+ export interface Participant {
29
+ name: string | null;
30
+ email: string | null;
31
+ status: string;
32
+ role: string;
33
+ type: string;
34
+ self: boolean;
35
+ }
36
+ /** One event as `GET /events` serves it. The first eight fields are unchanged from before T2-11, so every existing reader still reads them. */
37
+ export interface BridgeEvent {
38
+ id: string;
39
+ title: string;
40
+ start: string;
41
+ end: string;
42
+ all_day: boolean;
43
+ location: string;
44
+ calendar: string;
45
+ /** Names only — `morning-brief` and `weekly-review` join these as strings. */
46
+ attendees: string[];
47
+ /** Null only for an event the helper could not name — served (a brief still lists it), never synced. */
48
+ event_id: string | null;
49
+ ical_uid: string | null;
50
+ series_id: string | null;
51
+ participants: Participant[];
52
+ organizer: Participant | null;
53
+ self_status: string | null;
54
+ }
55
+ /** Everything a participant's status may be; anything else a helper says is `unknown`. */
56
+ export declare const PARTICIPANT_STATUSES: readonly ["unknown", "pending", "accepted", "declined", "tentative", "delegated", "completed", "in_process"];
57
+ /**
58
+ * The occurrence key: the identifier, and for an occurrence of a recurring
59
+ * event its original date (`20260928T133000Z`, or `20260928` all-day).
60
+ * Null when the helper gave no identifier — an event that cannot be named
61
+ * cannot be keyed (EKEvent.h: nil only for an event never saved).
62
+ */
63
+ export declare function eventKey(e: Pick<HelperEvent, "id" | "recurring" | "occurrence">): string | null;
64
+ /** The owner's own answer to this event, or null when there is nothing to answer (see the header). */
65
+ export declare function selfStatus(participants: Participant[], organizer: Participant | null): string | null;
66
+ /** The helper's event → the bridge's. `notes` is never carried (see the header). */
67
+ export declare function bridgeEvent(e: HelperEvent): BridgeEvent;
package/dist/events.js ADDED
@@ -0,0 +1,83 @@
1
+ // What `GET /events` serves for one event, made from what the Swift helper
2
+ // read. Pure: no socket, no clock — the wire contract's tests drive it with
3
+ // a scripted helper, and every calendar consumer (the routines, the eventkit
4
+ // sync that fills `calendar_events`) reads the same fields from it.
5
+ //
6
+ // Three facts are decided HERE rather than in Swift, so they are tested on
7
+ // every platform CI runs on:
8
+ //
9
+ // * **`event_id` names one occurrence.** EventKit's `eventIdentifier` is the
10
+ // SERIES for a recurring event (every Monday standup shares it), and a
11
+ // meeting note is for one Monday. A recurring occurrence's key is the
12
+ // identifier plus its ORIGINAL date (`occurrenceDate`, which stays put
13
+ // when that one occurrence is moved — EKEvent.h), the shape Google uses
14
+ // for its instance ids. A one-off event's key is its identifier alone, so
15
+ // moving it does not orphan its note.
16
+ // * **`self_status` is the owner's answer**, from the participant EventKit
17
+ // marks `isCurrentUser`; the organizer of a meeting has accepted it by
18
+ // definition (RFC 5545 gives the organizer's own PARTSTAT as ACCEPTED);
19
+ // an event with nobody else in it has nothing to answer, so null.
20
+ // * **`notes` never leaves the bridge.** The invite body carries dial-in
21
+ // codes and confidential agendas (today-hub-requests A1). The helper reads
22
+ // it only when asked, the bridge never asks, and this function drops the
23
+ // field even if a helper sends it unasked — so no consumer of `GET
24
+ // /events`, and nothing any consumer writes, can carry one.
25
+ /** Everything a participant's status may be; anything else a helper says is `unknown`. */
26
+ export const PARTICIPANT_STATUSES = ["unknown", "pending", "accepted", "declined", "tentative", "delegated", "completed", "in_process"];
27
+ const STATUSES = new Set(PARTICIPANT_STATUSES);
28
+ const text = (v) => (typeof v === "string" && v !== "" ? v : null);
29
+ function participant(p) {
30
+ return {
31
+ name: text(p.name),
32
+ email: text(p.email),
33
+ status: typeof p.status === "string" && STATUSES.has(p.status) ? p.status : "unknown",
34
+ role: text(p.role) ?? "unknown",
35
+ type: text(p.type) ?? "unknown",
36
+ self: p.self === true,
37
+ };
38
+ }
39
+ /**
40
+ * The occurrence key: the identifier, and for an occurrence of a recurring
41
+ * event its original date (`20260928T133000Z`, or `20260928` all-day).
42
+ * Null when the helper gave no identifier — an event that cannot be named
43
+ * cannot be keyed (EKEvent.h: nil only for an event never saved).
44
+ */
45
+ export function eventKey(e) {
46
+ const id = text(e.id);
47
+ if (id === null)
48
+ return null;
49
+ const occurrence = e.recurring === true ? text(e.occurrence) : null;
50
+ return occurrence === null ? id : `${id}_${occurrence}`;
51
+ }
52
+ /** The owner's own answer to this event, or null when there is nothing to answer (see the header). */
53
+ export function selfStatus(participants, organizer) {
54
+ const mine = participants.find((p) => p.self);
55
+ if (mine)
56
+ return mine.status;
57
+ if (organizer?.self)
58
+ return "accepted";
59
+ return null;
60
+ }
61
+ /** The helper's event → the bridge's. `notes` is never carried (see the header). */
62
+ export function bridgeEvent(e) {
63
+ const key = eventKey(e);
64
+ const participants = Array.isArray(e.participants) ? e.participants.map(participant) : [];
65
+ const organizer = e.organizer ? participant(e.organizer) : null;
66
+ return {
67
+ id: e.id ?? "",
68
+ title: e.title ?? "",
69
+ start: e.start ?? "",
70
+ end: e.end ?? "",
71
+ all_day: e.all_day === true,
72
+ location: e.location ?? "",
73
+ calendar: e.calendar ?? "",
74
+ attendees: Array.isArray(e.attendees) ? e.attendees.filter((a) => typeof a === "string") : [],
75
+ event_id: key,
76
+ ical_uid: text(e.ical_uid),
77
+ series_id: e.recurring === true ? text(e.id) : null,
78
+ participants,
79
+ organizer,
80
+ self_status: selfStatus(participants, organizer),
81
+ };
82
+ }
83
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type Server } from "node:http";
2
2
  import type { Helper } from "./helper.js";
3
+ export { bridgeEvent, eventKey, selfStatus, PARTICIPANT_STATUSES, type BridgeEvent, type HelperEvent, type HelperParticipant, type Participant } from "./events.js";
3
4
  export interface BridgeConfig {
4
5
  token: string;
5
6
  }
package/dist/index.js CHANGED
@@ -6,6 +6,8 @@
6
6
  import { createServer } from "node:http";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { authorized, errorEnvelope, statusFor, runCheck } from "@foldedspacelabs/metistry-core";
9
+ import { bridgeEvent } from "./events.js";
10
+ export { bridgeEvent, eventKey, selfStatus, PARTICIPANT_STATUSES } from "./events.js";
9
11
  const CONFIRM_TTL_MS = 5 * 60 * 1000;
10
12
  function send(res, status, body) {
11
13
  const text = JSON.stringify(body);
@@ -62,10 +64,22 @@ export function makeBridge(helper, cfg) {
62
64
  });
63
65
  return send(res, result.status === "ok" ? 200 : 503, result);
64
66
  }
67
+ // Every event with its occurrence key, participants, organizer and the
68
+ // owner's own answer (events.ts). Never the invite body: the helper is
69
+ // not asked for `notes`, and `bridgeEvent` drops the field if one comes
70
+ // anyway — no reader of this route can hand one on (T2-11). `window` is
71
+ // the span the helper read, so a sync can tell an event that was
72
+ // cancelled from one that is simply outside what it asked for; an older
73
+ // helper sends none and the response says so by omitting it.
65
74
  if (key === "GET /events") {
66
75
  const days = Math.min(Math.max(Number(url.searchParams.get("days") ?? 1), 1), 31);
67
76
  const r = await helper.request({ op: "list_events", days });
68
- return r.ok ? send(res, 200, { events: r.events, as_of: new Date().toISOString() }) : fail(res, "internal");
77
+ if (!r.ok)
78
+ return fail(res, "internal");
79
+ const events = (Array.isArray(r.events) ? r.events : []).map(bridgeEvent);
80
+ const w = r.window;
81
+ const window = w && typeof w.start === "string" && typeof w.end === "string" ? { start: w.start, end: w.end } : undefined;
82
+ return send(res, 200, { events, ...(window ? { window } : {}), as_of: new Date().toISOString() });
69
83
  }
70
84
  if (key === "GET /reminders") {
71
85
  const r = await helper.request({ op: "list_reminders" });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/manifest.yaml CHANGED
@@ -10,7 +10,7 @@ discovery: eager # 4 tools — under the PoC-17 lazy threshold
10
10
  degrades: absent # router stops offering calendar when the Mac is away
11
11
  exposes:
12
12
  - name: list_events
13
- description: Events from today for N days (title, times, location, attendees)
13
+ description: Events from today for N days — title, times, location, attendees with address and answer, organizer, series and the occurrence key; never the invite body
14
14
  - name: list_reminders
15
15
  description: Incomplete reminders across lists
16
16
  - name: create_event
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foldedspacelabs/metistry-mcp-eventkit",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Metistry EventKit bridge: Calendar + Reminders over the §4.3 wire contract (HTTP + bearer auth + check() + preview-confirm). Ships a compiled, signed Swift helper; TCC-bound — runs as its own launchd service. Usable standalone.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -21,7 +21,7 @@
21
21
  "darwin"
22
22
  ],
23
23
  "dependencies": {
24
- "@foldedspacelabs/metistry-core": "0.13.0"
24
+ "@foldedspacelabs/metistry-core": "0.14.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^22.20.1",