From fbe881bea9e61ea1d4497a13f987511e797e92d1 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 26 May 2026 05:41:04 -0700 Subject: [PATCH 1/5] fix(app): gate public PR visibility for confirmed miners Makes GitHub App output quiet for non-miners, switches confirmed miner PRs to public-safe comments and labels by default, disables detailed public check output, and updates install health and docs around Issues write and optional Checks write. --- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- README.md | 13 +- docs/.nojekyll | 0 docs/404.html | 28 --- docs/CNAME | 1 - docs/assets/app.DeJiVmBc.js | 1 - .../chunks/@localSearchIndexroot.DQCfcpak.js | 1 - .../chunks/VPLocalSearchBox.DIqEGPXK.js | 3 - docs/assets/chunks/framework.BXgR76oC.js | 4 - docs/assets/chunks/theme.BfZ7hXNa.js | 2 - docs/assets/guide_auth.md.DNA7JhY7.js | 3 - docs/assets/guide_auth.md.DNA7JhY7.lean.js | 1 - .../guide_github-app-setup.md.ZPvLDsvt.js | 3 - ...guide_github-app-setup.md.ZPvLDsvt.lean.js | 1 - docs/assets/guide_install.md.ByQAA8QU.js | 11 - docs/assets/guide_install.md.ByQAA8QU.lean.js | 1 - docs/assets/guide_maintainers.md.CGSokUpu.js | 1 - .../guide_maintainers.md.CGSokUpu.lean.js | 1 - docs/assets/guide_mcp.md.DK8zvHnS.js | 19 -- docs/assets/guide_mcp.md.DK8zvHnS.lean.js | 1 - docs/assets/guide_miners.md.BeaGERAQ.js | 6 - docs/assets/guide_miners.md.BeaGERAQ.lean.js | 1 - docs/assets/index.md.BKalGx3J.js | 1 - docs/assets/index.md.BKalGx3J.lean.js | 1 - .../inter-italic-cyrillic-ext._dlW9xFb.woff2 | Bin 43716 -> 0 bytes .../inter-italic-cyrillic.D7dRslh9.woff2 | Bin 31080 -> 0 bytes .../inter-italic-greek-ext.Ct-Tf2bq.woff2 | Bin 17444 -> 0 bytes docs/assets/inter-italic-greek.DNcpQ8QC.woff2 | Bin 32036 -> 0 bytes .../inter-italic-latin-ext.DytegdRQ.woff2 | Bin 140768 -> 0 bytes docs/assets/inter-italic-latin.COaG5lWR.woff2 | Bin 78844 -> 0 bytes .../inter-italic-vietnamese.BI5UxJD-.woff2 | Bin 14912 -> 0 bytes .../inter-roman-cyrillic-ext.BeNbU08G.woff2 | Bin 41092 -> 0 bytes .../inter-roman-cyrillic.CD0kT8R4.woff2 | Bin 28824 -> 0 bytes .../inter-roman-greek-ext.CFAEQ5Ow.woff2 | Bin 16076 -> 0 bytes docs/assets/inter-roman-greek.Dsf7YjP7.woff2 | Bin 29240 -> 0 bytes .../inter-roman-latin-ext.Dl_ayf4-.woff2 | Bin 128120 -> 0 bytes docs/assets/inter-roman-latin.Cy4MYw_J.woff2 | Bin 71624 -> 0 bytes .../inter-roman-vietnamese.CpqCnS2H.woff2 | Bin 14184 -> 0 bytes docs/assets/reference_api.md.CvVunwm0.js | 3 - docs/assets/reference_api.md.CvVunwm0.lean.js | 1 - docs/assets/security_privacy.md.CHSODDHk.js | 1 - .../security_privacy.md.CHSODDHk.lean.js | 1 - docs/assets/style.DbhuNsMp.css | 1 - docs/assets/troubleshooting.md.BAr9iojM.js | 4 - .../troubleshooting.md.BAr9iojM.lean.js | 1 - docs/guide/auth.html | 33 --- docs/guide/github-app-setup.html | 33 --- docs/guide/install.html | 41 ---- docs/guide/maintainers.html | 31 --- docs/guide/mcp.html | 49 ----- docs/guide/miners.html | 36 --- docs/hashmap.json | 1 - docs/index.html | 31 --- docs/logo.svg | 8 - docs/reference/api.html | 33 --- docs/security/privacy.html | 31 --- docs/troubleshooting.html | 34 --- docs/vp-icons.css | 1 - migrations/0009_github_app_visibility.sql | 18 ++ site/guide/github-app-setup.md | 20 +- site/guide/maintainers.md | 19 +- site/security/privacy.md | 2 +- src/api/routes.ts | 17 +- src/db/repositories.ts | 86 ++++++-- src/db/schema.ts | 12 +- src/github/backfill.ts | 23 +- src/github/labels.ts | 59 +++++ src/gittensor/api.ts | 113 ++++++---- src/openapi/schemas.ts | 8 +- src/queue/processors.ts | 193 +++++++++++----- src/rules/advisory.ts | 28 +-- src/signals/engine.ts | 27 ++- src/types.ts | 9 +- test/integration/api.test.ts | 9 +- test/unit/backfill.test.ts | 51 ++++- test/unit/data-spine.test.ts | 7 +- test/unit/github-app.test.ts | 11 +- test/unit/github-labels.test.ts | 104 +++++++++ test/unit/queue.test.ts | 206 +++++++++++++++++- test/unit/rules.test.ts | 43 +++- test/unit/signals-v2.test.ts | 18 +- test/unit/signals.test.ts | 39 +++- 82 files changed, 912 insertions(+), 690 deletions(-) delete mode 100644 docs/.nojekyll delete mode 100644 docs/404.html delete mode 100644 docs/CNAME delete mode 100644 docs/assets/app.DeJiVmBc.js delete mode 100644 docs/assets/chunks/@localSearchIndexroot.DQCfcpak.js delete mode 100644 docs/assets/chunks/VPLocalSearchBox.DIqEGPXK.js delete mode 100644 docs/assets/chunks/framework.BXgR76oC.js delete mode 100644 docs/assets/chunks/theme.BfZ7hXNa.js delete mode 100644 docs/assets/guide_auth.md.DNA7JhY7.js delete mode 100644 docs/assets/guide_auth.md.DNA7JhY7.lean.js delete mode 100644 docs/assets/guide_github-app-setup.md.ZPvLDsvt.js delete mode 100644 docs/assets/guide_github-app-setup.md.ZPvLDsvt.lean.js delete mode 100644 docs/assets/guide_install.md.ByQAA8QU.js delete mode 100644 docs/assets/guide_install.md.ByQAA8QU.lean.js delete mode 100644 docs/assets/guide_maintainers.md.CGSokUpu.js delete mode 100644 docs/assets/guide_maintainers.md.CGSokUpu.lean.js delete mode 100644 docs/assets/guide_mcp.md.DK8zvHnS.js delete mode 100644 docs/assets/guide_mcp.md.DK8zvHnS.lean.js delete mode 100644 docs/assets/guide_miners.md.BeaGERAQ.js delete mode 100644 docs/assets/guide_miners.md.BeaGERAQ.lean.js delete mode 100644 docs/assets/index.md.BKalGx3J.js delete mode 100644 docs/assets/index.md.BKalGx3J.lean.js delete mode 100644 docs/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 delete mode 100644 docs/assets/inter-italic-cyrillic.D7dRslh9.woff2 delete mode 100644 docs/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 delete mode 100644 docs/assets/inter-italic-greek.DNcpQ8QC.woff2 delete mode 100644 docs/assets/inter-italic-latin-ext.DytegdRQ.woff2 delete mode 100644 docs/assets/inter-italic-latin.COaG5lWR.woff2 delete mode 100644 docs/assets/inter-italic-vietnamese.BI5UxJD-.woff2 delete mode 100644 docs/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 delete mode 100644 docs/assets/inter-roman-cyrillic.CD0kT8R4.woff2 delete mode 100644 docs/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2 delete mode 100644 docs/assets/inter-roman-greek.Dsf7YjP7.woff2 delete mode 100644 docs/assets/inter-roman-latin-ext.Dl_ayf4-.woff2 delete mode 100644 docs/assets/inter-roman-latin.Cy4MYw_J.woff2 delete mode 100644 docs/assets/inter-roman-vietnamese.CpqCnS2H.woff2 delete mode 100644 docs/assets/reference_api.md.CvVunwm0.js delete mode 100644 docs/assets/reference_api.md.CvVunwm0.lean.js delete mode 100644 docs/assets/security_privacy.md.CHSODDHk.js delete mode 100644 docs/assets/security_privacy.md.CHSODDHk.lean.js delete mode 100644 docs/assets/style.DbhuNsMp.css delete mode 100644 docs/assets/troubleshooting.md.BAr9iojM.js delete mode 100644 docs/assets/troubleshooting.md.BAr9iojM.lean.js delete mode 100644 docs/guide/auth.html delete mode 100644 docs/guide/github-app-setup.html delete mode 100644 docs/guide/install.html delete mode 100644 docs/guide/maintainers.html delete mode 100644 docs/guide/mcp.html delete mode 100644 docs/guide/miners.html delete mode 100644 docs/hashmap.json delete mode 100644 docs/index.html delete mode 100644 docs/logo.svg delete mode 100644 docs/reference/api.html delete mode 100644 docs/security/privacy.html delete mode 100644 docs/troubleshooting.html delete mode 100644 docs/vp-icons.css create mode 100644 migrations/0009_github_app_visibility.sql create mode 100644 src/github/labels.ts create mode 100644 test/unit/github-labels.test.ts diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 743dc283b2..49a9c08678 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -26,4 +26,4 @@ body: - label: This is backend-only. - label: This does not require storing user PATs. - label: This does not expose wallet details, raw trust scores, or private rankings publicly. - - label: This does not auto-label, auto-close, or auto-merge contributor work. + - label: This does not auto-close, auto-merge, or rewrite contributor work. diff --git a/README.md b/README.md index 2e0f678305..d4517f1878 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Gittensory is a backend-only intelligence layer for Gittensor registered reposit It helps miners and contributors make better decisions before they open work, and it helps maintainers review Gittensor-driven PRs with less noise. The product is the signal: role-aware contributor context, official Gittensor stats, local MCP preflight, queue health, collision risk, reviewability, and repo configuration quality. -Gittensory is not a Gittensor frontend, not a public leaderboard, and not an auto-label/auto-close bot. +Gittensory is not a Gittensor frontend, not a public leaderboard, and not an auto-close or auto-merge bot. ## What It Does @@ -12,14 +12,14 @@ Gittensory is not a Gittensor frontend, not a public leaderboard, and not an aut - Analyzes local branches through the MCP wrapper without uploading source contents. - Explains private reward/risk context: score blockers, open PR pressure, lane fit, duplicate risk, credibility assumptions, and maintainer friction. - Generates public-safe PR packets that help contributors write cleaner submissions. -- Gives maintainers private PR reviewability packets and advisory check runs. +- Gives maintainers private PR reviewability packets through the API/MCP, while the GitHub App stays public-safe. - Tracks repository intelligence: lane correctness, registry changes, queue health, label/config quality, collisions, bounties, and sync fidelity. ## Surfaces - Worker API: Cloudflare Workers + Hono + D1 + Queues. - MCP package: `@jsonbored/gittensory-mcp`, a local stdio wrapper for coding agents. -- GitHub App: check runs and optional sanitized sticky PR comments. +- GitHub App: quiet PR inspection, public-safe sticky comments, and maintainer-configured labels only for officially confirmed Gittensor miners. - Docs site: VitePress under `site/`, deployed at `https://gittensory.aethereal.dev/`. ## MCP Install @@ -128,13 +128,12 @@ Internal job routes are protected by `INTERNAL_JOB_TOKEN`. Required repository permissions: - Metadata: read -- Checks: write - Pull requests: read -- Issues: read +- Issues: write Optional repository permission: -- Issues: write, only when public-safe sticky PR comments are enabled. +- Checks: write, only when minimal check runs are explicitly enabled. Required events: @@ -144,6 +143,8 @@ Required events: If GitHub shows `Installation target`, select it. Gittensory should not block install health on event names that GitHub does not show in the app UI. +Default GitHub App behavior is low-noise: non-miner, bot, and maintainer-associated PR authors produce no public output. Confirmed Gittensor miners get one sticky public-safe PR comment and the configured label, defaulting to `gittensor`. Private reviewability, scoring, wallet, hotkey, and reward/risk context never appears in public GitHub comments or checks. + ## Docs ```sh diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index fb9fd49543..0000000000 --- a/docs/404.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - 404 | Gittensory - - - - - - - - - - - - - - - - - -
- - - - \ No newline at end of file diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index ccf3f210e9..0000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -gittensory.aethereal.dev diff --git a/docs/assets/app.DeJiVmBc.js b/docs/assets/app.DeJiVmBc.js deleted file mode 100644 index fe925665c6..0000000000 --- a/docs/assets/app.DeJiVmBc.js +++ /dev/null @@ -1 +0,0 @@ -import{t as p}from"./chunks/theme.BfZ7hXNa.js";import{v as o,aq as i,R as u,w as c,p as l,a as f,C as d,a3 as m,k as h,U as g,l as A,r as v,ae as w,O as C,aw as y,aj as P,ad as R,ac as b,u as E}from"./chunks/framework.BXgR76oC.js";function r(e){if(e.extends){const t=r(e.extends);return{...t,...e,async enhanceApp(a){t.enhanceApp&&await t.enhanceApp(a),e.enhanceApp&&await e.enhanceApp(a)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:t,dir:a}=w();return C(()=>{y(()=>{document.documentElement.lang=t.value,document.documentElement.dir=a.value})}),e.value.router.prefetchLinks&&P(),R(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),t=j();t.provide(u,e);const a=c(e.route);return t.provide(l,a),t.component("Content",f),t.component("ClientOnly",d),Object.defineProperties(t.config.globalProperties,{$frontmatter:{get(){return a.frontmatter.value}},$params:{get(){return a.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:t,router:e,siteData:m}),{app:t,router:e,data:a}}function j(){return A(S)}function D(){let e=o;return h(t=>{let a=g(t),s=null;return a&&(e&&(a=a.replace(/\.js$/,".lean.js")),s=import(a)),o&&(e=!1),s},n.NotFound)}o&&T().then(({app:e,router:t,data:a})=>{t.go(location.href,{initialLoad:!0}).then(()=>{i(t.route,a.site),e.mount("#app")})});export{T as createApp}; diff --git a/docs/assets/chunks/@localSearchIndexroot.DQCfcpak.js b/docs/assets/chunks/@localSearchIndexroot.DQCfcpak.js deleted file mode 100644 index 77e5670a91..0000000000 --- a/docs/assets/chunks/@localSearchIndexroot.DQCfcpak.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":54,"nextId":54,"documentIds":{"0":"/guide/auth#auth","1":"/guide/auth#mcp-user-auth","2":"/guide/auth#non-interactive-bootstrap","3":"/guide/auth#check-auth-state","4":"/guide/auth#logout","5":"/guide/auth#static-tokens","6":"/guide/github-app-setup#github-app-setup","7":"/guide/github-app-setup#basic-fields","8":"/guide/github-app-setup#required-repository-permissions","9":"/guide/github-app-setup#required-events","10":"/guide/github-app-setup#install-or-repair","11":"/guide/github-app-setup#marketplace-readiness","12":"/guide/install#install","13":"/guide/install#public-npm","14":"/guide/install#local-checkout","15":"/guide/install#verify-the-install","16":"/guide/install#privacy-defaults","17":"/guide/maintainers#for-maintainers","18":"/guide/maintainers#github-app-surface","19":"/guide/maintainers#reviewability-actions","20":"/guide/maintainers#public-comments","21":"/guide/maintainers#repo-owner-signals","22":"/guide/mcp#mcp","23":"/guide/mcp#generate-client-config","24":"/guide/mcp#codex","25":"/guide/mcp#claude-desktop","26":"/guide/mcp#cursor","27":"/guide/mcp#tools","28":"/guide/mcp#runtime-rules","29":"/guide/miners#for-miners","30":"/guide/miners#what-it-answers","31":"/guide/miners#branch-analysis","32":"/guide/miners#preflight","33":"/guide/miners#how-this-helps","34":"/reference/api#api-reference","35":"/reference/api#contributor-apis","36":"/reference/api#repo-apis","37":"/reference/api#local-and-preflight-apis","38":"/reference/api#ops-apis","39":"/reference/api#mcp-endpoint","40":"/security/privacy#privacy-and-security","41":"/security/privacy#no-pat-storage","42":"/security/privacy#no-source-upload","43":"/security/privacy#public-output-boundaries","44":"/security/privacy#rate-limiting","45":"/security/privacy#github-app-boundaries","46":"/troubleshooting#troubleshooting","47":"/troubleshooting#gittensory-mcp-command-not-found","48":"/troubleshooting#login-fails","49":"/troubleshooting#session-expired","50":"/troubleshooting#source-upload-error","51":"/troubleshooting#github-app-installation-needs-attention","52":"/troubleshooting#rate-limited","53":"/troubleshooting#stale-decision-pack"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,14],"1":[3,1,41],"2":[3,1,31],"3":[3,1,7],"4":[1,1,16],"5":[2,1,23],"6":[3,1,13],"7":[2,3,56],"8":[3,3,53],"9":[2,3,39],"10":[3,3,48],"11":[2,3,31],"12":[1,1,15],"13":[2,1,41],"14":[2,1,24],"15":[3,1,35],"16":[2,1,38],"17":[2,1,12],"18":[3,2,41],"19":[2,2,31],"20":[2,2,40],"21":[3,2,28],"22":[1,1,26],"23":[3,1,31],"24":[1,1,9],"25":[2,1,8],"26":[1,1,8],"27":[1,1,36],"28":[2,1,37],"29":[2,1,14],"30":[3,2,51],"31":[2,2,97],"32":[1,2,39],"33":[3,2,53],"34":[2,1,45],"35":[2,2,36],"36":[2,2,30],"37":[4,2,19],"38":[2,2,33],"39":[2,2,21],"40":[3,1,11],"41":[3,3,23],"42":[3,3,39],"43":[3,3,36],"44":[2,3,31],"45":[3,3,18],"46":[1,1,1],"47":[5,1,32],"48":[2,1,22],"49":[2,1,10],"50":[3,1,21],"51":[5,1,41],"52":[2,1,20],"53":[3,1,18]},"averageFieldLength":[2.3333333333333335,1.6111111111111112,29.500000000000004],"storedFields":{"0":{"title":"Auth","titles":[]},"1":{"title":"MCP User Auth","titles":["Auth"]},"2":{"title":"Non-Interactive Bootstrap","titles":["Auth"]},"3":{"title":"Check Auth State","titles":["Auth"]},"4":{"title":"Logout","titles":["Auth"]},"5":{"title":"Static Tokens","titles":["Auth"]},"6":{"title":"GitHub App Setup","titles":[]},"7":{"title":"Basic Fields","titles":["GitHub App Setup"]},"8":{"title":"Required Repository Permissions","titles":["GitHub App Setup"]},"9":{"title":"Required Events","titles":["GitHub App Setup"]},"10":{"title":"Install Or Repair","titles":["GitHub App Setup"]},"11":{"title":"Marketplace Readiness","titles":["GitHub App Setup"]},"12":{"title":"Install","titles":[]},"13":{"title":"Public npm","titles":["Install"]},"14":{"title":"Local checkout","titles":["Install"]},"15":{"title":"Verify The Install","titles":["Install"]},"16":{"title":"Privacy Defaults","titles":["Install"]},"17":{"title":"For Maintainers","titles":[]},"18":{"title":"GitHub App Surface","titles":["For Maintainers"]},"19":{"title":"Reviewability Actions","titles":["For Maintainers"]},"20":{"title":"Public Comments","titles":["For Maintainers"]},"21":{"title":"Repo Owner Signals","titles":["For Maintainers"]},"22":{"title":"MCP","titles":[]},"23":{"title":"Generate Client Config","titles":["MCP"]},"24":{"title":"Codex","titles":["MCP"]},"25":{"title":"Claude Desktop","titles":["MCP"]},"26":{"title":"Cursor","titles":["MCP"]},"27":{"title":"Tools","titles":["MCP"]},"28":{"title":"Runtime Rules","titles":["MCP"]},"29":{"title":"For Miners","titles":[]},"30":{"title":"What It Answers","titles":["For Miners"]},"31":{"title":"Branch Analysis","titles":["For Miners"]},"32":{"title":"Preflight","titles":["For Miners"]},"33":{"title":"How This Helps","titles":["For Miners"]},"34":{"title":"API Reference","titles":[]},"35":{"title":"Contributor APIs","titles":["API Reference"]},"36":{"title":"Repo APIs","titles":["API Reference"]},"37":{"title":"Local And Preflight APIs","titles":["API Reference"]},"38":{"title":"Ops APIs","titles":["API Reference"]},"39":{"title":"MCP Endpoint","titles":["API Reference"]},"40":{"title":"Privacy And Security","titles":[]},"41":{"title":"No PAT Storage","titles":["Privacy And Security"]},"42":{"title":"No Source Upload","titles":["Privacy And Security"]},"43":{"title":"Public Output Boundaries","titles":["Privacy And Security"]},"44":{"title":"Rate Limiting","titles":["Privacy And Security"]},"45":{"title":"GitHub App Boundaries","titles":["Privacy And Security"]},"46":{"title":"Troubleshooting","titles":[]},"47":{"title":"gittensory-mcp: command not found","titles":["Troubleshooting"]},"48":{"title":"Login Fails","titles":["Troubleshooting"]},"49":{"title":"Session Expired","titles":["Troubleshooting"]},"50":{"title":"Source Upload Error","titles":["Troubleshooting"]},"51":{"title":"GitHub App Installation Needs Attention","titles":["Troubleshooting"]},"52":{"title":"Rate Limited","titles":["Troubleshooting"]},"53":{"title":"Stale Decision Pack","titles":["Troubleshooting"]}},"dirtCount":0,"index":[["429",{"2":{"44":1,"52":1}}],["known",{"2":{"36":1}}],["know",{"2":{"32":1}}],["8",{"2":{"31":1}}],["0",{"2":{"31":2}}],["3",{"2":{"31":1}}],["=",{"2":{"24":2}}],["queue",{"2":{"18":1,"21":1,"31":1,"53":1}}],["json",{"2":{"15":1,"25":1,"26":1,"31":2,"32":1,"34":1}}],["jsonbored",{"2":{"13":1,"14":2,"47":1}}],["job",{"2":{"10":1}}],["jobs",{"2":{"5":1,"10":1}}],["x",{"2":{"10":1}}],["number",{"2":{"36":2}}],["next",{"2":{"19":1,"20":1,"27":1,"29":1,"31":1}}],["need",{"2":{"32":1}}],["needs",{"0":{"51":1},"2":{"19":1,"53":1}}],["needing",{"2":{"10":1}}],["needed",{"2":{"8":2,"11":1}}],["name",{"2":{"16":1,"42":2}}],["names",{"2":{"9":1}}],["npm",{"0":{"13":1},"2":{"12":1,"14":2,"39":1}}],["no",{"0":{"41":1,"42":1},"2":{"28":1}}],["now",{"2":{"19":1,"30":1}}],["noisy",{"2":{"17":1}}],["normal",{"2":{"5":1,"9":1,"12":1,"30":1,"44":1,"52":1}}],["non",{"0":{"2":1}}],["note",{"2":{"31":1}}],["notes",{"2":{"20":1,"31":1}}],["not",{"0":{"47":1},"2":{"1":1,"2":1,"7":1,"9":2,"11":1,"16":1,"19":1,"20":1,"23":2,"28":1,"33":1,"40":1,"42":1,"43":1,"45":1,"47":2}}],["vs",{"2":{"31":1,"33":1}}],["var",{"2":{"50":1}}],["variant",{"2":{"27":1}}],["validation",{"2":{"16":1,"33":1,"42":1}}],["valid",{"2":{"11":1}}],["value",{"2":{"7":2,"52":1}}],["values",{"2":{"7":1}}],["visible",{"2":{"15":1}}],["verify",{"0":{"15":1}}],["verification",{"2":{"7":1}}],["v1",{"2":{"7":1,"10":2,"16":1,"28":1,"35":3,"36":5,"37":3,"38":4,"42":1,"50":1,"51":1}}],["using",{"2":{"35":1}}],["useful",{"2":{"27":1,"32":1}}],["uses",{"2":{"13":1,"41":1,"44":1}}],["use",{"2":{"5":1,"7":3,"12":1,"13":1,"14":1,"21":1,"23":1,"32":1,"34":1,"47":1}}],["user",{"0":{"1":1},"2":{"1":2,"6":1,"31":1,"39":1}}],["users",{"2":{"0":1,"5":1}}],["underlying",{"2":{"31":1}}],["unknown",{"2":{"30":1}}],["until",{"2":{"11":1}}],["up",{"2":{"30":1}}],["uploaded",{"2":{"42":1}}],["upload",{"0":{"42":1,"50":1},"2":{"15":1,"16":2,"28":1,"42":1,"50":3}}],["update",{"2":{"8":1,"10":1,"51":1}}],["ui",{"2":{"9":1}}],["url=",{"2":{"34":1,"51":1}}],["url",{"2":{"7":4,"10":2,"11":1,"34":1,"51":1}}],["have",{"2":{"52":1}}],["handles",{"2":{"40":1}}],["hashed",{"2":{"1":1,"41":1}}],["has",{"2":{"0":1,"12":1,"53":1}}],["http",{"2":{"39":1}}],["https",{"2":{"7":1,"14":1,"34":1,"51":1}}],["history",{"2":{"33":1}}],["hidden",{"2":{"9":1}}],["head",{"2":{"42":1}}],["healthy",{"2":{"10":1}}],["health",{"2":{"9":1,"10":3,"15":1,"21":3,"34":1,"38":4,"51":3}}],["helps",{"0":{"33":1},"2":{"29":1}}],["how",{"0":{"33":1}}],["hotkey",{"2":{"28":1}}],["hotkeys",{"2":{"20":1,"43":1}}],["homepage",{"2":{"7":1}}],["hygiene",{"2":{"20":1}}],["h",{"2":{"10":2,"34":1,"51":1}}],["boundaries",{"0":{"43":1,"45":1}}],["bootstrap",{"0":{"2":1},"2":{"5":1}}],["bundle",{"2":{"36":1}}],["burden",{"2":{"32":1}}],["by",{"2":{"20":1,"31":1}}],["binary",{"2":{"15":1}}],["branch",{"0":{"31":1},"2":{"15":1,"16":1,"27":3,"30":1,"31":2,"32":1,"37":2,"42":2,"44":1}}],["blocked",{"2":{"31":1,"33":1}}],["blockers",{"2":{"27":2,"31":1}}],["blocks",{"2":{"30":1}}],["block",{"2":{"9":1}}],["backfill",{"2":{"21":1}}],["backend",{"2":{"5":1,"7":1,"41":1}}],["base",{"2":{"16":1,"31":1,"42":1}}],["basic",{"0":{"7":1}}],["because",{"2":{"43":1}}],["be",{"2":{"31":1,"48":1}}],["before",{"2":{"11":1,"30":1,"32":1}}],["beta",{"2":{"5":1}}],["bearer",{"2":{"5":1,"10":2,"34":2,"51":1}}],["planned",{"2":{"37":1}}],["pick",{"2":{"33":1}}],["pending",{"2":{"31":1}}],["permission",{"2":{"8":2,"38":1,"51":1}}],["permissions",{"0":{"8":1},"2":{"10":2,"51":1}}],["poll",{"2":{"34":1}}],["policy",{"2":{"11":1}}],["potential",{"2":{"31":1}}],["point",{"2":{"19":2}}],["post",{"2":{"10":1,"37":3,"39":1}}],["possible",{"2":{"4":1}}],["purpose",{"2":{"35":1,"36":1,"37":1,"38":1}}],["public",{"0":{"13":1,"20":1,"43":1},"2":{"8":1,"11":2,"12":1,"18":2,"20":3,"28":2,"30":1,"31":1,"34":1,"43":5}}],["pulls",{"2":{"36":2}}],["pull",{"2":{"8":1,"9":1}}],["profile",{"2":{"35":2}}],["protected",{"2":{"34":1}}],["promise",{"2":{"33":1}}],["projected",{"2":{"31":2}}],["preferred",{"2":{"39":1}}],["preflight",{"0":{"32":1,"37":1},"2":{"27":2,"31":1,"32":1,"37":4}}],["presence",{"2":{"38":1}}],["pressure",{"2":{"33":1}}],["prepare",{"2":{"27":1}}],["preview",{"2":{"27":1,"44":1}}],["print",{"2":{"23":4}}],["privacy",{"0":{"16":1,"40":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"11":2}}],["private",{"2":{"5":1,"7":1,"22":1,"28":1,"31":1,"35":1,"36":1,"40":1,"43":2}}],["prs",{"2":{"18":1,"19":1,"30":1,"31":3,"33":1}}],["pr",{"2":{"8":2,"18":1,"20":1,"27":2,"28":1,"30":2,"31":2,"32":1,"33":2,"36":2,"37":2,"43":1}}],["payload",{"2":{"35":1}}],["payouts",{"2":{"33":1}}],["packet",{"2":{"27":1,"30":1,"31":1,"36":2}}],["packets",{"2":{"27":1,"28":1,"43":1}}],["pack",{"0":{"53":1},"2":{"27":1,"35":2,"44":1,"53":1}}],["packs",{"2":{"27":1}}],["package",{"2":{"22":1}}],["pat",{"0":{"41":1}}],["path",{"2":{"23":2,"47":2}}],["paths",{"2":{"12":1,"16":1,"42":1}}],["pats",{"2":{"1":1}}],["page",{"2":{"11":1}}],["pages",{"2":{"7":2}}],["pass",{"2":{"2":1,"31":1}}],["work",{"2":{"30":1,"32":1,"33":2,"45":1}}],["workspace",{"2":{"14":1,"47":1}}],["withdraw",{"2":{"33":1}}],["with",{"2":{"22":1,"29":1,"32":1,"44":1}}],["wip",{"2":{"20":1,"30":1}}],["wallets",{"2":{"40":1,"43":1}}],["wallet",{"2":{"20":1,"28":1}}],["watch",{"2":{"19":1}}],["warnings",{"2":{"31":1}}],["warning",{"2":{"10":1}}],["write",{"2":{"8":2}}],["wrapper",{"2":{"2":1,"27":1,"28":1,"39":1}}],["webhooks",{"2":{"7":1}}],["webhook",{"2":{"7":5,"8":1,"11":1,"34":1}}],["what",{"0":{"30":1},"2":{"29":1,"30":2,"31":1}}],["where",{"2":{"33":1}}],["whether",{"2":{"15":1,"32":1}}],["when",{"2":{"4":1,"14":1,"20":1,"31":2,"32":1,"34":1,"35":1}}],["why",{"2":{"8":2}}],["whoami",{"2":{"3":1,"15":1}}],["globally",{"2":{"47":1}}],["gates",{"2":{"31":1}}],["give",{"2":{"30":1}}],["gittensor",{"2":{"17":1,"35":1}}],["gittensory",{"0":{"47":1},"2":{"0":1,"1":3,"2":2,"3":2,"7":3,"8":1,"9":1,"10":1,"12":1,"13":5,"14":6,"15":2,"16":2,"17":1,"18":1,"19":1,"21":1,"22":2,"23":2,"24":2,"25":2,"26":2,"27":8,"29":1,"31":1,"33":1,"34":2,"40":1,"41":2,"42":1,"44":1,"47":1,"48":2,"50":2,"51":2,"53":1}}],["git",{"2":{"14":1,"15":1,"31":1}}],["github",{"0":{"6":1,"18":1,"45":1,"51":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1},"2":{"0":2,"1":4,"2":3,"5":1,"6":2,"7":3,"9":1,"10":2,"13":1,"14":1,"15":1,"18":1,"21":1,"31":2,"32":1,"34":1,"38":2,"41":2,"45":1,"48":2,"51":1}}],["guesswork",{"2":{"29":1}}],["get",{"2":{"27":1,"35":3,"36":5,"38":4}}],["generate",{"0":{"23":1}}],["generated",{"2":{"7":1}}],["g",{"2":{"13":1}}],["gh",{"2":{"2":1}}],["$internal",{"2":{"10":1}}],["$gittensory",{"2":{"10":3,"34":2,"51":2}}],["$",{"2":{"2":1,"7":1}}],["error",{"0":{"50":1},"2":{"50":1}}],["eligibility",{"2":{"33":1}}],["especially",{"2":{"32":1}}],["estimates",{"2":{"20":1,"28":1,"43":2}}],["effective",{"2":{"31":1}}],["evidence",{"2":{"29":1,"33":1,"35":1}}],["event",{"2":{"9":2,"38":1}}],["events",{"0":{"9":1},"2":{"8":2,"9":1,"10":1,"51":1}}],["edit",{"2":{"23":1}}],["enqueued",{"2":{"53":1}}],["env",{"2":{"50":1}}],["endpoint",{"0":{"39":1},"2":{"35":1,"36":1,"37":1,"38":1,"51":1}}],["endpoints",{"2":{"34":1}}],["enabled",{"2":{"7":3,"8":1,"20":1,"48":1}}],["enough",{"2":{"2":1}}],["exact",{"2":{"38":1}}],["example",{"2":{"34":1,"51":1}}],["extracted",{"2":{"35":1}}],["except",{"2":{"34":1}}],["exchanged",{"2":{"2":1}}],["exchanges",{"2":{"1":1,"41":1}}],["expired",{"0":{"49":1}}],["expiry",{"2":{"1":1}}],["expensive",{"2":{"44":1,"52":1}}],["expected",{"2":{"31":2}}],["explicitly",{"2":{"31":1}}],["explains",{"2":{"33":1}}],["explain",{"2":{"27":2}}],["exposes",{"2":{"27":1,"39":1}}],["drains",{"2":{"53":1}}],["driven",{"2":{"17":1}}],["data",{"2":{"20":1}}],["diff",{"2":{"31":1,"37":2}}],["direct",{"2":{"30":1,"33":2}}],["directory",{"2":{"13":1}}],["directly",{"2":{"8":1}}],["diagnostics",{"2":{"11":2}}],["discovery",{"2":{"8":1,"30":1,"33":2}}],["duplicate",{"2":{"8":1,"18":1,"19":1,"20":1,"30":1,"33":1}}],["deletions",{"2":{"42":1}}],["delivery",{"2":{"34":1}}],["decide",{"2":{"29":1}}],["decision",{"0":{"53":1},"2":{"27":3,"35":5,"44":1,"53":1}}],["degraded",{"2":{"21":1}}],["default",{"2":{"20":1}}],["defaults",{"0":{"16":1},"2":{"15":1}}],["detailed",{"2":{"18":2}}],["desktop",{"0":{"25":1},"2":{"13":1}}],["deployed",{"2":{"7":1}}],["developing",{"2":{"14":1}}],["development",{"2":{"12":1}}],["dev",{"2":{"7":1}}],["device",{"2":{"1":1,"7":1,"13":1,"41":1,"48":1}}],["domain",{"2":{"7":1}}],["document",{"2":{"34":1}}],["docs",{"2":{"7":2,"11":1}}],["doctor",{"2":{"3":1,"15":2,"47":1,"48":1}}],["do",{"2":{"7":1,"11":1,"23":1,"28":1,"29":1}}],["does",{"2":{"1":1,"16":1,"23":1,"30":1,"33":1,"45":1,"47":1}}],["mode",{"2":{"50":1}}],["more",{"2":{"30":1}}],["missing",{"2":{"32":2,"51":1}}],["miner",{"2":{"35":1}}],["miners",{"0":{"29":1},"1":{"30":1,"31":1,"32":1,"33":1},"2":{"29":1}}],["mint",{"2":{"2":1}}],["my",{"2":{"30":1}}],["must",{"2":{"20":1,"43":1,"48":1}}],["merge",{"2":{"31":1,"45":1}}],["merged",{"2":{"31":1}}],["meant",{"2":{"17":1}}],["messages",{"2":{"16":1,"42":1}}],["metadata",{"2":{"1":1,"8":2,"15":1,"16":1,"36":1,"37":3,"42":1,"44":1}}],["may",{"2":{"31":1}}],["maps",{"2":{"19":1}}],["makes",{"2":{"33":1}}],["make",{"2":{"17":1}}],["marketplace",{"0":{"11":1},"2":{"11":1}}],["maintainers",{"0":{"17":1},"1":{"18":1,"19":1,"20":1,"21":1}}],["maintainer",{"2":{"6":1,"18":1,"19":2,"20":1,"21":1,"30":2,"31":1,"32":1,"36":3}}],["mcpservers",{"2":{"25":1,"26":1}}],["mcp",{"0":{"1":1,"22":1,"39":1,"47":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"2":{"0":1,"1":1,"2":2,"3":3,"4":1,"5":1,"6":1,"13":5,"14":3,"15":4,"16":1,"22":1,"23":3,"24":2,"25":1,"26":1,"28":1,"31":2,"32":1,"35":1,"37":1,"39":3,"41":1,"42":1,"43":1,"44":1,"47":3,"48":2,"49":1}}],["improve",{"2":{"33":1}}],["immediately",{"2":{"2":1}}],["i",{"2":{"30":3}}],["itself",{"2":{"14":1}}],["it",{"0":{"30":1},"2":{"9":1,"16":1,"22":1,"31":1,"32":1,"33":1,"45":1}}],["if",{"2":{"8":2,"9":1,"11":1,"23":1,"31":1,"47":2,"50":1,"52":1,"53":1}}],["issue",{"2":{"8":2,"16":1,"18":1,"30":1,"32":1,"33":2,"42":1}}],["issues",{"2":{"8":2,"9":1}}],["is",{"2":{"2":1,"6":2,"7":1,"15":1,"16":1,"17":1,"18":1,"19":2,"22":1,"30":2,"31":1,"32":2,"34":1,"39":1,"45":1,"47":1}}],["increase",{"2":{"32":1}}],["includes",{"2":{"31":1}}],["include",{"2":{"20":2,"28":1,"43":2}}],["inflated",{"2":{"31":1}}],["inactive",{"2":{"30":1}}],["inherit",{"2":{"23":1,"47":1}}],["init",{"2":{"23":3}}],["intentionally",{"2":{"49":1}}],["intelligence",{"2":{"36":2,"40":1}}],["internal",{"2":{"5":1,"10":1,"35":1}}],["interactive",{"0":{"2":1}}],["intake",{"2":{"21":1}}],["instead",{"2":{"29":1}}],["installed",{"2":{"36":1,"47":1}}],["install",{"0":{"10":1,"12":1,"15":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"6":1,"11":2,"12":1,"13":1,"14":1}}],["installations",{"2":{"10":1,"38":3,"51":1}}],["installation",{"0":{"51":1},"2":{"0":1,"9":2,"10":3,"21":1,"38":2,"51":3}}],["inspect",{"2":{"10":1,"21":1}}],["in",{"2":{"7":1,"9":1,"13":1,"18":1,"28":2,"30":1,"33":1,"42":1,"47":1,"50":1,"51":1}}],["identify",{"2":{"19":1}}],["identity",{"2":{"8":1}}],["id",{"2":{"1":1,"38":1,"51":1}}],["labels",{"2":{"31":1}}],["label",{"2":{"21":1,"45":1}}],["land",{"2":{"33":1}}],["language",{"2":{"20":1,"43":1}}],["lane",{"2":{"18":1,"19":1,"21":1,"30":7,"31":1,"33":2}}],["less",{"2":{"17":1}}],["limits",{"2":{"52":1}}],["limited",{"0":{"52":1},"2":{"44":1}}],["limiting",{"0":{"44":1}}],["limit",{"2":{"38":1}}],["live",{"2":{"34":1}}],["lived",{"2":{"1":1,"13":1,"49":1}}],["likely",{"2":{"15":1,"19":1,"32":1}}],["linked",{"2":{"16":1,"18":1,"32":1,"42":1}}],["link",{"2":{"14":1,"47":1}}],["linkage",{"2":{"8":1}}],["look",{"2":{"30":1}}],["lowest",{"2":{"19":1}}],["logout",{"0":{"4":1},"2":{"4":2}}],["login",{"0":{"48":1},"2":{"1":2,"2":1,"13":2,"14":1,"15":2,"31":4,"32":2,"35":3,"41":1,"49":1}}],["long",{"2":{"2":1}}],["locally",{"2":{"22":1}}],["local",{"0":{"14":1,"37":1},"2":{"2":1,"4":1,"12":1,"13":1,"15":1,"27":5,"28":1,"31":1,"37":4,"39":1,"42":1}}],["of",{"2":{"29":1}}],["official",{"2":{"35":1}}],["off",{"2":{"20":1}}],["outputs",{"2":{"43":1}}],["output",{"0":{"43":1},"2":{"28":1}}],["over",{"2":{"22":1,"39":1}}],["owners",{"2":{"21":1}}],["owner",{"0":{"21":1},"2":{"35":1,"36":4}}],["other",{"2":{"13":1}}],["oriented",{"2":{"37":1}}],["origin",{"2":{"7":1,"34":1,"51":1}}],["or",{"0":{"10":1},"2":{"10":1,"13":1,"19":1,"20":2,"21":1,"28":1,"30":3,"32":1,"33":2,"40":1,"45":1,"48":1}}],["ops",{"0":{"38":1}}],["openapi",{"2":{"34":2}}],["opening",{"2":{"30":1,"32":1}}],["open",{"2":{"30":1,"31":2,"33":1}}],["operations",{"2":{"5":1}}],["optimization",{"2":{"20":1}}],["optional",{"2":{"8":1,"18":1}}],["opt",{"2":{"18":1}}],["only",{"2":{"2":1,"5":1,"7":1,"8":2,"16":1,"28":1,"33":1,"41":1,"42":1,"45":1}}],["on",{"2":{"1":1,"9":1,"18":1,"48":1}}],["oauth",{"2":{"0":1,"5":1,"6":1,"41":1,"48":1}}],["credibility",{"2":{"31":2,"33":1}}],["creates",{"2":{"18":1}}],["create",{"2":{"8":1}}],["calls",{"2":{"22":1}}],["can",{"2":{"20":1,"21":1,"43":1}}],["canonical",{"2":{"18":1,"35":1,"36":1}}],["curl",{"2":{"34":1,"51":1}}],["current",{"2":{"27":2,"30":1,"31":3}}],["cursor",{"0":{"26":1},"2":{"13":1,"23":1}}],["cut",{"2":{"21":1}}],["cd",{"2":{"14":1}}],["changes",{"2":{"31":1}}],["change",{"2":{"27":1}}],["changed",{"2":{"10":1,"16":1,"42":1}}],["checkout",{"0":{"14":1},"2":{"12":1}}],["checks",{"2":{"8":1,"15":1}}],["check",{"0":{"3":1},"2":{"8":1,"10":1,"18":2,"48":1,"51":1}}],["clusters",{"2":{"33":1}}],["clean",{"2":{"30":1}}],["clear",{"2":{"11":1,"31":1}}],["classes",{"2":{"44":1}}],["clarity",{"2":{"21":1}}],["claude",{"0":{"25":1},"2":{"13":1,"23":1}}],["closed",{"2":{"42":1}}],["close",{"2":{"19":1,"45":1}}],["clone",{"2":{"14":1}}],["cloudflare",{"2":{"7":1}}],["clients",{"2":{"15":1,"35":1}}],["client",{"0":{"23":1},"2":{"13":1,"23":4,"47":2}}],["cli",{"2":{"1":1}}],["colliding",{"2":{"32":1}}],["collision",{"2":{"30":1}}],["coding",{"2":{"22":1}}],["codex",{"0":{"24":1},"2":{"13":1,"23":1}}],["code",{"2":{"1":1,"40":1}}],["counts",{"2":{"16":1}}],["comparison",{"2":{"27":1}}],["complete",{"2":{"11":1}}],["com",{"2":{"14":1}}],["commit",{"2":{"16":1,"42":1}}],["commands",{"2":{"23":1}}],["command",{"0":{"47":1},"2":{"13":1,"16":1,"23":1,"24":1,"25":1,"26":1,"47":2,"52":1}}],["comments",{"0":{"20":1},"2":{"8":1,"18":2,"20":3,"43":1}}],["contributors",{"2":{"19":1,"35":3}}],["contributor",{"0":{"35":1},"2":{"18":1,"20":1,"21":1,"22":1,"27":1,"30":1,"35":1,"45":1}}],["contribution",{"2":{"17":1,"20":1,"40":1}}],["contact",{"2":{"11":1}}],["contents",{"2":{"8":1,"16":1,"42":1}}],["context",{"2":{"8":1,"18":3,"20":1,"27":1,"31":2,"38":1}}],["configured",{"2":{"48":1}}],["configuration",{"2":{"21":1}}],["config",{"0":{"23":1},"2":{"4":1,"13":1,"23":1,"47":1}}],["your",{"2":{"13":1,"15":1,"22":1,"23":3,"31":2,"32":1,"33":1,"34":1,"47":2,"51":1}}],["you",{"2":{"1":1,"32":1,"50":1}}],["found",{"0":{"47":1}}],["for",{"0":{"17":1,"29":1},"1":{"18":1,"19":1,"20":1,"21":1,"30":1,"31":1,"32":1,"33":1},"2":{"0":2,"1":1,"2":1,"5":1,"7":2,"8":3,"12":2,"13":1,"22":1,"28":1,"30":1,"34":1,"35":1,"41":1,"48":1}}],["farming",{"2":{"43":1}}],["fails",{"0":{"48":1},"2":{"42":1}}],["facing",{"2":{"22":1}}],["freshness",{"2":{"31":1}}],["from",{"2":{"31":1,"35":1,"37":1}}],["friction",{"2":{"19":1,"33":1}}],["friendly",{"2":{"19":1}}],["full",{"2":{"16":1,"42":1}}],["future",{"2":{"8":1}}],["feature",{"2":{"8":1}}],["fix",{"2":{"51":1}}],["fidelity",{"2":{"38":2}}],["first",{"2":{"35":1}}],["fit",{"2":{"31":1,"33":2}}],["findings",{"2":{"31":1}}],["field",{"2":{"7":1}}],["fields",{"0":{"7":1}}],["files",{"2":{"8":1,"23":1}}],["file",{"2":{"4":1,"16":1,"42":1}}],["flow",{"2":{"1":1,"7":1,"11":2,"13":1,"17":1,"41":1,"48":1}}],["troubleshooting",{"0":{"46":1},"1":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1}}],["trust",{"2":{"20":1,"28":1,"43":1}}],["trigger",{"2":{"10":1}}],["tests",{"2":{"32":1}}],["terms",{"2":{"11":2}}],["temporary",{"2":{"5":1,"31":1}}],["target",{"2":{"9":1}}],["than",{"2":{"52":1}}],["that",{"2":{"9":1,"31":1,"33":1,"47":1}}],["this",{"0":{"33":1},"2":{"13":1,"14":1,"30":2,"32":1,"50":1}}],["through",{"2":{"8":1}}],["they",{"2":{"43":1}}],["there",{"2":{"30":1}}],["these",{"2":{"7":1,"23":1}}],["then",{"2":{"1":1,"47":1,"51":1}}],["the",{"0":{"15":1},"2":{"1":4,"2":4,"4":2,"6":3,"7":4,"8":2,"9":1,"10":5,"11":1,"13":1,"15":1,"18":4,"19":3,"22":3,"27":1,"28":1,"31":7,"33":1,"34":2,"35":1,"39":2,"41":3,"45":1,"47":1,"48":1,"51":3,"52":1,"53":1}}],["totals",{"2":{"38":1}}],["tools",{"0":{"27":1},"2":{"27":2,"44":1}}],["toml",{"2":{"24":1}}],["tokens",{"0":{"5":1},"2":{"5":1}}],["token",{"2":{"1":3,"2":6,"10":2,"13":1,"22":1,"34":2,"41":3,"51":1}}],["to",{"2":{"1":1,"2":1,"8":1,"9":1,"15":1,"17":1,"19":3,"21":1,"29":1,"31":1,"32":2}}],["two",{"2":{"0":1,"12":1}}],["snapshot",{"2":{"53":1}}],["snippet",{"2":{"23":1}}],["sync",{"2":{"38":2}}],["specific",{"2":{"35":1,"36":1}}],["split",{"2":{"30":1}}],["scenario",{"2":{"31":2}}],["scenarios",{"2":{"31":1}}],["scoring",{"2":{"44":1}}],["scoreability",{"2":{"30":1,"31":1,"33":1,"43":1}}],["score",{"2":{"20":1,"27":2,"28":3,"31":4,"36":1,"43":1}}],["scores",{"2":{"20":1,"43":1}}],["scopes",{"2":{"1":1}}],["source=true",{"2":{"16":1,"42":1}}],["source",{"0":{"42":1,"50":1},"2":{"15":1,"16":1,"28":1,"40":1,"42":1,"50":3}}],["some",{"2":{"9":1}}],["summary",{"2":{"38":1}}],["summaries",{"2":{"16":1,"42":1}}],["supplied",{"2":{"31":1}}],["support",{"2":{"11":2}}],["submit",{"2":{"11":1}}],["submission",{"2":{"11":1}}],["subscribe",{"2":{"9":1}}],["surface",{"0":{"18":1},"2":{"6":2,"18":1,"22":1,"39":1}}],["surfaces",{"2":{"0":1}}],["sanitized",{"2":{"18":1,"28":1}}],["safe",{"2":{"8":1,"18":1,"30":1,"31":1,"43":1}}],["same",{"2":{"7":1}}],["signal",{"2":{"38":2,"44":1}}],["signals",{"0":{"21":1},"2":{"8":1,"18":1}}],["side",{"2":{"1":2,"41":1}}],["ssl",{"2":{"7":1}}],["storage",{"0":{"41":1}}],["store",{"2":{"1":1}}],["stores",{"2":{"1":1,"2":1,"13":1,"41":1}}],["still",{"2":{"39":1}}],["sticky",{"2":{"8":1,"18":1}}],["style",{"2":{"39":1}}],["stricter",{"2":{"52":1}}],["strict",{"2":{"44":1}}],["streamable",{"2":{"39":1}}],["structured",{"2":{"16":1,"37":1}}],["steps",{"2":{"20":1}}],["step",{"2":{"19":1}}],["stdio",{"2":{"13":2,"14":1,"22":1,"24":1,"25":1,"26":1,"28":1}}],["start",{"2":{"34":1}}],["starts",{"2":{"1":1}}],["stale",{"0":{"53":1},"2":{"21":1,"33":1}}],["stay",{"2":{"20":1,"28":1}}],["stats",{"2":{"35":1}}],["static",{"0":{"5":1},"2":{"5":1,"7":1}}],["status",{"2":{"3":1,"13":1,"27":1,"38":1,"48":1}}],["state",{"0":{"3":1},"2":{"10":1,"15":1,"21":1,"31":1,"38":1}}],["see",{"2":{"50":1}}],["security",{"0":{"40":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1}}],["secrets",{"2":{"38":1}}],["secret",{"2":{"7":2}}],["segments",{"2":{"38":1}}],["service",{"2":{"38":1}}],["serves",{"2":{"7":1}}],["servers",{"2":{"24":1}}],["server",{"2":{"1":2,"41":1}}],["sends",{"2":{"16":1,"42":1}}],["selectable",{"2":{"9":1}}],["select",{"2":{"9":1,"10":1}}],["set",{"2":{"7":1}}],["setup",{"0":{"6":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1},"2":{"11":2}}],["sessions",{"2":{"49":1}}],["session",{"0":{"49":1},"2":{"1":3,"2":2,"4":1,"13":1,"22":1,"41":1}}],["shunset",{"2":{"50":1}}],["shaming",{"2":{"43":1}}],["shame",{"2":{"19":1}}],["shexport",{"2":{"34":1,"51":1}}],["shell",{"2":{"23":1,"47":1}}],["shgit",{"2":{"14":1}}],["shgittensory",{"2":{"1":1,"2":1,"3":1,"4":1,"15":1,"23":1,"31":2,"32":1,"47":1,"48":1,"49":1}}],["shnpm",{"2":{"13":1,"47":1}}],["shcurl",{"2":{"10":2}}],["shown",{"2":{"9":1}}],["shows",{"2":{"9":1,"31":1}}],["should",{"2":{"5":1,"9":1,"10":2,"30":2}}],["short",{"2":{"1":1,"13":1,"49":1}}],["right",{"2":{"30":1}}],["risk",{"2":{"20":1,"28":1,"30":1,"31":1,"33":1,"43":1}}],["rules",{"0":{"28":1}}],["runtime",{"0":{"28":1}}],["runs",{"2":{"18":1,"22":1}}],["run",{"2":{"1":1,"8":1,"10":1,"15":1,"18":1,"31":1,"49":1}}],["rate",{"0":{"44":1,"52":1},"2":{"38":1,"44":1}}],["ranked",{"2":{"31":1}}],["rank",{"2":{"27":1}}],["raw",{"2":{"20":1,"28":1,"43":1}}],["routes",{"2":{"44":1,"52":2}}],["route",{"2":{"44":1}}],["role",{"2":{"18":1,"31":1}}],["rows",{"2":{"9":1}}],["rebuild",{"2":{"53":1}}],["rejects",{"2":{"50":1}}],["rejected",{"2":{"16":1}}],["rewrite",{"2":{"45":1}}],["reward",{"2":{"20":1,"28":1,"31":1,"43":2}}],["retry",{"2":{"44":1,"47":1,"52":2,"53":1}}],["returns",{"2":{"52":1,"53":1}}],["return",{"2":{"44":1}}],["records",{"2":{"38":1}}],["recommendations",{"2":{"33":1}}],["registered",{"2":{"36":1}}],["registry",{"2":{"27":1}}],["rest",{"2":{"34":1}}],["responses",{"2":{"43":1,"44":1}}],["response",{"2":{"31":1}}],["reasoning",{"2":{"28":1,"31":1,"43":1}}],["readiness",{"0":{"11":1},"2":{"10":2,"21":1,"38":1}}],["reads",{"2":{"8":1}}],["read",{"2":{"8":4,"44":1,"52":1}}],["redirect",{"2":{"19":1}}],["reference",{"0":{"34":1},"1":{"35":1,"36":1,"37":1,"38":1,"39":1}}],["references",{"2":{"16":1,"42":1}}],["refs",{"2":{"16":1,"42":1}}],["refresh",{"2":{"10":2,"44":2,"51":1,"53":1}}],["reinstall",{"2":{"10":1}}],["reported",{"2":{"51":1,"52":1}}],["report",{"2":{"18":1}}],["repo",{"0":{"21":1,"36":1},"2":{"18":1,"21":2,"27":2,"30":2,"31":1,"33":1,"35":2,"36":4,"38":1,"42":1}}],["repos",{"2":{"10":1,"33":1,"35":1,"36":5}}],["repository",{"0":{"8":1},"2":{"8":3,"9":1,"16":1,"36":2}}],["repositories",{"2":{"0":1,"36":1}}],["repair",{"0":{"10":1}}],["related",{"2":{"9":1}}],["reviewable",{"2":{"30":1}}],["reviewability",{"0":{"19":1},"2":{"8":1,"18":1,"36":2}}],["review",{"2":{"19":1,"20":1,"33":1,"36":1}}],["revokes",{"2":{"4":1}}],["request",{"2":{"9":1}}],["requests",{"2":{"8":1,"39":1}}],["required",{"0":{"8":1,"9":1},"2":{"8":4}}],["remediation",{"2":{"38":1}}],["remain",{"2":{"5":1}}],["remove",{"2":{"10":1,"50":1}}],["removes",{"2":{"4":1}}],["remote",{"2":{"4":1,"39":1}}],["after",{"2":{"52":2,"53":1}}],["advisory",{"2":{"45":1}}],["additions",{"2":{"42":1}}],["add",{"2":{"11":1}}],["available",{"2":{"35":1}}],["avoid",{"2":{"33":1}}],["am",{"2":{"30":1}}],["args",{"2":{"24":1,"25":1,"26":1}}],["are",{"2":{"8":1,"9":2,"11":1,"18":1,"28":1,"42":1,"43":1,"49":1}}],["absolute",{"2":{"23":1,"47":1}}],["about",{"2":{"10":1}}],["agents",{"2":{"22":1}}],["analysis",{"0":{"31":1},"2":{"37":2,"42":1,"44":1,"52":1}}],["analyze",{"2":{"15":1,"31":2}}],["answers",{"0":{"30":1}}],["an",{"2":{"23":1,"47":1}}],["any",{"2":{"13":1}}],["and",{"0":{"37":1,"40":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"1":2,"4":1,"5":1,"7":1,"8":4,"10":1,"11":2,"12":1,"13":1,"15":1,"16":2,"18":3,"22":1,"27":1,"28":2,"31":2,"33":2,"34":1,"35":1,"36":2,"38":3,"41":1,"42":2,"43":3,"44":1,"51":1}}],["attention",{"0":{"51":1},"2":{"10":1}}],["always",{"2":{"9":1}}],["actually",{"2":{"33":1}}],["action",{"2":{"36":1}}],["actionable",{"2":{"33":1}}],["actions",{"0":{"19":1},"2":{"19":1,"27":1,"31":1}}],["active",{"2":{"7":1,"32":1}}],["account",{"2":{"31":1}}],["access",{"2":{"8":2}}],["assumptions",{"2":{"31":1,"33":1}}],["as",{"2":{"7":1,"9":1,"31":1}}],["asks",{"2":{"1":1}}],["apis",{"0":{"35":1,"36":1,"37":1,"38":1},"2":{"44":1}}],["api",{"0":{"34":1},"1":{"35":1,"36":1,"37":1,"38":1,"39":1},"2":{"7":3,"10":3,"15":1,"22":1,"28":1,"34":5,"43":1,"51":4}}],["approved",{"2":{"31":1}}],["approve",{"2":{"1":1,"10":1,"51":1}}],["app",{"0":{"6":1,"18":1,"45":1,"51":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1},"2":{"0":1,"6":1,"8":1,"9":1,"10":4,"18":1,"21":1,"38":1,"45":1,"48":2,"51":1}}],["aethereal",{"2":{"7":1}}],["auto",{"2":{"45":1}}],["automation",{"2":{"2":1}}],["authenticated",{"2":{"34":1,"43":1}}],["author",{"2":{"19":1}}],["authorization",{"2":{"10":2,"34":1,"51":1}}],["auth",{"0":{"0":1,"1":1,"3":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":2,"2":1,"6":1,"15":1,"34":1,"44":1}}],["a",{"2":{"1":2,"2":2,"7":1,"8":1,"13":1,"23":1,"30":4,"31":2,"32":3,"33":1,"41":1,"50":1,"52":1,"53":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/assets/chunks/VPLocalSearchBox.DIqEGPXK.js b/docs/assets/chunks/VPLocalSearchBox.DIqEGPXK.js deleted file mode 100644 index 793568d099..0000000000 --- a/docs/assets/chunks/VPLocalSearchBox.DIqEGPXK.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as _t,au as Le,d as Se,a4 as Tt,a7 as qe,ab as Et,K as It,a9 as kt,a2 as ne,r as Nt,e as He,X as ue,an as Ft,ag as Rt,aw as Ot,av as At,O as Ne,H as de,N as me,al as Ct,af as Mt,am as Lt,v as Dt,L as Pt,S as B,h as zt,g as k,aC as Vt,aa as C,aA as jt,at as $t,B as Bt,j as q,I as Ge,i as ge,Y as Qe,F as Ye,n as fe,a5 as he,T as Wt,D as Ze,f as Kt,p as Jt,U as Ut,s as qt,c as Ht}from"./framework.BXgR76oC.js";import{u as lt}from"./theme.BfZ7hXNa.js";const Gt={root:()=>_t(()=>import("./@localSearchIndexroot.DQCfcpak.js"),[])};var ct=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],xe=ct.join(","),ut=typeof Element>"u",Z=ut?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,_e=!ut&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a?.ownerDocument},Te=function(e,t){var n;t===void 0&&(t=!0);var s=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),i=s===""||s==="true",r=i||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Te(e.parentNode));return r},Qt=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},dt=function(e,t,n){if(Te(e))return[];var s=Array.prototype.slice.apply(e.querySelectorAll(xe));return t&&Z.call(e,xe)&&s.unshift(e),s=s.filter(n),s},Ee=function(e,t,n){for(var s=[],i=Array.from(e);i.length;){var r=i.shift();if(!Te(r,!1))if(r.tagName==="SLOT"){var o=r.assignedElements(),l=o.length?o:r.children,c=Ee(l,!0,n);n.flatten?s.push.apply(s,c):s.push({scopeParent:r,candidates:c})}else{var f=Z.call(r,xe);f&&n.filter(r)&&(t||!e.includes(r))&&s.push(r);var v=r.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(r),h=!Te(v,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(r));if(v&&h){var y=Ee(v===!0?r.children:v.children,!0,n);n.flatten?s.push.apply(s,y):s.push({scopeParent:r,candidates:y})}else i.unshift.apply(i,r.children)}}return s},ft=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},Y=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||Qt(e))&&!ft(e)?0:e.tabIndex},Yt=function(e,t){var n=Y(e);return n<0&&t&&!ft(e)?0:n},Zt=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},ht=function(e){return e.tagName==="INPUT"},Xt=function(e){return ht(e)&&e.type==="hidden"},en=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},tn=function(e,t){for(var n=0;nsummary:first-of-type"),o=r?e.parentElement:e;if(Z.call(o,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof s=="function"){for(var l=e;e;){var c=e.parentElement,f=_e(e);if(c&&!c.shadowRoot&&s(c)===!0)return Xe(e);e.assignedSlot?e=e.assignedSlot:!c&&f!==e.ownerDocument?e=f.host:e=c}e=l}if(an(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return Xe(e);return!1},ln=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},pt=function(e){var t=[],n=[];return e.forEach(function(s,i){var r=!!s.scopeParent,o=r?s.scopeParent:s,l=Yt(o,r),c=r?pt(s.candidates):o;l===0?r?t.push.apply(t,c):t.push(o):n.push({documentOrder:i,tabIndex:l,item:s,isScope:r,content:c})}),n.sort(Zt).reduce(function(s,i){return i.isScope?s.push.apply(s,i.content):s.push(i.content),s},[]).concat(t)},un=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Ee([e],t.includeContainer,{filter:De.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:cn}):n=dt(e,t.includeContainer,De.bind(null,t)),pt(n)},dn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Ee([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=dt(e,t.includeContainer,Ie.bind(null,t)),n},ee=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Z.call(e,xe)===!1?!1:De(t,e)},fn=ct.concat("iframe:not([inert]):not([inert] *)").join(","),Fe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Z.call(e,fn)===!1?!1:Ie(t,e)};function Pe(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t=a.length?{done:!0}:{done:!1,value:a[n++]}},e:function(l){throw l},f:s}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i,r=!0,o=!1;return{s:function(){t=t.call(a)},n:function(){var l=t.next();return r=l.done,l},e:function(l){o=!0,i=l},f:function(){try{r||t.return==null||t.return()}finally{if(o)throw i}}}}function pn(a,e,t){return(e=yn(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function vn(a){if(typeof Symbol<"u"&&a[Symbol.iterator]!=null||a["@@iterator"]!=null)return Array.from(a)}function mn(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tt(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(a,s).enumerable})),t.push.apply(t,n)}return t}function nt(a){for(var e=1;e0?e[e.length-1]:null},activateTrap:function(e,t){var n=W.getActiveTrap(e);t!==n&&W.pauseTrap(e);var s=e.indexOf(t);s===-1||e.splice(s,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),W.unpauseTrap(e)},pauseTrap:function(e){var t=W.getActiveTrap(e);t?._setPausedState(!0)},unpauseTrap:function(e){var t=W.getActiveTrap(e);t&&!t._isManuallyPaused()&&t._setPausedState(!1)}},wn=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Sn=function(e){return e?.key==="Escape"||e?.key==="Esc"||e?.keyCode===27},ve=function(e){return e?.key==="Tab"||e?.keyCode===9},xn=function(e){return ve(e)&&!e.shiftKey},_n=function(e){return ve(e)&&e.shiftKey},rt=function(e){return setTimeout(e,0)},pe=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),s=1;s1&&arguments[1]!==void 0?arguments[1]:{},b=d.hasFallback,I=b===void 0?!1:b,m=d.params,p=m===void 0?[]:m,g=i[u];if(typeof g=="function"&&(g=g.apply(void 0,gn(p))),g===!0&&(g=void 0),!g){if(g===void 0||g===!1)return g;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var _=g;if(typeof g=="string"){try{_=n.querySelector(g)}catch(x){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(x.message,'"'))}if(!_&&!I)throw new Error("`".concat(u,"` as selector refers to no known node"))}return _},v=function(u){var d=u.activeElement;return d?d.shadowRoot&&d.shadowRoot.activeElement!==null?v(d.shadowRoot):d:null},h=function(){var u=f("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Fe(u,i.tabbableOptions)){var d=v(n);if(c(d)>=0)u=d;else{var b=r.tabbableGroups[0],I=b&&b.firstTabbableNode;u=I||f("fallbackFocus")}}else u===null&&(u=f("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},y=function(){if(r.containerGroups=r.containers.map(function(u){var d=un(u,i.tabbableOptions),b=dn(u,i.tabbableOptions),I=d.length>0?d[0]:void 0,m=d.length>0?d[d.length-1]:void 0,p=b.find(function(x){return ee(x)}),g=b.slice().reverse().find(function(x){return ee(x)}),_=!!d.find(function(x){return Y(x)>0});return{container:u,tabbableNodes:d,focusableNodes:b,posTabIndexesFound:_,firstTabbableNode:I,lastTabbableNode:m,firstDomTabbableNode:p,lastDomTabbableNode:g,nextTabbableNode:function(F){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,M=d.indexOf(F);return M<0?D?b.slice(b.indexOf(F)+1).find(function(j){return ee(j)}):b.slice(0,b.indexOf(F)).reverse().find(function(j){return ee(j)}):d[M+(D?1:-1)]}}}),r.tabbableGroups=r.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),r.tabbableGroups.length<=0&&!f("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(r.containerGroups.find(function(u){return u.posTabIndexesFound})&&r.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},S=function(u){if(u!==!1&&u!==v(document)){if(!u||!u.focus){S(h());return}u.focus({preventScroll:!!i.preventScroll}),r.mostRecentlyFocusedNode=u,wn(u)&&u.select()}},w=function(u){var d=f("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},T=function(u){var d=u.target,b=u.event,I=u.isBackward,m=I===void 0?!1:I;d=d||be(b),y();var p=null;if(r.tabbableGroups.length>0){var g=c(d,b),_=g>=0?r.containerGroups[g]:void 0;if(g<0)m?p=r.tabbableGroups[r.tabbableGroups.length-1].lastTabbableNode:p=r.tabbableGroups[0].firstTabbableNode;else if(m){var x=r.tabbableGroups.findIndex(function(J){var U=J.firstTabbableNode;return d===U});if(x<0&&(_.container===d||Fe(d,i.tabbableOptions)&&!ee(d,i.tabbableOptions)&&!_.nextTabbableNode(d,!1))&&(x=g),x>=0){var F=x===0?r.tabbableGroups.length-1:x-1,D=r.tabbableGroups[F];p=Y(d)>=0?D.lastTabbableNode:D.lastDomTabbableNode}else ve(b)||(p=_.nextTabbableNode(d,!1))}else{var M=r.tabbableGroups.findIndex(function(J){var U=J.lastTabbableNode;return d===U});if(M<0&&(_.container===d||Fe(d,i.tabbableOptions)&&!ee(d,i.tabbableOptions)&&!_.nextTabbableNode(d))&&(M=g),M>=0){var j=M===r.tabbableGroups.length-1?0:M+1,O=r.tabbableGroups[j];p=Y(d)>=0?O.firstTabbableNode:O.firstDomTabbableNode}else ve(b)||(p=_.nextTabbableNode(d))}}else p=f("fallbackFocus");return p},N=function(u){var d=be(u);if(!(c(d,u)>=0)){if(pe(i.clickOutsideDeactivates,u)){o.deactivate({returnFocus:i.returnFocusOnDeactivate});return}pe(i.allowOutsideClick,u)||u.preventDefault()}},R=function(u){var d=be(u),b=c(d,u)>=0;if(b||d instanceof Document)b&&(r.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var I,m=!0;if(r.mostRecentlyFocusedNode)if(Y(r.mostRecentlyFocusedNode)>0){var p=c(r.mostRecentlyFocusedNode),g=r.containerGroups[p].tabbableNodes;if(g.length>0){var _=g.findIndex(function(x){return x===r.mostRecentlyFocusedNode});_>=0&&(i.isKeyForward(r.recentNavEvent)?_+1=0&&(I=g[_-1],m=!1))}}else r.containerGroups.some(function(x){return x.tabbableNodes.some(function(F){return Y(F)>0})})||(m=!1);else m=!1;m&&(I=T({target:r.mostRecentlyFocusedNode,isBackward:i.isKeyBackward(r.recentNavEvent)})),S(I||r.mostRecentlyFocusedNode||h())}r.recentNavEvent=void 0},G=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;r.recentNavEvent=u;var b=T({event:u,isBackward:d});b&&(ve(u)&&u.preventDefault(),S(b))},z=function(u){(i.isKeyForward(u)||i.isKeyBackward(u))&&G(u,i.isKeyBackward(u))},$=function(u){Sn(u)&&pe(i.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},P=function(u){var d=be(u);c(d,u)>=0||pe(i.clickOutsideDeactivates,u)||pe(i.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},V=function(){if(r.active){W.activateTrap(s,o);var u;return i.delayInitialFocus?u=new Promise(function(d){r.delayInitialFocusTimer=rt(function(){S(h()),d()})}):S(h()),n.addEventListener("focusin",R,!0),n.addEventListener("mousedown",N,{capture:!0,passive:!1}),n.addEventListener("touchstart",N,{capture:!0,passive:!1}),n.addEventListener("click",P,{capture:!0,passive:!1}),n.addEventListener("keydown",z,{capture:!0,passive:!1}),n.addEventListener("keydown",$),u}},A=function(u){r.active&&!r.paused&&o._setSubtreeIsolation(!1),r.adjacentElements.clear(),r.alreadySilent.clear();var d=new Set,b=new Set,I=et(u),m;try{for(I.s();!(m=I.n()).done;){var p=m.value;d.add(p);for(var g=typeof ShadowRoot<"u"&&p.getRootNode()instanceof ShadowRoot,_=p;_;){d.add(_);var x=_.parentElement,F=[];x?F=x.children:!x&&g&&(F=_.getRootNode().children,x=_.getRootNode().host,g=typeof ShadowRoot<"u"&&x.getRootNode()instanceof ShadowRoot);var D=et(F),M;try{for(D.s();!(M=D.n()).done;){var j=M.value;b.add(j)}}catch(O){D.e(O)}finally{D.f()}_=x}}}catch(O){I.e(O)}finally{I.f()}d.forEach(function(O){b.delete(O)}),r.adjacentElements=b},K=function(){if(r.active)return n.removeEventListener("focusin",R,!0),n.removeEventListener("mousedown",N,!0),n.removeEventListener("touchstart",N,!0),n.removeEventListener("click",P,!0),n.removeEventListener("keydown",z,!0),n.removeEventListener("keydown",$),o},ie=function(u){var d=r.mostRecentlyFocusedNode;if(d){var b=u.some(function(m){var p=Array.from(m.removedNodes);return p.some(function(g){return g===d||typeof g.contains=="function"&&g.contains(d)})});if(b&&r.containers.some(function(m){return m?.isConnected})){y();var I=h();S(I)}}},ae=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(ie):void 0,X=function(){ae&&(ae.disconnect(),r.active&&!r.paused&&r.containers.map(function(u){ae.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return r.active},get paused(){return r.paused},activate:function(u){if(r.active)return this;var d=l(u,"onActivate"),b=l(u,"onPostActivate"),I=l(u,"checkCanFocusTrap"),m=W.getActiveTrap(s),p=!1;if(m&&!m.paused){var g;(g=m._setSubtreeIsolation)===null||g===void 0||g.call(m,!1),p=!0}try{I||y(),r.active=!0,r.paused=!1,r.nodeFocusedBeforeActivation=v(n),d?.({trap:o});var _=function(){I&&y();var D=function(){o._setSubtreeIsolation(!0),X(),b?.({trap:o})},M=V();M?M.then(D):D()};if(I)return I(r.containers.concat()).then(_,_),this;_()}catch(F){if(m===W.getActiveTrap(s)&&p){var x;(x=m._setSubtreeIsolation)===null||x===void 0||x.call(m,!0)}throw F}return this},deactivate:function(u){if(!r.active)return this;var d=nt({onDeactivate:i.onDeactivate,onPostDeactivate:i.onPostDeactivate,checkCanReturnFocus:i.checkCanReturnFocus},u);clearTimeout(r.delayInitialFocusTimer),r.delayInitialFocusTimer=void 0,r.paused||o._setSubtreeIsolation(!1),r.alreadySilent.clear(),K(),r.active=!1,r.paused=!1,X(),W.deactivateTrap(s,o);var b=l(d,"onDeactivate"),I=l(d,"onPostDeactivate"),m=l(d,"checkCanReturnFocus"),p=l(d,"delayReturnFocus"),g=l(d,"returnFocus","returnFocusOnDeactivate");b?.({trap:o});var _=function(){g&&S(w(r.nodeFocusedBeforeActivation)),I?.({trap:o})},x=function(){p&&g?rt(_):_()};return g&&m?(m(w(r.nodeFocusedBeforeActivation)).then(x,x),this):(x(),this)},pause:function(u){return r.active?(r.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return r.active?(r.manuallyPaused=!1,s[s.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return r.containers=d.map(function(b){return typeof b=="string"?n.querySelector(b):b}),i.isolateSubtrees&&A(r.containers),r.active&&(y(),r.paused||o._setSubtreeIsolation(!0)),X(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return r.manuallyPaused}},_setPausedState:{value:function(u,d){if(r.paused===u)return this;if(r.paused=u,u){var b=l(d,"onPause"),I=l(d,"onPostPause");b?.({trap:o}),K(),o._setSubtreeIsolation(!1),X(),I?.({trap:o})}else{var m=l(d,"onUnpause"),p=l(d,"onPostUnpause");m?.({trap:o});var g=function(){y();var x=function(){o._setSubtreeIsolation(!0),X(),p?.({trap:o})},F=V();F?F.then(x):x()};g()}return this}},_setSubtreeIsolation:{value:function(u){i.isolateSubtrees&&r.adjacentElements.forEach(function(d){var b;if(u)switch(i.isolateSubtrees){case"aria-hidden":(d.ariaHidden==="true"||((b=d.getAttribute("aria-hidden"))===null||b===void 0?void 0:b.toLowerCase())==="true")&&r.alreadySilent.add(d),d.setAttribute("aria-hidden","true");break;default:(d.inert||d.hasAttribute("inert"))&&r.alreadySilent.add(d),d.setAttribute("inert",!0);break}else if(!r.alreadySilent.has(d))switch(i.isolateSubtrees){case"aria-hidden":d.removeAttribute("aria-hidden");break;default:d.removeAttribute("inert");break}})}}}),o.updateContainerElements(e),o};function In(a,e={}){let t;const{immediate:n,...s}=e,i=ne(!1),r=ne(!1),o=v=>t&&t.activate(v),l=v=>t&&t.deactivate(v),c=()=>{t&&(t.pause(),r.value=!0)},f=()=>{t&&(t.unpause(),r.value=!1)};return Le(Se(()=>Tt(qe(a)).map(v=>{const h=qe(v);return typeof h=="string"?h:Et(h)}).filter(It)),v=>{if(v.length)if(!t)t=En(v,{...s,onActivate(h){i.value=!0,e.onActivate&&e.onActivate(h)},onDeactivate(h){i.value=!1,e.onDeactivate&&e.onDeactivate(h)}}),n&&o();else{const h=t?.active;t?.updateContainerElements(v),!h&&n&&o()}},{flush:"post"}),kt(()=>l()),{hasFocus:i,isPaused:r,activate:o,deactivate:l,pause:c,unpause:f}}class re{constructor(e,t=!0,n=[],s=5e3){this.ctx=e,this.iframes=t,this.exclude=n,this.iframesTimeout=s}static matches(e,t){const n=typeof t=="string"?[t]:t,s=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(s){let i=!1;return n.every(r=>s.call(e,r)?(i=!0,!1):!0),i}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(n=>{const s=t.filter(i=>i.contains(n)).length>0;t.indexOf(n)===-1&&!s&&t.push(n)}),t}getIframeContents(e,t,n=()=>{}){let s;try{const i=e.contentWindow;if(s=i.document,!i||!s)throw new Error("iframe inaccessible")}catch{n()}s&&t(s)}isIframeBlank(e){const t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}observeIframeLoad(e,t,n){let s=!1,i=null;const r=()=>{if(!s){s=!0,clearTimeout(i);try{this.isIframeBlank(e)||(e.removeEventListener("load",r),this.getIframeContents(e,t,n))}catch{n()}}};e.addEventListener("load",r),i=setTimeout(r,this.iframesTimeout)}onIframeReady(e,t,n){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch{n()}}waitForIframes(e,t){let n=0;this.forEachIframe(e,()=>!0,s=>{n++,this.waitForIframes(s.querySelector("html"),()=>{--n||t()})},s=>{s||t()})}forEachIframe(e,t,n,s=()=>{}){let i=e.querySelectorAll("iframe"),r=i.length,o=0;i=Array.prototype.slice.call(i);const l=()=>{--r<=0&&s(o)};r||l(),i.forEach(c=>{re.matches(c,this.exclude)?l():this.onIframeReady(c,f=>{t(c)&&(o++,n(f)),l()},l)})}createIterator(e,t,n){return document.createNodeIterator(e,t,n,!1)}createInstanceOnIframe(e){return new re(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,n){const s=e.compareDocumentPosition(n),i=Node.DOCUMENT_POSITION_PRECEDING;if(s&i)if(t!==null){const r=t.compareDocumentPosition(n),o=Node.DOCUMENT_POSITION_FOLLOWING;if(r&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let n;return t===null?n=e.nextNode():n=e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}checkIframeFilter(e,t,n,s){let i=!1,r=!1;return s.forEach((o,l)=>{o.val===n&&(i=l,r=o.handled)}),this.compareNodeIframe(e,t,n)?(i===!1&&!r?s.push({val:n,handled:!0}):i!==!1&&!r&&(s[i].handled=!0),!0):(i===!1&&s.push({val:n,handled:!1}),!1)}handleOpenIframes(e,t,n,s){e.forEach(i=>{i.handled||this.getIframeContents(i.val,r=>{this.createInstanceOnIframe(r).forEachNode(t,n,s)})})}iterateThroughNodes(e,t,n,s,i){const r=this.createIterator(t,e,s);let o=[],l=[],c,f,v=()=>({prevNode:f,node:c}=this.getIteratorNode(r),c);for(;v();)this.iframes&&this.forEachIframe(t,h=>this.checkIframeFilter(c,f,h,o),h=>{this.createInstanceOnIframe(h).forEachNode(e,y=>l.push(y),s)}),l.push(c);l.forEach(h=>{n(h)}),this.iframes&&this.handleOpenIframes(o,e,n,s),i()}forEachNode(e,t,n,s=()=>{}){const i=this.getContexts();let r=i.length;r||s(),i.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,n,()=>{--r<=0&&s()})};this.iframes?this.waitForIframes(o,l):l()})}}let kn=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new re(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const n=this.opt.log;this.opt.debug&&typeof n=="object"&&typeof n[t]=="function"&&n[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",s=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let i in t)if(t.hasOwnProperty(i)){const r=t[i],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${n}`),s+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+s))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,n,s)=>{let i=s.charAt(n+1);return/[(|)\\]/.test(i)||i===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let s=[];return e.split("").forEach(i=>{n.every(r=>{if(r.indexOf(i)!==-1){if(s.indexOf(r)>-1)return!1;e=e.replace(new RegExp(`[${r}]`,`gm${t}`),`[${r}]`),s.push(r)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let n=this.opt.accuracy,s=typeof n=="string"?n:n.value,i=typeof n=="string"?[]:n.limiters,r="";switch(i.forEach(o=>{r+=`|${this.escapeStr(o)}`}),s){case"partially":default:return`()(${e})`;case"complementary":return r="\\s"+(r||this.escapeStr(t)),`()([^${r}]*${e}[^${r}]*)`;case"exactly":return`(^|\\s${r})(${e})(?=$|\\s${r})`}}getSeparatedKeywords(e){let t=[];return e.forEach(n=>{this.opt.separateWordSearch?n.split(" ").forEach(s=>{s.trim()&&t.indexOf(s)===-1&&t.push(s)}):n.trim()&&t.indexOf(n)===-1&&t.push(n)}),{keywords:t.sort((n,s)=>s.length-n.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let n=0;return e.sort((s,i)=>s.start-i.start).forEach(s=>{let{start:i,end:r,valid:o}=this.callNoMatchOnInvalidRanges(s,n);o&&(s.start=i,s.length=r-i,t.push(s),n=r)}),t}callNoMatchOnInvalidRanges(e,t){let n,s,i=!1;return e&&typeof e.start<"u"?(n=parseInt(e.start,10),s=n+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&s-t>0&&s-n>0?i=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:n,end:s,valid:i}}checkWhitespaceRanges(e,t,n){let s,i=!0,r=n.length,o=t-r,l=parseInt(e.start,10)-o;return l=l>r?r:l,s=l+parseInt(e.length,10),s>r&&(s=r,this.log(`End range automatically set to the max value of ${r}`)),l<0||s-l<0||l>r||s>r?(i=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):n.substring(l,s).replace(/\s+/g,"")===""&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:s,valid:i}}getTextNodes(e){let t="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,s=>{n.push({start:t.length,end:(t+=s.textContent).length,node:s})},s=>this.matchesExclude(s.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:n})})}matchesExclude(e){return re.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,n){const s=this.opt.element?this.opt.element:"mark",i=e.splitText(t),r=i.splitText(n-t);let o=document.createElement(s);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=i.textContent,i.parentNode.replaceChild(o,i),r}wrapRangeInMappedTextNode(e,t,n,s,i){e.nodes.every((r,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!s(r.node))return!1;const c=t-r.start,f=(n>r.end?r.end:n)-r.start,v=e.value.substr(0,r.start),h=e.value.substr(f+r.start);if(r.node=this.wrapRangeInTextNode(r.node,c,f),e.value=v+h,e.nodes.forEach((y,S)=>{S>=o&&(e.nodes[S].start>0&&S!==o&&(e.nodes[S].start-=f),e.nodes[S].end-=f)}),n-=f,i(r.node.previousSibling,r.start),n>r.end)t=r.end;else return!1}return!0})}wrapMatches(e,t,n,s,i){const r=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[r]!=="";){if(!n(c[r],l))continue;let f=c.index;if(r!==0)for(let v=1;v{let l;for(;(l=e.exec(o.value))!==null&&l[r]!=="";){let c=l.index;if(r!==0)for(let v=1;vn(l[r],v),(v,h)=>{e.lastIndex=h,s(v)})}i()})}wrapRangeFromIndex(e,t,n,s){this.getTextNodes(i=>{const r=i.value.length;e.forEach((o,l)=>{let{start:c,end:f,valid:v}=this.checkWhitespaceRanges(o,r,i.value);v&&this.wrapRangeInMappedTextNode(i,c,f,h=>t(h,o,i.value.substring(c,f),l),h=>{n(h,o)})}),s()})}unwrapMatches(e){const t=e.parentNode;let n=document.createDocumentFragment();for(;e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let n=0,s="wrapMatches";const i=r=>{n++,this.opt.each(r)};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),this[s](e,this.opt.ignoreGroups,(r,o)=>this.opt.filter(o,r,n),i,()=>{n===0&&this.opt.noMatch(e),this.opt.done(n)})}mark(e,t){this.opt=t;let n=0,s="wrapMatches";const{keywords:i,length:r}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let f=new RegExp(this.createRegExp(c),`gm${o}`),v=0;this.log(`Searching with expression "${f}"`),this[s](f,1,(h,y)=>this.opt.filter(y,c,n,v),h=>{v++,n++,this.opt.each(h)},()=>{v===0&&this.opt.noMatch(c),i[r-1]===c?this.opt.done(n):l(i[i.indexOf(c)+1])})};this.opt.acrossElements&&(s="wrapMatchesAcrossElements"),r===0?this.opt.done(n):l(i[0])}markRanges(e,t){this.opt=t;let n=0,s=this.checkRanges(e);s&&s.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(s)),this.wrapRangeFromIndex(s,(i,r,o,l)=>this.opt.filter(i,r,o,l),(i,r)=>{n++,this.opt.each(i,r)},()=>{this.opt.done(n)})):this.opt.done(n)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,n=>{this.unwrapMatches(n)},n=>{const s=re.matches(n,t),i=this.matchesExclude(n);return!s||i?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Nn(a){const e=new kn(a);return this.mark=(t,n)=>(e.mark(t,n),this),this.markRegExp=(t,n)=>(e.markRegExp(t,n),this),this.markRanges=(t,n)=>(e.markRanges(t,n),this),this.unmark=t=>(e.unmark(t),this),this}const Fn="ENTRIES",mt="KEYS",gt="VALUES",L="";class Re{constructor(e,t){const n=e._tree,s=Array.from(n.keys());this.set=e,this._type=t,this._path=s.length>0?[{node:n,keys:s}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=te(this._path);if(te(t)===L)return{done:!1,value:this.result()};const n=e.get(te(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=te(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>te(e)).filter(e=>e!==L).join("")}value(){return te(this._path).node.get(L)}result(){switch(this._type){case gt:return this.value();case mt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const te=a=>a[a.length-1],Rn=(a,e,t)=>{const n=new Map;if(e===void 0)return n;const s=e.length+1,i=s+t,r=new Uint8Array(i*s).fill(t+1);for(let o=0;o{const l=i*r;e:for(const c of a.keys())if(c===L){const f=s[l-1];f<=t&&n.set(o,[a.get(c),f])}else{let f=i;for(let v=0;vt)continue e}bt(a.get(c),e,t,n,s,f,r,o+c)}};class H{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=ke(this._tree,e.slice(this._prefix.length));if(t===void 0){const[s,i]=$e(n);for(const r of s.keys())if(r!==L&&r.startsWith(i)){const o=new Map;return o.set(r.slice(i.length),s.get(r)),new H(o,e)}}return new H(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,On(this._tree,e)}entries(){return new Re(this,Fn)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return Rn(this._tree,e,t)}get(e){const t=ze(this._tree,e);return t!==void 0?t.get(L):void 0}has(e){const t=ze(this._tree,e);return t!==void 0&&t.has(L)}keys(){return new Re(this,mt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Oe(this._tree,e).set(L,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=Oe(this._tree,e);return n.set(L,t(n.get(L))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=Oe(this._tree,e);let s=n.get(L);return s===void 0&&n.set(L,s=t()),s}values(){return new Re(this,gt)}[Symbol.iterator](){return this.entries()}static from(e){const t=new H;for(const[n,s]of e)t.set(n,s);return t}static fromObject(e){return H.from(Object.entries(e))}}const ke=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const n of a.keys())if(n!==L&&e.startsWith(n))return t.push([a,n]),ke(a.get(n),e.slice(n.length),t);return t.push([a,e]),ke(void 0,"",t)},ze=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==L&&e.startsWith(t))return ze(a.get(t),e.slice(t.length))},Oe=(a,e)=>{const t=e.length;e:for(let n=0;a&&n{const[t,n]=ke(a,e);if(t!==void 0){if(t.delete(L),t.size===0)yt(n);else if(t.size===1){const[s,i]=t.entries().next().value;wt(n,s,i)}}},yt=a=>{if(a.length===0)return;const[e,t]=$e(a);if(e.delete(t),e.size===0)yt(a.slice(0,-1));else if(e.size===1){const[n,s]=e.entries().next().value;n!==L&&wt(a.slice(0,-1),n,s)}},wt=(a,e,t)=>{if(a.length===0)return;const[n,s]=$e(a);n.set(s+e,t),n.delete(s)},$e=a=>a[a.length-1],Be="or",St="and",An="and_not";class se{constructor(e){if(e?.fields==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Me:e.autoVacuum;this._options={...Ce,...e,autoVacuum:t,searchOptions:{...st,...e.searchOptions||{}},autoSuggestOptions:{...Pn,...e.autoSuggestOptions||{}}},this._index=new H,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=je,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:n,tokenize:s,processTerm:i,fields:r,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const f of r){const v=t(e,f);if(v==null)continue;const h=s(n(v,f),f),y=this._fieldIds[f],S=new Set(h).size;this.addFieldLength(c,y,this._documentCount-1,S);for(const w of h){const T=i(w,f);if(Array.isArray(T))for(const N of T)this.addTerm(y,c,N);else T&&this.addTerm(y,c,T)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,s={chunk:[],promise:Promise.resolve()},{chunk:i,promise:r}=e.reduce(({chunk:o,promise:l},c,f)=>(o.push(c),(f+1)%n===0?{chunk:[],promise:l.then(()=>new Promise(v=>setTimeout(v,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),s);return r.then(()=>this.addAll(i))}remove(e){const{tokenize:t,processTerm:n,extractField:s,stringifyField:i,fields:r,idField:o}=this._options,l=s(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const f of r){const v=s(e,f);if(v==null)continue;const h=t(i(v,f),f),y=this._fieldIds[f],S=new Set(h).size;this.removeFieldLength(c,y,this._documentCount,S);for(const w of h){const T=n(w,f);if(Array.isArray(T))for(const N of T)this.removeTerm(y,c,N);else T&&this.removeTerm(y,c,T)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new H,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,s)=>{this.removeFieldLength(t,s,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:s}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:s},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,s=n(e,t);this.discard(s),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=je,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const s=e.batchSize||Ve.batchSize,i=e.batchWait||Ve.batchWait;let r=1;for(const[o,l]of this._index){for(const[c,f]of l)for(const[v]of f)this._documentIds.has(v)||(f.size<=1?l.delete(c):f.delete(v));this._index.get(o).size===0&&this._index.delete(o),r%s===0&&await new Promise(c=>setTimeout(c,i)),r+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||Me.minDirtCount,n=n||Me.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,s={...n,...t},i=this.executeQuery(e,t),r=[];for(const[o,{score:l,terms:c,match:f}]of i){const v=c.length||1,h={id:this._documentIds.get(o),score:l*v,terms:Object.keys(f),queryTerms:c,match:f};Object.assign(h,this._storedFields.get(o)),(s.filter==null||s.filter(h))&&r.push(h)}return e===se.wildcard&&s.boostDocument==null||r.sort(at),r}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:i,terms:r}of this.search(e,t)){const o=r.join(" "),l=n.get(o);l!=null?(l.score+=i,l.count+=1):n.set(o,{score:i,terms:r,count:1})}const s=[];for(const[i,{score:r,terms:o,count:l}]of n)s.push({suggestion:i,terms:o,score:r/l});return s.sort(at),s}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Ce.hasOwnProperty(e))return Ae(Ce,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:s,fieldLength:i,storedFields:r,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=ye(s),l._fieldLength=ye(i),l._storedFields=ye(r);for(const[c,f]of l._documentIds)l._idToShortId.set(f,c);for(const[c,f]of n){const v=new Map;for(const h of Object.keys(f)){let y=f[h];o===1&&(y=y.ds),v.set(parseInt(h,10),ye(y))}l._index.set(c,v)}return l}static async loadJSAsync(e,t){const{index:n,documentIds:s,fieldLength:i,storedFields:r,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await we(s),l._fieldLength=await we(i),l._storedFields=await we(r);for(const[f,v]of l._documentIds)l._idToShortId.set(v,f);let c=0;for(const[f,v]of n){const h=new Map;for(const y of Object.keys(v)){let S=v[y];o===1&&(S=S.ds),h.set(parseInt(y,10),await we(S))}++c%1e3===0&&await xt(0),l._index.set(f,h)}return l}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:s,fieldIds:i,averageFieldLength:r,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new se(t);return c._documentCount=n,c._nextId=s,c._idToShortId=new Map,c._fieldIds=i,c._avgFieldLength=r,c._dirtCount=o||0,c._index=new H,c}executeQuery(e,t={}){if(e===se.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const h={...t,...e,queries:void 0},y=e.queries.map(S=>this.executeQuery(S,h));return this.combineResults(y,h.combineWith)}const{tokenize:n,processTerm:s,searchOptions:i}=this._options,r={tokenize:n,processTerm:s,...i,...t},{tokenize:o,processTerm:l}=r,v=o(e).flatMap(h=>l(h)).filter(h=>!!h).map(Dn(r)).map(h=>this.executeQuerySpec(h,r));return this.combineResults(v,r.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},s=(n.fields||this._options.fields).reduce((w,T)=>({...w,[T]:Ae(n.boost,T)||1}),{}),{boostDocument:i,weights:r,maxFuzzy:o,bm25:l}=n,{fuzzy:c,prefix:f}={...st.weights,...r},v=this._index.get(e.term),h=this.termResults(e.term,e.term,1,e.termBoost,v,s,i,l);let y,S;if(e.prefix&&(y=this._index.atPrefix(e.term)),e.fuzzy){const w=e.fuzzy===!0?.2:e.fuzzy,T=w<1?Math.min(o,Math.round(e.term.length*w)):w;T&&(S=this._index.fuzzyGet(e.term,T))}if(y)for(const[w,T]of y){const N=w.length-e.term.length;if(!N)continue;S?.delete(w);const R=f*w.length/(w.length+.3*N);this.termResults(e.term,w,R,e.termBoost,T,s,i,l,h)}if(S)for(const w of S.keys()){const[T,N]=S.get(w);if(!N)continue;const R=c*w.length/(w.length+N);this.termResults(e.term,w,R,e.termBoost,T,s,i,l,h)}return h}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[s,i]of this._documentIds){const r=n.boostDocument?n.boostDocument(i,"",this._storedFields.get(s)):1;t.set(s,{score:r,terms:[],match:{}})}return t}combineResults(e,t=Be){if(e.length===0)return new Map;const n=t.toLowerCase(),s=Cn[n];if(!s)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(s)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const s={};for(const[i,r]of n)s[i]=Object.fromEntries(r);e.push([t,s])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,s,i,r,o,l,c=new Map){if(i==null)return c;for(const f of Object.keys(r)){const v=r[f],h=this._fieldIds[f],y=i.get(h);if(y==null)continue;let S=y.size;const w=this._avgFieldLength[h];for(const T of y.keys()){if(!this._documentIds.has(T)){this.removeTerm(h,T,t),S-=1;continue}const N=o?o(this._documentIds.get(T),t,this._storedFields.get(T)):1;if(!N)continue;const R=y.get(T),G=this._fieldLength.get(T)[h],z=Ln(R,S,this._documentCount,G,w,l),$=n*s*v*N*z,P=c.get(T);if(P){P.score+=$,zn(P.terms,e);const V=Ae(P.match,t);V?V.push(f):P.match[t]=[f]}else c.set(T,{score:$,terms:[e],match:{[t]:[f]}})}}return c}addTerm(e,t,n){const s=this._index.fetch(n,ot);let i=s.get(e);if(i==null)i=new Map,i.set(t,1),s.set(e,i);else{const r=i.get(t);i.set(t,(r||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const s=this._index.fetch(n,ot),i=s.get(e);i==null||i.get(t)==null?this.warnDocumentChanged(t,e,n):i.get(t)<=1?i.size<=1?s.delete(e):i.delete(t):i.set(t,i.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const s of Object.keys(this._fieldIds))if(this._fieldIds[s]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${s}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Cn={[Be]:(a,e)=>{for(const t of e.keys()){const n=a.get(t);if(n==null)a.set(t,e.get(t));else{const{score:s,terms:i,match:r}=e.get(t);n.score=n.score+s,n.match=Object.assign(n.match,r),it(n.terms,i)}}return a},[St]:(a,e)=>{const t=new Map;for(const n of e.keys()){const s=a.get(n);if(s==null)continue;const{score:i,terms:r,match:o}=e.get(n);it(s.terms,r),t.set(n,{score:s.score+i,terms:s.terms,match:Object.assign(s.match,o)})}return t},[An]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Mn={k:1.2,b:.7,d:.5},Ln=(a,e,t,n,s,i)=>{const{k:r,b:o,d:l}=i;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(r+1)/(a+r*(1-o+o*n/s)))},Dn=a=>(e,t,n)=>{const s=typeof a.fuzzy=="function"?a.fuzzy(e,t,n):a.fuzzy||!1,i=typeof a.prefix=="function"?a.prefix(e,t,n):a.prefix===!0,r=typeof a.boostTerm=="function"?a.boostTerm(e,t,n):1;return{term:e,fuzzy:s,prefix:i,termBoost:r}},Ce={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split(Vn),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof console?.[a]=="function"&&console[a](e)},autoVacuum:!0},st={combineWith:Be,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Mn},Pn={combineWith:St,prefix:(a,e,t)=>e===t.length-1},Ve={batchSize:1e3,batchWait:10},je={minDirtFactor:.1,minDirtCount:20},Me={...Ve,...je},zn=(a,e)=>{a.includes(e)||a.push(e)},it=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},at=({score:a},{score:e})=>e-a,ot=()=>new Map,ye=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},we=async a=>{const e=new Map;let t=0;for(const n of Object.keys(a))e.set(parseInt(n,10),a[n]),++t%1e3===0&&await xt(0);return e},xt=a=>new Promise(e=>setTimeout(e,a)),Vn=/[\n\r\p{Z}\p{P}]+/u;class jn{max;cache;constructor(e=10){this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}function $n(a){const{localeIndex:e,theme:t}=lt();function n(s){const i=s.split("."),r=t.value.search?.options,o=r&&typeof r=="object",l=o&&r.locales?.[e.value]?.translations||null,c=o&&r.translations||null;let f=l,v=c,h=a;const y=i.pop();for(const S of i){let w=null;const T=h?.[S];T&&(w=h=T);const N=v?.[S];N&&(w=v=N);const R=f?.[S];R&&(w=f=R),T||(h=w),N||(v=w),R||(f=w)}return f?.[y]??v?.[y]??h?.[y]??""}return n}const Bn=["aria-owns"],Wn={class:"shell"},Kn=["title"],Jn={class:"search-actions before"},Un=["title"],qn=["aria-activedescendant","aria-controls","placeholder"],Hn={class:"search-actions"},Gn=["title"],Qn=["disabled","title"],Yn=["id","role","aria-labelledby"],Zn=["id","aria-selected"],Xn=["href","aria-label","onMouseenter","onFocusin","data-index"],er={class:"titles"},tr=["innerHTML"],nr={class:"title main"},rr=["innerHTML"],sr={key:0,class:"excerpt-wrapper"},ir={key:0,class:"excerpt",inert:""},ar=["innerHTML"],or={key:0,class:"no-results"},lr={class:"search-keyboard-shortcuts"},cr=["aria-label"],ur=["aria-label"],dr=["aria-label"],fr=["aria-label"],hr=Nt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){const t=e,n=ne(),s=ne(),i=ne(Gt),r=lt(),{activate:o}=In(n,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=r,f=He(async()=>Ze(se.loadJSON((await i.value[l.value]?.())?.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.searchOptions},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.options}))),h=Se(()=>c.value.search?.provider==="local"&&c.value.search.options?.disableQueryPersistence===!0).value?ue(""):Ft("vitepress:local-search-filter",""),y=Rt("vitepress:local-search-detailed-list",c.value.search?.provider==="local"&&c.value.search.options?.detailedView===!0),S=Se(()=>c.value.search?.provider==="local"&&(c.value.search.options?.disableDetailedView===!0||c.value.search.options?.detailedView===!1));Ot(()=>{S.value&&(y.value=!1)});const w=ne([]),T=ue(!1);Le(h,()=>{T.value=!1});const N=He(async()=>{if(s.value)return Ze(new Nn(s.value))},null),R=new jn(16);At(()=>[f.value,h.value,y.value],async([m,p,g],_,x)=>{_?.[0]!==m&&R.clear();let F=!1;if(x(()=>{F=!0}),!m)return;w.value=m.search(p).slice(0,16),T.value=!0;const D=g?await Promise.all(w.value.map(O=>G(O.id))):[];if(F)return;for(const{id:O,mod:J}of D){const U=O.slice(0,O.indexOf("#"));let oe=R.get(U);if(oe)continue;oe=new Map,R.set(U,oe);const le=J.default??J;if(le?.render||le?.setup){const Q=Kt(le);Q.config.warnHandler=()=>{},Q.provide(Jt,r),Object.defineProperties(Q.config.globalProperties,{$frontmatter:{get(){return r.frontmatter.value}},$params:{get(){return r.page.value.params}}});const We=document.createElement("div");Q.mount(We),We.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ce=>{const Ke=ce.querySelector("a")?.getAttribute("href"),Je=Ke?.startsWith("#")&&Ke.slice(1);if(!Je)return;let Ue="";for(;(ce=ce.nextElementSibling)&&!/^h[1-6]$/i.test(ce.tagName);)Ue+=ce.outerHTML;oe.set(Je,Ue)}),Q.unmount()}if(F)return}const M=new Set;if(w.value=w.value.map(O=>{const[J,U]=O.id.split("#"),le=R.get(J)?.get(U)??"";for(const Q in O.match)M.add(Q);return{...O,text:le}}),await de(),F)return;await new Promise(O=>{N.value?.unmark({done:()=>{N.value?.markRegExp(b(M),{done:O})}})});const j=n.value?.querySelectorAll(".result .excerpt")??[];for(const O of j)O.querySelector('mark[data-markjs="true"]')?.scrollIntoView({block:"center"});s.value?.firstElementChild?.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function G(m){const p=Ut(m.slice(0,m.indexOf("#")));try{if(!p)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(p)}}catch(g){return console.error(g),{id:m,mod:{}}}}const z=ue(),$=Se(()=>h.value?.length<=0);function P(m=!0){z.value?.focus(),m&&z.value?.select()}Ne(()=>{P()});function V(m){m.pointerType==="mouse"&&P()}const A=ue(-1),K=ue(!0);Le(w,m=>{A.value=m.length?0:-1,ie()});function ie(){de(()=>{document.querySelector(".result.selected")?.scrollIntoView({block:"nearest"})})}me("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=w.value.length-1),K.value=!0,ie()}),me("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=w.value.length&&(A.value=0),K.value=!0,ie()});const ae=Ct();me("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const p=w.value[A.value];if(m.target instanceof HTMLInputElement&&!p){m.preventDefault();return}p&&(ae.go(p.id),t("close"))}),me("Escape",()=>{t("close")});const E=$n({button:{buttonText:"Search"},modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Ne(()=>{window.history.pushState(null,"",null)}),Mt("popstate",m=>{m.preventDefault(),t("close")});const u=Lt(Dt?document.body:null);Ne(()=>{de(()=>{u.value=!0,de().then(()=>o())})}),Pt(()=>{u.value=!1});function d(){h.value="",de().then(()=>P(!1))}function b(m){return new RegExp([...m].sort((p,g)=>g.length-p.length).map(p=>`(${qt(p)})`).join("|"),"gi")}function I(m){if(!K.value)return;const p=m.target?.closest(".result"),g=Number.parseInt(p?.dataset.index);g>=0&&g!==A.value&&(A.value=g),K.value=!1}return(m,p)=>(B(),zt(Wt,{to:"body"},[k("div",{ref_key:"el",ref:n,role:"button","aria-owns":w.value?.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[k("div",{class:"backdrop",onClick:p[0]||(p[0]=g=>m.$emit("close"))}),k("div",Wn,[k("form",{class:"search-bar",onPointerup:p[4]||(p[4]=g=>V(g)),onSubmit:p[5]||(p[5]=Vt(()=>{},["prevent"]))},[k("label",{title:C(E)("button.buttonText"),id:"localsearch-label",for:"localsearch-input"},[...p[7]||(p[7]=[k("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)])],8,Kn),k("div",Jn,[k("button",{class:"back-button",title:C(E)("modal.backButtonTitle"),onClick:p[1]||(p[1]=g=>m.$emit("close"))},[...p[8]||(p[8]=[k("span",{class:"vpi-arrow-left local-search-icon"},null,-1)])],8,Un)]),jt(k("input",{ref_key:"searchInput",ref:z,"onUpdate:modelValue":p[2]||(p[2]=g=>Bt(h)?h.value=g:null),"aria-activedescendant":A.value>-1?"localsearch-item-"+A.value:void 0,"aria-autocomplete":"both","aria-controls":w.value?.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:C(E)("button.buttonText"),spellcheck:"false",type:"search"},null,8,qn),[[$t,C(h)]]),k("div",Hn,[S.value?ge("",!0):(B(),q("button",{key:0,class:Ge(["toggle-layout-button",{"detailed-list":C(y)}]),type:"button",title:C(E)("modal.displayDetails"),onClick:p[3]||(p[3]=g=>A.value>-1&&(y.value=!C(y)))},[...p[9]||(p[9]=[k("span",{class:"vpi-layout-list local-search-icon"},null,-1)])],10,Gn)),k("button",{class:"clear-button",type:"reset",disabled:$.value,title:C(E)("modal.resetButtonTitle"),onClick:d},[...p[10]||(p[10]=[k("span",{class:"vpi-delete local-search-icon"},null,-1)])],8,Qn)])],32),k("ul",{ref_key:"resultsEl",ref:s,id:w.value?.length?"localsearch-list":void 0,role:w.value?.length?"listbox":void 0,"aria-labelledby":w.value?.length?"localsearch-label":void 0,class:"results",onMousemove:I},[(B(!0),q(Ye,null,Qe(w.value,(g,_)=>(B(),q("li",{key:g.id,id:"localsearch-item-"+_,"aria-selected":A.value===_?"true":"false",role:"option"},[k("a",{href:g.id,class:Ge(["result",{selected:A.value===_}]),"aria-label":[...g.titles,g.title].join(" > "),onMouseenter:x=>!K.value&&(A.value=_),onFocusin:x=>A.value=_,onClick:p[6]||(p[6]=x=>m.$emit("close")),"data-index":_},[k("div",null,[k("div",er,[p[12]||(p[12]=k("span",{class:"title-icon"},"#",-1)),(B(!0),q(Ye,null,Qe(g.titles,(x,F)=>(B(),q("span",{key:F,class:"title"},[k("span",{class:"text",innerHTML:x},null,8,tr),p[11]||(p[11]=k("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),k("span",nr,[k("span",{class:"text",innerHTML:g.title},null,8,rr)])]),C(y)?(B(),q("div",sr,[g.text?(B(),q("div",ir,[k("div",{class:"vp-doc",innerHTML:g.text},null,8,ar)])):ge("",!0),p[13]||(p[13]=k("div",{class:"excerpt-gradient-bottom"},null,-1)),p[14]||(p[14]=k("div",{class:"excerpt-gradient-top"},null,-1))])):ge("",!0)])],42,Xn)],8,Zn))),128)),C(h)&&!w.value.length&&T.value?(B(),q("li",or,[fe(he(C(E)("modal.noResultsText"))+' "',1),k("strong",null,he(C(h)),1),p[15]||(p[15]=fe('" ',-1))])):ge("",!0)],40,Yn),k("div",lr,[k("span",null,[k("kbd",{"aria-label":C(E)("modal.footer.navigateUpKeyAriaLabel")},[...p[16]||(p[16]=[k("span",{class:"vpi-arrow-up navigate-icon"},null,-1)])],8,cr),k("kbd",{"aria-label":C(E)("modal.footer.navigateDownKeyAriaLabel")},[...p[17]||(p[17]=[k("span",{class:"vpi-arrow-down navigate-icon"},null,-1)])],8,ur),fe(" "+he(C(E)("modal.footer.navigateText")),1)]),k("span",null,[k("kbd",{"aria-label":C(E)("modal.footer.selectKeyAriaLabel")},[...p[18]||(p[18]=[k("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)])],8,dr),fe(" "+he(C(E)("modal.footer.selectText")),1)]),k("span",null,[k("kbd",{"aria-label":C(E)("modal.footer.closeKeyAriaLabel")},"esc",8,fr),fe(" "+he(C(E)("modal.footer.closeText")),1)])])])],8,Bn)]))}}),br=Ht(hr,[["__scopeId","data-v-8c9d8b44"]]);export{br as default}; diff --git a/docs/assets/chunks/framework.BXgR76oC.js b/docs/assets/chunks/framework.BXgR76oC.js deleted file mode 100644 index c052ce05b2..0000000000 --- a/docs/assets/chunks/framework.BXgR76oC.js +++ /dev/null @@ -1,4 +0,0 @@ -function wl(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Sl={},El=()=>{},Ri=Object.assign,Tl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},xl=Object.prototype.hasOwnProperty,Vn=(e,t)=>xl.call(e,t),dt=Array.isArray,Qt=e=>Yn(e)==="[object Map]",Cl=e=>Yn(e)==="[object Set]",on=e=>typeof e=="function",Al=e=>typeof e=="string",Mt=e=>typeof e=="symbol",Rt=e=>e!==null&&typeof e=="object",Ol=Object.prototype.toString,Yn=e=>Ol.call(e),Ml=e=>Yn(e).slice(8,-1),Rl=e=>Yn(e)==="[object Object]",Jn=e=>Al(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ge=(e,t)=>!Object.is(e,t),Pl=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})};let de;class Ll{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=de,!t&&de&&(this.index=(de.scopes||(de.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0){if(de===this)de=this.prevScope;else{let t=de;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(en){let t=en;for(en=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Zt;){let t=Zt;for(Zt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ii(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ni(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ir(s),Il(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function js(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Fi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Fi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ln)||(e.globalVersion=ln,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!js(e))))return;e.flags|=2;const t=e.dep,n=se,s=Ne;se=e,Ne=!0;try{Ii(e);const r=e.fn(e._value);(t.version===0||Ge(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{se=n,Ne=s,Ni(e),e.flags&=-3}}function ir(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)ir(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Il(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Di=[];function nt(){Di.push(Ne),Ne=!1}function st(){const e=Di.pop();Ne=e===void 0?!0:e}function Lr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=se;se=void 0;try{t()}finally{se=n}}}let ln=0;class Nl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Qn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!se||!Ne||se===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==se)n=this.activeLink=new Nl(se,this),se.deps?(n.prevDep=se.depsTail,se.depsTail.nextDep=n,se.depsTail=n):se.deps=se.depsTail=n,ji(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=se.depsTail,n.nextDep=void 0,se.depsTail.nextDep=n,se.depsTail=n,se.deps===n&&(se.deps=s)}return n}trigger(t){this.version++,ln++,this.notify(t)}notify(t){sr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{rr()}}}function ji(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ji(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const kn=new WeakMap,Et=Symbol(""),Hs=Symbol(""),cn=Symbol("");function ve(e,t,n){if(Ne&&se){let s=kn.get(e);s||kn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Qn),r.map=s,r.key=n),r.track()}}function Ze(e,t,n,s,r,i){const o=kn.get(e);if(!o){ln++;return}const l=c=>{c&&c.trigger()};if(sr(),t==="clear")o.forEach(l);else{const c=dt(e),u=c&&Jn(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,m)=>{(m==="length"||m===cn||!Mt(m)&&m>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),u&&l(o.get(cn)),t){case"add":c?u&&l(o.get("length")):(l(o.get(Et)),Qt(e)&&l(o.get(Hs)));break;case"delete":c||(l(o.get(Et)),Qt(e)&&l(o.get(Hs)));break;case"set":Qt(e)&&l(o.get(Et));break}}rr()}function Fl(e,t){const n=kn.get(e);return n&&n.get(t)}function Lt(e){const t=Z(e);return t===e?t:(ve(t,"iterate",cn),Me(e)?t:t.map(De))}function Zn(e){return ve(e=Z(e),"iterate",cn),e}function qe(e,t){return rt(e)?kt(ut(e)?De(t):t):De(t)}const Dl={__proto__:null,[Symbol.iterator](){return _s(this,Symbol.iterator,e=>qe(this,e))},concat(...e){return Lt(this).concat(...e.map(t=>dt(t)?Lt(t):t))},entries(){return _s(this,"entries",e=>(e[1]=qe(this,e[1]),e))},every(e,t){return Xe(this,"every",e,t,void 0,arguments)},filter(e,t){return Xe(this,"filter",e,t,n=>n.map(s=>qe(this,s)),arguments)},find(e,t){return Xe(this,"find",e,t,n=>qe(this,n),arguments)},findIndex(e,t){return Xe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Xe(this,"findLast",e,t,n=>qe(this,n),arguments)},findLastIndex(e,t){return Xe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Xe(this,"forEach",e,t,void 0,arguments)},includes(...e){return ws(this,"includes",e)},indexOf(...e){return ws(this,"indexOf",e)},join(e){return Lt(this).join(e)},lastIndexOf(...e){return ws(this,"lastIndexOf",e)},map(e,t){return Xe(this,"map",e,t,void 0,arguments)},pop(){return qt(this,"pop")},push(...e){return qt(this,"push",e)},reduce(e,...t){return $r(this,"reduce",e,t)},reduceRight(e,...t){return $r(this,"reduceRight",e,t)},shift(){return qt(this,"shift")},some(e,t){return Xe(this,"some",e,t,void 0,arguments)},splice(...e){return qt(this,"splice",e)},toReversed(){return Lt(this).toReversed()},toSorted(e){return Lt(this).toSorted(e)},toSpliced(...e){return Lt(this).toSpliced(...e)},unshift(...e){return qt(this,"unshift",e)},values(){return _s(this,"values",e=>qe(this,e))}};function _s(e,t,n){const s=Zn(e),r=s[t]();return s!==e&&!Me(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const jl=Array.prototype;function Xe(e,t,n,s,r,i){const o=Zn(e),l=o!==e&&!Me(e),c=o[t];if(c!==jl[t]){const d=c.apply(e,i);return l?De(d):d}let u=n;o!==e&&(l?u=function(d,m){return n.call(this,qe(e,d),m,e)}:n.length>2&&(u=function(d,m){return n.call(this,d,m,e)}));const a=c.call(o,u,s);return l&&r?r(a):a}function $r(e,t,n,s){const r=Zn(e),i=r!==e&&!Me(e);let o=n,l=!1;r!==e&&(i?(l=s.length===0,o=function(u,a,d){return l&&(l=!1,u=qe(e,u)),n.call(this,u,qe(e,a),d,e)}):n.length>3&&(o=function(u,a,d){return n.call(this,u,a,d,e)}));const c=r[t](o,...s);return l?qe(e,c):c}function ws(e,t,n){const s=Z(e);ve(s,"iterate",cn);const r=s[t](...n);return(r===-1||r===!1)&&ns(n[0])?(n[0]=Z(n[0]),s[t](...n)):r}function qt(e,t,n=[]){nt(),sr();const s=Z(e)[t].apply(e,n);return rr(),st(),s}const Hl=wl("__proto__,__v_isRef,__isVue"),Hi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Mt));function Vl(e){Mt(e)||(e=String(e));const t=Z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Vi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?qi:Ki:i?Bi:Wi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=dt(t);if(!r){let c;if(o&&(c=Dl[n]))return c;if(n==="hasOwnProperty")return Vl}const l=Reflect.get(t,n,ce(t)?t:s);if((Mt(n)?Hi.has(n):Hl(n))||(r||ve(t,"get",n),i))return l;if(ce(l)){const c=o&&Jn(n)?l:l.value;return r&&Rt(c)?an(c):c}return Rt(l)?r?an(l):Vt(l):l}}class ki extends Vi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=dt(t)&&Jn(n);if(!this._isShallow){const u=rt(i);if(!Me(s)&&!rt(s)&&(i=Z(i),s=Z(s)),!o&&ce(i)&&!ce(s))return u||(i.value=s),!0}const l=o?Number(n)e,En=e=>Reflect.getPrototypeOf(e);function Kl(e,t,n){return function(...s){const r=this.__v_raw,i=Z(r),o=Qt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),a=n?Vs:t?kt:De;return!t&&ve(i,"iterate",c?Hs:Et),Ri(Object.create(u),{next(){const{value:d,done:m}=u.next();return m?{value:d,done:m}:{value:l?[a(d[0]),a(d[1])]:a(d),done:m}}})}}function Tn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ql(e,t){const n={get(r){const i=this.__v_raw,o=Z(i),l=Z(r);e||(Ge(r,l)&&ve(o,"get",r),ve(o,"get",l));const{has:c}=En(o),u=t?Vs:e?kt:De;if(c.call(o,r))return u(i.get(r));if(c.call(o,l))return u(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ve(Z(r),"iterate",Et),r.size},has(r){const i=this.__v_raw,o=Z(i),l=Z(r);return e||(Ge(r,l)&&ve(o,"has",r),ve(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=Z(l),u=t?Vs:e?kt:De;return!e&&ve(c,"iterate",Et),l.forEach((a,d)=>r.call(i,u(a),u(d),o))}};return Ri(n,e?{add:Tn("add"),set:Tn("set"),delete:Tn("delete"),clear:Tn("clear")}:{add(r){const i=Z(this),o=En(i),l=Z(r),c=!t&&!Me(r)&&!rt(r)?l:r;return o.has.call(i,c)||Ge(r,c)&&o.has.call(i,r)||Ge(l,c)&&o.has.call(i,l)||(i.add(c),Ze(i,"add",c,c)),this},set(r,i){!t&&!Me(i)&&!rt(i)&&(i=Z(i));const o=Z(this),{has:l,get:c}=En(o);let u=l.call(o,r);u||(r=Z(r),u=l.call(o,r));const a=c.call(o,r);return o.set(r,i),u?Ge(i,a)&&Ze(o,"set",r,i):Ze(o,"add",r,i),this},delete(r){const i=Z(this),{has:o,get:l}=En(i);let c=o.call(i,r);c||(r=Z(r),c=o.call(i,r)),l&&l.call(i,r);const u=i.delete(r);return c&&Ze(i,"delete",r,void 0),u},clear(){const r=Z(this),i=r.size!==0,o=r.clear();return i&&Ze(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Kl(r,e,t)}),n}function es(e,t){const n=ql(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Vn(n,r)&&r in s?n:s,r,i)}const Gl={get:es(!1,!1)},zl={get:es(!1,!0)},Xl={get:es(!0,!1)},Yl={get:es(!0,!0)},Wi=new WeakMap,Bi=new WeakMap,Ki=new WeakMap,qi=new WeakMap;function Jl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ql(e){return e.__v_skip||!Object.isExtensible(e)?0:Jl(Ml(e))}function Vt(e){return rt(e)?e:ts(e,!1,kl,Gl,Wi)}function Zl(e){return ts(e,!1,Wl,zl,Bi)}function an(e){return ts(e,!0,Ul,Xl,Ki)}function ec(e){return ts(e,!0,Bl,Yl,qi)}function ts(e,t,n,s,r){if(!Rt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=Ql(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ut(e){return rt(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function rt(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function ns(e){return e?!!e.__v_raw:!1}function Z(e){const t=e&&e.__v_raw;return t?Z(t):e}function In(e){return!Vn(e,"__v_skip")&&Object.isExtensible(e)&&Pl(e,"__v_skip",!0),e}const De=e=>Rt(e)?Vt(e):e,kt=e=>Rt(e)?an(e):e;function ce(e){return e?e.__v_isRef===!0:!1}function Fe(e){return Gi(e,!1)}function ye(e){return Gi(e,!0)}function Gi(e,t){return ce(e)?e:new tc(e,t)}class tc{constructor(t,n){this.dep=new Qn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Z(t),this._value=n?t:De(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Me(t)||rt(t);t=s?t:Z(t),Ge(t,n)&&(this._rawValue=t,this._value=s?t:De(t),this.dep.trigger())}}function ss(e){return ce(e)?e.value:e}function oe(e){return on(e)?e():ss(e)}const nc={get:(e,t,n)=>t==="__v_raw"?e:ss(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ce(r)&&!ce(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function zi(e){return ut(e)?e:new Proxy(e,nc)}class sc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Qn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function rc(e){return new sc(e)}class ic{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=Mt(n)?n:String(n),this._raw=Z(t);let r=!0,i=t;if(!dt(t)||Mt(this._key)||!Jn(this._key))do r=!ns(i)||Me(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=ss(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ce(this._raw[this._key])){const n=this._object[this._key];if(ce(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Fl(this._raw,this._key)}}class oc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function lc(e,t,n){return ce(e)?e:on(e)?new oc(e):Rt(e)&&arguments.length>1?cc(e,t,n):Fe(e)}function cc(e,t,n){return new ic(e,t,n)}class ac{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Qn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ln-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&se!==this)return $i(this,!0),!0}get value(){const t=this.dep.track();return Fi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function uc(e,t,n=!1){let s,r;return on(e)?s=e:(s=e.get,r=e.set),new ac(s,r,n)}const xn={},Un=new WeakMap;let _t;function fc(e,t=!1,n=_t){if(n){let s=Un.get(n);s||Un.set(n,s=[]),s.push(e)}}function dc(e,t,n=Sl){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,u=g=>r?g:Me(g)||r===!1||r===0?et(g,1):et(g);let a,d,m,v,w=!1,_=!1;if(ce(e)?(d=()=>e.value,w=Me(e)):ut(e)?(d=()=>u(e),w=!0):dt(e)?(_=!0,w=e.some(g=>ut(g)||Me(g)),d=()=>e.map(g=>{if(ce(g))return g.value;if(ut(g))return u(g);if(on(g))return c?c(g,2):g()})):on(e)?t?d=c?()=>c(e,2):e:d=()=>{if(m){nt();try{m()}finally{st()}}const g=_t;_t=a;try{return c?c(e,3,[v]):e(v)}finally{_t=g}}:d=El,t&&r){const g=d,O=r===!0?1/0:r;d=()=>et(g(),O)}const R=nr(),D=()=>{a.stop(),R&&R.active&&Tl(R.effects,a)};if(i&&t){const g=t;t=(...O)=>{g(...O),D()}}let $=_?new Array(e.length).fill(xn):xn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const O=a.run();if(r||w||(_?O.some((B,P)=>Ge(B,$[P])):Ge(O,$))){m&&m();const B=_t;_t=a;try{const P=[O,$===xn?void 0:_&&$[0]===xn?[]:$,v];$=O,c?c(t,3,P):t(...P)}finally{_t=B}}}else a.run()};return l&&l(p),a=new Pi(d),a.scheduler=o?()=>o(p,!1):p,v=g=>fc(g,!1,a),m=a.onStop=()=>{const g=Un.get(a);if(g){if(c)c(g,4);else for(const O of g)O();Un.delete(a)}},t?s?p(!0):$=a.run():o?o(p.bind(null,!0),!0):a.run(),D.pause=a.pause.bind(a),D.resume=a.resume.bind(a),D.stop=D,D}function et(e,t=1/0,n){if(t<=0||!Rt(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ce(e))et(e.value,t,n);else if(dt(e))for(let s=0;s{et(s,t,n)});else if(Rl(e)){for(const s in e)et(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&et(e[s],t,n)}return e}function hc(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const te={},Dt=[],tt=()=>{},Xi=()=>!1,rs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),or=e=>e.startsWith("onUpdate:"),xe=Object.assign,Yi=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},pc=Object.prototype.hasOwnProperty,re=(e,t)=>pc.call(e,t),Y=Array.isArray,gc=e=>is(e)==="[object Map]",mc=e=>is(e)==="[object Set]",Ir=e=>is(e)==="[object Date]",z=e=>typeof e=="function",be=e=>typeof e=="string",un=e=>typeof e=="symbol",le=e=>e!==null&&typeof e=="object",Ji=e=>(le(e)||z(e))&&z(e.then)&&z(e.catch),Qi=Object.prototype.toString,is=e=>Qi.call(e),vc=e=>is(e)==="[object Object]",Tt=hc(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),os=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},yc=/-\w/g,je=os(e=>e.replace(yc,t=>t.slice(1).toUpperCase())),bc=/\B([A-Z])/g,mn=os(e=>e.replace(bc,"-$1").toLowerCase()),lr=os(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nn=os(e=>e?`on${lr(e)}`:""),Ss=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},wc=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Nr;const ls=()=>Nr||(Nr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function cr(e){if(Y(e)){const t={};for(let n=0;n{if(n){const s=n.split(Ec);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ar(e){let t="";if(be(e))t=e;else if(Y(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Ac=e=>be(e)?e:e==null?"":Y(e)||le(e)&&(e.toString===Qi||!z(e.toString))?Zi(e)?Ac(e.value):JSON.stringify(e,eo,2):String(e),eo=(e,t)=>Zi(t)?eo(e,t.value):gc(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Es(s,i)+" =>"]=r,n),{})}:mc(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Es(n))}:un(t)?Es(t):le(t)&&!Y(t)&&!vc(t)?String(t):t,Es=(e,t="")=>{var n;return un(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function vn(e,t,n,s){try{return s?e(...s):e()}catch(r){yn(r,t,n)}}function He(e,t,n,s){if(z(e)){const r=vn(e,t,n,s);return r&&Ji(r)&&r.catch(i=>{yn(i,t,n)}),r}if(Y(e)){const r=[];for(let i=0;i>>1,r=Se[s],i=fn(r);i=fn(n)?Se.push(e):Se.splice(Mc(t),0,e),e.flags|=1,no()}}function no(){Wn||(Wn=to.then(so))}function Rc(e){Y(e)?jt.push(...e):ct&&e.id===-1?ct.splice(It+1,0,e):e.flags&1||(jt.push(e),e.flags|=1),no()}function Fr(e,t,n=We+1){for(;nfn(n)-fn(s));if(jt.length=0,ct){ct.push(...t);return}for(ct=t,It=0;Ite.id==null?e.flags&2?-1:1/0:e.id;function so(e){try{for(We=0;We{s._d&&zn(-1);const i=Kn(t);let o;try{o=e(...r)}finally{Kn(i),s._d&&zn(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Uf(e,t){if(me===null)return e;const n=hs(me),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&z(t)?t.call(s&&s.proxy):t}}function io(){return!!(gt()||At)}const $c=Symbol.for("v-scx"),Ic=()=>xt($c);function dr(e,t){return as(e,null,t)}function Wf(e,t){return as(e,null,{flush:"post"})}function Re(e,t,n){return as(e,t,n)}function as(e,t,n=te){const{immediate:s,deep:r,flush:i,once:o}=n,l=xe({},n),c=t&&s||!t&&i!=="post";let u;if(Ut){if(i==="sync"){const v=Ic();u=v.__watcherHandles||(v.__watcherHandles=[])}else if(!c){const v=()=>{};return v.stop=tt,v.resume=tt,v.pause=tt,v}}const a=ge;l.call=(v,w,_)=>He(v,a,w,_);let d=!1;i==="post"?l.scheduler=v=>{we(v,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(v,w)=>{w?v():fr(v)}),l.augmentJob=v=>{t&&(v.flags|=4),d&&(v.flags|=2,a&&(v.id=a.uid,v.i=a))};const m=dc(e,t,l);return Ut&&(u?u.push(m):c&&m()),m}function Nc(e,t,n){const s=this.proxy,r=be(e)?e.includes(".")?oo(s,e):()=>s[e]:e.bind(s,s);let i;z(t)?i=t:(i=t.handler,n=t);const o=_n(this),l=as(r,i.bind(s),n);return o(),l}function oo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,wt=e=>e&&(e.disabled||e.disabled===""),Fc=e=>e&&(e.defer||e.defer===""),Dr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,jr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ks=(e,t)=>{const n=e&&e.to;return be(n)?t?t(n):null:n},Dc={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,u){const{mc:a,pc:d,pbc:m,o:{insert:v,querySelector:w,createText:_,createComment:R,parentNode:D}}=u,$=wt(t.props);let{dynamicChildren:p}=t;const g=(P,U,b)=>{P.shapeFlag&16&&a(P.children,U,b,r,i,o,l,c)},O=(P=t)=>{const U=wt(P.props),b=P.target=ks(P.props,w),A=Us(b,P,_,v);b&&(o!=="svg"&&Dr(b)?o="svg":o!=="mathml"&&jr(b)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(b),U||(g(P,b,A),Xt(P,!1)))},B=P=>{const U=()=>{if(lt.get(P)===U){if(lt.delete(P),wt(P.props)){const b=D(P.el)||n;g(P,b,P.anchor),Xt(P,!0)}O(P)}};lt.set(P,U),we(U,i)};if(e==null){const P=t.el=_(""),U=t.anchor=_("");if(v(P,n,s),v(U,n,s),Fc(t.props)||i&&i.pendingBranch){B(t);return}$&&(g(t,n,U),Xt(t,!0)),O()}else{t.el=e.el;const P=t.anchor=e.anchor,U=lt.get(e);if(U){U.flags|=8,lt.delete(e),B(t);return}t.targetStart=e.targetStart;const b=t.target=e.target,A=t.targetAnchor=e.targetAnchor,H=wt(e.props),S=H?n:b,k=H?P:A;if(o==="svg"||Dr(b)?o="svg":(o==="mathml"||jr(b))&&(o="mathml"),p?(m(e.dynamicChildren,p,S,r,i,o,l),vr(e,t,!0)):c||d(e,t,S,k,r,i,o,l,!1),$)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Cn(t,n,P,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const j=t.target=ks(t.props,w);j&&Cn(t,j,null,u,0)}else H&&Cn(t,b,A,u,1);Xt(t,$)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:u,targetAnchor:a,target:d,props:m}=e;let v=i||!wt(m);const w=lt.get(e);if(w&&(w.flags|=8,lt.delete(e),v=!1),d&&(r(u),r(a)),i&&r(c),o&16)for(let _=0;_{e.isMounted=!0}),mo(()=>{e.isUnmounting=!0}),e}const Pe=[Function,Array],ao={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Pe,onEnter:Pe,onAfterEnter:Pe,onEnterCancelled:Pe,onBeforeLeave:Pe,onLeave:Pe,onAfterLeave:Pe,onLeaveCancelled:Pe,onBeforeAppear:Pe,onAppear:Pe,onAfterAppear:Pe,onAppearCancelled:Pe},uo=e=>{const t=e.subTree;return t.component?uo(t.component):t},Vc={name:"BaseTransition",props:ao,setup(e,{slots:t}){const n=gt(),s=Hc();return()=>{const r=t.default&&po(t.default(),!0),i=r&&r.length?fo(r):n.subTree?Ra():void 0;if(!i)return;const o=Z(e),{mode:l}=o;if(s.isLeaving)return Ts(i);const c=Hr(i);if(!c)return Ts(i);let u=Ws(c,o,s,n,d=>u=d);c.type!==pe&&dn(c,u);let a=n.subTree&&Hr(n.subTree);if(a&&a.type!==pe&&!St(a,c)&&uo(n).type!==pe){let d=Ws(a,o,s,n);if(dn(a,d),l==="out-in"&&c.type!==pe)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},Ts(i);l==="in-out"&&c.type!==pe?d.delayLeave=(m,v,w)=>{const _=ho(s,a);_[String(a.key)]=a,m[Ke]=()=>{v(),m[Ke]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{w(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function fo(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==pe){t=n;break}}return t}const kc=Vc;function ho(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ws(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:m,onLeave:v,onAfterLeave:w,onLeaveCancelled:_,onBeforeAppear:R,onAppear:D,onAfterAppear:$,onAppearCancelled:p}=t,g=String(e.key),O=ho(n,e),B=(b,A)=>{b&&He(b,s,9,A)},P=(b,A)=>{const H=A[1];B(b,A),Y(b)?b.every(S=>S.length<=1)&&H():b.length<=1&&H()},U={mode:o,persisted:l,beforeEnter(b){let A=c;if(!n.isMounted)if(i)A=R||c;else return;b[Ke]&&b[Ke](!0);const H=O[g];H&&St(e,H)&&H.el[Ke]&&H.el[Ke](),B(A,[b])},enter(b){if(O[g]===e)return;let A=u,H=a,S=d;if(!n.isMounted)if(i)A=D||u,H=$||a,S=p||d;else return;let k=!1;b[Gt]=K=>{k||(k=!0,K?B(S,[b]):B(H,[b]),U.delayedLeave&&U.delayedLeave(),b[Gt]=void 0)};const j=b[Gt].bind(null,!1);A?P(A,[b,j]):j()},leave(b,A){const H=String(e.key);if(b[Gt]&&b[Gt](!0),n.isUnmounting)return A();B(m,[b]);let S=!1;b[Ke]=j=>{S||(S=!0,A(),j?B(_,[b]):B(w,[b]),b[Ke]=void 0,O[H]===e&&delete O[H])};const k=b[Ke].bind(null,!1);O[H]=e,v?P(v,[b,k]):k()},clone(b){const A=Ws(b,t,n,s,r);return r&&r(A),A}};return U}function Ts(e){if(bn(e))return e=ht(e),e.children=null,e}function Hr(e){if(!bn(e))return co(e.type)&&e.children?fo(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&z(n.default))return n.default()}}function dn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,dn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function po(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;in.value,set:i=>n.value=i})}return n}function Vr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const qn=new WeakMap;function Ht(e,t,n,s,r=!1){if(Y(e)){e.forEach((_,R)=>Ht(_,t&&(Y(t)?t[R]:t),n,s,r));return}if(Ct(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ht(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?hs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,a=l.refs===te?l.refs={}:l.refs,d=l.setupState,m=Z(d),v=d===te?Xi:_=>Vr(a,_)?!1:re(m,_),w=(_,R)=>!(R&&Vr(a,R));if(u!=null&&u!==c){if(kr(t),be(u))a[u]=null,v(u)&&(d[u]=null);else if(ce(u)){const _=t;w(u,_.k)&&(u.value=null),_.k&&(a[_.k]=null)}}if(z(c))vn(c,l,12,[o,a]);else{const _=be(c),R=ce(c);if(_||R){const D=()=>{if(e.f){const $=_?v(c)?d[c]:a[c]:w()||!e.k?c.value:a[e.k];if(r)Y($)&&Yi($,i);else if(Y($))$.includes(i)||$.push(i);else if(_)a[c]=[i],v(c)&&(d[c]=a[c]);else{const p=[i];w(c,e.k)&&(c.value=p),e.k&&(a[e.k]=p)}}else _?(a[c]=o,v(c)&&(d[c]=o)):R&&(w(c,e.k)&&(c.value=o),e.k&&(a[e.k]=o))};if(o){const $=()=>{D(),qn.delete(e)};$.id=-1,qn.set(e,$),we($,n)}else kr(e),D()}}}function kr(e){const t=qn.get(e);t&&(t.flags|=8,qn.delete(e))}let Ur=!1;const $t=()=>{Ur||(console.error("Hydration completed but contains mismatches."),Ur=!0)},Uc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Wc=e=>e.namespaceURI.includes("MathML"),An=e=>{if(e.nodeType===1){if(Uc(e))return"svg";if(Wc(e))return"mathml"}},Ft=e=>e.nodeType===8;function Bc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Bn(),g._vnode=p;return}d(g.firstChild,p,null,null,null),Bn(),g._vnode=p},d=(p,g,O,B,P,U=!1)=>{U=U||!!g.dynamicChildren;const b=Ft(p)&&p.data==="[",A=()=>_(p,g,O,B,P,b),{type:H,ref:S,shapeFlag:k,patchFlag:j}=g;let K=p.nodeType;g.el=p,j===-2&&(U=!1,g.dynamicChildren=null);let I=null;switch(H){case Ot:K!==3?g.children===""?(c(g.el=r(""),o(p),p),I=p):I=A():(p.data!==g.children&&($t(),p.data=g.children),I=i(p));break;case pe:$(p)?(I=i(p),D(g.el=p.content.firstChild,p,O)):K!==8||b?I=A():I=i(p);break;case nn:if(b&&(p=i(p),K=p.nodeType),K===1||K===3){I=p;const X=!g.children.length;for(let V=0;V{U=U||!!g.dynamicChildren;const{type:b,props:A,patchFlag:H,shapeFlag:S,dirs:k,transition:j}=g,K=b==="input"||b==="option";if(K||H!==-1){k&&Be(g,null,O,"created");let I=!1;if($(p)){I=Fo(null,j)&&O&&O.vnode.props&&O.vnode.props.appear;const V=p.content.firstChild;if(I){const J=V.getAttribute("class");J&&(V.$cls=J),j.beforeEnter(V)}D(V,p,O),g.el=p=V}if(S&16&&!(A&&(A.innerHTML||A.textContent))){let V=v(p.firstChild,g,p,O,B,P,U);for(;V;){On(p,1)||$t();const J=V;V=V.nextSibling,l(J)}}else if(S&8){let V=g.children;V[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1));const{textContent:J}=p;J!==V&&J!==V.replace(/\r\n|\r/g,` -`)&&(On(p,0)||$t(),p.textContent=g.children)}if(A){if(K||!U||H&48){const V=p.tagName.includes("-");for(const J in A)(K&&(J.endsWith("value")||J==="indeterminate")||rs(J)&&!Tt(J)||J[0]==="."||V&&!Tt(J))&&s(p,J,null,A[J],void 0,O)}else if(A.onClick)s(p,"onClick",null,A.onClick,void 0,O);else if(H&4&&ut(A.style))for(const V in A.style)A.style[V]}let X;(X=A&&A.onVnodeBeforeMount)&&Le(X,O,g),k&&Be(g,null,O,"beforeMount"),((X=A&&A.onVnodeMounted)||k||I)&&Vo(()=>{X&&Le(X,O,g),I&&j.enter(p),k&&Be(g,null,O,"mounted")},B)}return p.nextSibling},v=(p,g,O,B,P,U,b)=>{b=b||!!g.dynamicChildren;const A=g.children,H=A.length;for(let S=0;S{const{slotScopeIds:b}=g;b&&(P=P?P.concat(b):b);const A=o(p),H=v(i(p),g,A,O,B,P,U);return H&&Ft(H)&&H.data==="]"?i(g.anchor=H):($t(),c(g.anchor=u("]"),A,H),H)},_=(p,g,O,B,P,U)=>{if(On(p.parentElement,1)||$t(),g.el=null,U){const H=R(p);for(;;){const S=i(p);if(S&&S!==H)l(S);else break}}const b=i(p),A=o(p);return l(p),n(null,g,A,b,O,B,An(A),P),O&&(O.vnode.el=g.el,Co(O,g.el)),b},R=(p,g="[",O="]")=>{let B=0;for(;p;)if(p=i(p),p&&Ft(p)&&(p.data===g&&B++,p.data===O)){if(B===0)return i(p);B--}return p},D=(p,g,O)=>{const B=g.parentNode;B&&B.replaceChild(p,g);let P=O;for(;P;)P.vnode.el===g&&(P.vnode.el=P.subTree.el=p),P=P.parent},$=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const Wr="data-allow-mismatch",Kc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function On(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Wr);)e=e.parentElement;const n=e&&e.getAttribute(Wr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Kc[t])}}ls().requestIdleCallback;ls().cancelIdleCallback;function qc(e,t){if(Ft(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Ft(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const Ct=e=>!!e.type.__asyncLoader;function qf(e){z(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let u=null,a,d=0;const m=()=>(d++,u=null,v()),v=()=>{let w;return u||(w=u=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),c)return new Promise((R,D)=>{c(_,()=>R(m()),()=>D(_),d+1)});throw _}).then(_=>w!==u&&u?u:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),a=_,_)))};return hr({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(w,_,R){let D=!1;(_.bu||(_.bu=[])).push(()=>D=!0);const $=()=>{D||R()},p=i?()=>{const g=i($,O=>qc(w,O));g&&(_.bum||(_.bum=[])).push(g)}:$;a?p():v().then(()=>!_.isUnmounted&&p())},get __asyncResolved(){return a},setup(){const w=ge;if(pr(w),a)return()=>Mn(a,w);const _=p=>{u=null,yn(p,w,13,!s)};if(l&&w.suspense||Ut)return v().then(p=>()=>Mn(p,w)).catch(p=>(_(p),()=>s?ue(s,{error:p}):null));const R=Fe(!1),D=Fe(),$=Fe(!!r);return r&&setTimeout(()=>{$.value=!1},r),o!=null&&setTimeout(()=>{if(!R.value&&!D.value){const p=new Error(`Async component timed out after ${o}ms.`);_(p),D.value=p}},o),v().then(()=>{R.value=!0,w.parent&&bn(w.parent.vnode)&&w.parent.update()}).catch(p=>{_(p),D.value=p}),()=>{if(R.value&&a)return Mn(a,w);if(D.value&&s)return ue(s,{error:D.value});if(n&&!$.value)return Mn(n,w)}}})}function Mn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ue(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const bn=e=>e.type.__isKeepAlive;function Gc(e,t){go(e,"a",t)}function zc(e,t){go(e,"da",t)}function go(e,t,n=ge){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(us(t,s,n),n){let r=n.parent;for(;r&&r.parent;)bn(r.parent.vnode)&&Xc(s,t,n,r),r=r.parent}}function Xc(e,t,n,s){const r=us(t,e,s,!0);fs(()=>{Yi(s[t],r)},n)}function us(e,t,n=ge,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{nt();const l=_n(n),c=He(t,n,e,o);return l(),st(),c});return s?r.unshift(i):r.push(i),i}}const it=e=>(t,n=ge)=>{(!Ut||e==="sp")&&us(e,(...s)=>t(...s),n)},Yc=it("bm"),Wt=it("m"),Jc=it("bu"),Qc=it("u"),mo=it("bum"),fs=it("um"),Zc=it("sp"),ea=it("rtg"),ta=it("rtc");function na(e,t=ge){us("ec",e,t)}const vo="components";function Gf(e,t){return bo(vo,e,!0,t)||e}const yo=Symbol.for("v-ndc");function zf(e){return be(e)?bo(vo,e,!1)||e:e||yo}function bo(e,t,n=!0,s=!1){const r=me||ge;if(r){const i=r.type;{const l=ja(i,!1);if(l&&(l===t||l===je(t)||l===lr(je(t))))return i}const o=Br(r[e]||i[e],t)||Br(r.appContext[e],t);return!o&&s?i:o}}function Br(e,t){return e&&(e[t]||e[je(t)]||e[lr(je(t))])}function Xf(e,t,n,s){let r;const i=n,o=Y(e);if(o||be(e)){const l=o&&ut(e);let c=!1,u=!1;l&&(c=!Me(e),u=rt(e),e=Zn(e)),r=new Array(e.length);for(let a=0,d=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;c0;return t!=="default"&&(n.name=t),zs(),Xs(Ee,null,[ue("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),zs();const o=i&&_o(i(n)),l=n.key||o&&o.key,c=Xs(Ee,{key:(l&&!un(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function _o(e){return e.some(t=>pn(t)?!(t.type===pe||t.type===Ee&&!_o(t.children)):!0)?e:null}function Jf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:Nn(s)]=e[s];return n}const Bs=e=>e?Ko(e)?hs(e):Bs(e.parent):null,tn=xe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Bs(e.parent),$root:e=>Bs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>So(e),$forceUpdate:e=>e.f||(e.f=()=>{fr(e.update)}),$nextTick:e=>e.n||(e.n=cs.bind(e.proxy)),$watch:e=>Nc.bind(e)}),xs=(e,t)=>e!==te&&!e.__isScriptSetup&&re(e,t),sa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(xs(s,t))return o[t]=1,s[t];if(r!==te&&re(r,t))return o[t]=2,r[t];if(re(i,t))return o[t]=3,i[t];if(n!==te&&re(n,t))return o[t]=4,n[t];Ks&&(o[t]=0)}}const u=tn[t];let a,d;if(u)return t==="$attrs"&&ve(e.attrs,"get",""),u(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==te&&re(n,t))return o[t]=4,n[t];if(d=c.config.globalProperties,re(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return xs(r,t)?(r[t]=n,!0):s!==te&&re(s,t)?(s[t]=n,!0):re(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==te&&l[0]!=="$"&&re(e,l)||xs(t,l)||re(i,l)||re(s,l)||re(tn,l)||re(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:re(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Qf(){return ra().slots}function ra(e){const t=gt();return t.setupContext||(t.setupContext=Go(t))}function Kr(e){return Y(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Ks=!0;function ia(e){const t=So(e),n=e.proxy,s=e.ctx;Ks=!1,t.beforeCreate&&qr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:a,beforeMount:d,mounted:m,beforeUpdate:v,updated:w,activated:_,deactivated:R,beforeDestroy:D,beforeUnmount:$,destroyed:p,unmounted:g,render:O,renderTracked:B,renderTriggered:P,errorCaptured:U,serverPrefetch:b,expose:A,inheritAttrs:H,components:S,directives:k,filters:j}=t;if(u&&oa(u,s,null),o)for(const X in o){const V=o[X];z(V)&&(s[X]=V.bind(n))}if(r){const X=r.call(n,n);le(X)&&(e.data=Vt(X))}if(Ks=!0,i)for(const X in i){const V=i[X],J=z(V)?V.bind(n,n):z(V.get)?V.get.bind(n,n):tt,mt=!z(V)&&z(V.set)?V.set.bind(n):tt,Ve=ie({get:J,set:mt});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>Ve.value,set:ke=>Ve.value=ke})}if(l)for(const X in l)wo(l[X],s,n,X);if(c){const X=z(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Lc(V,X[V])})}a&&qr(a,e,"c");function I(X,V){Y(V)?V.forEach(J=>X(J.bind(n))):V&&X(V.bind(n))}if(I(Yc,d),I(Wt,m),I(Jc,v),I(Qc,w),I(Gc,_),I(zc,R),I(na,U),I(ta,B),I(ea,P),I(mo,$),I(fs,g),I(Zc,b),Y(A))if(A.length){const X=e.exposed||(e.exposed={});A.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:J=>n[V]=J,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===tt&&(e.render=O),H!=null&&(e.inheritAttrs=H),S&&(e.components=S),k&&(e.directives=k),b&&pr(e)}function oa(e,t,n=tt){Y(e)&&(e=qs(e));for(const s in e){const r=e[s];let i;le(r)?"default"in r?i=xt(r.from||s,r.default,!0):i=xt(r.from||s):i=xt(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function qr(e,t,n){He(Y(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function wo(e,t,n,s){let r=s.includes(".")?oo(n,s):()=>n[s];if(be(e)){const i=t[e];z(i)&&Re(r,i)}else if(z(e))Re(r,e.bind(n));else if(le(e))if(Y(e))e.forEach(i=>wo(i,t,n,s));else{const i=z(e.handler)?e.handler.bind(n):t[e.handler];z(i)&&Re(r,i,e)}}function So(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>Gn(c,u,o,!0)),Gn(c,t,o)),le(t)&&i.set(t,c),c}function Gn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Gn(e,i,n,!0),r&&r.forEach(o=>Gn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=la[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const la={data:Gr,props:zr,emits:zr,methods:Yt,computed:Yt,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:Yt,directives:Yt,watch:aa,provide:Gr,inject:ca};function Gr(e,t){return t?e?function(){return xe(z(e)?e.call(this,this):e,z(t)?t.call(this,this):t)}:t:e}function ca(e,t){return Yt(qs(e),qs(t))}function qs(e){if(Y(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${je(t)}Modifiers`]||e[`${mn(t)}Modifiers`];function ha(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||te;let r=n;const i=t.startsWith("update:"),o=i&&da(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>be(a)?a.trim():a)),o.number&&(r=n.map(wc)));let l,c=s[l=Nn(t)]||s[l=Nn(je(t))];!c&&i&&(c=s[l=Nn(mn(t))]),c&&He(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,He(u,e,6,r)}}const pa=new WeakMap;function To(e,t,n=!1){const s=n?pa:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!z(e)){const c=u=>{const a=To(u,t,!0);a&&(l=!0,xe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(le(e)&&s.set(e,null),null):(Y(i)?i.forEach(c=>o[c]=null):xe(o,i),le(e)&&s.set(e,o),o)}function ds(e,t){return!e||!rs(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,mn(t))||re(e,t))}function Cs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:a,props:d,data:m,setupState:v,ctx:w,inheritAttrs:_}=e,R=Kn(e);let D,$;try{if(n.shapeFlag&4){const g=r||s,O=g;D=$e(u.call(O,g,a,d,v,m,w)),$=l}else{const g=t;D=$e(g.length>1?g(d,{attrs:l,slots:o,emit:c}):g(d,null)),$=t.props?l:ga(l)}}catch(g){sn.length=0,yn(g,e,1),D=ue(pe)}let p=D;if($&&_!==!1){const g=Object.keys($),{shapeFlag:O}=p;g.length&&O&7&&(i&&g.some(or)&&($=ma($,i)),p=ht(p,$,!1,!0))}return n.dirs&&(p=ht(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&dn(p,n.transition),D=p,Kn(R),D}const ga=e=>{let t;for(const n in e)(n==="class"||n==="style"||rs(n))&&((t||(t={}))[n]=e[n]);return t},ma=(e,t)=>{const n={};for(const s in e)(!or(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function va(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Xr(s,o,u):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;dObject.create(Ao),Mo=e=>Object.getPrototypeOf(e)===Ao;function ya(e,t,n,s=!1){const r={},i=Oo();e.propsDefaults=Object.create(null),Ro(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Zl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ba(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=Z(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[m,v]=Po(d,t,!0);xe(o,m),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return le(e)&&s.set(e,Dt),Dt;if(Y(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",mr=e=>Y(e)?e.map($e):[$e(e)],wa=(e,t,n)=>{if(t._n)return t;const s=Pc((...r)=>mr(t(...r)),n);return s._c=!1,s},Lo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(gr(r))continue;const i=e[r];if(z(i))t[r]=wa(r,i,s);else if(i!=null){const o=mr(i);t[r]=()=>o}}},$o=(e,t)=>{const n=mr(t);e.slots.default=()=>n},Io=(e,t,n)=>{for(const s in t)(n||!gr(s))&&(e[s]=t[s])},Sa=(e,t,n)=>{const s=e.slots=Oo();if(e.vnode.shapeFlag&32){const r=t._;r?(Io(s,t,n),n&&_c(s,"_",r,!0)):Lo(t,s)}else t&&$o(e,t)},Ea=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Io(r,t,n):(i=!t.$stable,Lo(t,r)),o=t}else t&&($o(e,t),o={default:1});if(i)for(const l in r)!gr(l)&&o[l]==null&&delete r[l]},we=Vo;function Ta(e){return No(e)}function xa(e){return No(e,Bc)}function No(e,t){const n=ls();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:a,parentNode:d,nextSibling:m,setScopeId:v=tt,insertStaticContent:w}=e,_=(f,h,y,C=null,E=null,T=null,N=void 0,L=null,M=!!h.dynamicChildren)=>{if(f===h)return;f&&!St(f,h)&&(C=Sn(f),ke(f,E,T,!0),f=null),h.patchFlag===-2&&(M=!1,h.dynamicChildren=null);const{type:x,ref:q,shapeFlag:F}=h;switch(x){case Ot:R(f,h,y,C);break;case pe:D(f,h,y,C);break;case nn:f==null&&$(h,y,C,N);break;case Ee:S(f,h,y,C,E,T,N,L,M);break;default:F&1?O(f,h,y,C,E,T,N,L,M):F&6?k(f,h,y,C,E,T,N,L,M):(F&64||F&128)&&x.process(f,h,y,C,E,T,N,L,M,Pt)}q!=null&&E?Ht(q,f&&f.ref,T,h||f,!h):q==null&&f&&f.ref!=null&&Ht(f.ref,null,T,f,!0)},R=(f,h,y,C)=>{if(f==null)s(h.el=l(h.children),y,C);else{const E=h.el=f.el;h.children!==f.children&&u(E,h.children)}},D=(f,h,y,C)=>{f==null?s(h.el=c(h.children||""),y,C):h.el=f.el},$=(f,h,y,C)=>{[f.el,f.anchor]=w(f.children,h,y,C,f.el,f.anchor)},p=({el:f,anchor:h},y,C)=>{let E;for(;f&&f!==h;)E=m(f),s(f,y,C),f=E;s(h,y,C)},g=({el:f,anchor:h})=>{let y;for(;f&&f!==h;)y=m(f),r(f),f=y;r(h)},O=(f,h,y,C,E,T,N,L,M)=>{if(h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),f==null)B(h,y,C,E,T,N,L,M);else{const x=f.el&&f.el._isVueCE?f.el:null;try{x&&x._beginPatch(),b(f,h,E,T,N,L,M)}finally{x&&x._endPatch()}}},B=(f,h,y,C,E,T,N,L)=>{let M,x;const{props:q,shapeFlag:F,transition:W,dirs:G}=f;if(M=f.el=o(f.type,T,q&&q.is,q),F&8?a(M,f.children):F&16&&U(f.children,M,null,C,E,As(f,T),N,L),G&&Be(f,null,C,"created"),P(M,f,f.scopeId,N,C),q){for(const ee in q)ee!=="value"&&!Tt(ee)&&i(M,ee,null,q[ee],T,C);"value"in q&&i(M,"value",null,q.value,T),(x=q.onVnodeBeforeMount)&&Le(x,C,f)}G&&Be(f,null,C,"beforeMount");const Q=Fo(E,W);Q&&W.beforeEnter(M),s(M,h,y),((x=q&&q.onVnodeMounted)||Q||G)&&we(()=>{try{x&&Le(x,C,f),Q&&W.enter(M),G&&Be(f,null,C,"mounted")}finally{}},E)},P=(f,h,y,C,E)=>{if(y&&v(f,y),C)for(let T=0;T{for(let x=M;x{const L=h.el=f.el;let{patchFlag:M,dynamicChildren:x,dirs:q}=h;M|=f.patchFlag&16;const F=f.props||te,W=h.props||te;let G;if(y&&vt(y,!1),(G=W.onVnodeBeforeUpdate)&&Le(G,y,h,f),q&&Be(h,f,y,"beforeUpdate"),y&&vt(y,!0),(F.innerHTML&&W.innerHTML==null||F.textContent&&W.textContent==null)&&a(L,""),x?A(f.dynamicChildren,x,L,y,C,As(h,E),T):N||V(f,h,L,null,y,C,As(h,E),T,!1),M>0){if(M&16)H(L,F,W,y,E);else if(M&2&&F.class!==W.class&&i(L,"class",null,W.class,E),M&4&&i(L,"style",F.style,W.style,E),M&8){const Q=h.dynamicProps;for(let ee=0;ee{G&&Le(G,y,h,f),q&&Be(h,f,y,"updated")},C)},A=(f,h,y,C,E,T,N)=>{for(let L=0;L{if(h!==y){if(h!==te)for(const T in h)!Tt(T)&&!(T in y)&&i(f,T,h[T],null,E,C);for(const T in y){if(Tt(T))continue;const N=y[T],L=h[T];N!==L&&T!=="value"&&i(f,T,L,N,E,C)}"value"in y&&i(f,"value",h.value,y.value,E)}},S=(f,h,y,C,E,T,N,L,M)=>{const x=h.el=f?f.el:l(""),q=h.anchor=f?f.anchor:l("");let{patchFlag:F,dynamicChildren:W,slotScopeIds:G}=h;G&&(L=L?L.concat(G):G),f==null?(s(x,y,C),s(q,y,C),U(h.children||[],y,q,E,T,N,L,M)):F>0&&F&64&&W&&f.dynamicChildren&&f.dynamicChildren.length===W.length?(A(f.dynamicChildren,W,y,E,T,N,L),(h.key!=null||E&&h===E.subTree)&&vr(f,h,!0)):V(f,h,y,q,E,T,N,L,M)},k=(f,h,y,C,E,T,N,L,M)=>{h.slotScopeIds=L,f==null?h.shapeFlag&512?E.ctx.activate(h,y,C,N,M):j(h,y,C,E,T,N,M):K(f,h,M)},j=(f,h,y,C,E,T,N)=>{const L=f.component=Ia(f,C,E);if(bn(f)&&(L.ctx.renderer=Pt),Na(L,!1,N),L.asyncDep){if(E&&E.registerDep(L,I,N),!f.el){const M=L.subTree=ue(pe);D(null,M,h,y),f.placeholder=M.el}}else I(L,f,h,y,E,T,N)},K=(f,h,y)=>{const C=h.component=f.component;if(va(f,h,y))if(C.asyncDep&&!C.asyncResolved){X(C,h,y);return}else C.next=h,C.update();else h.el=f.el,C.vnode=h},I=(f,h,y,C,E,T,N)=>{const L=()=>{if(f.isMounted){let{next:F,bu:W,u:G,parent:Q,vnode:ee}=f;{const Ce=Do(f);if(Ce){F&&(F.el=ee.el,X(f,F,N)),Ce.asyncDep.then(()=>{we(()=>{f.isUnmounted||x()},E)});return}}let ne=F,ae;vt(f,!1),F?(F.el=ee.el,X(f,F,N)):F=ee,W&&Ss(W),(ae=F.props&&F.props.onVnodeBeforeUpdate)&&Le(ae,Q,F,ee),vt(f,!0);const fe=Cs(f),Ie=f.subTree;f.subTree=fe,_(Ie,fe,d(Ie.el),Sn(Ie),f,E,T),F.el=fe.el,ne===null&&Co(f,fe.el),G&&we(G,E),(ae=F.props&&F.props.onVnodeUpdated)&&we(()=>Le(ae,Q,F,ee),E)}else{let F;const{el:W,props:G}=h,{bm:Q,m:ee,parent:ne,root:ae,type:fe}=f,Ie=Ct(h);if(vt(f,!1),Q&&Ss(Q),!Ie&&(F=G&&G.onVnodeBeforeMount)&&Le(F,ne,h),vt(f,!0),W&&ys){const Ce=()=>{f.subTree=Cs(f),ys(W,f.subTree,f,E,null)};Ie&&fe.__asyncHydrate?fe.__asyncHydrate(W,f,Ce):Ce()}else{ae.ce&&ae.ce._hasShadowRoot()&&ae.ce._injectChildStyle(fe,f.parent?f.parent.type:void 0);const Ce=f.subTree=Cs(f);_(null,Ce,y,C,f,E,T),h.el=Ce.el}if(ee&&we(ee,E),!Ie&&(F=G&&G.onVnodeMounted)){const Ce=h;we(()=>Le(F,ne,Ce),E)}(h.shapeFlag&256||ne&&Ct(ne.vnode)&&ne.vnode.shapeFlag&256)&&f.a&&we(f.a,E),f.isMounted=!0,h=y=C=null}};f.scope.on();const M=f.effect=new Pi(L);f.scope.off();const x=f.update=M.run.bind(M),q=f.job=M.runIfDirty.bind(M);q.i=f,q.id=f.uid,M.scheduler=()=>fr(q),vt(f,!0),x()},X=(f,h,y)=>{h.component=f;const C=f.vnode.props;f.vnode=h,f.next=null,ba(f,h.props,C,y),Ea(f,h.children,y),nt(),Fr(f),st()},V=(f,h,y,C,E,T,N,L,M=!1)=>{const x=f&&f.children,q=f?f.shapeFlag:0,F=h.children,{patchFlag:W,shapeFlag:G}=h;if(W>0){if(W&128){mt(x,F,y,C,E,T,N,L,M);return}else if(W&256){J(x,F,y,C,E,T,N,L,M);return}}G&8?(q&16&&Bt(x,E,T),F!==x&&a(y,F)):q&16?G&16?mt(x,F,y,C,E,T,N,L,M):Bt(x,E,T,!0):(q&8&&a(y,""),G&16&&U(F,y,C,E,T,N,L,M))},J=(f,h,y,C,E,T,N,L,M)=>{f=f||Dt,h=h||Dt;const x=f.length,q=h.length,F=Math.min(x,q);let W;for(W=0;Wq?Bt(f,E,T,!0,!1,F):U(h,y,C,E,T,N,L,M,F)},mt=(f,h,y,C,E,T,N,L,M)=>{let x=0;const q=h.length;let F=f.length-1,W=q-1;for(;x<=F&&x<=W;){const G=f[x],Q=h[x]=M?Qe(h[x]):$e(h[x]);if(St(G,Q))_(G,Q,y,null,E,T,N,L,M);else break;x++}for(;x<=F&&x<=W;){const G=f[F],Q=h[W]=M?Qe(h[W]):$e(h[W]);if(St(G,Q))_(G,Q,y,null,E,T,N,L,M);else break;F--,W--}if(x>F){if(x<=W){const G=W+1,Q=GW)for(;x<=F;)ke(f[x],E,T,!0),x++;else{const G=x,Q=x,ee=new Map;for(x=Q;x<=W;x++){const Ae=h[x]=M?Qe(h[x]):$e(h[x]);Ae.key!=null&&ee.set(Ae.key,x)}let ne,ae=0;const fe=W-Q+1;let Ie=!1,Ce=0;const Kt=new Array(fe);for(x=0;x=fe){ke(Ae,E,T,!0);continue}let Ue;if(Ae.key!=null)Ue=ee.get(Ae.key);else for(ne=Q;ne<=W;ne++)if(Kt[ne-Q]===0&&St(Ae,h[ne])){Ue=ne;break}Ue===void 0?ke(Ae,E,T,!0):(Kt[Ue-Q]=x+1,Ue>=Ce?Ce=Ue:Ie=!0,_(Ae,h[Ue],y,null,E,T,N,L,M),ae++)}const Mr=Ie?Ca(Kt):Dt;for(ne=Mr.length-1,x=fe-1;x>=0;x--){const Ae=Q+x,Ue=h[Ae],Rr=h[Ae+1],Pr=Ae+1{const{el:T,type:N,transition:L,children:M,shapeFlag:x}=f;if(x&6){Ve(f.component.subTree,h,y,C);return}if(x&128){f.suspense.move(h,y,C);return}if(x&64){N.move(f,h,y,Pt);return}if(N===Ee){s(T,h,y);for(let F=0;FL.enter(T),E);else{const{leave:F,delayLeave:W,afterLeave:G}=L,Q=()=>{f.ctx.isUnmounted?r(T):s(T,h,y)},ee=()=>{T._isLeaving&&T[Ke](!0),F(T,()=>{Q(),G&&G()})};W?W(T,Q,ee):ee()}else s(T,h,y)},ke=(f,h,y,C=!1,E=!1)=>{const{type:T,props:N,ref:L,children:M,dynamicChildren:x,shapeFlag:q,patchFlag:F,dirs:W,cacheIndex:G,memo:Q}=f;if(F===-2&&(E=!1),L!=null&&(nt(),Ht(L,null,y,f,!0),st()),G!=null&&(h.renderCache[G]=void 0),q&256){h.ctx.deactivate(f);return}const ee=q&1&&W,ne=!Ct(f);let ae;if(ne&&(ae=N&&N.onVnodeBeforeUnmount)&&Le(ae,h,f),q&6)_l(f.component,y,C);else{if(q&128){f.suspense.unmount(y,C);return}ee&&Be(f,null,h,"beforeUnmount"),q&64?f.type.remove(f,h,y,Pt,C):x&&!x.hasOnce&&(T!==Ee||F>0&&F&64)?Bt(x,h,y,!1,!0):(T===Ee&&F&384||!E&&q&16)&&Bt(M,h,y),C&&Ar(f)}const fe=Q!=null&&G==null;(ne&&(ae=N&&N.onVnodeUnmounted)||ee||fe)&&we(()=>{ae&&Le(ae,h,f),ee&&Be(f,null,h,"unmounted"),fe&&(f.el=null)},y)},Ar=f=>{const{type:h,el:y,anchor:C,transition:E}=f;if(h===Ee){bl(y,C);return}if(h===nn){g(f);return}const T=()=>{r(y),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(f.shapeFlag&1&&E&&!E.persisted){const{leave:N,delayLeave:L}=E,M=()=>N(y,T);L?L(f.el,T,M):M()}else T()},bl=(f,h)=>{let y;for(;f!==h;)y=m(f),r(f),f=y;r(h)},_l=(f,h,y)=>{const{bum:C,scope:E,job:T,subTree:N,um:L,m:M,a:x}=f;Jr(M),Jr(x),C&&Ss(C),E.stop(),T&&(T.flags|=8,ke(N,f,h,y)),L&&we(L,h),we(()=>{f.isUnmounted=!0},h)},Bt=(f,h,y,C=!1,E=!1,T=0)=>{for(let N=T;N{if(f.shapeFlag&6)return Sn(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=m(f.anchor||f.el),y=h&&h[lo];return y?m(y):h};let ms=!1;const Or=(f,h,y)=>{let C;f==null?h._vnode&&(ke(h._vnode,null,null,!0),C=h._vnode.component):_(h._vnode||null,f,h,null,null,null,y),h._vnode=f,ms||(ms=!0,Fr(C),Bn(),ms=!1)},Pt={p:_,um:ke,m:Ve,r:Ar,mt:j,mc:U,pc:V,pbc:A,n:Sn,o:e};let vs,ys;return t&&([vs,ys]=t(Pt)),{render:Or,hydrate:vs,createApp:fa(Or,vs)}}function As({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function vt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Fo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vr(e,t,n=!1){const s=e.children,r=t.children;if(Y(s)&&Y(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Do(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Do(t)}function Jr(e){if(e)for(let t=0;te.__isSuspense;function Vo(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):Rc(e)}const Ee=Symbol.for("v-fgt"),Ot=Symbol.for("v-txt"),pe=Symbol.for("v-cmt"),nn=Symbol.for("v-stc"),sn=[];let Oe=null;function zs(e=!1){sn.push(Oe=e?null:[])}function Aa(){sn.pop(),Oe=sn[sn.length-1]||null}let hn=1;function zn(e,t=!1){hn+=e,e<0&&Oe&&t&&(Oe.hasOnce=!0)}function ko(e){return e.dynamicChildren=hn>0?Oe||Dt:null,Aa(),hn>0&&Oe&&Oe.push(e),e}function Zf(e,t,n,s,r,i){return ko(Wo(e,t,n,s,r,i,!0))}function Xs(e,t,n,s,r){return ko(ue(e,t,n,s,r,!0))}function pn(e){return e?e.__v_isVNode===!0:!1}function St(e,t){return e.type===t.type&&e.key===t.key}const Uo=({key:e})=>e??null,Fn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?be(e)||ce(e)||z(e)?{i:me,r:e,k:t,f:!!n}:e:null);function Wo(e,t=null,n=null,s=0,r=null,i=e===Ee?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Uo(t),ref:t&&Fn(t),scopeId:ro,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:me};return l?(yr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=be(n)?8:16),hn>0&&!o&&Oe&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Oe.push(c),c}const ue=Oa;function Oa(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===yo)&&(e=pe),pn(e)){const l=ht(e,t,!0);return n&&yr(l,n),hn>0&&!i&&Oe&&(l.shapeFlag&6?Oe[Oe.indexOf(e)]=l:Oe.push(l)),l.patchFlag=-2,l}if(Ha(e)&&(e=e.__vccOpts),t){t=Ma(t);let{class:l,style:c}=t;l&&!be(l)&&(t.class=ar(l)),le(c)&&(ns(c)&&!Y(c)&&(c=xe({},c)),t.style=cr(c))}const o=be(e)?1:Ho(e)?128:co(e)?64:le(e)?4:z(e)?2:0;return Wo(e,t,n,s,r,o,i,!0)}function Ma(e){return e?ns(e)||Mo(e)?xe({},e):e:null}function ht(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?Pa(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Uo(u),ref:t&&t.ref?n&&i?Y(i)?i.concat(Fn(t)):[i,Fn(t)]:Fn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ee?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ht(e.ssContent),ssFallback:e.ssFallback&&ht(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&dn(a,c.clone(a)),a}function Bo(e=" ",t=0){return ue(Ot,null,e,t)}function ed(e,t){const n=ue(nn,null,e);return n.staticCount=t,n}function Ra(e="",t=!1){return t?(zs(),Xs(pe,null,e)):ue(pe,null,e)}function $e(e){return e==null||typeof e=="boolean"?ue(pe):Y(e)?ue(Ee,null,e.slice()):pn(e)?Qe(e):ue(Ot,null,String(e))}function Qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ht(e)}function yr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),yr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Mo(t)?t._ctx=me:r===3&&me&&(me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else z(t)?(t={default:t,_ctx:me},n=32):(t=String(t),s&64?(n=16,t=[Bo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Pa(...e){const t={};for(let n=0;nge||me;let Xn,Ys;{const e=ls(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Xn=t("__VUE_INSTANCE_SETTERS__",n=>ge=n),Ys=t("__VUE_SSR_SETTERS__",n=>Ut=n)}const _n=e=>{const t=ge;return Xn(e),e.scope.on(),()=>{e.scope.off(),Xn(t)}},Qr=()=>{ge&&ge.scope.off(),Xn(null)};function Ko(e){return e.vnode.shapeFlag&4}let Ut=!1;function Na(e,t=!1,n=!1){t&&Ys(t);const{props:s,children:r}=e.vnode,i=Ko(e);ya(e,s,i,t),Sa(e,r,n||t);const o=i?Fa(e,t):void 0;return t&&Ys(!1),o}function Fa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,sa);const{setup:s}=n;if(s){nt();const r=e.setupContext=s.length>1?Go(e):null,i=_n(e),o=vn(s,e,0,[e.props,r]),l=Ji(o);if(st(),i(),(l||e.sp)&&!Ct(e)&&pr(e),l){if(o.then(Qr,Qr),t)return o.then(c=>{Zr(e,c)}).catch(c=>{yn(c,e,0)});e.asyncDep=o}else Zr(e,o)}else qo(e)}function Zr(e,t,n){z(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:le(t)&&(e.setupState=zi(t)),qo(e)}function qo(e,t,n){const s=e.type;e.render||(e.render=s.render||tt);{const r=_n(e);nt();try{ia(e)}finally{st(),r()}}}const Da={get(e,t){return ve(e,"get",""),e[t]}};function Go(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Da),slots:e.slots,emit:e.emit,expose:t}}function hs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(zi(In(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in tn)return tn[n](e)},has(t,n){return n in t||n in tn}})):e.proxy}function ja(e,t=!0){return z(e)?e.displayName||e.name:e.name||t&&e.__name}function Ha(e){return z(e)&&"__vccOpts"in e}const ie=(e,t)=>uc(e,t,Ut);function Js(e,t,n){try{zn(-1);const s=arguments.length;return s===2?le(t)&&!Y(t)?pn(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pn(n)&&(n=[n]),ue(e,t,n))}finally{zn(1)}}const Va="3.5.33";function ka(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ua=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Wa=e=>e.startsWith("onUpdate:"),br=Object.assign,wn=Array.isArray,zo=e=>typeof e=="function",ft=e=>typeof e=="string",Ba=e=>typeof e=="symbol",Ka=e=>e!==null&&typeof e=="object",_r=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},qa=/-\w/g,Dn=_r(e=>e.replace(qa,t=>t.slice(1).toUpperCase())),Ga=/\B([A-Z])/g,wr=_r(e=>e.replace(Ga,"-$1").toLowerCase()),za=_r(e=>e.charAt(0).toUpperCase()+e.slice(1)),Xa=(e,...t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t},Ya=e=>{const t=ft(e)?Number(e):NaN;return isNaN(t)?e:t},Ja="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Qa=ka(Ja);function Yo(e){return!!e||e===""}let Qs;const ei=typeof window<"u"&&window.trustedTypes;if(ei)try{Qs=ei.createPolicy("vue",{createHTML:e=>e})}catch{}const Jo=Qs?e=>Qs.createHTML(e):e=>e,Za="http://www.w3.org/2000/svg",eu="http://www.w3.org/1998/Math/MathML",Je=typeof document<"u"?document:null,ti=Je&&Je.createElement("template"),tu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Je.createElementNS(Za,e):t==="mathml"?Je.createElementNS(eu,e):n?Je.createElement(e,{is:n}):Je.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Je.createTextNode(e),createComment:e=>Je.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Je.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{ti.innerHTML=Jo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=ti.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ot="transition",zt="animation",gn=Symbol("_vtc"),Qo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},nu=br({},ao,Qo),su=e=>(e.displayName="Transition",e.props=nu,e),td=su((e,{slots:t})=>Js(kc,ru(e),t)),yt=(e,t=[])=>{wn(e)?e.forEach(n=>n(...t)):e&&e(...t)},ni=e=>e?wn(e)?e.some(t=>t.length>1):e.length>1:!1;function ru(e){const t={};for(const S in e)S in Qo||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,w=iu(r),_=w&&w[0],R=w&&w[1],{onBeforeEnter:D,onEnter:$,onEnterCancelled:p,onLeave:g,onLeaveCancelled:O,onBeforeAppear:B=D,onAppear:P=$,onAppearCancelled:U=p}=t,b=(S,k,j,K)=>{S._enterCancelled=K,bt(S,k?a:l),bt(S,k?u:o),j&&j()},A=(S,k)=>{S._isLeaving=!1,bt(S,d),bt(S,v),bt(S,m),k&&k()},H=S=>(k,j)=>{const K=S?P:$,I=()=>b(k,S,j);yt(K,[k,I]),si(()=>{bt(k,S?c:i),Ye(k,S?a:l),ni(K)||ri(k,s,_,I)})};return br(t,{onBeforeEnter(S){yt(D,[S]),Ye(S,i),Ye(S,o)},onBeforeAppear(S){yt(B,[S]),Ye(S,c),Ye(S,u)},onEnter:H(!1),onAppear:H(!0),onLeave(S,k){S._isLeaving=!0;const j=()=>A(S,k);Ye(S,d),S._enterCancelled?(Ye(S,m),li(S)):(li(S),Ye(S,m)),si(()=>{S._isLeaving&&(bt(S,d),Ye(S,v),ni(g)||ri(S,s,R,j))}),yt(g,[S,j])},onEnterCancelled(S){b(S,!1,void 0,!0),yt(p,[S])},onAppearCancelled(S){b(S,!0,void 0,!0),yt(U,[S])},onLeaveCancelled(S){A(S),yt(O,[S])}})}function iu(e){if(e==null)return null;if(Ka(e))return[Os(e.enter),Os(e.leave)];{const t=Os(e);return[t,t]}}function Os(e){return Ya(e)}function Ye(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[gn]||(e[gn]=new Set)).add(t)}function bt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[gn];n&&(n.delete(t),n.size||(e[gn]=void 0))}function si(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ou=0;function ri(e,t,n,s){const r=e._endId=++ou,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=lu(e,t);if(!o)return s();const u=o+"end";let a=0;const d=()=>{e.removeEventListener(u,m),i()},m=v=>{v.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[w]||"").split(", "),r=s(`${ot}Delay`),i=s(`${ot}Duration`),o=ii(r,i),l=s(`${zt}Delay`),c=s(`${zt}Duration`),u=ii(l,c);let a=null,d=0,m=0;t===ot?o>0&&(a=ot,d=o,m=i.length):t===zt?u>0&&(a=zt,d=u,m=c.length):(d=Math.max(o,u),a=d>0?o>u?ot:zt:null,m=a?a===ot?i.length:c.length:0);const v=a===ot&&/\b(?:transform|all)(?:,|$)/.test(s(`${ot}Property`).toString());return{type:a,timeout:d,propCount:m,hasTransform:v}}function ii(e,t){for(;e.lengthoi(n)+oi(e[s])))}function oi(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function li(e){return(e?e.ownerDocument:document).body.offsetHeight}function cu(e,t,n){const s=e[gn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ci=Symbol("_vod"),au=Symbol("_vsh"),uu=Symbol(""),fu=/(?:^|;)\s*display\s*:/;function du(e,t,n){const s=e.style,r=ft(n);let i=!1;if(n&&!r){if(t)if(ft(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Jt(s,l,"")}else for(const o in t)n[o]==null&&Jt(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?pu(e,o,!ft(t)&&t?t[o]:void 0,l)||Jt(s,o,l):Jt(s,o,"")}}else if(r){if(t!==n){const o=s[uu];o&&(n+=";"+o),s.cssText=n,i=fu.test(n)}}else t&&e.removeAttribute("style");ci in e&&(e[ci]=i?s.display:"",e[au]&&(s.display="none"))}const ai=/\s*!important$/;function Jt(e,t,n){if(wn(n))n.forEach(s=>Jt(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=hu(e,t);ai.test(n)?e.setProperty(wr(s),n.replace(ai,""),"important"):e[s]=n}}const ui=["Webkit","Moz","ms"],Ms={};function hu(e,t){const n=Ms[t];if(n)return n;let s=je(t);if(s!=="filter"&&s in e)return Ms[t]=s;s=za(s);for(let r=0;rRs||(yu.then(()=>Rs=0),Rs=Date.now());function _u(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;He(wu(s,n.value),t,5,[s])};return n.value=e,n.attached=bu(),n}function wu(e,t){if(wn(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const mi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Su=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?cu(e,s,o):t==="style"?du(e,n,s):Ua(t)?Wa(t)||mu(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Eu(e,t,s,o))?(hi(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&di(e,t,s,o,i,t!=="value")):e._isVueCE&&(Tu(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ft(s)))?hi(e,Dn(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),di(e,t,s,o))};function Eu(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&mi(t)&&zo(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return mi(t)&&ft(n)?!1:t in e}function Tu(e,t){const n=e._def.props;if(!n)return!1;const s=Dn(t);return Array.isArray(n)?n.some(r=>Dn(r)===s):Object.keys(n).some(r=>Dn(r)===s)}const vi=e=>{const t=e.props["onUpdate:modelValue"]||!1;return wn(t)?n=>Xa(t,n):t};function xu(e){e.target.composing=!0}function yi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ps=Symbol("_assign");function bi(e,t,n){return t&&(e=e.trim()),n&&(e=Xo(e)),e}const nd={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[Ps]=vi(r);const i=s||r.props&&r.props.type==="number";Nt(e,t?"change":"input",o=>{o.target.composing||e[Ps](bi(e.value,n,i))}),(n||i)&&Nt(e,"change",()=>{e.value=bi(e.value,n,i)}),t||(Nt(e,"compositionstart",xu),Nt(e,"compositionend",yi),Nt(e,"change",yi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Ps]=vi(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Xo(e.value):e.value,c=t??"";if(l===c)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},Cu=["ctrl","shift","alt","meta"],Au={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Cu.some(n=>e[`${n}Key`]&&!t.includes(n))},sd=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const i=wr(r.key);if(t.some(o=>o===i||Ou[o]===i))return e(r)}))},Zo=br({patchProp:Su},tu);let rn,_i=!1;function Mu(){return rn||(rn=Ta(Zo))}function Ru(){return rn=_i?rn:xa(Zo),_i=!0,rn}const id=((...e)=>{const t=Mu().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=tl(s);if(!r)return;const i=t._component;!zo(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,el(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t}),od=((...e)=>{const t=Ru().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=tl(s);if(r)return n(r,!0,el(r))},t});function el(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function tl(e){return ft(e)?document.querySelector(e):e}const ld=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Pu=window.__VP_SITE_DATA__;function nl(e,t){return nr()?($l(e,t),!0):!1}const Ls=new WeakMap,Lu=(...e)=>{var t;const n=e[0],s=(t=gt())===null||t===void 0?void 0:t.proxy,r=s??nr();if(r==null&&!io())throw new Error("injectLocal must be called in setup");return r&&Ls.has(r)&&n in Ls.get(r)?Ls.get(r)[n]:xt(...e)},sl=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const $u=e=>e!=null,Iu=Object.prototype.toString,Nu=e=>Iu.call(e)==="[object Object]",pt=()=>{},wi=Fu();function Fu(){var e,t,n;return sl&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function Sr(...e){if(e.length!==1)return lc(...e);const t=e[0];return typeof t=="function"?an(rc(()=>({get:t,set:pt}))):Fe(t)}function Er(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const rl=e=>e();function il(e,t={}){let n,s,r=pt;const i=c=>{clearTimeout(c),r(),r=pt};let o;return c=>{const u=oe(e),a=oe(t.maxWait);return n&&i(n),u<=0||a!==void 0&&a<=0?(s&&(i(s),s=void 0),Promise.resolve(c())):new Promise((d,m)=>{r=t.rejectOnCancel?m:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=void 0,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=void 0,d(c())},u)})}}function Du(...e){let t=0,n,s=!0,r=pt,i,o,l,c,u;!ce(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[o,l=!0,c=!0,u=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=pt)};return m=>{const v=oe(o),w=Date.now()-t,_=()=>i=m();return a(),v<=0?(t=Date.now(),_()):(w>v?(t=Date.now(),(c||!s)&&_()):l&&(i=new Promise((R,D)=>{r=u?D:R,n=setTimeout(()=>{t=Date.now(),s=!0,R(_()),a()},Math.max(0,v-w))})),!c&&!n&&(n=setTimeout(()=>s=!0,v)),s=!1,i)}}function ju(e=rl,t={}){const{initialState:n="active"}=t,s=Sr(n==="active");function r(){s.value=!1}function i(){s.value=!0}return{isActive:ec(s),pause:r,resume:i,eventFilter:(...l)=>{s.value&&e(...l)}}}function Si(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function jn(e){return Array.isArray(e)?e:[e]}function ol(e){return gt()}function Hu(e,t=200,n={}){return Er(il(t,n),e)}function Vu(e,t=200,n=!1,s=!0,r=!1){return Er(Du(t,n,s,r),e)}function ll(e,t,n={}){const{eventFilter:s=rl,...r}=n;return Re(e,Er(s,t),r)}function ku(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:u}=ju(s,{initialState:r});return{stop:ll(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:u}}function ps(e,t=!0,n){ol()?Wt(e,n):t?e():cs(e)}function Uu(e,t){ol()&&fs(e,t)}function cd(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return ll(e,t,{...i,eventFilter:il(s,{maxWait:r})})}function Wu(e,t,n){return Re(e,t,{...n,immediate:!0})}function ad(e,t,n){var s;let r;ce(n)?r={evaluating:n}:r=n||{};const{lazy:i=!1,flush:o="sync",evaluating:l=void 0,shallow:c=!0,onError:u=(s=globalThis.reportError)!==null&&s!==void 0?s:pt}=r,a=ye(!i),d=c?ye(t):Fe(t);let m=0;return dr(async v=>{if(!a.value)return;m++;const w=m;let _=!1;l&&Promise.resolve().then(()=>{l.value=!0});try{const R=await e(D=>{v(()=>{l&&(l.value=!1),_||D()})});w===m&&(d.value=R)}catch(R){u(R)}finally{l&&w===m&&(l.value=!1),_=!0}},{flush:o}),i?ie(()=>(a.value=!0,d.value)):d}const Te=sl?window:void 0;function gs(e){var t;const n=oe(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function ze(...e){const t=(s,r,i,o)=>(s.addEventListener(r,i,o),()=>s.removeEventListener(r,i,o)),n=ie(()=>{const s=jn(oe(e[0])).filter(r=>r!=null);return s.every(r=>typeof r!="string")?s:void 0});return Wu(()=>{var s,r;return[(s=(r=n.value)===null||r===void 0?void 0:r.map(i=>gs(i)))!==null&&s!==void 0?s:[Te].filter(i=>i!=null),jn(oe(n.value?e[1]:e[0])),jn(ss(n.value?e[2]:e[1])),oe(n.value?e[3]:e[2])]},([s,r,i,o],l,c)=>{if(!s?.length||!r?.length||!i?.length)return;const u=Nu(o)?{...o}:o,a=s.flatMap(d=>r.flatMap(m=>i.map(v=>t(d,m,v,u))));c(()=>{a.forEach(d=>d())})},{flush:"post"})}function Bu(){const e=ye(!1),t=gt();return t&&Wt(()=>{e.value=!0},t),e}function Tr(e){const t=Bu();return ie(()=>(t.value,!!e()))}function Ku(e,t,n={}){const{window:s=Te,...r}=n;let i;const o=Tr(()=>s&&"MutationObserver"in s),l=()=>{i&&(i.disconnect(),i=void 0)},c=Re(ie(()=>{const d=jn(oe(e)).map(gs).filter($u);return new Set(d)}),d=>{l(),o.value&&d.size&&(i=new MutationObserver(t),d.forEach(m=>i.observe(m,r)))},{immediate:!0,flush:"post"}),u=()=>i?.takeRecords(),a=()=>{c(),l()};return nl(a),{isSupported:o,stop:a,takeRecords:u}}function qu(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ud(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Te,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=qu(t);return ze(r,i,a=>{a.repeat&&oe(l)||c(a)&&n(a)},o)}const Gu=Symbol("vueuse-ssr-width");function zu(){const e=io()?Lu(Gu,null):null;return typeof e=="number"?e:void 0}function cl(e,t={}){const{window:n=Te,ssrWidth:s=zu()}=t,r=Tr(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=ye(typeof s=="number"),o=ye(),l=ye(!1),c=u=>{l.value=u.matches};return dr(()=>{if(i.value){i.value=!r.value,l.value=oe(e).split(",").some(u=>{const a=u.includes("not all"),d=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),m=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let v=!!(d||m);return d&&v&&(v=s>=Si(d[1])),m&&v&&(v=s<=Si(m[1])),a?!v:v});return}r.value&&(o.value=n.matchMedia(oe(e)),l.value=o.value.matches)}),ze(o,"change",c,{passive:!0}),ie(()=>l.value)}const Rn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Pn="__vueuse_ssr_handlers__",Xu=Yu();function Yu(){return Pn in Rn||(Rn[Pn]=Rn[Pn]||{}),Rn[Pn]}function al(e,t){return Xu[e]||t}function ul(e){return cl("(prefers-color-scheme: dark)",e)}function Ju(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Qu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ei="vueuse-storage";function xr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:a,window:d=Te,eventFilter:m,onError:v=j=>{console.error(j)},initOnMounted:w}=s,_=(a?ye:Fe)(typeof t=="function"?t():t),R=ie(()=>oe(e));if(!n)try{n=al("getDefaultStorage",()=>Te?.localStorage)()}catch(j){v(j)}if(!n)return _;const D=oe(t),$=Ju(D),p=(r=s.serializer)!==null&&r!==void 0?r:Qu[$],{pause:g,resume:O}=ku(_,j=>A(j),{flush:i,deep:o,eventFilter:m});Re(R,()=>S(),{flush:i});let B=!1;const P=j=>{w&&!B||S(j)},U=j=>{w&&!B||k(j)};d&&l&&(n instanceof Storage?ze(d,"storage",P,{passive:!0}):ze(d,Ei,U)),w?ps(()=>{B=!0,S()}):S();function b(j,K){if(d){const I={key:R.value,oldValue:j,newValue:K,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",I):new CustomEvent(Ei,{detail:I}))}}function A(j){try{const K=n.getItem(R.value);if(j==null)b(K,null),n.removeItem(R.value);else{const I=p.write(j);K!==I&&(n.setItem(R.value,I),b(K,I))}}catch(K){v(K)}}function H(j){const K=j?j.newValue:n.getItem(R.value);if(K==null)return c&&D!=null&&n.setItem(R.value,p.write(D)),D;if(!j&&u){const I=p.read(K);return typeof u=="function"?u(I,D):$==="object"&&!Array.isArray(I)?{...D,...I}:I}else return typeof K!="string"?K:p.read(K)}function S(j){if(!(j&&j.storageArea!==n)){if(j&&j.key==null){_.value=D;return}if(!(j&&j.key!==R.value)){g();try{const K=p.write(_.value);(j===void 0||j?.newValue!==K)&&(_.value=H(j))}catch(K){v(K)}finally{j?cs(O):O()}}}}function k(j){S(j.detail)}return _}const Zu="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function ef(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Te,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},m=ul({window:r}),v=ie(()=>m.value?"dark":"light"),w=c||(o==null?Sr(s):xr(o,s,i,{window:r,listenToStorageChanges:l})),_=ie(()=>w.value==="auto"?v.value:w.value),R=al("updateHTMLAttrs",(g,O,B)=>{const P=typeof g=="string"?r?.document.querySelector(g):gs(g);if(!P)return;const U=new Set,b=new Set;let A=null;if(O==="class"){const S=B.split(/\s/g);Object.values(d).flatMap(k=>(k||"").split(/\s/g)).filter(Boolean).forEach(k=>{S.includes(k)?U.add(k):b.add(k)})}else A={key:O,value:B};if(U.size===0&&b.size===0&&A===null)return;let H;a&&(H=r.document.createElement("style"),H.appendChild(document.createTextNode(Zu)),r.document.head.appendChild(H));for(const S of U)P.classList.add(S);for(const S of b)P.classList.remove(S);A&&P.setAttribute(A.key,A.value),a&&(r.getComputedStyle(H).opacity,document.head.removeChild(H))});function D(g){var O;R(t,n,(O=d[g])!==null&&O!==void 0?O:g)}function $(g){e.onChanged?e.onChanged(g,D):D(g)}Re(_,$,{flush:"post",immediate:!0}),ps(()=>$(_.value));const p=ie({get(){return u?w.value:_.value},set(g){w.value=g}});return Object.assign(p,{store:w,system:v,state:_})}function tf(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=ef({...e,onChanged:(i,o)=>{var l;e.onChanged?(l=e.onChanged)===null||l===void 0||l.call(e,i==="dark",o,i):o(i)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(i){const o=i?"dark":"light";r.value===o?s.value="auto":s.value=o}})}function $s(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const Ti=1;function nf(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=pt,onScroll:i=pt,offset:o={left:0,right:0,top:0,bottom:0},observe:l={mutation:!1},eventListenerOptions:c={capture:!1,passive:!0},behavior:u="auto",window:a=Te,onError:d=b=>{console.error(b)}}=t,m=typeof l=="boolean"?{mutation:l}:l,v=ye(0),w=ye(0),_=ie({get(){return v.value},set(b){D(b,void 0)}}),R=ie({get(){return w.value},set(b){D(void 0,b)}});function D(b,A){var H,S,k,j;if(!a)return;const K=oe(e);if(!K)return;(H=K instanceof Document?a.document.body:K)===null||H===void 0||H.scrollTo({top:(S=oe(A))!==null&&S!==void 0?S:R.value,left:(k=oe(b))!==null&&k!==void 0?k:_.value,behavior:oe(u)});const I=(K==null||(j=K.document)===null||j===void 0?void 0:j.documentElement)||K?.documentElement||K;_!=null&&(v.value=I.scrollLeft),R!=null&&(w.value=I.scrollTop)}const $=ye(!1),p=Vt({left:!0,right:!1,top:!0,bottom:!1}),g=Vt({left:!1,right:!1,top:!1,bottom:!1}),O=b=>{$.value&&($.value=!1,g.left=!1,g.right=!1,g.top=!1,g.bottom=!1,r(b))},B=Hu(O,n+s),P=b=>{var A;if(!a)return;const H=(b==null||(A=b.document)===null||A===void 0?void 0:A.documentElement)||b?.documentElement||gs(b),{display:S,flexDirection:k,direction:j}=a.getComputedStyle(H),K=j==="rtl"?-1:1,I=H.scrollLeft;g.left=Iv.value;const X=Math.abs(I*K)<=(o.left||0),V=Math.abs(I*K)+H.clientWidth>=H.scrollWidth-(o.right||0)-Ti;S==="flex"&&k==="row-reverse"?(p.left=V,p.right=X):(p.left=X,p.right=V),v.value=I;let J=H.scrollTop;b===a.document&&!J&&(J=a.document.body.scrollTop),g.top=Jw.value;const mt=Math.abs(J)<=(o.top||0),Ve=Math.abs(J)+H.clientHeight>=H.scrollHeight-(o.bottom||0)-Ti;S==="flex"&&k==="column-reverse"?(p.top=Ve,p.bottom=mt):(p.top=mt,p.bottom=Ve),w.value=J},U=b=>{var A;a&&(P((A=b.target.documentElement)!==null&&A!==void 0?A:b.target),$.value=!0,B(b),i(b))};return ze(e,"scroll",n?Vu(U,n,!0,!1):U,c),ps(()=>{try{const b=oe(e);if(!b)return;P(b)}catch(b){d(b)}}),m?.mutation&&e!=null&&e!==a&&e!==document&&Ku(e,()=>{const b=oe(e);b&&P(b)},{attributes:!0,childList:!0,subtree:!0}),ze(e,"scrollend",O,c),{x:_,y:R,isScrolling:$,arrivedState:p,directions:g,measure(){const b=oe(e);a&&b&&P(b)}}}function fd(e,t,n={}){const{window:s=Te}=n;return xr(e,t,s?.localStorage,n)}function dd(e={}){const{window:t=Te}=e,n=t?.navigator,s=Tr(()=>n&&"language"in n),r=ye(n?.language);return ze(t,"languagechange",()=>{n&&(r.value=n.language)},{passive:!0}),{isSupported:s,language:r}}function fl(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Is=new WeakMap;function hd(e,t=!1){const n=ye(t);let s=null,r="";Re(Sr(e),l=>{const c=$s(oe(l));if(c){const u=c;if(Is.get(u)||Is.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=$s(oe(e));!l||n.value||(wi&&(s=ze(l,"touchmove",c=>{sf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=$s(oe(e));!l||!n.value||(wi&&s?.(),l.style.overflow=r,Is.delete(l),n.value=!1)};return nl(o),ie({get(){return n.value},set(l){l?i():o()}})}function pd(e,t,n={}){const{window:s=Te}=n;return xr(e,t,s?.sessionStorage,n)}function gd(e={}){const{window:t=Te,...n}=e;return nf(t,n)}function md(e={}){const{window:t=Te,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=ye(n),c=ye(s),u=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:m,scale:v}=t.visualViewport;l.value=Math.round(d*v),c.value=Math.round(m*v)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ps(u);const a={passive:!0};return ze("resize",u,a),t&&o==="visual"&&t.visualViewport&&ze(t.visualViewport,"resize",u,a),r&&Re(cl("(orientation: portrait)"),()=>u()),{width:l,height:c}}const rf={};var of={};const dl=/^(?:[a-z]+:|\/\/)/i,lf="vitepress-theme-appearance",hl=Symbol("stack-view:unpack"),cf=/#.*?(?=:~:|$)/,af=/[?#].*$/,uf=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",pl={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ff(e,t,n=!1){if(t===void 0)return!1;if(e=xi(`/${e}`),n)return new RegExp(t).test(e);if(xi(t)!==e)return!1;const s=t.match(cf);return s?(he?location.hash:"")===s[0]:!0}function xi(e){return decodeURI(e).replace(af,"").replace(uf,"$1")}function df(e){return dl.test(e)}function hf(e,t){return Object.keys(e?.locales||{}).find(n=>n!=="root"&&!df(n)&&ff(t,`^/${n}/`,!0))||"root"}function pf(e,t){const n=hf(e,t),{label:s,link:r,...i}=e.locales[n]??{};Object.assign(i,{localeIndex:n});const o=bf(e,t),l={head:ml(e.head??[],i.head??[],...o.map(c=>c.head??[]).reverse())};return Cr(l,...o,i,e)}function gl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=gf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function gf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ml(...e){const t=[],n=new Map;for(const s of e)for(const r of s){const[i,o]=r,l=Object.entries(o)[0];if(i!=="meta"||!l){t.push(r);continue}const c=`${l[0]}=${l[1]}`,u=n.get(c);u!=null?t[u]=r:(n.set(c,t.length),t.push(r))}return t}const mf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,vf=/^[a-z]:/i;function Ci(e){const t=vf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(mf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Ns=new Set;function yf(e){if(Ns.size===0){const n=typeof process=="object"&&of?.VITE_EXTRA_EXTENSIONS||rf?.VITE_EXTRA_EXTENSIONS||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Ns.add(s))}const t=e.split(".").pop();return t==null||!Ns.has(t.toLowerCase())}function vd(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function bf({additionalConfig:e},t){if(e===void 0)return[];if(typeof e=="function")return e(t)??[];const n=[],s=t.split("/").slice(0,-1);for(;s.length;){const r=`/${s.join("/")}/`;n.push(e[r]),s.pop()}return n.push(e["/"]),n.filter(r=>r!==void 0)}function Cr(...e){const t=e.filter(r=>_f(r));if(t.length<=1)return e[0];const n=new Set(t.flatMap(r=>Reflect.ownKeys(r))),s=[...n];return new Proxy({},{get(r,i){return i===hl?t:Cr(...t.map(o=>o[i]).filter(o=>o!==void 0))},set(){throw new Error("StackView is read-only and cannot be mutated.")},has(r,i){return n.has(i)},ownKeys(){return s},getOwnPropertyDescriptor(r,i){for(const o of t){const l=Object.getOwnPropertyDescriptor(o,i);if(l)return l}}})}Cr.unpack=function(e){return e?.[hl]};function _f(e){return Object.prototype.toString.call(e)==="[object Object]"}const wf=["shellscript","shell","bash","sh","zsh"];function Sf(e){return wf.includes(e)}const Ef=Symbol(),at=ye(an(Pu));function yd(e){const t=ie(()=>pf(at.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?Fe(!0):n==="force-auto"?ul():n?tf({storageKey:lf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):Fe(!1),r=Fe(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Re(()=>e.data,()=>{r.value=he?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>gl(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function Tf(){const e=xt(Ef);if(!e)throw new Error("vitepress data not properly injected in app");return e}function xf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ai(e){return dl.test(e)||!e.startsWith("/")?e:xf(at.value.base,e)}function Cf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){t=Ci(t.slice(1).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`/assets/${t}.${s}.js`}else t=`./${Ci(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Hn=[];function bd(e){Hn.push(e),Uu(()=>{Hn=Hn.filter(t=>t!==e)})}function Af(){let e=at.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Oi(e,n);else if(Array.isArray(e))for(const s of e){const r=Oi(s,n);if(r){t=r;break}}return t}function Oi(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Of=Symbol(),Zs="http://a.com",Mf=()=>({path:"/",hash:"",query:"",component:null,data:pl});function _d(e,t){const n=Vt(Mf()),s={route:n,async go(l,c){const{hash:u}=new URL(l,Zs),a=he&&document.fragmentDirective&&u.includes(":~:");l=tr(l),await s.onBeforeRouteChange?.(l)!==!1&&((!he||await Pf(l,{...c,hasTextFragment:a}))&&await i(l,{initialLoad:!!c?.initialLoad}),a&&(location.hash=u),o(),await s.onAfterRouteChange?.(l))}};let r=null;async function i(l,{scrollPosition:c=0,isRetry:u=!1,initialLoad:a=!1}={}){if(await s.onBeforePageLoad?.(l)===!1)return;const d=new URL(l,Zs),m=r=d.pathname;try{let v=await e(m);if(!v)throw new Error(`Page not found: ${m}`);if(r===m){r=null;const{default:w,__pageData:_}=v;if(!w)throw new Error(`Invalid route component: ${w}`);await s.onAfterPageLoad?.(l),n.path=he?m:Ai(m),n.component=In(w),n.data=In(_),o(d),he&&cs(()=>{let R=at.value.base+_.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");!at.value.cleanUrls&&!R.endsWith("/")&&(R+=".html"),R!==d.pathname&&(d.pathname=R,l=R+d.search+d.hash,history.replaceState({},"",l)),a||er(d.hash,!1,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!u)try{const w=await fetch(at.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,{scrollPosition:c,isRetry:!0,initialLoad:a});return}catch{}if(r===m){r=null,n.path=he?m:Ai(m),n.component=t?In(t):null;const w=he?n.path.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").slice(at.value.base.length):"404.md";n.data={...pl,relativePath:w},o(d)}}}function o(l=he?location:{search:"",hash:""}){n.query=l.search,n.hash=decodeURIComponent(l.hash)}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:a,origin:d,pathname:m}=new URL(u,c.baseURI),v=new URL(location.href);d===v.origin&&yf(m)&&(l.preventDefault(),s.go(a,{smoothScroll:c.classList.contains("header-anchor")}))},{capture:!0}),window.addEventListener("popstate",async l=>{if(l.state===null)return;const c=tr(location.href);await i(c,{scrollPosition:l.state.scrollPosition||0}),o(),await s.onAfterRouteChange?.(c)}),window.addEventListener("hashchange",l=>{l.preventDefault(),o()})),s}function Rf(){const e=xt(Of);if(!e)throw new Error("useRouter() is called without provider.");return e}function vl(){return Rf().route}function er(e,t=!1,n=0){if(!e||n){window.scrollTo(0,n);return}let s=null;try{s=document.getElementById(decodeURIComponent(e).slice(1))}catch(l){console.warn(l)}if(!s)return;const r=window.scrollY+s.getBoundingClientRect().top-Af()+Number.parseInt(window.getComputedStyle(s).paddingTop,10)||0,i=window.matchMedia("(prefers-reduced-motion)").matches?"instant":t&&Math.abs(r-window.scrollY)<=window.innerHeight?"smooth":"auto";requestAnimationFrame(()=>{if(window.scrollTo({left:0,top:r,behavior:i}),s.focus({preventScroll:!0}),document.activeElement===s||s.hasAttribute("tabindex"))return;const l=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",l)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",l),s.focus({preventScroll:!0}),document.activeElement!==s&&l()})}function tr(e){const t=new URL(e,Zs);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),at.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash.split(":~:")[0]}async function Pf(e,{smoothScroll:t=!1,initialLoad:n=!1,replace:s=!1,hasTextFragment:r=!1}={}){const i=tr(location.href),o=new URL(e,location.origin),l=new URL(i,location.origin);if(e===i){if(!n)return r||er(o.hash,t),!1}else if(s?history.replaceState({},"",e):(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",e)),o.pathname===l.pathname)return o.hash!==l.hash&&(window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:l.href,newURL:o.href})),r||er(o.hash,t)),!1;return!0}const Ln=()=>Hn.forEach(e=>e()),wd=hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=vl(),{frontmatter:n,site:s}=Tf();return Re(n,Ln,{deep:!0,flush:"post"}),()=>Js(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Js(t.component,{onVnodeMounted:Ln,onVnodeUpdated:Ln,onVnodeUnmounted:Ln}):"404 Page Not Found"])}}),Lf="modulepreload",$f=function(e){return"/"+e},Mi={},Sd=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(a=>Promise.resolve(a).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=o?.nonce||o?.getAttribute("nonce");r=c(n.map(u=>{if(u=$f(u),u in Mi)return;Mi[u]=!0;const a=u.endsWith(".css"),d=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${d}`))return;const m=document.createElement("link");if(m.rel=a?"stylesheet":Lf,a||(m.as="script"),m.crossOrigin="",m.href=u,l&&m.setAttribute("nonce",l),document.head.appendChild(m),a)return new Promise((v,w)=>{m.addEventListener("load",v),m.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Ed=hr({setup(e,{slots:t}){const n=Fe(!1);return Wt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Td(){he&&window.addEventListener("click",e=>{const t=e.target;if(t.matches(".vp-code-group input")){const n=t.parentElement?.parentElement;if(!n)return;const s=Array.from(n.querySelectorAll("input")).indexOf(t);if(s<0)return;const r=n.querySelector(".blocks");if(!r)return;const i=Array.from(r.children).find(c=>c.classList.contains("active"));if(!i)return;const o=r.children[s];if(!o||i===o)return;i.classList.remove("active"),If(o),n?.querySelector(`label[for="${t.id}"]`)?.scrollIntoView({block:"nearest"})}})}function If(e){e.classList.add("active"),window.dispatchEvent(new CustomEvent("vitepress:codeGroupTabActivate",{detail:e}))}const Nf=[".vp-copy-ignore",".diff.remove"].join(", ");function xd(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,r=n.nextElementSibling?.nextElementSibling;if(!s||!r)return;const i=r.cloneNode(!0);i.querySelectorAll(Nf).forEach(c=>c.remove()),i.innerHTML=i.innerHTML.replace(/\n+/g,` -`);let o=i.textContent||"";const l=/language-(\w+)/.exec(s.className)?.[1]||"";Sf(l)&&(o=o.replace(/^ *(\$|>) /gm,"").trim()),Ff(o).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function Ff(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Cd(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Fs(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(Fs);s.forEach((l,c)=>{const u=o.findIndex(a=>a?.isEqualNode(l??null));u!==-1?delete o[u]:(l?.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};dr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=gl(o,i);u!==document.title&&(document.title=u);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):Fs(["meta",{name:"description",content:a}]),r(ml(o.head,jf(c)))})}function Fs([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function Df(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function jf(e){return e.filter(t=>!Df(t))}const Ds=new Set,yl=()=>document.createElement("link"),Hf=e=>{const t=yl();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Vf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let $n;const kf=he&&($n=yl())&&$n.relList&&$n.relList.supports&&$n.relList.supports("prefetch")?Hf:Vf;function Ad(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Ds.has(c)){Ds.add(c);const u=Cf(c);u&&kf(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Ds.add(l))})})};Wt(s);const r=vl();Re(()=>r.path,s),fs(()=>{n&&n.disconnect()})}export{Gf as $,_f as A,ce as B,Ed as C,In as D,dl as E,Ee as F,Pa as G,cs as H,ar as I,cr as J,$u as K,mo as L,bd as M,ud as N,Wt as O,fs as P,Qc as Q,Of as R,zs as S,Bf as T,Cf as U,Lc as V,an as W,Fe as X,Xf as Y,Yf as Z,Sd as _,wd as a,zf as a0,ec as a1,ye as a2,at as a3,jn as a4,Ac as a5,Jf as a6,oe as a7,yf as a8,nl as a9,Uf as aA,rd as aB,sd as aC,ss as aa,gs as ab,Td as ac,xd as ad,Tf as ae,ze as af,fd as ag,cl as ah,dd as ai,Ad as aj,vl as ak,Rf as al,hd as am,pd as an,Qf as ao,Kf as ap,Cd as aq,gd as ar,md as as,nd as at,Re as au,cd as av,dr as aw,Wf as ax,Ai as ay,Pc as az,td as b,ld as c,ie as d,ad as e,id as f,Wo as g,Xs as h,Ra as i,Zf as j,_d as k,od as l,ed as m,Bo as n,ue as o,Ef as p,qf as q,hr as r,vd as s,Af as t,Js as u,he as v,yd as w,xt as x,ff as y,df as z}; diff --git a/docs/assets/chunks/theme.BfZ7hXNa.js b/docs/assets/chunks/theme.BfZ7hXNa.js deleted file mode 100644 index 727d5fe7f9..0000000000 --- a/docs/assets/chunks/theme.BfZ7hXNa.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DIqEGPXK.js","assets/chunks/framework.BXgR76oC.js"])))=>i.map(i=>d[i]); -import{r as m,j as u,Z as c,I as P,S as o,n as U,a5 as L,h as k,az as v,b as ve,i as h,c as b,ae as Ke,z as Re,a8 as Ue,ay as fe,d as p,g as f,aa as i,y as D,ah as $e,O as R,Q as je,P as he,t as We,aw as te,X as V,au as H,ax as Ve,v as Y,ak as ne,a1 as ye,a2 as ae,M as Se,F as S,Y as w,$ as j,o as _,a0 as B,E as Ne,ap as ze,ai as qe,G as O,x as se,J as Te,as as Je,N as ie,H as Ae,ar as Me,W as Ye,A as Pe,q as Xe,_ as Qe,am as we,V as Ie,a6 as Ze,aB as et,L as tt,aC as nt,ao as at}from"./framework.BXgR76oC.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(o(),u("span",{class:P(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[U(L(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},rt=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(o(),k(ve,{name:"fade"},{default:v(()=>[e.show?(o(),u("div",ot)):h("",!0)]),_:1}))}}),it=b(rt,[["__scopeId","data-v-c79a1216"]]),$=Ke;function lt(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function le(e){return e.startsWith("/")?e:`/${e}`}function me(e){const{pathname:t,search:n,hash:a,protocol:s}=new URL(e,"http://a.com");if(Re(e)||e.startsWith("#")||!s.startsWith("http")||!Ue(t))return e;const{site:r}=$(),d=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return fe(d)}function X({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:s,hash:r}=$(),d=p(()=>({label:t.value.locales[n.value]?.label,link:t.value.locales[n.value]?.link||(n.value==="root"?"/":`/${n.value}/`)}));return{localeLinks:p(()=>Object.entries(t.value.locales).flatMap(([g,y])=>d.value.label===y.label?[]:{text:y.label,link:ct(y.link||(g==="root"?"/":`/${g}/`),s.value.i18nRouting!==!1&&e,a.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)+r.value,lang:y.lang,dir:y.dir})),currentLang:d}}function ct(e,t,n,a){return t?e.replace(/\/$/,"")+le(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const ut={class:"NotFound"},dt={class:"code"},vt={class:"title"},ft={class:"quote"},ht={class:"action"},mt=["href","aria-label"],pt=m({__name:"NotFound",setup(e){const{theme:t}=$(),{currentLang:n}=X();return(a,s)=>(o(),u("div",ut,[f("p",dt,L(i(t).notFound?.code??"404"),1),f("h1",vt,L(i(t).notFound?.title??"PAGE NOT FOUND"),1),s[0]||(s[0]=f("div",{class:"divider"},null,-1)),f("blockquote",ft,L(i(t).notFound?.quote??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),f("div",ht,[f("a",{class:"link",href:i(fe)(i(t).notFound?.link??i(n).link),"aria-label":i(t).notFound?.linkLabel??"go to home"},L(i(t).notFound?.linkText??"Take me home"),9,mt)])]))}}),kt=b(pt,[["__scopeId","data-v-829df670"]]);function xe(e,t){if(Array.isArray(e))return Q(e);if(e==null)return[];t=le(t);const n=Object.keys(e).sort((s,r)=>r.split("/").length-s.split("/").length).find(s=>t.startsWith(le(s))),a=n?e[n]:[];return Array.isArray(a)?Q(a):Q(a.items,a.base)}function gt(e){const t=[];let n=0;for(const a in e){const s=e[a];if(s.items){n=t.push(s);continue}t[n]||t.push({items:[]}),t[n].items.push(s)}return t}function _t(e){const t=[];function n(a){for(const s of a)s.text&&s.link&&t.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&n(s.items)}return n(e),t}function ce(e,t){return Array.isArray(t)?t.some(n=>ce(e,n)):D(e,t.link)?!0:t.items?ce(e,t.items):!1}function Q(e,t){return[...e].map(n=>{const a={...n},s=a.base||t;return s&&a.link&&(a.link=s+a.link.replace(/^\//,s.endsWith("/")?"":"/")),a.items&&(a.items=Q(a.items,s)),a})}function bt(){const{hasSidebar:e}=G(),t=$e("(min-width: 960px)"),n=$e("(min-width: 1280px)");return{isAsideEnabled:p(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const $t=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ue=[];function He(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function yt(e){const t=[...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:Pt(n),link:"#"+n.id,level:a}});return Lt(t,e)}function Pt(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if($t.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function Lt(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,s]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return Nt(e,a,s)}function Vt(e,t){const{isAsideEnabled:n}=bt(),a=lt(r,100);let s=null;R(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),je(()=>{d(location.hash)}),he(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const l=window.scrollY,g=window.innerHeight,y=document.body.offsetHeight,N=Math.abs(l+g-y)<1,A=ue.map(({element:I,link:x})=>({link:x,top:St(I)})).filter(({top:I})=>!Number.isNaN(I)).sort((I,x)=>I.top-x.top);if(!A.length){d(null);return}if(l<1){d(null);return}if(N){d(A[A.length-1].link);return}let E=null;for(const{link:I,top:x}of A){if(x>l+We()+4)break;E=I}d(E)}function d(l){s&&s.classList.remove("active"),l==null?s=null:s=e.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const g=s;g?(g.classList.add("active"),t.value.style.top=g.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function St(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function Nt(e,t,n){ue.length=0;const a=[],s=[];return e.forEach(r=>{const d={...r,children:[]};let l=s[s.length-1];for(;l&&l.level>=d.level;)s.pop(),l=s[s.length-1];if(d.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){s.push({level:d.level,shouldIgnore:!0});return}d.level>n||d.level{t=q.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",n)}),he(()=>{window.removeEventListener("keyup",n)});function n(a){a.key==="Escape"&&q.value&&(e(),t?.focus())}}function At(){function e(){q.value=!0}function t(){q.value=!1}function n(){q.value?t():e()}return{isOpen:q,open:e,close:t,toggle:n}}function Mt(e){const{page:t,hash:n}=$(),a=V(!1),s=p(()=>e.value.collapsed!=null),r=p(()=>!!e.value.link),d=V(!1),l=()=>{d.value=D(t.value.relativePath,e.value.link)};H([t,e,n],l),R(l);const g=p(()=>d.value?!0:e.value.items?ce(t.value.relativePath,e.value.items):!1),y=p(()=>!!(e.value.items&&e.value.items.length));te(()=>{a.value=!!(s.value&&e.value.collapsed)}),Ve(()=>{(d.value||g.value)&&(a.value=!1)});function N(){s.value&&(a.value=!a.value)}return{collapsed:a,collapsible:s,isLink:r,isActiveLink:d,hasActiveLink:g,hasChildren:y,toggle:N}}const de=ae([]),J=ae([]),Z=ae(!1);function G(){const{frontmatter:e,theme:t}=$(),n=p(()=>!!(e.value.isHome??e.value.layout==="home")),a=p(()=>e.value.sidebar!==!1&&J.value.length>0&&!n.value),s=p(()=>a.value&&Z.value),r=p(()=>a.value?gt(J.value):[]),d=p(()=>n.value?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),l=p(()=>d.value?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),g=p(()=>de.value.length>0);return{isHome:n,sidebar:ye(J),sidebarGroups:r,hasSidebar:a,isSidebarEnabled:s,hasAside:d,leftAside:l,headers:ye(de),hasLocalNav:g}}function wt({closeSidebar:e}){const{frontmatter:t,page:n,theme:a}=$();H(()=>[n.value.relativePath,a.value.sidebar],([r,d])=>{const l=d?xe(d,r):[];JSON.stringify(l)!==JSON.stringify(J.value)&&(J.value=l)},{immediate:!0,deep:!0,flush:"sync"}),Se(()=>{de.value=yt(t.value.outline??a.value.outline)}),Y&&(Z.value=window.innerWidth>=960,window.addEventListener("resize",()=>{Z.value=window.innerWidth>=960},{passive:!0}));const s=ne();H(()=>s.path,e),H(Z,e),Tt(e)}const Be=Symbol("layout-info"),It=["href","title"],xt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){return(t,n)=>{const a=j("VPDocOutlineItem",!0);return o(),u("ul",{class:P(["VPDocOutlineItem",e.root?"root":"nested"])},[(o(!0),u(S,null,w(e.headers,({children:s,link:r,title:d})=>(o(),u("li",null,[f("a",{class:"outline-link",href:r,title:d},L(d),9,It),s?.length?(o(),k(a,{key:0,headers:s},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ce=b(xt,[["__scopeId","data-v-1ce71065"]]),Ht={class:"content"},Bt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ct=m({__name:"VPDocAsideOutline",setup(e){const{theme:t}=$(),n=V(),a=V(),{headers:s,hasLocalNav:r}=G();return Vt(n,a),(d,l)=>(o(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:P(["VPDocAsideOutline",{"has-outline":i(r)}]),ref_key:"container",ref:n},[f("div",Ht,[f("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),f("div",Bt,L(i(He)(i(t))),1),_(Ce,{headers:i(s),root:!0},null,8,["headers"])])],2))}}),Et=b(Ct,[["__scopeId","data-v-60d5052e"]]),Ft={class:"VPDocAsideCarbonAds"},Ot=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(o(),u("div",Ft,[_(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Dt={class:"VPDocAside"},Gt=m({__name:"VPDocAside",setup(e){const{theme:t}=$();return(n,a)=>(o(),u("div",Dt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),_(Et),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=f("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(o(),k(Ot,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):h("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Kt=b(Gt,[["__scopeId","data-v-3f215769"]]);function Rt(){const{theme:e,page:t}=$();return p(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let s;return typeof a=="function"?s=a(t.value):s=a.replace(/:path/g,t.value.filePath),{url:s,text:n}})}function Ut(){const{page:e,theme:t,frontmatter:n}=$();return p(()=>{const a=xe(t.value.sidebar,e.value.relativePath),s=_t(a),r=jt(s,y=>y.link.replace(/[?#].*$/,"")),d=r.findIndex(y=>D(e.value.relativePath,y.link)),l=t.value.docFooter?.prev===!1&&!n.value.prev||n.value.prev===!1,g=t.value.docFooter?.next===!1&&!n.value.next||n.value.next===!1;return{prev:l?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??r[d-1]?.docFooterText??r[d-1]?.text,link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??r[d-1]?.link},next:g?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??r[d+1]?.docFooterText??r[d+1]?.text,link:(typeof n.value.next=="object"?n.value.next.link:void 0)??r[d+1]?.link}}})}function jt(e,t){const n=new Set;return e.filter(a=>{const s=t(a);return n.has(s)?!1:n.add(s)})}const C=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=p(()=>t.tag??(t.href?"a":"span")),a=p(()=>t.href&&Ne.test(t.href)||t.target==="_blank");return(s,r)=>(o(),k(B(n.value),{class:P(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(me)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:v(()=>[c(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Wt={class:"VPLastUpdated"},zt=["datetime"],qt=m({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=$(),{language:s}=qe(),r=ze("timeRef"),d=p(()=>new Date(n.value.lastUpdated)),l=p(()=>d.value.toISOString()),g=ae("");return R(()=>{te(()=>{const y=t.value.lastUpdated?.formatOptions?.forceLocale?a.value:s.value;g.value=new Intl.DateTimeFormat(y,t.value.lastUpdated?.formatOptions??{dateStyle:"medium",timeStyle:"medium"}).format(d.value),y&&a.value!==y?r.value?.setAttribute("lang",y):r.value?.removeAttribute("lang")})}),(y,N)=>(o(),u("p",Wt,[U(L(i(t).lastUpdated?.text||i(t).lastUpdatedText||"Last updated")+": ",1),f("time",{ref_key:"timeRef",ref:r,datetime:l.value},L(g.value),9,zt)]))}}),Jt=b(qt,[["__scopeId","data-v-3c637f39"]]),Yt={key:0,class:"VPDocFooter"},Xt={key:0,class:"edit-info"},Qt={key:0,class:"edit-link"},Zt={key:1,class:"last-updated"},en={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},tn={class:"pager"},nn=["innerHTML"],an=["innerHTML"],sn={class:"pager"},on=["innerHTML"],rn=["innerHTML"],ln=m({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=$(),s=Rt(),r=Ut(),d=p(()=>t.value.editLink&&a.value.editLink!==!1),l=p(()=>n.value.lastUpdated),g=p(()=>d.value||l.value||r.value.prev||r.value.next);return(y,N)=>g.value?(o(),u("footer",Yt,[c(y.$slots,"doc-footer-before",{},void 0,!0),d.value||l.value?(o(),u("div",Xt,[d.value?(o(),u("div",Qt,[_(C,{class:"edit-link-button",href:i(s).url,"no-icon":!0},{default:v(()=>[N[0]||(N[0]=f("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),U(" "+L(i(s).text),1)]),_:1},8,["href"])])):h("",!0),l.value?(o(),u("div",Zt,[_(Jt)])):h("",!0)])):h("",!0),i(r).prev?.link||i(r).next?.link?(o(),u("nav",en,[N[1]||(N[1]=f("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),f("div",tn,[i(r).prev?.link?(o(),k(C,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:v(()=>[f("span",{class:"desc",innerHTML:i(t).docFooter?.prev||"Previous page"},null,8,nn),f("span",{class:"title",innerHTML:i(r).prev.text},null,8,an)]),_:1},8,["href"])):h("",!0)]),f("div",sn,[i(r).next?.link?(o(),k(C,{key:0,class:"pager-link next",href:i(r).next.link},{default:v(()=>[f("span",{class:"desc",innerHTML:i(t).docFooter?.next||"Next page"},null,8,on),f("span",{class:"title",innerHTML:i(r).next.text},null,8,rn)]),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}),cn=b(ln,[["__scopeId","data-v-e257564d"]]),un={class:"container"},dn={class:"aside-container"},vn={class:"aside-content"},fn={class:"content"},hn={class:"content-container"},mn={class:"main"},pn=m({__name:"VPDoc",setup(e){const{theme:t}=$(),n=ne(),{hasSidebar:a,hasAside:s,leftAside:r}=G(),d=p(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,g)=>{const y=j("Content");return o(),u("div",{class:P(["VPDoc",{"has-sidebar":i(a),"has-aside":i(s)}])},[c(l.$slots,"doc-top",{},void 0,!0),f("div",un,[i(s)?(o(),u("div",{key:0,class:P(["aside",{"left-aside":i(r)}])},[g[0]||(g[0]=f("div",{class:"aside-curtain"},null,-1)),f("div",dn,[f("div",vn,[_(Kt,null,{"aside-top":v(()=>[c(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),f("div",fn,[f("div",hn,[c(l.$slots,"doc-before",{},void 0,!0),f("main",mn,[_(y,{class:P(["vp-doc",[d.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(cn,null,{"doc-footer-before":v(()=>[c(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(l.$slots,"doc-after",{},void 0,!0)])])]),c(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),kn=b(pn,[["__scopeId","data-v-7011f0d8"]]),gn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=p(()=>t.href&&Ne.test(t.href)),a=p(()=>t.tag||(t.href?"a":"button"));return(s,r)=>(o(),k(B(a.value),{class:P(["VPButton",[e.size,e.theme]]),href:e.href?i(me)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[c(s.$slots,"default",{},()=>[U(L(e.text),1)],!0)]),_:3},8,["class","href","target","rel"]))}}),_n=b(gn,[["__scopeId","data-v-01bff58b"]]),bn=["src","alt"],$n=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=j("VPImage",!0);return e.image?(o(),u(S,{key:0},[typeof e.image=="string"||"src"in e.image?(o(),u("img",O({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(fe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,bn)):(o(),u(S,{key:1},[_(a,O({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),_(a,O({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),ee=b($n,[["__scopeId","data-v-8426fc1a"]]),yn={class:"container"},Pn={class:"main"},Ln={class:"heading"},Vn=["innerHTML"],Sn=["innerHTML"],Nn=["innerHTML"],Tn={key:0,class:"actions"},An={key:0,class:"image"},Mn={class:"image-container"},wn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const{heroImageSlotExists:t}=se(Be,{heroImageSlotExists:p(()=>!1)});return(n,a)=>(o(),u("div",{class:P(["VPHero",{"has-image":e.image||i(t)}])},[f("div",yn,[f("div",Pn,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[f("h1",Ln,[e.name?(o(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,Vn)):h("",!0),e.text?(o(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,Sn)):h("",!0)]),e.tagline?(o(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,Nn)):h("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(o(),u("div",Tn,[c(n.$slots,"home-hero-actions-before-actions",{},void 0,!0),(o(!0),u(S,null,w(e.actions,s=>(o(),u("div",{key:s.link,class:"action"},[_(_n,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(o(),u("div",An,[f("div",Mn,[a[0]||(a[0]=f("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(o(),k(ee,{key:0,class:"image-src",image:e.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),In=b(wn,[["__scopeId","data-v-e62e4946"]]),xn=m({__name:"VPHomeHero",setup(e){const{frontmatter:t}=$();return(n,a)=>i(t).hero?(o(),k(In,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":v(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-actions-before-actions":v(()=>[c(n.$slots,"home-hero-actions-before-actions")]),"home-hero-image":v(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Hn={class:"box"},Bn={key:0,class:"icon"},Cn=["innerHTML"],En=["innerHTML"],Fn={key:3,class:"details"},On=["innerHTML"],Dn=["innerHTML"],Gn={key:5,class:"link-text"},Kn={class:"link-text-value"},Rn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(o(),k(C,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[f("article",Hn,[typeof e.icon=="object"&&e.icon.wrap?(o(),u("div",Bn,[_(ee,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(o(),k(ee,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(o(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Cn)):h("",!0),f("h2",{class:"title",innerHTML:e.title},null,8,En),Array.isArray(e.details)?(o(),u("ul",Fn,[(o(!0),u(S,null,w(e.details,a=>(o(),u("li",{key:a,innerHTML:a},null,8,On))),128))])):e.details?(o(),u("p",{key:4,class:"details",innerHTML:e.details},null,8,Dn)):h("",!0),e.linkText?(o(),u("div",Gn,[f("p",Kn,[U(L(e.linkText)+" ",1),n[0]||(n[0]=f("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Un=b(Rn,[["__scopeId","data-v-e5511d04"]]),jn={key:0,class:"VPFeatures"},Wn={class:"container"},zn={class:"items"},qn=m({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=p(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,s)=>e.features?(o(),u("div",jn,[f("div",Wn,[f("div",zn,[(o(!0),u(S,null,w(e.features,r=>(o(),u("div",{key:r.title,class:P(["item",[n.value]])},[_(Un,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Jn=b(qn,[["__scopeId","data-v-a6181336"]]),Yn=m({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=$();return(n,a)=>i(t).features?(o(),k(Jn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):h("",!0)}}),Xn=m({__name:"VPHomeContent",setup(e){const{width:t}=Je({initialWidth:0,includeScrollbar:!1});return(n,a)=>(o(),u("div",{class:"vp-doc container",style:Te(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),Qn=b(Xn,[["__scopeId","data-v-8e2d4988"]]),Zn=m({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=$();return(a,s)=>{const r=j("Content");return o(),u("div",{class:P(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),_(xn,null,{"home-hero-info-before":v(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-actions-before-actions":v(()=>[c(a.$slots,"home-hero-actions-before-actions",{},void 0,!0)]),"home-hero-image":v(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),_(Yn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(o(),k(Qn,{key:0},{default:v(()=>[_(r)]),_:1})):(o(),k(r,{key:1}))],2)}}}),ea=b(Zn,[["__scopeId","data-v-bb6342a6"]]),ta={},na={class:"VPPage"};function aa(e,t){const n=j("Content");return o(),u("div",na,[c(e.$slots,"page-top"),_(n),c(e.$slots,"page-bottom")])}const sa=b(ta,[["render",aa]]),oa=m({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=$(),{isHome:a,hasSidebar:s}=G();return(r,d)=>(o(),u("div",{class:P(["VPContent",{"has-sidebar":i(s),"is-home":i(a)}]),id:"VPContent"},[i(t).isNotFound?c(r.$slots,"not-found",{key:0},()=>[_(kt)],!0):i(n).layout==="page"?(o(),k(sa,{key:1},{"page-top":v(()=>[c(r.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(r.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(o(),k(ea,{key:2},{"home-hero-before":v(()=>[c(r.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(r.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(r.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(r.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(r.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-actions-before-actions":v(()=>[c(r.$slots,"home-hero-actions-before-actions",{},void 0,!0)]),"home-hero-image":v(()=>[c(r.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(r.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(r.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(r.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(o(),k(B(i(n).layout),{key:3})):(o(),k(kn,{key:4},{"doc-top":v(()=>[c(r.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(r.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[c(r.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(r.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(r.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[c(r.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[c(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(r.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[c(r.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ra=b(oa,[["__scopeId","data-v-9dc86fcc"]]),ia={class:"container"},la=["innerHTML"],ca=["innerHTML"],ua=m({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=$(),{hasSidebar:a}=G();return(s,r)=>i(t).footer&&i(n).footer!==!1?(o(),u("footer",{key:0,class:P(["VPFooter",{"has-sidebar":i(a)}])},[f("div",ia,[i(t).footer.message?(o(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,la)):h("",!0),i(t).footer.copyright?(o(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,ca)):h("",!0)])],2)):h("",!0)}}),da=b(ua,[["__scopeId","data-v-c3855bb3"]]),va={class:"menu-text"},fa={class:"header"},ha={class:"outline"},ma=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=$(),a=V(!1),s=V(0),r=V(),d=V();function l(A){r.value?.contains(A.target)||(a.value=!1)}H(a,A=>{if(A){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),ie("Escape",()=>{a.value=!1}),Se(()=>{a.value=!1});function g(){a.value=!a.value,s.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y(A){A.target.classList.contains("outline-link")&&(d.value&&(d.value.style.transition="none"),Ae(()=>{a.value=!1}))}function N(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(A,E)=>(o(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":s.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(o(),u("button",{key:0,onClick:g,class:P({open:a.value})},[f("span",va,L(i(He)(i(n))),1),E[0]||(E[0]=f("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(o(),u("button",{key:1,onClick:N},L(i(n).returnToTopLabel||"Return to top"),1)),_(ve,{name:"flyout"},{default:v(()=>[a.value?(o(),u("div",{key:0,ref_key:"items",ref:d,class:"items",onClick:y},[f("div",fa,[f("a",{class:"top-link",href:"#",onClick:N},L(i(n).returnToTopLabel||"Return to top"),1)]),f("div",ha,[_(Ce,{headers:e.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),pa=b(ma,[["__scopeId","data-v-0bf0e06f"]]),ka={class:"container"},ga=["aria-expanded"],_a={class:"menu-text"},ba=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=$(),{isHome:n,hasSidebar:a,headers:s,hasLocalNav:r}=G(),{y:d}=Me(),l=V(0);R(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))});const g=p(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:!r.value,fixed:!r.value&&!a.value}));return(y,N)=>!i(n)&&(i(r)||i(a)||i(d)>=l.value)?(o(),u("div",{key:0,class:P(g.value)},[f("div",ka,[i(a)?(o(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:N[0]||(N[0]=A=>y.$emit("open-menu"))},[N[1]||(N[1]=f("span",{class:"vpi-align-left menu-icon"},null,-1)),f("span",_a,L(i(t).sidebarMenuLabel||"Menu"),1)],8,ga)):h("",!0),_(pa,{headers:i(s),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),$a=b(ba,[["__scopeId","data-v-db738f89"]]);function ya(){const e=V(!1);function t(){e.value=!0,window.addEventListener("resize",s)}function n(){e.value=!1,window.removeEventListener("resize",s)}function a(){e.value?n():t()}function s(){window.outerWidth>=768&&n()}const r=ne();return H(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const pe=Symbol("nav"),Pa={},La={class:"VPSwitch",type:"button",role:"switch"},Va={class:"check"},Sa={key:0,class:"icon"};function Na(e,t){return o(),u("button",La,[f("span",Va,[e.$slots.default?(o(),u("span",Sa,[c(e.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Ta=b(Pa,[["render",Na],["__scopeId","data-v-1d5665e3"]]),Aa=m({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=$(),a=se("toggle-appearance",()=>{t.value=!t.value}),s=V("");return Ve(()=>{s.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,d)=>(o(),k(Ta,{title:s.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:v(()=>[...d[0]||(d[0]=[f("span",{class:"vpi-sun sun"},null,-1),f("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),ke=b(Aa,[["__scopeId","data-v-5337faa4"]]),Ma={key:0,class:"VPNavBarAppearance"},wa=m({__name:"VPNavBarAppearance",setup(e){const{site:t}=$();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",Ma,[_(ke)])):h("",!0)}}),Ia=b(wa,[["__scopeId","data-v-6c893767"]]),ge=V();let Ee=!1,re=0;function xa(e){const t=V(!1);if(Y){!Ee&&Ha(),re++;const n=H(ge,a=>{a===e.el.value||e.el.value?.contains(a)?(t.value=!0,e.onFocus?.()):(t.value=!1,e.onBlur?.())});he(()=>{n(),re--,re||Ba()})}return Ye(t)}function Ha(){document.addEventListener("focusin",Fe),Ee=!0,ge.value=document.activeElement}function Ba(){document.removeEventListener("focusin",Fe)}function Fe(){ge.value=document.activeElement}const Ca={class:"VPMenuLink"},Ea=["innerHTML"],Fa=m({inheritAttrs:!1,__name:"VPMenuLink",props:{item:{},rel:{}},setup(e){const t=e,{page:n}=$(),a=p(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),s=p(()=>D(n.value.relativePath,t.item.activeMatch||a.value,!!t.item.activeMatch));return(r,d)=>(o(),u("div",Ca,[_(C,O(r.$attrs,{class:{active:s.value},href:a.value,target:e.item.target,rel:t.rel??e.item.rel,"no-icon":e.item.noIcon}),{default:v(()=>[f("span",{innerHTML:e.item.text},null,8,Ea)]),_:1},16,["class","href","target","rel","no-icon"])]))}}),oe=b(Fa,[["__scopeId","data-v-867c295f"]]),Oa={class:"VPMenuGroup"},Da={key:0,class:"title"},Ga=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),u("div",Oa,[e.text?(o(),u("p",Da,L(e.text),1)):h("",!0),(o(!0),u(S,null,w(e.items,a=>(o(),u(S,{key:JSON.stringify(a)},["link"in a?(o(),k(oe,{key:0,item:a},null,8,["item"])):h("",!0)],64))),128))]))}}),Ka=b(Ga,[["__scopeId","data-v-1963e1bb"]]),Ra={class:"VPMenu"},Ua={key:0,class:"items"},ja=m({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(o(),u("div",Ra,[e.items?(o(),u("div",Ua,[(o(!0),u(S,null,w(e.items,a=>(o(),u(S,{key:JSON.stringify(a)},["link"in a?(o(),k(oe,{key:0,item:a},null,8,["item"])):"component"in a?(o(),k(B(a.component),O({key:1,ref_for:!0},a.props),null,16)):(o(),k(Ka,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),Wa=b(ja,[["__scopeId","data-v-25a6cce8"]]),za=["aria-expanded","aria-label"],qa={key:0,class:"text"},Ja=["innerHTML"],Ya={key:1,class:"vpi-more-horizontal icon"},Xa={class:"menu"},Qa=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=V(!1),n=V();xa({el:n,onBlur:a});function a(){t.value=!1}return(s,r)=>(o(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=d=>t.value=!0),onMouseleave:r[2]||(r[2]=d=>t.value=!1)},[f("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=d=>t.value=!t.value)},[e.button||e.icon?(o(),u("span",qa,[e.icon?(o(),u("span",{key:0,class:P([e.icon,"option-icon"])},null,2)):h("",!0),e.button?(o(),u("span",{key:1,innerHTML:e.button},null,8,Ja)):h("",!0),r[3]||(r[3]=f("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(o(),u("span",Ya))],8,za),f("div",Xa,[_(Wa,{items:e.items},{default:v(()=>[c(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=b(Qa,[["__scopeId","data-v-42cb505d"]]),Za=["href","aria-label","rel","innerHTML"],es=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{},me:{type:Boolean}},setup(e){const t=e,n=V();R(async()=>{await Ae();const s=n.value?.children[0];s instanceof HTMLElement&&s.className.startsWith("vpi-social-")&&(getComputedStyle(s).maskImage||getComputedStyle(s).webkitMaskImage)==="none"&&s.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=p(()=>typeof t.icon=="object"?t.icon.svg:``);return(s,r)=>(o(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:e.me?"me noopener":"noopener",innerHTML:a.value},null,8,Za))}}),ts=b(es,[["__scopeId","data-v-591a6b30"]]),ns={class:"VPSocialLinks"},as=m({__name:"VPSocialLinks",props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(t,n)=>(o(),u("div",ns,[(o(!0),u(S,null,w(e.links,({link:a,icon:s,ariaLabel:r})=>(o(),k(ts,{key:a,icon:s,link:a,ariaLabel:r,me:e.me},null,8,["icon","link","ariaLabel","me"]))),128))]))}}),be=b(as,[["__scopeId","data-v-d07f11e6"]]),ss={key:0,class:"group translations"},os={class:"trans-title"},rs={key:1,class:"group"},is={class:"item appearance"},ls={class:"label"},cs={class:"appearance-action"},us={key:2,class:"group"},ds={class:"item social-links"},vs=m({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=$(),{localeLinks:a,currentLang:s}=X({correspondingLink:!0}),r=p(()=>a.value.length&&s.value.label||t.value.appearance||n.value.socialLinks);return(d,l)=>r.value?(o(),k(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[i(a).length&&i(s).label?(o(),u("div",ss,[f("p",os,L(i(s).label),1),(o(!0),u(S,null,w(i(a),g=>(o(),k(oe,{key:g.link,item:g,lang:g.lang,hreflang:g.lang,rel:"alternate",dir:g.dir},null,8,["item","lang","hreflang","dir"]))),128))])):h("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",rs,[f("div",is,[f("p",ls,L(i(n).darkModeSwitchLabel||"Appearance"),1),f("div",cs,[_(ke)])])])):h("",!0),i(n).socialLinks?(o(),u("div",us,[f("div",ds,[_(be,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),fs=b(vs,[["__scopeId","data-v-562c832a"]]),hs=["aria-expanded"],ms=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(o(),u("button",{type:"button",class:P(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[f("span",{class:"container"},[f("span",{class:"top"}),f("span",{class:"middle"}),f("span",{class:"bottom"})],-1)])],10,hs))}}),ps=b(ms,[["__scopeId","data-v-e5dd9c1c"]]),ks=["innerHTML"],gs=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=p(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),s=p(()=>D(n.value.relativePath,t.item.activeMatch||a.value,!!t.item.activeMatch));return(r,d)=>(o(),k(C,{class:P({VPNavBarMenuLink:!0,active:s.value}),href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:v(()=>[f("span",{innerHTML:e.item.text},null,8,ks)]),_:1},8,["class","href","target","rel","no-icon"]))}}),_s=b(gs,[["__scopeId","data-v-6dd25bb8"]]),bs=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=p(()=>t.item.activeMatch?D(n.value.relativePath,t.item.activeMatch,!0):s(t.item));function s(r){if("component"in r)return!1;if("link"in r){const d=typeof r.link=="function"?r.link(n.value):r.link;return D(n.value.relativePath,r.activeMatch||d,!!r.activeMatch)}return r.items.some(s)}return(r,d)=>(o(),k(_e,{class:P({VPNavBarMenuGroup:!0,active:a.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),$s={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},ys=m({__name:"VPNavBarMenu",setup(e){const{theme:t}=$();return(n,a)=>i(t).nav?(o(),u("nav",$s,[a[0]||(a[0]=f("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(o(!0),u(S,null,w(i(t).nav,s=>(o(),u(S,{key:JSON.stringify(s)},["link"in s?(o(),k(_s,{key:0,item:s},null,8,["item"])):"component"in s?(o(),k(B(s.component),O({key:1,ref_for:!0},s.props),null,16)):(o(),k(bs,{key:2,item:s},null,8,["item"]))],64))),128))])):h("",!0)}}),Ps=b(ys,[["__scopeId","data-v-39714824"]]);function Ls(e){const t=e.mode??"auto",n=Vs(e),a=e.askAi,s=!!(a&&typeof a=="object"&&a.sidePanel);switch(t){case"sidePanel":return{mode:t,showKeywordSearch:!1,useSidePanel:!0};case"hybrid":return n||console.error('[vitepress] mode: "hybrid" requires keyword search credentials (appId, apiKey, indexName).'),{mode:t,showKeywordSearch:n,useSidePanel:!0};case"modal":return{mode:t,showKeywordSearch:n,useSidePanel:!1};case"auto":default:return{mode:"auto",showKeywordSearch:n,useSidePanel:s}}}function Vs(e){return!!(e.appId&&e.apiKey&&e.indexName)}function Oe(e,t){return[...(Array.isArray(e)?e:e?[e]:[]).map(s=>Array.isArray(s)?s.filter(r=>typeof r=="string"&&!r.startsWith("lang:")):s).filter(s=>typeof s=="string"?!s.startsWith("lang:"):Array.isArray(s)&&s.length>0),`lang:${t}`]}function Ss(e,t,n){const a=typeof e=="string",s=!a&&e.searchParameters?{...e.searchParameters}:void 0,r=s?.facetFilters??t.searchParameters?.facetFilters,d=Oe(r,n),l={...s,facetFilters:d.length?d:void 0},g={...a?{}:e,indexName:a?t.indexName:e.indexName,apiKey:a?t.apiKey:e.apiKey,appId:a?t.appId:e.appId,assistantId:a?e:e.assistantId};return Object.values(l).some(y=>y!=null)&&(g.searchParameters=l),g}function Ns(e,t,n){e=De(e,e.locales?.[t]||{});const a=Oe(e.searchParameters?.facetFilters,n),s=e.askAi?Ss(e.askAi,e,n):void 0;return{...e,searchParameters:{...e.searchParameters,facetFilters:a},askAi:s}}function De(e,t){const n={...e};for(const a in t){const s=t[a];if(s!==void 0){if(a==="searchParameters"){n[a]=s;continue}Pe(s)&&Pe(n[a])?n[a]=De(n[a],s):n[a]=s}}return delete n.locales,n}function Ts(e,t=(n,a)=>JSON.stringify(n)===JSON.stringify(a)){return p(n=>{const a=e();return n===void 0||!t(n,a)?a:n})}const As={},Ms={type:"button",class:"VPNavBarAskAiButton"};function ws(e,t){return o(),u("button",Ms,[...t[0]||(t[0]=[f("span",{class:"vpi-sparkles","aria-hidden":"true"},null,-1)])])}const Is=b(As,[["render",ws],["__scopeId","data-v-4eb17e89"]]),xs={type:"button",class:"VPNavBarSearchButton"},Hs={class:"text"},Bs=m({__name:"VPNavBarSearchButton",props:{text:{}},setup(e){return(t,n)=>(o(),u("button",xs,[n[0]||(n[0]=f("span",{class:"vpi-search","aria-hidden":"true"},null,-1)),f("span",Hs,L(e.text),1),n[1]||(n[1]=f("span",{class:"keys","aria-hidden":"true"},[f("kbd",{class:"key-cmd"},"⌘"),f("kbd",{class:"key-ctrl"},"Ctrl"),f("kbd",null,"K")],-1))]))}}),Le=b(Bs,[["__scopeId","data-v-baa3be99"]]),Cs={class:"VPNavBarSearch"},Es=m({__name:"VPNavBarSearch",setup(e){const t=Xe(()=>Qe(()=>import("./VPLocalSearchBox.DIqEGPXK.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:a,localeIndex:s,lang:r}=$(),d="local",l=Ts(()=>Ns(a.value.search?.options||{},s.value,r.value)),g=p(()=>Ls(l.value)),y=p(()=>{if(!g.value.useSidePanel)return null;const T=l.value.askAi;return!T||typeof T=="string"||!T.sidePanel?null:T.sidePanel===!0?{}:T.sidePanel}),N=p(()=>y.value?.keyboardShortcuts?.["Ctrl/Cmd+I"]!==!1),A=V(null);let E=0;const I=V(!1),x=V(!1);R(()=>{});function W(T){I.value||(I.value=!0),A.value={target:T,nonce:++E}}const F=V(!1);ie("k",T=>{(T.ctrlKey||T.metaKey)&&(T.preventDefault(),F.value=!0)}),ie("/",T=>{z(T)||(T.preventDefault(),F.value=!0)});function z(T){const M=T.target,K=M.tagName;return M.isContentEditable||K==="INPUT"||K==="SELECT"||K==="TEXTAREA"}return(T,M)=>(o(),u("div",Cs,[i(d)==="algolia"?(o(),u(S,{key:0},[g.value.showKeywordSearch?(o(),k(Le,{key:0,text:i(l).translations?.button?.buttonText||"Search","aria-label":i(l).translations?.button?.buttonAriaLabel||"Search","aria-keyshortcuts":"/ control+k meta+k",onClick:M[0]||(M[0]=K=>W("search"))},null,8,["text","aria-label"])):h("",!0),y.value?(o(),k(Is,{key:1,"aria-label":y.value.button?.translations?.buttonAriaLabel||"Ask AI","aria-keyshortcuts":N.value?"control+i meta+i":void 0,onClick:M[1]||(M[1]=K=>x.value?W("toggleAskAi"):W("askAi"))},null,8,["aria-label","aria-keyshortcuts"])):h("",!0),I.value?(o(),k(i(n),{key:2,"algolia-options":i(l),"open-request":A.value,onVnodeBeforeMount:M[2]||(M[2]=K=>x.value=!0)},null,8,["algolia-options","open-request"])):h("",!0)],64)):i(d)==="local"?(o(),u(S,{key:1},[_(Le,{text:i(l).translations?.button?.buttonText||"Search","aria-label":i(l).translations?.button?.buttonAriaLabel||"Search","aria-keyshortcuts":"/ control+k meta+k",onClick:M[3]||(M[3]=K=>F.value=!0)},null,8,["text","aria-label"]),F.value?(o(),k(i(t),{key:0,onClose:M[4]||(M[4]=K=>F.value=!1)})):h("",!0)],64)):h("",!0)]))}}),Fs=b(Es,[["__scopeId","data-v-2fc7f2c6"]]),Os=m({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=$();return(n,a)=>i(t).socialLinks?(o(),k(be,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):h("",!0)}}),Ds=b(Os,[["__scopeId","data-v-0394ad82"]]),Gs=["href","rel","target"],Ks=["innerHTML"],Rs={key:2},Us=m({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=$(),{hasSidebar:a}=G(),{currentLang:s}=X(),r=p(()=>typeof n.value.logoLink=="string"?n.value.logoLink:n.value.logoLink?.link),d=p(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.rel),l=p(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.target);return(g,y)=>(o(),u("div",{class:P(["VPNavBarTitle",{"has-sidebar":i(a)}])},[f("a",{class:"title",href:r.value??i(me)(i(s).link),rel:d.value,target:l.value},[c(g.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(o(),k(ee,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):h("",!0),i(n).siteTitle?(o(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,Ks)):i(n).siteTitle===void 0?(o(),u("span",Rs,L(i(t).title),1)):h("",!0),c(g.$slots,"nav-bar-title-after",{},void 0,!0)],8,Gs)],2))}}),js=b(Us,[["__scopeId","data-v-1e38c6bc"]]),Ws={class:"items"},zs={class:"title"},qs=m({__name:"VPNavBarTranslations",setup(e){const{theme:t}=$(),{localeLinks:n,currentLang:a}=X({correspondingLink:!0});return(s,r)=>i(n).length&&i(a).label?(o(),k(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:v(()=>[f("div",Ws,[f("p",zs,L(i(a).label),1),(o(!0),u(S,null,w(i(n),d=>(o(),k(oe,{key:d.link,item:d,lang:d.lang,hreflang:d.lang,rel:"alternate",dir:d.dir},null,8,["item","lang","hreflang","dir"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Js=b(qs,[["__scopeId","data-v-fafa8c23"]]),Ys={class:"wrapper"},Xs={class:"container"},Qs={class:"title"},Zs={class:"content"},eo={class:"content-body"},to=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const{y:t}=Me(),{isHome:n,hasSidebar:a}=G();return(s,r)=>(o(),u("div",{class:P(["VPNavBar",{"has-sidebar":i(a),home:i(n),top:i(t)===0,"screen-open":e.isScreenOpen}])},[f("div",Ys,[f("div",Xs,[f("div",Qs,[_(js,null,{"nav-bar-title-before":v(()=>[c(s.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(s.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),f("div",Zs,[f("div",eo,[c(s.$slots,"nav-bar-content-before",{},void 0,!0),_(Fs,{class:"search"}),_(Ps,{class:"menu"}),_(Js,{class:"translations"}),_(Ia,{class:"appearance"}),_(Ds,{class:"social-links"}),_(fs,{class:"extra"}),c(s.$slots,"nav-bar-content-after",{},void 0,!0),_(ps,{class:"hamburger",active:e.isScreenOpen,onClick:r[0]||(r[0]=d=>s.$emit("toggle-screen"))},null,8,["active"])])])])]),r[1]||(r[1]=f("div",{class:"divider"},[f("div",{class:"divider-line"})],-1))],2))}}),no=b(to,[["__scopeId","data-v-9ca1369d"]]),ao={key:0,class:"VPNavScreenAppearance"},so={class:"text"},oo=m({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=$();return(a,s)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",ao,[f("p",so,L(i(n).darkModeSwitchLabel||"Appearance"),1),_(ke)])):h("",!0)}}),ro=b(oo,[["__scopeId","data-v-b44890b2"]]),io=["innerHTML"],lo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=p(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),s=p(()=>D(n.value.relativePath,t.item.activeMatch||a.value,!!t.item.activeMatch)),{closeScreen:r}=se(pe);return(d,l)=>(o(),k(C,{class:P({VPNavScreenMenuLink:!0,active:s.value}),href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(r)},{default:v(()=>[f("span",{innerHTML:e.item.text},null,8,io)]),_:1},8,["class","href","target","rel","no-icon","onClick"]))}}),co=b(lo,[["__scopeId","data-v-b924ab8a"]]),uo=["innerHTML"],vo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=e,{page:n}=$(),a=p(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),s=p(()=>D(n.value.relativePath,t.item.activeMatch||a.value,!!t.item.activeMatch)),{closeScreen:r}=se(pe);return(d,l)=>(o(),k(C,{class:P({VPNavScreenMenuGroupLink:!0,active:s.value}),href:a.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(r)},{default:v(()=>[f("span",{innerHTML:e.item.text},null,8,uo)]),_:1},8,["class","href","target","rel","no-icon","onClick"]))}}),Ge=b(vo,[["__scopeId","data-v-ecf4b472"]]),fo={class:"VPNavScreenMenuGroupSection"},ho={key:0,class:"title"},mo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),u("div",fo,[e.text?(o(),u("p",ho,L(e.text),1)):h("",!0),(o(!0),u(S,null,w(e.items,a=>(o(),k(Ge,{key:a.text,item:a},null,8,["item"]))),128))]))}}),po=b(mo,[["__scopeId","data-v-4b7a798b"]]),ko=["aria-controls","aria-expanded"],go=["innerHTML"],_o=["id"],bo={key:0,class:"item"},$o={key:1,class:"item"},yo={key:2,class:"group"},Po=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=V(!1),a=p(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function s(){n.value=!n.value}return(r,d)=>(o(),u("div",{class:P(["VPNavScreenMenuGroup",{open:n.value}])},[f("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:s},[f("span",{class:"button-text",innerHTML:e.text},null,8,go),d[0]||(d[0]=f("span",{class:"vpi-plus button-icon"},null,-1))],8,ko),f("div",{id:a.value,class:"items"},[(o(!0),u(S,null,w(e.items,l=>(o(),u(S,{key:JSON.stringify(l)},["link"in l?(o(),u("div",bo,[_(Ge,{item:l},null,8,["item"])])):"component"in l?(o(),u("div",$o,[(o(),k(B(l.component),O({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(o(),u("div",yo,[_(po,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,_o)],2))}}),Lo=b(Po,[["__scopeId","data-v-956364f9"]]),Vo={key:0,class:"VPNavScreenMenu"},So=m({__name:"VPNavScreenMenu",setup(e){const{theme:t}=$();return(n,a)=>i(t).nav?(o(),u("nav",Vo,[(o(!0),u(S,null,w(i(t).nav,s=>(o(),u(S,{key:JSON.stringify(s)},["link"in s?(o(),k(co,{key:0,item:s},null,8,["item"])):"component"in s?(o(),k(B(s.component),O({key:1,ref_for:!0},s.props,{"screen-menu":""}),null,16)):(o(),k(Lo,{key:2,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),No=m({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=$();return(n,a)=>i(t).socialLinks?(o(),k(be,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):h("",!0)}}),To={class:"list"},Ao=m({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=X({correspondingLink:!0}),a=V(!1);function s(){a.value=!a.value}return(r,d)=>i(t).length&&i(n).label?(o(),u("div",{key:0,class:P(["VPNavScreenTranslations",{open:a.value}])},[f("button",{class:"title",onClick:s},[d[0]||(d[0]=f("span",{class:"vpi-languages icon lang"},null,-1)),U(" "+L(i(n).label)+" ",1),d[1]||(d[1]=f("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),f("ul",To,[(o(!0),u(S,null,w(i(t),l=>(o(),u("li",{key:l.link,class:"item"},[_(C,{class:"link",href:l.link,lang:l.lang,dir:l.dir},{default:v(()=>[U(L(l.text),1)]),_:2},1032,["href","lang","dir"])]))),128))])],2)):h("",!0)}}),Mo=b(Ao,[["__scopeId","data-v-a4d9b172"]]),wo={key:0,class:"VPNavScreen",id:"VPNavScreen"},Io={class:"container"},xo=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=we(Y?document.body:null);return(n,a)=>(o(),k(ve,{name:"fade",onEnter:a[0]||(a[0]=s=>t.value=!0),onAfterLeave:a[1]||(a[1]=s=>t.value=!1)},{default:v(()=>[e.open?(o(),u("div",wo,[f("div",Io,[c(n.$slots,"nav-screen-content-before",{},void 0,!0),_(So,{class:"menu"}),_(Mo,{class:"translations"}),_(ro,{class:"appearance"}),_(No,{class:"social-links"}),c(n.$slots,"nav-screen-content-after",{},void 0,!0)])])):h("",!0)]),_:3}))}}),Ho=b(xo,[["__scopeId","data-v-05f3d7bc"]]),Bo={key:0,class:"VPNav"},Co=m({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=ya(),{frontmatter:s}=$(),r=p(()=>s.value.navbar!==!1);return Ie(pe,{closeScreen:n}),te(()=>{Y&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(d,l)=>r.value?(o(),u("header",Bo,[_(no,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":v(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Ho,{open:i(t)},{"nav-screen-content-before":v(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),Eo=b(Co,[["__scopeId","data-v-9f75dce3"]]),Fo=["role","tabindex"],Oo={key:1,class:"items"},Do=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:s,isActiveLink:r,hasActiveLink:d,hasChildren:l,toggle:g}=Mt(p(()=>t.item)),y=p(()=>l.value?"section":"div"),N=p(()=>s.value?"a":"div"),A=p(()=>l.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),E=p(()=>s.value?void 0:"button"),I=p(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":s.value},{"is-active":r.value},{"has-active":d.value}]);function x(F){"key"in F&&F.key!=="Enter"||!t.item.link&&g()}function W(){t.item.link&&g()}return(F,z)=>{const T=j("VPSidebarItem",!0);return o(),k(B(y.value),{class:P(["VPSidebarItem",I.value])},{default:v(()=>[e.item.text?(o(),u("div",O({key:0,class:"item",role:E.value},Ze(e.item.items?{click:x,keydown:x}:{},!0),{tabindex:e.item.items&&0}),[z[1]||(z[1]=f("div",{class:"indicator"},null,-1)),e.item.link?(o(),k(C,{key:0,tag:N.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:v(()=>[(o(),k(B(A.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(o(),k(B(A.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(o(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:W,onKeydown:et(W,["enter"]),tabindex:"0"},[...z[0]||(z[0]=[f("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):h("",!0)],16,Fo)):h("",!0),e.item.items&&e.item.items.length?(o(),u("div",Oo,[e.depth<5?(o(!0),u(S,{key:0},w(e.item.items,M=>(o(),k(T,{key:M.text,item:M,depth:e.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Go=b(Do,[["__scopeId","data-v-d81de50c"]]),Ko=m({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=V(!0);let n=null;return R(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),tt(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,s)=>(o(!0),u(S,null,w(e.items,r=>(o(),u("div",{key:r.text,class:P(["group",{"no-transition":t.value}])},[_(Go,{item:r,depth:0},null,8,["item"])],2))),128))}}),Ro=b(Ko,[["__scopeId","data-v-8d50c081"]]),Uo={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},jo=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=G(),a=e,s=V(null),r=we(Y?document.body:null);H([a,s],()=>{a.open?(r.value=!0,s.value?.focus()):r.value=!1},{immediate:!0,flush:"post"});const d=V(0);return H(t,()=>{d.value+=1},{deep:!0}),(l,g)=>i(n)?(o(),u("aside",{key:0,class:P(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:s,onClick:g[0]||(g[0]=nt(()=>{},["stop"]))},[g[2]||(g[2]=f("div",{class:"curtain"},null,-1)),f("nav",Uo,[g[1]||(g[1]=f("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(l.$slots,"sidebar-nav-before",{},void 0,!0),(o(),k(Ro,{items:i(t),key:d.value},null,8,["items"])),c(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),Wo=b(jo,[["__scopeId","data-v-af661f50"]]),zo={href:"#VPContent",class:"VPSkipLink visually-hidden"},qo=m({__name:"VPSkipLink",setup(e){const{theme:t}=$(),n=ne(),a=V();return H(()=>n.path,()=>a.value.focus()),(s,r)=>(o(),u(S,null,[f("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),f("a",zo,L(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Jo=b(qo,[["__scopeId","data-v-331ec75c"]]),Yo=m({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=At();wt({closeSidebar:a});const{frontmatter:s}=$(),r=at(),d=p(()=>!!r["home-hero-image"]);return Ie(Be,{heroImageSlotExists:d}),(l,g)=>{const y=j("Content");return i(s).layout!==!1?(o(),u("div",{key:0,class:P(["Layout",i(s).pageClass])},[c(l.$slots,"layout-top",{},void 0,!0),_(Jo),_(it,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),_(Eo,null,{"nav-bar-title-before":v(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_($a,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),_(Wo,{open:i(t)},{"sidebar-nav-before":v(()=>[c(l.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[c(l.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(ra,null,{"page-top":v(()=>[c(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[c(l.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[c(l.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[c(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[c(l.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[c(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[c(l.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[c(l.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-actions-before-actions":v(()=>[c(l.$slots,"home-hero-actions-before-actions",{},void 0,!0)]),"home-hero-image":v(()=>[c(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[c(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[c(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[c(l.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[c(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[c(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[c(l.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[c(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[c(l.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[c(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[c(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[c(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[c(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[c(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[c(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(da),c(l.$slots,"layout-bottom",{},void 0,!0)],2)):(o(),k(y,{key:1}))}}}),Xo=b(Yo,[["__scopeId","data-v-0cf61682"]]),Zo={Layout:Xo,enhanceApp:({app:e})=>{e.component("Badge",st)}};export{Zo as t,$ as u}; diff --git a/docs/assets/guide_auth.md.DNA7JhY7.js b/docs/assets/guide_auth.md.DNA7JhY7.js deleted file mode 100644 index 283088fbfe..0000000000 --- a/docs/assets/guide_auth.md.DNA7JhY7.js +++ /dev/null @@ -1,3 +0,0 @@ -import{c as i,S as t,j as a,m as e}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"guide/auth.md","filePath":"guide/auth.md","lastUpdated":1779780644000}'),h={name:"guide/auth.md"};function n(o,s,l,r,p,k){return t(),a("div",null,[...s[0]||(s[0]=[e(`

Auth

Gittensory has two auth surfaces:

  • GitHub OAuth for MCP users.
  • GitHub App installation auth for repositories.

MCP User Auth

Run:

sh
gittensory-mcp login

The CLI starts GitHub Device Flow, asks you to approve the code on GitHub, then exchanges the GitHub token server-side for a short-lived Gittensory session token.

Gittensory stores:

  • a hashed server-side session token
  • the GitHub login and user id
  • scopes and session expiry metadata

Gittensory does not store user PATs.

Non-Interactive Bootstrap

For local automation, pass a GitHub token only long enough to mint a Gittensory session:

sh
gittensory-mcp login --github-token "$(gh auth token)"

The token is exchanged immediately. The MCP wrapper stores the Gittensory session token, not the GitHub token.

Check Auth State

sh
gittensory-mcp whoami
-gittensory-mcp status
-gittensory-mcp doctor

Logout

sh
gittensory-mcp logout

Logout revokes the remote session when possible and removes the local config file.

Static Tokens

Static bearer tokens remain only for private backend operations, internal jobs, and temporary beta bootstrap. Normal MCP users should use GitHub OAuth.

`,21)])])}const u=i(h,[["render",n]]);export{c as __pageData,u as default}; diff --git a/docs/assets/guide_auth.md.DNA7JhY7.lean.js b/docs/assets/guide_auth.md.DNA7JhY7.lean.js deleted file mode 100644 index c1c621e628..0000000000 --- a/docs/assets/guide_auth.md.DNA7JhY7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as i,S as t,j as a,m as e}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Auth","description":"","frontmatter":{},"headers":[],"relativePath":"guide/auth.md","filePath":"guide/auth.md","lastUpdated":1779780644000}'),h={name:"guide/auth.md"};function n(o,s,l,r,p,k){return t(),a("div",null,[...s[0]||(s[0]=[e("",21)])])}const u=i(h,[["render",n]]);export{c as __pageData,u as default}; diff --git a/docs/assets/guide_github-app-setup.md.ZPvLDsvt.js b/docs/assets/guide_github-app-setup.md.ZPvLDsvt.js deleted file mode 100644 index 83f8a94fd1..0000000000 --- a/docs/assets/guide_github-app-setup.md.ZPvLDsvt.js +++ /dev/null @@ -1,3 +0,0 @@ -import{c as t,S as i,j as s,m as a}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"GitHub App Setup","description":"","frontmatter":{},"headers":[],"relativePath":"guide/github-app-setup.md","filePath":"guide/github-app-setup.md","lastUpdated":1779781690000}'),l={name:"guide/github-app-setup.md"};function r(d,e,n,h,o,p){return i(),s("div",null,[...e[0]||(e[0]=[a(`

GitHub App Setup

The GitHub App is the maintainer/install surface. GitHub OAuth is the MCP user-auth surface.

Basic Fields

Use these values:

FieldValue
Homepage URLhttps://gittensory.aethereal.dev
Webhook URL\${GITTENSORY_API_URL}/v1/github/webhook
Webhook activeenabled
SSL verificationenabled
Device Flowenabled

GITTENSORY_API_URL is the private API origin for the deployed backend. Do not use the GitHub Pages docs domain for webhooks; Pages only serves static docs.

Use a generated webhook secret and set the same value in Cloudflare as GITHUB_WEBHOOK_SECRET.

Required Repository Permissions

PermissionAccessWhy
MetadataReadRequired for repository identity and repository events.
ChecksWriteRequired to create and update the Gittensory check run.
Pull requestsReadRequired for PR metadata, reviewability, and webhook events.
IssuesReadRequired for issue linkage, issue-discovery context, and duplicate signals.

Optional:

PermissionAccessWhy
IssuesWriteOnly needed if public-safe sticky PR comments are enabled.
ContentsReadOnly needed if a future feature reads repository files directly through the App.

Required Events

Subscribe to:

  • Pull request
  • Issues
  • Repository

If GitHub shows Installation target, select it. Some installation-related events are not always shown as normal selectable event rows; Gittensory should not block health on event names that are hidden in the app UI.

Install Or Repair

  1. Update the GitHub App permissions and events.
  2. Reinstall the app or approve the changed permissions.
  3. Select the repos Gittensory should inspect.
  4. Trigger installation-health refresh:
sh
curl -X POST "$GITTENSORY_API_URL/v1/internal/jobs/refresh-installation-health/run" \\
-  -H "Authorization: Bearer $INTERNAL_JOB_TOKEN"
  1. Check health:
sh
curl "$GITTENSORY_API_URL/v1/readiness" \\
-  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

Healthy app installation state should remove the readiness warning about GitHub App installations needing attention.

Marketplace Readiness

Before Marketplace submission, add:

  • public docs URL
  • support contact
  • privacy policy
  • terms page if needed
  • clear setup flow
  • valid webhook and install diagnostics

Do not submit until the privacy, support, terms, install diagnostics, and public setup flow are complete.

`,25)])])}const k=t(l,[["render",r]]);export{c as __pageData,k as default}; diff --git a/docs/assets/guide_github-app-setup.md.ZPvLDsvt.lean.js b/docs/assets/guide_github-app-setup.md.ZPvLDsvt.lean.js deleted file mode 100644 index b93aaf36b6..0000000000 --- a/docs/assets/guide_github-app-setup.md.ZPvLDsvt.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as t,S as i,j as s,m as a}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"GitHub App Setup","description":"","frontmatter":{},"headers":[],"relativePath":"guide/github-app-setup.md","filePath":"guide/github-app-setup.md","lastUpdated":1779781690000}'),l={name:"guide/github-app-setup.md"};function r(d,e,n,h,o,p){return i(),s("div",null,[...e[0]||(e[0]=[a("",25)])])}const k=t(l,[["render",r]]);export{c as __pageData,k as default}; diff --git a/docs/assets/guide_install.md.ByQAA8QU.js b/docs/assets/guide_install.md.ByQAA8QU.js deleted file mode 100644 index 8509126a98..0000000000 --- a/docs/assets/guide_install.md.ByQAA8QU.js +++ /dev/null @@ -1,11 +0,0 @@ -import{c as i,S as a,j as t,m as e}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"guide/install.md","filePath":"guide/install.md","lastUpdated":1779781690000}'),l={name:"guide/install.md"};function n(h,s,p,r,k,o){return a(),t("div",null,[...s[0]||(s[0]=[e(`

Install

Gittensory has two install paths: public npm for normal use, and local checkout for development.

Public npm

Use this for Codex, Claude Desktop, Cursor, or any other stdio MCP client:

sh
npm install -g @jsonbored/gittensory-mcp
-gittensory-mcp login
-gittensory-mcp status
-gittensory-mcp --stdio

The login command uses GitHub Device Flow and stores a short-lived Gittensory session token in your local config directory.

Local checkout

Use this when developing Gittensory itself:

sh
git clone https://github.com/JSONbored/gittensory.git
-cd gittensory
-npm install
-npm link --workspace @jsonbored/gittensory-mcp
-gittensory-mcp login
-gittensory-mcp --stdio

Verify The Install

Run:

sh
gittensory-mcp doctor
-gittensory-mcp whoami
-gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN --json

doctor checks API health, auth state, source-upload defaults, local git metadata, and whether the binary is likely visible to MCP clients.

Privacy Defaults

Gittensory MCP v1 sends structured metadata only:

  • repository full name
  • branch and base refs
  • changed file paths and counts
  • linked issue references
  • commit messages
  • validation command summaries

It does not upload source contents. GITTENSORY_UPLOAD_SOURCE=true is rejected.

`,17)])])}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/docs/assets/guide_install.md.ByQAA8QU.lean.js b/docs/assets/guide_install.md.ByQAA8QU.lean.js deleted file mode 100644 index 53f3940dad..0000000000 --- a/docs/assets/guide_install.md.ByQAA8QU.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as i,S as a,j as t,m as e}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Install","description":"","frontmatter":{},"headers":[],"relativePath":"guide/install.md","filePath":"guide/install.md","lastUpdated":1779781690000}'),l={name:"guide/install.md"};function n(h,s,p,r,k,o){return a(),t("div",null,[...s[0]||(s[0]=[e("",17)])])}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/docs/assets/guide_maintainers.md.CGSokUpu.js b/docs/assets/guide_maintainers.md.CGSokUpu.js deleted file mode 100644 index c773eabd63..0000000000 --- a/docs/assets/guide_maintainers.md.CGSokUpu.js +++ /dev/null @@ -1 +0,0 @@ -import{c as i,S as a,j as t,m as n}from"./chunks/framework.BXgR76oC.js";const m=JSON.parse('{"title":"For Maintainers","description":"","frontmatter":{},"headers":[],"relativePath":"guide/maintainers.md","filePath":"guide/maintainers.md","lastUpdated":1779780644000}'),l={name:"guide/maintainers.md"};function o(r,e,s,c,d,p){return a(),t("div",null,[...e[0]||(e[0]=[n('

For Maintainers

Gittensory is meant to make Gittensor-driven contribution flow less noisy.

GitHub App Surface

The GitHub App creates the detailed maintainer surface:

  • Gittensory check runs on PRs
  • reviewability context
  • linked issue and duplicate signals
  • contributor role context
  • queue and repo-lane context
  • optional public-safe sticky PR comments

The check run is the canonical detailed report. Public comments are opt-in and sanitized.

Reviewability Actions

Gittensory maps PRs to maintainer-friendly actions:

  • review_now
  • needs_author
  • likely_duplicate
  • close_or_redirect
  • watch
  • maintainer_lane

The point is not to shame contributors. The point is to identify the lowest-friction next step.

Public Comments

Public comments stay off by default.

When enabled, comments can include:

  • contribution context
  • PR hygiene
  • duplicate or WIP risk
  • maintainer review notes
  • contributor next steps

Comments must not include raw trust scores, wallet data, hotkeys, public reward estimates, or public score optimization language.

Repo Owner Signals

Repo owners can use Gittensory to inspect:

  • repo lane clarity
  • label configuration
  • maintainer cut readiness
  • queue health
  • contributor intake health
  • GitHub App installation health
  • stale or degraded backfill state
',18)])])}const h=i(l,[["render",o]]);export{m as __pageData,h as default}; diff --git a/docs/assets/guide_maintainers.md.CGSokUpu.lean.js b/docs/assets/guide_maintainers.md.CGSokUpu.lean.js deleted file mode 100644 index 0dc7eccbcd..0000000000 --- a/docs/assets/guide_maintainers.md.CGSokUpu.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as i,S as a,j as t,m as n}from"./chunks/framework.BXgR76oC.js";const m=JSON.parse('{"title":"For Maintainers","description":"","frontmatter":{},"headers":[],"relativePath":"guide/maintainers.md","filePath":"guide/maintainers.md","lastUpdated":1779780644000}'),l={name:"guide/maintainers.md"};function o(r,e,s,c,d,p){return a(),t("div",null,[...e[0]||(e[0]=[n("",18)])])}const h=i(l,[["render",o]]);export{m as __pageData,h as default}; diff --git a/docs/assets/guide_mcp.md.DK8zvHnS.js b/docs/assets/guide_mcp.md.DK8zvHnS.js deleted file mode 100644 index 9856977d43..0000000000 --- a/docs/assets/guide_mcp.md.DK8zvHnS.js +++ /dev/null @@ -1,19 +0,0 @@ -import{c as i,S as a,j as e,m as t}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"guide/mcp.md","filePath":"guide/mcp.md","lastUpdated":1779780644000}'),n={name:"guide/mcp.md"};function l(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t(`

MCP

The MCP package is the contributor-facing surface for coding agents. It runs locally over stdio and calls the private Gittensory API with your Gittensory session token.

Generate Client Config

Print a config snippet:

sh
gittensory-mcp init-client --print codex
-gittensory-mcp init-client --print claude
-gittensory-mcp init-client --print cursor

These commands do not edit your files. Use an absolute command path if your client does not inherit your shell PATH.

Codex

toml
[mcp_servers.gittensory]
-command = "gittensory-mcp"
-args = ["--stdio"]

Claude Desktop

json
{
-  "mcpServers": {
-    "gittensory": {
-      "command": "gittensory-mcp",
-      "args": ["--stdio"]
-    }
-  }
-}

Cursor

json
{
-  "mcpServers": {
-    "gittensory": {
-      "command": "gittensory-mcp",
-      "args": ["--stdio"]
-    }
-  }
-}

Tools

The local wrapper exposes repo context, contributor decision packs, local branch preflight, score blockers, PR packets, variant comparison, and registry change tools.

Useful tools:

  • gittensory_local_status
  • gittensory_get_decision_pack
  • gittensory_explain_repo_decision
  • gittensory_preflight_current_branch
  • gittensory_preview_current_branch_score
  • gittensory_rank_local_next_actions
  • gittensory_explain_local_blockers
  • gittensory_prepare_pr_packet

Runtime Rules

  • Stdio only for the local wrapper.
  • No source upload in v1.
  • Private score and reward/risk reasoning stay in MCP/API output.
  • Public PR packets are sanitized and do not include wallet, hotkey, raw trust score, or public score estimates.
`,18)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/docs/assets/guide_mcp.md.DK8zvHnS.lean.js b/docs/assets/guide_mcp.md.DK8zvHnS.lean.js deleted file mode 100644 index 523cd30cf4..0000000000 --- a/docs/assets/guide_mcp.md.DK8zvHnS.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as i,S as a,j as e,m as t}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"guide/mcp.md","filePath":"guide/mcp.md","lastUpdated":1779780644000}'),n={name:"guide/mcp.md"};function l(h,s,p,r,o,k){return a(),e("div",null,[...s[0]||(s[0]=[t("",18)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/docs/assets/guide_miners.md.BeaGERAQ.js b/docs/assets/guide_miners.md.BeaGERAQ.js deleted file mode 100644 index 1c4e116314..0000000000 --- a/docs/assets/guide_miners.md.BeaGERAQ.js +++ /dev/null @@ -1,6 +0,0 @@ -import{c as s,S as e,j as a,m as l}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"For Miners","description":"","frontmatter":{},"headers":[],"relativePath":"guide/miners.md","filePath":"guide/miners.md","lastUpdated":1779785713000}'),n={name:"guide/miners.md"};function t(r,i,h,p,o,k){return e(),a("div",null,[...i[0]||(i[0]=[l(`

For Miners

Gittensory helps miners decide what to do next with evidence instead of guesswork.

What It Answers

  • Is this repo a direct-PR lane, issue-discovery lane, split lane, inactive lane, or unknown lane?
  • Am I in a normal contributor lane or a maintainer lane for this repo?
  • Does my current branch look reviewable?
  • What blocks scoreability right now?
  • Should I clean up open PRs before opening more work?
  • Is there duplicate or WIP collision risk?
  • What public-safe PR packet should I give a maintainer?

Branch Analysis

Run from a Git repo:

sh
gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN --json

The response includes:

  • lane context
  • role context
  • preflight findings
  • private score blockers
  • current vs projected scoreability scenarios
  • reward/risk reasoning
  • base freshness warnings when the local diff may be inflated
  • maintainer-fit notes
  • public-safe PR packet
  • ranked next actions

When the current score is blocked by temporary account/queue state, pass the assumptions explicitly:

sh
gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN \\
-  --pending-merged-prs 3 \\
-  --expected-open-prs 0 \\
-  --projected-credibility 0.8 \\
-  --scenario-note "approved PRs expected to merge" \\
-  --json

Gittensory labels that as a user-supplied scenario. It shows the current effective score, the underlying potential score, and what changes if the open-PR and credibility gates clear.

Preflight

sh
gittensory-mcp preflight --login YOUR_GITHUB_LOGIN --json

Use this before opening a PR. It is especially useful when you need to know whether a branch is missing tests, missing a linked issue, colliding with active work, or likely to increase maintainer burden.

How This Helps

Gittensory does not promise payouts. It explains scoreability and risk:

  • open PR pressure
  • credibility assumptions
  • lane eligibility
  • issue-discovery vs direct PR fit
  • duplicate clusters
  • stale work
  • review friction

That makes recommendations actionable: land or withdraw blocked work, avoid direct PRs in issue-discovery-only repos, improve validation evidence, or pick a repo where your history and the lane actually fit.

`,19)])])}const g=s(n,[["render",t]]);export{c as __pageData,g as default}; diff --git a/docs/assets/guide_miners.md.BeaGERAQ.lean.js b/docs/assets/guide_miners.md.BeaGERAQ.lean.js deleted file mode 100644 index 745cd93753..0000000000 --- a/docs/assets/guide_miners.md.BeaGERAQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as s,S as e,j as a,m as l}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"For Miners","description":"","frontmatter":{},"headers":[],"relativePath":"guide/miners.md","filePath":"guide/miners.md","lastUpdated":1779785713000}'),n={name:"guide/miners.md"};function t(r,i,h,p,o,k){return e(),a("div",null,[...i[0]||(i[0]=[l("",19)])])}const g=s(n,[["render",t]]);export{c as __pageData,g as default}; diff --git a/docs/assets/index.md.BKalGx3J.js b/docs/assets/index.md.BKalGx3J.js deleted file mode 100644 index 8341947c92..0000000000 --- a/docs/assets/index.md.BKalGx3J.js +++ /dev/null @@ -1 +0,0 @@ -import{c as t,S as i,j as a,m as s}from"./chunks/framework.BXgR76oC.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Gittensory","text":"Private repo intelligence for Gittensor work.","tagline":"For Gittensor miners, maintainers, and agents: MCP preflight, scoreability projections, and GitHub App review packets. Still not a Gittensor frontend.","image":{"src":"/logo.svg","alt":"Gittensory signal mark"},"actions":[{"theme":"brand","text":"Install MCP","link":"/guide/install"},{"theme":"alt","text":"GitHub App Setup","link":"/guide/github-app-setup"}]},"features":[{"title":"Scoreability","details":"Current estimate, ungated potential, and near-term what-if scenarios."},{"title":"Queue Pressure","details":"Open PR gates, stale branches, duplicate risk, and cleanup-first actions."},{"title":"Role Context","details":"Contributor lane, maintainer lane, owner history, and repo-specific evidence."},{"title":"Reviewability","details":"Private maintainer packets plus public-safe PR guidance."},{"title":"Registry Signals","details":"Repo lanes, label multipliers, issue discovery, bounties, and config drift."},{"title":"MCP Native","details":"Codex, Claude, Cursor, and agents get structured JSON without code upload."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1779793775000}'),n={name:"index.md"};function r(o,e,l,d,c,p){return i(),a("div",null,[...e[0]||(e[0]=[s('
01 / Miners
Pick work with less guesswork.Score blockers, lane fit, stale base checks, and cleanup-first guidance.
02 / Maintainers
Review signal, not noise.Role-aware context, duplicate risk, validation evidence, and next action.
03 / Agents
Local branch context.Metadata-only MCP tools for Codex, Claude, Cursor, and automation.
04 / Privacy
Private by default.No PAT storage, no source upload, no public score or wallet leakage.

Not another Gittensor frontend.

Gittensory is the private signal layer behind better contributions: official miner context, registry lanes, queue pressure, scoreability projections, maintainer friction, and public-safe PR packets.

lanedirect_pr / issue_discovery / maintainer
scorecurrent 0, potential visible, scenario gated
riskopen PR pressure, credibility, stale base
outputprivate MCP JSON + sanitized PR packet
',1)])])}const v=t(n,[["render",r]]);export{g as __pageData,v as default}; diff --git a/docs/assets/index.md.BKalGx3J.lean.js b/docs/assets/index.md.BKalGx3J.lean.js deleted file mode 100644 index 45e610d265..0000000000 --- a/docs/assets/index.md.BKalGx3J.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as t,S as i,j as a,m as s}from"./chunks/framework.BXgR76oC.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Gittensory","text":"Private repo intelligence for Gittensor work.","tagline":"For Gittensor miners, maintainers, and agents: MCP preflight, scoreability projections, and GitHub App review packets. Still not a Gittensor frontend.","image":{"src":"/logo.svg","alt":"Gittensory signal mark"},"actions":[{"theme":"brand","text":"Install MCP","link":"/guide/install"},{"theme":"alt","text":"GitHub App Setup","link":"/guide/github-app-setup"}]},"features":[{"title":"Scoreability","details":"Current estimate, ungated potential, and near-term what-if scenarios."},{"title":"Queue Pressure","details":"Open PR gates, stale branches, duplicate risk, and cleanup-first actions."},{"title":"Role Context","details":"Contributor lane, maintainer lane, owner history, and repo-specific evidence."},{"title":"Reviewability","details":"Private maintainer packets plus public-safe PR guidance."},{"title":"Registry Signals","details":"Repo lanes, label multipliers, issue discovery, bounties, and config drift."},{"title":"MCP Native","details":"Codex, Claude, Cursor, and agents get structured JSON without code upload."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1779793775000}'),n={name:"index.md"};function r(o,e,l,d,c,p){return i(),a("div",null,[...e[0]||(e[0]=[s("",1)])])}const v=t(n,[["render",r]]);export{g as __pageData,v as default}; diff --git a/docs/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 b/docs/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2 deleted file mode 100644 index 27a82ed339b2e3701e7b40e9833c6f48a5445bff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43716 zcmV({K+?Z=Pew8T0RR910II|Q6951J0Uk5}0IE;`1OP$+00000000000000000000 z0000QhGH9;ejF-4NLE2oiab9}RzXsMCASl|sXg8Cu> zHUcCAhI|WyKmY_F1&nkDAY0%OaX_3R8uI31I%SwVI$J0JZsw^c)6Ma6I|Sw5>*pAW zu$!EfpzQzugrstaiTz0xU_S&0Y9-7H(hL)Jfgf z4g|ubdnOHv=!NVtQAH60D@{_H)eRT7biOx{5C&v*Jqi_fbuk1BJ3F$9gCKbi<_v)1BxeSKT%2F^Mn2c7ekL1%WU#zI!`PfNGzx)jEPIL zaQ=-G(TZc~1Ih0`r~WBX@e>&$apr>Rn}sN-^!J;bI0M^8{v;Dq|8Y61ZA`&I^K)?nhRG5m<=RD8&M&|eD z$<2D7VL(7*X)%c@)zq!o>&XB~w%5z<^^(n9pBb=$b`${-1T3^BQWQZfrKDEVxqSJY|-rFCKi3n8cm@fHpEx_0xgJu#E;0It0T4+|r9ghtl5vC&EI54@lAc@Wip zpFIbp2^6VwMDHJA03DzsP$*MT1Sm{|0bvq*m`;!w%`$oz_MjKb_n+XxFag+{50)VSKahGH$AsRlaK{^0!aR-tUx$)Dn>2TM~#(3I%-NR+;_itd( zffzPGY7BtVxCxECO~|1EP5>d%2DQ|fltavNObu|Rrb#+9Alcj2IFO}r+m0wy|*o&){mdo?0@(2uk_p)|JE>>t11j#wI+LVElZcBN)$*e z2vvmvhw*rW1^)YAI{W9P^_v8~la#KID2+^MvUy|?s?9nP zKx(ZWTNrBd1mgVIFaN7fl}JotTgWx&6Bh(x?=xTRx1nEu#w{(2A>?ln@x&7uWbhv1 zmX>S%5YGna)fHj&cZug?td(fiKA-!4=Gg-xm8+&mBaCxhQ6R*u7Q_pOjz|H6^>GeP zoWhR_2;*YnxRgAuqKz9E;}%xk?&1(<9Fi1=Bs0YQg7Gxj@vw-Vhq#L3xQcNM@d={i zQ^du~B*!0-u2&FR>l?rgT6-@e)f{yPZr{#E{R&vSp?`1Ne})O+PWzA^pLAKswPWIFDmvb&_c zD~h4E-R5P_zVdtk0RZUFgfH%NSSEexLSg8SH89#kQ1o5*=oEA$2vQuRuaAgnKZn6mb&z$bp!bKj}KDMefc}qQ_?H5POraBe!iOHxkz5%x#HZF z*zY{O{3j1KbnV|>rERAV#K+aNWxsuZsj`(V{91T6nzT2+f>$0tz4>+kSBOA0KyQK9 zhBC122Ox(4;o3Qf;9?BG`{<6Z{F#66>Ui_em6!dx^vdSo@g0+Xs2lh6+?(O{+jKV{ zxjEq+rM;Js*(TqV4rSdNr0`}ldM^C-8_FFNZ_ju7jbQEE$XRO?=MSH+|78XMQXgy^ z{t#e2;x+{pKp)vEZQPLKoj~tzRSLizt|arooru*+z@1I&0z`v57$^rPDJiVmNa`(EGZ^C2?Ay1OeDDSNhi90hjYHa1a|bzd~B;virq;)^1enYxiXCIygB5 zz>b^7$*ZnX;+jsI=E<`4_+;aHHoSjpavw{;3~6xLN0(2S`>6@r?mrZ_F#9g#jgr0k zmepE-(+`F#{$?v$j^9i&kM{TdxBO*NaVfKOf#ME-u5lG$+FNX!wX?s0RqBv*U#3c9 z`|a#Cn;wi0b02HZQU|vBr+M>p!m%PV`bGG5+bV6wH}oL`tG0LPd+l$-+V*#0NiOrz zE!OAG{Mq&|<&CxmC&wb?Z53&L{FwIRJ!$pLR)=Y{(Ll8*y9?&13-zkexPvUVZ%i%Y-oLwLB^!;dQu-R%tNVYherhC6U2 zvvP-idij)l{h8ik_Xf7AI1TbLy0T?PwUmBYX|6aiu}AMR7Z3lnq|z3oWUZs3rh)S2 zM>Fl5k|aOF=qdIb@wmZ|-VvEJ01|{MsK|=NDmwlmH*p9&20qD} zH-OiM#yyR&+9c$!U%}n0p3e)XU9OfhyXpigU8*voGaA~)Pa<;y)O4aF z|H!|7VVMR&fsus}NS{?oS>1t7Ckw5M{9qnz-KgpYLhsG^oOlCl8rPhS2O>S~oXuEm zUB@A^&;qZZ8~3yiuhKARa)|hvE2@^R7a1qtDhzK&OPGVh+I-PQ<~ltT($XdhU-32# z2-wA$hGUmT7}CpZAqLY-;1k0&4TJDkx1`umA;7JMwV4GJ1b8gn)SwpbzGxw)WCRG!G_Ve$;mC9v zm8DiDG!2gCHkoCT_p}4hb_{sqV?s7N+w=~5e|gSfKyy+Un*@*Am+V)O8-Q|}Cs#dc zn~gW!$YWvUo5FALm;6ro^`Yl@_Nj8-Y9%VN-fHL91>PD?{h9Cu_tSs=(u-e$xBPpC z@dt!^nG+^4hkYkM6#Y-V%UJcA|1NXmo2coVv7c>bK0&X#&wkOm;eP`Z|(r&qG$d3&;G=+b&!wI`3Y%m3od@cqu+-TXpADe6Y+4+;_e@~#T)kL+?F0<&sZ)W3uvb=zlEI9U49Qaqj%VysJMBUXs2*m{aSLI zT(hCBeO2skQkWdSuyxhw_!Xx$#Hkzf=k%Fi^gn%ig&Ta}W7cW>LN@Y$?63c=ZLNJ+@$dez8oc-%imiYXPnXPJ z0ne-VbK0Tq{U6sEG`}1*XMvi}A71g|)@y-_7X0^lZ89Gm_4E@Vl>~l>4)V{#+%Ra zS)U(+H%*5WIYc*S#=5-_FKsMUHX`_9kA~HA>DCPz)*0&C#ym=%i+7#zD|H5LjQEuX zio1rr$`D@gt(Q?^WZ%bL=3+iRz2@7?rts;fo<=zn9{VL8VT&>8d+JNeyO{dViUm3Q z1NUie=j8A3*U$bd`NJi_kkLNw&QY4{gBYcgdK%u9LR+hU+dhMge=7$}J7b4q%W*UbB8!whHEWcI} zTB2xkM3%0T=Q!Z^`hyIuM3Z0277(#oRA3?O!^1eKT}3k;C?&u?U2o}NzbYq6G7{}b zyysOVM2cS%UW^I;ll%mF0;;8QY$@UE4OIGy6Ef-A>}_2hT&i{D^lJ0*Q99B7x;lX(Z_Ri2~G&nardK!JVolArei@ZEl|#eu3pf4PRO zm}3C5JFe?LSlxSHBVbY^CiKZLfaB!>=7A62uC@s$aQxv+jetNu3n>J_0aLQ_$yOo} zn?R`sGMki3WDYvzZZek<(7E$0Ja@h$@dZgjbDwY)=2@UT62I%B4A8lYOXcDv>2sGh z#`v=TO1vRZc3D>EI&sl8^N0HDJ(?VI%tV%P`lJzrzX&dqg9n_Y?_4 z(Zwyv0>Rjz7SXgE*a{@Y;z@M#kn^h1LcwR9H6oNC5{e=c%~lzyeyvn$`5nYG=vOqX z1hUGIfE3F(fLS1{Fm@bHi4oxU$kmUP)Nd?2Pk zGlMRKbVgQ_>xKY>z+h4&dNf5q)CH5qWlZ^q@exwTz!J@rG>`3VQa!w|y-km3<_+{r zFPt~fJALr$_P*&CExQi%&j38KeP9Mfn@IzMBgQ%Lp#b?nMjiwFDfU0UV&o-&`YlgP zW22?x>rM!|AV}UMryF*E#}HC8Q^)g*=dT&Yy*zDsNk2H{QWr~*+Ucy6szycgwWdl_ zc0YoqQ^k!N8$c@cLDS(Ps2NqO9D%|RkR!IqMj9)nHsVKCvV<33@MXL7Y@(qAAr4C( zf7#9-?E%Va{mOUCWVF zjx&c8D2yOpHf>CGk{+7`s+|mB?k8ImTzj5N%=PR7+Bm>PL*o`KTaZ-eS2Hma4N9Cb zy(_9#KDMraertddf)+pG*MC!z823;-IV8=?+0UWKu;pJi>FOBes0Qb8rU6YD9HmFs z3{4Ee`%pW+Q3~`si#cAVc0_XV_2%n0kspxl&&-X+=nvIoQJ#$x@GQZ9QL~n@R(I{i z(?{RPF0|$aRvD~_#$BPRRQlp#QL0m*v3{N9l}6Lf^4w071>+V@u`LT9h_Q32OjtxL9;#9UmA- z(C@9}M(jLZudF{|t#iq}J=q16v@%U`7g%MiPl+q(S7El;I!_V;s+ztjT{r*RmWs!% zBNCV<}>+`R`#-3*fRp+)wo6Z)Xgr|Uie!N1WkVMx13R=5pvV3MP+dQ6TVHsD}8Ex;D?R749rs#E%YzTIKvIFU7<{ZCx6V?8)GhaPl!?sZ-mier4=Yr zYZneo4K{67WTFnTmoY;;jfIma{zoHK6B}lTGZ8e6I`(*L_43cS9wzEEKV*C@7Ukr4 zN$C?XLuyHwOqLy0t(x%<;X^ff(P=g^tPqc9audu)Z7R}De?<>i7xPIixn49XFmj-B zm}3GwKAa|AfzxQPYu(5tjS|u5{qZ#t7?IoLD+%vX8&4 zncJ!5$+U)rbXTpM{MG9uA;t&`iryzY6k;w8&{r$};rccNW=YK|6=wFU0_K}o!8nIC zE!I^*fCuFQ-s5<)rseS!6F^rcn>6DzENmU^Kzd&*D2Q1ade$_`$<Jb_jbARGa?21l(WznGY0kuz#Hx}5?H9lq3+<;z;{)Z_6t_~b?tv`|%!1|Z3I6O)g$tQ<1QQ_0^ zGgdfQV%s?1sCTfG-hIs0pKnr^glyYMq+ z5|eMh#*B{WAcH}gSJ{Bo{ROCS1LVU6FdSOzHn^2$`d50>3OsbYrQA-}z*{@dSlH>L zp1XC&#@o?H!)?JmsSeZ2gSjKVt~72X&6{+OlTDw0Nn)IgB5YwTiVyz{2b`Mk9PrPT-QHv?oS6tX>A zib+{&0AkTIvHj2w^GRC@Bd7T01zN1`J?jP7Aa6_!1JLyQzP2*2P3KCq1rt-P*JEJEbxv6VE85N)Sz!)|^OYpDK-0+Pn zx*Z=NMOH(sljh##$$LJ?~lUGy=oT%HYq5CfB$N*atcvi(YmHoXmsR*IE%l$ z%`9%d_>UC{%gV1FM$7+<0RSr>S0xiOc_HrgTbQXq(%Xyc>@M(v1>eQo;@ma%Znb5} z^slx?(Bb_#Q5QL;1Bb+l=(e($c|g3nf#@ct#7Zs0Tkcf!Ungli*1}kur3<3ATb9Q% z#2DflPAHo@SaCTIm;tRTpTtaFihcUlG-D|K%k>8)ukAmxYapYs`t|EpAcyA30Vntv zYUtyG8$uypD14nHodU(S) zp{Y%^R>MD}hNoj!PW&bL2wkSEE1`CsZaJ4CuQ#=Sa;7<_z2M~e8M!-?hlzzWEui5w6w6ZwVd zADfuw;e#_SaZLL6>;rgMoW|oV^i>6kf$JpopJo`VyBWZ=8jlfRM1_yyc86H2YL}an z{CZpBGof{5V$b=~$ZN7%WbO7FUn=)zVJ2yko$<-7;3Tlys ze2X=y0C-fe=im~m9~70|u$F&Uh-B>*0v~;M3WBWA_dg! znoyA~k@Wlr6(qa1=WJqW*-R>N7@n1a036Yc#p{Lho150MS!bW@N>_c!`iU{uI zxBi$Q^Wx*O_#XqO?&h~9v{+}8g2WnzeYi-|kc06UH|_u}d(ia=CBda$7?bYBHB9vI zkFu3}8b@S^tKzz>0l99|Ixp+&Qyr8IuUNmGSJ8~m!4G%mk0OObeAbNpYC^ngZAmnj zH%YdRowWC@(dY#%gA1EZ@-ojnE#gZ_qBF9mHkvhW3~M3F4V|4mx34E+i=-9dF>;@0M%Z0Q`2ar%ks zsNe19m6E!g;z$qLB@r{B-kROZ$Q*H5rBoJ=RdIT#>_O)>hDjH=tXiH1F5aN=%FWRc9C8vl)b?$Mt!C+7dlmd>@VRQ)8__V>SF6EMc zrP-ZhR$g8Is~dS1*C@CCrJW&EF8LK09(8|wlr!BhbB9y?*zl-p!D4mIPXOUbAnM}h z<307mn8}MWE{awQdB3jnIZ8W1J?P9Gc$dY?uBT4tbW}HAGV0*{zXM1Kf%Rq^@uU3S z(UQJqZG282dHuE9z|$=+uLIRfva5lAG^p|GD43hQ7ItRv>-)NXJ$VaoV$fjT=-9%; z^_bx=!u^riAkS!cAo+dxx}Di=%TQ)syPp`KL!8mW z)Nvnl!I>tjaMI?He_yX6pJ}=H6VY-Y?g`lD?zzlJxuTgOp8b<}M#S^0Z}w-DzbMNL zGFZ;=dPm%CgN+NgbWHYMDm(Wd&8~Bs{F&#zpRngdbj5XD1DANIr(|_HEj^ds<_%a? z{eORUEP78Evj&n1apR?B0rVjt10h}wYAh$t1A^5JM9+LiY=uQc-J81UO$MumYw>Cy ztgDM?v5>~l^085?IB~=LLYXouR8Y&pWZX;hmk(3ISMDvLC+9Jf0PVeY-E$&=KnpK9 z@BSi_Va6xEd_K^=<5XSJYgHd=Xs7CMpCy~>;QaIyULM?&qZRs4{^?C(5-6dZ;1f$<4 zAnRwrfY5g2s`_$XGVTp_-!{~hQ)*e=$3E?$xEP;9kL9A}Z~FDRJYG!7S{mNVW;PnG z8m^Kyf1sf@rpc-xjwUh*U$^lZ4lYz)4|Sh#J)jw-p;IF(3APxy-C)fqdK##d9Q(94 z-NooEdMp1-$06)HB4ED+nkYKCryIdVc%fH%_etF6 z^&eY9rsqd*fQ8s|w=ofXV?6~qPc?ddZtGoS@qCjf7q3U^b#udGvtZ39_kU^Cn$no} z%K+X;Dq6ll{pM28a{2P9w$Pd9VxaG-HT0mHT{F6s7IW)+_{}(S>pIem?s3!Xc2e~1 z@9FHGe*6m1%gfypnpUZqvXojBy)}?;A4U>`?Zqr%1X32kY+-5&8pc#|QsTA*FuM|VZG5CuV8I0C*{iYSBftlbP`yV0wT=tA?c2x44XwFQ z-HPF8xutWsg(nlgAJfSF@UbA+g8HMS9q~=L!@RGfk`f>yzMyDt;K2`G7&*r*l%e>H zI~%;m#&Dh`*I6|sub3I{pEo{4D($H18E*1kx*}|oCR+Vvb3l$n?G+s zF~G>ziw!H_)s!ZyHCg>aR5qC&I1J;$I3?pJX*D-1d{gR=mdv?r*&q?@;^lAx5h0tM z_w6?7GvgyMemg_nS3H9&q5GHmvCQ};>#X>|e09^DW0V>3YpTA7U`)(D0?*OP!yT38 z3*710SQno#uL(z!@JvxnOt%%O_d;9Z#;bcVvoor{OR?WD^r#x(6M!0yOK*#zcENej zAg+=d5Emy6h^vH>(a19Txi<>)_(S6Gv$87Pwt@RkD(Xx^My&pQSXyO(9-!#RQeuiU zI2eQ2(i6qhK@IEl19$$)y{7D_C$xwfCo&-SvRa@+y$a@E?Plm6`OrXDxi*j8H>>)m zv==p!HzDS(YULrT{FWzK^$Dk3hv^N&S_L4%v~X)saG)TNSPZhkvb_2W+2QDC42?0b zEYxRRLx@2=l8|{k7;T>ul=lHOgeL(Wo9l5+(h?=j!}lRYZ*yaFA^Jt#g2DYySk+C-x$z6| zEM)oEzCvRR1yX0)bwkOBlF`+VIe-&Ue}htZKvQ}gi3s49;S;wGdFK{G{9vn1Lu+C~ zr(U<>5T*z_Db;PV$NG)KZt>~oq~*x6{!<@?fX3|o3v%-_eDls5=4S!t$M1`xM3DLa zW@`)0fsC%Jx~&b!W zF6HA?Mc;Fp!Gu*`gDe-8By)R8LOSuKI3-l-XgHnL?JJkbMeNQHi|~-hg&2va!ZK3!x^CAd!!?7Wq)i{FlSMRJNMq>v`cX$VSc)3w z=S#0d1Zx^gf@It)^H&d&!&lZsM*8v*Oo=wHb_az%U{_C0(aXT)M&gTa4$R%;FF`<)_Ue)X77t` z1vl!nVuyFms!yIyeMx)$v-+9#nMKq4wjeZ*_z-@4y&BG4$s?2{F?5r|%oKjpn#Gw? zpvSu#3+TPW?uBVP{fOKBqF0d_c}CIZlXKKNPp47ZCVMX1-8Qo*^S60UZX;TLV7$MY zWa38ejo4r zI4$@HqIa#(A|$}>E?4#{C)KkGl#HzZx3t$fq1G?82;@Rkw$$~tAv!O%&0d)80Qtf) z?+G!$zX5F-1W%e+(czcet^Vi%$?4hkbND~%Vbg!Fxp>GI_zT{3qR2@gdrdVpy`;;J zTz-3V|09eXGZp*f$AYr-X}{WH%ZVU(XMHFMs5?+Z5J%d4W5-ZJ<9;bn^a;( zbJ3&HJHE7qZP|rG=R0H7u1sNfO{xB_>?_)zLLFA+E#O^JS+0?c365YHS&k@oI$V{( z3KZL?B)2RWa9T&slYuOa4unJGAoTO$Ov}&QFnmzphD-ecJUlYSKBf#G!1l4Xl!~Oa z6nA;Zz;Gmb909aaH-T-WCc^-3C-snb;5B;v-8ji;vs-mA?zeefmxcZgTsj z-%w-k(PMzIZX2R7bF_ie`Kq?498M;l_=4H7IWapz5^5ax^HHN67|m6ACt6NJ z4O^~?C06NIVTW*oJ+ya&2VgoX=m`m|f~2~DysDXyoJd|}Jje{8is@mn-3Euk!ifZ!NJr(ialx=U87D@CvG+vJilkM-!4)=?;OoS)0Kk4gBuTyv+{@r(Y^PZ8x^Bu9O zmnSjPyVQQm`igBvba8F&62TZ}3l@=O$O@-b+6q8whoySPrq_@w)L--5f3HdFhS{`= zEw53_+Vl!~mD=>%klp58>eI9`z{LJ6fQZ$ZOa?6zEDAGhT-?hHy#*k9`Ceo(JnVv0 zFL#$nnt?b|s>x(9DP{|je|tDLn>vWTBK)TGY=}KK+0WHws4$pZHQ6*aEj#4JDPVZy z={)|L54KljGF8hwUX3U-(#^#SWFP_wV!>OKfpK@q3AYnN#VY<&XR@z|3(>f`5dcdt zcklp-USY!BnZ$yG`&>gvQ!ydB%|AROHwL?GgbXceh|~S=IlrdCITB5MEg<~tWR~yZ zaPy%^a7Ij!c5~NkT3AFtmz9_XU@{{UMA<>}ccyUOKETm@$dXiNT40xF>MhRZA+k7) z4jphO8@6eY-FDMdTR?G5yZQ`5x`uAG6ahTh-Lq#xf?`F8)?33ie78q<~lUya&wf!>87zS=2cxEjz7fe!UlQof6A#KgZLKc4dxsBNh^8u2-RA z7f6H)>hkNy!n1KsEU;fwEYlD*_>r)2&nPo+DzHqREgQ?00TBNV{{XZccmD|heyVfe z{{9v7W3~S<@VTLmYti3QSH6_>y2@3fo?KY< z!RPf~>&Q` z#b?o-VF3zBPq=gkl1DGLSK}?7ywEfbXg;wh5-oLeh!U%dSv9<5?mX>wKx6zBvPW7- z6=}JlgUUH&7|82gX~(mc`bQScCmUI!n{hb10l+M<1sQd`a~)??`RjVR8Rf@x^N&mu+r24Pf-*#nH0> zjXRKy4~JT$?bV!*Ym=9N`}bU75{Pn^+V(=J$;Hg;9dI?P=_>SXi>j8o@+9XRYhIx6>j(cis{Hq^=g$3p37k2cja~jf-wOcP836Q7;}@@l zAE_Xo)b0YG3YllH=ZXW(+xZmvv~R|ETL5-#rr6kQ6u2J;X}%U`BuN(?Xs4|5-CW^U zype@3xHIr({*pds$zw1$D0yOfGY)4dDdj`~^qm^cB6L;dJ*$R)PvU-tY@S^D=J4;8 z-`%XB5kJR}qC1y^4*~2C2VU*{cBW+cS@#76cQnK<&)iRI)JC`Bff^?Lz(;oyeF+y%e@tYVnc&J;>KPihHXb11jsRg#()cnIj5A@R* zU6}LW*d#mrx#HkHr~_@pBM)p8?;^Lgb*{(eLjkNX#H#=}LyYXu)WX;6E(37nwi zrgcT@B?69cL&PG@kby`#vQoQA$4lq2?nYfx-9TNYZjJ7Q?mfL~y^DHpQ5mQP)Lk?Q z{Y8_DsmFR_C-lwrgY@b8j|}n+^9^?x?l%rF*y-~++Rf{!8a5T}roP_HoOu-LGiu-5R(h^j~n z;znM@;uA9vvk-H&^kXbM)-g6RHZ!&{b~^U#Kc9!;B0 zU?=QOA|)M8dRRe8Zb?3xVv%Z?x-Io%8sAyrf9#8|Uo3vvG)oA4=Bt9Qp7rB_>Qd-= z01*KE{ry~n1RaoZCD?}o070~12h{&{g@EK_;Gr;!6FMCBb8A$-BmuADczO>*7*Epx zKe162Pw&)9v(KwG71z%xBFc6>uU#1e3dMq0ffMjkj5E@(1rM{I!=`+5_QU7U$mK&3 z4_DjGx20s4P$0>R#cL5fiMLNBQ4s4uFr%2CE=}_DY!FC?Tpm~cpRgZU(r(a^+BY6M zR?t$8Rwn~+;mdv>|nDpD<^;8qe zNog-4EETyq$qFJ_t(VL?1g&4lw#XljzBzk;e)o2C@YzQvKYb1!on$STD5IUTSgE9+ zTl|2kzz@+`E<}I(y(o)qARwjr#+)p_BfQbUN0X56sYaP>WP0BP7zxRl(1J&E0hiKR zfGC#09{555c8opeWge@}ien-nK1P=(c~z%-|3pZ;;GLHgr}E9bl)NyH*< z+>)VBLA@?uC**yFpzAb;9vyMp$c&FPf*fMMQ7R+j=@6`R?9>u2csaw9O`Uf}tu+LZ zP+m0Ii>mSm+vAS0v8?&45;`SK!@&*N6_Lmn7DlLnUiUI%d3UhgBktg%CQHuLX=Z+IgRcgrNUU1oY4Hdfx0y{NkF%W3=J6vv0Aj%nDL?IHpvDn(;wzaeb+M;y=Uw0c(O(o;fk{lX7 z1l@^>rc7$)7cIksKNAj71$Xq()Y9ZqtG=mmfnWE0s(P{GaBYUeFbW;~_;L}9aV`F^ z(v0h#rq#+&T$BYxRftJ3$G0*^r4UcST)NOe0|zwFti?Z{Jj;5OJg99&_p8C_H6@`` zmaW<62ZIgf6=mD_smjm@SX>_x?+xuueLKa>&n+KxFC|e@W^8UIp{{dv*rDz>eT#pa zcg@9wHhL@lVt0#;%l$C0YMp2q#@P7^LZMk_w7Kj?cd8FW=+(D+SItBB8K(N;;e3hy z`lXm1Twx#S9oQkofxXxXA}3Hm1v6Bms^xTHoMo=-ZGwRx)o9G65GKY=KdKeXzBlyN z#y2*?jZ?9Kv9q)5(Yrl9G^OpeqMz<~LSR1}f$m{NRxA~AUpp2rR}_gcKb04tw-*tf z8#N2p)b8jnoBB9^rX46D@;s|c$pM+j#6)Bw)6zZCrU%HAVV1cbjnjnY&#ObS#sCK0 zp%RCL8Kar6%`R4_MQC+ye)kf2{SUV1j9(abi+-j;CX+Sw^qo%9OXo#6xbd<+G<;U8 zF)yRT*;|(zKU&^;KnEa2LVi>eTPi#F{LwxgQ(~~P?_g?WVZs}x)5P~E=8MH4SqLOR zM+pnoh%w8lA3I&lm3w)ATNL%+jarR4=OnV{9_g5N7<-DBE9s*tL4r7JX;Q8!w}4$C zOgNuZ5jGnT6X^yRkHx_}KjwJ}=_c?O_u$5@bRMjbZi3#uW1u{N4kjc)2VGV)(D`z^ z*kN8aJ!kTtz_ogTX{X*I8LLmqx z6M-5Gf>6Wu-9fyIG!0`_5uqeVd7!DlXfa~L%nr3)qYVZRD(7GK3}JC9`BB$N1IQ)O z`pPak!dBpsP&izVOJo0W?g2RZ6Foda>idLpl=QU4JJ{0Qbj^xEwCumOZuu5 zYXe4Jxe=biZ^Dv9f_X0oR1CAQA5UNwX8Cwe;lxA4zO)v#4ewFgyos)C!XaUIm6YIHpVJU@2t0m@EiljXi6q z$@cAdU^RVQyvHCf<3a}=%WhuqMP)b0Gf%BA5fm@I@yShrOnuPW%1Ch%r9J#!`asN2 z{XI1YH+U|#Hm4l^O3Wg{=u%af-t5gM8uPNHpFb_MW^sgWRuPD6LZmOtww9b4%(yj* zV8`~f`I|*CFS0Z$ha?{!P7>ADzhpwrMnmxKWtua-(ixrH8fZiwmSFQ*pDH^f@PVoM%+3kP9(j#8YxS^geh! zqy!;EfML2L7B3P_o5kx^g57S{VvIK;!fjp@>-ry<*eAMhRIU|fH(-ejm&mG&EQB> zGCZoYg^n6QXDwd3EVPlv+#u{i1y4C(G^O0iR<`Tj>m~)?KGoU%>J3`;>*1i)K+T|m z&s3v6O1s}6_4@qEM zEpXg zHJKL~#UxV&XJi;PXk;=GX*Wd;93k*f!75>TN;e3-WFTA>2E|uZflF5!kP1Zu5bBp< zF4m$9laGay?V=6oJrG3Uv2Yfwe`L$TV~HJkW9AV#9&2*trS~3?<*~->SMYN)^jK^^ zo##@fJ`hCVF<`-4Y9QH(=VRCx7#ns6$q`4jQ;nN3uO0|j7Kt>{8Jqaik*1l=EI^C{-)Ixo=W7K zRCc{Bl4^z9OZ{>M{dXSEcl{-?phqQDLg(&YED$QI+V-JRP4C}lko53{u<>I`MJ;Sj z6Gsl&<7y4ai*@2Q?yOj#6t43r`$m#SuFGT6(Q~0%VYROMYm#PH^)R|M6kt(|wl=H8 zE9GnT2qdMtnw6DWzrL=SrlU3K|ITV=A>WOi5Ah3`9mV1K-Lme0(fpKJ*!bpsB4a9o z{sH2t8aw2WLkBtJb!H-`^llHMxYk|)Yzh(T(~gMa*L~=>)Z}D?{|o;VZEMkS4a{FB z|9eN1L`D5w2Omfn>y37P&dNPHde5=)JH$am$cb#LholOM zgbm!KppGZ$l5lU*BlB~d&nIV0WNZE1PkyulC> zF^SKG8fDvp*Jl{{)VlnrzVlYI$>nPI1w87UdU+mUbIUvdp(M?9EOr{RCL2(a=-*e= z66WT-syeq@Q&Wp3#n~Kn3#*xv+|kA!Huzz)u#jNFFL<$_N7s#G86Eu@AyJy? z;N+zFxz5yl&KarEprN_lN0^dCr7x#A+nXNJYNb4Kdk6ja<{8GL1$n|YB4$6>tfbuh zJh2KJ7D`Iv+p-pwnDAa!O2Fp2WC4?F*cd|$*C4FHBz}wVk?0UoFQKtoNshFQ9MZ9| zP2Y4}Ra7YB!E2`|9gVbcmC%YS#VNB0x+M`BF^S9bM`d}Kk7NmrB_%mh9P^$W(Ofr( z&!3DB!(UgS4ltYYJ?WkZ(W!8+L_=(0aU}$qI6DCQQ!FZq(v|s~+6xd+XM6c6E zn~|SLfdmnL;DZa2z$^*2>E5t&DPdsFVDr|@^hcH2x!WC+Z@_!}&wZ(`0$erZ8(B9< z{dne7JSX3TgpT#cai7nrjXf0-qPko+bK)?AbTicxlTuC$GDAwCBr&sw_6&>3eWY~C zviV>$U(0umg{}hfLf1kabPvo4n&eT_qk+n}`zheX8@U2Fo_?*$h)j z>!)|3>9{RVd}1oJ)so?X5$~ok=9MDoBj0TtymD13 z%P7yY1lBJ%oKq@dyNwfc$U>jZGz3iODY5L$zX! zG`FN5fm#}b|C3IDLy`h$q%06vSiDGAmPxF)c(z#i zmPvqxV2p1_Dh3*$E!{Ii7hC>q%KH5SXd+kpa|0>4nHI+BvN!#(vdA{o ze>iH|$RW`S=PN5$D|mVg>xDngHSTPz11 z6?$8s9YLn9)4OMW-FFur>Kc}Lu^)62>BinYX-Zt~TK*#C;gsAD#%|0;)?_00(U9xo#pIiI4S7?h>*uxXo z)g@7LO@-t7VLpi4XNPVw6)})gM-vrql)co^Tss}r6T zo%1%v>GpWrJc8`trqEo}t>B#fbDjfMvsd~jHk1+wY-DzbCQ8ffYY7Y)A0Z)Hx0XCJ zL>(0S@~t~pft~Pms^=}&?{80okjhdNMpg@Kh&1i> z%6^`Pe$dxw3rNL;n7cHmC1v?UX)QZLzfO}*qNr0IZgY(6OKDt2thYwKSoxMofOU>V zw5TQ^k=iBA9L^Ax)OAtF9b;!`kb&XA3;Oc<=8hyOjTY~Ngyd7FQ763f@@u%R?(~!< z=|;Bex_ncfvV6C@^cHnzrEF0>BWCy8qQYx<+gN*QoC_1qsiL7(x?lxFEJ{2)va9xt zqg!jwS@|UE-L-MmR*7a3(|FI?koV+MyPa|#_&oeO)`w9p*$h&AF0rlJkF7C^c7DR)ipt){GIp&=NC){N)R%DdI2z<+WOkz3ar zuun4CD7lekGn!)Ot-3^6>PX%`=ZHOJzx2vwl=ZHrYe5;X?Sz-!<@=(p0}Q)^(=^>|42i$UHyNt& z#-`7A!4&2GorO7~tC^V&;W4?F(H=>!tIIZUM+VV4+B{{O(Ul7)<|N$BVdLO*XT6Mt z1WWj~l}~4>c+Z{q{YfwOVk#4^o5ZWa>+=cpBUE`NG0yL8&1{=E)Z=FAcXc6?2!#xV zWQ9DmR9!b6*QZojHb@XM%m@4VK&?UHwiM2>>CjkRvw( zmKEfsrR#?JT@HA(z3wg&)~r^GiR3n`inr+Uq0&=ku{azSjSydT`<9hFIvvQD+NLWG zx>ocQ{P=R--w26wY5PiELi9%Z%*2KSe!5!@{o|~@5m}HP;qy`h?3KoV4!jx$0mPTY z)uW)-FEbtPl@wJL3#!tL^KFp^C`RU(rS{op(onO`dMyTvw9#rtBwqFs9gM8Z#~hGyx&3NA^>V}Q9}7)}?!nE^+$V1j zqLrv?kX)(T;G^Nx-?Lkw0ReCveB&(HQ3F|ip)25%bUxJKZlYUzl}LPQmRAbNAN9Qs zr(+XECz`R<-xPLtS^f-1=B7nNQ3X_tx8cLt#$_jNZLs1Kfc@y%qj&O%d%|~GMAln$ zP-L4IaT;6ol{q-|pPZ&44r`We_Kd(!o)N>g4qhCWsYSb(fU*T0w?-a?0YY%5h#D{s zC;VX6^20jy-$6zVbAKsG`EKvJ9FI~^DqqX8%?R}Qll*T18~e`n7=`!NUC=zOd}7Vr zIL#rClkVi?^l-gcd!44%X6@nCM&iWss$!K--!+(ef-d}AvyW$pt^nj>|;*%lXkdSPu`m}oX9gPTgw^b-M4J0Z_>8Q zXINv-JoP4aQZC9+$XD2#xN`OE2#-&3TrW`uNUtwKNqPg`2`rVWD@G$ln7AK1h%@!T|Oy zpPjo+q6To_rR}G5ot~?pBX57!NMjFw^Z@U8Rl7ndA(Rr_v#}#Jsg{0uL(cPmu1;gJ zvg{-sFjj!Eg)W8Q6Z*&g_>jqAq8ZGPz{Bj^RZQY5O|ix|=6y1MxK92eW#URn1_1Bq5;lg9HS*}6`5cgwb?`V*^Ea7qc-N`%#Tq{vKnr891sX2a~~_c6~|hNJG?*wRbri znX1_4QCJvKW`b#r%|KC>f;rT81)|C72J}0mOrCFG^&yG!#7t-0!YZNpeVB@U@ z%hYPOR`o<_Co;x;9b6V0;g#%JpJOi<21J7^C$^usUw$-m!1Ecqn5!Itb)u46tUQb} z98z5r>OVz$cR43NJ!R%7KV>wwisQ1Q8ywfea$puaMpsfV*Ir8K8&EYoTzIy^bytax zm4qEH)7@PpnJ93OgM5rfHli-wr(x9i@9}T^#l#VoYM@F+f@loSvX4TNrm{2Cg5$fq_me zlWPyz81FPYWg^kg6VQ^V@|6^Og8m9#-zYZkpl^P0hW$h6Cdb_RpC810v#qsuv|k`L z&d1$!$Os)>pq>~^SBKkyUJ}?-!Zy2_Bx=K@do-*taa?YVBKVsRv)TH3sb{_Z00+~j zZ1G92t2C|iYq5jNvWefS6c=f<4=Ca>?GPct&kHHW zxp@5JoNEu~7V$IevHNCeoop<+d7V+T{`>$DE^~=dO6#1V9(PrL+%6v9Nit5wBT*o~1)mVVx`1t>&`~5D$vKCNP}`b;i<~_c0CdNjgKoI!Yo1q3%nAEP;Z0dC5c*dydlQY zbJ=fT+SlIIGd71Yb8vRF#ZQln9($wGGy4jQwiz3<0Zx7=U4H)m1U7bFnp!`*uY;@h zpIxs94nVX{vP=?g6LS92m4%^^SprZeC@fFY_;N|W)6XXkRa6{m=1glW4zzV~lg^&0 z#VYmP*RjDA1bcmV{Zv`|gi}a!Xi?<~`#DyvnxpG8#``Sf8_TDddzi;{)9@&S>ox3MgQO1d5s5 zCyAgjlw9?bl1NJLr8kqi()S(b$;pWhV(?e_di?YJhu)V~*%GeKk`I#EI4eaW{V{H* z(I(HC?lwh;vx%fAp2$JC9hvBo&|3z~m-P*vY7;XxUIehEF z#Efs;y`$5uvh@}1(?jpJ;iE}9boi7%q?G|*{vh3*J+YDRQTK&u8P=>%vk^4RO8w`AhF93^8K*R9uh5Tte7R?d~mJj<9 zypY2P7v#`&K%Y-AvV0rbYZ<}7Z6W0Ieo46JA{y$MhFS-Rte*vhxJ-L#e#I6NbdN`O zO9MQA&s@<)i}DsM*r-WpisBZ7r$;zvS|Ki{cncm;GYmcVZ=lYw65%d;7o0TlYDujxYbXDGkUIy%TKu~ zw~Rft<~E;)u`(d8NMIsb5ha3&qsDJdX@kObBcP2V$l`|%1nh9Y@?DE7wC@FB*!+>l zIKh;XC@KUE_}g$l0Ow4SIi!oh&PQDGASi}#In(A4c!6pO>Gh4Bqi%OPIglkjYQlZ2 zy?^l5!i5ItHfiZ!Khq_>=F81J)LJ`Jp3UHT(>$j)QMwIRPX(d#{9!%IgKkj=KV6v@}dOeCXMJzT9d$NBi0J0buWi&D6m^@xm+e!D->@>Booui%~eZ9 zg0pG~bw;UD1CPJcS?AciShKXEz>Rb;V2aWk>P2fs7X)Yt9N&>O9a3lDt>zn0k`y7- z()>83;i%^22uJ_!+W%xIpES({g1yl-FcoS0Wph0@xfQ;xbzZ_t_POW!{S9tv|MuzT z9ii#)V~ohUigPV>fKlW@G@-mNXnb3pz?es9Diy~bZcDp|&zFK1~UkgWdkPq*arlO>3~Tn zM>=v(T5}xwf#diwCXke?C1GTc*$BHH1s+M@NEDT&_hPCdh5=TjzyNDjazi_4 z>pIWrM%yqf5#?S^Ig|y4C(_?v9)EZx*tAMAyDf)T>jaC|XU=J7A!LCO4 zZkAb+#4*y7u%T)ANt%>tN(g8b+gDz>vJwX_>x{Ra0V2jhW*luLyO>v%@={%of1M)9 z41YNHOB-SnH`FPyRPf9%STZdG#g7qDw(R9eOd{2 zwYjcgl;OJJgQTFLTJ3~w%2Anbia+@|DFCD(1=&bJN>TMu)XVnhQd)G&x{Dno-GR!x zY3PHf>=Bu<)`giJWef2dB5alQ3**l6afiEqxbVi{!SV<3FU!h}tTECPU`%!c$rifp za<@-CM%DMA^1iIAtmAnG&QH!JfDyHb9p%dC@hQxeq!y~BdqWf=AkvtVzGLbblBcn3o z#4;098;-SUV>>S%IpDMD(Iu!$V3d1xdGS=36o*txGC5Kaoqy zo;SZxSzHx7xBccSDd$lc2mkNw3fU&bShgCkPM~F{J2#h~n+5u;Wh-2UG1`6SH~l{^ zQ&f`^$2Z`xJ)Sj=@Y(*jo*m`Hq^}7`{h!d@I^5XJHXuDrh*oOaYHn5Wm%x^aY^__m zRh?g^prm2N(Wc-ZG&+ldJ~umsZbp?ndxNc*!Yva+W^L;fVl0}PO%{VG!f7_4jtzB@pL06wHfJ~( ziZP%>9c(9Jtz=9`+B4Nql*?1OgjNV%L45rhjxBT&V;)ntJ3o(nx2dC;yNii24#9Sm zk0>82<0yC%oK@6m)A2BbYgb*Z<5j{Hgc9YfP=-g|HW$VSX?i5-Sa_L&s>?bpn4~r^ zCtU*Xlcc~SwSi?x3;ahEPdWr%_gMpA!oVpI;%U5&|L`=PY8lQ%5Cm~&WxgTiJES<= zC(ws5oN|*}Ge;0&X>HE6F)m=Nirh^pru4~is8({q4gA0RqxGnBNB~!CL5pJGu7bhScr^fBTXb5FT z0cUH-?yj2O!wJKqw0IMFnO1%-e(>9TUi0ud&zZfgnH`op&h@?U6N$8h{+3@@{P>=< zX@uPAF8ZI)0jFVJGTX4$sAF@+W477h8hx?;e;TK6JTo-1a2@f!UzK7o%Oj+EXSyyL z)s2`nw()rpEm}=kbi!pf8ItQ($70US5EdURvJqfHXrX#AUT)tpReEX?#Y2AGMMtOJ*hg?diW!%bV^@7Z0KYXaw zTwZB#EGL+i04BDnORb%zv7bv_TjzKf#c_Zw>&&Cg^K7%uDTe8$kcXUiM@XG+lz7l) zJKRsiQpA(7QGM79*3cU9@-1gUVzgCd>i&W@qSM+2xy*Vf$cn)ES}U0pRE1aUh(PLS zJr(D+#VTG=LIpDs=MXEVZDu3J#@d3nzXAruF4@Rt;h z>!hXak=;h~Ejj-+n&6|OK9*LLRh0}d)hh^Ms*}LmBf5v6;VPE?&??GXbbuRd}N0)xv?`2 zF{puoTA6&UU(xO6&kqN9FHtExrV&G&lCdIx`SOSByFbhd^SE17O@EH0+ui~{)o8=I zN->|NRA75{&E&IZl|M?;!XzoGrie{qC?dnxZy(!26+G?wuI*bv2B-5DLNcL22&~_; zruG^K19ONLC9;m9wWqUQx4mkAWQsTi)#&Y?xkWz_DIv@tDybL|F_E?`yH(l|&}i#e z0jwM|*R_N)M!0uNV}@ZMYnfBTR#GR6+AHV%@!59SHSI(LRo3Et*_7ktRJ-$1=Rajb zy%PVY0M!_c(mD@Cp4SxnTGsj=)wPe(Aj{n=QsqP?=3o^nG5u7yyr~L0xK(sHi{k#e zYdWL6I4uW;pi&y9Wx2i$UuLa=wjBB3Yncl;RL@}GzwIh9reF7S608?7b?KR8pI=vz z|4gIWc@k{P zU*s`o7DxCj?j6PH8&!}-%s9jRP?F3Gy1$$vQQUUYr~7_CUq2g8p_u#fXID_5sapBZ z86Nzoxvmb8Xi8Y5?Fu=j zTcDleyfR7UvW*B`XD>23R+tQHV*~nirkhpg`9h{;j9e*ffdF3Cu6g=_C5}_8n|4h> z)PLurMRqe*GW7#Ca5lw+bg-;cUt1vb3X{Swg{Iysup)p=SYWOf{Z8kaGS0X5>Zx5o zdM@ac(+lm@)@2jRGKCH`tDL!O{r^-`We7#(S(}lOy;tdEvm8n!F!RmA0mzWn(?0Ok zZ0fw=Md9%~Q|9N$v%P zE<-pRQ)SNFZ8@AP`&0ei*E*MZ=>VF_k9%!;!T&!qEC`P!9y838CH!?E z1&{YY$IV%MlZ_?G8wiDb-{<4U5H0p0eE52TQo&$$iPU(Gr zh};%CPC$7>~bUF{+vOWz~j(wU1gX)q`og_6Zh6B;_@y`~?0%KFDNZWPRf}#rdMmTCRM) z`Y7fXqnimG;IX65@?!5{YN?>M>{u2@ah^zBHED7eVi_0@>8FjMh^db;#E{L1oZ`#q zx%Fm-ad_1P?v@{&jo+7?5)Yv zFF|T`?Ht&=_9*JoA^$m_ljr2d``Ay$ZS+ zhCjv_{lQg&Qere_F z!s1LT?Y8jznCDhn@qcv4J)4?f5&`e*QGNcH8*_{mx2=HK$i}7@hBZR*e@Un3O36V( zZ4$`6;z$P~X)8I6t z%%;|*EUGn@2#NhLj1Z>nLx3cP36-Gfp4KgFrRnelgSnEF5Sj=hZd*Df)@pT5I0K69 z_p%`C7OTRz)W;ILf#7HANcXywNjA^j#9K@~tCQWqIr89&cW;Uw79;35BM{3jcGenj z6`I|X@U`Im-QU8XX*f6-AT5dAjhtoFJen{@XT2M#bv#5JDWvl$nl!MR^$+2vWzEt} zZR#kSZcdL4!fH0)+~Dz8Umw*6;sj zM(g!1jn2@uyTmd_od(%hb+=n9u)^Hy-e_&@n-A6QG_FHDQlaZ^M6dFrnEKi?`GPCT z;-t4}jegY7w3T32$#P6(xlwOBVSg{-{Ap9&=wv~j!Cm*j(RGdI`!~@|gSU~pJYb+E z(mON^o;|e4vi>#gLT3RMJ&&Fic+<$X1&!pL<{<2N1&RMqHsLRG8a5cM1ZOvmUdS?U z70}ckG`V4PI_uLf1jj&HvyT1aLPMz_Ug4Uwq~mdDc*LM_1076D?AT4g=VQN&Vx(xi zECa6;>g-kU1_nakqRRgC`Le((a+vpfl6%Q{$EPqR#b?$f2EG&R|0b|^jlZ`1^jGiO zX=IWic<@yZM=PxK77SKoBly0A2NdZ(rNxj>OE4gXu97M;nNC;GsMS)DP$(2DG#cP0 zanw9s5bhhDd9k$fj0e0s>F>f=>H0Ilmb;zZ2^dHiguuNNbo+2a2i+?4Ii%>&kt92I zOw|9;VKp$W>#O_bD6R66>V31rG|I%hom3MQ$yPDCYm>98Bk)T|{cdIs6>ZBsARV$>= zDuJIwrP56N#01BPU_7QHg8Ul8Be%>V7pW`jr!b(4 zIv$Lga&JXo36)1sbZU+;aY-uF3PnwgvbKHZ+Pc=(2~%G1oMlZ9ZI4#A>cDMk!B=%n zy6QZOFQ%VcUO2w@rUF(B{Gbi&&hEQr=s{79nmV)?-8E>YjACHdHm*1FNc@3tH_y1^ z(58O5N7s}MK5+A{^hC0Z$eekbOW?g&g5I-&0g-tgOd=rEwIW5-7Jlm9c0R~*5 zH6wt6^xln zn~o@2k=+#`w5n+u3h+_j!|Wkc*drzsrY&rJ*eM`gCL` zgnf|fiF63jl|-7YO{DAnEj-R7dQ}H5`qD=$(VED zY}#L~#`#(}Ef}1T*Pu(mTDLMj|CNK2`g;|ys-D?hbt}s7SBcC=XoR;q{M^i23lGBY zf@fct<~wz5-qL&t<6#4*qU|%eK8weejS`lw=B<$Jrr`C?BXq&C(B~uN9Q26fYU7&8 zDhSe!smp9YHTr5Xo@5y~Fx(mEt)l7(E-;HT%-O5dtYujU&zzU@?YKq)u|o^zV8xB- zx{;wDF-(PdgblOJZRy~lT3iE`vH7X-`TW-xNh~8W7?WfjpiM7Rn`|QH*5+@nZfb6{4gx^aFDF|m!Wx%7+q)had` z+W^P4I!nFsb%VB!Iifd|RLzOujV+CoTjP{vLO53_ZGNElc3LOmx5vfMn1h+`?S92GMSUL1Q2h?>lH|4zem`5$*# zC{!J8eP9j+`M93B@O^tz|B%98@KI)#wk>m-DM{M}5={=_#ak{yK-8u3@2q_2gB|ZY zpFE(YL6~H9{Q9!=eQ-??<_4FY*YUc!9}6WaTZbx*Mj`?7+?q!RYBl2ro|tzr7Z5@| zLI~NqLDU_comty8$y{1-Y+D9s^)A{ua{BxWa)c4%Xwz_-hID?1r(oI|2z4WLa z|CQTUD)durnP;ZsJFNK=eO$1!+kCrsyeqz8|MQe(k+~e1Ga&b&umB???vtz(;_=G1 ztAX$=mnU}X@st{)-YO~&H|ElrO0R#HtS>4%y_RK`(P9H}bW+*lt-z}~H!+q@B?j!0 z+QGnp5V%o@GE7Dh^1Em{$;;HFD#S&agjj=C=vsoVu>x;;ew3!bA}$tllbgJU-_b>D zHN03R++Y|uZeReee^P9>`*n%8hxLBJ1%Yn83q%5{8imOz2}7vH0aS<~@zlcuI8Q?T2dohKz4rFfZowQ3W2Y7cWUSLY=Si zdVKqt)&Ej3>|q+v(!6AKWsOR1+~>~x&dsNcvK~IGf&A3xx#kS_(#9{+wc(ie{lD<} z_l)Op453z%3rrP~iA_SGSQ5#y>tHxQietNRl57@WD2x379)oqxbdPFab|@jdE5oIVH#Ozb(z5dEdTS2z zeyMWe4wbRn_W2F6u12RqfJIr1l$W5ebTZm#h$`D2l zF*JKXXc*EU(lr;Iq#F}zdTv;hB3>{2lx0QigNN#hJ+;6Mq|~p`#p&9H!0FJ+iqZvU2biP|}}&!6md60IAWZuIseul1#8@aYYyBNfjB_l5cX!2|DCGdj$o zAoKsJ#Ch!hw_@I5ibP}{Mr|B-6ZT6;Q3`Cxcj%%bh0kjT&=!uoKZvRvp~< zgwiVO_%a{wBTJ0V?sT8ksaxBZp22wOBf|W&M5f=2-(Oi8xTsfav<<$^b%a|f3H_K4^u-0Ge8)J(kP|6QEzm!(#VhQuvJ{b zi+{+ocQ(v)L2*fuLHyx#KVp<;bRg`t}HjP~38nRpyttc~NdyPILD&~)akhAy%T0_nP zImIyQw6qw4nY1BaF^W-*Fp4e9fIR}=cU|JqfPP%Rs<*~udvg!hkMf>o-J@Mm`pDRV z$QKTE&I;OmFI%_LaVvkIP1&yA#_Oj#J-R!zdhsb^LqpqKsphu(?PMIc!#hLj$zNB> zIg?G?SM)SS$UK05Qc0Ap0?C1`=RL%m6kB#6qsSYsdneNn(~K?FR`n>L8VO=5F`z@+ zcCdG~_|CsfICdD+BtADzC}`KIO1xksI)v}%fyVQoeZSSFzn7`&`9a{3R-ZSM+^>>C z#gQ8ZK0$9RwflF-)b@>zk%d;H6)M7z=0 z?rUDsJ>Za~{`|30>j(}`CUg;H8Ls?ttv+Nn&oM#!7oU{^N|1*lWFx!dygZUVrhVz3 zAtaN3$3x_I57f#({JbMmENKoTESI892cj`8pfFlI&Bg6$D}`P zVcfc=fgQw``Tti|%-`&snVOOJ_wG7!Brs`y^yT>vg^YiE>dJQ=OT44BT3tPQLk0P* zU+iDqNzx&*c;gQjcTGcf#Y&{Jg3n+p1R#pzN1!-vo?6`=?a6IypTnC~dL&0Fc z+$!X*?=RBF|K9ov!S_Us#(cXJ-PqsOT5XoWKD6L8WT@YwXQRymKk_}jwbHSWp&6Z) zxZ4qRT{lcaY}J_h1(U7bY>v!#w%crjwPP&F61TF{QExRHZQV_$z~`lYIKy+KbUK(cW&E3(Qrei{A;G56Vrp|?`fsd^R$Dxh~NIv5faqq zx-(Src0?SfW-Je;7Dmb(s;QV5S?HCuk|YQopUK)-`}MC_%(sWX=ckMK3qxJ5acLoH z%jQOQ9u?@1)~Hlx|Cw|89P%h3*JHt{+<*kDRV$&q^Sx4-TV11W-D(t}>He!> zPwH7QEDPnua~FsEtE9+>!guC~W4!9AEbiR+aNt=7MApR^ z1OuDBCvurM&}J2$U-MkAIe)qNlZDOIe5U1@Z$YuVxaqN~E__%E$y zz-kGI9f14!RoSNLb-NCPZi$XNWWsz>bX@*IBRx^TtRg<)DDGvybq}i*j7vC_XJM!% zz6!6lCEG-kW$Lq{RN(GWuww$JSN_s1$xQX}(H~8)pCf#a&rr@mL0>O)6fa*oHuBc; zLcIRMqL9MGG#@Kj#?m2@D+vbv2mbLr#&|3{Q%8cY4GJy1W3u<29#f77*l$(AXYBGD z{TiGHg&~#=L1VRKH!n?t2l9gh#_Z4j1BXkfO)HGxsWb;wJ{l5O7C2O6*Po8^gR>&WF34Y1RyShG1- zOs9LybzC;yt4H6$Y})Lqf**+WZjPX^ts5^W_DS^gaJbT; z7CKHCh_RD=4J@(6K)62tsM76l*$nDKUgn@6L#Gc|l&ZS)BQ8lXPN@+Nl{>b`=4(1e zk?>xiHQ2+6XZE{_t=hPH>0*h&_oh-_9FtR`hhB$`IMNLD62c|EnR#|gZtEbxqVf;vCWIT0sb9fdOqd9+;>L4TUN`JiH%;D z;rfg!t(t}u3DQnA4No_D;oD<50 z^8r}vyi@5|m5EkB!}kt| zF-~}@=7+Udg=er9D~-@{R&UJ$)$DF;n1ZE>aaQ@ozDUG%ceSa^HW)3X z52+z=*_Y#XJsJ$Ia;XkU=Mg6zg@}`ObhF!NnCnURj6nnOjxYgwX4BA6`(?R#Z)~&- zBw+g|=*?=L__FbzJbi1qH(;5Tjoe&bJeZAh{aE8E;02w&$rT6$hjTC^wE;%aK6)ab zsOFjOOj4K}qugm-ph`X~UAK@JSlV+(BHG)iE{pk=@1q|2SjUHP;iP)Qa&hwBe2XKp zehFSnQFY0DUEN-HS5wHNc=Y$uusbca&uq#hkw@=G~>C&iR!lnS|# zsfpbAD=L>|*Or95c#yW|rBh;|MRqEBMdSAm_KwE08w(Hs}43#VEYP*&1%|Y}@=~Bn(o|LEL7gv8lUgzux|?Br zNhu=)c8)|8u#jp-H!fXVbY9$gyt0)`0Hfp_qAC>k?dn#zIy=n;Di&fQ#;?Ei|0&YT<8TqS9qK$V;x9kBKX?cmwf7(AXp7{zf@jT$Haq3wxL}Yx z)h|?I$K(qzr^+HC8YSn!3sO8jk4b{qRMKZIX63!U-ZWI)5-KtXH|`g2V50JAW5oo` zN%wK1$sO4K=J+s|LYY;VATCOuH$fJ8D z&Gs~Y#^2-*atC>N)x!g+v_$dH4R10~Q`fg4v09t!HDV5N$MQmWdKAkUbmwR~eEKqC zFj||okVTTR+RZz2o&9s`lQT~d_DO>MdBRGZb*yf@AnB4s!m>Vt_lEz!|E>(`FfkGI zkjPAFSe{if&pHm0?mn5s%Po+UD0TLxAjaVFAh})PbW9IINTo5S6dOxv;h=;DQb>8} z*0M*|$_A5OCt}YM4_qR2$T(y>Cz>B`K2;@R&&{fX11%_1SYjs9l~MS#j;RxEc#+|+ zN$0+DoOmyFqFsY*=7ev~)!W@iQYVux1wMG7!2=Jx;E2ucbcnDYd_J#;u$n{*?J9QW z<-Rjh;(YV_O$p~|=>>^!Zf-bXG8jw=huv!1{~*uHBt`ueY|^HCH4dgs{ot}uP~lL?hRHA}VHJb^dH-k!vH z);XFa<)1@MnNVJf9q0xK*7rOC^Rdfw$r$D7xcPjCP1agzaxziQN^MCA&qVIDU_vf< z=e&Yh`sAVKq2(3di+An7kzIeOX%HCh>dOn)m6~*XbJXs83fUr#?uoQwV%oaJU`%5i zSmU~O&5Udq1Vba{?YvGS3slm)JD-BBFZX!(b8Vk_l>-l()n>b0oUc(}`l7vL(W(8S z12U*!6vZ>hiX<**-Ewx>6@L*w@)mmRJfg)p!QDb6Ckv-DDh$M0KAC~9zNvpbPO0c0wh)w0R3QEa3M$qa#Dqo>6jy=I{x73l^rN%z5R=~YOSZh;9& z4bm1CFVYw>M-E2dZElQ1HMU?J#`#*0W8^p(Vb}ExT{qOnvTR8dW!*F_htSkAK?F>~ zBk>W|cwY~XSf4^{G_96(pRxxJR+kkS{QUy@pk^B~O_b48*09&z@h5weiAI&ynk!W| zI@{)Mc7aHab+E|#TuQT{^r0k0U+s*~yNaU>{<{P{^q^5i|2!ptMvkIe+HL4{bJGY0 zPM~vOh=(R2Uk`H=i7Q0WsESMHp6pJ<7*E4Wp z6@t2+HD7MCNRQ&7QmYgSxzS`YijPjGwL2U(lfj_VC}pWJFv+(}3#te^&@^?q({2ljrdtj|sumQD8fL-J zwU}`$N`cGFL_!@nJ6E-5lQ8yA%dBl3hE$xQv!(<@Ga!Zs*elH)rwKFDZK0;M9~K&CQ(sn~tfmNarExub3z2N}xC z%ZRW(YK&d5p;46Kh9Mn%Yz*p@5);c;L8DPKyEbEJbenkv1jU&w>+7^T5|0`V*v(M# zuBoN%`TAZ3OYzWR6;sRm{iJS6=O8FMled94azgB zRY4mYt6e5V(abWo3dW35l5S=aV%bt!NxX#EF!fdmU1-Mokd1Qi8jV`1(#xcBm0GPe zT5UFqL8n#9Wiq|aC>qtM4GoxrnPa6E3V}D-F#wn#ga}-4-BWSbja)kP9)Cx#$G5X^ zYUG2WM~D_TKB7T2X@7pIWMFiA<0a@ye!Qv0uzEcsT^NWIoadKv=Aq^r>+0tFb=Bvi zM?b#F<=44`(Plrair`Ls!bPD7QAKgIfEs<VkoD4` z9LK#;KAh|jNe?O2br4p>lU*?bbE%=?A8A>0sRMI9(e9FZoR!RaaV!75N~$iA-vvQp z5r00mpGrWx3VIthButAdZW$4U4 z9`WR58^u0xTvD_SR*JrrGYu-mbT3q{u7%1YtaYD1#DCf2JfrCoY8-A@HDZ_`C3Q%e zkkwm{Fdk)!Q%VTnB{|4eijGJ`#6$uu&phfd5>sF>0<8=xp$8)jo}|tKvOLFRPp?xp z<03Ow46)t=X5YUreEzf`f9dyjFR=6^*b?kJBaN=B3#S&};-M{mW+ccg$`%W-0QFda z1*`dgE=ff*oj}HUMhd+W9|}&JY)2s`2Wu>v>iu?E-r>g4Rgu7BGVWX1zRnA+(?&B6 zM;<~$M)xQz|9kXQulO_x$__2d{_}lh;f(IiCA@k^7t3#$M2uO zylDQ#D)J(LGQ3aB`UX3~+nj}XpEE}u*6$&8`Ys~$=E(_v1HE+6&fq9UruRk7HM)ld z7XeJWI=U-Mdzj%Xt;8Lh#>0pIKF3gn)hGs$wCcLJ3?j&spwEA*@9BBr$=98E@EG%P z2K&@@U|V67iVOiPXfV$$nFs!=Xt zDj~$LF7EoAVechmp?NQ7oC$xU{8AR(tQ~irWv)wU;Y?CMt-aC3_IGMK`C;b+qe`v( zJC*#{78E+u?>jHgtsO$-5W%!e5uXpgYoBja67=yno`pX8^;+y=$951xuw&j81b*ZZ zwV`c6uoKI+FId)aXfP^$>JUVOnO$mbst#)!B))F}U(okx;wZ;% zy>n($mjCrbQoHD?b@znMqNxs^{c?L=kuM(R6YCGB9Y7#x{z{W9DbjD@I-O7rCMPeK z&r5bOv?KgHwY;eOU}tQT9t6Ayc7S%!pyow;CGm2Fv_v`)BIM~H?O)p{Rtbm5WN$+n zfhaa`G@dfbS50@613!^Y5Nn0;X$tbXs?ohO0t@Yo#^i|Ngg77~p2(6h*=5Jw@$1HC z8B|7{FWpREfA9;fmY08omzPN3s{OZuC`psz#tK94a$OJmq1t(x`&5}3`9^^<6k0Fj? ziF~TshKHDP!5O2J5bp}I-1i7uPfaTr{QZyaOuI-vnLj0`3E} zx(Fa?ekka7?~_oJ&B^N9M`ZAV{bU;hnvBbNvGxJxIy z_<$`$Y{Gjg%yC5-s{59t1XKllM%ML@uH zEbaXzUQ5++)ZFF)+ywLunl0`5_=-v#OIBaM`%x}ItnNt=Rr4mAFz#Y@g8#cpn!|o= z;2aq5F)$PM#q9pzM36tjrOTf(!z9$#wP_!MK`{@`Q?z>^cp3K{g=}3LaN{ETm;LsX z_U!B;VS_VANoZiVYeKl?otIhiv4ShUjYx^!Gsc5)2E)un&5AcD2 z2dr6tgH>>wUC8(%A9zbBOVYZwz62s`$Ik91B;i(^f>`yhYR1<8n$<8V{r@BAy-Voz z2c>EPVXMMS_Vl`0%Me8wR_Z@w&k*4+K%Ca2go&~5{-$>Ad zjgN7c2b8TZcUJpD+IB$O`hsqO!t4fh>&pcvR;B^;tuLsJ+j+pCaDBP61{VD((72)k zRoH+E%<8)95|L+F5~U*~v^J*TFAK@)(DOs&Z3I)u(#=YPT`uT&xGQ^D`k1XK?`h+_ zq}0Spsk+b&=$*v@XD#O=`RUqhhlptQH7W(k^F4JW%fG)(qK`g&{M*I(ing)qi^8F4 zrzhDu*Y){Pa9`E1wBCt=NXQ0eIE||Jw(0^mhIYO!P!2sd=k>v0AIX-$s~=l&8bYPr z5yRd3xdMkk8`G=H#c*Q%^kOY-3l~9TUFnqcY)5)IoasHqFcpBL_DQ;OlGEEtE zIr?Csp+S7WAal5{oZ23_7c;HQLpEKg4X2y97Cv3A-|^wCho=egd{=8QOX0S*7Qe40 zG!`aNP$Y6=&f`>CoXzzPUu&THppebctn)Q*rdp=F#&}dzy%^Qdtu>u7?Gc;+y4p9~ zioF7uSe+>$ZE+ZS4L)89&U$`52@(8R2>oQ{sk=1Ia&Q$ph?4cSED&VKWC*HdRAVse z>H`snjzA>9qi6YbcFXRYj83cD+8LSpsZQ zS?rj7oVhABveL{@P}95C_t5l~vTmDh-B>Z1nfGeT>-C=FN%^e{r9^qviddqvxDJ{$ z;+|DuwQQT{(9_!DvR-y<1R|ZCV%*hng?0G{1)ObOU_4G#O&M3TZC2pZJFOlK25&;W{2Fq4+0Glu)q% zM69Z%7{XA+4q8;{k5Gv9$;~-cvLP^|Vo}h;v6of2$MOEU+fhKNR}^KYBy#oo{jx0H zRysmp;jDHTYgBLo#-tb!r;>$fNm(ssD55GDD6uIs?L~Zl8@C+_q2N3d1rZlDTJ0dY zzlcjEdcDqQF&mX?7rH9vfhVD~6$7eJk4j+%M~>ydbsre!X%cx*RwO|%8@DctI>I=t zZUiCmY+IFqO=epVP;1Nst{t9)gH5>`OC8I+swrjSAYW50gYn+dY}K32u(?CBd*Agr z7};j)f?g^vNR-5GwN4$d&&$Cow&!bo=VrK9#Q7?y6+86C%tMc^MG}lI0!_9M`m5`d zcp2Q^TYQzK#T_klA1T=Iq}nFe9${x8M@x-s_@-5yU_oJLfkpZn)whpN>ru&KP?+No z#A!fQcL%h=eB5T3R+@VPkC^;^aZeo!B^V3hQ~df9VzHDaqoOn?_SqM6YE&$uK>s*$h*Wuhc2%RD{Iq0}8v44g?$<8kYd z$fpW3j^oK`PPs0$vT!-Py9(oc8|sP;uuHUinNd5)C`!vPAfx8bqzDTp#Wp5EYrBzUbfK{2 z5aK}74k&O-mI9Ac0X+)y0-}GdFdNptkAn(4?(0mLuZs4iSS=N^Ec7V!*CS=bL|(86 zs3c+QkSO%3-O+Ue$%58dii$c_6cif*b0+0>6P4n8E(J;T56HAlhqF_=ch1_UaNA%>&}u2S zA@oQXHX^CTSX?krV)@-^&FMonkZt|CP)C@K)r;3_t2@?p6l*Ee!nuZI$Wmy9Ft(r!qYgH44Lfly)e&0TM3(X*~$DgNK4y&`{TYRdr?qYb| zX3%U%PH#iI$x+0fz8n2MeW7IuVN$%4A2MevrfVX~pj4Gl@#K)JDoTq%q6Q*kon+sF zH5~z?3g^}Vcb4Tw*Xt{G-3Qw+W^y<*waBq)2aXK5SSibzQ)Ey|fFPc6pUiIzKf;$8 zSefAjb3rXWMk@nhV2|QgM-%v)v~3zp%}xuW!qq8rkZ?yzURmL*iw}xNw1WZm17Ho z-njbM@H?b7uQJprtL8-ikXo}!u(`Azh)i{oH?&(@h;m$`)wy9bHXTRdPOv@{n-j`@w(5ULW_4K=21Z zjZS8-w{BAQwLo59D~%u=iz3`Kl=7DFRzmKTo*Odn)Z1|QU+mF8#Os|vE6M9AO0L8T z*rwEqUr@5_b4JnqfZP={^(n*#-3{;LNE=23ijoB4ghn}GTEy*Fn}4Zx0i;Gx?@vUe zSSFu)+0-7)yD zO|xw>_HT;xHbb=}#S~YtdY!LS<}&`LIKKx&q1a-3Y+jUpWp!y?CQdx$uJf)a%ci?h zXgPIbn*_Q4v`Hgz?&gZPLPv8wgdEF) zYFklE8!qhVqvEjgS`Ahy9R^XayLH{!cNqj5Ns7t(0Ju*=iFq-}_XQ9c5jKhZB|MW- z`xK4`R&mr&YZ1pnKkO%+^(haDzk;mg(w^Dhn=ejZ#IPFAkhbo4nr7Cm;~V)(%K2i^ zZMUUY%zVgww4XSu`#XKFfCz zZp@R@+yttw4tyUH+J_FPu9J{+kj!DrG3fHcKa1?$hvo%Mr|kr=>1jyOY)g?_P^oU8 zDmgy<0~C+hm#4geY?nq$+}@AqMzRP>uB6s)yr5~&uRA5{OdsrT72*Zr_C2uGjXcH) zV6`LC8&AV%fC&ZA_~Lek;D3J+7<-J4{1G#_wd+!ASbKHOgifU*4sUS>4ATVm!h_rC zwIF{^N9d9kKP$TPRzco$5radpaF-a&B@TCgGpdqUzz;+*Rz|F&d;tU7I>FA9!`O%u zQ#~U(R(`ldTDg_m3M;p=4455}=SZao*w%jHp`|lmM3%$nhnL7D^C>;+jF0e#E z{BEDmf=R4R6k-A@P=IkSi0Lr448r1 z{vovP$|Es0Ss<8&5*a%iI`Zec?ZPL|FOJo!MrizkY#2;#9g-Tqobgky44eYQ#>hh+ zW*`p{mti;TMoRlW@~P*j?KanJ$*ScTnyTprzZeFiSnO4{7*@n)si$cVqnxtCu-)W+ zof@8M*dgw3u4^=EIl&M4TI+-BR%CcSUtM0J?e@T&*i+fMr>IP{A(Gb-MtxN~tQX?L zQz;^luHW*;*n{wqVZvady{b2)ms+}d*QXYM!c8mf=;}fZm|P+kf*+w3I@~(jzUITw5H_3O2Zc| z%N_khqDN&IFwc$zgBng~I`wPT)tnhuP%evp0o-!<+mRos?43^qZF!=5#(%AQB%2c8 zipeukI|G++S2P+CIWZJmKOV)Ly6!dYpvG_?YiXPHgUNIqxQm<}ax-OSaDPnWlBYmVc$=-`+Q|7O1*6&7{Z z;z`$iA6ZE&g(_rqJjT!a>vBFT*_=op-gPozT}tcpO2xF-2Cr%=^H@w!rM5bGuY{|} z-S_nI{*5dzf80uNVJO`Y$6#rxgWB`$L>pszh%h2mi9@A9R?{3~Ywt*#milX~7-t5; z7s|8=>-=Jj{|bZivNi1kP<`9BjI5%HCO(hebn%AD25i56O1h}DLZPfEFE5r#WTmBY zWt~n}r%~3(Dy6x3lJuOKipq-8qN1Zo=%ssRi%qw6$X2f={atKCPCh|#F@Z(B(w(V- z3FmZk4lagi4>yPC!jT0Cx|_{toSTFMHIFrq3~VxGCNTanSEJGP^+-Th7*d{(LLX|+ zx+0@whVExFjEYv$QyRrd9ur~-R$$OO6TfF5pFn<1Q1%zr9aVk6Nk(RwqyazZ;?30x zJP%20G)i!uP-+QLV6Z!ryk{VvKz>com6mAQRz)nI-8gBsV(>sP#iG{Uj9Y}*84mb>11(ic; z^TczVMaaTf^ACqqX;>BkCfd;}mwv1bD_q{HomrnjOYi6X_e^qDi@{l>A)%U)mIV(q{lN^c{L;ji2D|Mog1J@D%;U0{Jbn?$u zI;2D@@~k@h{Ho4A?s^_|$)D<}t1wvv5UPNacpH6DdTwrMD$Ic-j{;6}jA`=PxM`VS zMOxYm)$Mdxtu|Xyzp{LIM-(MhufoT;E2i@IQIF9R9Ng?}t+aKqYlWwAtlkmYY!!#&5z{3*~UcaA$1J|4W42HgvmfFL!MUn5ly03h79r_3tD}Q6i6qZm=D^;6WWx$}UTlAHJuqZcA-*69^ zt2FT`s6uarj$JHh^CrZFcs-zRMi&Fa9{6~bE2C7sDa2e|OY@PG`$*YoK*0@r%eHL} z($rPD1aX!7E~Y76gapdzA$O@y#PUA2b*p;%klH}t8t&)fh`~Ftr0}dNf zoM|x$Gi3I$wdu!SF%b}AjC$f{1H?F^7koXl2#svP2p-rKFF`f_IkJQrXjMe*ObpDR zE~m~0-hDaAk>B_`7v?lo6hz%L6j`~^hQ=}q*#VucRfr;5MQvPt>EzB&fAbc*WHQ6hBg7~i&DqhEQ|8?I@SkpjAMsIwc|fDG6h z8z$}aBvd+H+OEr#{&xZiYsJIJh*_oh7f;)Ojr1uRA0Bz0Qi=?D#!>1(F0;)B)*y0q z?Oe?$D}^9V0GogRGt`b8Ak-Fyq<3-Jroa1|e+czDy%Wzat(vqle8$-SXVePLhIO*b zCI#_dUgFK=rx^XQWT{%A5rg5^{Cy}M4OO{-CWRFX)a@UJRZfg4s#XsZy4Je3Hi`Tt zM$K&9(Lk2BCwXo)N{gB8%l2HTigPxEcAB0FF64rN-6i?KS&@px?5r8}z)GuzsggKL zAu~RQu|4pB^V^b}c0(MDs$C(99`hUImJ;I2kjHJwMQ9PzmpsdYXtEA+P}i>V z#UaEN5E`*z%6Oc$Zh9F?QUGbz$wo4ZQzViqgwROkP>#zmg=n2;8a&Lz6N{fjr`+e= zCuB2JCdfwUsz@-|317o64X-S?kV|aKImvnM*tV(^((wc6+@Kq1e^!)jU}A9Tg8C*{ zx;jOs#>D?qa0*TNMww>UC%lQ7y?;#D5kIl_uPc`)DiXzs;k_Gs|C4A+C=>mu%0Eiz z6NW@vema=w+%jg;6|}3J ziIb_35R!%Id$#N^Q!UY54|`B>`Npe^DW~*`yG^t?qvWNLm4z}*Fc+3SM)LX~QKb+Y z4xm3Ccjl9W*oI7u0VKklpEEwF15|knLW;36VS=%%BB2BF`r~Cj1K;Hp07p0+K9IRm|FHkR0mfBqlv?b+OZXEopt_xT1!*Bgb39{r+I@d!)+F{z8z+QQm zsv)Q?rPwd+5^XknL@QnAaQvFR4xQEFEO-M+FO~u;@AJsH6VgkT8p@RB5}D^}^ylA$ z>z`b+){b}X2qn1R6ESg;LR=fA*=z!4D0&|7%nj8VB*aVTJp`hpj26Ty={RApvQ z%r&kdLTidR5am2>PjJ33jOe6XnRl|mm^85i{EPi|m@dgY)?%)HLMSb?B$Rr{<zJ)(TMxLH08Yr%%+1rt9=0x_JA~3`iQtY@Q=VG$=emn*ZgP!0~ceS|OCwPoy!2|t#1Q&Vk z9q=Apg!W|;A#lj(P4!W|D0JHGjwmatqUp{ujP7a_No;dKZ)RKDgQ}rO>K}OJeltil z>!sLIDA?)^j)bE%eb+h{+VVqrP6?;XG{Jt<$C@c+d%Mw^OLQl#m${CyE7v0-UcXT? zj^eq=c97VR$mWKe`M#tK!pYHag*qd#y-Njy@xrvlv;8Vw&2rWa_LNsrI6{7$lTgNn z3|b`_5GSTM#3;_NBp?x3jeimT;_k3ZVrz_M?8%wtSV(Pc-GWRrjn=${7%2*11Xzj~ zGcCCw4f%_UC;=- z>+o-DzJKb{e_(Gt{C1x|5DcgDNqnZv`=HJ!UN(`2DC|fe_Ol*NPNMqcIeM30pR)h8 zCHAfaiMOB8!oW?7t9Uxuw442T6g3(@00)Kfp5%5(>G*kT7=sqUEb18c@KN#~hRsr| zt454rRQD+pfC^ss@Nm{>KqzjaPKji#7`K?4On_L3`0Ngy|(u-H$v;QxF+V3bo zcHLFL0OUVQPyTPimh1;J(fQ4%*mD4&9boVMgOTU0NjNeVeCXQ)X z{tYUs0;#nbMHbLnd2W*>8IM~fqirkqC|OST*E#3;y3#}Vt!sR`T<5RzNBA|!-;Y5) zR_`-h|BsI8rLNOxpphxBV@Z{t4*eb3ZJsrLM}SIvhZ^$D9Tj2bc*9F%Im@yZ(iE)~ znICD$)%~>R4b@XO*0|9nJlVzPEPs~ojOhqm=BzlgjjLj$)DtAs-?+QBzOrDJjvhX& zb5@Uq0muqAc9G?^O8qxJL6b6Gyq@#al@sIg5!4Zx{ePs)bMSXKbHzCTQ1W(5ebh)L z`RMQ-^S<(hW8ve%F>|aOBge#jp34o#YV}NlIu=DMl3FQbe*a@_0&hkUIG)oUuh6i1 z7G}>|HP4pgOU%1mVc^Kzx{hbe86v8m>?%9-<8LHThX;6j`Cur0?Y7b?eC!N zJ2*%M@By)S>uf$c?ZIy|a|sModjqxwI1sHVU_2`!9#IVC(g+h0A2@pgQ-D#a6ucav zkY}fcFVCyYY0%2fEj=ikQBQ%Ee(9y_p58U}p>E6d6>RnT(YK%Vm)dS1WJsuc-nZS16wygd!FI E0O&$ZPXGV_ diff --git a/docs/assets/inter-italic-cyrillic.D7dRslh9.woff2 b/docs/assets/inter-italic-cyrillic.D7dRslh9.woff2 deleted file mode 100644 index 116e3acd78220b4b825904e095525d7859b8ed93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31080 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 diff --git a/docs/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 b/docs/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2 deleted file mode 100644 index 9117dabfc2e1d3d22c865b8a5e95e4bf6449dafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17444 zcmV)WK(4=cPew8T0RR9107N7J6951J0I7HY07J3>1OP$+00000000000000000000 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 diff --git a/docs/assets/inter-italic-greek.DNcpQ8QC.woff2 b/docs/assets/inter-italic-greek.DNcpQ8QC.woff2 deleted file mode 100644 index f098cf740501dccf4187675e71cc9338c7309d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32036 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�fp38QOb=FFo3##-4TfuSq9&V)2z9hoB z;t2wbRg9#WX!zC^4j^d)0g4`_i*y+^Mvj9%KqMxUJqh`4vOF1vpGqS6kTrag=tBE6 z@%OUua}WVgs)Ko0g?^|y6s|Rd)+p(Tz(6M>HoK@7ab0F^ydgvdlDN>Gc;Ky>4NcRvHs2g`Wy#Sg>` z*@3H9Jo~Q!!tfJ?wWe6>8A%zgL8?_%opjImzZWWuOQ;#>{rLS0&S*++L8>Ob zmfvcCQO{h3tB&4e!2jxOPNK?sXD$m8kPHjE9Jis_Vx=XMWlG4>pnSBq28RYeeL*4m`mjE|2KZ>wUdtHGO|o z2uNOt_*~mb*juP>2ceFvF5e_PZmq9tX=(Qb+!fh-bRtZ5koH|wW!dwcGd=PF`2vXG z(8%~Z)6%As(cMW-_i{dr&Ay7^zVdze`yAOygHxp1iZlk8c{)ic-2T`RRP+8lZNu` zvN(3RdbxdgC_V8iQweApC7-K$LDFIRI9HI*8-~X2Ex9F!^4i%X;P++h?8QSFQNN~r zEdAGrS(Px_$!6)fgr%7;5<)E&ZIG*?JLn7sS%8aAa$f~4<-h9dIl+Bf(JnDnm^!*) zI3-tA7Ju69F2?@jf0Z=U8)~8b^y0dU5FJ#cPulDUPX@n|$l%v!kF7kyg&z{tgF+rC zbxiH!y#dfN4mrS&N-Sg=dQN@>E=oGVI6p-bSx&g`I=*L^7@1Ag0L=Ad1f!`PRW!9X zZrDEFcRb`SS0NKj~@riv`f#_U$;G%6~Z3RAm4^(=RN-;NU}sG79Y4+j5LM zwnMEr3X^CAP#io_oQ5BMPmHE30VS9bkOCefvWLc~kPffgh)I}&M)b$zoU2JQsVxB` zf#FrTa<09bVH;Ie*5DsOL2OhOmKvIE>!2*e2ChA`WVQzN+|decsH@6~tQi(*Q1m^t zw&As*Cv|eVHUb7eoK$CUwQZ^~&$~E)2hsAIYS@}*?7?;(!ky(HbYLb;+q<;=J4Ft{r9unT9RsOo`P7Wiq}JUt7vXUbX)h)8-Enm85Ce- z6}5NR7iX^Y@7Bf&p9uI=>MR;~rc6rQ#3kYtq2g;L{@oI_mX%X>w&^2*1!B#ir&78J zWFQ9}ul5z?7~_TZB!iXmX-Ftx3N2(!hb3R zq(f{-xTP&QE)G+D13&iuYv#t_0eeZ&eZ}+);gPzhA86k_=S}9QOhbhqD+-{f0z0%g zR5iqHY@j|(C(I396oyzbPz03=9*GUbcqL&6a=yH3YqG0lN7YT~y&p95Md+t%x#fzM zQ8#^trbnJe0?cqA3+6f`|K?c9>Ujt5*60WWZ_wkV3-jH$)JOkE$^<*@on=PbV3YKT zcZ&sFg@C^w%2a=nORjSA!Qi1-G_YP-eH;37)E!^tz%S=6P7x-hK)9ruve?27B;C

>oab>Yj}CaA~e@E|am;TB6%tlc7IFY2rR`kZ>! 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 T?(W}U@Y$Pg{$YYl?f?J)`lc;o diff --git a/docs/assets/inter-italic-latin.COaG5lWR.woff2 b/docs/assets/inter-italic-latin.COaG5lWR.woff2 deleted file mode 100644 index fdc2aa2290f03df98b3225191c0a162147beada7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78844 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 z z-Fjyr7%r`C+&EDJ!>Si=4E603*QL!PqQ7 z5rUXdOffb1j^kKCkVP@3NkWp@?zB6w(wa_w)PV3?GOUW_uZ1f(ic@EB&`5V$zY#4= zcodvF2+@JpP!pS}eXy%zFmYDM^`^!PQ{-CVe>td!PPB`~ZJc;ZDbG#m;4qrQScB6z z2}3UktllIAC*6}lS_8Y9L$|@MXLbxjsVp$###EXavyPC3k=AN)CPj%(V+3FdWK4#s zV1UTg&;mEk?h=Uz>n6Pf0xIXni8SVwNdl#Tax#1b5$5^(u?qV*A+&t@X8jX(^nLyc zPIi0VAUP0Y>B5c+rm1#W7@dZH97C`#?zE>LG&eRhwzRcAZF)+3{z+>RZg(|g5`qx6 zZh<6T{=eT?g>+mc`Oom!S4}mOfgq?0W9$2Z+f6EN5_x8O!4}q!h@Hj~ztmZbdS?ea zJI<$SwYKUD!a5~G*Nft4tBE2|(2Y%|#Alm1CEvEUn3>4=W4>nEt!%Y{L`aK;SFTk5 z|6F%-@WrJoKb0Z`Qp}ZOxg4Y*^+xMbEz^_*rdER-Mtjb)3`L5zuM)$tw%s}ocip3M zcJ`NDe@7+(g0$wf#qQcrZYHVW2xZLgZ{2!3ZJKa=f%Z=21wl96C<<+iHW3OEMk#{s zUrr;Zl#AHjVrpU}($cD{Yaca}Bnb;E)oFqN3jj+11RzL|-}~;TMGG(xMy{!;tg5OE zN^P&L$!>8sJD%Sh{SUlsl}pi-856fE_&&U$S^Ir+ctI=y(g2|c4I0%`?8HH zR%{}XgwL0d8L{mbQ~2wTi#J`mWBaKsfMty2DPg6218aG&rgBUxLgYX>^`M02p2sKy zl=6N}Rn@I3=U!b4>`o(T^P78bG<5bmjm-t#e}=JtkJQAriQiMZ)e&=wdM*cg^d$Pi zoC=6fO3PZhL=E@2!%=e2q`Z{y>Rn}8H@|=@NG%$^Y2BDNxU{rTNP7DwLz^gD|jD=@8p!5*eR?HdKuUA*q(yp)? zlHBDYb!3U`>(xzorjHEnXBK4Qtfszbw)2 zCe{%VU33$`7ee0;qdJEGt1kki395;bv05(di8u+9jz%b2c?WAE3_M$C&`k?65e1&P z0n{)9)S!;(@u`qNkoG(o!PTtXB4DG&YEVkc`iHB_H7$$R-VVHAugY|W7c`IonLowz z*S$b-i{1F=`r{Y9c6jsFz2GgnCF^D-!65w2_R0f0BvQ)SEwR6y;NR5t&Gl6_#WL zA&1LlXnqh8$J%Y;>gM85Y`1X#Db5^VCIAySzyzi@!YFWt-U=Hpu_7n1;pjQIlICXH z43E_!eZxagn3h4du;+&draSC!IRfKl~Pvb7$JEQo**W z+JiGwmwE>j8(IND*Lu2}bQHW1kC<}@6n!FKqsw4V=e}b@=d&>TR+UPo(qLCOwO3m? z<}BdW5yp(aRm(N!9s>mR7zpSeikvJ~L4igC`BYw@2$ZA!Cx+>Ms1%nh-02YQYR&{D zB&BCB%k9B+HQ^beg8k3!sLac%Uz!zct0$z*(aZ2>~Vp@T8-NhtAv? ztN5-sDRx2cJp8&1>%Sn4Ygyano}S$YM~H)^;D}=JdZCVxIyCR-rw*>8Xsw#wQs-<4 zSAhuokP6lc>o%; ze`!6aPfX43EmgD<0;m;!2GXG#Un;XTZR?y59F@-ky6US{^P|QPgnF+6uh!$pKY>W>u;XoWGmN7I2l;Tp9 zb!`mx=Wc^ytXgHxg(yL+defcjWHzf#1YYi_*X+Va#}w(275~ zLRUqz)`jl9J2*{pcXxF33ihAw6BOj`02Tw*U<5{&(?hRX5#5EeKil?G~ za?CySKQK5vb70gj*IjwuOyux|4_`7s<+Y+?l-IhBsyipRnei_-CB5}z%jT>1OCP@b z@gz#OvDrK>m#52tvc=QWK--~hDvv@{;{{-RL|tayX)4)9ci1EAwr8(zd4KuCZS^P~ z*u3j3o9W8AE~zS8wM!aN+sh2q18)kNLa_unNdR_Az66*#*9GMFDh z6>LeXa#yQB)302dl*pH*6OP;f(BXgYS6uLUOXfQcD$%#go6 z2slqQ8WA>;(K1IU%fmV!M^}|+2y?B+Pt_8BR-aNsps=UM**(QD6i^JwJJl#&APgml zNY)BaQUe44a8O@!9arxQrhea?N&oKj&6t{@7|r|@6+M=$@(hg_R$g-SsDUY=)9msN_iCSZ)_`#3w@WM+I@sM+4_7LI+u0#{jo#!vsMyvB17fu*o|T$CS>+ zCF*l{9Q(nv80RQUEnC#0o_6Olm_2%l=YT!ZIU<+koN&jQznxLb zcB{&kW0fT`&66RQoFjVMrpW$#z+=5fqrV=_mM%c)4KR8BK*;Udfs!QBDT`Fsc)WFKTm`Gp!S zzA-G7DO(nKv@GMC^PHb4hcZ$_mAhGa(!`jYI89m243I@1S^Gq6Od9xFsVuQbu)`oQ zuFr6gPG^TYBgcy%(=v;ua~dfTPgrzSP|LPZs diff --git a/docs/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 b/docs/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2 deleted file mode 100644 index 465b22289b66f3799c4257ea15fea5506b26e2ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41092 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 diff --git a/docs/assets/inter-roman-cyrillic.CD0kT8R4.woff2 b/docs/assets/inter-roman-cyrillic.CD0kT8R4.woff2 deleted file mode 100644 index 6bbced8e79def9ade6fe23468e212171caf1472a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28824 zcmV(?K-a%_Pew8T0RR910C1Q96951J0LA100B|D!1OP$+00000000000000000000 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 S1((42M84tXnCjGU0000zkmL&h diff --git a/docs/assets/inter-roman-greek.Dsf7YjP7.woff2 b/docs/assets/inter-roman-greek.Dsf7YjP7.woff2 deleted file mode 100644 index e30e308a658451b78c853d7ea52184148c4d2ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29240 zcmV(=K-s@{Pew8T0RR910CG406951J0LknC0CB?r1OP$+00000000000000000000 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

)~9mt344ac=Z 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
  • yg=`Ifw(JghF8xe!v;nmf0$#lhR9@ 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 z zL3hUM@!)MZS&D(u9=Xsa)+U)&;+6@>etrCK)9htU=Q8)T6PG_Obu5qHxqeFh)~1$- zd=`7dS}BkSNPm+Z!)ad|IJ`pb=5a}X3+$Os!B}@g^;TCDO)|3>M+(7JLq-hBF>AIo z0jxuVvFWmc`*B+2GMoH)1${cNRb%`VJ=UwjB6aYlFajS_H)wT&B~M^x-^c=8I{HREydg!M7#?#ca$16UfldoNT1zoM-J2r~sZwD@3lF$E2;_>+8 z8a@33RlH%!3Cy&(fMnf;F9Fd&E8>`0?(58T4%wim!?1p7OECum2q1s}0!K0jKM59! zO+xpRGy?#(DE>_dBj%yj=|8(`tD2Ly&7FkrwW^t8`s zp}!(hl%q^Ky!ys0Aq_69BubZmVoh%i4ZJ738AYfPNZv6x3KKo4JIzS<;uR5mGXYjN zEc8~l-b)mHD@f-`uXu|b|)sE*EaT6ExM7x~pHV&` zd-L#UJK+s~ajhCe{DH`g+h+~Mj1JcHEO+aZI|m0jPLCVpUw^B$^}?;cUbve6ovx-@ zX`gsvYnszOw!l2|v{&nIFmKw3Uq2BJ($OZmmuiakenD$(IPNyZm{6g01@hW&j?IVV z+gnrIsantE*=;suYjuj@KXrKY>;0wv%{Kda^YB&dVFd+Doa5QLOrKwb=PuZQv>c8n zL_J=-$PvN;R$?kj$ZJRw*;dDq+9NKVh|`&1OlBckruP{^`^J&dI&=F_D-?&xioJwLXH`_)wSZCSLD$W)B>8gDcz0=<66)+@Y;#0Oo!Zm^{><2uI; z@+S5FCj0uxAg@UvyM5pdEUWE#U6cqw zWbX`g%S=9-DG|5Q*=)Kg?nzBs+sZmuM3K;?Ty4R}1h+xejx#2=CzeAVpYb%^rg6cb z)_qSHHzmhMvwpgiFbU7I-;q@4wU_azDOL(|#;`M2(bD)a$g(I>&KM|@O#;MwupX5t zM{$_}5$aoF>PjQ*49bWu9mu?cK+gzm1NlK9DLVoJ7%*VK=Hw#iZnFSW$E&=jj7;c7 zK#Nl>%B%bw`3{Cd>tJ^o1-3m_Aq2xDU^*uOk~#@OoRa`qbuKGdYOIbtho_^`!E%_& z4C6THAa^w^i^{Rf;ncNz*|iSmKgsl4k1mG{+&GNplQTcSc1ZSrTZPN2oq605sL!5EtMTB7*q5RiGU}y%+MBp7G?NfMkPNz0V{e7x$=ipG=(-%77N_D)#^oneX`t-zU2;bu zBr&b1mCVKX(E)sVe!HHs^v#V`+SO;=@l%<}JUFi3+UYk8+3xT?=;dVZO=U8l$xvw8 z(EVV^w+IdI<~qj~h8LF>3@mhXStAF@>aGaRh&~^U^gMgPIeJ=+VHasuBueEKtWDz4 zquW&_eB>Z=Phhk{@@qMr*Vu*jeaS7|os1d+Sqi~ASsfMy!_EH1v96^sm0{=B=esTyG#tg54~Ir< zBz{sL77` zSJg2~kc1>Shf}_93oCRE{R1Ehbp#(YP8F7F%@QvSTLAo88&HI}KxTfhP!1{Vj;7Qw{By9sXMW0IF^+Xb5sxWv-K1M~u7yneFhTlRF$-A|qY^AIhwpKfL?TL6fUzW|pNFIy&P zw5q$i#+RMf%jI8AnS$4fKrh5W^_rsOc1$pH2}1yg2niW6Z$FxvtHO?Xm%al>bljyh zFxQGANeUR0K$e*CCD1SUDzddZ#jC0gm~Vot8o^Yb(>-|A=MuCUTwCY?k%gosEsTP! zWm%($8;eypYi_D(-Re7$-iW7m5$`6q$zZ7XqX!-@jq~Xw!eD)$C-|1-T zr!urrUvgHdYI3R45|oIbzKTo^*2f`3yj5kR7BAJSEC$6^)1`JAbbMgiy)7>7xB8-a zOe^%9TmOK;kuYID)FiB3d}I%3pHJHHg;99;ky+3Ld*SVJ0@w?CqkK!%xk`DRWJ*59 zPV^aB z_r#M0FN!8ZM~FsGd(U2k>lMSj2)&2&vNDV_aMB*m17lR=3;q3y42|uYL-E{^f>u0cy%w+dC919Ci>q z;$cw1dvda6I(q$BSc7g#t>w%qJv*P^L0mSB5VG^hYdMti0sH~1A0#LV)sq++r_W)x zSo-Gi`KFTBRXq2YDv28o zpOl+^6-%Xyd>RY}PSMNXxjHVV+w;T9Dylv#b$6H81y=Fr1$|&o?krD1+K;=0DPLon z-`Do2kMSwaCmlm#0=~zjDr(7-!AWw8vL!P`3hH?Z`xL$YoY|=Hgg3oTN&czV(V|Nf z@s-_}y%NGmOr{^(8I9IkC|Jx+2&Pk(K;_DVwMfzGfI}*1`y0RUZeV$W)SZQqTTO1@ zlNCh;)e&rX*MkOcb51I|H3`0|-WVp~PVsuZbB&o=rdTpDS=AC9(K(c@YLv1*4Qpda z|F5D9OxALDt)<^%e4~>xL2dKVaM%`^tQPNezn0CGYXnD_sFkyf(uCl)Ve;4*=GaND zV^o?e4=R4?8)u|;FCs1aQ9V+A>5)zamxmu2E^etL?yn!MNyG!>64z>Bg*W#7&>)X_ zqh;S5$N0i^+KL}Fnqtu7y>UFC?^{lMd4}FN%!2Ofw${RgEV0AF0HHn~aYkeXPj?wl z&Wk=!DeayA4i4HPx}hx_x7!eGtCV_xN`+Am%?h0exIxKxn3Pz=sU95XXv!_;pJdc5NTgCebXWUA)Kpslu!sf1=xCH;2~ zBXYTKFd(Fd>ix>zUL{;$O?bAh1?cqVt~En0=!!~xYOEkI^J97H!|Yp;2|CbF{Hwxce>lpN7bMJd+DC*ZrA zwX8M`pRe@l47ZZyRJHIJSn|goBKH>R3cH{FJU<2|P`KP*F!rR{OIm6yN{6NPVq}zK zX5Y6rP{3t(JPPX};3$<-pDG;1-=p3L<=Dje;h}$xZl$>*tYoD%#T2 zJd&~wQkTf#5j$iPrOpva;YS0ogpzt$5JL-38<6_U0pan%UQV<5uMRC*C)>#Ir+a#!pr zNS&ypxwF~;3v#{9MXuu|6Ne=zJUn1tKrL+vS)$^k6g3+j?K#cJf%&uEs48}6G zkboj2N{RKmSdnpsU~8qlod>6Dz$m;K8&XlK(9p$fmCaC{CK)d#bHBE==J`iBEghf4Rsv1%; z-`cV8WOGgd_X(y+Ay{YxvIq?XKW56B4XnyWtu2$-%+|mtu!$MK`Qi#FI4tnIKmr3a zgzgLJI`6T!nWJW1xg#IxRSbYJkkIyH#5)In=ocRV{_WRfv&`a#ItEcG3f=ej(JRQ@ zowR3rx_wmX#PF%J(SzL?X>LYI@h7o366N*E;T-H`w_{4ksgF8q**Beb&V}E30hdF< zNzMqbQwRxRq~q`{vw*lo>Og@4-UYw)^VD#x5*^SM!x^1?;900$mqH!||L_M6>SV<%Jid!@POxmod0NF4wUwG+#pzJm=uIVEYd3(C@!%U3y^$Zm$t_K+o z)TpMTVYPw$BD!`#Pqe!dMG@Sfw`Ztm*>xWZ5m&;B8WDC}EwFx(h;bnkk?BhQa1Vs9 z_4gPBqFY6_SgBRZsuE;Vy;|Z$F^Q*3Rcn=Ev0PZKlSK?G$~NrrDJVkt&5Z>;s_lhX zY`Ju2AlGZ&>n#{d>DblR%*I0ZrSUJnEpC==*yl5j$zZo_*X_D&E^?gm%q|{Ai<{PO zJ?h}ZbCks!mDT4;^W8|;b@s@ySkCl3uh)yhw(k!r$j&%rt*TqUDQZr+9L?bAQjBsb z+phyz?RPUR;VL~s1=&@Vrvgz`yGc@XZitB*OT}%~Fto3u6^SF5-3X z5ci-$4v)CON4_naceF)|NdYqw5t47N*J``n+jNM;fTU#-!=pM;QTCTx4-5w8%2v{{+_c^We8aA6N=yLjE zZUMVmF(4muGU%oS&3J9vM#7!(K4=>WV^(wGwT;N~ z5CNE*8xKJkEtmHNFsT3Nz2Qwp3tfqW z+;tK02F{!sMo}Sm_we}fo2RfUnz`q(!a|a58=eO+&7+eriz)ShpiCDNS}^TBLF6vc zke(+x2$b_}ZYkz3<}N-C1rzI8>Kyn8H^${T#`RTRa z)E~fVYSiO$rH;#Hwt!Eul(3X0rUF00K+d@pjv90o-Rlj9S8WslY6Uhn(q-*3o40rH z@m2Ne+_Gf~Wif)iyTT1Zt6U*>qBPFP2+Ggp90C*=PzOpVFlSi+Iu)LP z7<(triS2yg1KAG?7A#n>9*~KvJP#E?Tx|{t;7L~d)ULw3zVcZ4$cpN{76l6}kpZ;n zed_VbhrF+SwDghUmzh7MgWqGW;ob86&);zYN+Tg55s?uPB#FinDOKqzrHBPYr{X#C<5fDHdH$I+>yjEv z(V|HfsWa|+vDQ$5p(^sC@PdJXg|9Ho1p5GfXW`;9b1}M?C#awy(%jA+n#d&@*M%)8 zA`rq1C=Eb97X`s;%9%~Yu%e)aw2@;8$9b>?^%0te2b+zDnncG)S8y${$n|?}$YOxs zMOCRv*(jF5?v-%GRW|oHWkho3@Ve_N1^-5uDmM!_r>!La^N?(lYVxij50_k%RFc*K zp&iq$$S8jirr9152;ktnwEa7owc#O9lgoGi+!jDoYYW|8TYFRW&(%S_P=c_SWg%|7X8~ z78CyT7QZ`6a=PU{EHfw*h7_oK%>Q7NT9%r)v{Zer_x~-fpRV81g5)MX9XLdl#_m^v zDX?0;d|cEw{Y!o7DfPJ$KMF9SW@^@@hqdLfLs*t(2TNN`m@_~E*F_*O-al563gBr( z=FNa7_fjYg+n;(W)Cv9efiQABtrpN^p>y>417XB!h+F_j`#X#8LO`hbZK;&&L`e8= z7i-49zmJrScg_ZA9!;*s_nM8Beg&kGAkTr!3qf0}7*OAFeUE3tlCo6MBmt5HrO~(m zgOZvxFoYSBnrq!HG`AsCk?rS_w^@YX3xN8ZBhNsKiq;%;7;Y5&MLg8}KIZZe#E==B z@dR-GBa%};q`Wdx&^+_In}E8i^;3iC4z@D&c%pk@tFafx2j(hakJ%v>=z0IYfbU@`Q z>?8eGgCrqt?Kqh;AkY*k-4yCdFbJ6X8-(D~5=RC8@oXCcZ9jQ83uK9CZUGK-7T zXfV?`()?Mdt|sSKsZ{Uw7*QnU91Vbch%kURCB@09^v6;f+_;${DA4YHQap?yCgmo_ zPz1}%3p5y&Gms#wA}&j7D{xwR!m>xE5{#3V3U7IZtKt}rq*7>r2txB&eF#w$pTHAR zlFcjt{BPD!R0VyT%LbrM#30sGh^1$8MOUlw@&blA>AfgKL;_sxa%mI^!HPN)o>t;! zbU1+|a?<(!H94IHFFO)VqVL8d_e~enPekDOb7AC`tGo`wlZQ>EGPGTtz-jG5T1bnZ z2p2`b6B8)AAFfFZQgG`8kH>AX&@0DIrGtMW*i(=;fp1D8z}pih+%Y?uCfb3_elxJZ z6a+nwc)D#vQyY++g$d4qP)Ps|+yhHKN@nPQe>AC6s~vs<#(Lt=T@3)r z+7Xy+HZ8%zL8^Hw{hg!OG-ID==0JD~3k(AX0RkalBl`n?_1pCH)UsA?{dwlF_`#bQ z`oz$R0B z-3(n#hm{HigUHHD9b2#7ppQ5RtBC?GrwKRktH%}?FjdhIhXG?HA#224%Ag=WrPfOR zZ>r{b(`U;JA=77wCyl!wuYt(VGd$G_2qHwXI`h}lbnQMC-L+5P7#f$ZT3uZ@H3v96 znN}F=m}HBZ=x;nM{gybrO?#i8#Y%bQFyFg*XR+_k^=&AsiId6=G1J z6oekw2tlR&cu*iQR8*P6gd$1F0Pl19vo{m@B-6`$q);!y?-1Zn6U{XdpF^^Fw?^Ig zJ6Bk=^BnSF#34f^$n2vXZ2W(&2PM7lL9SE+P19D|j|UYJTP3d$QrfDCA7-jC?e_)8 zFi3^jP0OF>I9?EVwg~W0;cWS#qMW=r7kQ1{?!dvm5A{NR%N&wjFj(hTTZi^4U4Bc& z)xN#~%<X86i5kw6l75)nT}- zL7wKJNP_|iAy`~xwxBz9h~E~DD;%DIdeMR2GweGL;cssen14IRL1~D5NN_mrvBt_gJ)R7hwAEK!lfGcagT5oull&I?PhqRn>u1z-@gP@C6#&6OGP zkgbM-m!S+LPP)h;Y{*a*ht&XUmB9!{rG0FF+4#*-(Z6Nk>-E!LYPpY(1t;nkyZ`zB z2EvDrjoZpG%qc*hvJxI{{gvPMUK&~` zVLx`h^qo!f!vU`{o{YGi6}PxuKSWTowENsf=Ey3q0QEkAl;Q|PF3r-M#G%hcaQxq{ z%~GO;fWDcYlX8tg-rGC-wHT4zJxvnvzGa83V+e-Q8 zwv*TGP9?~anyZ-%Bt=ul$zA?s1?i3e<@n5U@PN!BU+^3pl%& zwmwaz#*HzShMwIx0uAUMwZJNaT=D=um*bzw%@3Nt1kI6QncvNU?FZM$mc~JPGw;IJ z0Qy><%>dgX;^X+FZw01{Rt*7dz7;Gc8bE4I6tM)n?DaYjAh2jukWkJXGxK(Lb%+yL z+p&Pg0yH2WIL_DT+tc%>$h?zy3;~nxY+W~qPd7z4fCyxM)&A=oFM^Q6N#b(+JI)L1 zPC1W_V0WjRJ7kHv>6gSdhYhTTRXU;4^m>(WzZ&20C9VC>7aE8V5rs&^A&K{1%pLSz zCDfmV>^dt#=R@zH4KxH#%;d+=-}m{bkl#Ky13-VB6A~6ooFdwgy7EvF5bjth8`^p4 zU;`VaZxA*sgD}3{_b*^KVeOs9Yy#g?hzS8b9KNLzhM*z}P?CkpD-VhogEcomG}{!E zU$>2sf(j}RT;7Q9#cF}mQd9Uxb({6|?Um+>a;6YxS_`c2duki-kqs;??(PETa#@mW z$}k93-GCaZYak(Py$6q_t!~ozZ-8caf#z5NI8Y}Ql8}T>NJ6sB#i45=YpaqJ0x@_l z4T{AI(PZI)>!R3f0<*GBWte^H?C`NuFXo>V&YxL-;POfhz#rl0)C(Z^=H3it}XyY0Qa~0o7BY}M2OxDB-%lKD;;O+@wwEHsX?p;#$CZlF; zMbko{2hUvq087sf|}* zKf6MWTN)5KE|oN0+A1hJ;5_TaE~Hh59qNI}Xez7J##qmYX+pg~f}2LL3pI(A3qf`S zY7tu@Ad2aB9}=_PY`5+mBy`ZLci$e(G5J0SP?y)(12>p%e$SflWkJYP$H<3!D2r(6 zRY??bWsV|l%qe5*sPc`wHHBqiMP289M_e*ji5dlOwKHai6nAZV8i3EW?hm^O4XfbP z!9Fr}?-NnyyyKKpqhd|Q81|Fe@o7C%>g4;giN?Y|=#Ab3Zi7FTL(0H`UO{ehK*-}| z*Aa_q7>Vnn$)5MqBB>r@Cc%fFt8Zi5Myw|&D^dFtj zl}b;d7nk$?(&dD#P8idF>u%}$b0AV7ppvqIURVQcg#n2!5QWDqZs)?Qkkmc38a<+<`GKoiHf#-O^Gj*HEaG@^INGK}SV9*ub+nm^A2e#j90E`{CEM zTD{R2y>}L+tXY@m4C%ECu?XXYi{??b<<%io{Ho#o`Ceh8^Y+lo+VQaX=e(oG=ar(O z+jjozp&g6-{wYyZUH9%POTM1)z=zN{fCJcsCgN8a5i)*|@Pa7t=4++1DD0X^%Z~(Z zh^Q(_d9o}B5RPp5;sFKXz;-7n3@ASBr+Q~$tg7yLk0TqJjVMO-l{K=l_8W)&@ix*$ z264d0q1YIO+PuDFLxN=wZRN+%+-<1_DrAEcjUIes zvt<}md_d3yCUBfCNJ9@*j>}_NL7-`2#@@g&jB$Jzrff*YN0e-~6W-^5ozpx5VKX)* zLlr(pMM0FePMG7BqlkfRCeS%Ju@r0x{kROcKk->-bw*dWYntM!oJ*3`wVyaNvie_d z&F*(L=?2O%7SqjGc|dn^{KD?c?#vbFmYynyV2B+W9PBJlQX4&Fr{zUr2WI~%9FogJ zC#cTvlUI1XRq-ib+sW>}e50eo{?b{1jrV`%YZ^jOfloW#(9z!XN(e>RWj(>#NiHG+ zJGprg%W*7AQ;9rPUf|hSkU&AeJ8&~@#yfDc2O=qdh^I!YSQP~(WJG8f?aA}4DPw|r z44I;+!p5V(QV{IctM1X@8kCTen;GMI$v}x-MXD1jTc)!5#k|8=>@PPBd=={3td3|u zNh_<%a-PNQs5&DZUFr6jse18Bca}LkAyx8G7iLaZ2^~IHrxe7PF8%vj5U-w7J6M1#4GEBC-yh(9cW&EL$9K1p`fE2TmL8dbl+pSrCcTh}MivPe~h zu@~HR=JQ=u^H_ePZV2<0E~!qOx13_A9G-Ga>~w1bE+>LO5_A1FLpFIT+RKA<5AxAM zoL8fToxATBqtBs|1iNhpVHov0sm6NIB3oKD67{enF}NB*-)r)Kw!JwMQ&l6;08y}j z#6WJFtuJlGi<~>>5?FLT^~|VU`!n{m2xB{zO#;rOAyNu1M7E6;R_IjlDo@KwNygay znrVPh4J%_a@mksDXf;7?tB+T2gn}kCsyZycM*>++?D~4T zOuAqg*D#EkfbwTPYh4*E3_2kPq}Iusjr{J&)($9|L~FS=l#7!4g>^I)9?OmUUU@tR zH1bVZEA0hojBmct)**-7$(H2u#9!#xv2Go0OpA)?wTp8Ylg8VaOBryz!HI>X-*IxU!$z0mKMmXIhhEMg?v8niL+6`yFLYO3Bshp zenmFRKVSek0SGWf0K`r9U98`#@;M!LvCDPsWaS2w3W6Ph*J6mU@jwvReI2Z<2~NY+ z&r4Qlfu{tGK>As+1f1J%#LpUqsB9^`w2s={#p@aqT&ct`G{dg}W%y-c&i(GpPzBqm=KctLZJybFMzfun9E9L zN+nH+yX&9Xl)z-FL_wfS4{xV(0z{pL523Qu{1hsi%gYX? zND!B01@_o#K12WM`;)zyLs^^UA?&nT+SNMT$A7L7I4OZlzz0+QS_UqEh(IK+`hB_) z4#U`Ymzq>1K)x@;_W>uE#`p=)ze?qMOEmtgmF|17bLXlgLfn@ewC>v4r+^Cm)Ab5V zwJc`Sv(tN3OMM=yZfI$Rw54tNt`BT(YSde&X(Tu|Z=LXK1>bQVxbeB*2d_FB;LO=L zTm~2CHoJG@klRdq$6M|`F;6kGE-%)B?T!vm-R_+0csrNJE+6I15*%d-6PA0wOs2oE;y(&-)^A7 zEQij&T8{*W1|qh3g+p=pKF?j~lhS zo1t}Qs6>d^?TYH%uc_RrWRps5IIm`wo*KV9rGEj6!G|n%MJ;RnKH7Q5mg@9cTZ?Mc zaGi6Urh->w@sTgw$bUPTlkoi%v?Wn!W8v8c-$!x+D%)()FH^A7ON&eS5-XFrjVonn zRV!)fD5AXjYgDTnu?f0f!OOU}6G-h``t5J9P$(z;$vXJ82KT`fn_eEMAC|coFa&QL zAg7^kBMQeU0DmOx2q&%-ENkt3{MFA!@GHcoPq+lFaVE$44ZxPPY#JqArD_f84I|_47 zh;R^m$KS^@Wr9E;3;JP=6Gg+Y6XGBLkU$($J{f)ueeWb~gL?gGWn%X0cb(Z}sh%W* zTS1$%?O*&Ub&}Q;w|Od#+WZnUxJYv0iQ)kPq;$7Z!5D@D4gyo14-$(+Zc_Zu=rbauAtlBAFyT7fYy@$YAccR>K`WGpXnK}aIjYAGD*H z@^5^;%rr04w~4%g8uarcx)X}YVq=M|Jv&Rp=`q>Vud{&jXh&ZZsQC|W*t8n8Cf#Os zV9I79ul?x!b+ZX$Cc8$9d&ly+3DJpKW*Be|dj7OK^BzWQFFf7)fyYbvLlA;_xinOp z=Daq{v@MOo&N(HZ6ZLG{H+FU^IYbKwsW(E)B0rri$5Wjea%#zWYf^z!;I){k#nUs@ zhP|*C_MW{_{R4HoM47fCmGNpm<0?nfLr{{gVRcnA4Ypd#r!(j(N#-}>(HeM@se490 z?uxB*m1^3SaFwCE5kfT0>s}N#rYLZC(H-X*V8BB_rY^Z9Qr*}{b-XT{UQceF@AF_jUei=>s7UhLuduT}gf2rfNhFz);lzO*XT#sl zq9;j$pafJ1Ggu>LqOXpo%r;sI!=Y(96P8P#0<3+?+A{A3c-Uy&<#SIg>gYTeT5_B) zN-^hN6r=fE^}7u12VxMZuu>t6355=w(8^gQv>VfH3$?Lh zI!1D3wf5h_KwHhc^1Jh98Tcv_n%8xb3Wa)VQ1m>K^*nOCoDWPxEU6$=K}AXF%#-_W z1dASUvTn{)`GODx0fP{PE+WtVDVZFYocbV3RX_4^xOB8I`NaZw`mmS!B4uA6V5GZz z!Pc#!Ov!e-zbmcmRAp^Z8snsTC=!9PAgih$_)8gs~Bh~dv5X^GF%v{QR z<2iD_hWoI2`WDYy9S^--sc5sTT{30w{765Wh%F9TbD`)f=gH*T1JKEfEjEU6^T>&9 zCV^o5Tl<;dir>*^Lc?QrN@kgjy_R17-r%5S`%P&IijAl`ZT_*c&|RsyyDGo&L-Xo& zKz`Tv*%~$9gwP|#5(5hmOuxcD>e(qBsSHOQ@s`r1)0-uRca_&u&?o}^Y`ZQ=7p;1y zC($cu6$bv%$x=X?wE5-pfmCcpUDq&7dCifQ`@N2HMM2Y)Yw%;vv$_Z^jbk+!jL=)lGMhAohdfo` zo!)VaeGxU1o)DEXDvi+|jw@a6ZoE1oUK zn)>Btc24ZxwG$4FoAso}K><&>m~f((Uq{X9qc;9uCZ#si*>L$wo&==svg7!^9hj!q zap|Spy)M^Z_6XQbnUI;fDS9AFJMHmt=DcRuVaIO1nme- z18R_AY#+~NouepTTZdDwAYfZGT8m0(?XERo9c)Ny!qQx0AzxEOT_L0fuLukyFc2N} z+Z;v9vKGoEGTRH_Qfogc_>2w!+zJ^bUrt}X$F z==XXcTWMa85X9$t|5q-*2!eMA;*waQYwymWwc4<H0H111#%$ zVlrb~x;R`?7)&>9@w_ArMftf$SsdsI?-FHD`0rAjc9Ae+9{MDV?U=!OEEypX^NKUVl!%9raIhmQk6H4FVt`)5XC? zv8a9~PW`4-)Em3s!E&u9yx)MJ0wZ9pJn=kSu!Z)1p~Jrr9noPSWOpJG=r^rSqrv6% z4)qyfoD(2KmFz*ZM#^W`Q8$7mhvJbDLA*2Y$r?-JBHM0UkTiZ?zB2Pa6In@E2=DK~Us@rW$9rYidkZ1av z_jRLuhiWdYN8PJ8T|e$V`Shd;yJ6qRjVa$cjiV&Hc3mjSqV8eYo@l|UBF}QduhDP| zS%t?bb7kA&tZ~3c-7Y{CaT>8y6uYU~#v!jH+jP=mE{bY8*mRq&;Mq5uYBy<*dhD?G zcU$_6ZTeKcd1IXGtn|3Ib1*&!hIAM)n5cO5I9BZ@rsEtgDrdID7?sEQ;NZhw%}DJ7 z#;n5H9V=htf=);MyETElQE9InbBA|h8`S*B_GPzLs^TlomeBni(_AFo)lhoC0T+55 zT@BNCiz?f;uBda0;xABsQ-&bhK@Q;_ORP-_8izR_zxHMryaYv)(5q`bcwjYU&od_A0<|WATD` zZQ%O@v04qbopA2?y|Oa}A=TT)1mE+y(+MnW6x%76wrQxO2&7!pBdYaX62%~S*X@L! zM9Y^OHp5!e5C|s;BMy~nnw4vVPAW%?2_g|(%+mBYpWz&4Z zwGFJ%3dDe+^Jm$!NG7j%7QBV_J|sz0NXvL|c{GQwJoS;5#bQUmKtwgkLsPB9sQcEj=1V;-bKX?s=6Ak)S#d5%F2Qo z__PX)Hh~`+?e&4-Oc9=E@zD1@Wda3Gi>QdsB;7TgNQCpxsk?RFjx^5|TGgz!c3p3v zuw~;s>ia&`;Uc2-1_D$`Yh-P=wz}cqNLgmg(1lGWWx9dj)hrgHX3Q2EA`?6a2&tkH zq+p{$%fwTdrtRZp*bBsDLgNOly=Gx~*Ic787n63z*jg1f$69Th2dkjD^LtWSaChU5 zx0WdG5JrQKP94E$~Ol2m* zu^qQ*PFL!ZZ86qAo@q)yT(3aKfkRP+I~$2aZWOd_th+leIr3p;62)?KlCVKkpICAP zj-DoWr>U2kN8@(b**s`bUdxKAa-a$sWcy*OrFKq9vH{alqoyTOvc{)y=_1CemeQnc z4>wB+(VVPx5r&WPZzQ5C+ZHQb2%2T{%*whl?^5p2dT5mkEKAKksAj45i+M-F-PBOA zuuhJhR9Hb&r+_SSe|91vic`A8IfrOT%+ zbStNGm<&o#urQ?B4^{zM`g{F`B?Mn<*-}@t@ju0>!1~OSR?o!LH}9#Tw+7 z4cf57YTx!U8x}#1VJDFXLJ%3x9uxEohNR00xwqD1P@v>hcj6*+qMhXcM z!6G8Uh^t=Yi+JUUNm^(PHd~02HJ4u+TG9_aV=aS51|aHvS!>U6QU(_E)T^M%1Z+Z88 zTW#rF9cPFAa>H5SN(n$u4l(J4O{g%iND-BZS`egBm;#5}ZisS`$o7e#5~*3McM;V- zd3%z8l(f#0BMi~sKIC`8SrH>*4zX1G4+&5M-;^;?B1inY*Crz&Km4TIBMV55Vh;b0 zuPtELX2{&%*aSZZc*4)EhL0Tis(>U9A!G?;3JGmxhWHH=DdH7<*Vktpss5doN&)A{ z`$S{1F$>snN#vRpV{c6AJ>T4SQ=RG{1?=uAiA>Azn}WCyQZA3WOwV2q*Yvw3nB=

    >j*3%Sw68c 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 diff --git a/docs/assets/inter-roman-vietnamese.CpqCnS2H.woff2 b/docs/assets/inter-roman-vietnamese.CpqCnS2H.woff2 deleted file mode 100644 index 2df3edeb220ffc356ad4377decd192648641c76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14184 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 Reference

  • The REST API is bearer-token protected except for /health, GitHub webhook delivery, and public auth start/poll endpoints.

    Use the live OpenAPI document when authenticated:

    sh
    export GITTENSORY_API_URL="https://your-gittensory-api-origin.example"
    -curl "$GITTENSORY_API_URL/openapi.json" \\
    -  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

    Contributor APIs

    EndpointPurpose
    GET /v1/contributors/:login/profileContributor evidence profile using official Gittensor stats first when available.
    GET /v1/contributors/:login/decision-packCanonical private miner decision payload for MCP and internal clients.
    GET /v1/contributors/:login/repos/:owner/:repo/decisionRepo-specific decision extracted from the decision pack.

    Repo APIs

    EndpointPurpose
    GET /v1/reposKnown registered and installed repositories.
    GET /v1/repos/:owner/:repoRepository metadata.
    GET /v1/repos/:owner/:repo/intelligenceCanonical repository intelligence bundle.
    GET /v1/repos/:owner/:repo/pulls/:number/maintainer-packetPR-specific maintainer review packet.
    GET /v1/repos/:owner/:repo/pulls/:number/reviewabilityPrivate PR reviewability score and maintainer action.

    Local And Preflight APIs

    EndpointPurpose
    POST /v1/local/branch-analysisMCP-oriented local branch analysis from structured metadata.
    POST /v1/preflight/prPlanned PR metadata preflight.
    POST /v1/preflight/local-diffLocal-diff metadata preflight.

    Ops APIs

    EndpointPurpose
    GET /v1/readinessService health, signal fidelity, secrets presence, and installation health summary.
    GET /v1/sync/statusRepo sync segments, GitHub totals, rate-limit state, and signal fidelity.
    GET /v1/installationsGitHub App installations and health records.
    GET /v1/installations/:id/healthExact installation permission/event remediation context.

    MCP Endpoint

    POST /mcp exposes remote MCP over Streamable HTTP style requests. The local npm wrapper is still the preferred MCP user surface.

    `,14)])])}const k=e(s,[["render",d]]);export{b as __pageData,k as default}; diff --git a/docs/assets/reference_api.md.CvVunwm0.lean.js b/docs/assets/reference_api.md.CvVunwm0.lean.js deleted file mode 100644 index 3f2b9e0d26..0000000000 --- a/docs/assets/reference_api.md.CvVunwm0.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as e,S as a,j as i,m as r}from"./chunks/framework.BXgR76oC.js";const b=JSON.parse('{"title":"API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"reference/api.md","filePath":"reference/api.md","lastUpdated":1779781690000}'),s={name:"reference/api.md"};function d(n,t,o,l,p,h){return a(),i("div",null,[...t[0]||(t[0]=[r("",14)])])}const k=e(s,[["render",d]]);export{b as __pageData,k as default}; diff --git a/docs/assets/security_privacy.md.CHSODDHk.js b/docs/assets/security_privacy.md.CHSODDHk.js deleted file mode 100644 index 47d8cfe2c9..0000000000 --- a/docs/assets/security_privacy.md.CHSODDHk.js +++ /dev/null @@ -1 +0,0 @@ -import{c as a,S as i,j as t,m as r}from"./chunks/framework.BXgR76oC.js";const h=JSON.parse('{"title":"Privacy And Security","description":"","frontmatter":{},"headers":[],"relativePath":"security/privacy.md","filePath":"security/privacy.md","lastUpdated":1779780644000}'),s={name:"security/privacy.md"};function l(n,e,o,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r('

    Privacy And Security

    Gittensory handles contribution intelligence, not wallets or private source code.

    No PAT Storage

    MCP login uses GitHub OAuth Device Flow. The backend exchanges the GitHub token for a Gittensory session token and stores only the hashed Gittensory token server-side.

    No Source Upload

    Local MCP branch analysis sends metadata only:

    • repo full name
    • branch name
    • base and head refs
    • changed file paths
    • additions and deletions
    • linked issue references
    • commit messages
    • validation summaries

    Source contents are not uploaded in v1. GITTENSORY_UPLOAD_SOURCE=true fails closed.

    Public Output Boundaries

    Public comments and public-safe PR packets must not include:

    • wallets
    • hotkeys
    • raw trust scores
    • public score estimates
    • public reward estimates
    • farming language
    • public shaming

    Private API and MCP responses can include scoreability and reward/risk reasoning because they are authenticated private outputs.

    Rate Limiting

    Gittensory uses route classes:

    • strict: auth routes
    • normal: read APIs and MCP tools
    • expensive: branch analysis, scoring preview, decision-pack refresh, signal refresh

    Rate-limited responses return 429 with retry metadata.

    GitHub App Boundaries

    The GitHub App is advisory-only. It does not auto-label, close, merge, or rewrite contributor work.

    ',18)])])}const b=a(s,[["render",l]]);export{h as __pageData,b as default}; diff --git a/docs/assets/security_privacy.md.CHSODDHk.lean.js b/docs/assets/security_privacy.md.CHSODDHk.lean.js deleted file mode 100644 index 5edec4fbb5..0000000000 --- a/docs/assets/security_privacy.md.CHSODDHk.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as a,S as i,j as t,m as r}from"./chunks/framework.BXgR76oC.js";const h=JSON.parse('{"title":"Privacy And Security","description":"","frontmatter":{},"headers":[],"relativePath":"security/privacy.md","filePath":"security/privacy.md","lastUpdated":1779780644000}'),s={name:"security/privacy.md"};function l(n,e,o,c,d,u){return i(),t("div",null,[...e[0]||(e[0]=[r("",18)])])}const b=a(s,[["render",l]]);export{h as __pageData,b as default}; diff --git a/docs/assets/style.DbhuNsMp.css b/docs/assets/style.DbhuNsMp.css deleted file mode 100644 index 8e7f44c3bc..0000000000 --- a/docs/assets/style.DbhuNsMp.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.CD0kT8R4.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.Dsf7YjP7.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.CpqCnS2H.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.Dl_ayf4-.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Cy4MYw_J.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.D7dRslh9.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DNcpQ8QC.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BI5UxJD-.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.DytegdRQ.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.COaG5lWR.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BeNbU08G.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.CD0kT8R4.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CFAEQ5Ow.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.Dsf7YjP7.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.CpqCnS2H.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.Dl_ayf4-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter4CJK;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Cy4MYw_J.woff2) format("woff2");unicode-range:U+0000-007D,U+007F-00B6,U+00B8-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-2012,U+2016-2017,U+201A-201B,U+201E-2025,U+2027-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext._dlW9xFb.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.D7dRslh9.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.Ct-Tf2bq.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DNcpQ8QC.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BI5UxJD-.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.DytegdRQ.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter4CJK;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.COaG5lWR.woff2) format("woff2");unicode-range:U+0000-007D,U+007F-00B6,U+00B8-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-2012,U+2016-2017,U+201A-201B,U+201E-2025,U+2027-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", -apple-system, BlinkMacSystemFont, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}[lang]:where(:lang(zh,ja)){--vp-font-family-base: "Inter4CJK", -apple-system, BlinkMacSystemFont, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}[lang]:where(:lang(zh,ja,ko)) h1,[lang]:where(:lang(zh,ja,ko)) h2,[lang]:where(:lang(zh,ja,ko)) h3,[lang]:where(:lang(zh,ja,ko)) h4,[lang]:where(:lang(zh,ja,ko)) h5,[lang]:where(:lang(zh,ja,ko)) h6,[lang]:where(:lang(zh,ja,ko)) li,[lang]:where(:lang(zh,ja,ko)) p{line-break:strict}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media(min-width:960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-2);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-2);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:lang(ja){--vp-code-copy-copied-text-content: "コピー完了"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@layer __vitepress_base{@media(prefers-reduced-motion:reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-autospace:normal;text-spacing-trim:normal}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono);text-autospace:no-autospace}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 12H3m14 6H3M21 6H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14m-7-7l7 7l-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z'/%3E%3C/g%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14m-7-7v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/g%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3a6 6 0 0 0 9 9a9 9 0 1 1-9-9'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/g%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 8l6 6m-7 0l6-6l2-3M2 5h12M7 2h1m14 20l-5-10l-5 10m2-4h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2c-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/g%3E%3C/svg%3E")}.vpi-sparkles{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.8'%3E%3Cpath d='M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594zM20 2v4m2-2h-4'/%3E%3Ccircle cx='4' cy='20' r='2'/%3E%3C/g%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7m-7 5h7m-7 6h7m-7 5h7'/%3E%3C/g%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm2 4l6 6m0-6l-6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3Cpath d='m9 10l-5 5l5 5'/%3E%3C/g%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/g%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14l2 2l4-4'/%3E%3C/g%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .shiki span{color:var(--shiki-dark, inherit)}html:not(.dark) .shiki span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media(min-width:640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media(min-width:768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc img,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0!important;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group,.vp-doc .custom-block [class*=vp-code-block]{margin-top:8px}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc .custom-block .vp-code-group div[class*=language-],.vp-doc .custom-block [class*=vp-code-block] div[class*=language-]{margin-top:0!important}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media(min-width:640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media(max-width:639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto;text-align:left}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;white-space:nowrap;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge,.vp-doc h2>.VPBadge{margin:0 0 0 2px;vertical-align:middle}.vp-doc h2>.VPBadge{padding:0 8px}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;inset:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media(min-width:1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-829df670]{padding:64px 24px 96px;text-align:center}@media(min-width:768px){.NotFound[data-v-829df670]{padding:96px 32px 168px}}.code[data-v-829df670]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-829df670]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-829df670]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-829df670]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-829df670]{padding-top:20px}.link[data-v-829df670]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-829df670]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-1ce71065]{position:relative;z-index:1}.nested[data-v-1ce71065]{padding-right:16px;padding-left:16px}.outline-link[data-v-1ce71065]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-1ce71065]:hover,.outline-link.active[data-v-1ce71065]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-1ce71065]{padding-left:13px}.VPDocAsideOutline[data-v-60d5052e]{display:none}.VPDocAsideOutline.has-outline[data-v-60d5052e]{display:block}.content[data-v-60d5052e]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-60d5052e]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-60d5052e]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-3c637f39]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media(min-width:640px){.VPLastUpdated[data-v-3c637f39]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media(min-width:640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media(min-width:640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-7011f0d8]{padding:32px 24px 96px;width:100%}@media(min-width:768px){.VPDoc[data-v-7011f0d8]{padding:48px 32px 128px}}@media(min-width:960px){.VPDoc[data-v-7011f0d8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-7011f0d8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-7011f0d8]{max-width:752px}}@media(min-width:1280px){.VPDoc .container[data-v-7011f0d8]{display:flex;justify-content:center}.VPDoc .aside[data-v-7011f0d8]{display:block}}@media(min-width:1440px){.VPDoc:not(.has-sidebar) .content[data-v-7011f0d8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-7011f0d8]{max-width:1104px}}.container[data-v-7011f0d8]{margin:0 auto;width:100%}.aside[data-v-7011f0d8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-7011f0d8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-7011f0d8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-7011f0d8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-7011f0d8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%);pointer-events:none}.aside-content[data-v-7011f0d8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-7011f0d8]{position:relative;margin:0 auto;width:100%}@media(min-width:960px){.content[data-v-7011f0d8]{padding:0 32px 128px}}@media(min-width:1280px){.content[data-v-7011f0d8]{order:1;margin:0;min-width:640px}}.content-container[data-v-7011f0d8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-7011f0d8]{max-width:688px}.VPButton[data-v-01bff58b]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-01bff58b]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-01bff58b]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-01bff58b]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-01bff58b]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-01bff58b]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-01bff58b]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-01bff58b]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-01bff58b]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-01bff58b]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-01bff58b]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-01bff58b]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-01bff58b]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-e62e4946]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media(min-width:640px){.VPHero[data-v-e62e4946]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media(min-width:960px){.VPHero[data-v-e62e4946]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-e62e4946]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media(min-width:960px){.container[data-v-e62e4946]{flex-direction:row}}.main[data-v-e62e4946]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-e62e4946]{text-align:center}@media(min-width:960px){.VPHero.has-image .container[data-v-e62e4946]{text-align:left}}@media(min-width:960px){.main[data-v-e62e4946]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-e62e4946]{max-width:592px}}.heading[data-v-e62e4946]{display:flex;flex-direction:column}:is(.name,.text)[data-v-e62e4946]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}:is(.name,.text)[data-v-e62e4946]:lang(ja){font-feature-settings:"palt";word-break:auto-phrase}.VPHero.has-image .name[data-v-e62e4946],.VPHero.has-image .text[data-v-e62e4946]{margin:0 auto}.name[data-v-e62e4946]{color:var(--vp-home-hero-name-color)}.clip[data-v-e62e4946]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media(min-width:640px){.name[data-v-e62e4946],.text[data-v-e62e4946]{max-width:576px;line-height:56px;font-size:48px}}@media(min-width:960px){.name[data-v-e62e4946],.text[data-v-e62e4946]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-e62e4946],.VPHero.has-image .text[data-v-e62e4946]{margin:0}}.tagline[data-v-e62e4946]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-e62e4946]{margin:0 auto}@media(min-width:640px){.tagline[data-v-e62e4946]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media(min-width:960px){.tagline[data-v-e62e4946]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-e62e4946]{margin:0}}.actions[data-v-e62e4946]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-e62e4946]{justify-content:center}@media(min-width:640px){.actions[data-v-e62e4946]{padding-top:32px}}@media(min-width:960px){.VPHero.has-image .actions[data-v-e62e4946]{justify-content:flex-start}}.action[data-v-e62e4946]{flex-shrink:0;padding:6px}.image[data-v-e62e4946]{order:1;margin:-76px -24px -48px}@media(min-width:640px){.image[data-v-e62e4946]{margin:-108px -24px -48px}}@media(min-width:960px){.image[data-v-e62e4946]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-e62e4946]{position:relative;margin:0 auto;width:320px;height:320px}@media(min-width:640px){.image-container[data-v-e62e4946]{width:392px;height:392px}}@media(min-width:960px){.image-container[data-v-e62e4946]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-e62e4946]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media(min-width:640px){.image-bg[data-v-e62e4946]{width:256px;height:256px}}@media(min-width:960px){.image-bg[data-v-e62e4946]{width:320px;height:320px}}[data-v-e62e4946] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;width:100%;height:100%;object-fit:contain;transform:translate(-50%,-50%)}@media(min-width:640px){[data-v-e62e4946] .image-src{max-width:256px;max-height:256px}}@media(min-width:960px){[data-v-e62e4946] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-e5511d04]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-e5511d04]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-e5511d04]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-e5511d04]>.VPImage{margin-bottom:20px}.icon[data-v-e5511d04]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-e5511d04]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-e5511d04]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}ul.details[data-v-e5511d04]{list-style-type:disc;padding-left:14px}.link-text[data-v-e5511d04]{padding-top:8px}.link-text-value[data-v-e5511d04]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-e5511d04]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media(min-width:640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media(min-width:960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media(min-width:640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media(min-width:768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media(min-width:960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media(min-width:640px){.container[data-v-8e2d4988]{padding:0 48px}}@media(min-width:960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-bb6342a6]{margin-bottom:96px}@media(min-width:768px){.VPHome[data-v-bb6342a6]{margin-bottom:128px}}.VPContent[data-v-9dc86fcc]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-9dc86fcc]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-9dc86fcc]{margin:0}@media(min-width:960px){.VPContent[data-v-9dc86fcc]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-9dc86fcc]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media(min-width:1440px){.VPContent.has-sidebar[data-v-9dc86fcc]{padding-right:calc((100% - var(--vp-layout-max-width)) / 2);padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c3855bb3]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c3855bb3]{display:none}.VPFooter[data-v-c3855bb3] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c3855bb3] a:hover{color:var(--vp-c-text-1)}@media(min-width:768px){.VPFooter[data-v-c3855bb3]{padding:32px}}.container[data-v-c3855bb3]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c3855bb3],.copyright[data-v-c3855bb3]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown button[data-v-0bf0e06f]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-0bf0e06f]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-0bf0e06f]{color:var(--vp-c-text-1)}.icon[data-v-0bf0e06f]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media(min-width:960px){.VPLocalNavOutlineDropdown button[data-v-0bf0e06f]{font-size:14px}.icon[data-v-0bf0e06f]{font-size:16px}}.open>.icon[data-v-0bf0e06f]{transform:rotate(90deg)}.items[data-v-0bf0e06f]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media(min-width:960px){.items[data-v-0bf0e06f]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-0bf0e06f]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-0bf0e06f]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-0bf0e06f]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-0bf0e06f]{transition:all .2s ease-out}.flyout-leave-active[data-v-0bf0e06f]{transition:all .15s ease-in}.flyout-enter-from[data-v-0bf0e06f],.flyout-leave-to[data-v-0bf0e06f]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-db738f89]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-db738f89]{position:fixed}@media(min-width:960px){.VPLocalNav[data-v-db738f89]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-db738f89]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-db738f89]{display:none}}@media(min-width:1280px){.VPLocalNav[data-v-db738f89]{display:none}}.container[data-v-db738f89]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-db738f89]{display:flex;align-items:center;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-db738f89]:hover{color:var(--vp-c-text-1);transition:color .25s}@media(min-width:960px){.menu[data-v-db738f89]{display:none}}.menu-icon[data-v-db738f89]{margin-right:8px;font-size:14px}.menu[data-v-db738f89],[data-v-db738f89] .VPLocalNavOutlineDropdown>button{padding:12px 24px 11px}@media(min-width:768px){.menu[data-v-db738f89],[data-v-db738f89] .VPLocalNavOutlineDropdown>button{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media(min-width:1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-867c295f]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-867c295f]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);text-align:left;white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-867c295f]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-867c295f]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-1963e1bb]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-1963e1bb]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-1963e1bb]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-1963e1bb]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-25a6cce8]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-25a6cce8] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-25a6cce8] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-25a6cce8] .group:last-child{padding-bottom:0}.VPMenu[data-v-25a6cce8] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-25a6cce8] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-25a6cce8] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-25a6cce8] .action{padding-left:24px}.VPFlyout[data-v-42cb505d]{position:relative}.VPFlyout[data-v-42cb505d]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-42cb505d]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-42cb505d]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-42cb505d]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-42cb505d]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-42cb505d]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-42cb505d],.button[aria-expanded=true]+.menu[data-v-42cb505d]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-42cb505d]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-42cb505d]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-42cb505d]{margin-right:0;font-size:16px}.text-icon[data-v-42cb505d]{margin-left:4px;font-size:14px}.icon[data-v-42cb505d]{font-size:20px;transition:fill .25s}.menu[data-v-42cb505d]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-591a6b30]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-591a6b30]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-591a6b30]>svg,.VPSocialLink[data-v-591a6b30]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-d07f11e6]{display:flex;justify-content:center}.VPNavBarExtra[data-v-562c832a]{display:none;margin-right:-12px}@media(min-width:768px){.VPNavBarExtra[data-v-562c832a]{display:block}}@media(min-width:1280px){.VPNavBarExtra[data-v-562c832a]{display:none}}.trans-title[data-v-562c832a]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-562c832a],.item.social-links[data-v-562c832a]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-562c832a]{min-width:176px}.appearance-action[data-v-562c832a]{margin-right:-2px}.social-links-list[data-v-562c832a]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media(min-width:768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-6dd25bb8]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-6dd25bb8],.VPNavBarMenuLink[data-v-6dd25bb8]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-39714824]{display:none}@media(min-width:768px){.VPNavBarMenu[data-v-39714824]{display:flex}}.VPNavBarAskAiButton[data-v-4eb17e89]{display:flex;align-items:center;height:var(--vp-nav-height);padding:8px 14px;font-size:20px}@media(min-width:768px){.VPNavBarAskAiButton[data-v-4eb17e89]{height:auto;padding:11.5px;transition:color .3s ease;background-color:var(--vp-c-bg-alt);border-radius:8px;font-size:15px;color:var(--vp-c-text-2)}.VPNavBarAskAiButton[data-v-4eb17e89]:hover{color:var(--vp-c-brand-1)}}.VPNavBarSearchButton[data-v-baa3be99]{display:flex;align-items:center;gap:8px;height:var(--vp-nav-height);padding:8px 14px;font-size:20px}.text[data-v-baa3be99],.keys[data-v-baa3be99],:root.mac .key-ctrl[data-v-baa3be99],:root:not(.mac) .key-cmd[data-v-baa3be99]{display:none}kbd[data-v-baa3be99]{font-family:inherit;font-weight:500}@media(min-width:768px){.VPNavBarSearchButton[data-v-baa3be99]{height:auto;padding:8px 12px;background-color:var(--vp-c-bg-alt);border-radius:8px;font-size:14px;line-height:1;color:var(--vp-c-text-2)}.text[data-v-baa3be99]{display:inline;font-size:13px}.keys[data-v-baa3be99]{display:flex;align-items:center;gap:4px;padding:4px 6px;border:1px solid var(--vp-c-divider);border-radius:4px;font-size:12px}}.VPNavBarSearch[data-v-2fc7f2c6]{display:flex;align-items:center}@media(min-width:768px){.VPNavBarSearch[data-v-2fc7f2c6]{gap:8px;flex-grow:1;padding-left:24px}}@media(min-width:960px){.VPNavBarSearch[data-v-2fc7f2c6]{padding-left:32px}}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media(min-width:1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-1e38c6bc]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media(min-width:960px){.title[data-v-1e38c6bc]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1e38c6bc]{border-bottom-color:var(--vp-c-divider)}}[data-v-1e38c6bc] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-fafa8c23]{display:none}@media(min-width:1280px){.VPNavBarTranslations[data-v-fafa8c23]{display:flex;align-items:center}}.title[data-v-fafa8c23]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-9ca1369d]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-9ca1369d]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-9ca1369d]:not(.home){background-color:var(--vp-nav-bg-color)}@media(min-width:960px){.VPNavBar[data-v-9ca1369d]:not(.home){background-color:transparent}.VPNavBar[data-v-9ca1369d]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-9ca1369d]{padding:0 8px 0 24px}@media(min-width:768px){.wrapper[data-v-9ca1369d]{padding:0 32px}}@media(min-width:960px){.VPNavBar.has-sidebar .wrapper[data-v-9ca1369d]{padding:0}}.container[data-v-9ca1369d]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-9ca1369d],.container>.content[data-v-9ca1369d]{pointer-events:none}.container[data-v-9ca1369d] *{pointer-events:auto}@media(min-width:960px){.VPNavBar.has-sidebar .container[data-v-9ca1369d]{max-width:100%}}.title[data-v-9ca1369d]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media(min-width:960px){.VPNavBar.has-sidebar .title[data-v-9ca1369d]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media(min-width:1440px){.VPNavBar.has-sidebar .title[data-v-9ca1369d]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-9ca1369d]{flex-grow:1}@media(min-width:960px){.VPNavBar.has-sidebar .content[data-v-9ca1369d]{position:relative;z-index:1;padding-left:var(--vp-sidebar-width);padding-right:32px}}@media(min-width:1440px){.VPNavBar.has-sidebar .content[data-v-9ca1369d]{padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));padding-right:calc((100% - var(--vp-layout-max-width)) / 2 + 32px)}}.content-body[data-v-9ca1369d]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media(min-width:960px){.VPNavBar:not(.home.top) .content-body[data-v-9ca1369d]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-9ca1369d]{background-color:transparent}.content-body[data-v-9ca1369d]{margin-right:-100vw;padding-right:100vw}}.menu+.translations[data-v-9ca1369d]:before,.menu+.appearance[data-v-9ca1369d]:before,.menu+.social-links[data-v-9ca1369d]:before,.translations+.appearance[data-v-9ca1369d]:before,.appearance+.social-links[data-v-9ca1369d]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-9ca1369d]:before,.translations+.appearance[data-v-9ca1369d]:before{margin-right:16px}.appearance+.social-links[data-v-9ca1369d]:before{margin-left:16px}.social-links[data-v-9ca1369d]{margin-right:-8px}.divider[data-v-9ca1369d]{width:100%;height:1px}@media(min-width:960px){.VPNavBar.has-sidebar .divider[data-v-9ca1369d]{padding-left:var(--vp-sidebar-width)}}@media(min-width:1440px){.VPNavBar.has-sidebar .divider[data-v-9ca1369d]{padding-left:calc((100% - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-9ca1369d]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-9ca1369d]{background-color:var(--vp-c-gutter)}@media(min-width:960px){.VPNavBar:not(.home.top) .divider-line[data-v-9ca1369d]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-9ca1369d]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-b924ab8a]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-b924ab8a]:hover,.VPNavScreenMenuLink.active[data-v-b924ab8a]{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-ecf4b472]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-ecf4b472]:hover,.VPNavScreenMenuGroupLink.active[data-v-ecf4b472]{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b7a798b]{display:block}.title[data-v-4b7a798b]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-956364f9]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-956364f9]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-956364f9]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-956364f9]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-956364f9]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-956364f9]{transform:rotate(45deg)}.button[data-v-956364f9]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-956364f9]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-956364f9]{transition:transform .25s}.group[data-v-956364f9]:first-child{padding-top:0}.group+.group[data-v-956364f9],.group+.item[data-v-956364f9]{padding-top:4px}.VPNavScreenTranslations[data-v-a4d9b172]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-a4d9b172]{height:auto}.title[data-v-a4d9b172]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-a4d9b172]{font-size:16px}.icon.lang[data-v-a4d9b172]{margin-right:8px}.icon.chevron[data-v-a4d9b172]{margin-left:4px}.list[data-v-a4d9b172]{padding:4px 0 0 24px}.link[data-v-a4d9b172]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-05f3d7bc]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-05f3d7bc],.VPNavScreen.fade-leave-active[data-v-05f3d7bc]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-05f3d7bc],.VPNavScreen.fade-leave-active .container[data-v-05f3d7bc]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-05f3d7bc],.VPNavScreen.fade-leave-to[data-v-05f3d7bc]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-05f3d7bc],.VPNavScreen.fade-leave-to .container[data-v-05f3d7bc]{transform:translateY(-8px)}@media(min-width:768px){.VPNavScreen[data-v-05f3d7bc]{display:none}}.container[data-v-05f3d7bc]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-05f3d7bc],.menu+.appearance[data-v-05f3d7bc],.translations+.appearance[data-v-05f3d7bc]{margin-top:24px}.menu+.social-links[data-v-05f3d7bc]{margin-top:16px}.appearance+.social-links[data-v-05f3d7bc]{margin-top:16px}.VPNav[data-v-9f75dce3]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media(min-width:960px){.VPNav[data-v-9f75dce3]{position:fixed}}.VPSidebarItem.level-0[data-v-d81de50c]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-d81de50c]{padding-bottom:10px}.item[data-v-d81de50c]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-d81de50c]{cursor:pointer}.indicator[data-v-d81de50c]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-d81de50c],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-d81de50c],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-d81de50c],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-d81de50c]{background-color:var(--vp-c-brand-1)}.link[data-v-d81de50c]{display:flex;align-items:center;flex-grow:1}.text[data-v-d81de50c]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-d81de50c]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-d81de50c],.VPSidebarItem.level-2 .text[data-v-d81de50c],.VPSidebarItem.level-3 .text[data-v-d81de50c],.VPSidebarItem.level-4 .text[data-v-d81de50c],.VPSidebarItem.level-5 .text[data-v-d81de50c]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-d81de50c],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-d81de50c],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-d81de50c],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-d81de50c],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-d81de50c],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-d81de50c]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-1.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-2.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-3.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-4.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-5.has-active>.item>.text[data-v-d81de50c],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-d81de50c],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-d81de50c],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-d81de50c],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-d81de50c],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-d81de50c],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-d81de50c]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-d81de50c],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-d81de50c],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-d81de50c],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-d81de50c],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-d81de50c],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-d81de50c]{color:var(--vp-c-brand-1)}.caret[data-v-d81de50c]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-d81de50c]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-d81de50c]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-d81de50c]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-d81de50c]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-d81de50c],.VPSidebarItem.level-2 .items[data-v-d81de50c],.VPSidebarItem.level-3 .items[data-v-d81de50c],.VPSidebarItem.level-4 .items[data-v-d81de50c],.VPSidebarItem.level-5 .items[data-v-d81de50c]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-d81de50c]{display:none}.no-transition[data-v-8d50c081] .caret-icon{transition:none}.group+.group[data-v-8d50c081]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media(min-width:960px){.group[data-v-8d50c081]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-af661f50]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-af661f50]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-af661f50]{box-shadow:var(--vp-shadow-1)}@media(min-width:960px){.VPSidebar[data-v-af661f50]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media(min-width:1440px){.VPSidebar[data-v-af661f50]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media(min-width:960px){.curtain[data-v-af661f50]{position:sticky;top:calc(var(--vp-nav-height) * -1);left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-af661f50]{outline:0}.VPSkipLink[data-v-331ec75c]{position:fixed;top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-331ec75c]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media(min-width:1280px){.VPSkipLink[data-v-331ec75c]{top:14px;left:16px}}.Layout[data-v-0cf61682]{display:flex;flex-direction:column;min-height:100vh}:root{color-scheme:dark;--gt-black: #050608;--gt-ink: #0d1117;--gt-panel: #11161f;--gt-panel-soft: #151b23;--gt-line: #30363d;--gt-line-strong: #3d444d;--gt-text: #f0f6fc;--gt-muted: #9198a1;--gt-dim: #6e7681;--gt-blue: #031cdc;--gt-blue-soft: #4493f8;--gt-green: #7ee787;--gt-green-soft: #3fb950;--gt-amber: #f2cc60;--gt-red: #f85149;--vp-c-bg: var(--gt-black);--vp-c-bg-alt: var(--gt-ink);--vp-c-bg-elv: var(--gt-panel);--vp-c-bg-soft: var(--gt-panel-soft);--vp-c-divider: rgba(61, 68, 77, .82);--vp-c-divider-light: rgba(61, 68, 77, .48);--vp-c-text-1: var(--gt-text);--vp-c-text-2: #c9d1d9;--vp-c-text-3: var(--gt-muted);--vp-c-brand-1: var(--gt-green);--vp-c-brand-2: var(--gt-green-soft);--vp-c-brand-3: #214f32;--vp-c-brand-soft: rgba(126, 231, 135, .12);--vp-c-gutter: rgba(61, 68, 77, .8);--vp-button-brand-bg: var(--gt-text);--vp-button-brand-border: var(--gt-text);--vp-button-brand-text: var(--gt-black);--vp-button-brand-hover-bg: var(--gt-green);--vp-button-brand-hover-border: var(--gt-green);--vp-button-brand-hover-text: var(--gt-black);--vp-button-alt-bg: transparent;--vp-button-alt-border: var(--gt-line-strong);--vp-button-alt-text: var(--gt-text);--vp-button-alt-hover-bg: var(--gt-panel-soft);--vp-button-alt-hover-border: var(--gt-green);--vp-button-alt-hover-text: var(--gt-green);--vp-code-color: var(--gt-green);--vp-code-bg: rgba(101, 108, 118, .2);--vp-font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--vp-font-family-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--vp-home-hero-name-color: var(--gt-text);--vp-home-hero-name-background: none}*{box-sizing:border-box}html,body{background:var(--gt-black)}body{font-family:var(--vp-font-family-base);letter-spacing:0;overflow-x:hidden}::selection{background:var(--gt-blue);color:#fff}.VPNav{border-bottom:1px solid rgba(61,68,77,.72);background:#050608eb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.VPNavBar.has-sidebar .content{background:transparent}.VPNavBarTitle .title{font-weight:700;letter-spacing:0}.VPNavBarTitle .logo{border-radius:0}.VPNavBarMenuLink{color:var(--gt-muted);font-family:var(--vp-font-family-mono);font-size:12px;text-transform:uppercase}.VPNavBarMenuLink:hover,.VPNavBarMenuLink.active{color:var(--gt-text)}.VPHome{background:linear-gradient(180deg,rgba(3,28,220,.14),transparent 260px),radial-gradient(circle at 72% 20%,rgba(126,231,135,.1),transparent 330px),var(--gt-black)}.VPHome .main{max-width:1180px}.VPHomeHero{padding-top:92px!important;padding-bottom:44px!important}.VPHomeHero .container{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,430px);gap:48px;max-width:1180px}.VPHomeHero .main{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.VPHomeHero .name,.VPHomeHero .text{max-width:780px;letter-spacing:0}.VPHomeHero .name{font-size:clamp(56px,8vw,112px);line-height:.9;font-weight:800}.VPHomeHero .text{margin-top:20px;color:#d7dee8;font-size:clamp(24px,3.4vw,44px);line-height:1;font-weight:600}.VPHomeHero .tagline{max-width:660px;color:var(--gt-muted);font-size:17px;line-height:1.7}.VPHomeHero .actions{justify-content:flex-start}.VPButton{border-radius:4px!important;font-family:var(--vp-font-family-mono);font-size:12px!important;font-weight:700!important;letter-spacing:0;text-transform:uppercase}.VPHomeHero .image{display:block}.VPHomeHero .image-container{display:flex;align-items:center;justify-content:center;width:420px;height:420px;transform:none!important}.VPHomeHero .image-bg{display:none}.VPHomeHero .image-src{position:static!important;width:min(100%,420px);max-width:420px!important;height:auto;border:1px solid var(--gt-line-strong);border-radius:0;background:linear-gradient(180deg,var(--gt-panel),var(--gt-black));box-shadow:0 0 0 1px #7ee78714,0 24px 80px #00000061;transform:none!important}.VPFeatures{padding:28px 24px 72px!important}.VPFeatures .container{max-width:1180px}.VPFeatures .items{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px!important;border:1px solid var(--gt-line);background:var(--gt-line)}.VPFeatures .item{width:auto!important;padding:0!important}.VPFeature{height:100%;min-height:168px;border:0!important;border-radius:0!important;background:var(--gt-ink)!important;padding:22px!important}.VPFeature .title{color:var(--gt-text);font-family:var(--vp-font-family-mono);font-size:13px;line-height:1.35;text-transform:uppercase}.VPFeature .details{color:var(--gt-muted);font-size:14px;line-height:1.65}.vp-doc{color:#d7dee8}.VPDoc,.VPDoc .container,.VPDoc .content,.VPDoc .content-container,.VPDoc .main{min-width:0;max-width:100%}.vp-doc h1,.vp-doc h2,.vp-doc h3{color:var(--gt-text);letter-spacing:0}.vp-doc h1{font-size:40px;line-height:1.05}.vp-doc h2{margin-top:44px;border-top:1px solid var(--vp-c-divider);border-bottom:0;padding-top:22px;font-family:var(--vp-font-family-mono);font-size:18px;text-transform:uppercase}.vp-doc h3{font-size:18px}.vp-doc p,.vp-doc li{color:#c9d1d9;line-height:1.72}.vp-doc a{color:var(--gt-green);text-decoration:underline;text-underline-offset:3px}.vp-doc blockquote{border-left-color:var(--gt-green);background:#7ee7870f}.vp-doc div[class*=language-],.vp-doc pre{max-width:100%;overflow-x:auto;border:1px solid var(--gt-line);border-radius:0;background:#0d1117!important}.vp-doc code{border-radius:4px}.vp-doc table{display:table;width:100%;border:1px solid var(--gt-line)}.vp-doc th,.vp-doc td{border-color:var(--gt-line)!important}.vp-doc tr{background:var(--gt-ink)}.vp-doc tr:nth-child(2n){background:var(--gt-panel-soft)}.VPSidebar{background:var(--gt-ink)!important;border-right:1px solid var(--gt-line)}.VPSidebarItem .text{color:var(--gt-muted)}.VPSidebarItem.is-active>.item .text{color:var(--gt-green)}.VPDocAsideOutline .content{border-left-color:var(--gt-line)}.VPFooter{border-top:1px solid var(--gt-line);background:var(--gt-black)}.gtn-home{max-width:1180px;margin:0 auto 72px;padding:0 24px}.gtn-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--gt-line);background:var(--gt-line)}.gtn-strip__item{min-height:112px;padding:20px;background:var(--gt-ink)}.gtn-kicker{color:var(--gt-green);font-family:var(--vp-font-family-mono);font-size:12px;font-weight:700;text-transform:uppercase}.gtn-strip__item strong{display:block;margin-top:12px;color:var(--gt-text);font-size:22px;line-height:1.1}.gtn-strip__item span{display:block;margin-top:8px;color:var(--gt-muted);font-size:13px;line-height:1.55}.gtn-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,420px);gap:1px;margin-top:28px;border:1px solid var(--gt-line);background:var(--gt-line)}.gtn-panel>section{background:var(--gt-ink);padding:28px}.gtn-panel h2{margin:0;color:var(--gt-text);font-size:clamp(30px,5vw,56px);line-height:.98}.gtn-panel p{max-width:640px;color:var(--gt-muted);font-size:16px;line-height:1.72}.gtn-terminal{font-family:var(--vp-font-family-mono);font-size:12px}.gtn-terminal div{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(61,68,77,.58)}.gtn-terminal div:last-child{border-bottom:0}.gtn-terminal b{min-width:78px;color:var(--gt-green);font-weight:600}.gtn-terminal span{color:#c9d1d9}@media(max-width:960px){.VPHomeHero .container,.gtn-panel{grid-template-columns:1fr}.VPHomeHero .image{order:-1}.VPHomeHero .image-src{width:220px}.gtn-strip,.VPFeatures .items{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.VPDoc{padding:0 24px!important}.VPDoc .container,.VPDoc .content,.VPDoc .content-container,.VPDoc .main,.vp-doc{display:block!important;width:100%!important;max-width:100%!important;padding-left:0!important;padding-right:0!important}.VPDocAside{display:none!important}.vp-doc p,.vp-doc li{overflow-wrap:anywhere}.VPHomeHero{padding-top:64px!important}.VPHomeHero .name{font-size:54px}.VPHomeHero .text{font-size:26px}.gtn-strip,.VPFeatures .items{grid-template-columns:1fr}.gtn-panel>section{padding:22px}}.VPLocalSearchBox[data-v-8c9d8b44]{position:fixed;z-index:100;inset:0;display:flex}.backdrop[data-v-8c9d8b44]{position:absolute;inset:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-8c9d8b44]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media(max-width:767px){.shell[data-v-8c9d8b44]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-8c9d8b44]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media(max-width:767px){.search-bar[data-v-8c9d8b44]{padding:0 8px}}.search-bar[data-v-8c9d8b44]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-8c9d8b44]{display:block;font-size:18px}.navigate-icon[data-v-8c9d8b44]{display:block;font-size:14px}.search-icon[data-v-8c9d8b44]{margin:8px}@media(max-width:767px){.search-icon[data-v-8c9d8b44]{display:none}}.search-input[data-v-8c9d8b44]{padding:6px 12px;font-size:inherit;width:100%}.search-input[data-v-8c9d8b44]::-webkit-search-cancel-button{display:none}@media(max-width:767px){.search-input[data-v-8c9d8b44]{padding:6px 4px}}.search-actions[data-v-8c9d8b44]{display:flex;gap:4px}@media(any-pointer:coarse){.search-actions[data-v-8c9d8b44]{gap:8px}}@media(min-width:769px){.search-actions.before[data-v-8c9d8b44]{display:none}}.search-actions button[data-v-8c9d8b44]{padding:8px}.search-actions button[data-v-8c9d8b44]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-8c9d8b44]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-8c9d8b44]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-8c9d8b44]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-8c9d8b44]{display:flex;align-items:center;gap:4px}@media(max-width:767px){.search-keyboard-shortcuts[data-v-8c9d8b44]{display:none}}.search-keyboard-shortcuts kbd[data-v-8c9d8b44]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-8c9d8b44]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-8c9d8b44]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-8c9d8b44]{margin:12px;width:100%;overflow:hidden}@media(max-width:767px){.result>div[data-v-8c9d8b44]{margin:8px}}.titles[data-v-8c9d8b44]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-8c9d8b44]{display:flex;align-items:center;gap:4px}.title.main[data-v-8c9d8b44]{font-weight:500}.title-icon[data-v-8c9d8b44]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-8c9d8b44]{opacity:.5}.result.selected[data-v-8c9d8b44]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-8c9d8b44]{position:relative}.excerpt[data-v-8c9d8b44]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-8c9d8b44]{opacity:1}.excerpt[data-v-8c9d8b44] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-8c9d8b44] mark,.excerpt[data-v-8c9d8b44] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-8c9d8b44] .vp-code-group .tabs{display:none}.excerpt[data-v-8c9d8b44] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-8c9d8b44]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-8c9d8b44]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-8c9d8b44],.result.selected .title-icon[data-v-8c9d8b44]{color:var(--vp-c-brand-1)!important}.no-results[data-v-8c9d8b44]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-8c9d8b44]{flex:none} diff --git a/docs/assets/troubleshooting.md.BAr9iojM.js b/docs/assets/troubleshooting.md.BAr9iojM.js deleted file mode 100644 index a5bdbd8e65..0000000000 --- a/docs/assets/troubleshooting.md.BAr9iojM.js +++ /dev/null @@ -1,4 +0,0 @@ -import{c as s,S as e,j as a,m as t}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1779781690000}'),n={name:"troubleshooting.md"};function l(h,i,r,o,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t(`

    Troubleshooting

    gittensory-mcp: command not found

    If the command is not installed globally:

    sh
    npm link --workspace @jsonbored/gittensory-mcp

    Then retry:

    sh
    gittensory-mcp doctor

    If your MCP client does not inherit your shell PATH, use an absolute command path in that client config.

    Login Fails

    Check:

    sh
    gittensory-mcp doctor
    -gittensory-mcp status

    GitHub Device Flow must be enabled on the GitHub App or OAuth app configured for Gittensory.

    Session Expired

    Run:

    sh
    gittensory-mcp login

    Sessions are intentionally short-lived.

    Source Upload Error

    If you see a source-upload error, remove this env var:

    sh
    unset GITTENSORY_UPLOAD_SOURCE

    Gittensory rejects source upload mode in v1.

    GitHub App Installation Needs Attention

    Check the installation health endpoint:

    sh
    export GITTENSORY_API_URL="https://your-gittensory-api-origin.example"
    -curl "$GITTENSORY_API_URL/v1/installations/INSTALLATION_ID/health" \\
    -  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

    Fix the reported missing permissions and events, approve the app permission update in GitHub, then refresh installation health.

    Rate Limited

    If a command returns 429, retry after the reported retry-after value. Expensive analysis routes have stricter limits than normal read routes.

    Stale Decision Pack

    If decision-pack returns needs_snapshot_refresh, Gittensory has enqueued a rebuild. Retry after the queue drains.

    `,27)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/docs/assets/troubleshooting.md.BAr9iojM.lean.js b/docs/assets/troubleshooting.md.BAr9iojM.lean.js deleted file mode 100644 index 2b16fc20e1..0000000000 --- a/docs/assets/troubleshooting.md.BAr9iojM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as s,S as e,j as a,m as t}from"./chunks/framework.BXgR76oC.js";const c=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1779781690000}'),n={name:"troubleshooting.md"};function l(h,i,r,o,p,d){return e(),a("div",null,[...i[0]||(i[0]=[t("",27)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/docs/guide/auth.html b/docs/guide/auth.html deleted file mode 100644 index e068d56260..0000000000 --- a/docs/guide/auth.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - Auth | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    Auth

    Gittensory has two auth surfaces:

    • GitHub OAuth for MCP users.
    • GitHub App installation auth for repositories.

    MCP User Auth

    Run:

    sh
    gittensory-mcp login

    The CLI starts GitHub Device Flow, asks you to approve the code on GitHub, then exchanges the GitHub token server-side for a short-lived Gittensory session token.

    Gittensory stores:

    • a hashed server-side session token
    • the GitHub login and user id
    • scopes and session expiry metadata

    Gittensory does not store user PATs.

    Non-Interactive Bootstrap

    For local automation, pass a GitHub token only long enough to mint a Gittensory session:

    sh
    gittensory-mcp login --github-token "$(gh auth token)"

    The token is exchanged immediately. The MCP wrapper stores the Gittensory session token, not the GitHub token.

    Check Auth State

    sh
    gittensory-mcp whoami
    -gittensory-mcp status
    -gittensory-mcp doctor

    Logout

    sh
    gittensory-mcp logout

    Logout revokes the remote session when possible and removes the local config file.

    Static Tokens

    Static bearer tokens remain only for private backend operations, internal jobs, and temporary beta bootstrap. Normal MCP users should use GitHub OAuth.

    - - - - \ No newline at end of file diff --git a/docs/guide/github-app-setup.html b/docs/guide/github-app-setup.html deleted file mode 100644 index 5f040fc028..0000000000 --- a/docs/guide/github-app-setup.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - GitHub App Setup | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    GitHub App Setup

    The GitHub App is the maintainer/install surface. GitHub OAuth is the MCP user-auth surface.

    Basic Fields

    Use these values:

    FieldValue
    Homepage URLhttps://gittensory.aethereal.dev
    Webhook URL${GITTENSORY_API_URL}/v1/github/webhook
    Webhook activeenabled
    SSL verificationenabled
    Device Flowenabled

    GITTENSORY_API_URL is the private API origin for the deployed backend. Do not use the GitHub Pages docs domain for webhooks; Pages only serves static docs.

    Use a generated webhook secret and set the same value in Cloudflare as GITHUB_WEBHOOK_SECRET.

    Required Repository Permissions

    PermissionAccessWhy
    MetadataReadRequired for repository identity and repository events.
    ChecksWriteRequired to create and update the Gittensory check run.
    Pull requestsReadRequired for PR metadata, reviewability, and webhook events.
    IssuesReadRequired for issue linkage, issue-discovery context, and duplicate signals.

    Optional:

    PermissionAccessWhy
    IssuesWriteOnly needed if public-safe sticky PR comments are enabled.
    ContentsReadOnly needed if a future feature reads repository files directly through the App.

    Required Events

    Subscribe to:

    • Pull request
    • Issues
    • Repository

    If GitHub shows Installation target, select it. Some installation-related events are not always shown as normal selectable event rows; Gittensory should not block health on event names that are hidden in the app UI.

    Install Or Repair

    1. Update the GitHub App permissions and events.
    2. Reinstall the app or approve the changed permissions.
    3. Select the repos Gittensory should inspect.
    4. Trigger installation-health refresh:
    sh
    curl -X POST "$GITTENSORY_API_URL/v1/internal/jobs/refresh-installation-health/run" \
    -  -H "Authorization: Bearer $INTERNAL_JOB_TOKEN"
    1. Check health:
    sh
    curl "$GITTENSORY_API_URL/v1/readiness" \
    -  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

    Healthy app installation state should remove the readiness warning about GitHub App installations needing attention.

    Marketplace Readiness

    Before Marketplace submission, add:

    • public docs URL
    • support contact
    • privacy policy
    • terms page if needed
    • clear setup flow
    • valid webhook and install diagnostics

    Do not submit until the privacy, support, terms, install diagnostics, and public setup flow are complete.

    - - - - \ No newline at end of file diff --git a/docs/guide/install.html b/docs/guide/install.html deleted file mode 100644 index d4226d213c..0000000000 --- a/docs/guide/install.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - Install | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    Install

    Gittensory has two install paths: public npm for normal use, and local checkout for development.

    Public npm

    Use this for Codex, Claude Desktop, Cursor, or any other stdio MCP client:

    sh
    npm install -g @jsonbored/gittensory-mcp
    -gittensory-mcp login
    -gittensory-mcp status
    -gittensory-mcp --stdio

    The login command uses GitHub Device Flow and stores a short-lived Gittensory session token in your local config directory.

    Local checkout

    Use this when developing Gittensory itself:

    sh
    git clone https://github.com/JSONbored/gittensory.git
    -cd gittensory
    -npm install
    -npm link --workspace @jsonbored/gittensory-mcp
    -gittensory-mcp login
    -gittensory-mcp --stdio

    Verify The Install

    Run:

    sh
    gittensory-mcp doctor
    -gittensory-mcp whoami
    -gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN --json

    doctor checks API health, auth state, source-upload defaults, local git metadata, and whether the binary is likely visible to MCP clients.

    Privacy Defaults

    Gittensory MCP v1 sends structured metadata only:

    • repository full name
    • branch and base refs
    • changed file paths and counts
    • linked issue references
    • commit messages
    • validation command summaries

    It does not upload source contents. GITTENSORY_UPLOAD_SOURCE=true is rejected.

    - - - - \ No newline at end of file diff --git a/docs/guide/maintainers.html b/docs/guide/maintainers.html deleted file mode 100644 index 4746e21ba0..0000000000 --- a/docs/guide/maintainers.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - For Maintainers | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    For Maintainers

    Gittensory is meant to make Gittensor-driven contribution flow less noisy.

    GitHub App Surface

    The GitHub App creates the detailed maintainer surface:

    • Gittensory check runs on PRs
    • reviewability context
    • linked issue and duplicate signals
    • contributor role context
    • queue and repo-lane context
    • optional public-safe sticky PR comments

    The check run is the canonical detailed report. Public comments are opt-in and sanitized.

    Reviewability Actions

    Gittensory maps PRs to maintainer-friendly actions:

    • review_now
    • needs_author
    • likely_duplicate
    • close_or_redirect
    • watch
    • maintainer_lane

    The point is not to shame contributors. The point is to identify the lowest-friction next step.

    Public Comments

    Public comments stay off by default.

    When enabled, comments can include:

    • contribution context
    • PR hygiene
    • duplicate or WIP risk
    • maintainer review notes
    • contributor next steps

    Comments must not include raw trust scores, wallet data, hotkeys, public reward estimates, or public score optimization language.

    Repo Owner Signals

    Repo owners can use Gittensory to inspect:

    • repo lane clarity
    • label configuration
    • maintainer cut readiness
    • queue health
    • contributor intake health
    • GitHub App installation health
    • stale or degraded backfill state
    - - - - \ No newline at end of file diff --git a/docs/guide/mcp.html b/docs/guide/mcp.html deleted file mode 100644 index 0e21a3f634..0000000000 --- a/docs/guide/mcp.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - MCP | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    MCP

    The MCP package is the contributor-facing surface for coding agents. It runs locally over stdio and calls the private Gittensory API with your Gittensory session token.

    Generate Client Config

    Print a config snippet:

    sh
    gittensory-mcp init-client --print codex
    -gittensory-mcp init-client --print claude
    -gittensory-mcp init-client --print cursor

    These commands do not edit your files. Use an absolute command path if your client does not inherit your shell PATH.

    Codex

    toml
    [mcp_servers.gittensory]
    -command = "gittensory-mcp"
    -args = ["--stdio"]

    Claude Desktop

    json
    {
    -  "mcpServers": {
    -    "gittensory": {
    -      "command": "gittensory-mcp",
    -      "args": ["--stdio"]
    -    }
    -  }
    -}

    Cursor

    json
    {
    -  "mcpServers": {
    -    "gittensory": {
    -      "command": "gittensory-mcp",
    -      "args": ["--stdio"]
    -    }
    -  }
    -}

    Tools

    The local wrapper exposes repo context, contributor decision packs, local branch preflight, score blockers, PR packets, variant comparison, and registry change tools.

    Useful tools:

    • gittensory_local_status
    • gittensory_get_decision_pack
    • gittensory_explain_repo_decision
    • gittensory_preflight_current_branch
    • gittensory_preview_current_branch_score
    • gittensory_rank_local_next_actions
    • gittensory_explain_local_blockers
    • gittensory_prepare_pr_packet

    Runtime Rules

    • Stdio only for the local wrapper.
    • No source upload in v1.
    • Private score and reward/risk reasoning stay in MCP/API output.
    • Public PR packets are sanitized and do not include wallet, hotkey, raw trust score, or public score estimates.
    - - - - \ No newline at end of file diff --git a/docs/guide/miners.html b/docs/guide/miners.html deleted file mode 100644 index 0ce65f7432..0000000000 --- a/docs/guide/miners.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - For Miners | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    For Miners

    Gittensory helps miners decide what to do next with evidence instead of guesswork.

    What It Answers

    • Is this repo a direct-PR lane, issue-discovery lane, split lane, inactive lane, or unknown lane?
    • Am I in a normal contributor lane or a maintainer lane for this repo?
    • Does my current branch look reviewable?
    • What blocks scoreability right now?
    • Should I clean up open PRs before opening more work?
    • Is there duplicate or WIP collision risk?
    • What public-safe PR packet should I give a maintainer?

    Branch Analysis

    Run from a Git repo:

    sh
    gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN --json

    The response includes:

    • lane context
    • role context
    • preflight findings
    • private score blockers
    • current vs projected scoreability scenarios
    • reward/risk reasoning
    • base freshness warnings when the local diff may be inflated
    • maintainer-fit notes
    • public-safe PR packet
    • ranked next actions

    When the current score is blocked by temporary account/queue state, pass the assumptions explicitly:

    sh
    gittensory-mcp analyze-branch --login YOUR_GITHUB_LOGIN \
    -  --pending-merged-prs 3 \
    -  --expected-open-prs 0 \
    -  --projected-credibility 0.8 \
    -  --scenario-note "approved PRs expected to merge" \
    -  --json

    Gittensory labels that as a user-supplied scenario. It shows the current effective score, the underlying potential score, and what changes if the open-PR and credibility gates clear.

    Preflight

    sh
    gittensory-mcp preflight --login YOUR_GITHUB_LOGIN --json

    Use this before opening a PR. It is especially useful when you need to know whether a branch is missing tests, missing a linked issue, colliding with active work, or likely to increase maintainer burden.

    How This Helps

    Gittensory does not promise payouts. It explains scoreability and risk:

    • open PR pressure
    • credibility assumptions
    • lane eligibility
    • issue-discovery vs direct PR fit
    • duplicate clusters
    • stale work
    • review friction

    That makes recommendations actionable: land or withdraw blocked work, avoid direct PRs in issue-discovery-only repos, improve validation evidence, or pick a repo where your history and the lane actually fit.

    - - - - \ No newline at end of file diff --git a/docs/hashmap.json b/docs/hashmap.json deleted file mode 100644 index c3c4392a23..0000000000 --- a/docs/hashmap.json +++ /dev/null @@ -1 +0,0 @@ -{"guide_auth.md":"DNA7JhY7","guide_github-app-setup.md":"ZPvLDsvt","guide_install.md":"ByQAA8QU","guide_maintainers.md":"CGSokUpu","guide_mcp.md":"DK8zvHnS","guide_miners.md":"BeaGERAQ","index.md":"BKalGx3J","reference_api.md":"CvVunwm0","security_privacy.md":"CHSODDHk","troubleshooting.md":"BAr9iojM"} diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 03aabffbe6..0000000000 --- a/docs/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    GittensoryPrivate repo intelligence for Gittensor work.

    For Gittensor miners, maintainers, and agents: MCP preflight, scoreability projections, and GitHub App review packets. Still not a Gittensor frontend.

    Gittensory signal mark
    01 / Miners
    Pick work with less guesswork.Score blockers, lane fit, stale base checks, and cleanup-first guidance.
    02 / Maintainers
    Review signal, not noise.Role-aware context, duplicate risk, validation evidence, and next action.
    03 / Agents
    Local branch context.Metadata-only MCP tools for Codex, Claude, Cursor, and automation.
    04 / Privacy
    Private by default.No PAT storage, no source upload, no public score or wallet leakage.

    Not another Gittensor frontend.

    Gittensory is the private signal layer behind better contributions: official miner context, registry lanes, queue pressure, scoreability projections, maintainer friction, and public-safe PR packets.

    lanedirect_pr / issue_discovery / maintainer
    scorecurrent 0, potential visible, scenario gated
    riskopen PR pressure, credibility, stale base
    outputprivate MCP JSON + sanitized PR packet
    - - - - \ No newline at end of file diff --git a/docs/logo.svg b/docs/logo.svg deleted file mode 100644 index af97c38454..0000000000 --- a/docs/logo.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/reference/api.html b/docs/reference/api.html deleted file mode 100644 index 279a206b82..0000000000 --- a/docs/reference/api.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - API Reference | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    API Reference

    The REST API is bearer-token protected except for /health, GitHub webhook delivery, and public auth start/poll endpoints.

    Use the live OpenAPI document when authenticated:

    sh
    export GITTENSORY_API_URL="https://your-gittensory-api-origin.example"
    -curl "$GITTENSORY_API_URL/openapi.json" \
    -  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

    Contributor APIs

    EndpointPurpose
    GET /v1/contributors/:login/profileContributor evidence profile using official Gittensor stats first when available.
    GET /v1/contributors/:login/decision-packCanonical private miner decision payload for MCP and internal clients.
    GET /v1/contributors/:login/repos/:owner/:repo/decisionRepo-specific decision extracted from the decision pack.

    Repo APIs

    EndpointPurpose
    GET /v1/reposKnown registered and installed repositories.
    GET /v1/repos/:owner/:repoRepository metadata.
    GET /v1/repos/:owner/:repo/intelligenceCanonical repository intelligence bundle.
    GET /v1/repos/:owner/:repo/pulls/:number/maintainer-packetPR-specific maintainer review packet.
    GET /v1/repos/:owner/:repo/pulls/:number/reviewabilityPrivate PR reviewability score and maintainer action.

    Local And Preflight APIs

    EndpointPurpose
    POST /v1/local/branch-analysisMCP-oriented local branch analysis from structured metadata.
    POST /v1/preflight/prPlanned PR metadata preflight.
    POST /v1/preflight/local-diffLocal-diff metadata preflight.

    Ops APIs

    EndpointPurpose
    GET /v1/readinessService health, signal fidelity, secrets presence, and installation health summary.
    GET /v1/sync/statusRepo sync segments, GitHub totals, rate-limit state, and signal fidelity.
    GET /v1/installationsGitHub App installations and health records.
    GET /v1/installations/:id/healthExact installation permission/event remediation context.

    MCP Endpoint

    POST /mcp exposes remote MCP over Streamable HTTP style requests. The local npm wrapper is still the preferred MCP user surface.

    - - - - \ No newline at end of file diff --git a/docs/security/privacy.html b/docs/security/privacy.html deleted file mode 100644 index 375b86ff98..0000000000 --- a/docs/security/privacy.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - Privacy And Security | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    Privacy And Security

    Gittensory handles contribution intelligence, not wallets or private source code.

    No PAT Storage

    MCP login uses GitHub OAuth Device Flow. The backend exchanges the GitHub token for a Gittensory session token and stores only the hashed Gittensory token server-side.

    No Source Upload

    Local MCP branch analysis sends metadata only:

    • repo full name
    • branch name
    • base and head refs
    • changed file paths
    • additions and deletions
    • linked issue references
    • commit messages
    • validation summaries

    Source contents are not uploaded in v1. GITTENSORY_UPLOAD_SOURCE=true fails closed.

    Public Output Boundaries

    Public comments and public-safe PR packets must not include:

    • wallets
    • hotkeys
    • raw trust scores
    • public score estimates
    • public reward estimates
    • farming language
    • public shaming

    Private API and MCP responses can include scoreability and reward/risk reasoning because they are authenticated private outputs.

    Rate Limiting

    Gittensory uses route classes:

    • strict: auth routes
    • normal: read APIs and MCP tools
    • expensive: branch analysis, scoring preview, decision-pack refresh, signal refresh

    Rate-limited responses return 429 with retry metadata.

    GitHub App Boundaries

    The GitHub App is advisory-only. It does not auto-label, close, merge, or rewrite contributor work.

    - - - - \ No newline at end of file diff --git a/docs/troubleshooting.html b/docs/troubleshooting.html deleted file mode 100644 index 1f6cc5b5f2..0000000000 --- a/docs/troubleshooting.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - Troubleshooting | Gittensory - - - - - - - - - - - - - - - - - - - - -
    Skip to content

    Troubleshooting

    gittensory-mcp: command not found

    If the command is not installed globally:

    sh
    npm link --workspace @jsonbored/gittensory-mcp

    Then retry:

    sh
    gittensory-mcp doctor

    If your MCP client does not inherit your shell PATH, use an absolute command path in that client config.

    Login Fails

    Check:

    sh
    gittensory-mcp doctor
    -gittensory-mcp status

    GitHub Device Flow must be enabled on the GitHub App or OAuth app configured for Gittensory.

    Session Expired

    Run:

    sh
    gittensory-mcp login

    Sessions are intentionally short-lived.

    Source Upload Error

    If you see a source-upload error, remove this env var:

    sh
    unset GITTENSORY_UPLOAD_SOURCE

    Gittensory rejects source upload mode in v1.

    GitHub App Installation Needs Attention

    Check the installation health endpoint:

    sh
    export GITTENSORY_API_URL="https://your-gittensory-api-origin.example"
    -curl "$GITTENSORY_API_URL/v1/installations/INSTALLATION_ID/health" \
    -  -H "Authorization: Bearer $GITTENSORY_API_TOKEN"

    Fix the reported missing permissions and events, approve the app permission update in GitHub, then refresh installation health.

    Rate Limited

    If a command returns 429, retry after the reported retry-after value. Expensive analysis routes have stricter limits than normal read routes.

    Stale Decision Pack

    If decision-pack returns needs_snapshot_refresh, Gittensory has enqueued a rebuild. Retry after the queue drains.

    - - - - \ No newline at end of file diff --git a/docs/vp-icons.css b/docs/vp-icons.css deleted file mode 100644 index ddc5bd8edb..0000000000 --- a/docs/vp-icons.css +++ /dev/null @@ -1 +0,0 @@ -.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")} \ No newline at end of file diff --git a/migrations/0009_github_app_visibility.sql b/migrations/0009_github_app_visibility.sql new file mode 100644 index 0000000000..14802aacf1 --- /dev/null +++ b/migrations/0009_github_app_visibility.sql @@ -0,0 +1,18 @@ +ALTER TABLE repository_settings ADD COLUMN auto_label_enabled INTEGER NOT NULL DEFAULT 1; +ALTER TABLE repository_settings ADD COLUMN gittensor_label TEXT NOT NULL DEFAULT 'gittensor'; +ALTER TABLE repository_settings ADD COLUMN create_missing_label INTEGER NOT NULL DEFAULT 1; +ALTER TABLE repository_settings ADD COLUMN public_surface TEXT NOT NULL DEFAULT 'comment_and_label'; +ALTER TABLE repository_settings ADD COLUMN include_maintainer_authors INTEGER NOT NULL DEFAULT 0; +ALTER TABLE repository_settings ADD COLUMN require_linked_issue INTEGER NOT NULL DEFAULT 0; + +UPDATE repository_settings +SET + comment_mode = 'detected_contributors_only', + check_run_mode = 'off', + check_run_detail_level = 'minimal', + auto_label_enabled = 1, + gittensor_label = 'gittensor', + create_missing_label = 1, + public_surface = 'comment_and_label', + include_maintainer_authors = 0, + require_linked_issue = 0; diff --git a/site/guide/github-app-setup.md b/site/guide/github-app-setup.md index 06ade4aaf2..1fea17f786 100644 --- a/site/guide/github-app-setup.md +++ b/site/guide/github-app-setup.md @@ -23,15 +23,14 @@ Use a generated webhook secret and set the same value in Cloudflare as `GITHUB_W | Permission | Access | Why | | --- | --- | --- | | Metadata | Read | Required for repository identity and repository events. | -| Checks | Write | Required to create and update the Gittensory check run. | -| Pull requests | Read | Required for PR metadata, reviewability, and webhook events. | -| Issues | Read | Required for issue linkage, issue-discovery context, and duplicate signals. | +| Pull requests | Read | Required for PR metadata and webhook events. | +| Issues | Write | Required to post the sticky PR comment and apply the maintainer-configured label. | Optional: | Permission | Access | Why | | --- | --- | --- | -| Issues | Write | Only needed if public-safe sticky PR comments are enabled. | +| Checks | Write | Only needed if minimal check runs are explicitly enabled. | | Contents | Read | Only needed if a future feature reads repository files directly through the App. | ## Required Events @@ -44,6 +43,19 @@ Subscribe to: If GitHub shows `Installation target`, select it. Some installation-related events are not always shown as normal selectable event rows; Gittensory should not block health on event names that are hidden in the app UI. +## Default Visibility + +Gittensory inspects PR webhooks quietly first. It publishes a public surface only when the PR author is confirmed through the official Gittensor API. + +Default visible behavior: + +- non-miner authors: no comment, no label, no check +- bot authors: no comment, no label, no check +- maintainer-associated authors: no public output unless `includeMaintainerAuthors=true` +- confirmed miners: one sticky public-safe comment plus the configured label, defaulting to `gittensor` + +Check runs default to off. If enabled later, they stay minimal and do not include private reviewability, scoring, wallet, hotkey, or reward/risk context. + ## Install Or Repair 1. Update the GitHub App permissions and events. diff --git a/site/guide/maintainers.md b/site/guide/maintainers.md index 7f850bcb4a..0c134b0ee1 100644 --- a/site/guide/maintainers.md +++ b/site/guide/maintainers.md @@ -4,16 +4,15 @@ Gittensory is meant to make Gittensor-driven contribution flow less noisy. ## GitHub App Surface -The GitHub App creates the detailed maintainer surface: +The GitHub App is designed to stay quiet unless a PR author is an officially confirmed Gittensor miner. -- Gittensory check runs on PRs -- reviewability context -- linked issue and duplicate signals -- contributor role context -- queue and repo-lane context -- optional public-safe sticky PR comments +Default visible output for confirmed miner PRs: -The check run is the canonical detailed report. Public comments are opt-in and sanitized. +- one sticky public-safe PR comment +- one maintainer-configured label, defaulting to `gittensor` +- no public output for bots, non-miners, or maintainer-associated authors unless explicitly enabled + +Private reviewability context, queue risk, score blockers, and reward/risk reasoning stay in the API/MCP. GitHub checks default to off; if a maintainer enables them later, they remain minimal and do not carry detailed findings. ## Reviewability Actions @@ -30,9 +29,7 @@ The point is not to shame contributors. The point is to identify the lowest-fric ## Public Comments -Public comments stay off by default. - -When enabled, comments can include: +Confirmed miner comments can include: - contribution context - PR hygiene diff --git a/site/security/privacy.md b/site/security/privacy.md index 8861733c34..7593023363 100644 --- a/site/security/privacy.md +++ b/site/security/privacy.md @@ -47,4 +47,4 @@ Rate-limited responses return `429` with retry metadata. ## GitHub App Boundaries -The GitHub App is advisory-only. It does not auto-label, close, merge, or rewrite contributor work. +The GitHub App is advisory-only. It can apply a maintainer-configured label to confirmed miner PRs, but it does not close, merge, rewrite, or publicly score contributor work. diff --git a/src/api/routes.ts b/src/api/routes.ts index 64ef141931..70a10f86e0 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -203,9 +203,16 @@ const scorePreviewSchema = z.object({ }); const repositorySettingsSchema = z.object({ - commentMode: z.enum(["off", "detected_contributors_only", "all_prs"]), + commentMode: z.enum(["off", "detected_contributors_only", "all_prs"]).default("detected_contributors_only"), publicSignalLevel: z.enum(["minimal", "standard"]).default("standard"), + checkRunMode: z.enum(["off", "enabled"]).default("off"), checkRunDetailLevel: z.enum(["minimal", "standard", "deep"]).default("standard"), + autoLabelEnabled: z.boolean().default(true), + gittensorLabel: z.string().trim().min(1).max(50).default("gittensor"), + createMissingLabel: z.boolean().default(true), + publicSurface: z.enum(["off", "comment_and_label", "comment_only", "label_only"]).default("comment_and_label"), + includeMaintainerAuthors: z.boolean().default(false), + requireLinkedIssue: z.boolean().default(false), backfillEnabled: z.boolean().default(true), privateTrustEnabled: z.boolean().default(true), }); @@ -864,8 +871,14 @@ export function createApp() { repoFullName: fullName, commentMode: parsed.data.commentMode, publicSignalLevel: parsed.data.publicSignalLevel, - checkRunMode: "enabled", + checkRunMode: parsed.data.checkRunMode, checkRunDetailLevel: parsed.data.checkRunDetailLevel, + autoLabelEnabled: parsed.data.autoLabelEnabled, + gittensorLabel: parsed.data.gittensorLabel, + createMissingLabel: parsed.data.createMissingLabel, + publicSurface: parsed.data.publicSurface, + includeMaintainerAuthors: parsed.data.includeMaintainerAuthors, + requireLinkedIssue: parsed.data.requireLinkedIssue, backfillEnabled: parsed.data.backfillEnabled, privateTrustEnabled: parsed.data.privateTrustEnabled, }), diff --git a/src/db/repositories.ts b/src/db/repositories.ts index f86d9692cb..14a9529199 100644 --- a/src/db/repositories.ts +++ b/src/db/repositories.ts @@ -274,10 +274,16 @@ export async function getRepositorySettings(env: Env, fullName: string): Promise if (!row) { return { repoFullName: fullName, - commentMode: "off", + commentMode: "detected_contributors_only", publicSignalLevel: "standard", - checkRunMode: "enabled", - checkRunDetailLevel: "standard", + checkRunMode: "off", + checkRunDetailLevel: "minimal", + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label", + includeMaintainerAuthors: false, + requireLinkedIssue: false, backfillEnabled: true, privateTrustEnabled: true, }; @@ -286,8 +292,14 @@ export async function getRepositorySettings(env: Env, fullName: string): Promise repoFullName: row.repoFullName, commentMode: parseCommentMode(row.commentMode), publicSignalLevel: row.publicSignalLevel === "minimal" ? "minimal" : "standard", - checkRunMode: "enabled", + checkRunMode: parseCheckRunMode(row.checkRunMode), checkRunDetailLevel: parseCheckRunDetailLevel(row.checkRunDetailLevel), + autoLabelEnabled: row.autoLabelEnabled, + gittensorLabel: row.gittensorLabel, + createMissingLabel: row.createMissingLabel, + publicSurface: parsePublicSurface(row.publicSurface), + includeMaintainerAuthors: row.includeMaintainerAuthors, + requireLinkedIssue: row.requireLinkedIssue, backfillEnabled: row.backfillEnabled, privateTrustEnabled: row.privateTrustEnabled, createdAt: row.createdAt, @@ -295,33 +307,60 @@ export async function getRepositorySettings(env: Env, fullName: string): Promise }; } -export async function upsertRepositorySettings(env: Env, settings: RepositorySettings): Promise { +export async function upsertRepositorySettings(env: Env, settings: Partial & { repoFullName: string }): Promise { + const resolved: RepositorySettings = { + repoFullName: settings.repoFullName, + commentMode: settings.commentMode ?? "detected_contributors_only", + publicSignalLevel: settings.publicSignalLevel ?? "standard", + checkRunMode: settings.checkRunMode ?? "off", + checkRunDetailLevel: settings.checkRunDetailLevel ?? "minimal", + autoLabelEnabled: settings.autoLabelEnabled ?? true, + gittensorLabel: settings.gittensorLabel ?? "gittensor", + createMissingLabel: settings.createMissingLabel ?? true, + publicSurface: settings.publicSurface ?? "comment_and_label", + includeMaintainerAuthors: settings.includeMaintainerAuthors ?? false, + requireLinkedIssue: settings.requireLinkedIssue ?? false, + backfillEnabled: settings.backfillEnabled ?? true, + privateTrustEnabled: settings.privateTrustEnabled ?? true, + }; const db = getDb(env.DB); await db .insert(repositorySettings) .values({ - repoFullName: settings.repoFullName, - commentMode: settings.commentMode, - publicSignalLevel: settings.publicSignalLevel, - checkRunMode: "enabled", - checkRunDetailLevel: settings.checkRunDetailLevel, - backfillEnabled: settings.backfillEnabled, - privateTrustEnabled: settings.privateTrustEnabled, + repoFullName: resolved.repoFullName, + commentMode: resolved.commentMode, + publicSignalLevel: resolved.publicSignalLevel, + checkRunMode: resolved.checkRunMode, + checkRunDetailLevel: resolved.checkRunDetailLevel, + autoLabelEnabled: resolved.autoLabelEnabled, + gittensorLabel: resolved.gittensorLabel, + createMissingLabel: resolved.createMissingLabel, + publicSurface: resolved.publicSurface, + includeMaintainerAuthors: resolved.includeMaintainerAuthors, + requireLinkedIssue: resolved.requireLinkedIssue, + backfillEnabled: resolved.backfillEnabled, + privateTrustEnabled: resolved.privateTrustEnabled, updatedAt: nowIso(), }) .onConflictDoUpdate({ target: repositorySettings.repoFullName, set: { - commentMode: settings.commentMode, - publicSignalLevel: settings.publicSignalLevel, - checkRunMode: "enabled", - checkRunDetailLevel: settings.checkRunDetailLevel, - backfillEnabled: settings.backfillEnabled, - privateTrustEnabled: settings.privateTrustEnabled, + commentMode: resolved.commentMode, + publicSignalLevel: resolved.publicSignalLevel, + checkRunMode: resolved.checkRunMode, + checkRunDetailLevel: resolved.checkRunDetailLevel, + autoLabelEnabled: resolved.autoLabelEnabled, + gittensorLabel: resolved.gittensorLabel, + createMissingLabel: resolved.createMissingLabel, + publicSurface: resolved.publicSurface, + includeMaintainerAuthors: resolved.includeMaintainerAuthors, + requireLinkedIssue: resolved.requireLinkedIssue, + backfillEnabled: resolved.backfillEnabled, + privateTrustEnabled: resolved.privateTrustEnabled, updatedAt: nowIso(), }, }); - return getRepositorySettings(env, settings.repoFullName); + return getRepositorySettings(env, resolved.repoFullName); } export async function upsertRepoSyncState(env: Env, state: RepoSyncStateRecord): Promise { @@ -1859,11 +1898,20 @@ function parseCommentMode(value: string): RepositorySettings["commentMode"] { return "off"; } +function parseCheckRunMode(value: string): RepositorySettings["checkRunMode"] { + return value === "enabled" ? "enabled" : "off"; +} + function parseCheckRunDetailLevel(value: string): RepositorySettings["checkRunDetailLevel"] { if (value === "minimal" || value === "deep") return value; return "standard"; } +function parsePublicSurface(value: string): RepositorySettings["publicSurface"] { + if (value === "comment_only" || value === "label_only" || value === "off") return value; + return "comment_and_label"; +} + function parseSyncStatus(value: string): RepoSyncStateRecord["status"] { if ( value === "running" || diff --git a/src/db/schema.ts b/src/db/schema.ts index 6a7d614f8e..bc07b84a49 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -35,10 +35,16 @@ export const repositories = sqliteTable("repositories", { export const repositorySettings = sqliteTable("repository_settings", { repoFullName: text("repo_full_name").primaryKey(), - commentMode: text("comment_mode").notNull().default("off"), + commentMode: text("comment_mode").notNull().default("detected_contributors_only"), publicSignalLevel: text("public_signal_level").notNull().default("standard"), - checkRunMode: text("check_run_mode").notNull().default("enabled"), - checkRunDetailLevel: text("check_run_detail_level").notNull().default("standard"), + checkRunMode: text("check_run_mode").notNull().default("off"), + checkRunDetailLevel: text("check_run_detail_level").notNull().default("minimal"), + autoLabelEnabled: integer("auto_label_enabled", { mode: "boolean" }).notNull().default(true), + gittensorLabel: text("gittensor_label").notNull().default("gittensor"), + createMissingLabel: integer("create_missing_label", { mode: "boolean" }).notNull().default(true), + publicSurface: text("public_surface").notNull().default("comment_and_label"), + includeMaintainerAuthors: integer("include_maintainer_authors", { mode: "boolean" }).notNull().default(false), + requireLinkedIssue: integer("require_linked_issue", { mode: "boolean" }).notNull().default(false), backfillEnabled: integer("backfill_enabled", { mode: "boolean" }).notNull().default(true), privateTrustEnabled: integer("private_trust_enabled", { mode: "boolean" }).notNull().default(true), createdAt: text("created_at").notNull().default("CURRENT_TIMESTAMP"), diff --git a/src/github/backfill.ts b/src/github/backfill.ts index 650782e85d..ab903a9ccc 100644 --- a/src/github/backfill.ts +++ b/src/github/backfill.ts @@ -577,10 +577,12 @@ export async function refreshContributorActivity( } export const REQUIRED_INSTALLATION_PERMISSIONS: Record = { - checks: "write", metadata: "read", pull_requests: "read", - issues: "read", + issues: "write", +}; +export const OPTIONAL_CHECK_RUN_PERMISSION: Record = { + checks: "write", }; export const REQUIRED_INSTALLATION_EVENTS = ["issues", "pull_request", "repository"] as const; @@ -589,12 +591,17 @@ export const OPTIONAL_VISIBLE_INSTALLATION_EVENTS = ["installation_target"] as c export function enrichInstallationHealth(health: InstallationHealthRecord) { const missingPermissions = new Set(health.missingPermissions); const missingEvents = new Set(health.missingEvents); + const requiredPermissions = { + ...REQUIRED_INSTALLATION_PERMISSIONS, + ...(missingPermissions.has("checks") ? OPTIONAL_CHECK_RUN_PERMISSION : {}), + }; return { ...health, - requiredPermissions: REQUIRED_INSTALLATION_PERMISSIONS, + requiredPermissions, + optionalPermissions: OPTIONAL_CHECK_RUN_PERMISSION, requiredEvents: [...REQUIRED_INSTALLATION_EVENTS], optionalVisibleEvents: [...OPTIONAL_VISIBLE_INSTALLATION_EVENTS], - permissionRemediation: Object.entries(REQUIRED_INSTALLATION_PERMISSIONS).map(([permission, access]) => ({ + permissionRemediation: Object.entries(requiredPermissions).map(([permission, access]) => ({ permission, requiredAccess: access, currentAccess: health.permissions[permission] ?? "missing", @@ -625,7 +632,13 @@ export async function refreshInstallationHealth(env: Env) { const { installation: currentInstallation, errorSummary } = await refreshStoredInstallation(env, installation); const installedRepos = repositories.filter((repo) => repo.installationId === currentInstallation.id && repo.isInstalled); const registeredInstalled = installedRepos.filter((repo) => repo.isRegistered); - const missingPermissions = Object.entries(REQUIRED_INSTALLATION_PERMISSIONS) + const installedSettings = await Promise.all(installedRepos.map((repo) => getRepositorySettings(env, repo.fullName))); + const requiresChecks = installedSettings.some((settings) => settings.checkRunMode === "enabled"); + const requiredPermissions = { + ...REQUIRED_INSTALLATION_PERMISSIONS, + ...(requiresChecks ? OPTIONAL_CHECK_RUN_PERMISSION : {}), + }; + const missingPermissions = Object.entries(requiredPermissions) .filter(([permission, expected]) => !permissionSatisfies(currentInstallation.permissions[permission], expected)) .map(([permission]) => permission); const missingEvents = REQUIRED_INSTALLATION_EVENTS.filter((event) => !currentInstallation.events.includes(event)); diff --git a/src/github/labels.ts b/src/github/labels.ts new file mode 100644 index 0000000000..c6a75e9fbe --- /dev/null +++ b/src/github/labels.ts @@ -0,0 +1,59 @@ +import { Octokit } from "@octokit/core"; +import { createInstallationToken } from "./app"; + +type GitHubLabel = { + name?: string | null; +}; + +export async function ensurePullRequestLabel( + env: Env, + installationId: number, + repoFullName: string, + pullNumber: number, + labelName: string, + options: { createMissingLabel: boolean }, +): Promise<{ applied: boolean; created: boolean }> { + const [owner, repo] = repoFullName.split("/"); + if (!owner || !repo) throw new Error(`Invalid repository full name: ${repoFullName}`); + + const token = await createInstallationToken(env, installationId); + const octokit = new Octokit({ auth: token }); + const existing = await octokit.request("GET /repos/{owner}/{repo}/issues/{issue_number}/labels", { + owner, + repo, + issue_number: pullNumber, + per_page: 100, + }); + const labels = existing.data as GitHubLabel[]; + if (labels.some((label) => label.name?.toLowerCase() === labelName.toLowerCase())) { + return { applied: false, created: false }; + } + + let created = false; + if (options.createMissingLabel) { + const repoLabels = await octokit.request("GET /repos/{owner}/{repo}/labels", { + owner, + repo, + per_page: 100, + }); + const labelExists = (repoLabels.data as GitHubLabel[]).some((label) => label.name?.toLowerCase() === labelName.toLowerCase()); + if (!labelExists) { + await octokit.request("POST /repos/{owner}/{repo}/labels", { + owner, + repo, + name: labelName, + color: "7ee787", + description: "Gittensor contributor context", + }); + created = true; + } + } + + await octokit.request("POST /repos/{owner}/{repo}/issues/{issue_number}/labels", { + owner, + repo, + issue_number: pullNumber, + labels: [labelName], + }); + return { applied: true, created }; +} diff --git a/src/gittensor/api.ts b/src/gittensor/api.ts index 041c5f3af2..b572cdd16f 100644 --- a/src/gittensor/api.ts +++ b/src/gittensor/api.ts @@ -146,58 +146,28 @@ export type GittensorContributorSnapshot = { }; export async function fetchGittensorContributorSnapshot(login: string): Promise { + try { + const detection = await fetchOfficialGittensorMiner(login); + return detection.status === "confirmed" ? detection.snapshot : null; + } catch { + return null; + } +} + +export type OfficialGittensorMinerDetection = + | { status: "confirmed"; snapshot: GittensorContributorSnapshot } + | { status: "not_found" } + | { status: "unavailable"; error: string }; + +export async function fetchOfficialGittensorMiner(login: string): Promise { try { const miners = await fetchJson(`${GITTENSOR_API_BASE}/miners`); const normalizedLogin = login.toLowerCase(); const miner = miners.find((candidate) => candidate.githubUsername?.toLowerCase() === normalizedLogin || candidate.githubId === login); - if (!miner?.githubId || !miner.githubUsername) return null; - - const [detailResult, pullRequestsResult, issuesResult] = await Promise.allSettled([ - fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}`), - fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}/prs`), - fetchJson(`${GITTENSOR_MIRROR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}/issues`), - ]); - const detail = detailResult.status === "fulfilled" ? detailResult.value : {}; - const pullRequests = pullRequestsResult.status === "fulfilled" ? pullRequestsResult.value : []; - const issues = issuesResult.status === "fulfilled" ? issuesResult.value.issues ?? [] : []; - const source = { ...miner, ...detail }; - - return { - source: "gittensor_api", - githubId: miner.githubId, - githubUsername: miner.githubUsername, - uid: source.uid, - hotkey: source.hotkey, - failedReason: source.failedReason, - evaluatedAt: source.evaluatedAt, - updatedAt: source.updatedAt, - isEligible: Boolean(source.isEligible), - credibility: asNumber(source.credibility), - eligibleRepoCount: asNumber(source.eligibleRepoCount), - issueDiscoveryScore: asNumber(source.issueDiscoveryScore), - issueTokenScore: asNumber(source.issueTokenScore), - issueCredibility: asNumber(source.issueCredibility, 1), - isIssueEligible: Boolean(source.isIssueEligible), - issueEligibleRepoCount: asNumber(source.issueEligibleRepoCount), - alphaPerDay: asNumber(source.alphaPerDay), - taoPerDay: asNumber(source.taoPerDay), - usdPerDay: asNumber(source.usdPerDay), - totals: { - pullRequests: asNumber(source.totalPrs), - mergedPullRequests: asNumber(source.totalMergedPrs), - openPullRequests: asNumber(source.totalOpenPrs), - closedPullRequests: asNumber(source.totalClosedPrs), - openIssues: asNumber(source.totalOpenIssues), - closedIssues: asNumber(source.totalClosedIssues), - solvedIssues: asNumber(source.totalSolvedIssues), - validSolvedIssues: asNumber(source.totalValidSolvedIssues), - }, - repositories: (detail.repositories ?? []).map(toRepositoryEvaluation).filter((repo) => repo.pullRequests + repo.openIssues + repo.closedIssues > 0), - pullRequests: pullRequests.map(toPullRequest).filter((pr) => pr.repoFullName && pr.number > 0), - issueLabels: issues.flatMap((issue) => (issue.labels ?? []).flatMap((label) => (label.name ? [label.name] : []))), - }; - } catch { - return null; + if (!miner?.githubId || !miner.githubUsername) return { status: "not_found" }; + return { status: "confirmed", snapshot: await buildGittensorContributorSnapshot(miner) }; + } catch (error) { + return { status: "unavailable", error: error instanceof Error ? error.message : "unknown Gittensor API error" }; } } @@ -217,6 +187,53 @@ export function contributorRepoStatsFromGittensor(snapshot: GittensorContributor })); } +async function buildGittensorContributorSnapshot(miner: GittensorMinerSummaryResponse): Promise { + const [detailResult, pullRequestsResult, issuesResult] = await Promise.allSettled([ + fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}`), + fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}/prs`), + fetchJson(`${GITTENSOR_MIRROR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}/issues`), + ]); + const detail = detailResult.status === "fulfilled" ? detailResult.value : {}; + const pullRequests = pullRequestsResult.status === "fulfilled" ? pullRequestsResult.value : []; + const issues = issuesResult.status === "fulfilled" ? issuesResult.value.issues ?? [] : []; + const source = { ...miner, ...detail }; + + return { + source: "gittensor_api", + githubId: miner.githubId ?? "", + githubUsername: miner.githubUsername ?? "", + uid: source.uid, + hotkey: source.hotkey, + failedReason: source.failedReason, + evaluatedAt: source.evaluatedAt, + updatedAt: source.updatedAt, + isEligible: Boolean(source.isEligible), + credibility: asNumber(source.credibility), + eligibleRepoCount: asNumber(source.eligibleRepoCount), + issueDiscoveryScore: asNumber(source.issueDiscoveryScore), + issueTokenScore: asNumber(source.issueTokenScore), + issueCredibility: asNumber(source.issueCredibility, 1), + isIssueEligible: Boolean(source.isIssueEligible), + issueEligibleRepoCount: asNumber(source.issueEligibleRepoCount), + alphaPerDay: asNumber(source.alphaPerDay), + taoPerDay: asNumber(source.taoPerDay), + usdPerDay: asNumber(source.usdPerDay), + totals: { + pullRequests: asNumber(source.totalPrs), + mergedPullRequests: asNumber(source.totalMergedPrs), + openPullRequests: asNumber(source.totalOpenPrs), + closedPullRequests: asNumber(source.totalClosedPrs), + openIssues: asNumber(source.totalOpenIssues), + closedIssues: asNumber(source.totalClosedIssues), + solvedIssues: asNumber(source.totalSolvedIssues), + validSolvedIssues: asNumber(source.totalValidSolvedIssues), + }, + repositories: (detail.repositories ?? []).map(toRepositoryEvaluation).filter((repo) => repo.pullRequests + repo.openIssues + repo.closedIssues > 0), + pullRequests: pullRequests.map(toPullRequest).filter((pr) => pr.repoFullName && pr.number > 0), + issueLabels: issues.flatMap((issue) => (issue.labels ?? []).flatMap((label) => (label.name ? [label.name] : []))), + }; +} + async function fetchJson(url: string): Promise { const response = await fetch(url, { headers: { diff --git a/src/openapi/schemas.ts b/src/openapi/schemas.ts index c069cdd8dc..8620428029 100644 --- a/src/openapi/schemas.ts +++ b/src/openapi/schemas.ts @@ -434,8 +434,14 @@ export const RepositorySettingsSchema = z repoFullName: z.string(), commentMode: z.enum(["off", "detected_contributors_only", "all_prs"]), publicSignalLevel: z.enum(["minimal", "standard"]), - checkRunMode: z.enum(["enabled"]), + checkRunMode: z.enum(["off", "enabled"]), checkRunDetailLevel: z.enum(["minimal", "standard", "deep"]), + autoLabelEnabled: z.boolean(), + gittensorLabel: z.string(), + createMissingLabel: z.boolean(), + publicSurface: z.enum(["off", "comment_and_label", "comment_only", "label_only"]), + includeMaintainerAuthors: z.boolean(), + requireLinkedIssue: z.boolean(), backfillEnabled: z.boolean(), privateTrustEnabled: z.boolean(), createdAt: z.string().nullable().optional(), diff --git a/src/queue/processors.ts b/src/queue/processors.ts index d42f5e78d4..fae731a1d5 100644 --- a/src/queue/processors.ts +++ b/src/queue/processors.ts @@ -4,7 +4,6 @@ import { getLatestRepoGithubTotalsSnapshot, getRepository, getRepositorySettings, - listCheckSummaries, listAllIssues, listAllPullRequests, listContributorIssues, @@ -14,8 +13,6 @@ import { listIssueSignalSample, listOtherOpenPullRequests, listOpenPullRequests, - listPullRequestFiles, - listPullRequestReviews, listPullRequests, listRecentMergedPullRequests, listRepoLabels, @@ -44,9 +41,10 @@ import { refreshContributorActivity, refreshInstallationHealth, } from "../github/backfill"; -import { contributorRepoStatsFromGittensor, fetchGittensorContributorSnapshot } from "../gittensor/api"; +import { contributorRepoStatsFromGittensor, fetchGittensorContributorSnapshot, fetchOfficialGittensorMiner, type GittensorContributorSnapshot } from "../gittensor/api"; import { createOrUpdateCheckRun, getInstallationId } from "../github/app"; import { createOrUpdatePrIntelligenceComment } from "../github/comments"; +import { ensurePullRequestLabel } from "../github/labels"; import { fetchPublicContributorProfile } from "../github/public"; import { refreshRegistry } from "../registry/sync"; import { buildIssueAdvisory, buildPullRequestAdvisory } from "../rules/advisory"; @@ -70,9 +68,7 @@ import { buildPublicPrIntelligenceComment, buildQueueHealth, detectGittensorContributor, - shouldPublishPrIntelligenceComment, } from "../signals/engine"; -import { buildPullRequestReviewability } from "../signals/reward-risk"; import type { ContributorEvidenceRecord, GitHubWebhookPayload, JobMessage, JsonValue } from "../types"; export async function processJob(env: Env, message: JobMessage): Promise { @@ -431,38 +427,24 @@ async function processGitHubWebhook(env: Env, deliveryId: string, eventName: str if (payload.repository) await upsertRepositoryFromGitHub(env, payload.repository, installationId ?? undefined); if (payload.repository?.full_name && payload.pull_request) { - const pr = await upsertPullRequestFromGitHub(env, payload.repository.full_name, payload.pull_request); - const repo = await getRepository(env, payload.repository.full_name); - const [otherOpenPullRequests, issues, pullRequests, files, reviews, checks, recentMergedPullRequests] = await Promise.all([ - listOtherOpenPullRequests(env, payload.repository.full_name, pr.number), - listIssues(env, payload.repository.full_name), - listPullRequests(env, payload.repository.full_name), - listPullRequestFiles(env, payload.repository.full_name, pr.number), - listPullRequestReviews(env, payload.repository.full_name, pr.number), - listCheckSummaries(env, payload.repository.full_name, pr.number), - listRecentMergedPullRequests(env, payload.repository.full_name), + const repoFullName = payload.repository.full_name; + const pr = await upsertPullRequestFromGitHub(env, repoFullName, payload.pull_request); + const [repo, settings, otherOpenPullRequests] = await Promise.all([ + getRepository(env, repoFullName), + getRepositorySettings(env, repoFullName), + listOtherOpenPullRequests(env, repoFullName, pr.number), ]); - const reviewability = buildPullRequestReviewability({ - repo, - pullRequest: pr, - issues, - pullRequests, - files, - reviews, - checks, - recentMergedPullRequests, - repoFullName: payload.repository.full_name, - pullNumber: pr.number, - }); - const advisory = buildPullRequestAdvisory(repo, pr, { otherOpenPullRequests, reviewabilityText: reviewability.privateSummary }); + const advisory = buildPullRequestAdvisory(repo, pr, { otherOpenPullRequests, requireLinkedIssue: settings.requireLinkedIssue }); await persistAdvisory(env, advisory); - if (installationId && advisory.headSha) await createOrUpdateCheckRun(env, installationId, payload.repository.full_name, advisory); if (installationId) { - await maybePublishPrIntelligenceComment(env, installationId, payload.repository.full_name, pr, repo).catch((error) => { + await maybePublishPrPublicSurface(env, installationId, repoFullName, pr, repo, settings, advisory, { + deliveryId, + authorType: payload.pull_request.user?.type, + }).catch((error) => { console.error( JSON.stringify({ level: "warn", - event: "pr_intelligence_comment_failed", + event: "pr_public_surface_failed", deliveryId, repository: payload.repository?.full_name, pullNumber: pr.number, @@ -504,32 +486,60 @@ async function processGitHubWebhook(env: Env, deliveryId: string, eventName: str } } -async function maybePublishPrIntelligenceComment( +async function maybePublishPrPublicSurface( env: Env, installationId: number, repoFullName: string, pr: Awaited>, repo: Awaited>, + settings: Awaited>, + advisory: Awaited>, + webhook: { deliveryId: string; authorType?: string | undefined }, ): Promise { - const settings = await getRepositorySettings(env, repoFullName); - if (settings.commentMode === "off") return; + if (!hasVisiblePrSurface(settings)) return; const author = pr.authorLogin; - if (!author) return; + if (!author) { + await auditPrVisibilitySkip(env, repoFullName, pr.number, null, "missing_author", webhook.deliveryId); + return; + } + if (webhook.authorType === "Bot" || /\[bot\]$/i.test(author)) { + await auditPrVisibilitySkip(env, repoFullName, pr.number, author, "bot_author", webhook.deliveryId); + return; + } + if (!settings.includeMaintainerAuthors && pr.authorAssociation && ["OWNER", "MEMBER", "COLLABORATOR"].includes(pr.authorAssociation)) { + await auditPrVisibilitySkip(env, repoFullName, pr.number, author, "maintainer_author", webhook.deliveryId); + return; + } + + const official = await fetchOfficialGittensorMiner(author); + if (official.status === "unavailable") { + await recordAuditEvent(env, { + eventType: "github_app.miner_detection_unavailable", + actor: author, + targetKey: `${repoFullName}#${pr.number}`, + outcome: "error", + detail: official.error, + metadata: { deliveryId: webhook.deliveryId }, + }); + return; + } + if (official.status === "not_found") { + await auditPrVisibilitySkip(env, repoFullName, pr.number, author, "not_official_gittensor_miner", webhook.deliveryId); + return; + } - const [contributorPullRequests, contributorIssues, repoIssues, repoPullRequests, github, cachedRepoStats, gittensorSnapshot] = await Promise.all([ + const [contributorPullRequests, contributorIssues, repoIssues, repoPullRequests, github, cachedRepoStats] = await Promise.all([ listContributorPullRequests(env, author), listContributorIssues(env, author), listIssues(env, repoFullName), listPullRequests(env, repoFullName), fetchPublicContributorProfile(author), listContributorRepoStats(env, author), - fetchGittensorContributorSnapshot(author), ]); - const repoStats = authoritativeContributorRepoStats(gittensorSnapshot, cachedRepoStats); - const detection = detectGittensorContributor(author, pr, contributorPullRequests, contributorIssues, repoStats); - if (!shouldPublishPrIntelligenceComment(settings, detection)) return; + const repoStats = authoritativeContributorRepoStats(official.snapshot, cachedRepoStats); + const detection = officialGittensorContributorDetection(official.snapshot, pr, contributorPullRequests, contributorIssues, repoStats); - const profile = buildContributorProfile(author, github, contributorPullRequests, contributorIssues, repoStats, gittensorSnapshot); + const profile = buildContributorProfile(author, github, contributorPullRequests, contributorIssues, repoStats, official.snapshot); const collisions = buildCollisionReport(repoFullName, repoIssues, repoPullRequests); const queueHealth = buildQueueHealth(repo, repoIssues, repoPullRequests, collisions); const preflight = buildPreflightResult( @@ -546,17 +556,96 @@ async function maybePublishPrIntelligenceComment( repoIssues, repoPullRequests, ); - const body = buildPublicPrIntelligenceComment({ - repo, - pr, - profile, - detection, - queueHealth, - collisions, - preflight, - settings, + if (shouldPublishPrComment(settings)) { + const body = buildPublicPrIntelligenceComment({ + repo, + pr, + profile, + detection, + queueHealth, + collisions, + preflight, + settings, + }); + await createOrUpdatePrIntelligenceComment(env, installationId, repoFullName, pr.number, body); + } + if (shouldApplyPrLabel(settings)) { + await ensurePullRequestLabel(env, installationId, repoFullName, pr.number, settings.gittensorLabel, { + createMissingLabel: settings.createMissingLabel, + }); + } + if (settings.checkRunMode === "enabled" && advisory.headSha) { + await createOrUpdateCheckRun(env, installationId, repoFullName, { + ...advisory, + conclusion: "success", + severity: "info", + title: "Gittensory context posted", + summary: "Gittensory posted public-safe contributor context.", + findings: [], + }); + } + await recordAuditEvent(env, { + eventType: "github_app.pr_public_surface_published", + actor: author, + targetKey: `${repoFullName}#${pr.number}`, + outcome: "completed", + metadata: { + deliveryId: webhook.deliveryId, + publicSurface: settings.publicSurface, + label: shouldApplyPrLabel(settings) ? settings.gittensorLabel : null, + checkRunMode: settings.checkRunMode, + }, }); - await createOrUpdatePrIntelligenceComment(env, installationId, repoFullName, pr.number, body); +} + +function hasVisiblePrSurface(settings: Awaited>): boolean { + return settings.publicSurface !== "off" || settings.checkRunMode === "enabled"; +} + +function shouldPublishPrComment(settings: Awaited>): boolean { + if (settings.commentMode === "off") return false; + return settings.publicSurface === "comment_and_label" || settings.publicSurface === "comment_only"; +} + +function shouldApplyPrLabel(settings: Awaited>): boolean { + return settings.autoLabelEnabled && (settings.publicSurface === "comment_and_label" || settings.publicSurface === "label_only"); +} + +async function auditPrVisibilitySkip( + env: Env, + repoFullName: string, + pullNumber: number, + author: string | null, + reason: string, + deliveryId: string, +): Promise { + await recordAuditEvent(env, { + eventType: "github_app.pr_visibility_skipped", + actor: author, + targetKey: `${repoFullName}#${pullNumber}`, + outcome: "completed", + detail: reason, + metadata: { deliveryId }, + }); +} + +function officialGittensorContributorDetection( + snapshot: GittensorContributorSnapshot, + currentPr: Awaited>, + pullRequests: Awaited>, + issues: Awaited>, + repoStats: Awaited>, +) { + const cached = detectGittensorContributor(snapshot.githubUsername, currentPr, pullRequests, issues, repoStats); + return { + ...cached, + detected: true, + source: "official_gittensor_api" as const, + reason: "Official Gittensor API confirms this GitHub user.", + priorPullRequests: Math.max(cached.priorPullRequests, snapshot.totals.pullRequests), + priorMergedPullRequests: Math.max(cached.priorMergedPullRequests, snapshot.totals.mergedPullRequests), + priorIssues: Math.max(cached.priorIssues, snapshot.totals.openIssues + snapshot.totals.closedIssues), + }; } function authoritativeContributorRepoStats( diff --git a/src/rules/advisory.ts b/src/rules/advisory.ts index c7a529610f..c63e8194b3 100644 --- a/src/rules/advisory.ts +++ b/src/rules/advisory.ts @@ -28,7 +28,7 @@ export function buildRepositoryAdvisory(repo: RepositoryRecord | null, fullName: export function buildPullRequestAdvisory( repo: RepositoryRecord | null, pr: PullRequestRecord | null, - context: { otherOpenPullRequests?: PullRequestRecord[]; reviewabilityText?: string } = {}, + context: { otherOpenPullRequests?: PullRequestRecord[]; requireLinkedIssue?: boolean } = {}, ): Advisory { const repoFullName = pr?.repoFullName ?? repo?.fullName ?? "unknown/unknown"; const targetKey = pr ? `${repoFullName}#${pr.number}` : `${repoFullName}#unknown`; @@ -53,15 +53,7 @@ export function buildPullRequestAdvisory( action: "Re-deliver the webhook or wait for the next sync.", }); } else { - addPullRequestFindings(repo, pr, findings, context.otherOpenPullRequests ?? []); - } - if (context.reviewabilityText) { - findings.push({ - code: "private_reviewability_context", - severity: "info", - title: "Private reviewability context", - detail: context.reviewabilityText, - }); + addPullRequestFindings(repo, pr, findings, context.otherOpenPullRequests ?? [], Boolean(context.requireLinkedIssue)); } return advisory("pull_request", targetKey, repoFullName, findings, "Pull request advisory generated.", pr?.number, undefined, pr?.headSha ?? undefined); } @@ -94,15 +86,10 @@ export function buildIssueAdvisory(repo: RepositoryRecord | null, issue: IssueRe } export function formatCheckRunOutput(advisoryResult: Advisory): { title: string; summary: string; text: string } { - const sections = advisoryResult.findings.map((finding) => { - const publicText = finding.publicText ?? finding.detail; - const action = finding.action ? `\nAction: ${finding.action}` : ""; - return `### ${finding.title}\n${publicText}${action}`; - }); return { - title: advisoryResult.title, - summary: advisoryResult.summary, - text: sections.length > 0 ? sections.join("\n\n") : "No advisory findings.", + title: advisoryResult.conclusion === "success" ? "Gittensory context checked" : "Gittensory context posted", + summary: "Gittensory public check output is intentionally minimal. Detailed maintainer context is available only through private API/MCP surfaces.", + text: "No detailed findings are published in check runs.", }; } @@ -159,6 +146,7 @@ function addPullRequestFindings( pr: PullRequestRecord, findings: AdvisoryFinding[], otherOpenPullRequests: PullRequestRecord[], + requireLinkedIssue: boolean, ): void { if (pr.state !== "open") { findings.push({ @@ -168,7 +156,7 @@ function addPullRequestFindings( detail: `The pull request state is ${pr.state}.`, }); } - if (pr.linkedIssues.length === 0) { + if (pr.linkedIssues.length === 0 && requireLinkedIssue) { findings.push({ code: "missing_linked_issue", severity: "warning", @@ -261,7 +249,7 @@ function advisory( ): Advisory { const severity = highestSeverity(findings); const conclusion = conclusionForSeverity(severity, findings); - const title = conclusion === "success" ? "Gittensory advisory passed" : "Gittensory advisory needs review"; + const title = conclusion === "success" ? "Gittensory advisory passed" : "Gittensory advisory available"; return { id: crypto.randomUUID(), targetType, diff --git a/src/signals/engine.ts b/src/signals/engine.ts index a64be8c086..b16da8b95e 100644 --- a/src/signals/engine.ts +++ b/src/signals/engine.ts @@ -410,6 +410,7 @@ export type BountyAdvisory = { export type ContributorDetection = { detected: boolean; reason: string; + source?: "official_gittensor_api" | "github_cache"; priorPullRequests: number; priorMergedPullRequests: number; priorIssues: number; @@ -1053,8 +1054,8 @@ export function detectGittensorContributor( export function shouldPublishPrIntelligenceComment(settings: RepositorySettings, detection: ContributorDetection): boolean { if (settings.commentMode === "off") return false; - if (settings.commentMode === "all_prs") return true; - return detection.detected; + if (settings.publicSurface !== "comment_and_label" && settings.publicSurface !== "comment_only") return false; + return detection.detected && detection.source === "official_gittensor_api"; } export function buildContributorOpportunities( @@ -2202,9 +2203,16 @@ export function buildPublicPrIntelligenceComment(args: { }): string { const publicFindings = args.preflight.findings .filter((finding) => finding.severity !== "critical") + .filter((finding) => args.settings.requireLinkedIssue || finding.code !== "missing_linked_issue") + .filter((finding) => !containsPrivatePublicTerm([finding.code, finding.title, finding.detail, finding.publicText, finding.action].filter(Boolean).join(" "))) .slice(0, args.settings.publicSignalLevel === "minimal" ? 2 : 5); const collisionCount = args.collisions.clusters.length; - const linkedIssues = args.pr.linkedIssues.length > 0 ? args.pr.linkedIssues.map((issue) => `#${issue}`).join(", ") : "None detected"; + const linkedIssues = + args.pr.linkedIssues.length > 0 + ? args.pr.linkedIssues.map((issue) => `#${issue}`).join(", ") + : args.settings.requireLinkedIssue + ? "None detected" + : "Not required by this repo setting"; const roleContext = buildRoleContext({ login: args.pr.authorLogin ?? args.profile.login, repo: args.repo, @@ -2215,20 +2223,21 @@ export function buildPublicPrIntelligenceComment(args: { }); const nextSteps = [ ...(roleContext.maintainerLane ? ["Treat this as maintainer-lane context rather than normal contributor-lane activity."] : []), - ...(args.pr.linkedIssues.length === 0 ? ["Link the issue being solved, or explain why this is a no-issue PR."] : []), + ...(args.settings.requireLinkedIssue && args.pr.linkedIssues.length === 0 ? ["Link the issue being solved, or explain why this is a no-issue PR."] : []), ...(collisionCount > 0 ? ["Check overlapping issues/PRs before review continues."] : []), ...(publicFindings.length > 0 ? publicFindings.flatMap((finding) => (finding.action ? [finding.action] : [])) : []), - ]; + ].filter((step) => !containsPrivatePublicTerm(step)); return [ "", "## Gittensory contribution context", "", - "_Advisory context generated from public GitHub metadata and Gittensory's registered-repo cache. This is not an endorsement or compensation estimate._", + "_Advisory context generated from public GitHub metadata and Gittensory's registered-repo cache. This is not an endorsement._", "", "### Contributor context", `- Author: \`${args.pr.authorLogin ?? "unknown"}\``, + `- Confirmed Gittensor miner: ${args.detection.source === "official_gittensor_api" ? "yes" : "not confirmed"}`, `- Role context: ${roleContext.role}${roleContext.maintainerLane ? " (maintainer lane)" : ""}`, - `- Registered-repo signal: ${args.detection.detected ? args.detection.reason : "No prior cached registered-repo activity detected."}`, + `- Gittensory signal: ${args.detection.detected ? args.detection.reason : "No confirmed Gittensor miner activity detected."}`, `- Prior cached PRs/issues: ${args.detection.priorPullRequests} PR(s), ${args.detection.priorIssues} issue(s)`, `- Public profile languages: ${args.profile.github.topLanguages.length > 0 ? args.profile.github.topLanguages.join(", ") : "not available"}`, "", @@ -2251,6 +2260,10 @@ export function buildPublicPrIntelligenceComment(args: { ].join("\n"); } +function containsPrivatePublicTerm(value: string): boolean { + return /\b(reward|payout|farming|wallet|hotkey|trust score|raw trust|estimated score|scoreability|likely_duplicate|reviewability\s*\d|\/100)\b/i.test(value); +} + function issueItem(issue: IssueRecord): CollisionItem { return { type: "issue", diff --git a/src/types.ts b/src/types.ts index 39029a4f40..3e223b05bf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -120,6 +120,7 @@ export type GitHubPullRequestPayload = { updated_at?: string | null; user?: { login?: string; + type?: string; }; author_association?: string; head?: { @@ -267,8 +268,14 @@ export type RepositorySettings = { repoFullName: string; commentMode: "off" | "detected_contributors_only" | "all_prs"; publicSignalLevel: "minimal" | "standard"; - checkRunMode: "enabled"; + checkRunMode: "off" | "enabled"; checkRunDetailLevel: "minimal" | "standard" | "deep"; + autoLabelEnabled: boolean; + gittensorLabel: string; + createMissingLabel: boolean; + publicSurface: "off" | "comment_and_label" | "comment_only" | "label_only"; + includeMaintainerAuthors: boolean; + requireLinkedIssue: boolean; backfillEnabled: boolean; privateTrustEnabled: boolean; createdAt?: string | null | undefined; diff --git a/test/integration/api.test.ts b/test/integration/api.test.ts index 22a084907c..25949a088e 100644 --- a/test/integration/api.test.ts +++ b/test/integration/api.test.ts @@ -486,8 +486,9 @@ describe("api routes", () => { expect(installationHealth.status).toBe(200); await expect(installationHealth.json()).resolves.toMatchObject({ installationId: 123, - requiredPermissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, - permissionRemediation: expect.arrayContaining([expect.objectContaining({ permission: "checks", ok: true })]), + requiredPermissions: { metadata: "read", pull_requests: "read", issues: "write" }, + optionalPermissions: { checks: "write" }, + permissionRemediation: expect.arrayContaining([expect.objectContaining({ permission: "issues", ok: true })]), repairSteps: ["No repair needed."], }); @@ -1357,7 +1358,7 @@ async function seedSignalData(env: Env): Promise { id: 123, account: { login: "entrius", id: 1, type: "Organization" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }, }); @@ -1502,7 +1503,7 @@ async function seedSignalData(env: Env): Promise { status: "healthy", missingPermissions: [], missingEvents: [], - permissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], checkedAt: "2026-05-23T00:00:00.000Z", }); diff --git a/test/unit/backfill.test.ts b/test/unit/backfill.test.ts index bf49990169..306241d6cd 100644 --- a/test/unit/backfill.test.ts +++ b/test/unit/backfill.test.ts @@ -285,6 +285,51 @@ describe("GitHub backfill", () => { expect(refreshed.installations).toEqual(expect.arrayContaining([expect.objectContaining({ installationId: 124, status: "healthy" })])); }); + it("requires Checks write only for repos with check runs enabled", async () => { + const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); + await seedRegisteredRepo(env); + await upsertInstallation(env, { + installation: { + id: 123, + account: { login: "JSONbored", id: 1, type: "User" }, + repository_selection: "selected", + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, + events: ["issues", "pull_request", "repository"], + }, + }); + await upsertRepositoryFromGitHub(env, { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, 123); + await upsertRepositorySettings(env, { + repoFullName: "JSONbored/gittensory", + checkRunMode: "enabled", + }); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.endsWith("/app/installations/123")) { + return Response.json({ + id: 123, + account: { login: "JSONbored", id: 1, type: "User" }, + repository_selection: "selected", + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, + events: ["issues", "pull_request", "repository"], + }); + } + return new Response("not found", { status: 404 }); + }); + + const refreshed = await refreshInstallationHealth(env); + + expect(refreshed.installations).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + installationId: 123, + status: "needs_attention", + missingPermissions: ["checks"], + requiredPermissions: expect.objectContaining({ checks: "write" }), + }), + ]), + ); + }); + it("refreshes installation health from live GitHub App metadata", async () => { const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); await seedRegisteredRepo(env); @@ -333,7 +378,7 @@ describe("GitHub backfill", () => { id: 123, account: { login: "JSONbored", id: 1, type: "User" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }); } @@ -346,7 +391,7 @@ describe("GitHub backfill", () => { expect.objectContaining({ installationId: 123, status: "healthy", - errorSummary: undefined, + missingPermissions: [], }), ]), ); @@ -360,7 +405,7 @@ describe("GitHub backfill", () => { id: 123, account: { login: "JSONbored", id: 1, type: "User" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }, }); diff --git a/test/unit/data-spine.test.ts b/test/unit/data-spine.test.ts index 147e99e67a..8ec3758785 100644 --- a/test/unit/data-spine.test.ts +++ b/test/unit/data-spine.test.ts @@ -229,7 +229,12 @@ describe("data spine repositories", () => { expect(await getRepository(env, "owner/repo")).toMatchObject({ owner: "owner", isInstalled: false, isPrivate: false }); expect(await getRepository(env, "OWNER/REPO")).toMatchObject({ fullName: "owner/repo" }); expect(await getRepository(env, "missing/repo")).toBeNull(); - expect(await getRepositorySettings(env, "missing/repo")).toMatchObject({ commentMode: "off", checkRunDetailLevel: "standard" }); + expect(await getRepositorySettings(env, "missing/repo")).toMatchObject({ + commentMode: "detected_contributors_only", + checkRunMode: "off", + checkRunDetailLevel: "minimal", + publicSurface: "comment_and_label", + }); expect(await getRepoSyncState(env, "missing/repo")).toBeNull(); expect(await getPullRequest(env, "owner/repo", 404)).toBeNull(); expect(await getIssue(env, "owner/repo", 404)).toBeNull(); diff --git a/test/unit/github-app.test.ts b/test/unit/github-app.test.ts index 0807dc53b0..82cbd6f3fc 100644 --- a/test/unit/github-app.test.ts +++ b/test/unit/github-app.test.ts @@ -22,10 +22,11 @@ describe("GitHub check runs", () => { return Response.json({ total_count: 0, check_runs: [] }); } if (url.includes("/check-runs")) { - const body = JSON.parse(String(init?.body)) as { name: string; conclusion: string; output: { text: string } }; + const body = JSON.parse(String(init?.body)) as { name: string; conclusion: string; output: { title: string; text: string } }; expect(body.name).toBe("Gittensory"); expect(body.conclusion).toBe("neutral"); - expect(body.output.text).not.toMatch(/reward|farming/i); + expect(body.output.title).toBe("Gittensory context posted"); + expect(body.output.text).not.toMatch(/linked issue|reviewability|reward|farming|wallet|hotkey|trust score/i); return Response.json({ id: 42, html_url: "https://github.com/checks/42" }, { status: 201 }); } return new Response("not found", { status: 404 }); @@ -41,7 +42,7 @@ describe("GitHub check runs", () => { headSha: "abc123", conclusion: "neutral", severity: "warning", - title: "Gittensory advisory needs review", + title: "Gittensory advisory available", summary: "1 advisory finding generated.", findings: [ { @@ -85,9 +86,11 @@ describe("GitHub check runs", () => { return Response.json({ total_count: 1, check_runs: [{ id: 42, name: "Gittensory" }] }); } if (url.includes("/check-runs/42")) { - const body = JSON.parse(String(init?.body)) as { name: string; conclusion: string }; + const body = JSON.parse(String(init?.body)) as { name: string; conclusion: string; output: { title: string; text: string } }; expect(body.name).toBe("Gittensory"); expect(body.conclusion).toBe("success"); + expect(body.output.title).toBe("Gittensory context checked"); + expect(body.output.text).not.toMatch(/reviewability|reward|farming|wallet|hotkey|trust score/i); return Response.json({ id: 42, html_url: "https://github.com/checks/42" }); } return new Response("not found", { status: 404 }); diff --git a/test/unit/github-labels.test.ts b/test/unit/github-labels.test.ts new file mode 100644 index 0000000000..370e22a156 --- /dev/null +++ b/test/unit/github-labels.test.ts @@ -0,0 +1,104 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { generateKeyPairSync } from "node:crypto"; +import { ensurePullRequestLabel } from "../../src/github/labels"; +import { createTestEnv } from "../helpers/d1"; + +describe("GitHub PR labels", () => { + afterEach(() => { + vi.unstubAllGlobals(); + }); + + it("rejects invalid repository names before making GitHub calls", async () => { + await expect(ensurePullRequestLabel(createTestEnv(), 123, "invalid", 4, "gittensor", { createMissingLabel: true })).rejects.toThrow(/Invalid repository full name/); + }); + + it("does nothing when the label is already applied", async () => { + const calls: string[] = []; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + calls.push(`${init?.method ?? "GET"} ${url}`); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/4/labels")) return Response.json([{ name: "GitTensor" }]); + return new Response("unexpected", { status: 500 }); + }); + + const result = await ensurePullRequestLabel(createTestEnv({ GITHUB_APP_PRIVATE_KEY: generateRsaPrivateKeyPem() }), 123, "JSONbored/gittensory", 4, "gittensor", { + createMissingLabel: true, + }); + + expect(result).toEqual({ applied: false, created: false }); + expect(calls.some((call) => call.includes("/repos/JSONbored/gittensory/labels"))).toBe(false); + }); + + it("applies an existing repository label without creating it", async () => { + const calls: string[] = []; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + calls.push(`${method} ${url}`); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/4/labels") && method === "GET") return Response.json([]); + if (url.includes("/repos/JSONbored/gittensory/labels") && method === "GET") return Response.json([{ name: "gittensor" }]); + if (url.includes("/issues/4/labels") && method === "POST") return Response.json([{ name: "gittensor" }]); + return new Response("unexpected", { status: 500 }); + }); + + const result = await ensurePullRequestLabel(createTestEnv({ GITHUB_APP_PRIVATE_KEY: generateRsaPrivateKeyPem() }), 123, "JSONbored/gittensory", 4, "gittensor", { + createMissingLabel: true, + }); + + expect(result).toEqual({ applied: true, created: false }); + expect(calls.some((call) => call.startsWith("POST ") && call.endsWith("/repos/JSONbored/gittensory/labels"))).toBe(false); + }); + + it("creates a missing repository label when configured", async () => { + const calls: string[] = []; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + calls.push(`${method} ${url}`); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/4/labels") && method === "GET") return Response.json([]); + if (url.includes("/repos/JSONbored/gittensory/labels") && method === "GET") return Response.json([]); + if (url.includes("/repos/JSONbored/gittensory/labels") && method === "POST") { + const body = JSON.parse(String(init?.body ?? "{}")) as { name?: string; color?: string }; + expect(body).toMatchObject({ name: "gittensor", color: "7ee787" }); + return Response.json({ name: "gittensor" }, { status: 201 }); + } + if (url.includes("/issues/4/labels") && method === "POST") return Response.json([{ name: "gittensor" }]); + return new Response("unexpected", { status: 500 }); + }); + + const result = await ensurePullRequestLabel(createTestEnv({ GITHUB_APP_PRIVATE_KEY: generateRsaPrivateKeyPem() }), 123, "JSONbored/gittensory", 4, "gittensor", { + createMissingLabel: true, + }); + + expect(result).toEqual({ applied: true, created: true }); + expect(calls).toEqual(expect.arrayContaining([expect.stringMatching(/^POST .*\/repos\/JSONbored\/gittensory\/labels$/)])); + }); + + it("applies a configured label without creating the repository label when creation is disabled", async () => { + const calls: string[] = []; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + calls.push(`${method} ${url}`); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/4/labels") && method === "GET") return Response.json([]); + if (url.includes("/issues/4/labels") && method === "POST") return Response.json([{ name: "gittensor" }]); + return new Response("unexpected", { status: 500 }); + }); + + const result = await ensurePullRequestLabel(createTestEnv({ GITHUB_APP_PRIVATE_KEY: generateRsaPrivateKeyPem() }), 123, "JSONbored/gittensory", 4, "gittensor", { + createMissingLabel: false, + }); + + expect(result).toEqual({ applied: true, created: false }); + expect(calls.some((call) => call.includes("/repos/JSONbored/gittensory/labels"))).toBe(false); + }); +}); + +function generateRsaPrivateKeyPem(): string { + const { privateKey } = generateKeyPairSync("rsa", { modulusLength: 2048 }); + return privateKey.export({ type: "pkcs1", format: "pem" }).toString(); +} diff --git a/test/unit/queue.test.ts b/test/unit/queue.test.ts index 3c2a2a1ca1..90f32f6d60 100644 --- a/test/unit/queue.test.ts +++ b/test/unit/queue.test.ts @@ -344,7 +344,7 @@ describe("queue processors", () => { id: 123, account: { login: "JSONbored", id: 1, type: "User" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }, repositories: [{ name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }], @@ -357,7 +357,7 @@ describe("queue processors", () => { id: 123, account: { login: "JSONbored", id: 1, type: "User" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read", issues: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }); } @@ -369,7 +369,7 @@ describe("queue processors", () => { }); it("processes GitHub webhook jobs for PRs, issues, comments-off, comment-attempt, and deleted installs", async () => { - const env = createTestEnv(); + const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); await persistRegistrySnapshot( env, normalizeRegistryPayload( @@ -387,10 +387,80 @@ describe("queue processors", () => { labels: [{ name: "bug" }], body: "Fixes #1", }); - vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const visibleCalls = { comments: 0, labelsCreated: 0, labelsApplied: 0, checks: 0 }; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { const url = input.toString(); + const method = init?.method ?? "GET"; + if (url === "https://api.gittensor.io/miners") { + return Response.json([ + { + uid: 7, + githubUsername: "oktofeesh1", + githubId: "123", + totalPrs: 4, + totalMergedPrs: 3, + totalOpenPrs: 1, + totalClosedPrs: 0, + totalOpenIssues: 0, + totalClosedIssues: 0, + totalSolvedIssues: 0, + totalValidSolvedIssues: 0, + isEligible: true, + credibility: 1, + eligibleRepoCount: 1, + hotkey: "must-not-leak", + }, + ]); + } + if (url === "https://api.gittensor.io/miners/123") { + return Response.json({ + repositories: [ + { + repositoryFullName: "JSONbored/gittensory", + totalPrs: "4", + totalMergedPrs: "3", + totalOpenPrs: "1", + totalClosedPrs: "0", + totalOpenIssues: "0", + totalClosedIssues: "0", + isEligible: true, + credibility: "1.000000", + }, + ], + }); + } + if (url === "https://api.gittensor.io/miners/123/prs") return Response.json([]); + if (url === "https://mirror.gittensor.io/api/v1/miners/123/issues") return Response.json({ issues: [] }); if (url.endsWith("/users/oktofeesh1")) return Response.json({ login: "oktofeesh1", public_repos: 2, followers: 1 }); if (url.includes("/users/oktofeesh1/repos")) return Response.json([{ language: "TypeScript" }]); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/3/comments") && method === "GET") return Response.json([]); + if (url.includes("/issues/3/comments") && method === "POST") { + const body = JSON.parse(String(init?.body ?? "{}")) as { body?: string }; + expect(body.body).toContain(""); + expect(body.body).toContain("Confirmed Gittensor miner: yes"); + expect(body.body).not.toMatch(/reviewability|likely_duplicate|reward|scoreability|estimated score|wallet|hotkey|trust score|payout|farming/i); + visibleCalls.comments += 1; + return Response.json({ id: 1, html_url: "https://github.com/comment/1" }, { status: 201 }); + } + if (url.includes("/issues/3/labels") && method === "GET") return Response.json([]); + if (url.includes("/issues/3/labels") && method === "POST") { + const body = JSON.parse(String(init?.body ?? "{}")) as { labels?: string[] }; + expect(body.labels).toEqual(["gittensor"]); + visibleCalls.labelsApplied += 1; + return Response.json([{ name: "gittensor" }]); + } + if (url.includes("/repos/JSONbored/gittensory/labels") && !url.includes("/issues/") && method === "GET") return Response.json([]); + if (url.includes("/repos/JSONbored/gittensory/labels") && !url.includes("/issues/") && method === "POST") { + const body = JSON.parse(String(init?.body ?? "{}")) as { name?: string }; + expect(body.name).toBe("gittensor"); + visibleCalls.labelsCreated += 1; + return Response.json({ name: "gittensor" }, { status: 201 }); + } + if (url.includes("/check-runs")) { + visibleCalls.checks += 1; + return new Response("checks disabled", { status: 500 }); + } return new Response("not found", { status: 404 }); }); @@ -399,12 +469,23 @@ describe("queue processors", () => { id: 123, account: { login: "JSONbored", id: 1, type: "User" }, repository_selection: "selected", - permissions: { checks: "write", metadata: "read", pull_requests: "read" }, + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, events: ["issues", "pull_request", "repository"], }, repository: { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, }; + await upsertRepositorySettings(env, { + repoFullName: "JSONbored/gittensory", + commentMode: "off", + publicSignalLevel: "standard", + publicSurface: "off", + autoLabelEnabled: false, + checkRunMode: "off", + checkRunDetailLevel: "minimal", + backfillEnabled: true, + privateTrustEnabled: true, + }); await processJob(env, { type: "github-webhook", deliveryId: "pr-off", @@ -428,8 +509,10 @@ describe("queue processors", () => { repoFullName: "JSONbored/gittensory", commentMode: "detected_contributors_only", publicSignalLevel: "standard", - checkRunMode: "enabled", - checkRunDetailLevel: "standard", + publicSurface: "comment_and_label", + autoLabelEnabled: true, + checkRunMode: "off", + checkRunDetailLevel: "minimal", backfillEnabled: true, privateTrustEnabled: true, }); @@ -473,8 +556,10 @@ describe("queue processors", () => { repoFullName: "JSONbored/gittensory", commentMode: "all_prs", publicSignalLevel: "minimal", - checkRunMode: "enabled", - checkRunDetailLevel: "standard", + publicSurface: "comment_and_label", + autoLabelEnabled: true, + checkRunMode: "off", + checkRunDetailLevel: "minimal", backfillEnabled: true, privateTrustEnabled: true, }); @@ -519,9 +604,98 @@ describe("queue processors", () => { eventName: "installation", payload: { action: "deleted", installation: { id: 123 } }, }); + + expect(visibleCalls).toEqual({ comments: 1, labelsCreated: 1, labelsApplied: 1, checks: 0 }); + const skipped = await env.DB.prepare("select detail from audit_events where event_type = ? order by created_at").bind("github_app.pr_visibility_skipped").all<{ + detail: string; + }>(); + expect(skipped.results.map((event) => event.detail)).toEqual(expect.arrayContaining(["not_official_gittensor_miner", "missing_author"])); + }); + + it("skips bots and maintainer authors, and keeps explicitly enabled checks minimal", async () => { + const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { "JSONbored/gittensory": { emission_share: 0.01, issue_discovery_share: 0 } }, + { kind: "raw-github", url: "https://example.test" }, + "2026-05-23T00:00:00.000Z", + ), + ); + await upsertRepositorySettings(env, { + repoFullName: "JSONbored/gittensory", + commentMode: "off", + publicSurface: "off", + autoLabelEnabled: false, + checkRunMode: "enabled", + }); + const calls = { minerList: 0, checks: 0 }; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + if (url === "https://api.gittensor.io/miners") { + calls.minerList += 1; + return Response.json([{ githubUsername: "oktofeesh1", githubId: "123", totalPrs: 1, totalMergedPrs: 1, isEligible: true, credibility: 1 }]); + } + if (url === "https://api.gittensor.io/miners/123") return Response.json({ repositories: [] }); + if (url === "https://api.gittensor.io/miners/123/prs") return Response.json([]); + if (url === "https://mirror.gittensor.io/api/v1/miners/123/issues") return Response.json({ issues: [] }); + if (url.endsWith("/users/oktofeesh1")) return Response.json({ login: "oktofeesh1" }); + if (url.includes("/users/oktofeesh1/repos")) return Response.json([]); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/commits/abc123/check-runs")) return Response.json({ total_count: 0, check_runs: [] }); + if (url.includes("/check-runs") && method === "POST") { + const body = JSON.parse(String(init?.body ?? "{}")) as { output?: { title?: string; text?: string } }; + expect(body.output).toMatchObject({ title: "Gittensory context checked", text: "No detailed findings are published in check runs." }); + calls.checks += 1; + return Response.json({ id: 99 }, { status: 201 }); + } + return new Response("not found", { status: 404 }); + }); + const basePayload = { + installation: { id: 123, account: { login: "JSONbored", id: 1, type: "User" } }, + repository: { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, + }; + + await processJob(env, { + type: "github-webhook", + deliveryId: "bot-skip", + eventName: "pull_request", + payload: { + action: "opened", + ...basePayload, + pull_request: { number: 20, title: "Dependency update", state: "open", user: { login: "renovate[bot]", type: "Bot" }, labels: [], body: "" }, + }, + }); + await processJob(env, { + type: "github-webhook", + deliveryId: "maintainer-skip", + eventName: "pull_request", + payload: { + action: "opened", + ...basePayload, + pull_request: { number: 21, title: "Maintainer work", state: "open", user: { login: "jsonbored" }, author_association: "OWNER", labels: [], body: "" }, + }, + }); + await processJob(env, { + type: "github-webhook", + deliveryId: "check-enabled", + eventName: "pull_request", + payload: { + action: "opened", + ...basePayload, + pull_request: { number: 22, title: "Miner work", state: "open", user: { login: "oktofeesh1" }, head: { sha: "abc123" }, labels: [], body: "No issue needed." }, + }, + }); + + expect(calls).toEqual({ minerList: 1, checks: 1 }); + const skipped = await env.DB.prepare("select detail from audit_events where event_type = ? order by created_at").bind("github_app.pr_visibility_skipped").all<{ + detail: string; + }>(); + expect(skipped.results.map((event) => event.detail)).toEqual(expect.arrayContaining(["bot_author", "maintainer_author"])); }); - it("records webhook processing errors when GitHub check creation fails", async () => { + it("fails closed when official miner detection is unavailable", async () => { const env = createTestEnv(); const payload = { action: "opened", @@ -538,7 +712,17 @@ describe("queue processors", () => { }, }; - await expect(processJob(env, { type: "github-webhook", deliveryId: "check-fail", eventName: "pull_request", payload })).rejects.toThrow(); + vi.stubGlobal("fetch", async () => new Response("gittensor unavailable", { status: 503 })); + + await expect(processJob(env, { type: "github-webhook", deliveryId: "miner-unavailable", eventName: "pull_request", payload })).resolves.toBeUndefined(); + const audit = await env.DB.prepare("select event_type, outcome, detail from audit_events where target_key = ?") + .bind("JSONbored/gittensory#10") + .all<{ event_type: string; outcome: string; detail: string }>(); + expect(audit.results).toEqual( + expect.arrayContaining([ + expect.objectContaining({ event_type: "github_app.miner_detection_unavailable", outcome: "error", detail: expect.stringContaining("Gittensor API failed") }), + ]), + ); }); }); diff --git a/test/unit/rules.test.ts b/test/unit/rules.test.ts index 296d14f50b..e4914441c7 100644 --- a/test/unit/rules.test.ts +++ b/test/unit/rules.test.ts @@ -20,7 +20,7 @@ const repo: RepositoryRecord = { }; describe("advisory rules", () => { - it("flags missing linked issues on PR advisories", () => { + it("suppresses missing linked issues on direct-contribution PR advisories by default", () => { const pr: PullRequestRecord = { repoFullName: repo.fullName, number: 12, @@ -35,9 +35,28 @@ describe("advisory rules", () => { const advisory = buildPullRequestAdvisory(repo, pr); + expect(advisory.conclusion).toBe("success"); + expect(advisory.findings.map((finding) => finding.code)).not.toContain("missing_linked_issue"); + expect(formatCheckRunOutput(advisory).text).not.toMatch(/reward|farming/i); + }); + + it("flags missing linked issues only when a repo explicitly requires linkage", () => { + const pr: PullRequestRecord = { + repoFullName: repo.fullName, + number: 12, + title: "Add registry sync", + state: "open", + authorLogin: "oktofeesh1", + authorAssociation: "NONE", + headSha: "abc123", + labels: ["feature"], + linkedIssues: [], + }; + + const advisory = buildPullRequestAdvisory(repo, pr, { requireLinkedIssue: true }); + expect(advisory.conclusion).toBe("neutral"); expect(advisory.findings.map((finding) => finding.code)).toContain("missing_linked_issue"); - expect(formatCheckRunOutput(advisory).text).not.toMatch(/reward|farming/i); }); it("marks unknown repositories as action required", () => { @@ -45,6 +64,11 @@ describe("advisory rules", () => { expect(advisory.conclusion).toBe("action_required"); }); + it("handles uncached PR and issue advisories for unknown repositories", () => { + expect(buildPullRequestAdvisory(null, null).findings.map((finding) => finding.code)).toEqual(["repo_not_registered", "pr_not_cached"]); + expect(buildIssueAdvisory(null, null).findings.map((finding) => finding.code)).toEqual(["repo_not_registered", "issue_not_cached"]); + }); + it("warns when an issue already has linked PRs", () => { const issue: IssueRecord = { repoFullName: repo.fullName, @@ -85,7 +109,7 @@ describe("advisory rules", () => { expect(advisory.findings.map((finding) => finding.code)).toContain("duplicate_pr_risk"); }); - it("adds private reviewability context to check output without reward language", () => { + it("keeps private reviewability context out of check output", () => { const pr: PullRequestRecord = { repoFullName: repo.fullName, number: 12, @@ -98,13 +122,12 @@ describe("advisory rules", () => { linkedIssues: [4], }; - const advisory = buildPullRequestAdvisory(repo, pr, { - reviewabilityText: "Reviewability 72/100; action needs_author; missing tests and duplicate context should be cleared first.", - }); + const advisory = buildPullRequestAdvisory(repo, pr); + const output = formatCheckRunOutput(advisory); - expect(advisory.findings.map((finding) => finding.code)).toContain("private_reviewability_context"); - expect(formatCheckRunOutput(advisory).text).toContain("Reviewability 72/100"); - expect(formatCheckRunOutput(advisory).text).not.toMatch(/reward|farming|wallet|hotkey/i); + expect(advisory.findings.map((finding) => finding.code)).not.toContain("private_reviewability_context"); + expect(output.text).not.toMatch(/reviewability|likely_duplicate|needs_author|reward|farming|wallet|hotkey/i); + expect(output.title).toBe("Gittensory context checked"); }); it("covers repository config lane advisories", () => { @@ -167,6 +190,6 @@ describe("advisory rules", () => { expect(uncachedPr.findings.map((finding) => finding.code)).toContain("pr_not_cached"); expect(issueAdvisory.findings.map((finding) => finding.code)).toEqual(expect.arrayContaining(["issue_not_open", "issue_discovery_not_configured"])); - expect(formatCheckRunOutput({ ...uncachedPr, findings: [] }).text).toBe("No advisory findings."); + expect(formatCheckRunOutput({ ...uncachedPr, findings: [] }).text).toContain("No detailed findings are published"); }); }); diff --git a/test/unit/signals-v2.test.ts b/test/unit/signals-v2.test.ts index 1e6cb47209..45a3850b0a 100644 --- a/test/unit/signals-v2.test.ts +++ b/test/unit/signals-v2.test.ts @@ -1226,10 +1226,24 @@ describe("v2 signal builders", () => { queueHealth: buildQueueHealth(repo, [], [], buildCollisionReport(repo.fullName, [], [])), collisions: buildCollisionReport(repo.fullName, [], []), preflight: buildPreflightResult({ repoFullName: repo.fullName, title: "Docs", body: "No linked issue", changedFiles: ["README.md"], tests: ["manual"] }, repo, [], []), - settings: { repoFullName: repo.fullName, commentMode: "all_prs", publicSignalLevel: "standard", checkRunMode: "enabled", checkRunDetailLevel: "standard", backfillEnabled: true, privateTrustEnabled: true }, + settings: { + repoFullName: repo.fullName, + commentMode: "detected_contributors_only", + publicSignalLevel: "standard", + checkRunMode: "off", + checkRunDetailLevel: "minimal", + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label", + includeMaintainerAuthors: false, + requireLinkedIssue: false, + backfillEnabled: true, + privateTrustEnabled: true, + }, }); expect(comment).toContain("Author: `unknown`"); - expect(comment).toContain("No prior cached registered-repo activity detected."); + expect(comment).toContain("No confirmed Gittensor miner activity detected."); expect(comment).not.toMatch(/wallet|raw trust score|ranking/i); }); }); diff --git a/test/unit/signals.test.ts b/test/unit/signals.test.ts index 5f400fb187..42a330e590 100644 --- a/test/unit/signals.test.ts +++ b/test/unit/signals.test.ts @@ -287,13 +287,19 @@ describe("world-class backend signals", () => { state: "closed", mergedAt: "2026-05-01T00:00:00.000Z", }; - const detection = detectGittensorContributor("oktofeesh1", currentPr, [currentPr, priorPr], []); + const detection = { ...detectGittensorContributor("oktofeesh1", currentPr, [currentPr, priorPr], []), source: "official_gittensor_api" as const }; const settings = { repoFullName: repo.fullName, commentMode: "detected_contributors_only" as const, publicSignalLevel: "standard" as const, - checkRunMode: "enabled" as const, - checkRunDetailLevel: "standard" as const, + checkRunMode: "off" as const, + checkRunDetailLevel: "minimal" as const, + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label" as const, + includeMaintainerAuthors: false, + requireLinkedIssue: false, backfillEnabled: true, privateTrustEnabled: true, }; @@ -345,16 +351,25 @@ describe("world-class backend signals", () => { repoFullName: repo.fullName, commentMode: "off", publicSignalLevel: "minimal", - checkRunMode: "enabled", + checkRunMode: "off", checkRunDetailLevel: "minimal", + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label", + includeMaintainerAuthors: false, + requireLinkedIssue: false, backfillEnabled: true, privateTrustEnabled: true, }; const undetected = detectGittensorContributor("newbie", currentPr, [currentPr], []); + const cachedDetected = detectGittensorContributor("oktofeesh1", currentPr, [currentPr, { ...currentPr, number: 10, mergedAt: "2026-05-01T00:00:00.000Z" }], []); expect(undetected.detected).toBe(false); expect(shouldPublishPrIntelligenceComment(settings, undetected)).toBe(false); - expect(shouldPublishPrIntelligenceComment({ ...settings, commentMode: "all_prs" }, undetected)).toBe(true); + expect(shouldPublishPrIntelligenceComment({ ...settings, commentMode: "all_prs" }, undetected)).toBe(false); + expect(shouldPublishPrIntelligenceComment({ ...settings, commentMode: "all_prs" }, cachedDetected)).toBe(false); + expect(shouldPublishPrIntelligenceComment({ ...settings, commentMode: "all_prs" }, { ...cachedDetected, source: "official_gittensor_api" })).toBe(true); }); it("returns hold/caution opportunities for inactive and issue-discovery lanes", () => { @@ -380,7 +395,7 @@ describe("world-class backend signals", () => { it("summarizes public comments at minimal signal level", () => { const currentPr: PullRequestRecord = { ...pullRequests[0]!, linkedIssues: [], body: "" }; - const detection = detectGittensorContributor("newbie", currentPr, [], []); + const detection = { ...detectGittensorContributor("newbie", currentPr, [], []), detected: true, source: "official_gittensor_api" as const, reason: "Official Gittensor API confirms this GitHub user." }; const collisions = buildCollisionReport(repo.fullName, issues, [currentPr]); const queueHealth = buildQueueHealth(repo, issues, [currentPr], collisions); const preflight = buildPreflightResult({ repoFullName: repo.fullName, title: currentPr.title, changedFiles: ["README.md"] }, repo, issues, [currentPr]); @@ -389,15 +404,21 @@ describe("world-class backend signals", () => { repoFullName: repo.fullName, commentMode: "all_prs", publicSignalLevel: "minimal", - checkRunMode: "enabled", - checkRunDetailLevel: "standard", + checkRunMode: "off", + checkRunDetailLevel: "minimal", + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label", + includeMaintainerAuthors: false, + requireLinkedIssue: false, backfillEnabled: true, privateTrustEnabled: true, }; const comment = buildPublicPrIntelligenceComment({ repo, pr: currentPr, profile, detection, queueHealth, collisions, preflight, settings }); - expect(comment).toContain("Linked issues: None detected"); + expect(comment).toContain("Linked issues: Not required by this repo setting"); expect(comment).toContain("Public profile languages: not available"); expect(comment).not.toMatch(/trust score|wallet|ranking/i); }); From 78958f2217c4f6abf508a76b3dc8d2f98b7707a2 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 26 May 2026 06:42:58 -0700 Subject: [PATCH 2/5] feat(release): add public registration polish gates --- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/pull_request_template.md | 2 + .github/workflows/ci.yml | 15 + .github/workflows/npm-publish.yml | 14 +- CHANGELOG.md | 53 ++ CONTRIBUTING.md | 3 +- LICENSE | 663 +++++++++++++++++- README.md | 21 + SECURITY.md | 20 +- SUPPORT.md | 27 + cliff.mcp.toml | 38 + cliff.toml | 4 +- package-lock.json | 30 +- package.json | 9 +- packages/gittensory-mcp/CHANGELOG.md | 27 + packages/gittensory-mcp/LICENSE | 662 ++++++++++++++++- packages/gittensory-mcp/README.md | 14 +- packages/gittensory-mcp/bin/gittensory-mcp.js | 55 +- packages/gittensory-mcp/package.json | 5 +- scripts/check-changelog.mjs | 61 ++ scripts/check-docs.mjs | 12 +- scripts/check-mcp-package.mjs | 4 +- site/.vitepress/config.mts | 2 + site/reference/api.md | 2 + site/security/terms.md | 34 + site/support.md | 22 + src/api/routes.ts | 105 +++ src/openapi/schemas.ts | 30 + src/openapi/spec.ts | 20 +- test/integration/api.test.ts | 91 +++ test/unit/mcp-cli.test.ts | 21 + test/unit/openapi.test.ts | 4 + 32 files changed, 2042 insertions(+), 30 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 SUPPORT.md create mode 100644 cliff.mcp.toml create mode 100644 packages/gittensory-mcp/CHANGELOG.md create mode 100644 scripts/check-changelog.mjs create mode 100644 site/security/terms.md create mode 100644 site/support.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 49a9c08678..192dada787 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -26,4 +26,4 @@ body: - label: This is backend-only. - label: This does not require storing user PATs. - label: This does not expose wallet details, raw trust scores, or private rankings publicly. - - label: This does not auto-close, auto-merge, or rewrite contributor work. + - label: This does not auto-close, auto-merge, rewrite contributor work, or label PRs outside the confirmed-miner policy. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c933af3c17..3a56a879c4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,6 +5,7 @@ ## Validation - [ ] `npm run test:ci` +- [ ] `npm run changelog:check` ## Safety @@ -12,3 +13,4 @@ - [ ] No secrets, wallet details, user PATs, raw trust scores, or private rankings exposed - [ ] Public text avoids compensation-seeking or optimization-tactic language - [ ] OpenAPI/MCP behavior updated where needed +- [ ] Public docs/changelogs updated where needed diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9146df9e57..03f49774f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} - name: Setup Node uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 @@ -30,6 +33,12 @@ jobs: - name: Install dependencies run: npm ci + - name: Check whitespace + run: git diff --check + + - name: Lint workflows + run: npm run actionlint + - name: Typecheck run: npm run typecheck @@ -42,5 +51,11 @@ jobs: - name: MCP package check run: npm run build:mcp && npm run test:mcp-pack + - name: Docs check + run: npm run docs:check && npm run docs:build + + - name: Changelog check + run: npm run changelog:check + - name: Audit dependencies run: npm audit --audit-level=moderate diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index b2b523e7cb..cefeb3dedb 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -20,6 +20,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 - name: Setup Node uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 @@ -47,10 +49,20 @@ jobs: set -euo pipefail PACK_JSON="$(npm pack --workspace @jsonbored/gittensory-mcp --json)" TARBALL="$(node -e 'const fs=require("fs"); const input=fs.readFileSync(0,"utf8"); process.stdout.write(JSON.parse(input)[0].filename)' <<< "$PACK_JSON")" + UNEXPECTED_FILES="$(tar -tzf "$TARBALL" | grep -Ev '^(package/(bin|lib)/|package/(package.json|README.md|CHANGELOG.md|LICENSE))$' || true)" + if [ -n "$UNEXPECTED_FILES" ]; then + printf '%s\n' "$UNEXPECTED_FILES" + echo "Unexpected file in package tarball" + exit 1 + fi + if tar -xOf "$TARBALL" | grep -E '(BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY|github_pat_|gh[pousr]_|gts_[0-9a-f]{64}|[A-Z0-9_]*(TOKEN|SECRET|PRIVATE_KEY)=)'; then + echo "Secret-like content found in package tarball" + exit 1 + fi TMP="$(mktemp -d)" npm --prefix "$TMP" init -y >/dev/null npm --prefix "$TMP" install "$PWD/$TARBALL" >/dev/null "$TMP/node_modules/.bin/gittensory-mcp" --help >/dev/null - name: Publish with npm trusted publishing - run: npx -y npm@11.15.0 publish --workspace @jsonbored/gittensory-mcp --access public + run: npx -y npm@11.15.0 publish --workspace @jsonbored/gittensory-mcp --access public --provenance diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..3274502fa9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,53 @@ +# Changelog + +## Unreleased + + +### CI + +- Trigger pages deploy + +- Retrigger github pages deploy + + + +### Chores + +- Configure gittensory app id + +- Prepare public gittensory launch + + + +### Docs + +- Align public docs with gittensor aesthetic + +- Remove worker preview URLs from public docs + +- Publish static github pages artifact + + + +### Features + +- Scaffold gittensory advisory API + +- Add backend intelligence APIs + +- Expose MCP and PR intelligence + +- Add install site and mcp diagnostics + +- Add situational score projections + +- Add public registration polish gates + + + +### Fixes + +- Gate public PR visibility for confirmed miners + + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c17f811d59..6fa96ea2a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ Out of scope: - frontend UI work - public leaderboards - public wallet or raw trust-score exposure -- auto-labeling, auto-closing, auto-merging, or mutating contributor work +- auto-closing, auto-merging, rewriting contributor work, or applying labels outside the explicit confirmed-miner GitHub App policy - storing contributor PATs - public text that implies compensation estimates or optimization tactics @@ -29,6 +29,7 @@ Out of scope: - Add or update tests for behavior changes. - Keep API and MCP responses structured and machine-readable. - Keep public GitHub comments advisory, sanitized, and non-spammy. +- Keep GitHub App labels limited to configured labels for officially confirmed Gittensor miner PRs. - Prefer deterministic, evidence-based rules over opaque scoring. - Use Conventional Commit style for release-quality changelog output. diff --git a/LICENSE b/LICENSE index 5b40a7def0..be3f7b28e5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,661 @@ -SPDX-License-Identifier: AGPL-3.0-only + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 -Gittensory is licensed under the GNU Affero General Public License v3.0 only. + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -The full license text is available at: -https://www.gnu.org/licenses/agpl-3.0.txt + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md index d4517f1878..71ae621a75 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,8 @@ Protected endpoints use `Authorization: Bearer ` or a Gitt - `GET /v1/repos` - `GET /v1/repos/:owner/:repo` - `GET /v1/repos/:owner/:repo/intelligence` +- `GET /v1/repos/:owner/:repo/registration-readiness` +- `GET /v1/repos/:owner/:repo/gittensor-config-recommendation` - `GET /v1/repos/:owner/:repo/pulls/:number/maintainer-packet` - `GET /v1/repos/:owner/:repo/pulls/:number/reviewability` - `GET /v1/contributors/:login/profile` @@ -155,8 +157,27 @@ npm run docs:preview The Pages workflow builds the docs on `main` for `https://gittensory.aethereal.dev/`, but deploys only when the repository variable `GITTENSORY_DOCS_DEPLOY` is set to `true`. +## Changelog And Releases + +```sh +npm run changelog +npm run changelog:check +``` + +- `CHANGELOG.md` tracks backend/API/GitHub App changes. +- `packages/gittensory-mcp/CHANGELOG.md` tracks npm-visible MCP package changes. +- Root releases use `vX.Y.Z` tags. +- MCP package releases use `mcp-vX.Y.Z` tags and publish through trusted publishing with provenance. + ## Validation ```sh npm run test:ci ``` + +## Support And Security + +- Public support: `SUPPORT.md` +- Security policy: `SECURITY.md` +- Privacy posture: `site/security/privacy.md` +- Terms: `site/security/terms.md` diff --git a/SECURITY.md b/SECURITY.md index 630f3d7d54..51af71e784 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,20 +1,22 @@ # Security -Gittensory is private beta software. Please do not include secrets, API tokens, private keys, -wallet details, webhook payload secrets, or sensitive contributor evidence in public issues, -pull requests, screenshots, or logs. +Please do not include secrets, API tokens, private keys, wallet details, webhook payload secrets, +or sensitive contributor evidence in public issues, pull requests, screenshots, or logs. ## Reporting -Until GitHub private vulnerability reporting is enabled for the public repository, report security -issues directly to the repository owner through a private channel. Once public vulnerability -reporting is enabled, use GitHub Security Advisories. +Use GitHub private vulnerability reporting if it is available on the repository. If it is not +available for your account context, contact the repository owner through a private channel and +include only the minimum reproduction details needed to verify the issue. ## Privacy Posture - Gittensory does not store user GitHub PATs. -- Public PR comments are opt-in and sanitized. -- Detailed contributor evidence belongs in private API responses and GitHub check runs. +- Public PR comments are sanitized and only posted for officially confirmed Gittensor miners when + the installed repository settings allow them. +- Detailed contributor evidence belongs in authenticated API and MCP responses only. +- GitHub check runs are public repository surfaces; when enabled, they must stay minimal and + exclude private reviewability, scoring, wallet, hotkey, and reward/risk context. - Wallet details, raw trust scores, private rankings, and negative labels must not be published in public comments or public issue templates. - GitHub App private keys, webhook secrets, MCP tokens, API tokens, and internal job tokens must be @@ -22,4 +24,4 @@ reporting is enabled, use GitHub Security Advisories. ## Supported Version -Private beta support tracks the current `main` branch. +Public support tracks the current `main` branch and the latest published MCP package. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000000..537fdd733a --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,27 @@ +# Support + +Use GitHub issues for public, non-sensitive support: + +- MCP install, auth, or local branch-analysis problems +- GitHub App install health, permissions, or comment/label behavior +- API contract, data freshness, or signal-quality bugs +- documentation gaps + +Do not post secrets, private keys, webhook payload secrets, wallet details, hotkeys, coldkeys, +raw session tokens, private maintainer evidence, or private scoring output in public issues. + +For security issues, use the guidance in `SECURITY.md`. + +## Useful Issue Details + +- Gittensory MCP version from `gittensory-mcp status` +- command used, with tokens and local paths removed +- sanitized error message +- repository owner/name when relevant +- whether the problem is MCP, API, GitHub App, docs, or data freshness + +## Expected Response Posture + +Gittensory is maintained as a backend and agent-integration project. Support should keep the same +boundaries as the product: no public wallet data, no raw trust scores, no public reward estimates, +and no source-code upload by default. diff --git a/cliff.mcp.toml b/cliff.mcp.toml new file mode 100644 index 0000000000..bdbdc2ce0e --- /dev/null +++ b/cliff.mcp.toml @@ -0,0 +1,38 @@ +[changelog] +header = "# Changelog\n\n" +body = """ +{% if version %}\ +## {{ version }} - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ +## Unreleased +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + +### {{ group | striptags | trim | upper_first }} +{% for commit in commits %} +- {{ commit.message | upper_first }} +{% endfor %} +{% endfor %}\n +""" +trim = true +footer = "" + +[git] +conventional_commits = true +filter_unconventional = true +split_commits = false +tag_pattern = "^mcp-v[0-9].*" +sort_commits = "oldest" + +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Fixes" }, + { message = "^test", group = "Tests" }, + { message = "^ci", group = "CI" }, + { message = "^build", group = "Build" }, + { message = "^docs", group = "Docs" }, + { message = "^refactor", group = "Refactors" }, + { message = "^chore\\(deps\\)", group = "Dependencies" }, + { message = "^chore", group = "Chores" }, + { message = "^revert", group = "Reverts" }, +] diff --git a/cliff.toml b/cliff.toml index b338a7d29d..05ca40ddd2 100644 --- a/cliff.toml +++ b/cliff.toml @@ -10,7 +10,7 @@ body = """ ### {{ group | striptags | trim | upper_first }} {% for commit in commits %} -- {{ commit.message | upper_first }}{% if commit.remote.pr_number %} ([#{{ commit.remote.pr_number }}]({{ commit.remote.pr_url }})){% endif %} +- {{ commit.message | upper_first }} {% endfor %} {% endfor %}\n """ @@ -21,7 +21,7 @@ footer = "" conventional_commits = true filter_unconventional = true split_commits = false -tag_pattern = "v[0-9]*" +tag_pattern = "^v[0-9].*" sort_commits = "oldest" commit_parsers = [ diff --git a/package-lock.json b/package-lock.json index a64c3cc133..60a526d934 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "drizzle-kit": "^0.31.7", "fast-check": "^4.8.0", "git-cliff": "^2.13.1", + "github-actionlint": "^1.7.12", "node-addon-api": "^8.5.0", "node-gyp": "^12.1.0", "typescript": "^5.9.3", @@ -3164,6 +3165,16 @@ "node": ">= 0.6" } }, + "node_modules/adm-zip": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.17.tgz", + "integrity": "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, "node_modules/agents": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/agents/-/agents-0.7.9.tgz", @@ -4570,6 +4581,23 @@ "win32" ] }, + "node_modules/github-actionlint": { + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/github-actionlint/-/github-actionlint-1.7.12.tgz", + "integrity": "sha512-kSVz5clt9voatp2Tdh1BETKNooT358/nPChYseaDC4M6f9Hc/sBRMbhagx2FTu2F/WHzDoxlNPh2EqwBngTYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.16", + "tar": "^7.4.0" + }, + "bin": { + "github-actionlint": "dist/bin/actionlint.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -7566,7 +7594,7 @@ }, "packages/gittensory-mcp": { "name": "@jsonbored/gittensory-mcp", - "version": "0.1.3", + "version": "0.1.4", "license": "AGPL-3.0-only", "dependencies": { "@modelcontextprotocol/sdk": "^1.26.0", diff --git a/package.json b/package.json index 5cf47e7510..06a10d51df 100644 --- a/package.json +++ b/package.json @@ -17,18 +17,22 @@ "drizzle:generate": "drizzle-kit generate", "build:mcp": "npm --workspace @jsonbored/gittensory-mcp run build", "test:mcp-pack": "node scripts/check-mcp-package.mjs", + "actionlint": "github-actionlint .github/workflows/*.yml", "docs:dev": "vitepress dev site --host 127.0.0.1", "docs:build": "vitepress build site", "docs:preview": "vitepress preview site --host 127.0.0.1", "docs:check": "node scripts/check-docs.mjs", - "changelog": "git-cliff --config cliff.toml --output CHANGELOG.md", + "changelog": "npm run changelog:root && npm run changelog:mcp", + "changelog:root": "git-cliff --config cliff.toml --output CHANGELOG.md", + "changelog:mcp": "git-cliff --config cliff.mcp.toml --include-path 'packages/gittensory-mcp/**' --include-path '.github/workflows/npm-publish.yml' --output packages/gittensory-mcp/CHANGELOG.md", + "changelog:check": "node scripts/check-changelog.mjs", "typecheck": "tsc --noEmit", "test": "vitest run", "test:unit": "vitest run test/unit", "test:integration": "vitest run test/integration", "test:workers": "vitest run --config vitest.workers.config.ts", "test:coverage": "vitest run --coverage", - "test:ci": "npm run typecheck && npm run test:coverage && npm run test:workers && npm run build:mcp && npm run test:mcp-pack && npm run docs:check && npm run docs:build && npm audit --audit-level=moderate", + "test:ci": "git diff --check && npm run actionlint && npm run typecheck && npm run test:coverage && npm run test:workers && npm run build:mcp && npm run test:mcp-pack && npm run docs:check && npm run docs:build && npm run changelog:check && npm audit --audit-level=moderate", "test:watch": "vitest", "validate": "npm run typecheck && npm run test:coverage" }, @@ -49,6 +53,7 @@ "drizzle-kit": "^0.31.7", "fast-check": "^4.8.0", "git-cliff": "^2.13.1", + "github-actionlint": "^1.7.12", "node-addon-api": "^8.5.0", "node-gyp": "^12.1.0", "typescript": "^5.9.3", diff --git a/packages/gittensory-mcp/CHANGELOG.md b/packages/gittensory-mcp/CHANGELOG.md new file mode 100644 index 0000000000..37727493d3 --- /dev/null +++ b/packages/gittensory-mcp/CHANGELOG.md @@ -0,0 +1,27 @@ +# Changelog + +## Unreleased + + +### Features + +- Add public registration polish gates + + +## mcp-v0.1.3 - 2026-05-26 + + +### Chores + +- Prepare public gittensory launch + + + +### Features + +- Add install site and mcp diagnostics + +- Add situational score projections + + + diff --git a/packages/gittensory-mcp/LICENSE b/packages/gittensory-mcp/LICENSE index bf5e0ae1b1..be3f7b28e5 100644 --- a/packages/gittensory-mcp/LICENSE +++ b/packages/gittensory-mcp/LICENSE @@ -1,3 +1,661 @@ -AGPL-3.0-only + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 -The full license text is available in the root Gittensory repository. + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/packages/gittensory-mcp/README.md b/packages/gittensory-mcp/README.md index 4078f9b48a..89071c5e23 100644 --- a/packages/gittensory-mcp/README.md +++ b/packages/gittensory-mcp/README.md @@ -6,7 +6,7 @@ It inspects local git metadata and calls the Gittensory API for branch preflight ## Status -The package is public beta. Gittensory still keeps sensitive score, trust, and maintainer context out of public PR comments. +The package is public. Gittensory keeps sensitive score, trust, wallet, and maintainer context out of public PR comments. ## Install @@ -31,6 +31,7 @@ gittensory-mcp login gittensory-mcp logout gittensory-mcp whoami gittensory-mcp status +gittensory-mcp changelog gittensory-mcp doctor gittensory-mcp init-client --print codex gittensory-mcp init-client --print claude @@ -70,5 +71,16 @@ The wrapper stores a Gittensory session token, not a GitHub token. - `GITTENSOR_SCORE_PREVIEW_CMD` - `GITTENSOR_ROOT` - `GITTENSORY_UPLOAD_SOURCE=false` +- `GITTENSORY_SKIP_NPM_VERSION_CHECK=true` `GITTENSORY_UPLOAD_SOURCE=true` is not supported and fails closed. + +## Release Notes + +The package ships with `CHANGELOG.md`. Run: + +```sh +gittensory-mcp changelog +``` + +`gittensory-mcp status` also reports the local package version, latest npm version when reachable, API health, auth state, and source-upload posture. diff --git a/packages/gittensory-mcp/bin/gittensory-mcp.js b/packages/gittensory-mcp/bin/gittensory-mcp.js index 97c0833ff0..819d3a0af8 100755 --- a/packages/gittensory-mcp/bin/gittensory-mcp.js +++ b/packages/gittensory-mcp/bin/gittensory-mcp.js @@ -8,6 +8,9 @@ import { z } from "zod"; import { buildBranchAnalysisPayload, collectLocalDiff, collectLocalBranchMetadata, setupGuidanceForLocalScorer } from "../lib/local-branch.js"; const defaultApiUrl = "https://gittensory-api.zeronode.workers.dev"; +const packageName = "@jsonbored/gittensory-mcp"; +const packageVersion = "0.1.4"; +const changelogPath = new URL("../CHANGELOG.md", import.meta.url); const configPath = process.env.GITTENSORY_CONFIG_PATH ?? (process.env.GITTENSORY_CONFIG_DIR @@ -121,7 +124,7 @@ if (cliArgs[0] && cliArgs[0] !== "--stdio") { const server = new McpServer({ name: "gittensory-local", - version: "0.1.3", + version: packageVersion, }); server.registerTool( @@ -364,6 +367,7 @@ async function runCli(args) { if (command === "logout") return logout(options); if (command === "whoami") return whoami(options); if (command === "status") return status(options); + if (command === "changelog") return changelog(options); if (command === "doctor") return doctor(options); if (command === "init-client") return initClient(options); if (command !== "analyze-branch" && command !== "preflight") throw new Error(`Unknown command: ${command}`); @@ -413,6 +417,7 @@ function printHelp() { gittensory-mcp logout [--json] gittensory-mcp whoami [--json] gittensory-mcp status [--json] + gittensory-mcp changelog [--json] gittensory-mcp doctor [--cwd path] [--json] gittensory-mcp init-client --print codex|claude|cursor [--json] gittensory-mcp analyze-branch --login [--repo owner/repo] [--base origin/main] [--pending-merged-prs 3] [--expected-open-prs 0] [--projected-credibility 0.8] [--scenario-note "..."] [--validation "passed|npm test|summary"] [--json] @@ -509,6 +514,8 @@ async function whoami(options) { async function status(options) { let auth = { status: getApiToken() ? "token_configured" : "unauthenticated" }; + let health = null; + let latest = null; if (getApiToken()) { try { auth = await apiGet("/v1/auth/session"); @@ -516,8 +523,26 @@ async function status(options) { auth = { status: "token_configured", session: "unverified", error: error instanceof Error ? error.message : "status_failed" }; } } + try { + health = await apiFetch("/health", { method: "GET" }, { auth: false, timeoutMs: 5000 }); + } catch (error) { + health = { status: "unreachable", error: error instanceof Error ? error.message : "health_check_failed" }; + } + try { + latest = await fetchLatestPackageVersion(); + } catch (error) { + latest = { status: "unavailable", error: error instanceof Error ? error.message : "npm_version_check_failed" }; + } const payload = { apiUrl, + package: { + name: packageName, + version: packageVersion, + latestVersion: latest?.version ?? null, + updateAvailable: typeof latest?.version === "string" && latest.version !== packageVersion, + latestStatus: latest?.status ?? "ok", + }, + api: health, auth, configPath, sourceUploadDefault: false, @@ -525,12 +550,27 @@ async function status(options) { }; if (options.json) process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`); else { + process.stdout.write(`${packageName}: ${packageVersion}${payload.package.latestVersion ? ` (latest ${payload.package.latestVersion})` : ""}\n`); process.stdout.write(`API: ${apiUrl}\n`); + process.stdout.write(`API health: ${health?.status ?? "unknown"}\n`); process.stdout.write(`Auth: ${auth.status}${auth.login ? ` (${auth.login})` : ""}\n`); process.stdout.write("Source upload: disabled\n"); } } +async function changelog(options) { + const text = existsSync(changelogPath) ? readFileSync(changelogPath, "utf8") : "# Changelog\n\nNo packaged changelog was found.\n"; + const payload = { + package: { + name: packageName, + version: packageVersion, + }, + changelog: text, + }; + if (options.json) process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`); + else process.stdout.write(text.endsWith("\n") ? text : `${text}\n`); +} + async function doctor(options) { const checks = []; const add = (name, statusValue, detail, remediation) => checks.push(stripUndefined({ name, status: statusValue, detail, remediation })); @@ -734,6 +774,19 @@ async function apiFetch(path, init, options = {}) { return payload; } +async function fetchLatestPackageVersion() { + if (/^(1|true|yes)$/i.test(process.env.GITTENSORY_SKIP_NPM_VERSION_CHECK ?? "false")) return { status: "skipped" }; + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), 5000); + const response = await fetch("https://registry.npmjs.org/@jsonbored%2fgittensory-mcp/latest", { + signal: controller.signal, + headers: { accept: "application/json" }, + }).finally(() => clearTimeout(timeout)); + const payload = await response.json().catch(() => ({})); + if (!response.ok || typeof payload.version !== "string") throw new Error("npm_latest_version_unavailable"); + return { status: "ok", version: payload.version }; +} + async function analyzeCurrentBranch(input) { const payload = buildBranchAnalysisPayload(input); const { localScorerStatus, ...body } = payload; diff --git a/packages/gittensory-mcp/package.json b/packages/gittensory-mcp/package.json index 3616180b31..07ad914ec0 100644 --- a/packages/gittensory-mcp/package.json +++ b/packages/gittensory-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@jsonbored/gittensory-mcp", - "version": "0.1.3", + "version": "0.1.4", "license": "AGPL-3.0-only", "type": "module", "description": "Local stdio MCP wrapper for Gittensory contributor intelligence.", @@ -29,7 +29,8 @@ }, "files": [ "bin", - "lib" + "lib", + "CHANGELOG.md" ], "scripts": { "build": "node --check bin/gittensory-mcp.js && node --check lib/local-branch.js" diff --git a/scripts/check-changelog.mjs b/scripts/check-changelog.mjs new file mode 100644 index 0000000000..4924aaed21 --- /dev/null +++ b/scripts/check-changelog.mjs @@ -0,0 +1,61 @@ +#!/usr/bin/env node +import { mkdtempSync, readFileSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { spawnSync } from "node:child_process"; + +const tempDir = mkdtempSync(join(tmpdir(), "gittensory-changelog-")); + +try { + const checks = [ + { + label: "root changelog", + output: "CHANGELOG.md", + args: ["--config", "cliff.toml", "--output", join(tempDir, "CHANGELOG.md")], + }, + { + label: "MCP package changelog", + output: "packages/gittensory-mcp/CHANGELOG.md", + args: [ + "--config", + "cliff.mcp.toml", + "--include-path", + "packages/gittensory-mcp/**", + "--include-path", + ".github/workflows/npm-publish.yml", + "--output", + join(tempDir, "MCP_CHANGELOG.md"), + ], + }, + ]; + + const failures = []; + for (const check of checks) { + const generatedPath = check.args.at(-1); + run(["git-cliff", ...check.args], check.label); + const expected = readFileSync(generatedPath, "utf8"); + const actual = readFileSync(check.output, "utf8"); + if (normalize(actual) !== normalize(expected)) failures.push(`${check.output} is stale; run npm run changelog.`); + } + + if (failures.length > 0) { + console.error(failures.join("\n")); + process.exit(1); + } + + console.log("changelogs are current"); +} finally { + rmSync(tempDir, { recursive: true, force: true }); +} + +function run(command, label) { + const result = spawnSync(command[0], command.slice(1), { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }); + if (result.status !== 0) { + process.stderr.write(result.stderr || result.stdout || `${label} failed`); + process.exit(result.status ?? 1); + } +} + +function normalize(value) { + return value.replace(/\r\n/g, "\n").trimEnd(); +} diff --git a/scripts/check-docs.mjs b/scripts/check-docs.mjs index 8d6de73a5f..e1c1ab841f 100644 --- a/scripts/check-docs.mjs +++ b/scripts/check-docs.mjs @@ -3,7 +3,7 @@ import { readdirSync, readFileSync, statSync } from "node:fs"; import { join } from "node:path"; const root = process.cwd(); -const targets = ["README.md", "packages/gittensory-mcp/README.md", "site"]; +const targets = ["README.md", "CONTRIBUTING.md", "SECURITY.md", "SUPPORT.md", "packages/gittensory-mcp/README.md", "site"]; const staleRoutes = [ "/v1/contributors/:login/opportunities", "/v1/contributors/:login/fit", @@ -21,6 +21,8 @@ const forbidden = [ { name: "dev vars assignment", pattern: /^GITHUB_(?:WEBHOOK_SECRET|APP_PRIVATE_KEY|PUBLIC_TOKEN)=.+$/m }, { name: "gittensory token assignment", pattern: /^GITTENSORY_(?:API_TOKEN|MCP_TOKEN|TOKEN)=.+$/m }, { name: "internal token assignment", pattern: /^INTERNAL_JOB_TOKEN=.+$/m }, + { name: "stale private-beta wording", pattern: /\bprivate beta\b/i }, + { name: "preview worker domain", pattern: /zeronode\.workers\.dev/i }, ]; const files = targets.flatMap((target) => collect(join(root, target))).filter((file) => /\.(md|mts|ts|js|json|yml)$/.test(file)); @@ -42,6 +44,14 @@ for (const phrase of ["Gittensor miners", "GitHub App", "MCP", "not a Gittensor if (!siteIndex.includes(phrase)) failures.push(`site/index.md: missing required positioning phrase ${JSON.stringify(phrase)}`); } +for (const required of ["SUPPORT.md", "site/security/privacy.md", "site/security/terms.md", "site/support.md"]) { + try { + readFileSync(join(root, required), "utf8"); + } catch { + failures.push(`${required}: missing public-registration support/privacy/terms doc`); + } +} + if (failures.length > 0) { console.error(failures.join("\n")); process.exit(1); diff --git a/scripts/check-mcp-package.mjs b/scripts/check-mcp-package.mjs index 7ec54c84dc..61f7fdd051 100644 --- a/scripts/check-mcp-package.mjs +++ b/scripts/check-mcp-package.mjs @@ -14,9 +14,10 @@ if (result.status !== 0) { const [pack] = JSON.parse(result.stdout); const files = pack.files.map((file) => file.path).sort(); -const allowed = [/^bin\/gittensory-mcp\.js$/, /^lib\/local-branch\.js$/, /^package\.json$/, /^README\.md$/, /^LICENSE$/]; +const allowed = [/^bin\/gittensory-mcp\.js$/, /^lib\/local-branch\.js$/, /^package\.json$/, /^README\.md$/, /^CHANGELOG\.md$/, /^LICENSE$/]; const forbiddenPath = /(^|\/)(\.dev\.vars|\.env|\.npmrc|.*\.pem|.*private.*key.*|.*secret.*)$/i; const forbiddenContent = /(BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY|github_pat_[A-Za-z0-9_]+|gh[pousr]_[A-Za-z0-9_]+|gts_[0-9a-f]{64}|[A-Z0-9_]*(TOKEN|SECRET|PRIVATE_KEY)=)/; +const stalePackageText = /(private beta|zeronode\.workers\.dev|preview URL)/i; for (const file of files) { if (forbiddenPath.test(file)) throw new Error(`Forbidden file in MCP package: ${file}`); @@ -24,6 +25,7 @@ for (const file of files) { const fullPath = join("packages/gittensory-mcp", file); const content = readFileSync(fullPath, "utf8"); if (forbiddenContent.test(content)) throw new Error(`Secret-like content found in MCP package file: ${file}`); + if (file === "README.md" && stalePackageText.test(content)) throw new Error(`Stale public-package wording found in MCP package file: ${file}`); } process.stdout.write(`MCP package dry-run ok: ${files.join(", ")}\n`); diff --git a/site/.vitepress/config.mts b/site/.vitepress/config.mts index 3976f6f36b..198f3682e5 100644 --- a/site/.vitepress/config.mts +++ b/site/.vitepress/config.mts @@ -44,6 +44,8 @@ export default defineConfig({ items: [ { text: "API", link: "/reference/api" }, { text: "Privacy", link: "/security/privacy" }, + { text: "Terms", link: "/security/terms" }, + { text: "Support", link: "/support" }, { text: "Troubleshooting", link: "/troubleshooting" }, ], }, diff --git a/site/reference/api.md b/site/reference/api.md index cfa2cd4fcf..8a4d5abe23 100644 --- a/site/reference/api.md +++ b/site/reference/api.md @@ -25,6 +25,8 @@ curl "$GITTENSORY_API_URL/openapi.json" \ | `GET /v1/repos` | Known registered and installed repositories. | | `GET /v1/repos/:owner/:repo` | Repository metadata. | | `GET /v1/repos/:owner/:repo/intelligence` | Canonical repository intelligence bundle. | +| `GET /v1/repos/:owner/:repo/registration-readiness` | Repo-owner readiness signal for Gittensor registration. | +| `GET /v1/repos/:owner/:repo/gittensor-config-recommendation` | Private Gittensor config recommendation for repo owners. | | `GET /v1/repos/:owner/:repo/pulls/:number/maintainer-packet` | PR-specific maintainer review packet. | | `GET /v1/repos/:owner/:repo/pulls/:number/reviewability` | Private PR reviewability score and maintainer action. | diff --git a/site/security/terms.md b/site/security/terms.md new file mode 100644 index 0000000000..d73ccd1255 --- /dev/null +++ b/site/security/terms.md @@ -0,0 +1,34 @@ +# Terms + +Gittensory provides advisory developer tooling for Gittensor repository participation. It is not a +wallet, exchange, custodian, payout service, or official Gittensor frontend. + +## Advisory Output + +Gittensory output is evidence-based guidance from public repository data, official Gittensor stats +where available, and local metadata supplied by the MCP wrapper. It can be incomplete, stale, or +wrong when upstream data is unavailable or delayed. + +Do not treat scoreability projections, queue signals, or contributor guidance as guaranteed rewards, +guaranteed merge outcomes, or financial advice. + +## User Responsibilities + +Users are responsible for: + +- reviewing generated PR packets before posting them +- keeping tokens and local credentials private +- avoiding source upload unless a future version explicitly documents and supports it +- complying with each upstream repository's contribution policy +- verifying any score or eligibility assumptions against current Gittensor rules + +## Public GitHub App Behavior + +The GitHub App is intentionally low-noise. It can post sanitized comments and configured labels for +officially confirmed Gittensor miners when an installed repository enables that surface. It does not +close, merge, rewrite, publicly rank, or publicly score contributor work. + +## Availability + +The hosted API and MCP integrations may change as Gittensor rules, GitHub APIs, and repository +registration requirements evolve. diff --git a/site/support.md b/site/support.md new file mode 100644 index 0000000000..7db150d929 --- /dev/null +++ b/site/support.md @@ -0,0 +1,22 @@ +# Support + +Use GitHub issues for public support when the report does not contain sensitive material. + +Good public issues include: + +- MCP install, login, `doctor`, or local branch-analysis problems +- GitHub App install-health, permission, comment, or label behavior +- API response shape, data freshness, or signal-quality bugs +- documentation corrections + +Do not post tokens, private keys, webhook secrets, wallet details, hotkeys, coldkeys, raw private +score output, or maintainer-only evidence in public issues. + +For security reports, follow `SECURITY.md` in the repository. + +## Helpful Details + +- `gittensory-mcp status` output with local paths and tokens removed +- command and sanitized error text +- affected repository owner/name when relevant +- whether the issue affects MCP, API, GitHub App, docs, or data freshness diff --git a/src/api/routes.ts b/src/api/routes.ts index 70a10f86e0..4e51d5e8a6 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -504,6 +504,16 @@ export function createApp() { return c.json(await buildRepoIntelligenceResponse(c.env, fullName)); }); + app.get("/v1/repos/:owner/:repo/registration-readiness", async (c) => { + const fullName = `${c.req.param("owner")}/${c.req.param("repo")}`; + return c.json(await buildRegistrationReadinessResponse(c.env, fullName)); + }); + + app.get("/v1/repos/:owner/:repo/gittensor-config-recommendation", async (c) => { + const fullName = `${c.req.param("owner")}/${c.req.param("repo")}`; + return c.json(await buildGittensorConfigRecommendationResponse(c.env, fullName)); + }); + app.get("/v1/repos/:owner/:repo/settings", async (c) => { const fullName = `${c.req.param("owner")}/${c.req.param("repo")}`; return c.json(await getRepositorySettings(c.env, fullName)); @@ -949,6 +959,101 @@ async function buildRepoIntelligenceResponse(env: Env, fullName: string) { }; } +async function buildRegistrationReadinessResponse(env: Env, fullName: string) { + const intelligence = await buildRepoIntelligenceResponse(env, fullName); + const settings = await getRepositorySettings(env, fullName); + const repo = intelligence.repo; + const configQuality = intelligence.configQuality as ReturnType; + const maintainerCutReadiness = intelligence.maintainerCutReadiness as ReturnType; + const contributorIntakeHealth = intelligence.contributorIntakeHealth as ReturnType; + const lane = buildLaneAdvice(repo, fullName); + const blockers = [ + ...(!repo?.isRegistered ? ["Repository is not registered in the latest Gittensory registry snapshot."] : []), + ...(configQuality.level === "fragile" ? ["Repository config quality is fragile."] : []), + ...(contributorIntakeHealth.level === "blocked" ? ["Contributor intake health is blocked."] : []), + ]; + const warnings = [ + ...(configQuality.level === "needs_attention" ? ["Repository config quality needs attention before registration promotion."] : []), + ...(contributorIntakeHealth.level === "strained" ? ["Contributor intake is strained; expect more maintainer triage."] : []), + ...(settings.publicSurface === "off" ? ["GitHub App public surface is disabled; maintainers will not get comment/label assistance."] : []), + ]; + const issuePolicy = + lane.lane === "issue_discovery" + ? "issue_discovery_enabled" + : lane.lane === "split" + ? "split_pr_and_issue_discovery_enabled" + : settings.requireLinkedIssue + ? "direct_pr_requires_linked_issue" + : "direct_pr_no_issue_required"; + const ready = blockers.length === 0 && !["fragile", "needs_attention"].includes(configQuality.level); + return { + repoFullName: fullName, + generatedAt: nowIso(), + ready, + recommendedRegistrationMode: lane.lane === "issue_discovery" ? "issue_discovery" : lane.lane === "split" ? "split" : "direct_pr", + issuePolicy, + labelPolicy: { + autoLabelEnabled: settings.autoLabelEnabled, + label: settings.gittensorLabel, + createMissingLabel: settings.createMissingLabel, + configuredRegistryLabels: configQuality.configuredLabels, + missingOrUnusedRegistryLabels: configQuality.notObservedConfiguredLabels, + }, + maintainerCutReadiness, + contributorIntakeHealth, + docsCompleteness: { + status: "repo_docs_not_crawled", + requiredDocs: ["README", "CONTRIBUTING", "SECURITY", "SUPPORT"], + note: "Gittensory validates public repo docs from the local project during CI; remote repo-doc crawling is not enabled in this signal yet.", + }, + blockers, + warnings, + dataQuality: intelligence.dataQuality, + }; +} + +async function buildGittensorConfigRecommendationResponse(env: Env, fullName: string) { + const intelligence = await buildRepoIntelligenceResponse(env, fullName); + const settings = await getRepositorySettings(env, fullName); + const repo = intelligence.repo; + const lane = buildLaneAdvice(repo, fullName); + const configQuality = intelligence.configQuality as ReturnType; + const contributorIntakeHealth = intelligence.contributorIntakeHealth as ReturnType; + const maintainerCutReadiness = intelligence.maintainerCutReadiness as ReturnType; + const current = repo?.registryConfig ?? null; + const shouldEnableIssueDiscovery = contributorIntakeHealth.level === "healthy" && configQuality.level === "excellent"; + const recommendedIssueDiscoveryShare = shouldEnableIssueDiscovery ? 0.1 : 0; + const currentAllocation = current?.emissionShare ?? 0; + const directPrShare = Math.max(0, currentAllocation - recommendedIssueDiscoveryShare); + const recommendedMaintainerCut = maintainerCutReadiness.ready ? Math.max(current?.maintainerCut ?? 0, 0.02) : current?.maintainerCut ?? 0; + return { + repoFullName: fullName, + generatedAt: nowIso(), + privateOnly: true, + current, + recommended: { + participationMode: recommendedIssueDiscoveryShare > 0 ? "split" : "direct_pr", + issueDiscoveryShare: recommendedIssueDiscoveryShare, + directPrShare, + maintainerCut: recommendedMaintainerCut, + requireLinkedIssue: settings.requireLinkedIssue, + labelMultipliers: configQuality.configuredLabels.length > 0 ? "keep_current_and_prune_unused" : "start_without_trusted_label_multipliers", + publicSurface: settings.publicSurface, + confirmedMinerLabel: settings.gittensorLabel, + }, + reasons: [ + lane.lane === "issue_discovery" ? "The current registry lane already routes meaningful work through issue discovery." : "Direct-PR mode is the safest default until issue-discovery intake is intentionally staffed.", + shouldEnableIssueDiscovery ? "Config and intake signals are strong enough to consider a small issue-discovery slice." : "Issue discovery should stay disabled until config quality and intake health are excellent.", + maintainerCutReadiness.ready ? "Maintainer cut can be considered because config and queue signals are clean." : "Maintainer cut should stay unchanged until readiness blockers are cleared.", + ], + warnings: [ + ...(configQuality.notObservedConfiguredLabels.length > 0 ? [`${configQuality.notObservedConfiguredLabels.length} configured label(s) have not been observed in cached repo activity.`] : []), + ...(contributorIntakeHealth.level === "strained" || contributorIntakeHealth.level === "blocked" ? [`Contributor intake is ${contributorIntakeHealth.level}; avoid increasing noisy lanes yet.`] : []), + ], + dataQuality: intelligence.dataQuality, + }; +} + async function loadOpenQueueCounts(env: Env, fullName: string): Promise<{ openIssues: number; openPullRequests: number }> { const [totals, openIssues, openPullRequests] = await Promise.all([getLatestRepoGithubTotalsSnapshot(env, fullName), countOpenIssues(env, fullName), countOpenPullRequests(env, fullName)]); return { diff --git a/src/openapi/schemas.ts b/src/openapi/schemas.ts index 8620428029..96277692c6 100644 --- a/src/openapi/schemas.ts +++ b/src/openapi/schemas.ts @@ -1026,6 +1026,36 @@ export const RepoIntelligenceSchema = z }) .openapi("RepoIntelligence"); +export const RegistrationReadinessSchema = z + .object({ + repoFullName: z.string(), + generatedAt: z.string(), + ready: z.boolean(), + recommendedRegistrationMode: z.enum(["direct_pr", "issue_discovery", "split"]), + issuePolicy: z.enum(["issue_discovery_enabled", "split_pr_and_issue_discovery_enabled", "direct_pr_requires_linked_issue", "direct_pr_no_issue_required"]), + labelPolicy: z.record(z.unknown()), + maintainerCutReadiness: z.record(z.unknown()), + contributorIntakeHealth: z.record(z.unknown()), + docsCompleteness: z.record(z.unknown()), + blockers: z.array(z.string()), + warnings: z.array(z.string()), + dataQuality: z.record(z.unknown()), + }) + .openapi("RegistrationReadiness"); + +export const GittensorConfigRecommendationSchema = z + .object({ + repoFullName: z.string(), + generatedAt: z.string(), + privateOnly: z.boolean(), + current: z.record(z.unknown()).nullable(), + recommended: z.record(z.unknown()), + reasons: z.array(z.string()), + warnings: z.array(z.string()), + dataQuality: z.record(z.unknown()), + }) + .openapi("GittensorConfigRecommendation"); + export const RewardRiskActionSchema = z .object({ actionKind: z.enum([ diff --git a/src/openapi/spec.ts b/src/openapi/spec.ts index 37a30d64d4..9711d1ec8d 100644 --- a/src/openapi/spec.ts +++ b/src/openapi/spec.ts @@ -39,6 +39,8 @@ import { DecisionPackRefreshNeededSchema, RepoFitRecommendationSchema, RepoDecisionResponseSchema, + GittensorConfigRecommendationSchema, + RegistrationReadinessSchema, RepoIntelligenceSchema, RepoRewardRiskSchema, RegistrySnapshotSchema, @@ -78,6 +80,8 @@ export function buildOpenApiSpec() { registry.register("DecisionPackRefreshNeeded", DecisionPackRefreshNeededSchema); registry.register("RepoDecisionResponse", RepoDecisionResponseSchema); registry.register("RepoIntelligence", RepoIntelligenceSchema); + registry.register("RegistrationReadiness", RegistrationReadinessSchema); + registry.register("GittensorConfigRecommendation", GittensorConfigRecommendationSchema); registry.register("RepoFitRecommendation", RepoFitRecommendationSchema); registry.register("PreflightResult", PreflightResultSchema); registry.register("LocalDiffPreflightResult", LocalDiffPreflightResultSchema); @@ -159,7 +163,7 @@ export function buildOpenApiSpec() { method: "get", path: "/v1/readiness", responses: { - 200: { description: "Operational readiness summary for private beta and public-review preparation", content: { "application/json": { schema: ReadinessSchema } } }, + 200: { description: "Operational readiness summary for hosted API, signal fidelity, and public-review preparation", content: { "application/json": { schema: ReadinessSchema } } }, }, }); registry.registerPath({ @@ -209,6 +213,20 @@ export function buildOpenApiSpec() { 200: { description: "Canonical repository intelligence bundle", content: { "application/json": { schema: RepoIntelligenceSchema } } }, }, }); + registry.registerPath({ + method: "get", + path: "/v1/repos/{owner}/{repo}/registration-readiness", + responses: { + 200: { description: "Gittensor registration readiness signal for repo owners", content: { "application/json": { schema: RegistrationReadinessSchema } } }, + }, + }); + registry.registerPath({ + method: "get", + path: "/v1/repos/{owner}/{repo}/gittensor-config-recommendation", + responses: { + 200: { description: "Private Gittensor config recommendation for repo owners", content: { "application/json": { schema: GittensorConfigRecommendationSchema } } }, + }, + }); registry.registerPath({ method: "get", path: "/v1/repos/{owner}/{repo}/settings", diff --git a/test/integration/api.test.ts b/test/integration/api.test.ts index 25949a088e..ef7fbe9ed5 100644 --- a/test/integration/api.test.ts +++ b/test/integration/api.test.ts @@ -17,6 +17,7 @@ import { upsertPullRequestFromGitHub, persistScoringModelSnapshot, upsertRepositoryFromGitHub, + upsertRepositorySettings, } from "../../src/db/repositories"; import { createApp } from "../../src/api/routes"; import { normalizeRegistryPayload } from "../../src/registry/normalize"; @@ -232,6 +233,30 @@ describe("api routes", () => { dataQuality: expect.any(Object), }); + const registrationReadiness = await app.request("/v1/repos/entrius/allways-ui/registration-readiness", { headers: apiHeaders(env) }, env); + expect(registrationReadiness.status).toBe(200); + await expect(registrationReadiness.json()).resolves.toMatchObject({ + repoFullName: "entrius/allways-ui", + recommendedRegistrationMode: "direct_pr", + issuePolicy: "direct_pr_no_issue_required", + labelPolicy: { label: "gittensor" }, + docsCompleteness: { status: "repo_docs_not_crawled" }, + dataQuality: expect.any(Object), + }); + + const configRecommendation = await app.request("/v1/repos/entrius/allways-ui/gittensor-config-recommendation", { headers: apiHeaders(env) }, env); + expect(configRecommendation.status).toBe(200); + await expect(configRecommendation.json()).resolves.toMatchObject({ + repoFullName: "entrius/allways-ui", + privateOnly: true, + recommended: { + participationMode: "direct_pr", + issueDiscoveryShare: 0, + confirmedMinerLabel: "gittensor", + }, + reasons: expect.arrayContaining([expect.stringMatching(/Direct-PR|Direct-PR|Direct/i)]), + }); + for (const path of [ "/v1/repos/entrius/allways-ui/queue-health", "/v1/repos/entrius/allways-ui/collisions", @@ -1228,6 +1253,72 @@ describe("api routes", () => { expect(JSON.stringify(missingBountyPayload)).toMatch(/Bounty not found|error|isError/i); }, 15_000); + it("covers registration-readiness policy variants for repo-owner launch planning", async () => { + const app = createApp(); + const env = createTestEnv(); + await seedSignalData(env); + + const unknownReadiness = await app.request("/v1/repos/JSONbored/gittensory/registration-readiness", { headers: apiHeaders(env) }, env); + expect(unknownReadiness.status).toBe(200); + await expect(unknownReadiness.json()).resolves.toMatchObject({ + ready: false, + recommendedRegistrationMode: "direct_pr", + blockers: expect.arrayContaining(["Repository is not registered in the latest Gittensory registry snapshot."]), + }); + + await upsertRepositorySettings(env, { + repoFullName: "entrius/allways-ui", + publicSurface: "off", + requireLinkedIssue: true, + autoLabelEnabled: false, + createMissingLabel: false, + gittensorLabel: "gittensor-miner", + }); + const directReadiness = await app.request("/v1/repos/entrius/allways-ui/registration-readiness", { headers: apiHeaders(env) }, env); + expect(directReadiness.status).toBe(200); + await expect(directReadiness.json()).resolves.toMatchObject({ + issuePolicy: "direct_pr_requires_linked_issue", + labelPolicy: { autoLabelEnabled: false, label: "gittensor-miner", createMissingLabel: false }, + warnings: expect.arrayContaining(["GitHub App public surface is disabled; maintainers will not get comment/label assistance."]), + }); + + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { + "entrius/allways-ui": { + emission_share: 0.01107, + issue_discovery_share: 0.01, + label_multipliers: {}, + trusted_label_pipeline: false, + maintainer_cut: 0.03, + }, + }, + { kind: "raw-github", url: "https://example.test/issue-discovery-registry.json" }, + "2026-05-26T00:00:00.000Z", + ), + ); + const issueDiscoveryReadiness = await app.request("/v1/repos/entrius/allways-ui/registration-readiness", { headers: apiHeaders(env) }, env); + expect(issueDiscoveryReadiness.status).toBe(200); + await expect(issueDiscoveryReadiness.json()).resolves.toMatchObject({ + recommendedRegistrationMode: "split", + issuePolicy: "split_pr_and_issue_discovery_enabled", + }); + + const recommendation = await app.request("/v1/repos/entrius/allways-ui/gittensor-config-recommendation", { headers: apiHeaders(env) }, env); + expect(recommendation.status).toBe(200); + await expect(recommendation.json()).resolves.toMatchObject({ + privateOnly: true, + current: { issueDiscoveryShare: 0.01, maintainerCut: 0.03 }, + recommended: { + requireLinkedIssue: true, + confirmedMinerLabel: "gittensor-miner", + publicSurface: "off", + }, + reasons: expect.arrayContaining([expect.stringMatching(/issue discovery|Direct-PR/i)]), + }); + }); + it("updates repository settings through protected internal API", async () => { const app = createApp(); const env = createTestEnv(); diff --git a/test/unit/mcp-cli.test.ts b/test/unit/mcp-cli.test.ts index 3c15e2800d..9dcc5436d0 100644 --- a/test/unit/mcp-cli.test.ts +++ b/test/unit/mcp-cli.test.ts @@ -50,6 +50,27 @@ describe("gittensory-mcp CLI", () => { ); }); + it("reports package status and prints the packaged changelog", async () => { + tempDir = mkdtempSync(join(tmpdir(), "gittensory-cli-")); + const url = await startFixtureServer(); + const status = JSON.parse( + await runAsync(["status", "--json"], { + GITTENSORY_API_URL: url, + GITTENSORY_TOKEN: "session-token", + GITTENSORY_CONFIG_DIR: tempDir, + GITTENSORY_SKIP_NPM_VERSION_CHECK: "true", + }), + ) as { package: { name: string; version: string; latestStatus: string }; api: { status: string }; auth: { login: string } }; + + expect(status.package).toMatchObject({ name: "@jsonbored/gittensory-mcp", version: "0.1.4", latestStatus: "skipped" }); + expect(status.api.status).toBe("ok"); + expect(status.auth.login).toBe("JSONbored"); + + const changelog = JSON.parse(run(["changelog", "--json"])) as { package: { version: string }; changelog: string }; + expect(changelog.package.version).toBe("0.1.4"); + expect(changelog.changelog).toContain("# Changelog"); + }); + it("rejects unsupported client snippets", () => { expect(() => run(["init-client", "--print", "other"])).toThrow(/Unsupported client/); }); diff --git a/test/unit/openapi.test.ts b/test/unit/openapi.test.ts index 54cf628622..74deeda1d2 100644 --- a/test/unit/openapi.test.ts +++ b/test/unit/openapi.test.ts @@ -10,6 +10,8 @@ describe("OpenAPI contract", () => { expect(spec.paths["/v1/readiness"]).toBeDefined(); expect(spec.paths["/v1/sync/status"]).toBeDefined(); expect(spec.paths["/v1/repos/{owner}/{repo}/intelligence"]).toBeDefined(); + expect(spec.paths["/v1/repos/{owner}/{repo}/registration-readiness"]).toBeDefined(); + expect(spec.paths["/v1/repos/{owner}/{repo}/gittensor-config-recommendation"]).toBeDefined(); expect(spec.paths["/v1/repos/{owner}/{repo}/pulls/{number}/maintainer-packet"]).toBeDefined(); expect(spec.paths["/v1/repos/{owner}/{repo}/pulls/{number}/reviewability"]).toBeDefined(); expect(spec.paths["/v1/contributors/{login}/profile"]).toBeDefined(); @@ -55,6 +57,8 @@ describe("OpenAPI contract", () => { expect(spec.components?.schemas?.DecisionPackRefreshNeeded).toBeDefined(); expect(spec.components?.schemas?.RepoDecisionResponse).toBeDefined(); expect(spec.components?.schemas?.RepoIntelligence).toBeDefined(); + expect(spec.components?.schemas?.RegistrationReadiness).toBeDefined(); + expect(spec.components?.schemas?.GittensorConfigRecommendation).toBeDefined(); expect(spec.components?.schemas?.PullRequestMaintainerPacket).toBeDefined(); expect(spec.components?.schemas?.PullRequestReviewability).toBeDefined(); expect(spec.components?.schemas?.LocalBranchAnalysis).toBeDefined(); From 90a718d8d509e3f0ca074629cd7c46753c2bce21 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 26 May 2026 08:04:12 -0700 Subject: [PATCH 3/5] test(coverage): raise backend regression coverage --- src/api/routes.ts | 10 +- src/github/backfill.ts | 22 +- src/gittensor/api.ts | 22 +- src/queue/processors.ts | 5 +- src/registry/sync.ts | 6 +- src/scoring/model.ts | 14 +- src/utils/json.ts | 9 + test/helpers/d1.ts | 4 +- test/integration/api.test.ts | 325 ++++++++++++ test/integration/routes-errors.test.ts | 40 ++ test/unit/auth.test.ts | 129 ++++- test/unit/backfill.test.ts | 326 ++++++++++++ test/unit/db-parsers.test.ts | 117 +++++ test/unit/gittensor-api.test.ts | 81 ++- test/unit/json-utils.test.ts | 24 + test/unit/local-branch.test.ts | 96 ++++ test/unit/queue.test.ts | 184 +++++++ test/unit/rules.test.ts | 29 ++ test/unit/signals-coverage.test.ts | 671 +++++++++++++++++++++++++ vitest.config.ts | 8 +- 20 files changed, 2079 insertions(+), 43 deletions(-) create mode 100644 test/unit/db-parsers.test.ts create mode 100644 test/unit/json-utils.test.ts create mode 100644 test/unit/signals-coverage.test.ts diff --git a/src/api/routes.ts b/src/api/routes.ts index 4e51d5e8a6..bd04e57995 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -94,7 +94,7 @@ import { attachDataQuality, buildCoreSignalFidelity, buildRepoDataQuality, build import { buildPullRequestReviewability } from "../signals/reward-risk"; import { buildLocalBranchAnalysis } from "../signals/local-branch"; import type { ContributorEvidenceRecord, JobMessage, JsonValue, RepoSyncSegmentRecord } from "../types"; -import { nowIso } from "../utils/json"; +import { errorMessage, nowIso } from "../utils/json"; type AppBindings = { Bindings: Env }; @@ -272,7 +272,8 @@ export function createApp() { 201, ); } catch (error) { - return c.json({ error: error instanceof Error ? error.message : "github_device_flow_start_failed" }, error instanceof Error && error.message === "github_oauth_not_configured" ? 503 : 502); + const message = errorMessage(error, "github_device_flow_start_failed"); + return c.json({ error: message }, message === "github_oauth_not_configured" ? 503 : 502); } }); @@ -283,7 +284,8 @@ export function createApp() { try { return c.json(await pollGitHubDeviceFlow(c.env, deviceCode)); } catch (error) { - return c.json({ error: error instanceof Error ? error.message : "github_device_flow_poll_failed" }, error instanceof Error && error.message === "github_oauth_not_configured" ? 503 : 502); + const message = errorMessage(error, "github_device_flow_poll_failed"); + return c.json({ error: message }, message === "github_oauth_not_configured" ? 503 : 502); } }); @@ -294,7 +296,7 @@ export function createApp() { try { return c.json(await createSessionFromGitHubToken(c.env, githubToken, { source: "github_token_exchange" }), 201); } catch (error) { - return c.json({ error: error instanceof Error ? error.message : "github_session_create_failed" }, 401); + return c.json({ error: errorMessage(error, "github_session_create_failed") }, 401); } }); diff --git a/src/github/backfill.ts b/src/github/backfill.ts index ab903a9ccc..0e4f809192 100644 --- a/src/github/backfill.ts +++ b/src/github/backfill.ts @@ -51,7 +51,7 @@ import type { RepoSyncStateRecord, RepositoryRecord, } from "../types"; -import { nowIso, repoParts } from "../utils/json"; +import { errorMessage, nowIso, repoParts, strippedErrorMessage } from "../utils/json"; import { createInstallationToken, getAppInstallation } from "./app"; type GitHubLabelPayload = { @@ -519,7 +519,7 @@ export async function refreshContributorActivity( try { payload = await githubGraphQl(env, query, token); } catch (error) { - warnings.push(`Contributor activity refresh failed for ${chunk.map((repo) => repo.fullName).join(", ")}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`Contributor activity refresh failed for ${chunk.map((repo) => repo.fullName).join(", ")}: ${errorMessage(error)}`); continue; } if (payload.errors?.length) { @@ -683,7 +683,7 @@ async function refreshStoredInstallation(env: Env, installation: InstallationRec } catch (error) { return { installation, - errorSummary: String(error).replace(/^Error: /, "") || "Failed to refresh GitHub App installation metadata.", + errorSummary: strippedErrorMessage(error, "Failed to refresh GitHub App installation metadata."), }; } } @@ -930,7 +930,7 @@ async function fetchPagedSegment( warnings.push(`GitHub sync is waiting for rate-limit recovery for ${path}: ${error.message}`); } else { status = fetchedThisRun > 0 ? "partial" : "error"; - warnings.push(`GitHub sync failed for ${path}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`GitHub sync failed for ${path}: ${errorMessage(error)}`); } } let fetchedCount = options.countPersisted ? await options.countPersisted() : priorFetched + fetchedThisRun; @@ -988,7 +988,7 @@ async function supplementUnderCountIfNeeded( if (supplemented > 0) warnings.push(`Supplemented ${supplemented} open issue row(s) from GitHub GraphQL because REST open issue pagination undercounted the authoritative total.`); return options.countPersisted ? await options.countPersisted() : fetchedCount + supplemented; } catch (error) { - warnings.push(`GitHub GraphQL supplement failed after REST undercount: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`GitHub GraphQL supplement failed after REST undercount: ${errorMessage(error)}`); return fetchedCount; } } @@ -1288,7 +1288,7 @@ async function backfillRepository(env: Env, repo: RepositoryRecord, limits: Back dataQuality, }; } catch (error) { - const errorSummary = error instanceof Error ? error.message : "unknown error"; + const errorSummary = errorMessage(error); const rateLimitResetAt = error instanceof GitHubApiError ? error.rateLimitResetAt : undefined; const status = error instanceof GitHubApiError && error.rateLimited ? "rate_limited" : "error"; await completeSegment(env, repo, "metadata", repo.installationId ? "installation" : "github", mode, startedAt, { @@ -1337,12 +1337,12 @@ async function fetchAndStorePullRequestDetails( const [files, reviews, checks] = await Promise.all([ fetchPullRequestFiles(env, repoFullName, pr.number, token, warnings), githubJson(env, repoFullName, `/pulls/${pr.number}/reviews?per_page=100`, token).catch((error) => { - warnings.push(`Review sync failed for #${pr.number}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`Review sync failed for #${pr.number}: ${errorMessage(error)}`); return []; }), pr.headSha ? githubJson<{ check_runs?: GitHubCheckRunPayload[] }>(env, repoFullName, `/commits/${pr.headSha}/check-runs?per_page=100`, token).catch((error) => { - warnings.push(`Check sync failed for #${pr.number}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`Check sync failed for #${pr.number}: ${errorMessage(error)}`); return { check_runs: [] }; }) : Promise.resolve({ check_runs: [] }), @@ -1398,7 +1398,7 @@ async function fetchPullRequestFiles( warnings: string[], ): Promise { return githubJson(env, repoFullName, `/pulls/${pullNumber}/files?per_page=100`, token).catch((error) => { - warnings.push(`File sync failed for #${pullNumber}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`File sync failed for #${pullNumber}: ${errorMessage(error)}`); return []; }); } @@ -1482,7 +1482,7 @@ async function syncLabels( }); return { items, warnings: [], segment }; } catch (error) { - const warning = `Label sync failed: ${error instanceof Error ? error.message : "unknown error"}`; + const warning = `Label sync failed: ${errorMessage(error)}`; const segment = await completeSegment(env, repo, "labels", sourceKind, mode, startedAt, { status: error instanceof GitHubApiError && error.rateLimited ? "rate_limited" : "partial", fetchedCount: 0, @@ -1541,7 +1541,7 @@ async function githubPaged( } catch (error) { status = error instanceof GitHubApiError && error.rateLimited ? "rate_limited" : items.length > 0 ? "partial" : "error"; rateLimitResetAt = error instanceof GitHubApiError ? error.rateLimitResetAt : undefined; - warnings.push(`GitHub sync failed for ${path}: ${error instanceof Error ? error.message : "unknown error"}`); + warnings.push(`GitHub sync failed for ${path}: ${errorMessage(error)}`); } if (status === "complete" && items.length >= limit && limit > 0) { diff --git a/src/gittensor/api.ts b/src/gittensor/api.ts index b572cdd16f..4abb0aae92 100644 --- a/src/gittensor/api.ts +++ b/src/gittensor/api.ts @@ -1,4 +1,5 @@ import type { ContributorRepoStatRecord } from "../types"; +import { errorMessage } from "../utils/json"; const GITTENSOR_API_BASE = "https://api.gittensor.io"; const GITTENSOR_MIRROR_API_BASE = "https://mirror.gittensor.io/api/v1"; @@ -33,6 +34,11 @@ type GittensorMinerSummaryResponse = { usdPerDay?: number; }; +type ConfirmedGittensorMinerSummaryResponse = GittensorMinerSummaryResponse & { + githubId: string; + githubUsername: string; +}; + type GittensorMinerDetailResponse = GittensorMinerSummaryResponse & { repositories?: GittensorRepositoryEvaluationResponse[]; }; @@ -165,9 +171,9 @@ export async function fetchOfficialGittensorMiner(login: string): Promise candidate.githubUsername?.toLowerCase() === normalizedLogin || candidate.githubId === login); if (!miner?.githubId || !miner.githubUsername) return { status: "not_found" }; - return { status: "confirmed", snapshot: await buildGittensorContributorSnapshot(miner) }; + return { status: "confirmed", snapshot: await buildGittensorContributorSnapshot({ ...miner, githubId: miner.githubId, githubUsername: miner.githubUsername }) }; } catch (error) { - return { status: "unavailable", error: error instanceof Error ? error.message : "unknown Gittensor API error" }; + return { status: "unavailable", error: errorMessage(error, "unknown Gittensor API error") }; } } @@ -187,11 +193,11 @@ export function contributorRepoStatsFromGittensor(snapshot: GittensorContributor })); } -async function buildGittensorContributorSnapshot(miner: GittensorMinerSummaryResponse): Promise { +async function buildGittensorContributorSnapshot(miner: ConfirmedGittensorMinerSummaryResponse): Promise { const [detailResult, pullRequestsResult, issuesResult] = await Promise.allSettled([ - fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}`), - fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}/prs`), - fetchJson(`${GITTENSOR_MIRROR_API_BASE}/miners/${encodeURIComponent(miner.githubId ?? "")}/issues`), + fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}`), + fetchJson(`${GITTENSOR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}/prs`), + fetchJson(`${GITTENSOR_MIRROR_API_BASE}/miners/${encodeURIComponent(miner.githubId)}/issues`), ]); const detail = detailResult.status === "fulfilled" ? detailResult.value : {}; const pullRequests = pullRequestsResult.status === "fulfilled" ? pullRequestsResult.value : []; @@ -200,8 +206,8 @@ async function buildGittensorContributorSnapshot(miner: GittensorMinerSummaryRes return { source: "gittensor_api", - githubId: miner.githubId ?? "", - githubUsername: miner.githubUsername ?? "", + githubId: miner.githubId, + githubUsername: miner.githubUsername, uid: source.uid, hotkey: source.hotkey, failedReason: source.failedReason, diff --git a/src/queue/processors.ts b/src/queue/processors.ts index fae731a1d5..3cdb295d21 100644 --- a/src/queue/processors.ts +++ b/src/queue/processors.ts @@ -70,6 +70,7 @@ import { detectGittensorContributor, } from "../signals/engine"; import type { ContributorEvidenceRecord, GitHubWebhookPayload, JobMessage, JsonValue } from "../types"; +import { errorMessage } from "../utils/json"; export async function processJob(env: Env, message: JobMessage): Promise { switch (message.type) { @@ -448,7 +449,7 @@ async function processGitHubWebhook(env: Env, deliveryId: string, eventName: str deliveryId, repository: payload.repository?.full_name, pullNumber: pr.number, - error: error instanceof Error ? error.message : "unknown error", + error: errorMessage(error), }), ); }); @@ -480,7 +481,7 @@ async function processGitHubWebhook(env: Env, deliveryId: string, eventName: str repositoryFullName: payload.repository?.full_name, payloadHash: "processed", status: "error", - errorSummary: error instanceof Error ? error.message : "unknown error", + errorSummary: errorMessage(error), }); throw error; } diff --git a/src/registry/sync.ts b/src/registry/sync.ts index 06b07fa5ff..cd645fe2f2 100644 --- a/src/registry/sync.ts +++ b/src/registry/sync.ts @@ -2,7 +2,7 @@ import { and, desc, eq, notInArray } from "drizzle-orm"; import { getDb } from "../db/client"; import { registrySnapshots, repositories, syncRuns } from "../db/schema"; import type { RegistrySnapshot } from "../types"; -import { jsonString, nowIso, repoParts } from "../utils/json"; +import { errorMessage, jsonString, nowIso, repoParts } from "../utils/json"; import { normalizeRegistryPayload } from "./normalize"; const API_CANDIDATES = [ @@ -59,7 +59,7 @@ export async function refreshRegistry(env: Env): Promise { .where(eq(syncRuns.id, syncId)); return snapshot; } catch (error) { - warnings.push(`Registry probe failed: ${url} (${error instanceof Error ? error.message : "unknown error"})`); + warnings.push(`Registry probe failed: ${url} (${errorMessage(error)})`); } } throw new Error("No registry source returned usable data."); @@ -69,7 +69,7 @@ export async function refreshRegistry(env: Env): Promise { .set({ status: "error", warningsJson: jsonString(warnings), - errorSummary: error instanceof Error ? error.message : "unknown error", + errorSummary: errorMessage(error), completedAt: nowIso(), }) .where(eq(syncRuns.id, syncId)); diff --git a/src/scoring/model.ts b/src/scoring/model.ts index 36406d92de..589209c8a1 100644 --- a/src/scoring/model.ts +++ b/src/scoring/model.ts @@ -4,7 +4,7 @@ import { } from "../db/repositories"; import { getLatestRegistrySnapshot } from "../registry/sync"; import type { JsonValue, ScoringModelSnapshotRecord } from "../types"; -import { nowIso } from "../utils/json"; +import { errorMessage, nowIso } from "../utils/json"; export const DEFAULT_SCORING_CONSTANTS: Record = { OSS_EMISSION_SHARE: 0.9, @@ -95,10 +95,10 @@ export function parsePythonNumberConstants(source: string): Record }; } catch (error) { - return { ok: false, error: error instanceof Error ? error.message : "unknown error" }; + return { ok: false, error: errorMessage(error) }; } } diff --git a/src/utils/json.ts b/src/utils/json.ts index 0e0e1216a2..16d7222743 100644 --- a/src/utils/json.ts +++ b/src/utils/json.ts @@ -15,6 +15,15 @@ export function nowIso(): string { return new Date().toISOString(); } +export function errorMessage(error: unknown, fallback = "unknown error"): string { + return error instanceof Error && error.message ? error.message : fallback; +} + +export function strippedErrorMessage(error: unknown, fallback: string): string { + const message = errorMessage(error, ""); + return message.replace(/^Error: /, "") || fallback; +} + export function normalizeRepoFullName(value: string): string { return value.trim(); } diff --git a/test/helpers/d1.ts b/test/helpers/d1.ts index 46afa2962c..38d4e9aec6 100644 --- a/test/helpers/d1.ts +++ b/test/helpers/d1.ts @@ -34,8 +34,8 @@ export class TestD1Database { return rows.map((row) => columns.map((column) => row[column])) as T[]; }, async run() { - statement.run(...bound); - return { success: true, meta: {}, results: [] }; + const result = statement.run(...bound); + return { success: true, meta: { changes: Number(result.changes ?? 0) }, results: [] }; }, }; return api; diff --git a/test/integration/api.test.ts b/test/integration/api.test.ts index ef7fbe9ed5..1337709f4d 100644 --- a/test/integration/api.test.ts +++ b/test/integration/api.test.ts @@ -33,6 +33,9 @@ describe("api routes", () => { const app = createApp(); const env = createTestEnv(); + const preflight = await app.request("/v1/repos", { method: "OPTIONS", headers: { origin: "https://gittensory.aethereal.dev" } }, env); + expect(preflight.status).toBe(204); + const health = await app.request("/health", {}, env); expect(health.status).toBe(200); await expect(health.json()).resolves.toMatchObject({ status: "ok", service: "gittensory-api" }); @@ -444,6 +447,37 @@ describe("api routes", () => { ); expect(localBranchWithMcpToken.status).toBe(200); + const localBranchWithHeadRefOnly = await app.request( + "/v1/local/branch-analysis", + { + method: "POST", + headers: apiHeaders(env), + body: JSON.stringify({ + login: "oktofeesh1", + repoFullName: "entrius/allways-ui", + headRef: "head-only", + changedFiles: [{ path: "src/cache.ts", additions: 1, deletions: 0 }], + }), + }, + env, + ); + expect(localBranchWithHeadRefOnly.status).toBe(200); + + const localBranchWithLocalTarget = await app.request( + "/v1/local/branch-analysis", + { + method: "POST", + headers: apiHeaders(env), + body: JSON.stringify({ + login: "oktofeesh1", + repoFullName: "entrius/allways-ui", + changedFiles: [{ path: "src/cache.ts", additions: 1, deletions: 0 }], + }), + }, + env, + ); + expect(localBranchWithLocalTarget.status).toBe(200); + const sourceContentRejected = await app.request( "/v1/local/branch-analysis", { @@ -706,6 +740,19 @@ describe("api routes", () => { const app = createApp(); const env = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); await seedSignalData(env); + await upsertInstallationHealth(env, { + installationId: 123, + accountLogin: "entrius", + repositorySelection: "selected", + installedReposCount: 1, + registeredInstalledCount: 1, + status: "needs_attention", + missingPermissions: ["issues"], + missingEvents: [], + permissions: { metadata: "read", pull_requests: "read" }, + events: ["issues", "pull_request", "repository"], + checkedAt: "2026-05-23T00:00:00.000Z", + }); await upsertRepoSyncSegment(env, { repoFullName: "entrius/allways-ui", segment: "open_pull_requests", @@ -730,6 +777,18 @@ describe("api routes", () => { completedAt: "2026-05-23T00:00:00.000Z", warnings: ["secondary rate limit"], }); + await upsertRepoSyncSegment(env, { + repoFullName: "entrius/allways-ui", + segment: "check_summaries", + status: "stale", + sourceKind: "github", + mode: "full", + fetchedCount: 2, + expectedCount: 2, + pageCount: 1, + completedAt: "2026-05-23T00:00:00.000Z", + warnings: ["old check data"], + }); const readiness = await app.request("/v1/readiness", { headers: apiHeaders(env) }, env); expect(readiness.status).toBe(200); @@ -741,15 +800,18 @@ describe("api routes", () => { status: "blocked", cappedRepos: ["entrius/allways-ui"], rateLimitedRepos: ["entrius/allways-ui"], + staleRepos: ["entrius/allways-ui"], nextRecoverableAt: "2026-05-27T00:00:00.000Z", }, cappedRepos: ["entrius/allways-ui"], rateLimitedRepos: ["entrius/allways-ui"], + staleRepos: ["entrius/allways-ui"], nextRecoverableAt: "2026-05-27T00:00:00.000Z", githubBackfill: { cappedSegments: [expect.objectContaining({ repoFullName: "entrius/allways-ui", segment: "open_pull_requests", nextCursor: "2" })], rateLimitedSegments: [expect.objectContaining({ repoFullName: "entrius/allways-ui", segment: "open_issues", rateLimitResetAt: "2026-05-27T00:00:00.000Z" })], }, + warnings: expect.arrayContaining([expect.stringContaining("repo sync(s) are stale"), "One or more GitHub App installations need attention."]), }); const syncStatus = await app.request("/v1/sync/status", { headers: apiHeaders(env) }, env); @@ -761,6 +823,28 @@ describe("api routes", () => { expect.objectContaining({ repoFullName: "entrius/allways-ui", segment: "open_issues", status: "rate_limited" }), ]), }); + + const refreshingEnv = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); + await seedSignalData(refreshingEnv); + await upsertRepoSyncSegment(refreshingEnv, { + repoFullName: "entrius/allways-ui", + segment: "labels", + status: "running", + sourceKind: "github", + mode: "resume", + fetchedCount: 2, + expectedCount: 2, + pageCount: 1, + completedAt: "2026-05-23T00:00:00.000Z", + warnings: [], + }); + const refreshingReadiness = await app.request("/v1/readiness", { headers: apiHeaders(refreshingEnv) }, refreshingEnv); + expect(refreshingReadiness.status).toBe(200); + await expect(refreshingReadiness.json()).resolves.toMatchObject({ + readyForPublicReview: true, + coreSignalFidelity: { status: "complete", refreshingRepos: ["entrius/allways-ui"] }, + warnings: expect.arrayContaining([expect.stringContaining("repo(s) are refreshing")]), + }); }); it("serves private MCP tool listing and tool calls", async () => { @@ -1319,6 +1403,247 @@ describe("api routes", () => { }); }); + it("covers modern route fallback branches, stale snapshots, and launch-readiness edge policies", async () => { + const queued: unknown[] = []; + const app = createApp(); + const env = createTestEnv({ + JOBS: { + async send(message: unknown) { + queued.push(message); + }, + } as unknown as Queue, + }); + + const deviceStart = await app.request("/v1/auth/github/device/start", { method: "POST" }, env); + expect(deviceStart.status).toBe(503); + const deviceMissingCode = await app.request("/v1/auth/github/device/poll", { method: "POST", body: JSON.stringify({}) }, env); + expect(deviceMissingCode.status).toBe(400); + const devicePollUnconfigured = await app.request("/v1/auth/github/device/poll", { method: "POST", body: JSON.stringify({ deviceCode: "abc" }) }, env); + expect(devicePollUnconfigured.status).toBe(503); + const sessionMissingToken = await app.request("/v1/auth/github/session", { method: "POST", body: JSON.stringify({}) }, env); + expect(sessionMissingToken.status).toBe(400); + vi.stubGlobal("fetch", async () => new Response("bad token", { status: 401 })); + const sessionRejected = await app.request("/v1/auth/github/session", { method: "POST", body: JSON.stringify({ githubToken: "bad" }) }, env); + expect(sessionRejected.status).toBe(401); + const unauthenticatedSession = await app.request("/v1/auth/session", {}, env); + expect(unauthenticatedSession.status).toBe(401); + const logout = await app.request("/v1/auth/logout", { method: "POST" }, env); + await expect(logout.json()).resolves.toMatchObject({ ok: true, revoked: false }); + + await persistSignalSnapshot(env, { + id: "stale-pack", + signalType: "contributor-decision-pack", + targetKey: "stale-user", + payload: { + status: "ready", + source: "computed", + login: "stale-user", + generatedAt: "2026-01-01T00:00:00.000Z", + stale: false, + scoringModelSnapshotId: "scoring-1", + profile: {}, + outcomeHistory: {}, + roleContexts: [], + repoDecisions: [], + topActions: [], + cleanupFirst: [], + pursueRepos: [], + avoidRepos: [], + maintainerLaneRepos: [], + scoreBlockers: [], + dataQuality: { signalFidelity: { status: "degraded" } }, + summary: "stale", + nextActions: [], + } as never, + generatedAt: "2026-01-01T00:00:00.000Z", + }); + const staleDecisionPack = await app.request("/v1/contributors/stale-user/decision-pack", { headers: apiHeaders(env) }, env); + expect(staleDecisionPack.status).toBe(202); + await expect(staleDecisionPack.json()).resolves.toMatchObject({ + status: "needs_snapshot_refresh", + reason: "stale_snapshot", + staleSnapshot: { generatedAt: "2026-01-01T00:00:00.000Z" }, + dataQuality: { signalFidelity: { status: "degraded" } }, + }); + + await persistSignalSnapshot(env, { + id: "fresh-empty-pack", + signalType: "contributor-decision-pack", + targetKey: "fresh-user", + payload: { + status: "ready", + source: "computed", + login: "fresh-user", + generatedAt: new Date().toISOString(), + stale: false, + scoringModelSnapshotId: "scoring-1", + profile: {}, + outcomeHistory: {}, + roleContexts: [], + repoDecisions: [], + topActions: [], + cleanupFirst: [], + pursueRepos: [], + avoidRepos: [], + maintainerLaneRepos: [], + scoreBlockers: [], + dataQuality: { signalFidelity: { status: "complete" } }, + summary: "fresh", + nextActions: [], + } as never, + generatedAt: new Date().toISOString(), + }); + const missingRepoDecision = await app.request("/v1/contributors/fresh-user/repos/owner/repo/decision", { headers: apiHeaders(env) }, env); + expect(missingRepoDecision.status).toBe(404); + + const invalidReviewability = await app.request("/v1/repos/owner/repo/pulls/not-a-number/reviewability", { headers: apiHeaders(env) }, env); + expect(invalidReviewability.status).toBe(400); + const noAuthorReviewability = await app.request("/v1/repos/owner/repo/pulls/123/reviewability", { headers: apiHeaders(env) }, env); + expect(noAuthorReviewability.status).toBe(200); + await expect(noAuthorReviewability.json()).resolves.toMatchObject({ action: "review_now" }); + + const backfillDefault = await app.request( + "/v1/internal/jobs/backfill-registered-repos", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ mode: "invalid" }) }, + env, + ); + expect(backfillDefault.status).toBe(202); + const backfillFullRun = await app.request( + "/v1/internal/jobs/backfill-registered-repos/run", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ mode: "full" }) }, + env, + ); + expect(backfillFullRun.status).toBe(200); + const missingSegmentRepo = await app.request("/v1/internal/jobs/backfill-repo-segment", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({}) }, env); + expect(missingSegmentRepo.status).toBe(400); + const invalidSegment = await app.request( + "/v1/internal/jobs/backfill-repo-segment/run", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo", segment: "bad" }) }, + env, + ); + expect(invalidSegment.status).toBe(400); + const queuedSegment = await app.request( + "/v1/internal/jobs/backfill-repo-segment", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo", segment: "labels", mode: "full", cursor: "2", force: true }) }, + env, + ); + expect(queuedSegment.status).toBe(202); + const queuedResumeSegment = await app.request( + "/v1/internal/jobs/backfill-repo-segment", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo", segment: "labels", mode: "resume" }) }, + env, + ); + expect(queuedResumeSegment.status).toBe(202); + const missingDetailsRepo = await app.request("/v1/internal/jobs/backfill-pr-details", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({}) }, env); + expect(missingDetailsRepo.status).toBe(400); + const queuedDetails = await app.request( + "/v1/internal/jobs/backfill-pr-details", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo", mode: "resume", cursor: "5" }) }, + env, + ); + expect(queuedDetails.status).toBe(202); + const queuedFullDetails = await app.request( + "/v1/internal/jobs/backfill-pr-details", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo", mode: "full" }) }, + env, + ); + expect(queuedFullDetails.status).toBe(202); + const evidenceAll = await app.request("/v1/internal/jobs/build-contributor-evidence", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: "{}" }, env); + expect(evidenceAll.status).toBe(202); + const packsAll = await app.request("/v1/internal/jobs/build-contributor-decision-packs", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: "{}" }, env); + expect(packsAll.status).toBe(202); + const missingActivityLogin = await app.request("/v1/internal/jobs/refresh-contributor-activity", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: "{}" }, env); + expect(missingActivityLogin.status).toBe(400); + const activityQueued = await app.request( + "/v1/internal/jobs/refresh-contributor-activity", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ login: "jsonbored", repoFullName: "owner/repo" }) }, + env, + ); + expect(activityQueued.status).toBe(202); + const burdenAll = await app.request("/v1/internal/jobs/build-burden-forecasts", { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: "{}" }, env); + expect(burdenAll.status).toBe(202); + const signalsOne = await app.request( + "/v1/internal/jobs/generate-signal-snapshots", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ repoFullName: "owner/repo" }) }, + env, + ); + expect(signalsOne.status).toBe(202); + const invalidSettings = await app.request( + "/v1/internal/repos/owner/repo/settings", + { method: "POST", headers: { authorization: `Bearer ${env.INTERNAL_JOB_TOKEN}` }, body: JSON.stringify({ commentMode: "loud" }) }, + env, + ); + expect(invalidSettings.status).toBe(400); + expect(queued).toEqual( + expect.arrayContaining([ + expect.objectContaining({ type: "backfill-registered-repos", mode: "light" }), + expect.objectContaining({ type: "backfill-repo-segment", repoFullName: "owner/repo", segment: "labels", mode: "full", cursor: "2", force: true }), + expect.objectContaining({ type: "backfill-pr-details", repoFullName: "owner/repo", mode: "resume", cursor: 5 }), + expect.objectContaining({ type: "build-contributor-evidence", login: undefined }), + expect.objectContaining({ type: "build-contributor-decision-packs", login: undefined }), + expect.objectContaining({ type: "refresh-contributor-activity", login: "jsonbored", repoFullName: "owner/repo" }), + expect.objectContaining({ type: "build-burden-forecasts", repoFullName: undefined }), + expect.objectContaining({ type: "generate-signal-snapshots", repoFullName: "owner/repo" }), + ]), + ); + + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { + "owner/excellent": { emission_share: 0.02, issue_discovery_share: 0, label_multipliers: {}, trusted_label_pipeline: false, maintainer_cut: 0 }, + "owner/issue-only": { emission_share: 0.02, issue_discovery_share: 1, label_multipliers: {}, trusted_label_pipeline: false, maintainer_cut: 0 }, + "owner/fragile": { emission_share: 0, issue_discovery_share: 0, label_multipliers: {}, trusted_label_pipeline: true, maintainer_cut: 0 }, + }, + { kind: "raw-github", url: "fixture://route-edge-registry" }, + "2026-05-26T00:00:00.000Z", + ), + ); + for (const fullName of ["owner/excellent", "owner/issue-only", "owner/fragile"]) { + const [, name] = fullName.split("/"); + await upsertRepositoryFromGitHub(env, { name: name!, full_name: fullName, private: false, owner: { login: "owner" }, default_branch: "main" }); + } + await persistRepoGithubTotalsSnapshot(env, { + id: "excellent-totals", + repoFullName: "owner/excellent", + openIssuesTotal: 0, + openPullRequestsTotal: 0, + mergedPullRequestsTotal: 0, + closedUnmergedPullRequestsTotal: 0, + labelsTotal: 0, + sourceKind: "github", + fetchedAt: "2026-05-26T00:00:00.000Z", + payload: {}, + }); + await persistRepoGithubTotalsSnapshot(env, { + id: "fragile-totals", + repoFullName: "owner/fragile", + openIssuesTotal: 500, + openPullRequestsTotal: 300, + mergedPullRequestsTotal: 0, + closedUnmergedPullRequestsTotal: 0, + labelsTotal: 0, + sourceKind: "github", + fetchedAt: "2026-05-26T00:00:00.000Z", + payload: {}, + }); + const excellentRecommendation = await app.request("/v1/repos/owner/excellent/gittensor-config-recommendation", { headers: apiHeaders(env) }, env); + expect(excellentRecommendation.status).toBe(200); + await expect(excellentRecommendation.json()).resolves.toMatchObject({ + recommended: { participationMode: "split", issueDiscoveryShare: 0.1, maintainerCut: 0.02 }, + reasons: expect.arrayContaining(["Config and intake signals are strong enough to consider a small issue-discovery slice.", "Maintainer cut can be considered because config and queue signals are clean."]), + }); + const issueOnlyReadiness = await app.request("/v1/repos/owner/issue-only/registration-readiness", { headers: apiHeaders(env) }, env); + expect(issueOnlyReadiness.status).toBe(200); + await expect(issueOnlyReadiness.json()).resolves.toMatchObject({ recommendedRegistrationMode: "issue_discovery", issuePolicy: "issue_discovery_enabled" }); + const fragileReadiness = await app.request("/v1/repos/owner/fragile/registration-readiness", { headers: apiHeaders(env) }, env); + expect(fragileReadiness.status).toBe(200); + await expect(fragileReadiness.json()).resolves.toMatchObject({ + ready: false, + blockers: expect.arrayContaining(["Repository config quality is fragile.", "Contributor intake health is blocked."]), + }); + }); + it("updates repository settings through protected internal API", async () => { const app = createApp(); const env = createTestEnv(); diff --git a/test/integration/routes-errors.test.ts b/test/integration/routes-errors.test.ts index e1a810bb9f..4642bcd50f 100644 --- a/test/integration/routes-errors.test.ts +++ b/test/integration/routes-errors.test.ts @@ -83,6 +83,34 @@ describe("api route guards and error branches", () => { expect(allowedRate.headers.get("x-ratelimit-reset")).toBe("2026-05-25T00:01:00.000Z"); }); + it("keeps auth route failures generic for non-Error provider failures", async () => { + const app = createApp(); + const env = createTestEnv({ GITHUB_OAUTH_CLIENT_ID: "client-id" }); + vi.stubGlobal("fetch", async () => { + throw "provider down"; + }); + + const start = await app.request("/v1/auth/github/device/start", { method: "POST" }, env); + expect(start.status).toBe(502); + await expect(start.json()).resolves.toEqual({ error: "github_device_flow_start_failed" }); + + const poll = await app.request("/v1/auth/github/device/poll", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ deviceCode: "device-code" }), + }, env); + expect(poll.status).toBe(502); + await expect(poll.json()).resolves.toEqual({ error: "github_device_flow_poll_failed" }); + + const session = await app.request("/v1/auth/github/session", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ githubToken: "token" }), + }, env); + expect(session.status).toBe(401); + await expect(session.json()).resolves.toEqual({ error: "github_session_create_failed" }); + }); + it("exposes the GitHub device OAuth route flow without requiring a static token", async () => { const app = createApp(); const env = createTestEnv({ GITHUB_OAUTH_CLIENT_ID: "client-id" }); @@ -233,6 +261,12 @@ describe("api route guards and error branches", () => { body: JSON.stringify({ mode: "full" }), }, env); expect(queuedFullBackfill.status).toBe(202); + const queuedResumeBackfill = await app.request("/v1/internal/jobs/backfill-registered-repos", { + method: "POST", + headers: internalHeaders(env), + body: JSON.stringify({ mode: "resume" }), + }, env); + expect(queuedResumeBackfill.status).toBe(202); const queuedSegment = await app.request("/v1/internal/jobs/backfill-repo-segment", { method: "POST", @@ -266,6 +300,12 @@ describe("api route guards and error branches", () => { }, env); expect(response.status).toBe(202); } + const queuedFullSegment = await app.request("/v1/internal/jobs/backfill-repo-segment", { + method: "POST", + headers: internalHeaders(env), + body: JSON.stringify({ repoFullName: "infiniflow/ragflow", segment: "labels", mode: "full" }), + }, env); + expect(queuedFullSegment.status).toBe(202); const queuedDetails = await app.request("/v1/internal/jobs/backfill-pr-details", { method: "POST", headers: internalHeaders(env), diff --git a/test/unit/auth.test.ts b/test/unit/auth.test.ts index 48bf2a99b7..746fe26bd4 100644 --- a/test/unit/auth.test.ts +++ b/test/unit/auth.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from "vitest"; import { createSessionFromGitHubToken, pollGitHubDeviceFlow, startGitHubDeviceFlow } from "../../src/auth/github-oauth"; -import { RateLimiter, routeClassForPath } from "../../src/auth/rate-limit"; +import { enforceRateLimit, RateLimiter, routeClassForPath } from "../../src/auth/rate-limit"; import { authenticatePrivateToken, createSessionForGitHubUser, revokeSession } from "../../src/auth/security"; import { createTestEnv } from "../helpers/d1"; @@ -41,14 +41,87 @@ describe("private-beta auth and rate limiting", () => { expect(invalid.status).toBe(400); }); + it("resets Durable Object buckets after the configured window expires", async () => { + const state = memoryDurableObjectState(); + const limiter = new RateLimiter(state as unknown as DurableObjectState, createTestEnv()); + const now = vi.spyOn(Date, "now"); + now.mockReturnValue(1_000); + + const first = await limiter.fetch(new Request("https://rate-limit/check", { method: "POST", body: JSON.stringify({ key: "session:reset", limit: 1, windowSeconds: 1 }) })); + const second = await limiter.fetch(new Request("https://rate-limit/check", { method: "POST", body: JSON.stringify({ key: "session:reset", limit: 1, windowSeconds: 1 }) })); + now.mockReturnValue(2_001); + const reset = await limiter.fetch(new Request("https://rate-limit/check", { method: "POST", body: JSON.stringify({ key: "session:reset", limit: 1, windowSeconds: 1 }) })); + + expect(first.status).toBe(200); + expect(second.status).toBe(429); + expect(reset.status).toBe(200); + await expect(reset.json()).resolves.toMatchObject({ allowed: true, remaining: 0 }); + }); + it("classifies rate-limit route costs", () => { expect(routeClassForPath("/v1/auth/github/device/start")).toBe("strict"); expect(routeClassForPath("/v1/local/branch-analysis")).toBe("expensive"); + expect(routeClassForPath("/v1/scoring/preview")).toBe("expensive"); expect(routeClassForPath("/v1/contributors/jsonbored/decision-pack")).toBe("expensive"); expect(routeClassForPath("/v1/internal/jobs/generate-signal-snapshots")).toBe("expensive"); + expect(routeClassForPath("/v1/internal/jobs/build-contributor-decision-packs")).toBe("expensive"); expect(routeClassForPath("/v1/repos")).toBe("normal"); }); + it("enforces route limits with session and IP keys plus retry headers", async () => { + const env = createTestEnv(); + const noLimiter = fakeContext(env, "/v1/repos/123/pulls/456", { authorization: "Bearer session-token" }); + await expect(enforceRateLimit(noLimiter, "normal")).resolves.toBeNull(); + + const fallbackHeaders = fakeContext( + createTestEnv({ RATE_LIMITER: rateLimiterNamespace({ status: 200, body: {} }) as unknown as DurableObjectNamespace }), + "/v1/repos/JSONbored/gittensory", + { "x-forwarded-for": "198.51.100.2, 198.51.100.3" }, + ); + await expect(enforceRateLimit(fallbackHeaders, "normal")).resolves.toBeNull(); + expect(fallbackHeaders.res.headers.get("x-ratelimit-limit")).toBe("120"); + expect(fallbackHeaders.res.headers.get("x-ratelimit-remaining")).toBe("120"); + expect(fallbackHeaders.res.headers.get("x-ratelimit-reset")).toBeNull(); + + const allowed = fakeContext( + createTestEnv({ RATE_LIMITER: rateLimiterNamespace({ status: 200, body: { limit: 3, remaining: 2, resetAt: "2026-05-25T00:01:00.000Z" } }) as unknown as DurableObjectNamespace }), + "/v1/repos/JSONbored/gittensory/pulls/123/reviewability", + { authorization: "Bearer session-token" }, + ); + await expect(enforceRateLimit(allowed, "normal")).resolves.toBeNull(); + expect(allowed.res.headers.get("x-ratelimit-limit")).toBe("3"); + expect(allowed.res.headers.get("x-ratelimit-remaining")).toBe("2"); + expect(allowed.res.headers.get("x-ratelimit-reset")).toBe("2026-05-25T00:01:00.000Z"); + + const deniedEnv = createTestEnv({ RATE_LIMITER: rateLimiterNamespace({ status: 429, body: { resetAt: "2026-05-25T00:02:00.000Z" } }) as unknown as DurableObjectNamespace }); + const denied = fakeContext( + deniedEnv, + "/v1/local/branch-analysis", + { "cf-connecting-ip": "203.0.113.7" }, + ); + const response = await enforceRateLimit(denied, "expensive"); + expect(response?.status).toBe(429); + expect(response?.headers.get("retry-after")).toBe("60"); + await expect(response?.json()).resolves.toMatchObject({ error: "rate_limited", routeClass: "expensive", retryAfterSeconds: 60 }); + + const audited = await deniedEnv.DB.prepare("select event_type, actor, outcome from audit_events where event_type = ?").bind("rate_limit.denied").all(); + expect(audited.results).toEqual(expect.arrayContaining([expect.objectContaining({ event_type: "rate_limit.denied", actor: "anonymous", outcome: "denied" })])); + + const deniedWithTokenEnv = createTestEnv({ + RATE_LIMITER: rateLimiterNamespace({ status: 429, body: { limit: 20, remaining: 0, retryAfterSeconds: 17, resetAt: "2026-05-25T00:03:00.000Z" } }) as unknown as DurableObjectNamespace, + }); + const deniedWithToken = fakeContext(deniedWithTokenEnv, "/v1/local/branch-analysis", { authorization: "Bearer session-token" }); + const deniedWithTokenResponse = await enforceRateLimit(deniedWithToken, "expensive"); + expect(deniedWithTokenResponse?.headers.get("retry-after")).toBe("17"); + expect(deniedWithTokenResponse?.headers.get("x-ratelimit-reset")).toBe("2026-05-25T00:03:00.000Z"); + const tokenAudit = await deniedWithTokenEnv.DB.prepare("select actor, metadata_json from audit_events where event_type = ?").bind("rate_limit.denied").first<{ + actor: string; + metadata_json: string; + }>(); + expect(tokenAudit?.actor).toMatch(/^token:/); + expect(JSON.parse(tokenAudit?.metadata_json ?? "{}")).toMatchObject({ retryAfterSeconds: 17 }); + }); + it("starts GitHub device flow and rejects malformed provider responses", async () => { const env = createTestEnv({ GITHUB_OAUTH_CLIENT_ID: "client-id" }); vi.stubGlobal("fetch", async () => @@ -66,6 +139,9 @@ describe("private-beta auth and rate limiting", () => { vi.stubGlobal("fetch", async () => Response.json({ error: "bad_verification_code", error_description: "bad" })); await expect(startGitHubDeviceFlow(env)).rejects.toThrow(/bad/); + vi.stubGlobal("fetch", async () => Response.json({}, { status: 502 })); + await expect(startGitHubDeviceFlow(env)).rejects.toThrow(/github_device_flow_start_failed/); + vi.stubGlobal("fetch", async () => Response.json({ device_code: "missing" })); await expect(startGitHubDeviceFlow(env)).rejects.toThrow(/response_invalid/); await expect(startGitHubDeviceFlow(createTestEnv())).rejects.toThrow(/not_configured/); @@ -105,6 +181,22 @@ describe("private-beta auth and rate limiting", () => { }); await expect(pollGitHubDeviceFlow(env, "device-code")).resolves.toMatchObject({ status: "slow_down" }); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.includes("access_token")) return Response.json({ error: "bad_verification_code", error_description: "bad code" }); + return Response.json({}); + }); + await expect(pollGitHubDeviceFlow(env, "device-code")).resolves.toMatchObject({ status: "bad_verification_code", message: "bad code" }); + await expect(env.DB.prepare("select outcome from audit_events where event_type = ? and detail = ?").bind("auth.github_device_poll", "bad_verification_code").first()).resolves.toMatchObject({ outcome: "error" }); + + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.includes("access_token")) return Response.json({ access_token: "gh-token" }); + if (url === "https://api.github.com/user") return Response.json({ login: "scopefree", id: 43 }); + return Response.json({}); + }); + await expect(pollGitHubDeviceFlow(env, "device-code")).resolves.toMatchObject({ login: "scopefree", scopes: [] }); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { const url = input.toString(); if (url.includes("access_token")) return Response.json({}); @@ -137,3 +229,38 @@ function memoryDurableObjectState() { }, }; } + +function rateLimiterNamespace(decision: { status: number; body: Record }) { + return { + idFromName(name: string) { + expect(name).toMatch(/^(normal|expensive):/); + return name; + }, + get() { + return { + async fetch(_url: string, init?: RequestInit) { + expect(init?.method).toBe("POST"); + expect(JSON.parse(String(init?.body ?? "{}"))).toEqual(expect.objectContaining({ key: expect.any(String), limit: expect.any(Number), windowSeconds: expect.any(Number) })); + return Response.json(decision.body, { status: decision.status }); + }, + }; + }, + }; +} + +function fakeContext(env: Env, path: string, headers: Record = {}) { + const responseHeaders = new Headers(); + return { + env, + req: { + path, + header(name: string) { + return headers[name.toLowerCase()] ?? headers[name]; + }, + }, + res: { headers: responseHeaders }, + json(body: unknown, status: number, responseHeadersInit?: HeadersInit) { + return Response.json(body, responseHeadersInit ? { status, headers: responseHeadersInit } : { status }); + }, + } as unknown as import("hono").Context<{ Bindings: Env }> & { res: { headers: Headers } }; +} diff --git a/test/unit/backfill.test.ts b/test/unit/backfill.test.ts index 306241d6cd..2211104849 100644 --- a/test/unit/backfill.test.ts +++ b/test/unit/backfill.test.ts @@ -208,6 +208,52 @@ describe("GitHub backfill", () => { expect(await listContributorRepoStats(env, "jsonbored")).toEqual([]); }); + it("records unknown contributor activity failures and deterministic dominant label ties", async () => { + const env = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); + await seedRegisteredRepo(env); + let calls = 0; + vi.stubGlobal("fetch", async () => { + calls += 1; + if (calls === 1) throw "network vanished"; + return Response.json({ + data: { + r_JSONbored_gittensory_all: { + issueCount: 2, + nodes: [ + { __typename: "PullRequest", updatedAt: "bad-date", labels: { nodes: [{ name: "zeta" }] }, body: "" }, + { __typename: "PullRequest", updatedAt: "2026-05-24T00:00:00Z", labels: { nodes: [{ name: "alpha" }] }, body: "Fixes #1" }, + ], + }, + r_JSONbored_gittensory_merged: { issueCount: 0, nodes: [] }, + r_JSONbored_gittensory_open: { + issueCount: 2, + nodes: [ + { __typename: "PullRequest", updatedAt: "bad-date", labels: { nodes: [{ name: "zeta" }] }, body: "" }, + { __typename: "PullRequest", updatedAt: "2026-05-23T00:00:00Z", labels: { nodes: [{ name: "alpha" }] }, body: "Fixes #1" }, + ], + }, + r_JSONbored_gittensory_issues: { + issueCount: 1, + nodes: [{ __typename: "Issue", updatedAt: "2026-05-22T00:00:00Z", labels: { nodes: [null, { name: "alpha" }, { name: "zeta" }] }, body: "" }], + }, + }, + }); + }); + + const failed = await refreshContributorActivity(env, "jsonbored"); + const recovered = await refreshContributorActivity(env, "jsonbored"); + + expect(failed).toMatchObject({ updatedRepoStats: 0, warnings: ["Contributor activity refresh failed for JSONbored/gittensory: unknown error"] }); + expect(recovered).toMatchObject({ updatedRepoStats: 1, warnings: [] }); + expect(await listContributorRepoStats(env, "jsonbored")).toEqual([ + expect.objectContaining({ + dominantLabels: ["alpha", "zeta"], + lastActivityAt: "bad-date", + unlinkedPullRequests: 1, + }), + ]); + }); + it("carries GraphQL warnings and ignores repos with no contributor activity", async () => { const env = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); await seedRegisteredRepo(env); @@ -1296,6 +1342,133 @@ describe("GitHub backfill", () => { } }); + it("skips missing repositories and preserves segment progress while waiting for rate-limit recovery", async () => { + const sent: Array<{ message: import("../../src/types").JobMessage; options?: QueueSendOptions }> = []; + const env = createTestEnv({ + GITHUB_PUBLIC_TOKEN: "public-token", + JOBS: { + async send(message: import("../../src/types").JobMessage, options?: QueueSendOptions) { + sent.push(options ? { message, options } : { message }); + }, + } as unknown as Queue, + }); + + await expect(backfillRepositorySegment(env, { repoFullName: "missing/repo", segment: "labels" })).resolves.toMatchObject({ + status: "skipped", + fetchedCount: 0, + warnings: ["Repository was not found."], + }); + await expect(backfillOpenPullRequestDetails(env, { repoFullName: "missing/repo" })).resolves.toMatchObject({ + status: "skipped", + processed: 0, + warnings: ["Repository was not found."], + }); + + await seedRegisteredRepo(env); + await upsertRepoSyncSegment(env, { + repoFullName: "JSONbored/gittensory", + segment: "labels", + status: "partial", + sourceKind: "github", + mode: "resume", + fetchedCount: 7, + expectedCount: 20, + pageCount: 2, + nextCursor: "3", + completedAt: "2026-05-24T00:00:00.000Z", + warnings: ["previous partial"], + }); + await recordGitHubRateLimitObservation(env, { + repoFullName: "JSONbored/gittensory", + resource: "rest", + path: "/labels", + statusCode: 200, + remaining: 0, + resetAt: "2999-01-01T00:00:00.000Z", + }); + + const result = await backfillRepositorySegment(env, { repoFullName: "JSONbored/gittensory", segment: "labels", requestedBy: "schedule", mode: "resume", cursor: "4" }); + + expect(result).toMatchObject({ status: "waiting_rate_limit", fetchedCount: 7, expectedCount: 20, nextCursor: "3" }); + expect(sent).toEqual([ + { + message: expect.objectContaining({ type: "backfill-repo-segment", requestedBy: "schedule", repoFullName: "JSONbored/gittensory", segment: "labels", mode: "resume", force: true }), + options: { delaySeconds: 900 }, + }, + ]); + expect(await listRepoSyncSegments(env, "JSONbored/gittensory")).toEqual( + expect.arrayContaining([ + expect.objectContaining({ segment: "labels", status: "waiting_rate_limit", fetchedCount: 7, expectedCount: 20, pageCount: 2, nextCursor: "3" }), + ]), + ); + + const freshWaitEnv = createTestEnv({ + GITHUB_PUBLIC_TOKEN: "public-token", + JOBS: { + async send(message: import("../../src/types").JobMessage, options?: QueueSendOptions) { + sent.push(options ? { message, options } : { message }); + }, + } as unknown as Queue, + }); + await seedRegisteredRepo(freshWaitEnv); + await recordGitHubRateLimitObservation(freshWaitEnv, { + repoFullName: "JSONbored/gittensory", + resource: "rest", + path: "/labels", + statusCode: 200, + remaining: 0, + resetAt: "2999-01-01T00:00:00.000Z", + }); + const freshWait = await backfillRepositorySegment(freshWaitEnv, { repoFullName: "JSONbored/gittensory", segment: "open_pull_requests", mode: "light" }); + expect(freshWait).toMatchObject({ status: "waiting_rate_limit", fetchedCount: 0 }); + expect(await listRepoSyncSegments(freshWaitEnv, "JSONbored/gittensory")).toEqual( + expect.arrayContaining([expect.objectContaining({ segment: "open_pull_requests", status: "waiting_rate_limit", fetchedCount: 0, pageCount: 0 })]), + ); + }); + + it("uses cached totals and unauthenticated segment fallback when no GitHub token is available", async () => { + const env = createTestEnv(); + await seedRegisteredRepo(env); + await env.DB.prepare( + `insert into repo_github_totals_snapshots ( + id, repo_full_name, open_issues_total, open_pull_requests_total, merged_pull_requests_total, + closed_unmerged_pull_requests_total, labels_total, source_kind, fetched_at, payload_json + ) values ('totals-1', 'JSONbored/gittensory', 0, 0, 0, 0, 0, 'github', '2026-05-25T00:00:00.000Z', '{}')`, + ).run(); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + expect(url).toContain("/labels?"); + return Response.json([]); + }); + + const result = await backfillRepositorySegment(env, { repoFullName: "JSONbored/gittensory", segment: "labels", mode: "light" }); + + expect(result).toMatchObject({ status: "complete", fetchedCount: 0, expectedCount: 0 }); + }); + + it("reconciles stale open issue rows after complete open-data crawls", async () => { + const env = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); + await seedRegisteredRepo(env); + await upsertIssueFromGitHub( + env, + "JSONbored/gittensory", + { number: 99, title: "Previously open", state: "open", user: { login: "reporter" }, labels: [], body: "" }, + { seenOpenAt: "2026-05-20T00:00:00.000Z" }, + ); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url === "https://api.github.com/graphql") return githubTotalsResponse({ openIssues: 0, openPullRequests: 0, mergedPullRequests: 0, closedPullRequests: 0, labels: 0 }); + if (url.includes("/issues?")) return Response.json([]); + return Response.json([]); + }); + + const result = await backfillRepositorySegment(env, { repoFullName: "JSONbored/gittensory", segment: "open_issues", mode: "full", force: true }); + + expect(result).toMatchObject({ status: "complete", fetchedCount: 0 }); + expect(result.warnings.join(" ")).toMatch(/Marked 1 stale open issue row/); + expect(await listIssues(env, "JSONbored/gittensory")).toEqual([expect.objectContaining({ number: 99, state: "closed" })]); + }); + it("backs off PR detail hydration under low REST rate limit", async () => { const sent: import("../../src/types").JobMessage[] = []; const env = createTestEnv({ @@ -1324,6 +1497,159 @@ describe("GitHub backfill", () => { expect.arrayContaining([expect.objectContaining({ segment: "pull_request_files", status: "waiting_rate_limit" })]), ); }); + + it("defaults PR detail retry cursors when rate-limit recovery starts without prior state", async () => { + const sent: Array<{ message: import("../../src/types").JobMessage; options?: QueueSendOptions }> = []; + const env = createTestEnv({ + GITHUB_PUBLIC_TOKEN: "public-token", + JOBS: { + async send(message: import("../../src/types").JobMessage, options?: QueueSendOptions) { + sent.push(options ? { message, options } : { message }); + }, + } as unknown as Queue, + }); + await seedRegisteredRepo(env); + await recordGitHubRateLimitObservation(env, { + repoFullName: "JSONbored/gittensory", + resource: "rest", + path: "/pulls", + statusCode: 200, + remaining: 0, + resetAt: "2999-01-01T00:00:00.000Z", + }); + + const result = await backfillOpenPullRequestDetails(env, { repoFullName: "JSONbored/gittensory", mode: "light" }); + + expect(result).toMatchObject({ status: "waiting_rate_limit", processed: 0 }); + expect(sent).toEqual([{ message: expect.objectContaining({ type: "backfill-pr-details", repoFullName: "JSONbored/gittensory", mode: "light", cursor: 0 }), options: { delaySeconds: 900 } }]); + expect(await listRepoSyncSegments(env, "JSONbored/gittensory")).toEqual( + expect.arrayContaining([expect.objectContaining({ segment: "pull_request_files", status: "waiting_rate_limit", fetchedCount: 0, pageCount: 0 })]), + ); + }); + + it("uses installation source for queued segment jobs and sparse live installation fallback metadata", async () => { + const sent: import("../../src/types").JobMessage[] = []; + const env = createTestEnv({ + GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem(), + GITHUB_PUBLIC_TOKEN: "public-token", + JOBS: { + async send(message: import("../../src/types").JobMessage) { + sent.push(message); + }, + } as unknown as Queue, + }); + await seedRegisteredRepo(env); + await upsertInstallation(env, { + installation: { + id: 123, + account: { login: "JSONbored", id: 1, type: "User" }, + repository_selection: "selected", + permissions: { metadata: "read", pull_requests: "read", issues: "write" }, + events: ["issues", "pull_request", "repository"], + }, + }); + await upsertRepositoryFromGitHub( + env, + { name: "gittensory", full_name: "JSONbored/gittensory", private: true, default_branch: "main", owner: { login: "JSONbored" } }, + 123, + ); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.endsWith("/app/installations/123")) return Response.json({ id: 123 }); + if (url === "https://api.github.com/graphql") { + return Response.json({ + data: { + rateLimit: {}, + repository: { + issues: {}, + openPullRequests: {}, + mergedPullRequests: {}, + closedPullRequests: {}, + labels: {}, + }, + }, + }); + } + if (url.includes("/labels?")) return Response.json([]); + return Response.json([]); + }); + + const queued = await enqueueRepositoryOpenDataBackfill(env, { repoFullName: "JSONbored/gittensory", requestedBy: "api", mode: "resume" }); + const segment = await backfillRepositorySegment(env, { repoFullName: "JSONbored/gittensory", segment: "labels", mode: "resume", force: true }); + const details = await backfillOpenPullRequestDetails(env, { repoFullName: "JSONbored/gittensory", mode: "resume" }); + const health = await refreshInstallationHealth(env); + + expect(queued).toMatchObject({ status: "queued", totals: { sourceKind: "installation", openIssuesTotal: 0, openPullRequestsTotal: 0, labelsTotal: 0 } }); + expect(segment).toMatchObject({ status: "complete", fetchedCount: 0, expectedCount: 0 }); + expect(details).toMatchObject({ status: "complete", processed: 0 }); + expect(health.installations).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + installationId: 123, + accountLogin: "JSONbored", + repositorySelection: "selected", + status: "needs_attention", + permissions: {}, + events: [], + missingPermissions: ["metadata", "pull_requests", "issues"], + missingEvents: ["issues", "pull_request", "repository"], + }), + ]), + ); + expect(await listRepoSyncSegments(env, "JSONbored/gittensory")).toEqual( + expect.arrayContaining([expect.objectContaining({ segment: "labels", sourceKind: "installation" })]), + ); + expect(sent).toEqual(expect.arrayContaining([expect.objectContaining({ type: "backfill-repo-segment", segment: "labels" })])); + }); + + it("records label rate limits, in-loop page caps, and expired rate observations", async () => { + const env = createTestEnv({ GITHUB_PUBLIC_TOKEN: "public-token" }); + await seedRegisteredRepo(env); + await recordGitHubRateLimitObservation(env, { + repoFullName: "JSONbored/gittensory", + resource: "rest", + path: "/old", + statusCode: 200, + remaining: 1, + resetAt: "2020-01-01T00:00:00.000Z", + }); + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.endsWith("/repos/JSONbored/gittensory")) { + return Response.json({ name: "gittensory", full_name: "JSONbored/gittensory", private: false, default_branch: "main", owner: { login: "JSONbored" } }); + } + if (url.includes("/labels?")) { + return new Response("label secondary limit", { + status: 403, + headers: { + "x-ratelimit-limit": "5000", + "x-ratelimit-remaining": "0", + "x-ratelimit-reset": "1780000000", + }, + }); + } + if (url.includes("/issues?") && new URL(url).searchParams.get("page") === "1") { + return Response.json( + Array.from({ length: 100 }, (_, index) => ({ number: index + 1, title: `Issue ${index + 1}`, state: "open", user: { login: "reporter" }, labels: [], body: "" })), + { headers: { link: '; rel="next"', "x-ratelimit-remaining": "not-a-number" } }, + ); + } + if (url.includes("/pulls?")) return Response.json([]); + return Response.json([]); + }); + + const result = await backfillRegisteredRepositories(env, { force: true, limits: { issues: 100, pullRequests: 0, recentMergedPullRequests: 0, pullRequestDetails: 0 } }); + + expect(result.repos[0]).toMatchObject({ status: "rate_limited", dataQuality: { capped: true, rateLimited: true, partial: true } }); + expect(result.repos[0]?.warnings.join("\n")).toMatch(/Label sync failed|local cap/); + expect(await listRepoSyncSegments(env, "JSONbored/gittensory")).toEqual( + expect.arrayContaining([ + expect.objectContaining({ segment: "labels", status: "rate_limited", rateLimitResetAt: "2026-05-28T20:26:40.000Z" }), + expect.objectContaining({ segment: "open_issues", status: "capped", nextCursor: "2" }), + ]), + ); + }); }); async function seedRegisteredRepo(env: Env) { diff --git a/test/unit/db-parsers.test.ts b/test/unit/db-parsers.test.ts new file mode 100644 index 0000000000..97b721a042 --- /dev/null +++ b/test/unit/db-parsers.test.ts @@ -0,0 +1,117 @@ +import { describe, expect, it } from "vitest"; +import { + getLatestScorePreview, + getLatestScoringModelSnapshot, + listPullRequestDetailSyncStates, + listRepoSyncSegments, + listRepoSyncStates, +} from "../../src/db/repositories"; +import { createTestEnv } from "../helpers/d1"; + +describe("database row parser hardening", () => { + it("normalizes enum-like database values from stored sync, scoring, and preview rows", async () => { + const env = createTestEnv(); + + for (const [repo, status, source] of [ + ["owner/skipped", "skipped", "installation"], + ["owner/capped", "capped", "test"], + ["owner/rate", "rate_limited", "unknown-source"], + ["owner/stale", "stale", "github"], + ["owner/bad", "not-a-real-status", "bad-source"], + ]) { + await env.DB.prepare( + `insert into repo_sync_state ( + repo_full_name, status, source_kind, open_issues_count, open_pull_requests_count, + recent_merged_pull_requests_count, warnings_json + ) values (?, ?, ?, 0, 0, 0, '[]')`, + ) + .bind(repo, status, source) + .run(); + } + + for (const [segment, status, mode] of [ + ["recent_merged_pull_requests", "sampled", "full"], + ["pull_request_files", "waiting_rate_limit", "resume"], + ["pull_request_reviews", "error", "bad-mode"], + ["check_summaries", "not_modified", "light"], + ["bad-segment", "bad-status", "bad-mode"], + ]) { + await env.DB.prepare( + `insert into repo_sync_segments ( + id, repo_full_name, segment, status, source_kind, mode, fetched_count, page_count, warnings_json + ) values (?, 'owner/repo', ?, ?, 'github', ?, 0, 0, '[]')`, + ) + .bind(`segment-${segment}-${status}`, segment, status, mode) + .run(); + } + + for (const [pullNumber, status] of [ + [1, "waiting_rate_limit"], + [2, "error"], + [3, "bad-status"], + ] as const) { + await env.DB.prepare( + `insert into pull_request_detail_sync_state ( + id, repo_full_name, pull_number, status + ) values (?, 'owner/repo', ?, ?)`, + ) + .bind(`detail-${pullNumber}`, pullNumber, status) + .run(); + } + + await env.DB.prepare( + `insert into scoring_model_snapshots ( + id, source_kind, source_url, fetched_at, active_model, constants_json, + programming_languages_json, warnings_json, payload_json + ) values ('score-model', 'bad-source', 'fixture://model', '2026-05-25T00:00:00.000Z', 'bad-model', '{}', '{}', '[]', '{}')`, + ).run(); + + for (const [targetType, generatedAt] of [ + ["pull_request", "2026-05-25T00:00:01.000Z"], + ["local_diff", "2026-05-25T00:00:02.000Z"], + ["variant", "2026-05-25T00:00:03.000Z"], + ["bad-target", "2026-05-25T00:00:04.000Z"], + ]) { + await env.DB.prepare( + `insert into score_previews ( + id, scoring_model_snapshot_id, repo_full_name, target_type, target_key, + input_json, result_json, generated_at + ) values (?, 'score-model', 'owner/repo', ?, ?, '{}', '{}', ?)`, + ) + .bind(`preview-${targetType}`, targetType, `target-${targetType}`, generatedAt) + .run(); + } + + expect(await listRepoSyncStates(env)).toEqual( + expect.arrayContaining([ + expect.objectContaining({ repoFullName: "owner/skipped", status: "skipped", sourceKind: "installation" }), + expect.objectContaining({ repoFullName: "owner/capped", status: "capped", sourceKind: "test" }), + expect.objectContaining({ repoFullName: "owner/rate", status: "rate_limited", sourceKind: "github" }), + expect.objectContaining({ repoFullName: "owner/stale", status: "stale" }), + expect.objectContaining({ repoFullName: "owner/bad", status: "never_synced", sourceKind: "github" }), + ]), + ); + expect(await listRepoSyncSegments(env, "owner/repo")).toEqual( + expect.arrayContaining([ + expect.objectContaining({ segment: "recent_merged_pull_requests", status: "sampled", mode: "full" }), + expect.objectContaining({ segment: "pull_request_files", status: "waiting_rate_limit", mode: "resume" }), + expect.objectContaining({ segment: "pull_request_reviews", status: "error", mode: "light" }), + expect.objectContaining({ segment: "check_summaries", status: "not_modified" }), + expect.objectContaining({ segment: "metadata", status: "never_synced", mode: "light" }), + ]), + ); + expect(await listPullRequestDetailSyncStates(env, "owner/repo")).toEqual( + expect.arrayContaining([ + expect.objectContaining({ pullNumber: 1, status: "waiting_rate_limit" }), + expect.objectContaining({ pullNumber: 2, status: "error" }), + expect.objectContaining({ pullNumber: 3, status: "never_synced" }), + ]), + ); + expect(await getLatestScoringModelSnapshot(env)).toMatchObject({ sourceKind: "fallback", activeModel: "unknown" }); + await expect(getLatestScorePreview(env, "owner/repo", "target-pull_request")).resolves.toMatchObject({ targetType: "pull_request" }); + await expect(getLatestScorePreview(env, "owner/repo", "target-local_diff")).resolves.toMatchObject({ targetType: "local_diff" }); + await expect(getLatestScorePreview(env, "owner/repo", "target-variant")).resolves.toMatchObject({ targetType: "variant" }); + await expect(getLatestScorePreview(env, "owner/repo", "target-bad-target")).resolves.toMatchObject({ targetType: "planned_pr" }); + await expect(getLatestScorePreview(env, "owner/repo", "missing")).resolves.toBeNull(); + }); +}); diff --git a/test/unit/gittensor-api.test.ts b/test/unit/gittensor-api.test.ts index 376f5bc8a1..d4cae17d26 100644 --- a/test/unit/gittensor-api.test.ts +++ b/test/unit/gittensor-api.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { contributorRepoStatsFromGittensor, fetchGittensorContributorSnapshot } from "../../src/gittensor/api"; +import { contributorRepoStatsFromGittensor, fetchGittensorContributorSnapshot, fetchOfficialGittensorMiner } from "../../src/gittensor/api"; describe("Gittensor API contributor snapshots", () => { afterEach(() => { @@ -182,4 +182,83 @@ describe("Gittensor API contributor snapshots", () => { vi.stubGlobal("fetch", async () => Response.json([{ githubUsername: "someone-else", githubId: "999" }])); await expect(fetchGittensorContributorSnapshot("jsonbored")).resolves.toBeNull(); }); + + it("classifies official miner detection without a complete identity and handles non-Error failures", async () => { + vi.stubGlobal("fetch", async () => Response.json([{ githubUsername: "jsonbored" }, { githubId: "49853598" }])); + await expect(fetchOfficialGittensorMiner("jsonbored")).resolves.toEqual({ status: "not_found" }); + await expect(fetchOfficialGittensorMiner("49853598")).resolves.toEqual({ status: "not_found" }); + + vi.stubGlobal("fetch", async () => { + throw "network down"; + }); + await expect(fetchOfficialGittensorMiner("jsonbored")).resolves.toEqual({ status: "unavailable", error: "unknown Gittensor API error" }); + }); + + it("maps optional Gittensor detail fields when present", async () => { + vi.stubGlobal("fetch", async (input: RequestInfo | URL) => { + const url = input.toString(); + if (url.endsWith("/miners")) { + return Response.json([ + { + githubUsername: "jsonbored", + githubId: "49853598", + failedReason: null, + issueDiscoveryScore: "3", + issueTokenScore: "4", + isIssueEligible: true, + issueEligibleRepoCount: "2", + alphaPerDay: "1.25", + taoPerDay: "0.5", + usdPerDay: "100", + }, + ]); + } + if (url.endsWith("/miners/49853598")) { + return Response.json({ + uid: 29, + hotkey: "hotkey", + updatedAt: "2026-05-25T00:00:00.000Z", + repositories: [ + { + repositoryFullName: "owner/issues", + totalPrs: 0, + totalOpenIssues: 1, + totalClosedIssues: 1, + totalSolvedIssues: 1, + totalValidSolvedIssues: 1, + isIssueEligible: true, + issueCredibility: "0.9", + baseTotalScore: "12.5", + }, + ], + }); + } + if (url.endsWith("/miners/49853598/prs")) { + return Response.json([{ repository: "owner/repo", pullRequestNumber: 9, pullRequestTitle: undefined, prState: undefined, mergedAt: null, label: "bug", tokenScore: "7" }]); + } + if (url.endsWith("/miners/49853598/issues")) { + return Response.json({ issues: [{ labels: undefined }, { labels: [{ name: "bug" }] }] }); + } + return Response.json({}); + }); + + const snapshot = await fetchGittensorContributorSnapshot("jsonbored"); + + expect(snapshot).toMatchObject({ + uid: 29, + hotkey: "hotkey", + isIssueEligible: true, + issueEligibleRepoCount: 2, + alphaPerDay: 1.25, + taoPerDay: 0.5, + usdPerDay: 100, + updatedAt: "2026-05-25T00:00:00.000Z", + repositories: [expect.objectContaining({ repoFullName: "owner/issues", openIssues: 1, closedIssues: 1, validSolvedIssues: 1, issueCredibility: 0.9 })], + pullRequests: [expect.objectContaining({ repoFullName: "owner/repo", number: 9, title: "", state: "UNKNOWN", label: "bug", tokenScore: 7 })], + issueLabels: ["bug"], + }); + expect(contributorRepoStatsFromGittensor(snapshot)).toEqual( + expect.arrayContaining([expect.objectContaining({ login: "jsonbored", repoFullName: "owner/issues", issues: 2, lastActivityAt: "2026-05-25T00:00:00.000Z" })]), + ); + }); }); diff --git a/test/unit/json-utils.test.ts b/test/unit/json-utils.test.ts new file mode 100644 index 0000000000..0a72ce1981 --- /dev/null +++ b/test/unit/json-utils.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from "vitest"; +import { errorMessage, jsonString, normalizeRepoFullName, parseJson, repoParts, strippedErrorMessage } from "../../src/utils/json"; + +describe("JSON and string utility helpers", () => { + it("keeps JSON parsing and stringification fallbacks explicit", () => { + expect(parseJson<{ ok: boolean }>('{"ok":true}', { ok: false })).toEqual({ ok: true }); + expect(parseJson("{bad-json", { ok: false })).toEqual({ ok: false }); + expect(parseJson(null, { ok: false })).toEqual({ ok: false }); + expect(jsonString(undefined)).toBe("null"); + expect(jsonString({ ok: true })).toBe('{"ok":true}'); + }); + + it("normalizes repo names and error messages without leaking arbitrary thrown values", () => { + expect(normalizeRepoFullName(" JSONbored/gittensory ")).toBe("JSONbored/gittensory"); + expect(repoParts("JSONbored/gittensory")).toEqual({ owner: "JSONbored", name: "gittensory" }); + expect(repoParts("")).toEqual({ owner: "", name: "" }); + expect(repoParts("owner/nested/name")).toEqual({ owner: "owner", name: "nested/name" }); + + expect(errorMessage(new Error("specific failure"))).toBe("specific failure"); + expect(errorMessage("string failure", "fallback failure")).toBe("fallback failure"); + expect(strippedErrorMessage(new Error("Error: wrapped failure"), "fallback failure")).toBe("wrapped failure"); + expect(strippedErrorMessage("string failure", "fallback failure")).toBe("fallback failure"); + }); +}); diff --git a/test/unit/local-branch.test.ts b/test/unit/local-branch.test.ts index 7674b4f3b3..4ba6a7b9bd 100644 --- a/test/unit/local-branch.test.ts +++ b/test/unit/local-branch.test.ts @@ -140,6 +140,69 @@ describe("local branch analysis", () => { expect(analysis.recommendedRerunCondition).toMatch(/git fetch origin/i); }); + it("distinguishes fresh, merge-base-stale, and large unverified base states", () => { + const fresh = buildLocalBranchAnalysis({ + input: { + login: "oktofeesh1", + repoFullName: repo.fullName, + baseRef: "origin/main", + baseSha: "base", + remoteTrackingSha: "base", + branchName: "docs-polish", + body: "Fixes #7", + changedFiles: [{ path: "README.md", additions: 1, deletions: 0, status: "modified" }], + }, + repo, + issues: [{ repoFullName: repo.fullName, number: 7, title: "Docs polish", state: "open", labels: [], linkedPrs: [] }], + pullRequests: [], + profile, + outcomeHistory, + scoringSnapshot, + scoringProfile, + }); + expect(fresh.baseFreshness.status).toBe("fresh"); + expect(fresh.recommendedRerunCondition).toBe("Rerun after any branch, base, or PR state changes before opening/submitting."); + + const mergeBaseStale = buildLocalBranchAnalysis({ + input: { + login: "oktofeesh1", + repoFullName: repo.fullName, + baseRef: "origin/main", + baseSha: "base", + mergeBaseSha: "older-base", + remoteTrackingSha: "base", + changedFiles: [{ path: "src/cache.ts", additions: 2, deletions: 1, status: "modified" }], + }, + repo, + issues: [], + pullRequests: [], + profile, + outcomeHistory, + scoringSnapshot, + scoringProfile, + }); + expect(mergeBaseStale.baseFreshness.status).toBe("stale"); + expect(mergeBaseStale.baseFreshness.warnings.join(" ")).toMatch(/Merge-base does not match/i); + + const largeUnverified = buildLocalBranchAnalysis({ + input: { + login: "oktofeesh1", + repoFullName: repo.fullName, + changedFiles: Array.from({ length: 50 }, (_, index) => ({ path: `src/file-${index}.ts`, additions: Number.NaN, deletions: undefined, status: "modified" as const })), + }, + repo, + issues: [], + pullRequests: [], + profile, + outcomeHistory, + scoringSnapshot, + scoringProfile, + }); + expect(largeUnverified.baseFreshness.status).toBe("possibly_stale"); + expect(largeUnverified.localFindings).toEqual(expect.arrayContaining([expect.objectContaining({ code: "stale_base_ref" })])); + expect(largeUnverified.preflight.localDiff.changedLineCount).toBe(0); + }); + it("keeps unregistered gittensory work in product/maintainer context instead of miner target context", () => { const analysis = buildLocalBranchAnalysis({ input: { @@ -164,6 +227,39 @@ describe("local branch analysis", () => { expect(analysis.rewardRisk.scoreBlockers).toEqual(expect.arrayContaining(["Maintainer-lane work is not normal outside-contributor reward evidence."])); }); + it("separates account maturity blockers from clean branch metadata when no pending scenario is supplied", () => { + const pressuredHistory: ContributorOutcomeHistory = { + ...outcomeHistory, + totals: { ...outcomeHistory.totals, openPullRequests: 4, credibility: 0.2 }, + repoOutcomes: [{ ...outcomeHistory.repoOutcomes[0]!, openPullRequests: 4, credibility: 0.2, closedPullRequestRate: 0 }], + }; + + const analysis = buildLocalBranchAnalysis({ + input: { + login: "oktofeesh1", + repoFullName: repo.fullName, + body: "Fixes #7", + changedFiles: [ + { path: "src/cache.ts", additions: 12, deletions: 1, status: "modified" }, + { path: "src/cache.test.ts", additions: 20, deletions: 0, status: "added" }, + ], + validation: [{ command: "npm test -- cache", status: "passed" }], + }, + repo, + issues: [{ repoFullName: repo.fullName, number: 7, title: "Cache edge", state: "open", labels: ["bug"], linkedPrs: [] }], + pullRequests: [], + profile, + outcomeHistory: pressuredHistory, + scoringSnapshot, + scoringProfile, + }); + + expect(analysis.branchQualityBlockers).toEqual([]); + expect(analysis.accountStateBlockers.join(" ")).toMatch(/Open PR count|Credibility/i); + expect(analysis.recommendedRerunCondition).toBe("Rerun after account/queue maturity blockers clear."); + expect(analysis.nextActions[0]?.actionKind).not.toBe("land_existing_prs"); + }); + it("handles sparse metadata, failed validation, binary changes, and commit-title fallback", () => { const analysis = buildLocalBranchAnalysis({ input: { diff --git a/test/unit/queue.test.ts b/test/unit/queue.test.ts index 90f32f6d60..8c46b42cb6 100644 --- a/test/unit/queue.test.ts +++ b/test/unit/queue.test.ts @@ -206,6 +206,46 @@ describe("queue processors", () => { ); }); + it("marks fidelity repair completed when only signal refreshes are needed", async () => { + const sent: Array<{ message: import("../../src/types").JobMessage; options?: QueueSendOptions }> = []; + const env = createTestEnv({ + JOBS: { + async send(message: import("../../src/types").JobMessage, options?: QueueSendOptions) { + sent.push(options ? { message, options } : { message }); + }, + } as unknown as Queue, + }); + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { + "JSONbored/gittensory": { emission_share: 0.01, issue_discovery_share: 0, label_multipliers: {}, trusted_label_pipeline: false }, + "we-promise/sure": { emission_share: 0.02, issue_discovery_share: 0, label_multipliers: {}, trusted_label_pipeline: false }, + }, + { kind: "raw-github", url: "fixture://registry" }, + "2026-05-25T00:00:00.000Z", + ), + ); + for (const repoFullName of ["JSONbored/gittensory", "we-promise/sure"]) { + await upsertRepoSyncSegment(env, completeSegment(repoFullName, "labels")); + await upsertRepoSyncSegment(env, completeSegment(repoFullName, "open_issues")); + await upsertRepoSyncSegment(env, completeSegment(repoFullName, "open_pull_requests")); + } + + await processJob(env, { type: "repair-data-fidelity", requestedBy: "api" }); + + expect(sent).toEqual([ + { message: expect.objectContaining({ type: "generate-signal-snapshots", repoFullName: "JSONbored/gittensory" }) }, + { message: expect.objectContaining({ type: "generate-signal-snapshots", repoFullName: "we-promise/sure" }), options: { delaySeconds: 70 } }, + ]); + const audit = await env.DB.prepare("select outcome, metadata_json from audit_events where event_type = ?").bind("sync.fidelity_repair").first<{ + outcome: string; + metadata_json: string; + }>(); + expect(audit?.outcome).toBe("completed"); + expect(JSON.parse(audit?.metadata_json ?? "{}")).toMatchObject({ repairCount: 0, signalRefreshCount: 2 }); + }); + it("fans out signal snapshot generation instead of doing all repo work inline", async () => { const sent: import("../../src/types").JobMessage[] = []; const env = createTestEnv({ @@ -695,6 +735,150 @@ describe("queue processors", () => { expect(skipped.results.map((event) => event.detail)).toEqual(expect.arrayContaining(["bot_author", "maintainer_author"])); }); + it("records webhook processing when public comment publishing fails after miner confirmation", async () => { + const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { "JSONbored/gittensory": { emission_share: 0.01, issue_discovery_share: 0 } }, + { kind: "raw-github", url: "https://example.test" }, + "2026-05-23T00:00:00.000Z", + ), + ); + await upsertRepositorySettings(env, { + repoFullName: "JSONbored/gittensory", + commentMode: "detected_contributors_only", + publicSurface: "comment_only", + autoLabelEnabled: true, + createMissingLabel: true, + checkRunMode: "off", + }); + const errorSpy = vi.spyOn(console, "error").mockImplementation(() => undefined); + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + if (url === "https://api.gittensor.io/miners") return Response.json([{ githubUsername: "oktofeesh1", githubId: "123", totalPrs: 2, totalMergedPrs: 2, isEligible: true, credibility: 1 }]); + if (url === "https://api.gittensor.io/miners/123") return Response.json({ repositories: [] }); + if (url === "https://api.gittensor.io/miners/123/prs") return Response.json([]); + if (url === "https://mirror.gittensor.io/api/v1/miners/123/issues") return Response.json({ issues: [] }); + if (url.endsWith("/users/oktofeesh1")) return Response.json({ login: "oktofeesh1" }); + if (url.includes("/users/oktofeesh1/repos")) return Response.json([]); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/30/comments") && method === "GET") return Response.json([]); + if (url.includes("/issues/30/comments") && method === "POST") return new Response("comment failed", { status: 503 }); + return new Response("not found", { status: 404 }); + }); + + await expect( + processJob(env, { + type: "github-webhook", + deliveryId: "comment-failure", + eventName: "pull_request", + payload: { + action: "opened", + installation: { id: 123, account: { login: "JSONbored", id: 1, type: "User" } }, + repository: { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, + pull_request: { number: 30, title: "Miner work", state: "open", user: { login: "oktofeesh1" }, labels: [], body: "Fixes #1" }, + }, + }), + ).resolves.toBeUndefined(); + + expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining("pr_public_surface_failed")); + const webhook = await env.DB.prepare("select status from webhook_events where delivery_id = ?").bind("comment-failure").first<{ status: string }>(); + expect(webhook?.status).toBe("processed"); + const published = await env.DB.prepare("select event_type from audit_events where event_type = ?").bind("github_app.pr_public_surface_published").all(); + expect(published.results).toEqual([]); + errorSpy.mockRestore(); + }); + + it("keeps repository and PR webhook processing internal when installation context is absent", async () => { + const env = createTestEnv(); + await processJob(env, { + type: "github-webhook", + deliveryId: "repositories-without-installation", + eventName: "repository", + payload: { + action: "created", + repositories: [{ name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }], + }, + }); + await processJob(env, { + type: "github-webhook", + deliveryId: "pr-without-installation", + eventName: "pull_request", + payload: { + action: "opened", + repository: { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, + pull_request: { number: 44, title: "Internal-only PR", state: "open", user: { login: "oktofeesh1" }, labels: [] }, + }, + }); + + expect(await listPullRequests(env, "JSONbored/gittensory")).toEqual(expect.arrayContaining([expect.objectContaining({ number: 44, body: null })])); + const events = await env.DB.prepare("select delivery_id, status from webhook_events where delivery_id in (?, ?) order by delivery_id") + .bind("pr-without-installation", "repositories-without-installation") + .all<{ delivery_id: string; status: string }>(); + expect(events.results).toEqual([ + { delivery_id: "pr-without-installation", status: "processed" }, + { delivery_id: "repositories-without-installation", status: "processed" }, + ]); + }); + + it("supports label-only public surfaces for confirmed miners", async () => { + const env = createTestEnv({ GITHUB_APP_PRIVATE_KEY: await generatePrivateKeyPem() }); + await persistRegistrySnapshot( + env, + normalizeRegistryPayload( + { "JSONbored/gittensory": { emission_share: 0.01, issue_discovery_share: 0 } }, + { kind: "raw-github", url: "https://example.test" }, + "2026-05-23T00:00:00.000Z", + ), + ); + await upsertRepositorySettings(env, { + repoFullName: "JSONbored/gittensory", + commentMode: "detected_contributors_only", + publicSurface: "label_only", + autoLabelEnabled: true, + createMissingLabel: false, + checkRunMode: "off", + }); + const calls = { comments: 0, labels: 0 }; + vi.stubGlobal("fetch", async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input.toString(); + const method = init?.method ?? "GET"; + if (url === "https://api.gittensor.io/miners") return Response.json([{ githubUsername: "oktofeesh1", githubId: "123", totalPrs: 1, totalMergedPrs: 1, isEligible: true, credibility: 1 }]); + if (url === "https://api.gittensor.io/miners/123") return Response.json({ repositories: [] }); + if (url === "https://api.gittensor.io/miners/123/prs") return Response.json([]); + if (url === "https://mirror.gittensor.io/api/v1/miners/123/issues") return Response.json({ issues: [] }); + if (url.endsWith("/users/oktofeesh1")) return Response.json({ login: "oktofeesh1" }); + if (url.includes("/users/oktofeesh1/repos")) return Response.json([]); + if (url.includes("/access_tokens")) return Response.json({ token: "installation-token" }); + if (url.includes("/issues/45/comments")) { + calls.comments += 1; + return Response.json([]); + } + if (url.includes("/issues/45/labels") && method === "GET") return Response.json([]); + if (url.includes("/issues/45/labels") && method === "POST") { + calls.labels += 1; + return Response.json([{ name: "gittensor" }]); + } + return new Response("not found", { status: 404 }); + }); + + await processJob(env, { + type: "github-webhook", + deliveryId: "label-only", + eventName: "pull_request", + payload: { + action: "opened", + installation: { id: 123, account: { login: "JSONbored", id: 1, type: "User" } }, + repository: { name: "gittensory", full_name: "JSONbored/gittensory", private: true, owner: { login: "JSONbored" } }, + pull_request: { number: 45, title: "Miner label-only work", state: "open", user: { login: "oktofeesh1" }, labels: [], body: "Fixes #1" }, + }, + }); + + expect(calls).toEqual({ comments: 0, labels: 1 }); + }); + it("fails closed when official miner detection is unavailable", async () => { const env = createTestEnv(); const payload = { diff --git a/test/unit/rules.test.ts b/test/unit/rules.test.ts index e4914441c7..9912059889 100644 --- a/test/unit/rules.test.ts +++ b/test/unit/rules.test.ts @@ -192,4 +192,33 @@ describe("advisory rules", () => { expect(issueAdvisory.findings.map((finding) => finding.code)).toEqual(expect.arrayContaining(["issue_not_open", "issue_discovery_not_configured"])); expect(formatCheckRunOutput({ ...uncachedPr, findings: [] }).text).toContain("No detailed findings are published"); }); + + it("separates issue-discovery-only issues from clean split-lane issue advisories", () => { + const issue: IssueRecord = { + repoFullName: repo.fullName, + number: 33, + title: "Actionable issue", + state: "open", + authorLogin: "reporter", + labels: [], + linkedPrs: [], + }; + const issueDiscoveryRepo: RepositoryRecord = { + ...repo, + registryConfig: { ...repo.registryConfig!, issueDiscoveryShare: 1 }, + }; + const splitRepo: RepositoryRecord = { + ...repo, + registryConfig: { ...repo.registryConfig!, issueDiscoveryShare: 0.5 }, + }; + + const issueOnly = buildIssueAdvisory(issueDiscoveryRepo, issue); + const cleanSplit = buildIssueAdvisory(splitRepo, issue); + + expect(issueOnly.findings.map((finding) => finding.code)).toContain("direct_pr_pool_disabled"); + expect(issueOnly.findings.map((finding) => finding.code)).not.toContain("issue_discovery_not_configured"); + expect(cleanSplit.findings).toEqual([]); + expect(cleanSplit.summary).toBe("Issue advisory generated."); + expect(cleanSplit.conclusion).toBe("success"); + }); }); diff --git a/test/unit/signals-coverage.test.ts b/test/unit/signals-coverage.test.ts new file mode 100644 index 0000000000..88e0706c1b --- /dev/null +++ b/test/unit/signals-coverage.test.ts @@ -0,0 +1,671 @@ +import { describe, expect, it } from "vitest"; +import { + buildBountyAdvisory, + buildCollisionReport, + buildConfigQuality, + buildContributorFit, + buildContributorOpportunities, + buildContributorOutcomeHistory, + buildContributorPatternReport, + buildContributorProfile, + buildContributorScoringProfile, + buildContributorStrategy, + buildBurdenForecast, + buildIssueQualityReport, + buildLabelAudit, + buildLaneAdvice, + buildLocalDiffPreflightResult, + buildMaintainerPacket, + buildPreflightResult, + buildPublicPrIntelligenceComment, + buildQueueHealth, + buildRoleContext, + detectGittensorContributor, + shouldPublishPrIntelligenceComment, +} from "../../src/signals/engine"; +import { + buildContributorRewardRiskStrategy, + buildMaintainerNoiseReport, + buildPullRequestReviewability, + buildRepoRewardRisk, +} from "../../src/signals/reward-risk"; +import type { + ContributorRepoStatRecord, + CheckSummaryRecord, + IssueRecord, + PullRequestFileRecord, + PullRequestRecord, + RepoLabelRecord, + RegistryRepoConfig, + RepositoryRecord, + RepositorySettings, + ScoringModelSnapshotRecord, +} from "../../src/types"; + +describe("signal coverage edge cases", () => { + it("branches lane, label, config, and public comment publishing decisions", () => { + const directRepo = repo("owner/direct", { issueDiscoveryShare: 0, labelMultipliers: { bug: 1.2 }, trustedLabelPipeline: true }); + const issueRepo = repo("owner/issues", { issueDiscoveryShare: 1 }); + const splitRepo = repo("owner/split", { issueDiscoveryShare: 0.4 }); + const inactiveRepo = repo("owner/inactive", { emissionShare: 0 }); + const missingRepo = { ...directRepo, isRegistered: false, registryConfig: null }; + const emptyTrusted = repo("owner/empty-trusted", { labelMultipliers: {}, trustedLabelPipeline: true }); + const settings = repoSettings(directRepo.fullName); + + expect(buildLaneAdvice(null, "missing/repo").lane).toBe("unknown"); + expect(buildLaneAdvice(missingRepo, missingRepo.fullName).lane).toBe("unknown"); + expect(buildLaneAdvice(inactiveRepo, inactiveRepo.fullName).lane).toBe("inactive"); + expect(buildLaneAdvice(directRepo, directRepo.fullName).lane).toBe("direct_pr"); + expect(buildLaneAdvice(issueRepo, issueRepo.fullName).lane).toBe("issue_discovery"); + expect(buildLaneAdvice(splitRepo, splitRepo.fullName).lane).toBe("split"); + + const emptyQuality = buildConfigQuality(emptyTrusted, [], [], emptyTrusted.fullName); + const unknownQuality = buildConfigQuality(null, [], [], "missing/repo"); + const inactiveQuality = buildConfigQuality(inactiveRepo, [], [], inactiveRepo.fullName); + expect(emptyQuality.findings.map((finding) => finding.code)).toContain("trusted_labels_without_multipliers"); + expect(unknownQuality.findings.map((finding) => finding.code)).toContain("registry_unknown"); + expect(inactiveQuality.findings.map((finding) => finding.code)).toContain("inactive_allocation"); + + const audit = buildLabelAudit(directRepo, [], [], [], directRepo.fullName); + expect(audit.findings.map((finding) => finding.code)).toEqual(expect.arrayContaining(["trusted_labels_missing", "configured_labels_unused"])); + + const officialDetection = { detected: true, source: "official_gittensor_api" as const, reason: "official", priorPullRequests: 3, priorMergedPullRequests: 2, priorIssues: 1 }; + const cachedDetection = { ...officialDetection, source: "github_cache" as const }; + expect(shouldPublishPrIntelligenceComment(settings, officialDetection)).toBe(true); + expect(shouldPublishPrIntelligenceComment({ ...settings, commentMode: "off" }, officialDetection)).toBe(false); + expect(shouldPublishPrIntelligenceComment({ ...settings, publicSurface: "label_only" }, officialDetection)).toBe(false); + expect(shouldPublishPrIntelligenceComment(settings, cachedDetection)).toBe(false); + }); + + it("ranks opportunities and contributor strategy from cached edge evidence", () => { + const directRepo = repo("owner/direct", { issueDiscoveryShare: 0, labelMultipliers: { bug: 1.2 } }); + const issueRepo = repo("owner/issues", { issueDiscoveryShare: 1, labelMultipliers: { security: 1.4 } }); + const inactiveRepo = repo("owner/inactive", { emissionShare: 0 }); + const profile = buildContributorProfile( + "dev", + { login: "dev", topLanguages: ["Python"], source: "github" }, + [], + [], + [ + { login: "dev", repoFullName: directRepo.fullName, pullRequests: 2, mergedPullRequests: 1, openPullRequests: 1, issues: 1, stalePullRequests: 1, unlinkedPullRequests: 1, dominantLabels: ["bug"] }, + ], + ); + const issues: IssueRecord[] = [ + issue(directRepo.fullName, 1, "Fix direct cache bug", { labels: ["bug"] }), + issue(issueRepo.fullName, 2, "Report security issue", { labels: ["security"] }), + issue(inactiveRepo.fullName, 3, "Inactive issue", { labels: [] }), + ]; + const busyPrs = Array.from({ length: 8 }, (_, index) => pr(issueRepo.fullName, index + 10, "Busy PR", { linkedIssues: [], authorLogin: `dev${index}` })); + const opportunities = buildContributorOpportunities(profile, [directRepo, issueRepo, inactiveRepo], issues, busyPrs); + const fit = buildContributorFit( + profile, + [directRepo, issueRepo, inactiveRepo], + issues, + busyPrs, + [ + { repoFullName: directRepo.fullName, status: "success", sourceKind: "github", primaryLanguage: null, openIssuesCount: 1, openPullRequestsCount: 0, recentMergedPullRequestsCount: 0, warnings: [] }, + { repoFullName: issueRepo.fullName, status: "partial", sourceKind: "github", primaryLanguage: "Rust", openIssuesCount: 1, openPullRequestsCount: 8, recentMergedPullRequestsCount: 0, warnings: ["sampled"] }, + ], + [ + { login: "dev", repoFullName: directRepo.fullName, pullRequests: 2, mergedPullRequests: 1, openPullRequests: 1, issues: 1, stalePullRequests: 1, unlinkedPullRequests: 1, dominantLabels: ["bug"] }, + ], + ); + const scoringProfile = buildContributorScoringProfile({ login: "dev", fit, scoringSnapshot: scoringSnapshot() }); + const strategy = buildContributorStrategy({ login: "dev", fit, scoringProfile, scoringSnapshot: scoringSnapshot() }); + + expect(opportunities.map((opportunity) => opportunity.repoFullName)).toEqual(expect.arrayContaining([directRepo.fullName, issueRepo.fullName, inactiveRepo.fullName])); + expect(opportunities.find((opportunity) => opportunity.repoFullName === issueRepo.fullName)?.warnings).toEqual( + expect.arrayContaining(["This repo has a busy open PR queue.", "This repo is not a direct-PR-first lane."]), + ); + expect(opportunities.find((opportunity) => opportunity.repoFullName === inactiveRepo.fullName)?.warnings).toContain("Gittensory cannot recommend this as a strong contribution target right now."); + expect(fit.findings.map((finding) => finding.code)).toContain("no_language_fit"); + expect(strategy.nextActions).toEqual(expect.arrayContaining(["Clean up linked issue/context patterns before adding more open PRs.", "Prefer repos where the changed files match prior language evidence, or keep first submissions small."])); + }); + + it("separates cached outcome history, maintainer role sources, and contributor detections", () => { + const directRepo = repo("owner/direct"); + const ownerRepo = repo("owner/project"); + const profile = buildContributorProfile( + "dev", + { login: "dev", topLanguages: ["Go"], source: "github" }, + [ + pr(directRepo.fullName, 1, "Merged focused fix", { state: "merged", mergedAt: "2026-05-20T00:00:00.000Z", authorLogin: "dev", labels: ["bug"] }), + pr(directRepo.fullName, 2, "Closed failed fix", { state: "closed", authorLogin: "dev", labels: ["bug"] }), + pr(directRepo.fullName, 3, "Open pressure", { state: "open", authorLogin: "dev", labels: ["bug"] }), + ], + [issue(directRepo.fullName, 10, "Closed issue", { state: "closed", authorLogin: "dev" })], + ); + const history = buildContributorOutcomeHistory({ + login: "dev", + profile, + repositories: [directRepo, ownerRepo], + pullRequests: [ + pr(directRepo.fullName, 1, "Merged focused fix", { state: "merged", mergedAt: "2026-05-20T00:00:00.000Z", authorLogin: "dev", labels: ["bug"] }), + pr(directRepo.fullName, 2, "Closed failed fix", { state: "closed", authorLogin: "dev", labels: ["bug"] }), + pr(directRepo.fullName, 3, "Open pressure", { state: "open", authorLogin: "dev", labels: ["bug"] }), + pr(ownerRepo.fullName, 4, "Owner work", { state: "open", authorLogin: "owner", authorAssociation: "OWNER" }), + ], + issues: [issue(directRepo.fullName, 10, "Closed issue", { state: "closed", authorLogin: "dev" })], + repoStats: [], + }); + + expect(buildRoleContext({ login: "owner", repo: ownerRepo, repoFullName: ownerRepo.fullName, pullRequests: [pr(ownerRepo.fullName, 4, "Owner work", { authorLogin: "owner", authorAssociation: "OWNER" })] })).toMatchObject({ + role: "owner", + source: "repo_owner_match", + maintainerLane: true, + }); + expect(buildRoleContext({ login: "member", repo: directRepo, repoFullName: directRepo.fullName, pullRequests: [pr(directRepo.fullName, 5, "Member work", { authorLogin: "member", authorAssociation: "MEMBER" })] })).toMatchObject({ + role: "org_member", + source: "github_association", + maintainerLane: true, + }); + expect(detectGittensorContributor("dev", pr(directRepo.fullName, 5, "Current", { authorLogin: "dev" }), history.repoOutcomes.map((outcome, index) => pr(outcome.repoFullName, index + 100, "Prior", { authorLogin: "dev", state: index === 0 ? "merged" : "open" })), [])).toMatchObject({ + detected: true, + priorMergedPullRequests: 1, + }); + expect(detectGittensorContributor("issue-dev", pr(directRepo.fullName, 6, "Current", { authorLogin: "issue-dev" }), [], [issue(directRepo.fullName, 99, "Prior issue", { authorLogin: "issue-dev" })])).toMatchObject({ + detected: true, + priorIssues: 1, + }); + expect(buildContributorPatternReport(history, "success").patterns.map((pattern) => pattern.title)).toContain("Emerging repo fit"); + expect(buildContributorPatternReport(history, "failure").patterns.map((pattern) => pattern.title)).toContain("Closed PR credibility pressure"); + }); + + it("covers preflight and maintainer packet branches for clean direct-contribution repos", () => { + const directRepo = repo("owner/direct"); + const cleanPr = pr(directRepo.fullName, 7, "Fix cache invalidation", { + linkedIssues: [1], + labels: [], + body: "Fixes #1", + updatedAt: new Date().toISOString(), + }); + const cleanPacket = buildMaintainerPacket(directRepo, [], [cleanPr], directRepo.fullName); + const local = buildLocalDiffPreflightResult( + { + repoFullName: directRepo.fullName, + title: "Fix cache invalidation", + body: "Fixes #1", + changedFiles: ["internal/entity/model.go"], + testFiles: ["internal/entity/model_test.go"], + changedLineCount: 40, + }, + directRepo, + [issue(directRepo.fullName, 1, "Cache invalidation")], + [], + ); + const directNoIssue = buildPreflightResult( + { repoFullName: directRepo.fullName, title: "Docs maintenance", body: "No issue: typo fix", changedFiles: ["README.md"], tests: ["manual"] }, + directRepo, + [], + [], + ); + + expect(cleanPacket.pullRequestPackets[0]).toMatchObject({ reviewPriority: "review", reasons: ["No obvious queue hygiene issue detected in cached metadata."] }); + expect(cleanPacket.suggestedActions).toEqual(["Queue looks manageable from cached Gittensory signals."]); + expect(local.status).toBe("ready"); + expect(local.localDiff).toMatchObject({ codeFileCount: 1, testFileCount: 1, inferredLinkedIssues: [1] }); + expect(directNoIssue.findings.map((finding) => finding.code)).toContain("missing_linked_issue"); + }); + + it("covers issue quality, burden, bounties, noise, and reviewability edge decisions", () => { + const directRepo = repo("owner/direct"); + const issueRepo = repo("owner/issues", { issueDiscoveryShare: 1 }); + const duplicateIssues = [ + issue(directRepo.fullName, 1, "Cache refresh websocket reconnect failure", { body: "Short." }), + issue(directRepo.fullName, 2, "Cache refresh websocket reconnect failure", { body: "Short." }), + ]; + const highOverlapCollisions = buildCollisionReport(directRepo.fullName, duplicateIssues, []); + const readyIssues = buildIssueQualityReport( + issueRepo, + [ + issue(issueRepo.fullName, 3, "Actionable issue discovery candidate", { + body: "x".repeat(220), + labels: ["bug"], + updatedAt: new Date().toISOString(), + }), + ], + [], + issueRepo.fullName, + ); + const burden = buildBurdenForecast( + directRepo, + [], + Array.from({ length: 40 }, (_, index) => pr(directRepo.fullName, index + 100, `Busy PR ${index}`, { linkedIssues: [], updatedAt: new Date().toISOString() })), + highOverlapCollisions, + 7, + ); + const historicalBounty = buildBountyAdvisory({ id: "b1", repoFullName: "missing/repo", issueNumber: 1, status: "Cancelled", payload: { target_bounty: "1" } }, null, null); + const activeBounty = buildBountyAdvisory({ id: "b2", repoFullName: directRepo.fullName, issueNumber: 9, status: "Open", payload: { bounty_amount: "1.0000" } }, directRepo, issue(directRepo.fullName, 9, "Funded work")); + const directIssueQuality = buildIssueQualityReport( + directRepo, + [ + issue(directRepo.fullName, 4, "Thin stale direct issue", { + body: undefined, + updatedAt: "2025-01-01T00:00:00.000Z", + }), + ], + [], + directRepo.fullName, + ); + + expect(highOverlapCollisions.summary.highRiskCount).toBeGreaterThan(0); + expect(readyIssues.issues[0]).toMatchObject({ status: "ready" }); + expect(directIssueQuality.issues[0]).toMatchObject({ + status: "needs_proof", + warnings: expect.arrayContaining(["Repo is direct-PR first; issue filing is not the primary Gittensor lane."]), + }); + expect(burden.level).toBe("critical"); + expect(burden.findings.map((finding) => finding.code)).toEqual(expect.arrayContaining(["queue_growth_risk"])); + expect(buildBurdenForecast(directRepo, [], Array.from({ length: 5 }, (_, index) => pr(directRepo.fullName, index + 300, `Medium PR ${index}`, { linkedIssues: [index] })), buildCollisionReport(directRepo.fullName, [], []), 7).level).toBe("medium"); + expect(buildBurdenForecast(directRepo, [], Array.from({ length: 12 }, (_, index) => pr(directRepo.fullName, index + 400, `High PR ${index}`, { linkedIssues: [index] })), buildCollisionReport(directRepo.fullName, [], []), 7).level).toBe("high"); + expect(historicalBounty).toMatchObject({ lifecycle: "historical", fundingStatus: "target_only", consensusRisk: "low" }); + expect(activeBounty).toMatchObject({ lifecycle: "active", fundingStatus: "funded", consensusRisk: "low" }); + expect(historicalBounty.findings.map((finding) => finding.code)).toEqual(expect.arrayContaining(["historical_bounty", "bounty_repo_unregistered", "bounty_issue_not_cached"])); + + const stalePr = pr(directRepo.fullName, 20, "Misc refactor cleanup various things", { + linkedIssues: [], + authorLogin: "dev", + updatedAt: "2025-01-01T00:00:00.000Z", + }); + const noise = buildMaintainerNoiseReport(directRepo, [], [stalePr], [], directRepo.fullName); + const quietNoise = buildMaintainerNoiseReport(directRepo, [], [], [], directRepo.fullName); + expect(noise.noiseSources.join("\n")).toMatch(/lack linked issue|stale PR|broad/i); + expect(noise.maintainerActions).toEqual(expect.arrayContaining(["needs_author"])); + expect(quietNoise.maintainerActions).toEqual(["watch"]); + + const fragileRepo = repo("owner/fragile", { emissionShare: 0, trustedLabelPipeline: true }); + const noisyPacket = buildMaintainerPacket( + fragileRepo, + duplicateIssues, + Array.from({ length: 10 }, (_, index) => + pr(fragileRepo.fullName, 500 + index, `Misc cleanup ${index}`, { + linkedIssues: [], + labels: index === 0 ? ["bug"] : [], + updatedAt: "2025-01-01T00:00:00.000Z", + }), + ), + fragileRepo.fullName, + ); + expect(noisyPacket.pullRequestPackets[0]).toMatchObject({ reviewPriority: "needs_author", reasons: expect.arrayContaining(["Missing linked issue context."]) }); + expect(noisyPacket.suggestedActions).toEqual( + expect.arrayContaining([ + "Ask authors of unlinked PRs to add issue context or a no-issue rationale.", + "Review repo Gittensor config quality before inviting more contributor flow.", + "Prioritize queue clearing before encouraging new work.", + ]), + ); + + const needsAuthor = buildPullRequestReviewability({ + repo: directRepo, + pullRequest: { ...stalePr, title: "Small unlinked code fix", updatedAt: new Date().toISOString() }, + issues: [], + pullRequests: [{ ...stalePr, title: "Small unlinked code fix", updatedAt: new Date().toISOString() }], + files: [{ repoFullName: directRepo.fullName, pullNumber: 20, path: "src/cache.ts", additions: 10, deletions: 1, changes: 11, payload: {} }], + reviews: [], + checks: [], + recentMergedPullRequests: [], + repoFullName: directRepo.fullName, + pullNumber: 20, + }); + expect(needsAuthor.action).toBe("needs_author"); + expect(needsAuthor.maintainerNextSteps).toEqual(expect.arrayContaining(["Ask the author to address the concrete missing context before deep review."])); + + const makeUnlinked = (count: number) => + Array.from({ length: count }, (_, index) => + pr(directRepo.fullName, 200 + index, `Focused fix ${index}`, { + linkedIssues: [], + updatedAt: new Date().toISOString(), + }), + ); + expect(buildMaintainerNoiseReport(directRepo, [], makeUnlinked(3), [], directRepo.fullName).level).toBe("medium"); + expect(buildMaintainerNoiseReport(directRepo, [], makeUnlinked(5), [], directRepo.fullName).level).toBe("high"); + expect(buildMaintainerNoiseReport(directRepo, [], makeUnlinked(8), [], directRepo.fullName).level).toBe("critical"); + + const noisyClosedPr = pr(directRepo.fullName, 21, "Closed broad PR", { + state: "closed", + authorLogin: "dev", + linkedIssues: [], + updatedAt: new Date().toISOString(), + }); + const closedRateHistory = buildContributorOutcomeHistory({ + login: "dev", + profile: buildContributorProfile("dev", { login: "dev", topLanguages: ["TypeScript"], source: "github" }, [], []), + repositories: [directRepo], + pullRequests: [ + pr(directRepo.fullName, 30, "Closed one", { state: "closed", authorLogin: "dev" }), + pr(directRepo.fullName, 31, "Closed two", { state: "closed", authorLogin: "dev" }), + pr(directRepo.fullName, 32, "Merged", { state: "merged", mergedAt: "2026-05-20T00:00:00.000Z", authorLogin: "dev" }), + ], + issues: [], + repoStats: [], + }); + const broadFiles: PullRequestFileRecord[] = Array.from({ length: 12 }, (_, index) => ({ + repoFullName: directRepo.fullName, + pullNumber: 21, + path: `src/file-${index}.ts`, + additions: 80, + deletions: 0, + changes: 80, + payload: {}, + })); + const failingChecks: CheckSummaryRecord[] = [ + { + id: "check-1", + repoFullName: directRepo.fullName, + pullNumber: 21, + name: "test", + status: "completed", + conclusion: "failure", + payload: {}, + }, + ]; + const closedReviewability = buildPullRequestReviewability({ + repo: directRepo, + pullRequest: noisyClosedPr, + issues: [], + pullRequests: [noisyClosedPr], + files: broadFiles, + reviews: [], + checks: failingChecks, + recentMergedPullRequests: [], + repoFullName: directRepo.fullName, + pullNumber: 21, + outcomeHistory: closedRateHistory, + }); + expect(closedReviewability.action).toBe("close_or_redirect"); + expect(closedReviewability.noiseSources.join("\n")).toMatch(/failing|broad|closed PR rate|PR is closed/i); + }); + + it("covers private reward/risk edge scoring for unknown, issue-only, and maintainer contexts", () => { + const directRepo = repo("owner/direct", { labelMultipliers: { "status:ready": 2, feature: 1.5 } }); + const issueRepo = repo("owner/issues", { issueDiscoveryShare: 1 }); + const maintainerRepo = repo("jsonbored/awesome-claude"); + const inactiveRepo = repo("owner/inactive", { emissionShare: 0 }); + const profile = buildContributorProfile( + "jsonbored", + { login: "jsonbored", topLanguages: ["TypeScript"], source: "github" }, + [pr(maintainerRepo.fullName, 1, "Owner work", { authorLogin: "jsonbored", authorAssociation: "OWNER" })], + [], + ); + const history = buildContributorOutcomeHistory({ + login: "jsonbored", + profile, + repositories: [directRepo, issueRepo, maintainerRepo, inactiveRepo], + pullRequests: [pr(maintainerRepo.fullName, 1, "Owner work", { authorLogin: "jsonbored", authorAssociation: "OWNER" })], + issues: [], + repoStats: [ + { login: "jsonbored", repoFullName: directRepo.fullName, pullRequests: 4, mergedPullRequests: 2, openPullRequests: 4, issues: 0, stalePullRequests: 0, unlinkedPullRequests: 0, dominantLabels: ["feature"] }, + ], + }); + const fit = buildContributorFit(profile, [directRepo, issueRepo, maintainerRepo, inactiveRepo], [], [], [], [ + { login: "jsonbored", repoFullName: directRepo.fullName, pullRequests: 4, mergedPullRequests: 2, openPullRequests: 4, issues: 0, stalePullRequests: 0, unlinkedPullRequests: 0, dominantLabels: ["feature"] }, + ]); + const scoringProfile = buildContributorScoringProfile({ login: "jsonbored", fit, scoringSnapshot: scoringSnapshot() }); + + const direct = buildRepoRewardRisk({ + login: "jsonbored", + repo: directRepo, + repoFullName: directRepo.fullName, + profile, + outcomeHistory: history, + scoringSnapshot: scoringSnapshot(), + scoringProfile, + issues: [], + pullRequests: [], + }); + const issueOnly = buildRepoRewardRisk({ + login: "jsonbored", + repo: issueRepo, + repoFullName: issueRepo.fullName, + profile, + outcomeHistory: history, + scoringSnapshot: scoringSnapshot(), + scoringProfile, + issues: [], + pullRequests: [], + }); + const unknown = buildRepoRewardRisk({ + login: "jsonbored", + repo: null, + repoFullName: "missing/repo", + profile, + outcomeHistory: history, + scoringSnapshot: scoringSnapshot(), + scoringProfile, + issues: [], + pullRequests: [], + }); + const strategy = buildContributorRewardRiskStrategy({ + login: "jsonbored", + fit, + scoringProfile, + scoringSnapshot: scoringSnapshot(), + outcomeHistory: history, + repositories: [directRepo, issueRepo, maintainerRepo, inactiveRepo], + allIssues: [], + allPullRequests: [], + }); + + expect(direct.rewardUpside.labelMultiplier).toBe(1.5); + expect(direct.scoreBlockers).toContain("Open PR count exceeds the current threshold assumption."); + expect(issueOnly.rewardUpside.relevantLane).toBe("issue_discovery"); + expect(unknown.scoreBlockers).toEqual(expect.arrayContaining(["Repository is not registered in the local snapshot.", "Repository lane is unknown."])); + expect(strategy.reasoning.join("\n")).toContain("maintainer-lane economics are separate from normal contributor rewards"); + expect(strategy.actionImpact.join("\n")).toContain("openPrMultiplier"); + + const emptyStrategy = buildContributorRewardRiskStrategy({ + login: "newbie", + fit: { ...fit, opportunities: [] }, + scoringProfile, + scoringSnapshot: scoringSnapshot(), + outcomeHistory: { ...history, repoOutcomes: [], totals: { ...history.totals, openPullRequests: 0 } }, + repositories: [], + allIssues: [], + allPullRequests: [], + }); + expect(emptyStrategy.nextActions).toEqual(["Refresh official Gittensor and GitHub backfill data, then rerun strategy."]); + + const issueCleanupHistory = { + ...history, + repoOutcomes: [ + ...history.repoOutcomes, + { + repoFullName: issueRepo.fullName, + role: "outside_contributor" as const, + lane: "issue_discovery" as const, + maintainerLane: false, + pullRequests: 1, + mergedPullRequests: 0, + openPullRequests: 1, + closedPullRequests: 0, + closedPullRequestRate: 0, + issues: 0, + openIssues: 0, + closedIssues: 0, + solvedIssues: 0, + validSolvedIssues: 0, + credibility: 1, + issueCredibility: 1, + isEligible: true, + successLevel: "weak" as const, + dominantLabels: [], + successfulPaths: [], + successfulLanguages: [], + strengths: [], + risks: [], + }, + ], + }; + const issueCleanup = buildRepoRewardRisk({ + login: "jsonbored", + repo: issueRepo, + repoFullName: issueRepo.fullName, + profile, + outcomeHistory: issueCleanupHistory, + scoringSnapshot: scoringSnapshot(), + scoringProfile, + issues: [], + pullRequests: [pr(issueRepo.fullName, 91, "Open issue-lane work", { authorLogin: "jsonbored", linkedIssues: [] })], + }); + expect(issueCleanup.actions.map((action) => action.actionKind)).toContain("cleanup_existing_prs"); + expect(issueCleanup.actions.map((action) => action.actionKind)).not.toContain("land_existing_prs"); + }); + + it("sanitizes public PR comments and supports minimal public signal level", () => { + const directRepo = repo("owner/direct"); + const prRecord = pr(directRepo.fullName, 55, "Fix cache", { authorLogin: "miner", linkedIssues: [] }); + const profile = buildContributorProfile("miner", { login: "miner", topLanguages: [], source: "github" }, [], []); + const preflight = buildPreflightResult( + { + repoFullName: directRepo.fullName, + title: "Fix cache", + body: "", + changedFiles: ["src/cache.ts"], + }, + directRepo, + [], + [], + ); + const comment = buildPublicPrIntelligenceComment({ + repo: directRepo, + pr: prRecord, + profile, + detection: { detected: true, source: "official_gittensor_api", reason: "Confirmed by official API.", priorPullRequests: 1, priorMergedPullRequests: 0, priorIssues: 0 }, + queueHealth: buildQueueHealth(directRepo, [], [], buildCollisionReport(directRepo.fullName, [], [])), + collisions: buildCollisionReport(directRepo.fullName, [], []), + preflight: { + ...preflight, + findings: [ + ...preflight.findings, + { code: "score_private", severity: "warning", title: "Estimated score", detail: "Private reward score should not leak.", action: "Do not publish score." }, + { code: "critical_private", severity: "critical", title: "Critical private", detail: "wallet hotkey trust score", action: "secret" }, + ], + }, + settings: { ...repoSettings(directRepo.fullName), publicSignalLevel: "minimal", requireLinkedIssue: true }, + }); + + expect(comment).toContain("Confirmed Gittensor miner: yes"); + expect(comment).toContain("Linked issues: None detected"); + expect(comment).not.toMatch(/reward|score|wallet|hotkey|trust score|farming|critical private/i); + + const maintainerComment = buildPublicPrIntelligenceComment({ + repo: directRepo, + pr: { ...prRecord, authorLogin: "owner", authorAssociation: "OWNER", linkedIssues: [1], body: "Fixes #1" }, + profile: buildContributorProfile("owner", { login: "owner", topLanguages: ["TypeScript"], source: "github" }, [], []), + detection: { detected: true, source: "official_gittensor_api", reason: "Confirmed by official API.", priorPullRequests: 1, priorMergedPullRequests: 1, priorIssues: 0 }, + queueHealth: buildQueueHealth(directRepo, [], [], buildCollisionReport(directRepo.fullName, [], [])), + collisions: buildCollisionReport(directRepo.fullName, [], []), + preflight, + settings: repoSettings(directRepo.fullName), + }); + + expect(maintainerComment).toContain("maintainer lane"); + expect(maintainerComment).not.toMatch(/reward|score|wallet|hotkey|trust score|farming/i); + }); + + it("audits label ordering and suspicious configured labels deterministically", () => { + const directRepo = repo("owner/direct", { labelMultipliers: { bug: 1.2, feature: 1.1, "status:ready": 1.05 }, trustedLabelPipeline: true }); + const labels: RepoLabelRecord[] = [ + { repoFullName: directRepo.fullName, name: "feature", isConfigured: true, observedCount: 1, payload: {}, lastSeenAt: "2026-05-25T00:00:00.000Z" }, + { repoFullName: directRepo.fullName, name: "bug", isConfigured: true, observedCount: 1, payload: {}, lastSeenAt: "2026-05-25T00:00:00.000Z" }, + { repoFullName: directRepo.fullName, name: "status:ready", isConfigured: true, observedCount: 0, payload: {}, lastSeenAt: "2026-05-25T00:00:00.000Z" }, + ]; + const audit = buildLabelAudit( + directRepo, + labels, + [issue(directRepo.fullName, 1, "Feature", { labels: ["feature"] })], + [pr(directRepo.fullName, 2, "Bug", { labels: ["bug"] })], + directRepo.fullName, + ); + + expect(audit.observedLabels.slice(0, 2).map((label) => label.name)).toEqual(["bug", "feature"]); + expect(audit.findings.map((finding) => finding.code)).toContain("suspicious_configured_labels"); + }); +}); + +function repo(fullName: string, overrides: Partial = {}): RepositoryRecord { + const [owner, name] = fullName.split("/") as [string, string]; + return { + fullName, + owner, + name, + isInstalled: true, + isRegistered: true, + isPrivate: false, + defaultBranch: "main", + registryConfig: { + repo: fullName, + emissionShare: 0.02, + issueDiscoveryShare: 0, + labelMultipliers: {}, + trustedLabelPipeline: false, + maintainerCut: 0, + raw: {}, + ...overrides, + }, + }; +} + +function issue(repoFullName: string, number: number, title: string, overrides: Partial = {}): IssueRecord { + return { + repoFullName, + number, + title, + state: "open", + authorLogin: "reporter", + authorAssociation: "NONE", + labels: [], + linkedPrs: [], + body: "Detailed issue body with reproduction steps and expected behavior.", + updatedAt: new Date().toISOString(), + ...overrides, + }; +} + +function pr(repoFullName: string, number: number, title: string, overrides: Partial = {}): PullRequestRecord { + return { + repoFullName, + number, + title, + state: "open", + authorLogin: "dev", + authorAssociation: "NONE", + labels: [], + linkedIssues: [], + body: "", + updatedAt: new Date().toISOString(), + ...overrides, + }; +} + +function repoSettings(repoFullName: string): RepositorySettings { + return { + repoFullName, + commentMode: "detected_contributors_only", + publicSignalLevel: "standard", + checkRunMode: "off", + checkRunDetailLevel: "minimal", + autoLabelEnabled: true, + gittensorLabel: "gittensor", + createMissingLabel: true, + publicSurface: "comment_and_label", + includeMaintainerAuthors: false, + requireLinkedIssue: false, + backfillEnabled: true, + privateTrustEnabled: true, + }; +} + +function scoringSnapshot(): ScoringModelSnapshotRecord { + return { + id: "coverage-scoring", + sourceKind: "test", + sourceUrl: "fixture://coverage", + fetchedAt: "2026-05-25T00:00:00.000Z", + activeModel: "current_density_model", + constants: {}, + programmingLanguages: {}, + warnings: [], + payload: {}, + }; +} diff --git a/vitest.config.ts b/vitest.config.ts index d5302a67a2..691bde3980 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -20,10 +20,10 @@ export default defineConfig({ include: ["src/**/*.ts"], exclude: ["src/env.d.ts"], thresholds: { - lines: 90, - functions: 90, - branches: 90, - statements: 90, + lines: 95, + functions: 95, + branches: 95, + statements: 95, }, }, }, From d6c3996e13377a42034e0b493d2039b56de7c5c7 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 26 May 2026 08:06:59 -0700 Subject: [PATCH 4/5] docs(changelog): record coverage hardening --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3274502fa9..1e3ccfcf85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,3 +51,9 @@ +### Tests + +- Raise backend regression coverage + + + From d78f79e0c6a154bc2d7a9af6fcd75ddcbf8df1a8 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 26 May 2026 08:09:57 -0700 Subject: [PATCH 5/5] ci(changelog): skip changelog maintenance commits --- cliff.mcp.toml | 2 ++ cliff.toml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cliff.mcp.toml b/cliff.mcp.toml index bdbdc2ce0e..36d33a01a5 100644 --- a/cliff.mcp.toml +++ b/cliff.mcp.toml @@ -28,6 +28,8 @@ commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Fixes" }, { message = "^test", group = "Tests" }, + { message = "^docs\\(changelog\\)", skip = true }, + { message = "^ci\\(changelog\\)", skip = true }, { message = "^ci", group = "CI" }, { message = "^build", group = "Build" }, { message = "^docs", group = "Docs" }, diff --git a/cliff.toml b/cliff.toml index 05ca40ddd2..15ad6d8453 100644 --- a/cliff.toml +++ b/cliff.toml @@ -28,6 +28,8 @@ commit_parsers = [ { message = "^feat", group = "Features" }, { message = "^fix", group = "Fixes" }, { message = "^test", group = "Tests" }, + { message = "^docs\\(changelog\\)", skip = true }, + { message = "^ci\\(changelog\\)", skip = true }, { message = "^ci", group = "CI" }, { message = "^build", group = "Build" }, { message = "^docs", group = "Docs" },

    +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 diff --git a/docs/assets/inter-italic-latin-ext.DytegdRQ.woff2 b/docs/assets/inter-italic-latin-ext.DytegdRQ.woff2 deleted file mode 100644 index 42f338f1c779ab23ad0a0148f4b3747a393b6e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140768 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ⅆ;C@VVZ}6~%6;gvYCmiYaL#`~a{kR99=o}OX*Bzi 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