diff --git a/.aiignore b/.aiignore index 2a8c3f966..57a968413 100644 --- a/.aiignore +++ b/.aiignore @@ -10,3 +10,15 @@ pnpm-lock.yaml *.log tmp/ packages/local-collector/dist-collector/ + +# Local working directories. .worktrees/ matters most: it holds full checkouts +# of this repository, so a tool that walks it reads every file several times +# over, and a nested biome.jsonc in one of them makes `biome check` fail at the +# root with a nested-configuration error. +.worktrees/ +.turbo/ +.codex-reports/ +devspecs/ +ai/ +.source/ +.source-*/ diff --git a/.gitignore b/.gitignore index c4b73e8ba..3e79dc21c 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,12 @@ design-evidence/**/*.png /screenshots-*/ /perf-results/ packages/local-collector/dist-collector/ + +# Build caches and local agent working dirs. None of these were ignored, so a +# `git add -A` in a working tree that has them would commit build output or +# local notes to a public repository. +.turbo/ +.worktrees/ +.codex-reports/ +devspecs/ +/ai/ diff --git a/STACK-0902.md b/STACK-0902.md deleted file mode 100644 index 048b42691..000000000 --- a/STACK-0902.md +++ /dev/null @@ -1,16 +0,0 @@ -# Spec integration 0902 — stack index - -This file exists so the integration branch has a commit of its own and the -umbrella pull request can stay open while the stack is reviewed. It carries no -specification text and is deleted before this branch merges. - -**Nothing in this stack is ratified.** Each change is its own draft pull request -targeting this branch. Accepting a change means merging its sub-PR here; -rejecting one means closing it. What reaches `main` is whatever this branch -holds when the owner is done. - -The ordered list of sub-PRs, with one-line summaries and decision status, is in -the umbrella pull request body. The full reasoning per row — proposed text, -alternatives, recommendation, confidence — is in the decision sheet at -`local/SPEC-INTEGRATION-DECISIONS-0902.md`, which is gitignored and local to the -owner's checkout. diff --git a/apps/site-blume-spike/.gitignore b/apps/site-blume-spike/.gitignore deleted file mode 100644 index e793b517c..000000000 --- a/apps/site-blume-spike/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.astro/ -.blume/ -.blume-verify/ -dist/ -node_modules/ diff --git a/apps/site-blume-spike/blume.config.ts b/apps/site-blume-spike/blume.config.ts deleted file mode 100644 index 751f625c0..000000000 --- a/apps/site-blume-spike/blume.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { defineConfig } from "blume"; - -export default defineConfig({ - content: { root: "content" }, - description: "A Blume rendering spike for canonical PDPP protocol material.", - logo: "/brand/pdpp-mark.svg", - navigation: { - tabs: [ - { label: "Protocol", path: "/specification" }, - { label: "Governance", path: "/governance" }, - { label: "Self-host", path: "/self-host" }, - { label: "Participate", path: "/participate" }, - ], - }, - seo: { sitemap: false }, - theme: { accent: "teal", radius: "sm" }, - title: "PDPP — Blume spike", -}); diff --git a/apps/site-blume-spike/content/governance.md b/apps/site-blume-spike/content/governance.md deleted file mode 100644 index 0e1e21df4..000000000 --- a/apps/site-blume-spike/content/governance.md +++ /dev/null @@ -1,390 +0,0 @@ ---- -title: "Governance, Membership and Conformance" -description: Canonical PDP-Connect programme governance text rendered from the repository root. ---- - -**Status:** Consultation draft -**Circulated:** 24 August 2026. Revised 2 September 2026. -**Formal review:** 3 September to 1 October 2026 -**Supporter signing opens:** 3 September 2026 -**Programme live:** 15 October 2026 -**Applies to:** PDP-Connect programme documents -**Reports:** pdpp-dev-reports@lfdecentralizedtrust.org - ---- - -**Programme document.** This is a programme document, not normative protocol text. It defines how PDP-Connect is governed and how conformance status is obtained. It does not change the specification, and no status it defines is a conformance requirement. - -This document is in two parts. - -**Part A, Operating rules,** is in force from programme live. It describes what PDP-Connect does now, as a Lab of LF Decentralized Trust, with the powers a Lab has. - -**Part B, Proposed structure,** is not in force. It describes what PDP-Connect proposes to become once it holds a legal home that can stand behind conformance findings. It is published for comment and will change in response. - -From 3 September 2026 the specification and Part A are locked for the duration of the formal review period. No change is made to either during that window except to correct a factual error, and any such correction is published with its date and its ground. Part B remains open to revision throughout. - -Every comment received during formal review is logged and given a disposition: accepted, declined with a reason, or deferred. The comment resolution log is published. During disposition the maintainers may hold further open consultations or one-on-one conversations with commenters, and will say so in the log. - -Where review produces material change, or where a material question remains in dispute at close, the changed text goes out for a further 15-day review before it is final. Non-material change proceeds to publication. - ---- - -## 0. What this is, for readers new to PDPP - -**The protocol.** PDPP is an open protocol for scoped access to personal data. Today, when you let an app use your data from a platform, the choice is usually all of it or none of it, and after you click nothing records what you actually agreed to. PDPP turns that click into a durable, specific record: these fields, this date range, this purpose, for this long. A machine then checks every later request against that record and refuses anything outside it. - -**Why a protocol needs governance.** A protocol is a document. Anyone can write one; the hard part is getting people to adopt it, and getting anyone to believe a party that says it complies actually does. That belief has to come from somewhere, and the somewhere is a body that publishes criteria, checks claims against them, and takes the claim away when it turns out to be false. This document defines that body, who elects it, and what it may and may not do. - -**Three kinds of party.** Data comes from somewhere, an application asks for some of it, and machines record and enforce what was approved. The programme calls these Source, Accessor and Operator. Every conformance status belongs to exactly one of them. - -**What conformance status is.** It says a party has been checked against published criteria and the result is published where anyone can read it. It is not a licence, and it is not required. Anyone may build on PDPP without holding a status, joining anything, or dealing with PDP-Connect at all. That is stated in §1 and it cannot be amended. - -**What membership is.** Separate from conformance. Membership records what a company or an individual has publicly committed to: signing the Principles as a Supporter, or holding a conformance status as a Partner. It costs nothing, and it confers no conformance status. - -**Where this sits.** PDP-Connect is a Lab of LF Decentralized Trust, part of the Linux Foundation. It was started by the Vana Foundation. PDPP is a community specification, owned, governed and managed by the community. The specification and reference implementation are open source. This document governs the programme around them, not the protocol itself. - ---- - -# Part A. Operating rules - -In force from programme live. - -## 1. Scope and standing - -This document defines how PDP-Connect is governed, the membership it operates, and the conformance programme it proposes. - -Nothing in this document is a conformance requirement. Core §9 states that conformance is role- and behaviour-based, and that a conformant implementation is not required to use any particular vendor-hosted service, token, chain, centralised registry operator, domain, or repository deployment. That remains the case. Any party may implement PDPP without holding any status described here, without joining any tier described here, and without any dealing with PDP-Connect. - -Conformance status is a signal about parties. It is not permission to operate. - -The two principles in the preceding two paragraphs are not amendable: no status under this programme is a conformance requirement, and conformance status is not permission to operate. No vote of Partners, decision of the steering committee, or act of the technical committee reaches them. - -### 1.1 Relationship to the Linux Foundation - -PDP-Connect is an LF Decentralized Trust Lab. Labs are initiated and managed by the community rather than overseen by the LFDT Technical Advisory Committee. The Labs Stewards approve entry to the programme and curate it, and hold no oversight of a Lab's own affairs. A Lab is not required to adopt a formal governance model. This document adopts one because the programme it describes issues findings that third parties rely on. - -Reference implementation code is Apache-2.0 and all commits carry DCO sign-off, as the Labs programme requires. Specification text is CSL-1.0 and documentation is CC-BY-4.0. - -### 1.2 Legal status - -PDP-Connect is not a separate legal entity. It holds no funds, enters into no agreements, and issues no marks. It operates within the LF Decentralized Trust Labs series of LF Projects, LLC. - -Findings published under Part A are the published output of the process described here. They are not certification, they carry no warranty, and participants act in their own capacity. - -Where PDP-Connect's programme should legally sit is an open question, raised at the fourth working session and being worked with LF Decentralized Trust. Part B describes the structure PDP-Connect proposes to adopt once that question is resolved. Nothing in Part A depends on the answer. - -### 1.3 The model - -The conformance programme is modelled on the Certified Kubernetes Conformance Program and follows its structure: self-service testing against an open source suite, public submission of results, review and approval in the open, and no fee for participation. - -## 2. How the programme is run - -The programme moves through four stages: a preparatory stage before programme live, then the three numbered phases. Each is defined by who holds authority and what can appear on the register. - -| Phase | Who runs it | What is on the register | Ends when | -| --- | --- | --- | --- | -| Pre | The maintainers | Public comment on the specification and Part A. Principles v1.0 published. Supporter signing opens | Programme live, 15 October 2026 | -| 1. Launch | The maintainers | Supporters | The interim technical committee is named | -| 2. Interim | The maintainers, with an interim technical committee | Supporters, and every status in §5 | Partners elect the steering committee | -| 3. Full | The steering committee and the technical committee it appoints | As phase 2 | Amended under Part B | - -### 2.1 Phase 1: the maintainers - -The maintainers are those listed as maintainers in the PDPP repository at github.com/PDP-Connect/pdpp as at 3 September 2026. - -In phase 1 the maintainers administer the register, run the change processes in §7, receive reports under §6, and prepare the interim technical committee. They make no finding about any third party. - -The maintainers cannot amend this document. See §9. - -### 2.2 Phase 2: the interim technical committee - -Within 30 days of programme live, the maintainers name an interim technical committee of five. - -The committee is constituted on five rules, all of which are published before anyone is named: - -1. **Published criteria.** Appointment requires demonstrated technical qualification: contribution to the specification or its reference implementation, or equivalent standing in authorization, identity, or data portability standards work. The maintainers publish the criteria and the basis on which each appointment is made. -2. **Majority independent.** At least three of the five members are unaffiliated with Vana Foundation, Open Data Labs, or any organisation under common control with either. Every member's affiliation is published. -3. **Appointed once.** The maintainers name the committee and cannot remove any member. Only the first elected steering committee may remove a member, and only for cause published with reasons. -4. **Term ends at the first election.** The committee stands down when the steering committee is seated under Part B. -5. **Decisions in the open.** Every decision is published with reasons and with each member's vote named. A member does not vote on a matter concerning their own organisation, and recusal reduces the number needed for a majority. - -The committee reviews conformance submissions under §5 and recommends, maintains the conformance test suite and the review standard, and reviews and recommends on the change processes in §7. It recommends; it does not merge. Until PDP-Connect's legal home is confirmed, the register describes its findings as reviewed by the interim technical committee. - -### 2.3 How the committee reviews and recommends - -Each submission is assigned to two members, neither from the applicant's organisation. They examine it in public against the published review standard and write a recommendation of no more than one page: grant or refuse, with reasons. - -The full committee votes on that recommendation, asynchronously, within seven days. A recommendation is adopted by a majority of the whole committee, less any member who has recused. The adopted recommendation, with reasons and named votes, is posted on the pull request. - -In phase 2 no steering committee exists, so the maintainers merge on the committee's adopted recommendation and have no discretion to do otherwise. From phase 3 the steering committee decides on the recommendation by majority vote and the Chair merges, under Part B. - -A refused applicant receives the written reasons and may correct and resubmit. There is no appeal from the interim committee; appeals open when the steering committee is seated. That is stated here so that no applicant expects a route that does not yet exist. - -Reviewer pairs rotate. - -### 2.4 Separation - -Authoring the specification, operating commercially on it, and reviewing conformance submissions against it are not held by one organisation. The majority-independent rule in §2.2 is how that is achieved before an elected structure exists. - -From phase 3 a second separation applies: the steering committee changes the specification and grants status; the technical committee reviews, enforces and recommends. The committee that writes the rules is not the committee that applies them, and the reverse. - -## 3. Open participation - -The work happens in the open, and joining requires no signature. - -**Open channels.** The PDP-Connect mailing list and the #pdp-connect channel on the LF Decentralized Trust Discord are open to anyone. Both are linked from pdpp.dev. Drafts, working sessions, and the comment resolution log are announced there. - -**Working sessions** are public and recorded. - -**Public bodies.** Regulators, government agencies and international organisations are welcome to participate in the open channels and working sessions as observers, without signing anything, holding any status, or appearing on any register. A named contact for public bodies is listed on pdpp.dev. - -## 4. Membership - -Membership records what a party has publicly committed to. It is separate from conformance status and confers none. - -### 4.1 Supporter - -A Supporter has signed the PDPP Principles, a short statement of the intentions behind the protocol, published at pdpp.dev and versioned separately from the specification. - -Signing is a statement of intent. It is not an undertaking to implement PDPP, and it does not indicate agreement with any particular version of the specification. Individuals and organisations both sign. An individual's affiliation, if given, is shown for identification only; the individual signs in a personal capacity. A signature attaches to the version of the Principles signed, and a signatory is invited, not moved, when the Principles are revised. - -Supporters are listed on the public register by name (individuals) or by organisation, type and country (organisations), with the date and the Principles version signed. The register is in date order, without ranking or tiers. No badge or mark is issued. - -Supporter is self-declared. Nobody grants it, and it can be withdrawn at any time. - -Supporter is the only membership available in phase 1. Signing opens 3 September 2026, ahead of programme live, because a Supporter register needs no body to administer it beyond the maintainers. - -### 4.2 Partner - -A Partner is an organisation that holds at least one Verified status under §5. Conformant status does not qualify. The register entry states which. Partners receive drafts ahead of publication, participate in working groups, and vote under Part B once the steering committee election is called. - -Partner is not granted. It follows from holding a Verified status, and lapses when the last Verified status lapses. - -Partner opens in phase 2. - -Membership carries no fee at any level. - -## 5. Conformance - -### 5.1 Two levels - -Every status is one of two levels. - -**Conformant** is automated. The submission passes the admissions check in Appendix A and, where a schema applies, validates against it. No human makes a judgement. The register records it as conformant. - -**Verified** is reviewed. The technical committee examines the submission in public against the published review standard and recommends under §2.3. Every Verified status also requires proof of corporate identity: presence on a recognised trust registry, of which the Data Transfer Initiative's Data Trust Registry is the first, or where no registry covers the applicant, a KYB-style check by PDP-Connect against the published criteria. - -Conformant confers no membership. Partner under §4.2 requires a Verified status. - -### 5.2 Who does what - -**The technical committee** reviews every Verified submission on the pull request and posts its recommendation under §2.3. Members are named on every recommendation. - -**The maintainers** administer submissions, run the admissions check, merge Conformant submissions on a passed check and Verified submissions on the committee's adopted recommendation, and maintain the register. In phase 2 they have no discretion at the merge. From phase 3 the steering committee grants by majority vote and the Chair merges and maintains the register. - -There is no accreditation body and there are no licensed assessors. - -### 5.3 How status is obtained - -Every status is obtained by pull request to the register. - -1. **Submit.** The applicant opens a pull request containing the evidence for the status sought, together with the participation form. -2. **Check.** The maintainers run the admissions check in Appendix A. A submission that fails a check is returned with the item cited. The maintainers exercise no discretion at this step. A Conformant submission that passes is merged here. -3. **Review.** For Verified, the technical committee examines the submission on the pull request and posts its recommendation under §2.3. -4. **Grant and publish.** In phase 2 the maintainers merge on the recommendation. From phase 3 the steering committee votes to grant and the Chair merges. The result is published to the register. - -### 5.4 Statuses - -Five statuses across three roles, as defined in Core §2. Each belongs to exactly one role. - -| Status | Role | Level | Finding | -| --- | --- | --- | --- | -| Conformant Source | Source | Automated | The source declaration validates against the PDPP schema. | -| Verified Source | Source | Reviewed | The declaration is published by the platform that holds the data, and a named party is accountable for its accuracy. | -| Conformant Accessor | Accessor | Automated | The accessor is registered and its submission is complete. | -| Verified Accessor | Accessor | Reviewed | The accessor has made a legal attestation and a named legal entity carries liability. | -| Verified Operator | Operator | Reviewed | The implementation follows the specification, including the terms of every grant and revocation on request. | - -Every status opens in phase 2. Verified Operator opens on publication of the conformance test suite. - -### 5.5 Sources - -A source enters the system as a published declaration of what it exposes: fields, streams, endpoints. Every grant of consent is made against that declaration, and the machine enforces whatever it says. A declaration that is wrong corrupts consent at its input, and nothing downstream catches it. - -**Conformant Source.** The declaration validates against the PDPP schema. Anyone may publish one. The register records it as conformant and names the accountable party. - -A connector source conforms by producing a declaration that validates against Core §5 and serving its data through a resource server conforming to Core §8. No particular collection method is required. - -**Verified Source.** The declaration is published by the platform whose data it describes. The technical committee reviews the declaration for accuracy and completeness, confirms the publisher's identity against a recognised trust registry or by KYB-style check, and recommends. A Verified Source carries a verified tag and display priority: an authorization server presents it by default, with Conformant declarations for the same source reachable. Verified does not displace anything. Anyone remains free to publish and maintain a Conformant declaration for the same source, including one that exposes more. - -Existing grants remain bound to the declaration snapshot they were issued against and continue until expiry or revocation. Core §7 does not support grant narrowing, and no migration is forced. - -**Who may update a declaration.** A source declaration may be updated only by the account that submitted it, or by an account listed in the declaration's own maintainers field. A pull request from any other account is returned at the admissions check. Every new version passes the automated check in Appendix A before it is published, whatever the level of the status it carries. A Verified declaration whose new version widens scope returns to review under §5.8. - -**Archival.** The technical committee may recommend that a declaration with low or no usage be archived. The usage threshold and measurement are published before any archival is proposed, and the accountable party is notified and given 30 days to respond before the recommendation is made. Archival is merged by the same route as any other change to the register. An archived declaration remains readable, is marked archived on the register, and is not presented by default by an authorization server. It does not affect grants already issued against it. The accountable party may reinstate it at any time by submitting a new version, which passes the automated check as above. - -### 5.6 Accessors - -An accessor is an application or agent requesting data. - -**Conformant Accessor.** Registered on the register with a complete submission. Virtually anyone. No assessment is made. - -**Verified Accessor.** The accessor provides a legal attestation at registration: a legal contact, a jurisdiction, and an undertaking to comply with the terms of use. An agent may submit on the accessor's behalf, but the attestation names the legal entity that carries ultimate liability, and that entity's identity is confirmed against a recognised trust registry or by KYB-style check. The technical committee reviews the attestation and recommends. - -Verified Accessor is a positive trust signal for Core §6, which requires an authorization server to render verified status distinctly where it holds such a signal and to treat a client as unverified where it does not. An authorization server may recognise other signals under its own policy. - -### 5.7 Operators - -An operator runs the authorization server, the resource server, or both. This is where the protocol either holds or fails, so there is one level only. - -**Verified Operator.** The implementation follows every rule of the specification. In particular it enforces the terms of each grant as recorded, refuses anything outside them, and revokes access when the user asks. The applicant runs the conformance test suite against its implementation and submits the results. The technical committee then conducts a full review of the implementation, working with the applicant, before recommending. The operator's identity is confirmed against a recognised trust registry or by KYB-style check. - -A Verified Operator claim states which Core §9 roles it covers and the specification version the results were produced against. - -**What the status does not cover.** Some obligations cannot be checked programmatically, in particular what an accessor does with data after it is disclosed. Verified Operator attests to the operator's own conduct as observable through the test suite and review. It is not a finding about any other party, and the register says so. - -Core §9 notes that a conformance test suite is planned and not defined in v0.1. The suite is published by 1 January 2027, and Verified Operator opens on its publication. Until then operator conformance is self-asserted and PDP-Connect makes no finding about it. - -### 5.8 Rules common to all statuses - -**Grounds.** Standing depends on conduct alone. It does not depend on membership or on any commercial relationship with PDP-Connect or its members. - -**Change.** A source declaration is versioned, and every version is compared against the one before it. Every version passes the automated check before publication. A change that widens scope, meaning a new stream, a new field, or a new endpoint, additionally returns through the same route by which the status was obtained before the new version carries it. Any other change is recorded. - -**Currency.** Status is granted against a stated specification version. To remain current, a holder resubmits against the most recent version within twelve months of its publication. Renewal is a re-declaration by the holder plus a fresh run of the admissions check and, for Verified Operator, the test suite. The committee re-reviews a Verified status only where a check fails or a report under §6 is open. Status that is not renewed lapses, and the register records it as lapsed rather than withdrawn. - -**Withdrawal.** Every status is revocable on evidence. Verified statuses are withdrawn on the committee's recommendation under §2.3, merged as in §5.3; Conformant statuses are withdrawn by the maintainers where a check no longer passes. Status that depended on a trust registry entry lapses when that entry lapses. - -**Scope.** A status is granted for a named role and does not extend to any other. - -**The register.** The register is authoritative. It shows conformant, verified, lapsed, withdrawn and disputed status alongside the date, the ground and the specification version. It is published as a machine-readable endpoint. No badge or mark is issued until PDP-Connect holds a legal home. - -## 6. Reports - -Anyone may report a source description as inaccurate, a Supporter entry as misattributed, or any other conduct bearing on a status or a register entry, to pdpp-dev-reports@lfdecentralizedtrust.org. - -The maintainers designated as responders, listed on pdpp.dev, acknowledge a report within five working days. - -**In phase 1,** no body exists to adjudicate. The register records the entry as disputed and publishes the report alongside it. The entry is not removed unless the party withdraws it. - -**In phase 2,** the report is referred to the interim technical committee, which reviews and recommends under §2.3. Where a report is credible on its face, the committee may suspend a Verified status pending the outcome, and the maintainers may suspend a Conformant status where the check no longer passes. The outcome is published with reasons. Where a description is found to be inaccurate, the status is withdrawn and the finding records the period during which the description was live, so that operators can identify the grants affected. - -## 7. Change processes - -Anyone may make a proposal under this section, whether or not they hold a status or a membership. - -The technical committee reviews every proposal in public and recommends. Adoption is a steering committee decision: from phase 3 the steering committee approves or declines by majority vote and the Chair merges. Before a steering committee exists, the maintainers run the process in phase 1, and in phase 2 merge on the interim technical committee's adopted recommendation with no discretion, as in §2.3. - -**Purpose codes.** Core Appendix A defines the initial registry. `https://pdpp.dev/purpose/ai_training` carries the only protocol-level consent requirement. Proposals are considered on a published regular cycle, deciding whether to add a code, and whether it carries a protocol-level consent requirement. - -**Views.** Core §5 states that views under `pdpp.dev` URI namespaces are controlled through a public change process. That process is the one in this section. - -**Extension profiles.** Core §5 states that an extension cannot redefine or weaken Core semantics. Every proposed extension is reviewed against that requirement and the finding is published. An extension that fails review is not published under the `pdpp.dev` namespace. - -**The specification.** Proposals are triaged on a published regular cycle and worked in public by the technical committee, which recommends text. The steering committee approves, declines or returns a recommendation; it does not redraft. Approved text is published under CSL-1.0 through the Community Specification process. Membership votes do not decide protocol semantics. - -**The test suite.** Maintained and versioned alongside the specification. Changes to what conformance means are published before they take effect. - -Decisions under this section are published with reasons. - -## 8. Timeline - -| Stage | Date | -| --- | --- | -| Specification and Part A locked, published for public comment. PDPP Principles v1.0 published. Supporter signing opens | 3 September 2026 | -| Comment period closes | 1 October 2026 | -| Disposition published. Further 15-day review if material change | From 1 October 2026 | -| Programme live | 15 October 2026 | -| Interim technical committee named | By 14 November 2026 | -| Source and Accessor submissions open | On the committee being named | -| Conformance test suite published | By 1 January 2027 | -| Verified Operator opens | On publication of the test suite | -| Steering committee election called | Sooner of 100 Partners or 15 October 2027, not before 15 April 2027 | - -## 9. Amendment of Part A - -Part A cannot be amended during phases 1 and 2. The maintainers and the interim technical committee are bound by it, including the terms under which their own authority ends. - -To avoid entrenching a defect, a narrow exception applies. The maintainers may issue published errata correcting factual errors, broken cross-references and dates. Errata may not alter criteria, statuses, tiers, the constitution of the interim committee, or the election trigger in §8. Every erratum is published with its date and its ground, and is subject to ratification or reversal by the first seated steering committee. - -From phase 3, Part A is amended under Part B §B.5. - ---- - -# Part B. Proposed structure - -Not in force. Published for comment. Contingent on PDP-Connect holding a legal home able to stand behind conformance findings, which is being worked with LF Decentralized Trust. - -## B.1 Path to project status - -The programme starts under the LF Decentralized Trust Labs structure, which provides no separate legal personality. When the conformance test suite is published and Verified Operator opens, PDP-Connect applies for its own legal home. The candidates are LF Decentralized Trust project status, a series of Joint Development Foundation Projects, LLC, which is how the Coalition for Content Provenance and Authenticity and Trust over IP are constituted, or another Linux Foundation category if one is better suited to a programme that issues findings. - -At that point membership can become a signed agreement, findings can become certification, marks can be issued and enforced, and the programme can hold funds and form liaisons with other standards bodies. Until then: no fees, no contracts, no marks. - -## B.2 The steering committee - -Five seats, all elected by Partners. The Chair holds one of the five, elected directly on the same terms as the other four. - -The steering committee changes the specification, on the technical committee's recommendation. It sets the conformance criteria and currency rules, grants and withdraws status on the technical committee's recommendation by majority vote, hears appeals, appoints the technical committee, represents the programme to the Linux Foundation, and publishes its decisions. It approves, declines or returns; it does not redraft. - -The Chair convenes the committee and records its decisions, maintains the register, administers submissions and merges them once the steering committee has voted, calls and organises elections, and publishes criteria and decisions. - -**Open questions from the fourth working session, carried here for comment:** whether five seats or three; and whether one organisation, one vote deters large participants. - -## B.3 The technical committee - -Appointed by the steering committee on demonstrated technical qualification, as in §2.2. It maintains the test suite and the review standard, reviews submissions and recommends, receives community-proposed changes to the specification, runs the change processes in §7, and recommends versions for publication. - -The committee reviews and comments on every pull request against the specification, its companion documents, the test suite and the register, and posts its recommendation. It merges nothing. The steering committee decides and the Chair merges. The committee enforces and recommends; the steering committee changes the rules. - -## B.4 Elections, terms, removal and voting - -Steering committee members serve two years, no term limit, and remain in office until successors are seated. The Chair runs elections and publishes the timetable, eligibility rules, counting method and result. Where the Chair stands for re-election or the seat is vacant, an independent returning officer is appointed. - -Removal of any member, including the Chair, requires both a resolution of the steering committee and a vote of Partners. - -Partner votes: one organisation, one vote. An organisation is a separate legal entity not under common control with another voting organisation. Voting is not conditioned on any fee. Steering committee decisions pass by majority. A member does not vote on a decision concerning their own status, their own organisation, or their own removal. - -## B.5 Amendment - -This document is amended by a majority of Partners, except for the two principles stated as unamendable in §1. The specification changes by steering committee decision on the technical committee's recommendation, under the Community Specification process, never by membership vote. - -## B.6 Under consideration - -Annual attestation and compliance review for assessed statuses, on the model offered at the fourth working session. Appeals from the interim technical committee's decisions, once a steering committee exists to hear them. Marks and badges, once an entity exists to own and enforce them. - ---- - -# Appendix A. Admissions check - -Applied by the maintainers at §5.3 step 2. The list is exhaustive: a submission cannot be returned for a reason not on it. The maintainers have no discretion to return a submission that meets every item. Every return cites the item and is logged. - -For every submission: - -1. The participation form is complete. -2. The submission names the specification version it is made against. -3. A named party accepts accountability, with working contact details. -4. The pull request carries DCO sign-off. - -For Supporter: - -5. The signatory has confirmed by email. -6. For an organisation, the signatory's email is at the organisation's domain and the authority declaration is checked. - -For Source statuses: - -7. The declaration validates against the PDPP schema for the specification version named. -8. Declared endpoints resolve. - -8a. For an update to an existing declaration, the submitting account is the original submitter or is listed in the declaration's maintainers field. - -For any Verified status: - -9. Proof of corporate identity is attached: a reference to an entry on a recognised trust registry, or the material for a KYB-style check. -10. For Verified Accessor, the legal attestation is attached and names the entity carrying liability. - -For Verified Operator: - -11. Test suite results are attached, name the suite version, and are reproducible. - -Separately from this check, the maintainers may decline to publish content that is unlawful, fraudulent or abusive, under the Code of Conduct. That is repository moderation, not a status decision, and is recorded as such. diff --git a/apps/site-blume-spike/content/self-host.mdx b/apps/site-blume-spike/content/self-host.mdx deleted file mode 100644 index 6fe563605..000000000 --- a/apps/site-blume-spike/content/self-host.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Self-Host -description: Run your own personal data server. Query Gmail, GitHub, Notion, and more from Claude, ChatGPT, or Codex. ---- - -Your own personal data server. Ask Claude, ChatGPT, or Codex about your Gmail, GitHub, Notion, and 30 more. - -## Run it - - - -A tool running on this machine reaches the node directly. Anything hosted elsewhere, including web assistants, calls from its own servers and needs the public address above. - -## What you get - -- **MCP built in.** Claude, ChatGPT, and Codex query your data over [MCP](https://modelcontextprotocol.io/). -- **33 sources.** Gmail, GitHub, Notion, Oura, YNAB, and more. -- **Search included.** Full text and semantic, on by default. -- **Scoped grants.** Give a client read access to the fields you pick. Revoke it anytime. -- **Browser sources included.** Amazon, ChatGPT and USAA sign in through a browser you can watch and take over. -- **Yours.** Your records stay on the machine you run it on, and survive a restart. diff --git a/apps/site-blume-spike/content/specification/index.md b/apps/site-blume-spike/content/specification/index.md deleted file mode 100644 index 0a6fb7aa5..000000000 --- a/apps/site-blume-spike/content/specification/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Protocol Specification -description: Canonical PDPP specification texts rendered from the repository root. ---- - -# Protocol Specification - -- [Core](/specification/spec-core) -- [Source Declaration Discovery and Trust](/specification/spec-discovery-and-trust) diff --git a/apps/site-blume-spike/content/specification/spec-collection-profile.md b/apps/site-blume-spike/content/specification/spec-collection-profile.md deleted file mode 100644 index 07a01f1d3..000000000 --- a/apps/site-blume-spike/content/specification/spec-collection-profile.md +++ /dev/null @@ -1,701 +0,0 @@ ---- -title: "PDPP Collection Profile v0.1.0" -description: "Optional collection semantics for sources that do not expose PDPP natively." ---- - -> **Spec status** -> -> Status: **Companion profile draft** -> -> Date: 2026-08-22 - - -Companion to the Personal Data Portability Protocol (PDPP) core spec. - ---- - -## Overview - -The Collection Profile defines how connectors collect data from source platforms and write it to a PDPP resource server. It is one fulfillment mechanism for the PDPP core protocol; pre-collected data, manual imports, and other ingestion mechanisms are equally valid. - -The Collection Profile is architecturally separate from the core protocol. A resource server serving pre-collected data needs no awareness of this profile. A connector runtime implementing this profile needs no awareness of grant semantics beyond what is explicitly passed to it in the START message. - -### Collection method abstraction - -Connectors abstract over the source platform's data access interface. The runtime does not standardize the connector's source-specific collection logic; it standardizes only the runtime contract around bindings, scope, state, and emitted messages. A connector that collects data via browser automation and one that calls a platform's export API both use the same START/RECORD/STATE/DONE protocol, the same binding matching, and the same state management. - -This abstraction is intentional. Many platforms do not currently offer structured data portability APIs. The `browser_automation` binding enables connectors that drive a browser to collect data from a platform's web UI. As platforms adopt data portability standards or offer their own APIs, connector implementations can change without changing the consent surface, grant enforcement, or query API. - -### Requirements Language - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this profile are to be interpreted as described in the core spec's [Requirements Language](spec-core.md#requirements-language) (BCP 14 [RFC 2119] [RFC 8174]) when, and only when, they appear in all capitals. - ---- - -## 1. Connector Manifest Extensions - -The core manifest (Section 7 of the core spec) defines the consent surface. The Collection Profile adds execution-specific fields. - -```json -{ - "protocol_version": "0.1.0", - "connector_id": "https://registry.pdpp.dev/connectors/spotify", - "version": "2.0.0", - "display_name": "Spotify", - "runtime_requirements": { - "bindings": { - "network": { "required": true }, - "interactive": { "required": true } - } - }, - "capabilities": { - "human_interaction": ["credentials", "otp"] - }, - "streams": [ - { - "name": "top_artists", - "incremental": true - } - ] -} -``` - -### Collection-specific manifest fields - -| Field | Description | -|-------|-------------| -| `runtime_requirements.bindings` | Declared bindings the connector requires from the runtime. Keys are binding names; values are objects with `required: boolean` and optional binding-specific fields. Standard bindings are listed below. Extension bindings use namespaced identifiers (e.g., `nvidia.com/gpu`). Unqualified binding names are reserved for the spec-defined registry. | -| `capabilities.human_interaction` | Interaction kinds this connector may request: `credentials`, `otp`, `manual_action`. | -| `streams[].incremental` | Whether this stream supports cursor-based incremental sync. | -| `streams[].state_stream` | Optional. Names exactly one other declared stream whose committed checkpoint governs this stream. Requires `streams[].coverage_strategy: "checkpoint_window"` on the same stream. See [Checkpoint dependency](#checkpoint-dependency) below. | -| `streams[].parent_streams` | Optional. Names one or more other declared streams whose checkpoints this stream's detail evidence can independently satisfy. Requires `streams[].coverage_strategy: "parent_detail_accounting"` on the same stream. See [Checkpoint dependency](#checkpoint-dependency) below. | -| `streams[].coverage_strategy` | Optional. Declares how a stream's coverage is accounted. This profile constrains only the two values that interact with checkpoint dependency, `checkpoint_window` and `parent_detail_accounting`; other values a runtime may define are outside this profile's normative scope. | - -A stream declaration MUST NOT set both `state_stream` and `parent_streams`. A stream with neither field is its own checkpoint parent (self-mapped): its own `STATE` messages govern its own commit eligibility, exactly as in a manifest that predates this section. - -### Checkpoint dependency - -Some streams do not carry their own cursor. A stream that rides another stream's checkpoint (for example, a reactions or attachment-metadata stream co-emitted alongside the messages that reference it) declares that relationship in the manifest so the runtime can compute which staged `STATE` commits are safe to persist when a run ends in a certified stream-scoped failure (see [DONE](#done)) or reports incomplete detail coverage (see [DETAIL_COVERAGE](#detail_coverage)). - -There are two declaration shapes, and a stream MUST use at most one. Each shape REQUIRES a specific `coverage_strategy` value on the same stream; a runtime MUST reject a manifest declaring `state_stream` or `parent_streams` with any other (or absent) `coverage_strategy` value on that stream (see [Validation](#validation) rule 7 below): - -- **`state_stream` (single parent).** `streams[].state_stream` is a string naming exactly one other declared stream, and REQUIRES `coverage_strategy: "checkpoint_window"` on the declaring stream. It declares a static one-to-one mapping: this stream is always covered by that one parent's checkpoint, and the connector never emits `DETAIL_COVERAGE` for it — the runtime projects its checkpoint status from the parent's commit outcome directly, with no run-time override. A runtime MUST reject any `DETAIL_COVERAGE` message naming a `state_stream`-declared stream as its `stream` field, as a protocol violation (fail closed), regardless of what `state_stream` value that message reports. Use this shape for a stream that has no independent hydration lane of its own. -- **`parent_streams` (one or many parents).** `streams[].parent_streams` is a non-empty array naming one or more other declared streams, and REQUIRES `coverage_strategy: "parent_detail_accounting"` on the declaring stream. It declares that this stream runs its own list+detail hydration lane and emits one `DETAIL_COVERAGE` message per parent boundary per run (see [DETAIL_COVERAGE](#detail_coverage)); each declared parent's checkpoint is gated independently by its own coverage report and gap accounting, and a runtime MUST reject any `DETAIL_COVERAGE` message whose `state_stream` value is not a member of this declared set, as a protocol violation (see [Precedence between manifest and run-time evidence](#precedence-between-manifest-and-run-time-evidence)). Use this shape for a detail stream that can be fed by more than one independently checkpointed list stream in the same run, or that proves its own coverage rather than inheriting a parent's outcome unconditionally. - -#### Validation - -A conformant runtime MUST validate every stream's checkpoint-dependency declaration before spawning the connector, and MUST reject the manifest (fail closed, run not started) if any of the following holds: - -1. **Self-reference.** `state_stream` equals the declaring stream's own `name`, or `parent_streams` contains the declaring stream's own `name`. -2. **Unknown stream.** `state_stream`, or any entry of `parent_streams`, names a stream not present in `manifest.streams`. -3. **Duplicate parent.** `parent_streams` contains the same stream name more than once. -4. **Both fields present.** A stream declares both `state_stream` and `parent_streams`. A runtime MUST enforce this directly (as its own explicit check) rather than relying solely on `state_stream` and `parent_streams` being gated to mutually exclusive `coverage_strategy` values as an incidental side effect — the two fields being individually valid only under different `coverage_strategy` values does not excuse a runtime from also rejecting a manifest that sets both. -5. **Empty `parent_streams`.** `parent_streams` is present but has zero entries. (Omit the field entirely for a self-mapped stream.) -6. **Cycle.** Following `state_stream`/`parent_streams` edges from any stream, by any path, returns to that same stream. A cycle makes the dependency graph unresolvable to a topological commit order and MUST be rejected at manifest validation, not discovered at run time. This holds even for a runtime that resolves only direct, one-level parent declarations: two or more direct edges can still form a cycle (for example `A.state_stream = B` and `B.state_stream = A`, or a longer chain through direct edges only), so a runtime MUST implement genuine cycle detection over the declared dependency graph — see non-normative notes below. -7. **`coverage_strategy` mismatch.** A stream declares `state_stream` without `coverage_strategy: "checkpoint_window"` on that stream, or declares `parent_streams` without `coverage_strategy: "parent_detail_accounting"` on that stream. - -A manifest that passes this validation MUST have every stream's checkpoint-dependency edges forming a directed acyclic graph, terminating in one or more streams that are self-mapped (own checkpoint parent). - -**Non-normative notes:** - -- These are direct, single-level declarations — a stream names its parent(s) directly, not through a transitive chain it expects the runtime to resolve. A runtime MAY additionally reject a manifest whose declared edges are more than one level deep (e.g., stream C names parent B, and B itself names parent A) if its implementation does not resolve transitive chains; the reference implementation validates exactly one level and does not resolve chains beyond it. -- Rule 6 (cycle rejection) is a genuine, implemented check, not a consequence that falls out of rules 1–5 for free. A prior draft of this section claimed a one-level-only resolver made cycle rejection "vacuously true" through rules 1–5 alone; that claim was false — two or more direct edges can still form a cycle (`A.state_stream = B` and `B.state_stream = A`, or a longer chain through direct edges only) that no single-stream rule can see, since rules 1–5 each inspect one stream's own declared edges in isolation. The reference implementation performs real cycle detection (a depth-first search with a visiting/visited coloring) over the complete declared dependency graph — every `state_stream` and `parent_streams` edge across every stream — before spawning the connector, and has conformance tests proving rejection of a 2-cycle, a 3-cycle, and a mixed `state_stream`/`parent_streams` cycle, alongside a non-regression case proving two streams legitimately sharing one parent is not a false-positive cycle. This detection is provider-neutral: it operates purely on the manifest's declared graph, with no connector-specific logic. - -### Standard bindings - -| Binding | Descriptor | Meaning | -|---------|-----------|---------| -| `browser_automation` | `{ interface: "cdp", ws_url: string, headed_supported?: boolean }` | Runtime provides a CDP WebSocket to a managed browser. | -| `browser_profile` | `{ profile_path: string }` | Runtime provides a persistent browser profile directory. | -| `filesystem` | `{}` | Presence indicates local filesystem access. | -| `network` | `{}` | Presence indicates outbound network access. | -| `interactive` | `{}` | Presence indicates INTERACTION messages will be handled. | -| `loopback_listen` | `{}` | Presence indicates the connector may bind to local ports. | - ---- - -## 2. Connector Run Protocol - -Connectors communicate with the runtime via newline-delimited JSON (JSONL) over stdin/stdout. Each message is a single JSON object followed by a newline. - -### Runtime binding matching - -Before spawning a connector, the runtime checks the manifest's `runtime_requirements.bindings` against its own capabilities. If the runtime cannot satisfy a required binding, the run MUST fail with a clear error before the connector process is spawned. This follows the Kubernetes scheduler pattern: connectors declare requirements, runtimes advertise capabilities. - -### Connector process state machine - -The connector process transitions through the following states: - -| State | Description | -|-------|-------------| -| `initializing` | Before START is received on stdin. | -| `collecting` | Emitting RECORD, STATE, SKIP_RESULT, PROGRESS messages. | -| `waiting_for_interaction` | Emitted INTERACTION; blocked waiting for INTERACTION_RESPONSE on stdin. | -| `succeeded` | Emitted DONE with `status: "succeeded"`. Terminal. | -| `failed` | Emitted DONE with `status: "failed"`, or exited with non-zero status. Terminal. | - -**State transition table:** - -| Current State | Event | Action | Next State | -|--------------|-------|--------|-----------| -| `initializing` | START received | Initialize collection | `collecting` | -| `collecting` | Emit INTERACTION | Write to stdout; block on stdin | `waiting_for_interaction` | -| `collecting` | Emit DONE (succeeded) | Write to stdout; exit 0 | `succeeded` | -| `collecting` | Emit DONE (failed) | Write to stdout; exit non-zero | `failed` | -| `collecting` | Fatal error | Write to stderr; exit non-zero | `failed` | -| `collecting` | INTERACTION_RESPONSE received | Protocol violation (see below) | `failed` | -| `waiting_for_interaction` | INTERACTION_RESPONSE received | Unblock; process response | `collecting` | -| `waiting_for_interaction` | Emit INTERACTION | Protocol violation (see below) | `failed` | -| `waiting_for_interaction` | Fatal error | Write to stderr; exit non-zero | `failed` | -| Any | Runtime terminates process | (external) | `failed` | - -**Protocol violations:** - -- A connector MUST NOT emit INTERACTION while already in `waiting_for_interaction`. A runtime that receives a second INTERACTION in this state MUST terminate the connector process and mark the run as failed. **Note (non-normative):** Runtimes that process connector messages sequentially via a single-threaded message queue may make this violation unrepresentable in practice, because the queue serializes INTERACTION processing. The protocol rule remains valid for correct connector behavior and for runtime architectures that dispatch messages concurrently. -- A connector that receives INTERACTION_RESPONSE while in `collecting` (no pending INTERACTION) SHOULD treat it as a fatal protocol error, write a diagnostic to stderr, and exit with non-zero status. -- START is exactly-once. It MUST be the first message sent by the runtime. A connector that receives START while in any state other than `initializing` MUST treat it as a fatal protocol error. - -**Runtime behavior on failure:** The runtime MUST NOT persist STATE checkpoints from a run that terminates in the `failed` state, except for the certified stream-scoped failure described under [DONE](#done) or the restart-abandonment exception described under [Restart abandonment](#restart-abandonment). State is otherwise persisted only after a successful DONE. - -SKIP_RESULT is a message emitted while in the `collecting` state. It does not cause a state transition. - ---- - -## 3. Messages - -### Runtime to Connector - -#### START - -Initializes a collection run. - -```json -{ - "type": "START", - "run_id": "run_abc123", - "collection_mode": "incremental", - "scope": { - "streams": [ - { - "name": "top_artists", - "time_range": { - "since": "2025-10-11T00:00:00Z" - }, - "fields": [ - "id", - "name", - "genres", - "popularity", - "source_updated_at" - ] - } - ] - }, - "state": { - "top_artists": { "last_updated": "2026-03-01T00:00:00Z" } - }, - "bindings": { - "browser_automation": { - "interface": "cdp", - "ws_url": "ws://127.0.0.1:39011/devtools/browser/abc" - }, - "network": {} - } -} -``` - -| Field | Type | Description | -|-------|------|-------------| -| `run_id` | string | Unique identifier for this run. | -| `collection_mode` | enum | `full_refresh` or `incremental`. Derived from stream capabilities and runtime policy; not from the grant. | -| `scope` | object | Portable collection target for this run. Derived from a grant and local policy for grant-driven runs, or from user preferences and local policy for proactive runs. See `scope` fields below. | -| `state` | object or null | Map of stream names to cursor objects from previous STATE messages. For proactive runs this comes from the connector's global state namespace; for `continuous` grant runs it comes from the `grant_id`-scoped namespace; null on first run or `single_use` runs. | -| `bindings` | object | Map of binding names to descriptors for bindings provided to this run. | - -The START message does not include the raw grant or access token. It carries a normalized `scope` object instead. `scope` is not itself a grant and has no authorization force; it is the collection target for this run. For grant-driven runs, the runtime MUST derive `scope` from the grant, MUST NOT construct a scope broader than the grant permits, and MAY narrow it further according to local fulfillment policy (for example, collecting only the stale streams needed to satisfy the current request). For proactive runs, the runtime derives `scope` from user preferences or local policy. - -### `scope` fields - -| Field | Type | Description | -|-------|------|-------------| -| `streams` | CollectionStream[] | Explicit stream targets for this run. MUST be non-empty. Wildcards are not allowed in `START`; the runtime resolves them before spawning the connector. | - -### CollectionStream fields - -| Field | Type | Description | -|-------|------|-------------| -| `name` | string | Stream name to collect. | -| `resources` | string[] | Optional canonical key strings limiting the run to specific records within the stream. Same encoding as `resources` in the core grant model. | -| `time_range` | object | Optional temporal collection window with `since` / `until`, using the same semantics as the core grant model. | -| `fields` | string[] | Optional top-level emitted-field set for this run. When present, the runtime MUST include any schema-required fields and any additional top-level fields required for valid RECORD emission or RS ingest validation for that stream. | - -`START.scope` carries normalized collection targets only. It does not include issuance-time concepts such as `necessity` or unresolved `view` names; the runtime resolves those before spawning the connector. - -Connector obligations for `scope`: - -- A connector MUST NOT emit RECORD messages for streams absent from `scope.streams`. -- If `resources` or `time_range` is present for a stream, the connector MUST apply those constraints before emitting RECORD messages for that stream. -- If `fields` is present for a stream, the connector MUST NOT emit additional top-level fields in RECORD `data` for that stream, except that it MAY include schema-required or ingest-required top-level fields if the runtime omitted them accidentally. -- A connector that cannot honor a declared `resources`, `time_range`, or `fields` constraint for a stream MUST either emit `SKIP_RESULT` with `reason: "scope_not_supported"` and omit records for the skipped target, or fail the run. It MUST NOT silently broaden or ignore the constraint. -- A connector MAY retrieve broader source-side data transiently when the source platform cannot filter precisely, but it MUST still emit RECORD messages consistent with `scope`. - -Connector compliance is not the only enforcement backstop. The runtime and downstream write path MUST reject or discard emissions that fall outside the declared `scope`. - -**State management:** State is maintained at two levels: - -- **Global state:** Used and advanced only by proactive runs (no grant). Represents archival completeness for the user's data store. -- **Grant-scoped state:** Used and advanced by `continuous` grant runs, keyed by `grant_id`. The runtime reads and writes this namespace through `GET/PUT /v1/state/{connector_id}?grant_id={grant_id}`. It ensures recurring app syncs are incremental without interfering with global archival cursors. -- **Single-use runs:** Receive `state: null`. STATE messages emitted during single-use runs are not persisted. - -`bindings` contains a descriptor for every binding declared `required: true` in the manifest. For every required binding, the runtime MUST include a valid descriptor. Connectors MUST treat a missing required binding as a fatal protocol error. Connectors MUST ignore unknown binding keys. - -#### INTERACTION_RESPONSE - -Reply to an INTERACTION request. - -```json -{ - "type": "INTERACTION_RESPONSE", - "request_id": "req_001", - "status": "success", - "data": { "email": "user@example.com", "password": "..." } -} -``` - -| Field | Type | Description | -|-------|------|-------------| -| `request_id` | string | Matches the `request_id` from the INTERACTION being answered. | -| `status` | enum | `success`, `cancelled`, or `timeout`. | -| `data` | object | Response data. Present only when `status` is `success`. | - -On `timeout`, the runtime MUST send a response with `status: "timeout"` rather than leaving the connector blocked indefinitely. - ---- - -### Connector to Runtime - -#### RECORD - -A single data record. Same envelope as the core spec (Section 4). - -```json -{ - "type": "RECORD", - "stream": "top_artists", - "key": "4Z8W4fKeB5", - "data": { - "id": "4Z8W4fKeB5", - "name": "Radiohead", - "genres": ["alternative rock"], - "popularity": 82, - "source_updated_at": "2026-03-28T00:00:00Z" - }, - "emitted_at": "2026-04-06T15:01:00Z" -} -``` - -The `op` field (`upsert` or `delete`) is a directive to the resource server and is not stored as part of the record data. - -#### STATE - -Checkpoint for incremental sync. - -```json -{ - "type": "STATE", - "stream": "top_artists", - "cursor": { "last_updated": "2026-03-28T00:00:00Z" } -} -``` - -The runtime persists STATE only after preceding records are durably written to the resource server. Connectors SHOULD emit STATE periodically (e.g., every 1000 records) rather than only at the end of a stream. - -`stream` names the checkpoint (`state_stream`), which can differ from the data stream(s) it covers. A stream is its own checkpoint unless the manifest declares `state_stream` or `parent_streams` for it (see [Checkpoint dependency](#checkpoint-dependency)). Every `STATE` message's `stream` MUST be a checkpoint stream: either a data stream with no declared parent (self-mapped), or a stream named as another stream's `state_stream`/`parent_streams` target. A checkpoint stream's commit eligibility depends on the coverage and failure evidence of every data stream mapped to it — see [Eligible-checkpoint algorithm](#eligible-checkpoint-algorithm). - -The cursor object is opaque to the runtime and the resource server: its structure is defined by the connector and interpreted only by the connector on the next run. - -#### INTERACTION - -Request input from a user or agent. The connector blocks (does not emit further messages) until INTERACTION_RESPONSE arrives on stdin. - -```json -{ - "type": "INTERACTION", - "request_id": "req_001", - "kind": "credentials", - "message": "Log in to Spotify", - "schema": { - "type": "object", - "properties": { - "email": { "type": "string" }, - "password": { "type": "string", "format": "password" } - }, - "required": ["email", "password"] - }, - "timeout_seconds": 300 -} -``` - -| Kind | When to use | -|------|------------| -| `credentials` | Username/password login form. | -| `otp` | Two-factor authentication or verification code. | -| `manual_action` | An action the user must take in a headed browser (login, CAPTCHA, confirmation). | - -#### SKIP_RESULT - -Signals that a stream or resource was intentionally skipped. Does not cause a state transition. - -```json -{ - "type": "SKIP_RESULT", - "stream": "playlists", - "reason": "rate_limited", - "message": "Skipped playlists: rate limit reached" -} -``` - -`SKIP_RESULT` MAY also be used when a connector cannot honor a declared scope element for a stream or resource. In that case the `reason` MUST be `scope_not_supported`. - -`SKIP_RESULT` MAY carry an optional `recovery_hint`. See [Recovery hints](#recovery-hints) below for its shape and validation rules — the same rules apply here as for `DONE.error.recovery_hint`. - -`SKIP_RESULT` MAY carry an optional typed `continuation` fact when a bounded -page completed and the runtime owns the next page. It MUST contain -`boundary`, `slice_start`, `slice_end`, `considered`, `covered`, -`remaining: true`, and `owner: "runtime"`. The counts bind the continuation to -the exact proven page; a runtime MUST NOT treat an ordinary retryable skip as a -healthy continuation merely because its separate coverage denominator is full. -The fact proves only that slice. It MUST NOT imply complete history. - -#### DETAIL_COVERAGE - -Reports how completely a connector hydrated per-record detail for one checkpoint-parent boundary in a list+detail collection lane (a lane that fetches a list of records and then fetches per-record detail for at least a subset of them). Does not cause a state transition. - -```json -{ - "type": "DETAIL_COVERAGE", - "reference_only": true, - "stream": "message_attachments", - "state_stream": "messages", - "required_keys": ["msg_1", "msg_2", "msg_3"], - "hydrated_keys": ["msg_1", "msg_2"], - "gap_keys": ["msg_3"] -} -``` - -| Field | Type | Description | -|-------|------|--------------| -| `reference_only` | `true` | MUST be present and `true`. Marks this message as evidence about a run, not itself durable data. | -| `stream` | string | The detail stream this report covers. MUST be present in `scope.streams`. | -| `state_stream` | string | The checkpoint-parent stream this report's evidence gates. MUST be present in `scope.streams`. | -| `required_keys` | (string \| number)[] | The full set of record keys considered for detail under this parent boundary in this run. | -| `hydrated_keys` | (string \| number)[] | The subset of `required_keys` successfully fetched and emitted as `RECORD`. | -| `gap_keys` | (string \| number)[] | Optional. Keys for which a `DETAIL_GAP` was emitted this run. | - -A connector with a list+detail lane MUST emit one `DETAIL_COVERAGE` message per distinct `state_stream` boundary after that boundary's detail work for the run settles, and MUST place it after the last `RECORD` or `DETAIL_GAP` it emits for that detail stream and boundary in the run. A connector exempt from a per-record detail fetch (flat streams only) is not required to emit `DETAIL_COVERAGE`. - -**Non-normative note:** this ordering rule is a conformance obligation on the connector; the reference implementation does not currently enforce message sequence/ordering for `DETAIL_COVERAGE` at the runtime level (it accepts the message whenever it arrives and evaluates coverage as of terminal DONE). A runtime MAY choose to validate ordering explicitly; the eligible-checkpoint algorithm's correctness in the reference implementation does not depend on runtime-side ordering enforcement, only on the connector honestly reporting complete state by the time DONE is evaluated. - -**Key-set validation.** Within one portable v0.1 `DETAIL_COVERAGE` message: - -- `required_keys`, `hydrated_keys`, and `gap_keys` MUST each contain no duplicate key. -- Every key in `hydrated_keys` or `gap_keys` MUST also appear in `required_keys`. -- A key in `required_keys` that appears in neither outcome set is an unaccounted key: its parent boundary's coverage is incomplete (see [Eligible-checkpoint algorithm](#eligible-checkpoint-algorithm)). - -**Multi-parent streams.** A detail stream declared with manifest `parent_streams` (see [Checkpoint dependency](#checkpoint-dependency)) MAY emit more than one `DETAIL_COVERAGE` message in the same run — one per parent boundary that settled. The runtime MUST evaluate and gate each declared parent's checkpoint independently from the others' coverage; it MUST NOT reject two `DETAIL_COVERAGE` messages solely because they share the same `stream` while their `state_stream` values differ. Every `state_stream` value reported MUST be a member of the stream's manifest-declared `parent_streams` set — a runtime MUST reject a `DETAIL_COVERAGE` naming a `state_stream` outside that set as a protocol violation (see [Precedence between manifest and run-time evidence](#precedence-between-manifest-and-run-time-evidence)). - -**Reference-implementation extension: `optional_skip_keys`.** The reference implementation accepts an additional `optional_skip_keys` outcome set as a non-portable extension. It MUST NOT be used to claim portable v0.1 conformance: an independent v0.1 runtime may reject the extension or treat those keys as unaccounted, and the v0.1 checkpoint algorithm below does not credit it. A runtime and connector that explicitly opt into the reference extension MAY credit a key only when the connector has affirmative, provider-authored evidence of a terminal, record-specific absence. Operator or deployment configuration alone is never sufficient. An HTTP status code alone, response age alone, transport failure, retry exhaustion, or generic access denial MUST leave the key unaccounted and therefore retryable. A future profile revision MUST standardize the manifest declaration and value vocabulary before accepted absence becomes a portable checkpoint outcome. - -#### DETAIL_GAP - -Reports a durable, retryable per-record detail failure within a list+detail lane. Does not cause a state transition. - -```json -{ - "type": "DETAIL_GAP", - "stream": "message_attachments", - "parent_stream": "messages", - "record_key": "msg_3", - "reason": "temporary_unavailable", - "retryable": true, - "detail_locator": { "message_id": "msg_3" } -} -``` - -| Field | Type | Description | -|-------|------|--------------| -| `stream` | string | The detail stream the failing record belongs to. MUST be present in `scope.streams`. | -| `parent_stream` | string | Optional. The checkpoint-parent boundary this gap is scoped to. MUST match a `DETAIL_COVERAGE.state_stream` value the connector reports for this `stream` in the same run when the detail stream has more than one declared parent (see below). | -| `record_key` | string \| number | Optional. The detail record's key within `stream`. | -| `reason` | string | Optional. Connector-defined failure reason. | -| `retryable` | boolean | Optional. Whether the connector considers this gap retryable. | -| `detail_locator` | object | Optional. Connector-opaque data sufficient to retry this detail fetch independently on a future run. MUST NOT contain secrets. | -| `list_cursor`, `last_error` | object | Optional connector-opaque diagnostic objects. | -| `gap_id`, `lease_id` | string | Optional. Identify a durable, runtime-served gap-recovery lease when the runtime's out-of-band gap-recovery mechanism is in use. Reference-implementation-specific; not required for profile conformance. | - -**Parent scoping and key collision.** A `DETAIL_GAP` names the checkpoint boundary it accounts for via `parent_stream`. For a `stream` with exactly one declared parent (`state_stream`, or a single-entry `parent_streams`), `parent_stream` MAY be omitted; the runtime MUST treat the omission as naming that one parent. For a `stream` with more than one declared parent, the runtime MUST treat a `DETAIL_GAP` with no `parent_stream`, or with a `parent_stream` not matching the coverage report being evaluated, as **not** accounting for that report's required key — even when the `stream` and `record_key` match exactly. The same detail key can be legitimately gapped under one parent while hydrated or covered under a different parent in the same run; a gap recorded against one parent MUST NOT satisfy another parent's coverage. A `DETAIL_GAP` emitted before this section's parent-scoping rule existed (no `parent_stream`) satisfies coverage only for a `stream` that has exactly one declared parent; it MUST NOT be treated as satisfying any one parent of a stream with more than one declared parent. - -A `gap_keys` entry in `DETAIL_COVERAGE` is not by itself proof of a durable retry obligation. The runtime MUST additionally confirm a matching `DETAIL_GAP` exists for the same `stream` and parent boundary before crediting that key as accounted; an unmatched `gap_keys` entry leaves the key unaccounted for coverage purposes, with the same fail-closed effect as a key omitted from every outcome set. - -#### PROGRESS - -Optional progress update for display in runtime UIs. - -```json -{ - "type": "PROGRESS", - "stream": "messages", - "message": "Downloaded 500 of 2196 messages", - "count": 500, - "total": 2196 -} -``` - -#### DONE - -Signals completion. Must be the final message emitted by the connector. - -```json -{ - "type": "DONE", - "status": "succeeded", - "records_emitted": 2196 -} -``` - -On failure: - -```json -{ - "type": "DONE", - "status": "failed", - "records_emitted": 0, - "error": { "message": "Authentication failed", "retryable": true } -} -``` - -| Status | Meaning | -|--------|---------| -| `succeeded` | Collection completed. Runtime persists final STATE. | -| `failed` | Collection failed. Runtime does not persist STATE unless the messages certify a stream-scoped failure as described below. | -| `cancelled` | Collection was cancelled (e.g., user revoked mid-run). Runtime does NOT persist STATE. | - -A failed run certifies a **stream-scoped failure** only when both of these conditions hold: - -1. `DONE.error.code` is `stream_collection_failed`. -2. The run previously emitted at least one in-scope `SKIP_RESULT` with `reason: "stream_collection_failed"` and a non-empty `stream` naming each failed data stream. - -A runtime MUST verify condition 2 structurally (a named, in-scope `SKIP_RESULT` was actually observed this run) and MUST NOT treat `DONE.error.code` alone as certification. If condition 1 holds but no in-scope `SKIP_RESULT{reason: "stream_collection_failed"}` was observed, the run is an ordinary uncertified failure and the default fail-closed rule applies: no staged STATE is persisted. - -**Cancellation precedence.** If the runtime has recorded an owner-initiated cancellation for the run (for example, a mid-run revocation), the runtime MUST resolve the run as `cancelled` and MUST NOT evaluate or apply the stream-scoped-failure exception, even if the connector emitted a structurally certified `DONE{status: "failed", error.code: "stream_collection_failed"}` before the runtime observed the cancellation. Cancellation is checked, and takes precedence, before a terminal DONE is evaluated for certification. - -##### Eligible-checkpoint algorithm - -For a certified stream-scoped failure, the runtime MAY persist staged STATE for checkpoint streams that do not cover any named failed data stream. A runtime that implements this exception MUST compute eligibility as follows, run against the run's complete staged `STATE` map (every checkpoint stream for which a `STATE` message was received this run): - -1. **Resolve each failed data stream to its checkpoint stream(s).** For each data stream named by an in-scope `SKIP_RESULT{reason: "stream_collection_failed"}`, compute its set of checkpoint parents using the manifest's static declaration, per [Precedence between manifest and run-time evidence](#precedence-between-manifest-and-run-time-evidence): the manifest's `state_stream` (single parent), or the manifest's full declared `parent_streams` set (every declared parent, whether or not it received a live `DETAIL_COVERAGE` report this run — a failed stream's live evidence is inherently incomplete, so every declared parent is a candidate to withhold); if neither is declared, the stream is self-mapped (its own name is its one checkpoint parent). -2. **Union every failed data stream's checkpoint parents** into one set of ineligible checkpoint streams. -3. **Compute detail-coverage shortfalls independently of the failure.** For every staged checkpoint stream, evaluate every `DETAIL_COVERAGE` report gating it: a report is incomplete if any `required_keys` entry is unaccounted (present in neither `hydrated_keys` nor a `gap_keys` entry backed by a matching `DETAIL_GAP` for the same stream and parent boundary — see [DETAIL_GAP](#detail_gap)), or if a manifest-declared parent relationship for an in-scope detail stream has no `DETAIL_COVERAGE` report at all this run. Add every checkpoint stream with an incomplete report to the ineligible set. A reference-implementation extension MAY additionally credit its explicitly opted-in `optional_skip_keys`, but that is not portable v0.1 behavior. -4. **Commit every staged checkpoint stream not in the ineligible set.** The runtime MUST NOT persist STATE for any checkpoint stream in the ineligible set (from step 2 or step 3). -5. **Partial checkpoint-store failure.** If persisting an individual eligible checkpoint stream's STATE fails after the eligibility set is computed (for example, a resource-server write error), the runtime MUST fail the run as a runtime error. A partial commit failure MUST NOT be reported as `succeeded`, and any checkpoint stream not yet committed at the point of failure remains eligible for retry on the next run. The runtime MUST make the following observable, though not necessarily from a single field or object: the total count of checkpoint streams staged and the total count durably committed before the failure (a bounded numeric summary; this MAY be all a single terminal-result field exposes), the identity of the specific checkpoint stream whose persistence attempt failed (for example, in a diagnostic message or a dedicated failure event), and the identity of each checkpoint stream that was durably committed before the failure (for example, via a per-stream commit event emitted at the time of that commit, or by reading back the durably persisted state after the run). A runtime is not required to expose a single response field naming every staged-and-committed stream together; it MUST NOT expose only bounded counts with no path at all to recovering which specific streams committed. - -The run's own status remains `failed` regardless of how many checkpoint streams commit under this exception; every named failed data stream, and every checkpoint stream withheld under steps 2–3, remains unproven and eligible for retry on the next run. - -A missing or mismatched terminal code, a missing or untargeted skip, an out-of-scope stream, a protocol violation, an invalid terminal count or exit code, a process exit without valid DONE, or cancellation MUST preserve the default fail-closed rule and persist no staged STATE. - - -**Restart abandonment.** A process exit without valid DONE caused by the CONTROLLER being replaced or restarted -- not by the connector failing -- MAY persist a staged STATE checkpoint for a checkpoint stream that satisfies ALL of the following, and MUST persist none otherwise: - -1. The run's terminal reason is a controller-lifecycle reason (the controller died; the connector did not report failure). -2. The checkpoint stream is not a declared detail-coverage parent in the connector's manifest, so it can never face a DONE-time coverage verdict. Eligibility is derived from the MANIFEST alone; a connector MUST NOT be able to declare its own eligibility. -3. The stream has no pending detail gap and no unproven coverage for the completed prefix. - -This exception exists because a walk longer than the interval between controller restarts can otherwise never converge -- it is a completeness failure, not a slowness one. It does not weaken the invariant that a cursor MUST NOT advance past records whose coverage was not proven: a stream that could face such a verdict is excluded by condition 2, and unproven coverage is excluded by condition 3. The run's status remains failed/abandoned and every withheld stream stays eligible for retry. - -`error` MAY carry `code` and/or `recovery_hint`, in addition to the required `message` and `retryable`: - -- `code` is a stable, connector-defined **cause identity** (e.g. distinguishing one failure mode from another). It is a bounded `snake_case` identifier (a lowercase letter followed by up to 63 lowercase letters, digits, or underscores), an identity rather than an instruction — the runtime MUST NOT treat `code` as, or derive, an owner-facing recovery action from it. -- `recovery_hint` is the connector's declaration of the owner-facing **recovery action**. It uses the exact same bounded shape and vocabulary as `SKIP_RESULT.recovery_hint` — see [Recovery hints](#recovery-hints). - -`code` and `recovery_hint` answer different questions (what went wrong vs. what to do about it) and MUST be validated and consumed independently; a runtime MUST NOT infer one from the other. - -#### Precedence between manifest and run-time evidence - -A data stream's checkpoint parent(s) are declared statically in the manifest (`state_stream` or `parent_streams`). The manifest is authoritative: it declares the permitted parent shape, and the connector's own `DETAIL_COVERAGE` messages (`state_stream` field, per message) may only select or report evidence within that declared shape for a given run — they MUST NOT introduce a parent the manifest did not declare, and MUST NOT override a static single-parent declaration. A runtime MUST resolve a data stream's checkpoint parent(s), and validate live evidence against that resolution, as follows: - -1. **`state_stream` (static single parent).** The stream's checkpoint parent is always the manifest's declared `state_stream`, for every run, with no run-time override. The connector MUST NOT emit `DETAIL_COVERAGE` naming this stream as `stream` at all; a runtime MUST reject any such message as a protocol violation (fail closed), regardless of what `state_stream` value it reports. -2. **`parent_streams` (declared parent set).** The stream's checkpoint parents are the manifest's declared set. A runtime MUST reject any `DETAIL_COVERAGE` message naming this stream as `stream` whose `state_stream` value is not a member of the declared set, as a protocol violation (fail closed). For a declared parent that HAS a live `DETAIL_COVERAGE` report this run, that report's own coverage/gap accounting gates its checkpoint (see [Eligible-checkpoint algorithm](#eligible-checkpoint-algorithm)). For a declared parent with NO live report this run, where the data stream is in-scope and has staged state, the runtime MUST treat that parent boundary as unproven and withhold it — the same fail-closed treatment as an incomplete coverage report — rather than silently dropping it from the dependency set or silently treating it as satisfied. -3. **Self-mapping is the default.** If the stream declares neither `state_stream` nor `parent_streams`, its own name is its one checkpoint parent, and it is unaffected by any of the above. - -This is a manifest-is-authoritative model: live evidence for a run can select or report within the manifest's declared shape, but can never contradict, widen, or override it. There is a conflict-rejection case for manifest vs. run-time evidence, unlike prior drafts of this section: a `state_stream`-declared stream that emits any `DETAIL_COVERAGE` is rejected outright, and a `parent_streams`-declared stream's `DETAIL_COVERAGE` naming a parent outside its declared set is rejected outright. A manifest declaring `parent_streams: ["a", "b"]` MAY see the connector's live evidence for a given run name only `"a"` (for example, if `"b"`'s boundary produced no detail this run); the runtime withholds `"b"`'s checkpoint as unproven for this run rather than treating the narrower live report as redefining the declared dependency. - -#### Recovery hints - -`SKIP_RESULT.recovery_hint` and `DONE.error.recovery_hint` share one bounded, provider-neutral shape and vocabulary: - -- `recovery_hint` is either a bare string from the closed action vocabulary below, or an object `{ action: string, retryable?: boolean }` where `action` MUST be present and from that vocabulary, and `retryable`, if present, MUST be a boolean. -- An empty object `{}` or an object with only `retryable` field is a **protocol violation**: if a connector supplies a recovery hint as an object, the `action` field is mandatory. -- Action vocabulary: `retry_by_runtime`, `retry_on_connector_upgrade`, `refresh_credentials`, `manual_action_required`, `update_selector`, `upstream_unblock`, `not_retriable`, `unknown`. -- A connector requests a specific owner-facing recovery action **only** through `recovery_hint`. A present, valid `recovery_hint` is authoritative: a runtime MUST NOT override it, and MUST NOT treat `code`, `message`, or any other connector-authored free-form text as the connector's requested action. -- A runtime MUST treat an absent `recovery_hint` as "no hint declared," and MAY fall through to its own generic, connector-neutral policy for choosing a default action — for example from the `retryable` flag, or from bounded, provider-neutral classification of the error text (such as recognizing generic authentication or browser-infrastructure failures). That fallback MUST NOT infer provider-specific intent, and MUST NOT be, or become, a connector-specific text/identity heuristic. -- A `recovery_hint` that is present but does not match the shape or vocabulary above is a **protocol violation**: the runtime MUST reject the enclosing message (fail closed), not silently drop the field or substitute a guessed action. - ---- - -## 4. Connector Conformance - -A conformant connector: - -1. Reads START from stdin before emitting any messages. -2. Emits only valid JSONL messages as defined in this profile. -3. Emits DONE as the final message in all cases (including failures where possible). -4. Emits STATE periodically for streams that support incremental sync. -5. Does not store secrets (credentials, OTP codes) in STATE. -6. Does not emit INTERACTION while in `waiting_for_interaction`. -7. Treats missing required bindings as fatal errors. -8. Exits with status 0 on `succeeded`, non-zero on `failed` or `cancelled`. -9. Emits RECORD messages only within the `scope` provided in START: no undeclared streams, no records outside declared `resources` or `time_range`, and no extra top-level fields when `fields` is present. -10. If it cannot honor a declared `resources`, `time_range`, or `fields` constraint, emits an explicit `SKIP_RESULT` or fails the run; it never silently broadens scope. -11. If it runs a list+detail lane, emits `DETAIL_COVERAGE` per checkpoint-parent boundary per run, with every required key accounted in `hydrated_keys` or `gap_keys` backed by a matching `DETAIL_GAP` (see [DETAIL_COVERAGE](#detail_coverage)). The reference implementation's `optional_skip_keys` extension is not required for portable v0.1 conformance. -12. Scopes every `DETAIL_GAP` to the checkpoint-parent boundary it accounts for via `parent_stream` whenever the affected detail stream has more than one declared parent. - -### A conformant connector runtime: - -1. Performs binding matching before spawning the connector process. -2. Sends START as the first and only START message. -3. Handles INTERACTION messages by prompting the user or agent and sending INTERACTION_RESPONSE. -4. Sends INTERACTION_RESPONSE with `status: "timeout"` if no response arrives within `timeout_seconds`. -5. Persists STATE only after preceding records are durably written. -6. Does NOT persist STATE on `cancelled` runs or uncertified `failed` runs; for a certified stream-scoped failure, persists only staged checkpoint streams computed eligible under the [Eligible-checkpoint algorithm](#eligible-checkpoint-algorithm). Checks for and honors an owner-initiated cancellation before evaluating a terminal DONE for stream-scoped-failure certification. -7. Uses the connector's global state namespace for proactive runs, the `grant_id`-scoped namespace for `continuous` grant runs, and `state: null` for `single_use` runs. -8. Terminates the connector process on protocol violations. -9. Does not log or persist credential data from INTERACTION_RESPONSE. -10. Sends an explicit non-empty `scope` in START. For grant-driven runs, this scope is a normalized, possibly narrowed projection of the grant and MUST NOT include wildcard stream names. -11. For grant-driven runs, never constructs a `scope` broader than the grant permits. -12. Rejects or discards connector emissions that fall outside the declared `scope` before durable write. -13. Terminates an active grant-driven run as soon as practical after learning that the grant was revoked. -14. Validates every stream's checkpoint-dependency declaration (`state_stream`/`parent_streams`) before spawning the connector, and fails closed (does not start the run) on self-reference, an unknown parent, a duplicate parent, both fields present on one stream, an empty `parent_streams`, or a cycle of any length in the declared dependency graph (see [Checkpoint dependency: Validation](#validation)). Cycle detection (rule 6) is implemented and tested as a genuine check over the complete declared graph — not satisfied vacuously by the other checks — because two or more direct edges can form a cycle that a single-stream check cannot see (see the non-normative notes under [Validation](#validation)). -15. Resolves a data stream's checkpoint parent(s) for a run from the manifest's static declaration only (`state_stream` or the full declared `parent_streams` set), and validates any live `DETAIL_COVERAGE` evidence against that declared shape: rejects a `state_stream`-declared stream's DETAIL_COVERAGE outright, rejects a `parent_streams`-declared stream's DETAIL_COVERAGE naming an undeclared parent, and withholds a declared parent that received no live report this run rather than dropping it or treating it as satisfied (see [Precedence between manifest and run-time evidence](#precedence-between-manifest-and-run-time-evidence)). -16. Fails the run as a runtime error, without reporting `succeeded`, if persisting an eligible checkpoint's STATE fails partway through committing multiple staged checkpoints; makes the staged/committed counts, the failing checkpoint stream's identity, and each committed checkpoint stream's identity observable (not necessarily from one field — see [Eligible-checkpoint algorithm](#eligible-checkpoint-algorithm) step 5). - ---- - -## 5. TypeScript Types - -```typescript -type InteractionKind = 'credentials' | 'otp' | 'manual_action'; -type StreamState = Record>; -type TimeRange = { since?: string; until?: string }; -type CollectionStream = { - name: string; - resources?: string[]; - time_range?: TimeRange; - fields?: string[]; -}; -type CollectionScope = { - streams: CollectionStream[]; -}; - -type ManifestStream = { - name: string; - incremental?: boolean; - // A stream MUST declare at most one of state_stream / parent_streams. - // Neither present means the stream is its own checkpoint (self-mapped). - state_stream?: string; - parent_streams?: string[]; // non-empty when present - [key: string]: unknown; -}; - -type RuntimeMessage = - | { - type: 'START'; - run_id: string; - collection_mode: 'full_refresh' | 'incremental'; - scope: CollectionScope; - state: StreamState | null; - bindings: Record>; - } - | { - type: 'INTERACTION_RESPONSE'; - request_id: string; - status: 'success' | 'cancelled' | 'timeout'; - data?: Record; - }; - -type ConnectorMessage = - | { - type: 'RECORD'; - stream: string; - key: string | string[]; - data: Record; - emitted_at: string; - op?: 'upsert' | 'delete'; - } - | { - type: 'STATE'; - stream: string; - cursor: Record; - } - | { - type: 'INTERACTION'; - request_id: string; - kind: InteractionKind; - message: string; - schema?: Record; - timeout_seconds?: number; - } - | { - type: 'SKIP_RESULT'; - stream?: string; - reason?: string; - message?: string; - recovery_hint?: RecoveryHint; - } - | { - type: 'DETAIL_COVERAGE'; - reference_only: true; - stream: string; - state_stream: string; - required_keys: (string | number)[]; - hydrated_keys: (string | number)[]; - gap_keys?: (string | number)[]; - } - | { - type: 'DETAIL_GAP'; - stream: string; - parent_stream?: string; - record_key?: string | number; - reason?: string; - retryable?: boolean; - detail_locator?: Record; - list_cursor?: Record; - last_error?: Record; - gap_id?: string; - lease_id?: string; - } - | { - type: 'PROGRESS'; - stream?: string; - message: string; - count?: number; - total?: number; - } - | { - type: 'DONE'; - status: 'succeeded' | 'failed' | 'cancelled'; - records_emitted: number; - error?: { code?: string; message: string; recovery_hint?: RecoveryHint; retryable: boolean }; - }; - -type RecoveryAction = - | 'retry_by_runtime' - | 'retry_on_connector_upgrade' - | 'refresh_credentials' - | 'manual_action_required' - | 'update_selector' - | 'upstream_unblock' - | 'not_retriable' - | 'unknown'; - -type RecoveryHint = RecoveryAction | { action: RecoveryAction; retryable?: boolean }; -``` diff --git a/apps/site-blume-spike/content/specification/spec-core.md b/apps/site-blume-spike/content/specification/spec-core.md deleted file mode 100644 index 6d72a1134..000000000 --- a/apps/site-blume-spike/content/specification/spec-core.md +++ /dev/null @@ -1,1897 +0,0 @@ ---- -title: "Personal Data Portability Protocol (PDPP) v0.1.0" -description: "Authorization and disclosure semantics for personal data — record model, selection request, grant, manifest, and resource server interface." ---- - -> **Spec status** -> -> Status: **Normative draft** -> -> Date: 2026-08-14 - -## 1. Introduction {#introduction} - -PDPP is an authorization and disclosure protocol for personal data. It defines how a user authorizes an application to access specific data from a data source that holds their records, and how a resource server enforces that authorization. - -The protocol specifies: - -- A **record model** for representing personal data as flat relational streams -- A **selection request** format, the structured request for consent a client submits during authorization (RFC 9396 envelope) -- A **grant** object representing user-approved, parameterized consent -- A **source declaration** describing the consent, record, selection, and query - surface exposed by either a connector-backed or provider-native source -- A **resource server interface** for serving records under grant enforcement - -**Design axiom:** Source declarations define what can be requested. Grants define what was approved. These are separate concerns and must not be conflated. - -Most source platforms do not yet expose a PDPP interface natively. Collection is the bridge for those sources: it brings their data into a resource server so the protocol's consent and enforcement layers can govern access to it. The companion [PDPP Collection Profile](spec-collection-profile) standardizes that bridge. The core protocol is useful without it: a resource server holding pre-collected data can serve that data under grant enforcement with no collection machinery involved, and data may also reach it via regulatory data exports, manual import, or platform-native APIs. The consent and enforcement layers defined in this specification (Sections 5-8) are agnostic to the collection method. - -Any implementation satisfying the role conformance criteria in Section 9 is PDPP-compliant. This specification does not depend on any specific network, token, ledger, infrastructure provider, hosted service, centralized registry lookup, or deployment of this repository. URI identifiers name sources, purposes, clients, and resources; they do not make the example registries in this document runtime dependencies. Consent integrity comes from the resolved grant and the exact source declaration snapshot retained by the authorization server. - -### Interoperable core sections - -Sections 4-8 define the protocol surfaces that implementations evaluate independently. - -| Section | Governs | Other layers | -| --- | --- | --- | -| [Section 4: Record Model](#record-model) | Portable record envelopes, stream identity, primary keys, blob references, resource references, stream semantics, and incremental-sync metadata. | Source collection, connector execution, and storage-engine choices. | -| [Section 5: Source Declaration](#source-declaration) | Common source identity, consent, record, selection, and query capabilities used by connector-backed and provider-native sources. | Declaration discovery and trust; connector acquisition and execution mechanics. | -| [Section 6: Selection Request](#selection-request) | What a client asks an authorization server to approve, plus declaration-backed validation and consent rendering before a grant is issued. | Product-specific consent flows, screen layouts, and hosted authorization-server deployments. | -| [Section 7: Grant](#grant) | The immutable consent artifact and the constraints a resource server enforces for a token-bound client. | Grant database schema, signed-token format, hosted registries, and deployment topology. | -| [Section 8: Resource Server Interface](#resource-server-interface) | The interoperable record-query and blob-fetch interface under grant enforcement. | Authorization-server deployment, storage backend, collection runtime, operator dashboard, and hosted service choices. | - -### Relationship to existing standards - -| Standard | Relationship | -|----------|-------------| -| [OAuth 2.0](https://www.rfc-editor.org/rfc/rfc6749) (RFC 6749) | PDPP is a profile of OAuth 2.0, carrying selection requests in RFC 9396 authorization_details. The grant is issued as the result of an OAuth authorization flow. | -| [RFC 9396](https://www.rfc-editor.org/rfc/rfc9396) (RAR) | PDPP uses the `authorization_details` envelope for selection requests. The `type` URI is `https://pdpp.dev/data-access`. | -| [RFC 6750](https://www.rfc-editor.org/rfc/rfc6750) (Bearer Token) | PDPP transports both owner tokens and client tokens as RFC 6750 Bearer Tokens on the wire. The resource server distinguishes token kind via `pdpp_token_kind` in the introspection response, not by token syntax. | -| [RFC 7662](https://www.rfc-editor.org/rfc/rfc7662) (Token Introspection) | PDPP uses authenticated RFC 7662 token introspection where the authorization server and resource server are separated, so the resource server can resolve grant-bound tokens. Co-located deployments may use a local equivalent. | -| [OAuth 2.0 Dynamic Client Registration](https://www.rfc-editor.org/rfc/rfc7591) (RFC 7591) | PDPP reuses the RFC 7591 client metadata vocabulary (`client_name`, `logo_uri`, `policy_uri`, and similar fields) for the consent display. A dynamic client registration endpoint is a deployment choice and is required only where deployments need it; Core functions without it. | -| [SMART on FHIR](https://hl7.org/fhir/smart-app-launch/) | Follows the domain-profile-over-OAuth pattern PDPP adopts: OAuth handles authorization, and the profile adds a domain data model, consent semantics, and a conformance regime. SMART on FHIR reached ubiquity through regulatory adoption of SMART-on-FHIR-patterned API requirements (the ONC Cures Act rule). | -| [UK Open Banking](https://www.openbanking.org.uk/standards/) | Also follows the domain-profile-over-OAuth pattern PDPP adopts: OAuth handles authorization, and the profile adds a domain data model, consent semantics, and a conformance regime. UK Open Banking reached ubiquity through the CMA's Open Banking mandate for the largest UK banks. | -| [UMA 2.0](https://kantarainitiative.org/uma-2-0-2/) (Kantara) | UMA is important prior art for PDPP's user-managed, standing, revocable access model, particularly where an outside party seeks access to user-controlled resources. PDPP's authorization protocol derives directly from OAuth 2.0 and RFC 9396. | -| [GNAP](https://www.rfc-editor.org/rfc/rfc9635) (RFC 9635) | GNAP is an IETF authorization protocol that revisits OAuth-style delegation with a new protocol design. Several design decisions are directly relevant to PDPP: (1) interaction modes beyond browser redirects (relevant to nonstandard authorization interaction patterns); (2) request continuation for multi-step consent negotiation (relevant to optional streams); (3) key-bound grants instead of bearer tokens (stronger security for ongoing personal data access); (4) built-in grant management with revocation and rotation (relevant to `continuous` access mode). PDPP v0.1 uses OAuth 2.0 + RFC 9396. A future version should evaluate whether GNAP is a better foundation. PDPP's entity-scoped `client_display` already follows GNAP's pattern of carrying client display metadata inline in the request. For key-bound tokens specifically, DPoP (RFC 9449) offers an OAuth-native path to GNAP-style sender-constrained tokens and is a candidate optional hardening profile for v0.2. | -| [Solid](https://solidproject.org) | Solid takes the full re-architecture approach: personal data moves into user-controlled pods with RDF/Linked Data semantics, which requires source platforms to adopt the model or users to migrate off-platform. PDPP instead layers on existing OAuth infrastructure and bootstraps data supply through the Collection Profile, without requiring source platforms to adopt anything. | -| [Data Transfer Project](https://github.com/dtinit/data-transfer-project) (DTI) | PDPP and DTI are complementary. The Data Transfer Project handles transfer mechanics, and DTI's stated position is that there is "no silver bullet" for portability: multiple approaches coexist. DTI's Data Trust Registry (post-pilot, 2026) addresses who is trusted: it vets services seeking access to platforms' portability interfaces so that platforms can rely on shared trust signals. PDPP addresses what was consented and how it is enforced (the grant and the resource server interface); a trust registry and PDPP's consent semantics compose rather than compete. The two protocols can chain. See Appendix B. | -| [Airbyte](https://airbyte.com) / [Singer](https://www.singer.io) | PDPP borrows the RECORD/STATE checkpoint pattern for incremental sync. This record and state-checkpoint lineage informs the Collection Profile companion specification; it appears here for reader orientation and is informative for Core. | -| [GDPR](https://eur-lex.europa.eu/eli/reg/2016/679/oj) | PDPP implements data minimization through stream and field selection. It also carries machine-readable purpose declarations (`purpose_code`) that support consent display, local policy, and implementation-defined audit or transparency mechanisms, with an explicit protocol-level consent rule for `ai_training`. The internal version history required for incremental sync may support implementations that choose to expose historical access features to users. Whether such exposure is required is outside the scope of this specification. This alignment is informative only and is not a required v0.1 capability. | -| [DMA](https://eur-lex.europa.eu/eli/reg/2022/1925/oj) | The `continuous` access mode enables ongoing portability aligned with the DMA's requirements. Article 6(9) requires effective portability with continuous and real-time access to the end user's data; PDPP's continuous grants and incremental sync map to that requirement. This alignment is informative only and is not a required v0.1 capability. | -| [EU Data Act](https://eur-lex.europa.eu/eli/reg/2023/2854/oj) (Regulation 2023/2854) | The Data Act's Article 5(1) flow, where a user directs a data holder to make data available to a third party, is the same triangle as PDPP's owner, source, and client. Article 2(12) defines the user as a natural or legal person, matching PDPP's subject-neutral owner. It applies from 12 September 2025, requires access by design for connected products placed on the market after 12 September 2026, and names no protocol. | - -**Note:** The PDPP Collection Profile is one fulfillment mechanism. A conformance test suite for this specification is planned but is not defined in v0.1 (see Section 9). - ---- - -## 2. Terminology and Actors - -### Actors - -| Actor | Definition | -|-------|-----------| -| **User** | The person whose data is being accessed. Owns the data, approves grants, may revoke. | -| **Client** | An application or AI agent requesting user data. Identified by `client_id`. In OAuth terms, this is the client. | -| **Data Source** | Any external system from which a user's data originates: a consumer platform, a SaaS application, a device, a local archive, a financial institution, or other system. | - -The owner is the authenticated subject whose records the source holds. Typically this is a person; the protocol itself is subject-neutral, and an organization that authenticates as the account holder participates identically. - -### Protocol roles - -These roles may be co-located in a single deployment (e.g., a personal server acting as both authorization server and resource server) or separated. The spec defines the interfaces between roles, not the deployment topology. - -| Role | Responsibility | -|------|---------------| -| **Authorization Server** | Issues and manages grants. Validates selection requests against retained source declaration snapshots. Tracks grant lifecycle (active, expired, revoked). | -| **Resource Server** | Stores records as flat relational streams. Serves records to clients filtered by grant parameters. | - -The [PDPP Collection Profile](spec-collection-profile) defines a third role: - -| Role | Responsibility | -|------|---------------| -| **Connector Runtime** | Runs connectors. Writes collected records to the resource server. Manages incremental sync state. | - -In many deployments, a single **personal server** fills all three roles. The spec uses "personal server" when referring to a combined deployment, and the specific role name when the distinction matters. - -**Note on the Authorization Server interface:** This spec defines the resource server interface normatively because cross-deployment interoperability requires it: a client written against the interface works with any conformant resource server regardless of who operates it or where data lives. The authorization server interface is not normatively specified in v0.1 because user-facing authorization flows are deployment-specific. The reference implementation uses the OAuth authorization code flow with RFC 9396 authorization_details for client grants, and OAuth device authorization for owner tokens. - -**Token resolution:** User-facing authorization flows are deployment-specific and are not normatively specified in v0.1. However, when the AS and RS are deployed separately, the AS-to-RS token-resolution contract is normative: the RS MUST authenticate to the RFC 7662 introspection endpoint and resolve the complete grant enforcement context from its response. The RS MUST enforce the request from that response and MUST NOT make a second AS lookup. For co-located deployments, a local equivalent (shared database or function call) is acceptable. Self-contained JWTs may be used as an optimization but MUST NOT be the sole revocation mechanism (see Section 10). - -### Data concepts - -| Term | Definition | -|------|-----------| -| **Grant** | An immutable consent artifact specifying what data a client may access, under what constraints. | -| **Stream** | A named collection of records with a schema, primary key, and optional cursor field. Stream names are source-local (e.g., `messages`). The fully qualified identifier is an ordered pair `(source.id, stream_name)`, used in cross-source references and storage. Example: `("https://registry.pdpp.dev/connectors/spotify", "top_artists")`. | -| **Record** | A single data object within a stream. | -| **Connector** | A program that collects data from a data source, used when data is collected rather than served natively. One of possibly several producers of a source's streams. Defined in the Collection Profile. | -| **Source Declaration** | A source's versioned declaration of its identity, publisher, streams, schemas, consent surface, selection capabilities, and Resource Server query capabilities. It does not define connector acquisition or execution. | -| **Selection Request** | A client's request for specific data, expressed as RFC 9396 `authorization_details`. | -| **View** | An optional named field set a source declaration may define for a stream, composed from fields declared in the stream schema. When a client requests by view name, the resulting grant records the resolved field list, which is authoritative. Declared views are advisory; the authorization server is authoritative for views used in consent UI and issued grants. | - -### Requirements Language {#requirements-language} - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC 2119] [RFC 8174] when, and only when, they appear in all capitals, as shown here. - -This document is normative except where content is explicitly marked as an example, a note, or otherwise non-normative. - -The companion [PDPP Collection Profile](spec-collection-profile) uses the same requirements language. - ---- - -## 3. System Architecture - -Every PDPP deployment shares the same authorization core: a user grants a client consent, and the authorization server issues a grant. The resource server that then serves records under that grant is not shown here; how it is populated and operated is deployment-specific (see below). - -```mermaid -flowchart TB - User((User)) - Client[Client] - AS[Authorization Server] - - User -- consent --> AS - Client -- selection request --> AS - AS -- grant --> Client -``` - -What differs between deployments is how the resource server that fulfills the grant is populated and operated. This is not a closed set: a resource server may hold pre-collected data with no collection machinery involved, or receive data via regulatory export, manual import, or platform-native APIs ([Section 1](#introduction)). The two examples below illustrate the ends of that spectrum; the [PDPP Collection Profile](spec-collection-profile) is one fulfillment mechanism, not the only one. - -**Example A: source-native fulfillment.** The data source operates its own authorization and resource servers directly; there is no separate collection step. - -```mermaid -flowchart TB - Client[Client] - AS[Authorization Server] - RS[Resource Server] - Source[Data Source] - - Client -- query under grant --> RS - RS -- enforced records --> Client - - Source -.->|operates| AS - Source -.->|operates| RS -``` - -**Example B: personal-server fulfillment.** A connector runtime, governed by the Collection Profile, collects data from the source and syncs it into a resource server the user controls. - -```mermaid -flowchart TB - Client[Client] - AS[Authorization Server] - RS[Resource Server] - Runtime[Connector Runtime
Collection Profile] - Source[Data Source] - - Client -- query under grant --> RS - RS -- enforced records --> Client - - Runtime -- RECORD / STATE --> RS - Source -.->|collected by| Runtime -``` - -### Protocol layering - -PDPP separates three concerns that other systems conflate: - -1. **Authorization**: the user's consent about what is disclosed, to whom, and under what constraints. This is the grant. It is the portable core of PDPP. - -2. **Disclosure**: the records the resource server returns given a valid grant. This is the resource server query API. - -3. **Collection**: how data gets into the resource server in the first place. This is the Collection Profile. It is one answer to this question; pre-loaded data, manual imports, and other mechanisms are equally valid. - -The grant and query API are the normative core. Collection is a companion mechanism. - -**Ingest and sync-state are Collection Profile concerns.** The core protocol defines the query API (disclosure) and grant semantics. The Collection Profile defines record ingest and sync-state management endpoints for implementations that claim Collection Profile support. - ---- - -## 4. Record Model {#record-model} - -**Note:** This section defines portable record envelopes, stream identity, primary keys, blob references, resource references, stream semantics, and incremental-sync metadata. Source collection, connector execution, and storage-engine choices are out of scope for this document (see the [PDPP Collection Profile](spec-collection-profile)). - -Personal data is represented as flat relational streams. This enables streaming, pagination, incremental sync, and compatibility with DTI canonical data models. - -### Streams - -A stream is a named collection of records with a consistent schema. Examples: `playlists`, `messages`, `sleep_sessions`. A stream's shape (its fields and schema) is declared in the source declaration; see [Section 5: Source Declaration](#source-declaration). - -### Stream semantics - -Each stream has one of two semantic types: - -| Semantics | Meaning | Examples | Resource server behavior | -|-----------|---------|----------|------------------------| -| `append_only` | Records are immutable events. New records are added; existing records are never modified. | messages, transactions, play_events, workouts | Insert only. Duplicate keys are idempotent. | -| `mutable_state` | Records represent current state of an entity. Records may be updated or deleted. | profile, settings, playlist_items, follow_lists | Upsert by primary key. Resource server maintains version history for incremental sync. | - -Approximately 95% of personal data by volume is `append_only`. The remaining 5% is `mutable_state`. Mutable state records (profiles, preferences, relationships) are often the highest-value context for AI agents. - -### Incremental sync for mutable streams - -For `mutable_state` streams, the resource server maintains internal version history to support incremental sync queries. This is an implementation detail: the protocol surface is a standard cursor-based query that returns records changed since a given cursor position (see [Section 8](#resource-server-interface)). The version history is not exposed as a separate stream. - -A client that has previously synced a `mutable_state` stream queries for changes by passing its last cursor. The resource server returns only records whose state has changed since that cursor, within the client's grant-authorized field projection. If no authorized fields changed on a record, that record does not appear in the response. - -This design ensures that a client authorized for fields A and B cannot infer that field C changed, even if C was modified after the client's last sync. The response is a function of the grant, not of the full record state. - -**Snapshot model:** `changes_since` returns the full current state of each record whose grant-authorized projection changed since the cursor position, plus tombstones for deletions. It does not return field-level diffs. The client receives a complete record object for any record that changed. - -**Cursor expiry:** Resource servers MAY expire historical version data after a retention period. If a client's cursor has expired, the resource server MUST return HTTP 410 Gone with error code `cursor_expired`. The client MUST perform a full re-sync to re-establish its baseline. - -**Two distinct cursor spaces:** `cursor`/`next_cursor` are pagination tokens within a single query execution; `changes_since`/`next_changes_since` are incremental sync tokens across sessions. A client MUST NOT use a `next_cursor` value as a `changes_since` parameter; they are different token spaces and will produce a protocol error if confused. The terminal page of a `changes_since` result MUST include a `next_changes_since` field. Paginating an incremental sync: pass `changes_since` on the first request, follow `next_cursor` for subsequent pages within that session, then store `next_changes_since` from the terminal page for the next session. - -**Tombstones:** When a record is deleted from a `mutable_state` stream, the resource server MUST include a tombstone entry in incremental sync responses for clients whose cursor predates the deletion. Tombstone format: - -```json -{ - "object": "record", - "id": "canonical-key-string", - "stream": "playlists", - "deleted": true, - "deleted_at": "2026-04-01T10:00:00Z", - "emitted_at": "2026-04-01T10:00:01Z" -} -``` - -Tombstones use the same `object: "record"` envelope as regular response records, with `deleted: true`. The `id` field is the canonical key string (see RECORD envelope, Compound key encoding below). Both `deleted_at` and `emitted_at` are required on tombstone objects. No `data` field is present on tombstones. - -A tombstone signals that a record left the stream. For subset or derived streams this means membership removal; it does not assert that the source record was deleted. - -`deleted_at` represents the time the record was deleted in the source system, if known; otherwise the time the RS processed the deletion directive. If the source system deletion time is unknown, the RS SHOULD use the `emitted_at` value of the delete directive as `deleted_at`. - -**Non-normative note (GDPR Article 15):** The version history maintained internally by the resource server to support `mutable_state` incremental sync may support implementations that choose to expose historical access features to users. Whether such exposure is required is outside the scope of this specification. This alignment is non-normative and is not a required v0.1 capability. - -### Split rule - -When modeling data from a source, apply this rule: - -- **Separate stream** if: has its own stable ID, unbounded cardinality, changes independently, or consumers query it independently. -- **Nested within a record** if: small, bounded, and only meaningful as part of the parent. - -Example: `conversations` and `messages` are separate streams (messages are unbounded, have their own IDs, change independently). A message's `content_blocks` array can be nested (bounded, only meaningful within the message). - -This is a common data modeling judgment call. The rule above is a guide, not a formula; declaration publishers exercise discretion. - -### The RECORD envelope - -RECORD is the universal data envelope. It is used in the Collection Profile and is the canonical shape for records stored in the resource server. - -```json -{ - "stream": "messages", - "key": "msg_abc123", - "data": { - "id": "msg_abc123", - "conversation_id": "conv_xyz", - "role": "user", - "content": "What is the weather like?", - "source_created_at": "2026-03-28T15:00:00Z" - }, - "emitted_at": "2026-03-28T15:01:00Z" -} -``` - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `stream` | string | yes | Stream name | -| `key` | string or string[] | yes | Primary key value. Array for compound keys; order matches the SourceDeclaration `primary_key`. | -| `data` | object | yes | Record payload conforming to the stream schema. | -| `emitted_at` | ISO 8601 | yes | When the record was emitted by its producer (processing time, not source time). | -| `op` | enum | no | `upsert` (default) or `delete`. This field is a directive to the resource server and is not stored as part of the record data. | - -**Compound key encoding:** When `primary_key` has multiple fields, `key` is an array of values in the order declared by the SourceDeclaration `primary_key`. The canonical string form of a compound key is the minified JSON array of key values (e.g., `["user_123","2026-04-01"]`). Each primary-key component MUST be serialized as a string in the canonical encoding. Non-string primary-key field values (e.g., integers, dates) MUST be converted to their string representation before encoding. URL path parameters and `resources[]` entries use percent-encoded canonical string form. The `resource_ref.record_id` field retains native `string | string[]` type. - -**Record identity:** For any record, the values of the `data` fields named by the stream's `primary_key` MUST match the values in the `key` envelope field (in order). A resource server or profile-defined write interface MUST reject a record before storage when those values disagree. The Collection Profile defines the HTTP error for its ingest endpoint. - -### Timestamps - -Two timestamp concepts appear in records: - -- **`emitted_at`**: when the producer emitted the record. Always present on the RECORD envelope. Producer-generated. -- **Source timestamps**: when the event occurred or the resource was created or modified on the source platform. These are fields within `data`, declared in the stream schema. The spec reserves two standard field names: `source_created_at` and `source_updated_at`. Connector authors SHOULD use these names when the platform provides them, rather than inventing platform-specific names. - -### Foreign keys - -Streams reference each other via foreign key fields in `data`: - -```json -{ - "stream": "conversations", - "key": "conv_xyz", - "data": { - "id": "conv_xyz", - "title": "Weather chat", - "source_created_at": "2026-03-28T14:00:00Z" - } -} -{ - "stream": "messages", - "key": "msg_abc123", - "data": { - "id": "msg_abc123", - "conversation_id": "conv_xyz", - "content": "...", - "source_created_at": "2026-03-28T15:00:00Z" - } -} -``` - -The SourceDeclaration declares `primary_key` per stream. Foreign key relationships are declared in its `relationships` field (see [Section 5](#source-declaration)). - -### Binary data (blob_ref) - -Binary data (photos, videos, audio, documents) is not inlined in records. The record contains metadata and a `blob_ref`: - -```json -{ - "stream": "media", - "key": "media_123", - "data": { - "id": "media_123", - "caption": "Sunset", - "media_type": "image", - "source_created_at": "2026-03-28T10:00:00Z", - "blob_ref": { - "blob_id": "blob_media_123", - "mime_type": "image/jpeg", - "size_bytes": 2048000, - "sha256": "a1b2c3..." - } - } -} -``` - -`mime_type` MUST be a valid IANA media type (see [IANA Media Types](https://www.iana.org/assignments/media-types/)). Record producers emit `blob_ref` without a `fetch_url`. The resource server injects `fetch_url` at read time when serving records via the query API. - -### Cross-stream references (resource_ref) - -When a record references a record in a different stream on the same resource server, use a `resource_ref`. This is a within-subject, within-server pointer. Cross-user or cross-server references are out of scope in v0.1. - -```json -{ - "stream": "tag_assignments", - "key": "assign_1", - "data": { - "tag_id": "tag_sunset", - "target": { - "source_id": "https://registry.pdpp.dev/connectors/instagram", - "stream": "media", - "record_id": "media_123" - } - } -} -``` - ---- - -## 5. Source Declaration {#source-declaration} - -**Note:** This section defines the common source surface used by Core. Connector acquisition and execution behavior, including runtime bindings, setup, interaction, refresh, and collection state, is defined by the optional [PDPP Collection Profile](spec-collection-profile). - -Each source publishes a `SourceDeclaration` describing its identity, publisher, consent surface, record semantics, selection capabilities, and Resource Server query capabilities. Connector-backed and provider-native sources use the same Core shape. The declaration defines what can be consented to. The resolved grant defines what was approved. - -### SourceDeclaration structure - -```json -{ - "protocol_version": "0.1.0", - "source": { - "kind": "connector", - "id": "https://registry.pdpp.dev/connectors/spotify" - }, - "declaration_version": "2026-08-11", - "publisher": { - "id": "https://registry.pdpp.dev/" - }, - "display": { - "name": "Spotify" - }, - "selection_presets": [ - { - "id": "listening_history", - "label": "Listening history", - "streams": [ - { "name": "top_artists" }, - { "name": "play_events" } - ] - } - ], - "streams": [ - { - "name": "top_artists", - "description": "Most-listened artists over time", - "display": { - "label": "Your top artists", - "detail": "Artist names, genres, and popularity scores. No listening timestamps or play counts." - }, - "semantics": "mutable_state", - "schema": { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "id": { "type": "string" }, - "name": { "type": "string" }, - "genres": { "type": "array", "items": { "type": "string" } }, - "popularity": { "type": "integer" }, - "source_updated_at": { "type": "string", "format": "date-time" } - }, - "required": ["id", "name"] - }, - "primary_key": ["id"], - "cursor_field": "source_updated_at", - "consent_time_field": "source_updated_at", - "selection": { - "fields": true, - "resources": false - }, - "query": { - "range_filters": { - "source_updated_at": ["gte", "gt", "lte", "lt"] - } - }, - "views": [ - { - "id": "basic", - "label": "Artist names and genres", - "fields": ["id", "name", "genres"] - }, - { - "id": "full", - "label": "Full artist data", - "fields": ["id", "name", "genres", "popularity", "source_updated_at"] - } - ] - }, - { - "name": "play_events", - "description": "Individual track play events", - "semantics": "append_only", - "schema": { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "id": { "type": "string" }, - "track_id": { "type": "string" }, - "played_at": { "type": "string", "format": "date-time" }, - "duration_ms": { "type": "integer" } - }, - "required": ["id", "track_id", "played_at"] - }, - "primary_key": ["id"], - "cursor_field": "played_at", - "consent_time_field": "played_at", - "selection": { - "fields": true, - "resources": false - } - } - ], - "extensions": {} -} -``` - -### SourceDeclaration fields - -| Field | Description | -|-------|-------------| -| `protocol_version` | Version of the PDPP SourceDeclaration schema. This contract requires exactly `0.1.0`. | -| `source` | Exactly `{ kind, id }`. `kind` is `connector` or `provider_native`; `id` is the absolute URI authorization identity for the source's data surface. | -| `declaration_version` | Opaque, non-empty revision identifier for this source declaration. It is not the connector software version and has no implied ordering. | -| `publisher.id` | Absolute URI identifying the declaration publisher. Discovery and trust policy determine how this attribution is authenticated. | -| `display.name` | Human-readable source name for consent UIs. It is display metadata, not source identity. | -| `selection_presets` | Optional preset selections. The authorization server expands a selected preset into explicit stream terms before issuing a grant. | -| `streams[].name` | Unique non-empty stream name, source-local. `*` is request-only and is not a declaration stream name. | -| `streams[].description` | Optional short human-readable summary of the stream's contents (e.g., "Most-listened artists over time"). Not consent-surface metadata; see `streams[].display` for the fields the AS renders during consent. | -| `streams[].display` | Optional consent-surface metadata. See [Stream display metadata](#stream-display). | -| `streams[].semantics` | `append_only` or `mutable_state`. | -| `streams[].schema` | JSON Schema for the record's `data` field. `primary_key` and `cursor_field` MUST reference fields declared here. | -| `streams[].primary_key` | Fields that uniquely identify a record within the stream. | -| `streams[].cursor_field` | Field used for logical record ordering in cursor-based reads and incremental sync. List reads sort by `(cursor_field, primary_key)`, with null or absent cursor values sorting after present values. A cursor is an opaque token the server issues, encoding a logical sort position in the stream. | -| `streams[].consent_time_field` | The temporal consent boundary: the field against which `time_range` is evaluated. Absent means `time_range` is not applicable to this stream. MUST reference a field declared in the schema. | -| `streams[].selection` | Which selection parameters this stream supports (`fields`, `resources`). Time-range capability is derived from `consent_time_field` presence; absent means not time-range-capable. The AS MUST reject grants that request `time_range` on a stream without a `consent_time_field`, or that request an unsupported selection parameter. | -| `streams[].views` | Named field projections the declaration publisher suggests. Advisory; the AS is authoritative. Each view has `id`, `label`, and `fields` (top-level field names only). | -| `streams[].relationships` | Declared foreign key relationships to other streams. Structural graph metadata only; does not by itself make a relation expandable in the read API. Expandability is declared separately as a query capability; see [`expand[]`](#list-records). | -| `streams[].query` | Stream-specific query capability declaration. `range_filters` declares range-queryable fields and operators. `expand` declares expandable relations and per-relation limits. `search` and `aggregations` preserve source-neutral capability declarations used by companion query profiles; their operation semantics and conformance are not defined by Core. | -| `extensions` | Optional object keyed by absolute profile URI. Core preserves or ignores an unknown extension value and does not parse it. An operation that explicitly invokes an unsupported profile is rejected. An extension cannot redefine or weaken Core semantics. | - -The public SourceDeclaration JSON Schema declares JSON Schema 2020-12. Each -`streams[].schema` uses that dialect when `$schema` is absent. If `$schema` is -present, it MUST equal `https://json-schema.org/draft/2020-12/schema`. This -dialect choice does not by itself guarantee identical validator behavior. The -AS MUST meta-validate each embedded stream schema before accepting the -declaration. Embedded `$ref` and `$dynamicRef` values MUST be local fragment -references. A declaration MUST NOT make consent interpretation depend on a -mutable remote schema. - -`source.id` is the authorization identity. In a retained declaration or grant, -`source.kind` records the provenance class that the AS accepted from its -declaration authority. It is not authorization equality, a runtime type, or a -Collection Profile claim, and it never selects serving or acquisition runtime. -A connector declaration with no Collection extension remains valid Core input. -The declaration never contains owner-specific account or instance handles. -Those appear on each stream in the selection request and resolved grant. - -### Stream display metadata {#stream-display} - -Streams MAY include a `display` object with human-readable metadata for the consent UI. This metadata is authored by the accepted declaration publisher, not the requesting client. - -| Field | Type | Description | -|-------|------|-------------| -| `display.label` | string | Short human-readable name shown in the consent card (e.g., "Who you follow"). If absent, the AS SHOULD display `streams[].description` or fall back to the stream name. | -| `display.detail` | string | Consent-oriented description of what data is included and, where relevant, what is excluded (e.g., "Usernames and account IDs of accounts you follow. No DMs, profile details, or follower lists."). If absent, the AS MAY generate a description from the stream schema, or display no detail. | - -**Authorship principle:** `display.label` and `display.detail` describe the data itself, not the requester's purpose. They are attributed to the accepted declaration publisher. The requesting client MUST NOT override or supplement these descriptions in the selection request. The authorization server's discovery and trust policy determines whether publisher attribution is authenticated. - -```json -{ - "name": "following_accounts", - "description": "Accounts the user follows", - "display": { - "label": "Who you follow", - "detail": "Usernames and account IDs of accounts you follow. No DMs, profile details, or follower lists." - }, - "semantics": "mutable_state", - "schema": { "..." : "..." } -} -``` - -### consent_time_field - -The `consent_time_field` is the field on each record that the resource server evaluates `time_range` against. It represents the stream's temporal consent boundary: when the user consents to "data from the last 6 months," the `consent_time_field` is the field that determines whether a given record falls within that window. - -The `consent_time_field` may be the same field as `cursor_field`, but they serve different purposes and MUST be declared separately: - -- `cursor_field` governs incremental sync mechanics (which records to fetch since the last run). -- `consent_time_field` governs consent-time filtering (which records fall within the authorized time window). - -For many `append_only` streams, both fields will be the same (e.g., `played_at` for play events). For some `mutable_state` streams they may differ: a playlists stream might use `source_updated_at` as the cursor (for efficient incremental sync) but `source_created_at` as the `consent_time_field` (because the user's consent to "playlists from the last 6 months" most naturally means playlists they created in that period, not playlists they edited). - -The `consent_time_field` MUST be rendered in human-readable consent UX. A grant with `time_range: { since: "2026-01-01" }` on the `playlists` stream should be presented as "playlists created on or after January 1, 2026," not just "playlists in time_range." - -Streams that cannot define a stable `consent_time_field` simply omit it. The absence of `consent_time_field` is the normative signal that the stream does not support time-range filtering. - -### Relationships - -```json -{ - "name": "conversations", - "relationships": [ - { - "name": "messages", - "stream": "messages", - "foreign_key": "conversation_id", - "cardinality": "has_many" - } - ] -} -``` - -| Field | Description | -|-------|-------------| -| `name` | Relation name (used in `expand[]` on the query API). | -| `stream` | The related stream name. | -| `foreign_key` | The field on the related stream that references this stream's primary key. | -| `cardinality` | `has_many` or `has_one`. | - -### Views {#views} - -Views are named field projections that the authorization server may define for a stream, composed from fields declared in the stream schema. Views are the unit of consent when a client requests access by view name rather than by explicit field list. A view names a field set within a single stream, while a selection preset expands to stream-level selections at request scope. - -Declaration publishers MAY suggest views. These suggestions are advisory. The authorization server is authoritative for views used in consent UI and issued grants. The AS MUST NOT define a view that includes fields absent from the retained SourceDeclaration schema for the relevant stream. - -**View evolution:** Grants are bound to the resolved field set at issuance time: `fields` in the `StreamGrant` is authoritative, not the view name. View evolution (adding new fields to a view) never silently widens existing grants. Re-consent is required before a client can access new fields, even if those fields are subsequently added to a named view the client already has a grant for. - -**Authority and registry:** Views defined under `pdpp.dev` URI namespaces are controlled by PDPP maintainers via a public change process. Implementations MUST treat unrecognized view URIs as opaque identifiers. - -**Note:** Canonical view naming conventions (standard view names with consistent semantics across connectors) are intentionally deferred. The protocol reserves this space; naming conventions will be informed by implementation experience. - -### Versioning and snapshots - -`declaration_version` is an opaque exact revision identifier. Core does not -assign semantic-version ordering or compatibility meaning to it. A connector -software release can leave the declaration unchanged, and a declaration can -change without a connector release. - -The authorization server retains the exact declaration snapshot used to -validate the request and render consent. It uses that same snapshot for -narrowing, issuance, and retained consent evidence. The issued grant records -the declaration revision and every resolved authorization fact. A version -label alone is not a snapshot. - -Adding a field, view, stream, or capability to a later declaration never -widens an existing grant. Removing or changing a currently served capability -may make a request technically unsupported, but it does not reinterpret what -the user approved. The Resource Server enforces the resolved grant without a -current declaration lookup. Current serving metadata may only route, describe -current capabilities, narrow, or reject. - ---- - -## 6. Selection Request {#selection-request} - -**Note:** This section defines what a client asks an authorization server to approve, plus declaration-backed validation and consent rendering before a grant is issued. Product-specific consent flows, screen layouts, and hosted authorization-server deployments are out of scope for this document. - -A client requests specific personal data by including `authorization_details` in an OAuth 2.0 authorization request, following RFC 9396. - -```json -{ - "response_type": "code", - "client_id": "music_recommendations", - "redirect_uri": "https://app.example.com/callback", - "scope": "openid", - "client_display": { - "name": "Concert Finder", - "uri": "https://concertfinder.example.com", - "logo_uri": "https://concertfinder.example.com/logo.png", - "policy_uri": "https://concertfinder.example.com/privacy", - "tos_uri": "https://concertfinder.example.com/terms" - }, - "authorization_details": [ - { - "type": "https://pdpp.dev/data-access", - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/spotify" }, - "purpose_code": "https://pdpp.dev/purpose/personalization", - "purpose_description": "Recommend concerts based on your listening history", - "access_mode": "single_use", - "streams": [ - { - "name": "top_artists", - "necessity": "required", - "instance_ids": ["spotify-account-a"], - "time_range": { "since": "2025-09-28T00:00:00Z" } - }, - { - "name": "play_events", - "necessity": "optional" - } - ], - "client_claims": { - "commitments": ["Data used only for concert recommendations"] - } - } - ] -} -``` - -### Client display metadata {#client-display} - -The top-level `client_display` object carries inline client display metadata for the requesting application. PDPP reuses the human-readable client metadata model from OAuth 2.0 Dynamic Client Registration (RFC 7591 Section 2.2), but transports it inline in the authorization request rather than requiring a dynamic client registration endpoint. - -Inside `client_display`, PDPP drops the `client_` prefix from `client_name` and `client_uri` because the enclosing object is already client-scoped. The metadata model is otherwise aligned with RFC 7591. - -| Field | Type | Required | Status | Description | -|-------|------|----------|--------|-------------| -| `client_display.name` | string | yes | Inline client metadata | Inline equivalent of RFC 7591 `client_name`. Human-readable application name. | -| `client_display.uri` | URI | no | Inline client metadata | Inline equivalent of RFC 7591 `client_uri`. The client's homepage. | -| `client_display.logo_uri` | URI | no | Inline client metadata | RFC 7591 `logo_uri`. URL to a square image representing the client. | -| `client_display.policy_uri` | URI | no | Inline client metadata | RFC 7591 `policy_uri`. URL for the client's privacy policy. | -| `client_display.tos_uri` | URI | no | Inline client metadata | RFC 7591 `tos_uri`. URL for the client's terms of service. | - -`client_display` is entity-scoped: it describes the client, not a specific authorization request. It appears at the top level of the authorization request, outside `authorization_details`. - -`client_display` is an inline carrier, not necessarily the AS's final rendered identity record. The AS MAY replace or augment inline values with locally registered metadata, validated software-statement metadata, or trust-registry metadata. - -**Metadata resolution and rendering obligations:** - -1. The AS MUST resolve requester identity metadata from the best available source. Source precedence is local registration or trust-registry metadata, then validated software-statement metadata if supported, then inline `client_display`, then `client_id` fallback. -2. If the resolved metadata contains a display name, the AS MUST display it to the user during consent. If no display name is available, the AS MUST display `client_id` as the requester identity. -3. If the resolved metadata contains `policy_uri` or `tos_uri`, the AS MAY display them as secondary links or disclosures. -4. If the server has a positive trust signal for the client (e.g., domain verification, trust registry membership), it MUST render that status distinctly (e.g., a "verified" badge). If it has no positive trust signal, it MUST treat the client as unverified and SHOULD display an "unverified app" indicator. -5. The AS MUST treat `logo_uri` as untrusted content until it has been accepted under local policy. It MUST NOT fetch and render a client-supplied remote logo in the consent UI unless the client is verified or the asset has been proxied, cached, and approved under local policy. For unverified clients, the AS SHOULD generate a monogram from the resolved display name. -6. If neither resolved metadata nor inline `client_display` provides a display name, the consent UI SHOULD clearly indicate that the client has not provided display metadata. - -### Pre-registered public client discovery {#pre-registered-public-clients} - -An authorization server MAY support clients that are public and pre-registered by the deployment rather than dynamically registered. Dynamic public-client self-registration is the preferred discoverable path when `registration_endpoint` is advertised. When AS metadata advertises `pre_registered_public` in `pdpp_registration_modes_supported`, the reference publishes `pdpp_pre_registered_public_clients` so agents and third-party clients can discover usable fallback or example `client_id` values without an out-of-band walkthrough. - -Each `pdpp_pre_registered_public_clients` entry contains `client_id`, `client_name`, and `token_endpoint_auth_method`. These entries are public client metadata, not authority to access data. The user grant remains the authorization boundary, and the field MUST NOT contain secrets, access tokens, owner-scoped clients, dynamically registered clients, or private registration state. - -### Client claims {#client-claims} - -The optional `client_claims` object within each `authorization_details` entry carries client-authored, non-enforceable statements about the specific authorization being requested. These are request-scoped, not entity-scoped: a client may make different commitments for different authorization requests. - -| Field | Type | Required | Status | Description | -|-------|------|----------|--------|-------------| -| `client_claims.commitments` | string[] | no | Attributed client claim | Free-text policy commitments relevant to this request (e.g., "Data used only for this study"). | - -**Trust boundary:** Client claims are self-asserted and unverifiable by the server. The AS MUST render `client_claims` content separately from protocol-enforced grant terms and MUST attribute it to the client (e.g., "[client name] says:"). The AS MUST NOT render client claims in the same visual register as protocol-enforced grant terms, structured policy declarations, or declaration-authored data descriptions. - -If rendered on the final owner review surface, `client_claims` MUST be -normalized and bound exactly, with client attribution, into the immutable final -approval artifact and review revision. Retained consent evidence MUST preserve -that binding. They are material consent context, not grant rights. They remain -outside authorization equality, the resolved grant, introspection rights, and -RS enforcement. - -**Relationship to `purpose_description`:** `purpose_description` is a first-class request field describing what the authorization is for. It is part of the authorization semantics the user reviews. `client_claims.commitments` are supplementary promises that are not reducible to structured protocol fields. Both are client-authored, but `purpose_description` is the primary purpose statement while `commitments` are additional assurances. - -**Commitments that ARE machine-readable:** Structured grant fields (e.g., `retention.max_duration`, `access_mode`) SHOULD be rendered by the AS as server-generated display text (e.g., "Deleted within 90 days", "Ongoing access until you revoke it"). Clients SHOULD NOT duplicate machine-readable constraints as free-text commitments. If a commitment duplicates a structured field, the structured field is authoritative. - -### Semantic classes and consent-surface rendering - -PDPP uses three primary semantic classes across selection requests and grants: - -- **Protocol-enforced constraints:** Values the AS and/or RS actually validate or enforce, such as stream selection, field projection, `time_range`, `resources`, and `access_mode`. -- **Structured policy declarations:** Machine-readable statements that matter for consent, local policy, and implementation-defined audit or transparency mechanisms, but are not generally self-enforcing at the protocol layer. In v0.1 this includes `purpose_code`, `purpose_description`, and `retention`, with one explicit exception: `https://pdpp.dev/purpose/ai_training` adds a protocol-level consent requirement. -- **Attributed client claims:** Client-authored statements that may matter to the user but are not protocol facts. In v0.1 this is `client_claims`. - -`client_display` is a separate category: requester identity metadata used to identify who is asking, not a grant constraint. Inline values may be client-asserted, but the AS renders them under its own resolution and trust policy. - -PDPP does not standardize consent screen layout, visual design, or copywriting. It does normatively constrain semantic rendering. A conformant AS MUST preserve the distinction between protocol-enforced terms, structured policy declarations, declaration-authored data descriptions, and client-authored claims. It MUST NOT flatten these categories into a single undifferentiated consent surface. - -### Request-level parameters - -| Parameter | Type | Required | Status | Description | -|-----------|------|----------|--------|-------------| -| `source` | object | yes | Protocol-enforced | Source binding. `id` is required and is the stable absolute URI authorization identity for the data surface. `kind` is optional. When present, it is a client trust expectation that the accepted declaration's provenance class is `connector` or `provider_native`. It is not authorization equality and never selects runtime. | -| `purpose_code` | URI | yes | Structured policy declaration | Machine-readable purpose (absolute URI). See Appendix A for the initial registry. The AS MUST accept any syntactically valid absolute-URI purpose code. For unrecognized codes, the AS MUST display `purpose_description` if present, or the raw URI if not, and MUST NOT reject the request solely because the purpose code is unrecognized. Consent properties associated with purpose codes in the registry are advisory, not protocol-enforced, with the exception of `https://pdpp.dev/purpose/ai_training` (see below). | -| `purpose_description` | string | no | Structured policy declaration | Human-readable purpose, displayed to the user during consent. Clients SHOULD provide this field. When present, the AS MUST display it. For standard purpose codes, the AS MAY display a human-readable label from the registry when `purpose_description` is absent. | -| `access_mode` | enum | yes | Protocol-enforced | `single_use` or `continuous`. See [Section 7](#grant). | -| `retention` | object | no | Structured policy declaration | Requested retention constraints: `{ max_duration, on_expiry }`. | -| `streams` | StreamRequest[] | yes (unless `selection_preset` is used) | Protocol-enforced | Requested streams with per-stream parameters. | -| `selection_preset` | string | no | Protocol-enforced at issuance time | Reference to a SourceDeclaration preset, as an alternative to explicit streams. | -| `client_claims` | object | no | Attributed client claim | Client-authored, non-enforceable claims about this request. See [Client claims](#client-claims). | - -#### Source kinds {#source-kinds} - -| `source.kind` | Meaning | -|---|---| -| `"connector"` | The declaration authority represents a connector-backed source. `source.id` is its public source URI, not a local package name, connector key, storage namespace, account identifier, or runtime binding. A connector declaration remains Core-valid without Collection Profile data. | -| `"provider_native"` | The declaration authority represents the provider's own PDPP data surface. `source.id` is normally the OAuth protected-resource identifier for that surface, not merely the provider's legal-entity URI. | - -If the request includes `source.kind`, an unrecognized value or a mismatch -with the AS-accepted declaration provenance produces a Source validation -failure before consent. If the request omits `source.kind`, the AS derives -provenance from the accepted declaration and records it in consent evidence -and any issued grant. The OAuth/RAR binding returns RFC 9396 -`invalid_authorization_details` for invalid authorization details. - -#### AI training consent {#ai-training-consent} - -The AS MUST obtain explicit affirmative user consent before issuing any grant with `purpose_code` value `https://pdpp.dev/purpose/ai_training`. This is the sole purpose code with a mandatory consent requirement at the protocol level. - -### Stream selection parameters - -Per-stream, within the `streams` array. All are optional except `name`. - -| Parameter | Type | Status | Description | -|-----------|------|--------|-------------| -| `name` | string | Protocol-enforced | Stream name, or `*` for all streams (resolved at consent time against the retained SourceDeclaration). | -| `necessity` | enum | Consent-flow control at issuance time | `required` (default) or `optional`. Optional streams are presented as user choices during consent. | -| `instance_ids` | string[] | Protocol-enforced | Optional opaque owner-instance handles for this stream. Handles are scoped to issuer, subject, `source.id`, and stream. Omission never means fan-in. The AS resolves exactly one eligible handle or requires an explicit owner choice. | -| `time_range.since` | ISO 8601 | Protocol-enforced | Earliest data to include (inclusive, >=), evaluated against the stream's `consent_time_field`. | -| `time_range.until` | ISO 8601 | Protocol-enforced | Latest data to include (exclusive, <), evaluated against the stream's `consent_time_field`. A hard cap: applies to future resources as well as past ones. | -| `view` | string | Protocol-enforced at issuance time | Named view defined by the authorization server. Mutually exclusive with `fields` in a request; both MUST NOT be present simultaneously. AS returns 400 `invalid_request` if both are present. | -| `fields` | string[] | Protocol-enforced | Field allowlist. Schema-required fields are always included regardless of this list. In v0.1, restricted to top-level field names only. Mutually exclusive with `view`. | -| `resources` | string[] | Protocol-enforced | Specific record IDs to authorize. Values are canonical key strings: minified JSON array for compound keys, plain string for simple keys. The AS validates arity and type against the retained declaration's `primary_key` at grant issuance. The RS filters by exact primary-key match. | - -**Note on `fields`:** At consent resolution, schema-required fields are always included in the resolved field set, regardless of the requested field list, because a record missing its schema-required fields is not a valid record of that stream; the per-stream consent floor is its required fields. - -**Note on `time_range`:** `time_range` is only valid for streams that declare a `consent_time_field`. The authorization server MUST reject selection requests that specify `time_range` on a stream without that field. Its presence in the retained declaration is the authoritative signal that a stream is time-range-capable. - -**Note on wildcards:** `"streams": [{ "name": "*" }]` requests all streams declared by the source. This is resolved against the retained snapshot and frozen as an explicit list in the grant. If the wildcard request includes `instance_ids`, the AS applies the requested handles to every expanded stream and verifies that each handle is eligible for that stream. If it omits `instance_ids`, the usual exactly-one eligible instance rule applies to every expanded stream. - -A wildcard entry MUST be the only entry in `streams`. Otherwise stream names -MUST be unique within the request. - -**Note on `streams` vs `selection_preset`:** Exactly one is required. Source validation fails if both or neither are present. The OAuth/RAR binding maps this failure to RFC 9396 `invalid_authorization_details`. - -**Note on defaults:** In a request, omitting `fields` and `view` asks the AS to resolve all permitted fields from the retained snapshot. Omitting `time_range` asks for no temporal constraint. Omitting `instance_ids` never asks for fan-in. The issued grant contains explicit non-empty `fields` and `instance_ids`. Clients SHOULD request only the data they need (see [Section 11, Data Minimization](#data-minimization)). - -### Selection presets - -Source declarations may define selection presets. A client can reference a preset instead of constructing explicit stream selections: - -```json -{ - "type": "https://pdpp.dev/data-access", - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/instagram" }, - "purpose_code": "https://pdpp.dev/purpose/personalization", - "access_mode": "single_use", - "selection_preset": "social_summary" -} -``` - -The authorization server expands the preset from the retained snapshot into -explicit streams and fields before final owner review and issuance. -Each selection preset MUST NOT contain the same stream name more than once. -Duplicate stream names make the declaration invalid. They are not deferred to -grant issuance. - -Every field in the issued grant is derived from either the selection request, client registration, or authorization server policy. The grant never contains values whose source is ambiguous. - ---- - -## 7. Grant {#grant} - -**Note:** This section defines the immutable consent artifact and the constraints a resource server enforces for a token-bound client. Grant database schema, signed-token format, hosted registries, and deployment topology are out of scope for this document. - -The grant is an immutable consent artifact. It is the output of the authorization flow. - -The authorization server issues an access token bound to the grant. The client uses the access token (not the raw grant) to authenticate with the resource server. The resource server resolves the token to the grant and enforces its constraints on every request. Grant lifecycle (active, expired, revoked) is tracked by the authorization server, not stored in the grant itself. - -```json -{ - "version": "0.1.0", - "grant_id": "grt_8f72a1b3", - "issued_at": "2026-04-06T15:00:00Z", - "subject": { "id": "user_abc123" }, - "client": { "client_id": "music_recommendations" }, - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/spotify" }, - "source_declaration": { "version": "2026-08-11" }, - "purpose_code": "https://pdpp.dev/purpose/personalization", - "purpose_description": "Recommend concerts based on your listening history", - "access_mode": "single_use", - "streams": [ - { - "name": "top_artists", - "instance_ids": ["spotify-account-a"], - "fields": ["id", "name", "genres", "popularity", "source_updated_at"], - "time_constraint": { - "field": "source_updated_at", - "since": "2025-09-28T00:00:00Z" - } - } - ], - "retention": { - "max_duration": "P1Y", - "on_expiry": "delete" - }, - "expires_at": "2027-04-06T00:00:00Z" -} -``` - -### Grant fields - -**The following field table is normative.** TypeScript types in Section 13 are non-normative. - -| Field | Type | Required | Status | Description | -|-------|------|----------|--------|-------------| -| `version` | string | yes | Protocol metadata | Grant schema version. This contract requires exactly `0.1.0`. | -| `grant_id` | string | yes | Protocol metadata | Unique identifier. | -| `issued_at` | ISO 8601 | yes | Protocol metadata | When the grant was issued. | -| `subject` | object | yes | Identity binding | Exactly `{ id }`. The `subject.id` is an opaque string, unique within the issuing AS's namespace. No format constraint is imposed. | -| `client` | object | yes | Identity binding | Exactly `{ client_id }` or `{ client_id, client_display }`. `client_display`, when retained, is the requester identity metadata resolved by the AS, not unverified inline input. | -| `source` | object | yes | Protocol-enforced | Exact `{ kind, id }` retained from the accepted SourceDeclaration. `id` is authorization identity; `kind` is provenance metadata. | -| `source_declaration` | object | yes | Protocol evidence | `{ version }` records the opaque revision of the exact declaration snapshot used for consent and issuance. It is evidence metadata, not a live lookup authority. | -| `purpose_code` | URI | yes | Structured policy declaration | Machine-readable purpose (see Appendix A). | -| `purpose_description` | string | no | Structured policy declaration | Human-readable purpose. | -| `access_mode` | enum | yes | Protocol-enforced | `single_use` or `continuous`. | -| `streams` | StreamGrant[] | yes | Protocol-enforced | Granted streams. Always expanded; no wildcards. See StreamGrant fields table below. | -| `selection_preset` | string | no | Informational | Which SourceDeclaration preset was selected. The resolved streams and fields remain authoritative. | -| `retention` | object | no | Structured policy declaration | Policy commitment by the data recipient (see below). | -| `expires_at` | ISO 8601 or null | no | Protocol-enforced | Grant expiry. null means no expiry. | - -### StreamGrant fields - -| Field | Type | Required | Status | Description | -|-------|------|----------|--------|-------------| -| `name` | string | yes | Protocol-enforced | Unique stream name within the grant. Always concrete; no wildcards in issued grants. | -| `instance_ids` | string[] | yes | Protocol-enforced | Unique non-empty opaque instance handles scoped to issuer, subject, source ID, and this stream. Multiple handles authorize fan-in only when explicitly listed. | -| `fields` | string[] | yes | Protocol-enforced | Unique non-empty resolved field allowlist, authoritative for RS enforcement. Top-level field names only. | -| `time_constraint` | object | no | Protocol-enforced | Frozen `{ field, since?, until? }` resolved from the retained declaration. `field` is required and at least one bound is present. `since` is inclusive; `until` is exclusive. | -| `resources` | string[] | no | Protocol-enforced | Authorized record IDs in canonical key string encoding. Absent means all records. | - -Request-only conveniences such as wildcard names, `view`, omitted fields, and omitted instance handles are fully resolved before final owner review and issuance. They are not continuing authority in the grant. Selection provenance may be retained at grant level through `selection_preset`; the concrete stream rows remain authoritative. - -Before the final approval surface is shown, the AS MUST resolve omitted -`instance_ids` to exact eligible instance handles or require an explicit owner -choice. The final approval artifact MUST include the exact resolved -`instance_ids`, stream names, fields, resources, temporal field, `since`, -`until`, purpose, retention, client identity, and grant expiry. If -`client_claims` are rendered during final review, the final approval artifact -and review revision MUST also bind the normalized exact claims with client -attribution. Retained consent evidence MUST preserve that binding. The approval -mutation MUST bind to an immutable review revision or digest over the -authorization decision fields. `client_claims` MUST remain outside the -resolved grant and RS enforcement. If instance eligibility or the reviewed -revision becomes stale before approval, the AS MUST reject approval and require -a new review. - -### Time concepts - -The grant carries three orthogonal time-related concepts that must not be conflated: - -| Concept | Fields | Meaning | -|---------|--------|---------| -| Grant validity period | `issued_at`, `expires_at` | How long the authorization itself is active. | -| Data temporal scope | `streams[].time_constraint` | Which records the client is authorized to see and which record field defines that boundary. | -| Access pattern | `access_mode` | Whether the grant can be exercised once or continuously. | - -A grant can be short-lived (expires in 1 hour) but cover all historical data (no `time_constraint`). A grant can be long-lived but cover only data from the last 6 months (`time_constraint.since`). A grant can be `single_use` but cover a large historical window. These combinations are all valid and distinct. - -### Version layering - -Three independent version axes exist in PDPP. They MUST NOT be conflated: - -| Axis | Field | Meaning | -|------|-------|---------| -| Grant schema version | `grant.version` | Version of the PDPP grant schema. RS MUST reject grants with unsupported major versions, returning 400 `unsupported_version`. | -| Source declaration revision | `grant.source_declaration.version` | Identifies the exact retained declaration snapshot used for consent and issuance. It is opaque evidence metadata. The RS enforces the resolved grant and does not fetch that revision for authorization. | -| HTTP API contract version | `PDPP-Version` request header | Version of the RS HTTP API contract. RS returns 400 `unsupported_version` if the requested version is not supported. If the header is absent, the RS uses the current stable version and returns the selected version in the response header (see [Section 8](#resource-server-interface)). | - -The current persisted-authorization-state reader MUST reject any persisted -authorization state whose version or shape it cannot validate against a -supported contract before its caller continues introspection or route -handling. The reader MUST NOT reconstruct missing authorization or binding -facts from current configuration. A deployment that cannot support or -explicitly migrate such state MUST require fresh consent. - -### Access modes {#access-modes} - -| Mode | Behavior | -|------|----------| -| `single_use` | The grant is consumed at first token issuance. The AS marks the grant consumed atomically with issuance of the first client access token. The AS MUST reject subsequent attempts to issue new client access tokens against the same consumed grant. The RS honors all tokens issued against the grant until token expiry or revocation. The client MAY retry or resume pagination using the same access token. Failure to complete retrieval before token expiry does not un-consume the grant. | -| `continuous` | The grant is fulfilled repeatedly. The client may query the resource server incrementally over time. Active until expiry or revocation. | - -### time constraint semantics - -The request's `time_range` is resolved against the retained stream -`consent_time_field` into the grant's `time_constraint`. The grant freezes that -field with the bounds. The filter is: - -``` -record[time_constraint.field] >= time_constraint.since (if since is present) -record[time_constraint.field] < time_constraint.until (if until is present) -``` - -`time_constraint.until` is a hard cap. It applies equally to records that existed at grant issuance and to records created afterward. A `continuous` grant with `time_constraint.until` set to a past date is valid: it is a historical-only grant that will never disclose new records. This is not an error. - -For `continuous` grants without `time_constraint.until`, future records in a granted stream are included as they are collected, provided the frozen field falls within any `since` constraint. Stream names and fields are frozen at consent time; future stream types or fields require a new grant. - -### Standing authorization - -Grants freeze stream names, instance handles, fields, and any time constraint at consent time. Within that resolved scope, future records are included for `continuous` grants. Future stream types or fields are not included; they require a new grant. - -### Grant narrowing - -Grant narrowing (reducing the scope of an existing grant) is not supported in v0.1. Scope reduction is achieved via revoke-and-reissue: the client revokes the existing grant and the user issues a new, narrower grant. Authorization server UIs SHOULD model this flow as revocation followed by a new grant request. - -### Records from revoked grants - -Revocation stops future access only. Records already delivered to the client before revocation are governed by the grant's `retention` policy and applicable legal obligations. PDPP does not retroactively reach into client-side data stores. - -### Retention - -Retention is a structured policy declaration and policy commitment by the data recipient (the client). PDPP does not technically enforce retention. Enforcement is through legal agreements, contractual obligations, or trust registry mechanisms. This is consistent with how OAuth 2.0 treats scope compliance: the protocol makes the commitment legible and machine-readable; external mechanisms enforce it. - -```json -{ - "max_duration": "P6M", - "on_expiry": "delete" -} -``` - -| Field | Type | Description | -|-------|------|-------------| -| `max_duration` | ISO 8601 duration | How long the client may retain collected data. | -| `on_expiry` | enum | `delete` or `anonymize`. Note: `archive` is not supported in v0.1. | - -### Examples - -**Specific data, single use:** -```json -{ - "version": "0.1.0", - "grant_id": "grt_001", - "issued_at": "2026-04-06T15:00:00Z", - "subject": { "id": "user_abc" }, - "client": { "client_id": "concert_app" }, - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/spotify" }, - "source_declaration": { "version": "2026-08-11" }, - "purpose_code": "https://pdpp.dev/purpose/personalization", - "access_mode": "single_use", - "streams": [ - { - "name": "top_artists", - "instance_ids": ["spotify-account-a"], - "fields": ["id", "name", "genres", "popularity", "source_updated_at"], - "time_constraint": { - "field": "source_updated_at", - "since": "2025-09-28T00:00:00Z" - } - } - ] -} -``` - -**Continuous access for an AI agent:** -```json -{ - "version": "0.1.0", - "grant_id": "grt_002", - "issued_at": "2026-04-06T15:00:00Z", - "subject": { "id": "user_abc" }, - "client": { "client_id": "personal_agent" }, - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/openai" }, - "source_declaration": { "version": "2026-08-11" }, - "purpose_code": "https://pdpp.dev/purpose/agent_context", - "access_mode": "continuous", - "streams": [ - { - "name": "conversations", - "instance_ids": ["openai-account-a"], - "fields": ["id", "title", "source_created_at", "source_updated_at"] - }, - { - "name": "messages", - "instance_ids": ["openai-account-a"], - "fields": ["id", "conversation_id", "role", "content", "source_created_at"] - } - ], - "expires_at": null -} -``` - -**Health data with field selection and retention:** -```json -{ - "version": "0.1.0", - "grant_id": "grt_003", - "issued_at": "2026-04-06T15:00:00Z", - "subject": { "id": "user_abc" }, - "client": { "client_id": "sleep_analysis" }, - "source": { "kind": "connector", "id": "https://registry.pdpp.dev/connectors/oura" }, - "source_declaration": { "version": "2026-08-11" }, - "purpose_code": "https://pdpp.dev/purpose/analytics", - "access_mode": "single_use", - "streams": [ - { - "name": "sleep_sessions", - "instance_ids": ["oura-account-a"], - "fields": ["day", "total_sleep_duration", "sleep_score"], - "time_constraint": { - "field": "day", - "since": "2026-01-01T00:00:00Z", - "until": "2026-04-01T00:00:00Z" - } - } - ], - "retention": { "max_duration": "P90D", "on_expiry": "delete" } -} -``` - ---- - -## 8. Resource Server Interface {#resource-server-interface} - -**Note:** This section defines the interoperable record-query and blob-fetch interface under grant enforcement. Authorization-server deployment, storage backend, collection runtime, operator dashboard, and hosted service choices are out of scope for this document. - -The resource server stores records and serves them to clients filtered by grants. This section is normative: a compliant resource server must implement this interface for cross-deployment interoperability. - -### Grant enforcement - -On every request, the resource server: - -1. Resolves the access token through authenticated RFC 7662 introspection or a local equivalent for co-located deployments. Positive introspection results MUST NOT be cached longer than `min(token_exp, 60 seconds)`. -2. Verifies that the grant is active (`active: true` in the introspection response). -3. Verifies that the requested stream appears in the grant's `streams` list. -4. Selects records only from the explicitly granted `instance_ids` and verifies that the request falls within the grant's `time_constraint`, `fields`, and `resources` constraints. -5. If all checks pass, returns records filtered accordingly. -6. If any check fails, returns a structured error (see Errors below). - -For owner-token current-capability reads, the RS MAY compute -`effective_filter = grant_filter AND request_filter`; request filters can only -narrow the current owner read and cannot widen it. In v0.1, client-token reads -do not have request-time predicate filters (see List records below). - -The RS MUST NOT re-validate authorization against the current SourceDeclaration. All enforcement constraints are in the resolved grant. Current serving metadata MAY route a granted instance, describe current schemas or query capabilities, or reject a request that cannot currently be served. It MUST NOT widen or reinterpret a stream, instance, field, time field, bound, or resource key. - -**Token type distinction:** The format of the access token is opaque to the Resource Server. The RS MUST determine the token's properties (including `pdpp_token_kind`) solely from the introspection response, never from token syntax. - -### Token introspection - -For separated AS/RS deployments, the RS MUST authenticate to the AS -introspection endpoint as required by RFC 7662. PDPP defines the following -extension fields in the introspection response: - -| Field | Type | Description | -|-------|------|-------------| -| `active` | boolean | Whether the token is currently valid. | -| `pdpp_token_kind` | string | `"owner"` or `"client"`. | -| `subject_id` | string | The subject (user) identifier. | -| `grant_id` | string | The associated grant identifier. Present for client tokens. | -| `client_id` | string | The client identifier. Present for client tokens. | -| `exp` | integer | Optional expiry timestamp (Unix epoch). Omitted when the token has no expiration. | -| `authorization_details` | array | The approved RFC 9396 detail for a client token. It carries the resolved grant enforcement constraints defined in Section 7. | - -The introspection response MUST contain the complete context needed to enforce -the request. The separated RS MUST enforce only from that response and MUST -NOT make a second AS lookup while handling the request. A co-located AS and RS -MAY resolve the same context through a local equivalent. - -**Token kind extensibility:** This specification defines `owner` and `client`. Deployments MAY introduce additional token kinds in companion profiles. A resource server that receives a `pdpp_token_kind` value it does not recognize MUST treat the token as unauthorized for all operations defined in this specification. - -Positive introspection results MUST NOT be cached longer than `min(token_exp, 60 seconds)`. Self-contained JWTs (e.g., signed JWTs) are allowed as an optimization but MUST NOT be the sole revocation mechanism; the RS MUST still be able to check active status through introspection or local equivalent. - -### Authentication - -Two authentication boundaries exist: - -**Owner operations:** `Authorization: Bearer `. Core owner tokens are scoped to a single subject's data store and support the Core owner and self-export operations defined here. The RS MUST derive the `subject_id` from the introspection response and MUST reject any request attempting to access data outside that subject's scope. Companion profiles may define additional owner-authenticated operations. How the owner obtains this token is out of scope (device code flow, API key, or any other mechanism). - -**Client operations** (query records, list streams, fetch blobs): `Authorization: Bearer `. Access tokens are bound to a specific grant. Both token types use RFC 6750 Bearer Token format. The RS distinguishes them via `pdpp_token_kind` in the introspection response. - -**Self-export:** An owner holding a valid owner token MAY query their own data using the standard client query endpoints without a client grant. This is the v0.1 self-export mechanism and does not require a separate grant. Conformant Core RS implementations SHOULD support this capability (see Section 9 conformance item 13). - -### Endpoints - -#### List streams - -``` -GET /v1/streams -Authorization: Bearer -``` - -Returns the streams available under the current grant with record counts. - -**Response:** -```json -{ - "object": "list", - "data": [ - { - "object": "stream", - "name": "conversations", - "record_count": 2196, - "last_updated": "2026-04-06T15:01:00Z", - "freshness": { - "captured_at": "2026-04-06T15:01:00Z", - "status": "current", - "last_attempted_at": "2026-04-06T15:01:00Z" - } - }, - { - "object": "stream", - "name": "messages", - "record_count": 48302, - "last_updated": "2026-04-06T15:01:00Z", - "freshness": { - "captured_at": "2026-04-06T15:01:00Z", - "status": "current", - "last_attempted_at": "2026-04-06T15:01:00Z" - } - } - ] -} -``` - -#### Get stream metadata {#stream-metadata} - -``` -GET /v1/streams/{stream} -Authorization: Bearer -``` - -Returns full source stream metadata. This endpoint is not grant-projected: grants determine whether the caller may access the stream and what reads or queries are permitted, but they do not redact or rewrite the metadata document returned here. Response: - -```json -{ - "object": "stream_metadata", - "name": "top_artists", - "schema": { }, - "primary_key": ["id"], - "cursor_field": "source_updated_at", - "consent_time_field": "source_updated_at", - "selection": { - "fields": true, - "resources": false - }, - "query": { - "range_filters": { - "source_updated_at": ["gte", "gt", "lte", "lt"] - }, - "expand": [ - { "name": "messages", "default_limit": 10, "max_limit": 50 } - ] - }, - "freshness": { - "captured_at": "2026-04-06T15:01:00Z", - "status": "current", - "last_attempted_at": "2026-04-06T15:01:00Z" - }, - "views": [ - { "id": "basic", "label": "Artist names and genres", "fields": ["id", "name", "genres"] } - ], - "relationships": [ - { "name": "messages", "stream": "messages", "foreign_key": "conversation_id", "cardinality": "has_many" } - ] -} -``` - -#### Freshness metadata - -A resource server MAY attach a `freshness` object to stream listings, stream metadata, and record-list responses. - -Freshness is server-observed disclosure metadata, not a grant constraint. It reports what the server knows about the recency of the underlying data relevant to the response. It does not guarantee that the source has not changed since `captured_at`, and it does not widen or narrow access rights. - -| Field | Type | Description | -|-------|------|-------------| -| `captured_at` | ISO 8601 or null | Time of the most recent successful collection or source confirmation that could have affected the response. null if unknown. | -| `status` | enum | `current`, `stale`, or `unknown`. `stale` means the server believes the stored data may no longer reflect source state based on local collection policy or failed refresh attempts. | -| `last_attempted_at` | ISO 8601 or null | Time of the most recent attempted refresh relevant to the response, if tracked. | - -#### List records {#list-records} - -``` -GET /v1/streams/{stream}/records -Authorization: Bearer -``` - -Returns records from a stream, filtered by the grant and any additional request parameters. - -**Query parameters:** - -| Parameter | Type | Description | -|-----------|------|-------------| -| `limit` | integer | Records per page. Default 25, max 100. A request for more than 100 is clamped to 100 and the response carries a non-fatal `limit_clamped` warning (see below), not an error. | -| `cursor` | string | Opaque pagination token from a previous response. Clients MUST NOT parse or construct cursor tokens. | -| `order` | enum | `desc` (default) or `asc`. | -| `filter[{field}]` and `filter[{field}][op]` | string | Owner-token current-capability filters only. Client-token requests MUST reject exact and range forms in v0.1. | -| `view` | string | Owner-token current-capability request for records projected to a named view. Client-token records requests MUST reject `view`; clients use explicit `fields` or the field projection already frozen into the grant. Mutually exclusive with `fields`. | -| `fields` | comma-separated | Sparse fieldset. Schema-required fields are always included. In v0.1, restricted to top-level field names only. Mutually exclusive with `view`. | -| `expand[]` | string | Owner-token current-capability request to expand a relation declared under `query.expand`. Depth is 1. Expanded relations appear under the `expanded` key on the parent record. Client-token requests MUST reject this parameter in v0.1. | -| `expand_limit[{relation}]` | integer | Owner-token current-capability limit for an expanded `has_many` relation. Valid only for relations declared under `query.expand`; defaults and limits come from that declaration. Client-token requests MUST reject this parameter in v0.1. | -| `changes_since` | string | Opaque incremental-sync token from a previous session (distinct token space from `cursor`). Returns only records whose grant-authorized projection changed since that cursor, plus tombstones for deletions. Use `next_changes_since` from the terminal page to seed the next session. Returns HTTP 410 Gone with error code `cursor_expired` if the cursor has expired. | - -The durable client-token base query surface in v0.1 is: `limit`, `cursor`, -`order`, `fields`, `changes_since`, and blob fetch. Exact and range -`filter[...]`, `expand[]`, and `expand_limit[...]` parameters are not part of -the client-token surface. Owner-token current-capability reads MAY support -exact and declared range filters, `view`, and declared expansion; those reads -consult current serving metadata. Advanced stream-specific query power MUST be -declared in stream metadata under `query`. - -Unknown query parameters and unsupported query shapes MUST be rejected with HTTP 400 and MUST NOT be silently ignored. - -**Non-fatal warnings:** A list response MAY carry a `meta.warnings[]` array reporting non-fatal lossiness that the server resolved without failing the request. Each entry has a stable `code` and a human-readable `message`; clients SHOULD branch on `code`, not on message text. A `limit` above the maximum is the canonical case: the RS returns the bounded page and a `limit_clamped` warning rather than silently dropping the excess or returning an error. Clients page forward with the returned cursor instead of expecting a larger page. Warnings are not errors and MUST NOT change the HTTP status. - -Client-token requests that contain any exact or range `filter[...]` parameter -MUST be rejected with HTTP 400 `invalid_request` before the RS consults current -SourceDeclaration or serving metadata. This rejection applies regardless of -whether the field or operator would otherwise be declared. Owner-token -current-capability reads MAY accept exact filters on authorized top-level -scalar fields and declared range filters; unknown fields and non-scalar fields -are HTTP 400, and fields outside the grant's authorized projection are HTTP 403 -`field_not_granted`. - -Client-token requests that contain `expand[]` or `expand_limit[...]` MUST be -rejected with HTTP 400 `invalid_request` before the RS consults current -SourceDeclaration or serving metadata. A v0.1 resolved grant does not freeze -relationship identity, target stream, foreign-key join semantics, cardinality, -or expansion limits. Current relationship metadata therefore cannot interpret -client grant rights. Owner-token current-capability reads MAY use declared -expansion against current serving metadata. - -For owner-token current-capability reads, range filters (`gte`, `gt`, `lte`, -`lt`) apply only to fields declared in `query.range_filters`. Nested paths, -arrays, OR grammar, and full-text search are not part of v0.1. - -For owner-token current-capability reads, expansion is declaration-driven. A -relation is structurally present if listed under `relationships`, but it is -only expandable if declared under `query.expand`. `expand_limit[{relation}]` -is only valid for declared `has_many` relations. - -**Stable sort:** Records are sorted by `(cursor_field, primary_key)` for cursor safety. Null or absent `cursor_field` values sort after present values. - -Page cursors are direction-bound: a client MUST follow a `next_cursor` with the same `order` value that produced it. To change direction, the client MUST restart pagination without a cursor. Resource servers MUST reject order-mismatched page cursors as `invalid_cursor`. - -**Incremental sync for mutable streams:** Pass `changes_since` to retrieve only records changed since a previous sync. The resource server returns changed records within the grant's authorized field projection. If a record was deleted, a tombstone entry is included. If the cursor has expired (HTTP 410 Gone with error code `cursor_expired`), the client MUST perform a full re-sync. - -Eligibility for `changes_since` MUST be computed on the grant-authorized projection, not on the unprojected record. Returning a record whose authorized projection is unchanged is a protocol violation because it leaks that hidden fields changed. - -If a `changes_since` response is paginated, all pages in that session MUST be anchored to the same session horizon selected on the first page. New writes arriving after page 1 MUST NOT appear in later pages of that same session; they surface in the next session via the terminal-page `next_changes_since`. - -**Filter on unauthorized field:** For owner-token current-capability reads, RS -MUST reject a `filter[{field}]` parameter targeting a field outside the grant's -authorized projection with 403 `field_not_granted`. Client-token requests are -rejected earlier by the v0.1 client-filter rule above. - -**Expansion:** A client-token expansion request is rejected with 400 -`invalid_request` before declaration lookup. For an owner-token -current-capability read, requesting an undeclared relation returns 400 -`invalid_expand`. Expansion never widens the current owner read scope. - -**Response:** -```json -{ - "object": "list", - "url": "/v1/streams/conversations/records", - "has_more": true, - "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wMy0yNVQxODoyMjoxMVoiLCJpZCI6ImNvbnZfMDFKUVc4TTJSNyJ9", - "next_changes_since": "eyJjaGFuZ2VzX3NpbmNlIjoiMjAyNi0wNC0wNlQxNTowMTowMFoifQ", - "freshness": { - "captured_at": "2026-04-06T15:01:00Z", - "status": "current", - "last_attempted_at": "2026-04-06T15:01:00Z" - }, - "data": [ - { - "object": "record", - "id": "conv_01JQW8M2R7", - "stream": "conversations", - "data": { - "id": "conv_01JQW8M2R7", - "title": "Trip planning", - "source_created_at": "2026-03-25T18:22:11Z" - }, - "emitted_at": "2026-04-06T15:01:00Z" - } - ] -} -``` - -The terminal page of a `changes_since` request (i.e., `has_more: false`) MUST include `next_changes_since`. - -#### Get a single record - -``` -GET /v1/streams/{stream}/records/{id} -Authorization: Bearer -``` - -Returns a single record by primary key. The `{id}` path parameter is the -percent-encoded canonical key string. Owner-token current-capability reads -support `expand[]`; client-token requests reject it in v0.1 before declaration -lookup. - -#### Delete a record (owner-authenticated) - -``` -DELETE /v1/streams/{stream}/records/{id} -Authorization: Bearer -``` - -Permanently removes a record from the stream. The RS may implement this as a tombstone internally. Returns 204 No Content on success. The `{id}` path parameter is the percent-encoded canonical key string. - -#### Get a blob - -``` -GET /v1/blobs/{blob_id} -Authorization: Bearer -``` - -The resource server authorizes blob access by verifying that: - -1. The grant includes a stream containing a record that references this `blob_id`. -2. The referencing record passes all grant filters. -3. The `blob_ref` field is included in the grant's authorized field projection. - -A `blob_id` alone does not grant access. The client MUST have discovered the blob through an authorized record. - -**Direct response** MUST include: -- `Content-Type` (IANA media type) -- `Content-Length` if known -- `Cache-Control: private, no-store` -- `Accept-Ranges: bytes` if range requests are supported - -**Redirect response** (HTTP 302) MUST include: -- `Location` header pointing to a short-lived signed URL (valid for at least 60 seconds) -- `Cache-Control: no-store` - -A stale or unknown `blob_id` returns 404 `blob_not_found`. - -`HEAD` is supported for size checks. `Range` headers are recommended for large files. - -### Errors {#errors} - -Every non-2xx response returns a structured error: - -```json -{ - "error": { - "type": "permission_error", - "code": "grant_stream_not_allowed", - "message": "Grant does not include stream 'messages'.", - "param": "expand[0]", - "request_id": "req_01JQXA3N9Y" - } -} -``` - -| Code | HTTP Status | Type | Meaning | -|------|------------|------|---------| -| `invalid_cursor` | 400 | `invalid_request_error` | Cursor token is malformed or unrecognized. | -| `invalid_request` | 400 | `invalid_request_error` | Malformed request parameter or mutually exclusive parameters. | -| `invalid_expand` | 400 | `invalid_request_error` | Relation is not declared as expandable. | -| `unknown_field` | 400 | `invalid_request_error` | Requested field not in stream schema. | -| `unsupported_version` | 400 | `invalid_request_error` | `PDPP-Version` header specifies unsupported version, or grant references unsupported schema version. | -| `authentication_error` | 401 | `authentication_error` | Missing or invalid access token. | -| `authorization_state.unsupported_legacy_shape` | 401 | `authentication_error` | Persisted authorization state does not match a supported shape. Fresh consent is required when no migration applies. | -| `field_not_granted` | 403 | `permission_error` | Filter targets a field outside the grant's authorized projection. | -| `insufficient_scope` | 403 | `permission_error` | Expansion requests a stream not in the grant. | -| `grant_stream_not_allowed` | 403 | `permission_error` | Stream not in grant. | -| `grant_time_range_exceeded` | 403 | `permission_error` | Request filters exceed the grant's frozen `time_constraint`. | -| `grant_expired` | 403 | `permission_error` | Grant has expired. | -| `grant_revoked` | 403 | `permission_error` | Grant has been revoked. | -| `grant_invalid` | 403 | `permission_error` | Resolved grant is malformed or cannot be served without changing its authorization meaning. | -| `blob_not_found` | 404 | `not_found_error` | `blob_id` is unknown or stale. | -| `not_found` | 404 | `not_found_error` | Stream or record not found. | -| `cursor_expired` | 410 | `gone_error` | `changes_since` cursor is too old; full re-sync required. | -| `rate_limit_exceeded` | 429 | `rate_limit_error` | Too many requests. Includes `Retry-After` header. | -| `api_error` | 500 | `api_error` | Internal server error. | - -### API versioning - -API version is specified via header: - -``` -PDPP-Version: 2026-04-06 -``` - -If the `PDPP-Version` header is absent, the RS uses the current stable version and returns the selected version in the `PDPP-Version` response header. If the requested version is not supported, the RS returns 400 `unsupported_version`. - -Every response includes a `Request-Id` header for debugging. - ---- - -## 9. Conformance {#conformance} - -This section defines what it means to implement each PDPP role. Conformance claims should reference this section. - -Conformance is role- and behavior-based. A conformant implementation is not required to use any particular vendor-hosted service, token, chain, centralized registry operator, domain, or repository deployment. - -### Authorization Server conformance - -A conformant authorization server: - -1. Accepts selection requests using the RFC 9396 `authorization_details` envelope with `type: "https://pdpp.dev/data-access"`. -2. Validates selection requests against one retained SourceDeclaration snapshot: rejects unknown streams, unsupported selection parameters (e.g., `time_range` on a stream without `consent_time_field`), and unrecognized selection presets. -3. Issues grants that conform to the grant schema defined in Section 7 (normative field tables). All grant fields are derived from the selection request, client registration, or AS policy. -4. Expands wildcards and selection presets into explicit stream names, fields, per-stream instance handles, resources, and frozen time constraints before issuing the grant. -5. Produces a binding-neutral Source validation failure when a request contains both or neither of `streams` and `selection_preset`. The OAuth/RAR binding maps it to RFC 9396 `invalid_authorization_details`. -6. MUST NOT reject a `purpose_code` solely because it is not in the PDPP registry. For unrecognized codes, displays `purpose_description` if present, or the raw URI. MAY reject a `purpose_code` based on local policy. -7. Renders requester identity metadata, declaration-authored data descriptions, structured policy declarations, and client-authored claims as semantically distinct categories during consent. MUST attribute `client_claims` to the client and MUST NOT present them as protocol-enforced terms. If `client_claims` are rendered during final review, binds the normalized exact claims into the immutable final approval artifact and review revision, and preserves that binding in retained consent evidence, without adding them to the resolved grant or RS enforcement. -8. Tracks grant lifecycle (active, expired, revoked). Reflects revocation immediately in introspection responses (`active: false`). -9. Issues access tokens bound to specific grants. Access tokens include the PDPP introspection extension fields. -10. For `single_use` grants, consumes the grant atomically with first client-token issuance and rejects subsequent attempts to issue new client access tokens against that grant. -11. Validates stream/field/view/resource-id shape at grant issuance. -12. MUST NOT define a view including fields absent from the retained SourceDeclaration schema. -13. Resolves view names to field lists at issuance time; stores resolved `fields` in the `StreamGrant`. Client-token record reads reject query-time `view` in v0.1. Owner-token current-capability reads MAY resolve current views. -14. Obtains explicit affirmative user consent before issuing grants with `purpose_code: "https://pdpp.dev/purpose/ai_training"`. -15. Resolves omitted instance IDs before the final approval surface. Binds - exact resolved instances and all final decision fields to an immutable - review revision or digest. Rejects stale approval if eligibility or the - reviewed revision changes before approval. -16. Retains one exact SourceDeclaration snapshot through request validation, consent display, narrowing, issuance, and consent evidence. A later current declaration never substitutes for it. -17. Returns 400 `unsupported_version` if `PDPP-Version` header specifies an unsupported version. -18. For a separated AS and RS, authenticates the RS at the RFC 7662 introspection endpoint and returns the complete grant enforcement context in one response. -19. Consumes each OAuth authorization code atomically on its first successful redemption. Rejects every later redemption with `invalid_grant` and does not issue another token. -20. Issues refresh tokens only for `continuous` grants, or for a grant package only when every child grant is `continuous`. It rotates refresh tokens by family. Reuse of a superseded token revokes the family and every family-linked access token, returns `invalid_grant`, and requires fresh authorization. -21. Rejects unsupported persisted authorization state before introspection or request handling. Does not reconstruct missing facts from current configuration and requires fresh consent when no migration applies. - -### Resource Server conformance - -A conformant Core RS: - -1. Implements the query endpoints defined in Section 8: list streams, get stream metadata, list records, get a single record, get a blob, delete a record (owner-authenticated). -2. Enforces grant constraints on every client request: stream membership, explicit instance handles, frozen `time_constraint`, `fields` allowlist, and `resources` filter. -3. In a separated deployment, resolves access tokens through authenticated RFC 7662 introspection, enforces only from that response, and makes no second AS lookup while handling the request. A co-located deployment may use a local equivalent. Caches positive results no longer than `min(token_exp, 60 seconds)`. -4. Distinguishes owner tokens from client tokens via `pdpp_token_kind`. -5. Computes effective filters as `grant_filter AND request_filter`. -6. Returns structured errors as defined in Section 8 (unified error table). -7. Supports incremental sync via `changes_since` for `mutable_state` streams, including tombstone entries, omission of records whose grant-authorized projection did not change, and HTTP 410 with error code `cursor_expired` on cursor expiry. -8. Returns `next_changes_since` on the terminal page of every `changes_since` response. -9. Rejects client-token exact and range `filter[...]` parameters with 400 - `invalid_request` before consulting current declaration metadata; owner-token - current-capability reads MAY retain declared filter behavior. -10. Rejects unknown query parameters and unsupported query shapes with 400 instead of silently ignoring them. -11. Implements the `PDPP-Version` header negotiation. -12. Scopes owner token access to a single subject's data store; derives `subject_id` from introspection response. -13. SHOULD support owner-authenticated access to the `/v1/streams/{stream}/records` query endpoints without a client grant, allowing the data subject to export their own data directly (self-export). - -Collection Resource Server, runtime, and connector conformance are separate -claims defined in the [PDPP Collection Profile](spec-collection-profile). - -### Client conformance - -A conformant client: - -1. Submits selection requests using the RFC 9396 `authorization_details` envelope. -2. Uses access tokens (not raw grants) to authenticate with the resource server. -3. Treats `cursor` and `changes_since` tokens as opaque and from distinct token spaces. MUST NOT use a `next_cursor` value as a `changes_since` parameter. -4. Stores `next_changes_since` from the terminal page of a `changes_since` response for use in the next sync session. -5. Respects HTTP 410 `cursor_expired` responses by performing a full re-sync rather than retrying with the expired cursor. -6. Honors retention commitments declared in the grant. - -### Conformance test suite - -A formal conformance test suite is planned but is not defined in v0.1. This is out of scope for the current version. - ---- - -## 10. Security Considerations {#security} - -### Token security - -PDPP defines two token kinds at the resource server boundary: owner tokens and client tokens. Both use RFC 6750 Bearer Token format on the wire. The RS distinguishes them via `pdpp_token_kind` in the introspection response, not by token syntax. - -For separated AS/RS deployments, the RS MUST authenticate to the AS introspection endpoint (RFC 7662) and enforce only from its response. It MUST NOT make a second AS lookup while handling the request. For co-located deployments, a local equivalent (shared database lookup or function call) is acceptable. Self-contained JWTs are allowed as an optimization but MUST NOT be the sole revocation mechanism. - -Positive introspection results MUST NOT be cached longer than `min(token_exp, 60 seconds)`. This bounds the propagation window for revocation. - -An access token issued with or from a refresh-token family MUST be linked to -that family and MUST have a short, token-specific expiration no later than the -family or grant expiration. A token response MUST derive `expires_in` from the -access token's persisted expiration. It MUST omit `expires_in` when the access -token has no expiration. An RFC 7662 response MUST likewise omit `exp` when no -expiration exists. - -Every successful OAuth token response that contains an access token or refresh -token MUST include `Cache-Control: no-store` and `Pragma: no-cache` before the -response is serialized. This applies to authorization-code, refresh-token, and -device-code exchanges, including package-scoped variants. - -An authorization code MUST be consumed atomically on its first successful -redemption. A later redemption, including one with the same valid PKCE -verifier, MUST return `invalid_grant` and MUST NOT issue another token. - -When an authorization server issues refresh tokens for a `continuous` grant, -each token MUST belong to a family and MUST rotate after successful use. The -AS MUST atomically supersede the presented token and issue one active -successor. Reuse of any superseded token, including a retry after a lost -successful response, MUST revoke the token family and every access token linked -to that family, return `invalid_grant`, and require fresh authorization. -Introspection MUST report every family-linked access token inactive after the -replay is detected. An AS MUST NOT issue refresh tokens for a `single_use` -grant. It MUST NOT issue one for a grant package unless every child grant is -`continuous`. On upgrade, an implementation MUST NOT infer family linkage for -an existing bearer. Any live refresh family without persisted bearer linkage -MUST be revoked together with its grant- or package-bound bearer tokens and -MUST require fresh authorization. This behavior follows -[RFC 9700](https://www.rfc-editor.org/rfc/rfc9700), Section 4.14.2. - -**Sender-constrained tokens (non-normative):** Bearer tokens (RFC 6750) are the v0.1 baseline. Deployments handling sensitive standing access SHOULD consider sender-constrained tokens, which bind a token to a client-held key so that possession of the token alone is not sufficient to use it. DPoP (RFC 9449) and mutual-TLS certificate binding (RFC 8705) are both compatible with PDPP's introspection-based design. A formal optional hardening profile is a candidate for a future version. - -### Grant integrity - -The grant is designed to be signable. The `subject` and `client` fields support future JWS/JWT signatures. Implementations MUST treat grants as tamper-sensitive. Grant signing and a formal token format are deferred to a future version; the current design is compatible with adding them without breaking changes. - -Large `authorization_details` payloads may exceed URL length limits. Production deployments SHOULD use Pushed Authorization Requests (PAR, RFC 9126). - -### Credential handling - -INTERACTION_RESPONSE messages in the Collection Profile may contain passwords and OTP codes. Runtimes MUST NOT log or persist credential data. See the [PDPP Collection Profile](spec-collection-profile) for details. - -### Connector trust - -In the Collection Profile, connectors receive credentials via the INTERACTION channel. A malicious connector could exfiltrate credentials. Production deployments SHOULD mitigate this by sandboxing connector processes (restricting network egress), using connectors from trusted registries only, or having the runtime authenticate on behalf of the connector and pass only session tokens. A formal connector trust model is deferred. - -### Trust boundary responsibilities - -| Role | Responsibilities | -|------|----------------| -| **Authorization Server** | Validates purpose-code syntax and local policy; authenticates user; preserves semantic distinctions on the consent surface; validates stream/field/view/resource-id shape at grant issuance; resolves views to field lists; issues access tokens; maintains grant lifecycle. | -| **Resource Server** | Validates token via introspection; enforces stream, instance, fields, frozen time constraints, and resources on every request; never reinterprets authorization from a current declaration; scopes owner access to one subject. | -| **Client** | Submits well-formed selection requests; uses access tokens; terminates on revocation; honors retention commitments. | - -### Revocation {#revocation} - -There is no push revocation channel in v0.1. Revocation propagation is bounded by the introspection cache TTL (maximum 60 seconds). The AS MUST reflect revocation immediately in introspection responses (`active: false`). A client will receive a 403 `grant_revoked` response no later than 60 seconds after revocation. - -Upon receiving any 403 `grant_revoked` response, the client MUST stop further -requests against that grant. Companion profiles define how their active work is -terminated. - -Revocation stops future access only. Data already delivered to the client before revocation is governed by the grant's `retention` policy and applicable legal obligations. - -Revocation is not deletion. v0.1 does not define an active erasure signal or downstream deletion callback. - ---- - -## 11. Privacy Considerations {#privacy} - -### Data minimization {#data-minimization} - -Stream-level and field-level selection implements the GDPR principle of data minimization. Clients SHOULD request only the data they need for their stated purpose. Authorization servers SHOULD display the specific fields and streams being requested during consent. - -### Purpose limitation - -The `purpose_code` URI enables purpose declaration, consent display, registration policy, and implementation-defined audit or transparency mechanisms. Authorization servers MAY restrict client registrations to specific purpose codes. - -### Auditability and transparency boundary - -PDPP core defines the authorization, grant, and disclosure semantics that make auditing and transparency possible. This includes stable identifiers and state transitions such as `grant_id`, `client_id`, `subject_id`, `purpose_code`, stream and resource identifiers, timestamps, and grant lifecycle states. - -PDPP core does not define a local audit-log schema, storage model, retention period for operational logs, or a user-facing disclosure-history interface. Implementations MAY maintain local records of grant issuance, disclosure, sync, token use, and revocation under local policy. - -If interoperable audit or transparency events are standardized in the future, they SHOULD be defined in a separate companion profile rather than by extending the core grant or query semantics. - -### Retention - -The `retention` field is a structured policy declaration and policy commitment by the data recipient. PDPP does not technically enforce retention. Enforcement is through legal agreements, contractual obligations, or trust registry mechanisms. This is an intentional design choice, consistent with how OAuth 2.0 treats scope compliance. - ---- - -## 12. Scope and Boundaries - -### In scope (v0.1) - -- Parameterized grants for user-owned data -- Flat relational streams with declared schemas -- Binary data references (`blob_ref`) -- Cross-stream references within a single subject (`resource_ref`) -- SourceDeclaration shared by connector-backed and provider-native sources -- Resource server query API with cursor-based pagination and grant enforcement -- Incremental sync for `mutable_state` streams via `changes_since` -- Tombstones for deleted records -- Owner-authenticated user erasure (`DELETE /v1/streams/{stream}/records/{id}`) -- Self-export via owner token (SHOULD-level Core RS conformance, see Section 9 item 13) -- Conformance definitions for all roles - -### Out of scope (v0.1) - -| Concern | Status | -|---------|--------| -| Authorization server interface | Introspection endpoint contract defined here; full AS interface informational only in v0.1 | -| Ingest and sync-state endpoints | Defined by the Collection Profile; not required for Core RS | -| Conformance test suite | Planned but not defined in v0.1 | -| Webhook / push ingestion | Deferred; see spec-deferred | -| Source lifecycle actions | Deferred (e.g., deleting source data after export); see spec-deferred | -| Event-driven collection triggers | Deferred; architecturally distinct from the pull-based Collection Profile | -| Grant signing and token format | Deferred; current design is compatible | -| Trust registry and connector certification | Deferred | -| Consent screen visual design | Surface-specific; semantic rendering obligations remain in scope | -| Local audit-log schema and user-facing access history | Deployment-specific; core defines auditable protocol primitives only | -| Interoperable audit/transparency event format | Separate companion profile if standardized | -| Point-in-time reconstruction | Deferred (reconstructing full state at a past timestamp) | -| Canonical view naming vocabulary | Deferred; will be informed by implementation experience | -| Predicate-based grant scoping | Deferred; see spec-deferred for subset template design direction | -| Real-time streaming | Different spec needed | - -### Predicate-based grant scoping - -v0.1 grants narrow access only by stream selection, named view or field projection, time range, and explicit resource identifiers. Generic predicate expressions (e.g., `filter[sender_domain]=amazon.com` as a grant parameter) are not supported. - -**Request-time filters are not grant scope.** Owner-token current-capability -reads MAY use `filter[...]` to narrow a result set, but those filters do not -narrow any client grant. Client-token requests do not support request-time -filters in v0.1; a client that needs a semantically bounded subset requests a -named stream declared by the SourceDeclaration. - -**Derived subset streams (non-normative).** A stream MAY represent either a source-native collection or a derived subset, provided its semantics are stable, versioned through the SourceDeclaration, and human-reviewable in consent UI. Implementations that need semantically bounded consent in v0.1 SHOULD prefer named streams with human-readable semantics (e.g., a source that exposes `amazon_messages` as a distinct stream) over ad hoc technical predicates. Stream names MUST NOT encode predicate logic or synthesize per-request subsets; derived streams MUST be statically declared in the SourceDeclaration. - -The recommended future direction for this capability is declaration-defined parameterized subset templates with typed bound parameters and publisher-authored consent display strings. See spec-deferred for the design constraints and open questions that must be resolved before specifying this. - -### Extensions - -PDPP capabilities beyond this specification (for example, search or aggregation interfaces) are defined in companion profiles, not by extending Core semantics. Implementations MUST NOT change the meaning of Core-granted access via extensions: a grant issued under this specification authorizes exactly what Sections 7 and 8 define, regardless of what additional capabilities a deployment offers. Optional capabilities MUST be discoverable via declared metadata rather than assumed to be present. Unrecognized declared capabilities MUST be ignorable by clients. A full capability-advertisement grammar is deliberately deferred to a future version. - -### Specification governance - -PDPP protocol changes are proposed through public repository pull requests. In this repository, non-trivial protocol, reference contract, or architecture changes are tracked with OpenSpec before implementation so reviewers can audit the rationale, tasks, and requirement deltas. - -Current active editors and maintainers are listed in `MAINTAINERS.md`. This repository uses a three-license split: PDPP protocol specification text (all root `spec-*.md` files and their mirrored site pages) is made available under the Community Specification License 1.0 (SPDX: Community-Spec-1.0; see `LICENSE-specs`); software packages, examples, and generated artifacts use Apache-2.0 (see `LICENSE`) unless a narrower file-local notice says otherwise; and user-facing documentation prose outside the specification uses CC BY 4.0 (see `LICENSE-docs`). - ---- - -## 13. TypeScript Types - -**Note:** TypeScript types in this section are non-normative. The normative definitions are the prose field tables in Sections 5, 6, and 7. - -```typescript -// --- Record model --- - -interface BlobRef { - blob_id: string; - mime_type: string; // IANA media type - size_bytes: number; - sha256: string; - fetch_url?: string; // Injected by resource server at read time; absent in producer output -} - -interface ResourceRef { - source_id: string; // SourceDeclaration source.id absolute URI - stream: string; - record_id: string | string[]; -} - -// --- Selection (request-time) --- - -interface TimeRange { - since?: string; // ISO 8601, inclusive >= - until?: string; // ISO 8601, exclusive < -} - -interface StreamRequest { - name: string; - necessity?: 'required' | 'optional'; - instance_ids?: string[]; - time_range?: TimeRange; - view?: string; // Mutually exclusive with fields - fields?: string[]; // Top-level field names only in v0.1; mutually exclusive with view - resources?: string[]; // Canonical key strings per compound key encoding -} - -interface PresetStreamSelection { - name: string; - view?: string; // Mutually exclusive with fields - fields?: string[]; // Top-level field names only in v0.1; mutually exclusive with view -} - -// --- Source binding --- - -interface SourceObject { - kind: 'connector' | 'provider_native'; - id: string; // Stable absolute URI for the authorization and data surface -} - -interface SourceRequestObject { - id: string; // Stable absolute URI for the authorization and data surface - kind?: 'connector' | 'provider_native'; // Optional client trust expectation -} - -type SelectionRequest = { - type: 'https://pdpp.dev/data-access'; - source: SourceRequestObject; - purpose_code: string; - purpose_description?: string; - access_mode: 'single_use' | 'continuous'; - retention?: { - max_duration: string; - on_expiry: 'delete' | 'anonymize'; - }; - client_claims?: { commitments?: string[] }; -} & ( - | { streams: StreamRequest[]; selection_preset?: never } - | { selection_preset: string; streams?: never } -); - -// --- Grant (post-consent, immutable) --- - -interface TimeConstraint extends TimeRange { - field: string; -} - -interface StreamGrant { - name: string; - instance_ids: string[]; // Non-empty, unique, and stream-scoped - fields: string[]; // Non-empty and authoritative for RS enforcement - time_constraint?: TimeConstraint; - resources?: string[]; // Canonical key strings per compound key encoding -} - -interface DataGrant { - version: '0.1.0'; - grant_id: string; - issued_at: string; - subject: { id: string }; - client: { client_id: string; client_display?: Record }; - source: SourceObject; - source_declaration: { version: string }; - purpose_code: string; // URI - purpose_description?: string; - access_mode: 'single_use' | 'continuous'; - streams: StreamGrant[]; - selection_preset?: string; - retention?: { - max_duration: string; // ISO 8601 duration - on_expiry: 'delete' | 'anonymize'; - }; - expires_at?: string | null; -} - -// --- Source Declaration --- - -interface StreamView { - id: string; - label: string; - fields: string[]; -} - -interface StreamRelationship { - name: string; - stream: string; - foreign_key: string; - cardinality: 'has_many' | 'has_one'; -} - -interface StreamExpandCapability { - name: string; - default_limit?: number; - max_limit?: number; -} - -interface StreamQueryCapabilities { - range_filters?: Record>; - expand?: StreamExpandCapability[]; - search?: { - lexical_fields?: string[]; - semantic_fields?: string[]; - }; - aggregations?: { - count?: true; - count_distinct?: string[]; - group_by?: string[]; - group_by_time?: string[]; - max?: string[]; - min?: string[]; - sum?: string[]; - }; -} - -interface SourceDeclarationStream { - name: string; - description?: string; - display?: { label?: string; detail?: string }; - semantics: 'append_only' | 'mutable_state'; - schema: Record; - primary_key: string[]; - cursor_field?: string; // Logical ordering field for cursor-based reads and incremental sync - consent_time_field?: string; // Absent means time_range not supported for this stream - selection: { - // time_range capability derived from consent_time_field presence - fields: boolean; - resources: boolean; - }; - views?: StreamView[]; - relationships?: StreamRelationship[]; - query?: StreamQueryCapabilities; -} - -interface SourceDeclaration { - protocol_version: '0.1.0'; - source: SourceObject; - declaration_version: string; - publisher: { id: string }; - display: { name: string }; - selection_presets?: Array<{ - id: string; - label: string; - streams: PresetStreamSelection[]; - }>; - streams: SourceDeclarationStream[]; - extensions?: Record; -} - -// --- Token introspection response (PDPP extensions to RFC 7662) --- - -interface PDPPIntrospectionResponse { - active: boolean; - pdpp_token_kind?: string; // Core defines 'owner' and 'client'; companion profiles may add kinds (unknown kinds are unauthorized for Core operations) - subject_id?: string; - grant_id?: string; // Present for client tokens - client_id?: string; // Present for client tokens - exp?: number; // Unix timestamp - authorization_details?: Array>; // Approved RFC 9396 detail with Section 7 enforcement constraints -} - -// --- Tombstone (response object) --- - -interface TombstoneRecord { - object: 'record'; - id: string; // Canonical key string - stream: string; - deleted: true; - deleted_at: string; // ISO 8601, required - emitted_at: string; // ISO 8601, required - // No data field -} -``` - ---- - -## Appendix A: Purpose Code Registry - -**Registry governance:** Purpose code registries under `pdpp.dev` are controlled by PDPP maintainers via a public change process. Implementations MUST treat unrecognized purpose URIs as opaque identifiers and MUST NOT reject requests solely because a purpose code is unrecognized. - -Purpose codes are URIs. The following codes are defined by PDPP. Implementers may define additional codes using their own URI namespaces. - -| Code | Description | -|------|-------------| -| `https://pdpp.dev/purpose/personalization` | Tailoring the application experience to the user. | -| `https://pdpp.dev/purpose/analytics` | Analyzing user data to produce insights for the user. | -| `https://pdpp.dev/purpose/export` | Exporting data for the user's own use. | -| `https://pdpp.dev/purpose/agent_context` | Providing context to a personal AI agent. | -| `https://pdpp.dev/purpose/ai_training` | Using data to train AI models. The AS MUST obtain explicit affirmative user consent before issuing any grant with this purpose code. This is a protocol-level requirement, not merely advisory. | -| `https://pdpp.dev/purpose/research` | Academic or market research. | - ---- - -## Appendix B: Relationship to the Data Transfer Project (DTI) - -PDPP and DTI are complementary protocols addressing different concerns. PDPP defines parameterized consent and disclosure semantics (the grant is the consent artifact; the query API is the disclosure mechanism). DTI defines canonical data models and transfer adapters (the mechanics of moving data between systems). - -The two protocols can chain: a PDPP grant can authorize access to data that a DTI transfer then moves, using PDPP stream schemas to carry DTI canonical data model payloads. Formal integration between PDPP grants and DTI transfer manifests is a separate effort; no integration document is currently specified. - -Note: "Data Transfer Project" is referred to as DTI (Data Transfer Initiative) in current usage, reflecting its evolution from the original DTP initiative. diff --git a/apps/site-blume-spike/content/specification/spec-discovery-and-trust.md b/apps/site-blume-spike/content/specification/spec-discovery-and-trust.md deleted file mode 100644 index cc07e35b0..000000000 --- a/apps/site-blume-spike/content/specification/spec-discovery-and-trust.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: "PDPP Source Declaration Discovery and Trust v0.1.0" -description: "How an authorization server discovers, retrieves, validates, and accepts a source declaration." ---- - -> **Spec status** -> -> Status: **Companion specification draft** -> -> Date: 2026-08-14 - -## 1. Scope - -This companion specification defines how an authorization server discovers, -retrieves, validates, and accepts a source declaration. The Core specification -defines the `SourceDeclaration`, selection request, grant, and resource server -semantics. This specification does not redefine those contracts. - -Discovery is an onboarding concern. It is not a resource server authorization -dependency. A resource server enforces a resolved grant without retrieving a -current declaration. - -The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, -RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL in this document are to be -interpreted as described in BCP 14 [RFC 2119] [RFC 8174] when, and only when, -they appear in all capitals. - -## 2. Provider-native discovery - -An authorization server that onboards a provider-native source SHALL start -with an already accepted protected-resource identifier. The identifier MUST be -an HTTPS URI without a fragment or user information. It SHOULD NOT contain a -query component. - -The authorization server SHALL derive the protected-resource metadata URL as -specified by RFC 9728 Section 3.1. It inserts -`/.well-known/oauth-protected-resource` between the authority and any path or -query component. It removes the terminating slash after the authority before -insertion. For example: - -| Protected-resource identifier | Metadata URL | -| --- | --- | -| `https://resource.example.com` | `https://resource.example.com/.well-known/oauth-protected-resource` | -| `https://resource.example.com/` | `https://resource.example.com/.well-known/oauth-protected-resource` | -| `https://resource.example.com/?tenant=one` | `https://resource.example.com/.well-known/oauth-protected-resource?tenant=one` | -| `https://resource.example.com/owner/alice` | `https://resource.example.com/.well-known/oauth-protected-resource/owner/alice` | - -The authorization server SHALL retrieve the metadata with HTTP `GET`. The -returned `resource` value MUST be byte-for-byte identical to the protected- -resource identifier used for the request. - -PDPP defines the protected-resource metadata member -`pdpp_source_declaration_uri`. It contains one HTTPS URI string without a -fragment or user information. The member is OPTIONAL in generic protected- -resource metadata. It is REQUIRED when the resource is onboarded as one -provider-native PDPP source. - -The retrieved `SourceDeclaration.source.kind` MUST be `provider_native`, and -`SourceDeclaration.source.id` MUST be identical to the accepted -protected-resource identifier. The authorization server SHALL reject either -mismatch before consent or grant issuance. - -## 3. Source onboarding and authority - -An ordinary authorization request SHALL name only a source already accepted by -the authorization server. A new provider-native resource SHALL enter through -explicit owner or operator onboarding. A client SHALL NOT select a new -resource authority or declaration URI during authorization. - -Connector and community sources SHALL enter through an installed catalog, an -accepted registry entry, or explicit local provisioning. Local provisioning -MAY allow private or local endpoints under the operator's network policy. This -local exception does not change the public protocol requirements. - -TLS authentication of protected-resource metadata authenticates the resource -authority and its declaration pointer. The declaration MAY be hosted on a -different origin. The declaration host does not, by itself, authenticate -`publisher.id`. - -The authorization server SHALL keep resource authority separate from publisher -attribution. It SHALL treat `publisher.id` as authenticated only when an -accepted channel or configured mapping binds that publisher to the declaration. -Without that binding, the publisher value is a non-authoritative claim and -MUST NOT support source acceptance, redirect policy, attribution, or another -trust decision. - -## 4. Bounded declaration retrieval - -The declaration retriever SHALL: - -1. Use HTTPS without ambient credentials. -2. Enforce configured response-byte, time, and retrieval-depth limits. -3. Require every redirect target and the final declaration URL to satisfy the - accepted declaration pointer and the configured redirect policy. The policy - MAY reject all redirects. -4. Resolve DNS freshly for every connection attempt, including each redirect - hop. -5. Validate every resolved address against the applicable network policy before - connecting. -6. Connect only to an address from that validated result while preserving the - destination authority for TLS authentication. -7. Reject a declaration that requires automatic retrieval of a remote schema. -8. Fail closed when a bound, validation, redirect, network, or identity check - fails. - -An address accepted for an earlier connection attempt MUST NOT authorize a -later DNS result. Validation of the final declaration URL is separate from -validation of `SourceDeclaration.source.id`. The declaration location is not -the source identity. - -## 5. Accepted revisions - -An accepted revision SHALL be keyed by its accepted authority binding, -`source.id`, and opaque `declaration_version`. After JSON parsing and Source -Declaration validation, later content under the same key MUST compare equal as -parsed JSON. - -An implementation MAY use an internal content fingerprint to accelerate this -comparison. The fingerprint algorithm is not a protocol identity and need not -be portable between implementations. - -When the authorization server uses provider-native discovery for consent, its -consent and audit evidence SHALL retain an unambiguous AS-local -accepted-revision reference to the accepted authority binding and parsed -revision retained by this AS. That reference is not a portable authorization -right, grant identity, bearer handle, or cross-AS declaration credential. - -Different parsed content under an accepted key is equivocation. The -authorization server SHALL reject it and retain the previously accepted -content. It SHALL NOT infer ordering or freshness from -`declaration_version`. A pointer to a previously accepted revision is accepted -or rejected only under explicit publisher or local rollback policy. - -## 6. Use and lifecycle - -Declaration display values are untrusted input. An implementation SHALL escape -them for their output context and enforce configured response, parser, display, -and logging limits before consent rendering or logging. - -Current declaration query capabilities MUST NOT widen an issued grant. A local -block MAY prevent a declaration from being used for new consent. That block -MUST NOT automatically revoke historical grants. - -The Collection Profile remains OPTIONAL. Discovery and trust apply equally to -provider-native sources, pre-collected sources, and connector-backed sources. -An accepted source does not need a Collection Profile extension unless the -implementation uses Collection Profile behavior for that source. - -## References - -- RFC 2119, Key words for use in RFCs to Indicate Requirement Levels -- RFC 8174, Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words -- RFC 9728, OAuth 2.0 Protected Resource Metadata -- [PDPP Core](spec-core) -- [PDPP Collection Profile](spec-collection-profile) diff --git a/apps/site-blume-spike/islands/SelfHostCommand.tsx b/apps/site-blume-spike/islands/SelfHostCommand.tsx deleted file mode 100644 index 5a6739828..000000000 --- a/apps/site-blume-spike/islands/SelfHostCommand.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { useState } from "react"; - -import { - buildCommand, - commandText, - defaultChoices, - METHODS, - type MethodId, -} from "../../site/src/lib/self-host-command.ts"; - -export default function SelfHostCommand() { - const [method, setMethod] = useState("docker"); - const [access, setAccess] = useState(defaultChoices.access); - const [publicUrl, setPublicUrl] = useState(defaultChoices.publicUrl); - const [semanticSearch, setSemanticSearch] = useState(defaultChoices.semanticSearch); - const [copied, setCopied] = useState(false); - const built = buildCommand(method, { access, publicUrl, semanticSearch }); - const command = built.segments ? commandText(built.segments) : null; - - const copy = async () => { - if (!command) { - return; - } - await navigator.clipboard.writeText(command); - setCopied(true); - }; - - return ( -
-
- - -
- {access === "public" && ( - - )} - - {command ? ( - <> -
- {command} -
- - - ) : ( -

- {built.unavailable} {built.unavailableHref && {built.unavailableLinkLabel}} -

- )} -
- ); -} diff --git a/apps/site-blume-spike/package.json b/apps/site-blume-spike/package.json deleted file mode 100644 index 205fecaab..000000000 --- a/apps/site-blume-spike/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "pdpp-site-blume-spike", - "private": true, - "type": "module", - "scripts": { - "prebuild": "node scripts/sync-canonical-content.mjs", - "precheck": "node scripts/sync-canonical-content.mjs", - "predev": "node scripts/sync-canonical-content.mjs", - "prevalidate": "node scripts/sync-canonical-content.mjs", - "build": "blume build", - "check": "blume check", - "dev": "blume dev", - "validate": "blume validate" - }, - "dependencies": { - "blume": "file:./vendor/blume-1.5.3.tgz" - } -} diff --git a/apps/site-blume-spike/pages/participate.astro b/apps/site-blume-spike/pages/participate.astro deleted file mode 100644 index 47cfbd14d..000000000 --- a/apps/site-blume-spike/pages/participate.astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -import PageLayout from "blume/components/layout/PageLayout.astro"; -import data from "blume:data"; ---- - - -
-
-

PDPP participation

-

Participate

-

Ask a question about the draft, or propose a change to the protocol.

-
- -
-
diff --git a/apps/site-blume-spike/public/brand/pdpp-mark.svg b/apps/site-blume-spike/public/brand/pdpp-mark.svg deleted file mode 100644 index 0d40dceb2..000000000 --- a/apps/site-blume-spike/public/brand/pdpp-mark.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/site-blume-spike/scripts/sync-canonical-content.mjs b/apps/site-blume-spike/scripts/sync-canonical-content.mjs deleted file mode 100644 index 97f556962..000000000 --- a/apps/site-blume-spike/scripts/sync-canonical-content.mjs +++ /dev/null @@ -1,61 +0,0 @@ -import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; - -const appRoot = join(dirname(fileURLToPath(import.meta.url)), ".."); -const repoRoot = join(appRoot, "..", ".."); - -const read = (path) => readFileSync(join(repoRoot, path), "utf8").replace(/\s*$/u, ""); -const write = (path, value) => { - const output = join(appRoot, path); - mkdirSync(dirname(output), { recursive: true }); - writeFileSync(output, `${value}\n`); -}; - -const specification = (source, description) => { - const lines = read(source).split("\n"); - const title = lines[0]?.replace(/^#\s+/u, ""); - const status = lines[2]?.replace(/^Status:\s*/u, ""); - const date = lines[3]?.replace(/^Date:\s*/u, ""); - if (!(title && status && date)) { - throw new Error(`Unexpected canonical header in ${source}`); - } - const body = lines.slice(4).join("\n").replace(/^\s*---\s*/u, ""); - return `---\ntitle: ${JSON.stringify(title)}\ndescription: ${JSON.stringify(description)}\n---\n\n> **Spec status**\n>\n> Status: **${status}**\n>\n> Date: ${date}\n\n${body}`; -}; - -write( - "content/specification/spec-core.md", - specification( - "spec-core.md", - "Authorization and disclosure semantics for personal data — record model, selection request, grant, manifest, and resource server interface." - ) -); -write( - "content/specification/spec-discovery-and-trust.md", - specification( - "spec-discovery-and-trust.md", - "How an authorization server discovers, retrieves, validates, and accepts a source declaration." - ) -); -write( - "content/specification/spec-collection-profile.md", - specification( - "spec-collection-profile.md", - "Optional collection semantics for sources that do not expose PDPP natively." - ) -); -write( - "content/specification/index.md", - "---\ntitle: Protocol Specification\ndescription: Canonical PDPP specification texts rendered from the repository root.\n---\n\n# Protocol Specification\n\n- [Core](/specification/spec-core)\n- [Source Declaration Discovery and Trust](/specification/spec-discovery-and-trust)" -); - -const governance = read("GOVERNANCE.md").split("\n"); -const governanceTitle = governance.shift()?.replace(/^#\s+/u, ""); -if (!governanceTitle) { - throw new Error("Unexpected canonical header in GOVERNANCE.md"); -} -write( - "content/governance.md", - `---\ntitle: ${JSON.stringify(governanceTitle)}\ndescription: Canonical PDP-Connect programme governance text rendered from the repository root.\n---\n\n${governance.join("\n").replace(/^\s+/u, "")}` -); diff --git a/apps/site-blume-spike/theme.css b/apps/site-blume-spike/theme.css deleted file mode 100644 index 1cc85ea41..000000000 --- a/apps/site-blume-spike/theme.css +++ /dev/null @@ -1,3 +0,0 @@ -:root { - --blume-font-display: ui-serif, Georgia, serif; -} diff --git a/apps/site-blume-spike/tsconfig.json b/apps/site-blume-spike/tsconfig.json deleted file mode 100644 index 2eef71fe7..000000000 --- a/apps/site-blume-spike/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "allowImportingTsExtensions": true, - "jsx": "react-jsx", - "module": "ESNext", - "moduleResolution": "bundler", - "noEmit": true, - "target": "ES2022", - "paths": { - "@/*": ["../site/src/*"] - } - }, - "include": ["islands/**/*.tsx"] -} diff --git a/apps/site-blume-spike/vendor/README.md b/apps/site-blume-spike/vendor/README.md deleted file mode 100644 index 9d8cd9096..000000000 --- a/apps/site-blume-spike/vendor/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Vendored Blume spike build - -`blume-1.5.3.tgz` is a temporary package built from commit `7c861af` in -[Blume PR #215](https://github.com/haydenbleasel/blume/pull/215). It carries the -explicit heading-ID and raw HTML anchor support required to render the canonical -PDPP specifications without rewriting them. - -SHA-256: - -```text -2f53168619f370ea135bff5147c22754ec11d787bec742ae56a10c36dd8f2400 blume-1.5.3.tgz -``` - -Replace the tarball dependency with a released Blume version when the upstream -change is available. diff --git a/apps/site-blume-spike/vendor/blume-1.5.3.tgz b/apps/site-blume-spike/vendor/blume-1.5.3.tgz deleted file mode 100644 index 2b41a7703..000000000 Binary files a/apps/site-blume-spike/vendor/blume-1.5.3.tgz and /dev/null differ diff --git a/apps/site/.gitignore b/apps/site/.gitignore index d48862426..ca1294771 100644 --- a/apps/site/.gitignore +++ b/apps/site/.gitignore @@ -1,5 +1,6 @@ .next/ .next-*/ +.source/ .source-*/ next-env.d.ts node_modules/ diff --git a/apps/site/.source/browser.ts b/apps/site/.source/browser.ts deleted file mode 100644 index 2be156e50..000000000 --- a/apps/site/.source/browser.ts +++ /dev/null @@ -1,11 +0,0 @@ -// @ts-nocheck -import { browser } from 'fumadocs-mdx/runtime/browser'; -import type * as Config from '../source.config'; - -const create = browser(); -const browserCollections = { -}; -export default browserCollections; \ No newline at end of file diff --git a/apps/site/.source/dynamic.ts b/apps/site/.source/dynamic.ts deleted file mode 100644 index c557b0ade..000000000 --- a/apps/site/.source/dynamic.ts +++ /dev/null @@ -1,12 +0,0 @@ -// @ts-nocheck -import { default as __fd_glob_0 } from "../content/docs/meta.json?collection=docs" -import { dynamic } from 'fumadocs-mdx/runtime/dynamic'; -import path from 'node:path'; -import * as Config from '../source.config'; - -const create = await dynamic(Config, {"environment":"dynamic","root":"","configPath":"source.config.ts","outDir":".source"}); - -export const docs = await create.docs("docs", "content/docs", {"meta.json": __fd_glob_0, }, [{ absolutePath: path.resolve("content/docs/README.md"), info: {"fullPath":"content/docs/README.md","path":"README.md"}, data: {"title":"Web Spec Publishing Notes","description":"Internal notes for keeping canonical root specs and public web spec pages in sync."}, hash: "1ba07ddf8f89f32bb09ef593bff2fd69" }, { absolutePath: path.resolve("content/docs/governance.mdx"), info: {"fullPath":"content/docs/governance.mdx","path":"governance.mdx"}, data: {"title":"Governance, Membership and Conformance","description":"How PDP-Connect is governed, how membership works, and how conformance status is obtained."}, hash: "92336a5e83dd05ca54b40c259811527a" }, { absolutePath: path.resolve("content/docs/index.mdx"), info: {"fullPath":"content/docs/index.mdx","path":"index.mdx"}, data: {"title":"PDPP Docs","description":"Protocol documentation for the Personal Data Portability Protocol."}, hash: "0c2a01a3e0cf24327bbe2382f3ec8c0b" }, { absolutePath: path.resolve("content/docs/open-questions.md"), info: {"fullPath":"content/docs/open-questions.md","path":"open-questions.md"}, data: {"title":"Open Questions","description":"Open design questions for PDPP, ordered by importance. Consolidated from the deferred-concerns register, design notes, and review threads."}, hash: "3ea665881be8088ad2fdd365fd3bd934" }, { absolutePath: path.resolve("content/docs/principles.mdx"), info: {"fullPath":"content/docs/principles.mdx","path":"principles.mdx"}, data: {"title":"PDPP Principles","description":"The intentions behind the Personal Data Portability Protocol, and the register of Supporters who have signed them."}, hash: "c45c1bc826a46cb2e445a1c0c19ae86c" }, { absolutePath: path.resolve("content/docs/reference-implementation-examples.md"), info: {"fullPath":"content/docs/reference-implementation-examples.md","path":"reference-implementation-examples.md"}, data: {"title":"Reference Implementation Examples","description":"Current end-to-end examples from the live PDPP reference implementation. Not normative protocol documentation."}, hash: "c85fc7b6d48a9cc1d38044f4c12575bc" }, { absolutePath: path.resolve("content/docs/reference-implementation.md"), info: {"fullPath":"content/docs/reference-implementation.md","path":"reference-implementation.md"}, data: {"title":"Reference Implementation Notes","description":"Current implementation behavior for the forkable PDPP reference stack. Not normative protocol documentation."}, hash: "6041a35a9600acbfff176cef857194b4" }, { absolutePath: path.resolve("content/docs/spec-architecture.mdx"), info: {"fullPath":"content/docs/spec-architecture.mdx","path":"spec-architecture.mdx"}, data: {"title":"Reference Topology","description":"How the current PDPP reference components relate: native provider, polyfill path, runtime, and client flows."}, hash: "b61dca1dec9ea08f712af40b8eac348e" }, { absolutePath: path.resolve("content/docs/spec-auth-design.mdx"), info: {"fullPath":"content/docs/spec-auth-design.mdx","path":"spec-auth-design.mdx"}, data: {"title":"Auth Design","description":"Bearer tokens at both boundaries: wire format and semantics. Identity provider and token issuance are out of scope."}, hash: "21a81024720485a411c29750b9975bdc" }, { absolutePath: path.resolve("content/docs/spec-change-tracking.mdx"), info: {"fullPath":"content/docs/spec-change-tracking.mdx","path":"spec-change-tracking.mdx"}, data: {"title":"Change Tracking","description":"Design rationale for grant-relative incremental sync via changes_since cursors, not canonical changelog streams."}, hash: "68115584c5dcc7217989177a07acbae8" }, { absolutePath: path.resolve("content/docs/spec-collection-profile.mdx"), info: {"fullPath":"content/docs/spec-collection-profile.mdx","path":"spec-collection-profile.mdx"}, data: {"title":"Collection Profile","description":"Informative builder guidance for connector collection. Not a conformance requirement."}, hash: "97159f32017469f17f7fbf3bf2d1be86" }, { absolutePath: path.resolve("content/docs/spec-connector-ecosystem.mdx"), info: {"fullPath":"content/docs/spec-connector-ecosystem.mdx","path":"spec-connector-ecosystem.mdx"}, data: {"title":"Connector Ecosystem","description":"Reference runtime notes for connectors: browser abstraction decisions and third-party source integration."}, hash: "aaa40c2bc89cef2ed3dbba142980fe2d" }, { absolutePath: path.resolve("content/docs/spec-core.mdx"), info: {"fullPath":"content/docs/spec-core.mdx","path":"spec-core.mdx"}, data: {"title":"Protocol Specification","description":"Authorization and disclosure semantics for personal data — record model, selection request, grant, manifest, and resource server interface."}, hash: "2dd5702fc8817fee1c6d8228df778792" }, { absolutePath: path.resolve("content/docs/spec-data-query-api.mdx"), info: {"fullPath":"content/docs/spec-data-query-api.mdx","path":"spec-data-query-api.mdx"}, data: {"title":"Data Query API (Superseded)","description":"Historical companion spec — Core spec Section 8 is now authoritative for the RS query interface."}, hash: "ee30632c82b45f40cd974b077ef69184" }, { absolutePath: path.resolve("content/docs/spec-deferred.mdx"), info: {"fullPath":"content/docs/spec-deferred.mdx","path":"spec-deferred.mdx"}, data: {"title":"Deferred Concerns","description":"Issues identified during design and review that are intentionally out of scope for v0.1. Each item is named precisely so it can be referenced from the core spec and tracked for future versions."}, hash: "94af4b79a6c3b957c2b58713fc5dbfd6" }, { absolutePath: path.resolve("content/docs/spec-discovery-and-trust.mdx"), info: {"fullPath":"content/docs/spec-discovery-and-trust.mdx","path":"spec-discovery-and-trust.mdx"}, data: {"title":"Discovery and Trust","description":"Informative implementation guidance for discovering and retrieving a source declaration. The normative requirements live in Core Section 5."}, hash: "38526e08da5a6fffaf29dca5ebaf47c4" }, { absolutePath: path.resolve("content/docs/spec-ext-aggregation.md"), info: {"fullPath":"content/docs/spec-ext-aggregation.md","path":"spec-ext-aggregation.md"}, data: {"title":"Extension Profile: Aggregation","description":"Optional companion profile to the Personal Data Portability Protocol (PDPP) core spec defining a discoverable, grant-safe, single-stream aggregation surface."}, hash: "06736a6d3b48250fb97edffc8e2a9f43" }, { absolutePath: path.resolve("content/docs/spec-ext-lexical-search.md"), info: {"fullPath":"content/docs/spec-ext-lexical-search.md","path":"spec-ext-lexical-search.md"}, data: {"title":"Extension Profile: Lexical Search","description":"Optional companion profile to the Personal Data Portability Protocol (PDPP) core spec defining a discoverable, grant-safe lexical (full-text) search surface."}, hash: "2cd10de7c2b40e7885eebdac106cbcf9" }, { absolutePath: path.resolve("content/docs/spec-semantic-retrieval-extension.md"), info: {"fullPath":"content/docs/spec-semantic-retrieval-extension.md","path":"spec-semantic-retrieval-extension.md"}, data: {"title":"Semantic Retrieval Extension (Experimental)","description":"Experimental optional PDPP extension defining a semantic retrieval surface at GET /v1/search/semantic. Unstable."}, hash: "63d2e31e5cf9c16494ea6c77a3844636" }]); \ No newline at end of file diff --git a/apps/site/.source/server.ts b/apps/site/.source/server.ts deleted file mode 100644 index cff3258f0..000000000 --- a/apps/site/.source/server.ts +++ /dev/null @@ -1,8 +0,0 @@ -// @ts-nocheck -import { server } from 'fumadocs-mdx/runtime/server'; -import type * as Config from '../source.config'; - -const create = server(); \ No newline at end of file diff --git a/apps/site/.source/source.config.mjs b/apps/site/.source/source.config.mjs deleted file mode 100644 index 8390c258c..000000000 --- a/apps/site/.source/source.config.mjs +++ /dev/null @@ -1,116 +0,0 @@ -// source.config.ts -import { remarkMdxMermaid } from "fumadocs-core/mdx-plugins/remark-mdx-mermaid"; -import { metaSchema, pageSchema } from "fumadocs-core/source/schema"; -import { defineConfig, defineDocs } from "fumadocs-mdx/config"; - -// src/lib/remark-legacy-heading-ids.ts -var LEGACY_ID_PATTERN = /\s*[[{]#([A-Za-z0-9_-]+)[\]}]\s*$/; -function visit(node, visitor) { - visitor(node); - if (!node.children) { - return; - } - for (const child of node.children) { - visit(child, visitor); - } -} -function applyLegacyId(node) { - const lastChild = node.children?.[node.children.length - 1]; - if (lastChild?.type !== "text" || typeof lastChild.value !== "string") { - return; - } - const match = lastChild.value.match(LEGACY_ID_PATTERN); - if (!match) { - return; - } - const [, id] = match; - const cleaned = lastChild.value.replace(LEGACY_ID_PATTERN, ""); - lastChild.value = cleaned; - node.data ??= {}; - node.data.id = id; - node.data.hProperties = { - ...node.data.hProperties ?? {}, - id - }; -} -function remarkLegacyHeadingIds() { - return (tree) => { - visit(tree, (node) => { - if (node.type === "heading") { - applyLegacyId(node); - } - }); - }; -} - -// src/lib/remark-note-asides.ts -var NOTE_LEAD_PATTERN = /^(Design axiom|Note\b.*):$/; -function leadTermOf(node) { - const first = node.children?.[0]; - if (first?.type !== "strong") { - return null; - } - const label = first.children?.[0]; - if (label?.type !== "text" || typeof label.value !== "string") { - return null; - } - return label.value; -} -function isNoteParagraph(node) { - const term = leadTermOf(node); - return term !== null && NOTE_LEAD_PATTERN.test(term); -} -function remarkNoteAsides() { - return (tree) => { - for (const node of tree.children ?? []) { - if (node.type === "paragraph" && isNoteParagraph(node)) { - const paragraph = node; - paragraph.data ??= {}; - paragraph.data.hName = "aside"; - paragraph.data.hProperties = { - ...paragraph.data.hProperties ?? {}, - className: "pdpp-note" - }; - } - } - }; -} - -// source.config.ts -var docs = defineDocs({ - dir: "content/docs", - docs: { - // Webpack and Turbopack eagerly compile every MDX module in development. - // spec-core.md is large enough that this exhausts the Node heap before the - // specification route can render. Dynamic mode keeps frontmatter eager for - // the page tree while compiling document bodies on demand at runtime. - dynamic: true, - postprocess: { - includeProcessedMarkdown: true - }, - schema: pageSchema - }, - meta: { - schema: metaSchema - } -}); -var source_config_default = defineConfig({ - mdxOptions: { - remarkPlugins: (plugins) => [remarkLegacyHeadingIds, remarkNoteAsides, remarkMdxMermaid, ...plugins], - // Default remark-structure types index "tableCell" individually — every - // cell of a row (an error code, its HTTP status, its category, its prose - // description) becomes its own separate search-index entry with no - // surrounding context, which is what produced bare `grant_id`/ - // `grant_expired` results with no sentence around them. "tableRow" - // (dropped in favor of "tableCell" here) stringifies a whole row as one - // block, so a search hit on an error code still carries the row's prose - // description alongside it. - remarkStructureOptions: { - types: ["heading", "paragraph", "blockquote", "tableRow", "mdxJsxFlowElement"] - } - } -}); -export { - source_config_default as default, - docs -}; diff --git a/apps/site/scripts/sync-spec-docs.mjs b/apps/site/scripts/sync-spec-docs.mjs index e701e4bb2..4ef376573 100644 --- a/apps/site/scripts/sync-spec-docs.mjs +++ b/apps/site/scripts/sync-spec-docs.mjs @@ -29,7 +29,7 @@ // // Runs from `predev` and `prebuild`. Vercel builds from apps/site with the // monorepo root available, so the relative path to the repo root resolves. -import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; const scriptDir = path.dirname(fileURLToPath(import.meta.url)); @@ -131,6 +131,7 @@ function checkStatusDateDrift(header, root, spec) { } } let generated = 0; +let staleRemoved = 0; for (const spec of SPECS) { const rootPath = path.join(repoRoot, `${spec}.md`); const headerPath = path.join(headerDir, `${spec}.header.md`); @@ -147,6 +148,16 @@ for (const spec of SPECS) { // header (frontmatter + Callout) + blank line + normative body. const out = `${header}\n\n${root.body.replace(/\s*$/, "")}\n`; writeFileSync(outPath, out); + // An earlier revision of this script wrote `.md` here. A leftover from one + // of those runs is not overwritten by the `.mdx` write above, and fumadocs + // globs both, so the two resolve to the same slug and fail the build with + // "Duplicated slugs". Clearing it makes a stale checkout self-heal instead + // of failing a build that looks unrelated to anything the author changed. + const stalePath = path.join(contentDir, `${spec}.md`); + if (existsSync(stalePath)) { + rmSync(stalePath); + staleRemoved += 1; + } generated += 1; } // Programme documents are single-sourced the same way, from a DIFFERENT root @@ -391,5 +402,8 @@ export const PRINCIPLES_PREAMBLE = ${JSON.stringify(preamble, null, 2)} as const export const PRINCIPLES_LIST = ${JSON.stringify(principles, null, 2)} as const; `); console.log(`[sync-spec-docs] generated ${generated} spec page(s) from root spec-*.md`); +if (staleRemoved > 0) { + console.log(`[sync-spec-docs] removed ${staleRemoved} stale .md page(s) left by an earlier revision of this script`); +} console.log(`[sync-spec-docs] wrote src/generated/spec-front-matter.ts (${versionMatch[1]}, ${status}, ${date}, ${editors.length} editor(s); ` + `governance: ${governanceFrontMatter.status}; principles: v${principlesFrontMatter.version})`); diff --git a/biome.jsonc b/biome.jsonc index ebf2bf926..127096eb4 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -20,6 +20,12 @@ "includes": [ "!!**/node_modules", "!!**/.git", + // A git worktree of this repository checked out inside it carries its own + // biome.jsonc, and Biome refuses to run at all when it finds one nested + // under the root config ("Found a nested root configuration"). That makes + // `biome check` fail for a contributor who keeps worktrees here, on files + // that are themselves clean. + "!!**/.worktrees", "!!**/dist", "!!**/build", "!!**/out", diff --git a/design-notes/public-site-blume-spike-2026-08-26.md b/design-notes/public-site-blume-spike-2026-08-26.md index 7d0f16b33..55b89a9da 100644 --- a/design-notes/public-site-blume-spike-2026-08-26.md +++ b/design-notes/public-site-blume-spike-2026-08-26.md @@ -1,6 +1,6 @@ # Public site and Blume spike scratchpad -Status: active investigation. This records deferred cleanup discovered while testing Blume; it is not a migration decision or protocol change. +Status: closed, the site stayed on Next.js. See Outcome at the end. This records deferred cleanup discovered while testing Blume; it is not a migration decision or protocol change. ## Test boundary @@ -71,6 +71,30 @@ Verdict: the compatibility blocker found by the spike is fixed against Blume `1. The next useful step is to turn the spike into a migration plan: define the production page set and navigation, apply PDPP theme tokens, wire standard plus legacy Agent Skill publication, and separate the sandbox from the public site. +## Outcome (2026-09-21) + +The migration did not happen and the site stayed on Next.js. The public site was +restructured in place instead (#313, four-intent structure, Participate and the +registers), so the framework question was settled by what shipped rather than by a +decision recorded here. + +The spike implementation has been deleted. Its one durable output was upstream: the +heading-ID incompatibility it found was fixed in Blume itself +([PR #215](https://github.com/haydenbleasel/blume/pull/215), merged 2026-08-28), which +also made the vendored `blume-1.5.3` tarball redundant, since that tarball existed only +to carry the unmerged patch. Reviving this spike means installing Blume from npm, not +restoring the deleted directory. + +Two findings below outlived the spike and are unrelated to the framework choice: the +sandbox still sits inside `apps/site` (20 page modules, 15 route handlers), and the +Agent Skills endpoint still publishes from the site app while its content is owned by +`docs/agent-skills`. Both survived the reference-implementation move, which took the +server trees out of this repository but deliberately kept `apps/site`. + ## Evidence location -The disposable implementation is `apps/site-blume-spike`. `scripts/sync-canonical-content.mjs` makes the root-source boundary explicit; `pages/participate.astro` proves a custom public page; and `islands/SelfHostCommand.tsx` proves reuse of the existing command-building owner. +The implementation was `apps/site-blume-spike`, removed 2026-09-21. It is recoverable +from git history at commit `1ffcf085c6` if the framework question reopens: +`scripts/sync-canonical-content.mjs` made the root-source boundary explicit, +`pages/participate.astro` proved a custom public page, and `islands/SelfHostCommand.tsx` +proved reuse of the existing command-building owner. diff --git a/design_handoff_pdpp_site/CLAUDE_CODE_PROMPT.md b/design_handoff_pdpp_site/CLAUDE_CODE_PROMPT.md deleted file mode 100644 index c1051f6c2..000000000 --- a/design_handoff_pdpp_site/CLAUDE_CODE_PROMPT.md +++ /dev/null @@ -1,56 +0,0 @@ -# Claude Code build prompt — pdpp.dev four-intent site + interim Supporter signing - -Paste everything below into Claude Code, run from the pdpp repo root. - ---- - -Implement the new pdpp.dev site and the interim Supporter signing system in this repo, on a branch off main once #267 has merged. Two sources: the Claude Design export at design_handoff_pdpp_site/PDPP Site.dc.html is the visual source of truth; design_handoff_pdpp_site/pdpp-dev-prototype-v3.html is the source of truth for structure and copy, to be carried over verbatim, EXCEPT for the copy deltas listed under "Copy deltas" below, which supersede the prototype. Where the two sources disagree on words, the prototype (as amended by the deltas) wins; on appearance, the design wins. No em-dashes anywhere. - -Routes and navigation. /, /principles, /specification, /build, /participate, /review, /privacy. /governance keeps working and lands on the governance anchor of /specification. Nav is four items: Principles, Specification, Build, Participate, with a Specification dropdown holding "The specification" and "Review, until 1 Oct". A full-width banner under the header links to /review. The dropdown entry and banner are behind one config flag, reviewOpen. Nothing outside /review and the reader's version strip references the review period. - -Content from the repo. /specification renders spec-core.md in the reader, with a contents rail listing Core §1 to §9, the three informative documents under "Implementer guidance, informative", and Appendix A. The governance section renders root GOVERNANCE.md as today. /principles renders root PRINCIPLES.md for the preamble and the six principles. Do not duplicate that text in site source. - -Principles edit. In PRINCIPLES.md, after "rarely reversible in practice." insert: "The party relying on the information carries the same uncertainty, since it holds no reliable record of what was consented to, for what purpose, or by whom." Nothing else changes. - -Pages. Build every page and section as in the prototype, including the OAuth-versus-grant comparison on the home page and the governance diagram on /specification as components rather than images. Fix the wordmark typo "Portabilty". Remove any page, route, component or copy the prototype does not have, including the old How it works page and standalone governance page, and any reference to Official Source, Steward or a recognition route. Grep the built site for "§" outside the reader and /review and remove section citations from site copy. - -Supporter signing, interim architecture. All behind config flag signingLive, default off. - -Private store. Create a private GitHub repository PDP-Connect/supporters-private. Access is restricted to the maintainers listed in MAINTAINERS.md and to one deploy key. Enable branch protection on main, require signed commits, disable forking, and turn on secret scanning. Add a README.md stating that the repo holds personal data under the interim arrangement, who may access it, and the handover and deletion procedure. Nothing in this repo is ever mirrored, cached or copied to the public site repo except through the publish script below. - -Endpoint. A Vercel serverless function at /api/sign. It validates against a strict schema, rate-limits by IP, rejects organisation submissions whose email is not at the organisation's domain, and rejects anything else. It writes a pending record to a short-lived store (Vercel KV or equivalent) and sends one confirmation email through a transactional provider set in config, containing a signed single-use link that expires in 48 hours. No other email is ever sent by this system. - -Confirmation. On a valid link, the function writes one JSON file per signatory to the private repo via the deploy key, path signatories//.json, fields: display name as entered, computed public name (first name and last initial for individuals, organisation name for organisations), organisation, signatory name and role, email, country, type, the four consent flags, Principles version, confirmed-at timestamp. The commit is made by a bot identity with a clear message. The deploy key has write access to this repo only and is stored as a Vercel secret, never in the site repo. - -Withdrawal. The confirmation email carries a signed withdraw link. It deletes the signatory's file and appends the date only to withdrawn.log. Withdrawal takes effect on the public site at the next publish. - -Publish. scripts/publish-supporters.mjs, run by a scheduled GitHub Action in the private repo, reads signatories/, writes /principles/supporters.json containing only public name, type, country, date signed and Principles version, and commits that single file directly to main of the public site repo as a bot. No PR, no other files touched. Ship the public JSON as an empty array. - -Mailing list. The "email me about new versions" checkbox stores a flag only. Ship scripts/export-list-optins.mjs in the private repo, runnable by a maintainer, that outputs opted-in addresses once for a future subscribe to the LFDT list. Do not build any sending. - -Disclosure. Under the form, from config: "Your details are held by [controller] on behalf of PDP-Connect until LF Decentralized Trust hosting is confirmed, and will be transferred then. We never publish your email." /privacy states controller, purposes, what is stored, what is published, retention until withdrawal or transfer, the confirmation and withdrawal mechanism, and a contact address, all from config. - -Handover. docs/registers.md in the public repo documents the three stores (private signatory repo, public supporters JSON, external mailing list), the data flow, who has access, and the step-by-step procedure to export the private repo to a successor controller, rotate the deploy key, and delete the repo. - -Conformance register. /register/index.json shipped as an empty array and /register/trust-registries.json with one entry, the Data Transfer Initiative's Data Trust Registry, both rendered on /participate. Both are PR-driven and hold no personal data. Create issue templates apply-source.md, apply-accessor.md, apply-operator.md under .github/ISSUE_TEMPLATE/, each listing what to attach per GOVERNANCE.md Appendix A. The Operator apply button stays disabled with its date until config flag operatorApplications is on. - -Config. All of the following come from environment or a single config file, with visible placeholders in the UI until set: form endpoint, email provider, controller name, general contact address, Discord URL, mailing list URL, reviewOpen, signingLive, operatorApplications. Reports link to pdpp-dev-reports@lfdecentralizedtrust.org. - -## Additions from the design session - -Brand assets. The wordmark in the design export's header and footer is a plain-text placeholder. Use the existing pdpp logo assets and font loading from this repo (packages/pdpp-brand/ and the site's next/font setup). Never redraw, approximate or substitute the logo. Fonts follow the repo, not the design export's Google Fonts links. - -Theme. Light and dark modes using the repo's existing azure scheme tokens, with a moon/sun toggle at the right of the nav, persisted (localStorage, key pdpp-theme). In dark mode the footer flips to the light-blue panel with dark ink, as on the current live site. - -Review banner. The full-width banner is an animated marquee ticker on the accent ground: the message plus "Review it now →" repeating, separated by a "/" glyph with wide gaps (~120px), one slow continuous loop (~55s), the whole bar one link to /review. Respect prefers-reduced-motion by pausing it. Behind reviewOpen like the rest. - -Home hero. Right of the hero text, reuse the current site's scrolling data-columns animation component (three mono columns: sleep records, artist plays, chat threads) rather than rebuilding it from the design export's approximation. Masked fade top and bottom. - -Copy deltas (supersede the prototype file): -1. Delete the "Working sessions / In person" comment channel on /review, and every other mention of working sessions ("Discord, mailing list, working sessions, comments." becomes "Discord, mailing list, comments."; "Channels and sessions" becomes "Channels and contacts"). -2. On /review, replace "Every comment is logged and answered: accepted, declined with a reason, or parked. All answers are published in one log." with "Every comment is logged in one public log. Substantive comments are answered: accepted, declined with a reason, or parked, and the answers are published there too." Also change "we may hold further sessions or one-to-one conversations" to "we may hold one-to-one conversations with commenters." -3. Delete the sentence "It is one document of nine sections, about an hour to read, and every comment gets a published answer." from the /review lede. -4. Section headings carry no ordinal numbering (no "01", "02" prefixes). Numbers that are content stay: the six principles, Step 1-4, Level 1-3, spec § numerals inside the reader. -5. The footer General contact is its own address (config: general contact), never the reports address. - -Verify. Run pnpm spec:check and confirm prebuild passes. Confirm that a grep of the public repo and the built site finds no email addresses other than the reports mailbox and no contents of the private repo. Open a PR titled "Site: four-intent structure, interim Supporter signing, Participate and registers, temporary Review page" with a summary of each route, a description of the signing data flow, and a checklist of config values still needing real settings. diff --git a/design_handoff_pdpp_site/PDPP Site.dc.html b/design_handoff_pdpp_site/PDPP Site.dc.html deleted file mode 100644 index fa03ba444..000000000 --- a/design_handoff_pdpp_site/PDPP Site.dc.html +++ /dev/null @@ -1,900 +0,0 @@ - - - - - - - - - - - - - - - - -
- -
-
- - -
-
- - -
- - The specification is open for comment until 1 October.Review it now →/ - The specification is open for comment until 1 October.Review it now →/ - The specification is open for comment until 1 October.Review it now →/ - - -
-
- -
- - -
-
-
-
-

The Personal Data Portability Protocol

-

The open standard for personal data.

-

Lets personal data move freely, with consent. Decide what an app can see, for what, and for how long.

- -
- -
-
-
- -
-
-

What changes

-
-
- Today -
-
SSleep Tracker
-
-

Habit Coach wants to access your account

-
    -
  • Read all your sleep, activity and health data
  • -
  • Read your profile, contacts and location history
  • -
  • Keep access until you revoke it
  • -
-
- Allow - Deny -
-
-
-

One button, everything the platform holds, for as long as the app wants. Nothing records what you agreed to, and turning it off means finding a settings page on someone else's site.

-
-
- With PDPP -
-
GrantActive
-
appHabit Coach
-
sourceSleep Tracker
-
fieldssleep_score, duration_min
not heart_rate, not location
-
range1 Jun 2026 to 1 Sep 2026
-
purposepersonalisation
-
expires1 Dec 2026
-
-

Two fields, one purpose, three months, until a date you chose. It is recorded where you and the app can both see it, every request is checked against it, and ending it is one click. Ask for a third field, or a date outside the range, and the request is refused.

-
-
-
-
- -
-
-

The Principles

-
    -
  1. 01Primacy of the individual. Decisions about how information concerning a person is shared and used should rest with that person.
  2. -
  3. 02Specificity of access. Access should be defined in terms of what is shared, for what purpose, and for how long, rather than granted in general terms.
  4. -
  5. 03A durable record. What has been agreed should be recorded in a form that can be examined afterwards.
  6. -
  7. 04Enforcement by design. Agreed limits should be applied automatically to each request, rather than depending on continuing good conduct.
  8. -
  9. 05Reversibility. Ending an arrangement should be as straightforward as entering into one.
  10. -
  11. 06Openness. The specification should be published openly, implementable by any party, and operable without dependence on any particular provider.
  12. -
-
- -
-
-
- -
-
-

Supporters

-

[ 247 ] signatories since 3 September

-
Example entries for layout only; no real signatories are shown.
-
- - - - - - - - - - - - - - - -
SignatoryTypeCountryVersionSigned
[ Organisation name ]ImplementerNetherlands1.02026-09-05
[ Organisation name ]Research instituteGermany1.02026-09-04
[ First name L. ]IndividualAustralia1.02026-09-04
[ Organisation name ]Civil societyUnited Kingdom1.02026-09-03
[ First name L. ]IndividualUnited States1.02026-09-03
-
-

All Supporters →

-
-
- -
-
-

Build on PDPP

-

One specification, a reference server you can run today, and three roles to build for. Pick yours.

- -
-
-
-
- - -
-
-
-

PDPP Principles  ·  v1.0  ·  Published 3 September 2026

-

The principles guiding PDPP

-

When an individual permits a service to use information held about them by another, the permission is commonly granted in general terms and recorded nowhere the individual can examine.

-

The choice is often between all of the information and none of it, and once given, the permission is rarely visible, rarely verifiable, and rarely reversible in practice. The party relying on the information carries the same uncertainty, since it holds no reliable record of what was consented to, for what purpose, or by whom. As more of daily life is mediated by systems that act on personal information, and as artificial intelligence increases what can be done with it, the absence of a specific, durable and enforceable account of what has been agreed has become a matter of general concern.

-
    -
  1. 01Primacy of the individual. Decisions about how information concerning a person is shared and used should rest with that person.
  2. -
  3. 02Specificity of access. Access to personal data should be defined in terms of what is shared, for what purpose, and for how long, rather than granted in general terms.
  4. -
  5. 03A durable record. What has been agreed should be recorded in a form that can be examined afterwards by the individual concerned and by the parties relying on it.
  6. -
  7. 04Enforcement by design. Agreed limits should be applied automatically to each request, rather than depending on the continuing good conduct of the parties.
  8. -
  9. 05Reversibility. Ending an arrangement should be as straightforward as entering into one.
  10. -
  11. 06Openness. The specification should be published openly, implementable by any party, and operable without dependence on any particular provider.
  12. -
-
-
- -
-
-

Who can sign

-

Anyone. Individuals, companies, universities, civil society groups, and public bodies are all welcome. Individuals appear as first name and last initial; organisations by name. Your email is never shown.

-

Individuals sign for themselves rather than their employer. Signing is not a commitment to build anything or a sign-off on every line of the specification, and you can withdraw by email at any time.

-
-
- - -
-
-
-
-
-
- -
-
-
- -
-
- -
-
-
-

{{ privacyNote }}

-
- - - - - - - - - -
-
- -
-

We email you to confirm. Organisations sign from an address at their own domain.

-
-
-
- -
-
-

Supporters

-

[ 247 ] signatories since 3 September

-
Example entries for layout only; no real signatories are shown.
-
- - - - - - - - - - - - - - - - -
SignatoryTypeCountryVersionSigned
[ Organisation name ]ImplementerNetherlands1.02026-09-05
[ Organisation name ]Research instituteGermany1.02026-09-04
[ First name L. ]IndividualAustralia1.02026-09-04
[ Organisation name ]Civil societyUnited Kingdom1.02026-09-03
[ First name L. ]IndividualUnited States1.02026-09-03
[ Organisation name ]PlatformUnited States1.02026-09-03
-
-

/principles/supporters.json

-
-
-
-
- - -
-
-
-

Specification  ·  v0.1.0  ·  Normative draft, 2026-08-14

-

The Personal Data Portability Protocol

-

The specification defines three things: what an app may ask for, what the user approved, and how the server enforces the difference.

-

It is built on OAuth 2.0 and RFC 9396.

-
-
- -
- -
- -
-
-

The specification

-
- v0.1.0 - ● Locked for review until 1 Oct - - Diff against v0.0.9 - Raw markdown - Edit on GitHub -
-
- -
-
Illustrative rendering. The clause text below is abridged and paraphrased to show the layout, not quoted from the specification.
-

§7Grant

- -

A grant is the immutable record of what the user approved. It is issued by the authorization server after the user has acted on a selection request, and it is the only artifact a resource server consults when deciding whether to answer a query.

-

7.1 Immutability

-

A grant MUST NOT be modified after issuance. Where the user wishes to change what an accessor may see, the authorization server MUST issue a new grant, and MUST NOT narrow or widen an existing one.

-

A grant MUST record the source declaration snapshot against which it was issued. A resource server MUST evaluate every request against that snapshot, not against the current declaration.

-

7.2 Access modes

-

Where access_mode is single_use, the resource server MUST refuse any request made after the first successful retrieval. Where it is continuous, the resource server MUST answer requests until the grant expires or is revoked, and SHOULD support incremental sync as described in §4.

-

7.3 Representation

-

A grant is represented as a JSON object. The example below is non-normative.

-
// non-normative example
-{
-  "grant_id": "grn_8f2c1a04",
-  "client_id": "https://habitcoach.example/app",
-  "source": { "id": "https://sleeptracker.example", "official": true },
-  "purpose": "https://pdpp.dev/purpose/personalisation",
-  "access_mode": "continuous",
-  "streams": [
-    {
-      "stream": "sleep_sessions",
-      "fields": ["sleep_score", "duration_min"],
-      "range": { "from": "2026-06-01", "to": "2026-09-01" }
-    }
-  ],
-  "declaration_snapshot": "sha256:4c1f...9ab2",
-  "retention": { "max_days": 90, "on_expiry": "delete" },
-  "issued_at": "2026-09-02T09:14:00Z",
-  "expires_at": "2026-12-01T00:00:00Z"
-}
-

7.4 Fields

-
- - - - - - - - - - - - - - -
FieldRequiredDescription
grant_idYesStable identifier, unique to the authorization server
purposeYesA URI from the purpose registry in Appendix A
access_modeYessingle_use or continuous
declaration_snapshotYesDigest of the source declaration the grant was issued against
retentionYesMaximum retention and the action on expiry
expires_atNoAbsent means the grant runs until revoked
-
- -
-
-
-
- -
-
-

Governance  ·  Consultation draft  ·  Revised 2 September 2026

-

Who runs this, and who decides

-

Two parts. Part A is how it runs from 15 October. Part B is how we propose it runs once there is an elected committee. Both are open for comment until 1 October: how to comment.

-

Four stages

-
-
- Pre  ·  now, to 15 Oct  ·  current - Public comment -

The specification and Part A are frozen while people comment, the Principles are published, and you can sign now. This stage ends on 15 October.

-
-
- Phase 1  ·  from 15 Oct - Launch -

The maintainers run things. Supporters can sign, but nobody can be verified until the review committee is named.

-
-
- Phase 2  ·  from Nov 2026 - Interim -

Five people, at least three with no connection to Vana or Open Data Labs, chosen on published criteria and not removable by the maintainers. They review every application for verified status in public and give a decision with reasons, which the maintainers act on. Verification opens at this point.

-
-
- Phase 3  ·  from 2027 - Full -

Partners elect a five-seat steering committee, one organisation one vote, with the Chair elected directly. The steering committee is the only body that can change the specification or grant a status, and it does both by majority vote. It appoints a technical committee, which reviews every application and every proposed change in public and recommends. The Chair records the vote and merges. This starts at 100 Partners or on 15 October 2027, whichever comes first, and not before 15 April 2027. Full detail is in Part B of the governance document.

-
-
-

How decisions are made once the steering committee exists

-
- - - - Partners - Organisations holding a - Verified status - - Steering committee - Five seats, Chair elected directly - Changes the specification - Grants status, by majority vote - - Technical committee - Appointed by the steering committee - Reviews in public and recommends - Never merges - - The register - Specification versions and - who holds which status - - Applications and proposals - Pull requests from anyone - - elect - - appoints - - - recommends - - votes, Chair merges - -
-

Before the steering committee exists, the interim technical committee recommends and the maintainers merge on that recommendation with no discretion. The shape is the same; only the body that votes is missing.

-
-
-
-
- - -
-
-
-

Build with PDPP

-

Everything you need to build on PDPP is here: the specification, a reference server you can run today, and guidance for the parts people tend to get stuck on.

- -
-
- -
-
-

What are you building?

-
-
- I hold data - Make a source -

You have data, on a platform or in a connector, and you want apps to be able to ask for it with consent. You need to write a source declaration that validates against Core §5, then serve records through a Core §8 resource server.

-

Start with Core §4 and §5, then the declaration schema and the validator.

- Core §5 → -
-
- I want data - Make an accessor -

You are building an app or agent that needs someone's data. You ask for exactly what you need with a Core §6 selection request, receive a grant, and query within it. If you have done OAuth, this is OAuth with a stricter scope.

-

Start with Core §6 and §7, then the client example in the reference implementation.

- Core §6 → -
-
- I run the server - Make an operator -

You run the authorization server, the resource server, or both. Yours is the code that records the grant and refuses anything outside it. Core §8 is your interface contract and §9 is what the test suite will check.

-

Start by running the reference implementation, then read Core §8 against it.

- Deploy the reference server → -
-
-
-
- -
-
-

Run it in under an hour

-
-
- Reference implementation - Deploy on Docker, Railway or Fly.io -

A complete authorization and resource server with scoped access, revocation, and an MCP endpoint so you can point an assistant at it and watch grants get enforced. Use it to see the protocol behave before you write your own.

- Deploy guide → -
-
- Try a real source - Connect GitHub or ChatGPT to it -

DataConnect ships signed connectors for both. Install it, grant an app one stream for one week, then revoke it, and you have seen the whole protocol.

- DataConnect releases → -
-
-
-
- -
-
-

Community FAQs

-
-
- Building a source - How do I get data out of a platform and into a declaration? -

The Collection Profile is one worked approach to collection, scheduling and refresh for connector-backed sources. Use it if you do not already have a pipeline. If you do, you conform as long as your declaration validates and your server answers §8 queries.

- Collection Profile → -
-
- Building an operator - How does my server find a platform's declaration, and know it is real? -

Discovery and Trust walks through locating a provider-native declaration under RFC 9728 and what to check before accepting it. The requirements themselves are in Core §5, Declaration acceptance, and this document is the how-to.

- Discovery and Trust → -
-
- Building an accessor - Which purpose code do I put in my request? -

Every grant names a purpose from the registry. Most requests fit an existing code, and ai_training is the one that triggers a protocol-level consent step. If nothing fits you can propose one, and proposals are considered on a published cycle.

- Purpose registry → -
-
- Any role - Core can't express the query I need. Now what? -

Extension profiles add lexical search, aggregation and semantic query on top of Core without changing what Core means. Check whether one already covers your case before writing your own; an extension that weakens Core semantics is rejected.

- Extension profiles → -
-
-
- -
-
-
-
-
- - -
-
-
-

How to get involved

-

Follow the work, sign the Principles, or build something and get it verified. All of it is voluntary, and none of it is needed to use PDPP.

-
-
- Level 1 - Follow along -

Discord, mailing list, comments. Nothing to sign, so regulators can take part off the record.

- Channels and contacts ↓ -
-
- Level 2 - Become a Supporter -

Sign the Principles and go on the public list. Open now.

-
-
-
- Level 3 - Become a Partner -

Get an implementation verified. Partners get drafts early, sit in working groups and vote. Organisations only, from 14 November.

- How verification works ↓ -
-
-
-
- -
-
-

Get verified

-
-
- Step 1 - Build it -

A source, accessor or operator that implements Core.

- Build page → -
-
- Step 2 - Apply -

Open a pull request from the template for your role and attach your evidence. A machine checks it. Pass, and you are Conformant.

-
-
- Step 3 - Get reviewed -

For Verified, the technical committee reviews in public and votes, and you prove your organisation exists through a recognised trust registry. You get reasons either way, and can resubmit.

-
-
- Step 4 - You're on the register -

Your status is published with the date and version. Any Verified status makes you a Partner.

-
-
- -

Not sure which fits, or not on GitHub? Get in touch and we will sort it with you.

-

The statuses

-
- - - - - - - - - - - - - - - - -
StatusRoleLevelHow establishedOpensState
Conformant SourceSourceAutomatedDeclaration validates against the schemaBy 14 Nov 2026Not open
Verified SourceSourceReviewedPublished by the platform that holds the data. Committee review, identity via a recognised trust registryBy 14 Nov 2026Not open
Conformant AccessorAccessorAutomatedRegistered, submission complete. No assessmentBy 14 Nov 2026Not open
Verified AccessorAccessorReviewedLegal attestation, liability on a named entity. Committee review, identity via a recognised trust registryBy 14 Nov 2026Not open
Verified OperatorOperatorReviewedPasses the test suite, then full committee review. Identity via a recognised trust registryBy 1 Jan 2027Not open
-
-

Conformant is a machine check. Verified is a human review, and makes you a Partner. No fee at any stage.

-
-
- -
-
-

The register

-

Applications open by 14 November.

-
- - - - - - - - - - - - -
OrganisationRoleStatusSpec versionSinceState
Nothing listed yet.
-
-

Kept on GitHub: github.com/PDP-Connect/pdpp/register  ·  machine readable at /register/index.json  ·  Supporters are listed separately on the Principles page

-
-
- -
-
-

Channels and contacts

-
-
- Chat - #pdp-connect on Discord -

Where things are announced first.

- Join → -
-
- Email - Mailing list -

New versions and comment periods. Low volume.

- Subscribe → -
-
- Governments and regulators - Take part without signing -

Observe anywhere, sign nothing. Ask for a briefing.

- Contact → -
-
- Something wrong? - Report it -

A wrong description, a name that should not be listed, anything about a status. Answered within five working days.

- pdpp-dev-reports@lfdecentralizedtrust.org → -
-
-
-
-
-
- - -
-
-
-

Formal review  ·  open until 1 October 2026

-

Review the specification

-

The Personal Data Portability Protocol v0.1.0 and its governance are open for public comment until 1 October.

-
- - -
-
-
- -
-
-

Step 1

-

What to read

-
-
- Specification  ·  about 45 minutes - Four sections carry most of the weight -

If you only have twenty minutes, read §7.

-
    -
  1. §5 Source declaration, including Declaration acceptance
  2. -
  3. §7 Grant
  4. -
  5. §8 Resource server interface
  6. -
  7. §9 Conformance
  8. -
- Open the specification → -
-
- Governance  ·  about 20 minutes - Two parts, one of them still open -

Part A is how PDP-Connect runs from 15 October and is frozen during review. Part B is the proposed long-term structure and is where your comment will change the most. Two open questions: five steering committee seats or three, and whether one organisation one vote puts off large companies.

- Open governance → -
-
-
-
- -
-
-

Step 2

-

How to comment

-
-
- On GitHub - One issue per point -

Every section of the specification has a comment link that opens an issue with the section pre-filled. Say what is wrong, what you would change, and why.

- Open an issue → -
-
- By email - Same log, no account needed -

Email your comments and we add them to the same public log, under whatever name you ask for.

- pdpp-dev-reports@lfdecentralizedtrust.org → -
- -
-
-
- -
-
-

Step 3

-

What happens to your comment

-

Every comment is logged in one public log. Substantive comments are answered: accepted, declined with a reason, or parked, and the answers are published there too. If a comment changes something substantial, the new text goes out for another 15 days before it is final. During that period we may hold one-to-one conversations with commenters.

-
    -
  • 3 SeptemberThe specification and Part A are frozen, the Principles are published, and Supporter signing opens.
  • -
  • 1 OctoberThe comment period closes, and answers are published after.
  • -
  • 15 OctoberThe programme opens.
  • -
-
-
-
-
- -
- - - -
-
- - - diff --git a/design_handoff_pdpp_site/README.md b/design_handoff_pdpp_site/README.md deleted file mode 100644 index 1c652cd37..000000000 --- a/design_handoff_pdpp_site/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Handoff: pdpp.dev four-intent site + interim Supporter signing - -## Overview -Six-view prototype of the new pdpp.dev (Home, Principles, Specification, Build, Participate, Review) plus the spec for an interim Supporter signing backend. This bundle is the input for a Claude Code implementation run in the PDP-Connect/pdpp repo. - -## About the design files -The files here are design references created in HTML, not production code. The task is to recreate them in the pdpp repo's existing Next.js environment using its established patterns, tokens and brand package. - -- PDPP Site.dc.html — high-fidelity visual source of truth. Open it in a browser; all styling is inline, so every color, size and spacing value can be read directly off the elements. Includes light/dark theming via CSS variables on body[data-theme]. -- pdpp-dev-prototype-v3.html — source of truth for structure and copy, carried over verbatim except the copy deltas listed in CLAUDE_CODE_PROMPT.md. -- CLAUDE_CODE_PROMPT.md — the complete build prompt. This is the primary artifact; the two HTML files are its references. - -## Fidelity -High-fidelity, with two deliberate placeholders: -- The "pdpp" wordmark is plain text. Use the repo's real logo assets (packages/pdpp-brand/). Never redraw it. -- Fonts in the export load from Google Fonts (Newsreader / IBM Plex Sans / IBM Plex Mono); the implementation must use the repo's own font files and loading. - -## Design tokens (light / dark) -Grounds: paper #f4f5f6 / #15181b · paper2 #fcfcfa / #1c2024 · chip #e5e6e7 / #262b30 · wash #e4e7ea / #212b34 -Ink: ink #181b1d / #e8eaed · soft #4e5052 / #b3bac1 · faint #67696b / #8a9199 -Accent: #295171 / #86aecf · hover #253d53 / #a9c8e4 · on-accent #f4f5f6 / #10171d -Borders: #cccecf / #31373d · subtle #dedfe0 / #262c32 -Footer: bg #253d53 / #9cbde0-family (see file) with matching ink ramp -Constant dark panel (code blocks, grant header): #253d53 with #f4f5f6 text in both modes. -Radius: 0-3px only. Shadows: none except the 1px print-offset on terminal blocks and the hairline card borders (box-shadow 0 0 0 1px border). - -## Interactions -- SPA-style view switching in the prototype maps to real routes (see prompt). -- Specification nav item has a hover dropdown: "The specification", "Review, until 1 Oct". -- Review banner: slow marquee ticker (~55s loop), whole bar links to /review. -- Hero: three vertically scrolling mono data columns (reuse the existing site component). -- Theme toggle: moon/sun button in nav, persists to localStorage key pdpp-theme. -- Signing form: Individual/Organisation toggle swaps fields, checkboxes and the privacy line; form never submits in the design. -- Card grids draw hairlines per card so odd wraps leave no artifacts. - -## Files -- CLAUDE_CODE_PROMPT.md -- PDPP Site.dc.html -- pdpp-dev-prototype-v3.html diff --git a/design_handoff_pdpp_site/pdpp-dev-prototype-v3.html b/design_handoff_pdpp_site/pdpp-dev-prototype-v3.html deleted file mode 100644 index 513ea6388..000000000 --- a/design_handoff_pdpp_site/pdpp-dev-prototype-v3.html +++ /dev/null @@ -1,1343 +0,0 @@ - - - - - - - -pdpp.dev Prototype - - - - - - - - -
-
- Prototype v3  pdpp.dev, four-intent structure, 2 Sep 2026. Principles, Specification, Build, Community, plus a temporary Review page. Not the live site. -
-
- - - -
-
- - -
-
-
The specification is open for comment until 1 October. Review it now →
-
-
-
-
-
-

The Personal Data Portability Protocol

-

The open standard for personal data.

-

Lets personal data move freely, with consent. Decide what an app can see, for what, and for how long.

-
- - -
-
-
-
-
GrantActive
-
appHabit coach
-
sourceSleep tracker
-
fieldssleep_score, duration_min
not heart_rate, not location
-
range1 Jun 2026 to 1 Sep 2026
-
purposepersonalisation
-
expires1 Dec 2026
-
Every later request is checked against this record. Anything outside it is refused.
-
-
-
-
-
- -
-
-

What changes

-
-
- Today -
-
Sleep Tracker
-
-

Habit Coach wants to access your account

-
    -
  • Read all your sleep, activity and health data
  • -
  • Read your profile, contacts and location history
  • -
  • Keep access until you revoke it
  • -
-
AllowDeny
-
-
-

One button, everything the platform holds, for as long as the app wants. Nothing records what you agreed to, and turning it off means finding a settings page on someone else's site.

-
-
- With PDPP -
-
GrantActive
-
appHabit Coach
-
sourceSleep Tracker
-
fieldssleep_score, duration_min
not heart_rate, not location
-
range1 Jun 2026 to 1 Sep 2026
-
purposepersonalisation
-
expires1 Dec 2026
-
-

Two fields, one purpose, three months, until a date you chose. It is recorded where you and the app can both see it, every request is checked against it, and ending it is one click. Ask for a third field, or a date outside the range, and the request is refused.

-
-
-
-
- -
-
-

The Principles

-
    -
  1. 01Primacy of the individual.Decisions about how information concerning a person is shared and used should rest with that person.
  2. -
  3. 02Specificity of access.Access should be defined in terms of what is shared, for what purpose, and for how long, rather than granted in general terms.
  4. -
  5. 03A durable record.What has been agreed should be recorded in a form that can be examined afterwards.
  6. -
  7. 04Enforcement by design.Agreed limits should be applied automatically to each request, rather than depending on continuing good conduct.
  8. -
  9. 05Reversibility.Ending an arrangement should be as straightforward as entering into one.
  10. -
  11. 06Openness.The specification should be published openly, implementable by any party, and operable without dependence on any particular provider.
  12. -
-
- -
-
-
- -
-
-

Supporters

-

[ 247 ] signatories since 3 September

-
Example entries for layout only; no real signatories are shown.
-
- - - - - - - - - -
SignatoryTypeCountryVersionSigned
[ Organisation name ]ImplementerNetherlands1.02026-09-05
[ Organisation name ]Research instituteGermany1.02026-09-04
[ First name L. ]IndividualAustralia1.02026-09-04
[ Organisation name ]Civil societyUnited Kingdom1.02026-09-03
[ First name L. ]IndividualUnited States1.02026-09-03
-
-

All Supporters →

-
-
- -
-
-

Build on PDPP

-

One specification, a reference server you can run today, and three roles to build for. Pick yours.

-
-
-
- -
- - - - - - - - - - - - - - - - diff --git a/index.md b/index.md deleted file mode 100644 index 200fd8008..000000000 --- a/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: home - -hero: - name: "PDPP" - text: "Personal Data Portability Protocol" - tagline: "Authorization-first data access with portable consent, server-side enforcement, and a live reference implementation." - actions: - - theme: brand - text: Read the Spec - link: /spec-core - - theme: alt - text: Collection Profile - link: /spec-collection-profile - -features: - - title: Authorization-first - details: The grant is the portable consent artifact. Collection is a companion mechanism, not the conceptual center. - - title: Parameterized consent - details: Grants express precise constraints — streams, fields, time ranges, purpose — not just coarse scopes. - - title: Resource server query API - details: A Stripe-style REST API with cursor pagination, field filtering, and grant enforcement on every request. - - title: Shared visual language - details: "The spec site and the live reference now share one brand system: same typography, same surface rules, same protocol vocabulary." ---- diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7384ef6d9..67c518f48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -265,12 +265,6 @@ importers: specifier: ^7.0.2 version: 7.0.2 - apps/site-blume-spike: - dependencies: - blume: - specifier: file:./vendor/blume-1.5.3.tgz - version: file:apps/site-blume-spike/vendor/blume-1.5.3.tgz(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@shikijs/themes@4.4.3)(@types/node@26.5.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(@vercel/functions@3.9.5(ws@8.21.3))(csstype@3.2.3)(esbuild@0.28.2)(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(prettier@3.9.6)(supports-color@7.2.0)(tsx@4.23.13)(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(ws@8.21.3)(yaml@2.9.0) - packages/display: devDependencies: '@types/node': @@ -455,22 +449,6 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@ai-sdk/gateway@4.0.72': - resolution: {integrity: sha512-iNNgagJ0+Ow1kdOFSyKPRk8kTh7qwhLZPLFdbXw4KMbMMF7JLzWlBSkyMSjh6U4O6D4D+76xj0HGws4JTLNeYA==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider-utils@5.0.36': - resolution: {integrity: sha512-MFXBn6XDyf37PNQAge/HTatPJE8Vmg/g/w4WPtjSV53jq8FKAzoaN5+43hsdQa9bqgN+/13jxug9ChvsG+godQ==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider@4.0.10': - resolution: {integrity: sha512-fX2ENAc7iDpZ+Wp4+Rk06Usn/Ys7dI9uAkGv0jlF6XVrW13NkRWx5Ou+U6lIM2E1fTLkCs16GGrUAaVvroag7A==} - engines: {node: '>=22'} - '@algolia/abtesting@1.16.1': resolution: {integrity: sha512-Xxk4l00pYI+jE0PNw8y0MvsQWh5278WRtZQav8/BMMi3HKi2xmeuqe11WJ3y8/6nuBHdv39w76OpJb09TMfAVQ==} engines: {node: '>= 14.0.0'} @@ -531,9 +509,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@antfu/install-pkg@1.1.0': - resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@asamuzakjp/css-color@6.0.5': resolution: {integrity: sha512-mbhpPMmnw/kwW19aRNmSUl1QzLbdGo1SCuE49BT98MNwqF6zaHb3o2owssFc/PEO/4t2UjqtCNwocuDtJornzA==} engines: {node: ^22.13.0 || >=24.0.0} @@ -542,156 +517,6 @@ packages: resolution: {integrity: sha512-93Z1N+BQNXysodoicpOIyNh2drHfz/CTf9nnT0FEx72GJcIiwgydD7tGAr78j41LsYn3hlRn+LdGPuBLn1Bl8Q==} engines: {node: ^22.13.0 || >=24.0.0} - '@astrojs/check@0.9.10': - resolution: {integrity: sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==} - hasBin: true - peerDependencies: - typescript: ^5.0.0 || ^6.0.0 - - '@astrojs/compiler-binding-darwin-arm64@0.4.0': - resolution: {integrity: sha512-ZVUwHundaQyFNjE6uoa0usaC0WOCitDCLS/4mdb4rOiJXwVUuKJBMxI5WMzXLWmamsXtK/Z//ifLXvV5Yeh4Hw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@astrojs/compiler-binding-darwin-x64@0.4.0': - resolution: {integrity: sha512-FI6G8AY8u6fR1SI/QRR5yGMwtvZwP34CDmZpZ5HwJGa50UM1VISTLhqkhV4a476pmgd25X1Aur2dqw6hUnrlKA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@astrojs/compiler-binding-linux-arm64-gnu@0.4.0': - resolution: {integrity: sha512-lB9gLFJK7m82EnjaU8nlRBEfcwGNeHidW3sSjODTUjMNaoewVuUz9fwwdY5M4jiSXIqWLH3yl6TX8FTDKA74Sw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@astrojs/compiler-binding-linux-arm64-musl@0.4.0': - resolution: {integrity: sha512-HPbvWqbxFxyaoQJhLxCaSjtYBx9KBo7JGVzEFZCmMl968a2PsSH0UfiODYgYPXofTOIsIH2aoCcrHXML0IA3ig==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@astrojs/compiler-binding-linux-x64-gnu@0.4.0': - resolution: {integrity: sha512-tQKolMxoJ/+0AmLWm1PmJ/i+z3i10ZU1bNuVjEDulCf48azEMtUNjTZgHJ5MPtpYRNc7dlETr8QujUfduzoC7Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@astrojs/compiler-binding-linux-x64-musl@0.4.0': - resolution: {integrity: sha512-5v5YymudsxMHp3NBLCS8BUlu5CRqeLtWD9cKS/4nIhIEHCbpz9okmVV6I0HWqmBAPhWYcDa3vw/vltYPrOQCTA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@astrojs/compiler-binding-wasm32-wasi@0.4.0': - resolution: {integrity: sha512-m/phuH3x3PREvv1OnkM44NoPh4MatUadix1fB1u5SvMLCyDTUZykDJbKnWf1cjnYmHdlB8HcjTjl6JrCqAIXcw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@astrojs/compiler-binding-win32-arm64-msvc@0.4.0': - resolution: {integrity: sha512-B9zYf3okEY83kM8gydlpH2BHP00w4ifxPqlYlWrgTwuD6wnkrJDCwBlgy1q31cERjCJRXN1lrE2VmkLvFjv/6g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@astrojs/compiler-binding-win32-x64-msvc@0.4.0': - resolution: {integrity: sha512-zB0Nrv0dGc0zZWPGDRmmETTPhDRqyZjAjk+gWMlVrJX5U89obpB3VUUE1ZiHxOCN5LQojeLK6O8L/dnoHolvNQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@astrojs/compiler-binding@0.4.0': - resolution: {integrity: sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@astrojs/compiler-rs@0.4.0': - resolution: {integrity: sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==} - engines: {node: '>=22.12.0'} - - '@astrojs/compiler@2.13.1': - resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} - - '@astrojs/internal-helpers@0.10.4': - resolution: {integrity: sha512-nozZSy/mKYLqe4YrqbKtdOszedAfXYCtw3wZ0d+CAjz4GqQ4L9rl1ltIL5BlgwmYVinJg/RZ0MgGuWOdlyRZlA==} - - '@astrojs/internal-helpers@0.11.0': - resolution: {integrity: sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==} - - '@astrojs/language-server@2.16.16': - resolution: {integrity: sha512-KuS17AOOqH/M5mHXPmKvtp8L+NNteARC7Xjf395+9R9dtJOBndqdStwU4V+OKzYZpgZ+hliV13knzx/oMtFl7Q==} - hasBin: true - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-astro: '>=0.11.0' - peerDependenciesMeta: - prettier: - optional: true - prettier-plugin-astro: - optional: true - - '@astrojs/markdown-remark@7.2.4': - resolution: {integrity: sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==} - - '@astrojs/markdown-satteri@0.3.8': - resolution: {integrity: sha512-n8ItpFTCmlDsVR5+rwDmehSf+jFCYLWmZiisZNGuF7xILqYhsVeBfcha4qgS2Seq3fAc9Tm58ZVrvqFQ6RQgRQ==} - - '@astrojs/markdown-satteri@0.4.0': - resolution: {integrity: sha512-wykOOW9KsUVcZweOpY/CeXpdKcCKZy6fQbdcteWFuI75+sQCiqxYM7VKsGa5b+aGl3cYQscFY37rsbbyal5MRw==} - - '@astrojs/mdx@7.0.8': - resolution: {integrity: sha512-RNuwq2ccTSi7NX9YqlR0noaWoVdOrZuJvdfWXotAzdhMVB0b0zEMLnNU+xar7le0GwTMlTObD/QAu8jeHA/3nA==} - engines: {node: '>=22.12.0'} - peerDependencies: - '@astrojs/markdown-satteri': ^0.3.1 - astro: ^7.0.0 - peerDependenciesMeta: - '@astrojs/markdown-satteri': - optional: true - - '@astrojs/node@11.1.5': - resolution: {integrity: sha512-CgA+LmG4UWqHxg/Vdc5MdxjjJNZSjKYQQx4uEUwnbj+1ZD2CYumJI3OWg2twsVdj2FlYsB5yvmCC54Re+OK+UQ==} - peerDependencies: - astro: ^7.2.1 - - '@astrojs/prism@4.0.2': - resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} - engines: {node: '>=22.12.0'} - - '@astrojs/react@6.0.5': - resolution: {integrity: sha512-LiXkrO6mLxZ4dbUcLqiuasDd24fmO776NWPJZFUwu6fKP9rmxF3lt9BGo96d2M3B4/Ayy2YYe85evn5lETnokw==} - engines: {node: '>=22.12.0'} - peerDependencies: - '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 - '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 - react: ^17.0.2 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 - - '@astrojs/telemetry@3.3.3': - resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==} - engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} - - '@astrojs/vercel@11.0.9': - resolution: {integrity: sha512-IUjcybXFrqFE8VEuJa+byoMd70qABGF/9jOglbTf5tbChov199pLO3fyWCNskxYgJjxmY/P058tH8st0o3lJGQ==} - peerDependencies: - astro: ^7.0.0 - - '@astrojs/yaml2ts@0.2.4': - resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==} - - '@asyncapi/converter@2.0.2': - resolution: {integrity: sha512-tFvT2ijEriTe9CPCMP32fh2VPzdQiUupK63MyW7UBDCtENANPZJ0aboZuVPhgBhmqo2TxcHWbZANpmXc5sEFiw==} - - '@asyncapi/parser@3.6.3': - resolution: {integrity: sha512-MUC8xIUMcS2qNvqrqyx/ie0txu3d/OdIsrXs7UCzawdyR6P07gh35DpOqPz/z57s1UA3vERVpcheZYl3h8cVtw==} - - '@asyncapi/specs@6.11.1': - resolution: {integrity: sha512-A3WBLqAKGoJ2+6FWFtpjBlCQ1oFCcs4GxF7zsIGvNqp/klGUHjlA3aAcZ9XMMpLGE8zPeYDz2x9FmO6DSuKraQ==} - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -814,18 +639,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.29.7': - resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.29.7': - resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.29.7': resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} @@ -942,9 +755,6 @@ packages: cpu: [x64] os: [win32] - '@braintree/sanitize-url@7.1.2': - resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} - '@bramus/specificity@2.4.2': resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true @@ -1047,13 +857,6 @@ packages: cpu: [x64] os: [win32] - '@capsizecss/unpack@4.0.1': - resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} - engines: {node: '>=18'} - - '@chevrotain/types@11.1.2': - resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} - '@clack/core@1.4.3': resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} engines: {node: '>= 20.12.0'} @@ -1113,27 +916,6 @@ packages: '@dotenvx/primitives@0.8.0': resolution: {integrity: sha512-VYJy0uhFm9zTJ1TxBaW/pA8bjbOM/OttaNMwZ1RHG4JKyRG7DhSdiqD1ipQoAyoD22olUtxbP78W9xY3Wd11bg==} - '@emmetio/abbreviation@2.3.3': - resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} - - '@emmetio/css-abbreviation@2.1.8': - resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} - - '@emmetio/css-parser@0.4.1': - resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} - - '@emmetio/html-matcher@1.3.0': - resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} - - '@emmetio/scanner@1.0.4': - resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} - - '@emmetio/stream-reader-utils@0.1.0': - resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} - - '@emmetio/stream-reader@2.2.0': - resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} - '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} @@ -1392,15 +1174,6 @@ packages: peerDependencies: hono: ^4 - '@iconify-json/lucide@1.2.128': - resolution: {integrity: sha512-s8tZ6BIQfkwl6INcdHMri3bokShU/MwOVM8cyFUgE7QJ3EuwmIhXFsrqtA0WD8YrhoII1K+KA5EEIJ4x0JWIdw==} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - - '@iconify/utils@3.1.4': - resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} - '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -1563,10 +1336,6 @@ packages: cpu: [x64] os: [win32] - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1583,35 +1352,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jsep-plugin/assignment@1.3.0': - resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/regex@1.0.4': - resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/ternary@1.1.4': - resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@mapbox/node-pre-gyp@2.0.3': - resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} - engines: {node: '>=18'} - hasBin: true - '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@mermaid-js/parser@1.2.1': - resolution: {integrity: sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==} - '@modelcontextprotocol/sdk@1.30.0': resolution: {integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==} engines: {node: '>=18'} @@ -1743,9 +1486,6 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} - '@nodable/entities@3.0.0': - resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1812,84 +1552,9 @@ packages: '@octokit/types@17.0.0': resolution: {integrity: sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==} - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==} - - '@orama/orama@3.1.18': - resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} - engines: {node: '>= 20.0.0'} - - '@oslojs/encoding@1.1.0': - resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@oxc-project/types@0.147.0': resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==} - '@pagefind/darwin-arm64@1.5.2': - resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} - cpu: [arm64] - os: [darwin] - - '@pagefind/darwin-x64@1.5.2': - resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} - cpu: [x64] - os: [darwin] - - '@pagefind/freebsd-x64@1.5.2': - resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} - cpu: [x64] - os: [freebsd] - - '@pagefind/linux-arm64@1.5.2': - resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} - cpu: [arm64] - os: [linux] - - '@pagefind/linux-x64@1.5.2': - resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} - cpu: [x64] - os: [linux] - - '@pagefind/windows-arm64@1.5.2': - resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} - cpu: [arm64] - os: [win32] - - '@pagefind/windows-x64@1.5.2': - resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} - cpu: [x64] - os: [win32] - - '@pierre/diffs@1.3.6': - resolution: {integrity: sha512-a3woaW2QHy78JDxPJK0OJzwZUN4xoQLLIS/pceO8X6+L8gA5D682mP7/w3YxxEVRPXOaoe/p/RJ5Oj/3nrEzew==} - peerDependencies: - react: ^18.3.1 || ^19.0.0 - react-dom: ^18.3.1 || ^19.0.0 - - '@pierre/theme@2.0.0': - resolution: {integrity: sha512-yNDd9GYLQl1mEUJR8AneJ5e4ohLIHQd/wZLWr4fagt78vS2RwwZNW530vVgHqXFAyFVcFlRmGUD5ramXH46OXw==} - engines: {vscode: ^1.0.0} - - '@pierre/theming@1.0.1': - resolution: {integrity: sha512-WCI5Qd7iprDpISL9fBYOLe8RV53+b7mFNA3bPzl60/2CKCSrsKN8zEcep6Y3BAzvARlmca50zGjDodqPGiTUKA==} - peerDependencies: - '@pierre/theme': ^1.1.0 || ^2.0.0 - '@shikijs/themes': ^3.0.0 || ^4.0.0 - react: ^18.3.1 || ^19.0.0 - react-dom: ^18.3.1 || ^19.0.0 - shiki: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - '@pierre/theme': - optional: true - '@shikijs/themes': - optional: true - react: - optional: true - react-dom: - optional: true - shiki: - optional: true - '@playwright/test@1.61.1': resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} engines: {node: '>=18'} @@ -2359,70 +2024,9 @@ packages: cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.3': - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@5.4.0': - resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@scalar/astro@0.4.17': - resolution: {integrity: sha512-dVu23iDF+++SDu1Y1UAnn6tEGiMaPBwyvn0vuYW6710MKTunG+6BC1u2HLyt+ht3PPo7E4i6Lf/7aNGbYAGThg==} - engines: {node: '>=22'} - peerDependencies: - astro: ^4.0.0 || ^5.0.0 || ^6.0.0 - - '@scalar/client-side-rendering@0.3.10': - resolution: {integrity: sha512-FlUByzYhsas54zIvsiTJ7UgAZiVUQmErWvrQm+CKTBnIvSmIb5eWowJ4/O0bbkUa8rsOIdmCcX+HtX+EDdf0CA==} - engines: {node: '>=22'} - - '@scalar/helpers@0.11.1': - resolution: {integrity: sha512-Knwbe0IYqFk0PPDoOKLasqglBHfyf9/zwWWqFsSNi/AtdjM29wSZXN6p8DFid6iB5B9epYH9YiSgJ6tpD00TEw==} - engines: {node: '>=22'} - - '@scalar/helpers@0.11.2': - resolution: {integrity: sha512-IgHW/hIj1XAvsPIBKiOgmK87qbyDjaQQg9S/auXU4MUtvnwKKpOeIOJc0NC71FkMdr4Mok0SSVI748cmlptoXQ==} - engines: {node: '>=22'} - - '@scalar/json-magic@0.13.2': - resolution: {integrity: sha512-T8rQw5u7+MSTDpUcd5ShX1taOUxpZMv2b/P6xsahdlv/u68VX/Bq/+uzuAf2xW8IIOy7BEP4MBggle/vMDgAXw==} - engines: {node: '>=22'} - - '@scalar/openapi-parser@0.28.16': - resolution: {integrity: sha512-zHEQExXo58Nk7/Tju4y4HLVJ+B5nnDmR7vPhhHLVinL0z99aGrd6S/8HREupVpfAsim326pfzIbSM+UOvEbnOw==} - engines: {node: '>=22'} - - '@scalar/openapi-types@0.9.5': - resolution: {integrity: sha512-czrz/zkVm1oPzrpYo3hI/iymfiw1s4dgJiQtwNi2U77Sqf3EQOGKsif4VNRa5suWMYRuPaFx5EiFM1FNEV4Whg==} - engines: {node: '>=22'} - - '@scalar/openapi-upgrader@0.2.15': - resolution: {integrity: sha512-yqROK9U96ElasEL4Wl/+PIjQZlqrQXVUUpXk9PA6xBnrp8KdEv7at8pR5gsZkvddJfYVwLILPlctyqUg4u4YZA==} - engines: {node: '>=22'} - - '@scalar/schemas@0.8.4': - resolution: {integrity: sha512-gbx/UjAswjJc+OZp/vcVRIopjqoJ62pOkrKLvVHa1MuMRoVxcPyNzW2/SQmnvdJku7C7a6PsKaPUQ6gZXGA4eg==} - engines: {node: '>=22'} - - '@scalar/types@0.18.3': - resolution: {integrity: sha512-hPLLxVt/ah4RpCVp5UrLEpnBEgTwf+RvPtRiSEty3QqfBJUfADMXHz+oWK6UAa/vALg2AWuJLCD8hRlyQ2ET9w==} - engines: {node: '>=22'} - - '@scalar/validation@0.6.3': - resolution: {integrity: sha512-j3s9XPv8Wo1EG5/naBi4XGF0uXYQ2A3QZNI0NKWgCMxRHVrDJGlZEYymcHDHY7fquRm73P8U3c8xqJqB5yad6w==} - engines: {node: '>=20'} - - '@scarf/scarf@1.4.0': - resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -2484,16 +2088,6 @@ packages: resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} engines: {node: '>=20'} - '@shikijs/transformers@4.4.3': - resolution: {integrity: sha512-oJSARV6NaWd+rnNJbtnpAdj3Zg0ZVyzsnMgb3vi3HA+35y8lBWUCpOnWsmyiXZIikY+x1BDqrQUgmxfzWh7Jvw==} - engines: {node: '>=20'} - - '@shikijs/twoslash@4.4.3': - resolution: {integrity: sha512-m7HNzunEIHRk1jCya3ngGsO3+8pYxrPIIxtdJewg/W8ceW/+m/mSsm4jM3L9DvYYNa8Rvbu7Dabt3BOpCclz8Q==} - engines: {node: '>=20'} - peerDependencies: - typescript: '>=5.5.0' - '@shikijs/types@4.4.3': resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} engines: {node: '>=20'} @@ -2520,75 +2114,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@stoplight/better-ajv-errors@1.0.3': - resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} - engines: {node: ^12.20 || >= 14.13} - peerDependencies: - ajv: '>=8' - - '@stoplight/json-ref-readers@1.2.2': - resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} - engines: {node: '>=8.3.0'} - - '@stoplight/json-ref-resolver@3.1.6': - resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} - engines: {node: '>=8.3.0'} - - '@stoplight/json@3.21.0': - resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} - engines: {node: '>=8.3.0'} - - '@stoplight/ordered-object-literal@1.0.5': - resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} - engines: {node: '>=8'} - - '@stoplight/path@1.3.2': - resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} - engines: {node: '>=8'} - - '@stoplight/spectral-core@1.23.1': - resolution: {integrity: sha512-VLC8OhpO/pMJKb6IHhurxJjXO1qB56Ng1unIb8b+hNxdw0+SEcASvmR+RpjfHYX/jv/DfSaA1x8QhFBJBmqBOQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-formats@1.8.5': - resolution: {integrity: sha512-xaC0rCH0p7/bzNJsz+JgLSj+Cp6uwYGWpePQxdLkF2G6a8Zyp3OyS7umkGYNiimEwKrOjvCNNTFJpeuiENZSBA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-functions@1.10.5': - resolution: {integrity: sha512-vDCd0NJ93715bcUpZZ5vNHiyxd4cgHF6tuXsDiXOXKAByg+I1fR5/dMijEo6Ce1Lz95a+RZ22JKYhF1YuzVvuA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-parsers@1.0.5': - resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-ref-resolver@1.0.5': - resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-runtime@1.1.6': - resolution: {integrity: sha512-Y8rEDyMN4bSMJCrDs2shdcVHYyCnH3FvXRP4dBhha4Z8iJv+JPp7KqOV/hwVB/hWFC209upiwj2oDmLfR0qCDg==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/types@13.20.0': - resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@13.6.0': - resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@14.1.1': - resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/yaml-ast-parser@0.0.50': - resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} - - '@stoplight/yaml@4.3.0': - resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} - engines: {node: '>=10.8'} - '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} @@ -2684,16 +2209,6 @@ packages: '@tailwindcss/postcss@4.3.3': resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} - '@tailwindcss/typography@0.5.20': - resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} - peerDependencies: - tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' - - '@tailwindcss/vite@4.3.3': - resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} - peerDependencies: - vite: ^5.2.0 || ^6 || ^7 || ^8 - '@takumi-rs/core-darwin-arm64@2.13.4': resolution: {integrity: sha512-znfETB7y3x+nLmbVv7tn4rULaQNpaCQ+Ei69UiR/egNKw/3mAdTcnGKi1ba10/BCnIKKFoYTnD/+c/rX/KOE5g==} engines: {node: '>=18'} @@ -2795,172 +2310,52 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/better-sqlite3@9.6.0': resolution: {integrity: sha512-ZEEwBSgMu7GYJOynoagg5X9JbxfL6dTJDsgViJIqh67jV44kyOr9RXfmFjLK5rzC4MWssP06t9hu/JwGDnUbCg==} - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - '@types/d3-axis@3.0.6': - resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/d3-brush@3.0.6': - resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/d3-chord@3.0.6': - resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - '@types/d3-contour@3.0.6': - resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + '@types/jsdom@30.0.0': + resolution: {integrity: sha512-uAHGxujGE0cDaKGdK28zgDotFtNA7MKq5DXl8LrfdxdCI8VHcg15oJz+amHTChPNI5JpgEPQWc2xFdrw3em/nQ==} - '@types/d3-delaunay@6.0.4': - resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/d3-dispatch@3.0.7': - resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} - '@types/d3-drag@3.0.7': - resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/d3-dsv@3.0.7': - resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + '@types/node@26.5.1': + resolution: {integrity: sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==} - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/d3-fetch@3.0.7': - resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + '@types/react-dom@19.3.0': + resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} + peerDependencies: + '@types/react': ^19.3.0 - '@types/d3-force@3.0.10': - resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + '@types/react@19.3.0': + resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} - '@types/d3-format@3.0.4': - resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} - - '@types/d3-geo@3.1.1': - resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==} - - '@types/d3-hierarchy@3.1.7': - resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-polygon@3.0.2': - resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} - - '@types/d3-quadtree@3.0.6': - resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} - - '@types/d3-random@3.0.4': - resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} - - '@types/d3-scale-chromatic@3.1.0': - resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-selection@3.0.11': - resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} - - '@types/d3-shape@3.2.0': - resolution: {integrity: sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==} - - '@types/d3-time-format@4.0.3': - resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/d3-transition@3.0.9': - resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} - - '@types/d3-zoom@3.0.8': - resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} - - '@types/d3@7.4.3': - resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - - '@types/es-aggregate-error@1.0.6': - resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/hast@3.0.5': - resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - - '@types/jsdom@30.0.0': - resolution: {integrity: sha512-uAHGxujGE0cDaKGdK28zgDotFtNA7MKq5DXl8LrfdxdCI8VHcg15oJz+amHTChPNI5JpgEPQWc2xFdrw3em/nQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.14': - resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - - '@types/node@26.5.1': - resolution: {integrity: sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/react-dom@19.3.0': - resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} - peerDependencies: - '@types/react': ^19.3.0 - - '@types/react@19.3.0': - resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -2968,9 +2363,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/urijs@1.19.26': - resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} - '@types/validate-npm-package-name@4.0.2': resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==} @@ -3094,11 +2486,6 @@ packages: cpu: [x64] os: [win32] - '@typescript/vfs@1.6.4': - resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} - peerDependencies: - typescript: '*' - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher @@ -3106,123 +2493,6 @@ packages: '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} - '@upsetjs/venn.js@2.0.0': - resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} - - '@vercel/analytics@2.0.1': - resolution: {integrity: sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==} - peerDependencies: - '@remix-run/react': ^2 - '@sveltejs/kit': ^1 || ^2 - next: '>= 13' - nuxt: '>= 3' - react: ^18 || ^19 || ^19.0.0-rc - svelte: '>= 4' - vue: ^3 - vue-router: ^4 - peerDependenciesMeta: - '@remix-run/react': - optional: true - '@sveltejs/kit': - optional: true - next: - optional: true - nuxt: - optional: true - react: - optional: true - svelte: - optional: true - vue: - optional: true - vue-router: - optional: true - - '@vercel/cli-config@0.2.4': - resolution: {integrity: sha512-kZ5SojbrV06GHoU6QIWGwDXLov+s9rWZ7QqdqKfJfBGCNUieGfgaCjeeenNy8Y+QC0bwC0dZ2B4l5Hvdmrgpdw==} - - '@vercel/cli-exec@1.0.1': - resolution: {integrity: sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==} - engines: {node: '>= 18'} - - '@vercel/functions@3.9.5': - resolution: {integrity: sha512-EUfqlb7AzoEh7URlMNAO4jbJiLWz9grDBHvfjKTDvEP9c8y3DqX3SWPvfaQkUjtkm3b83flhaUUMuewdHa+qmw==} - engines: {node: '>= 20'} - peerDependencies: - '@aws-sdk/credential-provider-web-identity': '*' - ws: '>=8' - peerDependenciesMeta: - '@aws-sdk/credential-provider-web-identity': - optional: true - ws: - optional: true - - '@vercel/nft@1.11.0': - resolution: {integrity: sha512-m1QFg+U+3yPOnP1xSYJ73UIRxLOXdts1JOhiOiyPYqEsALgrXFFINvgUaD6R6iNvaBFAjHllBCbkfx4FuOdpaA==} - engines: {node: '>=20'} - hasBin: true - - '@vercel/oidc@3.2.0': - resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} - engines: {node: '>= 20'} - - '@vercel/oidc@3.8.5': - resolution: {integrity: sha512-RwXYtnt6za+5UO4IaLywN/6B95AlLqynPRUWRJxeJ/qufwkcLUbZNUxYtzT0uMpuraWhlNcGqPNGkTnZr4BGBw==} - engines: {node: '>= 20'} - - '@vercel/routing-utils@6.5.0': - resolution: {integrity: sha512-2PXgATJyJYEaIuDEhljZ+sfOfJEsBl6OEzD+jHhy6NAb0k2mHdbTjcK3zTBNnYq0nebrXpq5ZGiwOxBFoUwB3A==} - - '@vitejs/plugin-react@5.2.0': - resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@volar/kit@2.4.28': - resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} - peerDependencies: - typescript: '*' - - '@volar/language-core@2.4.28': - resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} - - '@volar/language-server@2.4.28': - resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@volar/language-service@2.4.28': - resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@volar/source-map@2.4.28': - resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} - - '@volar/typescript@2.4.28': - resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@vscode/emmet-helper@2.11.0': - resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} - - '@vscode/l10n@0.0.18': - resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - - '@workflow/serde@4.1.0': - resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==} - '@xterm/addon-fit@0.11.0': resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==} @@ -3426,23 +2696,10 @@ packages: '@yuku-toolchain/types@0.9.3': resolution: {integrity: sha512-rFE+5P4g2wxko5C85MugJOlVjBHEQq87dIkhLkniLXLp63PEtgaFjD954i5HXlfnyzLxPcZHsSOVDVgmo1HToA==} - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3453,10 +2710,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - agent-base@9.0.0: resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} engines: {node: '>= 20'} @@ -3469,25 +2722,6 @@ packages: resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} engines: {node: '>=18'} - ai@7.0.90: - resolution: {integrity: sha512-cvG7Od3DPlnnljkIXP1CQ8wABOfDqV1uBFWemBjGupiqcQD8O9SSg5m4FL+GiMA47NN7dxIJnaw8/uowwN+D2g==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-errors@3.0.0: - resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} - peerDependencies: - ajv: ^8.0.1 - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3504,14 +2738,6 @@ packages: ajv: optional: true - ajv-i18n@4.2.0: - resolution: {integrity: sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==} - peerDependencies: - ajv: ^8.0.0-beta.0 - - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} @@ -3519,10 +2745,6 @@ packages: resolution: {integrity: sha512-/bwdue1/8LWELn/DBalGRfuLsXBLXULJo/yOeavJtDu8rBwxIzC6/Rz9Jg19S21VkJvRuZO1k8CZXBMS73mYbA==} engines: {node: '>= 14.0.0'} - am-i-vibing@0.4.0: - resolution: {integrity: sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==} - hasBin: true - ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -3562,16 +2784,6 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - anynum@1.0.1: - resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3589,24 +2801,9 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - ast-types@0.16.3: resolution: {integrity: sha512-FvWoWYfSCM6kRxCSH+MGLHIKKGRL6A6AW7Zek2O32REPQRdg131428uRTKMBYAeRd3XXAaHDS60Wpri7CdKDrA==} engines: {node: '>=4'} @@ -3615,51 +2812,16 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - astro@7.2.10: - resolution: {integrity: sha512-uPtD+nK6kQXugyq4kiMPwj9OI3Sae6HSerA5X+fuv2CPaDwxmokFPPFlGRKIAXH0QAKu+zot2q6yrLG61wFmqg==} - engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} - hasBin: true - peerDependencies: - '@astrojs/markdown-remark': ^7.3.0 - peerDependenciesMeta: - '@astrojs/markdown-remark': - optional: true - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - atomically@1.7.0: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - avsc@5.7.9: - resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} - engines: {node: '>=0.11'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - babel-plugin-react-compiler@1.0.0: resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -3678,72 +2840,13 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - blume@file:apps/site-blume-spike/vendor/blume-1.5.3.tgz: - resolution: {integrity: sha512-fL1RybqN4yUHtTPyjO4HeGA1JMeZfYwrotS7XJKqKsgEbg4fw7nFzP3O8zfmR+gywievOJN6j+Qc2vmR6xESKw==, tarball: file:apps/site-blume-spike/vendor/blume-1.5.3.tgz} - version: 1.5.3 - engines: {node: '>=22.12.0'} - hasBin: true - peerDependencies: - '@ai-sdk/openai-compatible': ^3.0.0 - '@astrojs/cloudflare': ^14.0.0 - '@astrojs/netlify': ^8.0.0 - '@astrojs/svelte': ^9.0.0 - '@astrojs/vue': ^7.0.0 - '@mixedbread/sdk': ^0.76.0 - '@notionhq/client': ^2.2.15 - '@openrouter/ai-sdk-provider': ^3.0.0 - '@oramacloud/client': ^2.1.0 - '@sanity/client': ^6.21.0 || ^7.0.0 - algoliasearch: ^5.55.0 - flexsearch: ^0.8.0 - typesense: ^3.0.0 - peerDependenciesMeta: - '@ai-sdk/openai-compatible': - optional: true - '@astrojs/cloudflare': - optional: true - '@astrojs/netlify': - optional: true - '@astrojs/svelte': - optional: true - '@astrojs/vue': - optional: true - '@mixedbread/sdk': - optional: true - '@notionhq/client': - optional: true - '@openrouter/ai-sdk-provider': - optional: true - '@oramacloud/client': - optional: true - '@sanity/client': - optional: true - algoliasearch: - optional: true - flexsearch: - optional: true - typesense: - optional: true - body-parser@2.3.0: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - brace-expansion@1.1.18: - resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} - - brace-expansion@2.1.4: - resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} - brace-expansion@5.0.9: resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} engines: {node: 20 || >=22} @@ -3769,10 +2872,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -3815,25 +2914,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - citty@0.2.2: resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} @@ -3930,31 +3014,12 @@ packages: resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} engines: {node: '>=22.12.0'} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - common-ancestor-path@2.0.0: - resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} - engines: {node: '>= 18'} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - conf@10.2.0: resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} engines: {node: '>=12'} @@ -3965,10 +3030,6 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - content-disposition@1.1.0: resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} @@ -4014,9 +3075,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@1.2.3: - resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} - cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} @@ -4025,10 +3083,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@2.0.1: - resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} - engines: {node: '>=22'} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4036,12 +3090,6 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - cosmiconfig@9.0.2: resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} engines: {node: '>=14'} @@ -4055,47 +3103,19 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crossws@0.3.5: - resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-select@6.0.0: - resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - css-tree@3.2.1: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - css-what@7.0.0: - resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} - engines: {node: '>= 6'} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -4103,199 +3123,28 @@ packages: resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape-fcose@2.2.0: - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape@3.34.2: - resolution: {integrity: sha512-Cm2jaj1X/PBNlzV9yH8zcfGOxO7U+CJ/+mxSBVPSchLaugdp4jtlGx5qaHtPRZ6tgiZ5P+o1XoRfJA+ba6KM3g==} - engines: {node: '>=0.10'} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + debounce-fn@4.0.0: + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - - d3-format@3.1.2: - resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.9.0: - resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} - engines: {node: '>=12'} - - dagre-d3-es@7.0.14: - resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} - - data-urls@7.0.0: - resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - dayjs@1.11.23: - resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} - - debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} dedent@1.7.2: resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} @@ -4321,10 +3170,6 @@ packages: resolution: {integrity: sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==} engines: {node: '>=18'} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -4333,24 +3178,10 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - - delaunator@5.1.0: - resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -4358,9 +3189,6 @@ packages: design-book@0.6.0: resolution: {integrity: sha512-LZVQ65rgC1MMZxtph1B1dxOBOAMLQHgP9zqouRAnaIa6M5Z8HU0bTsCjKiMDr0DVuJokBJRjzAepCLvS0k8bsw==} - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -4368,23 +3196,13 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - devalue@5.9.2: - resolution: {integrity: sha512-po4PAY5c53tw5XMocSnf8A/5OHhbbUftpr93aEN6BBoAdntUmK7vu7wOATqvt7cXO7m1Cl4gMVn6p7n6n4mj0w==} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diacritics@1.3.0: - resolution: {integrity: sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==} - diff@8.0.4: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - diff@9.0.0: - resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} - engines: {node: '>=0.3.1'} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4395,32 +3213,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - dompurify@3.4.14: - resolution: {integrity: sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -4433,10 +3225,6 @@ packages: resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} - dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -4447,20 +3235,12 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - electron-to-chromium@1.5.422: resolution: {integrity: sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==} elkjs@0.11.1: resolution: {integrity: sha512-zxxR9k+rx5ktMwT/FwyLdPCrq7xN6e4VGGHH8hA01vVYKjTFik7nHOxBnAYtrgYUB1RpAiLvA1/U2YraWxyKKg==} - emmet@2.4.11: - resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} - emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -4486,17 +3266,6 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -4521,25 +3290,9 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - epub-gen-memory@1.1.2: - resolution: {integrity: sha512-vwGM6MVNqKIskFzPZqhi4ZOs0ZTUXco9oDuHFX1vB2Il9pTAkaHWFBFgHrrl832dYmBPb/raGVUZXFvZYueRyw==} - engines: {node: '>=10.0.0'} - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} - - es-aggregate-error@1.0.14: - resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -4548,24 +3301,10 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.3.2: - resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} - es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} - - es-toolkit@1.52.0: - resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} - esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -4618,9 +3357,6 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -4628,13 +3364,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - eventemitter3@5.0.4: - resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - eventsource-parser@3.1.1: resolution: {integrity: sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==} engines: {node: '>=18.0.0'} @@ -4659,10 +3388,6 @@ packages: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} - expr-eval-fork@3.0.3: - resolution: {integrity: sha512-BhC+hbc5lIVjygr840n5DEkW3MQq7H9o+mc1/N7Z5uIiCFVyESLL5DIE7LNq4CYUNxy+XjA+3jRrL/h0Kt2xcg==} - engines: {node: '>=16.9.0'} - express-rate-limit@8.3.2: resolution: {integrity: sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==} engines: {node: '>= 16'} @@ -4673,10 +3398,6 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -4687,12 +3408,6 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - fast-string-truncated-width@3.0.3: resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} @@ -4705,16 +3420,6 @@ packages: fast-wrap-ansi@0.2.2: resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} - fast-xml-builder@1.3.1: - resolution: {integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==} - - fast-xml-parser@5.11.1: - resolution: {integrity: sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==} - hasBin: true - - fastdom@1.0.12: - resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==} - fastq@1.20.3: resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} @@ -4735,12 +3440,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.6: - resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4749,10 +3448,6 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} - find-proc@0.1.0: - resolution: {integrity: sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==} - engines: {node: ^20.19.0 || >=22.12.0} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -4772,24 +3467,6 @@ packages: find-workspaces@0.3.1: resolution: {integrity: sha512-UDkGILGJSA1LN5Aa7McxCid4sqW3/e+UYsVwyxki3dDT0F8+ym0rAfnCkEfkL0rO7M+8/mvkim4t/s3IPHmg+w==} - flattie@1.1.1: - resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} - engines: {node: '>=8'} - - fontace@0.4.1: - resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} - - fontkitten@1.0.3: - resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} - engines: {node: '>=20'} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreach@2.0.6: - resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} - forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -4972,20 +3649,9 @@ packages: resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} engines: {node: '>=18'} - function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - fuzzysort@3.1.0: resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5026,17 +3692,6 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.14.3: - resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} - - get-tsconfig@5.0.0-beta.4: - resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} - engines: {node: '>=20.20.0'} - git-log-parser@1.2.1: resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} @@ -5047,14 +3702,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@13.0.6: - resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} - engines: {node: 18 || 20 || >=22} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5065,24 +3712,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@17.0.2: - resolution: {integrity: sha512-FRWbddMxfkjiB7z+aQDWIR+E34xo9I8c9mtK2RPv8PmMzKRvrdsreHL/Ui/TmwHJfhHChEtsFPyMHKI+xuarQQ==} - engines: {node: ^22.0.0 || ^24.0.0 || ^25.0.0 || >=26.0.0} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - h3@1.15.11: - resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} - - hachure-fill@0.5.2: - resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5091,21 +3720,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -5116,9 +3734,6 @@ packages: hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -5137,9 +3752,6 @@ packages: hast-util-to-parse5@8.0.1: resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -5169,21 +3781,12 @@ packages: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - html-escaper@3.0.3: - resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} - html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -5192,10 +3795,6 @@ packages: resolution: {integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==} engines: {node: '>= 20'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - https-proxy-agent@9.1.0: resolution: {integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==} engines: {node: '>= 20'} @@ -5212,10 +3811,6 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.3: resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} @@ -5229,12 +3824,6 @@ packages: engines: {node: '>=16.x'} hasBin: true - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -5258,9 +3847,6 @@ packages: resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} engines: {node: '>=18'} - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -5270,17 +3856,6 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -5293,46 +3868,15 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - iron-webcrypto@1.2.1: - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -5346,27 +3890,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-docker@4.0.0: - resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} - engines: {node: '>=20'} - hasBin: true - - is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5375,10 +3902,6 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -5399,22 +3922,6 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-network-error@1.3.2: - resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} - engines: {node: '>=16'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5437,22 +3944,10 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - is-regexp@3.1.0: resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} engines: {node: '>=12'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5465,18 +3960,6 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -5485,24 +3968,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} - is-unsafe@2.0.2: - resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} @@ -5511,9 +3979,6 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5525,11 +3990,6 @@ packages: resolution: {integrity: sha512-7atWPjhGEIX3JEtMrOYd8TKzboYlq+5sNbdl9POiLYOI14G5HZiQbZP0Xj5EZdrufQVXfJlpTV0hys0CuxwxZw==} engines: {node: ^18.17 || >=20.6.1} - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - java-properties@1.0.2: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} @@ -5538,19 +3998,12 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.15.2: - resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==} - hasBin: true - js-yaml@4.3.2: resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true @@ -5564,10 +4017,6 @@ packages: canvas: optional: true - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5579,12 +4028,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-pointer@0.6.2: - resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -5594,9 +4037,6 @@ packages: json-schema-typed@8.0.2: resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-with-bigint@3.5.10: resolution: {integrity: sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==} @@ -5605,45 +4045,16 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@2.2.1: - resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} - - jsonc-parser@2.3.1: - resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} - jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonpath-plus@10.4.0: - resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} - engines: {node: '>=18.0.0'} - hasBin: true - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - - katex@0.16.47: - resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} - hasBin: true - katex@0.18.6: resolution: {integrity: sha512-5B7yiIsr7gq9hlIH6uG7hTNglHSz7I+Csa9I66dK4Ljz/YEGQMoBcC1IwtFFp34I7byBcEPtCyYFNnzuxZnGlw==} hasBin: true - khroma@2.1.0: - resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -5652,12 +4063,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} - - layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - lefthook-darwin-arm64@2.1.12: resolution: {integrity: sha512-GSUjqaCuxAYlPOovbjXEWE3HAIa/xOQkTTmZ937zieQldjPLTaC7+s5FHoxKywn+D9riBlofkDqG7Z4f5zzmPA==} cpu: [arm64] @@ -5712,17 +4117,6 @@ packages: resolution: {integrity: sha512-2uOexfsrrRhCiTUWdGyDySxVHHhOFJ8MQejs27dM3hugrQB48/z1ZVlaNoxpZ1SnzQ1GaDIbO5rAvicwyiknYQ==} hasBin: true - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - leven@4.1.0: - resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -5895,25 +4289,15 @@ packages: lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.topath@4.5.2: - resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} - lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -5935,9 +4319,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru_map@0.4.1: - resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==} - lucide-react@1.45.0: resolution: {integrity: sha512-yH1ubCAduho9UR7oJhRXIQXogksRILBiTuZC4/bQIGeB9JOkxMlSuEHyyZpo1Z3S0yWJO2KTSUZbjiNvVxeOUw==} peerDependencies: @@ -5978,23 +4359,10 @@ packages: engines: {node: '>= 18'} hasBin: true - marked@16.4.2: - resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} - engines: {node: '>= 20'} - hasBin: true - - marked@18.0.11: - resolution: {integrity: sha512-HnslJfsZkRPBDJRHvVtAaWlZHEpSu7u8LgQuJCELjRKuWR+hpq4A7sLq3p8HaI9ypVoXDXxV34CsQJEe1+J5Aw==} - engines: {node: '>= 20'} - hasBin: true - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdast-util-definitions@6.0.0: - resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} - mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -6043,9 +4411,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -6053,9 +4418,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - medium-zoom@1.1.0: - resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} - meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -6071,9 +4433,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.17.2: - resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -6191,11 +4550,6 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - mime@4.1.0: resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} engines: {node: '>=16'} @@ -6221,24 +4575,9 @@ packages: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - minimatch@5.1.9: - resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} - engines: {node: '>=10'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -6259,16 +4598,9 @@ packages: react-dom: optional: true - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - muggle-string@0.4.1: - resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -6277,22 +4609,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.16: - resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} - engines: {node: ^18 || >=20} - hasBin: true - - nanotar@0.3.0: - resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==} - negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - neotraverse@1.0.1: - resolution: {integrity: sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==} - engines: {node: '>= 10'} - nerf-dart@1.0.0: resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} @@ -6344,57 +4664,14 @@ packages: sass: optional: true - nimma@0.2.3: - resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} - engines: {node: ^12.20 || >=14.13} - - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-emoji@2.2.0: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - node-html-parser@9.0.2: - resolution: {integrity: sha512-XhM0CTeF4Hkw3el7VCyasGJCEvp500Xf0s1J3ZigYfTOkVqZRQRY3EiAw1CbJzNrxaKSDthXiT9c/4CBwIJyfw==} - - node-mock-http@1.0.5: - resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} - node-releases@2.0.54: resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==} engines: {node: '>=18'} - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6403,10 +4680,6 @@ packages: resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} engines: {node: ^20.17.0 || >=22.9.0} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - normalize-url@9.0.1: resolution: {integrity: sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==} engines: {node: '>=20'} @@ -6498,9 +4771,6 @@ packages: - validate-npm-package-name - which - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nypm@0.6.9: resolution: {integrity: sha512-zxlE2yvSWZWmHcNdT3+5zV2lrCogeE9YOklHrR3dFjqutq5wO7GFDYLFDRXLsYnJzwvy/im9fYoxePvS0VTW0w==} engines: {node: '>=18'} @@ -6514,28 +4784,10 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - object-treeify@1.1.33: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} - engines: {node: '>=12.20.0'} - - ofetch@1.5.1: - resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} - - ohash@2.0.12: - resolution: {integrity: sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -6569,25 +4821,10 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openapi-sampler@1.7.4: - resolution: {integrity: sha512-CKS/rd5ucPCuEDbJnjGDXZTsuGWcmv53aCmQx7soZlPEONUGN4af0/dY5+THRFZraSEjeA78nlfzdFswC/N5SA==} - ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} - os-paths@4.4.0: - resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} - engines: {node: '>= 6.0'} - - ow@0.28.2: - resolution: {integrity: sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==} - engines: {node: '>=12'} - - own-keys@1.0.2: - resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} - engines: {node: '>= 0.4'} - p-each-series@3.0.0: resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} engines: {node: '>=12'} @@ -6608,10 +4845,6 @@ packages: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} - p-limit@7.3.2: - resolution: {integrity: sha512-Ll0w3fU24vYpXoZmjjZIee6bJQDgG0oAyo1PdmFYI8UDwJJddaHAypxIH9avUu+t+lSsAwKVsb1jDCMIIChliw==} - engines: {node: '>=20'} - p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -6624,26 +4857,14 @@ packages: resolution: {integrity: sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==} engines: {node: '>=18'} - p-queue@9.3.3: - resolution: {integrity: sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==} - engines: {node: '>=20'} - p-reduce@3.0.0: resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} engines: {node: '>=12'} - p-retry@8.0.1: - resolution: {integrity: sha512-NAigyu8hfvJe7MsS18mnc4is0MZtau3QMdBklaJKK23oBQb6occO3UPM3vHmTckW8KhfyjMZaUOqdTFEYliHgg==} - engines: {node: '>=22'} - p-timeout@6.1.4: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} - p-timeout@7.0.1: - resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} - engines: {node: '>=20'} - p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -6652,16 +4873,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-manager-detector@1.8.0: - resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} - - pagefind@1.5.2: - resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} - hasBin: true - - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -6681,9 +4892,6 @@ packages: resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} engines: {node: '>=18'} - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} @@ -6720,17 +4928,10 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-data-parser@0.1.0: - resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} - path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} - path-expression-matcher@1.6.2: - resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} - engines: {node: '>=14.0.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6739,16 +4940,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-scurry@2.0.2: - resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} - engines: {node: 18 || 20 || >=22} - - path-to-regexp@6.1.0: - resolution: {integrity: sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==} - - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-to-regexp@8.4.2: resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} @@ -6756,18 +4947,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path@0.12.7: - resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - perfect-debounce@2.1.0: - resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} - - piccolore@0.1.3: - resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6783,10 +4965,6 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -6822,24 +5000,6 @@ packages: engines: {node: '>=20'} hasBin: true - points-on-curve@0.2.0: - resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} - - points-on-path@0.2.1: - resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - - pony-cause@1.1.1: - resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} - engines: {node: '>=12.0.0'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - postcss-selector-parser@7.1.6: resolution: {integrity: sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==} engines: {node: '>=4'} @@ -6873,21 +5033,9 @@ packages: resolution: {integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==} engines: {node: '>=18'} - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - process-ancestry@0.1.0: - resolution: {integrity: sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==} - engines: {node: '>=18.0.0'} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -6922,9 +5070,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - radix3@1.1.2: - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - range-parser@1.3.0: resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} engines: {node: '>= 0.6'} @@ -6951,10 +5096,6 @@ packages: '@types/react': '>=18' react: '>=18' - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -7008,10 +5149,6 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - readdirp@5.1.1: resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} engines: {node: '>= 20.19.0'} @@ -7034,10 +5171,6 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -7047,10 +5180,6 @@ packages: regex@6.1.0: resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - registry-auth-token@5.1.1: resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} engines: {node: '>=14'} @@ -7061,9 +5190,6 @@ packages: rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - rehype-stringify@10.0.1: - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -7076,22 +5202,12 @@ packages: remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - remark-smartypants@3.0.3: - resolution: {integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==} - engines: {node: '>=16.0.0'} - remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} remark@15.0.1: resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - request-light@0.5.8: - resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} - - request-light@0.7.0: - resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -7111,9 +5227,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.3: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} @@ -7122,37 +5235,15 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} - - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} - - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} - - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - robots-parser@3.0.1: - resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} - engines: {node: '>=10.0.0'} - - robust-predicates@3.0.3: - resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rolldown@1.2.6: resolution: {integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - roughjs@4.6.6: - resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} - router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -7164,27 +5255,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -7194,10 +5267,6 @@ packages: satteri@0.9.5: resolution: {integrity: sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==} - sax@1.6.1: - resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} - engines: {node: '>=11.0.0'} - saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -7208,10 +5277,6 @@ packages: scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - semantic-release@25.0.9: resolution: {integrity: sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==} engines: {node: ^22.14.0 || >= 24.10.0} @@ -7238,27 +5303,9 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - server-destroy@1.0.1: - resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} - server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7315,10 +5362,6 @@ packages: resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} engines: {node: '>=6'} - simple-icons@13.21.0: - resolution: {integrity: sha512-LI5pVJPBv6oc79OMsffwb6kEqnmB8P1Cjg1crNUlhsxPETQ5UzbCKQdxU+7MW6+DD1qfPkla/vSKlLD4IfyXpQ==} - engines: {node: '>=0.12.18'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -7330,18 +5373,10 @@ packages: resolution: {integrity: sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==} engines: {node: '>=22'} - slugify@1.6.9: - resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} - engines: {node: '>=8.0.0'} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.8.0: - resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} - engines: {node: '>= 18'} - socks@2.8.10: resolution: {integrity: sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} @@ -7379,9 +5414,6 @@ packages: split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -7390,16 +5422,9 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - strictdom@1.0.1: - resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -7412,18 +5437,6 @@ packages: resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} engines: {node: '>=20'} - string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7442,10 +5455,6 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -7466,9 +5475,6 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - strnum@2.4.2: - resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -7488,14 +5494,6 @@ packages: babel-plugin-macros: optional: true - stylis@4.4.0: - resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} - - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - super-regex@1.1.0: resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} @@ -7512,11 +5510,6 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} - svgo@4.1.0: - resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} - engines: {node: '>=16'} - hasBin: true - symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -7544,10 +5537,6 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - tar@7.5.22: - resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} - engines: {node: '>=18'} - temp-dir@3.0.0: resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} engines: {node: '>=14.16'} @@ -7570,16 +5559,9 @@ packages: resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} engines: {node: '>=12'} - tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyclip@0.1.15: - resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} - engines: {node: ^16.14.0 || >= 17.3.0} - tinyexec@1.3.0: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} @@ -7611,9 +5593,6 @@ packages: resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} engines: {node: '>=16'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -7628,13 +5607,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-dedent@2.3.0: - resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} - engines: {node: '>=6.10'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-morph@26.0.0: resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} @@ -7642,9 +5614,6 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -7660,14 +5629,6 @@ packages: tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} - twoslash-protocol@0.3.9: - resolution: {integrity: sha512-9/iwp+CXOnjFMPQuPL5PkuRbZnDoNpBvtJCLs9t8kDYkL3YHujbvnHfZA1i5fApDftVEdBw+T/4F+dH5kIzpYQ==} - - twoslash@0.3.9: - resolution: {integrity: sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==} - peerDependencies: - typescript: ^5.5.0 || ^6.0.0 - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -7688,33 +5649,6 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} - - typesafe-path@0.2.2: - resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} - - typescript-auto-import-cache@0.3.6: - resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} - - typescript@6.0.3: - resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@7.0.2: resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} engines: {node: '>=16.20.0'} @@ -7747,16 +5681,6 @@ packages: stylelint: optional: true - ultrahtml@1.7.0: - resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - undici-types@8.10.0: resolution: {integrity: sha512-ibvdovq3nCFs8Msrd95BW+zUOq+aOVbT+wpHUoPWhztbHEoPc6oof51iFDB6Es8lTKvNvVW9jNSAB8dwrKTMGg==} @@ -7794,22 +5718,13 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unifont@0.7.5: - resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} - unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -7822,9 +5737,6 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} @@ -7842,92 +5754,24 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unstorage@1.17.5: - resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + update-browserslist-db@1.3.2: + resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6 || ^7 || ^8 - '@deno/kv': '>=0.9.0' - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 - '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' - '@vercel/functions': ^2.2.12 || ^3.0.0 - '@vercel/kv': ^1 || ^2 || ^3 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/functions': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: - optional: true - - update-browserslist-db@1.3.2: - resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - urijs@1.19.11: - resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} - - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + '@types/react': optional: true use-sidecar@1.1.3: @@ -7948,21 +5792,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.10.4: - resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} - - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - uuid@14.0.2: - resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==} - hasBin: true - - vali-date@1.0.0: - resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==} - engines: {node: '>=0.10.0'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -8026,122 +5855,6 @@ packages: yaml: optional: true - vitefu@1.1.3: - resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - vite: - optional: true - - volar-service-css@0.0.71: - resolution: {integrity: sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-emmet@0.0.71: - resolution: {integrity: sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-html@0.0.71: - resolution: {integrity: sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - volar-service-prettier@0.0.71: - resolution: {integrity: sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==} - peerDependencies: - '@volar/language-service': ~2.4.0 - prettier: ^2.2 || ^3.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - prettier: - optional: true - - volar-service-typescript-twoslash-queries@0.0.71: - resolution: {integrity: sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==} - peerDependencies: - '@volar/language-service': ~2.4.0 - typescript: '*' - peerDependenciesMeta: - '@volar/language-service': - optional: true - typescript: - optional: true - - volar-service-typescript@0.0.71: - resolution: {integrity: sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==} - peerDependencies: - '@volar/language-service': ~2.4.0 - typescript: '*' - peerDependenciesMeta: - '@volar/language-service': - optional: true - typescript: - optional: true - - volar-service-yaml@0.0.71: - resolution: {integrity: sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==} - peerDependencies: - '@volar/language-service': ~2.4.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - - vscode-css-languageservice@6.3.10: - resolution: {integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==} - - vscode-html-languageservice@5.6.2: - resolution: {integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==} - - vscode-json-languageservice@4.1.8: - resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} - engines: {npm: '>=7.0.0'} - - vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - - vscode-jsonrpc@9.0.2: - resolution: {integrity: sha512-SbQSV9yRemARxeXw6LU5sS6Zq0e9/DgCCX5yelH263ZQWukbTk8EF8fjTrr1dziasf4GwlJbvTwFnTrnQFWZXQ==} - engines: {node: '>=14.0.0'} - - vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} - - vscode-languageserver-protocol@3.18.3: - resolution: {integrity: sha512-DF49+WeV5py4zO5hhobp60jjsDSK0lAqA0OuKBLBvp423HPWQcCbhZz3JgyfIewsEz2f8U+X75xNIFHdiXZm2w==} - - vscode-languageserver-textdocument@1.0.14: - resolution: {integrity: sha512-EQyqJMi552E4ZTf46izQ4Fj6XquqxCySR3J5ZSD1SisMf6RfpeOWHxGBE8Gr6V0/3GHIGdAzDn8F8+1nTGCnoQ==} - - vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - - vscode-languageserver-types@3.18.3: - resolution: {integrity: sha512-XIlzJ7Qp/jzSI1ds7/FwPAWrPeTZA7pAtlW4hdJ1J6xXWJL6dR9QYnDhJOdLzdKhUQ5Mm6mvUMw+3DcOQQasPw==} - - vscode-languageserver@9.0.1: - resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} - hasBin: true - - vscode-nls@5.2.0: - resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} - - vscode-uri@3.2.0: - resolution: {integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==} - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -8152,9 +5865,6 @@ packages: web-worker@1.5.0: resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -8171,30 +5881,11 @@ packages: resolution: {integrity: sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==} engines: {node: ^22.14.0 || >=24.0.0} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - which-command@0.1.0: resolution: {integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==} engines: {node: '>=22'} hasBin: true - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8220,10 +5911,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@8.0.0: - resolution: {integrity: sha512-dYwyZredl67GyLLIHJnRM3h2PcOmN5SkcgC7eM5DPDEOEl6dLFqVrMg3F1Ea32usj4VSVZtd2H4MtKTNOf6nPg==} - engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - ws@8.21.3: resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} @@ -8240,22 +5927,10 @@ packages: resolution: {integrity: sha512-Hl0ZOAs672vg+06kfujwRhoS6/jehvULrlFkuF2dRu6pHgA8U06h3xqNIqNNU1LTXPcedxByAR4GS6pwQK0mgA==} engines: {node: '>=20'} - xdg-app-paths@5.5.1: - resolution: {integrity: sha512-hI3flOB4PLZIy5prbtTpirobtPE2ZtZ52szO+2mM9Efp6ErM398La+C1lIpNWDfNoQk+6Lsi6nMcCwVB7pxeMQ==} - engines: {node: '>= 6.0'} - - xdg-portable@7.3.0: - resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} - engines: {node: '>= 6.0'} - xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xml-naming@0.3.0: - resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} - engines: {node: '>=16.0.0'} - xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -8263,9 +5938,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -8273,19 +5945,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml-language-server@1.23.0: - resolution: {integrity: sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==} - hasBin: true - - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -8307,10 +5966,6 @@ packages: resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - yocto-spinner@1.2.2: resolution: {integrity: sha512-DODGl1wJjA/s5pnJFKau9lIYHT81lnhob1i3e1TjxZRxEhWRKl74nTbWE6H5KlkViQQTo/Z29YFdxzTZAMY3ng==} engines: {node: '>=18.19'} @@ -8346,9 +6001,6 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.11: - resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} - zod@4.6.2: resolution: {integrity: sha512-lh5RCAGFa1Cm2hjtNwLQhSs/AsqdWnTQaBER9fEwN/88pSh7KOtJavtBx/0VlkN/uFd61SwYmljLMDAsHlvzBQ==} @@ -8373,26 +6025,6 @@ snapshots: '@actions/io@3.0.2': {} - '@ai-sdk/gateway@4.0.72(zod@4.6.2)': - dependencies: - '@ai-sdk/provider': 4.0.10 - '@ai-sdk/provider-utils': 5.0.36(zod@4.6.2) - '@vercel/oidc': 3.2.0 - zod: 4.6.2 - - '@ai-sdk/provider-utils@5.0.36(zod@4.6.2)': - dependencies: - '@ai-sdk/provider': 4.0.10 - '@standard-schema/spec': 1.1.0 - '@workflow/serde': 4.1.0 - eventsource-parser: 3.1.1 - undici: 7.29.1 - zod: 4.6.2 - - '@ai-sdk/provider@4.0.10': - dependencies: - json-schema: 0.4.0 - '@algolia/abtesting@1.16.1': dependencies: '@algolia/client-common': 5.50.1 @@ -8493,11 +6125,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@antfu/install-pkg@1.1.0': - dependencies: - package-manager-detector: 1.8.0 - tinyexec: 1.3.1 - '@asamuzakjp/css-color@6.0.5': dependencies: '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) @@ -8513,289 +6140,6 @@ snapshots: is-potential-custom-element-name: 1.0.1 lru-cache: 11.5.2 - '@astrojs/check@0.9.10(prettier@3.9.6)(typescript@6.0.3)': - dependencies: - '@astrojs/language-server': 2.16.16(prettier@3.9.6)(typescript@6.0.3) - chokidar: 4.0.3 - kleur: 4.1.5 - typescript: 6.0.3 - yargs: 18.1.0 - transitivePeerDependencies: - - prettier - - prettier-plugin-astro - - '@astrojs/compiler-binding-darwin-arm64@0.4.0': - optional: true - - '@astrojs/compiler-binding-darwin-x64@0.4.0': - optional: true - - '@astrojs/compiler-binding-linux-arm64-gnu@0.4.0': - optional: true - - '@astrojs/compiler-binding-linux-arm64-musl@0.4.0': - optional: true - - '@astrojs/compiler-binding-linux-x64-gnu@0.4.0': - optional: true - - '@astrojs/compiler-binding-linux-x64-musl@0.4.0': - optional: true - - '@astrojs/compiler-binding-wasm32-wasi@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)': - dependencies: - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - optional: true - - '@astrojs/compiler-binding-win32-arm64-msvc@0.4.0': - optional: true - - '@astrojs/compiler-binding-win32-x64-msvc@0.4.0': - optional: true - - '@astrojs/compiler-binding@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)': - optionalDependencies: - '@astrojs/compiler-binding-darwin-arm64': 0.4.0 - '@astrojs/compiler-binding-darwin-x64': 0.4.0 - '@astrojs/compiler-binding-linux-arm64-gnu': 0.4.0 - '@astrojs/compiler-binding-linux-arm64-musl': 0.4.0 - '@astrojs/compiler-binding-linux-x64-gnu': 0.4.0 - '@astrojs/compiler-binding-linux-x64-musl': 0.4.0 - '@astrojs/compiler-binding-wasm32-wasi': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) - '@astrojs/compiler-binding-win32-arm64-msvc': 0.4.0 - '@astrojs/compiler-binding-win32-x64-msvc': 0.4.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@astrojs/compiler-rs@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)': - dependencies: - '@astrojs/compiler-binding': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@astrojs/compiler@2.13.1': {} - - '@astrojs/internal-helpers@0.10.4': - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - js-yaml: 4.3.2 - picomatch: 4.0.7 - retext-smartypants: 6.2.0 - shiki: 4.4.3 - smol-toml: 1.8.0 - unified: 11.0.5 - - '@astrojs/internal-helpers@0.11.0': - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - js-yaml: 4.3.2 - picomatch: 4.0.7 - retext-smartypants: 6.2.0 - shiki: 4.4.3 - smol-toml: 1.8.0 - unified: 11.0.5 - - '@astrojs/language-server@2.16.16(prettier@3.9.6)(typescript@6.0.3)': - dependencies: - '@astrojs/compiler': 2.13.1 - '@astrojs/yaml2ts': 0.2.4 - '@jridgewell/sourcemap-codec': 1.6.0 - '@volar/kit': 2.4.28(typescript@6.0.3) - '@volar/language-core': 2.4.28 - '@volar/language-server': 2.4.28(typescript@6.0.3) - '@volar/language-service': 2.4.28(typescript@6.0.3) - muggle-string: 0.4.1 - tinyglobby: 0.2.17 - volar-service-css: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) - volar-service-emmet: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) - volar-service-html: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) - volar-service-prettier: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(prettier@3.9.6) - volar-service-typescript: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3) - volar-service-typescript-twoslash-queries: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3) - volar-service-yaml: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) - vscode-html-languageservice: 5.6.2 - vscode-uri: 3.2.0 - optionalDependencies: - prettier: 3.9.6 - transitivePeerDependencies: - - typescript - - '@astrojs/markdown-remark@7.2.4(supports-color@7.2.0)': - dependencies: - '@astrojs/internal-helpers': 0.10.4 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - hast-util-to-text: 4.0.2 - mdast-util-definitions: 6.0.0 - rehype-raw: 7.0.0 - rehype-stringify: 10.0.1 - remark-gfm: 4.0.1(supports-color@7.2.0) - remark-parse: 11.0.0(supports-color@7.2.0) - remark-rehype: 11.1.2 - remark-smartypants: 3.0.3 - unified: 11.0.5 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.1.0 - unist-util-visit-parents: 6.0.2 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@astrojs/markdown-satteri@0.3.8': - dependencies: - '@astrojs/internal-helpers': 0.10.4 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - satteri: 0.10.5 - - '@astrojs/markdown-satteri@0.4.0': - dependencies: - '@astrojs/internal-helpers': 0.11.0 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - satteri: 0.10.5 - - '@astrojs/mdx@7.0.8(@astrojs/markdown-satteri@0.3.8)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0)': - dependencies: - '@astrojs/internal-helpers': 0.10.4 - '@astrojs/markdown-remark': 7.2.4(supports-color@7.2.0) - '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) - acorn: 8.18.0 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - es-module-lexer: 2.3.2 - estree-util-visit: 2.0.0 - hast-util-to-html: 9.0.5 - piccolore: 0.1.3 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1(supports-color@7.2.0) - remark-smartypants: 3.0.3 - source-map: 0.7.6 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - optionalDependencies: - '@astrojs/markdown-satteri': 0.3.8 - transitivePeerDependencies: - - supports-color - - '@astrojs/node@11.1.5(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0)': - dependencies: - '@astrojs/internal-helpers': 0.11.0 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - send: 1.2.1(supports-color@7.2.0) - server-destroy: 1.0.1 - transitivePeerDependencies: - - supports-color - - '@astrojs/prism@4.0.2': - dependencies: - prismjs: 1.30.0 - - '@astrojs/react@6.0.5(@types/node@26.5.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(esbuild@0.28.2)(jiti@2.7.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(supports-color@7.2.0)(tsx@4.23.13)(yaml@2.9.0)': - dependencies: - '@astrojs/internal-helpers': 0.11.0 - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@vitejs/plugin-react': 5.2.0(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0)) - devalue: 5.9.2 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - ultrahtml: 1.7.0 - vite: 8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - '@vitejs/devtools' - - esbuild - - jiti - - less - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - '@astrojs/telemetry@3.3.3': - dependencies: - ci-info: 4.4.0 - dset: 3.1.4 - is-docker: 4.0.0 - package-manager-detector: 1.8.0 - - '@astrojs/vercel@11.0.9(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)(supports-color@7.2.0)(ws@8.21.3)': - dependencies: - '@astrojs/internal-helpers': 0.11.0 - '@vercel/analytics': 2.0.1(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0) - '@vercel/functions': 3.9.5(ws@8.21.3) - '@vercel/nft': 1.11.0(supports-color@7.2.0) - '@vercel/routing-utils': 6.5.0 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - esbuild: 0.28.2 - tinyglobby: 0.2.17 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-web-identity' - - '@remix-run/react' - - '@sveltejs/kit' - - encoding - - next - - nuxt - - react - - rollup - - supports-color - - svelte - - vue - - vue-router - - ws - - '@astrojs/yaml2ts@0.2.4': - dependencies: - yaml: 2.9.0 - - '@asyncapi/converter@2.0.2': - dependencies: - '@asyncapi/parser': 3.6.3 - js-yaml: 3.15.2 - path: 0.12.7 - transitivePeerDependencies: - - encoding - - '@asyncapi/parser@3.6.3': - dependencies: - '@asyncapi/specs': 6.11.1 - '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 - '@stoplight/json': 3.21.0 - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-core': 1.23.1 - '@stoplight/spectral-functions': 1.10.5 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/types': 13.20.0 - '@types/json-schema': 7.0.15 - '@types/urijs': 1.19.26 - ajv: 8.20.0 - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - avsc: 5.7.9 - js-yaml: 4.3.2 - jsonpath-plus: 10.4.0 - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - - '@asyncapi/specs@6.11.1': - dependencies: - '@types/json-schema': 7.0.15 - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -8951,16 +6295,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: '@babel/core': 7.29.7(supports-color@7.2.0) @@ -9071,8 +6405,6 @@ snapshots: '@biomejs/cli-win32-x64@2.5.13': optional: true - '@braintree/sanitize-url@7.1.2': {} - '@bramus/specificity@2.4.2': dependencies: css-tree: 3.2.1 @@ -9139,12 +6471,6 @@ snapshots: '@bruits/satteri-win32-x64-msvc@0.9.5': optional: true - '@capsizecss/unpack@4.0.1': - dependencies: - fontkitten: 1.0.3 - - '@chevrotain/types@11.1.2': {} - '@clack/core@1.4.3': dependencies: fast-wrap-ansi: 0.2.2 @@ -9207,29 +6533,6 @@ snapshots: '@dotenvx/primitives@0.8.0': {} - '@emmetio/abbreviation@2.3.3': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/css-abbreviation@2.1.8': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/css-parser@0.4.1': - dependencies: - '@emmetio/stream-reader': 2.2.0 - '@emmetio/stream-reader-utils': 0.1.0 - - '@emmetio/html-matcher@1.3.0': - dependencies: - '@emmetio/scanner': 1.0.4 - - '@emmetio/scanner@1.0.4': {} - - '@emmetio/stream-reader-utils@0.1.0': {} - - '@emmetio/stream-reader@2.2.0': {} - '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 @@ -9416,19 +6719,8 @@ snapshots: dependencies: hono: 4.12.12 - '@iconify-json/lucide@1.2.128': - dependencies: - '@iconify/types': 2.0.0 - - '@iconify/types@2.0.0': {} - - '@iconify/utils@3.1.4': - dependencies: - '@antfu/install-pkg': 1.1.0 - '@iconify/types': 2.0.0 - import-meta-resolve: 4.2.0 - - '@img/colour@1.1.0': {} + '@img/colour@1.1.0': + optional: true '@img/sharp-darwin-arm64@0.35.4': optionalDependencies: @@ -9534,10 +6826,6 @@ snapshots: '@img/sharp-win32-x64@0.35.4': optional: true - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.3 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.6.0 @@ -9557,31 +6845,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.6.0 - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@mapbox/node-pre-gyp@2.0.3(supports-color@7.2.0)': - dependencies: - consola: 3.4.2 - detect-libc: 2.1.2 - https-proxy-agent: 7.0.6(supports-color@7.2.0) - node-fetch: 2.7.0 - nopt: 8.1.0 - semver: 7.8.5 - tar: 7.5.22 - transitivePeerDependencies: - - encoding - - supports-color - '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': dependencies: '@types/estree': 1.0.9 @@ -9612,10 +6875,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@mermaid-js/parser@1.2.1': - dependencies: - '@chevrotain/types': 11.1.2 - '@modelcontextprotocol/sdk@1.30.0(supports-color@7.2.0)(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.13(hono@4.12.12) @@ -9638,28 +6897,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@modelcontextprotocol/sdk@1.30.0(supports-color@7.2.0)(zod@4.6.2)': - dependencies: - '@hono/node-server': 1.19.13(hono@4.12.12) - ajv: 8.20.0 - ajv-formats: 3.0.1(ajv@8.20.0) - content-type: 1.0.5 - cors: 2.8.6 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.1.1 - express: 5.2.1(supports-color@7.2.0) - express-rate-limit: 8.3.2(express@5.2.1(supports-color@7.2.0)) - hono: 4.12.12 - jose: 6.2.2 - json-schema-typed: 8.0.2 - pkce-challenge: 5.0.1 - raw-body: 3.0.2 - zod: 4.6.2 - zod-to-json-schema: 3.25.2(zod@4.6.2) - transitivePeerDependencies: - - supports-color - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 @@ -9667,15 +6904,7 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.3 - '@tybys/wasm-util': 0.10.3 - optional: true - - '@next/env@16.3.4': - optional: true + '@next/env@16.3.4': {} '@next/env@16.3.5': {} @@ -9730,8 +6959,6 @@ snapshots: '@noble/hashes@1.8.0': optional: true - '@nodable/entities@3.0.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9810,61 +7037,9 @@ snapshots: dependencies: '@octokit/openapi-types': 28.0.0 - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - dependencies: - fast-deep-equal: 3.1.3 - - '@orama/orama@3.1.18': {} - - '@oslojs/encoding@1.1.0': {} - - '@oxc-project/types@0.147.0': {} - - '@pagefind/darwin-arm64@1.5.2': - optional: true - - '@pagefind/darwin-x64@1.5.2': - optional: true - - '@pagefind/freebsd-x64@1.5.2': - optional: true - - '@pagefind/linux-arm64@1.5.2': - optional: true - - '@pagefind/linux-x64@1.5.2': - optional: true - - '@pagefind/windows-arm64@1.5.2': - optional: true - - '@pagefind/windows-x64@1.5.2': + '@oxc-project/types@0.147.0': optional: true - '@pierre/diffs@1.3.6(@shikijs/themes@4.4.3)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': - dependencies: - '@pierre/theme': 2.0.0 - '@pierre/theming': 1.0.1(@pierre/theme@2.0.0)(@shikijs/themes@4.4.3)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(shiki@4.4.3) - '@shikijs/transformers': 4.4.3 - diff: 9.0.0 - hast-util-to-html: 9.0.5 - lru_map: 0.4.1 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - shiki: 4.4.3 - transitivePeerDependencies: - - '@shikijs/themes' - - '@pierre/theme@2.0.0': {} - - '@pierre/theming@1.0.1(@pierre/theme@2.0.0)(@shikijs/themes@4.4.3)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(shiki@4.4.3)': - optionalDependencies: - '@pierre/theme': 2.0.0 - '@shikijs/themes': 4.4.3 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - shiki: 4.4.3 - '@playwright/test@1.61.1': dependencies: playwright: 1.61.1 @@ -10278,71 +7453,8 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.2.6': optional: true - '@rolldown/pluginutils@1.0.0-rc.3': {} - - '@rolldown/pluginutils@1.0.1': {} - - '@rollup/pluginutils@5.4.0': - dependencies: - '@types/estree': 1.0.9 - estree-walker: 2.0.2 - picomatch: 4.0.7 - - '@scalar/astro@0.4.17(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))': - dependencies: - '@scalar/client-side-rendering': 0.3.10 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - - '@scalar/client-side-rendering@0.3.10': - dependencies: - '@scalar/schemas': 0.8.4 - '@scalar/types': 0.18.3 - '@scalar/validation': 0.6.3 - - '@scalar/helpers@0.11.1': {} - - '@scalar/helpers@0.11.2': {} - - '@scalar/json-magic@0.13.2': - dependencies: - '@scalar/helpers': 0.11.1 - pathe: 2.0.3 - yaml: 2.9.0 - - '@scalar/openapi-parser@0.28.16': - dependencies: - '@scalar/helpers': 0.11.1 - '@scalar/json-magic': 0.13.2 - '@scalar/openapi-types': 0.9.5 - '@scalar/openapi-upgrader': 0.2.15 - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-formats: 3.0.1(ajv@8.20.0) - jsonpointer: 5.0.1 - leven: 4.1.0 - yaml: 2.9.0 - - '@scalar/openapi-types@0.9.5': {} - - '@scalar/openapi-upgrader@0.2.15': - dependencies: - '@scalar/openapi-types': 0.9.5 - - '@scalar/schemas@0.8.4': - dependencies: - '@scalar/helpers': 0.11.2 - '@scalar/validation': 0.6.3 - - '@scalar/types@0.18.3': - dependencies: - '@scalar/helpers': 0.11.2 - nanoid: 5.1.16 - type-fest: 5.8.0 - zod: 4.6.2 - - '@scalar/validation@0.6.3': {} - - '@scarf/scarf@1.4.0': {} + '@rolldown/pluginutils@1.0.1': + optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -10464,20 +7576,6 @@ snapshots: dependencies: '@shikijs/types': 4.4.3 - '@shikijs/transformers@4.4.3': - dependencies: - '@shikijs/core': 4.4.3 - '@shikijs/types': 4.4.3 - - '@shikijs/twoslash@4.4.3(supports-color@7.2.0)(typescript@6.0.3)': - dependencies: - '@shikijs/core': 4.4.3 - '@shikijs/types': 4.4.3 - twoslash: 0.3.9(supports-color@7.2.0)(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - '@shikijs/types@4.4.3': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -10495,151 +7593,6 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stoplight/better-ajv-errors@1.0.3(ajv@8.20.0)': - dependencies: - ajv: 8.20.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@stoplight/json-ref-readers@1.2.2': - dependencies: - node-fetch: 2.7.0 - tslib: 1.14.1 - transitivePeerDependencies: - - encoding - - '@stoplight/json-ref-resolver@3.1.6': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - '@types/urijs': 1.19.26 - dependency-graph: 0.11.0 - fast-memoize: 2.5.2 - immer: 9.0.21 - lodash: 4.18.1 - tslib: 2.8.1 - urijs: 1.19.11 - - '@stoplight/json@3.21.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - jsonc-parser: 2.2.1 - lodash: 4.18.1 - safe-stable-stringify: 1.1.1 - - '@stoplight/ordered-object-literal@1.0.5': {} - - '@stoplight/path@1.3.2': {} - - '@stoplight/spectral-core@1.23.1': - dependencies: - '@scarf/scarf': 1.4.0 - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.20.0) - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-runtime': 1.1.6 - '@stoplight/types': 13.6.0 - '@types/es-aggregate-error': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 8.20.0 - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - es-aggregate-error: 1.0.14 - expr-eval-fork: 3.0.3 - jsonpath-plus: 10.4.0 - lodash: 4.18.1 - lodash.topath: 4.5.2 - minimatch: 3.1.5 - nimma: 0.2.3 - pony-cause: 1.1.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-formats@1.8.5': - dependencies: - '@scarf/scarf': 1.4.0 - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.23.1 - '@types/json-schema': 7.0.15 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-functions@1.10.5': - dependencies: - '@scarf/scarf': 1.4.0 - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.20.0) - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.23.1 - '@stoplight/spectral-formats': 1.8.5 - '@stoplight/spectral-runtime': 1.1.6 - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - lodash: 4.18.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-parsers@1.0.5': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/types': 14.1.1 - '@stoplight/yaml': 4.3.0 - tslib: 2.8.1 - - '@stoplight/spectral-ref-resolver@1.0.5': - dependencies: - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-runtime': 1.1.6 - dependency-graph: 0.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-runtime@1.1.6': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - lodash: 4.18.1 - node-fetch: 2.7.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/types@13.20.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@13.6.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@14.1.1': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/yaml-ast-parser@0.0.50': {} - - '@stoplight/yaml@4.3.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/types': 14.1.1 - '@stoplight/yaml-ast-parser': 0.0.50 - tslib: 2.8.1 - '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 @@ -10713,18 +7666,6 @@ snapshots: postcss: 8.5.28 tailwindcss: 4.3.3 - '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': - dependencies: - postcss-selector-parser: 6.0.10 - tailwindcss: 4.3.3 - - '@tailwindcss/vite@4.3.3(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))': - dependencies: - '@tailwindcss/node': 4.3.3 - '@tailwindcss/oxide': 4.3.3 - tailwindcss: 4.3.3 - vite: 8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - '@takumi-rs/core-darwin-arm64@2.13.4': optional: true @@ -10765,10 +7706,12 @@ snapshots: transitivePeerDependencies: - preact - react + optional: true '@takumi-rs/helpers@2.13.4(react@19.3.0)': optionalDependencies: react: 19.3.0 + optional: true '@takumi-rs/wasm@2.13.4(csstype@3.2.3)(react@19.3.0)': dependencies: @@ -10778,6 +7721,7 @@ snapshots: transitivePeerDependencies: - preact - react + optional: true '@testing-library/dom@10.4.1': dependencies: @@ -10807,164 +7751,20 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.8 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.29.8 - '@types/better-sqlite3@9.6.0': dependencies: '@types/node': 26.5.1 - '@types/d3-array@3.2.2': {} - - '@types/d3-axis@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-brush@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-chord@3.0.6': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-contour@3.0.6': - dependencies: - '@types/d3-array': 3.2.2 - '@types/geojson': 7946.0.16 - - '@types/d3-delaunay@6.0.4': {} - - '@types/d3-dispatch@3.0.7': {} - - '@types/d3-drag@3.0.7': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-dsv@3.0.7': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-fetch@3.0.7': - dependencies: - '@types/d3-dsv': 3.0.7 - - '@types/d3-force@3.0.10': {} - - '@types/d3-format@3.0.4': {} - - '@types/d3-geo@3.1.1': - dependencies: - '@types/geojson': 7946.0.16 - - '@types/d3-hierarchy@3.1.7': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-polygon@3.0.2': {} - - '@types/d3-quadtree@3.0.6': {} - - '@types/d3-random@3.0.4': {} - - '@types/d3-scale-chromatic@3.1.0': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-selection@3.0.11': {} - - '@types/d3-shape@3.2.0': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time-format@4.0.3': {} - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - - '@types/d3-transition@3.0.9': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-zoom@3.0.8': - dependencies: - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 - - '@types/d3@7.4.3': - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-axis': 3.0.6 - '@types/d3-brush': 3.0.6 - '@types/d3-chord': 3.0.6 - '@types/d3-color': 3.1.3 - '@types/d3-contour': 3.0.6 - '@types/d3-delaunay': 6.0.4 - '@types/d3-dispatch': 3.0.7 - '@types/d3-drag': 3.0.7 - '@types/d3-dsv': 3.0.7 - '@types/d3-ease': 3.0.2 - '@types/d3-fetch': 3.0.7 - '@types/d3-force': 3.0.10 - '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.1 - '@types/d3-hierarchy': 3.1.7 - '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.1 - '@types/d3-polygon': 3.0.2 - '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.4 - '@types/d3-scale': 4.0.9 - '@types/d3-scale-chromatic': 3.1.0 - '@types/d3-selection': 3.0.11 - '@types/d3-shape': 3.2.0 - '@types/d3-time': 3.0.4 - '@types/d3-time-format': 4.0.3 - '@types/d3-timer': 3.0.2 - '@types/d3-transition': 3.0.9 - '@types/d3-zoom': 3.0.8 - '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 - '@types/es-aggregate-error@1.0.6': - dependencies: - '@types/node': 26.5.1 - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.9 '@types/estree@1.0.9': {} - '@types/geojson@7946.0.16': {} - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -10980,8 +7780,6 @@ snapshots: parse5: 8.0.1 undici-types: 8.10.0 - '@types/json-schema@7.0.15': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -10990,10 +7788,6 @@ snapshots: '@types/ms@2.1.0': {} - '@types/nlcst@2.0.3': - dependencies: - '@types/unist': 3.0.3 - '@types/node@26.5.1': dependencies: undici-types: 8.9.0 @@ -11010,15 +7804,10 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@types/trusted-types@2.0.7': - optional: true - '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@types/urijs@1.19.26': {} - '@types/validate-npm-package-name@4.0.2': {} '@typescript/typescript-aix-ppc64@7.0.2': @@ -11081,146 +7870,10 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@typescript/vfs@1.6.4(supports-color@7.2.0)(typescript@6.0.3)': - dependencies: - debug: 4.4.3(supports-color@7.2.0) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - '@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.4.0': {} - '@upsetjs/venn.js@2.0.0': - optionalDependencies: - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - '@vercel/analytics@2.0.1(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)': - optionalDependencies: - next: 16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - react: 19.3.0 - - '@vercel/cli-config@0.2.4': - dependencies: - xdg-app-paths: 5.5.1 - zod: 4.1.11 - - '@vercel/cli-exec@1.0.1': - dependencies: - execa: 5.1.1 - - '@vercel/functions@3.9.5(ws@8.21.3)': - dependencies: - '@vercel/oidc': 3.8.5 - optionalDependencies: - ws: 8.21.3 - - '@vercel/nft@1.11.0(supports-color@7.2.0)': - dependencies: - '@mapbox/node-pre-gyp': 2.0.3(supports-color@7.2.0) - '@rollup/pluginutils': 5.4.0 - acorn: 8.18.0 - acorn-import-attributes: 1.9.5(acorn@8.18.0) - async-sema: 3.1.1 - bindings: 1.5.0 - estree-walker: 2.0.2 - glob: 13.0.6 - graceful-fs: 4.2.11 - node-gyp-build: 4.8.4 - picomatch: 4.0.7 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color - - '@vercel/oidc@3.2.0': {} - - '@vercel/oidc@3.8.5': - dependencies: - '@vercel/cli-config': 0.2.4 - '@vercel/cli-exec': 1.0.1 - jose: 5.10.0 - - '@vercel/routing-utils@6.5.0': - dependencies: - path-to-regexp: 6.1.0 - path-to-regexp-updated: path-to-regexp@6.3.0 - optionalDependencies: - ajv: 6.15.0 - - '@vitejs/plugin-react@5.2.0(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))': - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@rolldown/pluginutils': 1.0.0-rc.3 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color - - '@volar/kit@2.4.28(typescript@6.0.3)': - dependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - '@volar/typescript': 2.4.28(typescript@6.0.3) - typesafe-path: 0.2.2 - typescript: 6.0.3 - vscode-languageserver-textdocument: 1.0.14 - vscode-uri: 3.2.0 - - '@volar/language-core@2.4.28': - dependencies: - '@volar/source-map': 2.4.28 - - '@volar/language-server@2.4.28(typescript@6.0.3)': - dependencies: - '@volar/language-core': 2.4.28 - '@volar/language-service': 2.4.28(typescript@6.0.3) - '@volar/typescript': 2.4.28(typescript@6.0.3) - path-browserify: 1.0.1 - request-light: 0.7.0 - vscode-languageserver: 9.0.1 - vscode-languageserver-protocol: 3.18.3 - vscode-languageserver-textdocument: 1.0.14 - vscode-uri: 3.2.0 - optionalDependencies: - typescript: 6.0.3 - - '@volar/language-service@2.4.28(typescript@6.0.3)': - dependencies: - '@volar/language-core': 2.4.28 - vscode-languageserver-protocol: 3.18.3 - vscode-languageserver-textdocument: 1.0.14 - vscode-uri: 3.2.0 - optionalDependencies: - typescript: 6.0.3 - - '@volar/source-map@2.4.28': {} - - '@volar/typescript@2.4.28(typescript@6.0.3)': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.2.0 - optionalDependencies: - typescript: 6.0.3 - - '@vscode/emmet-helper@2.11.0': - dependencies: - emmet: 2.4.11 - jsonc-parser: 2.3.1 - vscode-languageserver-textdocument: 1.0.14 - vscode-languageserver-types: 3.18.3 - vscode-uri: 3.2.0 - - '@vscode/l10n@0.0.18': {} - - '@workflow/serde@4.1.0': {} - '@xterm/addon-fit@0.11.0': {} '@xterm/addon-web-links@0.12.0': {} @@ -11334,29 +7987,17 @@ snapshots: '@yuku-toolchain/types@0.9.3': {} - abbrev@3.0.1: {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - accepts@2.0.0: dependencies: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.18.0): - dependencies: - acorn: 8.18.0 - acorn-jsx@5.3.2(acorn@8.18.0): dependencies: acorn: 8.18.0 acorn@8.18.0: {} - agent-base@7.1.4: {} - agent-base@9.0.0: {} aggregate-error@3.1.0: @@ -11369,21 +8010,6 @@ snapshots: clean-stack: 5.3.0 indent-string: 5.0.0 - ai@7.0.90(zod@4.6.2): - dependencies: - '@ai-sdk/gateway': 4.0.72(zod@4.6.2) - '@ai-sdk/provider': 4.0.10 - '@ai-sdk/provider-utils': 5.0.36(zod@4.6.2) - zod: 4.6.2 - - ajv-draft-04@1.0.0(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 - - ajv-errors@3.0.0(ajv@8.20.0): - dependencies: - ajv: 8.20.0 - ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -11392,18 +8018,6 @@ snapshots: optionalDependencies: ajv: 8.20.0 - ajv-i18n@4.2.0(ajv@8.20.0): - dependencies: - ajv: 8.20.0 - - ajv@6.15.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - optional: true - ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -11429,10 +8043,6 @@ snapshots: '@algolia/requester-node-http': 5.50.1 optional: true - am-i-vibing@0.4.0: - dependencies: - process-ancestry: 0.1.0 - ansi-colors@4.1.3: {} ansi-escapes@7.3.0: @@ -11459,17 +8069,6 @@ snapshots: any-promise@1.3.0: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - - anynum@1.0.1: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} argue-cli@3.2.0: {} @@ -11484,148 +8083,23 @@ snapshots: dependencies: dequal: 2.0.3 - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - array-ify@1.0.0: {} - array-iterate@2.0.1: {} - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - ast-types@0.16.3: dependencies: tslib: 2.8.1 astring@1.9.0: {} - astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0): - dependencies: - '@astrojs/compiler-rs': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) - '@astrojs/internal-helpers': 0.11.0 - '@astrojs/markdown-satteri': 0.4.0 - '@astrojs/telemetry': 3.3.3 - '@capsizecss/unpack': 4.0.1 - '@clack/prompts': 1.7.0 - '@oslojs/encoding': 1.1.0 - am-i-vibing: 0.4.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - ci-info: 4.4.0 - clsx: 2.1.1 - common-ancestor-path: 2.0.0 - cookie: 2.0.1 - devalue: 5.9.2 - diff: 9.0.0 - dset: 3.1.4 - es-module-lexer: 2.3.2 - esbuild: 0.28.2 - find-proc: 0.1.0 - flattie: 1.1.1 - fontace: 0.4.1 - get-tsconfig: 5.0.0-beta.4 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.2.0 - js-yaml: 4.3.2 - jsonc-parser: 3.3.1 - magic-string: 1.2.3 - magicast: 0.5.4 - mrmime: 2.0.1 - neotraverse: 1.0.1 - obug: 2.1.4 - p-limit: 7.3.2 - p-queue: 9.3.3 - package-manager-detector: 1.8.0 - piccolore: 0.1.3 - picomatch: 4.0.7 - semver: 7.8.5 - shiki: 4.4.3 - smol-toml: 1.8.0 - svgo: 4.1.0 - tinyclip: 0.1.15 - tinyexec: 1.3.1 - tinyglobby: 0.2.17 - ultrahtml: 1.7.0 - unifont: 0.7.5 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.3)) - vite: 8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0)) - xxhash-wasm: 1.1.0 - yargs-parser: 22.0.0 - zod: 4.6.2 - optionalDependencies: - sharp: 0.35.4(@types/node@26.5.1) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@emnapi/core' - - '@emnapi/runtime' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vitejs/devtools' - - aws4fetch - - db0 - - idb-keyval - - ioredis - - jiti - - less - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - uploadthing - - yaml - - async-function@1.0.0: {} - - async-sema@3.1.1: {} - - async@3.2.6: {} - atomically@1.7.0: {} - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - avsc@5.7.9: {} - - axobject-query@4.1.0: {} - babel-plugin-react-compiler@1.0.0: dependencies: '@babel/types': 7.29.8 + optional: true bail@2.0.2: {} - balanced-match@1.0.2: {} - balanced-match@4.0.4: {} baseline-browser-mapping@2.11.21: {} @@ -11641,149 +8115,6 @@ snapshots: dependencies: require-from-string: 2.0.2 - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - blume@file:apps/site-blume-spike/vendor/blume-1.5.3.tgz(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@shikijs/themes@4.4.3)(@types/node@26.5.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(@vercel/functions@3.9.5(ws@8.21.3))(csstype@3.2.3)(esbuild@0.28.2)(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(prettier@3.9.6)(supports-color@7.2.0)(tsx@4.23.13)(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(ws@8.21.3)(yaml@2.9.0): - dependencies: - '@astrojs/check': 0.9.10(prettier@3.9.6)(typescript@6.0.3) - '@astrojs/markdown-satteri': 0.3.8 - '@astrojs/mdx': 7.0.8(@astrojs/markdown-satteri@0.3.8)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0) - '@astrojs/node': 11.1.5(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(supports-color@7.2.0) - '@astrojs/react': 6.0.5(@types/node@26.5.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(esbuild@0.28.2)(jiti@2.7.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(supports-color@7.2.0)(tsx@4.23.13)(yaml@2.9.0) - '@astrojs/vercel': 11.0.9(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0))(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0)(supports-color@7.2.0)(ws@8.21.3) - '@asyncapi/converter': 2.0.2 - '@clack/prompts': 1.7.0 - '@iconify-json/lucide': 1.2.128 - '@iconify/types': 2.0.0 - '@iconify/utils': 3.1.4 - '@modelcontextprotocol/sdk': 1.30.0(supports-color@7.2.0)(zod@4.6.2) - '@orama/orama': 3.1.18 - '@pierre/diffs': 1.3.6(@shikijs/themes@4.4.3)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - '@scalar/astro': 0.4.17(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0)) - '@scalar/openapi-parser': 0.28.16 - '@scalar/openapi-types': 0.9.5 - '@shikijs/transformers': 4.4.3 - '@shikijs/twoslash': 4.4.3(supports-color@7.2.0)(typescript@6.0.3) - '@tailwindcss/typography': 0.5.20(tailwindcss@4.3.3) - '@tailwindcss/vite': 4.3.3(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0)) - '@types/mdast': 4.0.4 - '@vercel/analytics': 2.0.1(next@16.3.4(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(react@19.3.0) - ai: 7.0.90(zod@4.6.2) - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@26.5.1)(@vercel/functions@3.9.5(ws@8.21.3))(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - babel-plugin-react-compiler: 1.0.0 - chokidar: 5.0.0 - citty: 0.1.6 - consola: 3.4.2 - cross-spawn: 7.0.6 - dompurify: 3.4.14 - dotenv: 17.4.2 - epub-gen-memory: 1.1.2 - fast-xml-parser: 5.11.1 - get-tsconfig: 4.14.3 - github-slugger: 2.0.0 - graphql: 17.0.2 - gray-matter: 4.0.3 - html-escaper: 3.0.3 - image-size: 2.0.2 - jiti: 2.7.0 - js-yaml: 4.3.2 - katex: 0.18.6 - markdown-table: 3.0.4 - marked: 18.0.11 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - mdast-util-gfm: 3.1.0(supports-color@7.2.0) - mdast-util-to-string: 4.0.0 - medium-zoom: 1.1.0 - mermaid: 11.17.2 - micromark-extension-gfm: 3.0.0 - nanotar: 0.3.0 - node-html-parser: 9.0.2 - openapi-sampler: 1.7.4 - p-limit: 7.3.2 - p-map: 7.0.6 - p-retry: 8.0.1 - package-manager-detector: 1.8.0 - pagefind: 1.5.2 - pathe: 2.0.3 - perfect-debounce: 2.1.0 - picomatch: 4.0.7 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - robots-parser: 3.0.1 - satteri: 0.9.5 - semver: 7.8.5 - sharp: 0.35.4(@types/node@26.5.1) - shiki: 4.4.3 - simple-icons: 13.21.0 - string-width: 8.2.2 - sucrase: 3.35.1 - tailwindcss: 4.3.3 - takumi-js: 2.13.4(csstype@3.2.3)(react@19.3.0) - tinyglobby: 0.2.17 - twoslash: 0.3.9(supports-color@7.2.0)(typescript@6.0.3) - typescript: 6.0.3 - ufo: 1.6.4 - undici: 8.10.0 - write-file-atomic: 8.0.0 - zod: 4.6.2 - transitivePeerDependencies: - - '@astrojs/markdown-remark' - - '@aws-sdk/credential-provider-web-identity' - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@cfworker/json-schema' - - '@deno/kv' - - '@emnapi/core' - - '@emnapi/runtime' - - '@netlify/blobs' - - '@planetscale/database' - - '@remix-run/react' - - '@shikijs/themes' - - '@sveltejs/kit' - - '@types/node' - - '@types/react' - - '@types/react-dom' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vitejs/devtools' - - aws4fetch - - csstype - - db0 - - encoding - - esbuild - - idb-keyval - - ioredis - - less - - next - - nuxt - - preact - - prettier - - prettier-plugin-astro - - rollup - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - svelte - - terser - - tsx - - uploadthing - - vite - - vue - - vue-router - - ws - - yaml - body-parser@2.3.0(supports-color@7.2.0): dependencies: bytes: 3.1.2 @@ -11798,19 +8129,8 @@ snapshots: transitivePeerDependencies: - supports-color - boolbase@1.0.0: {} - bottleneck@2.19.5: {} - brace-expansion@1.1.18: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.1.4: - dependencies: - balanced-match: 1.0.2 - brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -11835,15 +8155,8 @@ snapshots: call-bind-apply-helpers@1.0.2: dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 + es-errors: 1.3.0 + function-bind: 1.1.2 call-bound@1.0.4: dependencies: @@ -11879,22 +8192,10 @@ snapshots: character-reference-invalid@2.0.1: {} - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - chokidar@5.0.0: dependencies: readdirp: 5.1.1 - chownr@3.0.0: {} - - ci-info@4.4.0: {} - - citty@0.1.6: - dependencies: - consola: 3.4.2 - citty@0.2.2: {} class-variance-authority@0.7.1: @@ -11979,14 +8280,6 @@ snapshots: commander@15.0.0: {} - commander@4.1.1: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - common-ancestor-path@2.0.0: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -11994,8 +8287,6 @@ snapshots: compute-scroll-into-view@3.1.1: {} - concat-map@0.0.1: {} - conf@10.2.0: dependencies: ajv: 8.20.0 @@ -12016,8 +8307,6 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - consola@3.4.2: {} - content-disposition@1.1.0: {} content-type@1.0.5: {} @@ -12053,14 +8342,10 @@ snapshots: convert-source-map@2.0.0: {} - cookie-es@1.2.3: {} - cookie-signature@1.2.2: {} cookie@0.7.2: {} - cookie@2.0.1: {} - core-util-is@1.0.3: {} cors@2.8.6: @@ -12068,14 +8353,6 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cose-base@2.2.0: - dependencies: - layout-base: 2.0.1 - cosmiconfig@9.0.2(typescript@7.0.2): dependencies: env-paths: 2.2.1 @@ -12091,246 +8368,21 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crossws@0.3.5: - dependencies: - uncrypto: 0.1.3 - crypto-random-string@4.0.0: dependencies: type-fest: 1.4.0 - css-select@4.3.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-select@6.0.0: - dependencies: - boolbase: 1.0.0 - css-what: 7.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - css-tree@3.2.1: dependencies: mdn-data: 2.27.1 source-map-js: 1.2.1 - css-what@6.2.2: {} - - css-what@7.0.0: {} - cssesc@3.0.0: {} - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - csstype@3.2.3: {} culori@4.0.2: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.2): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.34.2 - - cytoscape-fcose@2.2.0(cytoscape@3.34.2): - dependencies: - cose-base: 2.2.0 - cytoscape: 3.34.2 - - cytoscape@3.34.2: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - - d3-color@3.1.0: {} - - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.1.0 - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-ease@3.0.1: {} - - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@3.1.2: {} - - d3-geo@3.1.1: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-polygon@3.0.1: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.1.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.2 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.9.0: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.2 - d3-geo: 3.1.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - dagre-d3-es@7.0.14: - dependencies: - d3: 7.9.0 - lodash-es: 4.18.1 - data-urls@7.0.0(@noble/hashes@1.8.0): dependencies: whatwg-mimetype: 5.0.0 @@ -12338,26 +8390,6 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - dayjs@1.11.23: {} - debounce-fn@4.0.0: dependencies: mimic-fn: 3.1.0 @@ -12387,32 +8419,12 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.1 - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - define-lazy-prop@2.0.0: {} define-lazy-prop@3.0.0: {} - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - defu@6.1.7: {} - - delaunator@5.1.0: - dependencies: - robust-predicates: 3.0.3 - depd@2.0.0: {} - dependency-graph@0.11.0: {} - dequal@2.0.3: {} design-book@0.6.0: @@ -12421,24 +8433,16 @@ snapshots: culori: 4.0.2 dittotones: 0.12.0 - destr@2.0.5: {} - detect-libc@2.1.2: {} detect-node-es@1.1.0: {} - devalue@5.9.2: {} - devlop@1.1.0: dependencies: dequal: 2.0.3 - diacritics@1.3.0: {} - diff@8.0.4: {} - diff@9.0.0: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -12449,44 +8453,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - dompurify@3.4.14: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -12497,8 +8463,6 @@ snapshots: dotenv@17.4.2: {} - dset@3.1.4: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -12511,19 +8475,10 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: - dependencies: - jake: 10.9.4 - electron-to-chromium@1.5.422: {} elkjs@0.11.1: {} - emmet@2.4.11: - dependencies: - '@emmetio/abbreviation': 2.3.3 - '@emmetio/css-abbreviation': 2.1.8 - emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -12544,12 +8499,6 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - entities@2.2.0: {} - - entities@3.0.1: {} - - entities@4.5.0: {} - entities@6.0.1: {} entities@7.0.1: {} @@ -12565,131 +8514,18 @@ snapshots: environment@1.1.0: {} - epub-gen-memory@1.1.2: - dependencies: - abort-controller: 3.0.0 - css-select: 4.3.0 - diacritics: 1.3.0 - dom-serializer: 1.4.1 - domhandler: 4.3.1 - domutils: 2.8.0 - ejs: 3.1.10 - htmlparser2: 7.2.0 - jszip: 3.10.1 - mime: 2.6.0 - node-fetch: 2.7.0 - ow: 0.28.2 - slugify: 1.6.9 - transitivePeerDependencies: - - encoding - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - es-abstract-get@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - is-callable: 1.2.7 - object-inspect: 1.13.4 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.4 - function.prototype.name: 1.2.0 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.2 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.11 - string.prototype.trimend: 1.0.10 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 - - es-aggregate-error@1.0.14: - dependencies: - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - function-bind: 1.1.2 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - set-function-name: 2.0.2 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@2.3.2: {} - es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - es-to-primitive@1.3.4: - dependencies: - es-abstract-get: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es-toolkit@1.52.0: {} - esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -12776,18 +8612,12 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 etag@1.8.1: {} - event-target-shim@5.0.1: {} - - eventemitter3@5.0.4: {} - eventsource-parser@3.1.1: {} eventsource@3.0.7: @@ -12848,8 +8678,6 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.2.0 - expr-eval-fork@3.0.3: {} - express-rate-limit@8.3.2(express@5.2.1(supports-color@7.2.0)): dependencies: express: 5.2.1(supports-color@7.2.0) @@ -12888,10 +8716,6 @@ snapshots: transitivePeerDependencies: - supports-color - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -12904,11 +8728,6 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: - optional: true - - fast-memoize@2.5.2: {} - fast-string-truncated-width@3.0.3: {} fast-string-width@3.0.2: @@ -12921,24 +8740,6 @@ snapshots: dependencies: fast-string-width: 3.0.2 - fast-xml-builder@1.3.1: - dependencies: - path-expression-matcher: 1.6.2 - xml-naming: 0.3.0 - - fast-xml-parser@5.11.1: - dependencies: - '@nodable/entities': 3.0.0 - fast-xml-builder: 1.3.1 - is-unsafe: 2.0.2 - path-expression-matcher: 1.6.2 - strnum: 2.4.2 - xml-naming: 0.3.0 - - fastdom@1.0.12: - dependencies: - strictdom: 1.0.1 - fastq@1.20.3: dependencies: reusify: 1.1.0 @@ -12955,12 +8756,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-uri-to-path@1.0.0: {} - - filelist@1.0.6: - dependencies: - minimatch: 5.1.9 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -12976,8 +8771,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-proc@0.1.0: {} - find-up-simple@1.0.1: {} find-up@2.1.0: @@ -12999,22 +8792,6 @@ snapshots: pkg-types: 1.3.1 yaml: 2.9.0 - flattie@1.1.1: {} - - fontace@0.4.1: - dependencies: - fontkitten: 1.0.3 - - fontkitten@1.0.3: - dependencies: - tiny-inflate: 1.0.3 - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreach@2.0.6: {} - forwarded@0.2.0: {} framer-motion@13.2.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): @@ -13175,24 +8952,8 @@ snapshots: function-timeout@1.0.2: {} - function.prototype.name@1.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - es-define-property: 1.0.1 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - hasown: 2.0.4 - is-callable: 1.2.7 - is-document.all: 1.0.0 - - functions-have-names@1.2.3: {} - fuzzysort@3.1.0: {} - generator-function@2.0.1: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -13230,20 +8991,6 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.14.3: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-tsconfig@5.0.0-beta.4: - dependencies: - resolve-pkg-maps: 1.0.0 - git-log-parser@1.2.1: dependencies: argv-formatter: 1.0.0 @@ -13259,66 +9006,18 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@13.0.6: - dependencies: - minimatch: 10.2.6 - minipass: 7.1.3 - path-scurry: 2.0.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - gopd@1.2.0: {} graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} - graphql@17.0.2: {} - - gray-matter@4.0.3: - dependencies: - js-yaml: 3.15.2 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - - h3@1.15.11: - dependencies: - cookie-es: 1.2.3 - crossws: 0.3.5 - defu: 6.1.7 - destr: 2.0.5 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.5 - radix3: 1.1.2 - ufo: 1.6.4 - uncrypto: 0.1.3 - - hachure-fill@0.5.2: {} - - has-bigints@1.1.0: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -13331,6 +9030,7 @@ snapshots: parse5: 7.3.0 vfile: 6.0.3 vfile-message: 4.0.3 + optional: true hast-util-from-parse5@8.0.3: dependencies: @@ -13341,11 +9041,7 @@ snapshots: property-information: 7.2.0 vfile: 6.0.3 vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.5 + web-namespaces: 2.0.1 hast-util-parse-selector@4.0.0: dependencies: @@ -13432,13 +9128,6 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.5 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.5 @@ -13471,21 +9160,10 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - html-escaper@3.0.3: {} - html-url-attributes@3.0.1: {} html-void-elements@3.0.0: {} - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - - http-cache-semantics@4.2.0: {} - http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -13503,13 +9181,6 @@ snapshots: - kerberos - supports-color - https-proxy-agent@7.0.6(supports-color@7.2.0): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@7.2.0) - transitivePeerDependencies: - - supports-color - https-proxy-agent@9.1.0(supports-color@7.2.0): dependencies: agent-base: 9.0.0 @@ -13525,21 +9196,14 @@ snapshots: human-signals@8.0.1: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 ignore@5.3.2: {} - image-size@2.0.2: {} - - immediate@3.0.6: {} - - immer@9.0.21: {} + image-size@2.0.2: + optional: true import-fresh@3.3.1: dependencies: @@ -13561,32 +9225,18 @@ snapshots: index-to-position@1.2.0: {} - inherits@2.0.3: {} - inherits@2.0.4: {} ini@1.3.8: {} inline-style-parser@0.2.7: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.1 - - internmap@1.0.1: {} - - internmap@2.0.3: {} - ip-address@10.1.0: {} ip-address@10.7.0: {} ipaddr.js@1.9.1: {} - iron-webcrypto@1.2.1: {} - is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -13594,78 +9244,22 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-decimal@2.0.1: {} is-docker@2.2.1: {} is-docker@3.0.0: {} - is-docker@4.0.0: {} - - is-document.all@1.0.0: - dependencies: - call-bound: 1.0.4 - - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.6.0 - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -13680,17 +9274,6 @@ snapshots: is-interactive@2.0.0: {} - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-network-error@1.3.2: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} is-obj@2.0.0: {} @@ -13703,59 +9286,18 @@ snapshots: is-promise@4.0.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - is-regexp@3.1.0: {} - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - is-stream@2.0.1: {} is-stream@3.0.0: {} is-stream@4.0.1: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.22 - is-unicode-supported@1.3.0: {} is-unicode-supported@2.1.0: {} - is-unsafe@2.0.2: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -13766,8 +9308,6 @@ snapshots: isarray@1.0.0: {} - isarray@2.0.5: {} - isexe@2.0.0: {} isexe@3.1.5: {} @@ -13780,27 +9320,14 @@ snapshots: lodash.isstring: 4.0.1 lodash.uniqby: 4.7.0 - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.6 - picocolors: 1.1.1 - java-properties@1.0.2: {} jiti@2.7.0: {} - jose@5.10.0: {} - jose@6.2.2: {} js-tokens@4.0.0: {} - js-yaml@3.15.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.3.2: dependencies: argparse: 2.0.1 @@ -13831,37 +9358,22 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - jsep@1.4.0: {} - jsesc@3.1.0: {} json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} - json-pointer@0.6.2: - dependencies: - foreach: 2.0.6 - - json-schema-traverse@0.4.1: - optional: true - json-schema-traverse@1.0.0: {} json-schema-typed@7.0.3: {} json-schema-typed@8.0.2: {} - json-schema@0.4.0: {} - json-with-bigint@3.5.10: {} json5@2.2.3: {} - jsonc-parser@2.2.1: {} - - jsonc-parser@2.3.1: {} - jsonc-parser@3.3.1: {} jsonfile@6.2.1: @@ -13870,41 +9382,15 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonpath-plus@10.4.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 - - jsonpointer@5.0.1: {} - - jszip@3.10.1: - dependencies: - lie: 3.3.0 - pako: 1.0.11 - readable-stream: 2.3.8 - setimmediate: 1.0.5 - - katex@0.16.47: - dependencies: - commander: 8.3.0 - katex@0.18.6: dependencies: commander: 15.0.0 - - khroma@2.1.0: {} - - kind-of@6.0.3: {} + optional: true kleur@3.0.3: {} kleur@4.1.5: {} - layout-base@1.0.2: {} - - layout-base@2.0.1: {} - lefthook-darwin-arm64@2.1.12: optional: true @@ -13948,14 +9434,6 @@ snapshots: lefthook-windows-arm64: 2.1.12 lefthook-windows-x64: 2.1.12 - leven@3.1.0: {} - - leven@4.1.0: {} - - lie@3.3.0: - dependencies: - immediate: 3.0.6 - lightningcss-android-arm64@1.32.0: optional: true @@ -14053,6 +9531,7 @@ snapshots: lightningcss-linux-x64-musl: 1.33.0 lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 + optional: true lines-and-columns@1.2.4: {} @@ -14079,18 +9558,12 @@ snapshots: lodash.escaperegexp@4.1.2: {} - lodash.isequal@4.5.0: {} - lodash.isplainobject@4.0.6: {} lodash.isstring@4.0.1: {} - lodash.topath@4.5.2: {} - lodash.uniqby@4.7.0: {} - lodash@4.18.1: {} - log-symbols@6.0.0: dependencies: chalk: 5.6.2 @@ -14115,8 +9588,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru_map@0.4.1: {} - lucide-react@1.45.0(react@19.3.0): dependencies: react: 19.3.0 @@ -14160,18 +9631,8 @@ snapshots: marked@15.0.12: {} - marked@16.4.2: {} - - marked@18.0.11: {} - math-intrinsics@1.1.0: {} - mdast-util-definitions@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - unist-util-visit: 5.1.0 - mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -14335,14 +9796,10 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdn-data@2.0.28: {} - mdn-data@2.27.1: {} media-typer@1.1.0: {} - medium-zoom@1.1.0: {} - meow@13.2.0: {} merge-descriptors@2.0.0: {} @@ -14351,31 +9808,6 @@ snapshots: merge2@1.4.1: {} - mermaid@11.17.2: - dependencies: - '@braintree/sanitize-url': 7.1.2 - '@iconify/utils': 3.1.4 - '@mermaid-js/parser': 1.2.1 - '@types/d3': 7.4.3 - '@upsetjs/venn.js': 2.0.0 - cytoscape: 3.34.2 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.2) - cytoscape-fcose: 2.2.0(cytoscape@3.34.2) - d3: 7.9.0 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.14 - dayjs: 1.11.23 - dompurify: 3.4.14 - es-toolkit: 1.52.0 - fastdom: 1.0.12 - katex: 0.16.47 - khroma: 2.1.0 - marked: 16.4.2 - roughjs: 4.6.6 - stylis: 4.4.0 - ts-dedent: 2.3.0 - uuid: 14.0.2 - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -14651,8 +10083,6 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@2.6.0: {} - mime@4.1.0: {} mimic-fn@2.1.0: {} @@ -14667,22 +10097,8 @@ snapshots: dependencies: brace-expansion: 5.0.9 - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.18 - - minimatch@5.1.9: - dependencies: - brace-expansion: 2.1.4 - minimist@1.2.8: {} - minipass@7.1.3: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.3 - mlly@1.8.2: dependencies: acorn: 8.18.0 @@ -14704,12 +10120,8 @@ snapshots: react: 19.3.0 react-dom: 19.3.0(react@19.3.0) - mrmime@2.0.1: {} - ms@2.1.3: {} - muggle-string@0.4.1: {} - mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -14718,14 +10130,8 @@ snapshots: nanoid@3.3.18: {} - nanoid@5.1.16: {} - - nanotar@0.3.0: {} - negotiator@1.0.0: {} - neotraverse@1.0.1: {} - nerf-dart@1.0.0: {} next-themes@0.4.6(react-dom@19.3.0(react@19.3.0))(react@19.3.0): @@ -14759,7 +10165,6 @@ snapshots: - '@babel/core' - '@types/node' - babel-plugin-macros - optional: true next@16.3.5(@babel/core@7.29.7(supports-color@7.2.0))(@playwright/test@1.61.1)(@types/node@26.5.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: @@ -14788,20 +10193,6 @@ snapshots: - '@types/node' - babel-plugin-macros - nimma@0.2.3: - dependencies: - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) - astring: 1.9.0 - jsep: 1.4.0 - optionalDependencies: - jsonpath-plus: 10.4.0 - lodash.topath: 4.5.2 - - nlcst-to-string@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 @@ -14809,31 +10200,8 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-fetch-native@1.6.7: {} - - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-gyp-build@4.8.4: {} - - node-html-parser@9.0.2: - dependencies: - css-select: 5.2.2 - entities: 8.0.0 - - node-mock-http@1.0.5: {} - node-releases@2.0.54: {} - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 @@ -14846,8 +10214,6 @@ snapshots: semver: 7.8.5 validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - normalize-url@9.0.1: {} npm-run-path@4.0.1: @@ -14867,10 +10233,6 @@ snapshots: npm@11.19.0: {} - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - nypm@0.6.9: dependencies: citty: 0.2.2 @@ -14881,29 +10243,8 @@ snapshots: object-inspect@1.13.4: {} - object-keys@1.1.1: {} - object-treeify@1.1.33: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - obug@2.1.4: {} - - ofetch@1.5.1: - dependencies: - destr: 2.0.5 - node-fetch-native: 1.6.7 - ufo: 1.6.4 - - ohash@2.0.12: {} - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -14947,12 +10288,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openapi-sampler@1.7.4: - dependencies: - '@types/json-schema': 7.0.15 - fast-xml-parser: 5.11.1 - json-pointer: 0.6.2 - ora@8.2.0: dependencies: chalk: 5.6.2 @@ -14965,23 +10300,6 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - os-paths@4.4.0: {} - - ow@0.28.2: - dependencies: - '@sindresorhus/is': 4.6.0 - callsites: 3.1.0 - dot-prop: 6.0.1 - lodash.isequal: 4.5.0 - vali-date: 1.0.0 - - own-keys@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-each-series@3.0.0: {} p-event@6.0.1: @@ -15000,10 +10318,6 @@ snapshots: dependencies: p-try: 2.2.0 - p-limit@7.3.2: - dependencies: - yocto-queue: 1.2.2 - p-locate@2.0.0: dependencies: p-limit: 1.3.0 @@ -15014,39 +10328,14 @@ snapshots: p-map@7.0.6: {} - p-queue@9.3.3: - dependencies: - eventemitter3: 5.0.4 - p-timeout: 7.0.1 - p-reduce@3.0.0: {} - p-retry@8.0.1: - dependencies: - is-network-error: 1.3.2 - p-timeout@6.1.4: {} - p-timeout@7.0.1: {} - p-try@1.0.0: {} p-try@2.2.0: {} - package-manager-detector@1.8.0: {} - - pagefind@1.5.2: - optionalDependencies: - '@pagefind/darwin-arm64': 1.5.2 - '@pagefind/darwin-x64': 1.5.2 - '@pagefind/freebsd-x64': 1.5.2 - '@pagefind/linux-arm64': 1.5.2 - '@pagefind/linux-x64': 1.5.2 - '@pagefind/windows-arm64': 1.5.2 - '@pagefind/windows-x64': 1.5.2 - - pako@1.0.11: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -15079,15 +10368,6 @@ snapshots: index-to-position: 1.2.0 type-fest: 4.41.0 - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 - parse-ms@4.0.0: {} parse5-htmlparser2-tree-adapter@6.0.1: @@ -15116,40 +10396,18 @@ snapshots: path-browserify@1.0.1: {} - path-data-parser@0.1.0: {} - path-exists@3.0.0: {} - path-expression-matcher@1.6.2: {} - path-key@3.1.1: {} path-key@4.0.0: {} - path-scurry@2.0.2: - dependencies: - lru-cache: 11.5.2 - minipass: 7.1.3 - - path-to-regexp@6.1.0: {} - - path-to-regexp@6.3.0: {} - path-to-regexp@8.4.2: {} path-type@4.0.0: {} - path@0.12.7: - dependencies: - process: 0.11.10 - util: 0.10.4 - pathe@2.0.3: {} - perfect-debounce@2.1.0: {} - - piccolore@0.1.3: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -15158,8 +10416,6 @@ snapshots: pify@3.0.0: {} - pirates@4.0.7: {} - pkce-challenge@5.0.1: {} pkg-conf@2.1.0: @@ -15193,22 +10449,6 @@ snapshots: dependencies: playwright-core: 1.63.0 - points-on-curve@0.2.0: {} - - points-on-path@0.2.1: - dependencies: - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - - pony-cause@1.1.1: {} - - possible-typed-array-names@1.1.0: {} - - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-selector-parser@7.1.6: dependencies: cssesc: 3.0.0 @@ -15230,7 +10470,8 @@ snapshots: powershell-utils@0.2.1: {} - prettier@3.9.6: {} + prettier@3.9.6: + optional: true pretty-format@27.5.1: dependencies: @@ -15242,14 +10483,8 @@ snapshots: dependencies: parse-ms: 4.0.0 - prismjs@1.30.0: {} - - process-ancestry@0.1.0: {} - process-nextick-args@2.0.1: {} - process@0.11.10: {} - prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -15275,8 +10510,6 @@ snapshots: queue-microtask@1.2.3: {} - radix3@1.1.2: {} - range-parser@1.3.0: {} raw-body@3.0.2: @@ -15318,8 +10551,6 @@ snapshots: transitivePeerDependencies: - supports-color - react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.3.0)(react@19.3.0): dependencies: react: 19.3.0 @@ -15387,8 +10618,6 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readdirp@4.1.2: {} - readdirp@5.1.1: {} recast@0.23.21: @@ -15423,21 +10652,10 @@ snapshots: recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.9 - estree-util-to-js: 2.0.0 - unified: 11.0.5 - vfile: 6.0.3 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 regex-recursion@6.0.2: dependencies: @@ -15449,15 +10667,6 @@ snapshots: dependencies: regex-utilities: 2.3.0 - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - registry-auth-token@5.1.1: dependencies: '@pnpm/npm-conf': 3.0.3 @@ -15476,12 +10685,6 @@ snapshots: transitivePeerDependencies: - supports-color - rehype-stringify@10.0.1: - dependencies: - '@types/hast': 3.0.5 - hast-util-to-html: 9.0.5 - unified: 11.0.5 - remark-gfm@4.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 @@ -15517,13 +10720,6 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - remark-smartypants@3.0.3: - dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 - unified: 11.0.5 - unist-util-visit: 5.1.0 - remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -15539,10 +10735,6 @@ snapshots: transitivePeerDependencies: - supports-color - request-light@0.5.8: {} - - request-light@0.7.0: {} - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -15553,8 +10745,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.3: {} restore-cursor@5.1.0: @@ -15562,37 +10752,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - retext-latin@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 - unified: 11.0.5 - - retext-smartypants@6.2.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.1.0 - - retext-stringify@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 - - retext@9.0.0: - dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 - reusify@1.1.0: {} - robots-parser@3.0.1: {} - - robust-predicates@3.0.3: {} - rolldown@1.2.6: dependencies: '@oxc-project/types': 0.147.0 @@ -15613,13 +10774,7 @@ snapshots: '@rolldown/binding-openharmony-arm64': 1.2.6 '@rolldown/binding-win32-arm64-msvc': 1.2.6 '@rolldown/binding-win32-x64-msvc': 1.2.6 - - roughjs@4.6.6: - dependencies: - hachure-fill: 0.5.2 - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - points-on-path: 0.2.1 + optional: true router@2.2.0(supports-color@7.2.0): dependencies: @@ -15637,31 +10792,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rw@1.3.3: {} - - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.1.2: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@1.1.1: {} - safer-buffer@2.1.2: {} satteri@0.10.5: @@ -15697,8 +10829,7 @@ snapshots: '@bruits/satteri-wasm32-wasi': 0.9.5 '@bruits/satteri-win32-arm64-msvc': 0.9.5 '@bruits/satteri-win32-x64-msvc': 0.9.5 - - sax@1.6.1: {} + optional: true saxes@6.0.0: dependencies: @@ -15710,11 +10841,6 @@ snapshots: dependencies: compute-scroll-into-view: 3.1.1 - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - semantic-release@25.0.9(supports-color@7.2.0)(typescript@7.0.2): dependencies: '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.9(supports-color@7.2.0)(typescript@7.0.2))(supports-color@7.2.0) @@ -15781,34 +10907,8 @@ snapshots: transitivePeerDependencies: - supports-color - server-destroy@1.0.1: {} - server-only@0.0.1: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - - setimmediate@1.0.5: {} - setprototypeof@1.2.0: {} shadcn@4.21.0(supports-color@7.2.0)(typescript@7.0.2): @@ -15884,6 +10984,7 @@ snapshots: '@img/sharp-win32-ia32': 0.35.4 '@img/sharp-win32-x64': 0.35.4 '@types/node': 26.5.1 + optional: true shebang-command@2.0.0: dependencies: @@ -15940,8 +11041,6 @@ snapshots: figures: 2.0.0 pkg-conf: 2.1.0 - simple-icons@13.21.0: {} - sisteransi@1.0.5: {} skin-tone@2.0.0: @@ -15953,12 +11052,8 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - slugify@1.6.9: {} - smart-buffer@4.2.0: {} - smol-toml@1.8.0: {} - socks@2.8.10: dependencies: ip-address: 10.7.0 @@ -15992,24 +11087,15 @@ snapshots: dependencies: through2: 2.0.5 - sprintf-js@1.0.3: {} - statuses@2.0.2: {} stdin-discarder@0.2.2: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - stream-combiner2@1.1.1: dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 - strictdom@1.0.1: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -16027,30 +11113,6 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string.prototype.trim@1.2.11: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - safe-regex-test: 1.1.0 - - string.prototype.trimend@1.0.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -16074,8 +11136,6 @@ snapshots: dependencies: ansi-regex: 6.3.0 - strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} strip-final-newline@2.0.0: {} @@ -16086,10 +11146,6 @@ snapshots: strip-json-comments@2.0.1: {} - strnum@2.4.2: - dependencies: - anynum: 1.0.1 - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -16105,18 +11161,6 @@ snapshots: optionalDependencies: '@babel/core': 7.29.7(supports-color@7.2.0) - stylis@4.4.0: {} - - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.17 - ts-interface-checker: 0.1.13 - super-regex@1.1.0: dependencies: function-timeout: 1.0.2 @@ -16136,16 +11180,6 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 - svgo@4.1.0: - dependencies: - commander: 11.1.0 - css-select: 6.0.0 - css-tree: 3.2.1 - css-what: 7.0.0 - csso: 5.0.5 - picocolors: 1.1.1 - sax: 1.6.1 - symbol-tree@3.2.4: {} systeminformation@5.33.8: {} @@ -16165,17 +11199,10 @@ snapshots: - csstype - preact - react + optional: true tapable@2.3.3: {} - tar@7.5.22: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 - temp-dir@3.0.0: {} tempy@3.2.0: @@ -16202,12 +11229,8 @@ snapshots: dependencies: convert-hrtime: 5.0.0 - tiny-inflate@1.0.3: {} - tiny-invariant@1.3.3: {} - tinyclip@0.1.15: {} - tinyexec@1.3.0: {} tinyexec@1.3.1: {} @@ -16233,8 +11256,6 @@ snapshots: dependencies: tldts: 7.4.10 - tr46@0.0.3: {} - tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -16245,10 +11266,6 @@ snapshots: trough@2.2.0: {} - ts-dedent@2.3.0: {} - - ts-interface-checker@0.1.13: {} - ts-morph@26.0.0: dependencies: '@ts-morph/common': 0.27.0 @@ -16260,8 +11277,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.8.1: {} tsx@4.23.13: @@ -16274,16 +11289,6 @@ snapshots: tw-animate-css@1.4.0: {} - twoslash-protocol@0.3.9: {} - - twoslash@0.3.9(supports-color@7.2.0)(typescript@6.0.3): - dependencies: - '@typescript/vfs': 1.6.4(supports-color@7.2.0)(typescript@6.0.3) - twoslash-protocol: 0.3.9 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - type-fest@1.4.0: {} type-fest@2.19.0: {} @@ -16300,47 +11305,6 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typesafe-path@0.2.2: {} - - typescript-auto-import-cache@0.3.6: - dependencies: - semver: 7.8.5 - - typescript@6.0.3: {} - typescript@7.0.2: optionalDependencies: '@typescript/typescript-aix-ppc64': 7.0.2 @@ -16389,17 +11353,6 @@ snapshots: '@biomejs/biome': 2.5.13 prettier: 3.9.6 - ultrahtml@1.7.0: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - uncrypto@0.1.3: {} - undici-types@8.10.0: {} undici-types@8.9.0: {} @@ -16428,30 +11381,14 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unifont@0.7.5: - dependencies: - css-tree: 3.2.1 - ohash: 2.0.12 - undici: 8.10.0 - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 - unist-util-modify-children@4.0.0: - dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 - unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.3 @@ -16469,10 +11406,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 @@ -16490,32 +11423,12 @@ snapshots: unpipe@1.0.0: {} - unstorage@1.17.5(@vercel/functions@3.9.5(ws@8.21.3)): - dependencies: - anymatch: 3.1.3 - chokidar: 5.0.0 - destr: 2.0.5 - h3: 1.15.11 - lru-cache: 11.5.2 - node-fetch-native: 1.6.7 - ofetch: 1.5.1 - ufo: 1.6.4 - optionalDependencies: - '@vercel/functions': 3.9.5(ws@8.21.3) - update-browserslist-db@1.3.2(browserslist@4.28.9): dependencies: browserslist: 4.28.9 escalade: 3.2.0 picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - optional: true - - urijs@1.19.11: {} - url-join@5.0.0: {} use-callback-ref@1.3.3(@types/react@19.3.0)(react@19.3.0): @@ -16539,16 +11452,6 @@ snapshots: util-deprecate@1.0.2: {} - util@0.10.4: - dependencies: - inherits: 2.0.3 - - utility-types@3.11.0: {} - - uuid@14.0.2: {} - - vali-date@1.0.0: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -16587,118 +11490,7 @@ snapshots: jiti: 2.7.0 tsx: 4.23.13 yaml: 2.9.0 - - vitefu@1.1.3(vite@8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0)): - optionalDependencies: - vite: 8.2.2(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.0) - - volar-service-css@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): - dependencies: - vscode-css-languageservice: 6.3.10 - vscode-languageserver-textdocument: 1.0.14 - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - - volar-service-emmet@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): - dependencies: - '@emmetio/css-parser': 0.4.1 - '@emmetio/html-matcher': 1.3.0 - '@vscode/emmet-helper': 2.11.0 - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - - volar-service-html@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): - dependencies: - vscode-html-languageservice: 5.6.2 - vscode-languageserver-textdocument: 1.0.14 - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - - volar-service-prettier@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(prettier@3.9.6): - dependencies: - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - prettier: 3.9.6 - - volar-service-typescript-twoslash-queries@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3): - dependencies: - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - typescript: 6.0.3 - - volar-service-typescript@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3): - dependencies: - path-browserify: 1.0.1 - semver: 7.8.5 - typescript-auto-import-cache: 0.3.6 - vscode-languageserver-textdocument: 1.0.14 - vscode-nls: 5.2.0 - vscode-uri: 3.2.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - typescript: 6.0.3 - - volar-service-yaml@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): - dependencies: - vscode-uri: 3.2.0 - yaml-language-server: 1.23.0 - optionalDependencies: - '@volar/language-service': 2.4.28(typescript@6.0.3) - - vscode-css-languageservice@6.3.10: - dependencies: - '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.14 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.2.0 - - vscode-html-languageservice@5.6.2: - dependencies: - '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.14 - vscode-languageserver-types: 3.18.3 - vscode-uri: 3.2.0 - - vscode-json-languageservice@4.1.8: - dependencies: - jsonc-parser: 3.3.1 - vscode-languageserver-textdocument: 1.0.14 - vscode-languageserver-types: 3.18.3 - vscode-nls: 5.2.0 - vscode-uri: 3.2.0 - - vscode-jsonrpc@8.2.0: {} - - vscode-jsonrpc@9.0.2: {} - - vscode-languageserver-protocol@3.17.5: - dependencies: - vscode-jsonrpc: 8.2.0 - vscode-languageserver-types: 3.17.5 - - vscode-languageserver-protocol@3.18.3: - dependencies: - vscode-jsonrpc: 9.0.2 - vscode-languageserver-types: 3.18.3 - - vscode-languageserver-textdocument@1.0.14: {} - - vscode-languageserver-types@3.17.5: {} - - vscode-languageserver-types@3.18.3: {} - - vscode-languageserver@9.0.1: - dependencies: - vscode-languageserver-protocol: 3.17.5 - - vscode-nls@5.2.0: {} - - vscode-uri@3.2.0: {} + optional: true w3c-xmlserializer@5.0.0: dependencies: @@ -16708,8 +11500,6 @@ snapshots: web-worker@1.5.0: {} - webidl-conversions@3.0.1: {} - webidl-conversions@8.0.1: {} whatwg-mimetype@5.0.0: {} @@ -16730,54 +11520,8 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.2.0 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.22 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - which-command@0.1.0: {} - which-typed-array@1.1.22: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -16805,10 +11549,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@8.0.0: - dependencies: - signal-exit: 4.1.0 - ws@8.21.3: optional: true @@ -16817,48 +11557,16 @@ snapshots: is-wsl: 3.1.1 powershell-utils: 0.1.0 - xdg-app-paths@5.5.1: - dependencies: - os-paths: 4.4.0 - xdg-portable: 7.3.0 - - xdg-portable@7.3.0: - dependencies: - os-paths: 4.4.0 - xml-name-validator@5.0.0: {} - xml-naming@0.3.0: {} - xmlchars@2.2.0: {} xtend@4.0.2: {} - xxhash-wasm@1.1.0: {} - y18n@5.0.8: {} yallist@3.1.1: {} - yallist@5.0.0: {} - - yaml-language-server@1.23.0: - dependencies: - '@vscode/l10n': 0.0.18 - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-i18n: 4.2.0(ajv@8.20.0) - prettier: 3.9.6 - request-light: 0.5.8 - vscode-json-languageservice: 4.1.8 - vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.14 - vscode-languageserver-types: 3.18.3 - vscode-uri: 3.2.0 - yaml: 2.8.3 - - yaml@2.8.3: {} - yaml@2.9.0: {} yargs-parser@20.2.9: {} @@ -16884,8 +11592,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 22.0.0 - yocto-queue@1.2.2: {} - yocto-spinner@1.2.2: dependencies: yoctocolors: 2.2.0 @@ -16960,14 +11666,8 @@ snapshots: dependencies: zod: 3.25.76 - zod-to-json-schema@3.25.2(zod@4.6.2): - dependencies: - zod: 4.6.2 - zod@3.25.76: {} - zod@4.1.11: {} - zod@4.6.2: {} zwitch@2.0.4: {}