@vess-id/ai-identity 0.16.0 → 0.17.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/dist/index.mjs CHANGED
@@ -6353,6 +6353,33 @@ var ACTION_REGISTRY = {
6353
6353
  },
6354
6354
  version: "1.0.0"
6355
6355
  },
6356
+ {
6357
+ action: "calendar.freebusy",
6358
+ resource_type: "calendar:calendar",
6359
+ required_relations: ["viewer", "editor", "admin", "owner"],
6360
+ required_scopes: ["https://www.googleapis.com/auth/calendar.readonly"],
6361
+ capability: "calendar.read.basic",
6362
+ // Availability probe used to check a calendar's busy/free intervals before
6363
+ // proposing meeting slots. Returns only busy time ranges — never event
6364
+ // details (title, attendees, description) — so it stays low-risk read.
6365
+ input_schema: {
6366
+ type: "object",
6367
+ properties: {
6368
+ calendarId: { type: "string", description: "Calendar ID (email address). Defaults to primary calendar." },
6369
+ timeMin: { type: "string", description: 'Lower bound (inclusive) of the window to check, as ISO 8601 datetime, e.g. "2025-01-15T00:00:00Z"' },
6370
+ timeMax: { type: "string", description: 'Upper bound (exclusive) of the window to check, as ISO 8601 datetime, e.g. "2025-01-16T00:00:00Z"' }
6371
+ },
6372
+ required: ["timeMin", "timeMax"],
6373
+ additionalProperties: false
6374
+ },
6375
+ constraints: { rate_bucket: "calendar.read" },
6376
+ effects: ["Read:FreeBusy"],
6377
+ risk: "low",
6378
+ target_bindings: {
6379
+ resource_id: { source: "param", param: "calendarId", required: false, default: "primary" }
6380
+ },
6381
+ version: "1.0.0"
6382
+ },
6356
6383
  {
6357
6384
  action: "calendar.event.create",
6358
6385
  resource_type: "calendar:event",
@@ -7674,9 +7701,21 @@ var ACTION_REGISTRY = {
7674
7701
  },
7675
7702
  // ─── Scheduling Actions (internal) ───
7676
7703
  // scheduling.request is a meeting-time negotiation façade over inbox.send.
7677
- // Candidate slots are computed LLM-side from the user calendar; the server
7678
- // only validates them. Like the inbox actions it is internal (no external
7679
- // OAuth provider), so it carries the single nominal base scope `inbox`.
7704
+ // Candidate slots may be supplied two ways (server-side EXCLUSIVE exactly
7705
+ // one): (a) `candidates` the agent computes them LLM-side from the user
7706
+ // calendar and the server validates + freebusy-filters them, or (b)
7707
+ // `candidateWindow` — the agent hands the server a { start, end } window and
7708
+ // the server generates busy-free candidates from the sender's Google
7709
+ // Calendar. Like the inbox actions it is internal (no external OAuth
7710
+ // provider), so it carries the single nominal base scope `inbox`.
7711
+ //
7712
+ // NOTE: the candidates/candidateWindow exclusivity is expressed here as
7713
+ // `oneOf` for documentation + the deep JSON-Schema authorities, but the SDK's
7714
+ // hand-written `validateActionInput` is a SHALLOW shape gate that does NOT
7715
+ // interpret `oneOf` (neither key is in top-level `required`). The exclusivity
7716
+ // (exactly one of candidates/candidateWindow) is ENFORCED server-side in
7717
+ // SchedulingRequestService — see that service for the 400s on both-given /
7718
+ // both-missing.
7680
7719
  // Spec: docs/specs/2026-06-10-inbox-intent-routing-design.md §2.1
7681
7720
  {
7682
7721
  action: "scheduling.request",
@@ -7694,7 +7733,7 @@ var ACTION_REGISTRY = {
7694
7733
  type: "array",
7695
7734
  minItems: 1,
7696
7735
  maxItems: 10,
7697
- description: "Candidate slots computed by the agent from the user calendar (LLM-side computation; the server only validates)",
7736
+ description: "Explicit candidate slots computed by the agent from the user calendar. The server validates them AND (when Google Calendar is connected) filters out any that conflict with the sender's calendar. Mutually exclusive with candidateWindow \u2014 supply exactly one.",
7698
7737
  items: {
7699
7738
  type: "object",
7700
7739
  properties: {
@@ -7705,9 +7744,33 @@ var ACTION_REGISTRY = {
7705
7744
  additionalProperties: false
7706
7745
  }
7707
7746
  },
7747
+ candidateWindow: {
7748
+ type: "object",
7749
+ description: "A { start, end } search window (ISO 8601, span \u2264 62 days). The server generates busy-free candidate slots from the sender's Google Calendar within it. Mutually exclusive with candidates \u2014 supply exactly one. Requires a connected Google Calendar.",
7750
+ properties: {
7751
+ start: { type: "string", description: "ISO 8601 window start" },
7752
+ end: { type: "string", description: "ISO 8601 window end" }
7753
+ },
7754
+ required: ["start", "end"],
7755
+ additionalProperties: false
7756
+ },
7757
+ hold: {
7758
+ type: "boolean",
7759
+ description: "When true (or omitted, when the sender's delegation policy has holds enabled), tentatively hold the offered slots on the sender's calendar as [\u4EEE] events until the counterpart responds or the request expires. Pass false to skip holds for this request. Only takes effect when the sender has an enabled scheduling delegation policy."
7760
+ },
7708
7761
  message: { type: "string", description: "Optional human-readable message" }
7709
7762
  },
7710
- required: ["to", "topic", "durationMinutes", "candidates"],
7763
+ // candidates / candidateWindow are intentionally NOT in `required`: the
7764
+ // exclusive-choice is documented via `oneOf` and enforced server-side.
7765
+ // Each oneOf branch re-declares its property locally (empty `properties`
7766
+ // entry) so AJV strict mode (`strictRequired`) sees the required key as
7767
+ // defined within the branch scope — the value shape itself is validated
7768
+ // by the top-level `properties` above.
7769
+ required: ["to", "topic", "durationMinutes"],
7770
+ oneOf: [
7771
+ { required: ["candidates"], properties: { candidates: {} } },
7772
+ { required: ["candidateWindow"], properties: { candidateWindow: {} } }
7773
+ ],
7711
7774
  additionalProperties: false
7712
7775
  },
7713
7776
  constraints: { rate_bucket: "inbox.write" },
@@ -7788,8 +7851,8 @@ var ACTION_REGISTRY = {
7788
7851
  },
7789
7852
  {
7790
7853
  capability: "calendar.read.basic",
7791
- description: "Read and list Google Calendar events",
7792
- includes: ["calendar.event.list", "calendar.event.read"],
7854
+ description: "Read and list Google Calendar events, and check free/busy availability",
7855
+ includes: ["calendar.event.list", "calendar.event.read", "calendar.freebusy"],
7793
7856
  version: "1.0.0"
7794
7857
  },
7795
7858
  {