glimmervoid 0.35.1 → 0.36.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 (38) hide show
  1. package/README.md +2 -0
  2. package/dist/bin/glimmervoid.js +17 -12
  3. package/dist/chunks/{adapters-B37wqNti.js → adapters-BVozg-Lg.js} +1 -1
  4. package/dist/chunks/{adapters-CADejSpq.js → adapters-BdnLyJjf.js} +10 -49
  5. package/dist/chunks/{agent-api-cli-CRj_FYbz.js → agent-api-cli-DIqRLvu3.js} +1 -1
  6. package/dist/chunks/{agent-api-cli-vGwstJ1j.js → agent-api-cli-d-Bgsshx.js} +3 -3
  7. package/dist/chunks/{agent-api-core-D1233u1U.js → agent-api-core-BUC9WND7.js} +2 -2
  8. package/dist/chunks/{agent-setup-cli-BTAFcckd.js → agent-setup-cli-CH7EHsAX.js} +1 -1
  9. package/dist/chunks/{config-rPbbL4nW.js → config-CuZ16F9W.js} +47 -771
  10. package/dist/chunks/config-store-LqQ7MuyV.js +4181 -0
  11. package/dist/chunks/config-store-tVmt_nfm.js +1 -0
  12. package/dist/chunks/{contracts-DjIgIuDk.js → contracts-BLZAOP57.js} +55 -6
  13. package/dist/chunks/{grok-KKgdSe-7.js → grok-Ch4-35_r.js} +3 -3
  14. package/dist/chunks/{hook-command-core-DclEoE9e.js → hook-command-core-qTNK-xMF.js} +4 -1
  15. package/dist/chunks/{hook-tools-UX2fmt81.js → hook-tools-BkxllUHE.js} +9 -16
  16. package/dist/chunks/{knowledge-graph-cli-Rj5nj87L.js → knowledge-graph-cli-DD7QvcFd.js} +1 -1
  17. package/dist/chunks/{main-C-T2Uk20.js → main-Rmo83Ow-.js} +3075 -832
  18. package/dist/chunks/{pair-cli-Dcyzv3In.js → pair-cli-DzFeAmq5.js} +2 -2
  19. package/dist/chunks/{remote-config-Dd1T-VJA.js → remote-config-CPdSF2Xi.js} +1 -1
  20. package/dist/chunks/{rtk-hook-core-BmEz2aq9.js → rtk-hook-core-VrUafGAp.js} +15 -5
  21. package/dist/chunks/rtk-resolver-B8BPgN9L.js +1 -0
  22. package/dist/chunks/{rtk-resolver-B9pzjLsM.js → rtk-resolver-C_micGrL.js} +1 -1
  23. package/dist/chunks/session-B8RhqQJe.js +986 -0
  24. package/dist/chunks/{session-routes-BYy3am9m.js → session-routes-DB5aDKsx.js} +1 -1
  25. package/dist/chunks/settings-cli-C2TY6hl-.js +484 -0
  26. package/dist/chunks/{ssh-sign-cli-DPHpT22B.js → ssh-sign-cli-C2nUwJC-.js} +2 -2
  27. package/dist/client/assets/index-BIaSyXwH.css +1 -0
  28. package/dist/client/assets/index-Ddu7M4Ad.js +259 -0
  29. package/dist/client/index.html +5 -3
  30. package/dist/server/index.js +1 -1
  31. package/dist/session/hook-tool-relay.js +3 -3
  32. package/package.json +3 -3
  33. package/dist/chunks/config-store-BeIxAZNn.js +0 -1
  34. package/dist/chunks/config-store-BtsYbNC3.js +0 -1713
  35. package/dist/chunks/rtk-resolver-SWU5VVM7.js +0 -1
  36. package/dist/chunks/session-D6xXN0UU.js +0 -232
  37. package/dist/client/assets/index-CUxRHbCS.js +0 -254
  38. package/dist/client/assets/index-DE2GUmqs.css +0 -1
@@ -0,0 +1,986 @@
1
+ import { z } from "zod";
2
+ //#region shared/states.ts
3
+ var STATES = Object.freeze({
4
+ DORMANT: "DORMANT",
5
+ INITIALIZING: "INITIALIZING",
6
+ STARTING: "STARTING",
7
+ RUNNING: "RUNNING",
8
+ WAITING: "WAITING",
9
+ IDLE: "IDLE",
10
+ COMPLETE: "COMPLETE",
11
+ DONE: "DONE",
12
+ FAILED: "FAILED"
13
+ });
14
+ Object.freeze({
15
+ [STATES.DORMANT]: "Dormant",
16
+ [STATES.INITIALIZING]: "Preparing",
17
+ [STATES.STARTING]: "Starting",
18
+ [STATES.RUNNING]: "Working",
19
+ [STATES.WAITING]: "Needs Input",
20
+ [STATES.IDLE]: "Idle",
21
+ [STATES.COMPLETE]: "Complete",
22
+ [STATES.DONE]: "Exited",
23
+ [STATES.FAILED]: "Failed"
24
+ });
25
+ Object.freeze({
26
+ [STATES.DORMANT]: "○",
27
+ [STATES.INITIALIZING]: "◌",
28
+ [STATES.STARTING]: "◐",
29
+ [STATES.RUNNING]: "●",
30
+ [STATES.WAITING]: "◆",
31
+ [STATES.IDLE]: "◍",
32
+ [STATES.FAILED]: "▲",
33
+ [STATES.DONE]: "■",
34
+ [STATES.COMPLETE]: "◇"
35
+ });
36
+ var KILLABLE_STATES = Object.freeze([
37
+ STATES.INITIALIZING,
38
+ STATES.STARTING,
39
+ STATES.RUNNING,
40
+ STATES.WAITING,
41
+ STATES.IDLE,
42
+ STATES.COMPLETE
43
+ ]);
44
+ var RESTARTABLE_STATES = Object.freeze([STATES.DONE, STATES.FAILED]);
45
+ var MERGEABLE_LIVE_STATES = Object.freeze([
46
+ STATES.WAITING,
47
+ STATES.IDLE,
48
+ STATES.COMPLETE
49
+ ]);
50
+ //#endregion
51
+ //#region shared/contracts/github-polling.ts
52
+ var GithubPollingRetry = z.object({
53
+ attempt: z.number().int().positive(),
54
+ limit: z.number().int().positive()
55
+ }).refine((retry) => retry.attempt <= retry.limit);
56
+ var githubPollingShape = {
57
+ error: z.string().nullable().optional(),
58
+ nextAttemptAt: z.number().finite().nonnegative().nullable().optional(),
59
+ retry: GithubPollingRetry.nullable().optional(),
60
+ isRefreshing: z.boolean().optional(),
61
+ refreshNotice: z.string().nullable().optional()
62
+ };
63
+ var GithubPollingRefreshRequest = z.object({ lane: z.enum([
64
+ "my-prs",
65
+ "team-review",
66
+ "issues"
67
+ ]) });
68
+ var GithubPollingRefreshResult = z.object({
69
+ ok: z.boolean(),
70
+ error: z.string().optional()
71
+ });
72
+ //#endregion
73
+ //#region shared/contracts/github-ids.ts
74
+ var GH_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
75
+ var REPO_SLUG_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;
76
+ var NODE_ID_RE = /^[A-Za-z0-9_=-]+$/;
77
+ function repoParts(repo) {
78
+ const parts = repo.split("/");
79
+ if (parts.length !== 2 || !parts.every((part) => GH_SEGMENT.test(part))) return null;
80
+ return [parts[0], parts[1]];
81
+ }
82
+ var HEX_SHA_RE = /^[0-9a-f]{7,40}$/i;
83
+ var FULL_SHA_RE = /^[0-9a-f]{40}$/;
84
+ function shortSha(sha, { chars = 7, validate = false } = {}) {
85
+ if (typeof sha !== "string" || !sha) return "";
86
+ if (!validate) return sha.slice(0, chars);
87
+ const text = sha.trim();
88
+ if (!HEX_SHA_RE.test(text)) return "";
89
+ return text.slice(0, chars).toLowerCase();
90
+ }
91
+ //#endregion
92
+ //#region shared/contracts/team-review.ts
93
+ var CommitSha = z.string().regex(FULL_SHA_RE);
94
+ var repoSlug = z.string().regex(/^[^/]+\/[^/]+$/);
95
+ var SearchedPr = z.object({
96
+ number: z.number().int().positive(),
97
+ title: z.string(),
98
+ html_url: z.string(),
99
+ draft: z.boolean().optional(),
100
+ created_at: z.string().optional(),
101
+ updated_at: z.string().optional(),
102
+ repository_url: z.string(),
103
+ user: z.object({
104
+ login: z.string(),
105
+ type: z.enum(["User", "Bot"])
106
+ }).passthrough(),
107
+ pull_request: z.object({}).passthrough()
108
+ }).passthrough();
109
+ var PrDetail = z.object({
110
+ number: z.number().int().positive(),
111
+ title: z.string(),
112
+ body: z.string(),
113
+ url: z.string(),
114
+ author: z.object({
115
+ login: z.string(),
116
+ is_bot: z.boolean().optional()
117
+ }).passthrough(),
118
+ isDraft: z.boolean(),
119
+ isCrossRepository: z.boolean(),
120
+ baseRefName: z.string(),
121
+ baseRefOid: CommitSha,
122
+ headRefName: z.string().optional(),
123
+ headRefOid: CommitSha,
124
+ additions: z.number().int().nonnegative(),
125
+ deletions: z.number().int().nonnegative(),
126
+ files: z.array(z.object({
127
+ path: z.string(),
128
+ additions: z.number().int().nonnegative(),
129
+ deletions: z.number().int().nonnegative()
130
+ }).passthrough())
131
+ }).passthrough();
132
+ var ReviewComment = z.object({
133
+ path: z.string(),
134
+ line: z.number().int().positive(),
135
+ side: z.enum(["RIGHT", "LEFT"]).default("RIGHT"),
136
+ body: z.string()
137
+ });
138
+ var LEGACY_VERDICTS = Object.freeze({
139
+ STAMP: "APPROVE",
140
+ COMMENT: "APPROVE WITH NITS",
141
+ NEEDS_YOU: "REQUEST CHANGES"
142
+ });
143
+ var ReviewVerdict = z.enum([
144
+ "APPROVE",
145
+ "APPROVE WITH NITS",
146
+ "REQUEST CHANGES",
147
+ "BLOCKED"
148
+ ]);
149
+ var storedVerdict = z.preprocess((verdict) => typeof verdict === "string" && Object.hasOwn(LEGACY_VERDICTS, verdict) ? LEGACY_VERDICTS[verdict] : verdict, ReviewVerdict);
150
+ var FindingSeverity = z.enum([
151
+ "CRITICAL",
152
+ "HIGH",
153
+ "MEDIUM",
154
+ "LOW"
155
+ ]);
156
+ var DraftComment = ReviewComment.extend({ severity: FindingSeverity.optional() });
157
+ var ReviewFinding = z.object({
158
+ path: z.string().min(1),
159
+ line: z.number().int().positive().nullable(),
160
+ side: z.enum(["RIGHT", "LEFT"]),
161
+ severity: FindingSeverity,
162
+ reviewer: z.string().min(1),
163
+ disposition: z.enum([
164
+ "ACTIONABLE",
165
+ "NIT",
166
+ "AMBIGUOUS"
167
+ ]).nullable(),
168
+ body: z.string().min(1)
169
+ });
170
+ var ReviewAssessment = z.object({
171
+ goal: z.string().default(""),
172
+ change: z.string(),
173
+ checked: z.array(z.string()),
174
+ gaps: z.array(z.string())
175
+ });
176
+ var ReviewResult = z.object({
177
+ verdict: ReviewVerdict,
178
+ head: CommitSha,
179
+ summary: z.string(),
180
+ assessment: ReviewAssessment.nullable(),
181
+ findings: z.array(ReviewFinding)
182
+ });
183
+ var PostingPlan = z.object({
184
+ body: z.string(),
185
+ commit_id: CommitSha,
186
+ comments: z.array(z.object({
187
+ path: z.string().min(1),
188
+ line: z.number().int().positive(),
189
+ side: z.enum(["RIGHT", "LEFT"]).default("RIGHT"),
190
+ body: z.string().min(1)
191
+ }))
192
+ });
193
+ var PostedReviewEvent = z.enum(["APPROVE", "COMMENT"]);
194
+ var GithubReviewState = z.enum([
195
+ "APPROVED",
196
+ "CHANGES_REQUESTED",
197
+ "COMMENTED"
198
+ ]);
199
+ var DECIDING_REVIEW_STATES = /* @__PURE__ */ new Set(["APPROVED", "CHANGES_REQUESTED"]);
200
+ var GithubReviewDecision = z.enum([
201
+ "APPROVED",
202
+ "CHANGES_REQUESTED",
203
+ "REVIEW_REQUIRED"
204
+ ]);
205
+ var ReviewChecksState = z.enum([
206
+ "SUCCESS",
207
+ "FAILURE",
208
+ "PENDING",
209
+ "ERROR",
210
+ "EXPECTED"
211
+ ]);
212
+ var reviewPriorityShape = {
213
+ requestSource: z.enum(["direct", "team"]).default("team"),
214
+ isDraft: z.boolean().optional(),
215
+ checksState: ReviewChecksState.nullable().optional()
216
+ };
217
+ var GithubReview = z.object({
218
+ login: z.string().min(1),
219
+ state: GithubReviewState,
220
+ commit: CommitSha.nullable(),
221
+ isViewer: z.boolean(),
222
+ submittedAt: z.string().nullable().optional()
223
+ });
224
+ function decisionAsIfApprovalRequired(githubDecision, opinionatedWriterReviewStates) {
225
+ if (githubDecision) return githubDecision;
226
+ if (opinionatedWriterReviewStates.includes("CHANGES_REQUESTED")) return "CHANGES_REQUESTED";
227
+ if (opinionatedWriterReviewStates.includes("APPROVED")) return "APPROVED";
228
+ return "REVIEW_REQUIRED";
229
+ }
230
+ function hasStandingViewerApproval(draft) {
231
+ if (draft.reviewDecision !== "APPROVED") return false;
232
+ if (draft.requeuedHead !== void 0 && draft.requeuedHead === (draft.liveHead ?? draft.reviewedHead)) return false;
233
+ return (draft.githubReviews ?? []).some((review) => review.isViewer && review.state === "APPROVED");
234
+ }
235
+ var PriorReview = z.object({
236
+ head: CommitSha,
237
+ base: CommitSha.optional(),
238
+ verdict: ReviewVerdict,
239
+ summary: z.string(),
240
+ body: z.string(),
241
+ comments: z.array(ReviewComment),
242
+ wasPosted: z.boolean()
243
+ });
244
+ var ReviewThreadId = z.string().min(1).max(256).regex(NODE_ID_RE);
245
+ var TeamReviewThreadResult = z.object({
246
+ addressed: z.boolean(),
247
+ reason: z.string().trim().min(1).max(4e3)
248
+ }).strict();
249
+ var TeamReviewThreadNode = z.object({
250
+ id: ReviewThreadId,
251
+ path: z.string(),
252
+ line: z.number().int().positive().nullable(),
253
+ isResolved: z.boolean(),
254
+ viewerCanResolve: z.boolean(),
255
+ comments: z.object({
256
+ pageInfo: z.object({
257
+ hasNextPage: z.boolean(),
258
+ endCursor: z.string().nullable().optional()
259
+ }),
260
+ nodes: z.array(z.object({
261
+ body: z.string(),
262
+ author: z.object({ login: z.string() }).nullable(),
263
+ viewerDidAuthor: z.boolean(),
264
+ createdAt: z.string().datetime(),
265
+ url: z.string().url(),
266
+ originalCommit: z.object({ oid: CommitSha }).nullable()
267
+ }))
268
+ })
269
+ });
270
+ var TeamReviewThreadCommentsResponse = z.object({ data: z.object({ node: z.object({ comments: TeamReviewThreadNode.shape.comments }).nullable() }).nullable() });
271
+ var TeamReviewThreadsRepository = z.object({ pullRequest: z.object({ reviewThreads: z.object({
272
+ pageInfo: z.object({
273
+ hasNextPage: z.boolean(),
274
+ endCursor: z.string().nullable().optional()
275
+ }),
276
+ nodes: z.array(TeamReviewThreadNode)
277
+ }) }).nullable() });
278
+ var TeamReviewResolveResponse = z.object({
279
+ data: z.object({ resolveReviewThread: z.object({ thread: z.object({
280
+ id: ReviewThreadId,
281
+ isResolved: z.literal(true)
282
+ }) }) }).nullable(),
283
+ errors: z.array(z.unknown()).optional()
284
+ });
285
+ var TeamReviewThread = z.object({
286
+ id: ReviewThreadId,
287
+ path: z.string(),
288
+ line: z.number().int().positive().nullable(),
289
+ isResolved: z.boolean(),
290
+ viewerCanResolve: z.boolean(),
291
+ isNit: z.boolean(),
292
+ url: z.string().url(),
293
+ viewerComment: z.string().max(1500).optional(),
294
+ lastReplyBody: z.string().max(1500).optional(),
295
+ viewerCommentTruncated: z.boolean().optional(),
296
+ lastReplyTruncated: z.boolean().optional(),
297
+ lastReplyAuthor: z.string(),
298
+ lastReplyAt: z.string().datetime(),
299
+ judgement: TeamReviewThreadResult.extend({
300
+ head: CommitSha,
301
+ judgedAt: z.number().finite(),
302
+ lastReplyAt: z.string().datetime()
303
+ }).optional(),
304
+ resolveError: z.string().optional(),
305
+ resolveAttemptReplyAt: z.string().optional(),
306
+ judgeAttempt: z.object({
307
+ head: CommitSha,
308
+ lastReplyAt: z.string(),
309
+ retryAt: z.number().finite()
310
+ }).optional(),
311
+ unjudgeable: z.object({
312
+ head: CommitSha,
313
+ lastReplyAt: z.string(),
314
+ reason: z.string().min(1)
315
+ }).optional()
316
+ });
317
+ var TeamReviewCompareFiles = z.object({
318
+ merge_base_commit: z.object({ sha: CommitSha }),
319
+ files: z.array(z.object({
320
+ filename: z.string(),
321
+ previous_filename: z.string().optional(),
322
+ patch: z.string().optional()
323
+ })).max(300)
324
+ });
325
+ var ViewerThreadTally = z.object({
326
+ total: z.number().int().nonnegative(),
327
+ resolved: z.number().int().nonnegative()
328
+ });
329
+ var ReviewDraft = z.object({
330
+ ...reviewPriorityShape,
331
+ key: z.string(),
332
+ repo: repoSlug,
333
+ number: z.number().int().positive(),
334
+ title: z.string(),
335
+ url: z.string(),
336
+ author: z.string(),
337
+ tier: z.enum(["stamp", "full"]),
338
+ reasons: z.array(z.string()),
339
+ reviewedHead: CommitSha,
340
+ reviewedBase: CommitSha.optional(),
341
+ verdict: storedVerdict,
342
+ summary: z.string(),
343
+ assessment: ReviewAssessment.optional(),
344
+ body: z.string(),
345
+ comments: z.array(DraftComment),
346
+ status: z.enum([
347
+ "ready",
348
+ "stale",
349
+ "posted",
350
+ "discarded",
351
+ "error"
352
+ ]),
353
+ error: z.string().optional(),
354
+ threads: z.array(TeamReviewThread).optional(),
355
+ viewerThreads: ViewerThreadTally.optional(),
356
+ githubReviews: z.array(GithubReview).optional(),
357
+ reviewDecision: GithubReviewDecision.nullable().optional(),
358
+ liveHead: CommitSha.optional(),
359
+ prCreatedAt: z.string().optional(),
360
+ reviewedAt: z.number().finite().optional(),
361
+ postedAt: z.number().finite().optional(),
362
+ postedEvent: PostedReviewEvent.optional(),
363
+ priorReviewedHead: CommitSha.optional(),
364
+ requeuedHead: CommitSha.optional()
365
+ });
366
+ function canApproveAfterComment(draft) {
367
+ return draft.status === "posted" && draft.postedEvent === "COMMENT";
368
+ }
369
+ var TeamReviewAction = z.enum([
370
+ "approve",
371
+ "approve-only",
372
+ "comment",
373
+ "discard",
374
+ "requeue",
375
+ "resolve-thread"
376
+ ]);
377
+ function hasRequiredActionHead(request) {
378
+ return request.action === "discard" || request.head !== void 0;
379
+ }
380
+ var TeamReviewActionRequest = z.object({
381
+ key: z.string().min(1),
382
+ head: CommitSha.optional(),
383
+ action: TeamReviewAction,
384
+ threadId: ReviewThreadId.optional(),
385
+ body: z.string(),
386
+ comments: z.array(ReviewComment)
387
+ }).refine((request) => request.action !== "resolve-thread" || request.threadId !== void 0, {
388
+ message: "resolve-thread requires threadId",
389
+ path: ["threadId"]
390
+ }).refine(hasRequiredActionHead, {
391
+ message: "only discard may omit head",
392
+ path: ["head"]
393
+ });
394
+ var TeamReviewActionResult = z.object({
395
+ key: z.string(),
396
+ ok: z.boolean(),
397
+ error: z.string().optional(),
398
+ warning: z.string().optional()
399
+ });
400
+ var ResumableReview = z.object({
401
+ sessionId: z.string().min(1),
402
+ workDir: z.string().min(1),
403
+ worktreePath: z.string().min(1),
404
+ head: CommitSha,
405
+ deadlineAt: z.number(),
406
+ remainingAwakeMs: z.number().nonnegative().optional(),
407
+ savedAt: z.number()
408
+ });
409
+ var QueuedReview = z.object({
410
+ ...reviewPriorityShape,
411
+ reviewDecision: GithubReviewDecision.nullable().optional(),
412
+ key: z.string(),
413
+ repo: repoSlug,
414
+ number: z.number().int().positive(),
415
+ title: z.string(),
416
+ url: z.string(),
417
+ author: z.string(),
418
+ prCreatedAt: z.string().optional()
419
+ });
420
+ var TeamReviewStateEntry = z.object({
421
+ draft: ReviewDraft.nullable(),
422
+ reviewedHead: CommitSha.nullable(),
423
+ inFlight: z.boolean(),
424
+ skipReason: z.string().nullable(),
425
+ handReview: QueuedReview.optional(),
426
+ reviewAttempts: z.number().int().nonnegative().default(0),
427
+ resumable: ResumableReview.nullable().optional(),
428
+ reviewedAt: z.number().optional(),
429
+ threads: z.array(TeamReviewThread).optional(),
430
+ viewerThreads: ViewerThreadTally.optional(),
431
+ autoResolvedThreadIds: z.array(ReviewThreadId).optional(),
432
+ githubReviews: z.array(GithubReview).optional(),
433
+ reviewDecision: GithubReviewDecision.nullable().optional(),
434
+ liveHead: CommitSha.optional(),
435
+ requeuedHead: CommitSha.optional(),
436
+ priorReview: PriorReview.optional(),
437
+ discardedReviewHead: CommitSha.optional(),
438
+ updatedAt: z.number().finite()
439
+ });
440
+ z.record(z.string(), TeamReviewStateEntry);
441
+ var ReviewProgressPhase = z.enum([
442
+ "preparing",
443
+ "checkout",
444
+ "reviewing"
445
+ ]);
446
+ var ReviewProgressStep = z.object({
447
+ at: z.number().finite(),
448
+ tool: z.string(),
449
+ detail: z.string()
450
+ });
451
+ var InFlightReview = z.object({
452
+ ...reviewPriorityShape,
453
+ reviewDecision: GithubReviewDecision.nullable().optional(),
454
+ key: z.string(),
455
+ repo: repoSlug,
456
+ number: z.number().int().positive(),
457
+ title: z.string(),
458
+ url: z.string(),
459
+ author: z.string(),
460
+ tier: z.enum(["stamp", "full"]),
461
+ reasons: z.array(z.string()),
462
+ head: CommitSha,
463
+ phase: ReviewProgressPhase,
464
+ startedAt: z.number().finite(),
465
+ deadlineAt: z.number().finite().nullable(),
466
+ toolCalls: z.number().int().nonnegative(),
467
+ recentSteps: z.array(ReviewProgressStep),
468
+ prCreatedAt: z.string().optional(),
469
+ priorReviewedHead: CommitSha.optional()
470
+ });
471
+ var TeamReviewStatus = z.object({
472
+ ...githubPollingShape,
473
+ type: z.literal("team-review-status"),
474
+ ts: z.number().finite(),
475
+ configured: z.boolean(),
476
+ reason: z.string().nullable().optional(),
477
+ drafts: z.array(ReviewDraft),
478
+ inFlight: z.array(InFlightReview),
479
+ queued: z.array(QueuedReview).default([]),
480
+ handReview: z.array(QueuedReview).default([]),
481
+ team: z.object({
482
+ org: z.string(),
483
+ slug: z.string(),
484
+ name: z.string(),
485
+ avatarUrl: z.string()
486
+ }).nullable().optional()
487
+ }).passthrough();
488
+ //#endregion
489
+ //#region shared/contracts/my-prs.ts
490
+ var MyPrStage = z.enum([
491
+ "merged",
492
+ "draft",
493
+ "conflicts",
494
+ "behind",
495
+ "checks-failing",
496
+ "changes-requested",
497
+ "unresolved-threads",
498
+ "checks-pending",
499
+ "needs-approval",
500
+ "ready",
501
+ "unknown"
502
+ ]);
503
+ var nonnegativeInteger = z.number().int().nonnegative();
504
+ var repositoryName = z.string().regex(REPO_SLUG_RE);
505
+ var pullRequestNumberText = z.string().regex(/^[1-9][0-9]*$/);
506
+ var pullRequestKeyFormat = z.templateLiteral([
507
+ repositoryName,
508
+ "#",
509
+ pullRequestNumberText
510
+ ]);
511
+ var keepMergeableAttemptKeyFormat = z.templateLiteral([
512
+ pullRequestKeyFormat,
513
+ "@",
514
+ CommitSha
515
+ ]);
516
+ var pullRequestKey = z.string().refine((value) => pullRequestKeyFormat.safeParse(value).success);
517
+ var keepMergeableAttemptKey = z.string().refine((value) => keepMergeableAttemptKeyFormat.safeParse(value).success);
518
+ z.discriminatedUnion("outcome", [z.strictObject({ outcome: z.literal("pushed") }), z.strictObject({
519
+ outcome: z.enum([
520
+ "no-change",
521
+ "failed",
522
+ "stopped",
523
+ "timed-out"
524
+ ]),
525
+ reason: z.string().min(1)
526
+ })]);
527
+ var MyPrKeepMergeableAttempt = z.strictObject({
528
+ outcome: z.enum([
529
+ "pushed",
530
+ "no-change",
531
+ "failed",
532
+ "stopped",
533
+ "timed-out"
534
+ ]),
535
+ reason: z.string().min(1).optional(),
536
+ at: z.number().finite()
537
+ });
538
+ var MyPrKeepMergeableAttemptRecord = MyPrKeepMergeableAttempt.extend({
539
+ key: pullRequestKey,
540
+ headRefOid: CommitSha,
541
+ baseRefOid: CommitSha,
542
+ consecutiveAttempts: z.number().int().min(1).optional()
543
+ });
544
+ var MyPrsState = z.strictObject({
545
+ keepMergeableKeys: z.array(pullRequestKey),
546
+ keepMergeableAttemptKeys: z.array(keepMergeableAttemptKey),
547
+ keepMergeableAttempts: z.array(MyPrKeepMergeableAttemptRecord).default([]),
548
+ mergeQueueKeys: z.array(pullRequestKey).default([]),
549
+ keepMergeablePushedHeadKeys: z.array(keepMergeableAttemptKey).default([])
550
+ });
551
+ var LinkedPr = z.strictObject({
552
+ repo: repositoryName,
553
+ number: z.number().int().positive(),
554
+ url: z.url(),
555
+ source: z.enum([
556
+ "hook",
557
+ "sha",
558
+ "manual"
559
+ ]),
560
+ linkedAt: z.number().finite()
561
+ });
562
+ var SessionPrLinks = z.strictObject({
563
+ links: z.array(LinkedPr).max(20),
564
+ unlinkedKeys: z.array(pullRequestKey).default([])
565
+ });
566
+ var MyPrKeepMergeableRequest = z.object({
567
+ repo: repositoryName,
568
+ number: z.number().int().positive(),
569
+ keepMergeable: z.boolean()
570
+ });
571
+ var MyPrToggleResult = z.object({
572
+ key: z.string(),
573
+ ok: z.boolean(),
574
+ error: z.string().optional()
575
+ });
576
+ var MyPrKeepMergeableResult = MyPrToggleResult;
577
+ var MyPrMergeWhenReadyRequest = z.object({
578
+ repo: repositoryName,
579
+ number: z.number().int().positive(),
580
+ mergeWhenReady: z.boolean()
581
+ });
582
+ var MyPrMergeWhenReadyResult = MyPrToggleResult;
583
+ var MyPrMergeMethod = z.enum([
584
+ "MERGE",
585
+ "SQUASH",
586
+ "REBASE"
587
+ ]);
588
+ var MyPrThread = z.object({
589
+ path: z.string(),
590
+ line: z.number().int().positive().nullable(),
591
+ isOutdated: z.boolean(),
592
+ url: z.url(),
593
+ author: z.string().nullable(),
594
+ excerpt: z.string(),
595
+ commentCount: z.number().int().positive(),
596
+ lastAuthor: z.string().nullable(),
597
+ lastActivityAt: z.string()
598
+ });
599
+ var MyPrReview = z.object({
600
+ reviewer: z.string().nullable(),
601
+ state: z.string(),
602
+ submittedAt: z.string().nullable()
603
+ });
604
+ var MyPrAutoRebase = z.object({
605
+ outcome: z.enum(["rebased", "failed"]),
606
+ at: z.number().finite(),
607
+ message: z.string()
608
+ });
609
+ var MyPrMergeQueueFailure = z.object({
610
+ at: z.number().finite(),
611
+ message: z.string()
612
+ });
613
+ var MyPr = z.object({
614
+ key: z.string(),
615
+ repo: repositoryName,
616
+ number: z.number().int().positive(),
617
+ title: z.string(),
618
+ url: z.url(),
619
+ isDraft: z.boolean(),
620
+ state: z.enum([
621
+ "OPEN",
622
+ "MERGED",
623
+ "CLOSED"
624
+ ]),
625
+ createdAt: z.string(),
626
+ mergedAt: z.string().nullable(),
627
+ updatedAt: z.string(),
628
+ baseRefName: z.string(),
629
+ baseRefOid: CommitSha,
630
+ headRefName: z.string().min(1),
631
+ isCrossRepository: z.boolean(),
632
+ headRefOid: CommitSha,
633
+ isInMergeQueue: z.boolean(),
634
+ mergeMethod: MyPrMergeMethod,
635
+ mergeable: z.enum([
636
+ "MERGEABLE",
637
+ "CONFLICTING",
638
+ "UNKNOWN"
639
+ ]),
640
+ mergeStateStatus: z.string(),
641
+ reviewDecision: z.enum([
642
+ "APPROVED",
643
+ "CHANGES_REQUESTED",
644
+ "REVIEW_REQUIRED"
645
+ ]).nullable(),
646
+ checks: z.object({
647
+ state: z.enum([
648
+ "SUCCESS",
649
+ "FAILURE",
650
+ "PENDING",
651
+ "ERROR",
652
+ "EXPECTED"
653
+ ]).nullable(),
654
+ failing: z.array(z.string()),
655
+ pendingCount: nonnegativeInteger
656
+ }),
657
+ unresolvedThreads: nonnegativeInteger,
658
+ threads: z.array(MyPrThread),
659
+ behindBy: nonnegativeInteger.nullable(),
660
+ reviewRequests: z.array(z.object({
661
+ name: z.string(),
662
+ isTeam: z.boolean(),
663
+ avatarUrl: z.string().nullable()
664
+ })),
665
+ approvals: nonnegativeInteger,
666
+ reviews: z.array(MyPrReview),
667
+ stage: MyPrStage,
668
+ autoRebase: MyPrAutoRebase.optional(),
669
+ keepMergeable: z.boolean().optional(),
670
+ keepMergeableAttempt: MyPrKeepMergeableAttempt.optional(),
671
+ isKeepMergeableFixInFlight: z.boolean().optional(),
672
+ mergeQueuePosition: z.number().int().positive().nullable().optional(),
673
+ isMergeQueueHeldForRepairPush: z.boolean().optional(),
674
+ mergeQueueFailure: MyPrMergeQueueFailure.optional()
675
+ }).refine((pr) => pr.key === `${pr.repo}#${pr.number}`);
676
+ var MyPrsStatus = z.object({
677
+ ...githubPollingShape,
678
+ type: z.literal("my-prs-status"),
679
+ ts: z.number().finite(),
680
+ configured: z.boolean(),
681
+ reason: z.string().nullable().optional(),
682
+ viewer: z.string().nullable(),
683
+ prs: z.array(MyPr),
684
+ truncatedNote: z.string().nullable().optional(),
685
+ isKeepMergeableEnabled: z.boolean().optional(),
686
+ isMergeQueueEnabled: z.boolean().optional()
687
+ }).passthrough();
688
+ var MyPrMergeRequest = z.object({
689
+ repo: repositoryName,
690
+ number: z.number().int().positive(),
691
+ headRefOid: CommitSha
692
+ });
693
+ var MyPrMergeKind = z.enum([
694
+ "merged",
695
+ "queued",
696
+ "auto-merge",
697
+ "unconfirmed"
698
+ ]);
699
+ var MyPrMergeResult = z.object({
700
+ key: z.string(),
701
+ ok: z.boolean(),
702
+ kind: MyPrMergeKind.optional(),
703
+ error: z.string().optional()
704
+ });
705
+ var CheckRun = z.object({
706
+ __typename: z.literal("CheckRun"),
707
+ name: z.string(),
708
+ conclusion: z.string().nullable(),
709
+ status: z.string()
710
+ });
711
+ var StatusContext = z.object({
712
+ __typename: z.literal("StatusContext"),
713
+ context: z.string(),
714
+ state: z.string()
715
+ });
716
+ var MyPrSearchNode = z.object({
717
+ __typename: z.literal("PullRequest"),
718
+ id: z.string().regex(NODE_ID_RE),
719
+ number: z.number().int().positive(),
720
+ title: z.string(),
721
+ url: z.url(),
722
+ isDraft: z.boolean(),
723
+ state: z.enum([
724
+ "OPEN",
725
+ "MERGED",
726
+ "CLOSED"
727
+ ]),
728
+ createdAt: z.string(),
729
+ mergedAt: z.string().nullable(),
730
+ updatedAt: z.string(),
731
+ baseRefName: z.string(),
732
+ baseRefOid: CommitSha,
733
+ headRefName: z.string().min(1),
734
+ isCrossRepository: z.boolean(),
735
+ headRefOid: CommitSha,
736
+ isInMergeQueue: z.boolean(),
737
+ mergeable: z.enum([
738
+ "MERGEABLE",
739
+ "CONFLICTING",
740
+ "UNKNOWN"
741
+ ]),
742
+ mergeStateStatus: z.string(),
743
+ reviewDecision: z.enum([
744
+ "APPROVED",
745
+ "CHANGES_REQUESTED",
746
+ "REVIEW_REQUIRED"
747
+ ]).nullable(),
748
+ repository: z.object({
749
+ nameWithOwner: repositoryName,
750
+ viewerDefaultMergeMethod: MyPrMergeMethod
751
+ }),
752
+ commits: z.object({ nodes: z.array(z.object({ commit: z.object({ statusCheckRollup: z.object({
753
+ state: z.enum([
754
+ "SUCCESS",
755
+ "FAILURE",
756
+ "PENDING",
757
+ "ERROR",
758
+ "EXPECTED"
759
+ ]).nullable(),
760
+ contexts: z.object({ nodes: z.array(z.union([CheckRun, StatusContext])) })
761
+ }).nullable() }) })) }),
762
+ reviewThreads: z.object({
763
+ pageInfo: z.object({ hasNextPage: z.boolean() }),
764
+ nodes: z.array(z.object({ isResolved: z.boolean() }))
765
+ }),
766
+ reviewRequests: z.object({ nodes: z.array(z.object({ requestedReviewer: z.discriminatedUnion("__typename", [
767
+ z.object({
768
+ __typename: z.literal("User"),
769
+ login: z.string()
770
+ }),
771
+ z.object({
772
+ __typename: z.literal("Team"),
773
+ slug: z.string(),
774
+ avatarUrl: z.string().nullable(),
775
+ organization: z.object({ login: z.string() })
776
+ }),
777
+ z.object({ __typename: z.enum(["Bot", "Mannequin"]) })
778
+ ]).nullable() })) }),
779
+ latestOpinionatedReviews: z.object({ nodes: z.array(z.object({ state: z.string() })) }),
780
+ latestReviews: z.object({ nodes: z.array(z.object({
781
+ state: z.string(),
782
+ submittedAt: z.string().nullable(),
783
+ author: z.object({ login: z.string() }).nullable()
784
+ })) })
785
+ });
786
+ var ThreadCommentAuthor = z.object({ login: z.string() }).nullable();
787
+ var MyPrThreadNode = z.object({
788
+ isResolved: z.boolean(),
789
+ isOutdated: z.boolean(),
790
+ path: z.string(),
791
+ line: z.number().int().positive().nullable(),
792
+ firstComment: z.object({
793
+ totalCount: nonnegativeInteger,
794
+ nodes: z.array(z.object({
795
+ author: ThreadCommentAuthor,
796
+ bodyText: z.string(),
797
+ url: z.url(),
798
+ createdAt: z.string()
799
+ }))
800
+ }),
801
+ lastComment: z.object({ nodes: z.array(z.object({
802
+ author: ThreadCommentAuthor,
803
+ createdAt: z.string()
804
+ })) })
805
+ });
806
+ var MyPrThreadsResponse = z.object({
807
+ data: z.object({ repository: z.object({ pullRequest: z.object({ reviewThreads: z.object({
808
+ pageInfo: z.object({
809
+ hasNextPage: z.boolean(),
810
+ endCursor: z.string().nullable()
811
+ }),
812
+ nodes: z.array(z.unknown())
813
+ }) }).nullable() }).nullable() }),
814
+ errors: z.array(z.unknown()).optional()
815
+ });
816
+ var MyPrMergeStateResponse = z.object({
817
+ data: z.object({ repository: z.object({ pullRequest: z.object({
818
+ state: z.string(),
819
+ isInMergeQueue: z.boolean(),
820
+ autoMergeRequest: z.object({ enabledAt: z.string().nullable() }).nullable()
821
+ }).nullable() }).nullable() }),
822
+ errors: z.array(z.unknown()).optional()
823
+ });
824
+ var MyPrSearchResponse = z.object({
825
+ data: z.object({
826
+ open: z.object({
827
+ issueCount: nonnegativeInteger,
828
+ nodes: z.array(z.unknown())
829
+ }),
830
+ merged: z.object({
831
+ issueCount: nonnegativeInteger,
832
+ nodes: z.array(z.unknown())
833
+ })
834
+ }),
835
+ errors: z.array(z.unknown()).optional()
836
+ });
837
+ var TASK_TITLE_CONTROL_CHARACTERS = /[\x00-\x1f\x7f-\x9f]/;
838
+ var TaskTitle = z.string().refine((title) => !TASK_TITLE_CONTROL_CHARACTERS.test(title)).trim().max(120);
839
+ var RefinedTaskTitle = z.object({ title: z.string().nullable() }).strict();
840
+ var SessionState = z.enum(STATES);
841
+ var PendingWakeup = z.object({
842
+ at: z.number().finite().nullable(),
843
+ kind: z.string(),
844
+ reason: z.string().nullable()
845
+ }).passthrough();
846
+ var ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion";
847
+ var ConversationApproval = z.object({
848
+ requestId: z.union([z.string().min(1).max(128), z.number().int()]),
849
+ kind: z.enum([
850
+ "command",
851
+ "fileChange",
852
+ "permissions"
853
+ ]),
854
+ summary: z.string().max(300),
855
+ isSummaryTruncated: z.boolean()
856
+ });
857
+ var ConversationApprovalDecision = z.enum([
858
+ "accept",
859
+ "acceptForSession",
860
+ "decline"
861
+ ]);
862
+ var SessionSnapshot = z.object({
863
+ id: z.string(),
864
+ name: z.string(),
865
+ taskTitle: TaskTitle.nullable().default(null),
866
+ taskTitleIsCustom: z.boolean().default(false),
867
+ path: z.string(),
868
+ agent: z.string(),
869
+ state: SessionState,
870
+ stateSince: z.number(),
871
+ sleeping: z.boolean(),
872
+ dangerouslySkipPermissions: z.boolean(),
873
+ saneYolo: z.boolean().default(false),
874
+ ephemeral: z.boolean(),
875
+ isWorktree: z.boolean(),
876
+ isWorkspace: z.boolean().default(false),
877
+ resumeSessionId: z.string().nullable(),
878
+ activeAgents: z.number().int().nonnegative(),
879
+ awaitingBackgroundTasks: z.boolean(),
880
+ isCompacting: z.boolean().default(false),
881
+ pendingWakeup: PendingWakeup.nullable(),
882
+ pendingPromptKind: z.string().nullable(),
883
+ conversationApproval: ConversationApproval.nullable().default(null),
884
+ hasConversationBridge: z.boolean().default(false),
885
+ isConversationViewOn: z.boolean().default(false),
886
+ hasPlan: z.boolean().default(false),
887
+ mergeStatus: z.string().nullable(),
888
+ mergeReason: z.string().nullable(),
889
+ worktreeNotice: z.string().nullable(),
890
+ effectiveBase: z.string().nullable(),
891
+ linkedPrs: z.array(LinkedPr).default([]),
892
+ auditLog: z.array(z.unknown())
893
+ }).passthrough();
894
+ var AGENT_URL_ENV = "GLIMMERVOID_AGENT_URL";
895
+ var SIGN_URL_ENV = "GLIMMERVOID_SIGN_URL";
896
+ var SSH_SIGN_BODY_CAP_BYTES = 1048576;
897
+ var SshSignRequest = z.object({
898
+ namespace: z.literal("git", { error: "namespace must be git" }),
899
+ publicKey: z.string({ error: "publicKey must be a string" }).min(1, { error: "publicKey must not be empty" }).max(16384, { error: "publicKey must be at most 16384 characters" }),
900
+ payload: z.base64({ error: "payload must be base64" })
901
+ }).strict();
902
+ var SshSignReply = z.union([z.object({
903
+ ok: z.literal(true),
904
+ signature: z.string()
905
+ }).strict(), z.object({
906
+ ok: z.literal(false),
907
+ error: z.string()
908
+ }).strict()]);
909
+ var AGENT_API_VERBS = [
910
+ "spawn",
911
+ "attention",
912
+ "board",
913
+ "dispatch",
914
+ "reopen",
915
+ "cancel",
916
+ "push",
917
+ "edit",
918
+ "limits"
919
+ ];
920
+ var ORCHESTRATOR_AGENT_VERBS = [
921
+ "dispatch",
922
+ "reopen",
923
+ "cancel"
924
+ ];
925
+ var AgentSpawnRequest = z.object({
926
+ prompt: z.string({ error: "prompt must be a string" }).min(1, { error: "prompt must not be empty" }).max(2e4, { error: "prompt must be at most 20000 characters" }).refine((prompt) => !prompt.trimStart().startsWith("-"), { message: "prompt must not start with a dash, which the agent CLI would read as an option" }),
927
+ name: z.string({ error: "name must be a string" }).min(1, { error: "name must not be empty" }).max(200, { error: "name must be at most 200 characters" }).optional(),
928
+ agent: z.string({ error: "agent must be a string" }).min(1, { error: "agent must not be empty" }).max(40, { error: "agent must be at most 40 characters" }).optional()
929
+ }).strict();
930
+ var AgentAttentionRequest = z.object({ note: z.string({ error: "note must be a string" }).min(1, { error: "note must not be empty" }).max(500, { error: "note must be at most 500 characters" }) }).strict();
931
+ z.union([z.object({
932
+ ok: z.literal(true),
933
+ pending: z.boolean()
934
+ }).strict(), z.object({
935
+ ok: z.literal(false),
936
+ error: z.string()
937
+ }).strict()]);
938
+ z.object({
939
+ id: SessionSnapshot.shape.id,
940
+ name: SessionSnapshot.shape.name,
941
+ agent: SessionSnapshot.shape.agent,
942
+ state: SessionSnapshot.shape.state,
943
+ ephemeral: SessionSnapshot.shape.ephemeral
944
+ }).strict();
945
+ var SESSION_DOC_BODY_CAP_BYTES = 262144;
946
+ var SESSION_DOC_PATH_MAX_CHARS = 4096;
947
+ var AgentEditRequest = z.object({ path: z.string({ error: "path must be a string" }).min(1, { error: "path must not be empty" }).max(SESSION_DOC_PATH_MAX_CHARS, { error: `path must be at most ${SESSION_DOC_PATH_MAX_CHARS} characters` }) }).strict();
948
+ var SessionDoc = z.object({
949
+ path: z.string(),
950
+ name: z.string(),
951
+ surfacedAt: z.number().finite()
952
+ }).strict();
953
+ var SESSION_COMMANDS = [
954
+ "push",
955
+ "spawn",
956
+ "attention",
957
+ "board",
958
+ "edit"
959
+ ];
960
+ var AgentLimitsReply = z.object({
961
+ commands: z.array(z.object({
962
+ name: z.enum(SESSION_COMMANDS),
963
+ answers: z.boolean(),
964
+ reason: z.string().optional()
965
+ }).strict()),
966
+ sandboxed: z.boolean(),
967
+ deadEnds: z.array(z.object({
968
+ blocked: z.string(),
969
+ route: z.string()
970
+ }).strict())
971
+ }).strict().extend({ ok: z.literal(true) }).strict();
972
+ var AgentDispatchRequest = z.object({
973
+ workId: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional(),
974
+ readyIntent: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional()
975
+ }).strict().refine((request) => Boolean(request.workId) !== Boolean(request.readyIntent), "Expected exactly one work id or ready intent");
976
+ var AgentTicketRequest = z.object({ workId: z.string({ error: "workId must be a string" }).regex(/^wrk-[0-9a-f]{16}$/, { error: "workId must match wrk-[0-9a-f]{16}" }) }).strict();
977
+ z.discriminatedUnion("ok", [z.object({
978
+ ok: z.literal(true),
979
+ workId: z.string(),
980
+ state: z.enum(["open", "cancelled"])
981
+ }), z.object({
982
+ ok: z.literal(false),
983
+ reason: z.string()
984
+ })]);
985
+ //#endregion
986
+ export { ReviewChecksState as $, MyPrKeepMergeableResult as A, KILLABLE_STATES as At, MyPrThreadsResponse as B, SshSignReply as C, GH_SEGMENT as Ct, LinkedPr as D, GithubPollingRefreshRequest as Dt, TaskTitle as E, repoParts as Et, MyPrMergeWhenReadyRequest as F, CommitSha as G, MyPrsStatus as H, MyPrMergeWhenReadyResult as I, GithubReviewDecision as J, DECIDING_REVIEW_STATES as K, MyPrSearchNode as L, MyPrMergeRequest as M, RESTARTABLE_STATES as Mt, MyPrMergeResult as N, STATES as Nt, MyPrAutoRebase as O, GithubPollingRefreshResult as Ot, MyPrMergeStateResponse as P, QueuedReview as Q, MyPrSearchResponse as R, SessionState as S, shortSha as St, TASK_TITLE_CONTROL_CHARACTERS as T, REPO_SLUG_RE as Tt, SessionPrLinks as U, MyPrsState as V, repositoryName as W, PostingPlan as X, GithubReviewState as Y, PrDetail as Z, SESSION_DOC_PATH_MAX_CHARS as _, decisionAsIfApprovalRequired as _t, AgentDispatchRequest as a, ReviewVerdict as at, SessionDoc as b, FULL_SHA_RE as bt, AgentSpawnRequest as c, TeamReviewActionResult as ct, ConversationApprovalDecision as d, TeamReviewStateEntry as dt, ReviewComment as et, ORCHESTRATOR_AGENT_VERBS as f, TeamReviewStatus as ft, SESSION_DOC_BODY_CAP_BYTES as g, canApproveAfterComment as gt, SESSION_COMMANDS as h, TeamReviewThreadsRepository as ht, AgentAttentionRequest as i, ReviewThreadId as it, MyPrMergeMethod as j, MERGEABLE_LIVE_STATES as jt, MyPrKeepMergeableRequest as k, githubPollingShape as kt, AgentTicketRequest as l, TeamReviewCompareFiles as lt, RefinedTaskTitle as m, TeamReviewThreadResult as mt, AGENT_URL_ENV as n, ReviewFinding as nt, AgentEditRequest as o, SearchedPr as ot, PendingWakeup as p, TeamReviewThreadCommentsResponse as pt, FindingSeverity as q, ASK_USER_QUESTION_TOOL_NAME as r, ReviewResult as rt, AgentLimitsReply as s, TeamReviewActionRequest as st, AGENT_API_VERBS as t, ReviewDraft as tt, ConversationApproval as u, TeamReviewResolveResponse as ut, SIGN_URL_ENV as v, hasRequiredActionHead as vt, SshSignRequest as w, NODE_ID_RE as wt, SessionSnapshot as x, HEX_SHA_RE as xt, SSH_SIGN_BODY_CAP_BYTES as y, hasStandingViewerApproval as yt, MyPrThreadNode as z };