glimmervoid 0.35.1 → 0.37.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 (50) hide show
  1. package/README.md +86 -82
  2. package/dist/bin/glimmervoid.js +58 -114
  3. package/dist/chunks/{adapters-CADejSpq.js → adapters-BmfVPxlH.js} +29 -61
  4. package/dist/chunks/adapters-CqFFmM2R.js +1 -0
  5. package/dist/chunks/{agent-api-cli-CRj_FYbz.js → agent-api-cli-BTHEyJKS.js} +1 -1
  6. package/dist/chunks/{agent-api-cli-vGwstJ1j.js → agent-api-cli-CBgOKXoO.js} +41 -12
  7. package/dist/chunks/{agent-api-core-D1233u1U.js → agent-api-core-DzKhakCv.js} +94 -3
  8. package/dist/chunks/{agent-setup-cli-BTAFcckd.js → agent-setup-cli-C8DGxlA-.js} +1 -1
  9. package/dist/chunks/{config-rPbbL4nW.js → config-BYc2z1Oc.js} +60 -779
  10. package/dist/chunks/config-store-B7MpiYxG.js +4181 -0
  11. package/dist/chunks/config-store-CsUoy88Q.js +1 -0
  12. package/dist/chunks/{contracts-DjIgIuDk.js → contracts-C6ipN_zw.js} +100 -12
  13. package/dist/chunks/git-version-6QFnKbWa.js +139 -0
  14. package/dist/chunks/{grok-KKgdSe-7.js → grok-CZ6kP_vD.js} +7 -3
  15. package/dist/chunks/guardrails-deps-Cb-ki4EU.js +70 -0
  16. package/dist/chunks/{sandbox-proxy-core-hnQgKR0T.js → guardrails-proxy-core-BI3rdY-m.js} +4 -4
  17. package/dist/chunks/{hook-command-core-DclEoE9e.js → hook-command-core-qTNK-xMF.js} +4 -1
  18. package/dist/chunks/{hook-tools-UX2fmt81.js → hook-tools-BkxllUHE.js} +9 -16
  19. package/dist/chunks/{knowledge-graph-cli-Rj5nj87L.js → knowledge-graph-cli-DApeMzA8.js} +1 -1
  20. package/dist/chunks/{loopback-post-DepQfdcM.js → loopback-post-DJ6iYWuL.js} +9 -9
  21. package/dist/chunks/{main-C-T2Uk20.js → main-BUfjroXE.js} +16282 -12595
  22. package/dist/chunks/{pair-cli-Dcyzv3In.js → pair-cli-GZ9t1mIO.js} +2 -2
  23. package/dist/chunks/{remote-config-Dd1T-VJA.js → remote-config-D2Is89Kj.js} +1 -1
  24. package/dist/chunks/{rtk-hook-core-BmEz2aq9.js → rtk-hook-core-VrUafGAp.js} +15 -5
  25. package/dist/chunks/rtk-resolver-B8BPgN9L.js +1 -0
  26. package/dist/chunks/{rtk-resolver-B9pzjLsM.js → rtk-resolver-C_micGrL.js} +1 -1
  27. package/dist/chunks/session-BZbariv5.js +1032 -0
  28. package/dist/chunks/{session-routes-BYy3am9m.js → session-routes-C4t8O8yg.js} +9 -9
  29. package/dist/chunks/settings-cli-DQOjmjev.js +484 -0
  30. package/dist/chunks/{ssh-sign-cli-DPHpT22B.js → ssh-sign-cli-LIBP8ppO.js} +2 -2
  31. package/dist/client/assets/index-B_Qt7fbZ.css +1 -0
  32. package/dist/client/assets/index-D-upBor0.js +265 -0
  33. package/dist/client/index.html +5 -3
  34. package/dist/scripts/postinstall-path-check.js +4 -4
  35. package/dist/server/index.js +1 -1
  36. package/dist/session/command-hook-relay.js +1 -1
  37. package/dist/session/{sandbox-open-launcher.js → guardrails-open-launcher.js} +10 -10
  38. package/dist/session/hook-relay.js +1 -1
  39. package/dist/session/hook-tool-relay.js +3 -3
  40. package/dist/session/statusline-relay.js +1 -1
  41. package/package.json +6 -5
  42. package/dist/chunks/adapters-B37wqNti.js +0 -1
  43. package/dist/chunks/config-store-BeIxAZNn.js +0 -1
  44. package/dist/chunks/config-store-BtsYbNC3.js +0 -1713
  45. package/dist/chunks/git-version-CUcDtF5k.js +0 -58
  46. package/dist/chunks/rtk-resolver-SWU5VVM7.js +0 -1
  47. package/dist/chunks/sandbox-deps-CWiH1d1w.js +0 -70
  48. package/dist/chunks/session-D6xXN0UU.js +0 -232
  49. package/dist/client/assets/index-CUxRHbCS.js +0 -254
  50. package/dist/client/assets/index-DE2GUmqs.css +0 -1
@@ -0,0 +1,1032 @@
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
+ startedAt: z.string().nullish(),
711
+ checkSuite: z.object({
712
+ app: z.object({ databaseId: z.number().int().nullish() }).nullish(),
713
+ workflowRun: z.object({ workflow: z.object({ databaseId: z.number().int().nullish() }) }).nullish()
714
+ }).nullish()
715
+ });
716
+ var StatusContext = z.object({
717
+ __typename: z.literal("StatusContext"),
718
+ context: z.string(),
719
+ state: z.string()
720
+ });
721
+ var MyPrCheckContext = z.union([CheckRun, StatusContext]);
722
+ var CheckContextsPageInfo = z.object({
723
+ hasNextPage: z.boolean(),
724
+ endCursor: z.string().nullable()
725
+ });
726
+ var MyPrSearchNode = z.object({
727
+ __typename: z.literal("PullRequest"),
728
+ id: z.string().regex(NODE_ID_RE),
729
+ number: z.number().int().positive(),
730
+ title: z.string(),
731
+ url: z.url(),
732
+ isDraft: z.boolean(),
733
+ state: z.enum([
734
+ "OPEN",
735
+ "MERGED",
736
+ "CLOSED"
737
+ ]),
738
+ createdAt: z.string(),
739
+ mergedAt: z.string().nullable(),
740
+ updatedAt: z.string(),
741
+ baseRefName: z.string(),
742
+ baseRefOid: CommitSha,
743
+ headRefName: z.string().min(1),
744
+ isCrossRepository: z.boolean(),
745
+ headRefOid: CommitSha,
746
+ isInMergeQueue: z.boolean(),
747
+ mergeable: z.enum([
748
+ "MERGEABLE",
749
+ "CONFLICTING",
750
+ "UNKNOWN"
751
+ ]),
752
+ mergeStateStatus: z.string(),
753
+ reviewDecision: z.enum([
754
+ "APPROVED",
755
+ "CHANGES_REQUESTED",
756
+ "REVIEW_REQUIRED"
757
+ ]).nullable(),
758
+ repository: z.object({
759
+ nameWithOwner: repositoryName,
760
+ viewerDefaultMergeMethod: MyPrMergeMethod
761
+ }),
762
+ commits: z.object({ nodes: z.array(z.object({ commit: z.object({ statusCheckRollup: z.object({
763
+ id: z.string().regex(NODE_ID_RE).optional(),
764
+ state: z.enum([
765
+ "SUCCESS",
766
+ "FAILURE",
767
+ "PENDING",
768
+ "ERROR",
769
+ "EXPECTED"
770
+ ]).nullable(),
771
+ contexts: z.object({
772
+ pageInfo: CheckContextsPageInfo.optional(),
773
+ nodes: z.array(MyPrCheckContext)
774
+ })
775
+ }).nullable() }) })) }),
776
+ reviewThreads: z.object({
777
+ pageInfo: z.object({ hasNextPage: z.boolean() }),
778
+ nodes: z.array(z.object({ isResolved: z.boolean() }))
779
+ }),
780
+ reviewRequests: z.object({ nodes: z.array(z.object({ requestedReviewer: z.discriminatedUnion("__typename", [
781
+ z.object({
782
+ __typename: z.literal("User"),
783
+ login: z.string()
784
+ }),
785
+ z.object({
786
+ __typename: z.literal("Team"),
787
+ slug: z.string(),
788
+ avatarUrl: z.string().nullable(),
789
+ organization: z.object({ login: z.string() })
790
+ }),
791
+ z.object({ __typename: z.enum(["Bot", "Mannequin"]) })
792
+ ]).nullable() })) }),
793
+ latestOpinionatedReviews: z.object({ nodes: z.array(z.object({ state: z.string() })) }),
794
+ latestReviews: z.object({ nodes: z.array(z.object({
795
+ state: z.string(),
796
+ submittedAt: z.string().nullable(),
797
+ author: z.object({ login: z.string() }).nullable()
798
+ })) })
799
+ });
800
+ var ThreadCommentAuthor = z.object({ login: z.string() }).nullable();
801
+ var MyPrThreadNode = z.object({
802
+ isResolved: z.boolean(),
803
+ isOutdated: z.boolean(),
804
+ path: z.string(),
805
+ line: z.number().int().positive().nullable(),
806
+ firstComment: z.object({
807
+ totalCount: nonnegativeInteger,
808
+ nodes: z.array(z.object({
809
+ author: ThreadCommentAuthor,
810
+ bodyText: z.string(),
811
+ url: z.url(),
812
+ createdAt: z.string()
813
+ }))
814
+ }),
815
+ lastComment: z.object({ nodes: z.array(z.object({
816
+ author: ThreadCommentAuthor,
817
+ createdAt: z.string()
818
+ })) })
819
+ });
820
+ var MyPrThreadsResponse = z.object({
821
+ data: z.object({ repository: z.object({ pullRequest: z.object({ reviewThreads: z.object({
822
+ pageInfo: z.object({
823
+ hasNextPage: z.boolean(),
824
+ endCursor: z.string().nullable()
825
+ }),
826
+ nodes: z.array(z.unknown())
827
+ }) }).nullable() }).nullable() }),
828
+ errors: z.array(z.unknown()).optional()
829
+ });
830
+ var MyPrCheckContextsResponse = z.object({
831
+ data: z.object({ node: z.object({ contexts: z.object({
832
+ pageInfo: CheckContextsPageInfo,
833
+ nodes: z.array(z.unknown())
834
+ }).nullable() }).nullable() }).nullable(),
835
+ errors: z.array(z.unknown()).optional()
836
+ });
837
+ var MyPrMergeStateResponse = z.object({
838
+ data: z.object({ repository: z.object({ pullRequest: z.object({
839
+ state: z.string(),
840
+ isInMergeQueue: z.boolean(),
841
+ autoMergeRequest: z.object({ enabledAt: z.string().nullable() }).nullable()
842
+ }).nullable() }).nullable() }),
843
+ errors: z.array(z.unknown()).optional()
844
+ });
845
+ var MyPrSearchResponse = z.object({
846
+ data: z.object({
847
+ open: z.object({
848
+ issueCount: nonnegativeInteger,
849
+ nodes: z.array(z.unknown())
850
+ }),
851
+ merged: z.object({
852
+ issueCount: nonnegativeInteger,
853
+ nodes: z.array(z.unknown())
854
+ })
855
+ }),
856
+ errors: z.array(z.unknown()).optional()
857
+ });
858
+ var TASK_TITLE_CONTROL_CHARACTERS = /[\x00-\x1f\x7f-\x9f]/;
859
+ var TaskTitle = z.string().refine((title) => !TASK_TITLE_CONTROL_CHARACTERS.test(title)).trim().max(120);
860
+ var RefinedTaskTitle = z.object({ title: z.string().nullable() }).strict();
861
+ var SessionState = z.enum(STATES);
862
+ var PendingWakeup = z.object({
863
+ at: z.number().finite().nullable(),
864
+ kind: z.string(),
865
+ reason: z.string().nullable()
866
+ }).passthrough();
867
+ var ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion";
868
+ var CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS = 4e3;
869
+ var CONVERSATION_PERMISSION_HOOK_EVENT = "permissionrequest-conversation";
870
+ var CONVERSATION_TOOL_RESULT_HOOK_EVENT = "posttooluse-conversation";
871
+ var CONVERSATION_QUESTION_MAX_CHARS = 1e3;
872
+ var CONVERSATION_ANSWER_MAX_CHARS = 2e3;
873
+ var ConversationQuestion = z.object({
874
+ question: z.string().min(1).max(CONVERSATION_QUESTION_MAX_CHARS),
875
+ header: z.string().max(100).default(""),
876
+ options: z.array(z.object({
877
+ label: z.string().min(1).max(200),
878
+ description: z.string().max(CONVERSATION_QUESTION_MAX_CHARS).default("")
879
+ })).min(1).max(8),
880
+ multiSelect: z.boolean().default(false)
881
+ });
882
+ var ConversationApproval = z.object({
883
+ requestId: z.union([z.string().min(1).max(128), z.number().int()]),
884
+ kind: z.enum([
885
+ "command",
886
+ "fileChange",
887
+ "permissions",
888
+ "tool",
889
+ "question"
890
+ ]),
891
+ summary: z.string().max(CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS),
892
+ isSummaryTruncated: z.boolean(),
893
+ toolName: z.string().max(200).optional(),
894
+ questions: z.array(ConversationQuestion).min(1).max(4).optional(),
895
+ alwaysAllowSummary: z.string().max(CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS).optional()
896
+ });
897
+ var ConversationAnswers = z.record(z.string().max(CONVERSATION_QUESTION_MAX_CHARS), z.string().max(CONVERSATION_ANSWER_MAX_CHARS));
898
+ var ConversationApprovalDecision = z.enum([
899
+ "accept",
900
+ "acceptForSession",
901
+ "decline"
902
+ ]);
903
+ var SessionSnapshot = z.object({
904
+ id: z.string(),
905
+ name: z.string(),
906
+ taskTitle: TaskTitle.nullable().default(null),
907
+ taskTitleIsCustom: z.boolean().default(false),
908
+ path: z.string(),
909
+ agent: z.string(),
910
+ state: SessionState,
911
+ stateSince: z.number(),
912
+ sleeping: z.boolean(),
913
+ dangerouslySkipPermissions: z.boolean(),
914
+ saneYolo: z.boolean().default(false),
915
+ ephemeral: z.boolean(),
916
+ isWorktree: z.boolean(),
917
+ isWorkspace: z.boolean().default(false),
918
+ isGuarded: z.boolean().default(false),
919
+ resumeSessionId: z.string().nullable(),
920
+ activeAgents: z.number().int().nonnegative(),
921
+ awaitingBackgroundTasks: z.boolean(),
922
+ isCompacting: z.boolean().default(false),
923
+ pendingWakeup: PendingWakeup.nullable(),
924
+ pendingPromptKind: z.string().nullable(),
925
+ conversationApproval: ConversationApproval.nullable().default(null),
926
+ hasConversationBridge: z.boolean().default(false),
927
+ isConversationViewOn: z.boolean().default(false),
928
+ hasPlan: z.boolean().default(false),
929
+ mergeStatus: z.string().nullable(),
930
+ mergeReason: z.string().nullable(),
931
+ worktreeNotice: z.string().nullable(),
932
+ effectiveBase: z.string().nullable(),
933
+ linkedPrs: z.array(LinkedPr).default([]),
934
+ auditLog: z.array(z.unknown())
935
+ }).passthrough();
936
+ var AGENT_URL_ENV = "GLIMMERVOID_AGENT_URL";
937
+ var SIGN_URL_ENV = "GLIMMERVOID_SIGN_URL";
938
+ var SSH_SIGN_BODY_CAP_BYTES = 1048576;
939
+ var SshSignRequest = z.object({
940
+ namespace: z.literal("git", { error: "namespace must be git" }),
941
+ 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" }),
942
+ payload: z.base64({ error: "payload must be base64" })
943
+ }).strict();
944
+ var SshSignReply = z.union([z.object({
945
+ ok: z.literal(true),
946
+ signature: z.string()
947
+ }).strict(), z.object({
948
+ ok: z.literal(false),
949
+ error: z.string()
950
+ }).strict()]);
951
+ var AGENT_API_VERBS = [
952
+ "spawn",
953
+ "attention",
954
+ "board",
955
+ "dispatch",
956
+ "reopen",
957
+ "cancel",
958
+ "push",
959
+ "edit",
960
+ "limits",
961
+ "factory-status",
962
+ "factory-retry"
963
+ ];
964
+ var ORCHESTRATOR_AGENT_VERBS = [
965
+ "dispatch",
966
+ "reopen",
967
+ "cancel"
968
+ ];
969
+ var AgentFactoryStatusRequest = z.object({ projectId: z.string().trim().min(1).max(128).optional() }).strict();
970
+ var AgentFactoryRetryRequest = z.object({ intentId: z.string().trim().min(1).max(128) }).strict();
971
+ var AgentSpawnRequest = z.object({
972
+ 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" }),
973
+ 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(),
974
+ 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()
975
+ }).strict();
976
+ 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();
977
+ z.union([z.object({
978
+ ok: z.literal(true),
979
+ pending: z.boolean()
980
+ }).strict(), z.object({
981
+ ok: z.literal(false),
982
+ error: z.string()
983
+ }).strict()]);
984
+ z.object({
985
+ id: SessionSnapshot.shape.id,
986
+ name: SessionSnapshot.shape.name,
987
+ agent: SessionSnapshot.shape.agent,
988
+ state: SessionSnapshot.shape.state,
989
+ ephemeral: SessionSnapshot.shape.ephemeral
990
+ }).strict();
991
+ var SESSION_DOC_BODY_CAP_BYTES = 262144;
992
+ var SESSION_DOC_PATH_MAX_CHARS = 4096;
993
+ 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();
994
+ var SessionDoc = z.object({
995
+ path: z.string(),
996
+ name: z.string(),
997
+ surfacedAt: z.number().finite()
998
+ }).strict();
999
+ var SESSION_COMMANDS = [
1000
+ "push",
1001
+ "spawn",
1002
+ "attention",
1003
+ "board",
1004
+ "edit"
1005
+ ];
1006
+ var AgentLimitsReply = z.object({
1007
+ commands: z.array(z.object({
1008
+ name: z.enum(SESSION_COMMANDS),
1009
+ answers: z.boolean(),
1010
+ reason: z.string().optional()
1011
+ }).strict()),
1012
+ guarded: z.boolean(),
1013
+ deadEnds: z.array(z.object({
1014
+ blocked: z.string(),
1015
+ route: z.string()
1016
+ }).strict())
1017
+ }).strict().extend({ ok: z.literal(true) }).strict();
1018
+ var AgentDispatchRequest = z.object({
1019
+ workId: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional(),
1020
+ readyIntent: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional()
1021
+ }).strict().refine((request) => Boolean(request.workId) !== Boolean(request.readyIntent), "Expected exactly one work id or ready intent");
1022
+ 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();
1023
+ z.discriminatedUnion("ok", [z.object({
1024
+ ok: z.literal(true),
1025
+ workId: z.string(),
1026
+ state: z.enum(["open", "cancelled"])
1027
+ }), z.object({
1028
+ ok: z.literal(false),
1029
+ reason: z.string()
1030
+ })]);
1031
+ //#endregion
1032
+ export { repositoryName as $, SshSignReply as A, HEX_SHA_RE as At, MyPrMergeMethod as B, MERGEABLE_LIVE_STATES as Bt, SESSION_DOC_BODY_CAP_BYTES as C, TeamReviewThreadResult as Ct, SessionDoc as D, hasRequiredActionHead as Dt, SSH_SIGN_BODY_CAP_BYTES as E, decisionAsIfApprovalRequired as Et, MyPrAutoRebase as F, repoParts as Ft, MyPrMergeWhenReadyResult as G, MyPrMergeResult as H, STATES as Ht, MyPrCheckContext as I, GithubPollingRefreshRequest as It, MyPrThreadNode as J, MyPrSearchNode as K, MyPrCheckContextsResponse as L, GithubPollingRefreshResult as Lt, TASK_TITLE_CONTROL_CHARACTERS as M, GH_SEGMENT as Mt, TaskTitle as N, NODE_ID_RE as Nt, SessionSnapshot as O, hasStandingViewerApproval as Ot, LinkedPr as P, REPO_SLUG_RE as Pt, SessionPrLinks as Q, MyPrKeepMergeableRequest as R, githubPollingShape as Rt, SESSION_COMMANDS as S, TeamReviewThreadCommentsResponse as St, SIGN_URL_ENV as T, canApproveAfterComment as Tt, MyPrMergeStateResponse as U, MyPrMergeRequest as V, RESTARTABLE_STATES as Vt, MyPrMergeWhenReadyRequest as W, MyPrsState as X, MyPrThreadsResponse as Y, MyPrsStatus as Z, ConversationApprovalDecision as _, TeamReviewActionResult as _t, AgentDispatchRequest as a, PostingPlan as at, PendingWakeup as b, TeamReviewStateEntry as bt, AgentFactoryStatusRequest as c, ReviewChecksState as ct, AgentTicketRequest as d, ReviewFinding as dt, CommitSha as et, CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS as f, ReviewResult as ft, ConversationApproval as g, TeamReviewActionRequest as gt, ConversationAnswers as h, SearchedPr as ht, AgentAttentionRequest as i, GithubReviewState as it, SshSignRequest as j, shortSha as jt, SessionState as k, FULL_SHA_RE as kt, AgentLimitsReply as l, ReviewComment as lt, CONVERSATION_TOOL_RESULT_HOOK_EVENT as m, ReviewVerdict as mt, AGENT_URL_ENV as n, FindingSeverity as nt, AgentEditRequest as o, PrDetail as ot, CONVERSATION_PERMISSION_HOOK_EVENT as p, ReviewThreadId as pt, MyPrSearchResponse as q, ASK_USER_QUESTION_TOOL_NAME as r, GithubReviewDecision as rt, AgentFactoryRetryRequest as s, QueuedReview as st, AGENT_API_VERBS as t, DECIDING_REVIEW_STATES as tt, AgentSpawnRequest as u, ReviewDraft as ut, ConversationQuestion as v, TeamReviewCompareFiles as vt, SESSION_DOC_PATH_MAX_CHARS as w, TeamReviewThreadsRepository as wt, RefinedTaskTitle as x, TeamReviewStatus as xt, ORCHESTRATOR_AGENT_VERBS as y, TeamReviewResolveResponse as yt, MyPrKeepMergeableResult as z, KILLABLE_STATES as zt };