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.
- package/README.md +86 -82
- package/dist/bin/glimmervoid.js +58 -114
- package/dist/chunks/{adapters-CADejSpq.js → adapters-BmfVPxlH.js} +29 -61
- package/dist/chunks/adapters-CqFFmM2R.js +1 -0
- package/dist/chunks/{agent-api-cli-CRj_FYbz.js → agent-api-cli-BTHEyJKS.js} +1 -1
- package/dist/chunks/{agent-api-cli-vGwstJ1j.js → agent-api-cli-CBgOKXoO.js} +41 -12
- package/dist/chunks/{agent-api-core-D1233u1U.js → agent-api-core-DzKhakCv.js} +94 -3
- package/dist/chunks/{agent-setup-cli-BTAFcckd.js → agent-setup-cli-C8DGxlA-.js} +1 -1
- package/dist/chunks/{config-rPbbL4nW.js → config-BYc2z1Oc.js} +60 -779
- package/dist/chunks/config-store-B7MpiYxG.js +4181 -0
- package/dist/chunks/config-store-CsUoy88Q.js +1 -0
- package/dist/chunks/{contracts-DjIgIuDk.js → contracts-C6ipN_zw.js} +100 -12
- package/dist/chunks/git-version-6QFnKbWa.js +139 -0
- package/dist/chunks/{grok-KKgdSe-7.js → grok-CZ6kP_vD.js} +7 -3
- package/dist/chunks/guardrails-deps-Cb-ki4EU.js +70 -0
- package/dist/chunks/{sandbox-proxy-core-hnQgKR0T.js → guardrails-proxy-core-BI3rdY-m.js} +4 -4
- package/dist/chunks/{hook-command-core-DclEoE9e.js → hook-command-core-qTNK-xMF.js} +4 -1
- package/dist/chunks/{hook-tools-UX2fmt81.js → hook-tools-BkxllUHE.js} +9 -16
- package/dist/chunks/{knowledge-graph-cli-Rj5nj87L.js → knowledge-graph-cli-DApeMzA8.js} +1 -1
- package/dist/chunks/{loopback-post-DepQfdcM.js → loopback-post-DJ6iYWuL.js} +9 -9
- package/dist/chunks/{main-C-T2Uk20.js → main-BUfjroXE.js} +16282 -12595
- package/dist/chunks/{pair-cli-Dcyzv3In.js → pair-cli-GZ9t1mIO.js} +2 -2
- package/dist/chunks/{remote-config-Dd1T-VJA.js → remote-config-D2Is89Kj.js} +1 -1
- package/dist/chunks/{rtk-hook-core-BmEz2aq9.js → rtk-hook-core-VrUafGAp.js} +15 -5
- package/dist/chunks/rtk-resolver-B8BPgN9L.js +1 -0
- package/dist/chunks/{rtk-resolver-B9pzjLsM.js → rtk-resolver-C_micGrL.js} +1 -1
- package/dist/chunks/session-BZbariv5.js +1032 -0
- package/dist/chunks/{session-routes-BYy3am9m.js → session-routes-C4t8O8yg.js} +9 -9
- package/dist/chunks/settings-cli-DQOjmjev.js +484 -0
- package/dist/chunks/{ssh-sign-cli-DPHpT22B.js → ssh-sign-cli-LIBP8ppO.js} +2 -2
- package/dist/client/assets/index-B_Qt7fbZ.css +1 -0
- package/dist/client/assets/index-D-upBor0.js +265 -0
- package/dist/client/index.html +5 -3
- package/dist/scripts/postinstall-path-check.js +4 -4
- package/dist/server/index.js +1 -1
- package/dist/session/command-hook-relay.js +1 -1
- package/dist/session/{sandbox-open-launcher.js → guardrails-open-launcher.js} +10 -10
- package/dist/session/hook-relay.js +1 -1
- package/dist/session/hook-tool-relay.js +3 -3
- package/dist/session/statusline-relay.js +1 -1
- package/package.json +6 -5
- package/dist/chunks/adapters-B37wqNti.js +0 -1
- package/dist/chunks/config-store-BeIxAZNn.js +0 -1
- package/dist/chunks/config-store-BtsYbNC3.js +0 -1713
- package/dist/chunks/git-version-CUcDtF5k.js +0 -58
- package/dist/chunks/rtk-resolver-SWU5VVM7.js +0 -1
- package/dist/chunks/sandbox-deps-CWiH1d1w.js +0 -70
- package/dist/chunks/session-D6xXN0UU.js +0 -232
- package/dist/client/assets/index-CUxRHbCS.js +0 -254
- package/dist/client/assets/index-DE2GUmqs.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $ as repositoryName, Ft as repoParts, K as MyPrSearchNode, Mt as GH_SEGMENT, N as TaskTitle, Q as SessionPrLinks, et as CommitSha } from "./session-BZbariv5.js";
|
|
2
2
|
import { n as isRecord } from "./coerce-NSst8oRP.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { z } from "zod";
|
|
@@ -99,7 +99,8 @@ var CoherenceWorkInspect = z.looseObject({
|
|
|
99
99
|
last: z.looseObject({
|
|
100
100
|
event: z.string(),
|
|
101
101
|
at: z.string(),
|
|
102
|
-
session: z.string()
|
|
102
|
+
session: z.string(),
|
|
103
|
+
reason: z.string().optional()
|
|
103
104
|
}).nullable(),
|
|
104
105
|
opened: z.looseObject({
|
|
105
106
|
at: z.iso.datetime(),
|
|
@@ -165,10 +166,27 @@ var FLYING_ANIMALS_SCALE_RANGE = Object.freeze({
|
|
|
165
166
|
min: .5,
|
|
166
167
|
max: 2
|
|
167
168
|
});
|
|
169
|
+
var FLYING_ANIMALS_DEFAULTS = Object.freeze({
|
|
170
|
+
flyingAnimalsMinGapSeconds: 20,
|
|
171
|
+
flyingAnimalsMaxGapSeconds: 40,
|
|
172
|
+
flyingAnimalsMinDurationSeconds: 6.9,
|
|
173
|
+
flyingAnimalsMaxDurationSeconds: 11.5,
|
|
174
|
+
flyingAnimalsScale: 1,
|
|
175
|
+
flyingAnimalsOnPhone: true
|
|
176
|
+
});
|
|
168
177
|
var REPLAY_BUFFER_KB_RANGE = Object.freeze({
|
|
169
178
|
min: 64,
|
|
170
179
|
max: 16384
|
|
171
180
|
});
|
|
181
|
+
var PORT_RANGE = Object.freeze({
|
|
182
|
+
min: 0,
|
|
183
|
+
max: 65535
|
|
184
|
+
});
|
|
185
|
+
var TASK_TITLE_TIMEOUT_RANGE = Object.freeze({
|
|
186
|
+
min: 0,
|
|
187
|
+
exclusiveMin: true,
|
|
188
|
+
max: 2147483647 / 1e3
|
|
189
|
+
});
|
|
172
190
|
var BRANCH_GC_STALE_DAYS_RANGE = POSITIVE_NUMBER_RANGE;
|
|
173
191
|
var BRANCH_GC_INTERVAL_MS_RANGE = POSITIVE_NUMBER_RANGE;
|
|
174
192
|
var VISIONS_QUIET_MS_RANGE = POSITIVE_NUMBER_RANGE;
|
|
@@ -250,6 +268,7 @@ Object.freeze({
|
|
|
250
268
|
FLYING_ANIMALS_SCALE_RANGE,
|
|
251
269
|
CHANGE_MAP_NARRATOR_TIMEOUT_RANGE,
|
|
252
270
|
KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE,
|
|
271
|
+
PORT_RANGE,
|
|
253
272
|
POSTHOG_ESCALATION_RANGE,
|
|
254
273
|
POSTHOG_FIX_TIMEOUT_RANGE,
|
|
255
274
|
POSTHOG_INTERVAL_RANGE,
|
|
@@ -261,6 +280,7 @@ Object.freeze({
|
|
|
261
280
|
POSTHOG_TRAFFIC_MIN_USERS_RANGE,
|
|
262
281
|
POSTHOG_TRAFFIC_MULTIPLIER_RANGE,
|
|
263
282
|
REPLAY_BUFFER_KB_RANGE,
|
|
283
|
+
TASK_TITLE_TIMEOUT_RANGE,
|
|
264
284
|
USAGE_BUDGET_RANGE,
|
|
265
285
|
USAGE_RETAIN_DAYS_RANGE,
|
|
266
286
|
USAGE_SCAN_INTERVAL_RANGE,
|
|
@@ -374,766 +394,6 @@ var USAGE_COST_MODES = Object.freeze([
|
|
|
374
394
|
var USAGE_VENDOR_KEYS = Object.freeze(["codex", "grok"]);
|
|
375
395
|
var USAGE_BUDGET_KEYS = Object.freeze(["dailyUsd", "monthlyUsd"]);
|
|
376
396
|
//#endregion
|
|
377
|
-
//#region shared/contracts/github-polling.ts
|
|
378
|
-
var GithubPollingRetry = z.object({
|
|
379
|
-
attempt: z.number().int().positive(),
|
|
380
|
-
limit: z.number().int().positive()
|
|
381
|
-
}).refine((retry) => retry.attempt <= retry.limit);
|
|
382
|
-
var githubPollingShape = {
|
|
383
|
-
error: z.string().nullable().optional(),
|
|
384
|
-
nextAttemptAt: z.number().finite().nonnegative().nullable().optional(),
|
|
385
|
-
retry: GithubPollingRetry.nullable().optional(),
|
|
386
|
-
isRefreshing: z.boolean().optional(),
|
|
387
|
-
refreshNotice: z.string().nullable().optional()
|
|
388
|
-
};
|
|
389
|
-
var GithubPollingRefreshRequest = z.object({ lane: z.enum([
|
|
390
|
-
"my-prs",
|
|
391
|
-
"team-review",
|
|
392
|
-
"issues"
|
|
393
|
-
]) });
|
|
394
|
-
var GithubPollingRefreshResult = z.object({
|
|
395
|
-
ok: z.boolean(),
|
|
396
|
-
error: z.string().optional()
|
|
397
|
-
});
|
|
398
|
-
//#endregion
|
|
399
|
-
//#region shared/contracts/github-ids.ts
|
|
400
|
-
var GH_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
401
|
-
var REPO_SLUG_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
402
|
-
var NODE_ID_RE = /^[A-Za-z0-9_=-]+$/;
|
|
403
|
-
function repoParts(repo) {
|
|
404
|
-
const parts = repo.split("/");
|
|
405
|
-
if (parts.length !== 2 || !parts.every((part) => GH_SEGMENT.test(part))) return null;
|
|
406
|
-
return [parts[0], parts[1]];
|
|
407
|
-
}
|
|
408
|
-
var HEX_SHA_RE = /^[0-9a-f]{7,40}$/i;
|
|
409
|
-
var FULL_SHA_RE = /^[0-9a-f]{40}$/;
|
|
410
|
-
function shortSha(sha, { chars = 7, validate = false } = {}) {
|
|
411
|
-
if (typeof sha !== "string" || !sha) return "";
|
|
412
|
-
if (!validate) return sha.slice(0, chars);
|
|
413
|
-
const text = sha.trim();
|
|
414
|
-
if (!HEX_SHA_RE.test(text)) return "";
|
|
415
|
-
return text.slice(0, chars).toLowerCase();
|
|
416
|
-
}
|
|
417
|
-
//#endregion
|
|
418
|
-
//#region shared/contracts/team-review.ts
|
|
419
|
-
var CommitSha = z.string().regex(FULL_SHA_RE);
|
|
420
|
-
var repoSlug = z.string().regex(/^[^/]+\/[^/]+$/);
|
|
421
|
-
var SearchedPr = z.object({
|
|
422
|
-
number: z.number().int().positive(),
|
|
423
|
-
title: z.string(),
|
|
424
|
-
html_url: z.string(),
|
|
425
|
-
draft: z.boolean().optional(),
|
|
426
|
-
created_at: z.string().optional(),
|
|
427
|
-
updated_at: z.string().optional(),
|
|
428
|
-
repository_url: z.string(),
|
|
429
|
-
user: z.object({
|
|
430
|
-
login: z.string(),
|
|
431
|
-
type: z.enum(["User", "Bot"])
|
|
432
|
-
}).passthrough(),
|
|
433
|
-
pull_request: z.object({}).passthrough()
|
|
434
|
-
}).passthrough();
|
|
435
|
-
var PrDetail = z.object({
|
|
436
|
-
number: z.number().int().positive(),
|
|
437
|
-
title: z.string(),
|
|
438
|
-
body: z.string(),
|
|
439
|
-
url: z.string(),
|
|
440
|
-
author: z.object({
|
|
441
|
-
login: z.string(),
|
|
442
|
-
is_bot: z.boolean().optional()
|
|
443
|
-
}).passthrough(),
|
|
444
|
-
isDraft: z.boolean(),
|
|
445
|
-
isCrossRepository: z.boolean(),
|
|
446
|
-
baseRefName: z.string(),
|
|
447
|
-
baseRefOid: CommitSha,
|
|
448
|
-
headRefOid: CommitSha,
|
|
449
|
-
additions: z.number().int().nonnegative(),
|
|
450
|
-
deletions: z.number().int().nonnegative(),
|
|
451
|
-
files: z.array(z.object({
|
|
452
|
-
path: z.string(),
|
|
453
|
-
additions: z.number().int().nonnegative(),
|
|
454
|
-
deletions: z.number().int().nonnegative()
|
|
455
|
-
}).passthrough())
|
|
456
|
-
}).passthrough();
|
|
457
|
-
var ReviewComment = z.object({
|
|
458
|
-
path: z.string(),
|
|
459
|
-
line: z.number().int().positive(),
|
|
460
|
-
side: z.enum(["RIGHT", "LEFT"]).default("RIGHT"),
|
|
461
|
-
body: z.string()
|
|
462
|
-
});
|
|
463
|
-
var LEGACY_VERDICTS = Object.freeze({
|
|
464
|
-
STAMP: "APPROVE",
|
|
465
|
-
COMMENT: "APPROVE WITH NITS",
|
|
466
|
-
NEEDS_YOU: "REQUEST CHANGES"
|
|
467
|
-
});
|
|
468
|
-
var ReviewVerdict = z.enum([
|
|
469
|
-
"APPROVE",
|
|
470
|
-
"APPROVE WITH NITS",
|
|
471
|
-
"REQUEST CHANGES",
|
|
472
|
-
"BLOCKED"
|
|
473
|
-
]);
|
|
474
|
-
var storedVerdict = z.preprocess((verdict) => typeof verdict === "string" && Object.hasOwn(LEGACY_VERDICTS, verdict) ? LEGACY_VERDICTS[verdict] : verdict, ReviewVerdict);
|
|
475
|
-
var FindingSeverity = z.enum([
|
|
476
|
-
"CRITICAL",
|
|
477
|
-
"HIGH",
|
|
478
|
-
"MEDIUM",
|
|
479
|
-
"LOW"
|
|
480
|
-
]);
|
|
481
|
-
var DraftComment = ReviewComment.extend({ severity: FindingSeverity.optional() });
|
|
482
|
-
var ReviewFinding = z.object({
|
|
483
|
-
path: z.string().min(1),
|
|
484
|
-
line: z.number().int().positive().nullable(),
|
|
485
|
-
side: z.enum(["RIGHT", "LEFT"]),
|
|
486
|
-
severity: FindingSeverity,
|
|
487
|
-
reviewer: z.string().min(1),
|
|
488
|
-
disposition: z.enum([
|
|
489
|
-
"ACTIONABLE",
|
|
490
|
-
"NIT",
|
|
491
|
-
"AMBIGUOUS"
|
|
492
|
-
]).nullable(),
|
|
493
|
-
body: z.string().min(1)
|
|
494
|
-
});
|
|
495
|
-
var ReviewAssessment = z.object({
|
|
496
|
-
goal: z.string().default(""),
|
|
497
|
-
change: z.string(),
|
|
498
|
-
checked: z.array(z.string()),
|
|
499
|
-
gaps: z.array(z.string())
|
|
500
|
-
});
|
|
501
|
-
var ReviewResult = z.object({
|
|
502
|
-
verdict: ReviewVerdict,
|
|
503
|
-
head: CommitSha,
|
|
504
|
-
summary: z.string(),
|
|
505
|
-
assessment: ReviewAssessment.nullable(),
|
|
506
|
-
findings: z.array(ReviewFinding)
|
|
507
|
-
});
|
|
508
|
-
var PostingPlan = z.object({
|
|
509
|
-
body: z.string(),
|
|
510
|
-
commit_id: CommitSha,
|
|
511
|
-
comments: z.array(z.object({
|
|
512
|
-
path: z.string().min(1),
|
|
513
|
-
line: z.number().int().positive(),
|
|
514
|
-
side: z.enum(["RIGHT", "LEFT"]).default("RIGHT"),
|
|
515
|
-
body: z.string().min(1)
|
|
516
|
-
}))
|
|
517
|
-
});
|
|
518
|
-
var PostedReviewEvent = z.enum(["APPROVE", "COMMENT"]);
|
|
519
|
-
var GithubReviewState = z.enum([
|
|
520
|
-
"APPROVED",
|
|
521
|
-
"CHANGES_REQUESTED",
|
|
522
|
-
"COMMENTED"
|
|
523
|
-
]);
|
|
524
|
-
var DECIDING_REVIEW_STATES = /* @__PURE__ */ new Set(["APPROVED", "CHANGES_REQUESTED"]);
|
|
525
|
-
var GithubReviewDecision = z.enum([
|
|
526
|
-
"APPROVED",
|
|
527
|
-
"CHANGES_REQUESTED",
|
|
528
|
-
"REVIEW_REQUIRED"
|
|
529
|
-
]);
|
|
530
|
-
var ReviewChecksState = z.enum([
|
|
531
|
-
"SUCCESS",
|
|
532
|
-
"FAILURE",
|
|
533
|
-
"PENDING",
|
|
534
|
-
"ERROR",
|
|
535
|
-
"EXPECTED"
|
|
536
|
-
]);
|
|
537
|
-
var reviewPriorityShape = {
|
|
538
|
-
requestSource: z.enum(["direct", "team"]).default("team"),
|
|
539
|
-
isDraft: z.boolean().optional(),
|
|
540
|
-
checksState: ReviewChecksState.nullable().optional()
|
|
541
|
-
};
|
|
542
|
-
var GithubReview = z.object({
|
|
543
|
-
login: z.string().min(1),
|
|
544
|
-
state: GithubReviewState,
|
|
545
|
-
commit: CommitSha.nullable(),
|
|
546
|
-
isViewer: z.boolean(),
|
|
547
|
-
submittedAt: z.string().nullable().optional()
|
|
548
|
-
});
|
|
549
|
-
function decisionAsIfApprovalRequired(githubDecision, opinionatedWriterReviewStates) {
|
|
550
|
-
if (githubDecision) return githubDecision;
|
|
551
|
-
if (opinionatedWriterReviewStates.includes("CHANGES_REQUESTED")) return "CHANGES_REQUESTED";
|
|
552
|
-
if (opinionatedWriterReviewStates.includes("APPROVED")) return "APPROVED";
|
|
553
|
-
return "REVIEW_REQUIRED";
|
|
554
|
-
}
|
|
555
|
-
function hasStandingViewerApproval(draft) {
|
|
556
|
-
if (draft.reviewDecision !== "APPROVED") return false;
|
|
557
|
-
if (draft.requeuedHead !== void 0 && draft.requeuedHead === (draft.liveHead ?? draft.reviewedHead)) return false;
|
|
558
|
-
return (draft.githubReviews ?? []).some((review) => review.isViewer && review.state === "APPROVED");
|
|
559
|
-
}
|
|
560
|
-
var PriorReview = z.object({
|
|
561
|
-
head: CommitSha,
|
|
562
|
-
base: CommitSha.optional(),
|
|
563
|
-
verdict: ReviewVerdict,
|
|
564
|
-
summary: z.string(),
|
|
565
|
-
body: z.string(),
|
|
566
|
-
comments: z.array(ReviewComment),
|
|
567
|
-
wasPosted: z.boolean()
|
|
568
|
-
});
|
|
569
|
-
var ReviewThreadId = z.string().min(1).max(256).regex(NODE_ID_RE);
|
|
570
|
-
var TeamReviewThreadResult = z.object({
|
|
571
|
-
addressed: z.boolean(),
|
|
572
|
-
reason: z.string().trim().min(1).max(4e3)
|
|
573
|
-
}).strict();
|
|
574
|
-
var TeamReviewThreadNode = z.object({
|
|
575
|
-
id: ReviewThreadId,
|
|
576
|
-
path: z.string(),
|
|
577
|
-
line: z.number().int().positive().nullable(),
|
|
578
|
-
isResolved: z.boolean(),
|
|
579
|
-
viewerCanResolve: z.boolean(),
|
|
580
|
-
comments: z.object({
|
|
581
|
-
pageInfo: z.object({
|
|
582
|
-
hasNextPage: z.boolean(),
|
|
583
|
-
endCursor: z.string().nullable().optional()
|
|
584
|
-
}),
|
|
585
|
-
nodes: z.array(z.object({
|
|
586
|
-
body: z.string(),
|
|
587
|
-
author: z.object({ login: z.string() }).nullable(),
|
|
588
|
-
viewerDidAuthor: z.boolean(),
|
|
589
|
-
createdAt: z.string().datetime(),
|
|
590
|
-
url: z.string().url(),
|
|
591
|
-
originalCommit: z.object({ oid: CommitSha }).nullable()
|
|
592
|
-
}))
|
|
593
|
-
})
|
|
594
|
-
});
|
|
595
|
-
var TeamReviewThreadCommentsResponse = z.object({ data: z.object({ node: z.object({ comments: TeamReviewThreadNode.shape.comments }).nullable() }).nullable() });
|
|
596
|
-
var TeamReviewThreadsRepository = z.object({ pullRequest: z.object({ reviewThreads: z.object({
|
|
597
|
-
pageInfo: z.object({
|
|
598
|
-
hasNextPage: z.boolean(),
|
|
599
|
-
endCursor: z.string().nullable().optional()
|
|
600
|
-
}),
|
|
601
|
-
nodes: z.array(TeamReviewThreadNode)
|
|
602
|
-
}) }).nullable() });
|
|
603
|
-
var TeamReviewResolveResponse = z.object({
|
|
604
|
-
data: z.object({ resolveReviewThread: z.object({ thread: z.object({
|
|
605
|
-
id: ReviewThreadId,
|
|
606
|
-
isResolved: z.literal(true)
|
|
607
|
-
}) }) }).nullable(),
|
|
608
|
-
errors: z.array(z.unknown()).optional()
|
|
609
|
-
});
|
|
610
|
-
var TeamReviewThread = z.object({
|
|
611
|
-
id: ReviewThreadId,
|
|
612
|
-
path: z.string(),
|
|
613
|
-
line: z.number().int().positive().nullable(),
|
|
614
|
-
isResolved: z.boolean(),
|
|
615
|
-
viewerCanResolve: z.boolean(),
|
|
616
|
-
isNit: z.boolean(),
|
|
617
|
-
url: z.string().url(),
|
|
618
|
-
viewerComment: z.string().max(1500).optional(),
|
|
619
|
-
lastReplyBody: z.string().max(1500).optional(),
|
|
620
|
-
viewerCommentTruncated: z.boolean().optional(),
|
|
621
|
-
lastReplyTruncated: z.boolean().optional(),
|
|
622
|
-
lastReplyAuthor: z.string(),
|
|
623
|
-
lastReplyAt: z.string().datetime(),
|
|
624
|
-
judgement: TeamReviewThreadResult.extend({
|
|
625
|
-
head: CommitSha,
|
|
626
|
-
judgedAt: z.number().finite(),
|
|
627
|
-
lastReplyAt: z.string().datetime()
|
|
628
|
-
}).optional(),
|
|
629
|
-
resolveError: z.string().optional(),
|
|
630
|
-
resolveAttemptReplyAt: z.string().optional(),
|
|
631
|
-
judgeAttempt: z.object({
|
|
632
|
-
head: CommitSha,
|
|
633
|
-
lastReplyAt: z.string(),
|
|
634
|
-
retryAt: z.number().finite()
|
|
635
|
-
}).optional(),
|
|
636
|
-
unjudgeable: z.object({
|
|
637
|
-
head: CommitSha,
|
|
638
|
-
lastReplyAt: z.string(),
|
|
639
|
-
reason: z.string().min(1)
|
|
640
|
-
}).optional()
|
|
641
|
-
});
|
|
642
|
-
var TeamReviewCompareFiles = z.object({
|
|
643
|
-
merge_base_commit: z.object({ sha: CommitSha }),
|
|
644
|
-
files: z.array(z.object({
|
|
645
|
-
filename: z.string(),
|
|
646
|
-
previous_filename: z.string().optional(),
|
|
647
|
-
patch: z.string().optional()
|
|
648
|
-
})).max(300)
|
|
649
|
-
});
|
|
650
|
-
var ViewerThreadTally = z.object({
|
|
651
|
-
total: z.number().int().nonnegative(),
|
|
652
|
-
resolved: z.number().int().nonnegative()
|
|
653
|
-
});
|
|
654
|
-
var ReviewDraft = z.object({
|
|
655
|
-
...reviewPriorityShape,
|
|
656
|
-
key: z.string(),
|
|
657
|
-
repo: repoSlug,
|
|
658
|
-
number: z.number().int().positive(),
|
|
659
|
-
title: z.string(),
|
|
660
|
-
url: z.string(),
|
|
661
|
-
author: z.string(),
|
|
662
|
-
tier: z.enum(["stamp", "full"]),
|
|
663
|
-
reasons: z.array(z.string()),
|
|
664
|
-
reviewedHead: CommitSha,
|
|
665
|
-
reviewedBase: CommitSha.optional(),
|
|
666
|
-
verdict: storedVerdict,
|
|
667
|
-
summary: z.string(),
|
|
668
|
-
assessment: ReviewAssessment.optional(),
|
|
669
|
-
body: z.string(),
|
|
670
|
-
comments: z.array(DraftComment),
|
|
671
|
-
status: z.enum([
|
|
672
|
-
"ready",
|
|
673
|
-
"stale",
|
|
674
|
-
"posted",
|
|
675
|
-
"discarded",
|
|
676
|
-
"error"
|
|
677
|
-
]),
|
|
678
|
-
error: z.string().optional(),
|
|
679
|
-
threads: z.array(TeamReviewThread).optional(),
|
|
680
|
-
viewerThreads: ViewerThreadTally.optional(),
|
|
681
|
-
githubReviews: z.array(GithubReview).optional(),
|
|
682
|
-
reviewDecision: GithubReviewDecision.nullable().optional(),
|
|
683
|
-
liveHead: CommitSha.optional(),
|
|
684
|
-
prCreatedAt: z.string().optional(),
|
|
685
|
-
reviewedAt: z.number().finite().optional(),
|
|
686
|
-
postedAt: z.number().finite().optional(),
|
|
687
|
-
postedEvent: PostedReviewEvent.optional(),
|
|
688
|
-
priorReviewedHead: CommitSha.optional(),
|
|
689
|
-
requeuedHead: CommitSha.optional()
|
|
690
|
-
});
|
|
691
|
-
function canApproveAfterComment(draft) {
|
|
692
|
-
return draft.status === "posted" && draft.postedEvent === "COMMENT";
|
|
693
|
-
}
|
|
694
|
-
var TeamReviewAction = z.enum([
|
|
695
|
-
"approve",
|
|
696
|
-
"approve-only",
|
|
697
|
-
"comment",
|
|
698
|
-
"discard",
|
|
699
|
-
"requeue",
|
|
700
|
-
"resolve-thread"
|
|
701
|
-
]);
|
|
702
|
-
var TeamReviewActionRequest = z.object({
|
|
703
|
-
key: z.string().min(1),
|
|
704
|
-
head: CommitSha,
|
|
705
|
-
action: TeamReviewAction,
|
|
706
|
-
threadId: ReviewThreadId.optional(),
|
|
707
|
-
body: z.string(),
|
|
708
|
-
comments: z.array(ReviewComment)
|
|
709
|
-
}).refine((request) => request.action !== "resolve-thread" || request.threadId !== void 0, {
|
|
710
|
-
message: "resolve-thread requires threadId",
|
|
711
|
-
path: ["threadId"]
|
|
712
|
-
});
|
|
713
|
-
var TeamReviewActionResult = z.object({
|
|
714
|
-
key: z.string(),
|
|
715
|
-
ok: z.boolean(),
|
|
716
|
-
error: z.string().optional(),
|
|
717
|
-
warning: z.string().optional()
|
|
718
|
-
});
|
|
719
|
-
var ResumableReview = z.object({
|
|
720
|
-
sessionId: z.string().min(1),
|
|
721
|
-
workDir: z.string().min(1),
|
|
722
|
-
worktreePath: z.string().min(1),
|
|
723
|
-
head: CommitSha,
|
|
724
|
-
deadlineAt: z.number(),
|
|
725
|
-
remainingAwakeMs: z.number().nonnegative().optional(),
|
|
726
|
-
savedAt: z.number()
|
|
727
|
-
});
|
|
728
|
-
var QueuedReview = z.object({
|
|
729
|
-
...reviewPriorityShape,
|
|
730
|
-
reviewDecision: GithubReviewDecision.nullable().optional(),
|
|
731
|
-
key: z.string(),
|
|
732
|
-
repo: repoSlug,
|
|
733
|
-
number: z.number().int().positive(),
|
|
734
|
-
title: z.string(),
|
|
735
|
-
url: z.string(),
|
|
736
|
-
author: z.string(),
|
|
737
|
-
prCreatedAt: z.string().optional()
|
|
738
|
-
});
|
|
739
|
-
var TeamReviewStateEntry = z.object({
|
|
740
|
-
draft: ReviewDraft.nullable(),
|
|
741
|
-
reviewedHead: CommitSha.nullable(),
|
|
742
|
-
inFlight: z.boolean(),
|
|
743
|
-
skipReason: z.string().nullable(),
|
|
744
|
-
handReview: QueuedReview.optional(),
|
|
745
|
-
reviewAttempts: z.number().int().nonnegative().default(0),
|
|
746
|
-
resumable: ResumableReview.nullable().optional(),
|
|
747
|
-
reviewedAt: z.number().optional(),
|
|
748
|
-
threads: z.array(TeamReviewThread).optional(),
|
|
749
|
-
viewerThreads: ViewerThreadTally.optional(),
|
|
750
|
-
autoResolvedThreadIds: z.array(ReviewThreadId).optional(),
|
|
751
|
-
githubReviews: z.array(GithubReview).optional(),
|
|
752
|
-
reviewDecision: GithubReviewDecision.nullable().optional(),
|
|
753
|
-
liveHead: CommitSha.optional(),
|
|
754
|
-
requeuedHead: CommitSha.optional(),
|
|
755
|
-
priorReview: PriorReview.optional(),
|
|
756
|
-
discardedReviewHead: CommitSha.optional(),
|
|
757
|
-
updatedAt: z.number().finite()
|
|
758
|
-
});
|
|
759
|
-
z.record(z.string(), TeamReviewStateEntry);
|
|
760
|
-
var ReviewProgressPhase = z.enum([
|
|
761
|
-
"preparing",
|
|
762
|
-
"checkout",
|
|
763
|
-
"reviewing"
|
|
764
|
-
]);
|
|
765
|
-
var ReviewProgressStep = z.object({
|
|
766
|
-
at: z.number().finite(),
|
|
767
|
-
tool: z.string(),
|
|
768
|
-
detail: z.string()
|
|
769
|
-
});
|
|
770
|
-
var InFlightReview = z.object({
|
|
771
|
-
...reviewPriorityShape,
|
|
772
|
-
reviewDecision: GithubReviewDecision.nullable().optional(),
|
|
773
|
-
key: z.string(),
|
|
774
|
-
repo: repoSlug,
|
|
775
|
-
number: z.number().int().positive(),
|
|
776
|
-
title: z.string(),
|
|
777
|
-
url: z.string(),
|
|
778
|
-
author: z.string(),
|
|
779
|
-
tier: z.enum(["stamp", "full"]),
|
|
780
|
-
reasons: z.array(z.string()),
|
|
781
|
-
head: CommitSha,
|
|
782
|
-
phase: ReviewProgressPhase,
|
|
783
|
-
startedAt: z.number().finite(),
|
|
784
|
-
deadlineAt: z.number().finite().nullable(),
|
|
785
|
-
toolCalls: z.number().int().nonnegative(),
|
|
786
|
-
recentSteps: z.array(ReviewProgressStep),
|
|
787
|
-
prCreatedAt: z.string().optional(),
|
|
788
|
-
priorReviewedHead: CommitSha.optional()
|
|
789
|
-
});
|
|
790
|
-
var TeamReviewStatus = z.object({
|
|
791
|
-
...githubPollingShape,
|
|
792
|
-
type: z.literal("team-review-status"),
|
|
793
|
-
ts: z.number().finite(),
|
|
794
|
-
configured: z.boolean(),
|
|
795
|
-
reason: z.string().nullable().optional(),
|
|
796
|
-
drafts: z.array(ReviewDraft),
|
|
797
|
-
inFlight: z.array(InFlightReview),
|
|
798
|
-
queued: z.array(QueuedReview).default([]),
|
|
799
|
-
handReview: z.array(QueuedReview).default([]),
|
|
800
|
-
team: z.object({
|
|
801
|
-
org: z.string(),
|
|
802
|
-
slug: z.string(),
|
|
803
|
-
name: z.string(),
|
|
804
|
-
avatarUrl: z.string()
|
|
805
|
-
}).nullable().optional()
|
|
806
|
-
}).passthrough();
|
|
807
|
-
//#endregion
|
|
808
|
-
//#region shared/contracts/my-prs.ts
|
|
809
|
-
var MyPrStage = z.enum([
|
|
810
|
-
"merged",
|
|
811
|
-
"draft",
|
|
812
|
-
"conflicts",
|
|
813
|
-
"behind",
|
|
814
|
-
"checks-failing",
|
|
815
|
-
"changes-requested",
|
|
816
|
-
"unresolved-threads",
|
|
817
|
-
"checks-pending",
|
|
818
|
-
"needs-approval",
|
|
819
|
-
"ready",
|
|
820
|
-
"unknown"
|
|
821
|
-
]);
|
|
822
|
-
var nonnegativeInteger$1 = z.number().int().nonnegative();
|
|
823
|
-
var repositoryName = z.string().regex(REPO_SLUG_RE);
|
|
824
|
-
var pullRequestNumberText = z.string().regex(/^[1-9][0-9]*$/);
|
|
825
|
-
var pullRequestKeyFormat = z.templateLiteral([
|
|
826
|
-
repositoryName,
|
|
827
|
-
"#",
|
|
828
|
-
pullRequestNumberText
|
|
829
|
-
]);
|
|
830
|
-
var keepMergeableAttemptKeyFormat = z.templateLiteral([
|
|
831
|
-
pullRequestKeyFormat,
|
|
832
|
-
"@",
|
|
833
|
-
CommitSha
|
|
834
|
-
]);
|
|
835
|
-
var pullRequestKey = z.string().refine((value) => pullRequestKeyFormat.safeParse(value).success);
|
|
836
|
-
var keepMergeableAttemptKey = z.string().refine((value) => keepMergeableAttemptKeyFormat.safeParse(value).success);
|
|
837
|
-
z.discriminatedUnion("outcome", [z.strictObject({ outcome: z.literal("pushed") }), z.strictObject({
|
|
838
|
-
outcome: z.enum([
|
|
839
|
-
"no-change",
|
|
840
|
-
"failed",
|
|
841
|
-
"stopped",
|
|
842
|
-
"timed-out"
|
|
843
|
-
]),
|
|
844
|
-
reason: z.string().min(1)
|
|
845
|
-
})]);
|
|
846
|
-
var MyPrKeepMergeableAttempt = z.strictObject({
|
|
847
|
-
outcome: z.enum([
|
|
848
|
-
"pushed",
|
|
849
|
-
"no-change",
|
|
850
|
-
"failed",
|
|
851
|
-
"stopped",
|
|
852
|
-
"timed-out"
|
|
853
|
-
]),
|
|
854
|
-
reason: z.string().min(1).optional(),
|
|
855
|
-
at: z.number().finite()
|
|
856
|
-
});
|
|
857
|
-
var MyPrKeepMergeableAttemptRecord = MyPrKeepMergeableAttempt.extend({
|
|
858
|
-
key: pullRequestKey,
|
|
859
|
-
headRefOid: CommitSha,
|
|
860
|
-
baseRefOid: CommitSha,
|
|
861
|
-
consecutiveAttempts: z.number().int().min(1).optional()
|
|
862
|
-
});
|
|
863
|
-
var MyPrsState = z.strictObject({
|
|
864
|
-
keepMergeableKeys: z.array(pullRequestKey),
|
|
865
|
-
keepMergeableAttemptKeys: z.array(keepMergeableAttemptKey),
|
|
866
|
-
keepMergeableAttempts: z.array(MyPrKeepMergeableAttemptRecord).default([]),
|
|
867
|
-
mergeQueueKeys: z.array(pullRequestKey).default([]),
|
|
868
|
-
keepMergeablePushedHeadKeys: z.array(keepMergeableAttemptKey).default([])
|
|
869
|
-
});
|
|
870
|
-
var MyPrKeepMergeableRequest = z.object({
|
|
871
|
-
repo: repositoryName,
|
|
872
|
-
number: z.number().int().positive(),
|
|
873
|
-
keepMergeable: z.boolean()
|
|
874
|
-
});
|
|
875
|
-
var MyPrToggleResult = z.object({
|
|
876
|
-
key: z.string(),
|
|
877
|
-
ok: z.boolean(),
|
|
878
|
-
error: z.string().optional()
|
|
879
|
-
});
|
|
880
|
-
var MyPrKeepMergeableResult = MyPrToggleResult;
|
|
881
|
-
var MyPrMergeWhenReadyRequest = z.object({
|
|
882
|
-
repo: repositoryName,
|
|
883
|
-
number: z.number().int().positive(),
|
|
884
|
-
mergeWhenReady: z.boolean()
|
|
885
|
-
});
|
|
886
|
-
var MyPrMergeWhenReadyResult = MyPrToggleResult;
|
|
887
|
-
var MyPrMergeMethod = z.enum([
|
|
888
|
-
"MERGE",
|
|
889
|
-
"SQUASH",
|
|
890
|
-
"REBASE"
|
|
891
|
-
]);
|
|
892
|
-
var MyPrThread = z.object({
|
|
893
|
-
path: z.string(),
|
|
894
|
-
line: z.number().int().positive().nullable(),
|
|
895
|
-
isOutdated: z.boolean(),
|
|
896
|
-
url: z.url(),
|
|
897
|
-
author: z.string().nullable(),
|
|
898
|
-
excerpt: z.string(),
|
|
899
|
-
commentCount: z.number().int().positive(),
|
|
900
|
-
lastAuthor: z.string().nullable(),
|
|
901
|
-
lastActivityAt: z.string()
|
|
902
|
-
});
|
|
903
|
-
var MyPrReview = z.object({
|
|
904
|
-
reviewer: z.string().nullable(),
|
|
905
|
-
state: z.string(),
|
|
906
|
-
submittedAt: z.string().nullable()
|
|
907
|
-
});
|
|
908
|
-
var MyPrAutoRebase = z.object({
|
|
909
|
-
outcome: z.enum(["rebased", "failed"]),
|
|
910
|
-
at: z.number().finite(),
|
|
911
|
-
message: z.string()
|
|
912
|
-
});
|
|
913
|
-
var MyPr = z.object({
|
|
914
|
-
key: z.string(),
|
|
915
|
-
repo: repositoryName,
|
|
916
|
-
number: z.number().int().positive(),
|
|
917
|
-
title: z.string(),
|
|
918
|
-
url: z.url(),
|
|
919
|
-
isDraft: z.boolean(),
|
|
920
|
-
state: z.enum([
|
|
921
|
-
"OPEN",
|
|
922
|
-
"MERGED",
|
|
923
|
-
"CLOSED"
|
|
924
|
-
]),
|
|
925
|
-
createdAt: z.string(),
|
|
926
|
-
mergedAt: z.string().nullable(),
|
|
927
|
-
updatedAt: z.string(),
|
|
928
|
-
baseRefName: z.string(),
|
|
929
|
-
baseRefOid: CommitSha,
|
|
930
|
-
headRefName: z.string().min(1),
|
|
931
|
-
isCrossRepository: z.boolean(),
|
|
932
|
-
headRefOid: CommitSha,
|
|
933
|
-
isInMergeQueue: z.boolean(),
|
|
934
|
-
mergeMethod: MyPrMergeMethod,
|
|
935
|
-
mergeable: z.enum([
|
|
936
|
-
"MERGEABLE",
|
|
937
|
-
"CONFLICTING",
|
|
938
|
-
"UNKNOWN"
|
|
939
|
-
]),
|
|
940
|
-
mergeStateStatus: z.string(),
|
|
941
|
-
reviewDecision: z.enum([
|
|
942
|
-
"APPROVED",
|
|
943
|
-
"CHANGES_REQUESTED",
|
|
944
|
-
"REVIEW_REQUIRED"
|
|
945
|
-
]).nullable(),
|
|
946
|
-
checks: z.object({
|
|
947
|
-
state: z.enum([
|
|
948
|
-
"SUCCESS",
|
|
949
|
-
"FAILURE",
|
|
950
|
-
"PENDING",
|
|
951
|
-
"ERROR",
|
|
952
|
-
"EXPECTED"
|
|
953
|
-
]).nullable(),
|
|
954
|
-
failing: z.array(z.string()),
|
|
955
|
-
pendingCount: nonnegativeInteger$1
|
|
956
|
-
}),
|
|
957
|
-
unresolvedThreads: nonnegativeInteger$1,
|
|
958
|
-
threads: z.array(MyPrThread),
|
|
959
|
-
behindBy: nonnegativeInteger$1.nullable(),
|
|
960
|
-
reviewRequests: z.array(z.object({
|
|
961
|
-
name: z.string(),
|
|
962
|
-
isTeam: z.boolean(),
|
|
963
|
-
avatarUrl: z.string().nullable()
|
|
964
|
-
})),
|
|
965
|
-
approvals: nonnegativeInteger$1,
|
|
966
|
-
reviews: z.array(MyPrReview),
|
|
967
|
-
stage: MyPrStage,
|
|
968
|
-
autoRebase: MyPrAutoRebase.optional(),
|
|
969
|
-
keepMergeable: z.boolean().optional(),
|
|
970
|
-
keepMergeableAttempt: MyPrKeepMergeableAttempt.optional(),
|
|
971
|
-
isKeepMergeableFixInFlight: z.boolean().optional(),
|
|
972
|
-
mergeQueuePosition: z.number().int().positive().nullable().optional(),
|
|
973
|
-
isMergeQueueHeldForRepairPush: z.boolean().optional()
|
|
974
|
-
}).refine((pr) => pr.key === `${pr.repo}#${pr.number}`);
|
|
975
|
-
var MyPrsStatus = z.object({
|
|
976
|
-
...githubPollingShape,
|
|
977
|
-
type: z.literal("my-prs-status"),
|
|
978
|
-
ts: z.number().finite(),
|
|
979
|
-
configured: z.boolean(),
|
|
980
|
-
reason: z.string().nullable().optional(),
|
|
981
|
-
viewer: z.string().nullable(),
|
|
982
|
-
prs: z.array(MyPr),
|
|
983
|
-
truncatedNote: z.string().nullable().optional(),
|
|
984
|
-
isKeepMergeableEnabled: z.boolean().optional(),
|
|
985
|
-
isMergeQueueEnabled: z.boolean().optional()
|
|
986
|
-
}).passthrough();
|
|
987
|
-
var MyPrMergeRequest = z.object({
|
|
988
|
-
repo: repositoryName,
|
|
989
|
-
number: z.number().int().positive(),
|
|
990
|
-
headRefOid: CommitSha
|
|
991
|
-
});
|
|
992
|
-
var MyPrMergeKind = z.enum([
|
|
993
|
-
"merged",
|
|
994
|
-
"queued",
|
|
995
|
-
"auto-merge",
|
|
996
|
-
"unconfirmed"
|
|
997
|
-
]);
|
|
998
|
-
var MyPrMergeResult = z.object({
|
|
999
|
-
key: z.string(),
|
|
1000
|
-
ok: z.boolean(),
|
|
1001
|
-
kind: MyPrMergeKind.optional(),
|
|
1002
|
-
error: z.string().optional()
|
|
1003
|
-
});
|
|
1004
|
-
var CheckRun = z.object({
|
|
1005
|
-
__typename: z.literal("CheckRun"),
|
|
1006
|
-
name: z.string(),
|
|
1007
|
-
conclusion: z.string().nullable(),
|
|
1008
|
-
status: z.string()
|
|
1009
|
-
});
|
|
1010
|
-
var StatusContext = z.object({
|
|
1011
|
-
__typename: z.literal("StatusContext"),
|
|
1012
|
-
context: z.string(),
|
|
1013
|
-
state: z.string()
|
|
1014
|
-
});
|
|
1015
|
-
var MyPrSearchNode = z.object({
|
|
1016
|
-
__typename: z.literal("PullRequest"),
|
|
1017
|
-
id: z.string().regex(NODE_ID_RE),
|
|
1018
|
-
number: z.number().int().positive(),
|
|
1019
|
-
title: z.string(),
|
|
1020
|
-
url: z.url(),
|
|
1021
|
-
isDraft: z.boolean(),
|
|
1022
|
-
state: z.enum([
|
|
1023
|
-
"OPEN",
|
|
1024
|
-
"MERGED",
|
|
1025
|
-
"CLOSED"
|
|
1026
|
-
]),
|
|
1027
|
-
createdAt: z.string(),
|
|
1028
|
-
mergedAt: z.string().nullable(),
|
|
1029
|
-
updatedAt: z.string(),
|
|
1030
|
-
baseRefName: z.string(),
|
|
1031
|
-
baseRefOid: CommitSha,
|
|
1032
|
-
headRefName: z.string().min(1),
|
|
1033
|
-
isCrossRepository: z.boolean(),
|
|
1034
|
-
headRefOid: CommitSha,
|
|
1035
|
-
isInMergeQueue: z.boolean(),
|
|
1036
|
-
mergeable: z.enum([
|
|
1037
|
-
"MERGEABLE",
|
|
1038
|
-
"CONFLICTING",
|
|
1039
|
-
"UNKNOWN"
|
|
1040
|
-
]),
|
|
1041
|
-
mergeStateStatus: z.string(),
|
|
1042
|
-
reviewDecision: z.enum([
|
|
1043
|
-
"APPROVED",
|
|
1044
|
-
"CHANGES_REQUESTED",
|
|
1045
|
-
"REVIEW_REQUIRED"
|
|
1046
|
-
]).nullable(),
|
|
1047
|
-
repository: z.object({
|
|
1048
|
-
nameWithOwner: repositoryName,
|
|
1049
|
-
viewerDefaultMergeMethod: MyPrMergeMethod
|
|
1050
|
-
}),
|
|
1051
|
-
commits: z.object({ nodes: z.array(z.object({ commit: z.object({ statusCheckRollup: z.object({
|
|
1052
|
-
state: z.enum([
|
|
1053
|
-
"SUCCESS",
|
|
1054
|
-
"FAILURE",
|
|
1055
|
-
"PENDING",
|
|
1056
|
-
"ERROR",
|
|
1057
|
-
"EXPECTED"
|
|
1058
|
-
]).nullable(),
|
|
1059
|
-
contexts: z.object({ nodes: z.array(z.union([CheckRun, StatusContext])) })
|
|
1060
|
-
}).nullable() }) })) }),
|
|
1061
|
-
reviewThreads: z.object({
|
|
1062
|
-
pageInfo: z.object({ hasNextPage: z.boolean() }),
|
|
1063
|
-
nodes: z.array(z.object({ isResolved: z.boolean() }))
|
|
1064
|
-
}),
|
|
1065
|
-
reviewRequests: z.object({ nodes: z.array(z.object({ requestedReviewer: z.discriminatedUnion("__typename", [
|
|
1066
|
-
z.object({
|
|
1067
|
-
__typename: z.literal("User"),
|
|
1068
|
-
login: z.string()
|
|
1069
|
-
}),
|
|
1070
|
-
z.object({
|
|
1071
|
-
__typename: z.literal("Team"),
|
|
1072
|
-
slug: z.string(),
|
|
1073
|
-
avatarUrl: z.string().nullable(),
|
|
1074
|
-
organization: z.object({ login: z.string() })
|
|
1075
|
-
}),
|
|
1076
|
-
z.object({ __typename: z.enum(["Bot", "Mannequin"]) })
|
|
1077
|
-
]).nullable() })) }),
|
|
1078
|
-
latestOpinionatedReviews: z.object({ nodes: z.array(z.object({ state: z.string() })) }),
|
|
1079
|
-
latestReviews: z.object({ nodes: z.array(z.object({
|
|
1080
|
-
state: z.string(),
|
|
1081
|
-
submittedAt: z.string().nullable(),
|
|
1082
|
-
author: z.object({ login: z.string() }).nullable()
|
|
1083
|
-
})) })
|
|
1084
|
-
});
|
|
1085
|
-
var ThreadCommentAuthor = z.object({ login: z.string() }).nullable();
|
|
1086
|
-
var MyPrThreadNode = z.object({
|
|
1087
|
-
isResolved: z.boolean(),
|
|
1088
|
-
isOutdated: z.boolean(),
|
|
1089
|
-
path: z.string(),
|
|
1090
|
-
line: z.number().int().positive().nullable(),
|
|
1091
|
-
firstComment: z.object({
|
|
1092
|
-
totalCount: nonnegativeInteger$1,
|
|
1093
|
-
nodes: z.array(z.object({
|
|
1094
|
-
author: ThreadCommentAuthor,
|
|
1095
|
-
bodyText: z.string(),
|
|
1096
|
-
url: z.url(),
|
|
1097
|
-
createdAt: z.string()
|
|
1098
|
-
}))
|
|
1099
|
-
}),
|
|
1100
|
-
lastComment: z.object({ nodes: z.array(z.object({
|
|
1101
|
-
author: ThreadCommentAuthor,
|
|
1102
|
-
createdAt: z.string()
|
|
1103
|
-
})) })
|
|
1104
|
-
});
|
|
1105
|
-
var MyPrThreadsResponse = z.object({
|
|
1106
|
-
data: z.object({ repository: z.object({ pullRequest: z.object({ reviewThreads: z.object({
|
|
1107
|
-
pageInfo: z.object({
|
|
1108
|
-
hasNextPage: z.boolean(),
|
|
1109
|
-
endCursor: z.string().nullable()
|
|
1110
|
-
}),
|
|
1111
|
-
nodes: z.array(z.unknown())
|
|
1112
|
-
}) }).nullable() }).nullable() }),
|
|
1113
|
-
errors: z.array(z.unknown()).optional()
|
|
1114
|
-
});
|
|
1115
|
-
var MyPrMergeStateResponse = z.object({
|
|
1116
|
-
data: z.object({ repository: z.object({ pullRequest: z.object({
|
|
1117
|
-
state: z.string(),
|
|
1118
|
-
isInMergeQueue: z.boolean(),
|
|
1119
|
-
autoMergeRequest: z.object({ enabledAt: z.string().nullable() }).nullable()
|
|
1120
|
-
}).nullable() }).nullable() }),
|
|
1121
|
-
errors: z.array(z.unknown()).optional()
|
|
1122
|
-
});
|
|
1123
|
-
var MyPrSearchResponse = z.object({
|
|
1124
|
-
data: z.object({
|
|
1125
|
-
open: z.object({
|
|
1126
|
-
issueCount: nonnegativeInteger$1,
|
|
1127
|
-
nodes: z.array(z.unknown())
|
|
1128
|
-
}),
|
|
1129
|
-
merged: z.object({
|
|
1130
|
-
issueCount: nonnegativeInteger$1,
|
|
1131
|
-
nodes: z.array(z.unknown())
|
|
1132
|
-
})
|
|
1133
|
-
}),
|
|
1134
|
-
errors: z.array(z.unknown()).optional()
|
|
1135
|
-
});
|
|
1136
|
-
//#endregion
|
|
1137
397
|
//#region shared/contracts/workflows.ts
|
|
1138
398
|
var WORKFLOW_TRIGGERS = Object.freeze([
|
|
1139
399
|
"opened",
|
|
@@ -1308,11 +568,7 @@ var TaskTitleSettings = z.object({ refiner: z.object({
|
|
|
1308
568
|
enabled: optionalBoolean("taskTitle.refiner.enabled"),
|
|
1309
569
|
model: optionalString("taskTitle.refiner.model", true),
|
|
1310
570
|
minIntervalSeconds: optionalNumber("taskTitle.refiner.minIntervalSeconds", { min: 0 }),
|
|
1311
|
-
timeoutSeconds: optionalNumber("taskTitle.refiner.timeoutSeconds",
|
|
1312
|
-
min: 0,
|
|
1313
|
-
exclusiveMin: true,
|
|
1314
|
-
max: 2147483647 / 1e3
|
|
1315
|
-
})
|
|
571
|
+
timeoutSeconds: optionalNumber("taskTitle.refiner.timeoutSeconds", TASK_TITLE_TIMEOUT_RANGE)
|
|
1316
572
|
}, { error: "taskTitle.refiner must be an object" }).nullable().optional() }, { error: "taskTitle must be an object" }).nullable().optional();
|
|
1317
573
|
var BRANCH_GC_SETTINGS_SHAPE = {
|
|
1318
574
|
enabled: optionalBoolean("branchGc.enabled"),
|
|
@@ -1330,8 +586,8 @@ var BranchGcControlSettings = BranchGcFileSettings.omit({
|
|
|
1330
586
|
dryRun: true,
|
|
1331
587
|
worktrees: true
|
|
1332
588
|
}).nullable().optional();
|
|
1333
|
-
|
|
1334
|
-
|
|
589
|
+
Object.freeze(["enabled", "deleteUnmerged"]);
|
|
590
|
+
Object.freeze(["staleDays", "intervalMs"]);
|
|
1335
591
|
var PostTurnChecksSettings = optionalObject("postTurnChecks", { mode: z.enum(POST_TURN_CHECK_MODES, { error: "postTurnChecks.mode must be one of report, fix" }).optional() });
|
|
1336
592
|
var VisionsSettings = optionalObject("visions", {
|
|
1337
593
|
enabled: optionalBoolean("visions.enabled"),
|
|
@@ -1441,22 +697,22 @@ var IngestSettings = z.object({ enabled: optionalBoolean("ingest.enabled") }, {
|
|
|
1441
697
|
var TraceSettings = z.object({ enabled: optionalBoolean("trace.enabled") }, { error: "trace must be an object" }).optional();
|
|
1442
698
|
var PlanReviewSettings = z.object({ enabled: optionalBoolean("planReview.enabled") }, { error: "planReview must be an object" }).optional();
|
|
1443
699
|
var optionalPathList = (field) => z.array(z.string({ error: `${field} must be an array of paths` }).trim().min(1, { error: `${field} must be an array of paths` }), { error: `${field} must be an array of paths` }).optional();
|
|
1444
|
-
var
|
|
700
|
+
var guardrailsShape = {
|
|
1445
701
|
unguardedRepos: optionalPathList("guardrails.unguardedRepos"),
|
|
1446
702
|
blockedPaths: optionalPathList("guardrails.blockedPaths"),
|
|
1447
703
|
unreadablePaths: optionalPathList("guardrails.unreadablePaths")
|
|
1448
704
|
};
|
|
1449
705
|
var isHomeRelativePath = (entry) => entry === "~" || entry.startsWith("~/") || entry.startsWith("~\\");
|
|
1450
|
-
var
|
|
1451
|
-
...
|
|
706
|
+
var createGuardrailsSettings = (isAbsolutePath) => z.object({
|
|
707
|
+
...guardrailsShape,
|
|
1452
708
|
blockedPaths: z.array(z.string({ error: "guardrails.blockedPaths must be an array of paths" }).trim().min(1, { error: "guardrails.blockedPaths must be an array of paths" }).refine((entry) => isHomeRelativePath(entry) || isAbsolutePath(entry), { message: "guardrails.blockedPaths entries must be absolute paths or start with ~/" }), { error: "guardrails.blockedPaths must be an array of paths" }).optional()
|
|
1453
709
|
}, { error: "guardrails must be an object" }).strict().optional();
|
|
1454
|
-
var
|
|
710
|
+
var GuardrailsFileSettings = z.object(guardrailsShape, { error: "guardrails must be an object" }).passthrough().optional();
|
|
1455
711
|
var telemetryShape = { enabled: optionalBoolean("telemetry.enabled") };
|
|
1456
712
|
var TelemetrySettings = z.object(telemetryShape, { error: "telemetry must be an object" }).strict().optional();
|
|
1457
713
|
var TelemetryFileSettings = z.object(telemetryShape, { error: "telemetry must be an object" }).passthrough().optional();
|
|
1458
714
|
var createBrowserConfigShape = (isAbsolutePath) => ({
|
|
1459
|
-
port: z.number().int().min(
|
|
715
|
+
port: z.number().int().min(PORT_RANGE.min).max(PORT_RANGE.max).optional(),
|
|
1460
716
|
autoRecoverSeconds: z.number().finite().nonnegative().optional(),
|
|
1461
717
|
inputGraceSeconds: z.number().finite().nonnegative().optional(),
|
|
1462
718
|
promptDetectionMs: z.number().finite().nonnegative().optional(),
|
|
@@ -1465,7 +721,8 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
|
|
|
1465
721
|
replayBufferKB: optionalWholeNumber("replayBufferKB", REPLAY_BUFFER_KB_RANGE),
|
|
1466
722
|
cursorBlink: optionalBoolean("cursorBlink"),
|
|
1467
723
|
debugMode: optionalBoolean("debugMode"),
|
|
1468
|
-
|
|
724
|
+
conversationView: optionalBoolean("conversationView"),
|
|
725
|
+
streamerMode: optionalBoolean("streamerMode"),
|
|
1469
726
|
detectBackgroundAgents: optionalBoolean("detectBackgroundAgents"),
|
|
1470
727
|
recordSignals: optionalBoolean("recordSignals"),
|
|
1471
728
|
rtk: optionalBoolean("rtk"),
|
|
@@ -1493,7 +750,7 @@ var createBrowserConfigShape = (isAbsolutePath) => ({
|
|
|
1493
750
|
usage: createUsageSettings(isAbsolutePath),
|
|
1494
751
|
telegram: TelegramSettings,
|
|
1495
752
|
ingest: IngestSettings,
|
|
1496
|
-
guardrails:
|
|
753
|
+
guardrails: createGuardrailsSettings(isAbsolutePath),
|
|
1497
754
|
telemetry: TelemetrySettings,
|
|
1498
755
|
workflows: WorkflowsSettings.nullable().optional()
|
|
1499
756
|
});
|
|
@@ -1532,6 +789,23 @@ function isSpawnableCommand(command) {
|
|
|
1532
789
|
if (AGENT_COMMAND_BASENAME_RE.test(command)) return true;
|
|
1533
790
|
return AGENT_COMMAND_ABSOLUTE_RE.test(command);
|
|
1534
791
|
}
|
|
792
|
+
var GIT_BRANCH_FORBIDDEN_PUNCTUATION_RE = /[~^:?*[\\]/;
|
|
793
|
+
var GIT_BRANCH_FORBIDDEN_SEQUENCES = [
|
|
794
|
+
"..",
|
|
795
|
+
"@{",
|
|
796
|
+
"//"
|
|
797
|
+
];
|
|
798
|
+
function isControlOrSpaceCharacter(character) {
|
|
799
|
+
const codePoint = character.charCodeAt(0);
|
|
800
|
+
return codePoint <= 32 || codePoint === 127;
|
|
801
|
+
}
|
|
802
|
+
function isGitBranchName(name) {
|
|
803
|
+
if (name === "" || name === "@" || name === "HEAD") return false;
|
|
804
|
+
if (name.startsWith("-") || name.startsWith("/") || name.endsWith("/") || name.endsWith(".")) return false;
|
|
805
|
+
if (GIT_BRANCH_FORBIDDEN_SEQUENCES.some((sequence) => name.includes(sequence))) return false;
|
|
806
|
+
if (GIT_BRANCH_FORBIDDEN_PUNCTUATION_RE.test(name) || [...name].some(isControlOrSpaceCharacter)) return false;
|
|
807
|
+
return name.split("/").every((component) => !component.startsWith(".") && !component.endsWith(".lock"));
|
|
808
|
+
}
|
|
1535
809
|
var CustomAgentDeclaration = z.object({
|
|
1536
810
|
id: z.string({ error: "customAgents[].id must be a string" }).regex(AGENT_ID_RE, { error: `customAgents[].id must be ${AGENT_ID_SHAPE_MESSAGE}` }),
|
|
1537
811
|
label: z.string({ error: "customAgents[].label must be a string" }).min(1, { error: "customAgents[].label must not be empty" }).max(60, { error: "customAgents[].label must be at most 60 characters" }),
|
|
@@ -1585,12 +859,19 @@ var ProjectConfig = z.object({
|
|
|
1585
859
|
name: z.string().optional(),
|
|
1586
860
|
customTitle: TaskTitle.optional(),
|
|
1587
861
|
taskTitleState: PersistedTaskTitle.optional().catch(void 0),
|
|
862
|
+
prLinks: SessionPrLinks.optional().catch(void 0),
|
|
1588
863
|
path: z.string(),
|
|
1589
864
|
repos: z.array(z.string()).min(2).optional(),
|
|
865
|
+
baseBranch: z.string().refine(isGitBranchName, { error: "projects[].baseBranch must be a git branch name" }).optional(),
|
|
1590
866
|
agent: z.string({ error: "projects[].agent must be a string" }).regex(AGENT_ID_RE, { error: `projects[].agent must be ${AGENT_ID_SHAPE_MESSAGE}` }).optional(),
|
|
1591
867
|
codexBypassHookTrust: z.boolean().optional(),
|
|
868
|
+
conversationView: z.boolean({ error: "projects[].conversationView must be a boolean" }).optional(),
|
|
1592
869
|
dangerouslySkipPermissions: z.boolean({ error: "projects[].dangerouslySkipPermissions must be a boolean" }).optional(),
|
|
1593
|
-
unguarded: z.boolean({ error: "projects[].unguarded must be a boolean" }).optional()
|
|
870
|
+
unguarded: z.boolean({ error: "projects[].unguarded must be a boolean" }).optional(),
|
|
871
|
+
factoryProfile: FactorySettings.unwrap().unwrap().extend({
|
|
872
|
+
focusedTestCommand: z.string().trim().min(1).optional(),
|
|
873
|
+
widenableScopes: z.array(z.string().trim().min(1)).optional()
|
|
874
|
+
}).optional()
|
|
1594
875
|
}).passthrough();
|
|
1595
876
|
var FILE_CONFIG_SHAPE = {
|
|
1596
877
|
...BROWSER_CONFIG_SHAPE,
|
|
@@ -1608,7 +889,7 @@ var FILE_CONFIG_SHAPE = {
|
|
|
1608
889
|
telegram: optionalLooseObject("telegram"),
|
|
1609
890
|
ingest: optionalLooseObject("ingest"),
|
|
1610
891
|
workflows: optionalLooseObject("workflows"),
|
|
1611
|
-
guardrails:
|
|
892
|
+
guardrails: GuardrailsFileSettings,
|
|
1612
893
|
telemetry: TelemetryFileSettings,
|
|
1613
894
|
trace: TraceSettings,
|
|
1614
895
|
planReview: PlanReviewSettings,
|
|
@@ -1692,4 +973,4 @@ function configIssueMessage(error) {
|
|
|
1692
973
|
return error.issues[0]?.message || "settings are invalid";
|
|
1693
974
|
}
|
|
1694
975
|
//#endregion
|
|
1695
|
-
export {
|
|
976
|
+
export { CoherenceWorkInspect as $, FLYING_ANIMALS_GAP_RANGE as A, REPLAY_BUFFER_KB_RANGE as B, USAGE_COST_MODES as C, FACTORY_MAX_LIVE_WORKERS_RANGE as D, CHANGE_MAP_NARRATOR_TIMEOUT_RANGE as E, POSITIVE_NUMBER_RANGE as F, USAGE_SCAN_INTERVAL_RANGE as G, USAGE_BUDGET_RANGE as H, POSTHOG_FIX_TIMEOUT_RANGE as I, CoherenceOrient as J, WORKFLOWS_MAX_ACTIONS_PER_POLL_RANGE as K, POSTHOG_TRAFFIC_BASELINE_RANGE as L, KEEP_MERGEABLE_TIMEOUT_MINUTES_RANGE as M, NON_NEGATIVE_NUMBER_RANGE as N, FLYING_ANIMALS_DEFAULTS as O, PORT_RANGE as P, CoherenceWorkCreated as Q, POSTHOG_TRAFFIC_MIN_USERS_RANGE as R, WorkflowsState as S, normalizeLegacyConfigNumbers as T, USAGE_INTEGER_RANGES as U, TASK_TITLE_TIMEOUT_RANGE as V, USAGE_RETAIN_DAYS_RANGE as W, CoherenceRisk as X, CoherenceReadiness as Y, CoherenceTicketCreated as Z, UPDATE_CHANNELS as _, ConfigUpdate as a, WorkflowSearchNode as b, RUNTIME_CONFIG_SCALAR_KEYS as c, BranchGcFileSettings as d, CoherenceWorkState as et, CHANGE_MAP_NARRATOR_ENGINES as f, POST_TURN_CHECK_MODES as g, FactorySettings as h, Config as i, FLYING_ANIMALS_SCALE_RANGE as j, FLYING_ANIMALS_DURATION_RANGE as k, TASK_TITLE_SOURCE_PRIORITY as l, DEFAULT_FACTORY_PROTECTED_PATHS as m, BUILTIN_AGENT_IDS as n, PersistedTaskTitle as o, DEFAULT_FACTORY_CHECKS as p, WORKFLOWS_MAX_CONCURRENT_SESSIONS_RANGE as q, BrowserConfig as r, ProjectConfig as s, AGENT_ID_SHAPE_MESSAGE as t, configIssueMessage as u, WorkflowCommentBody as v, USAGE_VENDOR_KEYS as w, WorkflowsSettings as x, WorkflowLabelName as y, POSTHOG_TRAFFIC_MULTIPLIER_RANGE as z };
|