[READ-ONLY] Mirror of https://github.com/bombshell-dev/automation. GitHub Actions for the Bombshell organization
ci
0

Configure Feed

Select the types of activity you want to include in your feed.

Migrate detect-agent to @unveil/identity (#29)

`voight-kampff-test` has been deprecated and moved to
[`@unveil/identity`](https://www.npmx.dev/package/@unveil/identity).
That's what powers the current
[agentscan.tools](https://agentscan.tools/).

It's a near drop-in: same input shape, same
`organic`/`mixed`/`automation` classification, same
`getClassificationDetails`. The detection logic and config thresholds
are upgraded.

The [official AgentScan
action](https://github.com/MatteoGabriele/agentscan-action) triggers on
`pull_request_target`/`issues` and handles labeling/commenting
internally. We support `workflow_call` with outputs
(`classification`/`score`/`is_agent`), allow open-PR backfilling, the
scan cache, and the bot/collaborator bypass. Using the library directly
keeps all of that and just upgrades detection.

Closes #24

Implemented by Claude

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

authored by

Nate Moore
Claude Opus 4.8 (1M context)
and committed by
GitHub
(Jun 22, 2026, 6:35 PM -0500) e17e4c61 f5323ff1

+805 -250
+1 -1
.github/workflows/detect-agent.yml
··· 20 20 description: "The classification result: organic, mixed, or automation" 21 21 value: ${{ jobs.detect.outputs.classification }} 22 22 score: 23 - description: "The raw score from voight-kampff-test" 23 + description: "The raw score from @unveil/identity" 24 24 value: ${{ jobs.detect.outputs.score }} 25 25 is_agent: 26 26 description: "Whether the PR author is classified as automated (true/false)"
+789 -234
dist/detect-agent.mjs
··· 1 1 import { t as setOutput } from "./utils-DQae65qb.mjs"; 2 - //#region node_modules/.pnpm/voight-kampff-test@2.2.1/node_modules/voight-kampff-test/dist/index.mjs 2 + //#region node_modules/.pnpm/@unveil+identity@1.6.0/node_modules/@unveil/identity/dist/index.mjs 3 3 var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), s = (e, i, o, s) => { 4 4 if (i && typeof i == `object` || typeof i == `function`) for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, { 5 5 get: ((e) => i[e]).bind(null, d), ··· 10 10 value: n, 11 11 enumerable: !0 12 12 }) : a, n)); 13 - const l = { 13 + function l(e) { 14 + return e ? e === `organic` ? { 15 + label: `Organic activity`, 16 + description: `No automation signals detected in the analyzed events.` 17 + } : e === `mixed` ? { 18 + label: `Mixed activity`, 19 + description: `Activity patterns show a mix of organic and automated signals.` 20 + } : { 21 + label: `Automation signals`, 22 + description: `Activity patterns show signs of automation.` 23 + } : { 24 + label: `Analysis unavailable`, 25 + description: `Classification is not available for this account.` 26 + }; 27 + } 28 + const u = { 14 29 THRESHOLD_HUMAN: 70, 15 30 THRESHOLD_SUSPICIOUS: 50, 16 31 AGE_NEW_ACCOUNT: 30, ··· 25 40 MIN_EVENTS_FOR_ANALYSIS: 10, 26 41 FORKS_EXTREME: 8, 27 42 FORKS_HIGH: 5, 28 - POINTS_FORK_SURGE: 30, 29 - POINTS_MULTIPLE_FORKS: 20, 43 + FORKS_SURGE_SEVERE: 20, 44 + FORKS_SURGE_EXTREME_HIGH: 35, 45 + FORK_SURGE_WINDOW_HOURS: 24, 46 + POINTS_FORK_SURGE: 51, 47 + POINTS_FORK_SURGE_SEVERE: 70, 48 + POINTS_FORK_SURGE_EXTREME_HIGH: 85, 49 + POINTS_MULTIPLE_FORKS: 26, 50 + FORKS_SURGE_48H: 18, 51 + FORKS_SURGE_72H: 25, 52 + POINTS_FORK_SURGE_48H: 65, 53 + POINTS_FORK_SURGE_72H: 75, 54 + FORKS_PER_DAY_HIGH: 8, 55 + POINTS_FORKS_PER_DAY_HIGH: 55, 56 + CONSECUTIVE_FORK_DAYS: 6, 57 + POINTS_CONSECUTIVE_FORK_DAYS: 40, 58 + FORK_COMBINED_ACTIVITY_MIN: 12, 59 + FORK_COMBINED_BRANCHES: 6, 60 + FORK_COMBINED_PRS: 8, 61 + POINTS_FORK_COMBINED_ACTIVITY: 60, 62 + FORK_REPO_DIVERSITY_HIGH: 15, 63 + POINTS_FORK_DIVERSITY: 45, 30 64 HOURS_PER_DAY_INHUMAN: 16, 31 65 CONSECUTIVE_INHUMAN_DAYS_EXTREME: 3, 32 66 FREQUENT_MARATHON_DAYS: 5, 33 67 POINTS_NONSTOP_ACTIVITY: 40, 34 68 POINTS_FREQUENT_MARATHON: 25, 35 - CONSECUTIVE_DAYS_STREAK: 21, 36 - POINTS_CONTINUOUS_ACTIVITY: 25, 37 69 REPO_SPREAD_EXTREME: 30, 38 70 REPO_SPREAD_HIGH: 20, 39 71 POINTS_EXTREME_REPO_SPREAD_YOUNG: 30, ··· 42 74 PRS_WEEK_HIGH: 20, 43 75 POINTS_PR_BURST: 20, 44 76 POINTS_HIGH_PR_FREQUENCY: 15, 77 + PRS_DAY_EXTREME: 30, 78 + POINTS_PRS_DAY_EXTREME: 45, 79 + PRS_WEEK_EXTREME: 100, 80 + POINTS_PRS_WEEK_EXTREME: 50, 81 + PRS_WEEK_VERY_HIGH: 50, 82 + POINTS_PRS_WEEK_VERY_HIGH: 40, 83 + PRS_SPAM_VOLUME: 50, 84 + REPOS_SPAM_SPREAD: 15, 85 + POINTS_PR_SPAM_COMBINED: 45, 86 + PRS_SPAM_DENSITY_PER_WEEK: 15, 87 + PRS_SPAM_ROLLING_30DAYS: 60, 88 + POINTS_PR_SPAM_DISTRIBUTED: 45, 45 89 EXTERNAL_PRS_MIN: 15, 46 90 PERSONAL_REPOS_LOW: 5, 47 91 POINTS_PR_ONLY_CONTRIBUTOR: 20, ··· 67 111 POINTS_CREATE_BURST_EXTREME: 35, 68 112 POINTS_CREATE_BURST_HIGH: 25, 69 113 HOURS_ACTIVE_EXTREME: 21, 114 + HOURS_ACTIVE_EXTREME_ESTABLISHED: 23, 70 115 EVENTS_PER_HOUR_MIN: 2, 71 116 POINTS_24_7_ACTIVITY: 25, 117 + AGE_ESTABLISHED_ACCOUNT: 1e3, 72 118 EVENT_TYPE_DIVERSITY_MIN: 2, 73 119 POINTS_LOW_DIVERSITY: 20, 74 120 ISSUE_COMMENT_SPAM_WINDOW_MINUTES: 2, ··· 76 122 ISSUE_COMMENT_SPRAY_HIGH: 10, 77 123 ISSUE_COMMENT_MIN_FOR_SPRAY: 10, 78 124 POINTS_ISSUE_COMMENT_SPRAY_EXTREME: 40, 79 - POINTS_ISSUE_COMMENT_SPRAY_HIGH: 30 125 + POINTS_ISSUE_COMMENT_SPRAY_HIGH: 30, 126 + PR_COMMENT_SPAM_WINDOW_MINUTES: 2, 127 + PR_COMMENT_SPRAY_EXTREME: 12, 128 + PR_COMMENT_SPRAY_HIGH: 8, 129 + PR_COMMENT_MIN_FOR_SPRAY: 8, 130 + POINTS_PR_COMMENT_SPRAY_EXTREME: 38, 131 + POINTS_PR_COMMENT_SPRAY_HIGH: 28, 132 + BRANCH_PR_TIME_WINDOW_SECONDS: 90, 133 + BRANCH_PR_PATTERN_MIN_PAIRS: 8, 134 + BRANCH_PR_PATTERN_MIN_PAIRS_ESTABLISHED: 15, 135 + BRANCH_PR_PATTERN_RATIO_MIN: .65, 136 + BRANCH_PR_PATTERN_RATIO_MIN_ESTABLISHED: .8, 137 + BRANCH_PR_COUNT_RATIO_MIN: .65, 138 + POINTS_BRANCH_PR_AUTOMATION: 35, 139 + RAPID_PR_SPAM_MIN_PRS: 4, 140 + RAPID_PR_SPAM_MIN_PRS_ESTABLISHED: 6, 141 + POINTS_RAPID_PR_SPAM: 40, 142 + CLOSED_PR_SPAM_MIN: 5, 143 + CLOSED_PR_SPAM_MIN_ESTABLISHED: 8, 144 + CLOSED_PR_REPO_SPREAD: 3, 145 + CLOSED_PR_TIME_WINDOW_MINUTES: 60, 146 + POINTS_CLOSED_PR_SPAM: 35, 147 + POINTS_CLOSED_PR_SPAM_HIGH: 55, 148 + POINTS_CLOSED_PR_SPAM_EXTREME: 75, 149 + POINTS_CLOSED_PR_SPAM_BURST_EXTREME: 80, 150 + AI_COMMIT_MIN_COMMITS: 5, 151 + AI_COMMIT_TIERS: [ 152 + { 153 + ratio: .9, 154 + multiplier: 1.5 155 + }, 156 + { 157 + ratio: .85, 158 + multiplier: 1.3 159 + }, 160 + { 161 + ratio: .75, 162 + multiplier: 1.15 163 + } 164 + ] 80 165 }; 81 - var u = o(((e, t) => { 166 + var d = o(((e, t) => { 82 167 (function(n, r) { 83 168 typeof e == `object` && t !== void 0 ? t.exports = r() : typeof define == `function` && define.amd ? define(r) : (n = typeof globalThis < `u` ? globalThis : n || self).dayjs = r(); 84 169 })(e, (function() { ··· 372 457 return w(1e3 * e); 373 458 }, w.en = b[y], w.Ls = b, w.p = {}, w; 374 459 })); 375 - })), d = o(((e, t) => { 460 + })), f = o(((e, t) => { 376 461 (function(n, r) { 377 462 typeof e == `object` && t !== void 0 ? t.exports = r() : typeof define == `function` && define.amd ? define(r) : (n = typeof globalThis < `u` ? globalThis : n || self).dayjs_plugin_minMax = r(); 378 463 })(e, (function() { ··· 393 478 }; 394 479 }; 395 480 })); 396 - })), f = c(u(), 1), p = c(d(), 1); 397 - f.default.extend(p.default); 398 - function m({ createdAt: e, reposCount: t, accountName: n, events: r }) { 399 - let i = [], a = (0, f.default)().diff(e, `days`); 400 - a < l.AGE_NEW_ACCOUNT ? i.push({ 481 + })), p = c(o(((e, t) => { 482 + (function(n, r) { 483 + typeof e == `object` && t !== void 0 ? t.exports = r() : typeof define == `function` && define.amd ? define(r) : (n = typeof globalThis < `u` ? globalThis : n || self).dayjs_plugin_utc = r(); 484 + })(e, (function() { 485 + var e = `minute`, t = /[+-]\d\d(?::?\d\d)?/g, n = /([+-]|\d\d)/g; 486 + return function(r, i, a) { 487 + var o = i.prototype; 488 + a.utc = function(e) { 489 + return new i({ 490 + date: e, 491 + utc: !0, 492 + args: arguments 493 + }); 494 + }, o.utc = function(t) { 495 + var n = a(this.toDate(), { 496 + locale: this.$L, 497 + utc: !0 498 + }); 499 + return t ? n.add(this.utcOffset(), e) : n; 500 + }, o.local = function() { 501 + return a(this.toDate(), { 502 + locale: this.$L, 503 + utc: !1 504 + }); 505 + }; 506 + var s = o.parse; 507 + o.parse = function(e) { 508 + e.utc && (this.$u = !0), this.$utils().u(e.$offset) || (this.$offset = e.$offset), s.call(this, e); 509 + }; 510 + var c = o.init; 511 + o.init = function() { 512 + if (this.$u) { 513 + var e = this.$d; 514 + this.$y = e.getUTCFullYear(), this.$M = e.getUTCMonth(), this.$D = e.getUTCDate(), this.$W = e.getUTCDay(), this.$H = e.getUTCHours(), this.$m = e.getUTCMinutes(), this.$s = e.getUTCSeconds(), this.$ms = e.getUTCMilliseconds(); 515 + } else c.call(this); 516 + }; 517 + var l = o.utcOffset; 518 + o.utcOffset = function(r, i) { 519 + var a = this.$utils().u; 520 + if (a(r)) return this.$u ? 0 : a(this.$offset) ? l.call(this) : this.$offset; 521 + if (typeof r == `string` && (r = function(e) { 522 + e === void 0 && (e = ``); 523 + var r = e.match(t); 524 + if (!r) return null; 525 + var i = (`` + r[0]).match(n) || [ 526 + `-`, 527 + 0, 528 + 0 529 + ], a = i[0], o = 60 * i[1] + +i[2]; 530 + return o === 0 ? 0 : a === `+` ? o : -o; 531 + }(r), r === null)) return this; 532 + var o = Math.abs(r) <= 16 ? 60 * r : r; 533 + if (o === 0) return this.utc(i); 534 + var s = this.clone(); 535 + if (i) return s.$offset = o, s.$u = !1, s; 536 + var c = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset(); 537 + return (s = this.local().add(o + c, e)).$offset = o, s.$x.$localOffset = c, s; 538 + }; 539 + var u = o.format; 540 + o.format = function(e) { 541 + var t = e || (this.$u ? `YYYY-MM-DDTHH:mm:ss[Z]` : ``); 542 + return u.call(this, t); 543 + }, o.valueOf = function() { 544 + var e = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()); 545 + return this.$d.valueOf() - 6e4 * e; 546 + }, o.isUTC = function() { 547 + return !!this.$u; 548 + }, o.toISOString = function() { 549 + return this.toDate().toISOString(); 550 + }, o.toString = function() { 551 + return this.toDate().toUTCString(); 552 + }; 553 + var d = o.toDate; 554 + o.toDate = function(e) { 555 + return e === `s` && this.$offset ? a(this.format(`YYYY-MM-DD HH:mm:ss:SSS`)).toDate() : d.call(this); 556 + }; 557 + var f = o.diff; 558 + o.diff = function(e, t, n) { 559 + if (e && this.$u === e.$u) return f.call(this, e, t, n); 560 + var r = this.local(), i = a(e).local(); 561 + return f.call(r, i, t, n); 562 + }; 563 + }; 564 + })); 565 + }))(), 1), m = c(f(), 1), h = c(d(), 1); 566 + const g = [ 567 + /co-authored-by:.*<[^>]*@anthropic\.com>/i, 568 + /co-authored-by:.*<[^>]*copilot@github\.com>/i, 569 + /co-authored-by:.*<[^>]*\+copilot@users\.noreply\.github\.com>/i, 570 + /co-authored-by:\s*github copilot\b/i, 571 + /co-authored-by:.*<[^>]*@cursor\.com>/i, 572 + /co-authored-by:.*devin-ai-integration/i, 573 + /co-authored-by:\s*devin ai\b/i, 574 + /co-authored-by:.*<[^>]*@openai\.com>/i, 575 + /co-authored-by:\s*openai[- ]codex\b/i, 576 + /co-authored-by:\s*aider\s*[(<]/i, 577 + /co-authored-by:.*openhands-agent/i, 578 + /co-authored-by:.*<[^>]*@sourcegraph\.com>/i, 579 + /generated with \[?claude code/i, 580 + /🤖 generated with/i, 581 + /generated by cursor/i 582 + ]; 583 + function _(e) { 584 + return e ? g.some((t) => t.test(e)) : !1; 585 + } 586 + function v(e) { 587 + let t = /* @__PURE__ */ new Set(), n = 0, r = 0; 588 + for (let i of e) { 589 + if (i.sha) { 590 + if (t.has(i.sha)) continue; 591 + t.add(i.sha); 592 + } 593 + n++, _(i.message) && r++; 594 + } 595 + let i = n > 0 ? r / n : 0; 596 + return { 597 + totalCommits: n, 598 + aiCommits: r, 599 + ratio: i 600 + }; 601 + } 602 + function y(e) { 603 + let t = []; 604 + return e < u.AGE_NEW_ACCOUNT ? t.push({ 401 605 label: `Recently created`, 402 - points: l.POINTS_NEW_ACCOUNT, 403 - detail: `Account is ${a} days old` 404 - }) : a < l.AGE_YOUNG_ACCOUNT && i.push({ 606 + points: u.POINTS_NEW_ACCOUNT, 607 + detail: `Account is ${e} days old` 608 + }) : e < u.AGE_YOUNG_ACCOUNT && t.push({ 405 609 label: `Young account`, 406 - points: l.POINTS_YOUNG_ACCOUNT, 407 - detail: `Account is ${a} days old` 408 - }); 409 - let o = r.filter((e) => { 410 - let t = e.repo?.name?.split(`/`)[0]?.toLowerCase(); 411 - return t && t !== n.toLowerCase(); 412 - }), s = t === 0 && o.length === r.length; 413 - s && r.length >= l.ZERO_REPOS_MIN_EVENTS && i.push({ 414 - label: `Only active on other people's repos`, 415 - points: l.POINTS_ZERO_REPOS_ACTIVE + l.POINTS_NO_PERSONAL_ACTIVITY, 416 - detail: `No personal repos, all ${r.length} events are on repos they don't own` 610 + points: u.POINTS_YOUNG_ACCOUNT, 611 + detail: `Account is ${e} days old` 612 + }), t; 613 + } 614 + h.default.extend(p.default); 615 + function b(e) { 616 + let t = []; 617 + if (e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 618 + let n = /* @__PURE__ */ new Map(); 619 + e.forEach((e) => { 620 + let t = h.default.utc(e.created_at).format(`YYYY-MM-DD`), r = h.default.utc(e.created_at).hour(); 621 + n.has(t) || n.set(t, /* @__PURE__ */ new Set()), n.get(t)?.add(r); 417 622 }); 418 - let c = a < l.AGE_YOUNG_ACCOUNT; 419 - if (r.length >= l.MIN_EVENTS_FOR_ANALYSIS) { 420 - let e = r.filter((e) => e.type === `CreateEvent` && e.payload?.ref_type === `repository`); 421 - if (e.length >= l.CREATE_EVENTS_MIN) { 422 - let t = e.map((e) => (0, f.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), n = 0, r = 0; 423 - for (let e = 0; e < t.length; e++) { 424 - let i = t[e]; 425 - for (; i && i.diff(t[r], `hour`, !0) > 24;) r++; 426 - let a = e - r + 1; 427 - n = Math.max(n, a); 623 + let r = null, i = 24; 624 + if (n.forEach((t, n) => { 625 + let a = t.size, o = e.filter((e) => h.default.utc(e.created_at).format(`YYYY-MM-DD`) === n).length; 626 + if (a >= u.HOURS_ACTIVE_EXTREME && o >= 10 && o / a >= u.EVENTS_PER_HOUR_MIN) { 627 + let e = Array.from(t).sort((e, t) => e - t), s = e[0], c = 24 - e[e.length - 1] + s - 1; 628 + for (let t = 0; t < e.length - 1; t++) { 629 + let n = e[t + 1] - e[t] - 1; 630 + c = Math.max(c, n); 428 631 } 429 - n >= l.CREATE_BURST_EXTREME ? i.push({ 430 - label: `Concentrated repository creation`, 431 - points: l.POINTS_CREATE_BURST_EXTREME, 432 - detail: `${n} repositories created in a short timeframe (within 24 hours)` 433 - }) : n >= l.CREATE_BURST_HIGH && i.push({ 434 - label: `Frequent repository creation`, 435 - points: l.POINTS_CREATE_BURST_HIGH, 436 - detail: `${n} repositories created in a short timeframe (within 24 hours)` 632 + c < i && (i = c, r = { 633 + day: n, 634 + hoursActive: a, 635 + restGap: c, 636 + eventCount: o 437 637 }); 438 638 } 439 - let t = /* @__PURE__ */ new Map(); 440 - if (r.forEach((e) => { 441 - let n = (0, f.default)(e.created_at).hour(); 442 - t.set(n, (t.get(n) || 0) + 1); 443 - }), r.length > 0 && t.size > 0) { 444 - let e = t.size, n = Array.from(t.values()), a = r.length / e, o = a, s = n.reduce((e, t) => e + (t - o) ** 2, 0) / n.length, c = Math.sqrt(s) / o, u = Array.from(t.keys()).sort((e, t) => e - t), d = u[0], f = u[u.length - 1], p = d !== void 0 && f !== void 0 ? 24 - f + d : 0; 445 - for (let e = 0; e < u.length - 1; e++) { 446 - let t = u[e], n = u[e + 1]; 447 - t !== void 0 && n !== void 0 && (p = Math.max(p, n - t - 1)); 448 - } 449 - let m = c < .3, h = p < 3, g = a >= l.EVENTS_PER_HOUR_MIN; 450 - if (e >= l.HOURS_ACTIVE_EXTREME && g && (m || h)) { 451 - let t = l.POINTS_24_7_ACTIVITY; 452 - m && h && (t = Math.round(t * 1.5)), i.push({ 453 - label: `24/7 activity pattern`, 454 - points: t, 455 - detail: `Active ${e}/24 hours, ${p}h max rest, ${a.toFixed(1)} events/hour` 456 - }); 639 + }), r) { 640 + let e = r; 641 + if (i < 3) { 642 + let n = u.POINTS_24_7_ACTIVITY; 643 + i < 1 && (n = Math.round(n * 1.5)), t.push({ 644 + label: `24/7 activity pattern`, 645 + points: n, 646 + amplifiable: !0, 647 + detail: `${e.day}: active across ${e.hoursActive} hours with only ${i} hour${i === 1 ? `` : `s`} rest` 648 + }); 649 + } 650 + } 651 + return t; 652 + } 653 + function x(e, t) { 654 + let n = [], r = t >= u.AGE_ESTABLISHED_ACCOUNT, i = r ? u.BRANCH_PR_PATTERN_MIN_PAIRS_ESTABLISHED : u.BRANCH_PR_PATTERN_MIN_PAIRS, a = r ? u.BRANCH_PR_PATTERN_RATIO_MIN_ESTABLISHED : u.BRANCH_PR_PATTERN_RATIO_MIN, o = e.filter((e) => e.type === `CreateEvent` && e.payload?.ref_type === `branch`), s = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `opened`); 655 + if (o.length >= i && s.length >= i && o.length / s.length >= u.BRANCH_PR_COUNT_RATIO_MIN) { 656 + let e = o.map((e) => ({ 657 + event: e, 658 + time: (0, h.default)(e.created_at) 659 + })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), t = s.map((e) => ({ 660 + event: e, 661 + time: (0, h.default)(e.created_at) 662 + })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), r = /* @__PURE__ */ new Map(); 663 + for (let e of t) { 664 + let t = e.event.repo?.name; 665 + t && (r.has(t) || r.set(t, []), r.get(t)?.push(e)); 666 + } 667 + let c = 0, l = 0, d = /* @__PURE__ */ new Map(); 668 + for (let t of e) { 669 + let e = t.event.repo?.name; 670 + if (!e) continue; 671 + let n = r.get(e); 672 + if (!n || n.length === 0) continue; 673 + d.has(e) || d.set(e, 0); 674 + let i = d.get(e) ?? 0; 675 + for (; i < n.length && n[i].time.valueOf() < t.time.valueOf();) i++; 676 + if (i < n.length) { 677 + let e = n[i].time.diff(t.time, `second`); 678 + e >= 0 && e <= u.BRANCH_PR_TIME_WINDOW_SECONDS && (c++, l = Math.max(l, e), i++); 457 679 } 680 + d.set(e, i); 458 681 } 459 - let n = new Set(r.map((e) => e.type)), a = n.has(`IssueCommentEvent`) || n.has(`PullRequestReviewEvent`) || n.has(`PullRequestReviewCommentEvent`), o = n.has(`WatchEvent`); 460 - n.size <= l.EVENT_TYPE_DIVERSITY_MIN && !a && !o && i.push({ 461 - label: `Narrow activity focus`, 462 - points: l.POINTS_LOW_DIVERSITY, 463 - detail: `Activity concentrated on ${n.size} specific event types without interpersonal interactions` 682 + if (c >= i) c / o.length >= a && n.push({ 683 + label: `Automated branch/PR workflow`, 684 + points: u.POINTS_BRANCH_PR_AUTOMATION, 685 + amplifiable: !0, 686 + detail: `${c}/${o.length} branch creations followed by PRs within ${l}s` 464 687 }); 465 - let s = r.filter((e) => e.type === `IssueCommentEvent`); 466 - if (s.length >= l.ISSUE_COMMENT_MIN_FOR_SPRAY) { 467 - let e = s.map((e) => ({ 468 - event: e, 469 - time: (0, f.default)(e.created_at) 470 - })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), t = 0, n = 0, r = 0, a = 0, o = l.ISSUE_COMMENT_SPAM_WINDOW_MINUTES; 471 - for (let i = 0; i < e.length; i++) { 472 - let s = e[i]?.time; 473 - for (; e[a] && s && s.diff(e[a].time, `minute`, !0) > o;) a++; 474 - let c = new Set(e.slice(a, i + 1).map((e) => e.event.repo?.name).filter((e) => e !== void 0)); 475 - c.size > t && (t = c.size, n = a, r = i); 688 + else { 689 + let r = 0, s = 0, c = /* @__PURE__ */ new Set(); 690 + for (let t of e) { 691 + let e = t.event.repo?.name; 692 + if (e) { 693 + let t = e.split(`/`)[1]; 694 + t && c.add(t); 695 + } 476 696 } 477 - if (t >= l.ISSUE_COMMENT_SPRAY_EXTREME) { 478 - let a = e[n]?.time, o = e[r]?.time, s = r - n + 1, c = o && a ? Math.round(o.diff(a, `minute`, !0) * 10) / 10 : 0, u = c > 0 ? Math.round(s / c * 10) / 10 : s; 479 - i.push({ 480 - label: `Issue comment spam`, 481 - points: l.POINTS_ISSUE_COMMENT_SPRAY_EXTREME, 482 - detail: `${s} comments to ${t} different repos in ${c} minutes (${u} comments/min)` 483 - }); 484 - } else if (t >= l.ISSUE_COMMENT_SPRAY_HIGH) { 485 - let a = e[n]?.time, o = e[r]?.time, s = r - n + 1, c = o && a ? Math.round(o.diff(a, `minute`, !0) * 10) / 10 : 0, u = c > 0 ? Math.round(s / c * 10) / 10 : s; 486 - i.push({ 487 - label: `High comment frequency across repos`, 488 - points: l.POINTS_ISSUE_COMMENT_SPRAY_HIGH, 489 - detail: `${s} comments to ${t} different repos in ${c} minutes (${u} comments/min)` 697 + for (let n of c) { 698 + let i = e.filter((e) => { 699 + let t = e.event.repo?.name; 700 + return t && t.split(`/`)[1] === n; 701 + }), a = t.filter((e) => { 702 + let t = e.event.repo?.name; 703 + return t && t.split(`/`)[1] === n; 490 704 }); 705 + if (i.length > 0 && a.length > 0) { 706 + let e = 0; 707 + for (let t of i) { 708 + for (; e < a.length && a[e].time.valueOf() < t.time.valueOf();) e++; 709 + if (e < a.length) { 710 + let n = a[e].time.diff(t.time, `second`); 711 + n >= 0 && n <= u.BRANCH_PR_TIME_WINDOW_SECONDS && (r++, s = Math.max(s, n), e++); 712 + } 713 + } 714 + } 491 715 } 716 + r >= i && r / o.length >= a && n.push({ 717 + label: `Automated fork/PR workflow`, 718 + points: u.POINTS_BRANCH_PR_AUTOMATION, 719 + amplifiable: !0, 720 + detail: `${r}/${o.length} fork branches followed by upstream PRs within ${s}s` 721 + }); 492 722 } 493 723 } 494 - if (c && r.length >= l.MIN_EVENTS_FOR_ANALYSIS) { 495 - let e = n.toLowerCase(), a = r.filter((e) => e.type === `PushEvent`); 496 - if (a.length >= l.MIN_EVENTS_FOR_ANALYSIS) { 497 - let e = a.map((e) => (0, f.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), t = 0, n = 0; 498 - for (let r = 0; r < e.length; r++) { 499 - let i = e[r]; 500 - for (; i && i.diff(e[n], `hour`, !0) > 1;) n++; 501 - let a = r - n + 1; 502 - t = Math.max(t, a); 503 - } 504 - t >= l.HOURLY_ACTIVITY_EXTREME ? i.push({ 505 - label: `Extreme commit burst`, 506 - points: l.POINTS_EXTREME_ACTIVITY_DENSITY, 507 - detail: `${t} commits within 1 hour` 508 - }) : t >= l.HOURLY_ACTIVITY_HIGH && i.push({ 509 - label: `High commit burst`, 510 - points: l.POINTS_HIGH_ACTIVITY_DENSITY, 511 - detail: `${t} commits within 1 hour` 724 + return n; 725 + } 726 + function S(e, t) { 727 + let n = [], r = t >= u.AGE_ESTABLISHED_ACCOUNT ? u.CLOSED_PR_SPAM_MIN_ESTABLISHED : u.CLOSED_PR_SPAM_MIN, i = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `closed`); 728 + if (i.length < r) return n; 729 + let a = new Set(i.map((e) => e.repo?.name).filter((e) => e !== void 0)), o = i.map((e) => (0, h.default)(e.created_at)), s = o.reduce((e, t) => t.isBefore(e) ? t : e), c = o.reduce((e, t) => t.isAfter(e) ? t : e), l = c.diff(s, `minute`), d = c.diff(s, `day`), f = c.diff(s, `day`, !0), p = d > 0 ? `${d}d` : `${Math.ceil(l / 60)}h`, m = /* @__PURE__ */ new Map(); 730 + i.forEach((e) => { 731 + let t = h.default.utc(e.created_at).format(`YYYY-MM-DD`); 732 + m.set(t, (m.get(t) || 0) + 1); 733 + }); 734 + let g = Array.from(m.entries()).filter(([e, t]) => t >= 10).sort((e, t) => t[1] - e[1]).map(([e, t]) => t), _ = ``; 735 + g.length > 0 && (_ = g.length === 1 ? `, with a spike of ${g[0]} rejections on one day` : `, with spike days of ${g.slice(0, -1).join(`, `) + ` and ${g[g.length - 1]}`} rejections each`); 736 + let v = u.POINTS_CLOSED_PR_SPAM; 737 + i.length >= 100 ? v = u.POINTS_CLOSED_PR_SPAM_EXTREME : i.length >= 25 && (v = u.POINTS_CLOSED_PR_SPAM_HIGH); 738 + let y = f > 0 ? i.length / f : i.length, b = g.length > 0, x = i.length >= 25, S = y >= .5; 739 + if (a.size >= u.CLOSED_PR_REPO_SPREAD && (b || x || S)) return n.push({ 740 + label: `Closed PR spam scatter`, 741 + points: v, 742 + amplifiable: !0, 743 + detail: `${i.length} PRs were rejected across ${a.size} repositories in ${p}${_}.` 744 + }), n; 745 + if (a.size >= 2 && l <= u.CLOSED_PR_TIME_WINDOW_MINUTES) { 746 + let e = i.length >= 100 ? u.POINTS_CLOSED_PR_SPAM_BURST_EXTREME : v; 747 + n.push({ 748 + label: `Closed PR spam burst`, 749 + points: e, 750 + amplifiable: !0, 751 + detail: `${i.length} PRs closed across ${a.size} repos in ${l}m (concentrated rejection/spam activity)` 752 + }); 753 + } 754 + return n; 755 + } 756 + function C(e) { 757 + let t = []; 758 + if (e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 759 + let n = e.filter((e) => e.type === `IssueCommentEvent`); 760 + if (n.length >= u.ISSUE_COMMENT_MIN_FOR_SPRAY) { 761 + let e = n.map((e) => ({ 762 + event: e, 763 + time: (0, h.default)(e.created_at) 764 + })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), r = 0, i = 0, a = 0, o = 0, s = u.ISSUE_COMMENT_SPAM_WINDOW_MINUTES; 765 + for (let t = 0; t < e.length; t++) { 766 + let n = e[t]?.time; 767 + for (; e[o] && n && n.diff(e[o].time, `minute`, !0) > s;) o++; 768 + let c = new Set(e.slice(o, t + 1).map((e) => e.event.repo?.name).filter((e) => e !== void 0)); 769 + c.size > r && (r = c.size, i = o, a = t); 770 + } 771 + if (r >= u.ISSUE_COMMENT_SPRAY_EXTREME) { 772 + let n = e[i]?.time, o = e[a]?.time, s = a - i + 1, c = o && n ? Math.round(o.diff(n, `minute`, !0)) : 0; 773 + t.push({ 774 + label: `Issue comment spam`, 775 + points: u.POINTS_ISSUE_COMMENT_SPRAY_EXTREME, 776 + amplifiable: !0, 777 + detail: `${s} comments to ${r} different repos in just ${c} minute${c === 1 ? `` : `s`}` 778 + }); 779 + } else if (r >= u.ISSUE_COMMENT_SPRAY_HIGH) { 780 + let n = e[i]?.time, o = e[a]?.time, s = a - i + 1, c = o && n ? Math.round(o.diff(n, `minute`, !0)) : 0; 781 + t.push({ 782 + label: `High comment frequency across repos`, 783 + points: u.POINTS_ISSUE_COMMENT_SPRAY_HIGH, 784 + amplifiable: !0, 785 + detail: `${s} comments to ${r} different repos in just ${c} minute${c === 1 ? `` : `s`}` 786 + }); 787 + } 788 + } 789 + let r = e.filter((e) => e.type === `PullRequestReviewCommentEvent`); 790 + if (r.length >= u.PR_COMMENT_MIN_FOR_SPRAY) { 791 + let e = r.map((e) => ({ 792 + event: e, 793 + time: (0, h.default)(e.created_at) 794 + })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), n = 0, i = 0, a = 0, o = 0, s = u.PR_COMMENT_SPAM_WINDOW_MINUTES; 795 + for (let t = 0; t < e.length; t++) { 796 + let r = e[t]?.time; 797 + for (; e[o] && r && r.diff(e[o].time, `minute`, !0) > s;) o++; 798 + let c = new Set(e.slice(o, t + 1).map((e) => { 799 + let t = e.event.repo?.name, n = e.event.payload?.pull_request?.number; 800 + return t && n ? `${t}#${n}` : t; 801 + }).filter((e) => e !== void 0)); 802 + c.size > n && (n = c.size, i = o, a = t); 803 + } 804 + if (n >= u.PR_COMMENT_SPRAY_EXTREME) { 805 + let r = e[i]?.time, o = e[a]?.time, s = a - i + 1, c = o && r ? Math.round(o.diff(r, `minute`, !0)) : 0; 806 + t.push({ 807 + label: `PR comment spam`, 808 + points: u.POINTS_PR_COMMENT_SPRAY_EXTREME, 809 + amplifiable: !0, 810 + detail: `${s} comments on ${n} different PRs in just ${c} minute${c === 1 ? `` : `s`}` 811 + }); 812 + } else if (n >= u.PR_COMMENT_SPRAY_HIGH) { 813 + let r = e[i]?.time, o = e[a]?.time, s = a - i + 1, c = o && r ? Math.round(o.diff(r, `minute`, !0)) : 0; 814 + t.push({ 815 + label: `High PR comment frequency`, 816 + points: u.POINTS_PR_COMMENT_SPRAY_HIGH, 817 + amplifiable: !0, 818 + detail: `${s} comments on ${n} different PRs in just ${c} minute${c === 1 ? `` : `s`}` 819 + }); 820 + } 821 + } 822 + return t; 823 + } 824 + function w(e) { 825 + if (e.length === 0) return 0; 826 + let t = e.reduce((e, t) => e + t, 0); 827 + if (t === 0) return 0; 828 + let n = 0; 829 + for (let r of e) if (r > 0) { 830 + let e = r / t; 831 + n -= e * Math.log2(e); 832 + } 833 + return n; 834 + } 835 + function T(e) { 836 + return e.length <= 1 ? 0 : w(e) / Math.log2(e.length); 837 + } 838 + function E(e) { 839 + let t = []; 840 + if (e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 841 + let n = /* @__PURE__ */ new Map(); 842 + e.forEach((e) => { 843 + e.type && n.set(e.type, (n.get(e.type) || 0) + 1); 844 + }); 845 + let r = T(Array.from(n.values())), i = new Set(e.map((e) => e.type).filter((e) => e != null)), a = i.has(`IssueCommentEvent`) || i.has(`PullRequestReviewEvent`) || i.has(`PullRequestReviewCommentEvent`), o = i.has(`WatchEvent`), s = i.size <= 3 && r < .8, c = r > .85 && i.size >= 5; 846 + return (s || c) && !a && !o && t.push({ 847 + label: `Narrow activity focus`, 848 + points: u.POINTS_LOW_DIVERSITY, 849 + amplifiable: !0, 850 + detail: `${i.size} event types (entropy: ${r.toFixed(2)}) without interpersonal interactions` 851 + }), t; 852 + } 853 + h.default.extend(p.default), h.default.extend(m.default); 854 + function D(e) { 855 + let t = [], n = e.filter((e) => e.type === `ForkEvent`); 856 + if (n.length < u.FORKS_HIGH) return t; 857 + let r = n.map((e) => (0, h.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), i = (e) => { 858 + let t = 0, n = 0; 859 + for (let i = 0; i < r.length; i++) { 860 + let a = r[i]; 861 + for (; a && a.diff(r[n], `hour`, !0) > e;) n++; 862 + let o = i - n + 1; 863 + t = Math.max(t, o); 864 + } 865 + return t; 866 + }, a = i(24), o = i(48), s = i(72), c = null; 867 + if (a >= u.FORKS_SURGE_EXTREME_HIGH ? c = { 868 + label: `Extreme fork automation`, 869 + points: u.POINTS_FORK_SURGE_EXTREME_HIGH, 870 + amplifiable: !0, 871 + detail: `${a} repositories forked in rapid succession (within 24 hours)` 872 + } : a >= u.FORKS_SURGE_SEVERE ? c = { 873 + label: `Severe fork surge`, 874 + points: u.POINTS_FORK_SURGE_SEVERE, 875 + amplifiable: !0, 876 + detail: `${a} repositories forked in rapid succession (within 24 hours)` 877 + } : a >= u.FORKS_EXTREME ? c = { 878 + label: `Fork spike detected`, 879 + points: u.POINTS_FORK_SURGE, 880 + amplifiable: !0, 881 + detail: `Burst of ${a} fork events in a single 24-hour window` 882 + } : a >= u.FORKS_HIGH ? c = { 883 + label: `Multiple forks`, 884 + points: u.POINTS_MULTIPLE_FORKS, 885 + amplifiable: !0, 886 + detail: `${a} repositories forked in a single 24-hour window` 887 + } : o >= u.FORKS_SURGE_48H ? c = { 888 + label: `Multi-day fork surge`, 889 + points: u.POINTS_FORK_SURGE_48H, 890 + amplifiable: !0, 891 + detail: `Concentrated burst: ${o} repositories forked over 2 days` 892 + } : s >= u.FORKS_SURGE_72H && (c = { 893 + label: `Severe multi-day fork surge`, 894 + points: u.POINTS_FORK_SURGE_72H, 895 + amplifiable: !0, 896 + detail: `Rapid burst: ${s} repositories forked over 72 hours` 897 + }), c && t.push(c), r.length > 0 && !c) { 898 + let e = r[0], i = r[r.length - 1]; 899 + if (e && i) { 900 + let r = Math.max(1, i.diff(e, `day`)), a = n.length / r; 901 + a >= u.FORKS_PER_DAY_HIGH && r >= 3 && t.push({ 902 + label: `Sustained fork rate`, 903 + points: u.POINTS_FORKS_PER_DAY_HIGH, 904 + amplifiable: !0, 905 + detail: `Average of ${a.toFixed(1)} forks per day over ${r} days (${n.length} total)` 512 906 }); 513 - let r = 0; 514 - for (let t = 1; t < e.length; t++) e[t] !== void 0 && e[t - 1] !== void 0 && e[t].diff(e[t - 1], `second`) <= l.TIGHT_COMMIT_SECONDS && r++; 515 - r >= l.TIGHT_COMMIT_THRESHOLD && i.push({ 516 - label: `High commit frequency`, 517 - points: l.POINTS_TIGHT_BURST, 518 - detail: `${r + 1} commits within very short intervals` 907 + } 908 + } 909 + let l = /* @__PURE__ */ new Set(); 910 + if (n.forEach((e) => { 911 + l.add(h.default.utc(e.created_at).format(`YYYY-MM-DD`)); 912 + }), l.size >= u.CONSECUTIVE_FORK_DAYS && !c) { 913 + let e = Array.from(l).map((e) => (0, h.default)(e, `YYYY-MM-DD`)).sort((e, t) => e.valueOf() - t.valueOf()), r = 1, i = 1; 914 + for (let t = 1; t < e.length; t++) { 915 + let n = e[t - 1], a = e[t]; 916 + a && n && a.diff(n, `day`) === 1 ? (i++, r = Math.max(r, i)) : i = 1; 917 + } 918 + if (r >= u.CONSECUTIVE_FORK_DAYS) { 919 + let e = l.size; 920 + t.push({ 921 + label: `Extended forking pattern`, 922 + points: u.POINTS_CONSECUTIVE_FORK_DAYS, 923 + amplifiable: !0, 924 + detail: `Forking activity on ${e} days (${r} consecutive), ${n.length} repositories total` 519 925 }); 520 926 } 521 - let u = r.filter((e) => e.type === `PullRequestEvent`); 522 - if (u.length >= l.MIN_EVENTS_FOR_ANALYSIS) { 523 - let e = u.map((e) => (0, f.default)(e.created_at)), t = f.default.min(e), n = f.default.max(e); 524 - if (n) { 525 - let e = Math.max(1, n.diff(t, `day`)), r = u.length / e; 526 - r >= l.ACTIVITY_DENSITY_EXTREME / 2 ? i.push({ 527 - label: `Very high PR volume`, 528 - points: l.POINTS_EXTREME_ACTIVITY_DENSITY + 10, 529 - detail: `${u.length} PRs in ${e} day${e === 1 ? `` : `s`}` 530 - }) : r >= l.ACTIVITY_DENSITY_HIGH / 2 && i.push({ 531 - label: `High PR volume`, 532 - points: l.POINTS_HIGH_ACTIVITY_DENSITY + 5, 533 - detail: `${u.length} PRs in ${e} day${e === 1 ? `` : `s`}` 534 - }); 535 - } 927 + } 928 + let d = new Set(n.map((e) => e.repo?.name).filter((e) => e !== void 0)); 929 + if (d.size >= u.FORK_REPO_DIVERSITY_HIGH && !c) { 930 + let e = ``; 931 + if (r.length > 1) { 932 + let t = r[0], n = r[r.length - 1].diff(t, `day`); 933 + e = n > 0 ? ` over ${n} days` : ` in a short timeframe`; 536 934 } 537 - let d = r.filter((e) => e.type === `ForkEvent`); 538 - d.length >= l.FORKS_EXTREME ? i.push({ 539 - label: `Many recent forks`, 540 - points: l.POINTS_FORK_SURGE, 541 - detail: `${d.length} repos forked recently` 542 - }) : d.length >= l.FORKS_HIGH && i.push({ 543 - label: `Multiple forks`, 544 - points: l.POINTS_MULTIPLE_FORKS, 545 - detail: `${d.length} repos forked recently` 546 - }); 547 - let p = new Set([`PushEvent`, `PullRequestEvent`]), m = r.filter((e) => e.type && p.has(e.type) || e.type === `PullRequestReviewEvent` || e.type === `PullRequestReviewCommentEvent`), h = /* @__PURE__ */ new Map(); 548 - m.forEach((e) => { 549 - if (!e.created_at) return; 550 - let t = new Date(e.created_at), n = t.toISOString().slice(0, 10); 551 - h.has(n) || h.set(n, []), h.get(n).push(t); 935 + t.push({ 936 + label: `Fork scatter pattern`, 937 + points: u.POINTS_FORK_DIVERSITY, 938 + amplifiable: !0, 939 + detail: `Targeting ${d.size} different repositories${e}` 552 940 }); 553 - let g = []; 554 - if (h.forEach((e, t) => { 555 - new Set(e.map((e) => e.getUTCHours())).size >= l.HOURS_PER_DAY_INHUMAN && g.push(t); 556 - }), g.length >= l.CONSECUTIVE_INHUMAN_DAYS_EXTREME) { 557 - g.sort(); 558 - let e = 1, t = 1; 559 - for (let n = 1; n < g.length; n++) { 560 - let r = (0, f.default)(g[n - 1]); 561 - (0, f.default)(g[n]).diff(r, `day`) === 1 ? (e++, t = Math.max(t, e)) : e = 1; 562 - } 563 - t >= l.CONSECUTIVE_INHUMAN_DAYS_EXTREME ? i.push({ 564 - label: `Extended daily coding`, 565 - points: l.POINTS_NONSTOP_ACTIVITY, 566 - detail: `${t} days in a row with ${l.HOURS_PER_DAY_INHUMAN}+ hours of coding` 567 - }) : g.length >= l.FREQUENT_MARATHON_DAYS && i.push({ 568 - label: `Frequent long coding days`, 569 - points: l.POINTS_FREQUENT_MARATHON, 570 - detail: `${g.length} days with ${l.HOURS_PER_DAY_INHUMAN}+ hours of coding each` 941 + } 942 + return t; 943 + } 944 + function O(e) { 945 + let t = [], n = e.filter((e) => e.type === `ForkEvent`); 946 + if (n.length < u.FORK_COMBINED_ACTIVITY_MIN || e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 947 + let r = new Set(n.map((e) => e.repo?.name).filter((e) => e !== void 0)), i = e.filter((e) => e.type === `CreateEvent` && e.payload?.ref_type === `branch`).filter((e) => r.has(e.repo?.name || ``)), a = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `opened`).filter((e) => r.has(e.repo?.name || ``)); 948 + if (i.length >= u.FORK_COMBINED_BRANCHES && a.length >= u.FORK_COMBINED_PRS) { 949 + let e = n.map((e) => (0, h.default)(e.created_at)), r = i.map((e) => (0, h.default)(e.created_at)), o = a.map((e) => (0, h.default)(e.created_at)), s = h.default.max(e), c = h.default.min(r), l = h.default.min(o); 950 + if (s && c && l && s.isBefore(c) && c.isBefore(l) && a.length <= i.length * 2) { 951 + let e = n.length + i.length + a.length; 952 + t.push({ 953 + label: `Suspicious chained automations`, 954 + points: u.POINTS_FORK_COMBINED_ACTIVITY, 955 + amplifiable: !0, 956 + detail: `${e} chained repository operations: ${n.length} forks followed by ${i.length} branches, then ${a.length} pull requests (based on available event history)` 571 957 }); 572 958 } 573 - let _ = /* @__PURE__ */ new Set(); 574 - r.forEach((e) => { 575 - _.add((0, f.default)(e.created_at).format(`YYYY-MM-DD`)); 959 + } 960 + return t; 961 + } 962 + h.default.extend(m.default); 963 + function k(e) { 964 + let t = []; 965 + if (e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 966 + let n = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `opened`), r = n.map((e) => (0, h.default)(e.created_at)), i = h.default.max(r) || (0, h.default)(), a = i.subtract(1, `day`), o = i.subtract(1, `week`), s = n.filter((e) => (0, h.default)(e.created_at).isAfter(a)), c = n.filter((e) => (0, h.default)(e.created_at).isAfter(o)); 967 + if (s.length >= u.PRS_DAY_EXTREME && t.push({ 968 + label: `Extreme PR spam (daily)`, 969 + points: u.POINTS_PRS_DAY_EXTREME, 970 + amplifiable: !0, 971 + detail: `${s.length} PRs in the last 24 hours` 972 + }), c.length >= u.PRS_WEEK_EXTREME ? t.push({ 973 + label: `Extreme PR spam (weekly)`, 974 + points: u.POINTS_PRS_WEEK_EXTREME, 975 + amplifiable: !0, 976 + detail: `${c.length} PRs in the last 7 days` 977 + }) : c.length >= u.PRS_WEEK_VERY_HIGH && t.push({ 978 + label: `Very high PR spam frequency`, 979 + points: u.POINTS_PRS_WEEK_VERY_HIGH, 980 + amplifiable: !0, 981 + detail: `${c.length} PRs in the last 7 days` 982 + }), n.length >= u.PRS_SPAM_VOLUME && !t.some((e) => e.label === `Extreme PR spam (daily)` || e.label === `Extreme PR spam (weekly)` || e.label === `Very high PR spam frequency`)) { 983 + let e = new Set(n.map((e) => e.repo?.name).filter((e) => e !== void 0)); 984 + if (e.size >= u.REPOS_SPAM_SPREAD) { 985 + let r = n.map((e) => (0, h.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), a = r[0], o = r[r.length - 1], s = o ? o.diff(a, `days`, !0) : 0, c = s / 7, l = c > 0 ? n.length / c : Infinity, d = i.subtract(30, `days`), f = n.filter((e) => (0, h.default)(e.created_at).isAfter(d)).length, p = l >= u.PRS_SPAM_DENSITY_PER_WEEK, m = f >= u.PRS_SPAM_ROLLING_30DAYS; 986 + (p || m) && t.push({ 987 + label: `Distributed PR spam pattern`, 988 + points: u.POINTS_PR_SPAM_DISTRIBUTED, 989 + amplifiable: !0, 990 + detail: `${n.length} PRs spread across ${e.size} different repositories${s > 0 ? ` (${l.toFixed(1)} PRs/week)` : ``}` 991 + }); 992 + } 993 + } 994 + return t; 995 + } 996 + function A(e, t) { 997 + let n = [], r = t >= u.AGE_ESTABLISHED_ACCOUNT ? u.RAPID_PR_SPAM_MIN_PRS_ESTABLISHED : u.RAPID_PR_SPAM_MIN_PRS, i = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `opened`); 998 + if (i.length < r) return n; 999 + let a = i.map((e) => ({ 1000 + event: e, 1001 + time: (0, h.default)(e.created_at) 1002 + })).sort((e, t) => e.time.valueOf() - t.time.valueOf()), o = /* @__PURE__ */ new Map(); 1003 + for (let e of a) { 1004 + let t = e.event.repo?.name; 1005 + t && (o.has(t) || o.set(t, []), o.get(t)?.push(e)); 1006 + } 1007 + let s = 0, c = 0, l = ``; 1008 + for (let [e, t] of o.entries()) { 1009 + if (t.length < r) continue; 1010 + let n = 0, i = 0; 1011 + for (let e = 0; e < t.length - 1; e++) { 1012 + let r = t[e + 1].time.diff(t[e].time, `second`); 1013 + r <= u.BRANCH_PR_TIME_WINDOW_SECONDS && (n++, i = Math.max(i, r)); 1014 + } 1015 + n > s && (s = n, c = i, l = e); 1016 + } 1017 + return s >= r - 1 && n.push({ 1018 + label: `Rapid PR spam to repository`, 1019 + points: u.POINTS_RAPID_PR_SPAM, 1020 + amplifiable: !0, 1021 + detail: `${s + 1} PRs opened to ${l} within ${c}s intervals` 1022 + }), n; 1023 + } 1024 + function j(e) { 1025 + let t = []; 1026 + if (e.length < u.MIN_EVENTS_FOR_ANALYSIS) return t; 1027 + let n = e.filter((e) => e.type === `CreateEvent` && e.payload?.ref_type === `repository`); 1028 + if (n.length >= u.CREATE_EVENTS_MIN) { 1029 + let e = n.map((e) => (0, h.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), r = 0, i = 0; 1030 + for (let t = 0; t < e.length; t++) { 1031 + let n = e[t]; 1032 + for (; n && n.diff(e[i], `hour`, !0) > 24;) i++; 1033 + let a = t - i + 1; 1034 + r = Math.max(r, a); 1035 + } 1036 + r >= u.CREATE_BURST_EXTREME ? t.push({ 1037 + label: `Concentrated repository creation`, 1038 + points: u.POINTS_CREATE_BURST_EXTREME, 1039 + amplifiable: !0, 1040 + detail: `${r} repositories created in a short timeframe (within 24 hours)` 1041 + }) : r >= u.CREATE_BURST_HIGH && t.push({ 1042 + label: `Frequent repository creation`, 1043 + points: u.POINTS_CREATE_BURST_HIGH, 1044 + amplifiable: !0, 1045 + detail: `${r} repositories created in a short timeframe (within 24 hours)` 576 1046 }); 577 - let v = Array.from(_).map((e) => (0, f.default)(e, `YYYY-MM-DD`)).sort((e, t) => e.valueOf() - t.valueOf()), y = 1, b = 1; 578 - for (let e = 1; e < v.length; e++) { 579 - let t = v[e - 1], n = v[e]; 580 - n && t && n.diff(t, `day`) === 1 ? (b++, y = Math.max(y, b)) : b = 1; 1047 + } 1048 + return t; 1049 + } 1050 + h.default.extend(m.default); 1051 + function M(e, t, n, r) { 1052 + let i = []; 1053 + if (!n || e.length < u.MIN_EVENTS_FOR_ANALYSIS) return i; 1054 + let a = r.toLowerCase(), o = e.filter((e) => e.type === `PushEvent`); 1055 + if (o.length >= u.MIN_EVENTS_FOR_ANALYSIS) { 1056 + let e = o.map((e) => (0, h.default)(e.created_at)).sort((e, t) => e.valueOf() - t.valueOf()), t = 0, n = 0; 1057 + for (let r = 0; r < e.length; r++) { 1058 + let i = e[r]; 1059 + for (; i && i.diff(e[n], `hour`, !0) > 1;) n++; 1060 + let a = r - n + 1; 1061 + t = Math.max(t, a); 581 1062 } 582 - if (y >= l.CONSECUTIVE_DAYS_STREAK && i.push({ 583 - label: `Long activity streak`, 584 - points: l.POINTS_CONTINUOUS_ACTIVITY, 585 - detail: `${y} days in a row with activity` 586 - }), c) { 587 - let t = new Set(r.map((e) => e.repo?.name).filter((t) => t ? t.split(`/`)[0]?.toLowerCase() !== e : !1)); 588 - t.size >= l.REPO_SPREAD_EXTREME ? i.push({ 589 - label: `Highly distributed activity`, 590 - points: l.POINTS_EXTREME_REPO_SPREAD_YOUNG, 591 - detail: `Activity spread across ${t.size} external repositories` 592 - }) : t.size >= l.REPO_SPREAD_HIGH && i.push({ 593 - label: `Distributed activity`, 594 - points: l.POINTS_WIDE_REPO_SPREAD_YOUNG, 595 - detail: `Activity spread across ${t.size} external repositories` 1063 + t >= u.HOURLY_ACTIVITY_EXTREME ? i.push({ 1064 + label: `Extreme commit burst`, 1065 + points: u.POINTS_EXTREME_ACTIVITY_DENSITY, 1066 + detail: `${t} commits within 1 hour` 1067 + }) : t >= u.HOURLY_ACTIVITY_HIGH && i.push({ 1068 + label: `High commit burst`, 1069 + points: u.POINTS_HIGH_ACTIVITY_DENSITY, 1070 + detail: `${t} commits within 1 hour` 1071 + }); 1072 + let r = 0; 1073 + for (let t = 1; t < e.length; t++) e[t] !== void 0 && e[t - 1] !== void 0 && e[t].diff(e[t - 1], `second`) <= u.TIGHT_COMMIT_SECONDS && r++; 1074 + r >= u.TIGHT_COMMIT_THRESHOLD && i.push({ 1075 + label: `High commit frequency`, 1076 + points: u.POINTS_TIGHT_BURST, 1077 + detail: `${r + 1} commits within very short intervals` 1078 + }); 1079 + } 1080 + let s = e.filter((e) => e.type === `PullRequestEvent` && e.payload?.action === `opened`); 1081 + if (s.length >= u.MIN_EVENTS_FOR_ANALYSIS) { 1082 + let e = s.map((e) => (0, h.default)(e.created_at)), t = h.default.min(e), n = h.default.max(e); 1083 + if (n) { 1084 + let e = Math.max(1, n.diff(t, `day`)), r = s.length / e; 1085 + r >= u.ACTIVITY_DENSITY_EXTREME / 2 ? i.push({ 1086 + label: `Very high PR volume`, 1087 + points: u.POINTS_EXTREME_ACTIVITY_DENSITY + 10, 1088 + detail: `${s.length} PRs in ${e} day${e === 1 ? `` : `s`}` 1089 + }) : r >= u.ACTIVITY_DENSITY_HIGH / 2 && i.push({ 1090 + label: `High PR volume`, 1091 + points: u.POINTS_HIGH_ACTIVITY_DENSITY + 5, 1092 + detail: `${s.length} PRs in ${e} day${e === 1 ? `` : `s`}` 596 1093 }); 597 1094 } 598 - let x = u.filter((t) => { 599 - let n = t.repo?.name?.split(`/`)[0]?.toLowerCase(); 600 - return n && n !== e; 601 - }), S = (0, f.default)(), C = S.subtract(1, `week`), w = S.subtract(1, `day`), T = x.filter((e) => (0, f.default)(e.created_at).isAfter(C)), E = x.filter((e) => (0, f.default)(e.created_at).isAfter(w)); 602 - if (E.length >= l.PRS_TODAY_EXTREME ? i.push({ 603 - label: `High PR volume in the past 24 hours`, 604 - points: l.POINTS_PR_BURST, 605 - detail: `${E.length} PRs to other repos in the last 24 hours` 606 - }) : T.length >= l.PRS_WEEK_HIGH && i.push({ 607 - label: `High PR volume during last week`, 608 - points: l.POINTS_HIGH_PR_FREQUENCY, 609 - detail: `${T.length} PRs to other repos this week` 610 - }), x.length >= l.EXTERNAL_PRS_MIN && t < l.PERSONAL_REPOS_LOW) { 611 - let e = `${x.length} PRs to other repos, but only ${t} of their own`; 612 - t === 0 && (e = `${x.length} PRs to other repos, none of their own`), i.push({ 613 - label: `Primarily external contributions`, 614 - points: l.POINTS_PR_ONLY_CONTRIBUTOR, 615 - detail: e 616 - }); 1095 + } 1096 + let c = new Set([`PushEvent`, `PullRequestEvent`]), l = e.filter((e) => e.type && c.has(e.type) || e.type === `PullRequestReviewEvent` || e.type === `PullRequestReviewCommentEvent`), d = /* @__PURE__ */ new Map(); 1097 + l.forEach((e) => { 1098 + if (!e.created_at) return; 1099 + let t = new Date(e.created_at), n = t.toISOString().slice(0, 10); 1100 + d.has(n) || d.set(n, []), d.get(n)?.push(t); 1101 + }); 1102 + let f = []; 1103 + if (d.forEach((e, t) => { 1104 + let n = /* @__PURE__ */ new Map(); 1105 + e.forEach((e) => { 1106 + let t = e.getUTCHours(); 1107 + n.set(t, (n.get(t) || 0) + 1); 1108 + }); 1109 + let r = n.size, i = T(Array.from(n.values())); 1110 + r >= u.HOURS_PER_DAY_INHUMAN && i > .8 && f.push(t); 1111 + }), f.length >= u.CONSECUTIVE_INHUMAN_DAYS_EXTREME) { 1112 + f.sort(); 1113 + let e = 1, t = 1; 1114 + for (let n = 1; n < f.length; n++) { 1115 + let r = (0, h.default)(f[n - 1]); 1116 + (0, h.default)(f[n]).diff(r, `day`) === 1 ? (e++, t = Math.max(t, e)) : e = 1; 617 1117 } 618 - let D = o.length / r.length; 619 - !s && D >= l.FOREIGN_RATIO_HIGH && t < l.PERSONAL_REPOS_LOW && i.push({ 620 - label: `Mostly external activity`, 621 - points: l.POINTS_EXTERNAL_FOCUS, 622 - detail: `${Math.round(D * 100)}% of activity on other people's repos` 1118 + t >= u.CONSECUTIVE_INHUMAN_DAYS_EXTREME ? i.push({ 1119 + label: `Extended daily coding`, 1120 + points: u.POINTS_NONSTOP_ACTIVITY, 1121 + detail: `${t} days in a row with ${u.HOURS_PER_DAY_INHUMAN}+ hours of coding` 1122 + }) : f.length >= u.FREQUENT_MARATHON_DAYS && i.push({ 1123 + label: `Frequent long coding days`, 1124 + points: u.POINTS_FREQUENT_MARATHON, 1125 + detail: `${f.length} days with ${u.HOURS_PER_DAY_INHUMAN}+ hours of coding and uniform hourly distribution` 1126 + }); 1127 + } 1128 + let p = new Set(e.map((e) => e.repo?.name).filter((e) => e ? e.split(`/`)[0]?.toLowerCase() !== a : !1)); 1129 + p.size >= u.REPO_SPREAD_EXTREME ? i.push({ 1130 + label: `Highly distributed activity`, 1131 + points: u.POINTS_EXTREME_REPO_SPREAD_YOUNG, 1132 + detail: `Activity spread across ${p.size} external repositories` 1133 + }) : p.size >= u.REPO_SPREAD_HIGH && i.push({ 1134 + label: `Distributed activity`, 1135 + points: u.POINTS_WIDE_REPO_SPREAD_YOUNG, 1136 + detail: `Activity spread across ${p.size} external repositories` 1137 + }); 1138 + let m = s.filter((e) => { 1139 + let t = e.repo?.name?.split(`/`)[0]?.toLowerCase(); 1140 + return t && t !== a; 1141 + }), g = (0, h.default)(), _ = g.subtract(1, `week`), v = g.subtract(1, `day`), y = m.filter((e) => (0, h.default)(e.created_at).isAfter(_)), b = m.filter((e) => (0, h.default)(e.created_at).isAfter(v)); 1142 + if (b.length >= u.PRS_TODAY_EXTREME ? i.push({ 1143 + label: `High PR volume in the past 24 hours`, 1144 + points: u.POINTS_PR_BURST, 1145 + detail: `${b.length} PRs to other repos in the last 24 hours` 1146 + }) : y.length >= u.PRS_WEEK_HIGH && i.push({ 1147 + label: `High PR volume during last week`, 1148 + points: u.POINTS_HIGH_PR_FREQUENCY, 1149 + detail: `${y.length} PRs to other repos this week` 1150 + }), m.length >= u.EXTERNAL_PRS_MIN && t < u.PERSONAL_REPOS_LOW) { 1151 + let e = `${m.length} PRs to other repos, but only ${t} of their own`; 1152 + t === 0 && (e = `${m.length} PRs to other repos, none of their own`), i.push({ 1153 + label: `Primarily external contributions`, 1154 + points: u.POINTS_PR_ONLY_CONTRIBUTOR, 1155 + detail: e 1156 + }); 1157 + } 1158 + let x = e.filter((e) => { 1159 + let t = e.repo?.name?.split(`/`)[0]?.toLowerCase(); 1160 + return t && t !== a; 1161 + }), S = x.length / e.length; 1162 + return x.length > 0 && S >= u.FOREIGN_RATIO_HIGH && t < u.PERSONAL_REPOS_LOW && i.push({ 1163 + label: `Mostly external activity`, 1164 + points: u.POINTS_EXTERNAL_FOCUS, 1165 + detail: `${Math.round(S * 100)}% of activity on other people's repos` 1166 + }), i; 1167 + } 1168 + function N(e, t, n) { 1169 + let r = []; 1170 + return e === 0 && t.length === n.length && n.length >= u.ZERO_REPOS_MIN_EVENTS && r.push({ 1171 + label: `Only active on other people's repos`, 1172 + points: u.POINTS_ZERO_REPOS_ACTIVE + u.POINTS_NO_PERSONAL_ACTIVITY, 1173 + detail: `No personal repos, all ${n.length} events are on repos they don't own` 1174 + }), r; 1175 + } 1176 + h.default.extend(m.default), h.default.extend(p.default); 1177 + function P({ createdAt: e, reposCount: t, accountName: n, events: r, excludeRepos: i = [], commits: a = [] }) { 1178 + let o = [], s = i.map((e) => e.toLowerCase()), c = r.filter((e) => { 1179 + let t = e.repo?.name?.toLowerCase(); 1180 + return t && !s.includes(t); 1181 + }), l = (0, h.default)().diff(e, `days`), d = c.filter((e) => { 1182 + let t = e.repo?.name?.split(`/`)[0]?.toLowerCase(); 1183 + return t && t !== n.toLowerCase(); 1184 + }), f = l < u.AGE_YOUNG_ACCOUNT; 1185 + o.push(...y(l)), o.push(...N(t, d, c)), o.push(...j(c)), o.push(...b(c)), o.push(...E(c)), o.push(...C(c)), o.push(...x(c, l)), o.push(...A(c, l)), o.push(...S(c, l)), o.push(...D(c)), o.push(...O(c)), o.push(...M(c, t, f, n)), o.push(...k(c)); 1186 + let p = v(a.filter((e) => !e.repo || !s.includes(e.repo.toLowerCase()))), m = p.totalCommits >= u.AI_COMMIT_MIN_COMMITS ? u.AI_COMMIT_TIERS.find((e) => p.ratio >= e.ratio) : void 0, g = o.some((e) => e.amplifiable && e.points > 0); 1187 + if (m) { 1188 + let { ratio: e, aiCommits: t, totalCommits: n } = p, r = Math.round(e * 100), i = g ? `${t}/${n} commits (${r}%) AI-attributed — ${m.multiplier}x multiplier applied to automation signals` : `${t}/${n} commits (${r}%) AI-attributed — no automation signals to amplify`; 1189 + o.push({ 1190 + label: `Predominantly AI-attributed commits`, 1191 + points: 0, 1192 + detail: i 623 1193 }); 624 1194 } 625 - let u = i.reduce((e, t) => e += t.points, 0), d = Math.max(0, 100 - u), p = `automation`; 626 - return d >= l.THRESHOLD_HUMAN ? p = `organic` : d >= l.THRESHOLD_SUSPICIOUS && (p = `mixed`), { 627 - score: d, 628 - classification: p, 629 - flags: i, 1195 + let _ = m?.multiplier ?? 1, w = o.reduce((e, t) => e + (t.amplifiable ? Math.round(t.points * _) : t.points), 0), T = Math.max(0, 100 - w), P = `automation`; 1196 + return T >= u.THRESHOLD_HUMAN ? P = `organic` : T >= u.THRESHOLD_SUSPICIOUS && (P = `mixed`), { 1197 + score: T, 1198 + classification: P, 1199 + flags: o, 630 1200 profile: { 631 - age: a, 1201 + age: l, 632 1202 repos: t 633 1203 } 634 1204 }; 635 1205 } 636 - function h(e) { 637 - return e ? e === `organic` ? { 638 - label: `Organic activity`, 639 - description: `No automation signals detected in the analyzed events.` 640 - } : e === `mixed` ? { 641 - label: `Mixed activity`, 642 - description: `Activity patterns show a mix of organic and automated signals.` 643 - } : { 644 - label: `Automation signals`, 645 - description: `Activity patterns show signs of automation.` 646 - } : { 647 - label: `Analysis unavailable`, 648 - description: `Classification is not available for this account.` 649 - }; 650 - } 651 1206 //#endregion 652 1207 //#region src/detect-agent.ts 653 1208 const jsonMode = process.argv.includes("--json"); ··· 670 1225 events.push(...pageEvents); 671 1226 if (pageEvents.length < 100) break; 672 1227 } 673 - const { classification, score, flags } = m({ 1228 + const { classification, score, flags } = P({ 674 1229 accountName: PR_AUTHOR, 675 1230 reposCount: user.public_repos, 676 1231 createdAt: user.created_at, ··· 691 1246 const details = !!verifiedAutomationList.find((account) => account.username === PR_AUTHOR) ? { 692 1247 label: "Flagged by community", 693 1248 description: "This account has been flagged as potentially automated by the community." 694 - } : h(classification); 1249 + } : l(classification); 695 1250 const flagsTable = flags.map((f) => `| ${f.label} | ${f.points > 0 ? "+" : ""}${f.points} | ${f.detail} |`).join("\n"); 696 1251 const comment = `### ${details.label} 697 1252 ··· 703 1258 |--------|--------|--------| 704 1259 ${flagsTable} 705 1260 706 - <sub>Analyzed ${events.length} public events via <a href="https://www.npmx.dev/package/voight-kampff-test">voight-kampff-test</a></sub>`; 1261 + <sub>Analyzed ${events.length} public events via <a href="https://www.npmx.dev/package/@unveil/identity">@unveil/identity</a></sub>`; 707 1262 log(`Classification: ${classification} (score: ${score})`); 708 1263 for (const flag of flags) log(` [${flag.points > 0 ? "+" : ""}${flag.points}] ${flag.label}: ${flag.detail}`); 709 1264 const isAgent = classification === "automation";
+1 -1
dist/detect-agent.mjs.map
··· 1 - {"version":3,"file":"detect-agent.mjs","names":["identifyReplicant","getClassificationDetails"],"sources":["../node_modules/.pnpm/voight-kampff-test@2.2.1/node_modules/voight-kampff-test/dist/index.mjs","../src/detect-agent.ts"],"sourcesContent":["var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const l={THRESHOLD_HUMAN:70,THRESHOLD_SUSPICIOUS:50,AGE_NEW_ACCOUNT:30,AGE_YOUNG_ACCOUNT:90,POINTS_NEW_ACCOUNT:20,POINTS_YOUNG_ACCOUNT:10,POINTS_NO_IDENTITY:15,FOLLOW_RATIO_FOLLOWING_MIN:50,FOLLOW_RATIO_FOLLOWERS_MAX:5,POINTS_FOLLOW_RATIO:15,POINTS_ZERO_FOLLOWERS:10,MIN_EVENTS_FOR_ANALYSIS:10,FORKS_EXTREME:8,FORKS_HIGH:5,POINTS_FORK_SURGE:30,POINTS_MULTIPLE_FORKS:20,HOURS_PER_DAY_INHUMAN:16,CONSECUTIVE_INHUMAN_DAYS_EXTREME:3,FREQUENT_MARATHON_DAYS:5,POINTS_NONSTOP_ACTIVITY:40,POINTS_FREQUENT_MARATHON:25,CONSECUTIVE_DAYS_STREAK:21,POINTS_CONTINUOUS_ACTIVITY:25,REPO_SPREAD_EXTREME:30,REPO_SPREAD_HIGH:20,POINTS_EXTREME_REPO_SPREAD_YOUNG:30,POINTS_WIDE_REPO_SPREAD_YOUNG:15,PRS_TODAY_EXTREME:15,PRS_WEEK_HIGH:20,POINTS_PR_BURST:20,POINTS_HIGH_PR_FREQUENCY:15,EXTERNAL_PRS_MIN:15,PERSONAL_REPOS_LOW:5,POINTS_PR_ONLY_CONTRIBUTOR:20,FOREIGN_RATIO_FULL:1,FOREIGN_RATIO_HIGH:.95,PERSONAL_REPOS_NONE:3,POINTS_NO_PERSONAL_ACTIVITY:30,POINTS_EXTERNAL_FOCUS:20,ZERO_REPOS_MIN_EVENTS:20,POINTS_ZERO_REPOS_ACTIVE:20,ACTIVITY_DENSITY_HIGH:8,ACTIVITY_DENSITY_EXTREME:15,POINTS_HIGH_ACTIVITY_DENSITY:15,POINTS_EXTREME_ACTIVITY_DENSITY:25,HOURLY_ACTIVITY_HIGH:50,HOURLY_ACTIVITY_EXTREME:100,TIGHT_COMMIT_SECONDS:600,TIGHT_COMMIT_THRESHOLD:3,POINTS_TIGHT_BURST:25,CREATE_EVENTS_MIN:5,CREATE_BURST_EXTREME:16,CREATE_BURST_HIGH:8,POINTS_CREATE_BURST_EXTREME:35,POINTS_CREATE_BURST_HIGH:25,HOURS_ACTIVE_EXTREME:21,EVENTS_PER_HOUR_MIN:2,POINTS_24_7_ACTIVITY:25,EVENT_TYPE_DIVERSITY_MIN:2,POINTS_LOW_DIVERSITY:20,ISSUE_COMMENT_SPAM_WINDOW_MINUTES:2,ISSUE_COMMENT_SPRAY_EXTREME:15,ISSUE_COMMENT_SPRAY_HIGH:10,ISSUE_COMMENT_MIN_FOR_SPRAY:10,POINTS_ISSUE_COMMENT_SPRAY_EXTREME:40,POINTS_ISSUE_COMMENT_SPRAY_HIGH:30};var u=o(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs=r()})(e,(function(){var e=1e3,t=6e4,n=36e5,r=`millisecond`,i=`second`,a=`minute`,o=`hour`,s=`day`,c=`week`,l=`month`,u=`quarter`,d=`year`,f=`date`,p=`Invalid Date`,m=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,h=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:`en`,weekdays:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),ordinal:function(e){var t=[`th`,`st`,`nd`,`rd`],n=e%100;return`[`+e+(t[(n-20)%10]||t[n]||t[0])+`]`}},_=function(e,t,n){var r=String(e);return!r||r.length>=t?e:``+Array(t+1-r.length).join(n)+e},v={s:_,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?`+`:`-`)+_(r,2,`0`)+`:`+_(i,2,`0`)},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),i=t.clone().add(r,l),a=n-i<0,o=t.clone().add(r+(a?-1:1),l);return+(-(r+(n-i)/(a?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:l,y:d,w:c,d:s,D:f,h:o,m:a,s:i,ms:r,Q:u}[e]||String(e||``).toLowerCase().replace(/s$/,``)},u:function(e){return e===void 0}},y=`en`,b={};b[y]=g;var x=`$isDayjsObject`,S=function(e){return e instanceof E||!(!e||!e[x])},C=function e(t,n,r){var i;if(!t)return y;if(typeof t==`string`){var a=t.toLowerCase();b[a]&&(i=a),n&&(b[a]=n,i=a);var o=t.split(`-`);if(!i&&o.length>1)return e(o[0])}else{var s=t.name;b[s]=t,i=s}return!r&&i&&(y=i),i||!r&&y},w=function(e,t){if(S(e))return e.clone();var n=typeof t==`object`?t:{};return n.date=e,n.args=arguments,new E(n)},T=v;T.l=C,T.i=S,T.w=function(e,t){return w(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function g(e){this.$L=C(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[x]=!0}var _=g.prototype;return _.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(t===null)return new Date(NaN);if(T.u(t))return new Date;if(t instanceof Date)return new Date(t);if(typeof t==`string`&&!/Z$/i.test(t)){var r=t.match(m);if(r){var i=r[2]-1||0,a=(r[7]||`0`).substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},_.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},_.$utils=function(){return T},_.isValid=function(){return this.$d.toString()!==p},_.isSame=function(e,t){var n=w(e);return this.startOf(t)<=n&&n<=this.endOf(t)},_.isAfter=function(e,t){return w(e)<this.startOf(t)},_.isBefore=function(e,t){return this.endOf(t)<w(e)},_.$g=function(e,t,n){return T.u(e)?this[t]:this.set(n,e)},_.unix=function(){return Math.floor(this.valueOf()/1e3)},_.valueOf=function(){return this.$d.getTime()},_.startOf=function(e,t){var n=this,r=!!T.u(t)||t,u=T.p(e),p=function(e,t){var i=T.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?i:i.endOf(s)},m=function(e,t){return T.w(n.toDate()[e].apply(n.toDate(`s`),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},h=this.$W,g=this.$M,_=this.$D,v=`set`+(this.$u?`UTC`:``);switch(u){case d:return r?p(1,0):p(31,11);case l:return r?p(1,g):p(0,g+1);case c:var y=this.$locale().weekStart||0,b=(h<y?h+7:h)-y;return p(r?_-b:_+(6-b),g);case s:case f:return m(v+`Hours`,0);case o:return m(v+`Minutes`,1);case a:return m(v+`Seconds`,2);case i:return m(v+`Milliseconds`,3);default:return this.clone()}},_.endOf=function(e){return this.startOf(e,!1)},_.$set=function(e,t){var n,c=T.p(e),u=`set`+(this.$u?`UTC`:``),p=(n={},n[s]=u+`Date`,n[f]=u+`Date`,n[l]=u+`Month`,n[d]=u+`FullYear`,n[o]=u+`Hours`,n[a]=u+`Minutes`,n[i]=u+`Seconds`,n[r]=u+`Milliseconds`,n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===l||c===d){var h=this.clone().set(f,1);h.$d[p](m),h.init(),this.$d=h.set(f,Math.min(this.$D,h.daysInMonth())).$d}else p&&this.$d[p](m);return this.init(),this},_.set=function(e,t){return this.clone().$set(e,t)},_.get=function(e){return this[T.p(e)]()},_.add=function(r,u){var f,p=this;r=Number(r);var m=T.p(u),h=function(e){var t=w(p);return T.w(t.date(t.date()+Math.round(e*r)),p)};if(m===l)return this.set(l,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return h(1);if(m===c)return h(7);var g=(f={},f[a]=t,f[o]=n,f[i]=e,f)[m]||1,_=this.$d.getTime()+r*g;return T.w(_,this)},_.subtract=function(e,t){return this.add(-1*e,t)},_.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=e||`YYYY-MM-DDTHH:mm:ssZ`,i=T.z(this),a=this.$H,o=this.$m,s=this.$M,c=n.weekdays,l=n.months,u=n.meridiem,d=function(e,n,i,a){return e&&(e[n]||e(t,r))||i[n].slice(0,a)},f=function(e){return T.s(a%12||12,e,`0`)},m=u||function(e,t,n){var r=e<12?`AM`:`PM`;return n?r.toLowerCase():r};return r.replace(h,(function(e,r){return r||function(e){switch(e){case`YY`:return String(t.$y).slice(-2);case`YYYY`:return T.s(t.$y,4,`0`);case`M`:return s+1;case`MM`:return T.s(s+1,2,`0`);case`MMM`:return d(n.monthsShort,s,l,3);case`MMMM`:return d(l,s);case`D`:return t.$D;case`DD`:return T.s(t.$D,2,`0`);case`d`:return String(t.$W);case`dd`:return d(n.weekdaysMin,t.$W,c,2);case`ddd`:return d(n.weekdaysShort,t.$W,c,3);case`dddd`:return c[t.$W];case`H`:return String(a);case`HH`:return T.s(a,2,`0`);case`h`:return f(1);case`hh`:return f(2);case`a`:return m(a,o,!0);case`A`:return m(a,o,!1);case`m`:return String(o);case`mm`:return T.s(o,2,`0`);case`s`:return String(t.$s);case`ss`:return T.s(t.$s,2,`0`);case`SSS`:return T.s(t.$ms,3,`0`);case`Z`:return i}return null}(e)||i.replace(`:`,``)}))},_.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},_.diff=function(r,f,p){var m,h=this,g=T.p(f),_=w(r),v=(_.utcOffset()-this.utcOffset())*t,y=this-_,b=function(){return T.m(h,_)};switch(g){case d:m=b()/12;break;case l:m=b();break;case u:m=b()/3;break;case c:m=(y-v)/6048e5;break;case s:m=(y-v)/864e5;break;case o:m=y/n;break;case a:m=y/t;break;case i:m=y/e;break;default:m=y}return p?m:T.a(m)},_.daysInMonth=function(){return this.endOf(l).$D},_.$locale=function(){return b[this.$L]},_.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=C(e,t,!0);return r&&(n.$L=r),n},_.clone=function(){return T.w(this.$d,this)},_.toDate=function(){return new Date(this.valueOf())},_.toJSON=function(){return this.isValid()?this.toISOString():null},_.toISOString=function(){return this.$d.toISOString()},_.toString=function(){return this.$d.toUTCString()},g}(),D=E.prototype;return w.prototype=D,[[`$ms`,r],[`$s`,i],[`$m`,a],[`$H`,o],[`$W`,s],[`$M`,l],[`$y`,d],[`$D`,f]].forEach((function(e){D[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),w.extend=function(e,t){return e.$i||=(e(t,E,w),!0),w},w.locale=C,w.isDayjs=S,w.unix=function(e){return w(1e3*e)},w.en=b[y],w.Ls=b,w.p={},w}))})),d=o(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_minMax=r()})(e,(function(){return function(e,t,n){var r=function(e,t){if(!t||!t.length||t.length===1&&!t[0]||t.length===1&&Array.isArray(t[0])&&!t[0].length)return null;var n;t.length===1&&t[0].length>0&&(t=t[0]),n=(t=t.filter((function(e){return e})))[0];for(var r=1;r<t.length;r+=1)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n};n.max=function(){return r(`isAfter`,[].slice.call(arguments,0))},n.min=function(){return r(`isBefore`,[].slice.call(arguments,0))}}}))})),f=c(u(),1),p=c(d(),1);f.default.extend(p.default);function m({createdAt:e,reposCount:t,accountName:n,events:r}){let i=[],a=(0,f.default)().diff(e,`days`);a<l.AGE_NEW_ACCOUNT?i.push({label:`Recently created`,points:l.POINTS_NEW_ACCOUNT,detail:`Account is ${a} days old`}):a<l.AGE_YOUNG_ACCOUNT&&i.push({label:`Young account`,points:l.POINTS_YOUNG_ACCOUNT,detail:`Account is ${a} days old`});let o=r.filter(e=>{let t=e.repo?.name?.split(`/`)[0]?.toLowerCase();return t&&t!==n.toLowerCase()}),s=t===0&&o.length===r.length;s&&r.length>=l.ZERO_REPOS_MIN_EVENTS&&i.push({label:`Only active on other people's repos`,points:l.POINTS_ZERO_REPOS_ACTIVE+l.POINTS_NO_PERSONAL_ACTIVITY,detail:`No personal repos, all ${r.length} events are on repos they don't own`});let c=a<l.AGE_YOUNG_ACCOUNT;if(r.length>=l.MIN_EVENTS_FOR_ANALYSIS){let e=r.filter(e=>e.type===`CreateEvent`&&e.payload?.ref_type===`repository`);if(e.length>=l.CREATE_EVENTS_MIN){let t=e.map(e=>(0,f.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),n=0,r=0;for(let e=0;e<t.length;e++){let i=t[e];for(;i&&i.diff(t[r],`hour`,!0)>24;)r++;let a=e-r+1;n=Math.max(n,a)}n>=l.CREATE_BURST_EXTREME?i.push({label:`Concentrated repository creation`,points:l.POINTS_CREATE_BURST_EXTREME,detail:`${n} repositories created in a short timeframe (within 24 hours)`}):n>=l.CREATE_BURST_HIGH&&i.push({label:`Frequent repository creation`,points:l.POINTS_CREATE_BURST_HIGH,detail:`${n} repositories created in a short timeframe (within 24 hours)`})}let t=new Map;if(r.forEach(e=>{let n=(0,f.default)(e.created_at).hour();t.set(n,(t.get(n)||0)+1)}),r.length>0&&t.size>0){let e=t.size,n=Array.from(t.values()),a=r.length/e,o=a,s=n.reduce((e,t)=>e+(t-o)**2,0)/n.length,c=Math.sqrt(s)/o,u=Array.from(t.keys()).sort((e,t)=>e-t),d=u[0],f=u[u.length-1],p=d!==void 0&&f!==void 0?24-f+d:0;for(let e=0;e<u.length-1;e++){let t=u[e],n=u[e+1];t!==void 0&&n!==void 0&&(p=Math.max(p,n-t-1))}let m=c<.3,h=p<3,g=a>=l.EVENTS_PER_HOUR_MIN;if(e>=l.HOURS_ACTIVE_EXTREME&&g&&(m||h)){let t=l.POINTS_24_7_ACTIVITY;m&&h&&(t=Math.round(t*1.5)),i.push({label:`24/7 activity pattern`,points:t,detail:`Active ${e}/24 hours, ${p}h max rest, ${a.toFixed(1)} events/hour`})}}let n=new Set(r.map(e=>e.type)),a=n.has(`IssueCommentEvent`)||n.has(`PullRequestReviewEvent`)||n.has(`PullRequestReviewCommentEvent`),o=n.has(`WatchEvent`);n.size<=l.EVENT_TYPE_DIVERSITY_MIN&&!a&&!o&&i.push({label:`Narrow activity focus`,points:l.POINTS_LOW_DIVERSITY,detail:`Activity concentrated on ${n.size} specific event types without interpersonal interactions`});let s=r.filter(e=>e.type===`IssueCommentEvent`);if(s.length>=l.ISSUE_COMMENT_MIN_FOR_SPRAY){let e=s.map(e=>({event:e,time:(0,f.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),t=0,n=0,r=0,a=0,o=l.ISSUE_COMMENT_SPAM_WINDOW_MINUTES;for(let i=0;i<e.length;i++){let s=e[i]?.time;for(;e[a]&&s&&s.diff(e[a].time,`minute`,!0)>o;)a++;let c=new Set(e.slice(a,i+1).map(e=>e.event.repo?.name).filter(e=>e!==void 0));c.size>t&&(t=c.size,n=a,r=i)}if(t>=l.ISSUE_COMMENT_SPRAY_EXTREME){let a=e[n]?.time,o=e[r]?.time,s=r-n+1,c=o&&a?Math.round(o.diff(a,`minute`,!0)*10)/10:0,u=c>0?Math.round(s/c*10)/10:s;i.push({label:`Issue comment spam`,points:l.POINTS_ISSUE_COMMENT_SPRAY_EXTREME,detail:`${s} comments to ${t} different repos in ${c} minutes (${u} comments/min)`})}else if(t>=l.ISSUE_COMMENT_SPRAY_HIGH){let a=e[n]?.time,o=e[r]?.time,s=r-n+1,c=o&&a?Math.round(o.diff(a,`minute`,!0)*10)/10:0,u=c>0?Math.round(s/c*10)/10:s;i.push({label:`High comment frequency across repos`,points:l.POINTS_ISSUE_COMMENT_SPRAY_HIGH,detail:`${s} comments to ${t} different repos in ${c} minutes (${u} comments/min)`})}}}if(c&&r.length>=l.MIN_EVENTS_FOR_ANALYSIS){let e=n.toLowerCase(),a=r.filter(e=>e.type===`PushEvent`);if(a.length>=l.MIN_EVENTS_FOR_ANALYSIS){let e=a.map(e=>(0,f.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),t=0,n=0;for(let r=0;r<e.length;r++){let i=e[r];for(;i&&i.diff(e[n],`hour`,!0)>1;)n++;let a=r-n+1;t=Math.max(t,a)}t>=l.HOURLY_ACTIVITY_EXTREME?i.push({label:`Extreme commit burst`,points:l.POINTS_EXTREME_ACTIVITY_DENSITY,detail:`${t} commits within 1 hour`}):t>=l.HOURLY_ACTIVITY_HIGH&&i.push({label:`High commit burst`,points:l.POINTS_HIGH_ACTIVITY_DENSITY,detail:`${t} commits within 1 hour`});let r=0;for(let t=1;t<e.length;t++)e[t]!==void 0&&e[t-1]!==void 0&&e[t].diff(e[t-1],`second`)<=l.TIGHT_COMMIT_SECONDS&&r++;r>=l.TIGHT_COMMIT_THRESHOLD&&i.push({label:`High commit frequency`,points:l.POINTS_TIGHT_BURST,detail:`${r+1} commits within very short intervals`})}let u=r.filter(e=>e.type===`PullRequestEvent`);if(u.length>=l.MIN_EVENTS_FOR_ANALYSIS){let e=u.map(e=>(0,f.default)(e.created_at)),t=f.default.min(e),n=f.default.max(e);if(n){let e=Math.max(1,n.diff(t,`day`)),r=u.length/e;r>=l.ACTIVITY_DENSITY_EXTREME/2?i.push({label:`Very high PR volume`,points:l.POINTS_EXTREME_ACTIVITY_DENSITY+10,detail:`${u.length} PRs in ${e} day${e===1?``:`s`}`}):r>=l.ACTIVITY_DENSITY_HIGH/2&&i.push({label:`High PR volume`,points:l.POINTS_HIGH_ACTIVITY_DENSITY+5,detail:`${u.length} PRs in ${e} day${e===1?``:`s`}`})}}let d=r.filter(e=>e.type===`ForkEvent`);d.length>=l.FORKS_EXTREME?i.push({label:`Many recent forks`,points:l.POINTS_FORK_SURGE,detail:`${d.length} repos forked recently`}):d.length>=l.FORKS_HIGH&&i.push({label:`Multiple forks`,points:l.POINTS_MULTIPLE_FORKS,detail:`${d.length} repos forked recently`});let p=new Set([`PushEvent`,`PullRequestEvent`]),m=r.filter(e=>e.type&&p.has(e.type)||e.type===`PullRequestReviewEvent`||e.type===`PullRequestReviewCommentEvent`),h=new Map;m.forEach(e=>{if(!e.created_at)return;let t=new Date(e.created_at),n=t.toISOString().slice(0,10);h.has(n)||h.set(n,[]),h.get(n).push(t)});let g=[];if(h.forEach((e,t)=>{new Set(e.map(e=>e.getUTCHours())).size>=l.HOURS_PER_DAY_INHUMAN&&g.push(t)}),g.length>=l.CONSECUTIVE_INHUMAN_DAYS_EXTREME){g.sort();let e=1,t=1;for(let n=1;n<g.length;n++){let r=(0,f.default)(g[n-1]);(0,f.default)(g[n]).diff(r,`day`)===1?(e++,t=Math.max(t,e)):e=1}t>=l.CONSECUTIVE_INHUMAN_DAYS_EXTREME?i.push({label:`Extended daily coding`,points:l.POINTS_NONSTOP_ACTIVITY,detail:`${t} days in a row with ${l.HOURS_PER_DAY_INHUMAN}+ hours of coding`}):g.length>=l.FREQUENT_MARATHON_DAYS&&i.push({label:`Frequent long coding days`,points:l.POINTS_FREQUENT_MARATHON,detail:`${g.length} days with ${l.HOURS_PER_DAY_INHUMAN}+ hours of coding each`})}let _=new Set;r.forEach(e=>{_.add((0,f.default)(e.created_at).format(`YYYY-MM-DD`))});let v=Array.from(_).map(e=>(0,f.default)(e,`YYYY-MM-DD`)).sort((e,t)=>e.valueOf()-t.valueOf()),y=1,b=1;for(let e=1;e<v.length;e++){let t=v[e-1],n=v[e];n&&t&&n.diff(t,`day`)===1?(b++,y=Math.max(y,b)):b=1}if(y>=l.CONSECUTIVE_DAYS_STREAK&&i.push({label:`Long activity streak`,points:l.POINTS_CONTINUOUS_ACTIVITY,detail:`${y} days in a row with activity`}),c){let t=new Set(r.map(e=>e.repo?.name).filter(t=>t?t.split(`/`)[0]?.toLowerCase()!==e:!1));t.size>=l.REPO_SPREAD_EXTREME?i.push({label:`Highly distributed activity`,points:l.POINTS_EXTREME_REPO_SPREAD_YOUNG,detail:`Activity spread across ${t.size} external repositories`}):t.size>=l.REPO_SPREAD_HIGH&&i.push({label:`Distributed activity`,points:l.POINTS_WIDE_REPO_SPREAD_YOUNG,detail:`Activity spread across ${t.size} external repositories`})}let x=u.filter(t=>{let n=t.repo?.name?.split(`/`)[0]?.toLowerCase();return n&&n!==e}),S=(0,f.default)(),C=S.subtract(1,`week`),w=S.subtract(1,`day`),T=x.filter(e=>(0,f.default)(e.created_at).isAfter(C)),E=x.filter(e=>(0,f.default)(e.created_at).isAfter(w));if(E.length>=l.PRS_TODAY_EXTREME?i.push({label:`High PR volume in the past 24 hours`,points:l.POINTS_PR_BURST,detail:`${E.length} PRs to other repos in the last 24 hours`}):T.length>=l.PRS_WEEK_HIGH&&i.push({label:`High PR volume during last week`,points:l.POINTS_HIGH_PR_FREQUENCY,detail:`${T.length} PRs to other repos this week`}),x.length>=l.EXTERNAL_PRS_MIN&&t<l.PERSONAL_REPOS_LOW){let e=`${x.length} PRs to other repos, but only ${t} of their own`;t===0&&(e=`${x.length} PRs to other repos, none of their own`),i.push({label:`Primarily external contributions`,points:l.POINTS_PR_ONLY_CONTRIBUTOR,detail:e})}let D=o.length/r.length;!s&&D>=l.FOREIGN_RATIO_HIGH&&t<l.PERSONAL_REPOS_LOW&&i.push({label:`Mostly external activity`,points:l.POINTS_EXTERNAL_FOCUS,detail:`${Math.round(D*100)}% of activity on other people's repos`})}let u=i.reduce((e,t)=>e+=t.points,0),d=Math.max(0,100-u),p=`automation`;return d>=l.THRESHOLD_HUMAN?p=`organic`:d>=l.THRESHOLD_SUSPICIOUS&&(p=`mixed`),{score:d,classification:p,flags:i,profile:{age:a,repos:t}}}function h(e){return e?e===`organic`?{label:`Organic activity`,description:`No automation signals detected in the analyzed events.`}:e===`mixed`?{label:`Mixed activity`,description:`Activity patterns show a mix of organic and automated signals.`}:{label:`Automation signals`,description:`Activity patterns show signs of automation.`}:{label:`Analysis unavailable`,description:`Classification is not available for this account.`}}export{h as getClassificationDetails,m as identifyReplicant};","import { identifyReplicant, getClassificationDetails } from \"voight-kampff-test\";\nimport { setOutput } from \"./utils\";\n\nconst jsonMode = process.argv.includes(\"--json\");\nconst log = jsonMode ? console.error : console.log;\n\nconst { GITHUB_TOKEN, PR_AUTHOR } = process.env;\nif (!GITHUB_TOKEN || !PR_AUTHOR) {\n\tthrow new Error(\n\t\t`Missing input.\\nRequired environment variables: GITHUB_TOKEN, PR_AUTHOR\\n`,\n\t);\n}\n\nconst headers = {\n\tAccept: \"application/vnd.github+json\",\n\tAuthorization: `Bearer ${GITHUB_TOKEN}`,\n\t\"X-GitHub-Api-Version\": \"2022-11-28\",\n};\n\nconst userRes = await fetch(`https://api.github.com/users/${PR_AUTHOR}`, {\n\theaders,\n});\nif (!userRes.ok) {\n\tthrow new Error(`Failed to fetch user ${PR_AUTHOR}: ${userRes.status}`);\n}\nconst user = await userRes.json();\n\n// Fetch up to 2 pages of public events (200 max)\nconst events = [];\nfor (let page = 1; page <= 2; page++) {\n\tconst eventsRes = await fetch(\n\t\t`https://api.github.com/users/${PR_AUTHOR}/events/public?per_page=100&page=${page}`,\n\t\t{ headers },\n\t);\n\tif (!eventsRes.ok) break;\n\tconst pageEvents = await eventsRes.json();\n\tevents.push(...pageEvents);\n\tif (pageEvents.length < 100) break;\n}\n\nconst { classification, score, flags } = identifyReplicant({\n\taccountName: PR_AUTHOR,\n\treposCount: user.public_repos,\n\tcreatedAt: user.created_at,\n\tevents,\n});\n\ntype AutomationListItem = {\n username: string;\n reason: string;\n createdAt: string;\n issueUrl: string;\n};\n\nlet verifiedAutomationList: AutomationListItem[] = [] \n\ntry {\n\tconst automationJSONPath = 'data/verified-automations-list.json'\n\tconst response = await fetch(\n\t\t`https://api.github.com/repos/matteogabriele/agentscan/contents/${automationJSONPath}`,\n\t\t{ headers },\n\t);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to fetch verified automations list: ${response.status}`);\n\t}\n\n\tconst data = await response.json();\n\n\tif (\"content\" in data) {\n\t\tconst content = Buffer.from(data.content, \"base64\").toString(\"utf-8\");\n\t\tverifiedAutomationList = JSON.parse(content)\n\t}\n} catch (error) {\n\tlog(\"Could not fetch verified automations list\");\n}\n\nconst verifiedAutomation: AutomationListItem | undefined = verifiedAutomationList.find(\n\t(account) => account.username === PR_AUTHOR,\n);\n\nconst communityFlagDetails = {\n\tlabel: \"Flagged by community\",\n\tdescription:\n\t\t\"This account has been flagged as potentially automated by the community.\",\n}\n\nconst hasCommunityFlag: boolean = !!verifiedAutomation;\nconst details = hasCommunityFlag ? communityFlagDetails : getClassificationDetails(classification);\n\nconst flagsTable = flags\n\t.map((f) => `| ${f.label} | ${f.points > 0 ? \"+\" : \"\"}${f.points} | ${f.detail} |`)\n\t.join(\"\\n\");\nconst comment = `### ${details.label}\n\n[@${PR_AUTHOR}](https://github.com/${PR_AUTHOR}) ${details.description}\n\n**Classification:** \\`${classification}\\` (score: ${score})\n\n| Signal | Points | Detail |\n|--------|--------|--------|\n${flagsTable}\n\n<sub>Analyzed ${events.length} public events via <a href=\"https://www.npmx.dev/package/voight-kampff-test\">voight-kampff-test</a></sub>`;\n\n\nlog(`Classification: ${classification} (score: ${score})`);\nfor (const flag of flags) {\n\tlog(` [${flag.points > 0 ? \"+\" : \"\"}${flag.points}] ${flag.label}: ${flag.detail}`);\n}\n\nconst isAgent = classification === \"automation\";\n\nif (jsonMode) {\n\tconsole.log(JSON.stringify({ classification, score, isAgent, comment }));\n} else {\n\tsetOutput(\"CLASSIFICATION\", classification);\n\tsetOutput(\"SCORE\", String(score));\n\tsetOutput(\"IS_AGENT\", isAgent ? \"true\" : \"false\");\n\tsetOutput(\"COMMENT\", comment);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"} 1 + {"version":3,"file":"detect-agent.mjs","names":["identify","getClassificationDetails"],"sources":["../node_modules/.pnpm/@unveil+identity@1.6.0/node_modules/@unveil/identity/dist/index.mjs","../src/detect-agent.ts"],"sourcesContent":["var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));function l(e){return e?e===`organic`?{label:`Organic activity`,description:`No automation signals detected in the analyzed events.`}:e===`mixed`?{label:`Mixed activity`,description:`Activity patterns show a mix of organic and automated signals.`}:{label:`Automation signals`,description:`Activity patterns show signs of automation.`}:{label:`Analysis unavailable`,description:`Classification is not available for this account.`}}const u={THRESHOLD_HUMAN:70,THRESHOLD_SUSPICIOUS:50,AGE_NEW_ACCOUNT:30,AGE_YOUNG_ACCOUNT:90,POINTS_NEW_ACCOUNT:20,POINTS_YOUNG_ACCOUNT:10,POINTS_NO_IDENTITY:15,FOLLOW_RATIO_FOLLOWING_MIN:50,FOLLOW_RATIO_FOLLOWERS_MAX:5,POINTS_FOLLOW_RATIO:15,POINTS_ZERO_FOLLOWERS:10,MIN_EVENTS_FOR_ANALYSIS:10,FORKS_EXTREME:8,FORKS_HIGH:5,FORKS_SURGE_SEVERE:20,FORKS_SURGE_EXTREME_HIGH:35,FORK_SURGE_WINDOW_HOURS:24,POINTS_FORK_SURGE:51,POINTS_FORK_SURGE_SEVERE:70,POINTS_FORK_SURGE_EXTREME_HIGH:85,POINTS_MULTIPLE_FORKS:26,FORKS_SURGE_48H:18,FORKS_SURGE_72H:25,POINTS_FORK_SURGE_48H:65,POINTS_FORK_SURGE_72H:75,FORKS_PER_DAY_HIGH:8,POINTS_FORKS_PER_DAY_HIGH:55,CONSECUTIVE_FORK_DAYS:6,POINTS_CONSECUTIVE_FORK_DAYS:40,FORK_COMBINED_ACTIVITY_MIN:12,FORK_COMBINED_BRANCHES:6,FORK_COMBINED_PRS:8,POINTS_FORK_COMBINED_ACTIVITY:60,FORK_REPO_DIVERSITY_HIGH:15,POINTS_FORK_DIVERSITY:45,HOURS_PER_DAY_INHUMAN:16,CONSECUTIVE_INHUMAN_DAYS_EXTREME:3,FREQUENT_MARATHON_DAYS:5,POINTS_NONSTOP_ACTIVITY:40,POINTS_FREQUENT_MARATHON:25,REPO_SPREAD_EXTREME:30,REPO_SPREAD_HIGH:20,POINTS_EXTREME_REPO_SPREAD_YOUNG:30,POINTS_WIDE_REPO_SPREAD_YOUNG:15,PRS_TODAY_EXTREME:15,PRS_WEEK_HIGH:20,POINTS_PR_BURST:20,POINTS_HIGH_PR_FREQUENCY:15,PRS_DAY_EXTREME:30,POINTS_PRS_DAY_EXTREME:45,PRS_WEEK_EXTREME:100,POINTS_PRS_WEEK_EXTREME:50,PRS_WEEK_VERY_HIGH:50,POINTS_PRS_WEEK_VERY_HIGH:40,PRS_SPAM_VOLUME:50,REPOS_SPAM_SPREAD:15,POINTS_PR_SPAM_COMBINED:45,PRS_SPAM_DENSITY_PER_WEEK:15,PRS_SPAM_ROLLING_30DAYS:60,POINTS_PR_SPAM_DISTRIBUTED:45,EXTERNAL_PRS_MIN:15,PERSONAL_REPOS_LOW:5,POINTS_PR_ONLY_CONTRIBUTOR:20,FOREIGN_RATIO_FULL:1,FOREIGN_RATIO_HIGH:.95,PERSONAL_REPOS_NONE:3,POINTS_NO_PERSONAL_ACTIVITY:30,POINTS_EXTERNAL_FOCUS:20,ZERO_REPOS_MIN_EVENTS:20,POINTS_ZERO_REPOS_ACTIVE:20,ACTIVITY_DENSITY_HIGH:8,ACTIVITY_DENSITY_EXTREME:15,POINTS_HIGH_ACTIVITY_DENSITY:15,POINTS_EXTREME_ACTIVITY_DENSITY:25,HOURLY_ACTIVITY_HIGH:50,HOURLY_ACTIVITY_EXTREME:100,TIGHT_COMMIT_SECONDS:600,TIGHT_COMMIT_THRESHOLD:3,POINTS_TIGHT_BURST:25,CREATE_EVENTS_MIN:5,CREATE_BURST_EXTREME:16,CREATE_BURST_HIGH:8,POINTS_CREATE_BURST_EXTREME:35,POINTS_CREATE_BURST_HIGH:25,HOURS_ACTIVE_EXTREME:21,HOURS_ACTIVE_EXTREME_ESTABLISHED:23,EVENTS_PER_HOUR_MIN:2,POINTS_24_7_ACTIVITY:25,AGE_ESTABLISHED_ACCOUNT:1e3,EVENT_TYPE_DIVERSITY_MIN:2,POINTS_LOW_DIVERSITY:20,ISSUE_COMMENT_SPAM_WINDOW_MINUTES:2,ISSUE_COMMENT_SPRAY_EXTREME:15,ISSUE_COMMENT_SPRAY_HIGH:10,ISSUE_COMMENT_MIN_FOR_SPRAY:10,POINTS_ISSUE_COMMENT_SPRAY_EXTREME:40,POINTS_ISSUE_COMMENT_SPRAY_HIGH:30,PR_COMMENT_SPAM_WINDOW_MINUTES:2,PR_COMMENT_SPRAY_EXTREME:12,PR_COMMENT_SPRAY_HIGH:8,PR_COMMENT_MIN_FOR_SPRAY:8,POINTS_PR_COMMENT_SPRAY_EXTREME:38,POINTS_PR_COMMENT_SPRAY_HIGH:28,BRANCH_PR_TIME_WINDOW_SECONDS:90,BRANCH_PR_PATTERN_MIN_PAIRS:8,BRANCH_PR_PATTERN_MIN_PAIRS_ESTABLISHED:15,BRANCH_PR_PATTERN_RATIO_MIN:.65,BRANCH_PR_PATTERN_RATIO_MIN_ESTABLISHED:.8,BRANCH_PR_COUNT_RATIO_MIN:.65,POINTS_BRANCH_PR_AUTOMATION:35,RAPID_PR_SPAM_MIN_PRS:4,RAPID_PR_SPAM_MIN_PRS_ESTABLISHED:6,POINTS_RAPID_PR_SPAM:40,CLOSED_PR_SPAM_MIN:5,CLOSED_PR_SPAM_MIN_ESTABLISHED:8,CLOSED_PR_REPO_SPREAD:3,CLOSED_PR_TIME_WINDOW_MINUTES:60,POINTS_CLOSED_PR_SPAM:35,POINTS_CLOSED_PR_SPAM_HIGH:55,POINTS_CLOSED_PR_SPAM_EXTREME:75,POINTS_CLOSED_PR_SPAM_BURST_EXTREME:80,AI_COMMIT_MIN_COMMITS:5,AI_COMMIT_TIERS:[{ratio:.9,multiplier:1.5},{ratio:.85,multiplier:1.3},{ratio:.75,multiplier:1.15}]};var d=o(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs=r()})(e,(function(){var e=1e3,t=6e4,n=36e5,r=`millisecond`,i=`second`,a=`minute`,o=`hour`,s=`day`,c=`week`,l=`month`,u=`quarter`,d=`year`,f=`date`,p=`Invalid Date`,m=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,h=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:`en`,weekdays:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),ordinal:function(e){var t=[`th`,`st`,`nd`,`rd`],n=e%100;return`[`+e+(t[(n-20)%10]||t[n]||t[0])+`]`}},_=function(e,t,n){var r=String(e);return!r||r.length>=t?e:``+Array(t+1-r.length).join(n)+e},v={s:_,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?`+`:`-`)+_(r,2,`0`)+`:`+_(i,2,`0`)},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),i=t.clone().add(r,l),a=n-i<0,o=t.clone().add(r+(a?-1:1),l);return+(-(r+(n-i)/(a?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:l,y:d,w:c,d:s,D:f,h:o,m:a,s:i,ms:r,Q:u}[e]||String(e||``).toLowerCase().replace(/s$/,``)},u:function(e){return e===void 0}},y=`en`,b={};b[y]=g;var x=`$isDayjsObject`,S=function(e){return e instanceof E||!(!e||!e[x])},C=function e(t,n,r){var i;if(!t)return y;if(typeof t==`string`){var a=t.toLowerCase();b[a]&&(i=a),n&&(b[a]=n,i=a);var o=t.split(`-`);if(!i&&o.length>1)return e(o[0])}else{var s=t.name;b[s]=t,i=s}return!r&&i&&(y=i),i||!r&&y},w=function(e,t){if(S(e))return e.clone();var n=typeof t==`object`?t:{};return n.date=e,n.args=arguments,new E(n)},T=v;T.l=C,T.i=S,T.w=function(e,t){return w(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function g(e){this.$L=C(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[x]=!0}var _=g.prototype;return _.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(t===null)return new Date(NaN);if(T.u(t))return new Date;if(t instanceof Date)return new Date(t);if(typeof t==`string`&&!/Z$/i.test(t)){var r=t.match(m);if(r){var i=r[2]-1||0,a=(r[7]||`0`).substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},_.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},_.$utils=function(){return T},_.isValid=function(){return this.$d.toString()!==p},_.isSame=function(e,t){var n=w(e);return this.startOf(t)<=n&&n<=this.endOf(t)},_.isAfter=function(e,t){return w(e)<this.startOf(t)},_.isBefore=function(e,t){return this.endOf(t)<w(e)},_.$g=function(e,t,n){return T.u(e)?this[t]:this.set(n,e)},_.unix=function(){return Math.floor(this.valueOf()/1e3)},_.valueOf=function(){return this.$d.getTime()},_.startOf=function(e,t){var n=this,r=!!T.u(t)||t,u=T.p(e),p=function(e,t){var i=T.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?i:i.endOf(s)},m=function(e,t){return T.w(n.toDate()[e].apply(n.toDate(`s`),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},h=this.$W,g=this.$M,_=this.$D,v=`set`+(this.$u?`UTC`:``);switch(u){case d:return r?p(1,0):p(31,11);case l:return r?p(1,g):p(0,g+1);case c:var y=this.$locale().weekStart||0,b=(h<y?h+7:h)-y;return p(r?_-b:_+(6-b),g);case s:case f:return m(v+`Hours`,0);case o:return m(v+`Minutes`,1);case a:return m(v+`Seconds`,2);case i:return m(v+`Milliseconds`,3);default:return this.clone()}},_.endOf=function(e){return this.startOf(e,!1)},_.$set=function(e,t){var n,c=T.p(e),u=`set`+(this.$u?`UTC`:``),p=(n={},n[s]=u+`Date`,n[f]=u+`Date`,n[l]=u+`Month`,n[d]=u+`FullYear`,n[o]=u+`Hours`,n[a]=u+`Minutes`,n[i]=u+`Seconds`,n[r]=u+`Milliseconds`,n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===l||c===d){var h=this.clone().set(f,1);h.$d[p](m),h.init(),this.$d=h.set(f,Math.min(this.$D,h.daysInMonth())).$d}else p&&this.$d[p](m);return this.init(),this},_.set=function(e,t){return this.clone().$set(e,t)},_.get=function(e){return this[T.p(e)]()},_.add=function(r,u){var f,p=this;r=Number(r);var m=T.p(u),h=function(e){var t=w(p);return T.w(t.date(t.date()+Math.round(e*r)),p)};if(m===l)return this.set(l,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return h(1);if(m===c)return h(7);var g=(f={},f[a]=t,f[o]=n,f[i]=e,f)[m]||1,_=this.$d.getTime()+r*g;return T.w(_,this)},_.subtract=function(e,t){return this.add(-1*e,t)},_.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=e||`YYYY-MM-DDTHH:mm:ssZ`,i=T.z(this),a=this.$H,o=this.$m,s=this.$M,c=n.weekdays,l=n.months,u=n.meridiem,d=function(e,n,i,a){return e&&(e[n]||e(t,r))||i[n].slice(0,a)},f=function(e){return T.s(a%12||12,e,`0`)},m=u||function(e,t,n){var r=e<12?`AM`:`PM`;return n?r.toLowerCase():r};return r.replace(h,(function(e,r){return r||function(e){switch(e){case`YY`:return String(t.$y).slice(-2);case`YYYY`:return T.s(t.$y,4,`0`);case`M`:return s+1;case`MM`:return T.s(s+1,2,`0`);case`MMM`:return d(n.monthsShort,s,l,3);case`MMMM`:return d(l,s);case`D`:return t.$D;case`DD`:return T.s(t.$D,2,`0`);case`d`:return String(t.$W);case`dd`:return d(n.weekdaysMin,t.$W,c,2);case`ddd`:return d(n.weekdaysShort,t.$W,c,3);case`dddd`:return c[t.$W];case`H`:return String(a);case`HH`:return T.s(a,2,`0`);case`h`:return f(1);case`hh`:return f(2);case`a`:return m(a,o,!0);case`A`:return m(a,o,!1);case`m`:return String(o);case`mm`:return T.s(o,2,`0`);case`s`:return String(t.$s);case`ss`:return T.s(t.$s,2,`0`);case`SSS`:return T.s(t.$ms,3,`0`);case`Z`:return i}return null}(e)||i.replace(`:`,``)}))},_.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},_.diff=function(r,f,p){var m,h=this,g=T.p(f),_=w(r),v=(_.utcOffset()-this.utcOffset())*t,y=this-_,b=function(){return T.m(h,_)};switch(g){case d:m=b()/12;break;case l:m=b();break;case u:m=b()/3;break;case c:m=(y-v)/6048e5;break;case s:m=(y-v)/864e5;break;case o:m=y/n;break;case a:m=y/t;break;case i:m=y/e;break;default:m=y}return p?m:T.a(m)},_.daysInMonth=function(){return this.endOf(l).$D},_.$locale=function(){return b[this.$L]},_.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=C(e,t,!0);return r&&(n.$L=r),n},_.clone=function(){return T.w(this.$d,this)},_.toDate=function(){return new Date(this.valueOf())},_.toJSON=function(){return this.isValid()?this.toISOString():null},_.toISOString=function(){return this.$d.toISOString()},_.toString=function(){return this.$d.toUTCString()},g}(),D=E.prototype;return w.prototype=D,[[`$ms`,r],[`$s`,i],[`$m`,a],[`$H`,o],[`$W`,s],[`$M`,l],[`$y`,d],[`$D`,f]].forEach((function(e){D[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),w.extend=function(e,t){return e.$i||=(e(t,E,w),!0),w},w.locale=C,w.isDayjs=S,w.unix=function(e){return w(1e3*e)},w.en=b[y],w.Ls=b,w.p={},w}))})),f=o(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_minMax=r()})(e,(function(){return function(e,t,n){var r=function(e,t){if(!t||!t.length||t.length===1&&!t[0]||t.length===1&&Array.isArray(t[0])&&!t[0].length)return null;var n;t.length===1&&t[0].length>0&&(t=t[0]),n=(t=t.filter((function(e){return e})))[0];for(var r=1;r<t.length;r+=1)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n};n.max=function(){return r(`isAfter`,[].slice.call(arguments,0))},n.min=function(){return r(`isBefore`,[].slice.call(arguments,0))}}}))})),p=c(o(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_utc=r()})(e,(function(){var e=`minute`,t=/[+-]\\d\\d(?::?\\d\\d)?/g,n=/([+-]|\\d\\d)/g;return function(r,i,a){var o=i.prototype;a.utc=function(e){return new i({date:e,utc:!0,args:arguments})},o.utc=function(t){var n=a(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},o.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var s=o.parse;o.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),s.call(this,e)};var c=o.init;o.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else c.call(this)};var l=o.utcOffset;o.utcOffset=function(r,i){var a=this.$utils().u;if(a(r))return this.$u?0:a(this.$offset)?l.call(this):this.$offset;if(typeof r==`string`&&(r=function(e){e===void 0&&(e=``);var r=e.match(t);if(!r)return null;var i=(``+r[0]).match(n)||[`-`,0,0],a=i[0],o=60*i[1]+ +i[2];return o===0?0:a===`+`?o:-o}(r),r===null))return this;var o=Math.abs(r)<=16?60*r:r;if(o===0)return this.utc(i);var s=this.clone();if(i)return s.$offset=o,s.$u=!1,s;var c=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(s=this.local().add(o+c,e)).$offset=o,s.$x.$localOffset=c,s};var u=o.format;o.format=function(e){var t=e||(this.$u?`YYYY-MM-DDTHH:mm:ss[Z]`:``);return u.call(this,t)},o.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()};var d=o.toDate;o.toDate=function(e){return e===`s`&&this.$offset?a(this.format(`YYYY-MM-DD HH:mm:ss:SSS`)).toDate():d.call(this)};var f=o.diff;o.diff=function(e,t,n){if(e&&this.$u===e.$u)return f.call(this,e,t,n);var r=this.local(),i=a(e).local();return f.call(r,i,t,n)}}}))}))(),1),m=c(f(),1),h=c(d(),1);const g=[/co-authored-by:.*<[^>]*@anthropic\\.com>/i,/co-authored-by:.*<[^>]*copilot@github\\.com>/i,/co-authored-by:.*<[^>]*\\+copilot@users\\.noreply\\.github\\.com>/i,/co-authored-by:\\s*github copilot\\b/i,/co-authored-by:.*<[^>]*@cursor\\.com>/i,/co-authored-by:.*devin-ai-integration/i,/co-authored-by:\\s*devin ai\\b/i,/co-authored-by:.*<[^>]*@openai\\.com>/i,/co-authored-by:\\s*openai[- ]codex\\b/i,/co-authored-by:\\s*aider\\s*[(<]/i,/co-authored-by:.*openhands-agent/i,/co-authored-by:.*<[^>]*@sourcegraph\\.com>/i,/generated with \\[?claude code/i,/🤖 generated with/i,/generated by cursor/i];function _(e){return e?g.some(t=>t.test(e)):!1}function v(e){let t=new Set,n=0,r=0;for(let i of e){if(i.sha){if(t.has(i.sha))continue;t.add(i.sha)}n++,_(i.message)&&r++}let i=n>0?r/n:0;return{totalCommits:n,aiCommits:r,ratio:i}}function y(e){let t=[];return e<u.AGE_NEW_ACCOUNT?t.push({label:`Recently created`,points:u.POINTS_NEW_ACCOUNT,detail:`Account is ${e} days old`}):e<u.AGE_YOUNG_ACCOUNT&&t.push({label:`Young account`,points:u.POINTS_YOUNG_ACCOUNT,detail:`Account is ${e} days old`}),t}h.default.extend(p.default);function b(e){let t=[];if(e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let n=new Map;e.forEach(e=>{let t=h.default.utc(e.created_at).format(`YYYY-MM-DD`),r=h.default.utc(e.created_at).hour();n.has(t)||n.set(t,new Set),n.get(t)?.add(r)});let r=null,i=24;if(n.forEach((t,n)=>{let a=t.size,o=e.filter(e=>h.default.utc(e.created_at).format(`YYYY-MM-DD`)===n).length;if(a>=u.HOURS_ACTIVE_EXTREME&&o>=10&&o/a>=u.EVENTS_PER_HOUR_MIN){let e=Array.from(t).sort((e,t)=>e-t),s=e[0],c=24-e[e.length-1]+s-1;for(let t=0;t<e.length-1;t++){let n=e[t+1]-e[t]-1;c=Math.max(c,n)}c<i&&(i=c,r={day:n,hoursActive:a,restGap:c,eventCount:o})}}),r){let e=r;if(i<3){let n=u.POINTS_24_7_ACTIVITY;i<1&&(n=Math.round(n*1.5)),t.push({label:`24/7 activity pattern`,points:n,amplifiable:!0,detail:`${e.day}: active across ${e.hoursActive} hours with only ${i} hour${i===1?``:`s`} rest`})}}return t}function x(e,t){let n=[],r=t>=u.AGE_ESTABLISHED_ACCOUNT,i=r?u.BRANCH_PR_PATTERN_MIN_PAIRS_ESTABLISHED:u.BRANCH_PR_PATTERN_MIN_PAIRS,a=r?u.BRANCH_PR_PATTERN_RATIO_MIN_ESTABLISHED:u.BRANCH_PR_PATTERN_RATIO_MIN,o=e.filter(e=>e.type===`CreateEvent`&&e.payload?.ref_type===`branch`),s=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`opened`);if(o.length>=i&&s.length>=i&&o.length/s.length>=u.BRANCH_PR_COUNT_RATIO_MIN){let e=o.map(e=>({event:e,time:(0,h.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),t=s.map(e=>({event:e,time:(0,h.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),r=new Map;for(let e of t){let t=e.event.repo?.name;t&&(r.has(t)||r.set(t,[]),r.get(t)?.push(e))}let c=0,l=0,d=new Map;for(let t of e){let e=t.event.repo?.name;if(!e)continue;let n=r.get(e);if(!n||n.length===0)continue;d.has(e)||d.set(e,0);let i=d.get(e)??0;for(;i<n.length&&n[i].time.valueOf()<t.time.valueOf();)i++;if(i<n.length){let e=n[i].time.diff(t.time,`second`);e>=0&&e<=u.BRANCH_PR_TIME_WINDOW_SECONDS&&(c++,l=Math.max(l,e),i++)}d.set(e,i)}if(c>=i)c/o.length>=a&&n.push({label:`Automated branch/PR workflow`,points:u.POINTS_BRANCH_PR_AUTOMATION,amplifiable:!0,detail:`${c}/${o.length} branch creations followed by PRs within ${l}s`});else{let r=0,s=0,c=new Set;for(let t of e){let e=t.event.repo?.name;if(e){let t=e.split(`/`)[1];t&&c.add(t)}}for(let n of c){let i=e.filter(e=>{let t=e.event.repo?.name;return t&&t.split(`/`)[1]===n}),a=t.filter(e=>{let t=e.event.repo?.name;return t&&t.split(`/`)[1]===n});if(i.length>0&&a.length>0){let e=0;for(let t of i){for(;e<a.length&&a[e].time.valueOf()<t.time.valueOf();)e++;if(e<a.length){let n=a[e].time.diff(t.time,`second`);n>=0&&n<=u.BRANCH_PR_TIME_WINDOW_SECONDS&&(r++,s=Math.max(s,n),e++)}}}}r>=i&&r/o.length>=a&&n.push({label:`Automated fork/PR workflow`,points:u.POINTS_BRANCH_PR_AUTOMATION,amplifiable:!0,detail:`${r}/${o.length} fork branches followed by upstream PRs within ${s}s`})}}return n}function S(e,t){let n=[],r=t>=u.AGE_ESTABLISHED_ACCOUNT?u.CLOSED_PR_SPAM_MIN_ESTABLISHED:u.CLOSED_PR_SPAM_MIN,i=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`closed`);if(i.length<r)return n;let a=new Set(i.map(e=>e.repo?.name).filter(e=>e!==void 0)),o=i.map(e=>(0,h.default)(e.created_at)),s=o.reduce((e,t)=>t.isBefore(e)?t:e),c=o.reduce((e,t)=>t.isAfter(e)?t:e),l=c.diff(s,`minute`),d=c.diff(s,`day`),f=c.diff(s,`day`,!0),p=d>0?`${d}d`:`${Math.ceil(l/60)}h`,m=new Map;i.forEach(e=>{let t=h.default.utc(e.created_at).format(`YYYY-MM-DD`);m.set(t,(m.get(t)||0)+1)});let g=Array.from(m.entries()).filter(([e,t])=>t>=10).sort((e,t)=>t[1]-e[1]).map(([e,t])=>t),_=``;g.length>0&&(_=g.length===1?`, with a spike of ${g[0]} rejections on one day`:`, with spike days of ${g.slice(0,-1).join(`, `)+` and ${g[g.length-1]}`} rejections each`);let v=u.POINTS_CLOSED_PR_SPAM;i.length>=100?v=u.POINTS_CLOSED_PR_SPAM_EXTREME:i.length>=25&&(v=u.POINTS_CLOSED_PR_SPAM_HIGH);let y=f>0?i.length/f:i.length,b=g.length>0,x=i.length>=25,S=y>=.5;if(a.size>=u.CLOSED_PR_REPO_SPREAD&&(b||x||S))return n.push({label:`Closed PR spam scatter`,points:v,amplifiable:!0,detail:`${i.length} PRs were rejected across ${a.size} repositories in ${p}${_}.`}),n;if(a.size>=2&&l<=u.CLOSED_PR_TIME_WINDOW_MINUTES){let e=i.length>=100?u.POINTS_CLOSED_PR_SPAM_BURST_EXTREME:v;n.push({label:`Closed PR spam burst`,points:e,amplifiable:!0,detail:`${i.length} PRs closed across ${a.size} repos in ${l}m (concentrated rejection/spam activity)`})}return n}function C(e){let t=[];if(e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let n=e.filter(e=>e.type===`IssueCommentEvent`);if(n.length>=u.ISSUE_COMMENT_MIN_FOR_SPRAY){let e=n.map(e=>({event:e,time:(0,h.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),r=0,i=0,a=0,o=0,s=u.ISSUE_COMMENT_SPAM_WINDOW_MINUTES;for(let t=0;t<e.length;t++){let n=e[t]?.time;for(;e[o]&&n&&n.diff(e[o].time,`minute`,!0)>s;)o++;let c=new Set(e.slice(o,t+1).map(e=>e.event.repo?.name).filter(e=>e!==void 0));c.size>r&&(r=c.size,i=o,a=t)}if(r>=u.ISSUE_COMMENT_SPRAY_EXTREME){let n=e[i]?.time,o=e[a]?.time,s=a-i+1,c=o&&n?Math.round(o.diff(n,`minute`,!0)):0;t.push({label:`Issue comment spam`,points:u.POINTS_ISSUE_COMMENT_SPRAY_EXTREME,amplifiable:!0,detail:`${s} comments to ${r} different repos in just ${c} minute${c===1?``:`s`}`})}else if(r>=u.ISSUE_COMMENT_SPRAY_HIGH){let n=e[i]?.time,o=e[a]?.time,s=a-i+1,c=o&&n?Math.round(o.diff(n,`minute`,!0)):0;t.push({label:`High comment frequency across repos`,points:u.POINTS_ISSUE_COMMENT_SPRAY_HIGH,amplifiable:!0,detail:`${s} comments to ${r} different repos in just ${c} minute${c===1?``:`s`}`})}}let r=e.filter(e=>e.type===`PullRequestReviewCommentEvent`);if(r.length>=u.PR_COMMENT_MIN_FOR_SPRAY){let e=r.map(e=>({event:e,time:(0,h.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),n=0,i=0,a=0,o=0,s=u.PR_COMMENT_SPAM_WINDOW_MINUTES;for(let t=0;t<e.length;t++){let r=e[t]?.time;for(;e[o]&&r&&r.diff(e[o].time,`minute`,!0)>s;)o++;let c=new Set(e.slice(o,t+1).map(e=>{let t=e.event.repo?.name,n=e.event.payload?.pull_request?.number;return t&&n?`${t}#${n}`:t}).filter(e=>e!==void 0));c.size>n&&(n=c.size,i=o,a=t)}if(n>=u.PR_COMMENT_SPRAY_EXTREME){let r=e[i]?.time,o=e[a]?.time,s=a-i+1,c=o&&r?Math.round(o.diff(r,`minute`,!0)):0;t.push({label:`PR comment spam`,points:u.POINTS_PR_COMMENT_SPRAY_EXTREME,amplifiable:!0,detail:`${s} comments on ${n} different PRs in just ${c} minute${c===1?``:`s`}`})}else if(n>=u.PR_COMMENT_SPRAY_HIGH){let r=e[i]?.time,o=e[a]?.time,s=a-i+1,c=o&&r?Math.round(o.diff(r,`minute`,!0)):0;t.push({label:`High PR comment frequency`,points:u.POINTS_PR_COMMENT_SPRAY_HIGH,amplifiable:!0,detail:`${s} comments on ${n} different PRs in just ${c} minute${c===1?``:`s`}`})}}return t}function w(e){if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t,0);if(t===0)return 0;let n=0;for(let r of e)if(r>0){let e=r/t;n-=e*Math.log2(e)}return n}function T(e){return e.length<=1?0:w(e)/Math.log2(e.length)}function E(e){let t=[];if(e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let n=new Map;e.forEach(e=>{e.type&&n.set(e.type,(n.get(e.type)||0)+1)});let r=T(Array.from(n.values())),i=new Set(e.map(e=>e.type).filter(e=>e!=null)),a=i.has(`IssueCommentEvent`)||i.has(`PullRequestReviewEvent`)||i.has(`PullRequestReviewCommentEvent`),o=i.has(`WatchEvent`),s=i.size<=3&&r<.8,c=r>.85&&i.size>=5;return(s||c)&&!a&&!o&&t.push({label:`Narrow activity focus`,points:u.POINTS_LOW_DIVERSITY,amplifiable:!0,detail:`${i.size} event types (entropy: ${r.toFixed(2)}) without interpersonal interactions`}),t}h.default.extend(p.default),h.default.extend(m.default);function D(e){let t=[],n=e.filter(e=>e.type===`ForkEvent`);if(n.length<u.FORKS_HIGH)return t;let r=n.map(e=>(0,h.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),i=e=>{let t=0,n=0;for(let i=0;i<r.length;i++){let a=r[i];for(;a&&a.diff(r[n],`hour`,!0)>e;)n++;let o=i-n+1;t=Math.max(t,o)}return t},a=i(24),o=i(48),s=i(72),c=null;if(a>=u.FORKS_SURGE_EXTREME_HIGH?c={label:`Extreme fork automation`,points:u.POINTS_FORK_SURGE_EXTREME_HIGH,amplifiable:!0,detail:`${a} repositories forked in rapid succession (within 24 hours)`}:a>=u.FORKS_SURGE_SEVERE?c={label:`Severe fork surge`,points:u.POINTS_FORK_SURGE_SEVERE,amplifiable:!0,detail:`${a} repositories forked in rapid succession (within 24 hours)`}:a>=u.FORKS_EXTREME?c={label:`Fork spike detected`,points:u.POINTS_FORK_SURGE,amplifiable:!0,detail:`Burst of ${a} fork events in a single 24-hour window`}:a>=u.FORKS_HIGH?c={label:`Multiple forks`,points:u.POINTS_MULTIPLE_FORKS,amplifiable:!0,detail:`${a} repositories forked in a single 24-hour window`}:o>=u.FORKS_SURGE_48H?c={label:`Multi-day fork surge`,points:u.POINTS_FORK_SURGE_48H,amplifiable:!0,detail:`Concentrated burst: ${o} repositories forked over 2 days`}:s>=u.FORKS_SURGE_72H&&(c={label:`Severe multi-day fork surge`,points:u.POINTS_FORK_SURGE_72H,amplifiable:!0,detail:`Rapid burst: ${s} repositories forked over 72 hours`}),c&&t.push(c),r.length>0&&!c){let e=r[0],i=r[r.length-1];if(e&&i){let r=Math.max(1,i.diff(e,`day`)),a=n.length/r;a>=u.FORKS_PER_DAY_HIGH&&r>=3&&t.push({label:`Sustained fork rate`,points:u.POINTS_FORKS_PER_DAY_HIGH,amplifiable:!0,detail:`Average of ${a.toFixed(1)} forks per day over ${r} days (${n.length} total)`})}}let l=new Set;if(n.forEach(e=>{l.add(h.default.utc(e.created_at).format(`YYYY-MM-DD`))}),l.size>=u.CONSECUTIVE_FORK_DAYS&&!c){let e=Array.from(l).map(e=>(0,h.default)(e,`YYYY-MM-DD`)).sort((e,t)=>e.valueOf()-t.valueOf()),r=1,i=1;for(let t=1;t<e.length;t++){let n=e[t-1],a=e[t];a&&n&&a.diff(n,`day`)===1?(i++,r=Math.max(r,i)):i=1}if(r>=u.CONSECUTIVE_FORK_DAYS){let e=l.size;t.push({label:`Extended forking pattern`,points:u.POINTS_CONSECUTIVE_FORK_DAYS,amplifiable:!0,detail:`Forking activity on ${e} days (${r} consecutive), ${n.length} repositories total`})}}let d=new Set(n.map(e=>e.repo?.name).filter(e=>e!==void 0));if(d.size>=u.FORK_REPO_DIVERSITY_HIGH&&!c){let e=``;if(r.length>1){let t=r[0],n=r[r.length-1].diff(t,`day`);e=n>0?` over ${n} days`:` in a short timeframe`}t.push({label:`Fork scatter pattern`,points:u.POINTS_FORK_DIVERSITY,amplifiable:!0,detail:`Targeting ${d.size} different repositories${e}`})}return t}function O(e){let t=[],n=e.filter(e=>e.type===`ForkEvent`);if(n.length<u.FORK_COMBINED_ACTIVITY_MIN||e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let r=new Set(n.map(e=>e.repo?.name).filter(e=>e!==void 0)),i=e.filter(e=>e.type===`CreateEvent`&&e.payload?.ref_type===`branch`).filter(e=>r.has(e.repo?.name||``)),a=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`opened`).filter(e=>r.has(e.repo?.name||``));if(i.length>=u.FORK_COMBINED_BRANCHES&&a.length>=u.FORK_COMBINED_PRS){let e=n.map(e=>(0,h.default)(e.created_at)),r=i.map(e=>(0,h.default)(e.created_at)),o=a.map(e=>(0,h.default)(e.created_at)),s=h.default.max(e),c=h.default.min(r),l=h.default.min(o);if(s&&c&&l&&s.isBefore(c)&&c.isBefore(l)&&a.length<=i.length*2){let e=n.length+i.length+a.length;t.push({label:`Suspicious chained automations`,points:u.POINTS_FORK_COMBINED_ACTIVITY,amplifiable:!0,detail:`${e} chained repository operations: ${n.length} forks followed by ${i.length} branches, then ${a.length} pull requests (based on available event history)`})}}return t}h.default.extend(m.default);function k(e){let t=[];if(e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let n=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`opened`),r=n.map(e=>(0,h.default)(e.created_at)),i=h.default.max(r)||(0,h.default)(),a=i.subtract(1,`day`),o=i.subtract(1,`week`),s=n.filter(e=>(0,h.default)(e.created_at).isAfter(a)),c=n.filter(e=>(0,h.default)(e.created_at).isAfter(o));if(s.length>=u.PRS_DAY_EXTREME&&t.push({label:`Extreme PR spam (daily)`,points:u.POINTS_PRS_DAY_EXTREME,amplifiable:!0,detail:`${s.length} PRs in the last 24 hours`}),c.length>=u.PRS_WEEK_EXTREME?t.push({label:`Extreme PR spam (weekly)`,points:u.POINTS_PRS_WEEK_EXTREME,amplifiable:!0,detail:`${c.length} PRs in the last 7 days`}):c.length>=u.PRS_WEEK_VERY_HIGH&&t.push({label:`Very high PR spam frequency`,points:u.POINTS_PRS_WEEK_VERY_HIGH,amplifiable:!0,detail:`${c.length} PRs in the last 7 days`}),n.length>=u.PRS_SPAM_VOLUME&&!t.some(e=>e.label===`Extreme PR spam (daily)`||e.label===`Extreme PR spam (weekly)`||e.label===`Very high PR spam frequency`)){let e=new Set(n.map(e=>e.repo?.name).filter(e=>e!==void 0));if(e.size>=u.REPOS_SPAM_SPREAD){let r=n.map(e=>(0,h.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),a=r[0],o=r[r.length-1],s=o?o.diff(a,`days`,!0):0,c=s/7,l=c>0?n.length/c:1/0,d=i.subtract(30,`days`),f=n.filter(e=>(0,h.default)(e.created_at).isAfter(d)).length,p=l>=u.PRS_SPAM_DENSITY_PER_WEEK,m=f>=u.PRS_SPAM_ROLLING_30DAYS;(p||m)&&t.push({label:`Distributed PR spam pattern`,points:u.POINTS_PR_SPAM_DISTRIBUTED,amplifiable:!0,detail:`${n.length} PRs spread across ${e.size} different repositories${s>0?` (${l.toFixed(1)} PRs/week)`:``}`})}}return t}function A(e,t){let n=[],r=t>=u.AGE_ESTABLISHED_ACCOUNT?u.RAPID_PR_SPAM_MIN_PRS_ESTABLISHED:u.RAPID_PR_SPAM_MIN_PRS,i=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`opened`);if(i.length<r)return n;let a=i.map(e=>({event:e,time:(0,h.default)(e.created_at)})).sort((e,t)=>e.time.valueOf()-t.time.valueOf()),o=new Map;for(let e of a){let t=e.event.repo?.name;t&&(o.has(t)||o.set(t,[]),o.get(t)?.push(e))}let s=0,c=0,l=``;for(let[e,t]of o.entries()){if(t.length<r)continue;let n=0,i=0;for(let e=0;e<t.length-1;e++){let r=t[e+1].time.diff(t[e].time,`second`);r<=u.BRANCH_PR_TIME_WINDOW_SECONDS&&(n++,i=Math.max(i,r))}n>s&&(s=n,c=i,l=e)}return s>=r-1&&n.push({label:`Rapid PR spam to repository`,points:u.POINTS_RAPID_PR_SPAM,amplifiable:!0,detail:`${s+1} PRs opened to ${l} within ${c}s intervals`}),n}function j(e){let t=[];if(e.length<u.MIN_EVENTS_FOR_ANALYSIS)return t;let n=e.filter(e=>e.type===`CreateEvent`&&e.payload?.ref_type===`repository`);if(n.length>=u.CREATE_EVENTS_MIN){let e=n.map(e=>(0,h.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),r=0,i=0;for(let t=0;t<e.length;t++){let n=e[t];for(;n&&n.diff(e[i],`hour`,!0)>24;)i++;let a=t-i+1;r=Math.max(r,a)}r>=u.CREATE_BURST_EXTREME?t.push({label:`Concentrated repository creation`,points:u.POINTS_CREATE_BURST_EXTREME,amplifiable:!0,detail:`${r} repositories created in a short timeframe (within 24 hours)`}):r>=u.CREATE_BURST_HIGH&&t.push({label:`Frequent repository creation`,points:u.POINTS_CREATE_BURST_HIGH,amplifiable:!0,detail:`${r} repositories created in a short timeframe (within 24 hours)`})}return t}h.default.extend(m.default);function M(e,t,n,r){let i=[];if(!n||e.length<u.MIN_EVENTS_FOR_ANALYSIS)return i;let a=r.toLowerCase(),o=e.filter(e=>e.type===`PushEvent`);if(o.length>=u.MIN_EVENTS_FOR_ANALYSIS){let e=o.map(e=>(0,h.default)(e.created_at)).sort((e,t)=>e.valueOf()-t.valueOf()),t=0,n=0;for(let r=0;r<e.length;r++){let i=e[r];for(;i&&i.diff(e[n],`hour`,!0)>1;)n++;let a=r-n+1;t=Math.max(t,a)}t>=u.HOURLY_ACTIVITY_EXTREME?i.push({label:`Extreme commit burst`,points:u.POINTS_EXTREME_ACTIVITY_DENSITY,detail:`${t} commits within 1 hour`}):t>=u.HOURLY_ACTIVITY_HIGH&&i.push({label:`High commit burst`,points:u.POINTS_HIGH_ACTIVITY_DENSITY,detail:`${t} commits within 1 hour`});let r=0;for(let t=1;t<e.length;t++)e[t]!==void 0&&e[t-1]!==void 0&&e[t].diff(e[t-1],`second`)<=u.TIGHT_COMMIT_SECONDS&&r++;r>=u.TIGHT_COMMIT_THRESHOLD&&i.push({label:`High commit frequency`,points:u.POINTS_TIGHT_BURST,detail:`${r+1} commits within very short intervals`})}let s=e.filter(e=>e.type===`PullRequestEvent`&&e.payload?.action===`opened`);if(s.length>=u.MIN_EVENTS_FOR_ANALYSIS){let e=s.map(e=>(0,h.default)(e.created_at)),t=h.default.min(e),n=h.default.max(e);if(n){let e=Math.max(1,n.diff(t,`day`)),r=s.length/e;r>=u.ACTIVITY_DENSITY_EXTREME/2?i.push({label:`Very high PR volume`,points:u.POINTS_EXTREME_ACTIVITY_DENSITY+10,detail:`${s.length} PRs in ${e} day${e===1?``:`s`}`}):r>=u.ACTIVITY_DENSITY_HIGH/2&&i.push({label:`High PR volume`,points:u.POINTS_HIGH_ACTIVITY_DENSITY+5,detail:`${s.length} PRs in ${e} day${e===1?``:`s`}`})}}let c=new Set([`PushEvent`,`PullRequestEvent`]),l=e.filter(e=>e.type&&c.has(e.type)||e.type===`PullRequestReviewEvent`||e.type===`PullRequestReviewCommentEvent`),d=new Map;l.forEach(e=>{if(!e.created_at)return;let t=new Date(e.created_at),n=t.toISOString().slice(0,10);d.has(n)||d.set(n,[]),d.get(n)?.push(t)});let f=[];if(d.forEach((e,t)=>{let n=new Map;e.forEach(e=>{let t=e.getUTCHours();n.set(t,(n.get(t)||0)+1)});let r=n.size,i=T(Array.from(n.values()));r>=u.HOURS_PER_DAY_INHUMAN&&i>.8&&f.push(t)}),f.length>=u.CONSECUTIVE_INHUMAN_DAYS_EXTREME){f.sort();let e=1,t=1;for(let n=1;n<f.length;n++){let r=(0,h.default)(f[n-1]);(0,h.default)(f[n]).diff(r,`day`)===1?(e++,t=Math.max(t,e)):e=1}t>=u.CONSECUTIVE_INHUMAN_DAYS_EXTREME?i.push({label:`Extended daily coding`,points:u.POINTS_NONSTOP_ACTIVITY,detail:`${t} days in a row with ${u.HOURS_PER_DAY_INHUMAN}+ hours of coding`}):f.length>=u.FREQUENT_MARATHON_DAYS&&i.push({label:`Frequent long coding days`,points:u.POINTS_FREQUENT_MARATHON,detail:`${f.length} days with ${u.HOURS_PER_DAY_INHUMAN}+ hours of coding and uniform hourly distribution`})}let p=new Set(e.map(e=>e.repo?.name).filter(e=>e?e.split(`/`)[0]?.toLowerCase()!==a:!1));p.size>=u.REPO_SPREAD_EXTREME?i.push({label:`Highly distributed activity`,points:u.POINTS_EXTREME_REPO_SPREAD_YOUNG,detail:`Activity spread across ${p.size} external repositories`}):p.size>=u.REPO_SPREAD_HIGH&&i.push({label:`Distributed activity`,points:u.POINTS_WIDE_REPO_SPREAD_YOUNG,detail:`Activity spread across ${p.size} external repositories`});let m=s.filter(e=>{let t=e.repo?.name?.split(`/`)[0]?.toLowerCase();return t&&t!==a}),g=(0,h.default)(),_=g.subtract(1,`week`),v=g.subtract(1,`day`),y=m.filter(e=>(0,h.default)(e.created_at).isAfter(_)),b=m.filter(e=>(0,h.default)(e.created_at).isAfter(v));if(b.length>=u.PRS_TODAY_EXTREME?i.push({label:`High PR volume in the past 24 hours`,points:u.POINTS_PR_BURST,detail:`${b.length} PRs to other repos in the last 24 hours`}):y.length>=u.PRS_WEEK_HIGH&&i.push({label:`High PR volume during last week`,points:u.POINTS_HIGH_PR_FREQUENCY,detail:`${y.length} PRs to other repos this week`}),m.length>=u.EXTERNAL_PRS_MIN&&t<u.PERSONAL_REPOS_LOW){let e=`${m.length} PRs to other repos, but only ${t} of their own`;t===0&&(e=`${m.length} PRs to other repos, none of their own`),i.push({label:`Primarily external contributions`,points:u.POINTS_PR_ONLY_CONTRIBUTOR,detail:e})}let x=e.filter(e=>{let t=e.repo?.name?.split(`/`)[0]?.toLowerCase();return t&&t!==a}),S=x.length/e.length;return x.length>0&&S>=u.FOREIGN_RATIO_HIGH&&t<u.PERSONAL_REPOS_LOW&&i.push({label:`Mostly external activity`,points:u.POINTS_EXTERNAL_FOCUS,detail:`${Math.round(S*100)}% of activity on other people's repos`}),i}function N(e,t,n){let r=[];return e===0&&t.length===n.length&&n.length>=u.ZERO_REPOS_MIN_EVENTS&&r.push({label:`Only active on other people's repos`,points:u.POINTS_ZERO_REPOS_ACTIVE+u.POINTS_NO_PERSONAL_ACTIVITY,detail:`No personal repos, all ${n.length} events are on repos they don't own`}),r}h.default.extend(m.default),h.default.extend(p.default);function P({createdAt:e,reposCount:t,accountName:n,events:r,excludeRepos:i=[],commits:a=[]}){let o=[],s=i.map(e=>e.toLowerCase()),c=r.filter(e=>{let t=e.repo?.name?.toLowerCase();return t&&!s.includes(t)}),l=(0,h.default)().diff(e,`days`),d=c.filter(e=>{let t=e.repo?.name?.split(`/`)[0]?.toLowerCase();return t&&t!==n.toLowerCase()}),f=l<u.AGE_YOUNG_ACCOUNT;o.push(...y(l)),o.push(...N(t,d,c)),o.push(...j(c)),o.push(...b(c)),o.push(...E(c)),o.push(...C(c)),o.push(...x(c,l)),o.push(...A(c,l)),o.push(...S(c,l)),o.push(...D(c)),o.push(...O(c)),o.push(...M(c,t,f,n)),o.push(...k(c));let p=v(a.filter(e=>!e.repo||!s.includes(e.repo.toLowerCase()))),m=p.totalCommits>=u.AI_COMMIT_MIN_COMMITS?u.AI_COMMIT_TIERS.find(e=>p.ratio>=e.ratio):void 0,g=o.some(e=>e.amplifiable&&e.points>0);if(m){let{ratio:e,aiCommits:t,totalCommits:n}=p,r=Math.round(e*100),i=g?`${t}/${n} commits (${r}%) AI-attributed — ${m.multiplier}x multiplier applied to automation signals`:`${t}/${n} commits (${r}%) AI-attributed — no automation signals to amplify`;o.push({label:`Predominantly AI-attributed commits`,points:0,detail:i})}let _=m?.multiplier??1,w=o.reduce((e,t)=>e+(t.amplifiable?Math.round(t.points*_):t.points),0),T=Math.max(0,100-w),P=`automation`;return T>=u.THRESHOLD_HUMAN?P=`organic`:T>=u.THRESHOLD_SUSPICIOUS&&(P=`mixed`),{score:T,classification:P,flags:o,profile:{age:l,repos:t}}}export{l as getClassificationDetails,P as identify,u as identityConfig};","import { identify, getClassificationDetails } from \"@unveil/identity\";\nimport { setOutput } from \"./utils\";\n\nconst jsonMode = process.argv.includes(\"--json\");\nconst log = jsonMode ? console.error : console.log;\n\nconst { GITHUB_TOKEN, PR_AUTHOR } = process.env;\nif (!GITHUB_TOKEN || !PR_AUTHOR) {\n\tthrow new Error(\n\t\t`Missing input.\\nRequired environment variables: GITHUB_TOKEN, PR_AUTHOR\\n`,\n\t);\n}\n\nconst headers = {\n\tAccept: \"application/vnd.github+json\",\n\tAuthorization: `Bearer ${GITHUB_TOKEN}`,\n\t\"X-GitHub-Api-Version\": \"2022-11-28\",\n};\n\nconst userRes = await fetch(`https://api.github.com/users/${PR_AUTHOR}`, {\n\theaders,\n});\nif (!userRes.ok) {\n\tthrow new Error(`Failed to fetch user ${PR_AUTHOR}: ${userRes.status}`);\n}\nconst user = await userRes.json();\n\n// Fetch up to 2 pages of public events (200 max)\nconst events = [];\nfor (let page = 1; page <= 2; page++) {\n\tconst eventsRes = await fetch(\n\t\t`https://api.github.com/users/${PR_AUTHOR}/events/public?per_page=100&page=${page}`,\n\t\t{ headers },\n\t);\n\tif (!eventsRes.ok) break;\n\tconst pageEvents = await eventsRes.json();\n\tevents.push(...pageEvents);\n\tif (pageEvents.length < 100) break;\n}\n\nconst { classification, score, flags } = identify({\n\taccountName: PR_AUTHOR,\n\treposCount: user.public_repos,\n\tcreatedAt: user.created_at,\n\tevents,\n});\n\ntype AutomationListItem = {\n username: string;\n reason: string;\n createdAt: string;\n issueUrl: string;\n};\n\nlet verifiedAutomationList: AutomationListItem[] = [] \n\ntry {\n\tconst automationJSONPath = 'data/verified-automations-list.json'\n\tconst response = await fetch(\n\t\t`https://api.github.com/repos/matteogabriele/agentscan/contents/${automationJSONPath}`,\n\t\t{ headers },\n\t);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to fetch verified automations list: ${response.status}`);\n\t}\n\n\tconst data = await response.json();\n\n\tif (\"content\" in data) {\n\t\tconst content = Buffer.from(data.content, \"base64\").toString(\"utf-8\");\n\t\tverifiedAutomationList = JSON.parse(content)\n\t}\n} catch (error) {\n\tlog(\"Could not fetch verified automations list\");\n}\n\nconst verifiedAutomation: AutomationListItem | undefined = verifiedAutomationList.find(\n\t(account) => account.username === PR_AUTHOR,\n);\n\nconst communityFlagDetails = {\n\tlabel: \"Flagged by community\",\n\tdescription:\n\t\t\"This account has been flagged as potentially automated by the community.\",\n}\n\nconst hasCommunityFlag: boolean = !!verifiedAutomation;\nconst details = hasCommunityFlag ? communityFlagDetails : getClassificationDetails(classification);\n\nconst flagsTable = flags\n\t.map((f) => `| ${f.label} | ${f.points > 0 ? \"+\" : \"\"}${f.points} | ${f.detail} |`)\n\t.join(\"\\n\");\nconst comment = `### ${details.label}\n\n[@${PR_AUTHOR}](https://github.com/${PR_AUTHOR}) ${details.description}\n\n**Classification:** \\`${classification}\\` (score: ${score})\n\n| Signal | Points | Detail |\n|--------|--------|--------|\n${flagsTable}\n\n<sub>Analyzed ${events.length} public events via <a href=\"https://www.npmx.dev/package/@unveil/identity\">@unveil/identity</a></sub>`;\n\n\nlog(`Classification: ${classification} (score: ${score})`);\nfor (const flag of flags) {\n\tlog(` [${flag.points > 0 ? \"+\" : \"\"}${flag.points}] ${flag.label}: ${flag.detail}`);\n}\n\nconst isAgent = classification === \"automation\";\n\nif (jsonMode) {\n\tconsole.log(JSON.stringify({ classification, score, isAgent, comment }));\n} else {\n\tsetOutput(\"CLASSIFICATION\", classification);\n\tsetOutput(\"SCORE\", String(score));\n\tsetOutput(\"IS_AGENT\", isAgent ? \"true\" : \"false\");\n\tsetOutput(\"COMMENT\", comment);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
+2 -2
docs/detect-agent.md
··· 1 1 # detect-agent 2 2 3 - Detects automated (bot/agent) PR authors using [`voight-kampff-test`](https://www.npmx.dev/package/voight-kampff-test) which powers [AgentScan](https://agentscan.netlify.app/). Analyzes public GitHub activity to classify accounts as `organic`, `mixed`, or `automation`. 3 + Detects automated (bot/agent) PR authors using [`@unveil/identity`](https://www.npmx.dev/package/@unveil/identity) which powers [AgentScan](https://agentscan.tools/). Analyzes public GitHub activity to classify accounts as `organic`, `mixed`, or `automation`. 4 4 5 5 - `[bot]` accounts are labeled immediately without analysis 6 6 - Organization members and collaborators are bypassed by default ··· 19 19 | Name | Description | 20 20 | ---------------- | ----------------------------------------------------------------- | 21 21 | `classification` | The classification result: `organic`, `mixed`, or `automation` | 22 - | `score` | The raw score from voight-kampff-test | 22 + | `score` | The raw score from @unveil/identity | 23 23 | `is_agent` | Whether the PR author is classified as automated (`true`/`false`) | 24 24 25 25 ## Secrets
+1 -1
package.json
··· 12 12 "devDependencies": { 13 13 "@bomb.sh/tools": "^0.2.1", 14 14 "@types/node": "^22.19.15", 15 - "voight-kampff-test": "^2.2.1" 15 + "@unveil/identity": "^1.6.0" 16 16 } 17 17 }
+8 -8
pnpm-lock.yaml
··· 14 14 '@types/node': 15 15 specifier: ^22.19.15 16 16 version: 22.19.15 17 - voight-kampff-test: 18 - specifier: ^2.2.1 19 - version: 2.2.1 17 + '@unveil/identity': 18 + specifier: ^1.6.0 19 + version: 1.6.0 20 20 21 21 packages: 22 22 ··· 579 579 resolution: {integrity: sha512-NcKdPiGjxxxdh7fLgRKTrn5hLntbt89NOodNaSrMChTfJwvLaDkgrRlnO7v5x+m7nQc87Qf1y7UoT1ZEZUBB4Q==} 580 580 hasBin: true 581 581 582 + '@unveil/identity@1.6.0': 583 + resolution: {integrity: sha512-7myIgvmu82+a7f3C1rx7iBqOIhXNvKKUrA9+RrNg7U2pFKgnx6d/f/IMK83iKLGiBTR6/IaNZAUhh3L9cuQuvA==} 584 + 582 585 '@vitest/expect@4.1.0': 583 586 resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} 584 587 ··· 1114 1117 optional: true 1115 1118 jsdom: 1116 1119 optional: true 1117 - 1118 - voight-kampff-test@2.2.1: 1119 - resolution: {integrity: sha512-3UZeXWdurDttmk31fR+W+w292z0H3qbwCz1ZQSxNIfaDzyNfFjt8jAhzIOF7WsVG86PJMcsujVJutacewguqzw==} 1120 1120 1121 1121 walk-up-path@4.0.0: 1122 1122 resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} ··· 1533 1533 '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260307.1 1534 1534 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260307.1 1535 1535 1536 + '@unveil/identity@1.6.0': {} 1537 + 1536 1538 '@vitest/expect@4.1.0': 1537 1539 dependencies: 1538 1540 '@standard-schema/spec': 1.1.0 ··· 2021 2023 '@types/node': 22.19.15 2022 2024 transitivePeerDependencies: 2023 2025 - msw 2024 - 2025 - voight-kampff-test@2.2.1: {} 2026 2026 2027 2027 walk-up-path@4.0.0: {} 2028 2028
+3 -3
src/detect-agent.ts
··· 1 - import { identifyReplicant, getClassificationDetails } from "voight-kampff-test"; 1 + import { identify, getClassificationDetails } from "@unveil/identity"; 2 2 import { setOutput } from "./utils"; 3 3 4 4 const jsonMode = process.argv.includes("--json"); ··· 38 38 if (pageEvents.length < 100) break; 39 39 } 40 40 41 - const { classification, score, flags } = identifyReplicant({ 41 + const { classification, score, flags } = identify({ 42 42 accountName: PR_AUTHOR, 43 43 reposCount: user.public_repos, 44 44 createdAt: user.created_at, ··· 101 101 |--------|--------|--------| 102 102 ${flagsTable} 103 103 104 - <sub>Analyzed ${events.length} public events via <a href="https://www.npmx.dev/package/voight-kampff-test">voight-kampff-test</a></sub>`; 104 + <sub>Analyzed ${events.length} public events via <a href="https://www.npmx.dev/package/@unveil/identity">@unveil/identity</a></sub>`; 105 105 106 106 107 107 log(`Classification: ${classification} (score: ${score})`);