agent-protocols 0.4.1 → 0.6.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.
Files changed (58) hide show
  1. package/README.md +3 -3
  2. package/dist/delegation.d.ts +28 -4
  3. package/dist/delegation.d.ts.map +1 -1
  4. package/dist/delegation.js +60 -6
  5. package/dist/delegation.js.map +1 -1
  6. package/dist/discourse.d.ts +67 -3
  7. package/dist/discourse.d.ts.map +1 -1
  8. package/dist/discourse.js +149 -2
  9. package/dist/discourse.js.map +1 -1
  10. package/dist/errors.d.ts +6 -2
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +7 -3
  13. package/dist/errors.js.map +1 -1
  14. package/dist/http-client.d.ts +24 -4
  15. package/dist/http-client.d.ts.map +1 -1
  16. package/dist/http-client.js +40 -9
  17. package/dist/http-client.js.map +1 -1
  18. package/dist/identity.d.ts +17 -0
  19. package/dist/identity.d.ts.map +1 -1
  20. package/dist/identity.js +40 -8
  21. package/dist/identity.js.map +1 -1
  22. package/dist/local-connector/catalog.d.ts +55 -0
  23. package/dist/local-connector/catalog.d.ts.map +1 -0
  24. package/dist/local-connector/catalog.js +151 -0
  25. package/dist/local-connector/catalog.js.map +1 -0
  26. package/dist/local-connector/engine.d.ts +94 -0
  27. package/dist/local-connector/engine.d.ts.map +1 -0
  28. package/dist/local-connector/engine.js +1234 -0
  29. package/dist/local-connector/engine.js.map +1 -0
  30. package/dist/local-connector/inputs.d.ts +231 -0
  31. package/dist/local-connector/inputs.d.ts.map +1 -0
  32. package/dist/local-connector/inputs.js +4 -0
  33. package/dist/local-connector/inputs.js.map +1 -0
  34. package/dist/local-connector/internal.d.ts +6 -0
  35. package/dist/local-connector/internal.d.ts.map +1 -0
  36. package/dist/local-connector/internal.js +18 -0
  37. package/dist/local-connector/internal.js.map +1 -0
  38. package/dist/local-connector/projection.d.ts +16 -0
  39. package/dist/local-connector/projection.d.ts.map +1 -0
  40. package/dist/local-connector/projection.js +306 -0
  41. package/dist/local-connector/projection.js.map +1 -0
  42. package/dist/local-connector/state.d.ts +66 -0
  43. package/dist/local-connector/state.d.ts.map +1 -0
  44. package/dist/local-connector/state.js +18 -0
  45. package/dist/local-connector/state.js.map +1 -0
  46. package/dist/local-connector/views.d.ts +169 -0
  47. package/dist/local-connector/views.d.ts.map +1 -0
  48. package/dist/local-connector/views.js +98 -0
  49. package/dist/local-connector/views.js.map +1 -0
  50. package/dist/local-connector.d.ts +5 -234
  51. package/dist/local-connector.d.ts.map +1 -1
  52. package/dist/local-connector.js +26 -251
  53. package/dist/local-connector.js.map +1 -1
  54. package/dist/profile.d.ts +12 -3
  55. package/dist/profile.d.ts.map +1 -1
  56. package/dist/profile.js +15 -1
  57. package/dist/profile.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,306 @@
1
+ // Pure room-state projection: the ADP Section 6.1 rules that turn an accepted
2
+ // ServerRecord into member, timeline, contract, and inbox changes on a
3
+ // LocalRoomState, plus the local-chain validation that gates them and the
4
+ // read-side predicates over room state. Every function is a plain transform
5
+ // over borrowed state — no signing, no network — which is what makes the
6
+ // connector's projection behaviour testable in isolation.
7
+ import { builtinEventClass, eventType, isTypeDef, } from "../discourse.js";
8
+ import { TOOL_ROOM_SEND_MESSAGE } from "./catalog.js";
9
+ import { invalidPayload, isRecord } from "./internal.js";
10
+ export function recordAdvancesRoomHead(room, record) {
11
+ return eventTypeAdvancesRoomHead(room, record.envelope.event.type);
12
+ }
13
+ /** Lifecycle, `message`-, and `control`-kind records advance the room head;
14
+ * `signal`-kind records — including the membership events — only anchor. */
15
+ export function eventTypeAdvancesRoomHead(room, type) {
16
+ const cls = builtinEventClass(type);
17
+ if (cls !== undefined)
18
+ return cls !== "signal";
19
+ const def = room.room.types?.find((definition) => definition.type === type);
20
+ return def === undefined || def.kind !== "signal";
21
+ }
22
+ export function materializeCreator(room) {
23
+ const creator = room.room.creator ?? room.room.envelope?.event.actor;
24
+ if (creator === undefined)
25
+ return;
26
+ if (!room.members.has(creator)) {
27
+ room.members.set(creator, {
28
+ agent_id: creator,
29
+ role: "moderator",
30
+ status: "active",
31
+ is_creator: true,
32
+ joined_seq: 1,
33
+ last_event_seq: 1,
34
+ });
35
+ }
36
+ }
37
+ /** A present field replaces the current value; an empty value clears it. */
38
+ function applyRoomUpdate(room, payload, receivedAt) {
39
+ const response = room.room;
40
+ if (payload.topic !== undefined)
41
+ response.topic = payload.topic;
42
+ if (payload.agenda !== undefined) {
43
+ response.agenda = payload.agenda === "" ? undefined : payload.agenda;
44
+ }
45
+ if (payload.guidance !== undefined) {
46
+ response.guidance = payload.guidance === "" ? undefined : payload.guidance;
47
+ }
48
+ if (payload.tags !== undefined)
49
+ response.tags = payload.tags;
50
+ if (payload.language !== undefined) {
51
+ response.language = payload.language === "" ? undefined : payload.language;
52
+ }
53
+ if (payload.policy !== undefined) {
54
+ // An all-default policy is still an explicit revision: store it verbatim.
55
+ response.policy = payload.policy;
56
+ }
57
+ if (payload.start_time !== undefined) {
58
+ response.start_time = payload.start_time;
59
+ // A scheduled room whose new start_time is at or before acceptance becomes
60
+ // active.
61
+ if (response.status === "scheduled" && payload.start_time <= receivedAt) {
62
+ response.status = "active";
63
+ }
64
+ }
65
+ if (payload.end_time !== undefined)
66
+ response.end_time = payload.end_time;
67
+ }
68
+ export function isDuplicateRecord(room, record) {
69
+ return (record.seq <= room.syncedSeq &&
70
+ room.records.some((existing) => existing.seq === record.seq && existing.hash === record.hash));
71
+ }
72
+ export function validateNextRecord(room, record) {
73
+ if (room.syncedSeq === 0) {
74
+ if (record.seq !== 1 || record.pre_hash !== null) {
75
+ throw invalidPayload("first local record must have seq 1 and null pre_hash");
76
+ }
77
+ return;
78
+ }
79
+ if (record.seq !== room.syncedSeq + 1) {
80
+ throw invalidPayload("record seq must continue local chain");
81
+ }
82
+ if ((record.pre_hash ?? null) !== (room.syncedHash ?? null)) {
83
+ throw invalidPayload("record pre_hash mismatch");
84
+ }
85
+ }
86
+ export function validateRecordBasePrecondition(room, record) {
87
+ const event = record.envelope.event;
88
+ if (event.type === eventType.ROOM_CREATE)
89
+ return;
90
+ const baseSeq = event.base_seq;
91
+ if (baseSeq === undefined) {
92
+ throw invalidPayload("record event requires base_seq");
93
+ }
94
+ const baseHash = event.base_hash;
95
+ if (baseHash === undefined) {
96
+ throw invalidPayload("record event requires base_hash");
97
+ }
98
+ if (baseSeq >= record.seq) {
99
+ throw invalidPayload("record base_seq must reference an earlier accepted record");
100
+ }
101
+ if (!recordAdvancesRoomHead(room, record))
102
+ return;
103
+ if (room.headSeq !== baseSeq || room.headHash !== baseHash) {
104
+ throw invalidPayload("record base_seq/base_hash must match current room head");
105
+ }
106
+ }
107
+ export function applyRecordProjection(room, record, item, activeAgent, inbox) {
108
+ const event = record.envelope.event;
109
+ switch (event.type) {
110
+ case eventType.ROOM_JOIN: {
111
+ const payload = event.payload;
112
+ room.members.set(event.actor, {
113
+ agent_id: event.actor,
114
+ role: payload.role,
115
+ status: "active",
116
+ is_creator: false,
117
+ joined_seq: record.seq,
118
+ last_event_seq: record.seq,
119
+ });
120
+ break;
121
+ }
122
+ case eventType.ROOM_LEAVE: {
123
+ const member = room.members.get(event.actor);
124
+ if (member) {
125
+ member.status = "left";
126
+ member.left_seq = record.seq;
127
+ member.last_event_seq = record.seq;
128
+ }
129
+ break;
130
+ }
131
+ case eventType.ROOM_MEMBER_ROLE_UPDATE: {
132
+ const payload = event.payload;
133
+ const member = room.members.get(payload.member);
134
+ if (member) {
135
+ member.role = payload.role;
136
+ member.last_event_seq = record.seq;
137
+ if (payload.member === activeAgent) {
138
+ inbox.push(inboxFromItem("room.role.changed", "normal", item, "role_changed", false));
139
+ }
140
+ }
141
+ break;
142
+ }
143
+ case eventType.ROOM_UPDATE: {
144
+ const payload = event.payload;
145
+ applyRoomUpdate(room, payload, record.received_at);
146
+ inbox.push(inboxFromItem("room.state.changed", "normal", item, "room_updated", false));
147
+ break;
148
+ }
149
+ case eventType.ROOM_MEMBER_REMOVE: {
150
+ const payload = event.payload;
151
+ const banning = payload.ban === true;
152
+ const status = banning ? "banned" : "removed";
153
+ const member = room.members.get(payload.member);
154
+ if (member) {
155
+ member.status = status;
156
+ member.left_seq = record.seq;
157
+ member.last_event_seq = record.seq;
158
+ }
159
+ else {
160
+ room.members.set(payload.member, {
161
+ // A `ban: true` remove may target a non-member as a pre-emptive ban;
162
+ // it never had a real role.
163
+ agent_id: payload.member,
164
+ role: "observer",
165
+ status,
166
+ is_creator: false,
167
+ left_seq: record.seq,
168
+ last_event_seq: record.seq,
169
+ });
170
+ }
171
+ if (payload.member === activeAgent) {
172
+ inbox.push(inboxFromItem("room.member.removed", "high", item, banning ? "member_banned" : "member_removed", false));
173
+ }
174
+ break;
175
+ }
176
+ case eventType.ROOM_CLOSE: {
177
+ room.room.status = "ended";
178
+ inbox.push(inboxFromItem("room.state.changed", "normal", item, "room_closed", false));
179
+ break;
180
+ }
181
+ case eventType.ROOM_CANCEL: {
182
+ room.room.status = "cancelled";
183
+ inbox.push(inboxFromItem("room.state.changed", "normal", item, "room_cancelled", false));
184
+ break;
185
+ }
186
+ case eventType.TYPE_DEFINE: {
187
+ const declaration = event.payload;
188
+ if (isTypeDef(declaration)) {
189
+ if (!room.room.types)
190
+ room.room.types = [];
191
+ room.room.types = room.room.types.filter((existing) => existing.type !== declaration.type);
192
+ room.room.types.push(declaration);
193
+ inbox.push(inboxFromItem("room.state.changed", "normal", item, "type_registry_changed", false));
194
+ }
195
+ break;
196
+ }
197
+ case eventType.ROOM_JOIN_REVIEW: {
198
+ const payload = event.payload;
199
+ if (payload.request.applicant === activeAgent &&
200
+ payload.decision === "approve") {
201
+ inbox.push(inboxFromItem("room.join.approved", "high", item, "join_approved", true));
202
+ }
203
+ break;
204
+ }
205
+ case eventType.MESSAGE_CREATE: {
206
+ if ((item.mentions ?? []).includes(activeAgent)) {
207
+ inbox.push(inboxFromItem("room.mention", "high", item, "mentioned", true));
208
+ }
209
+ else if (event.actor !== activeAgent) {
210
+ inbox.push(inboxFromItem("room.message.new", "normal", item, "new_message", false));
211
+ }
212
+ break;
213
+ }
214
+ case "turn.update": {
215
+ const turn = activeTurnFromItem(item);
216
+ if (turn) {
217
+ const assignedToSelf = turn.speaker === activeAgent;
218
+ room.activeTurn = turn;
219
+ if (assignedToSelf) {
220
+ inbox.push(inboxFromItem("room.turn.assigned", "high", item, "turn_assigned", true));
221
+ }
222
+ }
223
+ break;
224
+ }
225
+ case "steer.create": {
226
+ if (steerTargetsAgent(event.payload, activeAgent)) {
227
+ inbox.push(inboxFromItem("room.steer", "high", item, "steer", true));
228
+ }
229
+ break;
230
+ }
231
+ default:
232
+ break;
233
+ }
234
+ }
235
+ function activeTurnFromItem(item) {
236
+ const payload = item.payload;
237
+ if (!isRecord(payload))
238
+ return undefined;
239
+ const speaker = payload.speaker;
240
+ if (typeof speaker !== "string")
241
+ return undefined;
242
+ const turnRaw = payload.turn_id;
243
+ if (turnRaw === undefined)
244
+ return undefined;
245
+ const turnId = typeof turnRaw === "string" ? turnRaw : JSON.stringify(turnRaw);
246
+ const instructionRaw = payload.intent ?? payload.topic ?? payload.reason;
247
+ return {
248
+ turn_id: turnId,
249
+ speaker,
250
+ assigned_seq: item.seq,
251
+ expires_at: typeof payload.expires_at === "number" ? payload.expires_at : undefined,
252
+ instruction: typeof instructionRaw === "string" ? instructionRaw : undefined,
253
+ source_event_id: item.event_id,
254
+ };
255
+ }
256
+ function steerTargetsAgent(payload, activeAgent) {
257
+ if (!isRecord(payload))
258
+ return true;
259
+ const target = payload.target;
260
+ if (typeof target !== "string")
261
+ return true;
262
+ return target === activeAgent;
263
+ }
264
+ function inboxFromItem(kind, priority, item, reason, requiresResponse) {
265
+ return {
266
+ id: `${item.room_id}:${kind}:${item.seq}:${item.event_id}`,
267
+ kind,
268
+ priority,
269
+ room_id: item.room_id,
270
+ seq: item.seq,
271
+ event_id: item.event_id,
272
+ actor: item.actor,
273
+ created_at: item.received_at,
274
+ requires_response: requiresResponse,
275
+ reason,
276
+ suggested_tools: requiresResponse ? [TOOL_ROOM_SEND_MESSAGE] : [],
277
+ message: { summary: item.summary },
278
+ };
279
+ }
280
+ export function inboxEntryReady(entry, nowMs) {
281
+ switch (entry.state.kind) {
282
+ case "pending":
283
+ return true;
284
+ case "deferred":
285
+ return entry.state.until <= nowMs;
286
+ default:
287
+ return false;
288
+ }
289
+ }
290
+ export function membershipFilter(room, agentId, membership) {
291
+ switch (membership ?? "all") {
292
+ case "all":
293
+ return true;
294
+ case "member":
295
+ return room.members.has(agentId);
296
+ case "creator":
297
+ return room.members.get(agentId)?.is_creator ?? false;
298
+ case "moderator":
299
+ return room.members.get(agentId)?.role === "moderator";
300
+ case "pending":
301
+ return false;
302
+ default:
303
+ return true;
304
+ }
305
+ }
306
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/local-connector/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { AgentStatus, RoomJoinRequestStatus, RoomResponse, ServerRecord } from "../discourse.js";
2
+ import { AgentId } from "../identity.js";
3
+ import { AgentProfile } from "../profile.js";
4
+ import { ActiveTurn, AgentProtocolsHost, HeldDraft, InboxItem, RoomMemberView, TimelineItem } from "./views.js";
5
+ import { RoomSendMessageInput, RoomSubmitEventInput } from "./inputs.js";
6
+ /** `[host, roomId]`. Local room state is keyed by both: ADP room IDs are only
7
+ * recommended to be globally unique and one connector can span hosts. */
8
+ export type RoomKey = {
9
+ host: string;
10
+ roomId: string;
11
+ };
12
+ /** Latest verified head-advancing record and locally applied chain tip. */
13
+ export interface LocalRoomState {
14
+ host: string;
15
+ room: RoomResponse;
16
+ headSeq: number;
17
+ headHash?: string;
18
+ syncedSeq: number;
19
+ syncedHash?: string;
20
+ subscribed: boolean;
21
+ members: Map<AgentId, RoomMemberView>;
22
+ timeline: TimelineItem[];
23
+ records: ServerRecord[];
24
+ readSeq: number;
25
+ activeTurn?: ActiveTurn;
26
+ }
27
+ export type InboxEntryState = {
28
+ kind: "pending";
29
+ } | {
30
+ kind: "claimed";
31
+ } | {
32
+ kind: "deferred";
33
+ until: number;
34
+ } | {
35
+ kind: "acknowledged";
36
+ };
37
+ export interface InboxEntry {
38
+ item: InboxItem;
39
+ state: InboxEntryState;
40
+ }
41
+ export type HeldDraftRequest = {
42
+ kind: "message";
43
+ input: RoomSendMessageInput;
44
+ } | {
45
+ kind: "event";
46
+ input: RoomSubmitEventInput;
47
+ };
48
+ export interface HeldDraftEntry {
49
+ draft: HeldDraft;
50
+ request: HeldDraftRequest;
51
+ }
52
+ /**
53
+ * Durable working set the connector projects records into. `hosts` is operator
54
+ * configuration; the room, inbox, and draft maps are the materialized state a
55
+ * host persists and restores through {@link LocalConnector} `state`.
56
+ */
57
+ export declare class LocalConnectorState {
58
+ hosts: Map<string, AgentProtocolsHost>;
59
+ rooms: Map<string, LocalRoomState>;
60
+ profiles: Map<string, AgentProfile>;
61
+ joinRequests: Map<string, RoomJoinRequestStatus[]>;
62
+ agentStatuses: Map<string, Map<string, AgentStatus>>;
63
+ inbox: Map<string, InboxEntry>;
64
+ drafts: Map<string, HeldDraftEntry>;
65
+ }
66
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/local-connector/state.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEzE;yEACyE;AACzE,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAE7B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,KAAK,kCAAyC;IAC9C,KAAK,8BAAqC;IAC1C,QAAQ,4BAAoC;IAC5C,YAAY,uCAA8C;IAC1D,aAAa,wCAAgD;IAC7D,KAAK,0BAAiC;IACtC,MAAM,8BAAqC;CAC5C"}
@@ -0,0 +1,18 @@
1
+ // In-memory store the connector projects records into. The public
2
+ // LocalConnectorState is the durable snapshot a host persists and restores; the
3
+ // room, inbox, and draft entries are the working set the handlers mutate.
4
+ /**
5
+ * Durable working set the connector projects records into. `hosts` is operator
6
+ * configuration; the room, inbox, and draft maps are the materialized state a
7
+ * host persists and restores through {@link LocalConnector} `state`.
8
+ */
9
+ export class LocalConnectorState {
10
+ hosts = new Map();
11
+ rooms = new Map();
12
+ profiles = new Map();
13
+ joinRequests = new Map();
14
+ agentStatuses = new Map();
15
+ inbox = new Map();
16
+ drafts = new Map();
17
+ }
18
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/local-connector/state.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gFAAgF;AAChF,0EAA0E;AA6D1E;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAC9B,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC9C,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC1D,aAAa,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;CAC5C"}
@@ -0,0 +1,169 @@
1
+ import { AgentStatus, Role, RoomPolicy, RoomResponse, RoomState, ServerRecord, TypeDef, Visibility } from "../discourse.js";
2
+ import { AgentId } from "../identity.js";
3
+ import { LocalConnectorToolName } from "./catalog.js";
4
+ /**
5
+ * Connector sync marker for one room. Connectors key local room state by
6
+ * `(host, room_id)`: ADP room IDs are only recommended to be globally unique
7
+ * and a connector can be configured with multiple hosts. `head_seq` /
8
+ * `head_hash` are the latest locally verified head-advancing record per ADP
9
+ * Section 6.1.
10
+ */
11
+ export interface SyncState {
12
+ host: string;
13
+ room_id: string;
14
+ head_seq: number;
15
+ head_hash: string;
16
+ synced_seq: number;
17
+ remote_seq: number;
18
+ subscribed: boolean;
19
+ unread_count: number;
20
+ pending_inbox_count: number;
21
+ }
22
+ export interface AgentProtocolsHost {
23
+ host: string;
24
+ label?: string;
25
+ allowed: boolean;
26
+ features?: string[];
27
+ profile_service?: string;
28
+ last_checked_at?: number;
29
+ }
30
+ /** `removed` and `banned` are produced by accepted `room.member.remove` records. */
31
+ export type RoomMemberStatus = "active" | "left" | "removed" | "banned" | "unknown";
32
+ export interface RoomMemberProfile {
33
+ name?: string;
34
+ description?: string;
35
+ avatar_url?: string;
36
+ }
37
+ export interface RoomMemberView {
38
+ agent_id: AgentId;
39
+ role: Role;
40
+ status: RoomMemberStatus;
41
+ is_creator: boolean;
42
+ perspective?: string;
43
+ joined_seq?: number;
44
+ left_seq?: number | null;
45
+ last_event_seq?: number;
46
+ profile?: RoomMemberProfile;
47
+ extra?: Record<string, unknown>;
48
+ }
49
+ export interface TimelineItem {
50
+ room_id: string;
51
+ seq: number;
52
+ event_id: string;
53
+ type: string;
54
+ kind: string;
55
+ actor: AgentId;
56
+ created_at: number;
57
+ received_at: number;
58
+ summary: string;
59
+ content_type?: string;
60
+ content?: unknown;
61
+ mentions?: AgentId[];
62
+ references?: string[];
63
+ payload: unknown;
64
+ }
65
+ export type InboxKind = "room.message.new" | "room.mention" | "room.turn.assigned" | "room.steer" | "room.join.requested" | "room.join.approved" | "room.role.changed" | "room.member.removed" | "room.state.changed" | "room.event.custom";
66
+ export type InboxPriority = "low" | "normal" | "high";
67
+ export interface InboxItem {
68
+ id: string;
69
+ kind: InboxKind;
70
+ priority: InboxPriority;
71
+ room_id?: string;
72
+ seq?: number;
73
+ event_id?: string;
74
+ actor?: AgentId;
75
+ created_at: number;
76
+ requires_response: boolean;
77
+ deadline?: number | null;
78
+ reason: string;
79
+ suggested_tools?: LocalConnectorToolName[];
80
+ message?: unknown;
81
+ }
82
+ export type HeadMismatchPolicy = "hold" | "reject" | "send_anyway";
83
+ export type HeldDraftKind = "message" | "event";
84
+ export type DraftAction = "revise" | "send_as_is" | "stay_silent" | "send_anyway";
85
+ export interface HeldDraft {
86
+ id: string;
87
+ room_id: string;
88
+ kind: HeldDraftKind;
89
+ created_at: number;
90
+ base_seq?: number;
91
+ base_hash?: string;
92
+ current_sync: SyncState;
93
+ draft: unknown;
94
+ reason: string;
95
+ options?: DraftAction[];
96
+ }
97
+ export interface ActiveTurn {
98
+ turn_id: string;
99
+ speaker: AgentId;
100
+ assigned_seq: number;
101
+ expires_at?: number | null;
102
+ instruction?: string;
103
+ source_event_id: string;
104
+ }
105
+ export interface RoomSummary {
106
+ room_id: string;
107
+ host: string;
108
+ topic?: string;
109
+ status: RoomState;
110
+ visibility?: Visibility;
111
+ start_time?: number;
112
+ end_time?: number;
113
+ tags?: string[];
114
+ language?: string;
115
+ role?: Role;
116
+ unread_count: number;
117
+ pending_inbox_count: number;
118
+ }
119
+ export interface RoomStateView {
120
+ host: string;
121
+ room_id: string;
122
+ status: RoomState;
123
+ visibility?: Visibility;
124
+ topic?: string;
125
+ agenda?: string;
126
+ guidance?: string;
127
+ creator?: AgentId;
128
+ created_at?: number;
129
+ start_time?: number;
130
+ end_time?: number;
131
+ tags?: string[];
132
+ language?: string;
133
+ policy?: RoomPolicy;
134
+ types?: TypeDef[];
135
+ self_member?: RoomMemberView;
136
+ members_count: number;
137
+ active_turn?: ActiveTurn;
138
+ unread_count: number;
139
+ pending_inbox_count: number;
140
+ }
141
+ export type RoomsListMembership = "member" | "creator" | "moderator" | "pending" | "all";
142
+ export interface RoomWriteResult {
143
+ status: "sent" | "held" | "rejected";
144
+ /** Present on `held` and `rejected` results, e.g. `room_head_mismatch`. */
145
+ reason?: string;
146
+ record?: ServerRecord;
147
+ item?: TimelineItem;
148
+ draft?: HeldDraft;
149
+ changes?: TimelineItem[];
150
+ sync: SyncState;
151
+ }
152
+ export interface AgentStatusToolResult {
153
+ statuses?: AgentStatus[];
154
+ status?: AgentStatus;
155
+ sync?: SyncState;
156
+ }
157
+ export declare function syncStateFromRoomResponse(host: string, room: RoomResponse, options?: {
158
+ subscribed?: boolean;
159
+ unreadCount?: number;
160
+ pendingInboxCount?: number;
161
+ remoteSeq?: number;
162
+ }): SyncState;
163
+ export declare function roomSummaryFromResponse(host: string, room: RoomResponse, options?: {
164
+ role?: Role;
165
+ unreadCount?: number;
166
+ pendingInboxCount?: number;
167
+ }): RoomSummary;
168
+ export declare function timelineItemFromRecord(record: ServerRecord): TimelineItem;
169
+ //# sourceMappingURL=views.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/local-connector/views.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EAEX,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,OAAO,EACP,UAAU,EAEX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtD;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,YAAY,GACZ,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;AAChD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,CAAC;AAElF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,SAAS,GACT,WAAW,GACX,SAAS,GACT,KAAK,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACrC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,SAAS,CAaX;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACvB,GACL,WAAW,CAgBb;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAoBzE"}