@kud/gh 0.12.0 → 0.12.2
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/dist/inbox.d.ts +32 -9
- package/dist/inbox.d.ts.map +1 -1
- package/dist/inbox.js +86 -6
- package/dist/inbox.js.map +1 -1
- package/package.json +1 -1
package/dist/inbox.d.ts
CHANGED
|
@@ -48,6 +48,38 @@ export declare const MY_PRS_LIMIT = 30;
|
|
|
48
48
|
* against the next reads a row leaving the WINDOW as a row leaving the WORLD, so
|
|
49
49
|
* every update to any of those 95 issues evicted something and was reported as
|
|
50
50
|
* news about the evicted one. See `sourceCoverage`.
|
|
51
|
+
*
|
|
52
|
+
* THE NUMBERS ARE NOT ONE NUMBER, because a row is not one weight. 30 was set
|
|
53
|
+
* for PULL REQUESTS and the issue sources inherited it, which is how a cap sized
|
|
54
|
+
* against `reviewThreads(first: 50)` came to govern a row carrying
|
|
55
|
+
* `comments(last: 1)` and ten labels. A PR drags roughly 80 nested nodes; an
|
|
56
|
+
* issue drags about 12.
|
|
57
|
+
*
|
|
58
|
+
* Measured 2026-09-07, same account, same selections that actually ship:
|
|
59
|
+
*
|
|
60
|
+
* repoIssues first:30 cost 1 360 nodes
|
|
61
|
+
* repoIssues first:100 cost 2 1200 nodes ← every issue he has
|
|
62
|
+
* assigned first:100 cost 2 6100 nodes (mixed source, see below)
|
|
63
|
+
* the real 2-source batch at first:100: cost 4, 2400 nodes, 5.3s
|
|
64
|
+
*
|
|
65
|
+
* So showing every issue costs about three points a fetch, against a 5000/hour
|
|
66
|
+
* budget and a 10-minute cache — six fetches an hour, call it 0.4% of budget.
|
|
67
|
+
* The cap was never buying anything on these three.
|
|
68
|
+
*
|
|
69
|
+
* WHAT IT DOES SPEND is headroom against the proxy, which fails on WALL CLOCK
|
|
70
|
+
* rather than cost: eight sources at ~16,870 nodes 502s two runs in three. The
|
|
71
|
+
* batch above is 2,400 nodes and 5.3s, roughly a seventh of that, which is why
|
|
72
|
+
* this is safe today rather than merely cheap. If 502s start appearing, this is
|
|
73
|
+
* the first thing to put back, and it is one constant.
|
|
74
|
+
*
|
|
75
|
+
* `assigned` is the one to watch: it is a MIXED source, so a PR assigned to you
|
|
76
|
+
* arrives with the full health fragment behind it. Today it returns 38 rows and
|
|
77
|
+
* no PRs, but its node count is budgeted for the PR shape whatever comes back —
|
|
78
|
+
* hence 6,100 for 38 rows. A day spent with fifty PRs assigned would make this
|
|
79
|
+
* the heaviest search in the query.
|
|
80
|
+
*
|
|
81
|
+
* The PR sources keep their caps. There the outer number really does multiply
|
|
82
|
+
* ~80 nested nodes, and `myPRs` at 30 is already half the cost of the whole call.
|
|
51
83
|
*/
|
|
52
84
|
export declare const SOURCE_LIMITS: Record<InboxSource, number>;
|
|
53
85
|
export type InboxShape = "full" | "minimal";
|
|
@@ -78,15 +110,6 @@ export type InboxQueryOptions = {
|
|
|
78
110
|
*/
|
|
79
111
|
sources?: readonly InboxSource[];
|
|
80
112
|
};
|
|
81
|
-
/**
|
|
82
|
-
* Build the inbox query. Without `repo`, it is account-wide.
|
|
83
|
-
*
|
|
84
|
-
* The two qualifiers do NOT compose. `user:@me` means "in repos I own", and
|
|
85
|
-
* GitHub ANDs search qualifiers — so `user:@me repo:someone-else/x` matches
|
|
86
|
-
* nothing, and a scoped inbox on a repo you contribute to but do not own would
|
|
87
|
-
* render empty and read as "nothing to do here". So `repo:` REPLACES
|
|
88
|
-
* `user:@me` rather than joining it.
|
|
89
|
-
*/
|
|
90
113
|
export declare const buildInboxQuery: (options?: InboxQueryOptions) => string;
|
|
91
114
|
/**
|
|
92
115
|
* How many sources to put in one request.
|
package/dist/inbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,KAAK,CAAA;AAE9B
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY,KAAK,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CASrD,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3C,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,SAAS,GACT,cAAc,CAAA;AAElB,oEAAoE;AACpE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAS/C,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;CACjC,CAAA;AA2SD,eAAO,MAAM,eAAe,GAAI,UAAS,iBAAsB,WAqB9D,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAS,iBAAiB,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,KAC7D,MAAM,EAYR,CAAA;AASD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,GAAG,EAAE,KAAG,GA8B7C,CAAA;AAED,oEAAoE;AACpE,MAAM,MAAM,cAAc,GAAG;IAC3B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,GAAG,KACR,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAc7C,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,GAAI,MAAM,GAAG,KAAG,WAAW,EACmB,CAAA"}
|
package/dist/inbox.js
CHANGED
|
@@ -55,14 +55,46 @@ export const MY_PRS_LIMIT = 30;
|
|
|
55
55
|
* against the next reads a row leaving the WINDOW as a row leaving the WORLD, so
|
|
56
56
|
* every update to any of those 95 issues evicted something and was reported as
|
|
57
57
|
* news about the evicted one. See `sourceCoverage`.
|
|
58
|
+
*
|
|
59
|
+
* THE NUMBERS ARE NOT ONE NUMBER, because a row is not one weight. 30 was set
|
|
60
|
+
* for PULL REQUESTS and the issue sources inherited it, which is how a cap sized
|
|
61
|
+
* against `reviewThreads(first: 50)` came to govern a row carrying
|
|
62
|
+
* `comments(last: 1)` and ten labels. A PR drags roughly 80 nested nodes; an
|
|
63
|
+
* issue drags about 12.
|
|
64
|
+
*
|
|
65
|
+
* Measured 2026-09-07, same account, same selections that actually ship:
|
|
66
|
+
*
|
|
67
|
+
* repoIssues first:30 cost 1 360 nodes
|
|
68
|
+
* repoIssues first:100 cost 2 1200 nodes ← every issue he has
|
|
69
|
+
* assigned first:100 cost 2 6100 nodes (mixed source, see below)
|
|
70
|
+
* the real 2-source batch at first:100: cost 4, 2400 nodes, 5.3s
|
|
71
|
+
*
|
|
72
|
+
* So showing every issue costs about three points a fetch, against a 5000/hour
|
|
73
|
+
* budget and a 10-minute cache — six fetches an hour, call it 0.4% of budget.
|
|
74
|
+
* The cap was never buying anything on these three.
|
|
75
|
+
*
|
|
76
|
+
* WHAT IT DOES SPEND is headroom against the proxy, which fails on WALL CLOCK
|
|
77
|
+
* rather than cost: eight sources at ~16,870 nodes 502s two runs in three. The
|
|
78
|
+
* batch above is 2,400 nodes and 5.3s, roughly a seventh of that, which is why
|
|
79
|
+
* this is safe today rather than merely cheap. If 502s start appearing, this is
|
|
80
|
+
* the first thing to put back, and it is one constant.
|
|
81
|
+
*
|
|
82
|
+
* `assigned` is the one to watch: it is a MIXED source, so a PR assigned to you
|
|
83
|
+
* arrives with the full health fragment behind it. Today it returns 38 rows and
|
|
84
|
+
* no PRs, but its node count is budgeted for the PR shape whatever comes back —
|
|
85
|
+
* hence 6,100 for 38 rows. A day spent with fifty PRs assigned would make this
|
|
86
|
+
* the heaviest search in the query.
|
|
87
|
+
*
|
|
88
|
+
* The PR sources keep their caps. There the outer number really does multiply
|
|
89
|
+
* ~80 nested nodes, and `myPRs` at 30 is already half the cost of the whole call.
|
|
58
90
|
*/
|
|
59
91
|
export const SOURCE_LIMITS = {
|
|
60
92
|
myPRs: MY_PRS_LIMIT,
|
|
61
93
|
reviewRequests: 20,
|
|
62
94
|
reviewed: 20,
|
|
63
|
-
assigned:
|
|
64
|
-
repoIssues:
|
|
65
|
-
authoredIssues:
|
|
95
|
+
assigned: 100,
|
|
96
|
+
repoIssues: 100,
|
|
97
|
+
authoredIssues: 100,
|
|
66
98
|
repoPRs: 30,
|
|
67
99
|
recentlyDone: 30,
|
|
68
100
|
};
|
|
@@ -209,7 +241,35 @@ const SOURCES = {
|
|
|
209
241
|
${issueLabels}
|
|
210
242
|
}}
|
|
211
243
|
}`,
|
|
212
|
-
|
|
244
|
+
/*
|
|
245
|
+
* `-user:@me` is what makes this DISJOINT from `repoIssues`, and it is not an
|
|
246
|
+
* optimisation — it is the thing that makes a merged tab's totals addable.
|
|
247
|
+
*
|
|
248
|
+
* THE INVARIANT, which belongs here and nowhere else: the negations in a
|
|
249
|
+
* merged tab's queries mirror the order `pick` claims rows in. `repoIssues`
|
|
250
|
+
* runs first and takes anything on a repo you own, so this one asks for the
|
|
251
|
+
* remainder — exactly what the host already documents it wants ("issues I
|
|
252
|
+
* filed on repos I don't own") and already achieves at ROW level by deduping.
|
|
253
|
+
* Only `issueCount` never knew, because the query still asked for the superset.
|
|
254
|
+
*
|
|
255
|
+
* `reviewed` has carried the same shape all along (`-review-requested:@me`),
|
|
256
|
+
* which is why `Review` was never wrong and this tab was.
|
|
257
|
+
*
|
|
258
|
+
* Measured 2026-09-07: 94 own-repo issues, 95 authored, 92 of them BOTH — so
|
|
259
|
+
* summing the two `issueCount`s claimed 189 where the truth was 97. Overlap is
|
|
260
|
+
* the normal case, not an edge: a plans repo you own and file into is in both
|
|
261
|
+
* sets by construction. With the negation, 94 + 3 = 97 and the sum is trivially
|
|
262
|
+
* right because the sets cannot intersect.
|
|
263
|
+
*
|
|
264
|
+
* It also fetches BETTER rows for fewer nodes. Without it, 30 rows arrive of
|
|
265
|
+
* which ~27 are duplicates `pick` discards, and the handful of external issues
|
|
266
|
+
* that are this source's entire purpose may not be in that window at all.
|
|
267
|
+
*
|
|
268
|
+
* Add a third source to a merged tab and it takes the negations of every
|
|
269
|
+
* source that claims before it. Measure the overlap instead and you are
|
|
270
|
+
* carrying a second fact that rots silently.
|
|
271
|
+
*/
|
|
272
|
+
authoredIssues: ({ scope, issueConversation, issueLabels, }) => ` authoredIssues: search(query: "${scope}is:issue is:open author:@me -user:@me archived:false", type: ISSUE, first: ${SOURCE_LIMITS.authoredIssues}) {
|
|
213
273
|
issueCount
|
|
214
274
|
nodes { ... on Issue {
|
|
215
275
|
number title createdAt url
|
|
@@ -260,9 +320,29 @@ const selectionsFor = ({ repo, doneWithinDays = 14, shape = "full", }) => {
|
|
|
260
320
|
* render empty and read as "nothing to do here". So `repo:` REPLACES
|
|
261
321
|
* `user:@me` rather than joining it.
|
|
262
322
|
*/
|
|
323
|
+
/**
|
|
324
|
+
* Which sources this scope should actually ask for.
|
|
325
|
+
*
|
|
326
|
+
* `authoredIssues` earns its place by asking for issues you filed OUTSIDE the
|
|
327
|
+
* repos you own — `-user:@me`, see SOURCES. Under a `repo:` scope there is no
|
|
328
|
+
* outside: `user:@me` is replaced rather than joined (see below), so the
|
|
329
|
+
* negation has nothing to negate and the search degrades to a strict SUBSET of
|
|
330
|
+
* `repoIssues`. Every row it returns is one `pick` immediately discards, paid
|
|
331
|
+
* for on every scoped fetch.
|
|
332
|
+
*
|
|
333
|
+
* Shared by both builders on purpose. They resolved `options.sources`apiece,
|
|
334
|
+
* which is exactly the shape where a change like this half-lands — the
|
|
335
|
+
* single-document path drops the source and the split path goes on asking.
|
|
336
|
+
*/
|
|
337
|
+
const sourcesFor = (options) => {
|
|
338
|
+
const sources = options.sources ?? INBOX_SOURCES;
|
|
339
|
+
return options.repo
|
|
340
|
+
? sources.filter((source) => source !== "authoredIssues")
|
|
341
|
+
: sources;
|
|
342
|
+
};
|
|
263
343
|
export const buildInboxQuery = (options = {}) => {
|
|
264
344
|
const selections = selectionsFor(options);
|
|
265
|
-
const sources = options
|
|
345
|
+
const sources = sourcesFor(options);
|
|
266
346
|
/*
|
|
267
347
|
* `rateLimit` is free — it does not count against itself — and it is the only
|
|
268
348
|
* authoritative source for what this query costs. Every estimate made about
|
|
@@ -313,7 +393,7 @@ export const INBOX_SOURCES_PER_QUERY = 2;
|
|
|
313
393
|
*/
|
|
314
394
|
export const buildInboxQueries = (options = {}) => {
|
|
315
395
|
const { sourcesPerQuery = INBOX_SOURCES_PER_QUERY, ...queryOptions } = options;
|
|
316
|
-
const sources = options
|
|
396
|
+
const sources = sourcesFor(options);
|
|
317
397
|
const size = Math.max(1, Math.trunc(sourcesPerQuery));
|
|
318
398
|
const chunks = [];
|
|
319
399
|
for (let i = 0; i < sources.length; i += size)
|
package/dist/inbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,YAAY;AACZ,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,uDAAuD;AAEvD;;;;;;;;;;;;;GAaG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAA;AAE9B
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"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"}
|