exponential-sdk 1.27.0 → 1.28.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/README.md +36 -0
- package/dist/index.d.ts +855 -85
- package/dist/index.js +205 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,693 @@
|
|
|
1
1
|
import { TRPCClientError } from '@trpc/client';
|
|
2
2
|
export { TRPCClientError } from '@trpc/client';
|
|
3
3
|
|
|
4
|
+
type CeremonyKind = 'STANDUP' | 'PLANNING' | 'REVIEW' | 'RETROSPECTIVE' | 'PRIORITISATION' | 'ALL_HANDS' | 'ONE_ON_ONE' | 'CUSTOM';
|
|
5
|
+
/**
|
|
6
|
+
* Where an occurrence is in its lifecycle. `SKIPPED` is only ever set by the
|
|
7
|
+
* owner (with a reason) — an empty agenda offers a skip, it never takes one.
|
|
8
|
+
*/
|
|
9
|
+
type CeremonyOccurrenceStatus = 'PLANNED' | 'AGENDA_CIRCULATED' | 'IN_PROGRESS' | 'CAPTURED' | 'FOLLOWED_THROUGH' | 'SKIPPED';
|
|
10
|
+
interface CeremonyUserRef {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string | null;
|
|
13
|
+
email: string | null;
|
|
14
|
+
image?: string | null;
|
|
15
|
+
}
|
|
16
|
+
interface CeremonyNamedRef {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
slug: string;
|
|
20
|
+
}
|
|
21
|
+
/** One section of a ceremony's agenda template, in running order. */
|
|
22
|
+
interface CeremonyAgendaTemplateSection {
|
|
23
|
+
key: string;
|
|
24
|
+
/** A section type the agenda generator binds a query to (`blockers`, `carried_over`, `okr_review`, …). */
|
|
25
|
+
type: string;
|
|
26
|
+
title: string;
|
|
27
|
+
minutes?: number;
|
|
28
|
+
config?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
/** A row of `ceremonies.list` — the Settings → Ceremonies table. */
|
|
31
|
+
interface CeremonySummary {
|
|
32
|
+
id: string;
|
|
33
|
+
workspaceId: string;
|
|
34
|
+
name: string;
|
|
35
|
+
slug: string;
|
|
36
|
+
/** Title patterns used to auto-attach recorded meetings and calendar events. */
|
|
37
|
+
aliases: string[];
|
|
38
|
+
kind: CeremonyKind;
|
|
39
|
+
/** Icon key; null shows the kind's default. */
|
|
40
|
+
icon: string | null;
|
|
41
|
+
/** RRULE body, e.g. `FREQ=WEEKLY;BYDAY=MO;BYHOUR=10;BYMINUTE=0`. Null only on a one-off. */
|
|
42
|
+
cadenceRule: string | null;
|
|
43
|
+
/** IANA zone the cadence is evaluated in. */
|
|
44
|
+
timezone: string;
|
|
45
|
+
startsOn: Date;
|
|
46
|
+
durationMinutes: number;
|
|
47
|
+
/** Hours before the start at which the agenda is generated and circulated. */
|
|
48
|
+
leadTimeHours: number;
|
|
49
|
+
isActive: boolean;
|
|
50
|
+
ownerId: string;
|
|
51
|
+
productId: string | null;
|
|
52
|
+
teamId: string | null;
|
|
53
|
+
includeProjects: boolean;
|
|
54
|
+
/** Run "Extract outputs" on every recording that attaches to an occurrence. */
|
|
55
|
+
autoExtractOutputs: boolean;
|
|
56
|
+
projects: Array<{
|
|
57
|
+
projectId: string;
|
|
58
|
+
}>;
|
|
59
|
+
owner: CeremonyUserRef;
|
|
60
|
+
_count: {
|
|
61
|
+
occurrences: number;
|
|
62
|
+
participants: number;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Only on `ceremonies.list`: whether the caller may add, move or skip
|
|
66
|
+
* occurrences (the owner, or a workspace owner/admin).
|
|
67
|
+
*/
|
|
68
|
+
canManage?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/** A `ceremonies.listForProject` row: the summary plus the next planned occurrence. */
|
|
71
|
+
interface ProjectCeremony extends CeremonySummary {
|
|
72
|
+
/** Zero or one entry — the next non-skipped occurrence from now. */
|
|
73
|
+
occurrences: Array<{
|
|
74
|
+
id: string;
|
|
75
|
+
scheduledStart: Date;
|
|
76
|
+
status: CeremonyOccurrenceStatus;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A recorded meeting that captured an occurrence. Meetings the caller cannot
|
|
81
|
+
* view (ADR-0014) come back as existence-only stubs: `visible: false` with
|
|
82
|
+
* everything else null.
|
|
83
|
+
*/
|
|
84
|
+
interface CeremonyRecordedMeeting {
|
|
85
|
+
id: string;
|
|
86
|
+
visible: boolean;
|
|
87
|
+
title: string | null;
|
|
88
|
+
meetingDate: Date | null;
|
|
89
|
+
processedAt?: Date | null;
|
|
90
|
+
}
|
|
91
|
+
/** An occurrence row as listed inside `ceremonies.get`. */
|
|
92
|
+
interface CeremonyOccurrenceRow {
|
|
93
|
+
id: string;
|
|
94
|
+
scheduledStart: Date;
|
|
95
|
+
scheduledEnd: Date;
|
|
96
|
+
/** The cadence tick this occurrence accounts for; differs from `scheduledStart` once moved, null when added off-cadence. */
|
|
97
|
+
cadenceStart: Date | null;
|
|
98
|
+
status: CeremonyOccurrenceStatus;
|
|
99
|
+
skipReason: string | null;
|
|
100
|
+
agendaGeneratedAt: Date | null;
|
|
101
|
+
agendaCirculatedAt: Date | null;
|
|
102
|
+
/** The calendar booking for this occurrence, when the scheduling flow made one. */
|
|
103
|
+
scheduledMeetingId: string | null;
|
|
104
|
+
recordedMeetings: CeremonyRecordedMeeting[];
|
|
105
|
+
}
|
|
106
|
+
/** Full ceremony definition from `ceremonies.get`. */
|
|
107
|
+
interface Ceremony {
|
|
108
|
+
id: string;
|
|
109
|
+
workspaceId: string;
|
|
110
|
+
productId: string | null;
|
|
111
|
+
teamId: string | null;
|
|
112
|
+
name: string;
|
|
113
|
+
slug: string;
|
|
114
|
+
aliases: string[];
|
|
115
|
+
kind: CeremonyKind;
|
|
116
|
+
icon: string | null;
|
|
117
|
+
/** Markdown. */
|
|
118
|
+
purpose: string | null;
|
|
119
|
+
/** Markdown — what this ceremony is explicitly not for. */
|
|
120
|
+
notFor: string | null;
|
|
121
|
+
/** Markdown — required inputs. */
|
|
122
|
+
inputs: string | null;
|
|
123
|
+
/** Markdown — expected outputs. */
|
|
124
|
+
outputs: string | null;
|
|
125
|
+
/** Null only on a one-off. */
|
|
126
|
+
cadenceRule: string | null;
|
|
127
|
+
timezone: string;
|
|
128
|
+
startsOn: Date;
|
|
129
|
+
durationMinutes: number;
|
|
130
|
+
leadTimeHours: number;
|
|
131
|
+
ownerId: string;
|
|
132
|
+
agendaTemplate: CeremonyAgendaTemplateSection[];
|
|
133
|
+
includeProjects: boolean;
|
|
134
|
+
autoExtractOutputs: boolean;
|
|
135
|
+
matrixRoomId: string | null;
|
|
136
|
+
/** The video room the ceremony meets in; recordings from it file themselves here. */
|
|
137
|
+
meetingUrl: string | null;
|
|
138
|
+
isActive: boolean;
|
|
139
|
+
/** A single meeting booked from a project, not part of the operating rhythm. */
|
|
140
|
+
isOneOff: boolean;
|
|
141
|
+
createdById: string;
|
|
142
|
+
createdAt: Date;
|
|
143
|
+
updatedAt: Date;
|
|
144
|
+
owner: CeremonyUserRef;
|
|
145
|
+
product: CeremonyNamedRef | null;
|
|
146
|
+
team: CeremonyNamedRef | null;
|
|
147
|
+
projects: Array<{
|
|
148
|
+
projectId: string;
|
|
149
|
+
project: CeremonyNamedRef;
|
|
150
|
+
}>;
|
|
151
|
+
participants: Array<{
|
|
152
|
+
id: string;
|
|
153
|
+
ceremonyId: string;
|
|
154
|
+
userId: string;
|
|
155
|
+
user: CeremonyUserRef;
|
|
156
|
+
}>;
|
|
157
|
+
/**
|
|
158
|
+
* Up to 30 upcoming (furthest first) then up to 50 past (most recent first)
|
|
159
|
+
* — newest first overall.
|
|
160
|
+
*/
|
|
161
|
+
occurrences: CeremonyOccurrenceRow[];
|
|
162
|
+
/** Whether the caller may edit the definition. */
|
|
163
|
+
canEdit: boolean;
|
|
164
|
+
/** Whether the caller may add, move or skip occurrences. */
|
|
165
|
+
canManage: boolean;
|
|
166
|
+
}
|
|
167
|
+
/** The bare ceremony row returned by `create` / `update`. */
|
|
168
|
+
type CeremonyRecord = Omit<Ceremony, 'owner' | 'product' | 'team' | 'projects' | 'participants' | 'occurrences' | 'canEdit' | 'canManage'>;
|
|
169
|
+
interface CeremonyWriteResult {
|
|
170
|
+
ceremony: CeremonyRecord;
|
|
171
|
+
/** Occurrences created for the rolling window by this write. */
|
|
172
|
+
occurrencesCreated: number;
|
|
173
|
+
}
|
|
174
|
+
/** A row of `ceremonies.listOccurrences` (ordered by start ascending, max 200). */
|
|
175
|
+
interface CeremonyOccurrenceListRow {
|
|
176
|
+
id: string;
|
|
177
|
+
ceremonyId: string;
|
|
178
|
+
scheduledStart: Date;
|
|
179
|
+
scheduledEnd: Date;
|
|
180
|
+
cadenceStart: Date | null;
|
|
181
|
+
status: CeremonyOccurrenceStatus;
|
|
182
|
+
ceremony: {
|
|
183
|
+
id: string;
|
|
184
|
+
name: string;
|
|
185
|
+
kind: CeremonyKind;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
type CeremonyAgendaRefType = 'action' | 'decision' | 'key_result' | 'goal' | 'ticket' | 'cycle' | 'meeting' | 'project' | 'text';
|
|
189
|
+
interface CeremonyAgendaItem {
|
|
190
|
+
/** Stable per occurrence: `<sectionKey>:<refType>:<refId>` for query items. */
|
|
191
|
+
id: string;
|
|
192
|
+
sectionKey: string;
|
|
193
|
+
title: string;
|
|
194
|
+
refType: CeremonyAgendaRefType;
|
|
195
|
+
/** The underlying record's id; for `text` items, the item id itself. */
|
|
196
|
+
refId: string;
|
|
197
|
+
goalId?: number | null;
|
|
198
|
+
keyResultId?: string | null;
|
|
199
|
+
goalTitle?: string | null;
|
|
200
|
+
keyResultTitle?: string | null;
|
|
201
|
+
/** Set when carried from a previous occurrence's unresolved list. */
|
|
202
|
+
carriedFromOccurrenceId?: string | null;
|
|
203
|
+
carryCount?: number | null;
|
|
204
|
+
/** Set when a person added the item by hand; those survive regeneration. */
|
|
205
|
+
addedByUserId?: string | null;
|
|
206
|
+
/** ISO timestamp; null/absent while unresolved. */
|
|
207
|
+
resolvedAt?: string | null;
|
|
208
|
+
order: number;
|
|
209
|
+
/** Who the item belongs to (a project's DRI). */
|
|
210
|
+
owner?: string | null;
|
|
211
|
+
detail?: string | null;
|
|
212
|
+
/** `detail` split into lines for the Matrix post; older snapshots hold plain strings. */
|
|
213
|
+
lines?: Array<unknown[] | string> | null;
|
|
214
|
+
/** App-relative link to the record. */
|
|
215
|
+
href?: string | null;
|
|
216
|
+
}
|
|
217
|
+
interface CeremonyAgendaSection {
|
|
218
|
+
key: string;
|
|
219
|
+
type: string;
|
|
220
|
+
title: string;
|
|
221
|
+
minutes?: number | null;
|
|
222
|
+
items: CeremonyAgendaItem[];
|
|
223
|
+
/** Why the section is empty, when its query ran and found nothing. */
|
|
224
|
+
emptyReason?: string | null;
|
|
225
|
+
}
|
|
226
|
+
interface CeremonyAgendaMatrixPost {
|
|
227
|
+
roomId: string;
|
|
228
|
+
serverId: string;
|
|
229
|
+
eventId: string;
|
|
230
|
+
postedAt: string;
|
|
231
|
+
postedById: string | null;
|
|
232
|
+
/** Set when the post was taken back out of the room. */
|
|
233
|
+
removedAt?: string | null;
|
|
234
|
+
removedById?: string | null;
|
|
235
|
+
}
|
|
236
|
+
/** The agenda snapshot stored on an occurrence (ISO strings, not Dates). */
|
|
237
|
+
interface CeremonyAgenda {
|
|
238
|
+
version: 1;
|
|
239
|
+
generatedAt: string;
|
|
240
|
+
sections: CeremonyAgendaSection[];
|
|
241
|
+
/** Markdown narrative rendered from the sections. */
|
|
242
|
+
narrative?: string | null;
|
|
243
|
+
narratedAt?: string | null;
|
|
244
|
+
matrixPosts?: CeremonyAgendaMatrixPost[];
|
|
245
|
+
}
|
|
246
|
+
/** Why an empty-agenda skip is (not) being offered to the owner. */
|
|
247
|
+
interface CeremonySkipProposal {
|
|
248
|
+
proposed: boolean;
|
|
249
|
+
reason: 'agenda-has-items' | 'blocker-flagged' | 'no-agenda-yet' | 'not-async' | 'already-resolved' | null;
|
|
250
|
+
}
|
|
251
|
+
/** One occurrence — the ceremony meeting page — from `ceremonies.getOccurrence`. */
|
|
252
|
+
interface CeremonyOccurrence {
|
|
253
|
+
id: string;
|
|
254
|
+
ceremonyId: string;
|
|
255
|
+
workspaceId: string;
|
|
256
|
+
scheduledStart: Date;
|
|
257
|
+
scheduledEnd: Date;
|
|
258
|
+
cadenceStart: Date | null;
|
|
259
|
+
status: CeremonyOccurrenceStatus;
|
|
260
|
+
skipReason: string | null;
|
|
261
|
+
/** True when this is a one-off meeting booked from a project. */
|
|
262
|
+
isOneOff: boolean;
|
|
263
|
+
/** The ceremony's purpose (for a one-off, what this meeting is about). */
|
|
264
|
+
purpose: string | null;
|
|
265
|
+
/** The calendar booking, when one exists. Attendee names only, no addresses. */
|
|
266
|
+
scheduledMeeting: {
|
|
267
|
+
id: string;
|
|
268
|
+
status: string;
|
|
269
|
+
organizerId: string | null;
|
|
270
|
+
attendees: Array<{
|
|
271
|
+
userId: string | null;
|
|
272
|
+
name: string | null;
|
|
273
|
+
}>;
|
|
274
|
+
} | null;
|
|
275
|
+
/** The ceremony definition as it was when this occurrence was created. */
|
|
276
|
+
definitionSnapshot: unknown;
|
|
277
|
+
/** Null until an agenda has been generated. */
|
|
278
|
+
agenda: CeremonyAgenda | null;
|
|
279
|
+
agendaGeneratedAt: Date | null;
|
|
280
|
+
agendaCirculatedAt: Date | null;
|
|
281
|
+
scheduledMeetingId: string | null;
|
|
282
|
+
previousOccurrenceId: string | null;
|
|
283
|
+
/** The occurrence's notes canvas — a Knowledge Page, created with the agenda. */
|
|
284
|
+
notesPageId: string | null;
|
|
285
|
+
createdAt: Date;
|
|
286
|
+
updatedAt: Date;
|
|
287
|
+
ceremony: {
|
|
288
|
+
id: string;
|
|
289
|
+
name: string;
|
|
290
|
+
kind: CeremonyKind;
|
|
291
|
+
timezone: string;
|
|
292
|
+
durationMinutes: number;
|
|
293
|
+
leadTimeHours: number;
|
|
294
|
+
ownerId: string;
|
|
295
|
+
matrixRoomId: string | null;
|
|
296
|
+
agendaTemplate: CeremonyAgendaTemplateSection[];
|
|
297
|
+
isOneOff: boolean;
|
|
298
|
+
purpose: string | null;
|
|
299
|
+
owner: CeremonyUserRef;
|
|
300
|
+
};
|
|
301
|
+
recordedMeetings: CeremonyRecordedMeeting[];
|
|
302
|
+
/** Whether the caller may generate, skip or post this occurrence's agenda. */
|
|
303
|
+
canGenerate: boolean;
|
|
304
|
+
skipProposal: CeremonySkipProposal;
|
|
305
|
+
}
|
|
306
|
+
/** A per-person async question (only STANDUP has them today). */
|
|
307
|
+
interface CeremonyUpdateQuestion {
|
|
308
|
+
key: string;
|
|
309
|
+
prompt: string;
|
|
310
|
+
placeholder: string;
|
|
311
|
+
draftFrom: string[];
|
|
312
|
+
}
|
|
313
|
+
/** The caller's own async update for an occurrence. Answers are Markdown keyed by question key. */
|
|
314
|
+
interface CeremonyMyUpdate {
|
|
315
|
+
questions: CeremonyUpdateQuestion[];
|
|
316
|
+
draftAnswers: Record<string, string>;
|
|
317
|
+
answers: Record<string, string>;
|
|
318
|
+
draftedAt: Date | null;
|
|
319
|
+
submittedAt: Date | null;
|
|
320
|
+
flaggedBlocker: boolean;
|
|
321
|
+
/** Only on `myOccurrenceUpdate`. */
|
|
322
|
+
isParticipant?: boolean;
|
|
323
|
+
}
|
|
324
|
+
interface CeremonyParticipantUpdate {
|
|
325
|
+
userId: string;
|
|
326
|
+
name: string | null;
|
|
327
|
+
email: string | null;
|
|
328
|
+
image: string | null;
|
|
329
|
+
answers: Record<string, string>;
|
|
330
|
+
/** Null for participants who haven't submitted. */
|
|
331
|
+
submittedAt: Date | null;
|
|
332
|
+
flaggedBlocker: boolean;
|
|
333
|
+
}
|
|
334
|
+
/** Every participant's submitted update — the meeting, held in writing. */
|
|
335
|
+
interface CeremonyUpdateSummary {
|
|
336
|
+
questions: CeremonyUpdateQuestion[];
|
|
337
|
+
participants: CeremonyParticipantUpdate[];
|
|
338
|
+
submittedCount: number;
|
|
339
|
+
blockedCount: number;
|
|
340
|
+
}
|
|
341
|
+
interface CeremonyAgendaResult {
|
|
342
|
+
occurrenceId: string;
|
|
343
|
+
agenda: CeremonyAgenda;
|
|
344
|
+
}
|
|
345
|
+
interface CeremonyGenerateAgendaResult extends CeremonyAgendaResult {
|
|
346
|
+
itemCount: number;
|
|
347
|
+
/** True when `circulate` was requested and participants were notified. */
|
|
348
|
+
circulated: boolean;
|
|
349
|
+
}
|
|
350
|
+
interface CeremonySkipResult {
|
|
351
|
+
id: string;
|
|
352
|
+
status: CeremonyOccurrenceStatus;
|
|
353
|
+
skipReason: string | null;
|
|
354
|
+
}
|
|
355
|
+
type CeremonyMatrixPostResult = {
|
|
356
|
+
kind: 'posted';
|
|
357
|
+
roomId: string;
|
|
358
|
+
eventId: string;
|
|
359
|
+
} | {
|
|
360
|
+
kind: 'no-room';
|
|
361
|
+
} | {
|
|
362
|
+
kind: 'no-agenda';
|
|
363
|
+
} | {
|
|
364
|
+
kind: 'already-posted';
|
|
365
|
+
roomId: string;
|
|
366
|
+
postedAt: string;
|
|
367
|
+
} | {
|
|
368
|
+
kind: 'no-server';
|
|
369
|
+
reason: string;
|
|
370
|
+
} | {
|
|
371
|
+
kind: 'failed';
|
|
372
|
+
reason: string;
|
|
373
|
+
};
|
|
374
|
+
type CeremonyMatrixRemoveResult = {
|
|
375
|
+
kind: 'removed';
|
|
376
|
+
roomId: string;
|
|
377
|
+
eventId: string;
|
|
378
|
+
} | {
|
|
379
|
+
kind: 'already-removed';
|
|
380
|
+
roomId: string;
|
|
381
|
+
removedAt: string;
|
|
382
|
+
} | {
|
|
383
|
+
kind: 'not-found';
|
|
384
|
+
} | {
|
|
385
|
+
kind: 'failed';
|
|
386
|
+
reason: string;
|
|
387
|
+
};
|
|
388
|
+
/** A built-in template for one ceremony kind ("Add from template"). */
|
|
389
|
+
interface CeremonyTemplate {
|
|
390
|
+
kind: CeremonyKind;
|
|
391
|
+
name: string;
|
|
392
|
+
slug: string;
|
|
393
|
+
aliases: string[];
|
|
394
|
+
purpose: string;
|
|
395
|
+
notFor: string;
|
|
396
|
+
inputs: string;
|
|
397
|
+
outputs: string;
|
|
398
|
+
cadenceRule: string;
|
|
399
|
+
durationMinutes: number;
|
|
400
|
+
leadTimeHours: number;
|
|
401
|
+
agendaTemplate: CeremonyAgendaTemplateSection[];
|
|
402
|
+
}
|
|
403
|
+
interface CeremonyImportResult {
|
|
404
|
+
slug: string;
|
|
405
|
+
action: 'created' | 'updated';
|
|
406
|
+
occurrencesCreated: number;
|
|
407
|
+
/** Owner / participant names that matched no workspace member. */
|
|
408
|
+
unresolved: string[];
|
|
409
|
+
}
|
|
410
|
+
interface CeremonyBackfillRow {
|
|
411
|
+
meetingId: string;
|
|
412
|
+
title: string | null;
|
|
413
|
+
anchorDate: Date;
|
|
414
|
+
occurrenceId: string | null;
|
|
415
|
+
ceremonyName: string | null;
|
|
416
|
+
scheduledStart: Date | null;
|
|
417
|
+
reason: string;
|
|
418
|
+
}
|
|
419
|
+
interface CeremonyBackfillResult {
|
|
420
|
+
dryRun: boolean;
|
|
421
|
+
occurrencesCreated: number;
|
|
422
|
+
scanned: number;
|
|
423
|
+
matched: number;
|
|
424
|
+
rows: CeremonyBackfillRow[];
|
|
425
|
+
}
|
|
426
|
+
interface CeremonyMeetingAttachment {
|
|
427
|
+
meetingId: string;
|
|
428
|
+
occurrenceId: string | null;
|
|
429
|
+
}
|
|
430
|
+
/** One row of a project's Meetings timeline (`listOccurrencesForProject`), newest first. */
|
|
431
|
+
interface ProjectOccurrenceRow {
|
|
432
|
+
occurrenceId: string;
|
|
433
|
+
ceremonyId: string;
|
|
434
|
+
ceremonyName: string;
|
|
435
|
+
isOneOff: boolean;
|
|
436
|
+
/** A one-off's purpose; null for recurring ceremonies. */
|
|
437
|
+
purpose: string | null;
|
|
438
|
+
scheduledStart: Date;
|
|
439
|
+
scheduledEnd: Date;
|
|
440
|
+
status: CeremonyOccurrenceStatus;
|
|
441
|
+
attendeeCount: number;
|
|
442
|
+
/** App-relative occurrence page; null for project-only guests who can't open it. */
|
|
443
|
+
href: string | null;
|
|
444
|
+
}
|
|
445
|
+
/** The ceremony that meets in a video room, and the occurrence on at the time asked. */
|
|
446
|
+
interface CeremonyMeetingUrlMatch {
|
|
447
|
+
workspace: {
|
|
448
|
+
id: string;
|
|
449
|
+
name: string;
|
|
450
|
+
};
|
|
451
|
+
ceremony: {
|
|
452
|
+
id: string;
|
|
453
|
+
name: string;
|
|
454
|
+
};
|
|
455
|
+
/** Set when the ceremony reviews exactly one project. */
|
|
456
|
+
project: {
|
|
457
|
+
id: string;
|
|
458
|
+
name: string;
|
|
459
|
+
} | null;
|
|
460
|
+
occurrence: {
|
|
461
|
+
id: string;
|
|
462
|
+
scheduledStart: Date;
|
|
463
|
+
scheduledEnd: Date;
|
|
464
|
+
} | null;
|
|
465
|
+
}
|
|
466
|
+
interface CeremonyAddedOccurrence {
|
|
467
|
+
id: string;
|
|
468
|
+
scheduledStart: Date;
|
|
469
|
+
scheduledEnd: Date;
|
|
470
|
+
cadenceStart: Date | null;
|
|
471
|
+
status: CeremonyOccurrenceStatus;
|
|
472
|
+
}
|
|
473
|
+
interface CeremonyRescheduledOccurrence {
|
|
474
|
+
id: string;
|
|
475
|
+
scheduledStart: Date;
|
|
476
|
+
scheduledEnd: Date;
|
|
477
|
+
/** The old start; null when the new time equals the old one (no-op). */
|
|
478
|
+
movedFrom: Date | null;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/** Definition fields shared by create and update. */
|
|
482
|
+
interface CeremonyFields {
|
|
483
|
+
/** Max 120 characters. */
|
|
484
|
+
name: string;
|
|
485
|
+
/** Unique per workspace; derived from `name` when omitted on create. */
|
|
486
|
+
slug?: string;
|
|
487
|
+
/** Title patterns that auto-attach recorded meetings (max 20). */
|
|
488
|
+
aliases?: string[];
|
|
489
|
+
/** Defaults to `CUSTOM`. Drives the default agenda and the async questions. */
|
|
490
|
+
kind?: CeremonyKind;
|
|
491
|
+
/** Icon key; null resets to the kind's default. */
|
|
492
|
+
icon?: string | null;
|
|
493
|
+
purpose?: string | null;
|
|
494
|
+
notFor?: string | null;
|
|
495
|
+
inputs?: string | null;
|
|
496
|
+
outputs?: string | null;
|
|
497
|
+
/** RRULE body, e.g. `FREQ=WEEKLY;BYDAY=MO;BYHOUR=10;BYMINUTE=0`. Validated server-side. */
|
|
498
|
+
cadenceRule: string;
|
|
499
|
+
/** IANA zone, e.g. `Europe/Madrid`. */
|
|
500
|
+
timezone: string;
|
|
501
|
+
/** Anchor date the cadence expands from. */
|
|
502
|
+
startsOn: Date;
|
|
503
|
+
/** 5-1440; defaults to 30. */
|
|
504
|
+
durationMinutes?: number;
|
|
505
|
+
/** 0-336; defaults to 24. */
|
|
506
|
+
leadTimeHours?: number;
|
|
507
|
+
/** Defaults to the caller on create. */
|
|
508
|
+
ownerId?: string;
|
|
509
|
+
productId?: string | null;
|
|
510
|
+
teamId?: string | null;
|
|
511
|
+
/** Projects in the same workspace. Replaces the whole set on update. */
|
|
512
|
+
projectIds?: string[];
|
|
513
|
+
/** Replaces the whole set on update. */
|
|
514
|
+
participantUserIds?: string[];
|
|
515
|
+
agendaTemplate?: CeremonyAgendaTemplateSection[];
|
|
516
|
+
/** Append the linked-projects section to every agenda (default true). */
|
|
517
|
+
includeProjects?: boolean;
|
|
518
|
+
matrixRoomId?: string | null;
|
|
519
|
+
/** Video room link; recordings from it file themselves here. Empty string clears it. */
|
|
520
|
+
meetingUrl?: string | null;
|
|
521
|
+
/** Run "Extract outputs" on every attached recording (default false). */
|
|
522
|
+
autoExtractOutputs?: boolean;
|
|
523
|
+
}
|
|
524
|
+
interface CeremonyCreateInput extends CeremonyFields {
|
|
525
|
+
workspaceId: string;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Partial edit. Changing the cadence, zone, anchor or duration deletes future
|
|
529
|
+
* PLANNED occurrences with no booking or recording, along with any agenda, notes
|
|
530
|
+
* link and async updates on them, and recreates them with new ids. Occurrences
|
|
531
|
+
* moved or added by hand stay.
|
|
532
|
+
*/
|
|
533
|
+
interface CeremonyUpdateInput extends Partial<CeremonyFields> {
|
|
534
|
+
workspaceId: string;
|
|
535
|
+
id: string;
|
|
536
|
+
/** false retires the ceremony; true re-activates it and refills its window. */
|
|
537
|
+
isActive?: boolean;
|
|
538
|
+
}
|
|
539
|
+
interface CeremonyListOccurrencesInput {
|
|
540
|
+
workspaceId: string;
|
|
541
|
+
from: Date;
|
|
542
|
+
to: Date;
|
|
543
|
+
ceremonyId?: string;
|
|
544
|
+
}
|
|
545
|
+
/** An import-file definition: the template shape keyed by slug, people by name or email. */
|
|
546
|
+
interface CeremonyImportDefinition extends Partial<Omit<CeremonyFields, 'ownerId' | 'participantUserIds' | 'productId' | 'teamId' | 'projectIds' | 'slug'>> {
|
|
547
|
+
slug: string;
|
|
548
|
+
ownerName?: string;
|
|
549
|
+
participantNames?: string[];
|
|
550
|
+
}
|
|
551
|
+
interface CeremonyImportInput {
|
|
552
|
+
workspaceId: string;
|
|
553
|
+
/** 1-50 definitions. */
|
|
554
|
+
definitions: CeremonyImportDefinition[];
|
|
555
|
+
/** Default zone for definitions that carry none. */
|
|
556
|
+
timezone?: string;
|
|
557
|
+
/** Default anchor for definitions that carry none. */
|
|
558
|
+
startsOn?: Date;
|
|
559
|
+
}
|
|
560
|
+
interface CeremonySaveMyUpdateInput {
|
|
561
|
+
workspaceId: string;
|
|
562
|
+
occurrenceId: string;
|
|
563
|
+
/** Markdown answers keyed by question key (`done`, `today`, `blockers` for a standup). */
|
|
564
|
+
answers: Record<string, string>;
|
|
565
|
+
flaggedBlocker?: boolean;
|
|
566
|
+
/** true submits; false reopens a submitted update; omitted leaves it as is. */
|
|
567
|
+
submit?: boolean;
|
|
568
|
+
}
|
|
569
|
+
interface CeremonyAddAgendaItemInput {
|
|
570
|
+
workspaceId: string;
|
|
571
|
+
occurrenceId: string;
|
|
572
|
+
/** The agenda section's `key`. */
|
|
573
|
+
sectionKey: string;
|
|
574
|
+
/** Max 300 characters. */
|
|
575
|
+
title: string;
|
|
576
|
+
/** Max 500 characters. */
|
|
577
|
+
detail?: string | null;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Ceremonies — recurring meeting definitions and their occurrences (ADR-0059).
|
|
581
|
+
*
|
|
582
|
+
* A ceremony is the definition listed at Settings → Ceremonies; an occurrence
|
|
583
|
+
* is one scheduled instance of it, the page at
|
|
584
|
+
* `/w/<slug>/ceremonies/<ceremonyId>/<occurrenceId>`. Decisions logged in an
|
|
585
|
+
* occurrence live in {@link DecisionsApi} (`occurrenceId` on the decision).
|
|
586
|
+
*
|
|
587
|
+
* Reads need workspace `view`; writes need `edit`. Generating, skipping or
|
|
588
|
+
* posting an agenda additionally needs to be the ceremony owner (or a
|
|
589
|
+
* workspace owner/admin); import and backfill need `manage_members`.
|
|
590
|
+
*/
|
|
591
|
+
declare class CeremoniesApi {
|
|
592
|
+
private client;
|
|
593
|
+
constructor(client: TrpcClient);
|
|
594
|
+
/** Built-in templates, one per kind — the "Add from template" list. */
|
|
595
|
+
templates(): Promise<CeremonyTemplate[]>;
|
|
596
|
+
/** Ceremonies of a workspace, active first then by name. Inactive ones only on request. */
|
|
597
|
+
list(workspaceId: string, options?: {
|
|
598
|
+
includeInactive?: boolean;
|
|
599
|
+
}): Promise<CeremonySummary[]>;
|
|
600
|
+
/** Active ceremonies linked to a project, each with its next planned occurrence. */
|
|
601
|
+
listForProject(projectId: string): Promise<ProjectCeremony[]>;
|
|
602
|
+
/**
|
|
603
|
+
* A project's Meetings timeline: occurrences of the ceremonies reviewing it
|
|
604
|
+
* (one-offs included), two weeks back to one week ahead by default, newest
|
|
605
|
+
* first, at most `perCeremony` (default 5) per recurring ceremony.
|
|
606
|
+
*/
|
|
607
|
+
listOccurrencesForProject(input: {
|
|
608
|
+
projectId: string;
|
|
609
|
+
from?: Date;
|
|
610
|
+
to?: Date;
|
|
611
|
+
perCeremony?: number;
|
|
612
|
+
}): Promise<ProjectOccurrenceRow[]>;
|
|
613
|
+
/**
|
|
614
|
+
* The ceremony that meets in a video room, with the occurrence on at `at`
|
|
615
|
+
* (default now). Searches all your workspaces unless `workspaceId` narrows
|
|
616
|
+
* it; null when nothing (or nothing unambiguous) matches.
|
|
617
|
+
*/
|
|
618
|
+
matchMeetingUrl(input: {
|
|
619
|
+
url: string;
|
|
620
|
+
at?: Date;
|
|
621
|
+
workspaceId?: string;
|
|
622
|
+
}): Promise<CeremonyMeetingUrlMatch | null>;
|
|
623
|
+
/** One ceremony with participants, projects and its recent + upcoming occurrences. */
|
|
624
|
+
get(workspaceId: string, id: string): Promise<Ceremony>;
|
|
625
|
+
/** Occurrences starting inside a window, across ceremonies or for one (max 200). */
|
|
626
|
+
listOccurrences(input: CeremonyListOccurrencesInput): Promise<CeremonyOccurrenceListRow[]>;
|
|
627
|
+
/** One occurrence — the meeting page — with its agenda, ceremony and recordings. */
|
|
628
|
+
getOccurrence(workspaceId: string, occurrenceId: string): Promise<CeremonyOccurrence>;
|
|
629
|
+
/** The caller's own async update for an occurrence. */
|
|
630
|
+
myUpdate(workspaceId: string, occurrenceId: string): Promise<CeremonyMyUpdate>;
|
|
631
|
+
/** Every participant's submitted update, and who hasn't answered. */
|
|
632
|
+
updateSummary(workspaceId: string, occurrenceId: string): Promise<CeremonyUpdateSummary>;
|
|
633
|
+
/** Draft the caller's answers from their activity since the previous occurrence. */
|
|
634
|
+
draftMyUpdate(workspaceId: string, occurrenceId: string): Promise<CeremonyMyUpdate>;
|
|
635
|
+
/** Save, submit or reopen the caller's own answers. */
|
|
636
|
+
saveMyUpdate(input: CeremonySaveMyUpdateInput): Promise<CeremonyMyUpdate>;
|
|
637
|
+
/**
|
|
638
|
+
* Generate or regenerate an occurrence's agenda. `circulate` also notifies
|
|
639
|
+
* participants and posts to the ceremony's Matrix room, and it re-sends both
|
|
640
|
+
* if they already went out, so don't retry it blindly.
|
|
641
|
+
*/
|
|
642
|
+
generateAgenda(workspaceId: string, occurrenceId: string, options?: {
|
|
643
|
+
circulate?: boolean;
|
|
644
|
+
}): Promise<CeremonyGenerateAgendaResult>;
|
|
645
|
+
/**
|
|
646
|
+
* Skip an occurrence with a reason (1-500 characters). Participants are
|
|
647
|
+
* told. Skipping a booked one-off cancels the meeting: every attendee with an
|
|
648
|
+
* address gets a calendar cancellation, the ceremony is retired, and it can't
|
|
649
|
+
* be unskipped.
|
|
650
|
+
*/
|
|
651
|
+
skipOccurrence(workspaceId: string, occurrenceId: string, reason: string): Promise<CeremonySkipResult>;
|
|
652
|
+
unskipOccurrence(workspaceId: string, occurrenceId: string): Promise<CeremonySkipResult>;
|
|
653
|
+
/** Add one occurrence at any time — a meeting off the cadence (owner, or workspace owner/admin). */
|
|
654
|
+
addOccurrence(workspaceId: string, ceremonyId: string, scheduledStart: Date): Promise<CeremonyAddedOccurrence>;
|
|
655
|
+
/**
|
|
656
|
+
* Move an occurrence that hasn't happened to another time (owner, or
|
|
657
|
+
* workspace owner/admin). It keeps its agenda, notes, updates and recordings.
|
|
658
|
+
*/
|
|
659
|
+
rescheduleOccurrence(workspaceId: string, occurrenceId: string, scheduledStart: Date): Promise<CeremonyRescheduledOccurrence>;
|
|
660
|
+
/** Mark an agenda item resolved, or reopen it. Survives regeneration. */
|
|
661
|
+
resolveAgendaItem(workspaceId: string, occurrenceId: string, itemId: string, resolved?: boolean): Promise<CeremonyAgendaResult>;
|
|
662
|
+
/** Add an item by hand to an agenda section; kept across regeneration. */
|
|
663
|
+
addAgendaItem(input: CeremonyAddAgendaItemInput): Promise<CeremonyAgendaResult>;
|
|
664
|
+
/** Reorder one section's items; the order is kept across regeneration. */
|
|
665
|
+
reorderAgendaItems(workspaceId: string, occurrenceId: string, sectionKey: string, itemIds: string[]): Promise<CeremonyAgendaResult>;
|
|
666
|
+
/** Post the agenda to the ceremony's Matrix room. A repost needs `confirmRepost`. */
|
|
667
|
+
postAgendaToMatrix(workspaceId: string, occurrenceId: string, options?: {
|
|
668
|
+
confirmRepost?: boolean;
|
|
669
|
+
}): Promise<CeremonyMatrixPostResult>;
|
|
670
|
+
/** Take one of the bot's agenda posts back out of its Matrix room. `eventId` comes from `agenda.matrixPosts`. */
|
|
671
|
+
removeAgendaFromMatrix(workspaceId: string, occurrenceId: string, eventId: string): Promise<CeremonyMatrixRemoveResult>;
|
|
672
|
+
/** Create a ceremony and its first occurrences for the rolling window. */
|
|
673
|
+
create(input: CeremonyCreateInput): Promise<CeremonyWriteResult>;
|
|
674
|
+
update(input: CeremonyUpdateInput): Promise<CeremonyWriteResult>;
|
|
675
|
+
/** Upsert definitions by slug. Keys a definition omits are left untouched. */
|
|
676
|
+
importDefinitions(input: CeremonyImportInput): Promise<CeremonyImportResult[]>;
|
|
677
|
+
/**
|
|
678
|
+
* Attach unattached recordings to occurrences by alias. Defaults to a dry
|
|
679
|
+
* run — the report is the review step; pass `dryRun: false` to write. Even a
|
|
680
|
+
* dry run writes one thing: it schedules any missing occurrences of active
|
|
681
|
+
* ceremonies, so that historical ones exist to attach to.
|
|
682
|
+
*/
|
|
683
|
+
backfillAttachments(workspaceId: string, options?: {
|
|
684
|
+
dryRun?: boolean;
|
|
685
|
+
}): Promise<CeremonyBackfillResult>;
|
|
686
|
+
/** Link a recorded meeting to the occurrence it captured (same workspace). */
|
|
687
|
+
attachMeeting(meetingId: string, occurrenceId: string): Promise<CeremonyMeetingAttachment>;
|
|
688
|
+
detachMeeting(meetingId: string): Promise<CeremonyMeetingAttachment>;
|
|
689
|
+
}
|
|
690
|
+
|
|
4
691
|
type ActionInput = {
|
|
5
692
|
assigneeId?: string;
|
|
6
693
|
};
|
|
@@ -551,17 +1238,6 @@ interface TrpcClient {
|
|
|
551
1238
|
mutate: (input: {
|
|
552
1239
|
pageId: string;
|
|
553
1240
|
body: string;
|
|
554
|
-
quotedText?: string;
|
|
555
|
-
quoteContext?: {
|
|
556
|
-
prefix?: string;
|
|
557
|
-
suffix?: string;
|
|
558
|
-
};
|
|
559
|
-
}) => Promise<unknown>;
|
|
560
|
-
};
|
|
561
|
-
reply: {
|
|
562
|
-
mutate: (input: {
|
|
563
|
-
parentId: string;
|
|
564
|
-
body: string;
|
|
565
1241
|
}) => Promise<unknown>;
|
|
566
1242
|
};
|
|
567
1243
|
update: {
|
|
@@ -575,18 +1251,6 @@ interface TrpcClient {
|
|
|
575
1251
|
commentId: string;
|
|
576
1252
|
}) => Promise<unknown>;
|
|
577
1253
|
};
|
|
578
|
-
resolve: {
|
|
579
|
-
mutate: (input: {
|
|
580
|
-
pageId: string;
|
|
581
|
-
threadId: string;
|
|
582
|
-
}) => Promise<unknown>;
|
|
583
|
-
};
|
|
584
|
-
unresolve: {
|
|
585
|
-
mutate: (input: {
|
|
586
|
-
pageId: string;
|
|
587
|
-
threadId: string;
|
|
588
|
-
}) => Promise<unknown>;
|
|
589
|
-
};
|
|
590
1254
|
};
|
|
591
1255
|
/** Local-runner side of Agent runs (ADR-0067); agent-key principals only. */
|
|
592
1256
|
agentRun: {
|
|
@@ -751,6 +1415,166 @@ interface TrpcClient {
|
|
|
751
1415
|
}) => Promise<unknown>;
|
|
752
1416
|
};
|
|
753
1417
|
};
|
|
1418
|
+
ceremony: {
|
|
1419
|
+
templates: {
|
|
1420
|
+
query: () => Promise<unknown[]>;
|
|
1421
|
+
};
|
|
1422
|
+
list: {
|
|
1423
|
+
query: (input: {
|
|
1424
|
+
workspaceId: string;
|
|
1425
|
+
includeInactive?: boolean;
|
|
1426
|
+
}) => Promise<unknown[]>;
|
|
1427
|
+
};
|
|
1428
|
+
listForProject: {
|
|
1429
|
+
query: (input: {
|
|
1430
|
+
projectId: string;
|
|
1431
|
+
}) => Promise<unknown[]>;
|
|
1432
|
+
};
|
|
1433
|
+
listOccurrencesForProject: {
|
|
1434
|
+
query: (input: {
|
|
1435
|
+
projectId: string;
|
|
1436
|
+
from?: Date;
|
|
1437
|
+
to?: Date;
|
|
1438
|
+
perCeremony?: number;
|
|
1439
|
+
}) => Promise<unknown[]>;
|
|
1440
|
+
};
|
|
1441
|
+
matchMeetingUrl: {
|
|
1442
|
+
query: (input: {
|
|
1443
|
+
url: string;
|
|
1444
|
+
at?: Date;
|
|
1445
|
+
workspaceId?: string;
|
|
1446
|
+
}) => Promise<unknown>;
|
|
1447
|
+
};
|
|
1448
|
+
get: {
|
|
1449
|
+
query: (input: {
|
|
1450
|
+
workspaceId: string;
|
|
1451
|
+
id: string;
|
|
1452
|
+
}) => Promise<unknown>;
|
|
1453
|
+
};
|
|
1454
|
+
listOccurrences: {
|
|
1455
|
+
query: (input: CeremonyListOccurrencesInput) => Promise<unknown[]>;
|
|
1456
|
+
};
|
|
1457
|
+
getOccurrence: {
|
|
1458
|
+
query: (input: {
|
|
1459
|
+
workspaceId: string;
|
|
1460
|
+
occurrenceId: string;
|
|
1461
|
+
}) => Promise<unknown>;
|
|
1462
|
+
};
|
|
1463
|
+
myOccurrenceUpdate: {
|
|
1464
|
+
query: (input: {
|
|
1465
|
+
workspaceId: string;
|
|
1466
|
+
occurrenceId: string;
|
|
1467
|
+
}) => Promise<unknown>;
|
|
1468
|
+
};
|
|
1469
|
+
occurrenceUpdateSummary: {
|
|
1470
|
+
query: (input: {
|
|
1471
|
+
workspaceId: string;
|
|
1472
|
+
occurrenceId: string;
|
|
1473
|
+
}) => Promise<unknown>;
|
|
1474
|
+
};
|
|
1475
|
+
draftMyOccurrenceUpdate: {
|
|
1476
|
+
mutate: (input: {
|
|
1477
|
+
workspaceId: string;
|
|
1478
|
+
occurrenceId: string;
|
|
1479
|
+
}) => Promise<unknown>;
|
|
1480
|
+
};
|
|
1481
|
+
saveMyOccurrenceUpdate: {
|
|
1482
|
+
mutate: (input: CeremonySaveMyUpdateInput) => Promise<unknown>;
|
|
1483
|
+
};
|
|
1484
|
+
generateAgenda: {
|
|
1485
|
+
mutate: (input: {
|
|
1486
|
+
workspaceId: string;
|
|
1487
|
+
occurrenceId: string;
|
|
1488
|
+
circulate?: boolean;
|
|
1489
|
+
}) => Promise<unknown>;
|
|
1490
|
+
};
|
|
1491
|
+
skipOccurrence: {
|
|
1492
|
+
mutate: (input: {
|
|
1493
|
+
workspaceId: string;
|
|
1494
|
+
occurrenceId: string;
|
|
1495
|
+
reason: string;
|
|
1496
|
+
}) => Promise<unknown>;
|
|
1497
|
+
};
|
|
1498
|
+
unskipOccurrence: {
|
|
1499
|
+
mutate: (input: {
|
|
1500
|
+
workspaceId: string;
|
|
1501
|
+
occurrenceId: string;
|
|
1502
|
+
}) => Promise<unknown>;
|
|
1503
|
+
};
|
|
1504
|
+
addOccurrence: {
|
|
1505
|
+
mutate: (input: {
|
|
1506
|
+
workspaceId: string;
|
|
1507
|
+
ceremonyId: string;
|
|
1508
|
+
scheduledStart: Date;
|
|
1509
|
+
}) => Promise<unknown>;
|
|
1510
|
+
};
|
|
1511
|
+
rescheduleOccurrence: {
|
|
1512
|
+
mutate: (input: {
|
|
1513
|
+
workspaceId: string;
|
|
1514
|
+
occurrenceId: string;
|
|
1515
|
+
scheduledStart: Date;
|
|
1516
|
+
}) => Promise<unknown>;
|
|
1517
|
+
};
|
|
1518
|
+
resolveAgendaItem: {
|
|
1519
|
+
mutate: (input: {
|
|
1520
|
+
workspaceId: string;
|
|
1521
|
+
occurrenceId: string;
|
|
1522
|
+
itemId: string;
|
|
1523
|
+
resolved: boolean;
|
|
1524
|
+
}) => Promise<unknown>;
|
|
1525
|
+
};
|
|
1526
|
+
addAgendaItem: {
|
|
1527
|
+
mutate: (input: CeremonyAddAgendaItemInput) => Promise<unknown>;
|
|
1528
|
+
};
|
|
1529
|
+
reorderAgendaItems: {
|
|
1530
|
+
mutate: (input: {
|
|
1531
|
+
workspaceId: string;
|
|
1532
|
+
occurrenceId: string;
|
|
1533
|
+
sectionKey: string;
|
|
1534
|
+
itemIds: string[];
|
|
1535
|
+
}) => Promise<unknown>;
|
|
1536
|
+
};
|
|
1537
|
+
postAgendaToMatrix: {
|
|
1538
|
+
mutate: (input: {
|
|
1539
|
+
workspaceId: string;
|
|
1540
|
+
occurrenceId: string;
|
|
1541
|
+
confirmRepost?: boolean;
|
|
1542
|
+
}) => Promise<unknown>;
|
|
1543
|
+
};
|
|
1544
|
+
removeAgendaFromMatrix: {
|
|
1545
|
+
mutate: (input: {
|
|
1546
|
+
workspaceId: string;
|
|
1547
|
+
occurrenceId: string;
|
|
1548
|
+
eventId: string;
|
|
1549
|
+
}) => Promise<unknown>;
|
|
1550
|
+
};
|
|
1551
|
+
create: {
|
|
1552
|
+
mutate: (input: CeremonyCreateInput) => Promise<unknown>;
|
|
1553
|
+
};
|
|
1554
|
+
update: {
|
|
1555
|
+
mutate: (input: CeremonyUpdateInput) => Promise<unknown>;
|
|
1556
|
+
};
|
|
1557
|
+
importDefinitions: {
|
|
1558
|
+
mutate: (input: CeremonyImportInput) => Promise<unknown[]>;
|
|
1559
|
+
};
|
|
1560
|
+
backfillAttachments: {
|
|
1561
|
+
mutate: (input: {
|
|
1562
|
+
workspaceId: string;
|
|
1563
|
+
dryRun: boolean;
|
|
1564
|
+
}) => Promise<unknown>;
|
|
1565
|
+
};
|
|
1566
|
+
attachMeeting: {
|
|
1567
|
+
mutate: (input: {
|
|
1568
|
+
meetingId: string;
|
|
1569
|
+
occurrenceId: string;
|
|
1570
|
+
}) => Promise<unknown>;
|
|
1571
|
+
};
|
|
1572
|
+
detachMeeting: {
|
|
1573
|
+
mutate: (input: {
|
|
1574
|
+
meetingId: string;
|
|
1575
|
+
}) => Promise<unknown>;
|
|
1576
|
+
};
|
|
1577
|
+
};
|
|
754
1578
|
crmApi: {
|
|
755
1579
|
contactList: {
|
|
756
1580
|
query: (input: {
|
|
@@ -1894,37 +2718,16 @@ interface FeatureComment {
|
|
|
1894
2718
|
updatedAt: Date;
|
|
1895
2719
|
createdBy: CommentAuthor;
|
|
1896
2720
|
}
|
|
1897
|
-
/**
|
|
1898
|
-
* Comments on a Knowledge Page. `body` is Markdown. A comment is doc-level
|
|
1899
|
-
* (`threadId` null) or part of a thread anchored to a span of the page body
|
|
1900
|
-
* (`threadId` matches a comment mark; `quotedText` snapshots the span so the
|
|
1901
|
-
* thread still reads if the text is later edited away). `parentId` marks a
|
|
1902
|
-
* reply; threads are one level deep.
|
|
1903
|
-
*/
|
|
2721
|
+
/** Comments on a Knowledge Page — a flat, doc-level feed. `body` is Markdown. */
|
|
1904
2722
|
interface PageComment {
|
|
1905
2723
|
id: string;
|
|
1906
2724
|
pageId: string;
|
|
1907
|
-
threadId: string | null;
|
|
1908
|
-
parentId: string | null;
|
|
1909
2725
|
body: string;
|
|
1910
|
-
quotedText: string | null;
|
|
1911
|
-
resolvedAt: Date | null;
|
|
1912
2726
|
createdById: string;
|
|
1913
2727
|
createdAt: Date;
|
|
1914
2728
|
updatedAt: Date;
|
|
1915
2729
|
createdBy: CommentAuthor;
|
|
1916
2730
|
}
|
|
1917
|
-
/** What `pageComments.create` returns: the comment plus how its anchoring went. */
|
|
1918
|
-
interface PageCommentCreated extends PageComment {
|
|
1919
|
-
anchor: {
|
|
1920
|
-
/** The page body now highlights the thread's span. False for doc-level
|
|
1921
|
-
* comments and for a viewer's thread (viewers can't edit the body). */
|
|
1922
|
-
anchored: boolean;
|
|
1923
|
-
/** The page's `docVersion` after the highlight was written. */
|
|
1924
|
-
docVersion?: number;
|
|
1925
|
-
fastForward: boolean;
|
|
1926
|
-
};
|
|
1927
|
-
}
|
|
1928
2731
|
/** Comments on a Goal/Objective. `content` is Markdown. */
|
|
1929
2732
|
interface GoalComment {
|
|
1930
2733
|
id: string;
|
|
@@ -2008,60 +2811,25 @@ interface PageCommentCreateInput {
|
|
|
2008
2811
|
pageId: string;
|
|
2009
2812
|
/** Markdown. Mention members with `@[Name](userId)` — see `workspaces.listMembers()`. */
|
|
2010
2813
|
body: string;
|
|
2011
|
-
/**
|
|
2012
|
-
* Anchor the comment to this span of the page body, as it reads on the page
|
|
2013
|
-
* (no Markdown syntax). The server mints the thread's `threadId`, finds the
|
|
2014
|
-
* span and highlights it, and refuses the comment when the text matches no
|
|
2015
|
-
* span, or several with nothing to choose between them. Omit for a doc-level
|
|
2016
|
-
* comment.
|
|
2017
|
-
*/
|
|
2018
|
-
quotedText?: string;
|
|
2019
|
-
/**
|
|
2020
|
-
* The text just before and/or after `quotedText`, to pick one occurrence
|
|
2021
|
-
* when it appears more than once. Only with `quotedText`.
|
|
2022
|
-
*/
|
|
2023
|
-
quoteContext?: {
|
|
2024
|
-
prefix?: string;
|
|
2025
|
-
suffix?: string;
|
|
2026
|
-
};
|
|
2027
|
-
}
|
|
2028
|
-
interface PageCommentReplyInput {
|
|
2029
|
-
parentId: string;
|
|
2030
|
-
body: string;
|
|
2031
2814
|
}
|
|
2032
2815
|
interface PageCommentUpdateInput {
|
|
2033
2816
|
commentId: string;
|
|
2034
2817
|
body: string;
|
|
2035
2818
|
}
|
|
2036
|
-
interface PageCommentThreadInput {
|
|
2037
|
-
pageId: string;
|
|
2038
|
-
threadId: string;
|
|
2039
|
-
}
|
|
2040
2819
|
/**
|
|
2041
|
-
* Discussion on a Knowledge Page
|
|
2042
|
-
*
|
|
2043
|
-
* the
|
|
2044
|
-
* but only an editor's anchored thread highlights the body. Editing and
|
|
2045
|
-
* deleting are author-only.
|
|
2820
|
+
* Discussion on a Knowledge Page — a flat, doc-level feed under the page body.
|
|
2821
|
+
* View access is the commenting gate: anyone the page is shared with can join
|
|
2822
|
+
* the thread. Editing and deleting are author-only.
|
|
2046
2823
|
*/
|
|
2047
2824
|
declare class PageCommentsApi {
|
|
2048
2825
|
private client;
|
|
2049
2826
|
constructor(client: TrpcClient);
|
|
2050
2827
|
list(pageId: string): Promise<PageComment[]>;
|
|
2051
|
-
create(input: PageCommentCreateInput): Promise<
|
|
2052
|
-
/** Reply to an existing comment. Replies to replies still hang off the root. */
|
|
2053
|
-
reply(input: PageCommentReplyInput): Promise<PageComment>;
|
|
2828
|
+
create(input: PageCommentCreateInput): Promise<PageComment>;
|
|
2054
2829
|
update(input: PageCommentUpdateInput): Promise<PageComment>;
|
|
2055
2830
|
delete(commentId: string): Promise<{
|
|
2056
2831
|
success: boolean;
|
|
2057
2832
|
}>;
|
|
2058
|
-
/** Mark an anchored thread resolved. Only anchored threads have a threadId. */
|
|
2059
|
-
resolve(input: PageCommentThreadInput): Promise<{
|
|
2060
|
-
success: boolean;
|
|
2061
|
-
}>;
|
|
2062
|
-
unresolve(input: PageCommentThreadInput): Promise<{
|
|
2063
|
-
success: boolean;
|
|
2064
|
-
}>;
|
|
2065
2833
|
}
|
|
2066
2834
|
|
|
2067
2835
|
interface GoalCommentAddInput {
|
|
@@ -5564,6 +6332,8 @@ declare class ExponentialClient {
|
|
|
5564
6332
|
keyResults: KeyResultsApi;
|
|
5565
6333
|
projects: ProjectsApi;
|
|
5566
6334
|
workspaces: WorkspacesApi;
|
|
6335
|
+
/** Ceremonies and their occurrences (ADR-0059). */
|
|
6336
|
+
ceremonies: CeremoniesApi;
|
|
5567
6337
|
contacts: ContactsApi;
|
|
5568
6338
|
decisions: DecisionsApi;
|
|
5569
6339
|
organizations: OrganizationsApi;
|
|
@@ -5593,4 +6363,4 @@ declare class ExponentialClient {
|
|
|
5593
6363
|
});
|
|
5594
6364
|
}
|
|
5595
6365
|
|
|
5596
|
-
export { type Action, type ActionComment, type ActionCommentAddInput, type ActionCommentUpdateInput, type ActionCreateInput, type ActionOutput, type ActionStatus, type ActionUpdateInput, type ActionUpsertBySourceInput, type ActionUpsertBySourceResult, type ActionsListOutput, type AddInteractionInput, type AddablePropertyType, type AgentRunStatus, AgentRunsApi, type AppendEventsResult, type Area, type AreaCreateInput, type AreaListOptions, type ClaimedRun, type CommentAuthor, type Contact, type ContactCreateInput, type ContactInteraction, type ContactListOutput, type ContactUpdateInput, type ContactsListOptions, type ConversationMessage, type CsvCellError, type CsvColumnTarget, type CsvCommitResult, type CsvMapping, type CsvPreview, type CsvPreviewColumn, type CsvPreviewRow, DEFAULT_GAP_MINUTES, type Database, type DatabaseCreateInput, type DatabaseFilter, type DatabasePropertyResult, type DatabaseRow, type DatabaseRowsPage, type DatabaseUpdateInput, type DatabaseView, type DayReport, type DayReportActionRow, type DayReportEntry, type DayReportProductRow, type Deal, type DealActivity, type DealCreateInput, type DealMoveInput, type DealUpdateInput, type Decision, type DecisionAdrRef, type DecisionChainRef, type DecisionCreateInput, type DecisionDecider, type DecisionDeciderInput, type DecisionEvidenceTurn, type DecisionFeatureRef, type DecisionLink, type DecisionListOptions, type DecisionListRow, type DecisionMeetingRef, type DecisionOccurrenceRef, type DecisionProductRef, type DecisionProjectRef, type DecisionReviewState, type DecisionSetStatusInput, type DecisionSource, type DecisionStatus, type DecisionTicketRef, type DecisionUpdateInput, type DecisionUserRef, type DeletedDatabase, type DraftDecisionsResult, type EnrichContactResult, type Epic, type EpicCreateInput, type EpicListOptions, type EpicPriority, type EpicStatus, type EpicUpdateInput, ExponentialClient, type ExponentialConfig, type Feature, type FeatureComment, type FeatureCommentCreateInput, type FeatureCommentReplyInput, type FeatureCommentThreadInput, type FeatureCommentUpdateInput, type FeatureCreateInput, type FeatureKeyResultLink, type FeatureLinkPageInput, type FeatureListOptions, type FeatureScope, type FeatureScopeStatus, type FeatureStatus, type FeatureUpdateInput, type FilterOp, type FinishInput, type FinishResult, type GlobalSearchOptions, type GlobalSearchOutput, type Goal, type GoalChildSummary, type GoalComment, type GoalCommentAddInput, type GoalCommentUpdateInput, type GoalCreateInput, type GoalHealth, type GoalKeyResultSummary, type GoalLifeDomain, type GoalListOptions, type GoalPeriod, type GoalProjectSummary, type GoalSetParentInput, type GoalSetStatusInput, type GoalStats, type GoalStatsOptions, type GoalStatus, type GoalTreeNode, type GoalTreeOptions, type GoalUpdateInput, type GoalUserSummary, type GoalWritableStatus, type HeartbeatResult, type InteractionDirection, type InteractionType, type KanbanStatus, type KeyResult, type KeyResultByObjectiveOptions, type KeyResultCheckIn, type KeyResultCheckInInput, type KeyResultCreateInput, type KeyResultFeatureLink, type KeyResultListOptions, type KeyResultProjectLink, type KeyResultStatus, type KeyResultUnit, type KeyResultUpdateInput, type KnowledgePage, type KnowledgeSearchOptions, type KnowledgeSearchOutput, type KnowledgeSearchResult, type KnowledgeSourceType, type LabelCreateInput, type LabelListOptions, type ListForEntityInput, type Meeting, type MeetingActionSummary, type MeetingCreateInput, type MeetingDecisions, type MeetingListOptions, type MeetingParticipant, type MeetingParticipantInput, type MeetingProjectRef, type MeetingSourceIntegration, type MeetingTypeFilter, type MeetingUpdateInput, type MeetingWorkspaceRef, type ObjectiveWithKeyResults, type Organization, type OrganizationCreateInput, type OrganizationListOutput, type OrganizationSize, type OrganizationsListOptions, type OverdueCohort, type OverdueTriage, type OverdueTriageRow, type PageComment, type PageCommentCreateInput, type
|
|
6366
|
+
export { type Action, type ActionComment, type ActionCommentAddInput, type ActionCommentUpdateInput, type ActionCreateInput, type ActionOutput, type ActionStatus, type ActionUpdateInput, type ActionUpsertBySourceInput, type ActionUpsertBySourceResult, type ActionsListOutput, type AddInteractionInput, type AddablePropertyType, type AgentRunStatus, AgentRunsApi, type AppendEventsResult, type Area, type AreaCreateInput, type AreaListOptions, CeremoniesApi, type Ceremony, type CeremonyAddAgendaItemInput, type CeremonyAddedOccurrence, type CeremonyAgenda, type CeremonyAgendaItem, type CeremonyAgendaMatrixPost, type CeremonyAgendaRefType, type CeremonyAgendaResult, type CeremonyAgendaSection, type CeremonyAgendaTemplateSection, type CeremonyBackfillResult, type CeremonyBackfillRow, type CeremonyCreateInput, type CeremonyGenerateAgendaResult, type CeremonyImportDefinition, type CeremonyImportInput, type CeremonyImportResult, type CeremonyKind, type CeremonyListOccurrencesInput, type CeremonyMatrixPostResult, type CeremonyMatrixRemoveResult, type CeremonyMeetingAttachment, type CeremonyMeetingUrlMatch, type CeremonyMyUpdate, type CeremonyNamedRef, type CeremonyOccurrence, type CeremonyOccurrenceListRow, type CeremonyOccurrenceRow, type CeremonyOccurrenceStatus, type CeremonyParticipantUpdate, type CeremonyRecord, type CeremonyRecordedMeeting, type CeremonyRescheduledOccurrence, type CeremonySaveMyUpdateInput, type CeremonySkipProposal, type CeremonySkipResult, type CeremonySummary, type CeremonyTemplate, type CeremonyUpdateInput, type CeremonyUpdateQuestion, type CeremonyUpdateSummary, type CeremonyUserRef, type CeremonyWriteResult, type ClaimedRun, type CommentAuthor, type Contact, type ContactCreateInput, type ContactInteraction, type ContactListOutput, type ContactUpdateInput, type ContactsListOptions, type ConversationMessage, type CsvCellError, type CsvColumnTarget, type CsvCommitResult, type CsvMapping, type CsvPreview, type CsvPreviewColumn, type CsvPreviewRow, DEFAULT_GAP_MINUTES, type Database, type DatabaseCreateInput, type DatabaseFilter, type DatabasePropertyResult, type DatabaseRow, type DatabaseRowsPage, type DatabaseUpdateInput, type DatabaseView, type DayReport, type DayReportActionRow, type DayReportEntry, type DayReportProductRow, type Deal, type DealActivity, type DealCreateInput, type DealMoveInput, type DealUpdateInput, type Decision, type DecisionAdrRef, type DecisionChainRef, type DecisionCreateInput, type DecisionDecider, type DecisionDeciderInput, type DecisionEvidenceTurn, type DecisionFeatureRef, type DecisionLink, type DecisionListOptions, type DecisionListRow, type DecisionMeetingRef, type DecisionOccurrenceRef, type DecisionProductRef, type DecisionProjectRef, type DecisionReviewState, type DecisionSetStatusInput, type DecisionSource, type DecisionStatus, type DecisionTicketRef, type DecisionUpdateInput, type DecisionUserRef, type DeletedDatabase, type DraftDecisionsResult, type EnrichContactResult, type Epic, type EpicCreateInput, type EpicListOptions, type EpicPriority, type EpicStatus, type EpicUpdateInput, ExponentialClient, type ExponentialConfig, type Feature, type FeatureComment, type FeatureCommentCreateInput, type FeatureCommentReplyInput, type FeatureCommentThreadInput, type FeatureCommentUpdateInput, type FeatureCreateInput, type FeatureKeyResultLink, type FeatureLinkPageInput, type FeatureListOptions, type FeatureScope, type FeatureScopeStatus, type FeatureStatus, type FeatureUpdateInput, type FilterOp, type FinishInput, type FinishResult, type GlobalSearchOptions, type GlobalSearchOutput, type Goal, type GoalChildSummary, type GoalComment, type GoalCommentAddInput, type GoalCommentUpdateInput, type GoalCreateInput, type GoalHealth, type GoalKeyResultSummary, type GoalLifeDomain, type GoalListOptions, type GoalPeriod, type GoalProjectSummary, type GoalSetParentInput, type GoalSetStatusInput, type GoalStats, type GoalStatsOptions, type GoalStatus, type GoalTreeNode, type GoalTreeOptions, type GoalUpdateInput, type GoalUserSummary, type GoalWritableStatus, type HeartbeatResult, type InteractionDirection, type InteractionType, type KanbanStatus, type KeyResult, type KeyResultByObjectiveOptions, type KeyResultCheckIn, type KeyResultCheckInInput, type KeyResultCreateInput, type KeyResultFeatureLink, type KeyResultListOptions, type KeyResultProjectLink, type KeyResultStatus, type KeyResultUnit, type KeyResultUpdateInput, type KnowledgePage, type KnowledgeSearchOptions, type KnowledgeSearchOutput, type KnowledgeSearchResult, type KnowledgeSourceType, type LabelCreateInput, type LabelListOptions, type ListForEntityInput, type Meeting, type MeetingActionSummary, type MeetingCreateInput, type MeetingDecisions, type MeetingListOptions, type MeetingParticipant, type MeetingParticipantInput, type MeetingProjectRef, type MeetingSourceIntegration, type MeetingTypeFilter, type MeetingUpdateInput, type MeetingWorkspaceRef, type ObjectiveWithKeyResults, type Organization, type OrganizationCreateInput, type OrganizationListOutput, type OrganizationSize, type OrganizationsListOptions, type OverdueCohort, type OverdueTriage, type OverdueTriageRow, type PageComment, type PageCommentCreateInput, type PageCommentUpdateInput, type PageCreateInput, type PageDiff, type PageDiffOptions, type PageDiffSide, type PageGetFormat, type PageGetOptions, type PageHistory, type PageHistoryOptions, type PageListOptions, type PageOutlineEntry, type PageRestoreOptions, type PageRevision, type PageRevisionAuthor, type PageRevisionDetail, type PageRevisionKind, type PageSearchOptions, type PageSearchOutput, type PageSearchResult, type PageUpdateInput, type PillColor, type Pipeline, type PipelineStage, type Priority, type Product, type ProductCreateInput, type ProductUpdateInput, type Project, type ProjectCeremony, type ProjectDetail, type ProjectKeyResultLink, type ProjectOccurrenceRow, type ProjectOutput, type ProjectPriority, type ProjectStatus, type ProjectUpdateInput, type ProjectsListOptions, type ProjectsListOutput, type PropertyAddInput, type PropertyDef, type PropertyRejection, type PropertyType, type PropertyUpdateInput, type PropertyValue, ROUND_MINUTES, type ReadStatus, type RelationConfig, type RelationTargetKind, type Requirement, type RequirementCreateInput, type RequirementKind, type RequirementListOptions, type Resource, type ResourceContentType, type ResourceCreateInput, type ResourceListOptions, type ResourceListResult, type ResourceReadState, type ResourceUpdateInput, type RowListOptions, type RowValuesInput, type RowWriteOptions, type RunMessage, type RunnerEvent, type RunnerEventKind, type ScopeCreateInput, type ScopeListOptions, type ScopeUpdateInput, type SearchResult, type SearchResultType, type SearchResultWorkspace, type SelectOption, type SelectOptionInput, type SetEntityTagsInput, type SetEntityTagsResult, type Tag, type TagEntityType, type TagListResult, type Ticket, type TicketAssignee, type TicketComment, type TicketCommentAddInput, type TicketCommentUpdateInput, type TicketCreateInput, type TicketDependencyEdge, type TicketDetail, type TicketListOptions, type TicketSearchOptions, type TicketStatus, type TicketType, type TicketUpdateInput, TimeApi, type TimeConfirmDayResult, type TimeEntry, type TimeEntrySource, type TimeEntryStatus, type TimeLogBatchResult, type TimeLogInput, type TimeLogOutcome, type TimeLogResult, type TodaysActionRow, type TodaysActions, type TodaysActionsGroup, type UserStory, type UserStoryCreateInput, type UserStoryListOptions, type UserStoryUpdateInput, type WorklogSegment, type Workspace, type WorkspaceMember, type WorkspaceOutput, type WorkspacesListOutput, clearConfig, createConfigStore, getConfigPath, isAuthenticated, isTRPCError, loadConfig, saveConfig, segmentConversation };
|