@pidgeon-ai/sdk 1.19.2 → 1.22.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/CHANGELOG.md CHANGED
@@ -7,6 +7,52 @@ the two would publish a release for every unrelated product deploy.
7
7
  Semver applies to **this package's own surface** — the exported names, the
8
8
  call shapes, the result shape — not to the API behind it.
9
9
 
10
+ ## 1.22.0 — typed data, and the declared sender
11
+
12
+ Every send — `messagesSend`, `messagesReply`, `messagesReplyAll`,
13
+ `messagesForward`, and `draftsCreate` and `draftsUpdate` for a draft sent or
14
+ scheduled later — takes an optional `data: { schema, body }`: `schema` is an
15
+ http or https URL naming what `body` is, and `body` is up to 64 KB of JSON.
16
+ It travels as its own part beside the text, which ordinary mail clients do
17
+ not show, and comes back as `data` on the message, on a Pidgeon recipient's
18
+ copy and on any received mail that carries one. It is never mixed into
19
+ `text`, and the Firewall does not read it as prose.
20
+
21
+ Every message has `sender: { address, kind, on_behalf_of }`. A message sent
22
+ from Pidgeon declares `kind` (`person`, `agent` or `service`, from the
23
+ address's type) and `on_behalf_of` (the workspace's name, which only an owner
24
+ can change). Mail that arrived as ordinary email declared neither, and
25
+ says `origin: "smtp"`; `authentication` is what is known about it.
26
+ `message.sent` carries `sender` too. Additive; nothing narrows.
27
+
28
+ ## 1.21.0 — every send takes a key, and receipts
29
+
30
+ `Idempotency-Key` is a declared header on every operation that honours it,
31
+ so each takes `headers: { 'Idempotency-Key': … }` typed rather than as a
32
+ raw header. It is honoured now on every send: `messagesReply`,
33
+ `messagesReplyAll`, `messagesForward`, `draftsSend`, `draftsSchedule`,
34
+ `calendarCreateEvent`, `calendarUpdateEvent`, `calendarDeleteEvent`,
35
+ `calendarRespondToEvent` and `messagesRespondToInvitation`, beside
36
+ `messagesSend` and the creates that had it. The same key with the same
37
+ request returns the first answer and sends nothing; with a different
38
+ request, `409`. Reuse one key across your own retries of one send.
39
+
40
+ Two event types, both receipts from a Pidgeon address you wrote to:
41
+ `message.read` (its agent read the message through the API, the first
42
+ time — only from an address with the new `readReceipts` capability, off by
43
+ default) and `message.handed_off` (it handed the conversation to a person).
44
+ Each carries `message_id`, `recipient`, `kind` and `at`, and is
45
+ subscribable like any other. Additive; nothing narrows.
46
+
47
+ ## 1.20.0 — a wait looks back before it waits
48
+
49
+ `messagesAwait` with no `after` returns the newest matching message from
50
+ the last two minutes before it starts waiting. An agent submits a form and
51
+ then asks for the code, and a fast sender's code was already there: the
52
+ wait started at "now" and timed out on it. `after` also takes `"now"`, the
53
+ old start. A caller that looped without passing `cursor` back may now see a
54
+ message twice; pass the cursor, as before.
55
+
10
56
  ## 1.19.2 — what `/raw` answers
11
57
 
12
58
  The description of `GET /messages/{id}/raw` said it 404s once the original