From 7d46e1ab68f61a85c9778e3d5e200e3d77991e9a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 18:35:36 +0000 Subject: [PATCH 01/36] Add structured-output plan docs to branch --- ts/docs/plans/structured-output/PLAN.md | 402 ++++++++++++++++++++++ ts/docs/plans/structured-output/STATUS.md | 76 ++++ 2 files changed, 478 insertions(+) create mode 100644 ts/docs/plans/structured-output/PLAN.md create mode 100644 ts/docs/plans/structured-output/STATUS.md diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md new file mode 100644 index 000000000..5db63fafc --- /dev/null +++ b/ts/docs/plans/structured-output/PLAN.md @@ -0,0 +1,402 @@ +# Structured Agent Output — Top-Level Plan + +Status: Draft. This document is the single source of truth for the +"agents supply structured output that clients render richly" effort. +Progress tracking lives in [STATUS.md](./STATUS.md). + +## Motivation + +Agents that produce list- or record-shaped results today **fetch +structured data and then throw the structure away**. The clearest +example is the `github-cli` agent: `prList` runs +`gh pr list --json number,title,state,url,createdAt,headRefName,isDraft`, +`JSON.parse`s the result, and then flattens it back into a single +markdown bullet string in `formatListResults()`: + +``` +- [#2644 Add benchmarks…](https://…) — DRAFT dev/georgeng/benchmark_contextselector +- [#2629 Fix NFA compilation…](https://…) — OPEN dev/georgeng/fix_nfa_with_subrules +``` + +In a narrow chat column this renders as a cramped, hard-to-scan list: +the status (`DRAFT`/`OPEN`) is inline plain text and the branch name +wraps into the title. The agent *had* clean typed fields (number, +title, state, url, branch, isDraft, createdAt) and discarded all of +them. + +The structure is lost for **every** downstream consumer, not just the +UI: + +- **Rich UIs** (Electron shell, VS Code) could render a real table with + a clickable id column and a colored status badge — but only receive a + markdown string. +- **Programmatic consumers** ("or otherwise" clients — MCP / Claude + Code, the copilot plugin, the `taskflow` script API) have to + *re-parse* the flattened text. `taskFlowScriptApi.mts` already does + exactly this: `extractText(result)` followed by `tryParseJson(text)`. + +This effort gives agents a first-class way to emit **structured output** +— a typed, semantic representation of the result — that each client +renders (or consumes) at the highest fidelity it supports, while +unknowing clients fall back automatically. + +## TL;DR + +Add a first-class **structured content** type to the agent SDK: an +ordered **document of typed blocks** (heading, text/markdown, **table**, +list, card, key-value, **image**, code, divider) plus an optional +machine-readable **`rawData`** payload. It is added to the existing +`DisplayContent` union so it rides the current display plumbing with no +new transport. Rich clients (`chat-ui`, shared by the Electron shell + +VS Code webview + Chrome extension; and the VS Code chat participant) +render blocks natively; every other client falls back to an +SDK-derived markdown/text representation. Tables are **interactive by +default** (client may sort/filter unless the agent marks them +`readonly`). `github-cli`'s PR/issue lists are the first adopter. + +This is deliberately **A + C together**: + +- **A — semantic view-model**: typed presentation blocks a generic + renderer can turn into rich UI for *all* agents. +- **C — hybrid**: the view-model travels alongside optional raw data, so + programmatic clients get typed objects and UIs get rich rendering, + with the existing `displayContent` text as the universal fallback. + +## Goals + +- One structured representation, authored once by an agent, consumed by + many clients at different fidelities (rich table → markdown table → + plain text). +- Fix the `github-cli` list rendering as the first concrete adopter. +- Make **media a first-class block**, not smuggled `` HTML. +- Let a single result **bundle** a table + prose + media in one payload + (one history entry, one memory row, one MCP payload). +- Carry **machine-readable `rawData`** so non-UI clients stop + re-parsing flattened text. +- Let the agent declare **interactivity affordances** (sortable / + filterable / readonly) on the structure itself. +- No new transport: reuse the existing `DisplayContent` / + `appendDisplay` / `DisplayLog` / replay / RPC path. + +## Non-goals (v1) + +- Charts / graphs / arbitrary custom widgets — continue to use the + existing `iframe` display type as an escape hatch. +- Row-click-triggers-action interactivity (selecting a PR row to merge + it). The type model reserves fields for it (`cell.href`, a future + `block.action`) but no client wires it up in v1. +- Rich tables in the CLI — the CLI gets the text fallback. +- JSON Schema *validation* of `rawData` (the field is carried, not + enforced). +- Migrating other list-shaped agents (`list`, `calendar`, `email`, + `search`). They can adopt the same primitives later; `github-cli` is + the reference adopter. + +## Background — how display works today + +- **`DisplayContent`** (`packages/agentSdk/src/display.ts`) is + `MessageContent | TypedDisplayContent`, where + `MessageContent = string | string[] | string[][]`. Note `string[][]` + is already a rudimentary **table**. +- **`TypedDisplayContent`** carries `type: "markdown" | "html" | "iframe" + | "text"`, an optional `kind`, `speak`, and **`alternates`** — a list + of alternate representations of the *same* content that clients pick + from via `getContentForType()` + (`packages/agentSdk/src/helpers/displayHelpers.ts`). This is the seed + of the "each client picks the best format" idea we generalize. +- **`ActionResultSuccess.displayContent`** (`packages/agentSdk/src/action.ts`) + is exactly **one** `DisplayContent`. `entities` / `resultEntity` exist + but are for memory / follow-up resolution, **not** display. +- **Renderers**: + - `packages/chat-ui/src/setContent.ts` — the shared rich HTML renderer + for the **Electron shell**, the **vscode-shell webview**, and the + **Chrome extension** (all import `chat-ui`). Already renders + `string[][]` as ``. Its `processContent` + `switch` **throws on an unknown `type`** — important for the safety + net below. + - `packages/vscode-chat/src/displayRender.ts` — the **VS Code chat + participant** (the Copilot chat stream). Markdown / text only; has + `tableToMarkdown` / `tableToHtml`. Cannot be interactive. + - `packages/cli/src/enhancedConsole.ts` — CLI/terminal. + - `packages/commandExecutor/src/commandServer.ts` — the MCP server for + Claude Code. Flattens content to plain text; does **not** use MCP + `structuredContent` / `outputSchema` today (greenfield). + - `packages/copilot-plugin/src/shared/message-formatter.ts` — HTML → + plain text. +- **Transport / persistence**: agents call + `actionIO.appendDisplay(content, mode)` /`setDisplay(content)`; the + dispatcher's `emitActionResult()` + (`packages/dispatcher/dispatcher/src/execute/actionHandlers.ts`) + forwards `result.displayContent`. Each call becomes a **separate** + `DisplayLog` entry (`packages/dispatcher/dispatcher/src/displayLog.ts`) + → separate `IAgentMessage` → separate history/replay record. The RPC + layer (`packages/agentRpc/src/types.ts`) carries `DisplayContent` as + JSON. Because everything is JSON, a new `DisplayContent` variant + persists and replays for free. + +### Why not just N `appendDisplay` calls? + +An agent can already *visually* stack a table then an image by making +two `appendDisplay(..., "block")` calls (the `chat` agent does this). +But those are **N independent records** — N history entries, N memory +rows, no single machine-readable payload, and ordering across async +appends can race. Bundling heterogeneous typed blocks into **one** +`displayContent` is a primary reason to model structured output as a +*document of blocks*. `appendDisplay` remains for the genuinely +streaming case (transient status → then the bundled result). + +## Design + +### The block-document model + +Structured content is an ordered array of typed **blocks**. A result +that is "just a table" is a one-block document; a result that mixes a +heading, a table, a note, and a thumbnail is a four-block document. + +```typescript +// packages/agentSdk/src/display.ts (additions) + +export type BadgeTone = + | "neutral" | "info" | "success" | "warning" | "error"; + +export type TableCellType = + | "text" | "link" | "badge" | "number" | "date" | "code"; + +export interface TableColumn { + id: string; + header: string; + type?: TableCellType; // default "text" + align?: "left" | "right" | "center"; + sortable?: boolean; // per-column override of table.sortable +} + +export type TableCell = + | string + | number + | { + text: string; + href?: string; // link target (type "link", or any cell) + badge?: BadgeTone; // badge tone (type "badge") + tooltip?: string; + }; + +export interface TableBlock { + kind: "table"; + columns: TableColumn[]; + rows: TableCell[][]; + caption?: string; + // Affordances — interactive by default. + sortable?: boolean; // default: true + filterable?: boolean; // default: false + readonly?: boolean; // lock order + content exactly as sent +} + +export interface HeadingBlock { kind: "heading"; text: string; level?: 1 | 2 | 3; } +export interface TextBlock { kind: "text"; text: MessageContent; format?: "text" | "markdown"; } +export interface ListItem { text: string; href?: string; subtitle?: string; badges?: BadgeTone[]; } +export interface ListBlock { kind: "list"; ordered?: boolean; items: ListItem[]; } +export interface KeyValuePair { label: string; value: TableCell; } +export interface KeyValueBlock { kind: "keyValue"; pairs: KeyValuePair[]; } +export interface CardBlock { kind: "card"; title?: string; subtitle?: string; fields?: KeyValuePair[]; href?: string; } +export interface ImageBlock { kind: "image"; src: string; alt?: string; caption?: string; width?: number; height?: number; } +export interface CodeBlock { kind: "code"; code: string; language?: string; } +export interface DividerBlock { kind: "divider"; } + +export type StructuredBlock = + | HeadingBlock | TextBlock | TableBlock | ListBlock + | KeyValueBlock | CardBlock | ImageBlock | CodeBlock | DividerBlock; + +export interface StructuredContent { + type: "structured"; + blocks: StructuredBlock[]; + rawData?: unknown; // machine-readable payload (C) + dataSchema?: unknown; // optional JSON Schema for rawData + kind?: DisplayMessageKind; + speak?: boolean; + // SDK auto-derives a markdown/text alternate so unknowing clients degrade. + alternates?: Array<{ type: DisplayType; content: MessageContent }>; +} + +export type DisplayContent = + | MessageContent + | TypedDisplayContent + | StructuredContent; // <- new +``` + +### Affordances — interactive by default + +Tables are `sortable` by default; a client that can sort *may* offer it. +The agent opts **out** with `readonly: true` when order or content is +semantically meaningful (e.g. a ranked "top 5"), or refines with +per-column `sortable`. `readonly` is a hard instruction: the client +must preserve rows exactly as sent. (We rejected `readonly`-by-default +as too restrictive.) Interactivity is a client capability — the VS Code +chat participant renders a static table regardless, which is exactly why +affordances are **declarative hints** the client honors when able. + +### Machine-readable `rawData` + +`rawData` carries the agent's real domain objects (for `github-cli`, the +`JSON.parse(output)` array it already has). `dataSchema` optionally +describes it. This is the "or otherwise" channel: MCP forwards it as +`structuredContent`; `taskflow` can read it directly. + +**Source-of-truth guidance**: provide a `fromRecords(objects, +columnSpec)` SDK helper that builds a `TableBlock` *and* stashes the +objects as `rawData` in one call, so an adopter can't let the table and +the data drift. + +### Fallback derivation + +The SDK derives a markdown (and plain-text) representation from `blocks` +and attaches it as an `alternate`. Any client that doesn't understand +`type: "structured"` calls the existing `getContentForType(content, +"markdown" | "text")` and renders the derived string. `historyText` +(memory) and TTS use the same derivation. + +### Plumbing decision — extend `DisplayContent` + +Add `StructuredContent` to the `DisplayContent` union rather than adding +a sibling field to `ActionResult`. Rationale: it rides +`emitActionResult` → `actionIO.appendDisplay(displayContent, "block")` +→ `DisplayLog` → RPC → replay with **zero** new transport, mirroring how +`alternates` already work. The cost is that renderers currently `switch` +on `type` and throw on unknown — so a one-time safety pass (Phase 2) +must teach every renderer to recognize `"structured"` and fall back +before rich rendering lands. + +## Client topology + +| Renderer | Clients it powers | v1 role | +| --- | --- | --- | +| `chat-ui` `setContent.ts` | Electron shell, vscode-shell webview, Chrome extension | Rich block rendering + interactivity | +| `vscode-chat` `displayRender.ts` | VS Code Copilot chat participant | Static markdown blocks (tables, images, cards) | +| `cli` `enhancedConsole.ts` | CLI / interactiveApp | Text fallback | +| `commandExecutor` `commandServer.ts` | MCP / Claude Code | Text fallback (+ `rawData` → `structuredContent`, Phase 6) | +| `copilot-plugin` `message-formatter.ts` | Copilot plugin | Text fallback | + +Implementing rich rendering in `chat-ui` covers three clients at once. + +## Phased plan + +### Phase 1 — SDK foundation *(blocks everything)* + +- Add the types above to `packages/agentSdk/src/display.ts`. +- Add builder helpers + fallback derivation in + `packages/agentSdk/src/helpers/displayHelpers.ts` and + `helpers/actionHelpers.ts`: `createStructuredResult(blocks, { rawData })`, + `createTable(...)`, `fromRecords(objects, columnSpec)`, + `structuredToMarkdown(blocks)` / `structuredToText(blocks)`, + `getStructuredFallback(content)`. +- Export new types/helpers from `packages/agentSdk/src/index.ts`. +- Unit tests for derivation (blocks → markdown/text) and builders. + +### Phase 2 — Renderer safety net *(after 1; parallel per client)* + +Teach each renderer to detect `type: "structured"` and render the +derived fallback (no throw, no regression): +`packages/chat-ui/src/setContent.ts`, +`packages/vscode-chat/src/displayRender.ts`, +`packages/cli/src/enhancedConsole.ts`, +`packages/commandExecutor/src/commandServer.ts`, +`packages/copilot-plugin/src/shared/message-formatter.ts`. + +### Phase 3 — Rich rendering *(after 1; 3a/3b parallel)* + +- **3a** `packages/chat-ui/src/setContent.ts`: render blocks → HTML + (typed table with link/badge/date cells, image block, card / list / + keyValue). Styles in `packages/chat-ui/styles/chat.css`, extending the + existing `.table-message` and adding badge / cell / image classes. + Covers shell + vscode-shell webview + extension. +- **3b** `packages/vscode-chat/src/displayRender.ts`: render blocks → + markdown (reuse `tableToMarkdown`, markdown images, card sections). + Static. + +### Phase 4 — Interactivity *(after 3a)* + +Client-side sort / filter on `TableBlock` in `chat-ui`, honoring +`readonly` / `sortable` / `filterable`. chat-ui clients only. + +### Phase 5 — First adopter: `github-cli` *(after 1; visually validated by 3)* + +Rewrite `formatListResults` and the list/view actions in +`packages/agents/github-cli/src/github-cliActionHandler.ts` — `prList`, +`issueList`, `myPullRequests`, `searchRepos`, `dependabotAlerts`, +contributors, and `repoView` (→ keyValue) — to emit `StructuredContent` ++ `rawData` via `fromRecords`. The SDK-derived markdown fallback must +match or beat today's output. Update the handler unit tests. + +Example — the `prList` table: an `#id` **link** column → `url`, a +**text** title column, a **badge** state column (`DRAFT`/`OPEN` colored +by tone), a **code** branch column; `sortable: true`. + +### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* + +- `packages/commandExecutor/src/commandServer.ts` forwards `rawData` as + MCP `structuredContent` (and optionally `outputSchema` from + `dataSchema`). +- Optionally update `packages/agents/taskflow/src/script/taskFlowScriptApi.mts` + to read `rawData` directly, dropping the `extractText` + `tryParseJson` + workaround. + +## Verification + +- `pnpm --filter agent-sdk test` + `pnpm run build agent-sdk` — + derivation + builder unit tests. +- `pnpm run build chat-ui` + chat-ui renderer tests; shell Playwright + (`packages/shell/test`) asserts a real `
` renders from a + structured result. +- `vscode-chat` `displayRender` tests for table / image / card markdown. +- `pnpm --filter github-cli test`; **manual**: run + `gh pr list --state open` in the Electron shell and in VS Code and + confirm a clean typed table. +- Pipe a structured result through the CLI / MCP and confirm a readable + text table (fallback path). + +## Decisions (locked) + +- **Shape**: A + C in one go — semantic view-model **and** raw data, + with derived text as the universal fallback. +- **Model**: composite **block document** so one result can bundle a + table + prose + media atomically. +- **Affordances**: interactive by default; `readonly` is opt-in. +- **Media**: first-class `image` block (URL or dataURI). +- **Plumbing**: extend the `DisplayContent` union — no new `ActionResult` + field, no new transport. +- **Priority clients**: Electron shell + VS Code (both the webview and + the chat participant). CLI / MCP / copilot get the fallback in v1. + +## Further considerations / open questions + +1. **`rawData` source-of-truth** — resolved in favor of a `fromRecords` + helper that emits the table and stashes `rawData` together, but agents + may still author blocks and `rawData` separately when needed. +2. **Image source policy** — URL or dataURI; the agent is responsible for + rehydrating file paths (as the `chat` agent does today). DOMPurify in + `setContent.ts` already permits `img` + data URIs. +3. **Forward-compat for interactivity** — include `cell.href` and reserve + a `block.action` field now so v2 row-actions don't require a schema + break. +4. **Naming** — `StructuredContent` / `type: "structured"` vs + `RichContent` / `"rich"`. Current lean: `structured`. + +## Key files + +| Area | Path | +| --- | --- | +| SDK display types | `packages/agentSdk/src/display.ts` | +| SDK action result | `packages/agentSdk/src/action.ts` | +| SDK display helpers | `packages/agentSdk/src/helpers/displayHelpers.ts` | +| SDK action helpers | `packages/agentSdk/src/helpers/actionHelpers.ts` | +| SDK exports | `packages/agentSdk/src/index.ts` | +| Rich renderer (shell/webview/ext) | `packages/chat-ui/src/setContent.ts` | +| Rich renderer styles | `packages/chat-ui/styles/chat.css` | +| VS Code chat participant renderer | `packages/vscode-chat/src/displayRender.ts` | +| CLI renderer | `packages/cli/src/enhancedConsole.ts` | +| MCP server | `packages/commandExecutor/src/commandServer.ts` | +| Copilot formatter | `packages/copilot-plugin/src/shared/message-formatter.ts` | +| Dispatcher emit | `packages/dispatcher/dispatcher/src/execute/actionHandlers.ts` | +| Display log | `packages/dispatcher/dispatcher/src/displayLog.ts` | +| RPC transport | `packages/agentRpc/src/types.ts` | +| First adopter | `packages/agents/github-cli/src/github-cliActionHandler.ts` | +| Taskflow consumer | `packages/agents/taskflow/src/script/taskFlowScriptApi.mts` | diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md new file mode 100644 index 000000000..9a46b80a4 --- /dev/null +++ b/ts/docs/plans/structured-output/STATUS.md @@ -0,0 +1,76 @@ +# Structured Agent Output — Status & Backlog + +Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a +phase item is started, completed, or a follow-up surfaces. Keep entries +terse — one line per item where possible. + +_Last updated: 2026-07-11 — plan drafted, not yet started._ + +## Progress by phase + +### Phase 1 — SDK foundation *(blocks everything)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 1a | `StructuredContent` + block types in `agentSdk/src/display.ts` | todo | +| 1b | Builders: `createStructuredResult`, `createTable`, `fromRecords` | todo | +| 1c | Fallback derivation: `structuredToMarkdown` / `structuredToText` / `getStructuredFallback` | todo | +| 1d | Exports from `agentSdk/src/index.ts` | todo | +| 1e | Unit tests (derivation + builders) | todo | + +### Phase 2 — Renderer safety net *(after 1)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 2a | `chat-ui/setContent.ts` — detect `"structured"`, use fallback (no throw) | todo | +| 2b | `vscode-chat/displayRender.ts` — fallback | todo | +| 2c | `cli/enhancedConsole.ts` — fallback | todo | +| 2d | `commandExecutor/commandServer.ts` — fallback | todo | +| 2e | `copilot-plugin/message-formatter.ts` — fallback | todo | + +### Phase 3 — Rich rendering *(after 1)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 3a | `chat-ui/setContent.ts` blocks → HTML (table/badge/link/image/card/list/keyValue) + `chat.css` | todo | +| 3b | `vscode-chat/displayRender.ts` blocks → markdown | todo | + +### Phase 4 — Interactivity *(after 3a)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | todo | + +### Phase 5 — First adopter: github-cli *(after 1)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 5a | `prList` / `issueList` / `myPullRequests` / `searchRepos` → table blocks + rawData | todo | +| 5b | `dependabotAlerts` + contributors → table blocks | todo | +| 5c | `repoView` → keyValue block | todo | +| 5d | Update handler unit tests | todo | + +### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* + +| Item | Description | Status | +| ---- | ----------- | ------ | +| 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | todo | +| 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | todo | + +## Open questions + +| # | Question | Resolution | +| - | -------- | ---------- | +| 1 | `rawData` source-of-truth | Lean: `fromRecords` helper emits table + rawData together | +| 2 | Image source policy | Lean: URL / dataURI; agent rehydrates file paths | +| 3 | Forward-compat for row-actions | Lean: reserve `cell.href` + `block.action` now | +| 4 | Naming: `structured` vs `rich` | Lean: `structured` | + +## Notes + +- `chat-ui/setContent.ts` is shared by Electron shell + vscode-shell + webview + Chrome extension — one rich renderer, three clients. +- `vscode-chat` (chat participant) is a separate renderer and cannot be + interactive (it emits into the Copilot chat stream). +- `commandExecutor` does not use MCP `structuredContent` today — Phase 6 + is greenfield. From 6b034528d5feb27a5d2343483a2a5d3158a08a85 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 19:24:13 +0000 Subject: [PATCH 02/36] Implement Phase 1 SDK foundation for structured output --- ts/docs/plans/structured-output/STATUS.md | 12 +- ts/packages/agentSdk/jest.config.cjs | 6 + ts/packages/agentSdk/package.json | 5 +- ts/packages/agentSdk/src/display.ts | 143 ++++++- .../agentSdk/src/helpers/actionHelpers.ts | 39 +- .../agentSdk/src/helpers/displayHelpers.ts | 362 ++++++++++++++++++ ts/packages/agentSdk/src/index.ts | 17 + .../agentSdk/test/structuredContent.spec.ts | 280 ++++++++++++++ ts/packages/agentSdk/test/tsconfig.json | 14 + ts/packages/agentSdk/tsconfig.json | 2 +- 10 files changed, 870 insertions(+), 10 deletions(-) create mode 100644 ts/packages/agentSdk/jest.config.cjs create mode 100644 ts/packages/agentSdk/test/structuredContent.spec.ts create mode 100644 ts/packages/agentSdk/test/tsconfig.json diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 9a46b80a4..031c63ad9 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-11 — plan drafted, not yet started._ +_Last updated: 2026-07-11 — Phase 1 (SDK foundation) implemented._ ## Progress by phase @@ -12,11 +12,11 @@ _Last updated: 2026-07-11 — plan drafted, not yet started._ | Item | Description | Status | | ---- | ----------- | ------ | -| 1a | `StructuredContent` + block types in `agentSdk/src/display.ts` | todo | -| 1b | Builders: `createStructuredResult`, `createTable`, `fromRecords` | todo | -| 1c | Fallback derivation: `structuredToMarkdown` / `structuredToText` / `getStructuredFallback` | todo | -| 1d | Exports from `agentSdk/src/index.ts` | todo | -| 1e | Unit tests (derivation + builders) | todo | +| 1a | `StructuredContent` + block types in `agentSdk/src/display.ts` | done | +| 1b | Builders: `createStructuredResult`, `createTable`, `fromRecords` | done | +| 1c | Fallback derivation: `structuredToMarkdown` / `structuredToText` / `getStructuredFallback` | done | +| 1d | Exports from `agentSdk/src/index.ts` | done | +| 1e | Unit tests (derivation + builders) | done | ### Phase 2 — Renderer safety net *(after 1)* diff --git a/ts/packages/agentSdk/jest.config.cjs b/ts/packages/agentSdk/jest.config.cjs new file mode 100644 index 000000000..4560001c3 --- /dev/null +++ b/ts/packages/agentSdk/jest.config.cjs @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +module.exports = { + ...require("../../jest.config.js"), +}; diff --git a/ts/packages/agentSdk/package.json b/ts/packages/agentSdk/package.json index 2177711c1..a439d7e1b 100644 --- a/ts/packages/agentSdk/package.json +++ b/ts/packages/agentSdk/package.json @@ -24,7 +24,10 @@ "clean": "rimraf --glob dist *.tsbuildinfo *.done.build.log", "prettier": "prettier --check . --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --ignore-path ../../.prettierignore", - "tsc": "tsc -b" + "tsc": "tsc -b", + "test": "npm run test:local", + "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", + "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js" }, "dependencies": { "@typeagent/common-utils": "workspace:*", diff --git a/ts/packages/agentSdk/src/display.ts b/ts/packages/agentSdk/src/display.ts index 5228dfa2a..71a77f770 100644 --- a/ts/packages/agentSdk/src/display.ts +++ b/ts/packages/agentSdk/src/display.ts @@ -30,9 +30,150 @@ export interface TypedDisplayContent { alternates?: Array<{ type: DisplayType; content: MessageContent }>; } +// --------------------------------------------------------------------------- +// Structured content — a document of typed blocks (see +// docs/plans/structured-output/PLAN.md). Agents author a semantic view-model +// once; each client renders it at the highest fidelity it supports and falls +// back to the SDK-derived markdown/text `alternates` otherwise. +// --------------------------------------------------------------------------- + +// Tone for a badge cell / list badge. Clients map these to colors. +export type BadgeTone = "neutral" | "info" | "success" | "warning" | "error"; + +// Semantic type of a table cell. Controls how a rich client renders it. +export type TableCellType = + | "text" + | "link" + | "badge" + | "number" + | "date" + | "code"; + +export interface TableColumn { + id: string; + header: string; + type?: TableCellType; // default "text" + align?: "left" | "right" | "center"; + sortable?: boolean; // per-column override of table.sortable +} + +// A table cell is either a bare scalar (rendered per the column type) or a +// rich object carrying a link target, badge tone, and/or tooltip. +export type TableCell = + | string + | number + | { + text: string; + href?: string; // link target (cell type "link", or any cell) + badge?: BadgeTone; // badge tone (cell type "badge") + tooltip?: string; + }; + +export interface TableBlock { + kind: "table"; + columns: TableColumn[]; + rows: TableCell[][]; + caption?: string; + // Affordances — interactive by default. + sortable?: boolean; // default: true + filterable?: boolean; // default: false + readonly?: boolean; // lock order + content exactly as sent + // Reserved for v2 row-actions (open question #3). Carried, not wired up. + action?: unknown; +} + +export interface HeadingBlock { + kind: "heading"; + text: string; + level?: 1 | 2 | 3; +} + +export interface TextBlock { + kind: "text"; + text: MessageContent; + format?: "text" | "markdown"; // default "markdown" +} + +export interface ListItem { + text: string; + href?: string; + subtitle?: string; + badges?: BadgeTone[]; +} + +export interface ListBlock { + kind: "list"; + ordered?: boolean; + items: ListItem[]; +} + +export interface KeyValuePair { + label: string; + value: TableCell; +} + +export interface KeyValueBlock { + kind: "keyValue"; + pairs: KeyValuePair[]; +} + +export interface CardBlock { + kind: "card"; + title?: string; + subtitle?: string; + fields?: KeyValuePair[]; + href?: string; +} + +export interface ImageBlock { + kind: "image"; + src: string; // URL or dataURI; the agent rehydrates file paths + alt?: string; + caption?: string; + width?: number; + height?: number; +} + +export interface CodeBlock { + kind: "code"; + code: string; + language?: string; +} + +export interface DividerBlock { + kind: "divider"; +} + +export type StructuredBlock = + | HeadingBlock + | TextBlock + | TableBlock + | ListBlock + | KeyValueBlock + | CardBlock + | ImageBlock + | CodeBlock + | DividerBlock; + +// An ordered document of typed blocks plus an optional machine-readable +// `rawData` payload. Added to the DisplayContent union so it rides the +// existing display plumbing with no new transport. +export interface StructuredContent { + type: "structured"; + blocks: StructuredBlock[]; + rawData?: unknown; // machine-readable payload ("or otherwise" clients) + dataSchema?: unknown; // optional JSON Schema describing rawData (carried, not enforced) + kind?: DisplayMessageKind; + speak?: boolean; + // The SDK auto-derives a markdown/text alternate so clients that don't + // understand `type: "structured"` degrade gracefully via getContentForType. + alternates?: Array<{ type: DisplayType; content: MessageContent }>; +} + export type DisplayContent = | MessageContent // each string in the MessageContent is treated as DisplayType "text" - | TypedDisplayContent; + | TypedDisplayContent + | StructuredContent; // Optional message kind for client specific styling export type DisplayMessageKind = diff --git a/ts/packages/agentSdk/src/helpers/actionHelpers.ts b/ts/packages/agentSdk/src/helpers/actionHelpers.ts index 9b0afe78b..1eee99705 100644 --- a/ts/packages/agentSdk/src/helpers/actionHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/actionHelpers.ts @@ -8,8 +8,12 @@ import { ActionResultSuccessNoDisplay, } from "../action.js"; import { ActionContext } from "../agentInterface.js"; -import { DisplayMessageKind } from "../display.js"; +import { DisplayMessageKind, StructuredBlock } from "../display.js"; import { Entity } from "../memory.js"; +import { + createStructuredContent, + structuredToText, +} from "./displayHelpers.js"; import { ChoiceManager, PickRememberResponse } from "./choiceManager.js"; export { ChoiceManager }; @@ -227,6 +231,39 @@ export function createActionResultFromError(error: string): ActionResultError { }; } +/** + * Create an ActionResultSuccess whose display is a structured block document. + * The SDK derives markdown/text `alternates` (for clients that don't + * understand `type: "structured"`) and, unless overridden, a plain-text + * `historyText` for memory/TTS. `rawData` carries the machine-readable payload + * for "or otherwise" (non-UI) clients. + */ +export function createStructuredResult( + blocks: StructuredBlock[], + options?: { + rawData?: unknown; + dataSchema?: unknown; + kind?: DisplayMessageKind; + speak?: boolean; + historyText?: string; + entities?: Entity[]; + resultEntity?: Entity; + }, +): ActionResultSuccess { + const displayContent = createStructuredContent(blocks, { + rawData: options?.rawData, + dataSchema: options?.dataSchema, + kind: options?.kind, + speak: options?.speak, + }); + return { + historyText: options?.historyText ?? structuredToText(blocks), + entities: options?.entities ?? [], + resultEntity: options?.resultEntity, + displayContent, + }; +} + function entitiesToString(entities: Entity[], indent = ""): string { // entities in the format "name (type1, type2)" return entities diff --git a/ts/packages/agentSdk/src/helpers/displayHelpers.ts b/ts/packages/agentSdk/src/helpers/displayHelpers.ts index b84f86df2..6eb94993c 100644 --- a/ts/packages/agentSdk/src/helpers/displayHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/displayHelpers.ts @@ -8,6 +8,11 @@ import { DisplayMessageKind, DisplayType, MessageContent, + StructuredBlock, + StructuredContent, + TableBlock, + TableCell, + TableColumn, TypedDisplayContent, } from "../display.js"; @@ -104,3 +109,360 @@ export async function displayResult( ) { displayMessage(message, context); } + +// --------------------------------------------------------------------------- +// Structured content — builders + fallback derivation. +// See docs/plans/structured-output/PLAN.md. +// --------------------------------------------------------------------------- + +// Options shared by the table builders. +export interface TableBuildOptions { + caption?: string; + sortable?: boolean; + filterable?: boolean; + readonly?: boolean; +} + +// A column definition for `fromRecords` — a `TableColumn` plus a `value` +// accessor that maps a record to its cell for this column. +export interface ColumnSpec extends TableColumn { + value: (record: T) => TableCell; +} + +/** + * Build a `TableBlock` from explicit columns and rows. + */ +export function createTable( + columns: TableColumn[], + rows: TableCell[][], + options?: TableBuildOptions, +): TableBlock { + return { + kind: "table", + columns, + rows, + ...options, + }; +} + +/** + * Build a single-table `StructuredContent` from an array of domain records + * and a column spec, stashing the records as `rawData` in the same call so the + * rendered table and the machine-readable payload can't drift apart. + */ +export function fromRecords( + objects: T[], + columnSpec: ColumnSpec[], + options?: TableBuildOptions & { + rawData?: unknown; // override the default rawData (the objects) + dataSchema?: unknown; + kind?: DisplayMessageKind | undefined; + speak?: boolean | undefined; + }, +): StructuredContent { + const columns: TableColumn[] = columnSpec.map( + ({ value, ...column }) => column, + ); + const rows: TableCell[][] = objects.map((object) => + columnSpec.map((column) => column.value(object)), + ); + const { rawData, dataSchema, kind, speak, ...tableOptions } = + options ?? {}; + const table = createTable(columns, rows, tableOptions); + return createStructuredContent([table], { + rawData: rawData ?? objects, + dataSchema, + kind, + speak, + }); +} + +/** + * Assemble a `StructuredContent` from blocks, auto-deriving markdown + text + * `alternates` so clients that don't understand `type: "structured"` degrade + * gracefully via `getContentForType`. + */ +export function createStructuredContent( + blocks: StructuredBlock[], + options?: { + rawData?: unknown; + dataSchema?: unknown; + kind?: DisplayMessageKind | undefined; + speak?: boolean | undefined; + }, +): StructuredContent { + const content: StructuredContent = { + type: "structured", + blocks, + alternates: [ + { type: "markdown", content: structuredToMarkdown(blocks) }, + { type: "text", content: structuredToText(blocks) }, + ], + }; + if (options?.rawData !== undefined) { + content.rawData = options.rawData; + } + if (options?.dataSchema !== undefined) { + content.dataSchema = options.dataSchema; + } + if (options?.kind !== undefined) { + content.kind = options.kind; + } + if (options?.speak !== undefined) { + content.speak = options.speak; + } + return content; +} + +// Flatten a MessageContent (string | string[] | string[][]) to a single +// string for derivation purposes. +function messageContentToString(content: MessageContent): string { + if (typeof content === "string") { + return content; + } + return content + .map((row) => (Array.isArray(row) ? row.join(" | ") : row)) + .join("\n"); +} + +// The display text of a cell, ignoring link/badge decoration. +function cellText(cell: TableCell): string { + if (cell === null || cell === undefined) { + return ""; + } + if (typeof cell === "object") { + return cell.text; + } + return String(cell); +} + +// The markdown rendering of a cell, honoring an optional link target. +function cellMarkdown(cell: TableCell): string { + const text = cellText(cell); + if (typeof cell === "object" && cell.href) { + return `[${text}](${cell.href})`; + } + return text; +} + +/** + * Derive a markdown representation of a block document. Used to build the + * `alternates` a rich client falls back to, and for history/TTS text. + */ +export function structuredToMarkdown(blocks: StructuredBlock[]): string { + const sections: string[] = []; + for (const block of blocks) { + switch (block.kind) { + case "heading": + sections.push( + `${"#".repeat(block.level ?? 1)} ${block.text}`, + ); + break; + case "text": + sections.push(messageContentToString(block.text)); + break; + case "table": { + const header = `| ${block.columns + .map((c) => c.header) + .join(" | ")} |`; + const separator = `| ${block.columns + .map(() => "---") + .join(" | ")} |`; + const rows = block.rows.map( + (row) => `| ${row.map(cellMarkdown).join(" | ")} |`, + ); + const lines = [header, separator, ...rows]; + if (block.caption) { + lines.unshift(`**${block.caption}**`); + } + sections.push(lines.join("\n")); + break; + } + case "list": { + const items = block.items.map((item, index) => { + const marker = block.ordered ? `${index + 1}.` : "-"; + const label = item.href + ? `[${item.text}](${item.href})` + : item.text; + const subtitle = item.subtitle ? ` — ${item.subtitle}` : ""; + return `${marker} ${label}${subtitle}`; + }); + sections.push(items.join("\n")); + break; + } + case "keyValue": + sections.push( + block.pairs + .map( + (pair) => + `- **${pair.label}:** ${cellMarkdown(pair.value)}`, + ) + .join("\n"), + ); + break; + case "card": { + const lines: string[] = []; + if (block.title) { + lines.push( + block.href + ? `### [${block.title}](${block.href})` + : `### ${block.title}`, + ); + } + if (block.subtitle) { + lines.push(`*${block.subtitle}*`); + } + if (block.fields) { + lines.push( + ...block.fields.map( + (pair) => + `- **${pair.label}:** ${cellMarkdown(pair.value)}`, + ), + ); + } + sections.push(lines.join("\n")); + break; + } + case "image": { + let image = `![${block.alt ?? ""}](${block.src})`; + if (block.caption) { + image += `\n\n*${block.caption}*`; + } + sections.push(image); + break; + } + case "code": + sections.push( + `\`\`\`${block.language ?? ""}\n${block.code}\n\`\`\``, + ); + break; + case "divider": + sections.push("---"); + break; + } + } + return sections.join("\n\n"); +} + +/** + * Derive a plain-text representation of a block document, for clients (CLI, + * MCP, copilot) that render text only. + */ +export function structuredToText(blocks: StructuredBlock[]): string { + const sections: string[] = []; + for (const block of blocks) { + switch (block.kind) { + case "heading": + sections.push(block.text); + break; + case "text": + sections.push(messageContentToString(block.text)); + break; + case "table": + sections.push(tableToText(block)); + break; + case "list": { + const items = block.items.map((item, index) => { + const marker = block.ordered ? `${index + 1}.` : "-"; + const subtitle = item.subtitle ? ` — ${item.subtitle}` : ""; + return `${marker} ${item.text}${subtitle}`; + }); + sections.push(items.join("\n")); + break; + } + case "keyValue": + sections.push( + block.pairs + .map((pair) => `${pair.label}: ${cellText(pair.value)}`) + .join("\n"), + ); + break; + case "card": { + const lines: string[] = []; + if (block.title) { + lines.push(block.title); + } + if (block.subtitle) { + lines.push(block.subtitle); + } + if (block.fields) { + lines.push( + ...block.fields.map( + (pair) => `${pair.label}: ${cellText(pair.value)}`, + ), + ); + } + sections.push(lines.join("\n")); + break; + } + case "image": + sections.push( + `[image: ${block.alt ?? block.caption ?? block.src}]`, + ); + break; + case "code": + sections.push(block.code); + break; + case "divider": + sections.push("----"); + break; + } + } + return sections.join("\n\n"); +} + +// Render a table block as a monospace-friendly aligned text table. +function tableToText(block: TableBlock): string { + const headers = block.columns.map((c) => c.header); + const rows = block.rows.map((row) => row.map(cellText)); + const widths = headers.map((header, index) => + Math.max( + header.length, + ...rows.map((row) => (row[index] ?? "").length), + ), + ); + const pad = (cells: string[]) => + cells.map((cell, index) => cell.padEnd(widths[index])).join(" "); + const lines = [pad(headers), widths.map((w) => "-".repeat(w)).join(" ")]; + for (const row of rows) { + lines.push(pad(headers.map((_, index) => row[index] ?? ""))); + } + if (block.caption) { + lines.unshift(block.caption); + } + return lines.join("\n"); +} + +/** + * Given a `StructuredContent`, return a fallback representation for a preferred + * display type. Prefers an existing alternate; otherwise derives on demand. + */ +export function getStructuredFallback( + content: StructuredContent, + preferredType: "markdown" | "text" = "markdown", +): MessageContent { + if (content.alternates) { + for (const alt of content.alternates) { + if (alt.type === preferredType) { + return alt.content; + } + } + } + return preferredType === "text" + ? structuredToText(content.blocks) + : structuredToMarkdown(content.blocks); +} + +/** + * Type guard: is a DisplayContent a StructuredContent block document? + */ +export function isStructuredContent( + content: DisplayContent, +): content is StructuredContent { + return ( + typeof content === "object" && + content !== null && + !Array.isArray(content) && + (content as StructuredContent).type === "structured" + ); +} diff --git a/ts/packages/agentSdk/src/index.ts b/ts/packages/agentSdk/src/index.ts index 86bef72a0..071f4f975 100644 --- a/ts/packages/agentSdk/src/index.ts +++ b/ts/packages/agentSdk/src/index.ts @@ -61,6 +61,23 @@ export { TypedDisplayContent, DisplayAppendMode, DisplayMessageKind, + BadgeTone, + TableCellType, + TableColumn, + TableCell, + TableBlock, + HeadingBlock, + TextBlock, + ListItem, + ListBlock, + KeyValuePair, + KeyValueBlock, + CardBlock, + ImageBlock, + CodeBlock, + DividerBlock, + StructuredBlock, + StructuredContent, } from "./display.js"; export { diff --git a/ts/packages/agentSdk/test/structuredContent.spec.ts b/ts/packages/agentSdk/test/structuredContent.spec.ts new file mode 100644 index 000000000..e0dbd6842 --- /dev/null +++ b/ts/packages/agentSdk/test/structuredContent.spec.ts @@ -0,0 +1,280 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + StructuredBlock, + StructuredContent, + TableColumn, + TableCell, +} from "../src/display.js"; +import { + ColumnSpec, + createStructuredContent, + createTable, + fromRecords, + getStructuredFallback, + isStructuredContent, + structuredToMarkdown, + structuredToText, +} from "../src/helpers/displayHelpers.js"; +import { createStructuredResult } from "../src/helpers/actionHelpers.js"; + +describe("structured content builders", () => { + it("createTable builds a table block with defaults", () => { + const columns: TableColumn[] = [ + { id: "n", header: "N" }, + { id: "t", header: "Title" }, + ]; + const rows: TableCell[][] = [[1, "one"]]; + const table = createTable(columns, rows); + expect(table).toEqual({ kind: "table", columns, rows }); + }); + + it("createTable carries affordance options", () => { + const table = createTable([{ id: "a", header: "A" }], [["x"]], { + caption: "cap", + readonly: true, + filterable: true, + }); + expect(table.caption).toBe("cap"); + expect(table.readonly).toBe(true); + expect(table.filterable).toBe(true); + }); + + it("fromRecords builds a table + stashes rawData together", () => { + type PR = { number: number; title: string; url: string }; + const prs: PR[] = [ + { number: 1, title: "First", url: "https://x/1" }, + { number: 2, title: "Second", url: "https://x/2" }, + ]; + const spec: ColumnSpec[] = [ + { + id: "number", + header: "#", + type: "link", + value: (pr) => ({ text: `#${pr.number}`, href: pr.url }), + }, + { id: "title", header: "Title", value: (pr) => pr.title }, + ]; + const content = fromRecords(prs, spec); + expect(content.type).toBe("structured"); + expect(content.blocks).toHaveLength(1); + const table = content.blocks[0]; + expect(table.kind).toBe("table"); + if (table.kind === "table") { + // value accessor stripped from column definition + expect(table.columns).toEqual([ + { id: "number", header: "#", type: "link" }, + { id: "title", header: "Title" }, + ]); + expect(table.rows).toEqual([ + [{ text: "#1", href: "https://x/1" }, "First"], + [{ text: "#2", href: "https://x/2" }, "Second"], + ]); + } + // rawData defaults to the original objects + expect(content.rawData).toBe(prs); + }); + + it("fromRecords allows overriding rawData", () => { + const content = fromRecords( + [{ a: 1 }], + [{ id: "a", header: "A", value: (o) => o.a }], + { rawData: { custom: true } }, + ); + expect(content.rawData).toEqual({ custom: true }); + }); + + it("createStructuredContent attaches markdown + text alternates", () => { + const content = createStructuredContent([ + { kind: "heading", text: "Hi" }, + ]); + expect(content.alternates).toEqual([ + { type: "markdown", content: "# Hi" }, + { type: "text", content: "Hi" }, + ]); + }); + + it("createStructuredContent omits undefined optional fields", () => { + const content = createStructuredContent([{ kind: "divider" }]); + expect("rawData" in content).toBe(false); + expect("kind" in content).toBe(false); + expect("speak" in content).toBe(false); + }); +}); + +describe("createStructuredResult", () => { + it("wraps blocks into an ActionResultSuccess with derived history text", () => { + const result = createStructuredResult( + [{ kind: "heading", text: "Report" }], + { rawData: [1, 2, 3] }, + ); + expect(result.entities).toEqual([]); + expect(result.historyText).toBe("Report"); + const display = result.displayContent as StructuredContent; + expect(display.type).toBe("structured"); + expect(display.rawData).toEqual([1, 2, 3]); + }); + + it("honors an explicit historyText and entities", () => { + const result = createStructuredResult([{ kind: "divider" }], { + historyText: "custom", + entities: [{ name: "e", type: ["t"] }], + }); + expect(result.historyText).toBe("custom"); + expect(result.entities).toEqual([{ name: "e", type: ["t"] }]); + }); +}); + +describe("isStructuredContent", () => { + it("detects structured content and rejects other display content", () => { + const content = createStructuredContent([{ kind: "divider" }]); + expect(isStructuredContent(content)).toBe(true); + expect(isStructuredContent("plain")).toBe(false); + expect(isStructuredContent(["a", "b"])).toBe(false); + expect(isStructuredContent({ type: "text", content: "x" })).toBe(false); + }); +}); + +describe("structuredToMarkdown", () => { + it("renders a table with link cells", () => { + const blocks: StructuredBlock[] = [ + { + kind: "table", + columns: [ + { id: "n", header: "#" }, + { id: "t", header: "Title" }, + ], + rows: [ + [{ text: "#1", href: "https://x/1" }, "First"], + [2, "Second"], + ], + }, + ]; + expect(structuredToMarkdown(blocks)).toBe( + [ + "| # | Title |", + "| --- | --- |", + "| [#1](https://x/1) | First |", + "| 2 | Second |", + ].join("\n"), + ); + }); + + it("renders headings, lists, images, code, and dividers", () => { + const blocks: StructuredBlock[] = [ + { kind: "heading", text: "Title", level: 2 }, + { + kind: "list", + items: [ + { text: "one", href: "https://x/1", subtitle: "sub" }, + { text: "two" }, + ], + }, + { kind: "image", src: "https://x/i.png", alt: "pic", caption: "c" }, + { kind: "code", code: "x=1", language: "python" }, + { kind: "divider" }, + ]; + expect(structuredToMarkdown(blocks)).toBe( + [ + "## Title", + "", + "- [one](https://x/1) — sub\n- two", + "", + "![pic](https://x/i.png)\n\n*c*", + "", + "```python\nx=1\n```", + "", + "---", + ].join("\n"), + ); + }); + + it("renders an ordered list and keyValue block", () => { + const blocks: StructuredBlock[] = [ + { + kind: "list", + ordered: true, + items: [{ text: "first" }, { text: "second" }], + }, + { + kind: "keyValue", + pairs: [ + { label: "Owner", value: "octocat" }, + { + label: "Repo", + value: { text: "typeagent", href: "https://x" }, + }, + ], + }, + ]; + expect(structuredToMarkdown(blocks)).toBe( + [ + "1. first\n2. second", + "", + "- **Owner:** octocat\n- **Repo:** [typeagent](https://x)", + ].join("\n"), + ); + }); +}); + +describe("structuredToText", () => { + it("renders an aligned text table", () => { + const blocks: StructuredBlock[] = [ + { + kind: "table", + columns: [ + { id: "n", header: "#" }, + { id: "t", header: "Title" }, + ], + rows: [ + [{ text: "#1", href: "https://x/1" }, "First"], + ["#22", "Second"], + ], + }, + ]; + expect(structuredToText(blocks)).toBe( + ["# Title ", "--- ------", "#1 First ", "#22 Second"].join( + "\n", + ), + ); + }); + + it("strips link/badge decoration and renders plain lines", () => { + const blocks: StructuredBlock[] = [ + { kind: "heading", text: "H" }, + { + kind: "keyValue", + pairs: [ + { + label: "Repo", + value: { text: "typeagent", href: "https://x" }, + }, + ], + }, + { kind: "image", src: "https://x/i.png", alt: "pic" }, + ]; + expect(structuredToText(blocks)).toBe( + ["H", "", "Repo: typeagent", "", "[image: pic]"].join("\n"), + ); + }); +}); + +describe("getStructuredFallback", () => { + it("prefers an existing alternate", () => { + const content = createStructuredContent([ + { kind: "heading", text: "Hi" }, + ]); + expect(getStructuredFallback(content, "markdown")).toBe("# Hi"); + expect(getStructuredFallback(content, "text")).toBe("Hi"); + }); + + it("derives on demand when no alternate is present", () => { + const content: StructuredContent = { + type: "structured", + blocks: [{ kind: "heading", text: "Hi" }], + }; + expect(getStructuredFallback(content, "markdown")).toBe("# Hi"); + expect(getStructuredFallback(content, "text")).toBe("Hi"); + }); +}); diff --git a/ts/packages/agentSdk/test/tsconfig.json b/ts/packages/agentSdk/test/tsconfig.json new file mode 100644 index 000000000..0e71ed8c2 --- /dev/null +++ b/ts/packages/agentSdk/test/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "../dist/test", + "types": ["node", "jest"] + }, + "include": ["./**/*"], + "ts-node": { + "esm": true + }, + "references": [{ "path": "../src" }] +} diff --git a/ts/packages/agentSdk/tsconfig.json b/ts/packages/agentSdk/tsconfig.json index b6e1577e4..cdf483e0d 100644 --- a/ts/packages/agentSdk/tsconfig.json +++ b/ts/packages/agentSdk/tsconfig.json @@ -4,7 +4,7 @@ "composite": true }, "include": [], - "references": [{ "path": "./src" }], + "references": [{ "path": "./src" }, { "path": "./test" }], "ts-node": { "esm": true } From 9833d0c44cc57948e639fe0e06caa660152ed5a5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 22:52:02 +0000 Subject: [PATCH 03/36] Implement Phase 2: renderer safety net for structured content --- ts/docs/plans/structured-output/STATUS.md | 12 ++++----- ts/packages/chat-ui/src/setContent.ts | 27 +++++++++++++------ ts/packages/cli/src/enhancedConsole.ts | 24 ++++++++++++----- .../commandExecutor/src/commandServer.ts | 12 +++++++++ .../src/shared/message-formatter.ts | 13 ++++++++- ts/packages/vscode-chat/src/displayRender.ts | 15 ++++++++++- 6 files changed, 80 insertions(+), 23 deletions(-) diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 031c63ad9..4755fea24 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-11 — Phase 1 (SDK foundation) implemented._ +_Last updated: 2026-07-11 — Phase 2 (renderer safety net) implemented._ ## Progress by phase @@ -22,11 +22,11 @@ _Last updated: 2026-07-11 — Phase 1 (SDK foundation) implemented._ | Item | Description | Status | | ---- | ----------- | ------ | -| 2a | `chat-ui/setContent.ts` — detect `"structured"`, use fallback (no throw) | todo | -| 2b | `vscode-chat/displayRender.ts` — fallback | todo | -| 2c | `cli/enhancedConsole.ts` — fallback | todo | -| 2d | `commandExecutor/commandServer.ts` — fallback | todo | -| 2e | `copilot-plugin/message-formatter.ts` — fallback | todo | +| 2a | `chat-ui/setContent.ts` — detect `"structured"`, use fallback (no throw) | done | +| 2b | `vscode-chat/displayRender.ts` — fallback | done | +| 2c | `cli/enhancedConsole.ts` — fallback | done | +| 2d | `commandExecutor/commandServer.ts` — fallback | done | +| 2e | `copilot-plugin/message-formatter.ts` — fallback | done | ### Phase 3 — Rich rendering *(after 1)* diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index c1d7317fc..d7535d726 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -9,7 +9,11 @@ import { DisplayMessageKind, MessageContent, } from "@typeagent/agent-sdk"; -import { getContentForType } from "@typeagent/agent-sdk/helpers/display"; +import { + getContentForType, + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import DOMPurify from "dompurify"; import MarkdownIt from "markdown-it"; import { PlatformAdapter, ChatSettingsView } from "./platformAdapter.js"; @@ -194,14 +198,21 @@ export function setContent( message = content; speak = false; } else { - // Prefer HTML alternates when available - const htmlContent = getContentForType(content, "html"); - if (htmlContent !== undefined && content.type !== "html") { - type = "html"; - message = htmlContent; + if (isStructuredContent(content)) { + // Use the SDK-derived markdown fallback so an unknown "structured" + // type never reaches processContent (which would throw). + type = "markdown"; + message = getStructuredFallback(content, "markdown"); } else { - type = content.type; - message = content.content; + // Prefer HTML alternates when available + const htmlContent = getContentForType(content, "html"); + if (htmlContent !== undefined && content.type !== "html") { + type = "html"; + message = htmlContent; + } else { + type = content.type; + message = content.content; + } } kind = content.kind; speak = content.speak ?? false; diff --git a/ts/packages/cli/src/enhancedConsole.ts b/ts/packages/cli/src/enhancedConsole.ts index 2dd4689ef..3fda19b45 100644 --- a/ts/packages/cli/src/enhancedConsole.ts +++ b/ts/packages/cli/src/enhancedConsole.ts @@ -18,7 +18,11 @@ import { DisplayContent, MessageContent, } from "@typeagent/agent-sdk"; -import { getContentForType } from "@typeagent/agent-sdk/helpers/display"; +import { + getContentForType, + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import type { RequestId, ClientIO, @@ -709,14 +713,20 @@ export function createEnhancedClientIO( if (typeof content === "string" || Array.isArray(content)) { message = content; } else { - // CLI prefers text alternates when available - const textContent = getContentForType(content, "text"); - if (textContent !== undefined && content.type !== "text") { - message = textContent; + if (isStructuredContent(content)) { + // CLI gets the text fallback; no interactive table rendering yet. + message = getStructuredFallback(content, "text"); contentType = "text"; } else { - message = content.content; - contentType = content.type || "text"; + // CLI prefers text alternates when available + const textContent = getContentForType(content, "text"); + if (textContent !== undefined && content.type !== "text") { + message = textContent; + contentType = "text"; + } else { + message = content.content; + contentType = content.type || "text"; + } } switch (content.kind) { case "status": diff --git a/ts/packages/commandExecutor/src/commandServer.ts b/ts/packages/commandExecutor/src/commandServer.ts index dea7b7286..c9051fa6b 100644 --- a/ts/packages/commandExecutor/src/commandServer.ts +++ b/ts/packages/commandExecutor/src/commandServer.ts @@ -19,6 +19,10 @@ import type { import type { Dispatcher } from "@typeagent/dispatcher-types"; import { awaitCommand } from "@typeagent/dispatcher-types"; import { DisplayAppendMode } from "@typeagent/agent-sdk"; +import { + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import * as fs from "fs"; import * as path from "path"; import * as os from "os"; @@ -193,6 +197,10 @@ function createMcpClientIO( } if (typeof msg === "string") { responseCollector.messages.push(stripAnsi(msg)); + } else if (isStructuredContent(msg)) { + responseCollector.messages.push( + stripAnsi(String(getStructuredFallback(msg, "text"))), + ); } else if (typeof msg === "object" && msg && "content" in msg) { responseCollector.messages.push( stripAnsi(String(msg.content)), @@ -220,6 +228,10 @@ function createMcpClientIO( } if (typeof msg === "string") { responseCollector.messages.push(stripAnsi(msg)); + } else if (isStructuredContent(msg)) { + responseCollector.messages.push( + stripAnsi(String(getStructuredFallback(msg, "text"))), + ); } else if (typeof msg === "object" && msg && "content" in msg) { responseCollector.messages.push( stripAnsi(String(msg.content)), diff --git a/ts/packages/copilot-plugin/src/shared/message-formatter.ts b/ts/packages/copilot-plugin/src/shared/message-formatter.ts index 632208ea7..553596a92 100644 --- a/ts/packages/copilot-plugin/src/shared/message-formatter.ts +++ b/ts/packages/copilot-plugin/src/shared/message-formatter.ts @@ -7,7 +7,15 @@ */ import type { IAgentMessage } from "@typeagent/agent-server-client"; -import type { DisplayAppendMode } from "@typeagent/agent-sdk"; +import type { + DisplayAppendMode, + DisplayContent, + StructuredContent, +} from "@typeagent/agent-sdk"; +import { + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import { convert } from "html-to-text"; /** @@ -27,6 +35,9 @@ function extractText(msg: unknown): string | undefined { if (typeof msg === "string") { text = msg; + } else if (isStructuredContent(msg as DisplayContent)) { + // StructuredContent — use the pre-derived text alternate. + text = String(getStructuredFallback(msg as StructuredContent, "text")); } else if (typeof msg === "object" && msg && "content" in msg) { text = String((msg as { content: unknown }).content); if ("type" in msg && (msg as { type: unknown }).type === "html") { diff --git a/ts/packages/vscode-chat/src/displayRender.ts b/ts/packages/vscode-chat/src/displayRender.ts index db9ba4c37..b22ff3ad5 100644 --- a/ts/packages/vscode-chat/src/displayRender.ts +++ b/ts/packages/vscode-chat/src/displayRender.ts @@ -8,7 +8,11 @@ import type { MessageContent, TypedDisplayContent, } from "@typeagent/agent-sdk"; -import { getContentForType } from "@typeagent/agent-sdk/helpers/display"; +import { + getContentForType, + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import { AnsiUp } from "ansi_up"; const ansiUpTextToHtml = new AnsiUp(); @@ -19,12 +23,21 @@ export function renderDisplayToMarkdown(content: DisplayContent): string { if (typeof content === "string") return renderMessageContent(content, "text"); if (Array.isArray(content)) return renderMessageContent(content, "text"); + if (isStructuredContent(content)) { + return applyKind( + renderMessageContent(getStructuredFallback(content, "markdown"), "markdown"), + content.kind, + ); + } return renderTypedContent(content); } export function renderDisplayToText(content: DisplayContent): string { if (typeof content === "string") return stripAnsi(content); if (Array.isArray(content)) return renderMessageContentAsText(content); + if (isStructuredContent(content)) { + return renderMessageContentAsText(getStructuredFallback(content, "text")); + } return renderTypedContentAsText(content); } From 33475844629db92a2c3636637f95056899e71f4c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 23:55:01 +0000 Subject: [PATCH 04/36] Implement Phase 3: rich rendering for structured content --- node_modules | 1 + ts/docs/plans/structured-output/STATUS.md | 6 +- ts/packages/chat-ui/src/setContent.ts | 232 ++++++++++++++++++- ts/packages/chat-ui/styles/chat.css | 216 +++++++++++++++++ ts/packages/vscode-chat/src/displayRender.ts | 131 ++++++++++- 5 files changed, 572 insertions(+), 14 deletions(-) create mode 120000 node_modules diff --git a/node_modules b/node_modules new file mode 120000 index 000000000..acabd91b6 --- /dev/null +++ b/node_modules @@ -0,0 +1 @@ +/home/runner/work/TypeAgent/TypeAgent/ts/packages/vscode-chat/node_modules \ No newline at end of file diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 4755fea24..6fa36a6fe 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-11 — Phase 2 (renderer safety net) implemented._ +_Last updated: 2026-07-11 — Phase 3 (rich rendering) implemented._ ## Progress by phase @@ -32,8 +32,8 @@ _Last updated: 2026-07-11 — Phase 2 (renderer safety net) implemented._ | Item | Description | Status | | ---- | ----------- | ------ | -| 3a | `chat-ui/setContent.ts` blocks → HTML (table/badge/link/image/card/list/keyValue) + `chat.css` | todo | -| 3b | `vscode-chat/displayRender.ts` blocks → markdown | todo | +| 3a | `chat-ui/setContent.ts` blocks → HTML (table/badge/link/image/card/list/keyValue) + `chat.css` | done | +| 3b | `vscode-chat/displayRender.ts` blocks → markdown | done | ### Phase 4 — Interactivity *(after 3a)* diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index d7535d726..64c0efee1 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -8,10 +8,14 @@ import { DisplayType, DisplayMessageKind, MessageContent, + StructuredBlock, + StructuredContent, + TableBlock, + TableCell, + BadgeTone, } from "@typeagent/agent-sdk"; import { getContentForType, - getStructuredFallback, isStructuredContent, } from "@typeagent/agent-sdk/helpers/display"; import DOMPurify from "dompurify"; @@ -24,6 +28,225 @@ const ansiUpMarkdownToHtml = new AnsiUp(); ansiUpMarkdownToHtml.use_classes = true; ansiUpMarkdownToHtml.escape_html = false; +// --------------------------------------------------------------------------- +// Structured-content HTML renderer (Phase 3a) +// Converts a StructuredContent block document to an HTML string. DOMPurify +// sanitizes it at the final sink in setContent(), so string concatenation here +// is safe — we never set innerHTML before sanitization. +// --------------------------------------------------------------------------- + +function esc(text: string): string { + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """); +} + +function cellDisplayText(cell: TableCell): string { + if (cell === null || cell === undefined) return ""; + if (typeof cell === "object") return cell.text; + return String(cell); +} + +function badgeClass(tone: BadgeTone | undefined): string { + return `sc-badge sc-badge-${tone ?? "neutral"}`; +} + +function renderTableCell( + cell: TableCell, + colType: string | undefined, +): string { + const text = cellDisplayText(cell); + const obj = typeof cell === "object" && cell !== null ? cell : null; + const href = obj?.href ?? undefined; + const badge = obj?.badge ?? undefined; + const tooltip = obj?.tooltip ? ` title="${esc(obj.tooltip)}"` : ""; + const effectiveType = badge ? "badge" : href ? "link" : colType ?? "text"; + + switch (effectiveType) { + case "link": + if (href) { + return `${esc(text)}`; + } + return esc(text); + case "badge": { + const tone = badge ?? "neutral"; + return `${esc(text)}`; + } + case "code": + return `${esc(text)}`; + case "number": + return `${esc(text)}`; + case "date": + return `${esc(text)}`; + default: + return tooltip ? `${esc(text)}` : esc(text); + } +} + +function renderTableBlock(block: TableBlock): string { + const { columns, rows, caption, sortable, readonly } = block; + const sortAttr = + !readonly && sortable !== false ? ' data-sc-sortable="true"' : ""; + const parts: string[] = [ + `
`, + ]; + if (caption) { + parts.push(``); + } + parts.push(""); + for (const col of columns) { + const align = + col.align ? ` style="text-align:${esc(col.align)}"` : ""; + const colSortable = + !readonly && (col.sortable ?? sortable ?? true) !== false; + const sortBtn = colSortable + ? ` ` + : ""; + parts.push(``); + } + parts.push(""); + for (const row of rows) { + parts.push(""); + for (let ci = 0; ci < columns.length; ci++) { + const col = columns[ci]; + const cell = row[ci] ?? ""; + const align = + col.align ? ` style="text-align:${esc(col.align)}"` : ""; + parts.push(`${renderTableCell(cell, col.type)}`); + } + parts.push(""); + } + parts.push("
${esc(caption)}
${esc(col.header)}${sortBtn}
"); + return parts.join(""); +} + +function renderMarkdownToHtml(text: string): string { + const md = new MarkdownIt({ html: true }); + const defaultRender = + md.renderer.rules.link_open || + function (tokens: any, idx: any, options: any, _env: any, self: any) { + return self.renderToken(tokens, idx, options); + }; + md.renderer.rules.link_open = (tokens: any, idx: any, options: any, env: any, self: any) => { + tokens[idx].attrSet("target", "_blank"); + return defaultRender(tokens, idx, options, env, self); + }; + const rendered = md.render(text); + return ansiUpMarkdownToHtml.ansi_to_html(rendered); +} + +function renderBlock(block: StructuredBlock): string { + switch (block.kind) { + case "heading": { + const level = block.level ?? 1; + return `${esc(block.text)}`; + } + case "text": { + const raw = + typeof block.text === "string" + ? block.text + : Array.isArray(block.text) && + typeof block.text[0] === "string" + ? (block.text as string[]).join("\n") + : (block.text as string[][]) + .map((row) => row.join(" | ")) + .join("\n"); + const fmt = block.format ?? "markdown"; + if (fmt === "text") { + return `

${textToHtml(raw)}

`; + } + return `
${renderMarkdownToHtml(raw)}
`; + } + case "table": + return renderTableBlock(block); + case "list": { + const tag = block.ordered ? "ol" : "ul"; + const items = block.items + .map((item) => { + const label = item.href + ? `${esc(item.text)}` + : esc(item.text); + const subtitle = item.subtitle + ? ` ${esc(item.subtitle)}` + : ""; + const badges = (item.badges ?? []) + .map( + (tone) => + `${esc(tone)}`, + ) + .join(" "); + return `
  • ${label}${subtitle}${badges ? " " + badges : ""}
  • `; + }) + .join(""); + return `<${tag} class="sc-list">${items}`; + } + case "keyValue": { + const rows = block.pairs + .map( + (pair) => + `${esc(pair.label)}` + + `${renderTableCell(pair.value, undefined)}`, + ) + .join(""); + return `${rows}
    `; + } + case "card": { + const parts: string[] = [`
    `]; + if (block.title) { + const title = block.href + ? `${esc(block.title)}` + : esc(block.title); + parts.push(`
    ${title}
    `); + } + if (block.subtitle) { + parts.push( + `
    ${esc(block.subtitle)}
    `, + ); + } + if (block.fields && block.fields.length > 0) { + const rows = block.fields + .map( + (pair) => + `${esc(pair.label)}` + + `${renderTableCell(pair.value, undefined)}`, + ) + .join(""); + parts.push( + `${rows}
    `, + ); + } + parts.push("
    "); + return parts.join(""); + } + case "image": { + const widthAttr = block.width ? ` width="${block.width}"` : ""; + const heightAttr = block.height ? ` height="${block.height}"` : ""; + const img = `${esc(block.alt ?? `; + if (block.caption) { + return `
    ${img}
    ${esc(block.caption)}
    `; + } + return `
    ${img}
    `; + } + case "code": + return `
    ${esc(block.code)}
    `; + case "divider": + return `
    `; + default: + return ""; + } +} + +/** + * Render a StructuredContent block document to an HTML string. + * The result is passed through DOMPurify at the sink before being written to + * the DOM, so concatenation here is safe. + */ +function renderStructuredContent(content: StructuredContent): string { + return content.blocks.map(renderBlock).join("\n"); +} + function textToHtml(text: string): string { const value = ansiUpTextToHtml.ansi_to_html(text); const line = value.replace(/\n/gm, "
    "); @@ -199,10 +422,9 @@ export function setContent( speak = false; } else { if (isStructuredContent(content)) { - // Use the SDK-derived markdown fallback so an unknown "structured" - // type never reaches processContent (which would throw). - type = "markdown"; - message = getStructuredFallback(content, "markdown"); + // Phase 3a: render blocks natively as HTML. + type = "html"; + message = renderStructuredContent(content); } else { // Prefer HTML alternates when available const htmlContent = getContentForType(content, "html"); diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index 686e34ace..4c8d69573 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -972,6 +972,222 @@ table.table-message td { padding: 0px 10px 0px 10px; } +/* ========================================================================= + Structured-content blocks (sc-*) — Phase 3a + Used by chat-ui/setContent.ts renderStructuredContent(). + ========================================================================= */ + +/* --- Headings ------------------------------------------------------------ */ + +.sc-heading { + font-weight: 600; + margin: 0.5em 0 0.25em; +} + +.sc-heading-1 { font-size: 1.4em; } +.sc-heading-2 { font-size: 1.2em; } +.sc-heading-3 { font-size: 1.05em; } + +/* --- Text / prose -------------------------------------------------------- */ + +.sc-text { + margin: 0.25em 0; +} + +/* --- Tables -------------------------------------------------------------- */ + +.sc-table-wrap { + overflow-x: auto; + margin: 0.5em 0; +} + +table.sc-table { + border-collapse: collapse; + width: 100%; + font-size: 0.9em; +} + +table.sc-table th, +table.sc-table td { + border: 1px solid var(--vscode-editorWidget-border, #ccc); + padding: 4px 10px; + text-align: left; + vertical-align: top; +} + +table.sc-table thead th { + background: var(--vscode-editor-background, #f5f5f5); + font-weight: 600; + white-space: nowrap; +} + +table.sc-table tbody tr:nth-child(even) { + background: var(--vscode-list-hoverBackground, rgba(0, 0, 0, 0.04)); +} + +.sc-cell-number { + font-variant-numeric: tabular-nums; +} + +.sc-cell-date { + white-space: nowrap; +} + +/* Sort button (Phase 4 wires up the click handler; button is always rendered + so column widths don't shift when interactivity is enabled later). */ +.sc-sort-btn { + background: none; + border: none; + cursor: pointer; + font-size: 0.75em; + opacity: 0.5; + padding: 0 2px; + vertical-align: middle; +} + +.sc-sort-btn:hover { + opacity: 1; +} + +/* --- Badges -------------------------------------------------------------- */ + +.sc-badge { + border-radius: 3px; + display: inline-block; + font-size: 0.8em; + font-weight: 600; + padding: 1px 6px; + white-space: nowrap; +} + +.sc-badge-neutral { + background: var(--vscode-badge-background, #999); + color: var(--vscode-badge-foreground, #fff); +} + +.sc-badge-info { + background: var(--vscode-statusBarItem-activeBackground, #007acc); + color: #fff; +} + +.sc-badge-success { + background: var(--vscode-testing-iconPassed, #388a34); + color: #fff; +} + +.sc-badge-warning { + background: var(--vscode-editorWarning-foreground, #bf8803); + color: #fff; +} + +.sc-badge-error { + background: var(--vscode-errorForeground, #cc3333); + color: #fff; +} + +/* --- Lists --------------------------------------------------------------- */ + +.sc-list { + margin: 0.25em 0 0.25em 1.25em; + padding: 0; +} + +.sc-list li { + margin: 0.15em 0; +} + +.sc-list-subtitle { + color: var(--vscode-descriptionForeground, #717171); + font-size: 0.9em; +} + +/* --- Key-value table ----------------------------------------------------- */ + +table.sc-kv-table { + border-collapse: collapse; + margin: 0.25em 0; +} + +table.sc-kv-table th.sc-kv-label { + color: var(--vscode-descriptionForeground, #717171); + font-weight: 600; + padding-right: 12px; + text-align: right; + white-space: nowrap; + vertical-align: top; +} + +table.sc-kv-table td.sc-kv-value { + text-align: left; + vertical-align: top; +} + +/* --- Cards --------------------------------------------------------------- */ + +.sc-card { + border: 1px solid var(--vscode-editorWidget-border, #ccc); + border-radius: 6px; + margin: 0.5em 0; + padding: 10px 14px; +} + +.sc-card-title { + font-size: 1.05em; + font-weight: 600; + margin-bottom: 2px; +} + +.sc-card-subtitle { + color: var(--vscode-descriptionForeground, #717171); + font-size: 0.9em; + margin-bottom: 6px; +} + +table.sc-kv-table.sc-card-fields { + margin-top: 6px; +} + +/* --- Images -------------------------------------------------------------- */ + +.sc-figure { + display: inline-block; + margin: 0.5em 0; + max-width: 100%; +} + +.sc-image { + display: block; + max-width: 100%; + height: auto; +} + +.sc-caption { + color: var(--vscode-descriptionForeground, #717171); + font-size: 0.85em; + margin-top: 4px; + text-align: center; +} + +/* --- Code blocks --------------------------------------------------------- */ + +.sc-code { + background: var(--vscode-textCodeBlock-background, #f0f0f0); + border-radius: 4px; + font-family: var(--vscode-editor-font-family, monospace); + font-size: 0.88em; + margin: 0.25em 0; + overflow-x: auto; + padding: 8px 12px; +} + +/* --- Divider ------------------------------------------------------------- */ + +.sc-divider { + border: none; + border-top: 1px solid var(--vscode-editorWidget-border, #ccc); + margin: 0.75em 0; +} + /* ========================================================================= Metrics (hover-reveal) ========================================================================= */ diff --git a/ts/packages/vscode-chat/src/displayRender.ts b/ts/packages/vscode-chat/src/displayRender.ts index b22ff3ad5..aff45c208 100644 --- a/ts/packages/vscode-chat/src/displayRender.ts +++ b/ts/packages/vscode-chat/src/displayRender.ts @@ -6,11 +6,13 @@ import type { DisplayContent, DisplayType, MessageContent, + StructuredBlock, + StructuredContent, + TableCell, TypedDisplayContent, } from "@typeagent/agent-sdk"; import { getContentForType, - getStructuredFallback, isStructuredContent, } from "@typeagent/agent-sdk/helpers/display"; import { AnsiUp } from "ansi_up"; @@ -24,10 +26,7 @@ export function renderDisplayToMarkdown(content: DisplayContent): string { return renderMessageContent(content, "text"); if (Array.isArray(content)) return renderMessageContent(content, "text"); if (isStructuredContent(content)) { - return applyKind( - renderMessageContent(getStructuredFallback(content, "markdown"), "markdown"), - content.kind, - ); + return applyKind(renderStructuredToMarkdown(content), content.kind); } return renderTypedContent(content); } @@ -36,11 +35,131 @@ export function renderDisplayToText(content: DisplayContent): string { if (typeof content === "string") return stripAnsi(content); if (Array.isArray(content)) return renderMessageContentAsText(content); if (isStructuredContent(content)) { - return renderMessageContentAsText(getStructuredFallback(content, "text")); + return renderMessageContentAsText(renderStructuredToMarkdown(content)); } return renderTypedContentAsText(content); } +// --------------------------------------------------------------------------- +// Structured-content markdown renderer (Phase 3b) +// Renders each block natively using this renderer's own helpers (tableToMarkdown +// with proper pipe-escaping, processAnsiContent, etc.) rather than relying on +// the pre-derived alternate stored in `alternates`. +// --------------------------------------------------------------------------- + +function scCellText(cell: TableCell): string { + if (cell === null || cell === undefined) return ""; + if (typeof cell === "object") return cell.text; + return String(cell); +} + +function scCellMarkdown(cell: TableCell): string { + const text = scCellText(cell); + if (typeof cell === "object" && cell !== null && cell.href) { + return `[${text}](${cell.href})`; + } + return text; +} + +function renderStructuredBlockToMarkdown(block: StructuredBlock): string { + switch (block.kind) { + case "heading": { + const prefix = "#".repeat(block.level ?? 1); + return `${prefix} ${block.text}`; + } + case "text": { + const raw = + typeof block.text === "string" + ? block.text + : Array.isArray(block.text) && + typeof block.text[0] === "string" + ? (block.text as string[]).join("\n") + : (block.text as string[][]) + .map((row) => row.join(" | ")) + .join("\n"); + return processAnsiContent(raw, "markdown"); + } + case "table": { + const { columns, rows, caption } = block; + const headers = columns.map((c) => escapeTableCell(c.header)); + const dataRows = rows.map((row) => + columns.map((_, ci) => escapeTableCell(scCellMarkdown(row[ci] ?? ""))), + ); + const lines = [ + `| ${headers.join(" | ")} |`, + `| ${headers.map(() => "---").join(" | ")} |`, + ...dataRows.map((row) => `| ${row.join(" | ")} |`), + ]; + if (caption) { + lines.unshift(`**${caption}**`); + } + return lines.join("\n"); + } + case "list": { + return block.items + .map((item, index) => { + const marker = block.ordered ? `${index + 1}.` : "-"; + const label = item.href + ? `[${item.text}](${item.href})` + : item.text; + const subtitle = item.subtitle ? ` — ${item.subtitle}` : ""; + return `${marker} ${label}${subtitle}`; + }) + .join("\n"); + } + case "keyValue": + return block.pairs + .map( + (pair) => `- **${pair.label}:** ${scCellMarkdown(pair.value)}`, + ) + .join("\n"); + case "card": { + const lines: string[] = []; + if (block.title) { + lines.push( + block.href + ? `### [${block.title}](${block.href})` + : `### ${block.title}`, + ); + } + if (block.subtitle) { + lines.push(`*${block.subtitle}*`); + } + if (block.fields) { + lines.push( + ...block.fields.map( + (pair) => + `- **${pair.label}:** ${scCellMarkdown(pair.value)}`, + ), + ); + } + return lines.join("\n"); + } + case "image": { + let md = `![${block.alt ?? ""}](${block.src})`; + if (block.caption) { + md += `\n\n*${block.caption}*`; + } + return md; + } + case "code": + return `\`\`\`${block.language ?? ""}\n${block.code}\n\`\`\``; + case "divider": + return "---"; + default: + return ""; + } +} + +function renderStructuredToMarkdown(content: StructuredContent): string { + return content.blocks + .map(renderStructuredBlockToMarkdown) + .filter((s) => s.length > 0) + .join("\n\n"); +} + +// --------------------------------------------------------------------------- + function renderMessageContentAsText(content: MessageContent): string { if (typeof content === "string") return stripAnsi(content); if (content.length === 0) return ""; From ff1ab7d728511ee00945505c39f461c8ff89f935 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 23:56:58 +0000 Subject: [PATCH 05/36] Capitalize badge tone labels in list items --- ts/packages/chat-ui/src/setContent.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 64c0efee1..d8a9d8457 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -173,8 +173,11 @@ function renderBlock(block: StructuredBlock): string { : ""; const badges = (item.badges ?? []) .map( - (tone) => - `${esc(tone)}`, + (tone) => { + const label = + tone.charAt(0).toUpperCase() + tone.slice(1); + return `${esc(label)}`; + }, ) .join(" "); return `
  • ${label}${subtitle}${badges ? " " + badges : ""}
  • `; From 1c9aefd2424aba41e45d34a7f3f57c3357697679 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:29:42 +0000 Subject: [PATCH 06/36] Implement Phase 4 (sort/filter interactivity) and Phase 5 (github-cli structured output) --- ts/docs/plans/structured-output/STATUS.md | 12 +- .../github-cli/src/github-cliActionHandler.ts | 601 ++++++++++++++---- .../test/githubCliStructuredResults.spec.ts | 403 ++++++++++++ ts/packages/chat-ui/src/setContent.ts | 138 +++- ts/packages/chat-ui/styles/chat.css | 18 + 5 files changed, 1055 insertions(+), 117 deletions(-) create mode 100644 ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 6fa36a6fe..04e52965f 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-11 — Phase 3 (rich rendering) implemented._ +_Last updated: 2026-07-12 — Phase 4 (sort/filter interactivity) + Phase 5 (github-cli adopter) implemented._ ## Progress by phase @@ -39,16 +39,16 @@ _Last updated: 2026-07-11 — Phase 3 (rich rendering) implemented._ | Item | Description | Status | | ---- | ----------- | ------ | -| 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | todo | +| 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | done | ### Phase 5 — First adopter: github-cli *(after 1)* | Item | Description | Status | | ---- | ----------- | ------ | -| 5a | `prList` / `issueList` / `myPullRequests` / `searchRepos` → table blocks + rawData | todo | -| 5b | `dependabotAlerts` + contributors → table blocks | todo | -| 5c | `repoView` → keyValue block | todo | -| 5d | Update handler unit tests | todo | +| 5a | `prList` / `issueList` / `myAssignedIssues` / `searchRepos` → table blocks + rawData | done | +| 5b | `dependabotAlerts` + contributors → table blocks | done | +| 5c | `repoView` → keyValue block | done | +| 5d | Update handler unit tests | done | ### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index 4f75ca05d..866a2cee7 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -8,6 +8,11 @@ import { ActionResult, ActionResultSuccess, ReadinessReport, + BadgeTone, + TableCell, + TableBlock, + KeyValuePair, + StructuredBlock, } from "@typeagent/agent-sdk"; import { ChoiceManager, @@ -17,6 +22,11 @@ import { createMultiChoiceResult, createYesNoChoiceResult, } from "@typeagent/agent-sdk/helpers/action"; +import { + ColumnSpec, + createStructuredContent, + createTable, +} from "@typeagent/agent-sdk/helpers/display"; import { GithubCliActions } from "./github-cliSchema.js"; import { execFile } from "node:child_process"; import { promisify } from "node:util"; @@ -1036,79 +1046,493 @@ function formatPrView(data: Record): string { return header + bodySection; } -function formatListResults( +// ============================================================================ +// Phase 5 — structured-content list results (replaces formatListResults) +// ============================================================================ + +// Map a PR record to a badge tone for the state column. +function prBadge(pr: Record): BadgeTone { + if (pr.isDraft) return "warning"; + const s = String(pr.state ?? "").toUpperCase(); + if (s === "OPEN") return "info"; + if (s === "MERGED") return "success"; + return "neutral"; +} + +// Map an issue state string to a badge tone. +function issueBadge(state: string): BadgeTone { + const s = state.toUpperCase(); + if (s === "OPEN") return "info"; + return "neutral"; +} + +// Map a Dependabot severity string to a badge tone. +function severityBadge(sev: string): BadgeTone { + switch (sev.toUpperCase()) { + case "CRITICAL": + case "HIGH": + return "error"; + case "MEDIUM": + return "warning"; + default: + return "neutral"; + } +} + +// Build a TableBlock from ColumnSpec + records, then wrap it with a heading +// in a properly-derived StructuredContent (alternates computed from all blocks). +function makeStructuredTable( + objects: T[], + colSpecs: ColumnSpec[], + headingText: string, + tableOptions?: { sortable?: boolean; filterable?: boolean; readonly?: boolean }, +): ActionResultSuccess { + const columns = colSpecs.map(({ value: _v, ...col }) => col); + const rows: TableCell[][] = objects.map((obj) => + colSpecs.map((col) => col.value(obj)), + ); + const table: TableBlock = createTable(columns, rows, tableOptions); + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: headingText }, + table, + ]; + return { + historyText: headingText, + entities: [], + displayContent: createStructuredContent(blocks, { rawData: objects }), + }; +} + +// Build a heading + table StructuredContent for a list action. Returns +// undefined for action names that have no structured template. +// +// Exported for unit tests. +export function buildStructuredListResult( items: Record[], actionName: string, -): string | undefined { - if (items.length === 0) return "No results found."; + label: string, +): ActionResultSuccess | undefined { + const count = items.length; + const headingText = `${label} — ${count} result${count === 1 ? "" : "s"}`; - // Issues - if (actionName === "issueList" && "number" in items[0]) { - return items - .map((i) => { - const labels = Array.isArray(i.labels) - ? (i.labels as Record[]) - .map((l) => l.name) - .join(", ") - : ""; - const labelStr = labels ? ` \`${labels}\`` : ""; - return `- [#${i.number} ${i.title}](${i.url}) — ${i.state}${labelStr}`; - }) - .join("\n"); + if (count === 0) { + return { + historyText: headingText, + entities: [], + displayContent: createStructuredContent( + [ + { kind: "heading", level: 3, text: headingText }, + { kind: "text", text: "No results found." }, + ], + ), + }; } // Pull requests if (actionName === "prList" && "number" in items[0]) { - return items - .map((pr) => { - const status = pr.isDraft ? "DRAFT" : String(pr.state); - const branch = pr.headRefName ? ` \`${pr.headRefName}\`` : ""; - return `- [#${pr.number} ${pr.title}](${pr.url}) — ${status}${branch}`; - }) - .join("\n"); + type PrRecord = { + number: unknown; + title: unknown; + state: unknown; + isDraft: unknown; + headRefName: unknown; + url: unknown; + createdAt: unknown; + }; + const cols: ColumnSpec[] = [ + { + id: "number", + header: "#", + type: "link", + align: "right", + value: (pr) => ({ + text: String(pr.number ?? ""), + href: String(pr.url ?? ""), + }), + }, + { + id: "title", + header: "Title", + value: (pr) => String(pr.title ?? ""), + }, + { + id: "state", + header: "State", + type: "badge", + value: (pr): TableCell => { + const tone = prBadge(pr as Record); + const lbl = pr.isDraft + ? "Draft" + : String(pr.state ?? "").charAt(0).toUpperCase() + + String(pr.state ?? "").slice(1).toLowerCase(); + return { text: lbl, badge: tone }; + }, + }, + { + id: "branch", + header: "Branch", + type: "code", + value: (pr) => String(pr.headRefName ?? ""), + }, + { + id: "created", + header: "Created", + type: "date", + value: (pr) => { + const d = pr.createdAt + ? new Date(String(pr.createdAt)) + : null; + return d ? d.toLocaleDateString() : ""; + }, + }, + ]; + return makeStructuredTable( + items as unknown as PrRecord[], + cols, + headingText, + { sortable: true }, + ); + } + + // Issues + if (actionName === "issueList" && "number" in items[0]) { + type IssueRecord = { + number: unknown; + title: unknown; + state: unknown; + url: unknown; + createdAt: unknown; + labels: unknown; + }; + const cols: ColumnSpec[] = [ + { + id: "number", + header: "#", + type: "link", + align: "right", + value: (i) => ({ + text: String(i.number ?? ""), + href: String(i.url ?? ""), + }), + }, + { + id: "title", + header: "Title", + value: (i) => String(i.title ?? ""), + }, + { + id: "state", + header: "State", + type: "badge", + value: (i): TableCell => ({ + text: + String(i.state ?? "").charAt(0).toUpperCase() + + String(i.state ?? "").slice(1).toLowerCase(), + badge: issueBadge(String(i.state ?? "")), + }), + }, + { + id: "labels", + header: "Labels", + value: (i) => + Array.isArray(i.labels) + ? (i.labels as Record[]) + .map((l) => String(l.name ?? "")) + .filter(Boolean) + .join(", ") + : "", + }, + { + id: "created", + header: "Created", + type: "date", + value: (i) => { + const d = i.createdAt + ? new Date(String(i.createdAt)) + : null; + return d ? d.toLocaleDateString() : ""; + }, + }, + ]; + return makeStructuredTable( + items as unknown as IssueRecord[], + cols, + headingText, + { sortable: true }, + ); } // Issues assigned to the current user (gh search issues --assignee @me) if (actionName === "myAssignedIssues" && "number" in items[0]) { - return items - .map((it) => { - const repo = it.repository as - | Record - | undefined; - const repoFull = - (repo?.nameWithOwner as string | undefined) ?? - (repo?.name as string | undefined) ?? - ""; - const labels = Array.isArray(it.labels) - ? (it.labels as Record[]) - .map((l) => l.name) - .filter(Boolean) - .join(", ") - : ""; - const labelStr = labels ? ` _[${labels}]_` : ""; - const repoPrefix = repoFull ? `${repoFull} ` : ""; - return `- ${repoPrefix}[#${it.number} ${it.title}](${it.url})${labelStr}`; - }) - .join("\n"); + type AssignedIssue = { + number: unknown; + title: unknown; + url: unknown; + repository: unknown; + state: unknown; + updatedAt: unknown; + labels: unknown; + }; + const cols: ColumnSpec[] = [ + { + id: "repo", + header: "Repo", + value: (i) => { + const repo = i.repository as + | Record + | undefined; + return ( + (repo?.nameWithOwner as string | undefined) ?? + (repo?.name as string | undefined) ?? + "" + ); + }, + }, + { + id: "number", + header: "#", + type: "link", + align: "right", + value: (i) => ({ + text: String(i.number ?? ""), + href: String(i.url ?? ""), + }), + }, + { + id: "title", + header: "Title", + value: (i) => String(i.title ?? ""), + }, + { + id: "labels", + header: "Labels", + value: (i) => + Array.isArray(i.labels) + ? (i.labels as Record[]) + .map((l) => String(l.name ?? "")) + .filter(Boolean) + .join(", ") + : "", + }, + { + id: "updated", + header: "Updated", + type: "date", + value: (i) => { + const d = i.updatedAt + ? new Date(String(i.updatedAt)) + : null; + return d ? d.toLocaleDateString() : ""; + }, + }, + ]; + return makeStructuredTable( + items as unknown as AssignedIssue[], + cols, + headingText, + { sortable: true }, + ); } // Search repos if (actionName === "searchRepos" && "fullName" in items[0]) { - return items - .map((r) => { - const stars = - r.stargazersCount || r.stargazerCount - ? ` ⭐ ${r.stargazersCount ?? r.stargazerCount}` - : ""; - const desc = r.description ? ` — ${r.description}` : ""; - return `- [${r.fullName}](${r.url})${stars}${desc}`; - }) - .join("\n"); + type RepoRecord = { + fullName: unknown; + description: unknown; + stargazersCount: unknown; + url: unknown; + updatedAt: unknown; + }; + const cols: ColumnSpec[] = [ + { + id: "name", + header: "Repository", + type: "link", + value: (r) => ({ + text: String(r.fullName ?? ""), + href: String(r.url ?? ""), + }), + }, + { + id: "stars", + header: "Stars", + type: "number", + align: "right", + value: (r) => { + const n = Number(r.stargazersCount ?? 0); + return n ? String(n) : ""; + }, + }, + { + id: "description", + header: "Description", + value: (r) => String(r.description ?? ""), + }, + { + id: "updated", + header: "Updated", + type: "date", + value: (r) => { + const d = r.updatedAt + ? new Date(String(r.updatedAt)) + : null; + return d ? d.toLocaleDateString() : ""; + }, + }, + ]; + return makeStructuredTable( + items as unknown as RepoRecord[], + cols, + headingText, + { sortable: true }, + ); } return undefined; } +// Build a structured result for `gh repo view` (repoView action). +// +// Exported for unit tests. +export function buildStructuredRepoView( + data: Record, + label: string, +): ActionResultSuccess { + const pairs: KeyValuePair[] = []; + const push = (lbl: string, val: TableCell) => { + const text = + typeof val === "string" + ? val + : typeof val === "number" + ? String(val) + : val.text; + if (text) pairs.push({ label: lbl, value: val }); + }; + + const repoName = data.owner + ? `${formatValue(data.owner)}/${String(data.name ?? "")}` + : String(data.name ?? ""); + push("Repository", { text: repoName, href: String(data.url ?? "") }); + if (data.description) push("Description", String(data.description)); + push("Visibility", String(data.visibility ?? "")); + if (data.primaryLanguage) + push("Language", formatValue(data.primaryLanguage)); + push("Stars", String(data.stargazerCount ?? 0)); + push("Forks", String(data.forkCount ?? 0)); + if (data.watchers) push("Watchers", formatValue(data.watchers)); + if (data.defaultBranchRef) + push("Default branch", formatValue(data.defaultBranchRef)); + if (data.createdAt) { + const d = new Date(String(data.createdAt)); + push("Created", d.toLocaleDateString()); + } + if (data.updatedAt) { + const d = new Date(String(data.updatedAt)); + push("Updated", d.toLocaleDateString()); + } + + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: label }, + { kind: "keyValue", pairs }, + ]; + return { + historyText: label, + entities: [], + displayContent: createStructuredContent(blocks, { rawData: data }), + }; +} + +// Build a structured result for Dependabot alerts (security_advisory shape). +// +// Exported for unit tests. +export function buildStructuredDependabotResult( + arr: Record[], +): ActionResultSuccess { + const headerText = `🔒 ${arr.length} Dependabot alert${arr.length === 1 ? "" : "s"}`; + type AlertRecord = Record; + const cols: ColumnSpec[] = [ + { + id: "severity", + header: "Severity", + type: "badge", + value: (a): TableCell => { + const adv = a.security_advisory as + | Record + | undefined; + const sev = String(adv?.severity ?? "unknown").toUpperCase(); + return { text: sev, badge: severityBadge(sev) }; + }, + }, + { + id: "package", + header: "Package", + type: "code", + value: (a): TableCell => { + const dep = a.dependency as + | Record + | undefined; + const pkg = dep?.package as + | Record + | undefined; + return String(pkg?.name ?? "unknown"); + }, + }, + { + id: "advisory", + header: "Advisory", + type: "link", + value: (a): TableCell => { + const adv = a.security_advisory as + | Record + | undefined; + return { + text: String(adv?.summary ?? ""), + href: String(a.html_url ?? ""), + }; + }, + }, + ]; + return makeStructuredTable(arr, cols, headerText, { sortable: true }); +} + +// Build a structured result for contributor lists (login + contributions shape). +// +// Exported for unit tests. +export function buildStructuredContributorsResult( + arr: Record[], +): ActionResultSuccess { + const headerText = + arr.length === 1 ? "Top contributor" : `Top ${arr.length} contributors`; + const columns = [ + { id: "rank", header: "#", type: "number" as const, align: "right" as const }, + { id: "login", header: "Contributor", type: "link" as const }, + { + id: "contributions", + header: "Contributions", + type: "number" as const, + align: "right" as const, + }, + ]; + const rows: TableCell[][] = arr.map((u, i) => [ + String(i + 1), + { + text: String(u.login ?? ""), + href: `https://github.com/${String(u.login ?? "")}`, + }, + String(u.contributions ?? "0"), + ]); + const table: TableBlock = createTable(columns, rows, { sortable: true }); + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: headerText }, + table, + ]; + return { + historyText: headerText, + entities: [], + displayContent: createStructuredContent(blocks, { rawData: arr }), + }; +} + // Friendly success messages for mutation actions that return no output function getMutationSuccessMessage( action: TypeAgentAction, @@ -1382,11 +1806,13 @@ async function executeAction( // Array results: issues, PRs, search repos if (Array.isArray(data)) { - const rows = formatListResults(data, action.actionName); - if (rows) { - return createActionResultFromMarkdownDisplay( - `**${cmdLabel}** — ${data.length} result${data.length === 1 ? "" : "s"}\n\n${rows}`, - ); + const result = buildStructuredListResult( + data as Record[], + action.actionName, + cmdLabel, + ); + if (result) { + return result; } } @@ -1404,7 +1830,12 @@ async function executeAction( ); } - // Single object (e.g., repo view) + // Repo view — structured key-value block + if (action.actionName === "repoView") { + return buildStructuredRepoView(data, cmdLabel); + } + + // Single object fallback const lines = Object.entries(data) .map(([k, v]) => `- **${k}**: ${formatValue(v)}`) .join("\n"); @@ -1435,60 +1866,12 @@ async function executeAction( // Dependabot alerts if (arr.length > 0 && "security_advisory" in arr[0]) { - const rows = arr - .map((a) => { - const adv = a.security_advisory as Record< - string, - unknown - >; - const sev = String( - adv.severity ?? "unknown", - ).toUpperCase(); - const pkg = a.dependency - ? (a.dependency as Record) - .package - ? ( - ( - a.dependency as Record< - string, - unknown - > - ).package as Record - ).name - : "unknown" - : "unknown"; - const sevEmoji = - sev === "CRITICAL" - ? "🔴" - : sev === "HIGH" - ? "🟠" - : sev === "MEDIUM" - ? "🟡" - : "🟢"; - return `- ${sevEmoji} **${sev}** — \`${pkg}\` — [${adv.summary}](${a.html_url})`; - }) - .join("\n"); - const header = `🔒 **${arr.length} Dependabot alert${arr.length === 1 ? "" : "s"}**`; - return createActionResultFromMarkdownDisplay( - `${header}\n\n${rows}`, - ); + return buildStructuredDependabotResult(arr); } // Contributors if (arr.length > 0 && "login" in arr[0]) { - const rows = arr - .map( - (u, i) => - `${i + 1}. [**${u.login}**](https://github.com/${u.login}) — ${u.contributions} contributions`, - ) - .join("\n"); - const header = - arr.length === 1 - ? "Top contributor" - : `Top ${arr.length} contributors`; - return createActionResultFromMarkdownDisplay( - `**${header}**\n\n${rows}`, - ); + return buildStructuredContributorsResult(arr); } } catch { // Fall through to raw output diff --git a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts new file mode 100644 index 000000000..8e476d150 --- /dev/null +++ b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts @@ -0,0 +1,403 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Unit tests for the Phase-5 structured-content result builders in + * github-cliActionHandler. Each builder converts a raw `gh` JSON payload + * into an ActionResultSuccess with a StructuredContent displayContent that + * contains a heading + table (or keyValue) block. + * + * Tests run against compiled dist/ (jest-esm, same pattern as the rest of + * this package's tests). + */ + +import { + buildStructuredListResult, + buildStructuredRepoView, + buildStructuredDependabotResult, + buildStructuredContributorsResult, +} from "../src/github-cliActionHandler.js"; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +function heading(result: ReturnType) { + const content = result?.displayContent as any; + return content?.blocks?.[0]; +} + +function table(result: ReturnType) { + const content = result?.displayContent as any; + return content?.blocks?.[1]; +} + +function kvBlock(result: ReturnType) { + const content = result?.displayContent as any; + return content?.blocks?.[1]; +} + +// --------------------------------------------------------------------------- +// buildStructuredListResult — prList +// --------------------------------------------------------------------------- + +describe("buildStructuredListResult — prList", () => { + const prs = [ + { + number: 42, + title: "Fix the bug", + state: "OPEN", + isDraft: false, + headRefName: "fix/the-bug", + url: "https://github.com/owner/repo/pull/42", + createdAt: "2026-01-15T10:00:00Z", + }, + { + number: 99, + title: "Draft feature", + state: "OPEN", + isDraft: true, + headRefName: "feat/draft", + url: "https://github.com/owner/repo/pull/99", + createdAt: "2026-02-01T08:30:00Z", + }, + ]; + + test("returns an ActionResultSuccess for prList", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + expect(result).toBeDefined(); + }); + + test("heading block has correct text with count", () => { + const result = buildStructuredListResult(prs, "prList", "pr list"); + expect(heading(result)).toMatchObject({ + kind: "heading", + level: 3, + text: "pr list — 2 results", + }); + }); + + test("table block has expected columns", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const t = table(result); + expect(t.kind).toBe("table"); + expect(t.columns.map((c: any) => c.id)).toEqual([ + "number", + "title", + "state", + "branch", + "created", + ]); + }); + + test("open PR has info badge", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const t = table(result); + const stateCell = t.rows[0][2]; // first row, state column + expect(stateCell).toMatchObject({ badge: "info" }); + }); + + test("draft PR has warning badge", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const t = table(result); + const stateCell = t.rows[1][2]; // second row, state column + expect(stateCell).toMatchObject({ badge: "warning", text: "Draft" }); + }); + + test("number cell contains link", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const t = table(result); + const numCell = t.rows[0][0]; + expect(numCell).toMatchObject({ + text: "42", + href: "https://github.com/owner/repo/pull/42", + }); + }); + + test("table is sortable", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + expect(table(result).sortable).toBe(true); + }); + + test("rawData is set on displayContent", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + expect((result?.displayContent as any)?.rawData).toBe(prs); + }); + + test("alternates include markdown and text", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const content = result?.displayContent as any; + const types = content?.alternates?.map((a: any) => a.type); + expect(types).toContain("markdown"); + expect(types).toContain("text"); + }); + + test("markdown alternate contains heading and table headers", () => { + const result = buildStructuredListResult(prs, "prList", "prList"); + const content = result?.displayContent as any; + const mdAlt = content?.alternates?.find((a: any) => a.type === "markdown"); + expect(mdAlt?.content).toContain("prList — 2 results"); + expect(mdAlt?.content).toContain("| # |"); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredListResult — issueList +// --------------------------------------------------------------------------- + +describe("buildStructuredListResult — issueList", () => { + const issues = [ + { + number: 7, + title: "Memory leak", + state: "OPEN", + url: "https://github.com/o/r/issues/7", + createdAt: "2026-03-01T12:00:00Z", + labels: [{ name: "bug" }, { name: "performance" }], + }, + ]; + + test("returns structured result for issueList", () => { + const result = buildStructuredListResult(issues, "issueList", "issueList"); + expect(result).toBeDefined(); + expect(table(result).kind).toBe("table"); + }); + + test("labels cell joins label names", () => { + const result = buildStructuredListResult(issues, "issueList", "issueList"); + const t = table(result); + const labelsColIdx = t.columns.findIndex((c: any) => c.id === "labels"); + const labelsCell = t.rows[0][labelsColIdx]; + expect(labelsCell).toContain("bug"); + expect(labelsCell).toContain("performance"); + }); + + test("open issue gets info badge", () => { + const result = buildStructuredListResult(issues, "issueList", "issueList"); + const t = table(result); + const stateIdx = t.columns.findIndex((c: any) => c.id === "state"); + expect(t.rows[0][stateIdx]).toMatchObject({ badge: "info" }); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredListResult — empty result +// --------------------------------------------------------------------------- + +describe("buildStructuredListResult — empty array", () => { + test("returns a result with heading and 'no results' text", () => { + const result = buildStructuredListResult([], "prList", "PR list"); + expect(result).toBeDefined(); + const content = result?.displayContent as any; + expect(content.blocks[0]).toMatchObject({ kind: "heading", text: "PR list — 0 results" }); + expect(content.blocks[1]).toMatchObject({ kind: "text", text: "No results found." }); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredListResult — unknown action returns undefined +// --------------------------------------------------------------------------- + +describe("buildStructuredListResult — unknown action", () => { + test("returns undefined for unrecognised actionName", () => { + const result = buildStructuredListResult( + [{ foo: "bar" }], + "unknownAction", + "label", + ); + expect(result).toBeUndefined(); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredListResult — searchRepos +// --------------------------------------------------------------------------- + +describe("buildStructuredListResult — searchRepos", () => { + const repos = [ + { + fullName: "microsoft/TypeAgent", + description: "AI agent framework", + stargazersCount: 1200, + url: "https://github.com/microsoft/TypeAgent", + updatedAt: "2026-06-01T00:00:00Z", + }, + ]; + + test("returns structured result for searchRepos", () => { + const result = buildStructuredListResult(repos, "searchRepos", "search"); + expect(result).toBeDefined(); + }); + + test("name cell links to repo url", () => { + const result = buildStructuredListResult(repos, "searchRepos", "search"); + const t = table(result); + const nameIdx = t.columns.findIndex((c: any) => c.id === "name"); + expect(t.rows[0][nameIdx]).toMatchObject({ + text: "microsoft/TypeAgent", + href: "https://github.com/microsoft/TypeAgent", + }); + }); + + test("stars are formatted as number column", () => { + const result = buildStructuredListResult(repos, "searchRepos", "search"); + const t = table(result); + const starsIdx = t.columns.findIndex((c: any) => c.id === "stars"); + expect(t.columns[starsIdx].type).toBe("number"); + expect(t.rows[0][starsIdx]).toBe("1200"); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredRepoView +// --------------------------------------------------------------------------- + +describe("buildStructuredRepoView", () => { + const repoData = { + name: "TypeAgent", + owner: { login: "microsoft" }, + description: "Intelligent agents framework", + stargazerCount: 450, + forkCount: 30, + visibility: "public", + url: "https://github.com/microsoft/TypeAgent", + primaryLanguage: { name: "TypeScript" }, + watchers: { totalCount: 12 }, + defaultBranchRef: { name: "main" }, + createdAt: "2024-01-01T00:00:00Z", + updatedAt: "2026-07-01T00:00:00Z", + }; + + test("returns a defined result", () => { + const result = buildStructuredRepoView(repoData, "repo view"); + expect(result).toBeDefined(); + }); + + test("heading block has label", () => { + const result = buildStructuredRepoView(repoData, "TypeAgent repo"); + expect(heading(result as any)).toMatchObject({ + kind: "heading", + text: "TypeAgent repo", + }); + }); + + test("keyValue block has repo name as link", () => { + const result = buildStructuredRepoView(repoData, "label"); + const kv = kvBlock(result); + expect(kv.kind).toBe("keyValue"); + const repoPair = kv.pairs.find((p: any) => p.label === "Repository"); + expect(repoPair?.value).toMatchObject({ + text: "microsoft/TypeAgent", + href: "https://github.com/microsoft/TypeAgent", + }); + }); + + test("rawData is the original repoData object", () => { + const result = buildStructuredRepoView(repoData, "label"); + expect((result.displayContent as any).rawData).toBe(repoData); + }); + + test("alternates include markdown", () => { + const result = buildStructuredRepoView(repoData, "label"); + const content = result.displayContent as any; + const types = content?.alternates?.map((a: any) => a.type); + expect(types).toContain("markdown"); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredDependabotResult +// --------------------------------------------------------------------------- + +describe("buildStructuredDependabotResult", () => { + const alerts = [ + { + security_advisory: { severity: "HIGH", summary: "ReDoS in foo" }, + dependency: { package: { name: "foo" } }, + html_url: "https://github.com/advisor/GHSA-test", + }, + { + security_advisory: { severity: "MEDIUM", summary: "SSRF in bar" }, + dependency: { package: { name: "bar" } }, + html_url: "https://github.com/advisor/GHSA-test2", + }, + ]; + + test("returns defined result", () => { + expect(buildStructuredDependabotResult(alerts)).toBeDefined(); + }); + + test("heading reflects alert count", () => { + const result = buildStructuredDependabotResult(alerts); + expect(heading(result as any).text).toContain("2 Dependabot alerts"); + }); + + test("severity column uses badge type", () => { + const result = buildStructuredDependabotResult(alerts); + const t = table(result as any); + const sevIdx = t.columns.findIndex((c: any) => c.id === "severity"); + expect(t.columns[sevIdx].type).toBe("badge"); + expect(t.rows[0][sevIdx]).toMatchObject({ badge: "error" }); // HIGH + expect(t.rows[1][sevIdx]).toMatchObject({ badge: "warning" }); // MEDIUM + }); + + test("advisory cell links to html_url", () => { + const result = buildStructuredDependabotResult(alerts); + const t = table(result as any); + const advIdx = t.columns.findIndex((c: any) => c.id === "advisory"); + expect(t.rows[0][advIdx]).toMatchObject({ + text: "ReDoS in foo", + href: "https://github.com/advisor/GHSA-test", + }); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredContributorsResult +// --------------------------------------------------------------------------- + +describe("buildStructuredContributorsResult", () => { + const contributors = [ + { login: "alice", contributions: 500 }, + { login: "bob", contributions: 200 }, + ]; + + test("returns defined result", () => { + expect(buildStructuredContributorsResult(contributors)).toBeDefined(); + }); + + test("heading for multiple contributors says 'Top N contributors'", () => { + const result = buildStructuredContributorsResult(contributors); + expect(heading(result as any).text).toBe("Top 2 contributors"); + }); + + test("heading for single contributor", () => { + const result = buildStructuredContributorsResult([ + { login: "alice", contributions: 500 }, + ]); + expect(heading(result as any).text).toBe("Top contributor"); + }); + + test("rank column assigns 1-based index", () => { + const result = buildStructuredContributorsResult(contributors); + const t = table(result as any); + const rankIdx = t.columns.findIndex((c: any) => c.id === "rank"); + expect(t.rows[0][rankIdx]).toBe("1"); + expect(t.rows[1][rankIdx]).toBe("2"); + }); + + test("login cell links to github profile", () => { + const result = buildStructuredContributorsResult(contributors); + const t = table(result as any); + const loginIdx = t.columns.findIndex((c: any) => c.id === "login"); + expect(t.rows[0][loginIdx]).toMatchObject({ + text: "alice", + href: "https://github.com/alice", + }); + }); + + test("table is sortable", () => { + const result = buildStructuredContributorsResult(contributors); + expect(table(result as any).sortable).toBe(true); + }); +}); diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index d8a9d8457..e19eec0ac 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -86,11 +86,13 @@ function renderTableCell( } function renderTableBlock(block: TableBlock): string { - const { columns, rows, caption, sortable, readonly } = block; + const { columns, rows, caption, sortable, filterable, readonly } = block; const sortAttr = !readonly && sortable !== false ? ' data-sc-sortable="true"' : ""; + const filterAttr = + !readonly && filterable ? ' data-sc-filterable="true"' : ""; const parts: string[] = [ - `
    `, + `
    `, ]; if (caption) { parts.push(``); @@ -250,6 +252,135 @@ function renderStructuredContent(content: StructuredContent): string { return content.blocks.map(renderBlock).join("\n"); } +// --------------------------------------------------------------------------- +// Phase 4a — client-side sort + filter for sc-table elements +// --------------------------------------------------------------------------- + +/** + * Wire up sort buttons and filter inputs for every `.sc-table` found inside + * `root`. Called after innerHTML is written so the elements are live in the + * DOM. + */ +function attachTableInteractivity(root: HTMLElement): void { + root.querySelectorAll("table.sc-table").forEach( + (table) => { + const canSort = table.dataset.scSortable === "true"; + const canFilter = table.dataset.scFilterable === "true"; + if (!canSort && !canFilter) return; + + const tbody = + table.querySelector("tbody"); + if (!tbody) return; + + // Snapshot original row order so we can restore it on "none" sort. + const originalRows = Array.from( + tbody.querySelectorAll("tr"), + ); + originalRows.forEach( + (row, idx) => (row.dataset.scIdx = String(idx)), + ); + + // Per-table sort state. + let sortColId: string | null = null; + let sortDir: "asc" | "desc" | "none" = "none"; + + if (canSort) { + table + .querySelectorAll(".sc-sort-btn") + .forEach((btn) => { + btn.addEventListener("click", () => { + const colId = btn.dataset.scCol ?? ""; + // Cycle: none → asc → desc → none + if (sortColId !== colId) { + sortColId = colId; + sortDir = "asc"; + } else if (sortDir === "asc") { + sortDir = "desc"; + } else { + sortDir = "none"; + sortColId = null; + } + + // Update all sort-button icons in this table. + table + .querySelectorAll( + ".sc-sort-btn", + ) + .forEach((b) => { + if (b !== btn || sortDir === "none") { + b.textContent = "↕"; + b.dataset.scSortDir = "none"; + } else { + b.textContent = + sortDir === "asc" ? "↑" : "↓"; + b.dataset.scSortDir = sortDir; + } + }); + + const th = btn.closest("th"); + if (!th) return; + const colIdx = th.cellIndex; + + const rows = Array.from( + tbody.querySelectorAll( + "tr", + ), + ); + if (sortDir === "none") { + // Restore original order. + originalRows.forEach((row) => + tbody.appendChild(row), + ); + } else { + rows.sort((a, b) => { + const ca = + a.cells[colIdx]?.textContent?.trim() ?? + ""; + const cb = + b.cells[colIdx]?.textContent?.trim() ?? + ""; + const cmp = ca.localeCompare( + cb, + undefined, + { + numeric: true, + sensitivity: "base", + }, + ); + return sortDir === "asc" ? cmp : -cmp; + }); + rows.forEach((row) => tbody.appendChild(row)); + } + }); + }); + } + + if (canFilter) { + const wrap = table.closest(".sc-table-wrap"); + const input = document.createElement("input"); + input.type = "text"; + input.placeholder = "Filter rows…"; + input.className = "sc-filter-input"; + const container = wrap ?? table.parentElement; + if (container) { + container.insertBefore(input, table); + } + + input.addEventListener("input", () => { + const query = input.value.trim().toLowerCase(); + tbody + .querySelectorAll("tr") + .forEach((row) => { + const text = row.textContent?.toLowerCase() ?? ""; + row.style.display = + query && !text.includes(query) ? "none" : ""; + }); + }); + } + }, + ); +} + function textToHtml(text: string): string { const value = ansiUpTextToHtml.ansi_to_html(text); const line = value.replace(/\n/gm, "
    "); @@ -572,6 +703,9 @@ export function setContent( }); } }); + + // Phase 4a — wire sort + filter on any sc-table elements just added. + attachTableInteractivity(contentElm); } if (!speak) { diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index 4c8d69573..470050500 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1049,6 +1049,24 @@ table.sc-table tbody tr:nth-child(even) { opacity: 1; } +/* Filter input (Phase 4a) */ +.sc-filter-input { + background: var(--vscode-input-background, #fff); + border: 1px solid var(--vscode-input-border, #ccc); + border-radius: 3px; + color: var(--vscode-input-foreground, inherit); + display: block; + font-size: 0.85em; + margin-bottom: 4px; + padding: 3px 7px; + width: 100%; + box-sizing: border-box; +} + +.sc-filter-input::placeholder { + color: var(--vscode-input-placeholderForeground, #999); +} + /* --- Badges -------------------------------------------------------------- */ .sc-badge { From 0f6fa9bbf210233a8e62201e5b24ac8b99ae2f7f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:31:44 +0000 Subject: [PATCH 07/36] Fix code review issues: show 0 stars, clarify null guard comment --- .../agents/github-cli/src/github-cliActionHandler.ts | 5 +---- .../test/githubCliStructuredResults.spec.ts | 12 ++++++++++++ ts/packages/chat-ui/src/setContent.ts | 2 ++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index 866a2cee7..f70b3c731 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -1358,10 +1358,7 @@ export function buildStructuredListResult( header: "Stars", type: "number", align: "right", - value: (r) => { - const n = Number(r.stargazersCount ?? 0); - return n ? String(n) : ""; - }, + value: (r) => String(Number(r.stargazersCount ?? 0)), }, { id: "description", diff --git a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts index 8e476d150..42779e289 100644 --- a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts +++ b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts @@ -246,6 +246,18 @@ describe("buildStructuredListResult — searchRepos", () => { expect(t.columns[starsIdx].type).toBe("number"); expect(t.rows[0][starsIdx]).toBe("1200"); }); + + test("zero stars renders as '0' not empty", () => { + const zeroStarRepo = [{ ...repos[0], stargazersCount: 0 }]; + const result = buildStructuredListResult( + zeroStarRepo, + "searchRepos", + "search", + ); + const t = table(result); + const starsIdx = t.columns.findIndex((c: any) => c.id === "stars"); + expect(t.rows[0][starsIdx]).toBe("0"); + }); }); // --------------------------------------------------------------------------- diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index e19eec0ac..7b9a32ea8 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -361,6 +361,8 @@ function attachTableInteractivity(root: HTMLElement): void { input.type = "text"; input.placeholder = "Filter rows…"; input.className = "sc-filter-input"; + // `container` is null only if the table isn't attached to the + // DOM yet; the `if` guard below handles that gracefully. const container = wrap ?? table.parentElement; if (container) { container.insertBefore(input, table); From 44c03cd5e2c280e3e63b15d2995eee5711061e46 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:32:41 +0000 Subject: [PATCH 08/36] Minor cleanup: simplify stars coercion, clarify filter-input comment --- ts/packages/agents/github-cli/src/github-cliActionHandler.ts | 2 +- ts/packages/chat-ui/src/setContent.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index f70b3c731..f8d34536e 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -1358,7 +1358,7 @@ export function buildStructuredListResult( header: "Stars", type: "number", align: "right", - value: (r) => String(Number(r.stargazersCount ?? 0)), + value: (r) => String(r.stargazersCount ?? 0), }, { id: "description", diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 7b9a32ea8..5127d09b9 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -361,8 +361,8 @@ function attachTableInteractivity(root: HTMLElement): void { input.type = "text"; input.placeholder = "Filter rows…"; input.className = "sc-filter-input"; - // `container` is null only if the table isn't attached to the - // DOM yet; the `if` guard below handles that gracefully. + // Insert the filter input before the table (or its wrapper). + // `container` is null if neither a wrapper nor a parent exists. const container = wrap ?? table.parentElement; if (container) { container.insertBefore(input, table); From 4425ea97e7526825ad5740363f70eabb1d74a119 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 17:57:03 +0000 Subject: [PATCH 09/36] Phase 6: commandExecutor forwards rawData as MCP structuredContent; taskflow reads rawData directly --- ts/docs/plans/structured-output/STATUS.md | 6 +-- .../taskflow/src/script/taskFlowScriptApi.mts | 12 +++++- .../commandExecutor/src/commandServer.ts | 37 ++++++++++++++++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 04e52965f..27fb2221c 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-12 — Phase 4 (sort/filter interactivity) + Phase 5 (github-cli adopter) implemented._ +_Last updated: 2026-07-13 — Phase 6 (programmatic "or otherwise") implemented._ ## Progress by phase @@ -54,8 +54,8 @@ _Last updated: 2026-07-12 — Phase 4 (sort/filter interactivity) + Phase 5 (git | Item | Description | Status | | ---- | ----------- | ------ | -| 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | todo | -| 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | todo | +| 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | done | +| 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | done | ## Open questions diff --git a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts index 374802a36..7ef9c0116 100644 --- a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts +++ b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts @@ -152,7 +152,17 @@ export class TaskFlowScriptAPIImpl implements TaskFlowScriptAPI { ); const text = extractText(result); - const data = tryParseJson(text) ?? text; + // Use rawData from StructuredContent when available; otherwise fall + // back to parsing the text (the pre-Phase-6 path). + const dc = result.displayContent; + const rawData = + dc !== undefined && + typeof dc === "object" && + !Array.isArray(dc) && + (dc as { type?: string }).type === "structured" + ? (dc as { rawData?: unknown }).rawData + : undefined; + const data = rawData !== undefined ? rawData : tryParseJson(text) ?? text; if (result.error) { return { text, data, error: result.error }; diff --git a/ts/packages/commandExecutor/src/commandServer.ts b/ts/packages/commandExecutor/src/commandServer.ts index c9051fa6b..d98a98472 100644 --- a/ts/packages/commandExecutor/src/commandServer.ts +++ b/ts/packages/commandExecutor/src/commandServer.ts @@ -103,8 +103,15 @@ type ExecuteActionRequest = { // ── Utilities ───────────────────────────────────────────────────────────────── -function toolResult(result: string): CallToolResult { - return { content: [{ type: "text", text: result }] }; +function toolResult(result: string, rawData?: unknown): CallToolResult { + const out: CallToolResult = { content: [{ type: "text", text: result }] }; + if (rawData !== undefined) { + // MCP structuredContent must be Record; wrap arrays. + out.structuredContent = Array.isArray(rawData) + ? ({ data: rawData } as Record) + : (rawData as Record); + } + return out; } function stripAnsi(text: string): string { @@ -174,7 +181,7 @@ class Logger { function createMcpClientIO( logger: Logger, - responseCollector: { messages: string[] }, + responseCollector: { messages: string[]; rawData?: unknown }, getConfirmedFlag: () => boolean, ): ClientIO { return { @@ -201,6 +208,9 @@ function createMcpClientIO( responseCollector.messages.push( stripAnsi(String(getStructuredFallback(msg, "text"))), ); + if (msg.rawData !== undefined) { + responseCollector.rawData = msg.rawData; + } } else if (typeof msg === "object" && msg && "content" in msg) { responseCollector.messages.push( stripAnsi(String(msg.content)), @@ -232,6 +242,9 @@ function createMcpClientIO( responseCollector.messages.push( stripAnsi(String(getStructuredFallback(msg, "text"))), ); + if (msg.rawData !== undefined) { + responseCollector.rawData = msg.rawData; + } } else if (typeof msg === "object" && msg && "content" in msg) { responseCollector.messages.push( stripAnsi(String(msg.content)), @@ -329,7 +342,9 @@ export class CommandServer { private isConnecting: boolean = false; private reconnectDelayMs: number = 5000; private logger: Logger; - private responseCollector: { messages: string[] } = { messages: [] }; + private responseCollector: { messages: string[]; rawData?: unknown } = { + messages: [], + }; private currentRequestConfirmed: boolean = false; private config: ResolvedAgentServerConfig; @@ -631,6 +646,7 @@ export class CommandServer { if (request.cacheCheck) { try { this.responseCollector.messages = []; + this.responseCollector.rawData = undefined; const cacheResult = await this.dispatcher.checkCache( request.request, ); @@ -642,6 +658,7 @@ export class CommandServer { this.responseCollector.messages.join("\n\n"); return toolResult( `CACHE_HIT: ${await processHtmlContent(response)}`, + this.responseCollector.rawData, ); } return toolResult( @@ -661,6 +678,7 @@ export class CommandServer { try { this.responseCollector.messages = []; + this.responseCollector.rawData = undefined; const result = await awaitCommand(this.dispatcher, request.request); if (result?.lastError) { @@ -671,7 +689,10 @@ export class CommandServer { if (this.responseCollector.messages.length > 0) { const response = this.responseCollector.messages.join("\n\n"); - return toolResult(await processHtmlContent(response)); + return toolResult( + await processHtmlContent(response), + this.responseCollector.rawData, + ); } return toolResult(`Successfully executed: ${request.request}`); } catch (error) { @@ -905,6 +926,7 @@ export class CommandServer { this.logger.log(`Dispatching: ${actionCommand}`); this.responseCollector.messages = []; + this.responseCollector.rawData = undefined; try { const result = await awaitCommand(this.dispatcher, actionCommand); @@ -913,7 +935,10 @@ export class CommandServer { } if (this.responseCollector.messages.length > 0) { const response = this.responseCollector.messages.join("\n\n"); - return toolResult(await processHtmlContent(response)); + return toolResult( + await processHtmlContent(response), + this.responseCollector.rawData, + ); } return toolResult( `✓ Action ${request.actionName} executed successfully`, From e7dc761558f5b226c65e79a4095549d5e05a189c Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 13:47:44 -0700 Subject: [PATCH 10/36] Fixed build issues --- .../agents/browser/src/agent/browserActionHandler.mts | 1 + .../agents/taskflow/src/script/taskFlowScriptApi.mts | 5 ++++- ts/packages/chat-ui/src/chatPanel.ts | 8 +++++++- ts/packages/chat-ui/styles/chat.css | 3 ++- .../dispatcher/dispatcher/src/context/interactiveIO.ts | 1 + ts/packages/dispatcher/dispatcher/src/helpers/console.ts | 9 ++++++++- 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/ts/packages/agents/browser/src/agent/browserActionHandler.mts b/ts/packages/agents/browser/src/agent/browserActionHandler.mts index a58f68f2f..fec3f13e8 100644 --- a/ts/packages/agents/browser/src/agent/browserActionHandler.mts +++ b/ts/packages/agents/browser/src/agent/browserActionHandler.mts @@ -2874,6 +2874,7 @@ export async function handleWebsiteLibraryStats( responseText = statsResult.displayContent.join("\n"); } else if ( typeof statsResult.displayContent === "object" && + statsResult.displayContent.type !== "structured" && statsResult.displayContent.content ) { // Handle DisplayMessage type diff --git a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts index 7ef9c0116..0f20b9848 100644 --- a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts +++ b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts @@ -154,7 +154,10 @@ export class TaskFlowScriptAPIImpl implements TaskFlowScriptAPI { const text = extractText(result); // Use rawData from StructuredContent when available; otherwise fall // back to parsing the text (the pre-Phase-6 path). - const dc = result.displayContent; + const dc = + "displayContent" in result + ? result.displayContent + : undefined; const rawData = dc !== undefined && typeof dc === "object" && diff --git a/ts/packages/chat-ui/src/chatPanel.ts b/ts/packages/chat-ui/src/chatPanel.ts index 046e544f0..6b71bd0dd 100644 --- a/ts/packages/chat-ui/src/chatPanel.ts +++ b/ts/packages/chat-ui/src/chatPanel.ts @@ -4910,11 +4910,13 @@ class AgentMessageContainer { text = content; } else if ( !Array.isArray(content) && + content.type !== "structured" && typeof content.content === "string" ) { text = content.content; } else if ( !Array.isArray(content) && + content.type !== "structured" && Array.isArray(content.content) && content.content.length > 0 && typeof content.content[0] === "string" @@ -4950,7 +4952,11 @@ class AgentMessageContainer { const summaryText = originalLines.slice(0, jsonStart).join("\n"); const detailsText = originalLines.slice(jsonStart).join("\n"); - if (typeof content === "object" && !Array.isArray(content)) { + if ( + typeof content === "object" && + !Array.isArray(content) && + content.type !== "structured" + ) { return { summary: { ...content, content: summaryText }, details: { ...content, content: detailsText, kind: undefined }, diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index 470050500..dd7499032 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1016,7 +1016,8 @@ table.sc-table td { } table.sc-table thead th { - background: var(--vscode-editor-background, #f5f5f5); + background: var(--vscode-keybindingTable-headerBackground, var(--vscode-editor-background, #f5f5f5)); + color: var(--vscode-foreground, #e0e0e0); font-weight: 600; white-space: nowrap; } diff --git a/ts/packages/dispatcher/dispatcher/src/context/interactiveIO.ts b/ts/packages/dispatcher/dispatcher/src/context/interactiveIO.ts index 738f94466..0b4affaa5 100644 --- a/ts/packages/dispatcher/dispatcher/src/context/interactiveIO.ts +++ b/ts/packages/dispatcher/dispatcher/src/context/interactiveIO.ts @@ -43,6 +43,7 @@ export function makeClientIOMessage( if ( typeof message === "object" && !Array.isArray(message) && + message.type !== "structured" && message.kind === "error" ) { const commandResult = getCommandResult(context); diff --git a/ts/packages/dispatcher/dispatcher/src/helpers/console.ts b/ts/packages/dispatcher/dispatcher/src/helpers/console.ts index 3e72a484c..415274b31 100644 --- a/ts/packages/dispatcher/dispatcher/src/helpers/console.ts +++ b/ts/packages/dispatcher/dispatcher/src/helpers/console.ts @@ -7,7 +7,11 @@ import { DisplayContent, MessageContent, } from "@typeagent/agent-sdk"; -import { getContentForType } from "@typeagent/agent-sdk/helpers/display"; +import { + getContentForType, + getStructuredFallback, + isStructuredContent, +} from "@typeagent/agent-sdk/helpers/display"; import type { RequestId, ClientIO, @@ -82,6 +86,9 @@ function createConsoleClientIO( let message: MessageContent; if (typeof content === "string" || Array.isArray(content)) { message = content; + } else if (isStructuredContent(content)) { + // Console gets the text fallback; no interactive rendering. + message = getStructuredFallback(content, "text"); } else { // Console prefers text alternates when available const textContent = getContentForType(content, "text"); From 1538075f510d4166b77448753a70967a94807216 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 13:59:49 -0700 Subject: [PATCH 11/36] fixed for "list all the issues in this repo" --- ts/packages/agents/powershell/samples/listFiles.recipe.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/packages/agents/powershell/samples/listFiles.recipe.json b/ts/packages/agents/powershell/samples/listFiles.recipe.json index c2372f0b7..34edb0e83 100644 --- a/ts/packages/agents/powershell/samples/listFiles.recipe.json +++ b/ts/packages/agents/powershell/samples/listFiles.recipe.json @@ -50,7 +50,7 @@ "examples": ["show me the files in documents", "show files"] }, { - "pattern": "list (my)? $(path:wildcard)", + "pattern": "list my $(path:wildcard)", "isAlias": false, "examples": ["list my downloads", "list my pictures", "list my documents"] }, From 78c212a5fc5891b5468668da900d8b3c28d664da Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 14:11:41 -0700 Subject: [PATCH 12/36] fix for "list all the issues in this repo" --- ts/packages/agents/github-cli/src/github-cliSchema.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/packages/agents/github-cli/src/github-cliSchema.ts b/ts/packages/agents/github-cli/src/github-cliSchema.ts index 690ba9f5b..bc8eb41d9 100644 --- a/ts/packages/agents/github-cli/src/github-cliSchema.ts +++ b/ts/packages/agents/github-cli/src/github-cliSchema.ts @@ -207,6 +207,7 @@ export type IssueReopenAction = { export type IssueListAction = { actionName: "issueList"; parameters: { + // owner/repo. Omitting this defaults to the current repository. repo?: string; state?: string; From 0656dcc3c8e7e5ec252197d6058802fa5c9c0864 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 14:15:27 -0700 Subject: [PATCH 13/36] fixed light theme now --- ts/packages/chat-ui/styles/chat.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index dd7499032..4290613a2 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1016,8 +1016,8 @@ table.sc-table td { } table.sc-table thead th { - background: var(--vscode-keybindingTable-headerBackground, var(--vscode-editor-background, #f5f5f5)); - color: var(--vscode-foreground, #e0e0e0); + background: var(--chat-conversation-list-hover-background, rgba(0, 0, 0, 0.06)); + color: var(--chat-conversation-foreground, #1f1f1f); font-weight: 600; white-space: nowrap; } From 5f914cf952fa8589e2225dfbb2892ef134206801 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 15:31:46 -0700 Subject: [PATCH 14/36] fully structure outputtted the github cli --- ts/docs/plans/structured-output/PLAN.md | 69 ++++++ ts/docs/plans/structured-output/STATUS.md | 34 ++- .../github-cli/src/github-cliActionHandler.ts | 204 ++++++++++++++---- .../test/githubCliStructuredResults.spec.ts | 156 ++++++++++++++ 4 files changed, 417 insertions(+), 46 deletions(-) diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index 5db63fafc..c06213745 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -330,6 +330,27 @@ Example — the `prList` table: an `#id` **link** column → `url`, a **text** title column, a **badge** state column (`DRAFT`/`OPEN` colored by tone), a **code** branch column; `sortable: true`. +**Status: complete.** All display-producing paths now emit +`StructuredContent`: + +- List actions (`prList`, `issueList`, `myAssignedIssues`, `searchRepos`) + → `buildStructuredListResult` (heading + interactive table). +- `repoView` → `buildStructuredRepoView` (heading + `keyValue`). +- Dependabot alerts → `buildStructuredDependabotResult` (badge severity + table). +- Contributors → `buildStructuredContributorsResult` (ranked table). +- Single `prView` / `issueView` → `buildStructuredPrView` / + `buildStructuredIssueView` (heading + `keyValue` metadata + optional + body text block). +- Focused field answers (stars / forks / language / watchers / + description) → `buildStructuredField` (heading + single `keyValue` + pair + natural-language summary; `rawData` carries `{ repo, field, + value }`). + +Remaining markdown/text paths are intentional: mutation/create success +messages, `statusPrint`, and the raw-output fallback carry no structured +data. `githubCliStructuredResults.spec.ts` covers all builders. + ### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* - `packages/commandExecutor/src/commandServer.ts` forwards `rawData` as @@ -339,6 +360,54 @@ by tone), a **code** branch column; `sortable: true`. to read `rawData` directly, dropping the `extractText` + `tryParseJson` workaround. +### Phase 7 — Broader agent rollout *(after 5; per-agent, parallelizable)* + +`github-cli` is the reference adopter, but every list-, table-, or +record-shaped agent result throws away structure today. Convert the rest +in the order below. The order is driven by (a) how naturally the output +maps to blocks, (b) user-facing value, and (c) conversion cost. Each +agent follows the `github-cli` template: emit `StructuredContent` via +`createStructuredContent` / `createTable` / `fromRecords` with `rawData`, +keep the derived markdown/text fallback at parity, and update the +handler's unit tests. + +Agents already committed to custom HTML/iframe or a WebSocket/RPC bridge +(`image`, `video`, `settings`, `chat`, `code`, `visualStudio`, +`browser`, `markdown`, `montage`, `turtle`, `player`, `playerLocal`) are +**out of scope** for v1 — they render their own UI and don't flow through +the block-document fallback path. Short status/confirmation agents +(`timer`, `windowsClock`, `greeting`, `desktop`, `vampire`, +`androidMobile`, `powershell`, `utility`, `studio`) are **low value** and +deferred until a clear need appears. + +**Wave A — high fit (clear list/table/record output):** + +| # | Agent | Shape today | Target blocks | +| --- | --- | --- | --- | +| 1 | `list` | markdown bullet lists | `heading` + `list` | +| 2 | `calendar` | HTML event views (`appendDisplay`) | `heading` + `table` (agenda) + `card`/`keyValue` (event detail) | +| 3 | `email` | HTML message lists + threads | `heading` + `table` (inbox/list) + `keyValue` (message detail) | +| 4 | `weather` | text forecast | `keyValue` (current) + `table` (multi-day forecast) | +| 5 | `ipconfig` | markdown key/values | `heading` + `keyValue` (per-adapter sections) | + +**Wave B — medium fit (structured data mixed with text):** + +| # | Agent | Shape today | Target blocks | +| --- | --- | --- | --- | +| 6 | `discord` | text channel/message lists | `heading` + `list`/`table` | +| 7 | `taskflow` | text task listings | `table` (name / description / usage) | +| 8 | `onboarding` | markdown wizard status | `heading` + `keyValue` (phase status) | +| 9 | `screencapture` | image + markdown metadata | `image` + `heading`/`keyValue` | +| 10 | `osNotifications` | streamed notification log | `list`/`card` (event stream) | + +**Out of scope (v1):** `image`, `video`, `settings`, `chat`, `code`, +`visualStudio`, `browser`, `markdown`, `montage`, `turtle`, `player`, +`playerLocal` (custom UI / RPC bridge). + +**Deferred (low value):** `timer`, `windowsClock`, `greeting`, +`desktop`, `vampire`, `androidMobile`, `powershell`, `utility`, `studio` +(short text/status confirmations). + ## Verification - `pnpm --filter agent-sdk test` + `pnpm run build agent-sdk` — diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 27fb2221c..3def464ff 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-13 — Phase 6 (programmatic "or otherwise") implemented._ +_Last updated: 2026-07-13 — github-cli fully converted (single views + field answers); Phase 7 agent rollout order defined._ ## Progress by phase @@ -49,6 +49,8 @@ _Last updated: 2026-07-13 — Phase 6 (programmatic "or otherwise") implemented. | 5b | `dependabotAlerts` + contributors → table blocks | done | | 5c | `repoView` → keyValue block | done | | 5d | Update handler unit tests | done | +| 5e | `prView` / `issueView` → heading + keyValue + body text block | done | +| 5f | Focused field answers → `buildStructuredField` (keyValue + rawData) | done | ### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* @@ -57,6 +59,36 @@ _Last updated: 2026-07-13 — Phase 6 (programmatic "or otherwise") implemented. | 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | done | | 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | done | +### Phase 7 — Broader agent rollout *(after 5; per-agent)* + +Wave A — high fit: + +| Item | Agent | Target blocks | Status | +| ---- | ----- | ------------- | ------ | +| 7a | `list` | heading + list | not started | +| 7b | `calendar` | table (agenda) + card/keyValue (detail) | not started | +| 7c | `email` | table (list) + keyValue (message) | not started | +| 7d | `weather` | keyValue (current) + table (forecast) | not started | +| 7e | `ipconfig` | heading + keyValue (per-adapter) | not started | + +Wave B — medium fit: + +| Item | Agent | Target blocks | Status | +| ---- | ----- | ------------- | ------ | +| 7f | `discord` | heading + list/table | not started | +| 7g | `taskflow` | table (name/description/usage) | not started | +| 7h | `onboarding` | heading + keyValue (phase status) | not started | +| 7i | `screencapture` | image + heading/keyValue | not started | +| 7j | `osNotifications` | list/card (event stream) | not started | + +Out of scope (v1, custom UI / RPC bridge): `image`, `video`, `settings`, +`chat`, `code`, `visualStudio`, `browser`, `markdown`, `montage`, +`turtle`, `player`, `playerLocal`. + +Deferred (low value, short text/status): `timer`, `windowsClock`, +`greeting`, `desktop`, `vampire`, `androidMobile`, `powershell`, +`utility`, `studio`. + ## Open questions | # | Question | Resolution | diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index f8d34536e..2c75bd712 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -888,6 +888,57 @@ function distillRepoField( } } +// Build a focused structured answer for a specific repo field. Wraps the +// natural-language summary as a single-pair keyValue block plus a rawData +// payload carrying the raw field value. Returns undefined for unknown fields. +// +// Exported for unit tests. +export function buildStructuredField( + field: string, + data: Record, + repo: string, +): ActionResultSuccess | undefined { + const summary = distillRepoField(field, data, repo); + if (summary === undefined) { + return undefined; + } + const label = repo || `${formatValue(data.owner)}/${String(data.name ?? "")}`; + const fieldLabels: Record = { + stars: "Stars", + forks: "Forks", + language: "Language", + watchers: "Watchers", + description: "Description", + }; + const rawValues: Record = { + stars: data.stargazerCount, + forks: data.forkCount, + language: formatValue(data.primaryLanguage), + watchers: formatValue(data.watchers), + description: data.description, + }; + const value = rawValues[field]; + const pair: KeyValuePair = { + label: fieldLabels[field] ?? field, + value: + typeof value === "number" + ? value + : String(value ?? ""), + }; + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: label }, + { kind: "keyValue", pairs: [pair] }, + { kind: "text", text: summary, format: "markdown" }, + ]; + return { + historyText: summary, + entities: [], + displayContent: createStructuredContent(blocks, { + rawData: { repo: label, field, value }, + }), + }; +} + // Format gh status output — parse the │-table into clean markdown sections // code-complexity-allow: sequential gh status table parser; many format branches function formatStatusOutput(raw: string): string { @@ -984,13 +1035,20 @@ function formatStatusOutput(raw: string): string { return result.join("\n"); } -// Format a single issue view from JSON into rich markdown -function formatIssueView(data: Record): string { +// Build a single-issue structured view (issueView action). Renders a heading, +// a keyValue metadata block, and an optional truncated body text block, plus a +// rawData payload carrying the full gh JSON. +// +// Exported for unit tests. +export function buildStructuredIssueView( + data: Record, +): ActionResultSuccess { const author = data.author ? formatValue(data.author) : "unknown"; const labels = Array.isArray(data.labels) ? (data.labels as Record[]) - .map((l) => `\`${l.name}\``) - .join(" ") + .map((l) => String(l.name ?? "")) + .filter(Boolean) + .join(", ") : ""; const assignees = Array.isArray(data.assignees) ? (data.assignees as Record[]) @@ -1000,50 +1058,110 @@ function formatIssueView(data: Record): string { const commentCount = Array.isArray(data.comments) ? data.comments.length : (data.comments ?? 0); - const body = data.body ? String(data.body).slice(0, 1000) : ""; - const bodySection = body - ? `\n\n---\n\n${body}${String(data.body).length > 1000 ? "\n\n*…truncated*" : ""}` - : ""; - let header = `### [#${data.number} ${data.title}](${data.url})\n\n`; - header += `**State:** ${data.state}`; - header += ` · **Author:** ${author}`; - if (labels) header += ` · **Labels:** ${labels}`; - if (assignees) header += `\n**Assignees:** ${assignees}`; - header += ` · **Comments:** ${commentCount}`; - header += ` · **Created:** ${String(data.createdAt).slice(0, 10)}`; + const pairs: KeyValuePair[] = []; + pairs.push({ + label: "State", + value: { + text: String(data.state ?? ""), + badge: issueBadge(String(data.state ?? "")), + }, + }); + pairs.push({ label: "Author", value: author }); + if (labels) pairs.push({ label: "Labels", value: labels }); + if (assignees) pairs.push({ label: "Assignees", value: assignees }); + pairs.push({ label: "Comments", value: Number(commentCount) }); + if (data.createdAt) + pairs.push({ label: "Created", value: String(data.createdAt).slice(0, 10) }); if (data.closedAt) - header += ` · **Closed:** ${String(data.closedAt).slice(0, 10)}`; + pairs.push({ label: "Closed", value: String(data.closedAt).slice(0, 10) }); + if (data.url) + pairs.push({ label: "Link", value: { text: String(data.url), href: String(data.url) } }); - return header + bodySection; + const headingText = `#${data.number} ${data.title}`; + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: headingText }, + { kind: "keyValue", pairs }, + ]; + const body = data.body ? String(data.body) : ""; + if (body) { + blocks.push({ kind: "divider" }); + blocks.push({ + kind: "text", + text: + body.slice(0, 1000) + + (body.length > 1000 ? "\n\n*…truncated*" : ""), + format: "markdown", + }); + } + return { + historyText: headingText, + entities: [], + displayContent: createStructuredContent(blocks, { rawData: data }), + }; } -// Format a single PR view from JSON into rich markdown -function formatPrView(data: Record): string { +// Build a single-PR structured view (prView action). Renders a heading, a +// keyValue metadata block, and an optional truncated body text block, plus a +// rawData payload carrying the full gh JSON. +// +// Exported for unit tests. +export function buildStructuredPrView( + data: Record, +): ActionResultSuccess { const author = data.author ? formatValue(data.author) : "unknown"; const labels = Array.isArray(data.labels) ? (data.labels as Record[]) - .map((l) => `\`${l.name}\``) - .join(" ") - : ""; - const status = data.isDraft ? "DRAFT" : String(data.state); - const body = data.body ? String(data.body).slice(0, 1000) : ""; - const bodySection = body - ? `\n\n---\n\n${body}${String(data.body).length > 1000 ? "\n\n*…truncated*" : ""}` + .map((l) => String(l.name ?? "")) + .filter(Boolean) + .join(", ") : ""; + const isDraft = Boolean(data.isDraft); + const statusLabel = isDraft ? "Draft" : String(data.state ?? ""); + const statusTone: BadgeTone = isDraft + ? "warning" + : prBadge(data as Record); - let header = `### [#${data.number} ${data.title}](${data.url})\n\n`; - header += `**State:** ${status}`; - header += ` · **Author:** ${author}`; + const pairs: KeyValuePair[] = []; + pairs.push({ label: "State", value: { text: statusLabel, badge: statusTone } }); + pairs.push({ label: "Author", value: author }); if (data.headRefName) - header += ` · **Branch:** \`${data.headRefName}\` → \`${data.baseRefName}\``; - if (labels) header += ` · **Labels:** ${labels}`; - if (data.additions !== undefined) { - header += `\n**Changes:** +${data.additions} −${data.deletions} across ${data.changedFiles} files`; - } - header += ` · **Created:** ${String(data.createdAt).slice(0, 10)}`; + pairs.push({ + label: "Branch", + value: `${String(data.headRefName)} → ${String(data.baseRefName ?? "")}`, + }); + if (labels) pairs.push({ label: "Labels", value: labels }); + if (data.additions !== undefined) + pairs.push({ + label: "Changes", + value: `+${data.additions} −${data.deletions} across ${data.changedFiles} files`, + }); + if (data.createdAt) + pairs.push({ label: "Created", value: String(data.createdAt).slice(0, 10) }); + if (data.url) + pairs.push({ label: "Link", value: { text: String(data.url), href: String(data.url) } }); - return header + bodySection; + const headingText = `#${data.number} ${data.title}`; + const blocks: StructuredBlock[] = [ + { kind: "heading", level: 3, text: headingText }, + { kind: "keyValue", pairs }, + ]; + const body = data.body ? String(data.body) : ""; + if (body) { + blocks.push({ kind: "divider" }); + blocks.push({ + kind: "text", + text: + body.slice(0, 1000) + + (body.length > 1000 ? "\n\n*…truncated*" : ""), + format: "markdown", + }); + } + return { + historyText: headingText, + entities: [], + displayContent: createStructuredContent(blocks, { rawData: data }), + }; } // ============================================================================ @@ -1791,13 +1909,13 @@ async function executeAction( // If a specific field was requested, return a focused answer if (p.field) { - const answer = distillRepoField( + const result = buildStructuredField( String(p.field), data, String(p.repo ?? data.name ?? ""), ); - if (answer) { - return createActionResultFromMarkdownDisplay(answer); + if (result) { + return result; } } @@ -1815,16 +1933,12 @@ async function executeAction( // Single issue view — rich formatted output if (action.actionName === "issueView" && "number" in data) { - return createActionResultFromMarkdownDisplay( - formatIssueView(data), - ); + return buildStructuredIssueView(data); } // Single PR view — rich formatted output if (action.actionName === "prView" && "number" in data) { - return createActionResultFromMarkdownDisplay( - formatPrView(data), - ); + return buildStructuredPrView(data); } // Repo view — structured key-value block diff --git a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts index 42779e289..b22cee2e4 100644 --- a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts +++ b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts @@ -16,6 +16,9 @@ import { buildStructuredRepoView, buildStructuredDependabotResult, buildStructuredContributorsResult, + buildStructuredPrView, + buildStructuredIssueView, + buildStructuredField, } from "../src/github-cliActionHandler.js"; // --------------------------------------------------------------------------- @@ -413,3 +416,156 @@ describe("buildStructuredContributorsResult", () => { expect(table(result as any).sortable).toBe(true); }); }); + +// --------------------------------------------------------------------------- +// buildStructuredPrView +// --------------------------------------------------------------------------- + +describe("buildStructuredPrView", () => { + const pr = { + number: 7, + title: "Add feature", + state: "OPEN", + isDraft: false, + author: { login: "alice" }, + headRefName: "feat/x", + baseRefName: "main", + additions: 10, + deletions: 2, + changedFiles: 3, + createdAt: "2026-01-01T00:00:00Z", + url: "https://github.com/owner/repo/pull/7", + body: "Some description", + }; + + test("heading shows number and title", () => { + const result = buildStructuredPrView(pr); + expect(heading(result as any)).toMatchObject({ + kind: "heading", + text: "#7 Add feature", + }); + }); + + test("state pair is a badge", () => { + const result = buildStructuredPrView(pr); + const kv = kvBlock(result); + const statePair = kv.pairs.find((p: any) => p.label === "State"); + expect(statePair?.value).toMatchObject({ badge: "info" }); + }); + + test("draft PR uses warning badge and Draft label", () => { + const result = buildStructuredPrView({ ...pr, isDraft: true }); + const kv = kvBlock(result); + const statePair = kv.pairs.find((p: any) => p.label === "State"); + expect(statePair?.value).toMatchObject({ + text: "Draft", + badge: "warning", + }); + }); + + test("body becomes a divider + text block", () => { + const result = buildStructuredPrView(pr); + const blocks = (result.displayContent as any).blocks; + expect(blocks.some((b: any) => b.kind === "divider")).toBe(true); + expect(blocks[blocks.length - 1]).toMatchObject({ + kind: "text", + text: "Some description", + }); + }); + + test("rawData is the original object", () => { + const result = buildStructuredPrView(pr); + expect((result.displayContent as any).rawData).toBe(pr); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredIssueView +// --------------------------------------------------------------------------- + +describe("buildStructuredIssueView", () => { + const issue = { + number: 12, + title: "A bug", + state: "OPEN", + author: { login: "bob" }, + labels: [{ name: "bug" }, { name: "p1" }], + assignees: [{ login: "carol" }], + comments: [{}, {}], + createdAt: "2026-01-01T00:00:00Z", + url: "https://github.com/owner/repo/issues/12", + body: "Repro steps", + }; + + test("heading shows number and title", () => { + const result = buildStructuredIssueView(issue); + expect(heading(result as any).text).toBe("#12 A bug"); + }); + + test("state pair uses issue badge", () => { + const result = buildStructuredIssueView(issue); + const kv = kvBlock(result); + const statePair = kv.pairs.find((p: any) => p.label === "State"); + expect(statePair?.value).toMatchObject({ badge: "info" }); + }); + + test("labels joined and comment count numeric", () => { + const result = buildStructuredIssueView(issue); + const kv = kvBlock(result); + expect(kv.pairs.find((p: any) => p.label === "Labels")?.value).toBe( + "bug, p1", + ); + expect(kv.pairs.find((p: any) => p.label === "Comments")?.value).toBe(2); + }); + + test("rawData is the original object", () => { + const result = buildStructuredIssueView(issue); + expect((result.displayContent as any).rawData).toBe(issue); + }); +}); + +// --------------------------------------------------------------------------- +// buildStructuredField +// --------------------------------------------------------------------------- + +describe("buildStructuredField", () => { + const repoData = { + name: "TypeAgent", + owner: { login: "microsoft" }, + stargazerCount: 450, + forkCount: 30, + primaryLanguage: { name: "TypeScript" }, + description: "Agents framework", + }; + + test("returns undefined for unknown field", () => { + expect( + buildStructuredField("nonsense", repoData, "microsoft/TypeAgent"), + ).toBeUndefined(); + }); + + test("stars field yields keyValue pair with numeric value", () => { + const result = buildStructuredField( + "stars", + repoData, + "microsoft/TypeAgent", + )!; + const kv = kvBlock(result); + const pair = kv.pairs[0]; + expect(pair).toMatchObject({ label: "Stars", value: 450 }); + }); + + test("rawData carries repo, field and value", () => { + const result = buildStructuredField( + "stars", + repoData, + "microsoft/TypeAgent", + )!; + expect((result.displayContent as any).rawData).toMatchObject({ + repo: "microsoft/TypeAgent", + field: "stars", + value: 450, + }); + }); +}); + From 7b9fc5b656ef6005d57eae1c3e8a6ada4a5a7579 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 15:59:03 -0700 Subject: [PATCH 15/36] structured outputted the list agent. --- ts/docs/plans/structured-output/STATUS.md | 4 +- .../agents/list/src/listActionHandler.ts | 83 ++++++++++++++++--- ts/packages/agents/list/src/listSchema.agr | 15 +++- .../agents/list/src/listSchema.keywords.json | 13 +++ ts/packages/agents/list/src/listSchema.ts | 10 ++- ts/packages/chat-ui/styles/chat.css | 9 +- 6 files changed, 116 insertions(+), 18 deletions(-) diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 3def464ff..7450d679b 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-13 — github-cli fully converted (single views + field answers); Phase 7 agent rollout order defined._ +_Last updated: 2026-07-13 — Phase 7 Wave A started: `list` agent converted (7a)._ ## Progress by phase @@ -65,7 +65,7 @@ Wave A — high fit: | Item | Agent | Target blocks | Status | | ---- | ----- | ------------- | ------ | -| 7a | `list` | heading + list | not started | +| 7a | `list` | heading + list | done | | 7b | `calendar` | table (agenda) + card/keyValue (detail) | not started | | 7c | `email` | table (list) + keyValue (message) | not started | | 7d | `weather` | keyValue (current) + table (forecast) | not started | diff --git a/ts/packages/agents/list/src/listActionHandler.ts b/ts/packages/agents/list/src/listActionHandler.ts index 028e73b6c..bc58c1d86 100644 --- a/ts/packages/agents/list/src/listActionHandler.ts +++ b/ts/packages/agents/list/src/listActionHandler.ts @@ -11,8 +11,7 @@ import { } from "@typeagent/agent-sdk"; import { createActionResultFromTextDisplay, - createActionResultFromMarkdownDisplay, - createActionResult, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { ListAction, ListActivity } from "./listSchema.js"; @@ -185,6 +184,10 @@ class MemoryListCollection { return this.lists.get(name); } + getListNames(): string[] { + return Array.from(this.lists.keys()); + } + serialize(): string { const lists = Array.from(this.lists.values()).map((memList) => { return { @@ -275,19 +278,42 @@ function getListDisplay( ) { const list = getList(listContext, listName); if (list.itemsSet.size === 0) { - return createActionResult( - `List '${listName}' is empty.${suffix ? `\n${suffix}` : ""}`, - undefined, - getEntities(listName), + return createStructuredResult( + [ + { kind: "heading", level: 3, text: `List '${listName}'` }, + { kind: "text", text: "This list is empty." }, + ...(suffix + ? [{ kind: "text" as const, text: suffix }] + : []), + ], + { + entities: getEntities(listName), + rawData: { name: listName, items: [] }, + }, ); } const plainList = Array.from(list.itemsSet); - // set displayText to markdown list of the items - return createActionResultFromMarkdownDisplay( - `List '${listName}' has items:\n\n${plainList.map((item) => `- ${item}`).join("\n")}${suffix ? `\n\n${suffix}` : ""}`, - undefined, - getEntities(listName, plainList), + // Render the list as a structured heading + list block. The SDK derives + // the markdown/text fallback for clients that can't render blocks. + const count = plainList.length; + return createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `List '${listName}' — ${count} item${count === 1 ? "" : "s"}`, + }, + { + kind: "list", + items: plainList.map((item) => ({ text: item })), + }, + ...(suffix ? [{ kind: "text" as const, text: suffix }] : []), + ], + { + entities: getEntities(listName, plainList), + rawData: { name: listName, items: plainList }, + }, ); } async function handleListAction( @@ -362,6 +388,41 @@ async function handleListAction( result = getListDisplay(listContext, action.parameters.listName); break; } + case "listLists": { + const store = getStore(listContext); + const names = store.getListNames(); + if (names.length === 0) { + result = createStructuredResult( + [ + { kind: "heading", level: 3, text: "Lists" }, + { kind: "text", text: "There are no lists yet." }, + ], + { entities: [] }, + ); + } else { + result = createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `Lists — ${names.length} list${names.length === 1 ? "" : "s"}`, + }, + { + kind: "list", + items: names.map((name) => ({ text: name })), + }, + ], + { + entities: names.map((name) => ({ + name, + type: ["list"], + })), + rawData: { lists: names }, + }, + ); + } + break; + } case "clearList": { const store = getStore(listContext); const clearListAction = action; diff --git a/ts/packages/agents/list/src/listSchema.agr b/ts/packages/agents/list/src/listSchema.agr index bbd8719f6..e5ca8ffdb 100644 --- a/ts/packages/agents/list/src/listSchema.agr +++ b/ts/packages/agents/list/src/listSchema.agr @@ -145,10 +145,23 @@ } }; +// listLists - show which lists exist +// The literal word "lists" anchors these rules so they beat wildcard-heavy +// patterns and the system.conversation listConversation rule. + = (can you)? (list | show | display) (me)? (all | my | the)? lists -> { + actionName: "listLists", + parameters: {} +} + | (what | which) lists (do | are)? (i | we | there)? (have)? -> { + actionName: "listLists", + parameters: {} +}; + import { ListAction } from "./listSchema.ts"; : ListAction = | | | - | ; + | + | ; diff --git a/ts/packages/agents/list/src/listSchema.keywords.json b/ts/packages/agents/list/src/listSchema.keywords.json index 872c16dbe..eda4085b2 100644 --- a/ts/packages/agents/list/src/listSchema.keywords.json +++ b/ts/packages/agents/list/src/listSchema.keywords.json @@ -150,6 +150,19 @@ "bulletin", "manifest", "summary" + ], + "listLists": [ + "list", + "lists", + "collection", + "catalog", + "inventory", + "directory", + "index", + "roster", + "registry", + "overview", + "all" ] } } diff --git a/ts/packages/agents/list/src/listSchema.ts b/ts/packages/agents/list/src/listSchema.ts index 243e2a1e8..5c989c398 100644 --- a/ts/packages/agents/list/src/listSchema.ts +++ b/ts/packages/agents/list/src/listSchema.ts @@ -6,7 +6,8 @@ export type ListAction = | RemoveItemsAction | CreateListAction | GetListAction - | ClearListAction; + | ClearListAction + | ListListsAction; export type ListActivity = StartEditList; @@ -54,6 +55,13 @@ export type ClearListAction = { }; }; +// use this action to show the user which lists exist, for example, +// "what lists are there?", "show me my lists", "what lists do I have?" +export type ListListsAction = { + actionName: "listLists"; + parameters: {}; +}; + export type StartEditList = { actionName: "startEditList"; parameters: { diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index 4290613a2..c0a0a9a95 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1107,12 +1107,15 @@ table.sc-table tbody tr:nth-child(even) { /* --- Lists --------------------------------------------------------------- */ .sc-list { - margin: 0.25em 0 0.25em 1.25em; - padding: 0; + border: 1px solid var(--vscode-editorWidget-border, #ccc); + border-radius: 6px; + margin: 0.5em 0; + padding: 8px 14px 8px 30px; + background: var(--vscode-editorWidget-background, rgba(127, 127, 127, 0.06)); } .sc-list li { - margin: 0.15em 0; + margin: 0.2em 0; } .sc-list-subtitle { From 23216632a840db09d2b815b242e253eef2a6357d Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 16:18:53 -0700 Subject: [PATCH 16/36] calendar, ipconfig, and weather agents all structured output. added table row cap for client side pagination. --- ts/docs/plans/structured-output/PLAN.md | 17 +++ ts/docs/plans/structured-output/STATUS.md | 12 +- ts/packages/agentSdk/src/display.ts | 7 ++ .../agentSdk/src/helpers/displayHelpers.ts | 1 + .../calendar/src/calendarActionHandlerV3.ts | 111 ++++++++++-------- .../agents/email/src/emailActionHandler.ts | 95 ++++++++------- .../github-cli/src/github-cliActionHandler.ts | 14 ++- .../ipconfig/src/ipconfigActionHandler.ts | 77 +++++++++--- .../weather/src/weatherActionHandler.ts | 108 ++++++++++++----- ts/packages/chat-ui/src/setContent.ts | 89 ++++++++++++-- ts/packages/chat-ui/styles/chat.css | 22 ++++ 11 files changed, 399 insertions(+), 154 deletions(-) diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index c06213745..fb30030c0 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -317,6 +317,23 @@ derived fallback (no throw, no regression): Client-side sort / filter on `TableBlock` in `chat-ui`, honoring `readonly` / `sortable` / `filterable`. chat-ui clients only. +**Phase 4b — client-side pagination (done).** Optional +`TableBlock.pageSize`: when set (and `rows.length > pageSize`), `chat-ui` +renders the first `pageSize` rows and reveals the rest in batches via a +"Show more" control. All rows still ship in one payload — this is a pure +rendering concern, so replay/DisplayLog stay unchanged and the +markdown/text fallbacks render every row. Pagination composes with sort +(re-caps after reorder) and filter (a live query suspends the cap and +shows all matches). No agent-driven/server-side paging: fetching more +rows on demand needs the same round-trip channel as row-actions and is +deferred with open question #3. + +**Pinned columns — reserved, not built.** `TableColumn.pinned?: "left" | +"right"` is carried in the type for forward-compat (like `cell.href` / +`block.action`) but no client wires up sticky rendering yet. Sticky +columns only pay off for wide, horizontally-scrolling tables, which no +adopter emits today; wire the `position: sticky` CSS when one does. + ### Phase 5 — First adopter: `github-cli` *(after 1; visually validated by 3)* Rewrite `formatListResults` and the list/view actions in diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 7450d679b..163d675b5 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-13 — Phase 7 Wave A started: `list` agent converted (7a)._ +_Last updated: 2026-07-13 — Phase 4b client-side table pagination (`pageSize`) added; `TableColumn.pinned` reserved (not built)._ ## Progress by phase @@ -40,6 +40,8 @@ _Last updated: 2026-07-13 — Phase 7 Wave A started: `list` agent converted (7a | Item | Description | Status | | ---- | ----------- | ------ | | 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | done | +| 4b | Client-side pagination: `TableBlock.pageSize` + "Show more" in `chat-ui` (composes with sort/filter) | done | +| 4c | `TableColumn.pinned` reserved in type (sticky rendering not wired) | reserved | ### Phase 5 — First adopter: github-cli *(after 1)* @@ -66,10 +68,10 @@ Wave A — high fit: | Item | Agent | Target blocks | Status | | ---- | ----- | ------------- | ------ | | 7a | `list` | heading + list | done | -| 7b | `calendar` | table (agenda) + card/keyValue (detail) | not started | -| 7c | `email` | table (list) + keyValue (message) | not started | -| 7d | `weather` | keyValue (current) + table (forecast) | not started | -| 7e | `ipconfig` | heading + keyValue (per-adapter) | not started | +| 7b | `calendar` | table (agenda) + card/keyValue (detail) | done | +| 7c | `email` | table (list) + keyValue (message) | done | +| 7d | `weather` | keyValue (current) + table (forecast) | done | +| 7e | `ipconfig` | heading + keyValue (per-adapter) | done | Wave B — medium fit: diff --git a/ts/packages/agentSdk/src/display.ts b/ts/packages/agentSdk/src/display.ts index 71a77f770..787413bd3 100644 --- a/ts/packages/agentSdk/src/display.ts +++ b/ts/packages/agentSdk/src/display.ts @@ -55,6 +55,9 @@ export interface TableColumn { type?: TableCellType; // default "text" align?: "left" | "right" | "center"; sortable?: boolean; // per-column override of table.sortable + // Reserved for future sticky columns. Carried in the type for + // forward-compat; no client wires up sticky rendering yet. + pinned?: "left" | "right"; } // A table cell is either a bare scalar (rendered per the column type) or a @@ -78,6 +81,10 @@ export interface TableBlock { sortable?: boolean; // default: true filterable?: boolean; // default: false readonly?: boolean; // lock order + content exactly as sent + // Client-side pagination: render at most `pageSize` rows initially and + // reveal the rest via a "Show more" control. All rows still ship in one + // payload; this only affects rendering. Omit / <= 0 to show all rows. + pageSize?: number; // Reserved for v2 row-actions (open question #3). Carried, not wired up. action?: unknown; } diff --git a/ts/packages/agentSdk/src/helpers/displayHelpers.ts b/ts/packages/agentSdk/src/helpers/displayHelpers.ts index 6eb94993c..d500335de 100644 --- a/ts/packages/agentSdk/src/helpers/displayHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/displayHelpers.ts @@ -121,6 +121,7 @@ export interface TableBuildOptions { sortable?: boolean; filterable?: boolean; readonly?: boolean; + pageSize?: number; } // A column definition for `fromRecords` — a `TableColumn` plus a `value` diff --git a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts index 73b587281..8200579f7 100644 --- a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts +++ b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts @@ -6,9 +6,11 @@ import { AppAgent, ActionContext, ActionResult, + ActionResultSuccess, ReadinessReport, SessionContext, ParsedCommandParams, + StructuredBlock, } from "@typeagent/agent-sdk"; import { CommandHandler, @@ -25,6 +27,7 @@ import { createActionResultFromHtmlDisplay, createActionResultFromError, createActionResultFromTextDisplay, + createStructuredResult, createYesNoChoiceResult, createMultiChoiceResult, ChoiceManager, @@ -331,41 +334,6 @@ function emptyStateHtml(message: string): string { return `
    ${escapeHtml(message)}
    `; } -// Helper function to format events as HTML -function formatEventsAsHtml(events: any[]): string { - if (!events || events.length === 0) { - return "

    No events found.

    "; - } - - const items = events.map((event) => { - const subject = escapeHtml(event.subject || "Untitled"); - const datePart = event.start?.dateTime - ? formatEventDate(event.start.dateTime) - : ""; - const timePart = - event.start?.dateTime && event.end?.dateTime - ? formatEventTimeRange(event.start.dateTime, event.end.dateTime) - : ""; - const location = escapeHtml(getEventLocation(event)); - - const subjectHtml = event.htmlLink - ? `${subject}` - : `${subject}`; - - const metaParts = [datePart, timePart].filter(Boolean); - const metaLine = metaParts.length - ? `
    ${metaParts.join("  ·  ")}
    ` - : ""; - const locationLine = location - ? `
    ${location}
    ` - : ""; - - return `
    ${subjectHtml}${metaLine}${locationLine}
    `; - }); - - return `
    ${items.join("")}
    `; -} - // Helper function to format events as professional plain text function formatEventsAsText(events: any[]): string { if (!events || events.length === 0) { @@ -402,6 +370,58 @@ function formatEventsAsText(events: any[]): string { return lines.join("\n"); } +// Build a structured agenda result: an optional heading + a table of events +// (Subject as a link, When, Location) plus a machine-readable rawData payload. +// The SDK derives the markdown/text fallback for clients that can't render +// blocks. +function buildStructuredEventList( + events: any[], + heading?: string, +): ActionResultSuccess { + const rows = events.map((event) => { + const subject = event.subject || "Untitled"; + const datePart = event.start?.dateTime + ? formatEventDate(event.start.dateTime) + : ""; + const timePart = + event.start?.dateTime && event.end?.dateTime + ? formatEventTimeRange(event.start.dateTime, event.end.dateTime) + : ""; + const when = [datePart, timePart].filter(Boolean).join(" · "); + const location = getEventLocation(event); + return [ + event.htmlLink + ? { text: subject, href: event.htmlLink } + : subject, + when, + location, + ]; + }); + + const blocks: StructuredBlock[] = []; + if (heading) { + blocks.push({ kind: "heading", level: 3, text: heading }); + } + blocks.push({ + kind: "table", + columns: [ + { id: "subject", header: "Event", type: "link" }, + { id: "when", header: "When", type: "date" }, + { id: "location", header: "Location" }, + ], + rows, + sortable: true, + pageSize: 15, + }); + + return createStructuredResult(blocks, { + historyText: heading + ? `${heading}\n\n${formatEventsAsText(events)}` + : formatEventsAsText(events), + rawData: events, + }); +} + // HH:MM timestamp prefix for setup status updates — same convention used by // screencapture / desktop runInstall + runDotnetBuild so progress reads // consistently across agents. @@ -943,10 +963,7 @@ export class CalendarActionHandlerV3 implements AppAgent { ); } - return createActionResultFromHtmlDisplay( - formatEventsAsHtml(events), - formatEventsAsText(events), - ); + return buildStructuredEventList(events); } catch (error: any) { console.error(chalk.red(`Error finding events: ${error.message}`)); return createActionResultFromError( @@ -1055,12 +1072,8 @@ export class CalendarActionHandlerV3 implements AppAgent { month: "long", day: "numeric", }); - const heading = `Today's Schedule \u2014 ${todayLabel}`; - const textResult = `${heading}\n${"=".repeat(heading.length)}\n\n${formatEventsAsText(events)}`; - return createActionResultFromHtmlDisplay( - `
    Today's Schedule \u2014 ${todayLabel}
    ${formatEventsAsHtml(events)}
    `, - textResult, - ); + const heading = `Today's Schedule \u2014 ${todayLabel}`; + return buildStructuredEventList(events, heading); } catch (error: any) { console.error( chalk.red(`Error finding today's events: ${error.message}`), @@ -1094,12 +1107,8 @@ export class CalendarActionHandlerV3 implements AppAgent { const weekStart = new Date(dateRange.startDateTime); const weekEnd = new Date(dateRange.endDateTime); const weekRangeLabel = `${weekStart.toLocaleDateString(undefined, { month: "short", day: "numeric" })} \u2013 ${weekEnd.toLocaleDateString(undefined, { month: "short", day: "numeric" })}`; - const weekHeading = `This Week's Schedule \u2014 ${weekRangeLabel}`; - const textResult = `${weekHeading}\n${"=".repeat(weekHeading.length)}\n\n${formatEventsAsText(events)}`; - return createActionResultFromHtmlDisplay( - `
    This Week's Schedule \u2014 ${weekRangeLabel}
    ${formatEventsAsHtml(events)}
    `, - textResult, - ); + const weekHeading = `This Week's Schedule \u2014 ${weekRangeLabel}`; + return buildStructuredEventList(events, weekHeading); } catch (error: any) { console.error( chalk.red(`Error finding this week's events: ${error.message}`), diff --git a/ts/packages/agents/email/src/emailActionHandler.ts b/ts/packages/agents/email/src/emailActionHandler.ts index 1405138d2..20876bc04 100644 --- a/ts/packages/agents/email/src/emailActionHandler.ts +++ b/ts/packages/agents/email/src/emailActionHandler.ts @@ -40,9 +40,10 @@ import { createActionResultFromError, createActionResultFromHtmlDisplay, createActionResultFromTextDisplay, + createStructuredResult, createYesNoChoiceResult, } from "@typeagent/agent-sdk/helpers/action"; -import { ActionResultSuccess } from "@typeagent/agent-sdk"; +import { ActionResultSuccess, BadgeTone } from "@typeagent/agent-sdk"; import { CommandHandler, CommandHandlerNoParams, @@ -881,54 +882,68 @@ async function trySilentEmailSignIn( } } -function formatEmailListHtml( +function formatEmailListPlain( messages: EmailMessage[], heading: string, ): string { - const rows = messages.map((msg) => { + const lines: string[] = [heading + "\n"]; + for (const msg of messages) { + lines.push(formatMessageSummary(msg)); + } + return lines.join("\n"); +} + +// Build a structured email-list result: a heading + a list block (one item +// per message, with the subject as a link, a "From · date" subtitle, and an +// unread badge) plus a machine-readable rawData payload. The SDK derives the +// markdown/text fallback for clients that can't render blocks. +function buildStructuredEmailList( + messages: EmailMessage[], + heading: string, +): ActionResultSuccess { + const items = messages.map((msg) => { const from = msg.from - ? escapeHtml(msg.from.name || msg.from.address) + ? msg.from.name || msg.from.address : "Unknown"; - const subject = escapeHtml(msg.subject); const date = msg.receivedDateTime ? new Date(msg.receivedDateTime).toLocaleDateString() : ""; const preview = msg.bodyPreview - ? escapeHtml( - msg.bodyPreview.replace(/\s+/g, " ").trim().slice(0, 120), - ) + ? msg.bodyPreview.replace(/\s+/g, " ").trim().slice(0, 120) : ""; + const subtitleParts = [`From ${from}`]; + if (date) subtitleParts.push(date); + if (preview) subtitleParts.push(preview); const unread = msg.isRead === false; - const borderColor = unread ? "#4a9eda" : "#ccc"; - const subjectWeight = unread ? "font-weight:bold;" : ""; - - // Wrap subject in a link if webLink is available - const subjectHtml = msg.webLink - ? `${subject}` - : `${subject}`; - - return `
    -
    ${subjectHtml} · ${date}
    -
    From: ${from}
    - ${preview ? `
    ${preview}
    ` : ""} -
    `; + return { + text: msg.subject || "(no subject)", + ...(msg.webLink ? { href: msg.webLink } : {}), + subtitle: subtitleParts.join(" · "), + badges: unread ? (["info"] as BadgeTone[]) : [], + }; }); - return `
    -
    ${escapeHtml(heading)}
    -${rows.join("\n")} -
    `; -} + const rawData = messages.map((msg) => ({ + subject: msg.subject, + from: msg.from + ? { name: msg.from.name, address: msg.from.address } + : undefined, + receivedDateTime: msg.receivedDateTime, + isRead: msg.isRead, + webLink: msg.webLink, + bodyPreview: msg.bodyPreview, + })); -function formatEmailListPlain( - messages: EmailMessage[], - heading: string, -): string { - const lines: string[] = [heading + "\n"]; - for (const msg of messages) { - lines.push(formatMessageSummary(msg)); - } - return lines.join("\n"); + return createStructuredResult( + [ + { kind: "heading", level: 3, text: heading }, + { kind: "list", items }, + ], + { + rawData, + historyText: formatEmailListPlain(messages, heading), + }, + ); } const SELF_TERMS = new Set(["myself", "me", "my email", "i", "my", "s"]); @@ -1116,10 +1131,7 @@ async function handleFindEmailAction( return "No emails found in inbox."; } const heading = `Inbox (${messages.length} messages):`; - return createActionResultFromHtmlDisplay( - formatEmailListHtml(messages, heading), - formatEmailListPlain(messages, heading), - ); + return buildStructuredEmailList(messages, heading); } // Provider search — primary path for all queries @@ -1207,10 +1219,7 @@ ${sourceLinksHtml} // Metadata-only query or RAG fallback: show email list const heading = `Found ${messages.length} email(s):`; - return createActionResultFromHtmlDisplay( - formatEmailListHtml(messages, heading), - formatEmailListPlain(messages, heading), - ); + return buildStructuredEmailList(messages, heading); } /** diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index 2c75bd712..916bab901 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -1203,13 +1203,23 @@ function makeStructuredTable( objects: T[], colSpecs: ColumnSpec[], headingText: string, - tableOptions?: { sortable?: boolean; filterable?: boolean; readonly?: boolean }, + tableOptions?: { + sortable?: boolean; + filterable?: boolean; + readonly?: boolean; + pageSize?: number; + }, ): ActionResultSuccess { const columns = colSpecs.map(({ value: _v, ...col }) => col); const rows: TableCell[][] = objects.map((obj) => colSpecs.map((col) => col.value(obj)), ); - const table: TableBlock = createTable(columns, rows, tableOptions); + // Cap long lists to a first page (client reveals the rest via "Show + // more") unless the caller overrode it. All rows still ship. + const table: TableBlock = createTable(columns, rows, { + pageSize: 15, + ...tableOptions, + }); const blocks: StructuredBlock[] = [ { kind: "heading", level: 3, text: headingText }, table, diff --git a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts index 61f91fd30..020a7b636 100644 --- a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts +++ b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts @@ -6,9 +6,10 @@ import { execFile } from "child_process"; import { promisify } from "util"; import { ActionContext, AppAgent, TypeAgentAction } from "@typeagent/agent-sdk"; +import { StructuredBlock, KeyValuePair } from "@typeagent/agent-sdk"; import { createActionResultFromTextDisplay, - createActionResultFromMarkdownDisplay, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { IpconfigActions } from "./ipconfigSchema.js"; @@ -101,10 +102,10 @@ export function instantiate(): AppAgent { try { const args = buildArgs(action); const output = await runCli(...args); - const formatted = formatOutput(output, action.actionName); - return formatted.startsWith("#") || formatted.includes("**") - ? createActionResultFromMarkdownDisplay(formatted) - : createActionResultFromTextDisplay(formatted); + if (STRUCTURED_ACTIONS.has(action.actionName)) { + return buildStructuredOutput(output); + } + return createActionResultFromTextDisplay(output); } catch (e: unknown) { const msg = e instanceof Error ? e.message : String(e); return createActionResultFromTextDisplay(`Error: ${msg}`); @@ -121,24 +122,36 @@ const STRUCTURED_ACTIONS = new Set([ "displayIPv6DHCPClassIDs", ]); -function formatOutput(raw: string, actionName: string): string { - if (!STRUCTURED_ACTIONS.has(actionName)) { - return raw; - } - +// Parse `ipconfig` output into structured section blocks. Each section +// (unindented header line) becomes a heading + keyValue block; the dotted +// "Key . . . : Value" lines become key-value pairs. The SDK derives the +// markdown/text fallback for clients that can't render blocks. +function buildStructuredOutput(raw: string) { const lines = raw.split(/\r?\n/); - const out: string[] = []; + + type Section = { heading?: string; pairs: KeyValuePair[]; loose: string[] }; + const sections: Section[] = []; + let current: Section = { pairs: [], loose: [] }; + + const pushCurrent = () => { + if (current.heading || current.pairs.length || current.loose.length) { + sections.push(current); + } + }; for (const line of lines) { if (line.trim() === "") { - out.push(""); continue; } - // Section header: no leading whitespace + // Section header: no leading whitespace, ends with ":" if (!/^\s/.test(line)) { - const header = line.replace(/:$/, "").trim(); - out.push(`\n## ${header}`); + pushCurrent(); + current = { + heading: line.replace(/:$/, "").trim(), + pairs: [], + loose: [], + }; continue; } @@ -147,12 +160,40 @@ function formatOutput(raw: string, actionName: string): string { if (kv) { const key = kv[1].trimEnd(); const value = kv[2].trim(); - out.push(`- **${key}:** ${value || "—"}`); + current.pairs.push({ label: key, value: value || "—" }); continue; } - out.push(line.trim()); + current.loose.push(line.trim()); + } + pushCurrent(); + + const blocks: StructuredBlock[] = []; + const rawData: Record> & { + _lines?: string[]; + } = {}; + + for (const section of sections) { + if (section.heading) { + blocks.push({ kind: "heading", level: 2, text: section.heading }); + } + if (section.pairs.length > 0) { + blocks.push({ kind: "keyValue", pairs: section.pairs }); + const bucket: Record = {}; + for (const p of section.pairs) { + bucket[p.label] = String(p.value); + } + rawData[section.heading ?? "General"] = bucket; + } + for (const loose of section.loose) { + blocks.push({ kind: "text", text: loose, format: "text" }); + } + } + + if (blocks.length === 0) { + // Nothing parsed into structure — fall back to the raw text. + return createActionResultFromTextDisplay(raw); } - return out.join("\n").trim(); + return createStructuredResult(blocks, { rawData }); } diff --git a/ts/packages/agents/weather/src/weatherActionHandler.ts b/ts/packages/agents/weather/src/weatherActionHandler.ts index 4d1e58d14..dd027c2ff 100644 --- a/ts/packages/agents/weather/src/weatherActionHandler.ts +++ b/ts/packages/agents/weather/src/weatherActionHandler.ts @@ -10,6 +10,7 @@ import type { import { createActionResultFromTextDisplay, createActionResultFromError, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { WeatherAction } from "./weatherSchema.js"; import { @@ -90,13 +91,6 @@ async function handleGetCurrentConditions( const conditions = getWeatherDescription(weather.weatherCode); const windDir = getWindDirection(weather.windDirection); - const displayText = - `Current conditions in ${coords.name}:\n` + - `Temperature: ${Math.round(weather.temperature)}${tempUnit} (feels like ${Math.round(weather.apparentTemperature)}${tempUnit})\n` + - `Conditions: ${conditions}\n` + - `Humidity: ${weather.humidity}%\n` + - `Wind: ${Math.round(weather.windSpeed)} mph ${windDir}`; - const historyText = `Got current weather for ${coords.name}`; const entities = [ @@ -106,10 +100,43 @@ async function handleGetCurrentConditions( }, ]; - return createActionResultFromTextDisplay( - displayText, - historyText, - entities, + return createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `Current conditions in ${coords.name}`, + }, + { + kind: "keyValue", + pairs: [ + { + label: "Temperature", + value: `${Math.round(weather.temperature)}${tempUnit} (feels like ${Math.round(weather.apparentTemperature)}${tempUnit})`, + }, + { label: "Conditions", value: conditions }, + { label: "Humidity", value: `${weather.humidity}%` }, + { + label: "Wind", + value: `${Math.round(weather.windSpeed)} mph ${windDir}`, + }, + ], + }, + ], + { + historyText, + entities, + rawData: { + location: coords.name, + units, + temperature: weather.temperature, + apparentTemperature: weather.apparentTemperature, + conditions, + humidity: weather.humidity, + windSpeed: weather.windSpeed, + windDirection: windDir, + }, + }, ); } @@ -142,22 +169,22 @@ async function handleGetForecast( } const tempUnit = units === "celsius" ? "°C" : "°F"; - const forecasts = forecastData.map((day, index) => { + const rows = forecastData.map((day, index) => { const conditions = getWeatherDescription(day.weatherCode); - const precipitation = + const precip = day.precipitationProbability > 0 - ? `, ${day.precipitationProbability}% chance of precipitation` - : ""; - return ( - `Day ${index + 1} (${day.date}): ${conditions}, ` + - `High: ${Math.round(day.maxTemp)}${tempUnit}, ` + - `Low: ${Math.round(day.minTemp)}${tempUnit}${precipitation}` - ); + ? `${day.precipitationProbability}%` + : "—"; + return [ + `Day ${index + 1}`, + day.date, + conditions, + `${Math.round(day.maxTemp)}${tempUnit}`, + `${Math.round(day.minTemp)}${tempUnit}`, + precip, + ]; }); - const displayText = - `${days}-day forecast for ${coords.name}:\n` + forecasts.join("\n"); - const historyText = `Got ${days}-day forecast for ${coords.name}`; const entities = [ @@ -167,10 +194,37 @@ async function handleGetForecast( }, ]; - return createActionResultFromTextDisplay( - displayText, - historyText, - entities, + return createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `${days}-day forecast for ${coords.name}`, + }, + { + kind: "table", + columns: [ + { id: "day", header: "Day" }, + { id: "date", header: "Date", type: "date" }, + { id: "conditions", header: "Conditions" }, + { id: "high", header: "High", align: "right" }, + { id: "low", header: "Low", align: "right" }, + { id: "precip", header: "Precip", align: "right" }, + ], + rows, + sortable: true, + }, + ], + { + historyText, + entities, + rawData: { + location: coords.name, + units, + days, + forecast: forecastData, + }, + }, ); } diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 5127d09b9..dbbdb4bbd 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -86,13 +86,17 @@ function renderTableCell( } function renderTableBlock(block: TableBlock): string { - const { columns, rows, caption, sortable, filterable, readonly } = block; + const { columns, rows, caption, sortable, filterable, readonly, pageSize } = + block; const sortAttr = !readonly && sortable !== false ? ' data-sc-sortable="true"' : ""; const filterAttr = !readonly && filterable ? ' data-sc-filterable="true"' : ""; + const paginate = + typeof pageSize === "number" && pageSize > 0 && rows.length > pageSize; + const pageAttr = paginate ? ` data-sc-page-size="${pageSize}"` : ""; const parts: string[] = [ - `
    ${esc(caption)}
    `, + `
    `, ]; if (caption) { parts.push(``); @@ -109,8 +113,12 @@ function renderTableBlock(block: TableBlock): string { parts.push(``); } parts.push(""); - for (const row of rows) { - parts.push(""); + for (let ri = 0; ri < rows.length; ri++) { + const row = rows[ri]; + // Rows beyond the first page start hidden; the "Show more" control + // (wired in attachTableInteractivity) reveals them in batches. + const hidden = paginate && ri >= pageSize! ? ' class="sc-row-hidden"' : ""; + parts.push(``); for (let ci = 0; ci < columns.length; ci++) { const col = columns[ci]; const cell = row[ci] ?? ""; @@ -120,7 +128,14 @@ function renderTableBlock(block: TableBlock): string { } parts.push(""); } - parts.push("
    ${esc(caption)}
    ${esc(col.header)}${sortBtn}
    "); + parts.push(""); + if (paginate) { + const remaining = rows.length - pageSize!; + parts.push( + ``, + ); + } + parts.push(""); return parts.join(""); } @@ -266,7 +281,9 @@ function attachTableInteractivity(root: HTMLElement): void { (table) => { const canSort = table.dataset.scSortable === "true"; const canFilter = table.dataset.scFilterable === "true"; - if (!canSort && !canFilter) return; + const pageSize = parseInt(table.dataset.scPageSize ?? "", 10); + const canPaginate = Number.isFinite(pageSize) && pageSize > 0; + if (!canSort && !canFilter && !canPaginate) return; const tbody = table.querySelector("tbody"); @@ -284,6 +301,42 @@ function attachTableInteractivity(root: HTMLElement): void { let sortColId: string | null = null; let sortDir: "asc" | "desc" | "none" = "none"; + // Per-table pagination state. `filtering` is shared so sort/filter + // can suspend or re-apply the row cap. When a filter query is + // active it takes precedence (all matches shown, cap suspended). + let filtering = false; + let visibleCount = canPaginate ? pageSize : Infinity; + const wrapEl = table.closest(".sc-table-wrap"); + const showMoreBtn = + wrapEl?.querySelector(".sc-show-more") ?? + null; + + const applyPagination = () => { + if (!canPaginate) return; + const rows = Array.from( + tbody.querySelectorAll("tr"), + ); + rows.forEach((row, i) => { + row.classList.toggle("sc-row-hidden", i >= visibleCount); + }); + if (showMoreBtn) { + const remaining = Math.max(0, rows.length - visibleCount); + if (remaining > 0) { + showMoreBtn.textContent = `Show more (${remaining})`; + showMoreBtn.style.display = ""; + } else { + showMoreBtn.style.display = "none"; + } + } + }; + + if (showMoreBtn) { + showMoreBtn.addEventListener("click", () => { + visibleCount += pageSize; + applyPagination(); + }); + } + if (canSort) { table .querySelectorAll(".sc-sort-btn") @@ -351,6 +404,10 @@ function attachTableInteractivity(root: HTMLElement): void { }); rows.forEach((row) => tbody.appendChild(row)); } + // Row order changed — re-apply the page cap so the + // first `visibleCount` rows in the new order show + // (unless a filter query is currently active). + if (!filtering) applyPagination(); }); }); } @@ -370,13 +427,29 @@ function attachTableInteractivity(root: HTMLElement): void { input.addEventListener("input", () => { const query = input.value.trim().toLowerCase(); + filtering = query.length > 0; tbody .querySelectorAll("tr") .forEach((row) => { const text = row.textContent?.toLowerCase() ?? ""; - row.style.display = - query && !text.includes(query) ? "none" : ""; + row.classList.toggle( + "sc-row-filtered", + !!query && !text.includes(query), + ); }); + if (filtering) { + // Filter overrides pagination: reveal all matches and + // hide the Show-more control while filtering. + tbody + .querySelectorAll("tr") + .forEach((r) => + r.classList.remove("sc-row-hidden"), + ); + if (showMoreBtn) showMoreBtn.style.display = "none"; + } else { + // Query cleared — restore the page cap. + applyPagination(); + } }); } }, diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index c0a0a9a95..3bdf128bb 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1068,6 +1068,28 @@ table.sc-table tbody tr:nth-child(even) { color: var(--vscode-input-placeholderForeground, #999); } +/* Pagination (Phase 4b) — rows hidden by the page cap or filter. */ +.sc-row-hidden, +.sc-row-filtered { + display: none; +} + +.sc-show-more { + background: none; + border: none; + color: var(--vscode-textLink-foreground, #1a73e8); + cursor: pointer; + display: block; + font-size: 0.85em; + margin: 4px 0 0; + padding: 2px 0; + text-align: left; +} + +.sc-show-more:hover { + text-decoration: underline; +} + /* --- Badges -------------------------------------------------------------- */ .sc-badge { From 2324306cde225b839efeacc709d0a112e6d40085 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 16:25:48 -0700 Subject: [PATCH 17/36] show days of week --- .../agents/weather/src/weatherActionHandler.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ts/packages/agents/weather/src/weatherActionHandler.ts b/ts/packages/agents/weather/src/weatherActionHandler.ts index dd027c2ff..6444c7342 100644 --- a/ts/packages/agents/weather/src/weatherActionHandler.ts +++ b/ts/packages/agents/weather/src/weatherActionHandler.ts @@ -169,14 +169,22 @@ async function handleGetForecast( } const tempUnit = units === "celsius" ? "°C" : "°F"; - const rows = forecastData.map((day, index) => { + const rows = forecastData.map((day) => { const conditions = getWeatherDescription(day.weatherCode); const precip = day.precipitationProbability > 0 ? `${day.precipitationProbability}%` : "—"; + // Derive the weekday name from the ISO date. Append T00:00 so the + // date is parsed in local time rather than UTC (which can shift the + // day backward for negative-offset timezones). + const weekday = day.date + ? new Date(`${day.date}T00:00`).toLocaleDateString(undefined, { + weekday: "long", + }) + : ""; return [ - `Day ${index + 1}`, + weekday, day.date, conditions, `${Math.round(day.maxTemp)}${tempUnit}`, @@ -204,7 +212,7 @@ async function handleGetForecast( { kind: "table", columns: [ - { id: "day", header: "Day" }, + { id: "day", header: "Weekday" }, { id: "date", header: "Date", type: "date" }, { id: "conditions", header: "Conditions" }, { id: "high", header: "High", align: "right" }, From 1cd80b5c3bd3adbdda7c4ff321761f9a20fd6b04 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 17:02:16 -0700 Subject: [PATCH 18/36] added structured output to discord, onboarding, screencapture agents --- ts/docs/plans/structured-output/PLAN.md | 7 +- ts/docs/plans/structured-output/STATUS.md | 12 +- .../discord/src/discordActionHandler.ts | 97 +++++++++++++---- .../onboarding/src/onboardingActionHandler.ts | 103 ++++++++++++++---- .../src/screencaptureActionHandler.ts | 31 ++---- .../agents/taskflow/src/actionHandler.mts | 37 ++++++- 6 files changed, 213 insertions(+), 74 deletions(-) diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index fb30030c0..a3d9f9de8 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -415,7 +415,12 @@ deferred until a clear need appears. | 7 | `taskflow` | text task listings | `table` (name / description / usage) | | 8 | `onboarding` | markdown wizard status | `heading` + `keyValue` (phase status) | | 9 | `screencapture` | image + markdown metadata | `image` + `heading`/`keyValue` | -| 10 | `osNotifications` | streamed notification log | `list`/`card` (event stream) | + +`osNotifications` was initially a Wave B candidate but is **out of scope**: +each notification is an individual toast/inline event pushed via +`context.notify` (single-line, intentionally plain text for clean CLI +rendering), not a list-shaped action result. Its action results are +short status confirmations. **Out of scope (v1):** `image`, `video`, `settings`, `chat`, `code`, `visualStudio`, `browser`, `markdown`, `montage`, `turtle`, `player`, diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 163d675b5..292be00cf 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-13 — Phase 4b client-side table pagination (`pageSize`) added; `TableColumn.pinned` reserved (not built)._ +_Last updated: 2026-07-13 — Phase 7 Wave B: `discord`, `taskflow`, `onboarding`, `screencapture` converted; `osNotifications` reclassified out-of-scope (toast-event stream, not list-shaped)._ ## Progress by phase @@ -77,11 +77,11 @@ Wave B — medium fit: | Item | Agent | Target blocks | Status | | ---- | ----- | ------------- | ------ | -| 7f | `discord` | heading + list/table | not started | -| 7g | `taskflow` | table (name/description/usage) | not started | -| 7h | `onboarding` | heading + keyValue (phase status) | not started | -| 7i | `screencapture` | image + heading/keyValue | not started | -| 7j | `osNotifications` | list/card (event stream) | not started | +| 7f | `discord` | heading + list/table | done | +| 7g | `taskflow` | table (name/description/usage) | done | +| 7h | `onboarding` | heading + keyValue (phase status) | done | +| 7i | `screencapture` | image + heading/keyValue | done | +| 7j | `osNotifications` | list/card (event stream) | out of scope — single toast/inline events via `context.notify`, not list-shaped | Out of scope (v1, custom UI / RPC bridge): `image`, `video`, `settings`, `chat`, `code`, `visualStudio`, `browser`, `markdown`, `montage`, diff --git a/ts/packages/agents/discord/src/discordActionHandler.ts b/ts/packages/agents/discord/src/discordActionHandler.ts index 5ae68c504..a77de4a4b 100644 --- a/ts/packages/agents/discord/src/discordActionHandler.ts +++ b/ts/packages/agents/discord/src/discordActionHandler.ts @@ -7,10 +7,13 @@ import { TypeAgentAction, ActionResult, SessionContext, + StructuredBlock, + ListItem, } from "@typeagent/agent-sdk"; import { createActionResultFromTextDisplay, createActionResultFromError, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { ChatModel, openai } from "@typeagent/aiclient"; import { DiscordActions } from "./discordSchema.js"; @@ -496,7 +499,8 @@ async function executeAction( `4. Save and restart the bot`, ); } - const display = messages.slice(0, 10).map((m) => { + const shown = messages.slice(0, 10); + const rows = shown.map((m) => { let content = m.content?.trim() ?? ""; if (!content) { content = SYSTEM_MESSAGE_TYPES[m.type] @@ -512,12 +516,35 @@ async function executeAction( minute: "2-digit", hour12: true, }); - return `[${ts}] ${m.author?.username ?? "unknown"}: ${content}`; + return [ts, m.author?.username ?? "unknown", content]; }); - return createActionResultFromTextDisplay( - display.length > 0 - ? display.join("\n") - : "No messages found.", + if (rows.length === 0) { + return createActionResultFromTextDisplay( + "No messages found.", + ); + } + return createStructuredResult( + [ + { + kind: "table", + columns: [ + { id: "time", header: "Time", type: "date" }, + { id: "author", header: "Author" }, + { id: "message", header: "Message" }, + ], + rows, + sortable: true, + }, + ], + { + rawData: shown.map((m) => ({ + id: m.id, + timestamp: m.timestamp, + author: m.author?.username, + content: m.content, + type: m.type, + })), + }, ); } case "getCurrentUser": { @@ -576,29 +603,53 @@ async function executeAction( group.sort((a, b) => (a.position ?? 0) - (b.position ?? 0)); } - const lines: string[] = []; + const blocks: StructuredBlock[] = []; + const totalNonCategory = all.filter( + (ch) => ch.type !== 4, + ).length; + blocks.push({ + kind: "heading", + level: 3, + text: `Channels (${totalNonCategory})`, + }); + + const toItems = (chans: DiscordChannel[]): ListItem[] => + chans.map((ch) => ({ + text: ch.name ?? ch.id, + subtitle: TYPE_LABELS[ch.type] ?? `type-${ch.type}`, + })); + // Uncategorized channels first - for (const ch of byParent.get(undefined) ?? []) { - const label = TYPE_LABELS[ch.type] ?? `type-${ch.type}`; - lines.push(` • ${ch.name} (${label})`); + const uncategorized = byParent.get(undefined) ?? []; + if (uncategorized.length > 0) { + blocks.push({ kind: "list", items: toItems(uncategorized) }); } // Each category and its children for (const cat of categories) { - lines.push(`\n ${cat.name?.toUpperCase() ?? cat.id}`); - for (const ch of byParent.get(cat.id) ?? []) { - const label = TYPE_LABELS[ch.type] ?? `type-${ch.type}`; - lines.push(` • ${ch.name} (${label})`); - } + const children = byParent.get(cat.id) ?? []; + if (children.length === 0) continue; + blocks.push({ + kind: "heading", + level: 3, + text: cat.name?.toUpperCase() ?? cat.id, + }); + blocks.push({ kind: "list", items: toItems(children) }); } - const totalNonCategory = all.filter( - (ch) => ch.type !== 4, - ).length; - return createActionResultFromTextDisplay( - lines.length > 0 - ? `Channels (${totalNonCategory}):\n${lines.join("\n")}` - : "No channels found.", - ); + if (totalNonCategory === 0) { + return createActionResultFromTextDisplay( + "No channels found.", + ); + } + return createStructuredResult(blocks, { + rawData: all.map((ch) => ({ + id: ch.id, + name: ch.name, + type: ch.type, + parent_id: ch.parent_id, + position: ch.position, + })), + }); } case "refreshChannels": { await fetchAndCacheChannels( diff --git a/ts/packages/agents/onboarding/src/onboardingActionHandler.ts b/ts/packages/agents/onboarding/src/onboardingActionHandler.ts index c58c50ccc..94e7404c2 100644 --- a/ts/packages/agents/onboarding/src/onboardingActionHandler.ts +++ b/ts/packages/agents/onboarding/src/onboardingActionHandler.ts @@ -11,6 +11,7 @@ import { import { createActionResultFromTextDisplay, createActionResultFromMarkdownDisplay, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { OnboardingActions } from "./onboardingSchema.js"; import { DiscoveryActions } from "./discovery/discoverySchema.js"; @@ -234,21 +235,44 @@ async function executeOnboardingAction( error: `Integration "${integrationName}" not found.`, }; } - const lines = [ - `## ${integrationName} — Onboarding Status`, - ``, - `**Current phase:** ${state.currentPhase}`, - `**Started:** ${state.createdAt}`, - `**Updated:** ${state.updatedAt}`, - ``, - `| Phase | Status |`, - `|---|---|`, - ...Object.entries(state.phases).map( - ([phase, ps]) => - `| ${phase} | ${statusIcon(ps.status)} ${ps.status} |`, - ), - ]; - return createActionResultFromMarkdownDisplay(lines.join("\n")); + return createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `${integrationName} — Onboarding Status`, + }, + { + kind: "keyValue", + pairs: [ + { + label: "Current phase", + value: state.currentPhase, + }, + { label: "Started", value: state.createdAt }, + { label: "Updated", value: state.updatedAt }, + ], + }, + { + kind: "table", + columns: [ + { id: "phase", header: "Phase" }, + { id: "status", header: "Status", type: "badge" }, + ], + rows: Object.entries(state.phases).map( + ([phase, ps]) => [ + phase, + { + text: `${statusIcon(ps.status)} ${ps.status}`, + badge: phaseStatusBadge(ps.status), + }, + ], + ), + readonly: true, + }, + ], + { rawData: state }, + ); } case "listIntegrations": { @@ -259,7 +283,8 @@ async function executeOnboardingAction( "No integrations found. Use startOnboarding to begin.", ); } - const lines = [`## Integrations`, ``]; + const rows: (string | number)[][] = []; + const raw: unknown[] = []; for (const name of names) { const state = await loadState(name); if (!state) continue; @@ -270,11 +295,34 @@ async function executeOnboardingAction( state.currentPhase === "complete" ) continue; - lines.push( - `- **${name}** — ${state.currentPhase} (updated ${state.updatedAt})`, + rows.push([name, state.currentPhase, state.updatedAt]); + raw.push({ + name, + currentPhase: state.currentPhase, + updatedAt: state.updatedAt, + }); + } + if (rows.length === 0) { + return createActionResultFromTextDisplay( + "No matching integrations found.", ); } - return createActionResultFromMarkdownDisplay(lines.join("\n")); + return createStructuredResult( + [ + { kind: "heading", level: 3, text: "Integrations" }, + { + kind: "table", + columns: [ + { id: "name", header: "Integration" }, + { id: "phase", header: "Phase" }, + { id: "updated", header: "Updated", type: "date" }, + ], + rows, + sortable: true, + }, + ], + { rawData: raw }, + ); } } } @@ -313,3 +361,20 @@ function statusIcon(status: string): string { return "❓"; } } + +function phaseStatusBadge( + status: string, +): "neutral" | "info" | "success" | "warning" | "error" { + switch (status) { + case "approved": + return "success"; + case "in-progress": + return "info"; + case "pending": + return "warning"; + case "skipped": + return "neutral"; + default: + return "neutral"; + } +} diff --git a/ts/packages/agents/screencapture/src/screencaptureActionHandler.ts b/ts/packages/agents/screencapture/src/screencaptureActionHandler.ts index 664bac256..7cdac68b8 100644 --- a/ts/packages/agents/screencapture/src/screencaptureActionHandler.ts +++ b/ts/packages/agents/screencapture/src/screencaptureActionHandler.ts @@ -17,9 +17,9 @@ import { import { createActionResult, createActionResultFromError, - createActionResultFromHtmlDisplay, createActionResultFromMarkdownDisplay, createActionResultFromTextDisplay, + createStructuredResult, createYesNoChoiceResult, } from "@typeagent/agent-sdk/helpers/action"; import { readFile, unlink, mkdir } from "fs/promises"; @@ -496,15 +496,6 @@ const MIME_BY_EXT: Record = { webp: "image/webp", }; -function escapeHtml(s: string): string { - return s - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'"); -} - async function resolveTarget( target: string | undefined, backend: PlatformBackend, @@ -628,15 +619,17 @@ async function handleTakeScreenshot( // only the textual summary so retrieval/contextual replay doesn't // pull megabytes of base64 forward. const dataUri = `data:${mime};base64,${buffer!.toString("base64")}`; - const html = [ - `
    `, - `
    ${escapeHtml(successMessage)}
    `, - ` screenshot of ${escapeHtml(subject)}`, - `
    `, - ].join("\n"); - result = createActionResultFromHtmlDisplay(html, successMessage); + result = createStructuredResult( + [ + { kind: "text", text: successMessage }, + { + kind: "image", + src: dataUri, + alt: `screenshot of ${subject}`, + }, + ], + { historyText: successMessage }, + ); } else { // Buffer missing (read failure) or too large — fall back to text // and lean on the saved path. Note buffer-too-large is diff --git a/ts/packages/agents/taskflow/src/actionHandler.mts b/ts/packages/agents/taskflow/src/actionHandler.mts index 63957bce4..4337f7416 100644 --- a/ts/packages/agents/taskflow/src/actionHandler.mts +++ b/ts/packages/agents/taskflow/src/actionHandler.mts @@ -15,6 +15,7 @@ import { import { createActionResultFromTextDisplay, createActionResultFromError, + createStructuredResult, } from "@typeagent/agent-sdk/helpers/action"; import { readFileSync, readdirSync } from "fs"; import { join, dirname } from "path"; @@ -132,12 +133,36 @@ async function handleTaskFlowAction( "No task flows registered.", ); } - const lines = entries.map( - (e) => - ` \u2022 ${e.actionName}: ${e.description} [usage: ${e.usageCount}]${e.source === "seed" ? " (sample)" : ""}`, - ); - return createActionResultFromTextDisplay( - `Task flows (${entries.length}):\n${lines.join("\n")}`, + return createStructuredResult( + [ + { + kind: "heading", + level: 3, + text: `Task flows (${entries.length})`, + }, + { + kind: "table", + columns: [ + { id: "actionName", header: "Task Flow" }, + { id: "description", header: "Description" }, + { + id: "usageCount", + header: "Usage", + type: "number", + align: "right", + }, + { id: "source", header: "Source" }, + ], + rows: entries.map((e) => [ + e.actionName, + e.description, + e.usageCount, + e.source === "seed" ? "sample" : "user", + ]), + sortable: true, + }, + ], + { rawData: entries }, ); } From e5865c9914d7a9dd4a86571560ea3764b328d9e3 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 17:22:14 -0700 Subject: [PATCH 19/36] fixed notification pipeline --- ts/packages/chat-ui/src/chatPanel.ts | 47 ++++++++++++++++ ts/packages/chat-ui/test/chatPanel.spec.ts | 49 +++++++++++++++++ .../shell/src/renderer/src/chatPanelBridge.ts | 54 +++++++++++++------ 3 files changed, 134 insertions(+), 16 deletions(-) diff --git a/ts/packages/chat-ui/src/chatPanel.ts b/ts/packages/chat-ui/src/chatPanel.ts index 6b71bd0dd..bfbd83fa1 100644 --- a/ts/packages/chat-ui/src/chatPanel.ts +++ b/ts/packages/chat-ui/src/chatPanel.ts @@ -524,6 +524,14 @@ export class ChatPanel { * Toast and inline rows do NOT participate in this map. */ private threadContainers = new Map(); + /** + * Persistent, dismissable notification bubbles keyed by a caller-supplied + * notification id (e.g. the osNotifications agent's "os:" dismiss + * key). Separate from `threadContainers` so notifications never collide + * with request-driven agent bubbles and can be removed independently when + * the underlying OS notification leaves the action center (osDismiss). + */ + private notificationContainers = new Map(); /** * All agent bubbles ever created for a request/thread id, in creation * order. Step-mode reasoning intentionally creates multiple bubbles per @@ -2455,6 +2463,44 @@ export class ChatPanel { this.scrollToBottom(); } + /** + * Render a persistent, dismissable agent notification bubble (e.g. an OS + * notification forwarded by the osNotifications agent). Unlike + * {@link showToast}, the bubble stays in the chat scroll until + * {@link removeNotification} is called with the same `notificationId`. + * Calling again with an existing id updates that bubble in place. + */ + public addNotification( + content: DisplayContent, + source: string, + notificationId: string, + ): void { + let container = this.notificationContainers.get(notificationId); + if (container === undefined) { + container = this.createAgentContainer( + source, + this.iconForSource(source), + ); + this.notificationContainers.set(notificationId, container); + } + container.setMessage(content, source, undefined); + this.scrollToBottom(); + } + + /** + * Remove a notification bubble previously added via + * {@link addNotification}. Used by OS-notification dismiss handling — the + * OS reports a notification has left the action center and we drop the + * corresponding chat bubble. No-op (returns false) if the id is unknown. + */ + public removeNotification(notificationId: string): boolean { + const container = this.notificationContainers.get(notificationId); + if (container === undefined) return false; + container.remove(); + this.notificationContainers.delete(notificationId); + return true; + } + /** * Add a non-conversational system message styled distinctly from agent * messages (no avatar, no source label, no timestamp). Use for `@`-config @@ -2839,6 +2885,7 @@ export class ChatPanel { sentinel.className = "chat-sentinel"; this.messageDiv.appendChild(sentinel); this.threadContainers.clear(); + this.notificationContainers.clear(); this.requestAgentContainers.clear(); this.currentUserThreadId = undefined; this.pendingThreadDisplayInfo.clear(); diff --git a/ts/packages/chat-ui/test/chatPanel.spec.ts b/ts/packages/chat-ui/test/chatPanel.spec.ts index a5376af5a..a93e46d07 100644 --- a/ts/packages/chat-ui/test/chatPanel.spec.ts +++ b/ts/packages/chat-ui/test/chatPanel.spec.ts @@ -273,3 +273,52 @@ describe("icons", () => { } }); }); + +describe("notifications (persistent, dismissable)", () => { + function agentBubbles(root: HTMLElement): HTMLElement[] { + return Array.from( + root.querySelectorAll(".chat-message-agent"), + ); + } + + it("addNotification renders a persistent agent bubble", () => { + const { root, panel } = makePanel(); + panel.addNotification("Build finished", "osNotifications", "os:1"); + const bubbles = agentBubbles(root); + expect(bubbles.length).toBe(1); + expect(bubbles[0].textContent).toContain("Build finished"); + }); + + it("reusing an id updates the same bubble in place (no duplicate)", () => { + const { root, panel } = makePanel(); + panel.addNotification("first", "osNotifications", "os:1"); + panel.addNotification("second", "osNotifications", "os:1"); + const bubbles = agentBubbles(root); + expect(bubbles.length).toBe(1); + expect(bubbles[0].textContent).toContain("second"); + expect(bubbles[0].textContent).not.toContain("first"); + }); + + it("removeNotification drops the matching bubble and returns true", () => { + const { root, panel } = makePanel(); + panel.addNotification("Build finished", "osNotifications", "os:1"); + expect(panel.removeNotification("os:1")).toBe(true); + expect(agentBubbles(root).length).toBe(0); + }); + + it("removeNotification is a no-op for unknown ids", () => { + const { panel } = makePanel(); + expect(panel.removeNotification("os:unknown")).toBe(false); + }); + + it("distinct ids produce distinct bubbles removable independently", () => { + const { root, panel } = makePanel(); + panel.addNotification("one", "osNotifications", "os:1"); + panel.addNotification("two", "osNotifications", "os:2"); + expect(agentBubbles(root).length).toBe(2); + panel.removeNotification("os:1"); + const remaining = agentBubbles(root); + expect(remaining.length).toBe(1); + expect(remaining[0].textContent).toContain("two"); + }); +}); diff --git a/ts/packages/shell/src/renderer/src/chatPanelBridge.ts b/ts/packages/shell/src/renderer/src/chatPanelBridge.ts index 09adbcdee..8f7d90ab4 100644 --- a/ts/packages/shell/src/renderer/src/chatPanelBridge.ts +++ b/ts/packages/shell/src/renderer/src/chatPanelBridge.ts @@ -920,30 +920,52 @@ export function createChatPanelClient( }); break; case AppAgentEvent.Inline: - chatPanel.showInline(data, source); - if (source !== "osNotifications") { - notifications.push({ - event, - source, + if (source === "osNotifications") { + // OS notifications render as persistent, dismissable + // bubbles (removed on osDismiss), NOT ephemeral + // toast/inline rows. The notificationId ("os:") + // arrives as the notify requestId. + chatPanel.addNotification( data, - read: false, - requestId, - }); + source, + ridStr(requestId)!, + ); + break; } + chatPanel.showInline(data, source); + notifications.push({ + event, + source, + data, + read: false, + requestId, + }); break; case AppAgentEvent.Toast: - chatPanel.showToast(data, source); - if (source !== "osNotifications") { - notifications.push({ - event, - source, + if (source === "osNotifications") { + chatPanel.addNotification( data, - read: false, - requestId, - }); + source, + ridStr(requestId)!, + ); + break; } + chatPanel.showToast(data, source); + notifications.push({ + event, + source, + data, + read: false, + requestId, + }); break; case "osDismiss": + // The OS notification left the action center — drop the + // corresponding persistent bubble. data.id matches the + // notificationId ("os:") used on the "added" event. + if (data && typeof data.id === "string") { + chatPanel.removeNotification(data.id); + } break; default: break; From 9ec63a549395c35ad91238500b8ec93a875861a8 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 17:26:35 -0700 Subject: [PATCH 20/36] fixed agent registration --- .../src/osNotificationsActionHandler.ts | 40 ++++-- .../src/watchers/windowsWatcher.ts | 133 +++++++++++++++++- .../test/osNotificationsReadiness.spec.ts | 28 +++- ts/packages/vscode-shell/src/webview/main.ts | 22 ++- 4 files changed, 202 insertions(+), 21 deletions(-) diff --git a/ts/packages/agents/osNotifications/src/osNotificationsActionHandler.ts b/ts/packages/agents/osNotifications/src/osNotificationsActionHandler.ts index 95aefc3f4..fb6384df5 100644 --- a/ts/packages/agents/osNotifications/src/osNotificationsActionHandler.ts +++ b/ts/packages/agents/osNotifications/src/osNotificationsActionHandler.ts @@ -45,6 +45,7 @@ import { HelperNotBuiltError, buildWindowsHelper, isWindowsHelperBuilt, + isSparsePackageRegistered, } from "./watchers/windowsWatcher.js"; const debug = registerDebug("typeagent:osNotifications"); @@ -91,20 +92,35 @@ export type AgentContext = { export function evaluateReadiness( platform: NodeJS.Platform, helperBuilt: boolean, + sparsePackageRegistered: boolean, ): ReadinessReport { if (platform !== "win32") { return { state: "ready" }; } - if (helperBuilt) { - return { state: "ready" }; + if (!helperBuilt) { + return { + state: "setup-required", + message: + "OS notification helper exe (OsNotificationListener.exe) hasn't been built yet.", + details: + "Setup runs `dotnet publish` + signs + registers a sparse WinAppSDK package; ~30–60 seconds first time.", + }; } - return { - state: "setup-required", - message: - "OS notification helper exe (OsNotificationListener.exe) hasn't been built yet.", - details: - "Setup runs `dotnet publish` + signs + registers a sparse WinAppSDK package; ~30–60 seconds first time.", - }; + // Exe presence alone is NOT enough: without the sparse identity package + // registered, the exe launches but its UserNotificationListener + // subscription fails at runtime (COMException 0x80070490). Surface this as + // setup-required so `@config agent setup` re-runs the register step instead + // of short-circuiting on "already ready". + if (!sparsePackageRegistered) { + return { + state: "setup-required", + message: + "OS notification helper is built but its identity package isn't registered.", + details: + "Setup registers a signed sparse WinAppSDK package (one elevation prompt to trust the dev cert) so the helper can subscribe to notification events.", + }; + } + return { state: "ready" }; } // ============================================================================ @@ -428,7 +444,11 @@ export function instantiate(): AppAgent { // calls this right after the agent is enabled, after setup, and // on @config agent refresh. The result is cached. async checkReadiness(): Promise { - return evaluateReadiness(process.platform, isWindowsHelperBuilt()); + return evaluateReadiness( + process.platform, + isWindowsHelperBuilt(), + isSparsePackageRegistered(), + ); }, // Returns the same yes/no card the agent used to offer when diff --git a/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts b/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts index 5268829a7..49d29473b 100644 --- a/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts +++ b/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts @@ -3,6 +3,7 @@ import { spawn, spawnSync, type ChildProcess } from "node:child_process"; import { existsSync, readdirSync } from "node:fs"; +import * as os from "node:os"; import * as path from "node:path"; import { fileURLToPath } from "node:url"; import registerDebug from "debug"; @@ -173,6 +174,27 @@ export function isWindowsHelperBuilt(): boolean { return resolveHelperPath() !== undefined; } +// Public probe used by checkReadiness — verifies the WinAppSDK sparse identity +// package is actually registered for the current user. Exe presence alone is +// NOT sufficient: without this registration the exe launches but its +// UserNotificationListener subscription fails at runtime with +// COMException 0x80070490 ("the identity package isn't registered for this exe +// location"). Returning false here lets `@config agent setup` re-run the +// pack/sign/register pipeline instead of short-circuiting on "already ready". +// +// Best-effort: any PowerShell failure is treated as "not registered" so a +// probe error never masks a genuinely-missing registration. +export function isSparsePackageRegistered(): boolean { + try { + const out = runPowerShellSync( + `if (Get-AppxPackage -Name '${IDENTITY_PACKAGE_NAME}' -ErrorAction SilentlyContinue) { 'YES' } else { 'NO' }`, + ).trim(); + return out.endsWith("YES"); + } catch { + return false; + } +} + // Resolves the directory holding the C# helper project. The project lives at // /dotnet/osNotificationListener/, alongside other repo C# projects. // This module compiles into dist/watchers/, so we walk six levels up to the @@ -222,6 +244,8 @@ const CODE_SIGNING_EKU = "1.3.6.1.5.5.7.3.3"; const IDENTITY_PACKAGE_NAME = "TypeAgent.OsNotificationListener"; const IDENTITY_DIR = "identity"; const MSIX_FILE = "TypeAgent.OsNotificationListener.msix"; +// Public cert exported by tools/scripts/getCert.mjs under ~/.typeagent. +const DEV_CERT_FILE = "TypeAgent-Development-Certificate.cer"; // Full build pipeline for the WinAppSDK sparse-packaged helper: // dotnet clean + publish -> writes exe under publish/ @@ -382,6 +406,105 @@ function findSigningCertThumbprint(): string { return out; } +// True when the dev signing cert is trusted at the LocalMachine scope (Root). +// AppX deployment runs in SYSTEM context and only honors LocalMachine trust, so +// this — not the CurrentUser trust that signtool uses — is what governs whether +// Add-AppxPackage accepts the MSIX signature. LocalMachine\Root is world- +// readable, so the probe itself needs no elevation. +function isCertTrustedLocalMachine(): boolean { + try { + const ps = ` + $store = New-Object System.Security.Cryptography.X509Certificates.X509Store('Root','LocalMachine') + $store.Open('ReadOnly') + $found = $store.Certificates | Where-Object { $_.Subject -eq '${SIGNING_CERT_SUBJECT}' } + $store.Close() + if ($found) { 'YES' } else { 'NO' } + `; + return runPowerShellSync(ps).trim().endsWith("YES"); + } catch { + return false; + } +} + +// Ensures the dev signing cert is trusted at the LocalMachine scope, importing +// it (into Root + TrustedPeople) via a single elevated PowerShell if it isn't. +// This is the step that was previously a manual, easy-to-miss prerequisite — +// folding it into setup means a first-time user gets one UAC prompt instead of +// a cryptic 0x800B0109 failure. Idempotent: no-op when already trusted. +// +// Uses -EncodedCommand for the elevated inner script to sidestep nested-quoting +// issues, and .NET X509Store APIs rather than Import-Certificate/the Cert: +// PSDrive (which can fail to autoload under -NoProfile). +async function ensureCertTrustedLocalMachine(opts: { + onProgress?: (line: string) => void; +}): Promise { + if (isCertTrustedLocalMachine()) return; + + const cerPath = path.join(os.homedir(), ".typeagent", DEV_CERT_FILE); + if (!existsSync(cerPath)) { + throw new Error( + `Dev cert public file not found at ${cerPath}. Run:\n` + + " node tools/scripts/getCert.mjs install --trusted-root\n" + + "then retry setup.", + ); + } + + opts.onProgress?.( + "[setup] Trusting dev cert at LocalMachine scope (accept the elevation prompt)…", + ); + + const esc = (s: string) => s.replace(/'/g, "''"); + const importScript = ` + $cer = '${esc(cerPath)}' + $c = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cer + foreach ($name in @('Root','TrustedPeople')) { + $store = New-Object System.Security.Cryptography.X509Certificates.X509Store($name,'LocalMachine') + $store.Open('ReadWrite') + $store.Add($c) + $store.Close() + } + `; + const encoded = Buffer.from(importScript, "utf16le").toString("base64"); + // Launch an elevated child (UAC prompt) and wait for it; propagate its exit + // code so a declined prompt / import failure surfaces as a setup error. + const launcher = + "$p = Start-Process powershell.exe -Verb RunAs -PassThru -Wait " + + "-ArgumentList '-NoProfile','-NonInteractive','-ExecutionPolicy'," + + `'Bypass','-EncodedCommand','${encoded}'; exit $p.ExitCode`; + try { + await runProcess( + "powershell.exe", + [ + "-NoProfile", + "-NonInteractive", + "-ExecutionPolicy", + "Bypass", + "-Command", + launcher, + ], + os.homedir(), + opts, + ); + } catch (e: any) { + throw new Error( + "Failed to trust the dev cert at LocalMachine scope " + + "(the elevation prompt may have been declined). Either re-run " + + "setup and accept the UAC prompt, or from an elevated " + + "PowerShell run:\n" + + ` $cer = '${cerPath}'\n` + + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\Root\n" + + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\TrustedPeople\n" + + `Original error: ${e?.message ?? e}`, + ); + } + if (!isCertTrustedLocalMachine()) { + throw new Error( + "Dev cert still not trusted at LocalMachine scope after the import " + + "attempt. Accept the UAC prompt when re-running setup.", + ); + } +} + // Registers the identity package against an external exe location. Idempotent — // if the same package is already registered, Add-AppxPackage replaces it. async function registerSparsePackage( @@ -389,6 +512,11 @@ async function registerSparsePackage( externalLocation: string, opts: { onProgress?: (line: string) => void }, ): Promise { + // AppX signature validation runs as SYSTEM and only honors LocalMachine + // trust — make sure the dev cert is trusted there before we deploy, so a + // first-time user never hits the raw 0x800B0109 CERT_E_UNTRUSTEDROOT. + await ensureCertTrustedLocalMachine(opts); + // Both paths embedded as PowerShell single-quoted literals; escape ' // by doubling per PowerShell's quoting rules. const esc = (s: string) => s.replace(/'/g, "''"); @@ -422,8 +550,9 @@ async function registerSparsePackage( const msg = e?.message ?? String(e); if (msg.includes("0x800B0109")) { throw new Error( - "Add-AppxPackage failed with CERT_E_UNTRUSTEDROOT — the dev cert isn't trusted at the LocalMachine scope. " + - "From an elevated PowerShell, run:\n" + + "Add-AppxPackage failed with CERT_E_UNTRUSTEDROOT even after the " + + "LocalMachine trust step. The dev cert may have been imported " + + "into the wrong store or removed. From an elevated PowerShell, run:\n" + ' $cer = "$env:USERPROFILE\\.typeagent\\TypeAgent-Development-Certificate.cer"\n' + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\Root\n" + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\TrustedPeople\n" + diff --git a/ts/packages/agents/osNotifications/test/osNotificationsReadiness.spec.ts b/ts/packages/agents/osNotifications/test/osNotificationsReadiness.spec.ts index 29c1ffb96..ba362c985 100644 --- a/ts/packages/agents/osNotifications/test/osNotificationsReadiness.spec.ts +++ b/ts/packages/agents/osNotifications/test/osNotificationsReadiness.spec.ts @@ -25,26 +25,40 @@ import type { ActionContext } from "@typeagent/agent-sdk"; describe("evaluateReadiness", () => { test("ready on linux regardless of helperBuilt flag", () => { - expect(evaluateReadiness("linux", false)).toEqual({ state: "ready" }); - expect(evaluateReadiness("linux", true)).toEqual({ state: "ready" }); + expect(evaluateReadiness("linux", false, false)).toEqual({ + state: "ready", + }); + expect(evaluateReadiness("linux", true, false)).toEqual({ + state: "ready", + }); }); test("ready on darwin (helper is Windows-only)", () => { - expect(evaluateReadiness("darwin", false)).toEqual({ state: "ready" }); + expect(evaluateReadiness("darwin", false, false)).toEqual({ + state: "ready", + }); }); - test("ready on win32 when the helper exe is present", () => { - expect(evaluateReadiness("win32", true)).toEqual({ state: "ready" }); + test("ready on win32 when the helper exe is present and registered", () => { + expect(evaluateReadiness("win32", true, true)).toEqual({ + state: "ready", + }); }); test("setup-required on win32 when the helper exe is missing", () => { - const r = evaluateReadiness("win32", false); + const r = evaluateReadiness("win32", false, false); expect(r.state).toBe("setup-required"); expect(r.message).toMatch(/OsNotificationListener\.exe/); }); + test("setup-required on win32 when built but identity package not registered", () => { + const r = evaluateReadiness("win32", true, false); + expect(r.state).toBe("setup-required"); + expect(r.message).toMatch(/identity package isn't registered/); + }); + test("setup-required report includes 'details' explaining what setup runs", () => { - const r = evaluateReadiness("win32", false); + const r = evaluateReadiness("win32", false, false); expect(r.state).toBe("setup-required"); expect(r.details).toMatch(/dotnet publish/); expect(r.details).toMatch(/sparse WinAppSDK package/); diff --git a/ts/packages/vscode-shell/src/webview/main.ts b/ts/packages/vscode-shell/src/webview/main.ts index bb328c091..4c52c7214 100644 --- a/ts/packages/vscode-shell/src/webview/main.ts +++ b/ts/packages/vscode-shell/src/webview/main.ts @@ -884,9 +884,27 @@ window.addEventListener("message", (event) => { clearQueueChip(rid); if (msg.aliasRequestId) clearQueueChip(msg.aliasRequestId); } else if (msg.event === "inline") { - chatPanel.showInline(msg.data, msg.source); + if (msg.source === "osNotifications" && rid) { + // OS notifications render as persistent, dismissable + // bubbles (removed on osDismiss), not ephemeral rows. + // The notificationId ("os:") arrives as requestId. + chatPanel.addNotification(msg.data, msg.source, rid); + } else { + chatPanel.showInline(msg.data, msg.source); + } } else if (msg.event === "toast") { - chatPanel.showToast(msg.data, msg.source); + if (msg.source === "osNotifications" && rid) { + chatPanel.addNotification(msg.data, msg.source, rid); + } else { + chatPanel.showToast(msg.data, msg.source); + } + } else if (msg.event === "osDismiss") { + // The OS notification left the action center — drop the + // matching persistent bubble. data.id is the "os:" + // notificationId used on the corresponding "added" event. + if (msg.data && typeof msg.data.id === "string") { + chatPanel.removeNotification(msg.data.id); + } } else { chatPanel.addSystemMessage(`[${msg.source}] ${msg.event}`); } From 9463d40bf9a9f6a50ebc70c32b163a228041a1f1 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 17:49:40 -0700 Subject: [PATCH 21/36] added structured output tests --- ts/docs/plans/structured-output/PLAN.md | 81 +++++++++++ ts/docs/plans/structured-output/STATUS.md | 29 +++- .../calendar/src/calendarActionHandlerV3.ts | 4 +- .../calendar/test/calendarStructured.spec.ts | 96 +++++++++++++ ts/packages/agents/ipconfig/jest.config.cjs | 4 + ts/packages/agents/ipconfig/package.json | 5 + .../ipconfig/src/ipconfigActionHandler.ts | 4 +- .../ipconfig/test/ipconfigStructured.spec.ts | 84 ++++++++++++ .../agents/ipconfig/test/tsconfig.json | 14 ++ ts/packages/agents/ipconfig/tsconfig.json | 3 + ts/packages/agents/list/jest.config.cjs | 4 + ts/packages/agents/list/package.json | 5 + .../agents/list/src/listActionHandler.ts | 15 +- .../agents/list/test/listStructured.spec.ts | 65 +++++++++ ts/packages/agents/list/test/tsconfig.json | 14 ++ ts/packages/agents/list/tsconfig.json | 2 +- ts/packages/agents/weather/jest.config.cjs | 4 + ts/packages/agents/weather/package.json | 5 + .../weather/src/weatherActionHandler.ts | 88 +++++++++--- ts/packages/agents/weather/test/tsconfig.json | 14 ++ .../weather/test/weatherStructured.spec.ts | 128 ++++++++++++++++++ ts/packages/agents/weather/tsconfig.json | 8 +- ts/pnpm-lock.yaml | 18 +++ 23 files changed, 665 insertions(+), 29 deletions(-) create mode 100644 ts/packages/agents/calendar/test/calendarStructured.spec.ts create mode 100644 ts/packages/agents/ipconfig/jest.config.cjs create mode 100644 ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts create mode 100644 ts/packages/agents/ipconfig/test/tsconfig.json create mode 100644 ts/packages/agents/list/jest.config.cjs create mode 100644 ts/packages/agents/list/test/listStructured.spec.ts create mode 100644 ts/packages/agents/list/test/tsconfig.json create mode 100644 ts/packages/agents/weather/jest.config.cjs create mode 100644 ts/packages/agents/weather/test/tsconfig.json create mode 100644 ts/packages/agents/weather/test/weatherStructured.spec.ts diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index a3d9f9de8..47f9d0a28 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -430,6 +430,87 @@ short status confirmations. `desktop`, `vampire`, `androidMobile`, `powershell`, `utility`, `studio` (short text/status confirmations). +### Phase 8 — RPC / custom-UI agents *(after 7; mostly out of scope)* + +These are the twelve agents Wave A/B set aside as "custom UI / RPC +bridge." The distinguishing property is **where the display is produced**: +their user-facing output does not flow through +`ActionResult.displayContent` as flattened list/record text, so the +block-document model has nothing to convert. Three architectures: + +- **WebSocket/RPC bridge to an external process** — the agent forwards a + command and the *external* client renders the result; the + `displayContent` path carries only status/error text. + - `code` → Coda VS Code extension (`codeAgentWebSocketServer.ts`; + display goes straight to the socket via + `actionIO.setDisplay(data.result)`). + - `visualStudio` → VS C# extension (`VisualStudioBridge`); only bridge + error text uses `createActionResultFromTextDisplay`. + - `player` (Spotify) / `playerLocal` — imperative playback commands; + results are errors + HTML player widgets, no list results on the + `displayContent` path. +- **Custom webapp (forked view process + Yjs/HTTP)** — a separate web + app owns rendering; agent results are "opening / updated" status text. + - `markdown`, `montage`, `turtle` (each forks a `site/` viewer). +- **Bespoke interactive HTML/JS** via + `createActionResultFromHtmlDisplayWithScript` / iframe — the payload is + a *pre-rendered* stateful widget (forms, carousels, players), not + structured data + fallback. + - `image` (carousel), `video` (polling player), `settings` (forms), + `chat` (freeform LLM text + HTML-embedded images). + +**Verdict: only `browser` has a genuinely convertible result.** Its web +**search results** are produced by `generateWebSearchMarkdown()` and +returned through the normal `createActionResultFromMarkdownDisplay` path +(`browserActionHandler.mts` ~L1771) — a list of `{ title, url, domain, +snippet, relevanceScore }`. The browser's page-interaction actions +(navigate, screenshot, follow-link) stay on the extension-RPC path. + +#### Phase 8a — `browser` web-search → structured *(the one adopter)* + +Convert `generateWebSearchMarkdown()`'s output to a `StructuredContent` +document: a heading (`Found N results for "query"`) + a **table** (or +`list`) with a link title column, domain, snippet, and a right-aligned +relevance column; `sortable: true`, `pageSize: 10`; carry the raw +`websites` array as `rawData`. Keep the existing entity creation +untouched. The knowledge-preview path +(`generateLiveKnowledgePreview`, ~L1521) emits HTML into the extension +and is **not** in scope here. + +- **Client caveat:** `browser` search results can surface in the Chrome/ + Edge extension, which has its **own** renderer and does not understand + `type: "structured"`. The SDK-derived markdown `alternates` (via + `getStructuredFallback`) cover it, but this must be **visually + verified in the extension** before shipping — if the extension renders + raw JSON instead of the markdown alternate, either update the + extension to prefer the alternate or keep this conversion behind the + shell/vscode surfaces only. + +#### Phase 8b — the rest: prerequisites, not work items + +The remaining eleven agents are **out of scope until their external +renderer understands `StructuredContent` (or reliably falls back to the +markdown/text alternate).** No agent-side change is worthwhile before +then, because the block document would either never reach a +block-capable renderer or would replace a richer bespoke widget with a +plain table. Concretely, a future effort would need: + +- **Extension/bridge renderers** (`code`, `visualStudio`, `browser` + extension) to consume `DisplayContent` and call `getContentForType` / + `getStructuredFallback` like `chat-ui` and `vscode-chat` do today. +- **Webapp viewers** (`markdown`, `montage`, `turtle`) — no change; their + content is documents/graphics, not tabular data. Leave as-is + permanently. +- **Widget agents** (`image`, `video`, `settings`, `chat`, `playerLocal`, + `player`) — would each need a redesign to separate *data* from + *pre-rendered widget* (e.g. `image` emitting `ImageBlock[]` instead of + a carousel iframe). Only pursue per-agent if a concrete UX need + arises; not a batch conversion. + +**Recommendation:** do **Phase 8a** (browser search) as an isolated, +visually-validated change; treat **8b** as documentation of +prerequisites, not a backlog to burn down. + ## Verification - `pnpm --filter agent-sdk test` + `pnpm run build agent-sdk` — diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index 292be00cf..dbf803d08 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -4,7 +4,7 @@ Working tracker for the plan in [PLAN.md](./PLAN.md). Update whenever a phase item is started, completed, or a follow-up surfaces. Keep entries terse — one line per item where possible. -_Last updated: 2026-07-13 — Phase 7 Wave B: `discord`, `taskflow`, `onboarding`, `screencapture` converted; `osNotifications` reclassified out-of-scope (toast-event stream, not list-shaped)._ +_Last updated: 2026-07-13 — Phase 7 Wave B: `discord`, `taskflow`, `onboarding`, `screencapture` converted; `osNotifications` reclassified out-of-scope (toast-event stream, not list-shaped). Phase 8 (RPC/custom-UI agents) plan added. Agent builder unit tests added for calendar/weather/ipconfig/list (78 structured tests total incl. github-cli)._ ## Progress by phase @@ -91,6 +91,33 @@ Deferred (low value, short text/status): `timer`, `windowsClock`, `greeting`, `desktop`, `vampire`, `androidMobile`, `powershell`, `utility`, `studio`. +### Phase 8 — RPC / custom-UI agents *(mostly out of scope; see PLAN Phase 8)* + +| Item | Agent | Plan | Status | +| ---- | ----- | ---- | ------ | +| 8a | `browser` | web-search results (`generateWebSearchMarkdown`) → heading + table (`pageSize: 10`) + rawData; **verify markdown fallback in Chrome/Edge extension** | not started | +| 8b | `code`, `visualStudio`, `player`, `playerLocal`, `markdown`, `montage`, `turtle`, `image`, `video`, `settings`, `chat` | out of scope — display lives in external bridge/webapp/widget, not on the `displayContent` path; blocked on external renderers understanding `StructuredContent` / its fallback | deferred | + +### Agent builder unit tests + +Structured-output builders extracted to pure exported functions and +covered by per-agent specs (in addition to the 16 SDK derivation tests): + +| Agent | Spec | Builder(s) | Tests | +| ----- | ---- | ---------- | ----- | +| github-cli | `githubCliStructuredResults.spec.ts` | list / repo / dependabot / contributors / pr / issue / field | 46 | +| calendar | `calendarStructured.spec.ts` | `buildStructuredEventList` | 9 | +| weather | `weatherStructured.spec.ts` | `buildCurrentConditionsResult`, `buildForecastResult` | 10 | +| ipconfig | `ipconfigStructured.spec.ts` | `buildStructuredOutput` | 7 | +| list | `listStructured.spec.ts` | `buildListResult` | 6 | + +Covers all core block shapes: table, keyValue, list, heading, badge, +link cells, pagination, and rawData. New jest harnesses were scaffolded +for `weather`, `ipconfig`, and `list` (calendar already had one). +`email`, `discord`, `taskflow`, `onboarding`, `screencapture` builders +remain inline (validated by build/typecheck); their block shapes are +covered transitively by the specs above. + ## Open questions | # | Question | Resolution | diff --git a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts index 8200579f7..7d85ad858 100644 --- a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts +++ b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts @@ -374,7 +374,9 @@ function formatEventsAsText(events: any[]): string { // (Subject as a link, When, Location) plus a machine-readable rawData payload. // The SDK derives the markdown/text fallback for clients that can't render // blocks. -function buildStructuredEventList( +// +// Exported for unit tests. +export function buildStructuredEventList( events: any[], heading?: string, ): ActionResultSuccess { diff --git a/ts/packages/agents/calendar/test/calendarStructured.spec.ts b/ts/packages/agents/calendar/test/calendarStructured.spec.ts new file mode 100644 index 000000000..ad2575fc9 --- /dev/null +++ b/ts/packages/agents/calendar/test/calendarStructured.spec.ts @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Unit tests for the structured-content agenda builder in + * calendarActionHandlerV3. buildStructuredEventList converts a list of raw + * calendar events into an ActionResultSuccess whose displayContent is a + * StructuredContent document (optional heading + table). + */ + +import { buildStructuredEventList } from "../src/calendarActionHandlerV3.js"; + +function blocks(result: ReturnType) { + return (result.displayContent as any).blocks; +} + +function tableBlock(result: ReturnType) { + return blocks(result).find((b: any) => b.kind === "table"); +} + +const events = [ + { + subject: "Team sync", + start: { dateTime: "2026-07-13T09:00:00" }, + end: { dateTime: "2026-07-13T09:30:00" }, + location: { displayName: "Room 1" }, + htmlLink: "https://calendar.example/e/1", + }, + { + subject: "1:1", + start: { dateTime: "2026-07-13T11:00:00" }, + end: { dateTime: "2026-07-13T11:30:00" }, + location: "Cafe", + }, +]; + +describe("buildStructuredEventList", () => { + test("returns a structured displayContent", () => { + const result = buildStructuredEventList(events); + expect((result.displayContent as any).type).toBe("structured"); + }); + + test("no heading when omitted", () => { + const result = buildStructuredEventList(events); + expect(blocks(result).some((b: any) => b.kind === "heading")).toBe( + false, + ); + }); + + test("adds a heading block when provided", () => { + const result = buildStructuredEventList(events, "Today"); + expect(blocks(result)[0]).toMatchObject({ + kind: "heading", + text: "Today", + }); + }); + + test("table has Event / When / Location columns", () => { + const t = tableBlock(buildStructuredEventList(events)); + expect(t.columns.map((c: any) => c.id)).toEqual([ + "subject", + "when", + "location", + ]); + }); + + test("subject cell is a link when htmlLink is present", () => { + const t = tableBlock(buildStructuredEventList(events)); + expect(t.rows[0][0]).toMatchObject({ + text: "Team sync", + href: "https://calendar.example/e/1", + }); + }); + + test("subject cell is plain text without htmlLink", () => { + const t = tableBlock(buildStructuredEventList(events)); + expect(t.rows[1][0]).toBe("1:1"); + }); + + test("location resolves both object and string forms", () => { + const t = tableBlock(buildStructuredEventList(events)); + expect(t.rows[0][2]).toBe("Room 1"); + expect(t.rows[1][2]).toBe("Cafe"); + }); + + test("table is sortable and paginated", () => { + const t = tableBlock(buildStructuredEventList(events)); + expect(t.sortable).toBe(true); + expect(t.pageSize).toBe(15); + }); + + test("rawData carries the original events", () => { + const result = buildStructuredEventList(events); + expect((result.displayContent as any).rawData).toBe(events); + }); +}); diff --git a/ts/packages/agents/ipconfig/jest.config.cjs b/ts/packages/agents/ipconfig/jest.config.cjs new file mode 100644 index 000000000..f475768a1 --- /dev/null +++ b/ts/packages/agents/ipconfig/jest.config.cjs @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +module.exports = require("../../../jest.config.js"); diff --git a/ts/packages/agents/ipconfig/package.json b/ts/packages/agents/ipconfig/package.json index 2383576f6..837d09f4a 100644 --- a/ts/packages/agents/ipconfig/package.json +++ b/ts/packages/agents/ipconfig/package.json @@ -24,6 +24,9 @@ "asc": "asc -i ./src/ipconfigSchema.ts -o ./dist/ipconfigSchema.pas.json -t IpconfigActions", "build": "concurrently npm:tsc npm:asc npm:agc", "clean": "rimraf --glob dist *.tsbuildinfo *.done.build.log", + "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js", + "test": "npm run test:local", + "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", "tsc": "tsc -b" }, "dependencies": { @@ -32,7 +35,9 @@ "devDependencies": { "@typeagent/action-grammar-compiler": "workspace:*", "@typeagent/action-schema-compiler": "workspace:*", + "@types/jest": "^29.5.7", "concurrently": "^9.1.2", + "jest": "^29.7.0", "rimraf": "^6.0.1", "typescript": "~5.4.5" }, diff --git a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts index 020a7b636..9058188ca 100644 --- a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts +++ b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts @@ -126,7 +126,9 @@ const STRUCTURED_ACTIONS = new Set([ // (unindented header line) becomes a heading + keyValue block; the dotted // "Key . . . : Value" lines become key-value pairs. The SDK derives the // markdown/text fallback for clients that can't render blocks. -function buildStructuredOutput(raw: string) { +// +// Exported for unit tests. +export function buildStructuredOutput(raw: string) { const lines = raw.split(/\r?\n/); type Section = { heading?: string; pairs: KeyValuePair[]; loose: string[] }; diff --git a/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts b/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts new file mode 100644 index 000000000..3c4c226c0 --- /dev/null +++ b/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Unit tests for buildStructuredOutput in ipconfigActionHandler — it parses + * raw `ipconfig` text into a StructuredContent document of per-section + * heading + keyValue blocks with a rawData payload keyed by section. + */ + +import { buildStructuredOutput } from "../src/ipconfigActionHandler.js"; + +const SAMPLE = [ + "Windows IP Configuration", + "", + "Ethernet adapter Ethernet:", + "", + " Connection-specific DNS Suffix . : example.com", + " IPv4 Address. . . . . . . . . . . : 192.168.1.10", + " Subnet Mask . . . . . . . . . . . : 255.255.255.0", + " Default Gateway . . . . . . . . . : 192.168.1.1", + "", + "Wireless LAN adapter Wi-Fi:", + "", + " Media State . . . . . . . . . . . : Media disconnected", +].join("\r\n"); + +function content(raw: string) { + return (buildStructuredOutput(raw).displayContent as any); +} + +describe("buildStructuredOutput", () => { + test("produces a structured displayContent", () => { + expect(content(SAMPLE).type).toBe("structured"); + }); + + test("emits a heading block per section", () => { + const headings = content(SAMPLE) + .blocks.filter((b: any) => b.kind === "heading") + .map((b: any) => b.text); + expect(headings).toEqual( + expect.arrayContaining([ + "Ethernet adapter Ethernet", + "Wireless LAN adapter Wi-Fi", + ]), + ); + }); + + test("parses dotted key/value lines into keyValue pairs", () => { + const kv = content(SAMPLE).blocks.find( + (b: any) => b.kind === "keyValue", + ); + const ip = kv.pairs.find((p: any) => p.label === "IPv4 Address"); + expect(ip.value).toBe("192.168.1.10"); + }); + + test("rawData is keyed by section heading", () => { + const raw = content(SAMPLE).rawData; + expect(raw["Ethernet adapter Ethernet"]["Subnet Mask"]).toBe( + "255.255.255.0", + ); + }); + + test("empty values render as an em dash", () => { + const raw = "Adapter X:\r\n Empty Field . . . . . . . . . . . :"; + const kv = content(raw).blocks.find((b: any) => b.kind === "keyValue"); + expect(kv.pairs[0].value).toBe("—"); + }); + + test("falls back to text when nothing parses", () => { + // Only blank lines produce no blocks → plain text display. + const result = buildStructuredOutput("\r\n \r\n"); + expect((result.displayContent as any).type).not.toBe("structured"); + }); + + test("a bare header line becomes a heading block", () => { + const result = buildStructuredOutput("Some Section:"); + const c = result.displayContent as any; + expect(c.type).toBe("structured"); + expect(c.blocks[0]).toMatchObject({ + kind: "heading", + text: "Some Section", + }); + }); +}); diff --git a/ts/packages/agents/ipconfig/test/tsconfig.json b/ts/packages/agents/ipconfig/test/tsconfig.json new file mode 100644 index 000000000..895a6f0d2 --- /dev/null +++ b/ts/packages/agents/ipconfig/test/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "../dist/test", + "types": ["node", "jest"] + }, + "include": ["./**/*"], + "ts-node": { + "esm": true + }, + "references": [{ "path": "../src" }] +} diff --git a/ts/packages/agents/ipconfig/tsconfig.json b/ts/packages/agents/ipconfig/tsconfig.json index 1e14d73b9..0fa9d4ddc 100644 --- a/ts/packages/agents/ipconfig/tsconfig.json +++ b/ts/packages/agents/ipconfig/tsconfig.json @@ -7,6 +7,9 @@ "references": [ { "path": "./src" + }, + { + "path": "./test" } ], "ts-node": { diff --git a/ts/packages/agents/list/jest.config.cjs b/ts/packages/agents/list/jest.config.cjs new file mode 100644 index 000000000..f475768a1 --- /dev/null +++ b/ts/packages/agents/list/jest.config.cjs @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +module.exports = require("../../../jest.config.js"); diff --git a/ts/packages/agents/list/package.json b/ts/packages/agents/list/package.json index 67cba595e..1d087fada 100644 --- a/ts/packages/agents/list/package.json +++ b/ts/packages/agents/list/package.json @@ -24,8 +24,11 @@ "asc": "asc -i ./src/listSchema.ts -o ./dist/listSchema.pas.json -t ListAction -a ListActivity", "build": "concurrently npm:tsc npm:asc npm:agc", "clean": "rimraf --glob dist *.tsbuildinfo *.done.build.log", + "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js", "prettier": "prettier --check . --ignore-path ../../../.prettierignore", "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore", + "test": "npm run test:local", + "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", "tsc": "tsc -b" }, "dependencies": { @@ -34,7 +37,9 @@ "devDependencies": { "@typeagent/action-grammar-compiler": "workspace:*", "@typeagent/action-schema-compiler": "workspace:*", + "@types/jest": "^29.5.7", "concurrently": "^9.1.2", + "jest": "^29.7.0", "prettier": "^3.5.3", "rimraf": "^6.0.1", "typescript": "~5.4.5" diff --git a/ts/packages/agents/list/src/listActionHandler.ts b/ts/packages/agents/list/src/listActionHandler.ts index bc58c1d86..61bf5b7fb 100644 --- a/ts/packages/agents/list/src/listActionHandler.ts +++ b/ts/packages/agents/list/src/listActionHandler.ts @@ -277,7 +277,18 @@ function getListDisplay( suffix?: string, ) { const list = getList(listContext, listName); - if (list.itemsSet.size === 0) { + return buildListResult(listName, Array.from(list.itemsSet), suffix); +} + +// Build the structured display for a list: a heading + list block (or an +// empty-state text block) plus a machine-readable rawData payload. Pure — +// exported for unit tests. +export function buildListResult( + listName: string, + items: string[], + suffix?: string, +) { + if (items.length === 0) { return createStructuredResult( [ { kind: "heading", level: 3, text: `List '${listName}'` }, @@ -292,7 +303,7 @@ function getListDisplay( }, ); } - const plainList = Array.from(list.itemsSet); + const plainList = items; // Render the list as a structured heading + list block. The SDK derives // the markdown/text fallback for clients that can't render blocks. diff --git a/ts/packages/agents/list/test/listStructured.spec.ts b/ts/packages/agents/list/test/listStructured.spec.ts new file mode 100644 index 000000000..1a3268900 --- /dev/null +++ b/ts/packages/agents/list/test/listStructured.spec.ts @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Unit tests for buildListResult in listActionHandler — it renders a named + * list as a StructuredContent document (heading + list block, or an + * empty-state text block) with a rawData payload. + */ + +import { buildListResult } from "../src/listActionHandler.js"; + +function blocks(result: ReturnType) { + return (result.displayContent as any).blocks; +} + +describe("buildListResult", () => { + test("non-empty list renders heading + list block", () => { + const result = buildListResult("shopping", ["milk", "eggs", "bread"]); + expect(blocks(result)[0]).toMatchObject({ + kind: "heading", + text: "List 'shopping' — 3 items", + }); + const list = blocks(result).find((b: any) => b.kind === "list"); + expect(list.items.map((i: any) => i.text)).toEqual([ + "milk", + "eggs", + "bread", + ]); + }); + + test("singular 'item' for a one-element list", () => { + const result = buildListResult("todo", ["call mom"]); + expect(blocks(result)[0].text).toBe("List 'todo' — 1 item"); + }); + + test("empty list renders an empty-state text block, no list block", () => { + const result = buildListResult("empty", []); + expect(blocks(result).some((b: any) => b.kind === "list")).toBe(false); + expect(blocks(result)[1]).toMatchObject({ + kind: "text", + text: "This list is empty.", + }); + }); + + test("suffix is appended as a trailing text block", () => { + const result = buildListResult("shopping", ["milk"], "Anything else?"); + const last = blocks(result)[blocks(result).length - 1]; + expect(last).toMatchObject({ kind: "text", text: "Anything else?" }); + }); + + test("rawData carries the list name and items", () => { + const items = ["milk", "eggs"]; + const raw = (buildListResult("shopping", items).displayContent as any) + .rawData; + expect(raw).toMatchObject({ name: "shopping", items }); + }); + + test("entities include the list and each item", () => { + const result = buildListResult("shopping", ["milk", "eggs"]); + const names = result.entities.map((e) => e.name); + expect(names).toEqual( + expect.arrayContaining(["shopping", "milk", "eggs"]), + ); + }); +}); diff --git a/ts/packages/agents/list/test/tsconfig.json b/ts/packages/agents/list/test/tsconfig.json new file mode 100644 index 000000000..895a6f0d2 --- /dev/null +++ b/ts/packages/agents/list/test/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "../dist/test", + "types": ["node", "jest"] + }, + "include": ["./**/*"], + "ts-node": { + "esm": true + }, + "references": [{ "path": "../src" }] +} diff --git a/ts/packages/agents/list/tsconfig.json b/ts/packages/agents/list/tsconfig.json index acb9cb4a9..94dfc60bb 100644 --- a/ts/packages/agents/list/tsconfig.json +++ b/ts/packages/agents/list/tsconfig.json @@ -4,7 +4,7 @@ "composite": true }, "include": [], - "references": [{ "path": "./src" }], + "references": [{ "path": "./src" }, { "path": "./test" }], "ts-node": { "esm": true } diff --git a/ts/packages/agents/weather/jest.config.cjs b/ts/packages/agents/weather/jest.config.cjs new file mode 100644 index 000000000..f475768a1 --- /dev/null +++ b/ts/packages/agents/weather/jest.config.cjs @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +module.exports = require("../../../jest.config.js"); diff --git a/ts/packages/agents/weather/package.json b/ts/packages/agents/weather/package.json index f73686f8d..b48b143fc 100644 --- a/ts/packages/agents/weather/package.json +++ b/ts/packages/agents/weather/package.json @@ -24,8 +24,11 @@ "asc": "asc -i ./src/weatherSchema.ts -o ./dist/weatherSchema.pas.json -t WeatherAction", "build": "concurrently npm:tsc npm:asc npm:agc", "clean": "rimraf --glob dist *.tsbuildinfo *.done.build.log", + "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js", "prettier": "prettier --check . --ignore-path ../../../.prettierignore", "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore", + "test": "npm run test:local", + "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", "test:api": "node testWeatherSimple.mjs", "tsc": "tsc -b" }, @@ -35,7 +38,9 @@ "devDependencies": { "@typeagent/action-grammar-compiler": "workspace:*", "@typeagent/action-schema-compiler": "workspace:*", + "@types/jest": "^29.5.7", "concurrently": "^9.1.2", + "jest": "^29.7.0", "prettier": "^3.5.3", "rimraf": "^6.0.1", "typescript": "~5.4.5" diff --git a/ts/packages/agents/weather/src/weatherActionHandler.ts b/ts/packages/agents/weather/src/weatherActionHandler.ts index 6444c7342..67dfdc73f 100644 --- a/ts/packages/agents/weather/src/weatherActionHandler.ts +++ b/ts/packages/agents/weather/src/weatherActionHandler.ts @@ -3,6 +3,7 @@ import type { ActionContext, + ActionResultSuccess, AppAgent, SessionContext, TypeAgentAction, @@ -87,7 +88,6 @@ async function handleGetCurrentConditions( ); } - const tempUnit = units === "celsius" ? "°C" : "°F"; const conditions = getWeatherDescription(weather.weatherCode); const windDir = getWindDirection(weather.windDirection); @@ -100,12 +100,38 @@ async function handleGetCurrentConditions( }, ]; + return buildCurrentConditionsResult( + coords.name, + units, + { ...weather, conditions, windDir }, + historyText, + entities, + ); +} + +// Build a structured current-conditions result (heading + keyValue block + +// rawData). Pure — exported for unit tests. +export function buildCurrentConditionsResult( + locationName: string, + units: "celsius" | "fahrenheit", + weather: { + temperature: number; + apparentTemperature: number; + humidity: number; + windSpeed: number; + conditions: string; + windDir: string; + }, + historyText: string, + entities: { name: string; type: string[] }[], +): ActionResultSuccess { + const tempUnit = units === "celsius" ? "°C" : "°F"; return createStructuredResult( [ { kind: "heading", level: 3, - text: `Current conditions in ${coords.name}`, + text: `Current conditions in ${locationName}`, }, { kind: "keyValue", @@ -114,11 +140,11 @@ async function handleGetCurrentConditions( label: "Temperature", value: `${Math.round(weather.temperature)}${tempUnit} (feels like ${Math.round(weather.apparentTemperature)}${tempUnit})`, }, - { label: "Conditions", value: conditions }, + { label: "Conditions", value: weather.conditions }, { label: "Humidity", value: `${weather.humidity}%` }, { label: "Wind", - value: `${Math.round(weather.windSpeed)} mph ${windDir}`, + value: `${Math.round(weather.windSpeed)} mph ${weather.windDir}`, }, ], }, @@ -127,14 +153,14 @@ async function handleGetCurrentConditions( historyText, entities, rawData: { - location: coords.name, + location: locationName, units, temperature: weather.temperature, apparentTemperature: weather.apparentTemperature, - conditions, + conditions: weather.conditions, humidity: weather.humidity, windSpeed: weather.windSpeed, - windDirection: windDir, + windDirection: weather.windDir, }, }, ); @@ -168,6 +194,41 @@ async function handleGetForecast( ); } + const historyText = `Got ${days}-day forecast for ${coords.name}`; + + const entities = [ + { + name: coords.name, + type: ["location"], + }, + ]; + + return buildForecastResult( + coords.name, + units, + days, + forecastData, + historyText, + entities, + ); +} + +// Build a structured forecast result (heading + sortable table + rawData). +// Pure — exported for unit tests. +export function buildForecastResult( + locationName: string, + units: "celsius" | "fahrenheit", + days: number, + forecastData: { + date: string; + weatherCode: number; + maxTemp: number; + minTemp: number; + precipitationProbability: number; + }[], + historyText: string, + entities: { name: string; type: string[] }[], +): ActionResultSuccess { const tempUnit = units === "celsius" ? "°C" : "°F"; const rows = forecastData.map((day) => { const conditions = getWeatherDescription(day.weatherCode); @@ -193,21 +254,12 @@ async function handleGetForecast( ]; }); - const historyText = `Got ${days}-day forecast for ${coords.name}`; - - const entities = [ - { - name: coords.name, - type: ["location"], - }, - ]; - return createStructuredResult( [ { kind: "heading", level: 3, - text: `${days}-day forecast for ${coords.name}`, + text: `${days}-day forecast for ${locationName}`, }, { kind: "table", @@ -227,7 +279,7 @@ async function handleGetForecast( historyText, entities, rawData: { - location: coords.name, + location: locationName, units, days, forecast: forecastData, diff --git a/ts/packages/agents/weather/test/tsconfig.json b/ts/packages/agents/weather/test/tsconfig.json new file mode 100644 index 000000000..895a6f0d2 --- /dev/null +++ b/ts/packages/agents/weather/test/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "../dist/test", + "types": ["node", "jest"] + }, + "include": ["./**/*"], + "ts-node": { + "esm": true + }, + "references": [{ "path": "../src" }] +} diff --git a/ts/packages/agents/weather/test/weatherStructured.spec.ts b/ts/packages/agents/weather/test/weatherStructured.spec.ts new file mode 100644 index 000000000..50ddb0dd4 --- /dev/null +++ b/ts/packages/agents/weather/test/weatherStructured.spec.ts @@ -0,0 +1,128 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Unit tests for the structured-content builders in weatherActionHandler: + * buildCurrentConditionsResult (heading + keyValue) and buildForecastResult + * (heading + sortable table). Both are pure functions of already-fetched + * data, so no network access is needed. + */ + +import { + buildCurrentConditionsResult, + buildForecastResult, +} from "../src/weatherActionHandler.js"; + +const entities = [{ name: "Quincy", type: ["location"] }]; + +function blocks(result: any) { + return (result.displayContent as any).blocks; +} + +describe("buildCurrentConditionsResult", () => { + const result = buildCurrentConditionsResult( + "Quincy", + "fahrenheit", + { + temperature: 71.4, + apparentTemperature: 69.2, + humidity: 40, + windSpeed: 8.6, + conditions: "Clear sky", + windDir: "NW", + }, + "history", + entities, + ); + + test("heading names the location", () => { + expect(blocks(result)[0]).toMatchObject({ + kind: "heading", + text: "Current conditions in Quincy", + }); + }); + + test("keyValue has Temperature/Conditions/Humidity/Wind", () => { + const kv = blocks(result).find((b: any) => b.kind === "keyValue"); + expect(kv.pairs.map((p: any) => p.label)).toEqual([ + "Temperature", + "Conditions", + "Humidity", + "Wind", + ]); + }); + + test("temperature is rounded with unit + feels-like", () => { + const kv = blocks(result).find((b: any) => b.kind === "keyValue"); + expect(kv.pairs[0].value).toBe("71°F (feels like 69°F)"); + }); + + test("rawData carries the numeric values", () => { + const raw = (result.displayContent as any).rawData; + expect(raw).toMatchObject({ + location: "Quincy", + units: "fahrenheit", + temperature: 71.4, + windDirection: "NW", + }); + }); +}); + +describe("buildForecastResult", () => { + const forecast = [ + { + date: "2026-07-13", + weatherCode: 0, + maxTemp: 31.2, + minTemp: 15.1, + precipitationProbability: 0, + }, + { + date: "2026-07-14", + weatherCode: 3, + maxTemp: 35.9, + minTemp: 19.4, + precipitationProbability: 20, + }, + ]; + const result = buildForecastResult( + "Quincy", + "celsius", + 2, + forecast, + "history", + entities, + ); + const table = () => blocks(result).find((b: any) => b.kind === "table"); + + test("heading includes day count and location", () => { + expect(blocks(result)[0].text).toBe("2-day forecast for Quincy"); + }); + + test("first column is the weekday name, not 'Day N'", () => { + const weekday = table().rows[0][0]; + expect(weekday).toMatch( + /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)$/, + ); + }); + + test("high/low rounded with the celsius unit", () => { + expect(table().rows[0][3]).toBe("31°C"); + expect(table().rows[0][4]).toBe("15°C"); + }); + + test("zero precipitation renders as em dash, otherwise percent", () => { + expect(table().rows[0][5]).toBe("—"); + expect(table().rows[1][5]).toBe("20%"); + }); + + test("table is sortable", () => { + expect(table().sortable).toBe(true); + }); + + test("rawData carries the forecast array", () => { + const raw = (result.displayContent as any).rawData; + expect(raw.forecast).toBe(forecast); + expect(raw.days).toBe(2); + }); +}); diff --git a/ts/packages/agents/weather/tsconfig.json b/ts/packages/agents/weather/tsconfig.json index 05754f14f..94dfc60bb 100644 --- a/ts/packages/agents/weather/tsconfig.json +++ b/ts/packages/agents/weather/tsconfig.json @@ -1,12 +1,10 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "composite": true, - "rootDir": ".", - "outDir": "../dist" + "composite": true }, - "include": ["./**/*"], - "references": [{ "path": "./src" }], + "include": [], + "references": [{ "path": "./src" }, { "path": "./test" }], "ts-node": { "esm": true } diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index cdc2c86d1..31f264be2 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -2535,9 +2535,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2557,9 +2563,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3541,9 +3553,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 From 5ba9160159da74f2d2b311dfb6eefb8fe30e7ca1 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Mon, 13 Jul 2026 18:03:24 -0700 Subject: [PATCH 22/36] updated plan --- ts/docs/plans/structured-output/PLAN.md | 67 +++++++++++++++++++++++ ts/docs/plans/structured-output/STATUS.md | 8 +++ 2 files changed, 75 insertions(+) diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index 47f9d0a28..0057ce326 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -552,6 +552,73 @@ prerequisites, not a backlog to burn down. 4. **Naming** — `StructuredContent` / `type: "structured"` vs `RichContent` / `"rich"`. Current lean: `structured`. +## Future enhancements (backlog) + +Ideas beyond the shipped scope (block document + sort/filter/pagination + +`rawData`). Not scheduled; pull into a phase when a concrete agent needs +it. Ordered roughly by value-to-effort within each group. + +### Interactivity (largest remaining feature) + +- **Row actions** (open question #3) — wire the reserved `cell.href` / + `block.action` fields so a row click can trigger an agent action + (merge a PR, reply to an email, delete a calendar event). Requires a + **client → agent transport** (a response channel back into the agent, + the same prerequisite as agent-driven paging). This is the natural + "v2" and unlocks a whole class of interactive agents. +- **Column visibility / reorder** — let the user hide or reorder columns + on wide tables (chat-ui only; pure client state). +- **Pinned columns** — `TableColumn.pinned` is already reserved; wire the + `position: sticky` CSS when a wide, horizontally-scrolling table + actually ships. + +### New block / cell types + +- **`progress` block** — determinate bar or spinner for long-running + agents (screencapture build, onboarding phases, calendar sign-in), + replacing today's streamed `kind: "status"` text. +- **`chart` block** — minimal bar/line/sparkline derived from `rawData` + (weather forecast, github contributor counts, dependabot severity). + Currently the iframe escape hatch is the only option (explicit v1 + non-goal). +- **Richer cell types** — `boolean` (checkmark), `duration`, + `relative-date` ("3 days ago"), `percent` (inline bar), `currency`. +- **Nested / expandable rows** — a row expands to a detail block (email → + body, PR → description); hooks into the reserved `block.action`. + +### Consistency & developer experience + +- **Extract remaining inline builders** — `email`, `discord`, `taskflow`, + `onboarding`, `screencapture` still build blocks inline. Pull them into + pure exported functions + unit tests, matching the + github-cli / calendar / weather / ipconfig / list pattern. Closes the + last test-coverage gap. +- **Shared column-spec DSL** — a typed `{ field, header, type, format }` + spec on top of `fromRecords` to cut per-adopter cell-mapping + boilerplate and standardize date/badge/number rendering. +- **`validateStructuredContent(blocks)` helper** — catch malformed tables + (ragged rows, unknown column ids, bad cell shapes) at build/test time. + +### Client / rendering reach + +- **CLI table rendering** — `enhancedConsole.ts` gets the plain-text + fallback today; a box-drawing table would improve the terminal. +- **MCP `outputSchema`** — Phase 6 carries `rawData` but not + `dataSchema`; derive JSON Schema from the block document so MCP / + Claude clients can validate typed output. +- **Browser-extension fallback** — teach the Chrome/Edge extension to + prefer the markdown alternate (`getStructuredFallback`); this is the + prerequisite that unblocks Phase 8a (browser search results). +- **Accessibility pass** — ARIA sort states, `scope`, and live-region + announcements for sort / filter / pagination in `setContent.ts`. + +### Data-scale + +- **Virtualized tables** — render-on-scroll for very large `rawData` + tables instead of pagination (chat-ui only). +- **Agent-driven / server-side paging** — fetch page N on demand; shares + the client → agent transport prerequisite with row actions. + ## Key files | Area | Path | diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index dbf803d08..ff7f9c583 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -118,6 +118,14 @@ for `weather`, `ipconfig`, and `list` (calendar already had one). remain inline (validated by build/typecheck); their block shapes are covered transitively by the specs above. +## Future enhancements (backlog) + +Not scheduled. Full list in [PLAN.md](./PLAN.md) → "Future enhancements". +Highest-leverage items: **row actions** (needs a client → agent +transport; the "v2"), extracting the 5 remaining inline builders into +tested pure functions, and a `progress` / `chart` block. Pull into a +phase when a concrete agent needs it. + ## Open questions | # | Question | Resolution | From 397c159088289627a44bdd3b5c946a4c1a9b0522 Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Tue, 14 Jul 2026 15:05:38 -0700 Subject: [PATCH 23/36] fixed security vulnerability DOS attack --- ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts index 9058188ca..1656a0e9d 100644 --- a/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts +++ b/ts/packages/agents/ipconfig/src/ipconfigActionHandler.ts @@ -158,7 +158,10 @@ export function buildStructuredOutput(raw: string) { } // Key-value pair: " Key . . . . . : Value" - const kv = line.match(/^\s+(.*?)\s*\.[\s.]*:\s*(.*)/); + // Match on the leading-whitespace-trimmed line with disjoint + // sub-expressions (key excludes '.'/':' and the dotted separator + // starts with a literal '.') to avoid polynomial backtracking. + const kv = line.trimStart().match(/^([^.:]*)\.[.\s]*:\s*(.*)/); if (kv) { const key = kv[1].trimEnd(); const value = kv[2].trim(); From 8fb1ee176675122146ca3e47886c75b18725c959 Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Tue, 14 Jul 2026 22:51:48 +0000 Subject: [PATCH 24/36] style: apply prettier formatting and policy fixes --- ts/docs/plans/structured-output/PLAN.md | 276 +++++++++++------- ts/docs/plans/structured-output/STATUS.md | 148 +++++----- ts/packages/agentSdk/package.json | 4 +- .../agentSdk/src/helpers/actionHelpers.ts | 5 +- .../agentSdk/src/helpers/displayHelpers.ts | 7 +- .../calendar/src/calendarActionHandlerV3.ts | 4 +- .../discord/src/discordActionHandler.ts | 5 +- .../agents/email/src/emailActionHandler.ts | 4 +- .../github-cli/src/github-cliActionHandler.ts | 79 +++-- .../test/githubCliStructuredResults.spec.ts | 55 +++- .../ipconfig/test/ipconfigStructured.spec.ts | 2 +- .../agents/list/src/listActionHandler.ts | 4 +- .../taskflow/src/script/taskFlowScriptApi.mts | 7 +- ts/packages/agents/weather/package.json | 2 +- ts/packages/chat-ui/src/setContent.ts | 41 +-- ts/packages/chat-ui/styles/chat.css | 17 +- ts/packages/vscode-chat/src/displayRender.ts | 7 +- 17 files changed, 390 insertions(+), 277 deletions(-) diff --git a/ts/docs/plans/structured-output/PLAN.md b/ts/docs/plans/structured-output/PLAN.md index 0057ce326..4c2bdda91 100644 --- a/ts/docs/plans/structured-output/PLAN.md +++ b/ts/docs/plans/structured-output/PLAN.md @@ -20,7 +20,7 @@ markdown bullet string in `formatListResults()`: In a narrow chat column this renders as a cramped, hard-to-scan list: the status (`DRAFT`/`OPEN`) is inline plain text and the branch name -wraps into the title. The agent *had* clean typed fields (number, +wraps into the title. The agent _had_ clean typed fields (number, title, state, url, branch, isDraft, createdAt) and discarded all of them. @@ -32,7 +32,7 @@ UI: markdown string. - **Programmatic consumers** ("or otherwise" clients — MCP / Claude Code, the copilot plugin, the `taskflow` script API) have to - *re-parse* the flattened text. `taskFlowScriptApi.mts` already does + _re-parse_ the flattened text. `taskFlowScriptApi.mts` already does exactly this: `extractText(result)` followed by `tryParseJson(text)`. This effort gives agents a first-class way to emit **structured output** @@ -57,7 +57,7 @@ default** (client may sort/filter unless the agent marks them This is deliberately **A + C together**: - **A — semantic view-model**: typed presentation blocks a generic - renderer can turn into rich UI for *all* agents. + renderer can turn into rich UI for _all_ agents. - **C — hybrid**: the view-model travels alongside optional raw data, so programmatic clients get typed objects and UIs get rich rendering, with the existing `displayContent` text as the universal fallback. @@ -86,7 +86,7 @@ This is deliberately **A + C together**: it). The type model reserves fields for it (`cell.href`, a future `block.action`) but no client wires it up in v1. - Rich tables in the CLI — the CLI gets the text fallback. -- JSON Schema *validation* of `rawData` (the field is carried, not +- JSON Schema _validation_ of `rawData` (the field is carried, not enforced). - Migrating other list-shaped agents (`list`, `calendar`, `email`, `search`). They can adopt the same primitives later; `github-cli` is @@ -99,8 +99,8 @@ This is deliberately **A + C together**: `MessageContent = string | string[] | string[][]`. Note `string[][]` is already a rudimentary **table**. - **`TypedDisplayContent`** carries `type: "markdown" | "html" | "iframe" - | "text"`, an optional `kind`, `speak`, and **`alternates`** — a list - of alternate representations of the *same* content that clients pick +| "text"`, an optional `kind`, `speak`, and **`alternates`** — a list + of alternate representations of the _same_ content that clients pick from via `getContentForType()` (`packages/agentSdk/src/helpers/displayHelpers.ts`). This is the seed of the "each client picks the best format" idea we generalize. @@ -136,13 +136,13 @@ This is deliberately **A + C together**: ### Why not just N `appendDisplay` calls? -An agent can already *visually* stack a table then an image by making +An agent can already _visually_ stack a table then an image by making two `appendDisplay(..., "block")` calls (the `chat` agent does this). But those are **N independent records** — N history entries, N memory rows, no single machine-readable payload, and ordering across async appends can race. Bundling heterogeneous typed blocks into **one** `displayContent` is a primary reason to model structured output as a -*document of blocks*. `appendDisplay` remains for the genuinely +_document of blocks_. `appendDisplay` remains for the genuinely streaming case (transient status → then the bundled result). ## Design @@ -156,76 +156,129 @@ heading, a table, a note, and a thumbnail is a four-block document. ```typescript // packages/agentSdk/src/display.ts (additions) -export type BadgeTone = - | "neutral" | "info" | "success" | "warning" | "error"; +export type BadgeTone = "neutral" | "info" | "success" | "warning" | "error"; export type TableCellType = - | "text" | "link" | "badge" | "number" | "date" | "code"; + | "text" + | "link" + | "badge" + | "number" + | "date" + | "code"; export interface TableColumn { - id: string; - header: string; - type?: TableCellType; // default "text" - align?: "left" | "right" | "center"; - sortable?: boolean; // per-column override of table.sortable + id: string; + header: string; + type?: TableCellType; // default "text" + align?: "left" | "right" | "center"; + sortable?: boolean; // per-column override of table.sortable } export type TableCell = - | string - | number - | { - text: string; - href?: string; // link target (type "link", or any cell) - badge?: BadgeTone; // badge tone (type "badge") - tooltip?: string; - }; + | string + | number + | { + text: string; + href?: string; // link target (type "link", or any cell) + badge?: BadgeTone; // badge tone (type "badge") + tooltip?: string; + }; export interface TableBlock { - kind: "table"; - columns: TableColumn[]; - rows: TableCell[][]; - caption?: string; - // Affordances — interactive by default. - sortable?: boolean; // default: true - filterable?: boolean; // default: false - readonly?: boolean; // lock order + content exactly as sent + kind: "table"; + columns: TableColumn[]; + rows: TableCell[][]; + caption?: string; + // Affordances — interactive by default. + sortable?: boolean; // default: true + filterable?: boolean; // default: false + readonly?: boolean; // lock order + content exactly as sent } -export interface HeadingBlock { kind: "heading"; text: string; level?: 1 | 2 | 3; } -export interface TextBlock { kind: "text"; text: MessageContent; format?: "text" | "markdown"; } -export interface ListItem { text: string; href?: string; subtitle?: string; badges?: BadgeTone[]; } -export interface ListBlock { kind: "list"; ordered?: boolean; items: ListItem[]; } -export interface KeyValuePair { label: string; value: TableCell; } -export interface KeyValueBlock { kind: "keyValue"; pairs: KeyValuePair[]; } -export interface CardBlock { kind: "card"; title?: string; subtitle?: string; fields?: KeyValuePair[]; href?: string; } -export interface ImageBlock { kind: "image"; src: string; alt?: string; caption?: string; width?: number; height?: number; } -export interface CodeBlock { kind: "code"; code: string; language?: string; } -export interface DividerBlock { kind: "divider"; } +export interface HeadingBlock { + kind: "heading"; + text: string; + level?: 1 | 2 | 3; +} +export interface TextBlock { + kind: "text"; + text: MessageContent; + format?: "text" | "markdown"; +} +export interface ListItem { + text: string; + href?: string; + subtitle?: string; + badges?: BadgeTone[]; +} +export interface ListBlock { + kind: "list"; + ordered?: boolean; + items: ListItem[]; +} +export interface KeyValuePair { + label: string; + value: TableCell; +} +export interface KeyValueBlock { + kind: "keyValue"; + pairs: KeyValuePair[]; +} +export interface CardBlock { + kind: "card"; + title?: string; + subtitle?: string; + fields?: KeyValuePair[]; + href?: string; +} +export interface ImageBlock { + kind: "image"; + src: string; + alt?: string; + caption?: string; + width?: number; + height?: number; +} +export interface CodeBlock { + kind: "code"; + code: string; + language?: string; +} +export interface DividerBlock { + kind: "divider"; +} export type StructuredBlock = - | HeadingBlock | TextBlock | TableBlock | ListBlock - | KeyValueBlock | CardBlock | ImageBlock | CodeBlock | DividerBlock; + | HeadingBlock + | TextBlock + | TableBlock + | ListBlock + | KeyValueBlock + | CardBlock + | ImageBlock + | CodeBlock + | DividerBlock; export interface StructuredContent { - type: "structured"; - blocks: StructuredBlock[]; - rawData?: unknown; // machine-readable payload (C) - dataSchema?: unknown; // optional JSON Schema for rawData - kind?: DisplayMessageKind; - speak?: boolean; - // SDK auto-derives a markdown/text alternate so unknowing clients degrade. - alternates?: Array<{ type: DisplayType; content: MessageContent }>; + type: "structured"; + blocks: StructuredBlock[]; + rawData?: unknown; // machine-readable payload (C) + dataSchema?: unknown; // optional JSON Schema for rawData + kind?: DisplayMessageKind; + speak?: boolean; + // SDK auto-derives a markdown/text alternate so unknowing clients degrade. + alternates?: Array<{ type: DisplayType; content: MessageContent }>; } export type DisplayContent = - | MessageContent - | TypedDisplayContent - | StructuredContent; // <- new + | MessageContent + | TypedDisplayContent + | StructuredContent; // <- new ``` ### Affordances — interactive by default -Tables are `sortable` by default; a client that can sort *may* offer it. +Tables are `sortable` by default; a client that can sort _may_ offer it. The agent opts **out** with `readonly: true` when order or content is semantically meaningful (e.g. a ranked "top 5"), or refines with per-column `sortable`. `readonly` is a hard instruction: the client @@ -242,7 +295,7 @@ describes it. This is the "or otherwise" channel: MCP forwards it as `structuredContent`; `taskflow` can read it directly. **Source-of-truth guidance**: provide a `fromRecords(objects, -columnSpec)` SDK helper that builds a `TableBlock` *and* stashes the +columnSpec)` SDK helper that builds a `TableBlock` _and_ stashes the objects as `rawData` in one call, so an adopter can't let the table and the data drift. @@ -267,19 +320,19 @@ before rich rendering lands. ## Client topology -| Renderer | Clients it powers | v1 role | -| --- | --- | --- | -| `chat-ui` `setContent.ts` | Electron shell, vscode-shell webview, Chrome extension | Rich block rendering + interactivity | -| `vscode-chat` `displayRender.ts` | VS Code Copilot chat participant | Static markdown blocks (tables, images, cards) | -| `cli` `enhancedConsole.ts` | CLI / interactiveApp | Text fallback | -| `commandExecutor` `commandServer.ts` | MCP / Claude Code | Text fallback (+ `rawData` → `structuredContent`, Phase 6) | -| `copilot-plugin` `message-formatter.ts` | Copilot plugin | Text fallback | +| Renderer | Clients it powers | v1 role | +| --------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------- | +| `chat-ui` `setContent.ts` | Electron shell, vscode-shell webview, Chrome extension | Rich block rendering + interactivity | +| `vscode-chat` `displayRender.ts` | VS Code Copilot chat participant | Static markdown blocks (tables, images, cards) | +| `cli` `enhancedConsole.ts` | CLI / interactiveApp | Text fallback | +| `commandExecutor` `commandServer.ts` | MCP / Claude Code | Text fallback (+ `rawData` → `structuredContent`, Phase 6) | +| `copilot-plugin` `message-formatter.ts` | Copilot plugin | Text fallback | Implementing rich rendering in `chat-ui` covers three clients at once. ## Phased plan -### Phase 1 — SDK foundation *(blocks everything)* +### Phase 1 — SDK foundation _(blocks everything)_ - Add the types above to `packages/agentSdk/src/display.ts`. - Add builder helpers + fallback derivation in @@ -291,7 +344,7 @@ Implementing rich rendering in `chat-ui` covers three clients at once. - Export new types/helpers from `packages/agentSdk/src/index.ts`. - Unit tests for derivation (blocks → markdown/text) and builders. -### Phase 2 — Renderer safety net *(after 1; parallel per client)* +### Phase 2 — Renderer safety net _(after 1; parallel per client)_ Teach each renderer to detect `type: "structured"` and render the derived fallback (no throw, no regression): @@ -301,7 +354,7 @@ derived fallback (no throw, no regression): `packages/commandExecutor/src/commandServer.ts`, `packages/copilot-plugin/src/shared/message-formatter.ts`. -### Phase 3 — Rich rendering *(after 1; 3a/3b parallel)* +### Phase 3 — Rich rendering _(after 1; 3a/3b parallel)_ - **3a** `packages/chat-ui/src/setContent.ts`: render blocks → HTML (typed table with link/badge/date cells, image block, card / list / @@ -312,7 +365,7 @@ derived fallback (no throw, no regression): markdown (reuse `tableToMarkdown`, markdown images, card sections). Static. -### Phase 4 — Interactivity *(after 3a)* +### Phase 4 — Interactivity _(after 3a)_ Client-side sort / filter on `TableBlock` in `chat-ui`, honoring `readonly` / `sortable` / `filterable`. chat-ui clients only. @@ -334,14 +387,15 @@ deferred with open question #3. columns only pay off for wide, horizontally-scrolling tables, which no adopter emits today; wire the `position: sticky` CSS when one does. -### Phase 5 — First adopter: `github-cli` *(after 1; visually validated by 3)* +### Phase 5 — First adopter: `github-cli` _(after 1; visually validated by 3)_ Rewrite `formatListResults` and the list/view actions in `packages/agents/github-cli/src/github-cliActionHandler.ts` — `prList`, `issueList`, `myPullRequests`, `searchRepos`, `dependabotAlerts`, contributors, and `repoView` (→ keyValue) — to emit `StructuredContent` -+ `rawData` via `fromRecords`. The SDK-derived markdown fallback must -match or beat today's output. Update the handler unit tests. + +- `rawData` via `fromRecords`. The SDK-derived markdown fallback must + match or beat today's output. Update the handler unit tests. Example — the `prList` table: an `#id` **link** column → `url`, a **text** title column, a **badge** state column (`DRAFT`/`OPEN` colored @@ -362,13 +416,13 @@ by tone), a **code** branch column; `sortable: true`. - Focused field answers (stars / forks / language / watchers / description) → `buildStructuredField` (heading + single `keyValue` pair + natural-language summary; `rawData` carries `{ repo, field, - value }`). +value }`). Remaining markdown/text paths are intentional: mutation/create success messages, `statusPrint`, and the raw-output fallback carry no structured data. `githubCliStructuredResults.spec.ts` covers all builders. -### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* +### Phase 6 — Programmatic "or otherwise" _(after 1 + 5)_ - `packages/commandExecutor/src/commandServer.ts` forwards `rawData` as MCP `structuredContent` (and optionally `outputSchema` from @@ -377,7 +431,7 @@ data. `githubCliStructuredResults.spec.ts` covers all builders. to read `rawData` directly, dropping the `extractText` + `tryParseJson` workaround. -### Phase 7 — Broader agent rollout *(after 5; per-agent, parallelizable)* +### Phase 7 — Broader agent rollout _(after 5; per-agent, parallelizable)_ `github-cli` is the reference adopter, but every list-, table-, or record-shaped agent result throws away structure today. Convert the rest @@ -399,22 +453,22 @@ deferred until a clear need appears. **Wave A — high fit (clear list/table/record output):** -| # | Agent | Shape today | Target blocks | -| --- | --- | --- | --- | -| 1 | `list` | markdown bullet lists | `heading` + `list` | -| 2 | `calendar` | HTML event views (`appendDisplay`) | `heading` + `table` (agenda) + `card`/`keyValue` (event detail) | -| 3 | `email` | HTML message lists + threads | `heading` + `table` (inbox/list) + `keyValue` (message detail) | -| 4 | `weather` | text forecast | `keyValue` (current) + `table` (multi-day forecast) | -| 5 | `ipconfig` | markdown key/values | `heading` + `keyValue` (per-adapter sections) | +| # | Agent | Shape today | Target blocks | +| --- | ---------- | ---------------------------------- | --------------------------------------------------------------- | +| 1 | `list` | markdown bullet lists | `heading` + `list` | +| 2 | `calendar` | HTML event views (`appendDisplay`) | `heading` + `table` (agenda) + `card`/`keyValue` (event detail) | +| 3 | `email` | HTML message lists + threads | `heading` + `table` (inbox/list) + `keyValue` (message detail) | +| 4 | `weather` | text forecast | `keyValue` (current) + `table` (multi-day forecast) | +| 5 | `ipconfig` | markdown key/values | `heading` + `keyValue` (per-adapter sections) | **Wave B — medium fit (structured data mixed with text):** -| # | Agent | Shape today | Target blocks | -| --- | --- | --- | --- | -| 6 | `discord` | text channel/message lists | `heading` + `list`/`table` | -| 7 | `taskflow` | text task listings | `table` (name / description / usage) | -| 8 | `onboarding` | markdown wizard status | `heading` + `keyValue` (phase status) | -| 9 | `screencapture` | image + markdown metadata | `image` + `heading`/`keyValue` | +| # | Agent | Shape today | Target blocks | +| --- | --------------- | -------------------------- | ------------------------------------- | +| 6 | `discord` | text channel/message lists | `heading` + `list`/`table` | +| 7 | `taskflow` | text task listings | `table` (name / description / usage) | +| 8 | `onboarding` | markdown wizard status | `heading` + `keyValue` (phase status) | +| 9 | `screencapture` | image + markdown metadata | `image` + `heading`/`keyValue` | `osNotifications` was initially a Wave B candidate but is **out of scope**: each notification is an individual toast/inline event pushed via @@ -430,7 +484,7 @@ short status confirmations. `desktop`, `vampire`, `androidMobile`, `powershell`, `utility`, `studio` (short text/status confirmations). -### Phase 8 — RPC / custom-UI agents *(after 7; mostly out of scope)* +### Phase 8 — RPC / custom-UI agents _(after 7; mostly out of scope)_ These are the twelve agents Wave A/B set aside as "custom UI / RPC bridge." The distinguishing property is **where the display is produced**: @@ -439,7 +493,7 @@ their user-facing output does not flow through block-document model has nothing to convert. Three architectures: - **WebSocket/RPC bridge to an external process** — the agent forwards a - command and the *external* client renders the result; the + command and the _external_ client renders the result; the `displayContent` path carries only status/error text. - `code` → Coda VS Code extension (`codeAgentWebSocketServer.ts`; display goes straight to the socket via @@ -454,7 +508,7 @@ block-document model has nothing to convert. Three architectures: - `markdown`, `montage`, `turtle` (each forks a `site/` viewer). - **Bespoke interactive HTML/JS** via `createActionResultFromHtmlDisplayWithScript` / iframe — the payload is - a *pre-rendered* stateful widget (forms, carousels, players), not + a _pre-rendered_ stateful widget (forms, carousels, players), not structured data + fallback. - `image` (carousel), `video` (polling player), `settings` (forms), `chat` (freeform LLM text + HTML-embedded images). @@ -466,7 +520,7 @@ returned through the normal `createActionResultFromMarkdownDisplay` path snippet, relevanceScore }`. The browser's page-interaction actions (navigate, screenshot, follow-link) stay on the extension-RPC path. -#### Phase 8a — `browser` web-search → structured *(the one adopter)* +#### Phase 8a — `browser` web-search → structured _(the one adopter)_ Convert `generateWebSearchMarkdown()`'s output to a `StructuredContent` document: a heading (`Found N results for "query"`) + a **table** (or @@ -502,8 +556,8 @@ plain table. Concretely, a future effort would need: content is documents/graphics, not tabular data. Leave as-is permanently. - **Widget agents** (`image`, `video`, `settings`, `chat`, `playerLocal`, - `player`) — would each need a redesign to separate *data* from - *pre-rendered widget* (e.g. `image` emitting `ImageBlock[]` instead of + `player`) — would each need a redesign to separate _data_ from + _pre-rendered widget_ (e.g. `image` emitting `ImageBlock[]` instead of a carousel iframe). Only pursue per-agent if a concrete UX need arises; not a batch conversion. @@ -621,21 +675,21 @@ it. Ordered roughly by value-to-effort within each group. ## Key files -| Area | Path | -| --- | --- | -| SDK display types | `packages/agentSdk/src/display.ts` | -| SDK action result | `packages/agentSdk/src/action.ts` | -| SDK display helpers | `packages/agentSdk/src/helpers/displayHelpers.ts` | -| SDK action helpers | `packages/agentSdk/src/helpers/actionHelpers.ts` | -| SDK exports | `packages/agentSdk/src/index.ts` | -| Rich renderer (shell/webview/ext) | `packages/chat-ui/src/setContent.ts` | -| Rich renderer styles | `packages/chat-ui/styles/chat.css` | -| VS Code chat participant renderer | `packages/vscode-chat/src/displayRender.ts` | -| CLI renderer | `packages/cli/src/enhancedConsole.ts` | -| MCP server | `packages/commandExecutor/src/commandServer.ts` | -| Copilot formatter | `packages/copilot-plugin/src/shared/message-formatter.ts` | -| Dispatcher emit | `packages/dispatcher/dispatcher/src/execute/actionHandlers.ts` | -| Display log | `packages/dispatcher/dispatcher/src/displayLog.ts` | -| RPC transport | `packages/agentRpc/src/types.ts` | -| First adopter | `packages/agents/github-cli/src/github-cliActionHandler.ts` | -| Taskflow consumer | `packages/agents/taskflow/src/script/taskFlowScriptApi.mts` | +| Area | Path | +| --------------------------------- | -------------------------------------------------------------- | +| SDK display types | `packages/agentSdk/src/display.ts` | +| SDK action result | `packages/agentSdk/src/action.ts` | +| SDK display helpers | `packages/agentSdk/src/helpers/displayHelpers.ts` | +| SDK action helpers | `packages/agentSdk/src/helpers/actionHelpers.ts` | +| SDK exports | `packages/agentSdk/src/index.ts` | +| Rich renderer (shell/webview/ext) | `packages/chat-ui/src/setContent.ts` | +| Rich renderer styles | `packages/chat-ui/styles/chat.css` | +| VS Code chat participant renderer | `packages/vscode-chat/src/displayRender.ts` | +| CLI renderer | `packages/cli/src/enhancedConsole.ts` | +| MCP server | `packages/commandExecutor/src/commandServer.ts` | +| Copilot formatter | `packages/copilot-plugin/src/shared/message-formatter.ts` | +| Dispatcher emit | `packages/dispatcher/dispatcher/src/execute/actionHandlers.ts` | +| Display log | `packages/dispatcher/dispatcher/src/displayLog.ts` | +| RPC transport | `packages/agentRpc/src/types.ts` | +| First adopter | `packages/agents/github-cli/src/github-cliActionHandler.ts` | +| Taskflow consumer | `packages/agents/taskflow/src/script/taskFlowScriptApi.mts` | diff --git a/ts/docs/plans/structured-output/STATUS.md b/ts/docs/plans/structured-output/STATUS.md index ff7f9c583..6c4cd4bb0 100644 --- a/ts/docs/plans/structured-output/STATUS.md +++ b/ts/docs/plans/structured-output/STATUS.md @@ -8,80 +8,80 @@ _Last updated: 2026-07-13 — Phase 7 Wave B: `discord`, `taskflow`, `onboarding ## Progress by phase -### Phase 1 — SDK foundation *(blocks everything)* +### Phase 1 — SDK foundation _(blocks everything)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 1a | `StructuredContent` + block types in `agentSdk/src/display.ts` | done | -| 1b | Builders: `createStructuredResult`, `createTable`, `fromRecords` | done | -| 1c | Fallback derivation: `structuredToMarkdown` / `structuredToText` / `getStructuredFallback` | done | -| 1d | Exports from `agentSdk/src/index.ts` | done | -| 1e | Unit tests (derivation + builders) | done | +| Item | Description | Status | +| ---- | ------------------------------------------------------------------------------------------ | ------ | +| 1a | `StructuredContent` + block types in `agentSdk/src/display.ts` | done | +| 1b | Builders: `createStructuredResult`, `createTable`, `fromRecords` | done | +| 1c | Fallback derivation: `structuredToMarkdown` / `structuredToText` / `getStructuredFallback` | done | +| 1d | Exports from `agentSdk/src/index.ts` | done | +| 1e | Unit tests (derivation + builders) | done | -### Phase 2 — Renderer safety net *(after 1)* +### Phase 2 — Renderer safety net _(after 1)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 2a | `chat-ui/setContent.ts` — detect `"structured"`, use fallback (no throw) | done | -| 2b | `vscode-chat/displayRender.ts` — fallback | done | -| 2c | `cli/enhancedConsole.ts` — fallback | done | -| 2d | `commandExecutor/commandServer.ts` — fallback | done | -| 2e | `copilot-plugin/message-formatter.ts` — fallback | done | +| Item | Description | Status | +| ---- | ------------------------------------------------------------------------ | ------ | +| 2a | `chat-ui/setContent.ts` — detect `"structured"`, use fallback (no throw) | done | +| 2b | `vscode-chat/displayRender.ts` — fallback | done | +| 2c | `cli/enhancedConsole.ts` — fallback | done | +| 2d | `commandExecutor/commandServer.ts` — fallback | done | +| 2e | `copilot-plugin/message-formatter.ts` — fallback | done | -### Phase 3 — Rich rendering *(after 1)* +### Phase 3 — Rich rendering _(after 1)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 3a | `chat-ui/setContent.ts` blocks → HTML (table/badge/link/image/card/list/keyValue) + `chat.css` | done | -| 3b | `vscode-chat/displayRender.ts` blocks → markdown | done | +| Item | Description | Status | +| ---- | ---------------------------------------------------------------------------------------------- | ------ | +| 3a | `chat-ui/setContent.ts` blocks → HTML (table/badge/link/image/card/list/keyValue) + `chat.css` | done | +| 3b | `vscode-chat/displayRender.ts` blocks → markdown | done | -### Phase 4 — Interactivity *(after 3a)* +### Phase 4 — Interactivity _(after 3a)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | done | -| 4b | Client-side pagination: `TableBlock.pageSize` + "Show more" in `chat-ui` (composes with sort/filter) | done | -| 4c | `TableColumn.pinned` reserved in type (sticky rendering not wired) | reserved | +| Item | Description | Status | +| ---- | ---------------------------------------------------------------------------------------------------- | -------- | +| 4a | Client-side sort/filter on `TableBlock` honoring `readonly`/`sortable`/`filterable` | done | +| 4b | Client-side pagination: `TableBlock.pageSize` + "Show more" in `chat-ui` (composes with sort/filter) | done | +| 4c | `TableColumn.pinned` reserved in type (sticky rendering not wired) | reserved | -### Phase 5 — First adopter: github-cli *(after 1)* +### Phase 5 — First adopter: github-cli _(after 1)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 5a | `prList` / `issueList` / `myAssignedIssues` / `searchRepos` → table blocks + rawData | done | -| 5b | `dependabotAlerts` + contributors → table blocks | done | -| 5c | `repoView` → keyValue block | done | -| 5d | Update handler unit tests | done | -| 5e | `prView` / `issueView` → heading + keyValue + body text block | done | -| 5f | Focused field answers → `buildStructuredField` (keyValue + rawData) | done | +| Item | Description | Status | +| ---- | ------------------------------------------------------------------------------------ | ------ | +| 5a | `prList` / `issueList` / `myAssignedIssues` / `searchRepos` → table blocks + rawData | done | +| 5b | `dependabotAlerts` + contributors → table blocks | done | +| 5c | `repoView` → keyValue block | done | +| 5d | Update handler unit tests | done | +| 5e | `prView` / `issueView` → heading + keyValue + body text block | done | +| 5f | Focused field answers → `buildStructuredField` (keyValue + rawData) | done | -### Phase 6 — Programmatic "or otherwise" *(after 1 + 5)* +### Phase 6 — Programmatic "or otherwise" _(after 1 + 5)_ -| Item | Description | Status | -| ---- | ----------- | ------ | -| 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | done | -| 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | done | +| Item | Description | Status | +| ---- | ------------------------------------------------------------------- | ------ | +| 6a | `commandExecutor` forwards `rawData` as MCP `structuredContent` | done | +| 6b | `taskflow` reads `rawData` directly (drop extractText+tryParseJson) | done | -### Phase 7 — Broader agent rollout *(after 5; per-agent)* +### Phase 7 — Broader agent rollout _(after 5; per-agent)_ Wave A — high fit: -| Item | Agent | Target blocks | Status | -| ---- | ----- | ------------- | ------ | -| 7a | `list` | heading + list | done | -| 7b | `calendar` | table (agenda) + card/keyValue (detail) | done | -| 7c | `email` | table (list) + keyValue (message) | done | -| 7d | `weather` | keyValue (current) + table (forecast) | done | -| 7e | `ipconfig` | heading + keyValue (per-adapter) | done | +| Item | Agent | Target blocks | Status | +| ---- | ---------- | --------------------------------------- | ------ | +| 7a | `list` | heading + list | done | +| 7b | `calendar` | table (agenda) + card/keyValue (detail) | done | +| 7c | `email` | table (list) + keyValue (message) | done | +| 7d | `weather` | keyValue (current) + table (forecast) | done | +| 7e | `ipconfig` | heading + keyValue (per-adapter) | done | Wave B — medium fit: -| Item | Agent | Target blocks | Status | -| ---- | ----- | ------------- | ------ | -| 7f | `discord` | heading + list/table | done | -| 7g | `taskflow` | table (name/description/usage) | done | -| 7h | `onboarding` | heading + keyValue (phase status) | done | -| 7i | `screencapture` | image + heading/keyValue | done | -| 7j | `osNotifications` | list/card (event stream) | out of scope — single toast/inline events via `context.notify`, not list-shaped | +| Item | Agent | Target blocks | Status | +| ---- | ----------------- | --------------------------------- | ------------------------------------------------------------------------------- | +| 7f | `discord` | heading + list/table | done | +| 7g | `taskflow` | table (name/description/usage) | done | +| 7h | `onboarding` | heading + keyValue (phase status) | done | +| 7i | `screencapture` | image + heading/keyValue | done | +| 7j | `osNotifications` | list/card (event stream) | out of scope — single toast/inline events via `context.notify`, not list-shaped | Out of scope (v1, custom UI / RPC bridge): `image`, `video`, `settings`, `chat`, `code`, `visualStudio`, `browser`, `markdown`, `montage`, @@ -91,25 +91,25 @@ Deferred (low value, short text/status): `timer`, `windowsClock`, `greeting`, `desktop`, `vampire`, `androidMobile`, `powershell`, `utility`, `studio`. -### Phase 8 — RPC / custom-UI agents *(mostly out of scope; see PLAN Phase 8)* +### Phase 8 — RPC / custom-UI agents _(mostly out of scope; see PLAN Phase 8)_ -| Item | Agent | Plan | Status | -| ---- | ----- | ---- | ------ | -| 8a | `browser` | web-search results (`generateWebSearchMarkdown`) → heading + table (`pageSize: 10`) + rawData; **verify markdown fallback in Chrome/Edge extension** | not started | -| 8b | `code`, `visualStudio`, `player`, `playerLocal`, `markdown`, `montage`, `turtle`, `image`, `video`, `settings`, `chat` | out of scope — display lives in external bridge/webapp/widget, not on the `displayContent` path; blocked on external renderers understanding `StructuredContent` / its fallback | deferred | +| Item | Agent | Plan | Status | +| ---- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| 8a | `browser` | web-search results (`generateWebSearchMarkdown`) → heading + table (`pageSize: 10`) + rawData; **verify markdown fallback in Chrome/Edge extension** | not started | +| 8b | `code`, `visualStudio`, `player`, `playerLocal`, `markdown`, `montage`, `turtle`, `image`, `video`, `settings`, `chat` | out of scope — display lives in external bridge/webapp/widget, not on the `displayContent` path; blocked on external renderers understanding `StructuredContent` / its fallback | deferred | ### Agent builder unit tests Structured-output builders extracted to pure exported functions and covered by per-agent specs (in addition to the 16 SDK derivation tests): -| Agent | Spec | Builder(s) | Tests | -| ----- | ---- | ---------- | ----- | -| github-cli | `githubCliStructuredResults.spec.ts` | list / repo / dependabot / contributors / pr / issue / field | 46 | -| calendar | `calendarStructured.spec.ts` | `buildStructuredEventList` | 9 | -| weather | `weatherStructured.spec.ts` | `buildCurrentConditionsResult`, `buildForecastResult` | 10 | -| ipconfig | `ipconfigStructured.spec.ts` | `buildStructuredOutput` | 7 | -| list | `listStructured.spec.ts` | `buildListResult` | 6 | +| Agent | Spec | Builder(s) | Tests | +| ---------- | ------------------------------------ | ------------------------------------------------------------ | ----- | +| github-cli | `githubCliStructuredResults.spec.ts` | list / repo / dependabot / contributors / pr / issue / field | 46 | +| calendar | `calendarStructured.spec.ts` | `buildStructuredEventList` | 9 | +| weather | `weatherStructured.spec.ts` | `buildCurrentConditionsResult`, `buildForecastResult` | 10 | +| ipconfig | `ipconfigStructured.spec.ts` | `buildStructuredOutput` | 7 | +| list | `listStructured.spec.ts` | `buildListResult` | 6 | Covers all core block shapes: table, keyValue, list, heading, badge, link cells, pagination, and rawData. New jest harnesses were scaffolded @@ -128,12 +128,12 @@ phase when a concrete agent needs it. ## Open questions -| # | Question | Resolution | -| - | -------- | ---------- | -| 1 | `rawData` source-of-truth | Lean: `fromRecords` helper emits table + rawData together | -| 2 | Image source policy | Lean: URL / dataURI; agent rehydrates file paths | -| 3 | Forward-compat for row-actions | Lean: reserve `cell.href` + `block.action` now | -| 4 | Naming: `structured` vs `rich` | Lean: `structured` | +| # | Question | Resolution | +| --- | ------------------------------ | --------------------------------------------------------- | +| 1 | `rawData` source-of-truth | Lean: `fromRecords` helper emits table + rawData together | +| 2 | Image source policy | Lean: URL / dataURI; agent rehydrates file paths | +| 3 | Forward-compat for row-actions | Lean: reserve `cell.href` + `block.action` now | +| 4 | Naming: `structured` vs `rich` | Lean: `structured` | ## Notes diff --git a/ts/packages/agentSdk/package.json b/ts/packages/agentSdk/package.json index a439d7e1b..5dc0b1238 100644 --- a/ts/packages/agentSdk/package.json +++ b/ts/packages/agentSdk/package.json @@ -22,12 +22,12 @@ "scripts": { "build": "npm run tsc", "clean": "rimraf --glob dist *.tsbuildinfo *.done.build.log", + "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js", "prettier": "prettier --check . --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --ignore-path ../../.prettierignore", - "tsc": "tsc -b", "test": "npm run test:local", "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", - "jest-esm": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js" + "tsc": "tsc -b" }, "dependencies": { "@typeagent/common-utils": "workspace:*", diff --git a/ts/packages/agentSdk/src/helpers/actionHelpers.ts b/ts/packages/agentSdk/src/helpers/actionHelpers.ts index 1eee99705..826d33e44 100644 --- a/ts/packages/agentSdk/src/helpers/actionHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/actionHelpers.ts @@ -10,10 +10,7 @@ import { import { ActionContext } from "../agentInterface.js"; import { DisplayMessageKind, StructuredBlock } from "../display.js"; import { Entity } from "../memory.js"; -import { - createStructuredContent, - structuredToText, -} from "./displayHelpers.js"; +import { createStructuredContent, structuredToText } from "./displayHelpers.js"; import { ChoiceManager, PickRememberResponse } from "./choiceManager.js"; export { ChoiceManager }; diff --git a/ts/packages/agentSdk/src/helpers/displayHelpers.ts b/ts/packages/agentSdk/src/helpers/displayHelpers.ts index d500335de..5649f21be 100644 --- a/ts/packages/agentSdk/src/helpers/displayHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/displayHelpers.ts @@ -167,8 +167,7 @@ export function fromRecords( const rows: TableCell[][] = objects.map((object) => columnSpec.map((column) => column.value(object)), ); - const { rawData, dataSchema, kind, speak, ...tableOptions } = - options ?? {}; + const { rawData, dataSchema, kind, speak, ...tableOptions } = options ?? {}; const table = createTable(columns, rows, tableOptions); return createStructuredContent([table], { rawData: rawData ?? objects, @@ -255,9 +254,7 @@ export function structuredToMarkdown(blocks: StructuredBlock[]): string { for (const block of blocks) { switch (block.kind) { case "heading": - sections.push( - `${"#".repeat(block.level ?? 1)} ${block.text}`, - ); + sections.push(`${"#".repeat(block.level ?? 1)} ${block.text}`); break; case "text": sections.push(messageContentToString(block.text)); diff --git a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts index ab0d83723..5fb6caa32 100644 --- a/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts +++ b/ts/packages/agents/calendar/src/calendarActionHandlerV3.ts @@ -396,9 +396,7 @@ export function buildStructuredEventList( const when = [datePart, timePart].filter(Boolean).join(" · "); const location = getEventLocation(event); return [ - event.htmlLink - ? { text: subject, href: event.htmlLink } - : subject, + event.htmlLink ? { text: subject, href: event.htmlLink } : subject, when, location, ]; diff --git a/ts/packages/agents/discord/src/discordActionHandler.ts b/ts/packages/agents/discord/src/discordActionHandler.ts index a77de4a4b..71847b784 100644 --- a/ts/packages/agents/discord/src/discordActionHandler.ts +++ b/ts/packages/agents/discord/src/discordActionHandler.ts @@ -622,7 +622,10 @@ async function executeAction( // Uncategorized channels first const uncategorized = byParent.get(undefined) ?? []; if (uncategorized.length > 0) { - blocks.push({ kind: "list", items: toItems(uncategorized) }); + blocks.push({ + kind: "list", + items: toItems(uncategorized), + }); } // Each category and its children for (const cat of categories) { diff --git a/ts/packages/agents/email/src/emailActionHandler.ts b/ts/packages/agents/email/src/emailActionHandler.ts index 20876bc04..ced3e708e 100644 --- a/ts/packages/agents/email/src/emailActionHandler.ts +++ b/ts/packages/agents/email/src/emailActionHandler.ts @@ -902,9 +902,7 @@ function buildStructuredEmailList( heading: string, ): ActionResultSuccess { const items = messages.map((msg) => { - const from = msg.from - ? msg.from.name || msg.from.address - : "Unknown"; + const from = msg.from ? msg.from.name || msg.from.address : "Unknown"; const date = msg.receivedDateTime ? new Date(msg.receivedDateTime).toLocaleDateString() : ""; diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index c2a34ba74..f55511852 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -921,7 +921,8 @@ export function buildStructuredField( if (summary === undefined) { return undefined; } - const label = repo || `${formatValue(data.owner)}/${String(data.name ?? "")}`; + const label = + repo || `${formatValue(data.owner)}/${String(data.name ?? "")}`; const fieldLabels: Record = { stars: "Stars", forks: "Forks", @@ -939,10 +940,7 @@ export function buildStructuredField( const value = rawValues[field]; const pair: KeyValuePair = { label: fieldLabels[field] ?? field, - value: - typeof value === "number" - ? value - : String(value ?? ""), + value: typeof value === "number" ? value : String(value ?? ""), }; const blocks: StructuredBlock[] = [ { kind: "heading", level: 3, text: label }, @@ -1091,11 +1089,20 @@ export function buildStructuredIssueView( if (assignees) pairs.push({ label: "Assignees", value: assignees }); pairs.push({ label: "Comments", value: Number(commentCount) }); if (data.createdAt) - pairs.push({ label: "Created", value: String(data.createdAt).slice(0, 10) }); + pairs.push({ + label: "Created", + value: String(data.createdAt).slice(0, 10), + }); if (data.closedAt) - pairs.push({ label: "Closed", value: String(data.closedAt).slice(0, 10) }); + pairs.push({ + label: "Closed", + value: String(data.closedAt).slice(0, 10), + }); if (data.url) - pairs.push({ label: "Link", value: { text: String(data.url), href: String(data.url) } }); + pairs.push({ + label: "Link", + value: { text: String(data.url), href: String(data.url) }, + }); const headingText = `#${data.number} ${data.title}`; const blocks: StructuredBlock[] = [ @@ -1142,7 +1149,10 @@ export function buildStructuredPrView( : prBadge(data as Record); const pairs: KeyValuePair[] = []; - pairs.push({ label: "State", value: { text: statusLabel, badge: statusTone } }); + pairs.push({ + label: "State", + value: { text: statusLabel, badge: statusTone }, + }); pairs.push({ label: "Author", value: author }); if (data.headRefName) pairs.push({ @@ -1156,9 +1166,15 @@ export function buildStructuredPrView( value: `+${data.additions} −${data.deletions} across ${data.changedFiles} files`, }); if (data.createdAt) - pairs.push({ label: "Created", value: String(data.createdAt).slice(0, 10) }); + pairs.push({ + label: "Created", + value: String(data.createdAt).slice(0, 10), + }); if (data.url) - pairs.push({ label: "Link", value: { text: String(data.url), href: String(data.url) } }); + pairs.push({ + label: "Link", + value: { text: String(data.url), href: String(data.url) }, + }); const headingText = `#${data.number} ${data.title}`; const blocks: StructuredBlock[] = [ @@ -1266,12 +1282,10 @@ export function buildStructuredListResult( return { historyText: headingText, entities: [], - displayContent: createStructuredContent( - [ - { kind: "heading", level: 3, text: headingText }, - { kind: "text", text: "No results found." }, - ], - ), + displayContent: createStructuredContent([ + { kind: "heading", level: 3, text: headingText }, + { kind: "text", text: "No results found." }, + ]), }; } @@ -1310,8 +1324,12 @@ export function buildStructuredListResult( const tone = prBadge(pr as Record); const lbl = pr.isDraft ? "Draft" - : String(pr.state ?? "").charAt(0).toUpperCase() + - String(pr.state ?? "").slice(1).toLowerCase(); + : String(pr.state ?? "") + .charAt(0) + .toUpperCase() + + String(pr.state ?? "") + .slice(1) + .toLowerCase(); return { text: lbl, badge: tone }; }, }, @@ -1373,8 +1391,12 @@ export function buildStructuredListResult( type: "badge", value: (i): TableCell => ({ text: - String(i.state ?? "").charAt(0).toUpperCase() + - String(i.state ?? "").slice(1).toLowerCase(), + String(i.state ?? "") + .charAt(0) + .toUpperCase() + + String(i.state ?? "") + .slice(1) + .toLowerCase(), badge: issueBadge(String(i.state ?? "")), }), }, @@ -1630,12 +1652,8 @@ export function buildStructuredDependabotResult( header: "Package", type: "code", value: (a): TableCell => { - const dep = a.dependency as - | Record - | undefined; - const pkg = dep?.package as - | Record - | undefined; + const dep = a.dependency as Record | undefined; + const pkg = dep?.package as Record | undefined; return String(pkg?.name ?? "unknown"); }, }, @@ -1666,7 +1684,12 @@ export function buildStructuredContributorsResult( const headerText = arr.length === 1 ? "Top contributor" : `Top ${arr.length} contributors`; const columns = [ - { id: "rank", header: "#", type: "number" as const, align: "right" as const }, + { + id: "rank", + header: "#", + type: "number" as const, + align: "right" as const, + }, { id: "login", header: "Contributor", type: "link" as const }, { id: "contributions", diff --git a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts index b22cee2e4..c269c70f7 100644 --- a/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts +++ b/ts/packages/agents/github-cli/test/githubCliStructuredResults.spec.ts @@ -138,7 +138,9 @@ describe("buildStructuredListResult — prList", () => { test("markdown alternate contains heading and table headers", () => { const result = buildStructuredListResult(prs, "prList", "prList"); const content = result?.displayContent as any; - const mdAlt = content?.alternates?.find((a: any) => a.type === "markdown"); + const mdAlt = content?.alternates?.find( + (a: any) => a.type === "markdown", + ); expect(mdAlt?.content).toContain("prList — 2 results"); expect(mdAlt?.content).toContain("| # |"); }); @@ -161,13 +163,21 @@ describe("buildStructuredListResult — issueList", () => { ]; test("returns structured result for issueList", () => { - const result = buildStructuredListResult(issues, "issueList", "issueList"); + const result = buildStructuredListResult( + issues, + "issueList", + "issueList", + ); expect(result).toBeDefined(); expect(table(result).kind).toBe("table"); }); test("labels cell joins label names", () => { - const result = buildStructuredListResult(issues, "issueList", "issueList"); + const result = buildStructuredListResult( + issues, + "issueList", + "issueList", + ); const t = table(result); const labelsColIdx = t.columns.findIndex((c: any) => c.id === "labels"); const labelsCell = t.rows[0][labelsColIdx]; @@ -176,7 +186,11 @@ describe("buildStructuredListResult — issueList", () => { }); test("open issue gets info badge", () => { - const result = buildStructuredListResult(issues, "issueList", "issueList"); + const result = buildStructuredListResult( + issues, + "issueList", + "issueList", + ); const t = table(result); const stateIdx = t.columns.findIndex((c: any) => c.id === "state"); expect(t.rows[0][stateIdx]).toMatchObject({ badge: "info" }); @@ -192,8 +206,14 @@ describe("buildStructuredListResult — empty array", () => { const result = buildStructuredListResult([], "prList", "PR list"); expect(result).toBeDefined(); const content = result?.displayContent as any; - expect(content.blocks[0]).toMatchObject({ kind: "heading", text: "PR list — 0 results" }); - expect(content.blocks[1]).toMatchObject({ kind: "text", text: "No results found." }); + expect(content.blocks[0]).toMatchObject({ + kind: "heading", + text: "PR list — 0 results", + }); + expect(content.blocks[1]).toMatchObject({ + kind: "text", + text: "No results found.", + }); }); }); @@ -228,12 +248,20 @@ describe("buildStructuredListResult — searchRepos", () => { ]; test("returns structured result for searchRepos", () => { - const result = buildStructuredListResult(repos, "searchRepos", "search"); + const result = buildStructuredListResult( + repos, + "searchRepos", + "search", + ); expect(result).toBeDefined(); }); test("name cell links to repo url", () => { - const result = buildStructuredListResult(repos, "searchRepos", "search"); + const result = buildStructuredListResult( + repos, + "searchRepos", + "search", + ); const t = table(result); const nameIdx = t.columns.findIndex((c: any) => c.id === "name"); expect(t.rows[0][nameIdx]).toMatchObject({ @@ -243,7 +271,11 @@ describe("buildStructuredListResult — searchRepos", () => { }); test("stars are formatted as number column", () => { - const result = buildStructuredListResult(repos, "searchRepos", "search"); + const result = buildStructuredListResult( + repos, + "searchRepos", + "search", + ); const t = table(result); const starsIdx = t.columns.findIndex((c: any) => c.id === "stars"); expect(t.columns[starsIdx].type).toBe("number"); @@ -515,7 +547,9 @@ describe("buildStructuredIssueView", () => { expect(kv.pairs.find((p: any) => p.label === "Labels")?.value).toBe( "bug, p1", ); - expect(kv.pairs.find((p: any) => p.label === "Comments")?.value).toBe(2); + expect(kv.pairs.find((p: any) => p.label === "Comments")?.value).toBe( + 2, + ); }); test("rawData is the original object", () => { @@ -568,4 +602,3 @@ describe("buildStructuredField", () => { }); }); }); - diff --git a/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts b/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts index 3c4c226c0..ff623e6cc 100644 --- a/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts +++ b/ts/packages/agents/ipconfig/test/ipconfigStructured.spec.ts @@ -25,7 +25,7 @@ const SAMPLE = [ ].join("\r\n"); function content(raw: string) { - return (buildStructuredOutput(raw).displayContent as any); + return buildStructuredOutput(raw).displayContent as any; } describe("buildStructuredOutput", () => { diff --git a/ts/packages/agents/list/src/listActionHandler.ts b/ts/packages/agents/list/src/listActionHandler.ts index 61bf5b7fb..9d3718fab 100644 --- a/ts/packages/agents/list/src/listActionHandler.ts +++ b/ts/packages/agents/list/src/listActionHandler.ts @@ -293,9 +293,7 @@ export function buildListResult( [ { kind: "heading", level: 3, text: `List '${listName}'` }, { kind: "text", text: "This list is empty." }, - ...(suffix - ? [{ kind: "text" as const, text: suffix }] - : []), + ...(suffix ? [{ kind: "text" as const, text: suffix }] : []), ], { entities: getEntities(listName), diff --git a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts index 0f20b9848..05bf2df7f 100644 --- a/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts +++ b/ts/packages/agents/taskflow/src/script/taskFlowScriptApi.mts @@ -155,9 +155,7 @@ export class TaskFlowScriptAPIImpl implements TaskFlowScriptAPI { // Use rawData from StructuredContent when available; otherwise fall // back to parsing the text (the pre-Phase-6 path). const dc = - "displayContent" in result - ? result.displayContent - : undefined; + "displayContent" in result ? result.displayContent : undefined; const rawData = dc !== undefined && typeof dc === "object" && @@ -165,7 +163,8 @@ export class TaskFlowScriptAPIImpl implements TaskFlowScriptAPI { (dc as { type?: string }).type === "structured" ? (dc as { rawData?: unknown }).rawData : undefined; - const data = rawData !== undefined ? rawData : tryParseJson(text) ?? text; + const data = + rawData !== undefined ? rawData : (tryParseJson(text) ?? text); if (result.error) { return { text, data, error: result.error }; diff --git a/ts/packages/agents/weather/package.json b/ts/packages/agents/weather/package.json index b48b143fc..75aa15308 100644 --- a/ts/packages/agents/weather/package.json +++ b/ts/packages/agents/weather/package.json @@ -28,8 +28,8 @@ "prettier": "prettier --check . --ignore-path ../../../.prettierignore", "prettier:fix": "prettier --write . --ignore-path ../../../.prettierignore", "test": "npm run test:local", - "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", "test:api": "node testWeatherSimple.mjs", + "test:local": "pnpm run jest-esm --testPathPattern=\".*[.]spec[.]js\"", "tsc": "tsc -b" }, "dependencies": { diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 0bbfd4de5..7ff46edd3 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -53,16 +53,13 @@ function badgeClass(tone: BadgeTone | undefined): string { return `sc-badge sc-badge-${tone ?? "neutral"}`; } -function renderTableCell( - cell: TableCell, - colType: string | undefined, -): string { +function renderTableCell(cell: TableCell, colType: string | undefined): string { const text = cellDisplayText(cell); const obj = typeof cell === "object" && cell !== null ? cell : null; const href = obj?.href ?? undefined; const badge = obj?.badge ?? undefined; const tooltip = obj?.tooltip ? ` title="${esc(obj.tooltip)}"` : ""; - const effectiveType = badge ? "badge" : href ? "link" : colType ?? "text"; + const effectiveType = badge ? "badge" : href ? "link" : (colType ?? "text"); switch (effectiveType) { case "link": @@ -103,8 +100,7 @@ function renderTableBlock(block: TableBlock): string { } parts.push(""); for (const col of columns) { - const align = - col.align ? ` style="text-align:${esc(col.align)}"` : ""; + const align = col.align ? ` style="text-align:${esc(col.align)}"` : ""; const colSortable = !readonly && (col.sortable ?? sortable ?? true) !== false; const sortBtn = colSortable @@ -117,13 +113,15 @@ function renderTableBlock(block: TableBlock): string { const row = rows[ri]; // Rows beyond the first page start hidden; the "Show more" control // (wired in attachTableInteractivity) reveals them in batches. - const hidden = paginate && ri >= pageSize! ? ' class="sc-row-hidden"' : ""; + const hidden = + paginate && ri >= pageSize! ? ' class="sc-row-hidden"' : ""; parts.push(``); for (let ci = 0; ci < columns.length; ci++) { const col = columns[ci]; const cell = row[ci] ?? ""; - const align = - col.align ? ` style="text-align:${esc(col.align)}"` : ""; + const align = col.align + ? ` style="text-align:${esc(col.align)}"` + : ""; parts.push(`${renderTableCell(cell, col.type)}`); } parts.push(""); @@ -146,7 +144,13 @@ function renderMarkdownToHtml(text: string): string { function (tokens: any, idx: any, options: any, _env: any, self: any) { return self.renderToken(tokens, idx, options); }; - md.renderer.rules.link_open = (tokens: any, idx: any, options: any, env: any, self: any) => { + md.renderer.rules.link_open = ( + tokens: any, + idx: any, + options: any, + env: any, + self: any, + ) => { tokens[idx].attrSet("target", "_blank"); return defaultRender(tokens, idx, options, env, self); }; @@ -189,13 +193,11 @@ function renderBlock(block: StructuredBlock): string { ? ` ${esc(item.subtitle)}` : ""; const badges = (item.badges ?? []) - .map( - (tone) => { - const label = - tone.charAt(0).toUpperCase() + tone.slice(1); - return `${esc(label)}`; - }, - ) + .map((tone) => { + const label = + tone.charAt(0).toUpperCase() + tone.slice(1); + return `${esc(label)}`; + }) .join(" "); return `
  • ${label}${subtitle}${badges ? " " + badges : ""}
  • `; }) @@ -285,8 +287,7 @@ function attachTableInteractivity(root: HTMLElement): void { const canPaginate = Number.isFinite(pageSize) && pageSize > 0; if (!canSort && !canFilter && !canPaginate) return; - const tbody = - table.querySelector("tbody"); + const tbody = table.querySelector("tbody"); if (!tbody) return; // Snapshot original row order so we can restore it on "none" sort. diff --git a/ts/packages/chat-ui/styles/chat.css b/ts/packages/chat-ui/styles/chat.css index 003a28f9a..64f12d5db 100644 --- a/ts/packages/chat-ui/styles/chat.css +++ b/ts/packages/chat-ui/styles/chat.css @@ -1116,9 +1116,15 @@ table.table-message td { margin: 0.5em 0 0.25em; } -.sc-heading-1 { font-size: 1.4em; } -.sc-heading-2 { font-size: 1.2em; } -.sc-heading-3 { font-size: 1.05em; } +.sc-heading-1 { + font-size: 1.4em; +} +.sc-heading-2 { + font-size: 1.2em; +} +.sc-heading-3 { + font-size: 1.05em; +} /* --- Text / prose -------------------------------------------------------- */ @@ -1148,7 +1154,10 @@ table.sc-table td { } table.sc-table thead th { - background: var(--chat-conversation-list-hover-background, rgba(0, 0, 0, 0.06)); + background: var( + --chat-conversation-list-hover-background, + rgba(0, 0, 0, 0.06) + ); color: var(--chat-conversation-foreground, #1f1f1f); font-weight: 600; white-space: nowrap; diff --git a/ts/packages/vscode-chat/src/displayRender.ts b/ts/packages/vscode-chat/src/displayRender.ts index aff45c208..2ff84cf28 100644 --- a/ts/packages/vscode-chat/src/displayRender.ts +++ b/ts/packages/vscode-chat/src/displayRender.ts @@ -83,7 +83,9 @@ function renderStructuredBlockToMarkdown(block: StructuredBlock): string { const { columns, rows, caption } = block; const headers = columns.map((c) => escapeTableCell(c.header)); const dataRows = rows.map((row) => - columns.map((_, ci) => escapeTableCell(scCellMarkdown(row[ci] ?? ""))), + columns.map((_, ci) => + escapeTableCell(scCellMarkdown(row[ci] ?? "")), + ), ); const lines = [ `| ${headers.join(" | ")} |`, @@ -110,7 +112,8 @@ function renderStructuredBlockToMarkdown(block: StructuredBlock): string { case "keyValue": return block.pairs .map( - (pair) => `- **${pair.label}:** ${scCellMarkdown(pair.value)}`, + (pair) => + `- **${pair.label}:** ${scCellMarkdown(pair.value)}`, ) .join("\n"); case "card": { From 254467e5439ae0e3012949aee10bcad00279d636 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Jul 2026 23:28:01 +0000 Subject: [PATCH 25/36] fix(github-cli): return ActionResultSuccess for myPullRequests list formatting --- ts/packages/agents/github-cli/src/github-cliActionHandler.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts index f55511852..25f05b100 100644 --- a/ts/packages/agents/github-cli/src/github-cliActionHandler.ts +++ b/ts/packages/agents/github-cli/src/github-cliActionHandler.ts @@ -1505,7 +1505,7 @@ export function buildStructuredListResult( // The current user's own pull requests across repos (gh search prs --author @me) if (actionName === "myPullRequests" && "number" in items[0]) { - return items + const markdownList = items .map((pr) => { const repo = pr.repository as | Record @@ -1519,6 +1519,9 @@ export function buildStructuredListResult( return `- ${repoPrefix}[#${pr.number} ${pr.title}](${pr.url}) — ${status}`; }) .join("\n"); + return createActionResultFromMarkdownDisplay( + `**${headingText}**\n\n${markdownList}`, + ); } // Search repos From 00b242e49f4281a84044276e190911c16b7563ae Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Jul 2026 02:15:30 +0000 Subject: [PATCH 26/36] fix: reduce chat-ui renderBlock complexity --- ts/packages/chat-ui/src/setContent.ts | 145 ++++++++++++++------------ 1 file changed, 79 insertions(+), 66 deletions(-) diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 7ff46edd3..2b6aaeb98 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -158,52 +158,91 @@ function renderMarkdownToHtml(text: string): string { return ansiUpMarkdownToHtml.ansi_to_html(rendered); } +function renderTextBlock( + block: Extract, +): string { + const raw = + typeof block.text === "string" + ? block.text + : Array.isArray(block.text) && typeof block.text[0] === "string" + ? (block.text as string[]).join("\n") + : (block.text as string[][]) + .map((row) => row.join(" | ")) + .join("\n"); + const fmt = block.format ?? "markdown"; + if (fmt === "text") { + return `

    ${textToHtml(raw)}

    `; + } + return `
    ${renderMarkdownToHtml(raw)}
    `; +} + +function renderListBlock( + block: Extract, +): string { + const tag = block.ordered ? "ol" : "ul"; + const items = block.items + .map((item) => { + const label = item.href + ? `${esc(item.text)}` + : esc(item.text); + const subtitle = item.subtitle + ? ` ${esc(item.subtitle)}` + : ""; + const badges = (item.badges ?? []) + .map((tone) => { + const label = tone.charAt(0).toUpperCase() + tone.slice(1); + return `${esc(label)}`; + }) + .join(" "); + return `
  • ${label}${subtitle}${badges ? " " + badges : ""}
  • `; + }) + .join(""); + return `<${tag} class="sc-list">${items}`; +} + +function renderCardBlock( + block: Extract, +): string { + const parts: string[] = [`
    `]; + if (block.title) { + const title = block.href + ? `${esc(block.title)}` + : esc(block.title); + parts.push(`
    ${title}
    `); + } + if (block.subtitle) { + parts.push( + `
    ${esc(block.subtitle)}
    `, + ); + } + if (block.fields && block.fields.length > 0) { + const rows = block.fields + .map( + (pair) => + `${esc(pair.label)}` + + `${renderTableCell(pair.value, undefined)}`, + ) + .join(""); + parts.push( + `${rows}
    `, + ); + } + parts.push("
    "); + return parts.join(""); +} + function renderBlock(block: StructuredBlock): string { switch (block.kind) { case "heading": { const level = block.level ?? 1; return `${esc(block.text)}`; } - case "text": { - const raw = - typeof block.text === "string" - ? block.text - : Array.isArray(block.text) && - typeof block.text[0] === "string" - ? (block.text as string[]).join("\n") - : (block.text as string[][]) - .map((row) => row.join(" | ")) - .join("\n"); - const fmt = block.format ?? "markdown"; - if (fmt === "text") { - return `

    ${textToHtml(raw)}

    `; - } - return `
    ${renderMarkdownToHtml(raw)}
    `; - } + case "text": + return renderTextBlock(block); case "table": return renderTableBlock(block); - case "list": { - const tag = block.ordered ? "ol" : "ul"; - const items = block.items - .map((item) => { - const label = item.href - ? `${esc(item.text)}` - : esc(item.text); - const subtitle = item.subtitle - ? ` ${esc(item.subtitle)}` - : ""; - const badges = (item.badges ?? []) - .map((tone) => { - const label = - tone.charAt(0).toUpperCase() + tone.slice(1); - return `${esc(label)}`; - }) - .join(" "); - return `
  • ${label}${subtitle}${badges ? " " + badges : ""}
  • `; - }) - .join(""); - return `<${tag} class="sc-list">${items}`; - } + case "list": + return renderListBlock(block); case "keyValue": { const rows = block.pairs .map( @@ -214,34 +253,8 @@ function renderBlock(block: StructuredBlock): string { .join(""); return `${rows}
    `; } - case "card": { - const parts: string[] = [`
    `]; - if (block.title) { - const title = block.href - ? `${esc(block.title)}` - : esc(block.title); - parts.push(`
    ${title}
    `); - } - if (block.subtitle) { - parts.push( - `
    ${esc(block.subtitle)}
    `, - ); - } - if (block.fields && block.fields.length > 0) { - const rows = block.fields - .map( - (pair) => - `${esc(pair.label)}` + - `${renderTableCell(pair.value, undefined)}`, - ) - .join(""); - parts.push( - `${rows}
    `, - ); - } - parts.push("
    "); - return parts.join(""); - } + case "card": + return renderCardBlock(block); case "image": { const widthAttr = block.width ? ` width="${block.width}"` : ""; const heightAttr = block.height ? ` height="${block.height}"` : ""; From c181c1d68a82ae488becef54eec96ede31d6a651 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:07:55 +0000 Subject: [PATCH 27/36] fix lint ratchet violations in changed TS files --- .../agentSdk/src/helpers/displayHelpers.ts | 2 +- .../src/watchers/windowsWatcher.ts | 16 ++++++++++------ ts/packages/chat-ui/src/setContent.ts | 18 ++++++------------ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/ts/packages/agentSdk/src/helpers/displayHelpers.ts b/ts/packages/agentSdk/src/helpers/displayHelpers.ts index 5649f21be..69c5738da 100644 --- a/ts/packages/agentSdk/src/helpers/displayHelpers.ts +++ b/ts/packages/agentSdk/src/helpers/displayHelpers.ts @@ -162,7 +162,7 @@ export function fromRecords( }, ): StructuredContent { const columns: TableColumn[] = columnSpec.map( - ({ value, ...column }) => column, + ({ value: _value, ...column }) => column, ); const rows: TableCell[][] = objects.map((object) => columnSpec.map((column) => column.value(object)), diff --git a/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts b/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts index 49d29473b..9a318befd 100644 --- a/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts +++ b/ts/packages/agents/osNotifications/src/watchers/windowsWatcher.ts @@ -32,6 +32,10 @@ export class HelperNotBuiltError extends Error { } } +function getErrorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} + // Spawns the bundled OsNotificationListener.exe helper. The helper subscribes // to Windows.UI.Notifications.Management.UserNotificationListener and writes // JSON-per-line on stdout in the OsNotificationEvent shape from @@ -90,7 +94,7 @@ export function startWindowsWatcher( try { const evt = JSON.parse(line) as OsNotificationEvent; listener(evt); - } catch (e: any) { + } catch { debug("invalid line from helper: %s", line); } } @@ -485,7 +489,7 @@ async function ensureCertTrustedLocalMachine(opts: { os.homedir(), opts, ); - } catch (e: any) { + } catch (error: unknown) { throw new Error( "Failed to trust the dev cert at LocalMachine scope " + "(the elevation prompt may have been declined). Either re-run " + @@ -494,7 +498,7 @@ async function ensureCertTrustedLocalMachine(opts: { ` $cer = '${cerPath}'\n` + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\Root\n" + " Import-Certificate -FilePath $cer -CertStoreLocation Cert:\\LocalMachine\\TrustedPeople\n" + - `Original error: ${e?.message ?? e}`, + `Original error: ${getErrorMessage(error)}`, ); } if (!isCertTrustedLocalMachine()) { @@ -546,8 +550,8 @@ async function registerSparsePackage( path.dirname(msixPath), opts, ); - } catch (e: any) { - const msg = e?.message ?? String(e); + } catch (error: unknown) { + const msg = getErrorMessage(error); if (msg.includes("0x800B0109")) { throw new Error( "Add-AppxPackage failed with CERT_E_UNTRUSTEDROOT even after the " + @@ -559,7 +563,7 @@ async function registerSparsePackage( "Then retry. (One-time per machine; cert renewals via getCert renew keep the same Subject so this stays valid.)", ); } - throw e; + throw error; } } diff --git a/ts/packages/chat-ui/src/setContent.ts b/ts/packages/chat-ui/src/setContent.ts index 2b6aaeb98..cdf3e2637 100644 --- a/ts/packages/chat-ui/src/setContent.ts +++ b/ts/packages/chat-ui/src/setContent.ts @@ -139,18 +139,12 @@ function renderTableBlock(block: TableBlock): string { function renderMarkdownToHtml(text: string): string { const md = new MarkdownIt({ html: true }); - const defaultRender = - md.renderer.rules.link_open || - function (tokens: any, idx: any, options: any, _env: any, self: any) { - return self.renderToken(tokens, idx, options); - }; - md.renderer.rules.link_open = ( - tokens: any, - idx: any, - options: any, - env: any, - self: any, - ) => { + type LinkOpenRenderRule = NonNullable; + const defaultRender: LinkOpenRenderRule = + md.renderer.rules.link_open ?? + ((tokens, idx, options, _env, self) => + self.renderToken(tokens, idx, options)); + md.renderer.rules.link_open = (tokens, idx, options, env, self) => { tokens[idx].attrSet("target", "_blank"); return defaultRender(tokens, idx, options, env, self); }; From 390a11b6af37a4c64fb515e3af072377829c8203 Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Wed, 15 Jul 2026 22:47:37 +0000 Subject: [PATCH 28/36] docs: regenerate README.AUTOGEN.md for changed packages --- ts/packages/agentSdk/README.AUTOGEN.md | 85 ++++++----- ts/packages/agents/browser/README.AUTOGEN.md | 22 +-- ts/packages/agents/calendar/README.AUTOGEN.md | 6 +- ts/packages/agents/discord/README.AUTOGEN.md | 137 +++++++++--------- ts/packages/agents/email/README.AUTOGEN.md | 18 +-- .../agents/github-cli/README.AUTOGEN.md | 30 ++-- ts/packages/agents/ipconfig/README.AUTOGEN.md | 36 ++--- ts/packages/agents/list/README.AUTOGEN.md | 26 ++-- .../agents/onboarding/README.AUTOGEN.md | 12 +- .../agents/osNotifications/README.AUTOGEN.md | 10 +- .../agents/screencapture/README.AUTOGEN.md | 12 +- ts/packages/agents/taskflow/README.AUTOGEN.md | 28 ++-- ts/packages/agents/weather/README.AUTOGEN.md | 66 +++++---- ts/packages/chat-ui/README.AUTOGEN.md | 20 +-- ts/packages/cli/README.AUTOGEN.md | 64 ++++---- ts/packages/commandExecutor/README.AUTOGEN.md | 14 +- ts/packages/copilot-plugin/README.AUTOGEN.md | 18 +-- .../dispatcher/dispatcher/README.AUTOGEN.md | 8 +- ts/packages/shell/README.AUTOGEN.md | 8 +- ts/packages/vscode-chat/README.AUTOGEN.md | 6 +- ts/packages/vscode-shell/README.AUTOGEN.md | 8 +- 21 files changed, 341 insertions(+), 293 deletions(-) diff --git a/ts/packages/agentSdk/README.AUTOGEN.md b/ts/packages/agentSdk/README.AUTOGEN.md index 48e75bb62..40e1f7320 100644 --- a/ts/packages/agentSdk/README.AUTOGEN.md +++ b/ts/packages/agentSdk/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # @typeagent/agent-sdk — AI-generated documentation @@ -12,68 +12,87 @@ ## Overview -The `@typeagent/agent-sdk` package provides the foundational interfaces and utilities required to build Dispatcher Agents within the TypeAgent ecosystem. It serves as a core library for developers to create agents that interact with the TypeAgent Dispatcher, handle user commands and actions, and manage agent-specific contexts and lifecycles. +The `@typeagent/agent-sdk` package provides the core interfaces, types, and utilities required to build and manage Dispatcher Agents in the TypeAgent ecosystem. It serves as the foundational library for creating agents that interact with the TypeAgent Dispatcher, enabling them to handle user commands, execute actions, and manage their lifecycle and context. + +This package is widely used across the TypeAgent ecosystem, including in the Shell, CLI, and other agents, making it a critical component for agent development and integration. ## What it does -The `@typeagent/agent-sdk` package enables developers to implement Dispatcher Agents with the following key capabilities: +The `@typeagent/agent-sdk` package offers a comprehensive set of tools and interfaces to facilitate the development of Dispatcher Agents. Its key features include: + +### Manifest and Instantiation + +- **Manifest**: The `AppAgentManifest` defines metadata about the agent, such as its emoji, description, and translator configuration. This manifest is loaded by the Dispatcher when the agent is initialized. +- **Instantiation Entry Point**: The `AppAgent` interface is the core contract that agents implement. The Dispatcher uses the `instantiate` function exported from the `./agent/handlers` module to create an instance of the agent. + +### Lifecycle Management + +- **initializeAgentContext**: Sets up the agent's runtime context, which is passed back in subsequent API calls. +- **updateAgentContext**: Updates the agent's context, such as enabling or disabling specific actions or sub-schemas. +- **closeAgentContext**: Cleans up resources when the agent is no longer needed. -- **Manifest and Instantiation**: Define an agent's manifest (`AppAgentManifest`) and specify an instantiation entry point. The manifest includes metadata such as the agent's emoji, description, and translator configuration. The instantiation entry point provides the `AppAgent` implementation. -- **Lifecycle Management**: Implement lifecycle methods such as: +### Command Handling - - `initializeAgentContext`: Sets up the agent's runtime context. - - `updateAgentContext`: Updates the agent's context, e.g., when actions are enabled or disabled. - - `closeAgentContext`: Cleans up resources when the agent is no longer needed. +- **getCommands**: Returns a list of commands (`CommandDescriptors`) that the agent supports. +- **executeCommand**: Executes commands based on parsed parameters provided by the Dispatcher. -- **Command Handling**: Define and handle commands using: +### Action Execution - - `getCommands`: Returns a list of commands (`CommandDescriptors`) supported by the agent. - - `executeCommand`: Executes commands based on parsed parameters. +- **executeAction**: Handles user-triggered actions routed by the Dispatcher. The agent is responsible for further routing to specific handlers. +- **streamPartialAction**: Supports streaming partial results for actions, such as generating responses incrementally. -- **Action Execution**: Handle user-triggered actions with: +### Readiness and Setup - - `executeAction`: Processes actions routed by the Dispatcher. - - `streamPartialAction`: Supports streaming partial results for actions, such as generating responses incrementally. +- **checkReadiness**: Reports the agent's readiness state, indicating whether it is ready, requires setup, or is unsupported. +- **setup**: Provides an optional in-chat configuration flow to guide users through the setup process and transition the agent to a ready state. -- **Readiness and Setup**: Ensure the agent is operational with: +### Display Management - - `checkReadiness`: Reports whether the agent is ready, requires setup, or is unsupported. - - `setup`: Guides users through configuration steps to make the agent operational. +- **Dynamic and Periodic Updates**: Utilities for managing how information is displayed to users, including support for dynamic and periodic updates. -- **Display Management**: Manage how information is presented to users with support for dynamic and periodic updates. This includes utilities for creating and managing display content. +### Choice Management -The package is widely used across the TypeAgent ecosystem, including in the Shell, CLI, and other agents, making it a critical component for building and integrating agents. +- **handleChoice**: Routes user responses to the agent's `ChoiceManager`, enabling interactive workflows. ## Setup -To create a Dispatcher Agent using the `@typeagent/agent-sdk`, you need to configure the following in your project: +To create a Dispatcher Agent using the `@typeagent/agent-sdk`, follow these steps: -1. **Manifest**: +1. **Define the Manifest**: - Create a JSON file that adheres to the `AppAgentManifest` type. This file should include metadata about the agent, such as its emoji, description, and translator configuration. - Specify the path to this file in your `package.json` under the `./agent/manifest` export path. -2. **Instantiation Entry Point**: - - Implement the `AppAgent` interface in a TypeScript or JavaScript file. +2. **Implement the Instantiation Entry Point**: + + - Create a TypeScript or JavaScript file that implements the `AppAgent` interface. - Export an `instantiate` function from this file, which returns an instance of the `AppAgent`. - Specify the path to this file in your `package.json` under the `./agent/handlers` export path. -For more detailed instructions, refer to the hand-written README or the [List agent](../agents/list/) as a practical example. +3. **Follow Examples**: + - Refer to the [List agent](../agents/list/) as a practical example of building a Dispatcher Agent. + - Consult the Dispatcher README for instructions on registering your agent with the TypeAgent Dispatcher. ## Key Files -The `@typeagent/agent-sdk` package is organized into several key files, each serving a specific purpose: +The `@typeagent/agent-sdk` package is organized into several key files, each with a specific role in the development of Dispatcher Agents: - **[index.ts](./src/index.ts)**: The main entry point, exporting core interfaces, types, and utilities for building agents. - **[action.ts](./src/action.ts)**: Defines the structure and types for actions, including `AppAction`, `ActionResult`, and `PendingChoice`. These are essential for implementing action-related methods like `executeAction`. - **[agentInterface.ts](./src/agentInterface.ts)**: Contains the primary interfaces for agents, such as `AppAgent`, `SessionContext`, and `ActionContext`. These define the contract between the agent and the Dispatcher. - **[command.ts](./src/command.ts)**: Provides types and interfaces for command handling, including `CommandDescriptor` and `CommandDescriptors`. These are used to define and execute commands. - **[display.ts](./src/display.ts)**: Defines types for managing display content, such as `DisplayType` and `DynamicDisplay`. These are used to control how information is presented to users. -- **Helpers**: - - **[actionHelpers.ts](./src/helpers/actionHelpers.ts)**: Utilities for creating and managing action results. - - **[commandHelpers.ts](./src/helpers/commandHelpers.ts)**: Functions for handling commands and their parameters. - - **[displayHelpers.ts](./src/helpers/displayHelpers.ts)**: Tools for managing display content and formatting. - - **[choiceManager.ts](./src/helpers/choiceManager.ts)**: Manages user choices and callbacks, enabling interactive workflows. + +### Helper Modules + +- **[actionHelpers.ts](./src/helpers/actionHelpers.ts)**: Utilities for creating and managing action results. +- **[commandHelpers.ts](./src/helpers/commandHelpers.ts)**: Functions for handling commands and their parameters. +- **[displayHelpers.ts](./src/helpers/displayHelpers.ts)**: Tools for managing display content and formatting. +- **[choiceManager.ts](./src/helpers/choiceManager.ts)**: Manages user choices and callbacks, enabling interactive workflows. + +### Node-Specific Utilities + +- **[cliPath.ts](./src/node/cliPath.ts)**: Node.js-specific helpers for resolving CLI paths, re-exported from `@typeagent/common-utils`. ## How to extend @@ -137,6 +156,7 @@ External: `debug`, `type-fest` ### Used by +- [@typeagent/action-browser](../../tools/actionBrowser/README.md) - [@typeagent/agent-rpc](../../packages/agentRpc/README.md) - [@typeagent/copilot-plugin](../../packages/copilot-plugin/README.md) - [@typeagent/dispatcher-rpc](../../packages/dispatcher/rpc/README.md) @@ -146,8 +166,7 @@ External: `debug`, `type-fest` - [agent-cache](../../packages/cache/README.md) - [agent-cli](../../packages/cli/README.md) - [agent-dispatcher](../../packages/dispatcher/dispatcher/README.md) -- [agent-shell](../../packages/shell/README.md) -- _…and 47 more workspace consumers._ +- _…and 48 more workspace consumers._ ### Files of interest @@ -165,6 +184,6 @@ External: `debug`, `type-fest` --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/agent-sdk docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/agent-sdk docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/browser/README.AUTOGEN.md b/ts/packages/agents/browser/README.AUTOGEN.md index d062beba4..5e90b5c9d 100644 --- a/ts/packages/agents/browser/README.AUTOGEN.md +++ b/ts/packages/agents/browser/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # browser-typeagent — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `browser-typeagent` package is a TypeAgent application agent designed for browser automation and control. It enables programmatic interaction with browser windows, tabs, and web pages through a defined set of actions. This package integrates with the TypeAgent shell and CLI, allowing users to perform browser-related tasks using commands or natural language. +The `browser-typeagent` package is a TypeAgent application agent designed for browser automation and control. It enables programmatic interaction with browser windows, tabs, and web pages through a defined set of actions. This package integrates with the TypeAgent shell and CLI, allowing users to perform browser-related tasks using commands or natural language. It also includes a browser extension for enhanced functionality. ## What it does -The `browser-typeagent` package provides a comprehensive set of browser automation capabilities, including: +The `browser-typeagent` package provides a wide range of browser automation capabilities, including: - **Navigation**: Actions such as `openWebPage`, `goBack`, `goForward`, and `reloadPage` allow users to navigate between web pages and control browser tabs. - **Interaction**: Users can interact with web content using actions like `clickOn`, `followLinkByText`, `scrollDown`, and `scrollUp`. @@ -121,12 +121,12 @@ By following these steps, you can enhance the `browser-typeagent` package to sup ### Entry points - `./agent/manifest` → [./src/agent/manifest.json](./src/agent/manifest.json) -- `./agent/handlers` → `./dist/agent/browserActionHandler.mjs` _(not found on disk)_ -- `./agent/types` → `./dist/common/browserControl.mjs` _(not found on disk)_ -- `./agent/indexing` → `./dist/agent/indexing/browserIndexingService.js` _(not found on disk)_ -- `./contentScriptRpc/types` → `./dist/common/contentScriptRpc/types.mjs` _(not found on disk)_ -- `./contentScriptRpc/client` → `./dist/common/contentScriptRpc/client.mjs` _(not found on disk)_ -- `./htmlReducer` → `./dist/common/crossContextHtmlReducer.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/agent/browserActionHandler.mjs](./dist/agent/browserActionHandler.mjs) +- `./agent/types` → [./dist/common/browserControl.mjs](./dist/common/browserControl.mjs) +- `./agent/indexing` → [./dist/agent/indexing/browserIndexingService.js](./dist/agent/indexing/browserIndexingService.js) +- `./contentScriptRpc/types` → [./dist/common/contentScriptRpc/types.mjs](./dist/common/contentScriptRpc/types.mjs) +- `./contentScriptRpc/client` → [./dist/common/contentScriptRpc/client.mjs](./dist/common/contentScriptRpc/client.mjs) +- `./htmlReducer` → [./dist/common/crossContextHtmlReducer.js](./dist/common/crossContextHtmlReducer.js) ### Dependencies @@ -179,7 +179,7 @@ _…and 17 more not shown._ - [./src/extension/contentScript/recording/index.ts](./src/extension/contentScript/recording/index.ts) - [./src/extension/serviceWorker/index.ts](./src/extension/serviceWorker/index.ts) - [./src/extension/webagent/crossword/crosswordSchema.agr](./src/extension/webagent/crossword/crosswordSchema.agr) -- _…and 289 more under `./src/`._ +- _…and 291 more under `./src/`._ ### Environment variables @@ -190,6 +190,6 @@ _2 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/calendar/README.AUTOGEN.md b/ts/packages/agents/calendar/README.AUTOGEN.md index 1d28a7e3f..2a82a5984 100644 --- a/ts/packages/agents/calendar/README.AUTOGEN.md +++ b/ts/packages/agents/calendar/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # calendar — AI-generated documentation @@ -16,7 +16,7 @@ The `calendar` package is a TypeAgent application agent designed to manage calen ## What it does -The calendar agent provides a set of actions to manage and manipulate calendar events. These actions are grouped into two main categories: +The calendar agent provides a range of actions to manage and manipulate calendar events. These actions are grouped into two main categories: ### Event Management @@ -147,6 +147,6 @@ External: `chalk`, `date-fns`, `debug` --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter calendar docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter calendar docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/discord/README.AUTOGEN.md b/ts/packages/agents/discord/README.AUTOGEN.md index a857732ef..1c0bd51a5 100644 --- a/ts/packages/agents/discord/README.AUTOGEN.md +++ b/ts/packages/agents/discord/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # discord-agent — AI-generated documentation @@ -12,30 +12,31 @@ ## Overview -The `discord-agent` package is a TypeAgent application agent that facilitates interaction with Discord servers using natural language commands. It integrates with the Discord REST API v10 to perform tasks such as sending messages, managing channels, creating invites, and more. This agent is designed to simplify server management and communication by interpreting user commands and executing the appropriate actions. +The `discord-agent` package is a TypeAgent application agent that enables interaction with Discord servers through natural language commands. By leveraging the Discord REST API v10, this agent allows users to perform various tasks such as sending messages, managing channels, creating invites, and more. It simplifies server management and communication by interpreting user commands and executing corresponding actions. ## What it does -The `discord-agent` provides a range of actions to interact with Discord servers. These actions are grouped into several categories: +The `discord-agent` provides a set of actions that allow users to interact with Discord servers. These actions are grouped into the following categories: -- **Message Management**: +### Message Management - - `createMessage`: Sends a specific message to a channel. - - `craftMessage`: Uses an LLM to generate a message based on a high-level intent and posts it to a channel. - - `getChannelMessages`: Retrieves messages from a specified channel. +- **`createMessage`**: Sends a specific message to a channel. For example, "Send a message to the general channel saying 'Hello everyone!'". +- **`craftMessage`**: Uses an LLM to generate a message based on a high-level intent and posts it to a channel. For example, "Send a message to #general that welcomes everyone to the discord". +- **`getChannelMessages`**: Retrieves messages from a specified channel. For example, "Can you show me the latest messages from the channel with ID 12345?". -- **User and Server Management**: +### User and Server Management - - `getCurrentUser`: Fetches details about the bot's account. - - `setGuild`: Sets the default Discord server (guild) for all operations. +- **`getCurrentUser`**: Fetches details about the bot's account, such as username, discriminator, and ID. +- **`setGuild`**: Sets the default Discord server (guild) for all operations. For example, "Set my Discord server to YOUR_SERVER_ID". -- **Channel Management**: +### Channel Management - - `listChannels`: Lists all channels in the current Discord server. - - `refreshChannels`: Refreshes the cached list of channels from the server. +- **`listChannels`**: Lists all channels in the current Discord server, grouped by categories. +- **`refreshChannels`**: Refreshes the cached list of channels from the server. -- **Invite Management**: - - `createChannelInvite`: Creates a new invite link for a specific channel. +### Invite Management + +- **`createChannelInvite`**: Creates a new invite link for a specific channel. For example, "Create an invite for #general that never expires". These actions allow users to perform common Discord tasks without directly interacting with the Discord interface. The agent also supports natural language processing to interpret user commands and map them to the appropriate actions. @@ -43,78 +44,82 @@ These actions allow users to perform common Discord tasks without directly inter To use the `discord-agent`, you need to configure a Discord bot and set up the required environment variables. Follow these steps: -1. **Prerequisites**: +### Prerequisites + +- Install **Node.js** (version 20 or higher) and **pnpm** (version 10 or higher). +- Create a Discord account and have access to a Discord server (guild) that you manage. - - Install Node.js (version 20 or higher) and pnpm (version 10 or higher). - - Create a Discord account and have access to a Discord server (guild) that you manage. +### Create and Configure a Discord Bot -2. **Create and Configure a Discord Bot**: +1. Visit the Discord Developer Portal at `https://discord.com/developers/applications` and create a new application. +2. Navigate to the **Bot** tab, create a bot, and reset its token. Copy the token for later use. +3. Add the token to the `ts/.env` file in the project root: + ```env + DISCORD_BOT_TOKEN=your_token_here + ``` +4. Enable the **Message Content Intent** in the **Bot → Privileged Gateway Intents** section of the Developer Portal. +5. Use the **OAuth2 URL Generator** in the Developer Portal to create an invite link for your bot: + - Select the **bot** scope. + - Grant the bot permissions such as **Send Messages** and **Read Message History**. + - Add a redirect URL (e.g., `https://localhost`) in the **OAuth2 > General > Redirects** section before generating the invite link. + - Open the generated URL in your browser, select your server, and click **Authorize**. - - Visit the Discord Developer Portal at `https://discord.com/developers/applications` and create a new application. - - Navigate to the **Bot** tab, create a bot, and reset its token. Copy the token for later use. - - Add the token to the `ts/.env` file in the project root: - ```env - DISCORD_BOT_TOKEN=your_token_here - ``` - - Enable the **Message Content Intent** in the **Bot → Privileged Gateway Intents** section of the Developer Portal. - - Use the **OAuth2 URL Generator** in the Developer Portal to create an invite link for your bot: - - Select the **bot** scope. - - Grant the bot permissions such as **Send Messages** and **Read Message History**. - - Add a redirect URL (e.g., `https://localhost`) in the **OAuth2 > General > Redirects** section before generating the invite link. - - Open the generated URL in your browser, select your server, and click **Authorize**. +### Enable Developer Mode in Discord -3. **Enable Developer Mode in Discord**: +- In Discord, go to **Settings → Advanced → Developer Mode** and enable it. +- Right-click your server name in the sidebar and select **Copy Server ID** to obtain your server's ID. - - In Discord, go to **Settings → Advanced → Developer Mode** and enable it. - - Right-click your server name in the sidebar and select **Copy Server ID** to obtain your server's ID. +### First-Time Setup in TypeAgent -4. **First-Time Setup in TypeAgent**: - - Restart TypeAgent with the bot token configured. - - Set your Discord server ID using the following command: - ```bash - set my discord server to YOUR_SERVER_ID - ``` - - The agent will automatically fetch and cache all channels in the server. +- Restart TypeAgent with the bot token configured. +- Set your Discord server ID using the following command: + ```bash + set my discord server to YOUR_SERVER_ID + ``` +- The agent will automatically fetch and cache all channels in the server. ## Key Files -The `discord-agent` package is organized into several key files that define its functionality: +The `discord-agent` package is structured around key files that define its functionality: -- [src/discordActionHandler.ts](./src/discordActionHandler.ts): Contains the implementation of the action handlers, including logic for sending messages, creating invites, and managing channels. -- [src/discordManifest.json](./src/discordManifest.json): Defines the agent's metadata, including its description, schema, and default settings. -- [src/discordSchema.ts](./src/discordSchema.ts): Specifies the TypeScript types and structures for the actions supported by the agent. -- [src/discordSchema.agr](./src/discordSchema.agr): Contains the grammar definitions for parsing natural language commands into actionable intents. +- **[src/discordActionHandler.ts](./src/discordActionHandler.ts)**: Implements the logic for handling actions such as sending messages, creating invites, and managing channels. +- **[src/discordManifest.json](./src/discordManifest.json)**: Contains metadata about the agent, including its description, schema, and default settings. +- **[src/discordSchema.ts](./src/discordSchema.ts)**: Defines the TypeScript types and structures for the actions supported by the agent. +- **[src/discordSchema.agr](./src/discordSchema.agr)**: Specifies the grammar rules for parsing natural language commands into actionable intents. + +These files work together to enable the agent's functionality, from understanding user commands to executing the corresponding actions via the Discord API. ## How to extend To extend the `discord-agent` package, you can add new actions, update the grammar, and implement the corresponding handlers. Here’s how: -1. **Define New Actions**: +### 1. Define New Actions + +- Add the new action's type definition to [discordSchema.ts](./src/discordSchema.ts). +- Specify the action's parameters and expected behavior. - - Add the new action's type definition to [discordSchema.ts](./src/discordSchema.ts). - - Specify the action's parameters and expected behavior. +### 2. Update the Grammar -2. **Update the Grammar**: +- Modify [discordSchema.agr](./src/discordSchema.agr) to include new natural language patterns for the action. +- Ensure the grammar maps user commands to the new action and its parameters. - - Modify [discordSchema.agr](./src/discordSchema.agr) to include new natural language patterns for the action. - - Ensure the grammar maps user commands to the new action and its parameters. +### 3. Implement the Action Handler -3. **Implement the Action Handler**: +- Add the logic for the new action in [discordActionHandler.ts](./src/discordActionHandler.ts). +- Use the Discord REST API to perform the desired operation. - - Add the logic for the new action in [discordActionHandler.ts](./src/discordActionHandler.ts). - - Use the Discord REST API to perform the desired operation. +### 4. Test the New Functionality -4. **Test the New Functionality**: +- Write unit tests for the new action and its handler. +- Run the tests using: + ```bash + pnpm run test + ``` - - Write unit tests for the new action and its handler. - - Run the tests using: - ```bash - pnpm run test - ``` +### 5. Update Documentation -5. **Update Documentation**: - - Document the new action in the hand-written README or other relevant documentation files. - - Ensure the grammar and schema changes are reflected in the auto-generated documentation. +- Document the new action in the hand-written README or other relevant documentation files. +- Ensure the grammar and schema changes are reflected in the auto-generated documentation. By following these steps, you can enhance the `discord-agent` package to support additional Discord functionalities or customize it for specific use cases. @@ -125,7 +130,7 @@ By following these steps, you can enhance the `discord-agent` package to support ### Entry points - `./agent/manifest` → [./src/discordManifest.json](./src/discordManifest.json) -- `./agent/handlers` → `./dist/discordActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/discordActionHandler.js](./dist/discordActionHandler.js) ### Dependencies @@ -176,6 +181,6 @@ _8 actions implemented by this agent, parsed deterministically from `./src/disco --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter discord-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter discord-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/email/README.AUTOGEN.md b/ts/packages/agents/email/README.AUTOGEN.md index b0af7dc2f..d6573f88e 100644 --- a/ts/packages/agents/email/README.AUTOGEN.md +++ b/ts/packages/agents/email/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # email — AI-generated documentation @@ -12,18 +12,18 @@ ## Overview -The Email agent is a TypeAgent application agent designed to facilitate email management through the Microsoft Graph API. It enables users to perform common email operations such as sending, replying to, forwarding, and searching for emails. By leveraging structured prompting and large language models (LLMs), the agent interprets user requests and interacts with the Outlook mail client via the Microsoft Graph API. +The Email agent is a TypeAgent application agent that facilitates email management by integrating with the Microsoft Graph API. It enables users to perform common email operations such as sending, replying to, forwarding, and searching for emails. The agent leverages structured prompting and large language models (LLMs) to interpret user requests and execute email-related actions via the Outlook mail client. ## What it does -The Email agent provides functionality for managing email communication through the following actions: +The Email agent supports the following actions, which are implemented using the Microsoft Graph API: -- **`sendEmail`**: Allows users to send an email with a subject, body, and recipients. Additional options include CC, BCC, and attachments (file paths or URLs). The `genContent` parameter can be used to generate email content dynamically. -- **`forwardEmail`**: Enables forwarding an existing email to specified recipients, with an optional additional message. -- **`replyEmail`**: Facilitates replying to an existing email, with options to include a body, CC, BCC, and attachments. +- **`sendEmail`**: Sends an email with a subject, body, and recipients. Additional options include CC, BCC, and attachments (file paths or URLs). The `genContent` parameter allows dynamic content generation for the email body. +- **`forwardEmail`**: Forwards an existing email to specified recipients, with an optional additional message. +- **`replyEmail`**: Replies to an existing email, with options to include a body, CC, BCC, and attachments. - **`findEmail`**: Searches for an email message using a `messageRef` parameter, which identifies the email to be retrieved. -These actions are implemented using the Microsoft Graph API, which provides access to email accounts and related operations. The agent also integrates with the `graph-utils` library for email-specific functionality and supports advanced features like content generation using LLMs. +These actions are implemented in [emailActionHandler.ts](./src/emailActionHandler.ts) and rely on the `graph-utils` library for email-specific functionality. The agent also integrates with the `@microsoft/microsoft-graph-client` library to interact with the Microsoft Graph API. ## Setup @@ -100,7 +100,7 @@ By following this process, you can extend the Email agent to support additional ### Entry points - `./agent/manifest` → [./src/emailManifest.json](./src/emailManifest.json) -- `./agent/handlers` → `./dist/emailActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/emailActionHandler.js](./dist/emailActionHandler.js) ### Dependencies @@ -143,6 +143,6 @@ _4 actions implemented by this agent, parsed deterministically from `./src/email --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter email docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter email docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/github-cli/README.AUTOGEN.md b/ts/packages/agents/github-cli/README.AUTOGEN.md index 09bfa6224..ff46a1eff 100644 --- a/ts/packages/agents/github-cli/README.AUTOGEN.md +++ b/ts/packages/agents/github-cli/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # github-cli-agent — AI-generated documentation @@ -12,16 +12,16 @@ ## Overview -The `github-cli-agent` is a TypeAgent application agent designed to interact with GitHub through the GitHub CLI (`gh`). It enables users to perform a wide range of GitHub operations, such as managing repositories, issues, pull requests, workflows, and more, using natural language commands. By leveraging the GitHub CLI, this agent provides a streamlined interface for automating and simplifying common GitHub tasks. +The `github-cli-agent` is a TypeAgent application agent that integrates with the GitHub CLI (`gh`) to enable natural language-driven interactions with GitHub. It provides a wide range of actions for managing repositories, issues, pull requests, workflows, and other GitHub features. By leveraging the GitHub CLI, the agent simplifies complex GitHub operations into intuitive commands. ## What it does -The `github-cli-agent` supports 65 actions, categorized into several functional areas: +The `github-cli-agent` supports 65 actions, grouped into the following categories: -- **Authentication**: Actions like `authLogin`, `authLogout`, and `authStatus` allow users to manage their GitHub authentication, including logging in, logging out, and checking the current authentication status. -- **Issues**: Manage GitHub issues with actions such as `issueCreate`, `issueClose`, `issueDelete`, `issueReopen`, `issueList`, and `issueView`. These actions enable users to create, modify, delete, and view issues across repositories. -- **Pull Requests**: Handle pull request workflows with actions like `prCreate`, `prClose`, `prMerge`, `prList`, `prView`, and `prCheckout`. These actions cover the entire lifecycle of pull requests, from creation to merging. -- **Repositories**: Perform repository-related tasks with actions such as `repoCreate`, `repoClone`, `repoDelete`, `repoView`, `repoFork`, `starRepo`, and `searchRepos`. These actions allow users to create, clone, delete, and explore repositories. +- **Authentication**: Manage GitHub authentication with actions like `authLogin`, `authLogout`, and `authStatus`. These actions allow users to log in, log out, and check their authentication status. +- **Issues**: Create, close, reopen, delete, list, and view issues using actions such as `issueCreate`, `issueClose`, `issueReopen`, `issueDelete`, `issueList`, and `issueView`. +- **Pull Requests**: Handle pull request workflows with actions like `prCreate`, `prClose`, `prMerge`, `prList`, `prView`, and `prCheckout`. These actions support creating, managing, and reviewing pull requests. +- **Repositories**: Perform repository-related tasks with actions such as `repoCreate`, `repoClone`, `repoDelete`, `repoView`, `repoFork`, `starRepo`, and `searchRepos`. These actions allow users to manage repositories and retrieve specific information about them. - **Codespaces**: Manage GitHub Codespaces with actions like `codespaceCreate`, `codespaceDelete`, and `codespaceList`. - **Gists**: Create, delete, and list gists using `gistCreate`, `gistDelete`, and `gistList`. - **Projects**: Manage GitHub projects with actions like `projectCreate`, `projectDelete`, and `projectList`. @@ -31,25 +31,25 @@ The `github-cli-agent` supports 65 actions, categorized into several functional - **Workflows**: View workflow runs and details using `workflowView` and `runView`. - **Miscellaneous**: Includes actions like `cacheList`, `cacheDelete`, `configSet`, `sshKeyAdd`, and `statusPrint`. -The agent enhances the user experience by providing features such as clickable hyperlinks in listings, color-coded output for Dependabot alerts, and user-friendly confirmation messages for actions like creating or deleting resources. +The agent enhances usability by providing features such as clickable hyperlinks in listings, color-coded output for Dependabot alerts, and user-friendly confirmation messages for actions like creating or deleting resources. ## Setup -To use the `github-cli-agent`, follow these steps: +To use the `github-cli-agent`, you need to complete the following setup steps: 1. **Install the GitHub CLI**: Download and install the GitHub CLI from `https://cli.github.com/`. Ensure it is available in your system's `PATH`. -2. **Authenticate with GitHub**: Run `gh auth login` to authenticate with your GitHub account. +2. **Authenticate with GitHub**: Run `gh auth login` to authenticate with your GitHub account. This step is required for the agent to interact with GitHub on your behalf. The agent performs a `gh auth status` readiness check at startup and before executing any action. If the CLI is not installed or the user is not authenticated, the dispatcher will provide instructions to resolve the issue. After addressing any issues, run `@config agent refresh github-cli` to re-probe the environment. ## Key Files -The `github-cli-agent` is structured around several key files that define its functionality: +The `github-cli-agent` is organized into several key files that define its behavior and functionality: - **[github-cliManifest.json](./src/github-cliManifest.json)**: Contains metadata about the agent, including its description, emoji, and schema details. -- **[github-cliSchema.ts](./src/github-cliSchema.ts)**: Defines the types and parameters for all supported actions. -- **[github-cliSchema.agr](./src/github-cliSchema.agr)**: Maps natural language inputs to specific actions and their parameters. -- **[github-cliActionHandler.ts](./src/github-cliActionHandler.ts)**: Implements the logic for executing actions by invoking the GitHub CLI. +- **[github-cliSchema.ts](./src/github-cliSchema.ts)**: Defines the types and parameters for all supported actions. This file is the source of truth for the agent's capabilities. +- **[github-cliSchema.agr](./src/github-cliSchema.agr)**: Maps natural language inputs to specific actions and their parameters. This file is essential for interpreting user commands. +- **[github-cliActionHandler.ts](./src/github-cliActionHandler.ts)**: Implements the logic for executing actions by invoking the GitHub CLI. This is where the core functionality of the agent resides. - **[setup.ts](./src/setup.ts)**: Handles installation and readiness checks for the GitHub CLI, including platform-specific setup logic. These files work together to define the agent's capabilities, interpret user inputs, and execute the corresponding GitHub CLI commands. @@ -156,6 +156,6 @@ _65 actions implemented by this agent, parsed deterministically from `./src/gith --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter github-cli-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter github-cli-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/ipconfig/README.AUTOGEN.md b/ts/packages/agents/ipconfig/README.AUTOGEN.md index e87ff7786..d06578c72 100644 --- a/ts/packages/agents/ipconfig/README.AUTOGEN.md +++ b/ts/packages/agents/ipconfig/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # ipconfig-agent — AI-generated documentation @@ -12,18 +12,18 @@ ## Overview -The `ipconfig-agent` is a TypeAgent application agent that provides a conversational interface to the Windows `ipconfig` command-line tool. It allows users to perform network configuration tasks such as managing IP addresses, DNS settings, and DHCP configurations using natural language commands. This agent simplifies the process of interacting with `ipconfig` by abstracting its command-line syntax into user-friendly actions. +The `ipconfig-agent` is a TypeAgent application agent designed to provide a conversational interface to the Windows `ipconfig` command-line tool. It enables users to perform various network configuration tasks, such as managing IP addresses, DNS settings, and DHCP configurations, through natural language commands. By abstracting the complexities of the `ipconfig` command-line syntax, this agent simplifies network management for users. ## What it does -The `ipconfig-agent` supports a wide range of actions that can be grouped into the following categories: +The `ipconfig-agent` supports a comprehensive set of actions that can be grouped into the following categories: ### Help and Information Display -- **`displayHelpMessage`**: Provides the help message for the `ipconfig` command. -- **`displayFullConfigurationInformation`**: Displays detailed network configuration information, including IP addresses, DNS settings, and adapter details. -- **`displayDNSResolverCacheContents`**: Shows the current contents of the DNS resolver cache. -- **`displayDHCPClassIDs`** and **`displayIPv6DHCPClassIDs`**: Display the DHCP class IDs for IPv4 and IPv6 adapters, respectively. +- **`displayHelpMessage`**: Displays the help message for the `ipconfig` command, providing an overview of its capabilities. +- **`displayFullConfigurationInformation`**: Shows detailed network configuration information, including IP addresses, DNS settings, and adapter details. +- **`displayDNSResolverCacheContents`**: Displays the current contents of the DNS resolver cache. +- **`displayDHCPClassIDs`** and **`displayIPv6DHCPClassIDs`**: Show the DHCP class IDs for IPv4 and IPv6 adapters, respectively. ### IP Address Management @@ -32,11 +32,11 @@ The `ipconfig-agent` supports a wide range of actions that can be grouped into t ### DNS and DHCP Management -- **`purgeDNSResolverCache`**: Clears the DNS resolver cache. -- **`refreshDHCPLeasesAndReRegisterDNSNames`**: Refreshes all DHCP leases and re-registers DNS names. -- **`modifyDHCPClassID`** and **`modifyIPv6DHCPClassID`**: Modify the DHCP class ID for IPv4 and IPv6 adapters, respectively. +- **`purgeDNSResolverCache`**: Clears the DNS resolver cache to resolve potential DNS-related issues. +- **`refreshDHCPLeasesAndReRegisterDNSNames`**: Refreshes all DHCP leases and re-registers DNS names to ensure up-to-date network configurations. +- **`modifyDHCPClassID`** and **`modifyIPv6DHCPClassID`**: Modify the DHCP class ID for IPv4 and IPv6 adapters, respectively, allowing for advanced network configuration. -These actions enable users to manage their network settings effectively, whether for troubleshooting, updating configurations, or managing DNS and DHCP settings. +These actions enable users to perform a wide range of network management tasks, from troubleshooting connectivity issues to updating configurations and managing DNS and DHCP settings. ## Setup @@ -48,15 +48,15 @@ The `ipconfig-agent` requires minimal setup. Follow these steps to get started: pnpm install ``` -No additional environment variables, API keys, or external accounts are required. +No additional environment variables, API keys, or external accounts are required for this package. ## Key Files -The functionality of the `ipconfig-agent` is implemented across several key files: +The `ipconfig-agent` is implemented across several key files, each serving a specific purpose: - **[ipconfigActionHandler.ts](./src/ipconfigActionHandler.ts)**: - - Contains the core logic for handling actions. + - Implements the core logic for handling actions. - The `runCli` function executes the `ipconfig` command with the appropriate arguments, while the `buildArgs` function constructs the command-line arguments based on the action and its parameters. - **[ipconfigManifest.json](./src/ipconfigManifest.json)**: @@ -74,9 +74,11 @@ The functionality of the `ipconfig-agent` is implemented across several key file - **[tsconfig.json](./src/tsconfig.json)**: - Configures the TypeScript compiler for the project, including paths for source and output files. +These files collectively define the agent's behavior, from parsing user input to executing the corresponding `ipconfig` commands. + ## How to extend -To add new functionality to the `ipconfig-agent`, follow these steps: +To extend the `ipconfig-agent` with new functionality, follow these steps: 1. **Define a new action**: @@ -110,7 +112,7 @@ By following these steps, you can extend the `ipconfig-agent` to support additio ### Entry points - `./agent/manifest` → [./src/ipconfigManifest.json](./src/ipconfigManifest.json) -- `./agent/handlers` → `./dist/ipconfigActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/ipconfigActionHandler.js](./dist/ipconfigActionHandler.js) ### Dependencies @@ -159,6 +161,6 @@ _13 actions implemented by this agent, parsed deterministically from `./src/ipco --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter ipconfig-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter ipconfig-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/list/README.AUTOGEN.md b/ts/packages/agents/list/README.AUTOGEN.md index 439f836db..aaa38addf 100644 --- a/ts/packages/agents/list/README.AUTOGEN.md +++ b/ts/packages/agents/list/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # list-agent — AI-generated documentation @@ -16,14 +16,15 @@ The `list-agent` package is a TypeAgent application agent designed to manage lis ## What it does -The `list-agent` provides six key actions to manage lists effectively: +The `list-agent` supports a variety of actions to manage lists, enabling users to create, modify, and retrieve lists and their contents. The following actions are implemented: -- **`addItems`**: Adds one or more items to a specified list. If the list does not exist, it is created. This action requires the `items` (array of strings) and `listName` (string) parameters. -- **`removeItems`**: Removes one or more items from a specified list. This action requires the `items` (array of strings) and `listName` (string) parameters. -- **`createList`**: Creates a new list with the given name. This action requires the `listName` (string) parameter. -- **`getList`**: Retrieves the contents of a specified list. This action is useful for queries like "What's on my grocery list?" or "What are the contents of my to-do list?" It requires the `listName` (string) parameter. -- **`clearList`**: Clears all items from a specified list. This action requires the `listName` (string) parameter. -- **`startEditList`**: Initiates the editing of a specified list. This action requires the `listName` (string) parameter. +- **`addItems`**: Adds one or more items to a specified list. If the list does not exist, it is created. Parameters: `items` (array of strings) and `listName` (string). +- **`removeItems`**: Removes one or more items from a specified list. Parameters: `items` (array of strings) and `listName` (string). +- **`createList`**: Creates a new list with the given name. Parameter: `listName` (string). +- **`getList`**: Retrieves the contents of a specified list. Useful for queries like "What's on my grocery list?" or "What are the contents of my to-do list?" Parameter: `listName` (string). +- **`clearList`**: Clears all items from a specified list. Parameter: `listName` (string). +- **`listLists`**: Lists all existing lists. Useful for queries like "What lists do I have?" or "Show me my lists." +- **`startEditList`**: Initiates the editing of a specified list. Parameter: `listName` (string). These actions are defined in the [listSchema.ts](./src/listSchema.ts) file and implemented in the [listActionHandler.ts](./src/listActionHandler.ts) file. The agent uses schema definitions and grammar rules to interpret user input and map it to the appropriate actions. @@ -35,7 +36,7 @@ The `list-agent` package does not require any special setup beyond installing it pnpm install ``` -For further details, refer to the hand-written README. +For additional details, refer to the hand-written README. ## Key Files @@ -82,7 +83,7 @@ By following these steps, you can customize the `list-agent` package to support ### Entry points - `./agent/manifest` → [./src/listManifest.json](./src/listManifest.json) -- `./agent/handlers` → `./dist/listActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/listActionHandler.js](./dist/listActionHandler.js) ### Dependencies @@ -111,7 +112,7 @@ External: _None at runtime._ ### Actions -_6 actions implemented by this agent, parsed deterministically from `./src/listSchema.ts`. Sample utterances and parameter shapes are illustrative; consult the schema for the full signature._ +_7 actions implemented by this agent, parsed deterministically from `./src/listSchema.ts`. Sample utterances and parameter shapes are illustrative; consult the schema for the full signature._ | User says | Action | | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | @@ -120,10 +121,11 @@ _6 actions implemented by this agent, parsed deterministically from `./src/listS | _(no sample)_ | `createList` → `{ "listName": "…" }` | | _use this action to show the user what's on the list, for example, "What's on my grocery list?" or "what are the contents of my to do list?"_ | `getList` → `{ "listName": "…" }` | | _(no sample)_ | `clearList` → `{ "listName": "…" }` | +| _use this action to show the user which lists exist, for example, "what lists are there?", "show me my lists", "what lists do I have?"_ | `listLists` | | _(no sample)_ | `startEditList` → `{ "listName": "…" }` | --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter list-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter list-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/onboarding/README.AUTOGEN.md b/ts/packages/agents/onboarding/README.AUTOGEN.md index 3f70b8a7b..5684c3cb9 100644 --- a/ts/packages/agents/onboarding/README.AUTOGEN.md +++ b/ts/packages/agents/onboarding/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # onboarding-agent — AI-generated documentation @@ -12,13 +12,13 @@ ## Overview -The `onboarding-agent` is a TypeAgent application agent that automates the process of integrating new applications and APIs into the TypeAgent ecosystem. It organizes the onboarding workflow into seven distinct phases, each managed by a sub-agent. This agent is particularly effective when used with AI orchestrators like Claude Code or GitHub Copilot, which can drive the onboarding process via TypeAgent's MCP interface. +The `onboarding-agent` is a TypeAgent application agent designed to automate the process of integrating new applications and APIs into the TypeAgent ecosystem. It organizes the onboarding workflow into seven distinct phases, each managed by a sub-agent. This agent is particularly effective when used with AI orchestrators like Claude Code or GitHub Copilot, which can drive the onboarding process via TypeAgent's MCP interface. ## What it does The `onboarding-agent` provides a structured, multi-phase approach to integrating new applications or APIs into the TypeAgent ecosystem. It supports the following actions: -- **`startOnboarding`**: Begins the onboarding process for a new integration by specifying the integration name and optional details such as a description or API type. +- **`startOnboarding`**: Initiates the onboarding process for a new integration by specifying the integration name and optional details such as a description or API type. - **`resumeOnboarding`**: Resumes an in-progress onboarding process, optionally starting from a specific phase such as discovery, schema generation, or testing. - **`getOnboardingStatus`**: Retrieves the current status of an ongoing integration, including the current phase and progress. - **`listIntegrations`**: Lists all integrations, optionally filtered by their status (e.g., in-progress or complete). @@ -100,8 +100,8 @@ By following these steps, you can enhance the `onboarding-agent` to support addi ### Entry points - `./agent/manifest` → [./src/onboardingManifest.json](./src/onboardingManifest.json) -- `./agent/handlers` → `./dist/onboardingActionHandler.js` _(not found on disk)_ -- `./uiCapture` → `./dist/uiCapture/index.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/onboardingActionHandler.js](./dist/onboardingActionHandler.js) +- `./uiCapture` → [./dist/uiCapture/index.js](./dist/uiCapture/index.js) ### Dependencies @@ -164,6 +164,6 @@ _4 actions implemented by this agent, parsed deterministically from `./src/onboa --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter onboarding-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter onboarding-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/osNotifications/README.AUTOGEN.md b/ts/packages/agents/osNotifications/README.AUTOGEN.md index 08ffa31b7..ba5d07368 100644 --- a/ts/packages/agents/osNotifications/README.AUTOGEN.md +++ b/ts/packages/agents/osNotifications/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # os-notifications-agent — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `os-notifications-agent` package integrates operating system notifications from Windows Action Center and Linux freedesktop into the TypeAgent chat system. These notifications are displayed as ephemeral toasts or inline messages, providing real-time updates to users. Notifications are not persisted and are removed from the chat interface when dismissed at the OS level. Note that macOS is not supported. +The `os-notifications-agent` package integrates operating system notifications from Windows Action Center and Linux freedesktop into the TypeAgent chat system. These notifications are displayed as ephemeral toasts or inline messages, providing real-time updates to users. Notifications are not persisted and are removed from the chat interface when dismissed at the OS level. macOS is not supported. ## What it does -The `os-notifications-agent` captures and processes OS-level notifications, forwarding them to connected TypeAgent chat clients. Notifications are ephemeral and are not stored in the `displayLog.json`. The agent supports the following key actions: +The `os-notifications-agent` captures and processes OS-level notifications and forwards them to connected TypeAgent chat clients. Notifications are ephemeral and are not stored in the `displayLog.json`. The agent supports the following key actions: - **`syncOsNotifications`**: Re-emits currently-present notifications through the agent pipeline. This action is Windows-only, as Linux's freedesktop specification does not support querying existing notifications. If the required Windows helper executable is not available, the agent will prompt the user to build it. - **`testOsNotification`**: Generates a synthetic notification and processes it through the agent pipeline. This is useful for testing the agent's functionality without relying on actual OS notifications. @@ -104,7 +104,7 @@ By following these steps, you can enhance the `os-notifications-agent` to suppor ### Entry points - `./agent/manifest` → [./src/osNotificationsManifest.json](./src/osNotificationsManifest.json) -- `./agent/handlers` → `./dist/osNotificationsActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/osNotificationsActionHandler.js](./dist/osNotificationsActionHandler.js) ### Dependencies @@ -133,6 +133,6 @@ External: `dbus-next`, `debug` --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter os-notifications-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter os-notifications-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/screencapture/README.AUTOGEN.md b/ts/packages/agents/screencapture/README.AUTOGEN.md index fd16e131c..c959abfcc 100644 --- a/ts/packages/agents/screencapture/README.AUTOGEN.md +++ b/ts/packages/agents/screencapture/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # screencapture-agent — AI-generated documentation @@ -12,14 +12,14 @@ ## Overview -The `screencapture-agent` is a TypeAgent application agent designed for screen capture and recording tasks. It supports taking screenshots and recording the screen on Windows and Linux (X11), with the ability to target specific programs or windows by name. This agent integrates with the TypeAgent ecosystem, enabling users to perform screen capture actions through natural language commands. +The `screencapture-agent` is a TypeAgent application agent designed for screen capture and recording tasks. It enables users to take screenshots and record their screens on Windows and Linux (X11) systems. The agent supports capturing the entire screen or targeting specific application windows by name, and it integrates with the TypeAgent ecosystem to allow natural language commands for these operations. ## What it does -The `screencapture-agent` provides the following key functionalities: +The `screencapture-agent` provides a set of actions for screen capture and recording: - **`takeScreenshot`**: Captures a screenshot of the entire screen or a specific window. If a `target` parameter is provided, the agent attempts to match the name to a visible window (e.g., "Chrome" or "Visual Studio"). -- **`startRecording`**: Initiates a screen recording of the entire screen or a specific window. Only one recording can be active at a time. +- **`startRecording`**: Starts a screen recording of the entire screen or a specific window. Only one recording can be active at a time. - **`stopRecording`**: Stops the currently active screen recording. - **`listWindows`**: Lists all currently visible windows, allowing users to identify and target them by name. - **`recording`**: Tracks the activity of an ongoing recording, including details such as the target, output path, and start time. @@ -113,7 +113,7 @@ By following these steps, you can enhance the `screencapture-agent` to support a ### Entry points - `./agent/manifest` → [./src/screencaptureManifest.json](./src/screencaptureManifest.json) -- `./agent/handlers` → `./dist/screencaptureActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/screencaptureActionHandler.js](./dist/screencaptureActionHandler.js) ### Dependencies @@ -163,6 +163,6 @@ _5 actions implemented by this agent, parsed deterministically from `./src/scree --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter screencapture-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter screencapture-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/taskflow/README.AUTOGEN.md b/ts/packages/agents/taskflow/README.AUTOGEN.md index a76ccfc74..072afac0f 100644 --- a/ts/packages/agents/taskflow/README.AUTOGEN.md +++ b/ts/packages/agents/taskflow/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # taskflow-typeagent — AI-generated documentation @@ -12,30 +12,30 @@ ## Overview -The `taskflow-typeagent` package is a TypeAgent application agent that enables users to define, manage, and execute task flows. Task flows are user-taught macros that automate sequences of TypeAgent actions, allowing for reusable workflows and simplifying complex tasks. This package is a key component of the TypeAgent ecosystem, providing a framework for creating and executing custom workflows. +The `taskflow-typeagent` package is a TypeAgent application agent that allows users to define, manage, and execute task flows. Task flows are user-taught macros that automate sequences of TypeAgent actions, enabling reusable workflows and simplifying complex tasks. This package is an integral part of the TypeAgent ecosystem, providing a framework for creating and executing custom workflows. ## What it does -The `taskflow-typeagent` package provides functionality for creating, listing, and deleting task flows. These task flows are defined by users and can be executed programmatically or through natural language commands. The package supports the following key actions: +The `taskflow-typeagent` package provides tools for defining, managing, and executing task flows. These task flows are user-defined sequences of actions that can be executed programmatically or triggered through natural language commands. The package supports the following key actions: -- `listTaskFlows`: Retrieves a list of all registered task flows, allowing users to view available workflows. -- `deleteTaskFlow`: Removes a specified task flow by name, enabling users to manage and clean up their task flow library. +- `listTaskFlows`: Retrieves a list of all registered task flows, allowing users to view and manage their available workflows. +- `deleteTaskFlow`: Removes a specified task flow by name, enabling users to clean up or update their task flow library. -In addition to these actions, the package includes tools for validating and executing task flows. It leverages natural language processing (NLP) to generate grammar patterns, enabling users to define task flows using intuitive, human-readable commands. A script execution environment is also provided, allowing for programmatic execution of task flows. +The package also includes functionality for validating and executing task flows. It uses natural language processing (NLP) to generate grammar patterns, allowing users to define task flows using intuitive, human-readable commands. Additionally, it provides a script execution environment for programmatic task flow execution. -The package integrates with other components in the TypeAgent ecosystem, such as `@typeagent/agent-flows` and `@typeagent/agent-sdk`, to provide a cohesive automation framework. +The `taskflow-typeagent` package integrates with other components in the TypeAgent ecosystem, such as `@typeagent/agent-flows` and `@typeagent/agent-sdk`, to provide a cohesive and extensible automation framework. ## Setup To use the `taskflow-typeagent` package, you need to configure the following environment variable: -- `TASKFLOW_STORE_PATH`: Specifies the directory where task flow definitions are stored. Ensure this path is accessible and writable by the application. +- `TASKFLOW_STORE_PATH`: This variable specifies the directory where task flow definitions are stored. Ensure that the specified path is accessible and writable by the application. -For additional setup details, such as configuring integrations or external services, refer to the hand-written README. +For further details on setup, including any additional configuration or integration steps, refer to the hand-written README. ## Key Files -The `taskflow-typeagent` package is organized into several key files, each serving a specific purpose: +The `taskflow-typeagent` package is organized into several key files, each with a specific role in enabling task flow functionality: - **Schema and Grammar**: @@ -44,7 +44,7 @@ The `taskflow-typeagent` package is organized into several key files, each servi - **Action Handlers**: - - [actionHandler.mts](./src/actionHandler.mts): Contains the logic for executing task flow actions, managing the task flow store, and handling user-taught macros. + - [actionHandler.mts](./src/actionHandler.mts): Implements the logic for executing task flow actions, managing the task flow store, and handling user-taught macros. - **Script Management**: @@ -92,8 +92,8 @@ By following these steps, you can expand the capabilities of the `taskflow-typea ### Entry points - `./agent/manifest` → [./manifest.json](./manifest.json) -- `./agent/handlers` → `./dist/actionHandler.mjs` _(not found on disk)_ -- `./recipe` → `./dist/types/recipe.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/actionHandler.mjs](./dist/actionHandler.mjs) +- `./recipe` → [./dist/types/recipe.js](./dist/types/recipe.js) ### Dependencies @@ -130,6 +130,6 @@ External: `@anthropic-ai/claude-agent-sdk`, `debug`, `typescript` --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter taskflow-typeagent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter taskflow-typeagent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/weather/README.AUTOGEN.md b/ts/packages/agents/weather/README.AUTOGEN.md index ac3a4adb9..e3b75f8a3 100644 --- a/ts/packages/agents/weather/README.AUTOGEN.md +++ b/ts/packages/agents/weather/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # weather-agent — AI-generated documentation @@ -12,64 +12,70 @@ ## Overview -The `weather-agent` package is a TypeAgent application agent that provides weather-related information. It supports retrieving current weather conditions, forecasts, and alerts for specified locations. This agent integrates with the broader TypeAgent ecosystem, enabling users to query weather data through structured actions. +The `weather-agent` package is a TypeAgent application agent designed to provide weather-related information. It enables users to query current weather conditions, forecasts, and alerts for specific locations. This agent integrates with the TypeAgent ecosystem and interacts with external weather APIs to deliver accurate and timely weather data. ## What it does -The `weather-agent` implements three primary actions to handle weather-related queries: +The `weather-agent` supports three key actions, each tailored to address specific weather-related queries: -- **`getCurrentConditions`**: Fetches the current weather conditions for a given location. Users can optionally specify the temperature units as `"celsius"` or `"fahrenheit"`. -- **`getForecast`**: Provides a weather forecast for a specified location, supporting up to 7 days. Users can also specify the temperature units and the number of days for the forecast. -- **`getAlerts`**: Retrieves weather alerts for a specific location, such as severe weather warnings or advisories. +- **`getCurrentConditions`**: Retrieves the current weather conditions for a specified location. Users can optionally specify the temperature units as `"celsius"` or `"fahrenheit"`. +- **`getForecast`**: Provides a weather forecast for a given location, supporting up to 7 days. Users can specify the number of days for the forecast and the temperature units. +- **`getAlerts`**: Fetches weather alerts for a specific location, such as severe weather warnings or advisories. -These actions allow the agent to respond to user queries about real-time weather conditions, upcoming forecasts, and potential weather hazards. The agent is designed to work with external weather APIs to fetch accurate and up-to-date data. +These actions allow the agent to respond to user queries about real-time weather updates, future weather predictions, and potential weather hazards. The agent relies on external weather APIs to fetch the required data and processes it to provide structured responses. ## Setup -To use the `weather-agent`, you need access to a weather API service. Follow these steps to set up the package: +To set up the `weather-agent`, follow these steps: -1. **Obtain an API key**: Register with a weather data provider (e.g., OpenWeatherMap, WeatherAPI) to obtain an API key. -2. **Set environment variables**: Configure the API key as an environment variable. The specific variable name and setup instructions are detailed in the hand-written README. -3. **Install dependencies**: Run `pnpm install` in the package directory to install all required dependencies. +1. **Obtain an API key**: Register with a weather data provider (e.g., OpenWeatherMap or WeatherAPI) to get an API key. This key is required to access the weather data. +2. **Set environment variables**: Add the API key to your environment variables. Refer to the hand-written README for the exact variable name and additional setup details. +3. **Install dependencies**: Run the following command in the package directory to install the required dependencies: + ```bash + pnpm install + ``` -Ensure that the API key is valid and that the environment variable is correctly set before running the agent. +Ensure that the API key is valid and the environment variable is correctly configured before running the agent. ## Key Files -The `weather-agent` package is organized into several key files, each serving a specific purpose: +The `weather-agent` package is structured around several key files that define its functionality: -- **[weatherManifest.json](./src/weatherManifest.json)**: Defines the agent's metadata, including its description, schema, and grammar files. -- **[weatherSchema.ts](./src/weatherSchema.ts)**: Specifies the action schema, including the types and parameters for each action (`getCurrentConditions`, `getForecast`, and `getAlerts`). -- **[weatherSchema.agr](./src/weatherSchema.agr)**: Contains the action grammar, defining the patterns and rules for parsing user queries into structured actions. -- **[weatherActionHandler.ts](./src/weatherActionHandler.ts)**: Implements the logic for handling each action. This file includes functions to process user requests and interact with the weather API. +- **[weatherManifest.json](./src/weatherManifest.json)**: Contains metadata about the agent, including its description, schema, and grammar files. +- **[weatherSchema.ts](./src/weatherSchema.ts)**: Defines the action schema, specifying the types and parameters for the supported actions: `getCurrentConditions`, `getForecast`, and `getAlerts`. +- **[weatherSchema.agr](./src/weatherSchema.agr)**: Provides the action grammar, which maps user queries to structured actions using defined patterns and rules. +- **[weatherActionHandler.ts](./src/weatherActionHandler.ts)**: Implements the logic for handling each action. This file processes user requests and interacts with the weather API to fetch the required data. - **[testWeather.ts](./src/testWeather.ts)**: A manual test script for verifying the integration with the weather API. It includes sample queries for geocoding and fetching weather data. -These files collectively define the agent's capabilities and provide a foundation for extending its functionality. +These files collectively define the agent's capabilities and serve as the foundation for its operation and extensibility. ## How to extend -To extend the `weather-agent` package, follow these steps: +To add new features or actions to the `weather-agent`, follow these steps: 1. **Define new actions**: - - Add new action types to [weatherSchema.ts](./src/weatherSchema.ts). Define the action name and its parameters. - - For example, to add an action for retrieving historical weather data, define a new type `GetHistoricalWeatherAction` with appropriate parameters. + - Extend the action schema in [weatherSchema.ts](./src/weatherSchema.ts) by adding a new action type and its parameters. For example, to add an action for retrieving historical weather data, define a new type `GetHistoricalWeatherAction` with fields like `location` and `date`. 2. **Update the grammar**: - - Modify [weatherSchema.agr](./src/weatherSchema.agr) to include new patterns and rules for the new actions. - - For example, add a rule like ` = ? $(location:) $(date:) -> { actionName: "getHistoricalWeather", parameters: { location, date } };`. + - Modify [weatherSchema.agr](./src/weatherSchema.agr) to include new grammar rules for the new action. For instance, you can add a rule like: + ```text + = ? $(location:) $(date:) -> { actionName: "getHistoricalWeather", parameters: { location, date } }; + ``` 3. **Implement the handler**: - - Add the logic for the new actions in [weatherActionHandler.ts](./src/weatherActionHandler.ts). Extend the `executeWeatherAction` function to handle the new action. - - For example, create a function `handleGetHistoricalWeather` that interacts with the weather API to fetch historical data. + - Extend the `executeWeatherAction` function in [weatherActionHandler.ts](./src/weatherActionHandler.ts) to handle the new action. For example, create a function `handleGetHistoricalWeather` that interacts with the weather API to fetch historical data. 4. **Test the new functionality**: - - Update [testWeather.ts](./src/testWeather.ts) to include test cases for the new actions. - - Run the test script to verify that the new actions work as expected. + - Add test cases for the new action in [testWeather.ts](./src/testWeather.ts). Use sample queries to verify the new functionality. + - Run the test script using the following command: + ```bash + node --loader ts-node/esm src/testWeather.ts + ``` -By following these steps, you can expand the `weather-agent` to support additional weather-related features, such as historical data, air quality information, or advanced weather analytics. +By following these steps, you can enhance the `weather-agent` to support additional weather-related features, such as historical weather data, air quality indices, or other specialized weather services. ## Reference @@ -78,7 +84,7 @@ By following these steps, you can expand the `weather-agent` to support addition ### Entry points - `./agent/manifest` → [./src/weatherManifest.json](./src/weatherManifest.json) -- `./agent/handlers` → `./dist/weatherActionHandler.js` _(not found on disk)_ +- `./agent/handlers` → [./dist/weatherActionHandler.js](./dist/weatherActionHandler.js) ### Dependencies @@ -118,6 +124,6 @@ _3 actions implemented by this agent, parsed deterministically from `./src/weath --- -_Auto-generated against commit `44b34a9ac8794b6f90489ff7e55fe57283c34960` on `2026-07-13T09:04:14.089Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter weather-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter weather-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/chat-ui/README.AUTOGEN.md b/ts/packages/chat-ui/README.AUTOGEN.md index e9780585d..8fc9fdf0e 100644 --- a/ts/packages/chat-ui/README.AUTOGEN.md +++ b/ts/packages/chat-ui/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # chat-ui — AI-generated documentation @@ -12,20 +12,20 @@ ## Overview -The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to be used across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package supports user and agent interactions, streaming updates, chat history management, command completions, feedback collection, and connection status indicators. Its platform-agnostic design ensures consistent functionality and appearance across different environments. +The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to be used across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package enables consistent rendering and interaction for chat interfaces, supporting features like user and agent messages, streaming updates, chat history replay, command completions, feedback collection, and connection status indicators. ## What it does -The `chat-ui` package offers the following key features: +The `chat-ui` package offers a set of components and utilities to build and manage chat interfaces. Key features include: -- **ChatPanel**: The core component for rendering the chat interface. It supports: +- **ChatPanel**: The primary component for rendering the chat interface. It supports: - - Adding user and agent messages with `addAgentMessage`. - - Updating display metadata using `setDisplayInfo`. + - Adding user and agent messages using `addAgentMessage`. + - Updating display metadata with `setDisplayInfo`. - Replaying historical chat entries via `replayHistory`. - Streaming updates for dynamic content display. -- **FeedbackWidget**: A component for collecting user feedback on chat interactions. It supports thumbs-up/thumbs-down ratings, comments, and contextual information. +- **FeedbackWidget**: A component for collecting user feedback on chat interactions. It supports thumbs-up/thumbs-down ratings, comments, and contextual feedback. - **PartialCompletion**: Integrates with the `@typeagent/completion-ui` package to handle command completions, including input updates, acceptance, and dismissal. @@ -33,9 +33,9 @@ The `chat-ui` package offers the following key features: - **PlatformAdapter**: Abstracts platform-specific behaviors, such as handling link clicks and settings, to ensure compatibility across different environments. -- **Shared Styles**: Includes a CSS file (`styles/chat.css`) to ensure a consistent appearance for the chat UI across all host applications. +- **Shared Styles**: A CSS file (`styles/chat.css`) ensures a consistent appearance for the chat UI across all host applications. -The package is utilized by several TypeAgent components, such as the VS Code shell, the browser extension, and the Visual Studio extension webview. +The package is used by several TypeAgent components, including the VS Code shell, the browser extension, and the Visual Studio extension webview. ## Setup @@ -119,6 +119,6 @@ External: `ansi_up`, `dompurify`, `markdown-it` --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ diff --git a/ts/packages/cli/README.AUTOGEN.md b/ts/packages/cli/README.AUTOGEN.md index f0720705c..995f690df 100644 --- a/ts/packages/cli/README.AUTOGEN.md +++ b/ts/packages/cli/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-cli — AI-generated documentation @@ -12,46 +12,62 @@ ## Overview -The `agent-cli` package provides a command-line interface (CLI) for interacting with the TypeAgent system. It enables users to connect to the TypeAgent Dispatcher, send requests, and manage conversations with agents. The CLI supports various subcommands for different functionalities, including connecting to the dispatcher, running commands non-interactively, and replaying chat histories for testing purposes. +The `agent-cli` package is a command-line interface (CLI) for interacting with the TypeAgent system. It serves as a front-end to the TypeAgent Dispatcher, enabling users to send requests, manage conversations, and perform various operations with agents. The CLI supports multiple subcommands, including interactive and non-interactive modes, as well as tools for testing and managing data. ## What it does -The `agent-cli` package offers several subcommands to interact with the TypeAgent system. The primary subcommand is `connect`, which is the default when no subcommand is specified. This command allows users to interact with the TypeAgent Dispatcher in real-time, sending requests and receiving responses. Other subcommands include: - -- **`run`**: Execute dispatcher commands non-interactively. This includes sending requests, translating them, or generating explanations. -- **`replay`**: Replay chat histories for regression testing or generating test files. -- **`conversations`**: Manage conversations on the agent server, including creating, deleting, listing, and renaming conversations. -- **`data`**: Manage explanation test data, such as adding new data or comparing differences between datasets. - -These commands provide a comprehensive interface for interacting with the TypeAgent system, enabling users to perform actions, translate requests, and manage conversations effectively. +The `agent-cli` package provides several subcommands to interact with the TypeAgent system: + +- **`connect`**: The default subcommand, used for real-time interaction with the TypeAgent Dispatcher. Users can send requests, receive responses, and manage conversations interactively. +- **`run`**: Executes dispatcher commands non-interactively. This includes: + - `request`: Sends a request to the dispatcher without confirmation. + - `translate`: Translates a user request into an action. + - `explain`: Generates an explanation for a specific request-to-action mapping. +- **`replay`**: Replays chat histories for regression testing or generating test files. Supports options for translation-only mode and test file generation. +- **`conversations`**: Manages conversations on the agent server. Subcommands include: + - `create`: Creates a new conversation. + - `delete`: Deletes an existing conversation. + - `list`: Lists all conversations. + - `rename`: Renames a conversation. +- **`data`**: Manages explanation test data. Subcommands include: + - `add`: Adds new data to the explanation test dataset. + - `diff`: Compares differences between datasets. + +These commands provide a comprehensive interface for interacting with the TypeAgent system, enabling users to perform actions, manage conversations, and test functionalities effectively. ## Setup To set up and use the `agent-cli` package, follow these steps: -1. **Build the workspace**: Ensure the workspace root (repo `ts` directory) is set up and built. Run `pnpm setup` to create the global bin for `pnpm` if not already done. +1. **Build the workspace**: + + - Navigate to the workspace root (repo `ts` directory) and run `pnpm setup` to initialize the environment. + - Build the project using the appropriate commands in the workspace root. + 2. **Run the CLI**: + - From the workspace root, use `pnpm run cli` or `pnpm run cli:dev` to start the CLI. - Alternatively, navigate to the `agent-cli` package directory and run the CLI directly: - On Linux: `./bin/run.js` (or `./bin/dev.js` for development). - On Windows: `.\bin\run` (or `.\bin\dev` for development). + 3. **Optional global linking**: - Run `pnpm link --global` in the package directory to link the CLI globally. - Use `agent-cli` (or `agent-cli-dev` for the development version) to invoke the CLI globally. - To unlink, run `pnpm uninstall --global agent-cli`. -For more details on setup and usage, refer to the hand-written README. +For additional details, refer to the hand-written README. ## Key Files -The `agent-cli` package is organized into several key files and directories, each responsible for specific functionalities: +The `agent-cli` package is organized into several key files and directories: -- **`src/commands/`**: Contains the implementation of CLI subcommands. +- **`src/commands/`**: Contains the implementation of all CLI subcommands. - - **`connect.ts`**: Implements the `connect` subcommand, which allows users to interact with the TypeAgent Dispatcher in real-time. - - **`run/index.ts`**: Handles the `run` subcommand for executing dispatcher commands non-interactively. - - **`replay.ts`**: Manages the `replay` subcommand for replaying chat histories. - - **`conversations/`**: Includes commands for managing conversations: + - **`connect.ts`**: Implements the `connect` subcommand for real-time interaction with the TypeAgent Dispatcher. + - **`run/index.ts`**: Handles the `run` subcommand for non-interactive dispatcher commands. + - **`replay.ts`**: Implements the `replay` subcommand for replaying chat histories. + - **`conversations/`**: Contains commands for managing conversations: - `create.ts`: Create a new conversation. - `delete.ts`: Delete an existing conversation. - `list.ts`: List all conversations. @@ -60,9 +76,9 @@ The `agent-cli` package is organized into several key files and directories, eac - `add.ts`: Add new data to the explanation test dataset. - `diff.ts`: Compare differences between datasets. -- **Dependencies**: The package relies on several internal dependencies from the TypeAgent monorepo, such as: - - `@typeagent/action-schema`, `@typeagent/agent-sdk`, `@typeagent/agent-server-client`, and others for core functionality. - - External libraries like `@oclif/core` for CLI scaffolding and `chalk` for terminal output formatting. +- **Dependencies**: + - Internal dependencies include `@typeagent/action-schema`, `@typeagent/agent-sdk`, `@typeagent/agent-server-client`, and others for core functionality. + - External dependencies include `@oclif/core` for CLI scaffolding, `chalk` for terminal output formatting, and `dotenv` for environment variable management. ## How to extend @@ -71,7 +87,7 @@ To extend the `agent-cli` package, follow these steps: 1. **Identify the command to extend or create**: - Explore the `src/commands/` directory to locate existing commands. - - If creating a new command, decide on its purpose and structure. + - If creating a new command, determine its purpose and structure. 2. **Create a new command**: @@ -94,8 +110,6 @@ To extend the `agent-cli` package, follow these steps: For example, to add a command for exporting conversation logs, you might create a file `src/commands/conversations/export.ts` and implement logic to fetch and save logs from the agent server. -By following these steps, you can extend the `agent-cli` package to support additional functionalities and improve its utility. - ## Reference > ⚙️ **Auto-generated, no AI involvement.** Built deterministically from `package.json`, `src/`, and the workspace dependency graph at the commit recorded in the staleness footer at the end of this file. Hand edits to this file will be overwritten on the next run. @@ -131,6 +145,6 @@ External: `@oclif/core`, `@oclif/plugin-help`, `chalk`, `debug`, `dotenv`, `html --- -_Auto-generated against commit `366aaf867a7e8e5d130b6c87a365516bab725269` on `2026-07-07T09:05:05.703Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ diff --git a/ts/packages/commandExecutor/README.AUTOGEN.md b/ts/packages/commandExecutor/README.AUTOGEN.md index 54fb38033..3d593df12 100644 --- a/ts/packages/commandExecutor/README.AUTOGEN.md +++ b/ts/packages/commandExecutor/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # command-executor-mcp — AI-generated documentation @@ -12,19 +12,19 @@ ## Overview -The `command-executor-mcp` package is an MCP (Model Context Protocol) server that facilitates the execution of user commands such as playing music, managing lists, and working with calendars. It acts as a bridge between MCP clients (e.g., Claude Code) and the TypeAgent system, translating natural language commands into structured actions that the TypeAgent dispatcher can process. +The `command-executor-mcp` package is an MCP (Model Context Protocol) server designed to execute user commands such as playing music, managing lists, and working with calendars. It serves as a bridge between MCP clients (e.g., Claude Code) and the TypeAgent system, translating natural language commands into structured actions that the TypeAgent dispatcher can process. ## What it does -This package provides the following core functionalities: +The `command-executor-mcp` package provides the following key functionalities: -1. **Natural Language Command Execution**: Using the `execute_command` action, the server processes user commands like "play Bohemian Rhapsody by Queen" or "add milk to my shopping list" and forwards them to the TypeAgent dispatcher for execution. +1. **Natural Language Command Execution**: The `execute_command` action processes user commands like "play Bohemian Rhapsody by Queen" or "add milk to my shopping list" and forwards them to the TypeAgent dispatcher for execution. 2. **Schema Discovery**: The `discover_schemas` action allows clients to query the available capabilities of the TypeAgent system, such as weather information, email handling, or calendar management. -3. **Dynamic Schema Loading**: With the `load_schema` action, new schemas can be dynamically loaded at runtime, enabling the server to register and expose new agent actions without restarting. +3. **Dynamic Schema Loading**: The `load_schema` action enables dynamic loading of new schemas at runtime, allowing the server to register and expose new agent actions without requiring a restart. 4. **Direct Action Invocation**: The `typeagent_action` action provides a fallback mechanism for invoking structured actions that are not exposed as individual tools. 5. **Debugging and Connectivity**: The `ping` action is available for testing server connectivity and debugging purposes. -The server connects to the TypeAgent dispatcher via WebSocket and supports automatic reconnection, ensuring reliability even if the dispatcher becomes temporarily unavailable. +The server connects to the TypeAgent dispatcher via WebSocket and includes automatic reconnection capabilities to handle temporary unavailability of the dispatcher. ## Setup @@ -142,6 +142,6 @@ _3 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `366aaf867a7e8e5d130b6c87a365516bab725269` on `2026-07-07T09:05:05.703Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter command-executor-mcp docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter command-executor-mcp docs:verify-links` to spot-check._ diff --git a/ts/packages/copilot-plugin/README.AUTOGEN.md b/ts/packages/copilot-plugin/README.AUTOGEN.md index 4467761b4..25aaac20f 100644 --- a/ts/packages/copilot-plugin/README.AUTOGEN.md +++ b/ts/packages/copilot-plugin/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # @typeagent/copilot-plugin — AI-generated documentation @@ -12,19 +12,19 @@ ## Overview -The `@typeagent/copilot-plugin` package is a TypeAgent integration plugin for the GitHub Copilot CLI. It enables the routing of action requests (e.g., calendar, email, music, browser automation) to TypeAgent for handling before they are passed to the Copilot LLM. +The `@typeagent/copilot-plugin` package integrates TypeAgent with the GitHub Copilot CLI, enabling action requests such as scheduling, email, music playback, and browser automation to be routed to TypeAgent for handling before reaching the Copilot LLM. This plugin enhances the capabilities of the Copilot CLI by leveraging TypeAgent's action-handling features. ## What it does -This plugin acts as a bridge between the GitHub Copilot CLI and TypeAgent. It intercepts user inputs and determines whether they are action requests or general questions. Based on the input type, the plugin routes the request as follows: +The plugin intercepts user inputs in the Copilot CLI and determines whether they are action requests or general questions. Based on the input type, it routes the request as follows: -- **Action Requests**: These are routed to TypeAgent, which can handle them directly or via the MCP server. If TypeAgent recognizes the action, it processes the request and returns a response, bypassing the Copilot LLM. -- **General Questions**: These are passed through to the Copilot LLM for processing. +- **Action Requests**: Routed to TypeAgent for direct handling. If TypeAgent recognizes the action, it processes the request and returns a response, bypassing the Copilot LLM entirely. +- **General Questions**: Passed through to the Copilot LLM for processing. The plugin supports two integration modes: -1. **Direct Mode**: The plugin connects directly to TypeAgent over WebSocket. Recognized actions are handled by TypeAgent, and the response is returned directly to the user. This mode is faster and does not consume LLM tokens but does not support streaming output. -2. **MCP Mode**: The plugin modifies the prompt to instruct the LLM to call the `typeagent-processCommand` MCP tool. This mode allows for streaming output and LLM-formatted responses but is slower and consumes LLM tokens. +1. **Direct Mode**: Connects directly to TypeAgent over WebSocket. Recognized actions are handled by TypeAgent, and the response is returned directly to the user. This mode is faster and avoids consuming LLM tokens but does not support streaming output. +2. **MCP Mode**: Modifies the prompt to instruct the LLM to call the `typeagent-processCommand` MCP tool. This mode allows for streaming output and LLM-formatted responses but is slower and consumes LLM tokens. The plugin also provides hooks for various stages of user input processing, such as logging, debugging, and tracking interactions in TypeAgent history. @@ -131,7 +131,7 @@ To extend the functionality of the `@typeagent/copilot-plugin`, follow these ste ``` - Launch the Copilot CLI with the plugin to test your changes in a real-world scenario: ```powershell - copilot --plugin-dir D:\repos\TypeAgent\ts\packages\copilot-plugin + copilot --plugin-dir D:\repos\TypeAgent\ts\packages/copilot-plugin ``` 5. **Update Documentation**: @@ -175,6 +175,6 @@ _7 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `366aaf867a7e8e5d130b6c87a365516bab725269` on `2026-07-07T09:05:05.703Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/copilot-plugin docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/copilot-plugin docs:verify-links` to spot-check._ diff --git a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md index 5cae3e8ea..94afc0ec8 100644 --- a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md +++ b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-dispatcher — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The TypeAgent Dispatcher is a TypeScript library that serves as the central hub for processing user requests and coordinating interactions between various application agents in the TypeAgent ecosystem. It enables natural language interfaces by leveraging large language models (LLMs) to translate user inputs into structured actions. The Dispatcher is designed to be extensible and scalable, making it a critical component for building personal agents that can be integrated into different front ends, such as the TypeAgent Shell and CLI. +The TypeAgent Dispatcher is a TypeScript library that acts as the central hub for processing user requests and coordinating interactions between various application agents in the TypeAgent ecosystem. It enables natural language interfaces by leveraging large language models (LLMs) to translate user inputs into structured actions. The Dispatcher is designed to be extensible and scalable, making it a critical component for building personal agents that can be integrated into different front ends, such as the TypeAgent Shell and CLI. ## What it does -The Dispatcher is responsible for interpreting user inputs, which can be either natural language requests or system commands, and converting them into structured actions. These actions are defined by schemas provided by application agents. The Dispatcher also manages dynamic switching between agents to handle diverse tasks, ensuring a cohesive user experience. +The Dispatcher interprets user inputs, which can be either natural language requests or system commands, and converts them into structured actions. These actions are defined by schemas provided by application agents. The Dispatcher also dynamically switches between agents to handle diverse tasks, ensuring a unified user experience. ### Natural Language Requests @@ -236,6 +236,6 @@ _9 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `5c9fc637c2f0a96d75d41a3bc9054d06247d26d8` on `2026-07-15T08:50:41.068Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ diff --git a/ts/packages/shell/README.AUTOGEN.md b/ts/packages/shell/README.AUTOGEN.md index 86b7433f4..0b268f213 100644 --- a/ts/packages/shell/README.AUTOGEN.md +++ b/ts/packages/shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-shell — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, it integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. The shell supports both text and voice input, multi-conversation management, and local or remote operation modes. +The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, the shell integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. It supports both text and voice input, multi-conversation management, and can operate in either local or remote modes. ## What it does -The `agent-shell` package offers a range of features to enable interactive and conversational agent experiences: +The `agent-shell` package offers a variety of features to enable interactive and conversational agent experiences: ### Conversation Management @@ -172,6 +172,6 @@ _5 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `5c9fc637c2f0a96d75d41a3bc9054d06247d26d8` on `2026-07-15T08:50:41.068Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ diff --git a/ts/packages/vscode-chat/README.AUTOGEN.md b/ts/packages/vscode-chat/README.AUTOGEN.md index 8491e72b6..8c221acd7 100644 --- a/ts/packages/vscode-chat/README.AUTOGEN.md +++ b/ts/packages/vscode-chat/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # vscode-chat — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The `vscode-chat` package integrates TypeAgent as a third-party agent within Visual Studio Code's native Chat view. This extension uses the proposed `chatSessionsProvider` API to enable users to interact with TypeAgent sessions directly in VS Code. Conversations initiated through this extension, the Electron shell, the CLI, or `vscode-shell` are synchronized and appear as session items in the Chat sidebar. Prompts sent in these sessions are routed through a running TypeAgent agent server. +The `vscode-chat` package integrates TypeAgent as a third-party agent within Visual Studio Code's native Chat view. It leverages the proposed `chatSessionsProvider` API to allow users to interact with TypeAgent sessions directly in VS Code. Conversations initiated through this extension, the Electron shell, the CLI, or `vscode-shell` are synchronized and appear as session items in the Chat sidebar. Prompts sent in these sessions are routed through a running TypeAgent agent server. ## What it does @@ -123,6 +123,6 @@ External: `ansi_up`, `debug` --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-chat docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-chat docs:verify-links` to spot-check._ diff --git a/ts/packages/vscode-shell/README.AUTOGEN.md b/ts/packages/vscode-shell/README.AUTOGEN.md index 796403b63..d216618ae 100644 --- a/ts/packages/vscode-shell/README.AUTOGEN.md +++ b/ts/packages/vscode-shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # vscode-shell — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, providing a way to interact with TypeAgent conversations directly within the editor. It offers a side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. +The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, allowing users to interact with TypeAgent conversations directly within the editor. It provides a side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. ## What it does -The `vscode-shell` package enables a feature-rich chat experience within Visual Studio Code, tightly integrated with the TypeAgent ecosystem. Its main capabilities include: +The `vscode-shell` package offers a comprehensive chat interface within Visual Studio Code, designed to work with the TypeAgent ecosystem. Key features include: - **Chat Interface**: @@ -174,6 +174,6 @@ External: `ansi_up`, `debug`, `dompurify`, `isomorphic-ws`, `markdown-it`, `micr --- -_Auto-generated against commit `defc71271dc68db47e0d376be7aa9f755da0ac91` on `2026-07-14T08:47:00.044Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ From a009592ec9fe1afa2ea26a1aa094ffbf6a966a7f Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Fri, 17 Jul 2026 16:28:38 +0000 Subject: [PATCH 29/36] docs: regenerate README.AUTOGEN.md for changed packages --- ts/packages/cli/README.AUTOGEN.md | 14 ++++++------ .../dispatcher/dispatcher/README.AUTOGEN.md | 22 +++++++++---------- ts/packages/shell/README.AUTOGEN.md | 6 ++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ts/packages/cli/README.AUTOGEN.md b/ts/packages/cli/README.AUTOGEN.md index 5f9c43d30..2cb84be63 100644 --- a/ts/packages/cli/README.AUTOGEN.md +++ b/ts/packages/cli/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-cli — AI-generated documentation @@ -12,15 +12,15 @@ ## Overview -The `agent-cli` package is a command-line interface (CLI) for interacting with the TypeAgent system. It provides tools for connecting to the TypeAgent Dispatcher, managing conversations, running commands, and testing agent interactions. The CLI is designed to facilitate both interactive and non-interactive workflows, making it a versatile tool for developers working with the TypeAgent framework. +The `agent-cli` package is a command-line interface (CLI) for interacting with the TypeAgent system. It provides a suite of tools for managing conversations, testing agent interactions, and executing commands against the TypeAgent Dispatcher. The CLI is designed to support both interactive and non-interactive workflows, making it a key utility for developers working with the TypeAgent framework. ## What it does -The `agent-cli` package supports several subcommands, each tailored to specific use cases: +The `agent-cli` package offers several subcommands, each serving a specific purpose: -- **`connect`**: The default subcommand, used for real-time interaction with the TypeAgent Dispatcher. It allows users to send requests, receive responses, and manage conversations interactively. -- **`run`**: Executes dispatcher commands non-interactively. This includes sending requests, translating them, or generating explanations without user confirmation. -- **`replay`**: Replays chat histories for regression testing or generating test files. This is useful for validating agent behavior over time. +- **`connect`**: The default subcommand, used for real-time interaction with the TypeAgent Dispatcher. It allows users to send requests, receive responses, and manage conversations interactively. This mode is ideal for testing and debugging agent behavior. +- **`run`**: Executes dispatcher commands non-interactively. This includes sending requests, translating them, or generating explanations without requiring user confirmation. It is useful for scripting and automation. +- **`replay`**: Replays chat histories for regression testing or generating test files. This is particularly helpful for validating agent behavior over time or reproducing specific scenarios. - **`conversations`**: Provides tools for managing conversations on the agent server. Subcommands include: - `create`: Create a new conversation. - `delete`: Delete an existing conversation. @@ -144,6 +144,6 @@ External: `@oclif/core`, `@oclif/plugin-help`, `chalk`, `debug`, `dotenv`, `html --- -_Auto-generated against commit `2a8c6e65a1638c435219fd5b8688faeeec78d4c7` on `2026-07-16T01:20:16.260Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ +_Auto-generated against commit `35dcce8d8016eaa0731594b1cc83fb2b2d22302b` on `2026-07-17T16:28:11.775Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ diff --git a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md index 94afc0ec8..6406362ea 100644 --- a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md +++ b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-dispatcher — AI-generated documentation @@ -12,15 +12,15 @@ ## Overview -The TypeAgent Dispatcher is a TypeScript library that acts as the central hub for processing user requests and coordinating interactions between various application agents in the TypeAgent ecosystem. It enables natural language interfaces by leveraging large language models (LLMs) to translate user inputs into structured actions. The Dispatcher is designed to be extensible and scalable, making it a critical component for building personal agents that can be integrated into different front ends, such as the TypeAgent Shell and CLI. +The TypeAgent Dispatcher is a TypeScript library that serves as the central processing hub for user requests within the TypeAgent ecosystem. It leverages large language models (LLMs) to interpret natural language inputs and translate them into structured actions, which are then executed by application agents. The Dispatcher is designed to be extensible, scalable, and capable of integrating with various front-end interfaces, such as the TypeAgent Shell and CLI. It also supports conversational memory and structured retrieval-augmented generation (RAG) to enhance user interactions. ## What it does -The Dispatcher interprets user inputs, which can be either natural language requests or system commands, and converts them into structured actions. These actions are defined by schemas provided by application agents. The Dispatcher also dynamically switches between agents to handle diverse tasks, ensuring a unified user experience. +The Dispatcher facilitates communication between users and application agents by translating user inputs into actionable commands. It supports both natural language requests and system commands, enabling a wide range of functionalities. ### Natural Language Requests -The Dispatcher uses LLMs to process natural language inputs and translate them into structured actions. For example, in the CLI: +The Dispatcher uses LLMs to process natural language inputs and convert them into structured actions defined by application agent schemas. For example: ```bash [calendar]🤖> can you setup a meeting between 2-3PM @@ -29,7 +29,7 @@ Generating translation using GPT for 'can you setup a meeting between 2-3PM' Accept? (y/n) ``` -Other examples of natural language requests include: +Other examples include: - `play some music by Bach for me please` - `create a grocery list` @@ -37,7 +37,7 @@ Other examples of natural language requests include: ### System Commands -The Dispatcher supports system commands prefixed with `@`, allowing users to configure and interact with the system directly. These commands include: +The Dispatcher supports system commands prefixed with `@`, allowing users to configure and interact with the system directly. Key commands include: - **Agent Management**: Enable or disable specific agents or groups of agents. @@ -69,7 +69,7 @@ The Dispatcher translates these requests into structured payloads and forwards t ## Setup -To use the Dispatcher, you need to configure the following environment variables: +To configure and use the Dispatcher, the following environment variables must be set: - `CLAUDE_CUSTOM_PROMPT_FILE`: Path to a custom prompt file for Claude. - `CLAUDE_FORCE_REASONING`: Boolean flag to enforce reasoning with Claude. @@ -105,7 +105,6 @@ Schemas define the structure of actions and are located in [./src/context/dispat - [clarifyActionSchema.ts](./src/context/dispatcher/schema/clarifyActionSchema.ts): Defines schemas for clarification actions. - [dispatcherActionSchema.ts](./src/context/dispatcher/schema/dispatcherActionSchema.ts): Defines schemas for dispatcher-specific actions. - [lookupActionSchema.ts](./src/context/dispatcher/schema/lookupActionSchema.ts): Defines schemas for lookup actions. -- [reasoningActionSchema.ts](./src/context/dispatcher/schema/reasoningActionSchema.ts): Defines schemas for reasoning actions. ### Helpers @@ -164,6 +163,7 @@ For more details on the architecture and design of the Dispatcher, refer to the - `./helpers/completion` → [./dist/helpers/completion/index.js](./dist/helpers/completion/index.js) - `./internal` → [./dist/internal.js](./dist/internal.js) - `./explorer` → [./dist/explorer.js](./dist/explorer.js) +- `./contextSelector` → [./dist/context/contextSelector/index.js](./dist/context/contextSelector/index.js) ### Dependencies @@ -208,6 +208,7 @@ External: `@anthropic-ai/claude-agent-sdk`, `@azure/core-client`, `@azure/core-r ### Files of interest +- [./src/context/contextSelector/index.ts](./src/context/contextSelector/index.ts) - [./src/context/dispatcher/handlers/explainCommandHandler.ts](./src/context/dispatcher/handlers/explainCommandHandler.ts) - [./src/context/dispatcher/handlers/matchCommandHandler.ts](./src/context/dispatcher/handlers/matchCommandHandler.ts) - [./src/context/dispatcher/handlers/reasonCommandHandler.ts](./src/context/dispatcher/handlers/reasonCommandHandler.ts) @@ -217,8 +218,7 @@ External: `@anthropic-ai/claude-agent-sdk`, `@azure/core-client`, `@azure/core-r - [./src/context/dispatcher/schema/clarifyActionSchema.ts](./src/context/dispatcher/schema/clarifyActionSchema.ts) - [./src/context/dispatcher/schema/dispatcherActionSchema.ts](./src/context/dispatcher/schema/dispatcherActionSchema.ts) - [./src/context/dispatcher/schema/lookupActionSchema.ts](./src/context/dispatcher/schema/lookupActionSchema.ts) -- [./src/context/dispatcher/schema/reasoningActionSchema.ts](./src/context/dispatcher/schema/reasoningActionSchema.ts) -- _…and 209 more under `./src/`._ +- _…and 210 more under `./src/`._ ### Environment variables @@ -236,6 +236,6 @@ _9 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ +_Auto-generated against commit `35dcce8d8016eaa0731594b1cc83fb2b2d22302b` on `2026-07-17T16:28:11.775Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ diff --git a/ts/packages/shell/README.AUTOGEN.md b/ts/packages/shell/README.AUTOGEN.md index 0b268f213..e187e93e5 100644 --- a/ts/packages/shell/README.AUTOGEN.md +++ b/ts/packages/shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-shell — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, the shell integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. It supports both text and voice input, multi-conversation management, and can operate in either local or remote modes. +The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, the shell integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. It supports both text and voice input, multi-conversation management, and can operate in either local or remote modes. ## What it does @@ -172,6 +172,6 @@ _5 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `35dcce8d8016eaa0731594b1cc83fb2b2d22302b` on `2026-07-17T16:28:11.775Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ From 69ac114b2acb131b10bd29f3a76cdcf06bb30f5d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:53:16 +0000 Subject: [PATCH 30/36] Remove committed node_modules symlink --- node_modules | 1 - 1 file changed, 1 deletion(-) delete mode 120000 node_modules diff --git a/node_modules b/node_modules deleted file mode 120000 index acabd91b6..000000000 --- a/node_modules +++ /dev/null @@ -1 +0,0 @@ -/home/runner/work/TypeAgent/TypeAgent/ts/packages/vscode-chat/node_modules \ No newline at end of file From 4f4e5d439d91824762c8ceea4ccd348ecd85209f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Jul 2026 23:27:46 +0000 Subject: [PATCH 31/36] Fix list structured entity assertion in list-agent test --- ts/packages/agents/list/test/listStructured.spec.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ts/packages/agents/list/test/listStructured.spec.ts b/ts/packages/agents/list/test/listStructured.spec.ts index 1a3268900..2968705b9 100644 --- a/ts/packages/agents/list/test/listStructured.spec.ts +++ b/ts/packages/agents/list/test/listStructured.spec.ts @@ -55,11 +55,14 @@ describe("buildListResult", () => { expect(raw).toMatchObject({ name: "shopping", items }); }); - test("entities include the list and each item", () => { + test("entities include the list and carry items in facets", () => { const result = buildListResult("shopping", ["milk", "eggs"]); - const names = result.entities.map((e) => e.name); - expect(names).toEqual( - expect.arrayContaining(["shopping", "milk", "eggs"]), - ); + expect(result.entities).toEqual([ + { + name: "shopping", + type: ["list"], + facets: [{ name: "items", value: ["milk", "eggs"] }], + }, + ]); }); }); From 2c26e6d289e04ac54b08f8483b292693a8d4bb64 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 00:51:13 +0000 Subject: [PATCH 32/36] Sync pnpm lockfile after merge --- ts/pnpm-lock.yaml | 5724 +++++++++++++++++++++++---------------------- 1 file changed, 2871 insertions(+), 2853 deletions(-) diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 2c50e1188..9173ac920 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -173,7 +173,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.19)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2535,9 +2535,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2557,9 +2563,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3541,9 +3553,15 @@ importers: '@typeagent/action-schema-compiler': specifier: workspace:* version: link:../../actionSchemaCompiler + '@types/jest': + specifier: ^29.5.7 + version: 29.5.14 concurrently: specifier: ^9.1.2 version: 9.1.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -6401,64 +6419,64 @@ importers: packages: 7zip-bin@5.2.0: - resolution: {integrity: sha1-egMxRoTdZXK336ieaM4x1gKGhU0=} + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} '@acemir/cssom@0.9.31': - resolution: {integrity: sha1-vVM30pD7i+KsGDkfNzhrxTd4sLw=} + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} '@alcalzone/ansi-tokenize@0.1.3': - resolution: {integrity: sha1-n4mDlWEyWo6aDDI2C40X5ISJmT8=} + resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} engines: {node: '>=14.13.1'} '@antfu/install-pkg@1.1.0': - resolution: {integrity: sha1-ePoDa+GmCBtad6XPWfUMd1K2uiY=} + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.162': - resolution: {integrity: sha1-UZ0hvQIcY+n7qsSOIbo6uU1Lw7s=} + resolution: {integrity: sha512-hafbfEtDeYko1rYCgIBAQbYnFXzd/hHf3IcoaD8mmlCQOAQhKA8gT/RPdLuuzQHdOjEgqDGTNOU+IjwL+msYcw==} cpu: [arm64] os: [darwin] '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.162': - resolution: {integrity: sha1-Di4TOiXULnuKmWMbA779X2NeNMU=} + resolution: {integrity: sha512-BNg2Mh/4zc2Jsgpq7Mj8+UH8iJ9xzHS/0CmusBMik0H2Bn7Hra5R/f+csAfZOzSflQl4CNQdGOB2bir7d2n8Ww==} cpu: [x64] os: [darwin] '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.162': - resolution: {integrity: sha1-CqED3S+fXiQ9l6HMhSYpoWhse14=} + resolution: {integrity: sha512-Jr4cyfqzb5V2+p/1PynIfGROOI0JNtV3vBMAgckAdtDzpIFk4mV2T8936tsZzgZr04y40YH1HlQpnJDr92I+Fw==} cpu: [arm64] os: [linux] libc: [musl] '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.162': - resolution: {integrity: sha1-Tlduj+RMdbVhy1nGkU0mX9Vvj/g=} + resolution: {integrity: sha512-zCXYSimaXWQKZASfDJkoKXQr//toYDGIi16wKDh02Rqcr4mqFi9f5SBw/UCyimkGyYkNx3e+bmC+o/tFrLSTWw==} cpu: [arm64] os: [linux] libc: [glibc] '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.162': - resolution: {integrity: sha1-HFdhO+npa0m+rUVY0FEZAsJGmPY=} + resolution: {integrity: sha512-gW9Gpk7W3w3zGFHBDyY8uer/PE6T0pB+emN1aafZAomfseIH1ixJ6ya5Fw2cIS/K0/4oR2pvu4AprlbRBtr45Q==} cpu: [x64] os: [linux] libc: [musl] '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.162': - resolution: {integrity: sha1-5hP03u3nOsIF+bKqgQfsjnDe2KY=} + resolution: {integrity: sha512-FO2+zDuSTsZ/5MqxIwExLxG0c2auA5wO6iICwZdUOWtboC6yU2AEgp4mzF0jbe1UOP0J27uODFpvz7uRpWipkg==} cpu: [x64] os: [linux] libc: [glibc] '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.162': - resolution: {integrity: sha1-mt5LQqODj/hQfpxFVJcgxbPY0Sw=} + resolution: {integrity: sha512-TZQifFDBdhzt1u6wbbpQ2AZcRkhNVYx1iZVfydAbs3L7ZMK264LjRPytBK4n4S413Is1XyLHbGMvEUNA3N+Tng==} cpu: [arm64] os: [win32] '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.162': - resolution: {integrity: sha1-fIVcoQnYv9VFem7QejfO6c1/l78=} + resolution: {integrity: sha512-8ZYDgNxkGp47xwpcEZ6/qUXd4BByA8hTnNf4fJD6+P1wWi7Ofxc/d5jwXSYwajYvBvbbktQDthmGzjtoK3lXUw==} cpu: [x64] os: [win32] '@anthropic-ai/claude-agent-sdk@0.3.162': - resolution: {integrity: sha1-WvNe28L+TUqeqshn/ZXeFTLBgX0=} + resolution: {integrity: sha512-piAlpc1h6FUMCNU+bnYNNLX1lOgMlFnqZmIhn6Myv48MaNRaecFaZEuVLY+UxV0kjGiQFYHBLR4fk/rRwi2SAA==} engines: {node: '>=18.0.0'} peerDependencies: '@anthropic-ai/sdk': '>=0.93.0' @@ -6466,7 +6484,7 @@ packages: zod: ^4.0.0 '@anthropic-ai/sdk@0.93.0': - resolution: {integrity: sha1-zdbinqllLswW/88ENOje6Iuce3c=} + resolution: {integrity: sha512-q9vaSZQVFx6B/gPxetGYfLXSJD5v0sOmh0OpZDq7yCrTSA+Rscvrtyol7JJTW40wEpQB4U1B4JXzxQitbQ3CAA==} hasBin: true peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -6475,165 +6493,165 @@ packages: optional: true '@asamuzakjp/css-color@5.0.1': - resolution: {integrity: sha1-O5RiqbUvPGaAoJRaPQhRiBAXVQ8=} + resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha1-ObIJk2crEG982aOppGUhLofgv9E=} + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha1-rVVJMi3+nRU9S03W9/8q4jSwbiQ=} + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha1-z8wiVwlJyYxmic/L0taT02za4uE=} + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha1-TjSqt/QZMHghUJqYubCOhODBkX4=} + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha1-sO4tKCHThh8BfpZe87TLOOO2oPQ=} + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha1-FTiV7x26b5/OOK9VDg71iYjrZJ4=} + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha1-xP23c/2+2aZk/BqVck4gbPOGAEI=} + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} engines: {node: '>=16.0.0'} '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha1-oeOZrykmm+COaVEJqhXaCge1tfs=} + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} '@aws-crypto/util@5.2.0': - resolution: {integrity: sha1-cShMnP/nkn3a2seTwU8UiG04dto=} + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} '@aws-sdk/client-s3@3.1004.0': - resolution: {integrity: sha1-6M2yKwP5+E3ulrq0PKzEr2rccLI=} + resolution: {integrity: sha512-m0zNfpsona9jQdX1cHtHArOiuvSGZPsgp/KRZS2YjJhKah96G2UN3UNGZQ6aVjXIQjCY6UanCJo0uW9Xf2U41w==} engines: {node: '>=20.0.0'} '@aws-sdk/core@3.973.18': - resolution: {integrity: sha1-JicCtKSxI67CuPjY33u4JfCoCP0=} + resolution: {integrity: sha512-GUIlegfcK2LO1J2Y98sCJy63rQSiLiDOgVw7HiHPRqfI2vb3XozTVqemwO0VSGXp54ngCnAQz0Lf0YPCBINNxA==} engines: {node: '>=20.0.0'} '@aws-sdk/crc64-nvme@3.972.4': - resolution: {integrity: sha1-uZSUx2BkIxqmb3ClsQlWJOeYRwA=} + resolution: {integrity: sha512-HKZIZLbRyvzo/bXZU7Zmk6XqU+1C9DjI56xd02vwuDIxedxBEqP17t9ExhbP9QFeNq/a3l9GOcyirFXxmbDhmw==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-env@3.972.16': - resolution: {integrity: sha1-eyfw6//9l/O9LsoVG5ppP1bYpvw=} + resolution: {integrity: sha512-HrdtnadvTGAQUr18sPzGlE5El3ICphnH6SU7UQOMOWFgRKbTRNN8msTxM4emzguUso9CzaHU2xy5ctSrmK5YNA==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-http@3.972.18': - resolution: {integrity: sha1-PMJDny9o90iMJzNkZOjf+Ldj3xk=} + resolution: {integrity: sha512-NyB6smuZAixND5jZumkpkunQ0voc4Mwgkd+SZ6cvAzIB7gK8HV8Zd4rS8Kn5MmoGgusyNfVGG+RLoYc4yFiw+A==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-ini@3.972.17': - resolution: {integrity: sha1-R6z46gQUtpcwZ3PAK4sj5pVmXXg=} + resolution: {integrity: sha512-dFqh7nfX43B8dO1aPQHOcjC0SnCJ83H3F+1LoCh3X1P7E7N09I+0/taID0asU6GCddfDExqnEvQtDdkuMe5tKQ==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-login@3.972.17': - resolution: {integrity: sha1-99lERcCcGg7RhGlv/l4Uiz/EihM=} + resolution: {integrity: sha512-gf2E5b7LpKb+JX2oQsRIDxdRZjBFZt2olCGlWCdb3vBERbXIPgm2t1R5mEnwd4j0UEO/Tbg5zN2KJbHXttJqwA==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-node@3.972.18': - resolution: {integrity: sha1-vEO2i1JTEWJL8FZ9oOLkFhpRcKc=} + resolution: {integrity: sha512-ZDJa2gd1xiPg/nBDGhUlat02O8obaDEnICBAVS8qieZ0+nDfaB0Z3ec6gjZj27OqFTjnB/Q5a0GwQwb7rMVViw==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-process@3.972.16': - resolution: {integrity: sha1-L6hudz1VOxhK0CKjabLT2VD0kGk=} + resolution: {integrity: sha512-n89ibATwnLEg0ZdZmUds5bq8AfBAdoYEDpqP3uzPLaRuGelsKlIvCYSNNvfgGLi8NaHPNNhs1HjJZYbqkW9b+g==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-sso@3.972.17': - resolution: {integrity: sha1-44FEQEG2oxtjsMzjXkm87C20S+s=} + resolution: {integrity: sha512-wGtte+48xnhnhHMl/MsxzacBPs5A+7JJedjiP452IkHY7vsbYKcvQBqFye8LwdTJVeHtBHv+JFeTscnwepoWGg==} engines: {node: '>=20.0.0'} '@aws-sdk/credential-provider-web-identity@3.972.17': - resolution: {integrity: sha1-JgZat9ZpTQYpuhGozCYNaDO/vPk=} + resolution: {integrity: sha512-8aiVJh6fTdl8gcyL+sVNcNwTtWpmoFa1Sh7xlj6Z7L/cZ/tYMEBHq44wTYG8Kt0z/PpGNopD89nbj3FHl9QmTA==} engines: {node: '>=20.0.0'} '@aws-sdk/lib-storage@3.1004.0': - resolution: {integrity: sha1-GwGM2+FZPsM9NNRybexjpxVCpNU=} + resolution: {integrity: sha512-4W6UkeLVd/1FyXFvD9PHMw5FSOY7tsf6+I52jmgdZwDZ9gJcJBx6wF9IhaVp1AXhScZGY9HqHiqYt0qlrSHrGw==} engines: {node: '>=20.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.1004.0 '@aws-sdk/middleware-bucket-endpoint@3.972.7': - resolution: {integrity: sha1-lcA+lTw/jldOcf3/Gtecuh6yXoA=} + resolution: {integrity: sha512-goX+axlJ6PQlRnzE2bQisZ8wVrlm6dXJfBzMJhd8LhAIBan/w1Kl73fJnalM/S+18VnpzIHumyV6DtgmvqG5IA==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-expect-continue@3.972.7': - resolution: {integrity: sha1-+oleP3QCXeP02JTn8EIfSO6l778=} + resolution: {integrity: sha512-mvWqvm61bmZUKmmrtl2uWbokqpenY3Mc3Jf4nXB/Hse6gWxLPaCQThmhPBDzsPSV8/Odn8V6ovWt3pZ7vy4BFQ==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-flexible-checksums@3.973.4': - resolution: {integrity: sha1-d+Y4yI91vw8GBe2dN8vD7EiGjtY=} + resolution: {integrity: sha512-7CH2jcGmkvkHc5Buz9IGbdjq1729AAlgYJiAvGq7qhCHqYleCsriWdSnmsqWTwdAfXHMT+pkxX3w6v5tJNcSug==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-host-header@3.972.7': - resolution: {integrity: sha1-sYhJz4B+B0L9+E20HCJYdwvR5FI=} + resolution: {integrity: sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-location-constraint@3.972.7': - resolution: {integrity: sha1-WlSh19N+U75udIUl6zW7pxZPmcQ=} + resolution: {integrity: sha512-vdK1LJfffBp87Lj0Bw3WdK1rJk9OLDYdQpqoKgmpIZPe+4+HawZ6THTbvjhJt4C4MNnRrHTKHQjkwBiIpDBoig==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-logger@3.972.7': - resolution: {integrity: sha1-/+pOL/Hp2GBHxWTJgtZK3oAXeR4=} + resolution: {integrity: sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-recursion-detection@3.972.7': - resolution: {integrity: sha1-nWN27nJMm3fWUYxR0LLIsY8fcr8=} + resolution: {integrity: sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-sdk-s3@3.972.18': - resolution: {integrity: sha1-ZI2lvpS7AnF2Q9eOar9BIlYqW88=} + resolution: {integrity: sha512-5E3XxaElrdyk6ZJ0TjH7Qm6ios4b/qQCiLr6oQ8NK7e4Kn6JBTJCaYioQCQ65BpZ1+l1mK5wTAac2+pEz0Smpw==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-ssec@3.972.7': - resolution: {integrity: sha1-SfrHtQePjx4JNv8u7b5o7+f8BaQ=} + resolution: {integrity: sha512-G9clGVuAml7d8DYzY6DnRi7TIIDRvZ3YpqJPz/8wnWS5fYx/FNWNmkO6iJVlVkQg9BfeMzd+bVPtPJOvC4B+nQ==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-user-agent@3.972.19': - resolution: {integrity: sha1-WmyjeLigN2w6ioM5eY0XPQMw+E0=} + resolution: {integrity: sha512-Km90fcXt3W/iqujHzuM6IaDkYCj73gsYufcuWXApWdzoTy6KGk8fnchAjePMARU0xegIR3K4N3yIo1vy7OVe8A==} engines: {node: '>=20.0.0'} '@aws-sdk/nested-clients@3.996.7': - resolution: {integrity: sha1-x7Ey8b9h7cRL+OKBrJTYX3RiXXc=} + resolution: {integrity: sha512-MlGWA8uPaOs5AiTZ5JLM4uuWDm9EEAnm9cqwvqQIc6kEgel/8s1BaOWm9QgUcfc9K8qd7KkC3n43yDbeXOA2tg==} engines: {node: '>=20.0.0'} '@aws-sdk/region-config-resolver@3.972.7': - resolution: {integrity: sha1-Nv0Ouiv+3rV7hDs82CZvt2aKfoU=} + resolution: {integrity: sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA==} engines: {node: '>=20.0.0'} '@aws-sdk/signature-v4-multi-region@3.996.6': - resolution: {integrity: sha1-uBjXJPpBHyxb9K2WDtE9qeZVb98=} + resolution: {integrity: sha512-NnsOQsVmJXy4+IdPFUjRCWPn9qNH1TzS/f7MiWgXeoHs903tJpAWQWQtoFvLccyPoBgomKP9L89RRr2YsT/L0g==} engines: {node: '>=20.0.0'} '@aws-sdk/token-providers@3.1004.0': - resolution: {integrity: sha1-nsnOo22CyF+yTASRlMmQqY9mdfU=} + resolution: {integrity: sha512-j9BwZZId9sFp+4GPhf6KrwO8Tben2sXibZA8D1vv2I1zBdvkUHcBA2g4pkqIpTRalMTLC0NPkBPX0gERxfy/iA==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.5': - resolution: {integrity: sha1-D8APBm26qkDAnyt+/dhngYB7XHA=} + resolution: {integrity: sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ==} engines: {node: '>=20.0.0'} '@aws-sdk/util-arn-parser@3.972.3': - resolution: {integrity: sha1-7ZiYYruxcs4W2eHNV5Dl/jZyGcI=} + resolution: {integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==} engines: {node: '>=20.0.0'} '@aws-sdk/util-endpoints@3.996.4': - resolution: {integrity: sha1-n8/sy9nSqCF7ZvcRzzA4g+xEQsA=} + resolution: {integrity: sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.5': - resolution: {integrity: sha1-4w5v8q/2Q2IJ7ULHZd7C0qSN98A=} + resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} '@aws-sdk/util-user-agent-browser@3.972.7': - resolution: {integrity: sha1-DnIF241Hdg3wFP/93L8Mz8NQ6E0=} + resolution: {integrity: sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw==} '@aws-sdk/util-user-agent-node@3.973.4': - resolution: {integrity: sha1-m1FVdAxct/35wfGrNQYERu5Uusg=} + resolution: {integrity: sha512-uqKeLqZ9D3nQjH7HGIERNXK9qnSpUK08l4MlJ5/NZqSSdeJsVANYp437EM9sEzwU28c2xfj2V6qlkqzsgtKs6Q==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -6642,551 +6660,551 @@ packages: optional: true '@aws-sdk/xml-builder@3.972.10': - resolution: {integrity: sha1-2KcXG3DI7pNUdH8Kx9No3SfVDkY=} + resolution: {integrity: sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.3': - resolution: {integrity: sha1-8RN/ViCczGnBX4JiQsvzf4KGF90=} + resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} engines: {node: '>=18.0.0'} '@azu/format-text@1.0.2': - resolution: {integrity: sha1-q9RtqyQi4xK9G/428NQnq2A5gl0=} + resolution: {integrity: sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==} '@azu/style-format@1.0.1': - resolution: {integrity: sha1-s2Q68MX+6dU+aal8g1xAS9yA95I=} + resolution: {integrity: sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==} '@azure-rest/core-client@2.4.0': - resolution: {integrity: sha1-sx94hQeMuJ5IDaQ/C6LX1Jz0UwI=} + resolution: {integrity: sha512-CjMFBcmnt0YNdRcxSSoZbtZNXudLlicdml7UrPsV03nHiWB+Bq5cu5ctieyaCuRtU7jm7+SOFtiE/g4pBFPKKA==} engines: {node: '>=18.0.0'} '@azure-rest/maps-search@2.0.0-beta.3': - resolution: {integrity: sha1-dvoEKU13TBPcX7UaEsKmTehfVNE=} + resolution: {integrity: sha512-2fouStEqzwa1dXZGH1rys/TVpH5aY1OqF5iGcZlbR8cW1qQtwFcrGQ/hpAeGdOtHWhLblibh6eoqNr1lYTFpBQ==} engines: {node: '>=18.0.0'} '@azure/abort-controller@1.1.0': - resolution: {integrity: sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=} + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} '@azure/abort-controller@2.1.2': - resolution: {integrity: sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=} + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} '@azure/ai-projects@2.2.0': - resolution: {integrity: sha1-DCm9bKe4FM22Liw0N6+mX61Q3vA=} + resolution: {integrity: sha512-pxdEYMK8DI8BxaFhroqoT+1wwHmELn0v+fEWQanQNG2wNI9LdWTrUSChNcUY0l8T8D5Gjxf/irSEEaWCvqHwQQ==} engines: {node: '>=20.0.0'} '@azure/arm-authorization@9.0.0': - resolution: {integrity: sha1-aPTsP+er98mGosQFvj33pnv60Ts=} + resolution: {integrity: sha512-GdiCA8IA1gO+qcCbFEPj+iLC4+3ByjfKzmeAnkP7MdlL84Yo30Huo/EwbZzwRjYybXYUBuFxGPBB+yeTT4Ebxg==} engines: {node: '>=14.0.0'} '@azure/core-auth@1.10.1': - resolution: {integrity: sha1-aKF/qGHr0U9v0xQFV5g1Xva+3xs=} + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} engines: {node: '>=20.0.0'} '@azure/core-auth@1.9.0': - resolution: {integrity: sha1-rHJbA/q+PIkjcQZe6eIEG+4P0aw=} + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} '@azure/core-client@1.10.1': - resolution: {integrity: sha1-g9ePl9ZHqyLmgRp6aLtCI+eh0Bk=} + resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} engines: {node: '>=20.0.0'} '@azure/core-client@1.9.2': - resolution: {integrity: sha1-b8ac7igWiDq2xc3WU+5PL/l3T3Q=} + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} engines: {node: '>=18.0.0'} '@azure/core-http-compat@2.1.2': - resolution: {integrity: sha1-0Vha2iS6dQ3BYdgWFpszs192Lw0=} + resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} engines: {node: '>=18.0.0'} '@azure/core-http-compat@2.3.2': - resolution: {integrity: sha1-u1DiPo827DG1grLRYZJcDSnnWwM=} + resolution: {integrity: sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==} engines: {node: '>=20.0.0'} peerDependencies: '@azure/core-client': ^1.10.0 '@azure/core-rest-pipeline': ^1.22.0 '@azure/core-lro@2.7.2': - resolution: {integrity: sha1-eHEFAnog5Fx3ZRqYsBpNOwG3Wgg=} + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} engines: {node: '>=18.0.0'} '@azure/core-lro@3.2.0': - resolution: {integrity: sha1-6Tsvwzad22Vb0ROD62iySXAwXkc=} + resolution: {integrity: sha512-SJEAe8fMDnjz2vw9dvEUi0DhAWe1sYkWQVTDc/HDcgNALaszGRopx3U+z1Pg/C9fsYiArp5pTBEcq29Ddph0WA==} engines: {node: '>=18.0.0'} '@azure/core-paging@1.6.2': - resolution: {integrity: sha1-QNOGDcLffykdZjULLP2RcVJkM+c=} + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} engines: {node: '>=18.0.0'} '@azure/core-rest-pipeline@1.20.0': - resolution: {integrity: sha1-kW2NbJz/a1VvCwv9W5I1JtWQ4tk=} + resolution: {integrity: sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==} engines: {node: '>=18.0.0'} '@azure/core-rest-pipeline@1.22.2': - resolution: {integrity: sha1-fhTyHSWrYnzQdnattdmqzY4ulcw=} + resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} engines: {node: '>=20.0.0'} '@azure/core-sse@2.2.0': - resolution: {integrity: sha1-ev1FoWUpu/L0b/qs/dZwcyZdr28=} + resolution: {integrity: sha512-6Xg/CeW0jRyMoWt+puw2x6Qqkml3tr76Cn/oA9goIcUXtsi3ngmTwCVbwqkUWfhsOfo4F+78LGgiswSxTHN0sg==} engines: {node: '>=18.0.0'} '@azure/core-tracing@1.2.0': - resolution: {integrity: sha1-e+XVPDUi1jnPGQQsvNsZ9xvDWrI=} + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} engines: {node: '>=18.0.0'} '@azure/core-tracing@1.3.1': - resolution: {integrity: sha1-6XEEXJAeqcEQYWsOHbJyUHeB1fY=} + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} engines: {node: '>=20.0.0'} '@azure/core-util@1.11.0': - resolution: {integrity: sha1-9TD8Z+c4rqhy+90cyEFucCGfrac=} + resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} '@azure/core-util@1.13.1': - resolution: {integrity: sha1-bf8v9tPJxkMMb007PmXeUx8Quv4=} + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} engines: {node: '>=20.0.0'} '@azure/core-xml@1.5.0': - resolution: {integrity: sha1-zYLVEde8xUjSBvVifDlyTF1aRDQ=} + resolution: {integrity: sha512-D/sdlJBMJfx7gqoj66PKVmhDDaU6TKA49ptcolxdas29X7AfvLTmfAGLjAcIMBK7UZ2o4lygHIqVckOlQU3xWw==} engines: {node: '>=20.0.0'} '@azure/cosmos@4.9.1': - resolution: {integrity: sha1-AwuYVOkbacjBNmS8uF/dRvraIUk=} + resolution: {integrity: sha512-fPnfL4JsmJJ/jEYUhlznKfrEr2pMvJwBncGVcUC2Xi7Nlj0MrUMRE+UOrptl/lRV2W7l68Br+b9Ikzm0KiZZHg==} engines: {node: '>=20.0.0'} '@azure/identity-broker@1.4.0': - resolution: {integrity: sha1-yZyMTcIf+WVocZkUbajQ90mapYo=} + resolution: {integrity: sha512-0JQhUf+VNqurmwfXK7oBSoOg0eEnPEr6yKvArDeMlM4B4eN4ugrKoLUEFgDWUNfixgSGg0SbOrH5iwoBUj1CpQ==} engines: {node: '>=20.0.0'} '@azure/identity-cache-persistence@1.2.0': - resolution: {integrity: sha1-xu7f/+cjrEIkx/v6rvj3Uyqv2A8=} + resolution: {integrity: sha512-ZYr6iiE6d/Tkt4jck0cQv9grZ1BR4u5LXJmB1vblU/WGIHspO6Bv3TJMvQat2sQSOG4Wz7busgg0pajP4gNJzA==} engines: {node: '>=18.0.0'} '@azure/identity@4.10.0': - resolution: {integrity: sha1-EM/kkge00RHr46qzreR1YcKFLG0=} + resolution: {integrity: sha512-iT53Sre2NJK6wzMWnvpjNiR3md597LZ3uK/5kQD2TkrY9vqhrY5bt2KwELNjkOWQ9n8S/92knj/QEykTtjMNqQ==} engines: {node: '>=18.0.0'} '@azure/identity@4.13.1': - resolution: {integrity: sha1-vcCRZYuqWaR+6furSHpLsBhym8M=} + resolution: {integrity: sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==} engines: {node: '>=20.0.0'} '@azure/keyvault-certificates@4.10.3': - resolution: {integrity: sha1-xv78JrnQG9ECOHL6sv0HYRyb6ZQ=} + resolution: {integrity: sha512-PgQLfcgsqVPEN8+HYs9L/9sUxd1qkUQa8csuKPFRq3twiIE5Sm1me+1tmoNp5rPCdYoBJSNzi/FYpldHlDeHDw==} engines: {node: '>=20.0.0'} '@azure/keyvault-common@2.1.0': - resolution: {integrity: sha1-Zw50FKK/aDcbCz0fmByboCeLd90=} + resolution: {integrity: sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw==} engines: {node: '>=20.0.0'} '@azure/keyvault-keys@4.10.0': - resolution: {integrity: sha1-dUdujyhYDcI7vJ2sbRZU4THW79U=} + resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} engines: {node: '>=18.0.0'} '@azure/keyvault-secrets@4.11.2': - resolution: {integrity: sha1-Ngm9ZSp6Nn8UU17FWfgXhkMkr8k=} + resolution: {integrity: sha512-ECj/kwZbZlQXj2kfWivSICbKwj6W3chmFhv8qUdauqYnjvZ0hWZBFSsZWux7W2nX3MP49PLUCusXk+hAg3pipg==} engines: {node: '>=20.0.0'} '@azure/logger@1.2.0': - resolution: {integrity: sha1-p5rvzdV9KpZgP6tZyaZuDZAipWQ=} + resolution: {integrity: sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==} engines: {node: '>=18.0.0'} '@azure/logger@1.3.0': - resolution: {integrity: sha1-VQHPhdT1JjBgKozHXfdlaMlpqCc=} + resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} '@azure/maps-common@1.0.0-beta.2': - resolution: {integrity: sha1-Cey+hAiSgQAjgn7y2DjyGaUcHDU=} + resolution: {integrity: sha512-PB9GlnfojcQ4nf9WXdQvWeAk7gm8P74o+Z5IHz5YLK/W+3vrNrmVVVuFpGOvCPrLjag50UinaZsMBtPtxoiobg==} engines: {node: '>=14.0.0'} '@azure/msal-browser@4.12.0': - resolution: {integrity: sha1-D2VoxA/BvvQVOh8p/OH8b/CddbQ=} + resolution: {integrity: sha512-WD1lmVWchg7wn1mI7Tr4v7QPyTwK+8Nuyje3jRpOFENLRLEBsdK8VVdTw3C+TypZmYn4cOAdj3zREnuFXgvfIA==} engines: {node: '>=0.8.0'} '@azure/msal-browser@5.11.0': - resolution: {integrity: sha1-As8ggkpKGBWrtQ74jYkQh7cwCcc=} + resolution: {integrity: sha512-zkGNYS3TwY8lUpPIafAmsFCYZbgFixY9y/LZB9GUg0IILoHTqpN26j5OrkL1AQThh/YdZsawe4iWXfp85lFVxg==} engines: {node: '>=0.8.0'} '@azure/msal-common@15.6.0': - resolution: {integrity: sha1-B2TWRG7v85cCIZleJfJl/bIY2mY=} + resolution: {integrity: sha512-EotmBz42apYGjqiIV9rDUdptaMptpTn4TdGf3JfjLvFvinSe9BJ6ywU92K9ky+t/b0ghbeTSe9RfqlgLh8f2jA==} engines: {node: '>=0.8.0'} '@azure/msal-common@16.6.0': - resolution: {integrity: sha1-Dog6W2oYzwDafJYSLGU18wyPtOU=} + resolution: {integrity: sha512-FemGljX0csPlBMUE5GUan7BfRn1emeMRUhHSARhqzLN6LA9nt+MgzmAQ1xVqdLm+6plVoxsq9mS5eoyKtpPSgA==} engines: {node: '>=0.8.0'} '@azure/msal-common@16.6.2': - resolution: {integrity: sha1-SqeR2yxPN/UDv+EPWux2/VUtr44=} + resolution: {integrity: sha512-hQjjsekAjB00cM1EmatWJlzhEoK2Qhz7Rj5gvM6tYf8iL7RM3tkxlpU9fG0+ofkulzg9AEEA6dIEnSmDr5ZqUA==} engines: {node: '>=0.8.0'} '@azure/msal-node-extensions@1.5.13': - resolution: {integrity: sha1-5NKijXb/wvGK0JRbG8wM7PoMIAQ=} + resolution: {integrity: sha512-5JQaPS/hGN5iL1rNBr+t17eVrpIjp8oXnCIrkj8WX4a8YbhlHaw+GhQthetdkMMvJE5RwbdzEN4Vm6zKX9ArGQ==} engines: {node: '>=16'} '@azure/msal-node-extensions@5.2.0': - resolution: {integrity: sha1-KSJ7KH/f3MASoJlhWbromaSThrc=} + resolution: {integrity: sha512-3qrb4wxYBfJarrG9NRG5jRVhZfL9vZaDpeq2RDKPiNnA+e0/TKS8JzvXfIZqxn4VIP6/9P6/SSCJS+Y18LIAuw==} engines: {node: '>=20'} '@azure/msal-node-runtime@0.18.2': - resolution: {integrity: sha1-/b5FR1aFIMB6oCCj/ipKa0w+qHk=} + resolution: {integrity: sha512-v45fyBQp80BrjZAeGJXl+qggHcbylQiFBihr0ijO2eniDCW9tz5TZBKYsqzH06VuiRaVG/Sa0Hcn4pjhJqFSTw==} '@azure/msal-node-runtime@0.20.5': - resolution: {integrity: sha1-dBs35hgVkO8I6WTXETsMcD+LCBI=} + resolution: {integrity: sha512-DqY28Lpx67AsMbT3FYal3MnDZx62Pblnhp1qA+HGtgEsm3jK8COkJVCrhVsprn80PKQfAOdKRuxgVYyvmv2rOg==} '@azure/msal-node@3.5.3': - resolution: {integrity: sha1-AveiNEosKZQ1SgzsElue+ajnEJs=} + resolution: {integrity: sha512-c5mifzHX5mwm5JqMIlURUyp6LEEdKF1a8lmcNRLBo0lD7zpSYPHupa4jHyhJyg9ccLwszLguZJdk2h3ngnXwNw==} engines: {node: '>=16'} '@azure/msal-node@5.2.0': - resolution: {integrity: sha1-30hOocJOcbBorvLl6fa8wKAODkQ=} + resolution: {integrity: sha512-b/ak8XAqpnGk1N1nsyTVV0Remp48BP3QrGQZ1uCMcvg2S8X1eSXzhHQZEae2oX276Q4KFAqCUswanDtcvIKLrw==} engines: {node: '>=20'} '@azure/search-documents@12.1.0': - resolution: {integrity: sha1-eTO+ozIX17lWlv6XoZzA9DMbw2o=} + resolution: {integrity: sha512-IzD+hfqGqFtXymHXm4RzrZW2MsSH2M7RLmZsKaKVi7SUxbeYTUeX+ALk8gVzkM8ykb7EzlDLWCNErKfAa57rYQ==} engines: {node: '>=18.0.0'} '@azure/storage-blob@12.27.0': - resolution: {integrity: sha1-MGKTBBEXOihGi9OA4K0sYyjXKIo=} + resolution: {integrity: sha512-IQjj9RIzAKatmNca3D6bT0qJ+Pkox1WZGOg2esJF2YLHb45pQKOwGPIAV+w3rfgkj7zV3RMxpn/c6iftzSOZJQ==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.27.1': - resolution: {integrity: sha1-IA9xXmbVKiOyIalDVTSpHME61b4=} + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} '@babel/code-frame@7.29.7': - resolution: {integrity: sha1-8vu/6ofESiFZDsUVt3iywm2IZuc=} + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.29.7': - resolution: {integrity: sha1-bwI38PNtLlHAVwpjb67Z0tDv5ik=} + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} '@babel/core@7.29.7': - resolution: {integrity: sha1-gMELFySAgpaLV6hXuRZAlx8gcPc=} + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} '@babel/generator@7.29.7': - resolution: {integrity: sha1-zKC4gn5rzzuhdniOfzsYCtbbL6M=} + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.29.7': - resolution: {integrity: sha1-eh3vcEMCQBxH9k+oVYnpdK4hcEI=} + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} '@babel/helper-globals@7.29.7': - resolution: {integrity: sha1-8EqW+9hHMkGxB5JD9bPwOjAQq3s=} + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.29.7': - resolution: {integrity: sha1-7yUEilGOgo1zk/rFiC3dc5Idc5Y=} + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.29.7': - resolution: {integrity: sha1-sGJ0elmXuhOGNyATKLv/d5YFdK4=} + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha1-3bL4dlNP+AE+bCspm/TTmzxR1Ew=} + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha1-fwhx2Zgk0jE31g+G/PYTD9WhtR8=} + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha1-pwVNzBRaln3U3I/uhFpXwTFsnfg=} + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha1-vYcITO0MeW7Ea9pJLeboPSnon8I=} + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.29.7': - resolution: {integrity: sha1-zzFb6UAhOzVOtKvMC9Aevj9zvCo=} + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} '@babel/helpers@7.29.7': - resolution: {integrity: sha1-Rav951SJl+NDdsPmn+tHXP+0pgc=} + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} '@babel/parser@7.29.7': - resolution: {integrity: sha1-g3uHOHy/XsVTDLY0s8Yi9o7bkzQ=} + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=} + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo=} + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=} + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=} + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha1-NMAX1USW+bEbYUdOfqPf1VY//gc=} + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=} + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=} + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha1-L5vrXv8w+lB8VTLRB9qse4iPo0w=} + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha1-ypHvRjA1MESLkGZSusLp/plB9pk=} + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=} + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=} + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=} + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=} + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=} + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=} + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=} + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha1-UUfSkGank0UPIgxj+jqUMbfm3Rg=} + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha1-biBhBnujqwJm2DSp+UgRGW8qupo=} + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/runtime@7.27.0': - resolution: {integrity: sha1-++58+XxwlRjswfWQmESB1UYNR2I=} + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} '@babel/template@7.29.7': - resolution: {integrity: sha1-TZ1ABPZFzdME3pWMclFieE7KxwA=} + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} '@babel/traverse@7.29.7': - resolution: {integrity: sha1-xHsHpBuV2gkH0Ca13YlNmN59Ly0=} + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} '@babel/types@7.29.7': - resolution: {integrity: sha1-gAXjHYJxLuetrvbiPGO3GmJ3CpI=} + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha1-daLotRy3WKdVPWgEpZMteqznXDk=} + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@bcoe/v8-coverage@1.0.2': - resolution: {integrity: sha1-u+EtyltO+YOg0K9LB7m8kOoKuro=} + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} '@braintree/sanitize-url@7.1.2': - resolution: {integrity: sha1-yiA1sP7+lWqGdv8Maa9z5gX82B8=} + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} '@bramus/specificity@2.4.2': - resolution: {integrity: sha1-qo246xc/3ucyT4IoSDMQat7sxkg=} + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true '@chevrotain/types@11.1.2': - resolution: {integrity: sha1-6DoaJwTwxeSedZKyFAMaD0o01+U=} + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} '@cliqz/adblocker-content@1.34.0': - resolution: {integrity: sha1-OgNHwbS8uEZ/AlRkpdwxCvHnFmg=} + resolution: {integrity: sha512-5LcV8UZv49RWwtpom9ve4TxJIFKd+bjT59tS/2Z2c22Qxx5CW1ncO/T+ybzk31z422XplQfd0ZE6gMGGKs3EMg==} deprecated: This project has been renamed to @ghostery/adblocker-content. Install using @ghostery/adblocker-content instead '@cliqz/adblocker-extended-selectors@1.34.0': - resolution: {integrity: sha1-1LBV/b7p1d/iKyt1pD3QuD9wnHw=} + resolution: {integrity: sha512-lNrgdUPpsBWHjrwXy2+Z5nX/Gy5YAvNwFMLqkeMdjzrybwPIalJJN2e+YtkS1I6mVmOMNppF5cv692OAVoI74g==} deprecated: This project has been renamed to @ghostery/adblocker-extended-selectors. Install using @ghostery/adblocker-extended-selectors instead '@cliqz/adblocker-puppeteer@1.23.8': - resolution: {integrity: sha1-50Y2zSAEWdFzSSnkFQSnaTlQQxE=} + resolution: {integrity: sha512-Ca1/DBqQXsOpKTFVAHX6OpLTSEupXmUkUWHj6iXhLLleC7RPISN5B0b801VDmaGRqoC5zKRxn0vYbIfpgCWVug==} deprecated: This project has been renamed to @ghostery/adblocker-puppeteer. Install using @ghostery/adblocker-puppeteer instead peerDependencies: puppeteer: '>5' '@cliqz/adblocker@1.34.0': - resolution: {integrity: sha1-KDXMJxiIrcO6xQ0C6+5zygxuxRg=} + resolution: {integrity: sha512-d7TeUl5t+TOMJe7/CRYtf+x6hbd8N25DtH7guQTIjjr3AFVortxiAIgNejGvVqy0by4eNByw+oVil15oqxz2Eg==} deprecated: This project has been renamed to @ghostery/adblocker. Install using @ghostery/adblocker instead '@codemirror/autocomplete@6.18.6': - resolution: {integrity: sha1-3iboZKHsgZKhskHrhq3bthKWTds=} + resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} '@codemirror/commands@6.8.1': - resolution: {integrity: sha1-Y59VWdLzPyWCokKcWMsMG5JcejA=} + resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} '@codemirror/lang-angular@0.1.4': - resolution: {integrity: sha1-W56UB4a6IBqaQuq225UB+j/iKSo=} + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} '@codemirror/lang-cpp@6.0.2': - resolution: {integrity: sha1-B2yYNAw76r3gFtfYPgjuvhclTvk=} + resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==} '@codemirror/lang-css@6.3.1': - resolution: {integrity: sha1-djykGu6BuyQxvlXjz8x8yOkUIaM=} + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} '@codemirror/lang-go@6.0.1': - resolution: {integrity: sha1-WYIiyQ9W6uKNEQacYSymTQMGsFc=} + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} '@codemirror/lang-html@6.4.9': - resolution: {integrity: sha1-1YbyzJw0E5GuB9HXxUWZDfoGlyc=} + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} '@codemirror/lang-java@6.0.1': - resolution: {integrity: sha1-A70GM02nyP653/bbAaxthb0uSLs=} + resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==} '@codemirror/lang-javascript@6.2.4': - resolution: {integrity: sha1-7vIifRiSqudi86DyEvcr7IaKAsU=} + resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} '@codemirror/lang-json@6.0.1': - resolution: {integrity: sha1-CgvnAaVhnEsPiZH5telf4z9GIzA=} + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} '@codemirror/lang-less@6.0.2': - resolution: {integrity: sha1-Lj2Co924cQ5kCWic1KKMZlWNDLg=} + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} '@codemirror/lang-liquid@6.2.3': - resolution: {integrity: sha1-y9s4y/LFm8M0KSQgQB+IqmxLSyc=} + resolution: {integrity: sha512-yeN+nMSrf/lNii3FJxVVEGQwFG0/2eDyH6gNOj+TGCa0hlNO4bhQnoO5ISnd7JOG+7zTEcI/GOoyraisFVY7jQ==} '@codemirror/lang-markdown@6.3.3': - resolution: {integrity: sha1-RX+TvYotQi2uBiWyC2Gt9cbSPe8=} + resolution: {integrity: sha512-1fn1hQAPWlSSMCvnF810AkhWpNLkJpl66CRfIy3vVl20Sl4NwChkorCHqpMtNbXr1EuMJsrDnhEpjZxKZ2UX3A==} '@codemirror/lang-php@6.0.1': - resolution: {integrity: sha1-+jTMdVYheDJYYaVzH3m9Yh9X/6o=} + resolution: {integrity: sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==} '@codemirror/lang-python@6.2.1': - resolution: {integrity: sha1-N8mTBxYRAVaGWpXFSKoO71VShjo=} + resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} '@codemirror/lang-rust@6.0.1': - resolution: {integrity: sha1-1oKfx7qjmhW80XSkGp4KG/fPa6g=} + resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==} '@codemirror/lang-sass@6.0.2': - resolution: {integrity: sha1-OMGwoTJsyfXLJ0HSzVHPvNerwLI=} + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} '@codemirror/lang-sql@6.9.0': - resolution: {integrity: sha1-ATDaCcfYJ7CqX5WY9hvKl1pUgMc=} + resolution: {integrity: sha512-xmtpWqKSgum1B1J3Ro6rf7nuPqf2+kJQg5SjrofCAcyCThOe0ihSktSoXfXuhQBnwx1QbmreBbLJM5Jru6zitg==} '@codemirror/lang-vue@0.1.3': - resolution: {integrity: sha1-v3m5FSzBi0kD1kwfZ+GGrgRcipc=} + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} '@codemirror/lang-wast@6.0.2': - resolution: {integrity: sha1-0rFBdeXoDXh4y7sp4g7JDcEtOis=} + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} '@codemirror/lang-xml@6.1.0': - resolution: {integrity: sha1-4+eG4aif3JUg7+dcHW094cQOuRw=} + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} '@codemirror/lang-yaml@6.1.2': - resolution: {integrity: sha1-yEKAxo+nr0VqNV2RGDteU36bcDg=} + resolution: {integrity: sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==} '@codemirror/language-data@6.5.1': - resolution: {integrity: sha1-XLlBPVIl7yeld8I3gbvAs2xYu2c=} + resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==} '@codemirror/language@6.11.1': - resolution: {integrity: sha1-fpGnnNBeJ41Xgv+bTK/ouDpplog=} + resolution: {integrity: sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==} '@codemirror/legacy-modes@6.5.1': - resolution: {integrity: sha1-a9E/rJT2eoJeVCABfg0vPDXQk0I=} + resolution: {integrity: sha512-DJYQQ00N1/KdESpZV7jg9hafof/iBNp9h7TYo1SLMk86TWl9uDsVdho2dzd81K+v4retmK6mdC7WpuOQDytQqw==} '@codemirror/lint@6.8.5': - resolution: {integrity: sha1-ntqoCOdk4o4HZlsBWVGTTI7DpBg=} + resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} '@codemirror/search@6.5.11': - resolution: {integrity: sha1-oyT/7jbgMrf2eqMcT7nz5vnz7WM=} + resolution: {integrity: sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==} '@codemirror/state@6.5.2': - resolution: {integrity: sha1-jso6ZCEqgzZ9yFR1t9eNXJtwdsY=} + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} '@codemirror/theme-one-dark@6.1.2': - resolution: {integrity: sha1-/O+fnPwXoHg2y32hfJ9tcjEGTfg=} + resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} '@codemirror/view@6.37.2': - resolution: {integrity: sha1-/ldmQaLoCaUJRlZ80rUoyG8iuIU=} + resolution: {integrity: sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==} '@colors/colors@1.5.0': - resolution: {integrity: sha1-u1BFecHK6SPmV2pPXaQ9Jfl729k=} + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha1-AGKcNaaI4FqIsc2mhPudXnPwAKE=} + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} '@csstools/color-helpers@6.0.2': - resolution: {integrity: sha1-gsWf0wZJzwtNPIIWBIl0hmbmVQs=} + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} '@csstools/css-calc@3.1.1': - resolution: {integrity: sha1-eLSUmW2sQaAnl9zKGKw7RtJbP9c=} + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 '@csstools/css-color-parser@4.0.2': - resolution: {integrity: sha1-wn4Do3cNA1LbktZo1t3kJ6N4WeU=} + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha1-4cZdwJN4tC8moRH8p/cHX8LCYWQ=} + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-tokenizer': ^4.0.0 '@csstools/css-syntax-patches-for-csstree@1.1.1': - resolution: {integrity: sha1-zkyaDL4wWQSR/NXAP+ZCbSK6ieQ=} + resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -7194,747 +7212,747 @@ packages: optional: true '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha1-eYozlQ0RImoOu2rK+mD1WUQkln8=} + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} '@dependents/detective-less@5.0.3': - resolution: {integrity: sha1-XGpYSerKwnzwplemXB2U/NHmhDs=} + resolution: {integrity: sha512-v6oD9Ukp+N7V4n6p5I/+mM5fIohSfkrDSGlFm5w/pYmchvbk+sMIHsLxrFJ5Lnujewj1BzWL0K84d88lwZAMQA==} engines: {node: '>=18'} '@develar/schema-utils@2.6.5': - resolution: {integrity: sha1-Ps4ixYOEAkGabgQl+FdCuWHZtsY=} + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} engines: {node: '>= 8.9.0'} '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha1-HVcr+74Ut3BOC6Dzm3SBW4SHDXA=} + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} '@discoveryjs/json-ext@1.1.0': - resolution: {integrity: sha1-RLXONIXpUjWsoG5ijuqqPIFrxMw=} + resolution: {integrity: sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA==} engines: {node: '>=14.17.0'} '@elastic/elasticsearch@9.3.4': - resolution: {integrity: sha1-sSTzO6jd2YJneYZy26WtSu6dbIk=} + resolution: {integrity: sha512-Mp14fPEYx+WTfZdcvAaZ9WkLYGHQCbwMx6EP5VCucYdhv4cn/g2sbnMT5HzK+gX3XEpBnnkEK/+WysCKzxuo3A==} engines: {node: '>=18'} '@elastic/transport@9.3.5': - resolution: {integrity: sha1-wEGAeqNmt70vhhxFjKT9Qn4G5Rk=} + resolution: {integrity: sha512-hIMJbt1guqr3/N2zCN45k9hw9o78qcdsO0xietLe+Bfa+JL0YafHTgkWkM1oT3Ht5sGMJaDcJZiYomSMU6CtTA==} engines: {node: '>=20'} '@electron-toolkit/preload@3.0.2': - resolution: {integrity: sha1-7luzOrpIdBxbxTmppvqtC+RVRl4=} + resolution: {integrity: sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==} peerDependencies: electron: '>=13.0.0' '@electron-toolkit/tsconfig@1.0.1': - resolution: {integrity: sha1-eASNMXjdempXNZDiMkDwdksMFK8=} + resolution: {integrity: sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg==} peerDependencies: '@types/node': '*' '@electron/asar@3.4.1': - resolution: {integrity: sha1-TpGWpLVPuhjFbNjVysZ8W9xYgGU=} + resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} engines: {node: '>=10.12.0'} hasBin: true '@electron/fuses@1.8.0': - resolution: {integrity: sha1-rTTTzEcDsSWLg/aYmRcFLPwUkKA=} + resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} hasBin: true '@electron/get@2.0.3': - resolution: {integrity: sha1-+6VSaD04euvZ8/ytvK/I4S7k+WA=} + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} '@electron/get@3.1.0': - resolution: {integrity: sha1-IsWgvZF6sgG63rd7xK0Yy6VMtOw=} + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} engines: {node: '>=14'} '@electron/notarize@2.5.0': - resolution: {integrity: sha1-1NJTVq36Kd9Kdr1kqL00cjfNJR4=} + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} '@electron/osx-sign@1.3.3': - resolution: {integrity: sha1-r3UVEEiDGNn3ZjaUr4WBlpDXVYM=} + resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} engines: {node: '>=12.0.0'} hasBin: true '@electron/rebuild@4.0.3': - resolution: {integrity: sha1-8CL35mh0kg/Rak2AK4YFiFy1SdM=} + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} engines: {node: '>=22.12.0'} hasBin: true '@electron/universal@2.0.3': - resolution: {integrity: sha1-FoDfbO2PEoyg/yTinCFl1B14s84=} + resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} engines: {node: '>=16.4'} '@electron/windows-sign@1.2.2': - resolution: {integrity: sha1-jOqtUtXB6xhwL0gQPV87x8M4+p0=} + resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} engines: {node: '>=14.14'} hasBin: true '@emnapi/core@1.11.0': - resolution: {integrity: sha1-imVQQtu7ENAmZnDJkDw0pwAccFs=} + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} '@emnapi/core@1.11.1': - resolution: {integrity: sha1-ueEGTzprFjHiQeY460jXNr/TcqY=} + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} '@emnapi/runtime@1.11.0': - resolution: {integrity: sha1-zhazZ0/3Jmu/UPlmi96KBPMBTU4=} + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} '@emnapi/runtime@1.11.1': - resolution: {integrity: sha1-WPHz1dgamxL3k6tojJY3GQECfCQ=} + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/runtime@1.4.0': - resolution: {integrity: sha1-j1Cb8QWaVVHI/oKaHE6R2zX9++4=} + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha1-TJO+z1v6OxPRu9zAau44MhrYE5o=} + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha1-DkSXorU8npSF4Um8kt2yKEONa88=} + resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} peerDependencies: esbuild: '*' '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha1-xxhKMmUz/N8bjuBzPiHHE7l1V18=} + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha1-gPy+NhMOWLdnBRHoiLjoiiWe12w=} + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha1-grdPkqp41yC3FBYpOfskjJCt31M=} + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha1-egGo0uwvuy2seK2tCbD6eB5Agr4=} + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha1-Cdm0NXeA2p6jp9+4M6Hx/0ObQFI=} + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha1-iqSWX40KeYLcIXNL9mATI6Ztp1I=} + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha1-94y4oxIfwgWlMoWtskly2zhdGF0=} + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha1-tUCifRTkr9BYSWpNvsTT9BTbEQo=} + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha1-mwQ4T7dxkm36bXrQQyTssqubLig=} + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha1-MAcSEB9/UPHSYnoWLm4JsQm2dno=} + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha1-WT4QoUULv8rGyzIfYfRoRTusIJ0=} + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha1-cEvSl95tdi3lTqu+r79V9nVqvi8=} + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha1-KZGOwtt1TO3LbBsE3ozWVHr2Rh4=} + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha1-h9+ycWEgK9yVjvSLthsJx1j67hY=} + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha1-RTFD0HMyYDPS0iyvnkjeS64nSwc=} + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha1-0csWbTSw+/D+irRgpVlPJKN4cB4=} + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha1-5JW1OWYOUWkPOSivUKdvsKbM/yo=} + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha1-eRl4mOwf90XSHAceHHzDyALwwf0=} + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha1-byMAD7m0C34Et9BgbAaTvQYy8yI=} + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha1-EDSyZFf8iGNo/mG70J9lP2r6jlQ=} + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha1-wTg4+lc3KDmr3dyR1xVCzuouHiI=} + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha1-FGQAqFYhM/RcTS6tzzfd0JcYB54=} + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha1-Jzk90YuxJjxmOXnF8VduAMLQJL4=} + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha1-ZVVqQyoeTXIDLYIYwZMvzKGkl3I=} + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha1-ZGuYmqIL+J/Qcd1dv61po1QuVQ4=} + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha1-HF+bpyBuFY/SskxZ+i0si7R8oP4=} + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha1-IuRjj6UC0cACcHcyTJdkDjrfOmI=} + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha1-LmHgWS+QMNfj2uGO4l68U1kYrvY=} + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha1-qmFc/ICvlU00WJBuOMoiwYz1wmE=} + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha1-6mMfSja+qsS5J5+g/MbKKerusrM=} + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha1-kiS45P6pJM4hlOPvw+muv4IhktY=} + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha1-yV7CiZWe+AecTcqBeh4sS+Zrm9M=} + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha1-cKxvoU9ct+H3+Ie8/7aArQmSK1s=} + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha1-4QZrzlg5TxsRQd7shVel8KIvWXc=} + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha1-T10cJ1J9gXs1aEriFBnlfCvaCWY=} + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha1-QLIhdd2gYYLz7oFBGGxf8wTEpxc=} + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha1-/G/RGorKVsH284lPK+oEefj2Jrk=} + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha1-RSzWayCTLQi9xTqLYcDjC69DSLk=} + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha1-uenQcMjBwESc8Ssg6sN9cKRZWSE=} + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha1-wJoPZ5F1kqwN6JKpvk04FN69Kmw=} + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha1-MnH1Oz+T49CT1RjRZJ1taNNG7eI=} + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha1-sk+KzEW89UGSx/LzvhtT5lUer+A=} + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha1-P4D7aWqpYFGpQEfzXIWwiyHDb54=} + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha1-pYD5xnZ5eDOJHlGfx6EzfIr9jbM=} + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha1-7WLgQjjFcCauqDHFoTC3PA+fJt8=} + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha1-+c//p/yDIlcfvEyLMmjK8VvYGtA=} + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha1-m+HywoIQsT67QVYiG7o1b+FnUgU=} + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha1-RkUs8yHcf56Rwvp4Cla7Vuec1os=} + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha1-55uOtIvzsQb63sGsgkD7l7TmTL4=} + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha1-V1oUvXRkT/q4ka3H1+YNJ1KW8s0=} + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha1-SrXuZ6Pfy8tej9eIPa5uc1sRY7g=} + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha1-QhGzGE3WYI9T3LIuOfXTTuCIUsg=} + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha1-XyIDhgoUO5kZ04PvdXNSH7FUw+Q=} + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha1-dbmccKlfvV93OddpK+/mBgFZGGk=} + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha1-2seMaJ9kmUWcQyHlwVAywSMH5+o=} + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha1-aXhXwqYcubC2u2ZS5AwdxeHKjl0=} + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha1-B7yv2ZMi1a9i9hjLnmqbf0u4Jdw=} + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha1-LjJZRAMhpE553fdTXDJQV9qHXNY=} + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha1-BQ99OzVcOpgwjpNbxNYyXakbACc=} + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha1-0ZKUPrFGpArExkl9DPe+NbmGvwg=} + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha1-t8z2hnUdaj5EuGJ6uryL4+9i2N4=} + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha1-F2dsq7/lko2lsqDW311YzQjbJmM=} + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha1-1h9xXOYdQ/5YRK0Nj0Y/iMvk/vY=} + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha1-rOoDVtoODrwI+Xz3ucLkAeHmSNw=} + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha1-bY8Mdo4HDmQwmvgAS7lOaKsrs7A=} + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha1-BYN3VoXKggZtBMNQfwlSTTzXowY=} + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha1-yo4apHj8ggkle/Osj3nE3CmC8yo=} + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha1-bww84MtkxTS3DExF7LLBbTTjXf0=} + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha1-8ExAScsuJS/paxb+2Q9wdGsT9KQ=} + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha1-FlDywblI3us++Ujy/DBhRyPAlpA=} + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha1-i813B3oNzjN4tXT+2ybSolO3PTY=} + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha1-u+Qw9g03jsuI3sshnGAmZzh6YEc=} + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha1-d9oNCg2CbXySHuo9QCklSLJYoHY=} + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha1-ZXcqs0LEszGb8HBaIRBQqsG24yA=} + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha1-5/sqAemcgwyU5mI82f77TI+1g0c=} + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha1-Ypb1hnrt7yioGyKrIAnHhqlS3M0=} + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha1-N+18+mZUnXlVhS/ON9DD3k5xXqE=} + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha1-xSkJNy24uG4sVeBaiUADO1Zgo7I=} + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha1-mdHPKTcnlWDSEEgh9czOIgyyr3A=} + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha1-+NIzAzYOJ7Fs8GWyO7/0PBQUJnk=} + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha1-Ab89OFhV71DLM9t8S1L5V8NM0Xk=} + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha1-xCe5vlpkwmL/mn63C1+7qt9EbGw=} + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha1-SeC3aHRKOSS+DX/ZfdbOmykj2I0=} + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha1-bB+Us0CGWZqr2k6sj2OClLmHdBA=} + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha1-3JsUe6yi5sSzyFVxdB70hgpIkJc=} + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha1-CHQVEsENUpVmurqDe0/gUsjzSHs=} + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha1-pu19Z3jWflKMgfsWWyP0kRubE9Y=} + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha1-Sw3ReuCmlB0tD9NakGOSUXBxqQ0=} + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha1-zoZtEt8TwV5MmfBzo9Rm9uBkmzo=} + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha1-Z1tzhTmEESQHNQFhRKsumaYPx10=} + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha1-msFMN44bZTrxfQjn0840yu9YcyM=} + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha1-NBk6tVZdb/aMqSisBL51ECzLLnc=} + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha1-dGjjaS0B1inVlB5dg4F7uA+eObQ=} + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha1-G/w86YqmypoJaeTSr3IUTFnBGTs=} + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha1-kYlC3LuzXMFPyjmvuRteaj0Scmc=} + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha1-62fw5EglFdjBiU7eYxwyek2p/E0=} + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha1-pbwAY/sryrbQ7WPyoVN5WLwmnsY=} + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha1-rK01HVgtFXuxRVNdsqb/U91RS1w=} + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha1-m9rYF2vngRrRSNH4dyNZBB9GxsU=} + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha1-j+MLMIi4m0hzw6bMh1l645IMCos=} + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha1-EAZO5E9DR7kMmgK0Rrv4CpFjKxI=} + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha1-TpCvZ7xR3e5s3vUoTt9XLsN2tZU=} + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha1-vM32Fbz3tujbgw7AuNIcmiXeWXs=} + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.23.5': - resolution: {integrity: sha1-VuhtJDBJGV2KzAwGobPf3D+j3pU=} + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/config-helpers@0.6.0': - resolution: {integrity: sha1-75o2iB0539Xb6sIrDamX+r+wiwM=} + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': - resolution: {integrity: sha1-wdp80bgvqHh/mLVin7gRhIobY84=} + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/object-schema@3.0.5': - resolution: {integrity: sha1-iOm/TRHSsZwILnjr586IckpesJE=} + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/plugin-kit@0.7.2': - resolution: {integrity: sha1-Swli8/LHzovJiz7P40UlwJ0styk=} + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@esm-bundle/chai@4.3.4-fix.0': - resolution: {integrity: sha1-MITP9+tG10F0n0fzpI273LrzCpI=} + resolution: {integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==} '@exodus/bytes@1.15.0': - resolution: {integrity: sha1-VEeeD0BsutAk1v4cMZDsykRo3zs=} + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -7943,401 +7961,401 @@ packages: optional: true '@floating-ui/core@1.7.1': - resolution: {integrity: sha1-GrxrFX1Kk2F0+dvQeCeMOoHIvGs=} + resolution: {integrity: sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==} '@floating-ui/dom@1.7.1': - resolution: {integrity: sha1-dqTjy/egjt9Aw0cRz2TgzIBT2RI=} + resolution: {integrity: sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==} '@floating-ui/utils@0.2.9': - resolution: {integrity: sha1-UN6jYWvIGR+44RIoO0nq/wPnhCk=} + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} '@fluid-tools/version-tools@0.57.0': - resolution: {integrity: sha1-mIm4/j/F7OZAvfhI5T7RaETHbFw=} + resolution: {integrity: sha512-SViGNYQff84ZHlra9WI8VJe70mnPKbFByuBnA7ZFThGUKPg5ZTmdstkOjaYluQXcz2SPCFnJ/FDNTuXNQPHOjQ==} engines: {node: '>=20.15.1'} hasBin: true '@fluidframework/build-tools@0.57.0': - resolution: {integrity: sha1-vtsSABTFzdB/oGQET7jlDV2PN9E=} + resolution: {integrity: sha512-zFCXXM9Gj+gCNAH9AzrgrA0svAm8kcXzrMGkWB98rDjOoYtBDC4MJg4EsM/fzlwG1Qc7ms+yGUYtMOoKJAqwUA==} engines: {node: '>=20.15.1'} hasBin: true '@fontsource/lato@5.2.5': - resolution: {integrity: sha1-z1UvE6Vpr/KGJdnTfbNcomvn1ZQ=} + resolution: {integrity: sha512-d8aogKOul7a3eYG3UzTG8PB6A0D+6tlkFQCACmKQ7qTwB3XS6QmkSW1L0vYbVE9CfCRq/Zpb5sG3gNA6yJea/A==} '@github/copilot-darwin-arm64@1.0.70': - resolution: {integrity: sha1-a++8R/8ywfJGyVmS3eSvyg5EFXY=} + resolution: {integrity: sha512-NewReqBmTxtAzApZNmUsY4Xqy8N086MiQm7k35i9i+WrGyRiHxdZ/n/lMLCkqWoelr7pZhcZ7gQ7fHbEq1KdoQ==} cpu: [arm64] os: [darwin] hasBin: true '@github/copilot-darwin-x64@1.0.70': - resolution: {integrity: sha1-cniNbh3UEEpdYuUcoWixBXVwIC0=} + resolution: {integrity: sha512-ydUEYI3udNAjdMsLPFQLH/JG9YFKcxuAUxYIyOK+F/m/Of9nODKdYa2hw2mlLanP4cNyuxGLflu+rtIqIb+cPw==} cpu: [x64] os: [darwin] hasBin: true '@github/copilot-linux-arm64@1.0.70': - resolution: {integrity: sha1-CC0twbGPuSbuPQF5J8QMn0tUNF0=} + resolution: {integrity: sha512-EpR3VEEqMy5M9t3cs+6FtjX/AhyfoefzmcMAjBls+RGv1fILjaAby+rhKHzX5YVSxOu9OyQDlQVHK3kxznTU5Q==} cpu: [arm64] os: [linux] libc: [glibc] hasBin: true '@github/copilot-linux-x64@1.0.70': - resolution: {integrity: sha1-oqU2h9sYafFeM6hEA6+3rvB2wWo=} + resolution: {integrity: sha512-4pyNKunm7GEzQZ+09Dwr4BwixJVNcQGBeqiZPKWBGxcSipwj90t8tidLYdNjgmXJoLerANhXZcY52wJW/HubEA==} cpu: [x64] os: [linux] libc: [glibc] hasBin: true '@github/copilot-linuxmusl-arm64@1.0.70': - resolution: {integrity: sha1-GBDVmhv4wbopdNxFJHqaeNKV6fc=} + resolution: {integrity: sha512-Xy3tDjIMmMkZZzJjCrK5aDCLLV5+pyOfIcT1lWLmqVWJG0erpHXL6KU82nGW+0nc0TPqGZFHvOyQeLuXl+s3ZA==} cpu: [arm64] os: [linux] libc: [musl] hasBin: true '@github/copilot-linuxmusl-x64@1.0.70': - resolution: {integrity: sha1-67W11PTO3uE3mEVWDSzLMTivBRw=} + resolution: {integrity: sha512-AHWayI1lVTzxYkNkKrCBOo3XPG+Fb67zcqFivRjGaXG5tr9Bt870LIjIAWoJqQ1Clc3K2PsxyYZ1d8T6vjpWnA==} cpu: [x64] os: [linux] libc: [musl] hasBin: true '@github/copilot-sdk@1.0.5': - resolution: {integrity: sha1-ov0xdFEekFOqPdVPhFDgWdZ0LsE=} + resolution: {integrity: sha512-N6Yk2DcpM9orYXWGBcQs5R0FdiVYrCn7UHQ206cUkfJengKYjgcd3f78BvVB6Dot3j0TvO04FnQ85K9/kbRRag==} engines: {node: ^20.19.0 || >=22.12.0} '@github/copilot-win32-arm64@1.0.70': - resolution: {integrity: sha1-QMzrmlebPAOUNbCTMNk6TBQRmuU=} + resolution: {integrity: sha512-oWsWCTlUyIv4S3FdYoBNCscndLrUv+C3qgbfJ9mf+5igPqbIYL8alkc8FBHWPB/cornDNj65yd4s8dZrSkFPpg==} cpu: [arm64] os: [win32] hasBin: true '@github/copilot-win32-x64@1.0.70': - resolution: {integrity: sha1-GxOGU2eCSxWt2TUWxy8f+9/ODVU=} + resolution: {integrity: sha512-KFDZ750CwhjKF6uATQ1pv1XrYHI+/qTQta954gYZaa+YJEXRstGd284uJ6NI3YXfshZwhTs64JdjN4xLodYwrA==} cpu: [x64] os: [win32] hasBin: true '@github/copilot@1.0.70': - resolution: {integrity: sha1-ZXwZ/95WrolCJp3qxmhGeJm+i48=} + resolution: {integrity: sha512-onEwx5tod9t31Lc2rT5ns6s/fY6jtdwVWS3Fzs8hKUjCv7LFIMGf71MLcikl4GBXn6cq44+HVdNzCMWnLjYl3g==} hasBin: true '@hapi/bourne@3.0.0': - resolution: {integrity: sha1-8R/ffdpi/o4zb6fGZC2QQfMDVtc=} + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} '@hono/node-server@1.19.14': - resolution: {integrity: sha1-4w+ES8d+POe+RCqsOx9zrYtY0YE=} + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} engines: {node: '>=18.14.1'} peerDependencies: hono: '>=4.12.8 <5.0.0' '@huggingface/jinja@0.5.9': - resolution: {integrity: sha1-KU90H6CYwrMXN4i0TKZRlYv/o20=} + resolution: {integrity: sha512-uWTG+l3VJRsl7EXxYizuL3P+cCPoc3cRqbWWRcQN0FhejRfbdq0RNhCmbY/YDtnTcz9icdLYuLDjsnz4d8JMuw==} engines: {node: '>=18'} '@huggingface/transformers@3.8.1': - resolution: {integrity: sha1-MX2gA4ZTIjlnlhcyI+6q8PlyPwo=} + resolution: {integrity: sha512-tsTk4zVjImqdqjS8/AOZg2yNLd1z9S5v+7oUPpXaasDRwEDhB+xnglK1k5cad26lL5/ZIaeREgWWy0bs9y9pPA==} '@humanfs/core@0.19.2': - resolution: {integrity: sha1-qCcsoDsqz0kmcCIrIyC2xCG/3mA=} + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} '@humanfs/node@0.16.8': - resolution: {integrity: sha1-j4AMzME/T4zTEW4tnAqUk52j4+0=} + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} engines: {node: '>=18.18.0'} '@humanfs/types@0.15.0': - resolution: {integrity: sha1-8qCfYgEjkLK/8/xvskjd7IwJoJA=} + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha1-r1smkaIrRL6EewyoFkHF+2rQFyw=} + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha1-wrnS43TuYsWG062+qHGZsdenpro=} + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@iconify/types@2.0.0': - resolution: {integrity: sha1-qw6epoHWyKEhTzDNdB/jogzFf1c=} + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} '@iconify/utils@3.1.3': - resolution: {integrity: sha1-ce/Wj57S6jyR/ToBwAMvcKhwJ7c=} + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} '@img/colour@1.1.0': - resolution: {integrity: sha1-sMLC+mYa33Xv/WtJZEl82AAQu50=} + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha1-71taB4YoBfHoFFo3fIum6YgTygg=} + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha1-bgcy3K3hJrZnCveqFwYLkmg16oY=} + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha1-4D00Uc2eZk+qcpSMxwpAPqQGPWE=} + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha1-Gbwd1uum1alig0mLnJ9AEYDunHs=} + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha1-RHxQJnAMAamTx4BOuK9fbphowH8=} + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha1-KJTAy4fUInbDiJlC6OLbUXpJLEM=} + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha1-4EVvj3xiP52/vcdzg8qnIoHYYGI=} + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha1-5jaB9FOalK+c0XJG7YiBc0OG+Mw=} + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha1-l5scZsmpH3/yiTVW7yZ/kOvlFwQ=} + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha1-sbKIs2hks7zlRa2R+m2tzxpK0xg=} + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha1-mfki1OFSFuwgXctokbchv9KIQZc=} + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha1-uSYN0evm+eO9vL3KydKsEl81hS0=} + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha1-S4Ps8qgpBXIis4hIx7Ai57TQeqc=} + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha1-iAtGeACeWiCArxkjMrALCq+KSN4=} + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha1-+KXrHzdKCC9ys/ReL7JbgRiopc4=} + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha1-dPNDyOEPrYIbOPdc7TBIiTncWew=} + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha1-1MRhnN0Vd3SQbhV3DuEZkxx+9eA=} + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha1-30GD6L2EEPfWG2aFmjXt6rClMc4=} + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha1-Fmd42g9I3Sve0fowM87mtYjw1dU=} + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] libc: [musl] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha1-yNa0ghHfZxN1QQB+6NG3sfjKjgY=} + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha1-k3lOTXcgsHf8rT4CmC8vHCRnUf8=} + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha1-vhHHW+5bCAy+4xoVOod5RI+Rn3U=} + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha1-7bBpfnqCecn8gppg/DVkTEg5uyI=} + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha1-eqd2TvnAAfFeYQVG1C/OVpEXkMw=} + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha1-QiwaNS57WDKEJXfcUWArzVtvXv8=} + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha1-X7DDaV3RJSLTnD/3pryBZGF4Cg0=} + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha1-nCE6gVIKIMr2aXjz1MB0Vv8uCBM=} + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha1-zdKBgndOrb4E9iZ1oWqrvMuDP2A=} + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] libc: [glibc] '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha1-9cB3kmtI6X5KBNAE368XWXIFlmc=} + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha1-k+rGAbnzKbsnkX4OGQmMci1jDfc=} + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha1-2Abgr9ca5ndcyH8NqPLQOnwiCcs=} + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha1-VavHzXVP/KUAK2wrcZq9/IRoGag=} + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha1-JSl1uRWJT7MVr13uoXRlHiCNPWs=} + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha1-1lFe6XG7YvcwAaSCm52GWhG3cIY=} + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha1-P0YJrF2O+Ox9re6AtWCWGmD9T0g=} + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha1-2Xl4rsfFIS+ZlxTy9bc2RX4S7p8=} + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha1-b0TzKDBp2TW7XKWBMVNXLz5vYaE=} + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha1-LxWAOqYm+MWd18nQu8dm8atSz6A=} + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha1-Nwbp46w1/d/ByH+U6Enxt1MHzgo=} + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha1-GgyDmkDFNR6YhWKMhfLl39ArUqk=} + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha1-C3EWZZmwSeAy8IX7kmPgL05HiN4=} + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha1-VvAJYv8MTg65PTSgR9KfqZXj40I=} + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha1-qB/7AOaSZ80KHWJurtuKhDCysvg=} + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] '@inquirer/checkbox@4.2.1': - resolution: {integrity: sha1-RRJaMvJ8XP2Coj1ez0m03BN+Ekc=} + resolution: {integrity: sha512-bevKGO6kX1eM/N+pdh9leS5L7TBF4ICrzi9a+cbWkrxeAeIcwlo/7OfWGCDERdRCI2/Q6tjltX4bt07ALHDwFw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8346,7 +8364,7 @@ packages: optional: true '@inquirer/confirm@5.1.15': - resolution: {integrity: sha1-xQLVxkL9ugZpsXRCtAeUyXvbzLQ=} + resolution: {integrity: sha512-SwHMGa8Z47LawQN0rog0sT+6JpiL0B7eW9p1Bb7iCeKDGTI5Ez25TSc2l8kw52VV7hA4sX/C78CGkMrKXfuspA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8355,7 +8373,7 @@ packages: optional: true '@inquirer/core@10.1.15': - resolution: {integrity: sha1-j+tp/VNnhhgaK2v7hNhnT6qdLlk=} + resolution: {integrity: sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8364,7 +8382,7 @@ packages: optional: true '@inquirer/editor@4.2.17': - resolution: {integrity: sha1-WvFvbyT2L1Uv6wXHvsLcB0MjBYQ=} + resolution: {integrity: sha512-r6bQLsyPSzbWrZZ9ufoWL+CztkSatnJ6uSxqd6N+o41EZC51sQeWOzI6s5jLb+xxTWxl7PlUppqm8/sow241gg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8373,7 +8391,7 @@ packages: optional: true '@inquirer/expand@4.0.17': - resolution: {integrity: sha1-toj0oaZdryv3ehHedzR2Z2nM40M=} + resolution: {integrity: sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8382,7 +8400,7 @@ packages: optional: true '@inquirer/external-editor@1.0.1': - resolution: {integrity: sha1-qwqCxXGalj+0aQIc3lzSt0/qMPg=} + resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8391,11 +8409,11 @@ packages: optional: true '@inquirer/figures@1.0.13': - resolution: {integrity: sha1-rQr9YrqrHCMXURWpti9RG2p1HkU=} + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} '@inquirer/input@4.2.1': - resolution: {integrity: sha1-wXRlTrGrNN/UKpz2CVp+c1pNsTA=} + resolution: {integrity: sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8404,7 +8422,7 @@ packages: optional: true '@inquirer/number@3.0.17': - resolution: {integrity: sha1-MqZhNs41ytn0DOtfgqjPrE8wZRc=} + resolution: {integrity: sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8413,7 +8431,7 @@ packages: optional: true '@inquirer/password@4.0.17': - resolution: {integrity: sha1-RUgMis5ojr8HHjUFNup0Z5Kz7ro=} + resolution: {integrity: sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8422,7 +8440,7 @@ packages: optional: true '@inquirer/prompts@7.8.3': - resolution: {integrity: sha1-9c0+pltTVqFYWH+mqaqeyArbkgE=} + resolution: {integrity: sha512-iHYp+JCaCRktM/ESZdpHI51yqsDgXu+dMs4semzETftOaF8u5hwlqnbIsuIR/LrWZl8Pm1/gzteK9I7MAq5HTA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8431,7 +8449,7 @@ packages: optional: true '@inquirer/rawlist@4.1.5': - resolution: {integrity: sha1-42ZOPaP7qT807iWBP6p5V6pxeZE=} + resolution: {integrity: sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8440,7 +8458,7 @@ packages: optional: true '@inquirer/search@3.1.0': - resolution: {integrity: sha1-IvE3OTju97mMPDD2BKrI++m68no=} + resolution: {integrity: sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8449,7 +8467,7 @@ packages: optional: true '@inquirer/select@4.3.1': - resolution: {integrity: sha1-tJ522rR/fHKeTh5SD+3CaOW4jNw=} + resolution: {integrity: sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8458,7 +8476,7 @@ packages: optional: true '@inquirer/type@3.0.8': - resolution: {integrity: sha1-78KTug7ZHpDmJn8arMHHDSC4tOg=} + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -8467,27 +8485,27 @@ packages: optional: true '@isaacs/cliui@8.0.2': - resolution: {integrity: sha1-s3Znt7wYHBaHgiWbq0JHT79StVA=} + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha1-LVmuOrSzj7QnC/oj0w+OLobH/jI=} + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0=} + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=} + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} '@jest/console@29.7.0': - resolution: {integrity: sha1-zUgi29uEUpJlxaK9tSmjycyVD/w=} + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/core@29.7.0': - resolution: {integrity: sha1-tszMI58w/zZglljFpeIpF1fORI8=} + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8496,27 +8514,27 @@ packages: optional: true '@jest/environment@29.7.0': - resolution: {integrity: sha1-JNYfVP8feG881Ac7S5RBY4O68qc=} + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect-utils@29.7.0': - resolution: {integrity: sha1-Aj7+XSaopw8hZ30KGvwPCkTjocY=} + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect@29.7.0': - resolution: {integrity: sha1-dqPtsMt1O3Dfv+Iyg1ENPUVDK/I=} + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/fake-timers@29.7.0': - resolution: {integrity: sha1-/ZG/H/+xbX0NJKQmqxpHpJiBpWU=} + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/globals@29.7.0': - resolution: {integrity: sha1-jZKQ+exH/3cmB/qGTKHVou+uHU0=} + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/reporters@29.7.0': - resolution: {integrity: sha1-BLJi7LO4+qg7Cz0yFiOXI5Po9Mc=} + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8525,280 +8543,280 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: {integrity: sha1-Qwtc6KTgBEp+OBlmMwWnswkcjgM=} + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/source-map@29.6.3': - resolution: {integrity: sha1-2Quncglc83o0peuUE/G1YqCFVMQ=} + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-result@29.7.0': - resolution: {integrity: sha1-jbmoCqGgl7siYlcmhnNLrtmxZXw=} + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha1-bO+XfOHTmDSjrqiHoXJmKKbwcs4=} + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/transform@29.7.0': - resolution: {integrity: sha1-3y3Zw0bH13aLigZjmZRkDGQuKEw=} + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/types@29.6.3': - resolution: {integrity: sha1-ETH4z2NOfoTF53urEvBSr1hfulk=} + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha1-Y0Khn0Q0dRjJPkOxrGnes8Rlah8=} + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha1-N1xHbRlylHhRuh4Vro8SMEdEWqE=} + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha1-eg7mAfYPmaIMfHxf8MgDiMEYm9Y=} + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} '@jridgewell/source-map@0.3.5': - resolution: {integrity: sha1-o7tNXGglqrDSgSaPR/atWFNDHpE=} + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=} + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha1-MYi8snOkFLDSFf0ipYVAuYm5QJo=} + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha1-aRKwDSxjHA0Vzhp6tXzWV/Ko+Lo=} + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha1-2xXWeByTHzolGj2sOVAcmKYIL9A=} + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha1-ZTT9WTOlO6fL86F2FeJzoNEnP/k=} + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} '@jscpd/badge-reporter@4.2.5': - resolution: {integrity: sha1-KT91Th9lYxACSwaS0e/QncM4uB0=} + resolution: {integrity: sha512-ktXrjPeRaRyUDktxTroSA2/w5sshXpQplWkUuq/e6XqEpKBSbGEnwZLIaegSijOrMwIcCXPQ9k4feXIz5eVJNA==} '@jscpd/core@4.2.5': - resolution: {integrity: sha1-tYLVFDgmWuIvMJakW6nlWR87qoU=} + resolution: {integrity: sha512-Esf2deHxaoNEjePwf2jqP6Urzj+BAOsJVPFLbnnSsV+q7rLNMcn0UEEoKBXIOOt4qMkrkhl9DfwpMyPPOr6GkQ==} '@jscpd/finder@4.2.5': - resolution: {integrity: sha1-YVRE6AW6W1U3CdcEQ3JuNkn2yvs=} + resolution: {integrity: sha512-Rw0dtwp/EeLANbujOubuQeJIuXXXkAlT+f5geZhwkB9TxEYP0hqNrdOJUK/TDBKQjRGrOizEtdNy+S4UlbdzOQ==} '@jscpd/html-reporter@4.2.5': - resolution: {integrity: sha1-wQbPLY3BeOxPAy5GQJh5D71JeDE=} + resolution: {integrity: sha512-zMMIKbvi43dMgeNeHXlHQy1ovf+KJrzNlUubaBvCAVatqP23ksW8d3fmsevIQG9mMMTH0D1xOz+SxUn1FREOPg==} '@jscpd/tokenizer@4.2.5': - resolution: {integrity: sha1-UUrHyZ2V4wugq7twqcpNdwMnM/E=} + resolution: {integrity: sha512-UM8Wx/jwahmflqQExlcKMQTYOAy58N/fn7Pv6NYrkD3EZm/FTk7gW97wkXy5aDE1Ts9oBUpT9tLY2rz7ogCHAQ==} '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha1-z46p3LhJuByV8U/AqqFRxrVNJXg=} + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/base64@17.67.0': - resolution: {integrity: sha1-fu2jy0ETjXepBAj9LkKyq6EFdtc=} + resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/buffers@1.2.1': - resolution: {integrity: sha1-jZnH9n6vck00KN/ZgmxkVSZqXIM=} + resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/buffers@17.67.0': - resolution: {integrity: sha1-XFjbze6ogkzilr0c/OAGwusWez0=} + resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/codegen@1.0.0': - resolution: {integrity: sha1-XCP3lsR2dfFm0juUjNuIkYS5Mgc=} + resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/codegen@17.67.0': - resolution: {integrity: sha1-NjX9h2nXfhm3XcVXS8l1YBmy5ZE=} + resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-core@4.57.7': - resolution: {integrity: sha1-XUv7yVFHQHyCZdS7Z2BcDBjHYqE=} + resolution: {integrity: sha512-GDKuYHjP7vAI1kjBo73V+STKr9XIMZknW/xirpRW/EcShX0IKSev/ALafeRfC8Q331nodrXUFu04PugPB0MAhw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-fsa@4.57.7': - resolution: {integrity: sha1-LAmpnqmvKSr3RHyet4U3djv4VDM=} + resolution: {integrity: sha512-1rWsah2nZtRbNeP+c61QcfGfVrJXBmBD0Hm7Akvv4C9MKEasXnbiOS//iH3T3HwUSSBATGrfSp0Xi8nlNhATeQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-builtins@4.57.7': - resolution: {integrity: sha1-zA/RIfWHBYeM6bPzcvwAvX2JfOM=} + resolution: {integrity: sha512-LWqfY1m+uAosjwM1RrKhMkUnP9jcq1RUczHsNO779ovm1E9v8I/pmj04eBAcoBjhC7ltcPbNFGyRJ5JqSJ7Jdg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-to-fsa@4.57.7': - resolution: {integrity: sha1-LEsYB70ae+WZU21H/t+AJwa2s2Y=} + resolution: {integrity: sha512-9T0zC9LKcAWXDoTLRdLMoJ0seOvJ5bgDKq1tSBoQAFQpPDstQUeV1Oe7PLypdu7F2D3ddRstmwgeNUEN/VaZ4Q==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-node-utils@4.57.7': - resolution: {integrity: sha1-UTCMS9/HF8y7FVdZ/n35yRr+wJk=} + resolution: {integrity: sha512-jjWSDOsfcog2cZnUCwX5AHmlIq6b6wx5Pz/2LAcNjJ62Rajwg89Fy7ubN+lDHew0/1reLDa9Z5urybYadhh37g==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-node@4.57.7': - resolution: {integrity: sha1-PWL5OvHM3/051DkVTzYVXX4+tcY=} + resolution: {integrity: sha512-xhnyeyEVTiIOibFvda/5n89nChMLCPKHHM2WQ+GGDf6+U/IrQBW3Qx6x+Uq1bkDbxBkybLOdIGoBtVBrE8Nngg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-print@4.57.7': - resolution: {integrity: sha1-rsjj9dZs1k6Q4fyZE6X6SBHYJLE=} + resolution: {integrity: sha512-mFM4P4Gjq0QQHkLnXzPYPEMFrAoe6a5Myedgb6+CmL+nGd3MKvTxYPuD7N1dLIH9RBy1fLdzxd80qvuK8xrx3Q==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/fs-snapshot@4.57.7': - resolution: {integrity: sha1-Nwz0BbrDWKT/Qm2Ei3M9+exRSdI=} + resolution: {integrity: sha512-1GS3+plfm2giB3PqokiqyydyqYTPLcCQIKSkp0TdMNRh3KVk7rqRM6U785FLlVRG7XLmkc0KWr215OY+22K3QA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/json-pack@1.21.0': - resolution: {integrity: sha1-k/jdV/46OpITKzPR6xgtzZ52Kfo=} + resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/json-pack@17.67.0': - resolution: {integrity: sha1-jdj/Zd2ZnF1NJt9GxjkVx73sCTo=} + resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/json-pointer@1.0.2': - resolution: {integrity: sha1-BJy1MKwk6Ey6CFkMXja0McSENAg=} + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/json-pointer@17.67.0': - resolution: {integrity: sha1-dEOVc9wEbgyaOlUvuUs5G8dTE7g=} + resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/util@1.9.0': - resolution: {integrity: sha1-fulVhq7Qp2a3Rs2Ng2PjNsPEfEY=} + resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@jsonjoy.com/util@17.67.0': - resolution: {integrity: sha1-fEKI/DgIIz5Vx2EBAee7RZDN3T8=} + resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha1-T8VsFcWAua233DwzOhNOVAtEv7E=} + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} '@lezer/common@1.2.3': - resolution: {integrity: sha1-E4/N2rFX2D2lV1VIUQF8bB5WZ/0=} + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} '@lezer/cpp@1.1.3': - resolution: {integrity: sha1-MCmlQvRiT7oO0o+WURs0uOeQY1I=} + resolution: {integrity: sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==} '@lezer/css@1.2.1': - resolution: {integrity: sha1-s19tBFnpvk3hzfTTEypZ79fPK6M=} + resolution: {integrity: sha512-2F5tOqzKEKbCUNraIXc0f6HKeyKlmMWJnBB0i4XW6dJgssrZO/YlZ2pY5xgyqDleqqhiNJ3dQhbrV2aClZQMvg==} '@lezer/go@1.0.1': - resolution: {integrity: sha1-MAS1T15Mlxnty6mGU/OAuvjA0aI=} + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} '@lezer/highlight@1.2.1': - resolution: {integrity: sha1-WW+o+a61imCL4KVj6WDDc8vyP4s=} + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} '@lezer/html@1.3.10': - resolution: {integrity: sha1-G+mgKab+g1yCOyCpikSaYwQWsq8=} + resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} '@lezer/java@1.1.3': - resolution: {integrity: sha1-nv1qKbQULQfyEQdqb7XoBhyF4Uc=} + resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==} '@lezer/javascript@1.5.1': - resolution: {integrity: sha1-KkJKbsKfHU7zw0y8zFRH43Nhitg=} + resolution: {integrity: sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==} '@lezer/json@1.0.3': - resolution: {integrity: sha1-53OgEq0AiPvwfOSc+6h1zJ5bwF8=} + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} '@lezer/lr@1.4.2': - resolution: {integrity: sha1-kx6j3qjp3oTpB4EAHa4w3qn/Fyc=} + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} '@lezer/markdown@1.4.3': - resolution: {integrity: sha1-p0LtXngqxJE6Yh39HmqOQJ9N1Yk=} + resolution: {integrity: sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==} '@lezer/php@1.0.2': - resolution: {integrity: sha1-fCkWMfwef37+mZd1IrxIvccyZYo=} + resolution: {integrity: sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==} '@lezer/python@1.1.18': - resolution: {integrity: sha1-+gL79JJ0HILcLcmKCgQr0NTX8dM=} + resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} '@lezer/rust@1.0.2': - resolution: {integrity: sha1-zJp1YF1nGCoOeZrECxllph3MbvA=} + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} '@lezer/sass@1.1.0': - resolution: {integrity: sha1-yC5mCqWzkwPR3nY5I675ef7x06Q=} + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} '@lezer/xml@1.0.6': - resolution: {integrity: sha1-kIwgOSMoj4VOuOL02bBsQ36GELk=} + resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} '@lezer/yaml@1.0.3': - resolution: {integrity: sha1-sjdwq0KzkAVtprGH2GG5mP1gsf8=} + resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} '@lit-labs/ssr-dom-shim@1.5.1': - resolution: {integrity: sha1-MWaQDA1IHwPW1BM2huD+v3YNUh0=} + resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} '@lit/reactive-element@2.1.2': - resolution: {integrity: sha1-TGr5BCYDyY5hupCylGB5BNUbYcs=} + resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha1-0Hct4apoCgv7m6LzK0yCjHhXy50=} + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} engines: {node: '>= 12.13.0'} '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha1-6KMsMKldIMKxu2NcxYCYGgY4mFg=} + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} '@manypkg/find-root@2.2.3': - resolution: {integrity: sha1-Ppvl3/SgCMIoZJo04q9lKI/xPCY=} + resolution: {integrity: sha512-jtEZKczWTueJYHjGpxU3KJQ08Gsrf4r6Q2GjmPp/RGk5leeYAA1eyDADSAF+KVCsQ6EwZd/FMcOFCoMhtqdCtQ==} engines: {node: '>=14.18.0'} '@manypkg/get-packages@2.2.2': - resolution: {integrity: sha1-brFvwcz4yQOv9c3k5TXHV06WWw0=} + resolution: {integrity: sha512-3+Zd8kLZmsyJFmWTBtY0MAuCErI7yKB2cjMBlujvSVKZ2R/BMXi0kjCXu2dtRlSq/ML86t1FkumT0yreQ3n8OQ==} engines: {node: '>=14.18.0'} '@manypkg/tools@1.1.2': - resolution: {integrity: sha1-FdCrtmqgTO6D5/51g51W3f3VGW8=} + resolution: {integrity: sha512-3lBouSuF7CqlseLB+FKES0K4FQ02JrbEoRtJhxnsyB1s5v4AP03gsoohN8jp7DcOImhaR9scYdztq3/sLfk/qQ==} engines: {node: '>=14.18.0'} '@marijn/find-cluster-break@1.0.2': - resolution: {integrity: sha1-d1N0MGEW1RwMUAuMT6zg+aBHUtg=} + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} '@mermaid-js/parser@1.1.1': - resolution: {integrity: sha1-MPOraNgWkS5D8kWnKg1Agb9p2WY=} + resolution: {integrity: sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==} '@microsoft/microsoft-graph-client@3.0.7': - resolution: {integrity: sha1-U1UH3y20C9ftJKZw3GjIfGKBd6Q=} + resolution: {integrity: sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==} engines: {node: '>=12.0.0'} peerDependencies: '@azure/identity': '*' @@ -8816,87 +8834,87 @@ packages: optional: true '@microsoft/microsoft-graph-types@2.40.0': - resolution: {integrity: sha1-ZfUWAKtFrOl9exNoxH+eD4Nf3co=} + resolution: {integrity: sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==} '@milkdown/components@7.13.1': - resolution: {integrity: sha1-9QCJ+7XgqE5zd/GmIm7RBKbGFqE=} + resolution: {integrity: sha512-qWQFg0KvPeGmlnsW9Y7w97I5HBwsaYqGaQMEyECkVZNL/CTT7uEdm9ofeLAeL9sNWya9WQYFplr0kJH6laiNKw==} peerDependencies: '@codemirror/language': ^6 '@codemirror/state': ^6 '@codemirror/view': ^6 '@milkdown/core@7.13.1': - resolution: {integrity: sha1-5AZIRiI6t3jWFPvTv1targTTJas=} + resolution: {integrity: sha512-cSFH/Ob1kW9I7Q8vDw1Xd6JpIQNB7EZx+PMtEeEQbX/2mUYoDWrfzUeeKJPhtdyr77iN3B609Ok9Xn3bzZnoOg==} '@milkdown/crepe@7.13.1': - resolution: {integrity: sha1-UXs5FiNfWhialuhrpmmSNJdYFG4=} + resolution: {integrity: sha512-jMNwQ4BJVpI0VQ6/2rO6U1l8bC69VfiUUghqHnjt8+f81Dz+VxeROLfkmSBvqzq5rdknDidPDzr4OUFGoC4a1g==} '@milkdown/ctx@7.13.1': - resolution: {integrity: sha1-6qThOmfhSkO2IyVd03x75VvAc50=} + resolution: {integrity: sha512-S3u0KBz/6K4er5RaRJhZIof1pGK52KwvdPKL//l2++mcC92NG3FAsntllgsm3+AZLpYrk2DjlSqaYBCFvQ5O4g==} '@milkdown/exception@7.13.1': - resolution: {integrity: sha1-EiKnbI+ZD2HPTMvruru+0aQvdPM=} + resolution: {integrity: sha512-3nfGRwXZcLC3dQyGiIJDNhgfpaU134dKX+qJuoCsFWsSib53ogkBdCVXma8d7REXtoMCLbcQWzUbfl+0Mn3TGA==} '@milkdown/kit@7.13.1': - resolution: {integrity: sha1-MTYxjas0BtP36QgORFMfk/J6bK0=} + resolution: {integrity: sha512-80kF0Ay6R3kBbysBA41VOYoqXPrz8o/LrxmB6omiJZ+93FrNdMoXx5GfNT4lKsOW1W5vtPvdqffZzQxW0wwzGA==} '@milkdown/plugin-block@7.13.1': - resolution: {integrity: sha1-2JA0/ffSp55d1dR5z1ymjMPne9o=} + resolution: {integrity: sha512-HG/RJ9C/EHvky0/rio9oSlud89u4ggj9CvWAbiBjyMMeO0V0rDGGsVF+1sTtB6Gvtm7ryk/KDUUkM5a3zm8s4w==} '@milkdown/plugin-clipboard@7.13.1': - resolution: {integrity: sha1-hnMQkW4/1X7DJzpRd4sT8LM8uCw=} + resolution: {integrity: sha512-/WoPv4BDNufO6uavnwqMSYAQTgFvy2Vw5e8n1+Qba/kpjJtbXiH/9zrPA1w42SivxRkOSI0lfSm6OXQnQS5Z8Q==} '@milkdown/plugin-collab@7.13.1': - resolution: {integrity: sha1-+4ZDxTO6JuX8NDzENjvYX8y3IWM=} + resolution: {integrity: sha512-DPer8v2il8c/kxOOmbS2+suZNO4LTJMOpX0sNubz7MdNdVt+8+6GWIjpjoBAkqrDxEbNwjJ69mjBUQk/fiGYiQ==} peerDependencies: y-prosemirror: '*' y-protocols: '*' yjs: '*' '@milkdown/plugin-cursor@7.13.1': - resolution: {integrity: sha1-jhhMEt3miLX0jXJrUvchQUKdcBY=} + resolution: {integrity: sha512-ETJW+TLrrJCSf9+Hq4zwjqrW2z/RJBFeNyNoqen8PIpfmWJCM4EqyHLWw2qscJlx2fBDHnIAHCVnbu6Tmk1atg==} '@milkdown/plugin-history@7.13.1': - resolution: {integrity: sha1-04RdCWR6WjGXZg9O2+4qFycmoAA=} + resolution: {integrity: sha512-C2n3kKWWdEcIlk/HiV9WMK5f9PdxR2yzf3Sg3ibexhhAi4fp0bf0BJNupQVuFqYQPBmXL6rW4lFs9zVjHn/yEg==} '@milkdown/plugin-indent@7.13.1': - resolution: {integrity: sha1-Nmxt8AuOp3EeLJiKuI11V9WnYxQ=} + resolution: {integrity: sha512-X6IKT/KLNWKww+tinNjBye2ClfaDmWyxu9dL6bz37l5HgBVZ9mL9HS97YIkxh/5YiivYwl98JmWba2ahKdXB5A==} '@milkdown/plugin-listener@7.13.1': - resolution: {integrity: sha1-QPQpFj7o6O2AZje1TaB8jEYbWBQ=} + resolution: {integrity: sha512-CCsFtRXXnIwipVCjyBS1c/lthRq+Uiqw/x9GacvGSixNdwGfYn4lD+ujax9WwmNviANHakNZdL3y5aOVPZZ84A==} '@milkdown/plugin-slash@7.13.1': - resolution: {integrity: sha1-opThiburlPJOk0nta/JhMPuGWrs=} + resolution: {integrity: sha512-Up91kxFyyPsfjfQ56sNfphaYvxsPdFaEOY6Q37FJYCwmdjIZ9/12FLDQJOr0Bh58Z6R1DHE7GgBQ4c/voQc5Sw==} '@milkdown/plugin-tooltip@7.13.1': - resolution: {integrity: sha1-PMUX25+zZOvPCa4t2AeWhatYEh0=} + resolution: {integrity: sha512-XvbimMl9EaRsmCpdNnDomeqKqkSuSZMYrn1XAxouhb4Q2DMOEHC4J3prnnndrekbZD2ndlQPONb3asndhKpTXg==} '@milkdown/plugin-trailing@7.13.1': - resolution: {integrity: sha1-3U536PKk9WOcoRC+EIfJEdcpIZw=} + resolution: {integrity: sha512-Aon8tN4qQl76aX7C6jxi1NqJvjs/q8vAK04iO8qmJ+SzY0d7EaPcxZicTJitXTDI1W7VKSvGMAw1YP2qrH8now==} '@milkdown/plugin-upload@7.13.1': - resolution: {integrity: sha1-1Eyh229lnDDiZjbLEkpeFg1C9c4=} + resolution: {integrity: sha512-jKyoDNroEOdpSWrrhKrbAY41y9k0jbyLReeNRESSbKF61Rf04v9dfRQBNu6GdLpHqL52AeI9TnQh7rcNFtrORA==} '@milkdown/preset-commonmark@7.13.1': - resolution: {integrity: sha1-+OT7FNKbBHzDScxGrSRp/ggvI40=} + resolution: {integrity: sha512-KK0MOpoCDw1hEGXZiZ26sLPLIJnlzchdGqgxWD5KPGCa9Yj9aGOUqHDGVoH6aIhPBFOYV8nisZkHUGCSufVYnQ==} '@milkdown/preset-gfm@7.13.1': - resolution: {integrity: sha1-RliS8prhQB/Qw/VTuMDkMjn3Alo=} + resolution: {integrity: sha512-y9MPhxyAAu6REJiGT+n/yXmeY7agg0GqbLNb/49bXuY6KAnLiBJNGd8s/rAHKQ08siVHxuUjMI6BSIDFCSShDw==} '@milkdown/prose@7.13.1': - resolution: {integrity: sha1-SBn4pnlAoOReGPeoFyCMl+GawPg=} + resolution: {integrity: sha512-M3jiySoOW1jDkaT835KU+aWzHQZqmZ/o0FVm5Dkk8bZVI0v+wVEcE4H+1H8SskiP5s8gHgAMDUDrIkLifSeKvQ==} '@milkdown/theme-nord@7.13.1': - resolution: {integrity: sha1-Amc5fR8tBm22XNm7Ro8JbzAPj8U=} + resolution: {integrity: sha512-P41MvWh6j0jnJlBxo03Xyzmf4YCiSlPoY5fGvU95jTOigHRTMuF5pdp2Ha2Y3RoVKnjKB+cdAVpwtyfMpoVpnw==} '@milkdown/transformer@7.13.1': - resolution: {integrity: sha1-UZm8WmJJCoG4Q/boWQvuLTQW9hA=} + resolution: {integrity: sha512-h9IczhBuDbUrygzi8oCTb607C9kufS8nbLcQQ/pFvHMIjn92uejo84mAc4IWFmmxoXzVRj0/cDFt1KJTTkga+A==} '@milkdown/utils@7.13.1': - resolution: {integrity: sha1-VB5qUzLNF9mLz5oJqPJ3g5r3csQ=} + resolution: {integrity: sha512-4ct/ovL0h/0kuLFligLdZgt3qtWbNZEHnIKO321qvkaGLx1HmzbMpiL6V8tq7iDqNKeoqAzFb/2vnUeYGv1Ndw==} '@modelcontextprotocol/sdk@1.26.0': - resolution: {integrity: sha1-WzXXMGISXxJsxwsL6Dy6tTvN3nQ=} + resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -8906,7 +8924,7 @@ packages: optional: true '@modelcontextprotocol/sdk@1.29.0': - resolution: {integrity: sha1-eXhti1JeJp3oUKyCsfH3V/ORX0Q=} + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -8916,526 +8934,526 @@ packages: optional: true '@modelcontextprotocol/server-filesystem@2026.1.14': - resolution: {integrity: sha1-zHun4ONKr9FTBI6KITxwMLlT1oM=} + resolution: {integrity: sha512-bGAfu3fWRVeF10NxvPhFBDlRen6ExSx6YkKJzoVgQMNrbdVVV4okfGGQ3KBRu9ygXYfw5/N9ermHAJXA0uys+g==} hasBin: true '@mongodb-js/saslprep@1.2.2': - resolution: {integrity: sha1-CVBvKcwqmdnXuVHKp//8h+UiptM=} + resolution: {integrity: sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==} '@mozilla/readability@0.6.0': - resolution: {integrity: sha1-E0484/8WdnFuVQ3guN6Ve8xZIIs=} + resolution: {integrity: sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==} engines: {node: '>=14.0.0'} '@napi-rs/canvas-android-arm64@0.1.72': - resolution: {integrity: sha1-vByo4D7SymTYAwuQ+R+gmF6+llo=} + resolution: {integrity: sha512-OW99TDJEdfOhpJWQ7SXFsQi1BXd6UFuWM8AoQvJ0SQMHWY/iwuopmb1UqGV6Df9aM/SWxvCWBN/onjeCM8KVKQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] '@napi-rs/canvas-darwin-arm64@0.1.72': - resolution: {integrity: sha1-3Ett1Bq6ObuF27J57nM5DA9YWHY=} + resolution: {integrity: sha512-gB8Pn/4GdS+B6P4HYuNqPGx8iQJ16Go1D6e5hIxfUbA/efupVGZ7e3OMGWGCUgF0vgbEPEF31sPzhcad4mdR5g==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] '@napi-rs/canvas-darwin-x64@0.1.72': - resolution: {integrity: sha1-UviBC7zuWmg9sxzlEfcUlp/KVEk=} + resolution: {integrity: sha512-x1zKtWVSnf+yLETHdSDAFJ1w6bctS/V2NP0wskTTBKkC+c/AmI2Dl+ZMIW11gF6rilBibrIzBeXJKPzV0GMWGA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] '@napi-rs/canvas-linux-arm-gnueabihf@0.1.72': - resolution: {integrity: sha1-REpnSdEIVoU/ZmTWY7MAMcGvg7c=} + resolution: {integrity: sha512-Ef6HMF+TBS+lqBNpcUj2D17ODJrbgevXaVPtr2nQFCao5IvoEhVMdmVwWk5YiI+GcgbAkg5AF3LiU47RoSY5yg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] '@napi-rs/canvas-linux-arm64-gnu@0.1.72': - resolution: {integrity: sha1-dqP4Pyr7RKq7vdfx8nGrji3N60c=} + resolution: {integrity: sha512-i1tWu+Li1Z6G4t+ckT38JwuB/cAAREV6H8VD3dip2yTYU+qnLz6kG4i+whm+SEQb1e4vk3xA1lKnjYx3jlOy8g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.72': - resolution: {integrity: sha1-g8HYY9DLbHtldZ7e3tTsMZjudfA=} + resolution: {integrity: sha512-Mu+2hHZAT9SdrjiRtCxMD/Unac8vqVxF/p+Tvjb5sN1NZkLGu+l7WIfrug8aeX150OwrYgAvsR4mhrm0BZvLxg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.72': - resolution: {integrity: sha1-Bc2vO7Q4NFgaSCR3wB4h/XaAuVQ=} + resolution: {integrity: sha512-xBPG/ImL58I4Ep6VM+sCrpwl8rE/8e7Dt9U7zzggNvYHrWD13vIF3q5L2/N9VxdBMh1pee6dBC/VcaXLYccZNQ==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.72': - resolution: {integrity: sha1-7tgu9Mct71636zaGN40vfWwUKug=} + resolution: {integrity: sha512-jkC8L+QovHpzQrw+Jm1IUqxgLV5QB1hJ1cR8iYzxNRd0TOF7YfxLaIGxvd/ReRi9r48JT6PL7z2IGT7TqK8T4w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.72': - resolution: {integrity: sha1-vba03KCLqUXvYVsnkRwkGnrF4Xs=} + resolution: {integrity: sha512-PwPdPmHgJYnTMUr8Gff80eRVdpGjwrxueIqw+7v4aeFxbQjmQ+paa2xaGedFtkvdS2Dn5z8a0mVlrlbSfec+1Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] '@napi-rs/canvas-win32-x64-msvc@0.1.72': - resolution: {integrity: sha1-KZ/MiJzqhS2XK19rk6faFE3Zrqg=} + resolution: {integrity: sha512-hZhXJZZ/2ZjkAoOtyGUs3Mx6jA4o9ESbc5bk+NKYO6thZRvRNA7rqvT9WF9pZK0xcRK5EyWRymv8fCzqmSVEzg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] '@napi-rs/canvas@0.1.72': - resolution: {integrity: sha1-owBt/7OVDEZcMVgZhuiAo2uIRUs=} + resolution: {integrity: sha512-ypTJ/DXzsJbTU3o7qXFlWmZGgEbh42JWQl7v5/i+DJz/HURELcSnq9ler9e1ukqma70JzmCQcIseiE/Xs6sczw==} engines: {node: '>= 10'} '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha1-7TOAbQ+b6Y3HbQw9T9hy/acBtdU=} + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 '@noble/hashes@1.4.0': - resolution: {integrity: sha1-RYFKoynzDk/guklCb0nfzN0GZCY=} + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} '@nodable/entities@2.1.0': - resolution: {integrity: sha1-9UPlxkRnINTPnkmKgwGd0VmXO8I=} + resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=} + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=} + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=} + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} '@nornagon/put@0.0.8': - resolution: {integrity: sha1-nUl+xGyTZKzD+LWao8+O5BNK4zc=} + resolution: {integrity: sha512-ugvXJjwF5ldtUpa7D95kruNJ41yFQDEKyF5CW4TgKJnh+W/zmlBzXXeKTyqIgwMFrkePN2JqOBqcF0M0oOunow==} engines: {node: '>=0.3.0'} '@oclif/core@4.5.2': - resolution: {integrity: sha1-TbijZfp+njOvJyKU9xCn8/JVOOI=} + resolution: {integrity: sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==} engines: {node: '>=18.0.0'} '@oclif/core@4.8.0': - resolution: {integrity: sha1-vej60AAZyMCo4neHtLQsRnCEJ4U=} + resolution: {integrity: sha512-jteNUQKgJHLHFbbz806aGZqf+RJJ7t4gwF4MYa8fCwCxQ8/klJNWc0MvaJiBebk7Mc+J39mdlsB4XraaCKznFw==} engines: {node: '>=18.0.0'} '@oclif/plugin-autocomplete@3.2.24': - resolution: {integrity: sha1-O/d2WyLPt+hwLz3hPCiEXNXw8Xk=} + resolution: {integrity: sha512-KGz7ypHhahRJWy0sB+mNvLLJiMWEt4pgjCFIpcBhkZhc090H4e4QhGR6Xp2430rQgStPcnUa0BYcVZJPojAsDQ==} engines: {node: '>=18.0.0'} '@oclif/plugin-commands@4.1.21': - resolution: {integrity: sha1-YQidv4acZLcUzGracdPA3zOucN0=} + resolution: {integrity: sha512-7pmqqYzpgLX/YNt1v6NIE4InNCtZl7prUcUGfMkhyDHO8ss1O0xcXhNOiVK7ytXZKYWuPJMd+uA16ytThqXtOQ==} engines: {node: '>=18.0.0'} '@oclif/plugin-help@6.2.26': - resolution: {integrity: sha1-FtTF1Tjh7Shko8qP1ZMxaUtfhtI=} + resolution: {integrity: sha512-5KdldxEizbV3RsHOddN4oMxrX/HL6z79S94tbxEHVZ/dJKDWzfyCpgC9axNYqwmBF2pFZkozl/l7t3hCGOdalw==} engines: {node: '>=18.0.0'} '@oclif/plugin-not-found@3.2.65': - resolution: {integrity: sha1-1VhMRTp7EuJ9DXnVvYCjPM0ZD18=} + resolution: {integrity: sha512-WgP78eBiRsQYxRIkEui/eyR0l3a2w6LdGMoZTg3DvFwKqZ2X542oUfUmTSqvb19LxdS4uaQ+Mwp4DTVHw5lk/A==} engines: {node: '>=18.0.0'} '@oclif/table@0.4.6': - resolution: {integrity: sha1-Tgf8Ed6bijGHpepD7c5xxCgRq34=} + resolution: {integrity: sha512-NXh72vHHYnDrWPmVfh4i7kDydz3CXm/tSAr17fWhmWfMM+8jGn5uo6FXtvB0cd9s4skvDqzoRcsRwOeR73zIKA==} engines: {node: '>=18.0.0'} '@oozcitak/dom@2.0.2': - resolution: {integrity: sha1-D0R/C3NqpvNsVVa6gRpE5Wxxwmw=} + resolution: {integrity: sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==} engines: {node: '>=20.0'} '@oozcitak/infra@2.0.2': - resolution: {integrity: sha1-4vHMDuyjrFzVUfAyal9m8AzxE4s=} + resolution: {integrity: sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==} engines: {node: '>=20.0'} '@oozcitak/url@3.0.0': - resolution: {integrity: sha1-oDyVnGfiirqeKbLTXNUNJstfLMQ=} + resolution: {integrity: sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==} engines: {node: '>=20.0'} '@oozcitak/util@10.0.0': - resolution: {integrity: sha1-9rQEctlsIQCUpVbuXMuOd/G9MK8=} + resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==} engines: {node: '>=20.0'} '@open-wc/dedupe-mixin@2.0.1': - resolution: {integrity: sha1-O80AnGOkcT2M5OMEpy6zOXfjdKw=} + resolution: {integrity: sha512-+R4VxvceUxHAUJXJQipkkoV9fy10vNo+OnUnGKZnVmcwxMl460KLzytnUM4S35SI073R0yZQp9ra0MbPUwVcEA==} '@open-wc/scoped-elements@3.0.6': - resolution: {integrity: sha1-m6SjFtOfKyncGI80p/Xk4fyd3tE=} + resolution: {integrity: sha512-w1ayJaUUmBw8tALtqQ6cBueld+op+bufujzbrOdH0uCTXnSQkONYZzOH+9jyQ8auVgKLqcxZ8oU6SzfqQhQkPg==} '@open-wc/semantic-dom-diff@0.20.1': - resolution: {integrity: sha1-sbt4vkVb2Z+wNNm6rbuVnX0SQDA=} + resolution: {integrity: sha512-mPF/RPT2TU7Dw41LEDdaeP6eyTOWBD4z0+AHP4/d0SbgcfJZVRymlIB6DQmtz0fd2CImIS9kszaMmwMt92HBPA==} '@open-wc/testing-helpers@3.0.1': - resolution: {integrity: sha1-81ZpD8NJVGdQOjCiFyKIqouu9vg=} + resolution: {integrity: sha512-hyNysSatbgT2FNxHJsS3rGKcLEo6+HwDFu1UQL6jcSQUabp/tj3PyX7UnXL3H5YGv0lJArdYLSnvjLnjn3O2fw==} '@open-wc/testing@4.0.0': - resolution: {integrity: sha1-v6USEHmfhq0aR8LezmufFd1Ru5Q=} + resolution: {integrity: sha512-KI70O0CJEpBWs3jrTju4BFCy7V/d4tFfYWkg8pMzncsDhD7TYNHLw5cy+s1FHXIgVFetnMDhPpwlKIPvtTQW7w==} '@opentelemetry/api@1.9.0': - resolution: {integrity: sha1-0D66aCc9wPdQnio9XLoh6uEDef4=} + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} '@opentelemetry/core@2.8.0': - resolution: {integrity: sha1-9uht42iL21Smyo9JNTY6W1iK6Rw=} + resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' '@opentelemetry/semantic-conventions@1.34.0': - resolution: {integrity: sha1-i2pGaBs4pNWUchQDOsSBKDKMFzg=} + resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} engines: {node: '>=14'} '@oxc-parser/binding-android-arm-eabi@0.137.0': - resolution: {integrity: sha1-RBwU6z6tP/xu7JPYl/2z8aHx0po=} + resolution: {integrity: sha512-KDs+0VPdEmasOkpuJHW9V5WCF+cvYdMQv2Jd+aJXt+cxIx12NToRQRbXaRwUEDsZw+/jMk81Ve8ZFbjUkJTOwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] '@oxc-parser/binding-android-arm64@0.137.0': - resolution: {integrity: sha1-u4PSHTWG3ETXYDZ6RhA6MtnSMCY=} + resolution: {integrity: sha512-WhALNzfy3x/RfC6bsqX+csavuUY0yHHE7XfgPE5M542uhoBZUUoGTPG+nkMbGoG4+gcfss5s7urMyn5QBHu0sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] '@oxc-parser/binding-darwin-arm64@0.137.0': - resolution: {integrity: sha1-spcPFkc2QbN7rgkpv7JotbREL7I=} + resolution: {integrity: sha512-bFPr5hgmNMOMoyPTGtdsK4Ug21RovIPojRMgDDhSp1LtCnc/DkLwGONKjgRjszg677RlGnkYSviQ8hHaUPOVYA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] '@oxc-parser/binding-darwin-x64@0.137.0': - resolution: {integrity: sha1-+/JeQPMx3LtuXKyT+75TxVfmHys=} + resolution: {integrity: sha512-CL5dMm1asqXIDZHg14FLxj3Mc36w8PI7xCWh1uA4is6z8g2XrIILoTcQYOxDbwzuk34RDPX5IAGUxZr6LA9KAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] '@oxc-parser/binding-freebsd-x64@0.137.0': - resolution: {integrity: sha1-RqPpnBnYWitYzUiXJ5kmhaanG10=} + resolution: {integrity: sha512-79h8rYGnSlKPGWo7mHr2ixO6ea7aW8B0CT965SZ8SLbNnCOH5aOYBTeVXUY6eMvEaiLyWr8Skuiugr5pDYgLGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] '@oxc-parser/binding-linux-arm-gnueabihf@0.137.0': - resolution: {integrity: sha1-29njspdVO18mFiJIoUMYdP4ETvE=} + resolution: {integrity: sha512-ASgmlSimhGyr0lksgVIo6hibz1obnDq4qJbiMX/AzltfgPnanRrzG1Q+23g8ljOHOjv6dsznkUuCYL3gg0sY1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] '@oxc-parser/binding-linux-arm-musleabihf@0.137.0': - resolution: {integrity: sha1-xAIxMelPCPZaetOgjEGuohwMfos=} + resolution: {integrity: sha512-AU2J9aa22Sx32wRGnDjybOU9TQXXQUud5sdUi+ZB0XxwM8aToWLweV+yA0wlQm0yIUVqljquqoHCYEq9II8gJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] '@oxc-parser/binding-linux-arm64-gnu@0.137.0': - resolution: {integrity: sha1-XzCWcAa+Hh5VTv/DPCBYItl0src=} + resolution: {integrity: sha512-GdEtiG89yMr7XkUGxifgodXEEm2f+xW2f9CpDjlgAnBOwhTmrpQMvhOGobLVKUyzf/qHBXW16smk5zbF3nZU6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.137.0': - resolution: {integrity: sha1-LmUvd/ykkSaiTfxK7Ow/tHDTf34=} + resolution: {integrity: sha512-EGJ+Bs8iXx8KBH8DQ5BLoEm5lnHaYjlh4/8j8vFhrr/6z4tqONy5BZDzLpKmmNWlN6Hlc5r8YOuBVHqZ9vRFEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.137.0': - resolution: {integrity: sha1-UnlPALuxjjZfFvOU/lSWqkbA+JA=} + resolution: {integrity: sha512-vzFUQENy/fnbSe5DZWovq6tIBc1uhuMztanSW6rz1e9WdQE4gHwYuD7ZII6JnrJifd1R3RSoqiZbgRFlVL2tYQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.137.0': - resolution: {integrity: sha1-/0NM5LzDCgHS2Bu1SR3tzs9N/SE=} + resolution: {integrity: sha512-SfVI14HBQs9gtLcUD5hTt5hsNbdrqSUNg9S8muN+LhVQ5nf1WwH3hAoK6B9NKgdYgWAQSXFXGiiBedQ4r/BKuw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.137.0': - resolution: {integrity: sha1-LZ1N5k7GCnWQ/EDBLNNjERsfDB4=} + resolution: {integrity: sha512-e7Ppy4FCIFNQxT/ikSeIWFoQ0l+N9vgtRBtLcyZXeolTzApyVoPqEXsYPrcdM/9i0Bwk8knvYd37vaEMxHyi6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.137.0': - resolution: {integrity: sha1-9eY5e7wH982X7zMu8qABGmCdLgM=} + resolution: {integrity: sha512-Bho5qFwdhqsIFR7gipYEUlqvi3SRrY8sugxXig380MIaakBB1PyU9+7dBiBVScfImTNWhijUxdBwqrprGdq5WA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.137.0': - resolution: {integrity: sha1-BYtliRhlSb2ZnEJFzasOJjlnbPQ=} + resolution: {integrity: sha512-36mGWtg7PyFzjJwGDkH6/F4o2nIDEoKXLPr/X/lwqklkomQwJJt1I5GJVmGhovUEmgPK5WAeAZMqlFCehwiy9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.137.0': - resolution: {integrity: sha1-bLFc3crP7sCtxrPDyesBfo3gJX0=} + resolution: {integrity: sha512-/Jqx6+N7A44n2BdvUr7pXhVr2vFjs6WGH3unZRczwrfiH0H1zY0QwKQMG/dtRiTlKGDKGukznPT8lx84/oEsZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.137.0': - resolution: {integrity: sha1-05EeuZJZVSoB2NLH40yqaxvLrYk=} + resolution: {integrity: sha512-9Uj0qHNNl+OgT1UTGwF7ixIXU6T1u2SbMidmgPy/h1h/fl2gRS6YpAxxY1gwHofcWjoTwkoMFd8xs5Vuj6GOFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] '@oxc-parser/binding-wasm32-wasi@0.137.0': - resolution: {integrity: sha1-ON/pxgjQrRmwEEV4Oi8i7PDn/II=} + resolution: {integrity: sha512-gW2vfkytNGgMVADiuzdvOfw0mWG9za20F/1fCJsif5aBMAvWJTSbpIXbIe0XkOe0VENk+PadpQ7cZgUy2sUJcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] '@oxc-parser/binding-win32-arm64-msvc@0.137.0': - resolution: {integrity: sha1-3HNMmPN7Ez65qgonQ8fnsk4SH9I=} + resolution: {integrity: sha512-x+pFANF0yL5uK/6T7lu6SlR5qid6sp//eZXKLq5iNsIE+EQg6EaS8/wsW7E91nXXjpnPhSoMOHXShSVhGRdn8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] '@oxc-parser/binding-win32-ia32-msvc@0.137.0': - resolution: {integrity: sha1-kUjC23v/rKnwmx3LWPAdEa6xaEE=} + resolution: {integrity: sha512-sQUqym80PFi6McRsIqfJrSu2JrSClEZIXXD+/FjAFoULEKzOPsldIdFBG96xdX8aVMzCNQ9792FPx3MfkEIrFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] '@oxc-parser/binding-win32-x64-msvc@0.137.0': - resolution: {integrity: sha1-NICQDG/KToQwF/bemR/mr1e3NYw=} + resolution: {integrity: sha512-2AsevxlvNN4WKxpEn3RtqD5zbqMaXF+T7JXblsP4gVuY+vC9dXS4ED/PwfRCliFqoeisYS3Iro4DHzxr0TEvVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] '@oxc-project/types@0.137.0': - resolution: {integrity: sha1-Vud/i7Ih+gXxixzTTXP5TwlUp3M=} + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} '@oxc-resolver/binding-android-arm-eabi@11.21.3': - resolution: {integrity: sha1-98pC2UYU7sl+ILmvqnFz79YBnuk=} + resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==} cpu: [arm] os: [android] '@oxc-resolver/binding-android-arm64@11.21.3': - resolution: {integrity: sha1-9yNoLFm03+FD7cttNk1aA94+lJ4=} + resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==} cpu: [arm64] os: [android] '@oxc-resolver/binding-darwin-arm64@11.21.3': - resolution: {integrity: sha1-58TzdByHkRxAxCmiCgW3gTacq6o=} + resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==} cpu: [arm64] os: [darwin] '@oxc-resolver/binding-darwin-x64@11.21.3': - resolution: {integrity: sha1-jSNFzS2NTc+lBCLibzsAja6Rv8E=} + resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==} cpu: [x64] os: [darwin] '@oxc-resolver/binding-freebsd-x64@11.21.3': - resolution: {integrity: sha1-t1VMOreQOpWq1hC6XRY5lvS3EJU=} + resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==} cpu: [x64] os: [freebsd] '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': - resolution: {integrity: sha1-KnF9b3m911pczch1vNCp/uWF8cM=} + resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==} cpu: [arm] os: [linux] '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': - resolution: {integrity: sha1-LP1SNN4pE8KAXkK1+uWqk1TZm6k=} + resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==} cpu: [arm] os: [linux] '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': - resolution: {integrity: sha1-MhcvvRtm191tygX82Fzuew4yBgo=} + resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==} cpu: [arm64] os: [linux] libc: [glibc] '@oxc-resolver/binding-linux-arm64-musl@11.21.3': - resolution: {integrity: sha1-rDHkiUy7DAC9pb4eUmZBBzkjv9w=} + resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==} cpu: [arm64] os: [linux] libc: [musl] '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': - resolution: {integrity: sha1-qK5+zBElkYEk0YdJ79caTgTgqFY=} + resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==} cpu: [ppc64] os: [linux] libc: [glibc] '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': - resolution: {integrity: sha1-0kztmzIfZg8ahZ+ZEt6rP4f9MRU=} + resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==} cpu: [riscv64] os: [linux] libc: [glibc] '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': - resolution: {integrity: sha1-sgzWttTGHqYnGJvJOaxfRppabIk=} + resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==} cpu: [riscv64] os: [linux] libc: [musl] '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': - resolution: {integrity: sha1-0/SuyCtMuhh+UOIRxg+Va8YRb38=} + resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==} cpu: [s390x] os: [linux] libc: [glibc] '@oxc-resolver/binding-linux-x64-gnu@11.21.3': - resolution: {integrity: sha1-rdO3YpPvHolZ4AvGtiradm4YSFw=} + resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==} cpu: [x64] os: [linux] libc: [glibc] '@oxc-resolver/binding-linux-x64-musl@11.21.3': - resolution: {integrity: sha1-S0x5vSaIoPmgLAoLZxAV/y98Zfw=} + resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==} cpu: [x64] os: [linux] libc: [musl] '@oxc-resolver/binding-openharmony-arm64@11.21.3': - resolution: {integrity: sha1-PcM6FZqu830td9EN8EWt76tYUt8=} + resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==} cpu: [arm64] os: [openharmony] '@oxc-resolver/binding-wasm32-wasi@11.21.3': - resolution: {integrity: sha1-a8ib4FPijVU9sQCzUFxrDSUZsOw=} + resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==} engines: {node: '>=14.0.0'} cpu: [wasm32] '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': - resolution: {integrity: sha1-Y0XucnpZn+wGLEikO5Rct4huh+o=} + resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==} cpu: [arm64] os: [win32] '@oxc-resolver/binding-win32-x64-msvc@11.21.3': - resolution: {integrity: sha1-0Nox/ORta4VnL6HnUVQA+vzkXho=} + resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==} cpu: [x64] os: [win32] '@peculiar/asn1-cms@2.8.0': - resolution: {integrity: sha1-tIqDiTGSKPkp6azYzujabIWHON4=} + resolution: {integrity: sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==} '@peculiar/asn1-csr@2.8.0': - resolution: {integrity: sha1-ybtd7C6v+CSnBegqSljUXm0sNdA=} + resolution: {integrity: sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==} '@peculiar/asn1-ecc@2.8.0': - resolution: {integrity: sha1-1RqysH7KmODPSS0FHpi70KBxMFo=} + resolution: {integrity: sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==} '@peculiar/asn1-pfx@2.8.0': - resolution: {integrity: sha1-jhibZFXiv55fkhuxUOqG1+fRh10=} + resolution: {integrity: sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==} '@peculiar/asn1-pkcs8@2.8.0': - resolution: {integrity: sha1-pGz4hXubBjiWr6QdK4sqpqB6cKI=} + resolution: {integrity: sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==} '@peculiar/asn1-pkcs9@2.8.0': - resolution: {integrity: sha1-bWJpevC71PMP3w0jtAGPPwliDeM=} + resolution: {integrity: sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==} '@peculiar/asn1-rsa@2.8.0': - resolution: {integrity: sha1-nZjQ/EL+xQEZ0ogbipkl022q6nM=} + resolution: {integrity: sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==} '@peculiar/asn1-schema@2.8.0': - resolution: {integrity: sha1-aWmfhCWbIWFgfKv8NOUSpAI9vvk=} + resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} '@peculiar/asn1-x509-attr@2.8.0': - resolution: {integrity: sha1-vRaOP16Lwj5Wsal4kfny+39zAgQ=} + resolution: {integrity: sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==} '@peculiar/asn1-x509@2.8.0': - resolution: {integrity: sha1-mVip7zXeyEJqq614/+h5jjGLBuI=} + resolution: {integrity: sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==} '@peculiar/utils@2.0.3': - resolution: {integrity: sha1-onykxLc2UuEQ8Zp9FtZk9FilUo4=} + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} '@peculiar/x509@1.14.3': - resolution: {integrity: sha1-LETCuJR0NGr+w4oMKAPsT7jOlZ4=} + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} engines: {node: '>=20.0.0'} '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha1-p36nQvqyV3UUVDTrHSMoz1ATrDM=} + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} '@playwright/test@1.57.0': - resolution: {integrity: sha1-oUcg/6ntfvftvB9geE/GE0rLsAM=} + resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} engines: {node: '>=18'} hasBin: true '@popperjs/core@2.11.8': - resolution: {integrity: sha1-a3kDLnYKCJnNQgRxC+7elyo6GF8=} + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} '@protobufjs/base64@1.1.2': - resolution: {integrity: sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=} + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} '@protobufjs/codegen@2.0.5': - resolution: {integrity: sha1-2TFa188/MKrHC9o8BoRD3G8UNlk=} + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} '@protobufjs/eventemitter@1.1.1': - resolution: {integrity: sha1-1RLLJsCuAmCR7iwRZ/G+b69chCo=} + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} '@protobufjs/fetch@1.1.1': - resolution: {integrity: sha1-TW/ADI+2QBalyBtGnVSQRjUPEGU=} + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} '@protobufjs/float@1.0.2': - resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} '@protobufjs/path@1.1.2': - resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} '@protobufjs/pool@1.1.0': - resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} '@protobufjs/utf8@1.1.1': - resolution: {integrity: sha1-6u5ZABIsEQo9vLcowFlwFKJiF3Q=} + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} '@puppeteer/browsers@2.13.0': - resolution: {integrity: sha1-EPmAxtZe/v93+KPKxuGnrBBgRQA=} + resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} engines: {node: '>=18'} hasBin: true '@puppeteer/browsers@2.6.1': - resolution: {integrity: sha1-11rsUBDK43fF5HQr9eT2KnnCExU=} + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} engines: {node: '>=18'} hasBin: true '@remusao/guess-url-type@1.3.0': - resolution: {integrity: sha1-TRtz8T2R9ed3XEYb54IFmrXag60=} + resolution: {integrity: sha512-SNSJGxH5ckvxb3EUHj4DqlAm/bxNxNv2kx/AESZva/9VfcBokwKNS+C4D1lQdWIDM1R3d3UG+xmVzlkNG8CPTQ==} '@remusao/small@1.3.0': - resolution: {integrity: sha1-FNQ8hO1yNXlRLGqh7ObFdoYeNBg=} + resolution: {integrity: sha512-bydAhJI+ywmg5xMUcbqoR8KahetcfkFywEZpsyFZ8EBofilvWxbXnMSe4vnjDI1Y+SWxnNhR4AL/2BAXkf4b8A==} '@remusao/smaz-compress@1.10.0': - resolution: {integrity: sha1-7YaGxT8MwXzYgs6El96JWAVr2To=} + resolution: {integrity: sha512-E/lC8OSU+3bQrUl64vlLyPzIxo7dxF2RvNBe9KzcM4ax43J/d+YMinmMztHyCIHqRbz7rBCtkp3c0KfeIbHmEg==} '@remusao/smaz-decompress@1.10.0': - resolution: {integrity: sha1-UGCDN8nvlP4y369r/YhZ5vkLm/M=} + resolution: {integrity: sha512-aA5ImUH480Pcs5/cOgToKmFnzi7osSNG6ft+7DdmQTaQEEst3nLq3JLlBEk+gwidURymjbx6DYs60LHaZ415VQ==} '@remusao/smaz@1.10.0': - resolution: {integrity: sha1-+vg9i7xLk6W3C43KMzUm//jzyGQ=} + resolution: {integrity: sha512-GQzCxmmMpLkyZwcwNgz8TpuBEWl0RUQa8IcvKiYlPxuyYKqyqPkCr0hlHI15ckn3kDUPS68VmTVgyPnLNrdVmg==} '@remusao/trie@1.5.0': - resolution: {integrity: sha1-WvrCsD/sRf3XFaJw9z+xRx2dpOs=} + resolution: {integrity: sha512-UX+3utJKgwCsg6sUozjxd38gNMVRXrY4TNX9VvCdSrlZBS1nZjRPi98ON3QjRAdf6KCguJFyQARRsulTeqQiPg==} '@rollup/plugin-node-resolve@15.3.1': - resolution: {integrity: sha1-ZgCJU8JSS+eGqjGdSeMvISgpang=} + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -9444,7 +9462,7 @@ packages: optional: true '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha1-V7obDL2o56PFl6SFPIB7FW4hp7Q=} + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -9453,1023 +9471,1023 @@ packages: optional: true '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha1-pnQsdMfZ1tYE74pI+ZMmtOzaPYI=} + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha1-lyR74JjeTfDBGXEIn9Lt+ApdqM8=} + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha1-Z0hSzxTPEbgFbgsaL06HK1I1ds8=} + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha1-Nt/X7QqvTZ2J2e+YOvcmMkVbAkY=} + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha1-L4fCB0tCICYP21KpmWJG7fxjPCI=} + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha1-m1omUio4qV3AZhbRk51NmnaTeAM=} + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha1-hqpIWThahzQjW15ApI5S13B1jDo=} + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha1-y+cOVubs6NrIPrdztiT8nlpGCXY=} + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha1-0UmSouZTvDJj0oS8ZXm3ookOHEU=} + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha1-L90d3ENOqQrqoIUdIER4m00H9to=} + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha1-ihgeb4n5afIWZqdDzUEUFsgAmec=} + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha1-kEElryurw5X4Bh2qJ7WvH04/L3g=} + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha1-pXlwrGhkyaNEdBGmWCJL3PlIviI=} + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha1-u4TeWyaHBWekJnZm4IiR6Au1amM=} + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha1-ctANLH+zdc41ZOdZ2zPxejW/+rk=} + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha1-TBZu9Y5xj5JFvTGHM4S6FaXBqIM=} + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha1-u1AlzemmHbR4wspyFYCK07znOgk=} + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha1-m2ax+c2VxmJMeI8CHHViaf/tFVI=} + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] libc: [glibc] '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha1-sAfKJV3HFmAX1X19JFGWPwvSP9k=} + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] libc: [musl] '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha1-6LNXstGqLI12qY9fDYieq+k/Tvk=} + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha1-lsLj9KrNPZIZgTKYMf+N3kkiBNw=} + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha1-LYZRSdcG2Tjfi0uPEX5pp3ZG1YE=} + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha1-q+FZO+D6kjJemXHI2kKcXgW5LDY=} + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha1-xK8+lRjJpc1LHBY9yB0K1Ngufqs=} + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha1-RYSoqHspGIpMH+mHqfz3AeJW2Gw=} + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] '@secretlint/config-creator@9.3.2': - resolution: {integrity: sha1-npl8sm+tilYVL5eP9eP8+107VCs=} + resolution: {integrity: sha512-IDUNnM/WVYcvj9PeoZIAvew31HHOtL/paJVkYT2D7G8HyehhTOPMvZSYVr43KXZ/bwUdlJg39C14xPx0NVsJyw==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/config-loader@9.3.2': - resolution: {integrity: sha1-EGyFVS/Y06AQfyG1WisHvytDZG8=} + resolution: {integrity: sha512-5pBUiAFI7lwHzsxPozwhIXVVxj65MbPOth5nSPz2rdpLg/dlti3udlstoq624kqQAlpb196Bhto3JCZGpKduQw==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/core@9.3.2': - resolution: {integrity: sha1-bf0+L3LProiMW+L6ruqmM90eoe8=} + resolution: {integrity: sha512-oBsrFDTwXvFNLjIdcwrbCS/WUhKrGUeTDTSrmQBuaJvLHgCUX8/jEuBhBONkUDgWO3QEHRhi9LDlgnBqTIODEw==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/formatter@9.3.2': - resolution: {integrity: sha1-rmfAkjIux9QirP2vruVLDfG/AZY=} + resolution: {integrity: sha512-JiFhZtg2a4WdkPxCXlq0iGUz18UxzjWnyUMvb/89BvF5m9DKDvmlfHIMLZ3O5205mSJqlpcZxRu7eADJB9fS7Q==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/node@9.3.2': - resolution: {integrity: sha1-4Uob3WlrodVUGJQ3TbJBVZHYRIg=} + resolution: {integrity: sha512-WH3PjYtZ8RumUJFZvM4vYEvpelT2m6WFzCRS3j+nzmH5eSv70+BWSISMB/ouZ5koq1+1zPlnWf/ADEvOwgbebw==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/profiler@9.3.2': - resolution: {integrity: sha1-VCpHeDLVOjjDZv6mp0JzKr3/JO8=} + resolution: {integrity: sha512-cXXWQzA6lIcT0TY53JvbXtH6BltBfqmH5V39byhnbDfZl5FKCB6FHxVVzkctjwss6KMtDXcNLvfz3nKBZaWRDA==} '@secretlint/resolver@9.3.2': - resolution: {integrity: sha1-jY1ydLhDH/5gTxftCN5tW/d04cc=} + resolution: {integrity: sha512-yOi6md3kzpaFw6w2FJTDLoKlUxr1RltBJrb5lheIBDDXy/7C/5gP0K4uMiqamnVg8c9Ac+qlNS5KUar8FDFpdg==} '@secretlint/secretlint-formatter-sarif@9.3.2': - resolution: {integrity: sha1-hGqnOJyGFrLWDixHu5fmeQpLwaM=} + resolution: {integrity: sha512-RtL9BISmhtsHTOcPI6+4AL1sRnUcnMhuQTvFbNPb9malxolIjthUsUKC5WqgT+8JN1tUG7w/diW+/kr5F1T0zw==} '@secretlint/secretlint-rule-no-dotenv@9.3.2': - resolution: {integrity: sha1-WP/mYfDkGe9NxPJZaj2wU4zlnYA=} + resolution: {integrity: sha512-i1npoCy8eha8gU602SFf4S7vPOYMu9/WHCIr41EQvy4C9J+u95bt8COOYmk46e+aPyEDmQGxn2Lp4F2A2BoVLw==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/secretlint-rule-preset-recommend@9.3.2': - resolution: {integrity: sha1-OwjFj30fFs89eJDUN+FeQw2yjhE=} + resolution: {integrity: sha512-rMvHTcHWLydOhKWDrK62x54ICMyfPwl0H5hAPfurLQR0sjjxGeSKuqr75emu6a2/5yYgvScZC97xVrlc2fTPSA==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/source-creator@9.3.2': - resolution: {integrity: sha1-Ju/D0ETAa/8Ut0IvnEAC2YYa/gU=} + resolution: {integrity: sha512-eEP8sHnTB7rtv976Awh5+VMTD8udiHBaeSWAEKGy21Gas/slEb02Q812SWo2UMX9NcVBl+DYaOkmPQbcPHrY5A==} engines: {node: ^14.13.1 || >=16.0.0} '@secretlint/types@9.3.2': - resolution: {integrity: sha1-vbI8lOACCVHT4uWPITezLyARoVo=} + resolution: {integrity: sha512-Mxs8jzyPm843B0P/YNiOxnFSNyYtrmMoLPjrmqebrI5LBERRGctXj2Q9Oy/ayZ+FMK+1cP9jLhceicRvlZPR1Q==} engines: {node: ^14.13.1 || >=16.0.0} '@selderee/plugin-htmlparser2@0.11.0': - resolution: {integrity: sha1-1bXimnum05WKGXLHvhb0ssGIxRc=} + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} '@sinclair/typebox@0.27.8': - resolution: {integrity: sha1-Zmf6wWxDa1Q0o4ejTe2wExmPbm4=} + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@sindresorhus/is@4.6.0': - resolution: {integrity: sha1-PHycRuZ4/u/nouW7YJ09vWZf+z8=} + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} '@sindresorhus/merge-streams@2.2.1': - resolution: {integrity: sha1-grXh4TXvYu+LUi1uf0OtNgpp8pQ=} + resolution: {integrity: sha512-255V7MMIKw6aQ43Wbqp9HZ+VHn6acddERTLiiLnlcPLU9PdTq9Aijl12oklAgUEblLWye+vHLzmqBx6f2TGcZw==} engines: {node: '>=18'} '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha1-cZ33+0F2a8FDNp6qDdVtjch8mVg=} + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} '@sinonjs/commons@3.0.0': - resolution: {integrity: sha1-vrQ0/oddllJl4EcizPwh3391XXI=} + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha1-Vf3/Hsq581QBkSna9N8N1Nkj6mY=} + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} '@smithy/abort-controller@4.2.11': - resolution: {integrity: sha1-uYnmNhXlRJwrqQ2A/L5P3XESPFQ=} + resolution: {integrity: sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==} engines: {node: '>=18.0.0'} '@smithy/chunked-blob-reader-native@4.2.3': - resolution: {integrity: sha1-nnmoDY1EeY5856j5aMu7r1pA2VA=} + resolution: {integrity: sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==} engines: {node: '>=18.0.0'} '@smithy/chunked-blob-reader@5.2.2': - resolution: {integrity: sha1-OvSON7EOWv7UeLsx0re8A8gdGWw=} + resolution: {integrity: sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==} engines: {node: '>=18.0.0'} '@smithy/config-resolver@4.4.10': - resolution: {integrity: sha1-IlKaLowj2Xn2nDq8qNmExp0Gzkw=} + resolution: {integrity: sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==} engines: {node: '>=18.0.0'} '@smithy/core@3.23.9': - resolution: {integrity: sha1-N3w+Ehh8mBCj8m15BFQXcHNXhbU=} + resolution: {integrity: sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.2.11': - resolution: {integrity: sha1-EG3akrKkJ1h56E80iCbDEaG7GwU=} + resolution: {integrity: sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==} engines: {node: '>=18.0.0'} '@smithy/eventstream-codec@4.2.11': - resolution: {integrity: sha1-sm0XvkR92zYdf5CvRP9/sD2KPgg=} + resolution: {integrity: sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w==} engines: {node: '>=18.0.0'} '@smithy/eventstream-serde-browser@4.2.11': - resolution: {integrity: sha1-m8rsKR07W2oZl3OrXQlvOVq8IuI=} + resolution: {integrity: sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA==} engines: {node: '>=18.0.0'} '@smithy/eventstream-serde-config-resolver@4.3.11': - resolution: {integrity: sha1-h6MAcMcCas3/pSlLCVOWbSHFiNs=} + resolution: {integrity: sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA==} engines: {node: '>=18.0.0'} '@smithy/eventstream-serde-node@4.2.11': - resolution: {integrity: sha1-JaLW09EwSL5OYschHJnROL3cSA4=} + resolution: {integrity: sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw==} engines: {node: '>=18.0.0'} '@smithy/eventstream-serde-universal@4.2.11': - resolution: {integrity: sha1-xbWxXCWZRB49h3m+5ZL7u/cih48=} + resolution: {integrity: sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q==} engines: {node: '>=18.0.0'} '@smithy/fetch-http-handler@5.3.13': - resolution: {integrity: sha1-mFjkP/AJr2CFzKMmgFydDJqVefU=} + resolution: {integrity: sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==} engines: {node: '>=18.0.0'} '@smithy/hash-blob-browser@4.2.12': - resolution: {integrity: sha1-2qQ8y0hdVRh8k+ckceD9SMro2ns=} + resolution: {integrity: sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ==} engines: {node: '>=18.0.0'} '@smithy/hash-node@4.2.11': - resolution: {integrity: sha1-ixnVNmGCTq2WJ7SaJuVVXWyKmP0=} + resolution: {integrity: sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==} engines: {node: '>=18.0.0'} '@smithy/hash-stream-node@4.2.11': - resolution: {integrity: sha1-MPAjbIXBuQCIHAHu/k8yn/6e97E=} + resolution: {integrity: sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ==} engines: {node: '>=18.0.0'} '@smithy/invalid-dependency@4.2.11': - resolution: {integrity: sha1-3taKoimUdMPPBmleuyijQ5KAhu4=} + resolution: {integrity: sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha1-+E8Nn5o2YBqcqTgWiL0bcm/TkRE=} + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} '@smithy/is-array-buffer@4.2.2': - resolution: {integrity: sha1-xAHOVLEqFlKesck4oLbCJHy3Y7g=} + resolution: {integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==} engines: {node: '>=18.0.0'} '@smithy/md5-js@4.2.11': - resolution: {integrity: sha1-G8ixOtnLG0esaWX8qQrEn2si7+8=} + resolution: {integrity: sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng==} engines: {node: '>=18.0.0'} '@smithy/middleware-content-length@4.2.11': - resolution: {integrity: sha1-ijhfp36Ppv/qa0bnrzexTSZ4Vx8=} + resolution: {integrity: sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==} engines: {node: '>=18.0.0'} '@smithy/middleware-endpoint@4.4.23': - resolution: {integrity: sha1-TS1/LF4TNgh4KwcbUkTnTh/y8mo=} + resolution: {integrity: sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==} engines: {node: '>=18.0.0'} '@smithy/middleware-retry@4.4.40': - resolution: {integrity: sha1-sQ2jnYE4+aFJU8JETtmnN1FNi88=} + resolution: {integrity: sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.12': - resolution: {integrity: sha1-j4NvPtyFcBtp308oGRBqbg71DPg=} + resolution: {integrity: sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==} engines: {node: '>=18.0.0'} '@smithy/middleware-stack@4.2.11': - resolution: {integrity: sha1-yt062l+hH+ihks0YREp3xFEMi8M=} + resolution: {integrity: sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==} engines: {node: '>=18.0.0'} '@smithy/node-config-provider@4.3.11': - resolution: {integrity: sha1-ptJGtnwQxocxabrkbm0EJh1UhAI=} + resolution: {integrity: sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==} engines: {node: '>=18.0.0'} '@smithy/node-http-handler@4.4.14': - resolution: {integrity: sha1-pApmd7fNosEAFBgzq+4UAcLhp08=} + resolution: {integrity: sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==} engines: {node: '>=18.0.0'} '@smithy/property-provider@4.2.11': - resolution: {integrity: sha1-ehsWriCDJy+A44DueUjdwQMwHbE=} + resolution: {integrity: sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==} engines: {node: '>=18.0.0'} '@smithy/protocol-http@5.3.11': - resolution: {integrity: sha1-5EUK87qeUui5mpwwNckMjNhTvic=} + resolution: {integrity: sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==} engines: {node: '>=18.0.0'} '@smithy/querystring-builder@4.2.11': - resolution: {integrity: sha1-vvt3U7FC+rZe2u4HAJbBxcsq2Rc=} + resolution: {integrity: sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==} engines: {node: '>=18.0.0'} '@smithy/querystring-parser@4.2.11': - resolution: {integrity: sha1-sehZRbw8gAWOCwEUrzkbsGmyOT8=} + resolution: {integrity: sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==} engines: {node: '>=18.0.0'} '@smithy/service-error-classification@4.2.11': - resolution: {integrity: sha1-2i7hr1yFE4DmsBRrdUFvDl9k4fc=} + resolution: {integrity: sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==} engines: {node: '>=18.0.0'} '@smithy/shared-ini-file-loader@4.4.6': - resolution: {integrity: sha1-Q13G2Qe8jG95UhLpRAAN4GOyz+E=} + resolution: {integrity: sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==} engines: {node: '>=18.0.0'} '@smithy/signature-v4@5.3.11': - resolution: {integrity: sha1-gfwqummZSyOv9zC5hEGOlpa8NsQ=} + resolution: {integrity: sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==} engines: {node: '>=18.0.0'} '@smithy/smithy-client@4.12.3': - resolution: {integrity: sha1-lTcCIbxcLzCiUVey34SjYwyB7IU=} + resolution: {integrity: sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==} engines: {node: '>=18.0.0'} '@smithy/types@4.13.0': - resolution: {integrity: sha1-l4cpegfucu901PfZPHRNEO1mTCE=} + resolution: {integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==} engines: {node: '>=18.0.0'} '@smithy/url-parser@4.2.11': - resolution: {integrity: sha1-TIfrWHLCqwOFCGs47uS0puWgKbI=} + resolution: {integrity: sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.3.2': - resolution: {integrity: sha1-vgK8spqHvnRDVkZ+ol/6QT5pXOo=} + resolution: {integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==} engines: {node: '>=18.0.0'} '@smithy/util-body-length-browser@4.2.2': - resolution: {integrity: sha1-xEBCd9IgOYcqvbgOeAD5pj8mOGI=} + resolution: {integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==} engines: {node: '>=18.0.0'} '@smithy/util-body-length-node@4.2.3': - resolution: {integrity: sha1-+SPKUw3vuGqaw8otMGa8ynswT7w=} + resolution: {integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha1-b8iFhRZexz+GgdQm2W3l1AICHks=} + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} '@smithy/util-buffer-from@4.2.2': - resolution: {integrity: sha1-LGt4V3V9/Yj2zS02AWF5pAzMkTs=} + resolution: {integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==} engines: {node: '>=18.0.0'} '@smithy/util-config-provider@4.2.2': - resolution: {integrity: sha1-Uuv52JQoONGLxfsVIN4ehpnXqtY=} + resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} engines: {node: '>=18.0.0'} '@smithy/util-defaults-mode-browser@4.3.39': - resolution: {integrity: sha1-nzVLnc0MDheqUH5vwTtHha8xzZc=} + resolution: {integrity: sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==} engines: {node: '>=18.0.0'} '@smithy/util-defaults-mode-node@4.2.42': - resolution: {integrity: sha1-JIotalC0SA86KkzneUCekPDRa5Y=} + resolution: {integrity: sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.3.2': - resolution: {integrity: sha1-qB7piiWWJI9s3tyGjRPLa56kl7I=} + resolution: {integrity: sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.2.2': - resolution: {integrity: sha1-Sr8zNd0euIQEHYWJynYo2Bpv0dM=} + resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} engines: {node: '>=18.0.0'} '@smithy/util-middleware@4.2.11': - resolution: {integrity: sha1-0qiYk/wt/VAN5BLF98eWFxaFX00=} + resolution: {integrity: sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==} engines: {node: '>=18.0.0'} '@smithy/util-retry@4.2.11': - resolution: {integrity: sha1-WfxTZEiNTHVe7Fr7QFRiP4Us8OY=} + resolution: {integrity: sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==} engines: {node: '>=18.0.0'} '@smithy/util-stream@4.5.17': - resolution: {integrity: sha1-UwcxU964kNkf0U/SBV5lgrYnsP0=} + resolution: {integrity: sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.2': - resolution: {integrity: sha1-SOQCBuf+na78jUS7Q6GrF+dqv0o=} + resolution: {integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha1-3ZbXZANjJZkkohQxPDzxbn3TKcU=} + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} '@smithy/util-utf8@4.2.2': - resolution: {integrity: sha1-IdtoaYLm8zk6wmLkkUO0I3ATDxM=} + resolution: {integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==} engines: {node: '>=18.0.0'} '@smithy/util-waiter@4.2.11': - resolution: {integrity: sha1-r+CK11ybUeNcg+PBGSaFXYhnQfY=} + resolution: {integrity: sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A==} engines: {node: '>=18.0.0'} '@smithy/uuid@1.1.2': - resolution: {integrity: sha1-tul8cVhhXko8d16AnADYwmm1oS4=} + resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} engines: {node: '>=18.0.0'} '@swc/helpers@0.5.15': - resolution: {integrity: sha1-ee+rNExYGez4OkPz+fgR/IS1Ftc=} + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha1-tKkUu2LnwnLU5Zif5EQPgSqx2Ac=} + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} '@textlint/ast-node-types@14.7.1': - resolution: {integrity: sha1-jydgoGR1PlN1AJ7T2OGW933IBS8=} + resolution: {integrity: sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==} '@textlint/linter-formatter@14.7.1': - resolution: {integrity: sha1-GuZaDGo36V6VMHdNgYWMcZiNmTY=} + resolution: {integrity: sha512-saAE+e4RZFInRmCF9pu7ukZAHxWaYw9WIA1PptYHItCnlyGS7WB7cYHilkj4coWGr3xGaQ2qAjqX/QIbVE7QGA==} '@textlint/module-interop@14.7.1': - resolution: {integrity: sha1-vQy9nII77I0tUPGFXaFoD7QUTqA=} + resolution: {integrity: sha512-9mfLErTFx8N+tZNTL+46YCY/jnCDOJKpceng5WVwDeZeMJbewhjY3PVcxMoPnvPT10QnE/hDk3b6riUYckgHgw==} '@textlint/resolver@14.7.1': - resolution: {integrity: sha1-w/LvWU1m5nDQjRZaiops6fA5bIg=} + resolution: {integrity: sha512-lQ5ATfpsOgiYnwe2aoS0t9uJ4SrvyiCJpfJdqUQZCVL161O/yMKZBc6nwsyBlruEcFoNxK06F3s3IIV4EsI12A==} '@textlint/types@14.7.1': - resolution: {integrity: sha1-BybeftLmxZqcQO+URF3dUtKgK5o=} + resolution: {integrity: sha512-j10OEEHRAaqGMC6dK3+H1Eg3bksASGTmGDozsSepYs7qInY+lYBCe5m3JTrKkDnAX4nNy8ninnKzrYKcVkWahw==} '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha1-207P1JmpdlqyQALDtpbQLm0yoSw=} + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} '@ts-graphviz/adapter@2.0.6': - resolution: {integrity: sha1-GNWkIwTcp///dg/K8xGjFI70o70=} + resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==} engines: {node: '>=18'} '@ts-graphviz/ast@2.0.7': - resolution: {integrity: sha1-TsM0kuS06ZjUYyAw6XqffhSa+4Y=} + resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==} engines: {node: '>=18'} '@ts-graphviz/common@2.1.5': - resolution: {integrity: sha1-olbfrqAJpbFH2Pc/JeV/tE9kYqI=} + resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==} engines: {node: '>=18'} '@ts-graphviz/core@2.0.7': - resolution: {integrity: sha1-IYXjkJkAOLJnojQcPbHO82gLvug=} + resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==} engines: {node: '>=18'} '@tsconfig/node10@1.0.9': - resolution: {integrity: sha1-30kH/AeohpImN7FeAtTOvEwAIbI=} + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} '@tsconfig/node12@1.0.11': - resolution: {integrity: sha1-7j3vHyfZ7WbaxuRqKVz/sBUuBY0=} + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} '@tsconfig/node14@1.0.3': - resolution: {integrity: sha1-5DhjFihPALmENb9A9y91oJ2r9sE=} + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} '@tsconfig/node16@1.0.4': - resolution: {integrity: sha1-C5LcwMwcgfbzBqOB8o4xsaVlNuk=} + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha1-AVy6np3UfOFNA9KoxdVHv7FpZl0=} + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/accepts@1.3.7': - resolution: {integrity: sha1-O5ixiJ0rI4ZgTCu75i5PtR6VsmU=} + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} '@types/async@3.2.24': - resolution: {integrity: sha1-OpY1EEdXW7zyNAVBstlVo1M5YI8=} + resolution: {integrity: sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==} '@types/babel__code-frame@7.27.0': - resolution: {integrity: sha1-R5n1l+yee73TnhN09DQjdC3P+pk=} + resolution: {integrity: sha512-Dwlo+LrxDx/0SpfmJ/BKveHf7QXWvLBLc+x03l5sbzykj3oB9nHygCpSECF1a+s+QIxbghe+KHqC90vGtxLRAA==} '@types/babel__core@7.20.5': - resolution: {integrity: sha1-PfFfJ7qFMZyqB7oI0HIYibs5wBc=} + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} '@types/babel__generator@7.6.8': - resolution: {integrity: sha1-+DbGH0ixNG59Kw2TxtrMW5U106s=} + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} '@types/babel__template@7.4.4': - resolution: {integrity: sha1-VnJRNwHBshmbxtrWNqnXSRWGdm8=} + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} '@types/babel__traverse@7.20.6': - resolution: {integrity: sha1-jcnwrg8gLAjY1Nq2SJEsjWA44/c=} + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} '@types/better-sqlite3@7.6.11': - resolution: {integrity: sha1-lazyL89Vd2JO6iAgWOJrojl2C58=} + resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==} '@types/better-sqlite3@7.6.13': - resolution: {integrity: sha1-pyOH8A0vU8q2meY/LiwFRTz5U/A=} + resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} '@types/body-parser@1.19.5': - resolution: {integrity: sha1-BM6aO2d9yL1oGhfaGrmDXcnT7eQ=} + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} '@types/bonjour@3.5.13': - resolution: {integrity: sha1-rfkM4aEF6B3R+cYf3Fr9ob+5KVY=} + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} '@types/cacheable-request@6.0.3': - resolution: {integrity: sha1-pDCzJgRmyntcpb/XNWk7Nuep0YM=} + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} '@types/chai-dom@1.11.3': - resolution: {integrity: sha1-Flms4mmM3NntiywAeHb1PjfZzIk=} + resolution: {integrity: sha512-EUEZI7uID4ewzxnU7DJXtyvykhQuwe+etJ1wwOiJyQRTH/ifMWKX+ghiXkxCUvNJ6IQDodf0JXhuP6zZcy2qXQ==} '@types/chai@4.3.20': - resolution: {integrity: sha1-yykVd+00LKkmAEMIQaADKboFzsw=} + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} '@types/chai@5.2.3': - resolution: {integrity: sha1-jpzZ4cNYH6azQaWu1ViOsoW+C0o=} + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/chrome@0.0.114': - resolution: {integrity: sha1-jOsz+iYfS54wf6c0S6gYLY1BDU4=} + resolution: {integrity: sha512-i7qRr74IrxHtbnrZSKUuP5Uvd5EOKwlwJq/yp7+yTPihOXnPhNQO4Z5bqb1XTnrjdbUKEJicaVVbhcgtRijmLA==} '@types/chrome@0.0.256': - resolution: {integrity: sha1-NmtS+PWi2BGa3p7vJRlpLm+Yf/g=} + resolution: {integrity: sha512-NleTQw4DNzhPwObLNuQ3i3nvX1rZ1mgnx5FNHc2KP+Cj1fgd3BrT5yQ6Xvs+7H0kNsYxCY+lxhiCwsqq3JwtEg==} '@types/chrome@0.0.278': - resolution: {integrity: sha1-9/78DdS2alS96ilQxf1zl8cpk40=} + resolution: {integrity: sha512-PDIJodOu7o54PpSOYLybPW/MDZBCjM1TKgf31I3Q/qaEbNpIH09rOM3tSEH3N7Q+FAqb1933LhF8ksUPYeQLNg==} '@types/co-body@6.1.3': - resolution: {integrity: sha1-IBeWxjiQZrQAz8tOHsXD23mCZaI=} + resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} '@types/command-line-args@5.2.3': - resolution: {integrity: sha1-VTzi/VrPFgtEjTB2SbOP/GDTljk=} + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} '@types/command-line-usage@5.0.4': - resolution: {integrity: sha1-N05MYtePvFpnCg822hAjWvh5oNU=} + resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha1-fecWRaEDBWtIrDzgezUguBnB1bM=} + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} '@types/connect@3.4.38': - resolution: {integrity: sha1-W6fzvE+73q/43e2VLl/yzFP42Fg=} + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} '@types/content-disposition@0.5.9': - resolution: {integrity: sha1-AMoUk5Qyhp3oKaTM9v04D6kYF1A=} + resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==} '@types/convert-source-map@2.0.3': - resolution: {integrity: sha1-5YbCLKSvLWcNR9Mtf+Nl1cVVhpU=} + resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} '@types/cookies@0.9.2': - resolution: {integrity: sha1-zN+G14Ly3qNFMd0yczolvkgXfNQ=} + resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} '@types/cors@2.8.18': - resolution: {integrity: sha1-EB4DOzygZpXz1zxYfNf56zSBNdE=} + resolution: {integrity: sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==} '@types/cytoscape-dagre@2.3.3': - resolution: {integrity: sha1-J/fFfm4FWgXY+XHLCeduEcg3c0w=} + resolution: {integrity: sha512-FJBsNMbBZpqNwT6rp5leVYMevWUjnyD1QS8erNMAMWoBifvaVUklXIjE+bllLDSowjM3abXuRvljliSXUU+d1A==} '@types/cytoscape@3.21.9': - resolution: {integrity: sha1-lQBBZaCld1e8ox2DrhyH5hlLICY=} + resolution: {integrity: sha512-JyrG4tllI6jvuISPjHK9j2Xv/LTbnLekLke5otGStjFluIyA9JjgnvgZrSBsp8cEDpiTjwgZUZwpPv8TSBcoLw==} '@types/d3-array@3.2.2': - resolution: {integrity: sha1-4CFRRk0C1KG0RkbQ/NuT+viP3ow=} + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} '@types/d3-axis@3.0.6': - resolution: {integrity: sha1-52DldluBiLHe+jK8i7YGL4Hkx5U=} + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} '@types/d3-brush@3.0.6': - resolution: {integrity: sha1-wvQ2KwRdRy4bGGzb7DKbpSva7mw=} + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} '@types/d3-chord@3.0.6': - resolution: {integrity: sha1-FwbKQM9+pZoK3Y9EVu//j4d1eT0=} + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} '@types/d3-color@3.1.3': - resolution: {integrity: sha1-NoyWGhjech2oIA6AvzlD+1MTavI=} + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} '@types/d3-contour@3.0.6': - resolution: {integrity: sha1-mto/qcTQDjpQk/7QNWx6uSlgQjE=} + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} '@types/d3-delaunay@6.0.4': - resolution: {integrity: sha1-GFwagMyAf92io/6WD3wRxKJ5UuE=} + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} '@types/d3-dispatch@3.0.7': - resolution: {integrity: sha1-7wBNihKARs/OQ00XGC+DTkTvlbI=} + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} '@types/d3-drag@3.0.7': - resolution: {integrity: sha1-sTq6iyRCtAaMmp5tHYL4vOp3/AI=} + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} '@types/d3-dsv@3.0.7': - resolution: {integrity: sha1-CjUfmW3Jmzf0+li0ksLRwE49rBc=} + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} '@types/d3-ease@3.0.2': - resolution: {integrity: sha1-4o2xv7+mFwdvd3DdHZpI6qO2xRs=} + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} '@types/d3-fetch@3.0.7': - resolution: {integrity: sha1-wEorTyMYGqN28wrwKD28eztWmYA=} + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} '@types/d3-force@3.0.10': - resolution: {integrity: sha1-bcj8bh81cE87BXCQvu63rGdL/xo=} + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} '@types/d3-format@3.0.4': - resolution: {integrity: sha1-seRGVkTds/3zomP+uyQKbNYW3pA=} + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} '@types/d3-geo@3.1.0': - resolution: {integrity: sha1-ueVqB5RJF08KLIaEqaTfP2BSJEA=} + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} '@types/d3-hierarchy@3.1.7': - resolution: {integrity: sha1-YCP7Oy1GMiny1oD5rEtHRm9x8Xs=} + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha1-QSuQ6EhwKF8v+KhGxutgNE8SpBw=} + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} '@types/d3-path@3.1.1': - resolution: {integrity: sha1-9jKzgMOsoduo40qgSbzWpK8j34o=} + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} '@types/d3-polygon@3.0.2': - resolution: {integrity: sha1-365UptNdGedqyVZbyzKo5UaTGJw=} + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} '@types/d3-quadtree@3.0.6': - resolution: {integrity: sha1-1HQLD+NbHFi2bhSI9OftApUvVw8=} + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} '@types/d3-random@3.0.3': - resolution: {integrity: sha1-7ZlcceyxXgzTHiLZ1dI5QuMwDPs=} + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} '@types/d3-scale-chromatic@3.1.0': - resolution: {integrity: sha1-3G1Pmpg3bxjqULrWw5U38bVGPDk=} + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} '@types/d3-scale@4.0.9': - resolution: {integrity: sha1-V6L3ByQub+Hega17/Myq9gYXmvs=} + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} '@types/d3-selection@3.0.11': - resolution: {integrity: sha1-vXpF/AqMMWemMWdeYbwsorBY1KM=} + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} '@types/d3-shape@3.1.8': - resolution: {integrity: sha1-0VFsxQh1O+BoUs0GdY47tUoisOM=} + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} '@types/d3-time-format@4.0.3': - resolution: {integrity: sha1-1rwea2p9tpzM+73Uw0twYy2enbI=} + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} '@types/d3-time@3.0.4': - resolution: {integrity: sha1-hHL+7NY5aRRQ3YAA6zPt1EThMj8=} + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} '@types/d3-timer@3.0.2': - resolution: {integrity: sha1-cLvad9wjqnJ0E+IuIUr6Pw6FL3A=} + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} '@types/d3-transition@3.0.9': - resolution: {integrity: sha1-ETa8V+nds8OQ3MybX/O30rjZRwY=} + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} '@types/d3-zoom@3.0.8': - resolution: {integrity: sha1-3Msy0cVrHhxuDxGA2ZSJbwOLxAs=} + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} '@types/d3@7.4.3': - resolution: {integrity: sha1-1FUKhdCPSXj68KTDa4SMYeqsB+I=} + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} '@types/dagre@0.7.52': - resolution: {integrity: sha1-7b8LymkizQrRk2p0hvnQNSPXVlo=} + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==} '@types/debounce@1.2.4': - resolution: {integrity: sha1-y36F2a1aur+sLycYPorItXayq7M=} + resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} '@types/debug@4.1.12': - resolution: {integrity: sha1-oVXyFpCHGVNBDfS2tvUxh/BQCRc=} + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} '@types/deep-eql@4.0.2': - resolution: {integrity: sha1-M0MRlx06BxIefrkbaEpgXn7qnL0=} + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} '@types/eslint-scope@3.7.7': - resolution: {integrity: sha1-MQi9XxiwzbJ3yGez3UScntcHmsU=} + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} '@types/eslint@9.6.1': - resolution: {integrity: sha1-1Xla1zLOgXFfJ/ddqRMASlZ1FYQ=} + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/esrecurse@4.3.1': - resolution: {integrity: sha1-b2Nq+WL75hkbgwvWdrpZhpJrzOw=} + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} '@types/estree@1.0.8': - resolution: {integrity: sha1-lYuRyZGxhnztMYvt6g4hXuBQcm4=} + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/express-serve-static-core@4.17.41': - resolution: {integrity: sha1-UHfe+mMMLo0oqp/8LAHBV8MFvvY=} + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} '@types/express-serve-static-core@4.19.8': - resolution: {integrity: sha1-mblgMipNV2sjmmQKtS7xkZibA28=} + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} '@types/express-serve-static-core@5.1.1': - resolution: {integrity: sha1-Gnf6/+6VctORJJMyWb4lI4N9fqo=} + resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==} '@types/express@4.17.21': - resolution: {integrity: sha1-wm1KFR5g7+AISyPcM2nrxjHtGS0=} + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} '@types/express@4.17.25': - resolution: {integrity: sha1-BwyMc6b+5pNtZcGV27+32lAmZJs=} + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} '@types/fast-levenshtein@0.0.4': - resolution: {integrity: sha1-oW/2YHGJ7fCKxjHlS1d0sPrxLYc=} + resolution: {integrity: sha512-tkDveuitddQCxut1Db8eEFfMahTjOumTJGPHmT9E7KUH+DkVq9WTpVvlfenf3S+uCBeu8j5FP2xik/KfxOEjeA==} '@types/file-size@1.0.3': - resolution: {integrity: sha1-mlzeIQ9nxaoV1bIlH2cZ8vgCDWo=} + resolution: {integrity: sha512-2HOqIo9ng92X1aGRF7Sz3fn1LWA4aU9gAKotykOcXHIFDOKgB4kTYMiFmhdK+X1SBiaqmq2uakpSYQn6QJCnyg==} '@types/filesystem@0.0.35': - resolution: {integrity: sha1-bWdmYmCD4rOXwJvcVwkoJxINsR0=} + resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} '@types/filewriter@0.0.33': - resolution: {integrity: sha1-2dYR252c2Zrk5FjeQg7rZK1gTqg=} + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} '@types/find-config@1.0.4': - resolution: {integrity: sha1-a/kJOC3hqJgjP4pvgtg+5zntpWs=} + resolution: {integrity: sha512-BCXaKgzHK7KnfCQBRQBWGTA+QajOE9uFolXPt+9EktiiMS56D8oXF2ZCh9eCxuEyfqDmX/mYIcmWg9j9f659eg==} '@types/firefox-webext-browser@120.0.4': - resolution: {integrity: sha1-J+6teBBRsuaBo0TdKYNzX6rdQ0M=} + resolution: {integrity: sha512-lBrpf08xhiZBigrtdQfUaqX1UauwZ+skbFiL8u2Tdra/rklkKadYmIzTwkNZSWtuZ7OKpFqbE2HHfDoFqvZf6w==} '@types/fs-extra@11.0.4': - resolution: {integrity: sha1-4WqGO7iEP7qMUAQ2K1pz4XvsykU=} + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} '@types/fs-extra@8.1.5': - resolution: {integrity: sha1-M6rili07Pskhm1rKJVXuACdPWSc=} + resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} '@types/fs-extra@9.0.13': - resolution: {integrity: sha1-dZT7rgT+fxkYzos9IT90/0SsH0U=} + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} '@types/geojson@7946.0.16': - resolution: {integrity: sha1-jr5T1p762nBERU4zBcGQF9l87So=} + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} '@types/glob@7.2.0': - resolution: {integrity: sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=} + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} '@types/graceful-fs@4.1.8': - resolution: {integrity: sha1-QX5GHk3HnZV9wxB/Rf5Jc7CcKRU=} + resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} '@types/har-format@1.2.15': - resolution: {integrity: sha1-81JJNjjC+J1wZDihmp6zALSTtQY=} + resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} '@types/hast@3.0.4': - resolution: {integrity: sha1-HWs5mTuCzqateDlFsFCMJZA+Fao=} + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/html-minifier-terser@6.1.0': - resolution: {integrity: sha1-T8M6AMHQwWmHsaIM+S0gYUxVrDU=} + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} '@types/html-to-text@9.0.4': - resolution: {integrity: sha1-SoPdiui/qRRX0LH/wm9NBTfv9Yw=} + resolution: {integrity: sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==} '@types/http-assert@1.5.6': - resolution: {integrity: sha1-trZXw4ojUNIc4hMTnzOwOytfpDE=} + resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} '@types/http-cache-semantics@4.2.0': - resolution: {integrity: sha1-9qd4j0OMv94V8prK1GUStMAZE7M=} + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} '@types/http-errors@2.0.4': - resolution: {integrity: sha1-frR3JsORtzRabsNa1/TeRpz1uk8=} + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} '@types/http-errors@2.0.5': - resolution: {integrity: sha1-W3SasrFroRNCP+saZKldzTA5hHI=} + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/http-proxy@1.17.17': - resolution: {integrity: sha1-2eLEVx/jUHNDyyEM1BeQN15ZpTM=} + resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha1-dznCMqH+6bTTzomF8xTAxtM1Sdc=} + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} '@types/istanbul-lib-report@3.0.2': - resolution: {integrity: sha1-OUeY1fcnQC617Jnrlhj/zSt2RaE=} + resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==} '@types/istanbul-reports@3.0.3': - resolution: {integrity: sha1-AxPiYI5taVXRlfVTYd3uvUt0xuc=} + resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==} '@types/jest@29.5.14': - resolution: {integrity: sha1-K5EJEvodaFbK3NDB+Vr33x1gSeU=} + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} '@types/jquery@3.5.32': - resolution: {integrity: sha1-PrDaIGEbksfEnr7WFjtSpP3Ffe8=} + resolution: {integrity: sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==} '@types/js-yaml@4.0.9': - resolution: {integrity: sha1-zYI4LE+QL+2WkaLteexoxYmK9MI=} + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} '@types/jsdom@20.0.1': - resolution: {integrity: sha1-B8FLwZvS+RjBkpVBzarK6JR0SAg=} + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} '@types/jsdom@28.0.0': - resolution: {integrity: sha1-OHvLX+YMdTrgxYWEtlmlmDGZOPI=} + resolution: {integrity: sha512-A8TBQQC/xAOojy9kM8E46cqT00sF0h7dWjV8t8BJhUi2rG6JRh7XXQo/oLoENuZIQEpXsxLccLCnknyQd7qssQ==} '@types/json-schema@7.0.15': - resolution: {integrity: sha1-WWoXRyM2lNUPatinhp/Lb1bPWEE=} + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/jsonfile@6.1.4': - resolution: {integrity: sha1-YUr+waEWTn1nC0p61k3z5763twI=} + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} '@types/jsonpath@0.2.4': - resolution: {integrity: sha1-BlvlmYHBQggyg1r2Vjd2IicRVL4=} + resolution: {integrity: sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==} '@types/katex@0.16.7': - resolution: {integrity: sha1-A6toCrT6T7xstG7PmH7K1dgBmGg=} + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} '@types/keygrip@1.0.6': - resolution: {integrity: sha1-F0lTUYGiqbAqwEp5dVCoeHNFt0A=} + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} '@types/keyv@3.1.4': - resolution: {integrity: sha1-PM2xxnUbDH5SMAvNrNW8v4+qdbY=} + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} '@types/koa-compose@3.2.9': - resolution: {integrity: sha1-bvuUXuVXO+D07dtyii9oJvej85U=} + resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==} '@types/koa@2.15.0': - resolution: {integrity: sha1-7KQ9dvUnyAO0kXMfld9XVjbntvI=} + resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} '@types/linkify-it@5.0.0': - resolution: {integrity: sha1-IUEwAZcxBs2hw6m5Hu3UzNVGnXY=} + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} '@types/lodash-es@4.17.12': - resolution: {integrity: sha1-ZfbR5fgFOap8+/yWLeXe8M9PNBs=} + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} '@types/lodash.debounce@4.0.9': - resolution: {integrity: sha1-D18hxQe851IbXjDnokRAl1rIYKU=} + resolution: {integrity: sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==} '@types/lodash.throttle@4.1.9': - resolution: {integrity: sha1-8Xpq4IT3wBF7198UWzeVN7yWFcU=} + resolution: {integrity: sha512-PCPVfpfueguWZQB7pJQK890F2scYKoDUL3iM522AptHWn7d5NQmeS/LTEHIcLr5PaTzl3dK2Z0xSUHHTHwaL5g==} '@types/lodash@4.17.17': - resolution: {integrity: sha1-+4WgT0fp5NqIg4T+6tDeBfcHA1U=} + resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} '@types/mailparser@3.4.6': - resolution: {integrity: sha1-/MqZ/p+Rnz2mkaC/XjAixig8MGg=} + resolution: {integrity: sha512-wVV3cnIKzxTffaPH8iRnddX1zahbYB1ZEoAxyhoBo3TBCBuK6nZ8M8JYO/RhsCuuBVOw/DEN/t/ENbruwlxn6Q==} '@types/markdown-it@14.1.2': - resolution: {integrity: sha1-V/JTKggABn2bk081IUKaLov7TGE=} + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} '@types/mdast@4.0.4': - resolution: {integrity: sha1-fM9y7dLxqn3TQ34YDGQ3NYWATdY=} + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} '@types/mdurl@2.0.0': - resolution: {integrity: sha1-1Dh4tbICImghY65viXsgRHIzvf0=} + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} '@types/mime@1.3.5': - resolution: {integrity: sha1-HvMC4Bz30rWg+lJnkMkSO/HQZpA=} + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/mime@3.0.4': - resolution: {integrity: sha1-IZisJ03mAXtE2UHgAmHVvGoOCkU=} + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} '@types/minimatch@3.0.5': - resolution: {integrity: sha1-EAHMXmo3BLg8I2An538vWOoBD0A=} + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} '@types/minimatch@5.1.2': - resolution: {integrity: sha1-B1CLRXl8uB7D8nMBGwVM0HVe3co=} + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} '@types/mocha@10.0.10': - resolution: {integrity: sha1-kfYpBejSPL1mIlMS8jlFSiO+v6A=} + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} '@types/ms@0.7.33': - resolution: {integrity: sha1-gL8dpksV8h/Ywdw4fDGSkxfZnuk=} + resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} '@types/node-fetch@2.6.12': - resolution: {integrity: sha1-irXD74Mw8TEAp0eeLNVtM4aDCgM=} + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} '@types/node@18.19.130': - resolution: {integrity: sha1-2kxjJHk6ed77emLLo5R+xa3QDVk=} + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} '@types/node@20.19.40': - resolution: {integrity: sha1-gKSnI24ngXY2d3g2zu24ia322i8=} + resolution: {integrity: sha512-xxx6M2IpSTnnKcR0cMvIiohkiCx20/oRPtWGbenFygKCGl3zqUzdNjQ/1V4solq1LU+dgv0nQzeGOuqkqZGg0Q==} '@types/node@22.15.18': - resolution: {integrity: sha1-L4JA9+ky9XHC1F9VW6C2w/enWWM=} + resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} '@types/node@22.19.19': - resolution: {integrity: sha1-MSS/Jt7VQWi3aBODIf75m0IMYRI=} + resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} '@types/node@22.19.21': - resolution: {integrity: sha1-XJ2EPqOFsx7pN6n3Q0Q4MGIKMt4=} + resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} '@types/node@24.12.2': - resolution: {integrity: sha1-NTyxYdvxeF6iXogpun7FdMXGKaw=} + resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} '@types/node@25.9.3': - resolution: {integrity: sha1-Ed/noz5o+lxWDwqnbMVZViHvJrk=} + resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha1-VuLMJsOXwDj6sOOpF6EtXFkJ6QE=} + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/parse5@6.0.3': - resolution: {integrity: sha1-cFuzSeeJ76BvQ/EozvUSQHU0JMs=} + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} '@types/plist@3.0.5': - resolution: {integrity: sha1-mgxJwPmIbIyGlqeQTdcD9ihANuA=} + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} '@types/prismjs@1.26.5': - resolution: {integrity: sha1-ckmau7TE7JmCRGUJ0vFPuEg4adY=} + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} '@types/prop-types@15.7.14': - resolution: {integrity: sha1-FDNBnXOyp+v8aRjc79LsDVzWmPI=} + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} '@types/proper-lockfile@4.1.4': - resolution: {integrity: sha1-zZ+rkr2wRzDBraVCw1bwNiD4QAg=} + resolution: {integrity: sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==} '@types/qs@6.15.0': - resolution: {integrity: sha1-ljq2F3mEP+kQY5pQZhtI8WK8f3k=} + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/qs@6.15.1': - resolution: {integrity: sha1-hgaIQnLGPw25aYa9NUhlDYqTiL8=} + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} '@types/range-parser@1.2.7': - resolution: {integrity: sha1-UK5DU+qt3AQEQnmBL1LIxlhX28s=} + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} '@types/react@18.3.18': - resolution: {integrity: sha1-mzgsTNMuE+Rj+X3wfC7ju80mkEs=} + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} '@types/regexp.escape@2.0.0': - resolution: {integrity: sha1-ojtCHip/dOJQ4yHByZF3ua/1aNY=} + resolution: {integrity: sha512-L0+4KOC47zH0AE/27YhzECRlE4HxHycQy0ng8P4SMmsYIdUqJFzKlk4LameozRQ2mRozPRwRAzpXsDsUgb6ezA==} '@types/resolve@1.20.2': - resolution: {integrity: sha1-l9JuAM1KBCO0r2IKvs8+b0QreXU=} + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} '@types/responselike@1.0.3': - resolution: {integrity: sha1-zClwbwo5fP5t+J3r/kv1zqFZ21A=} + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} '@types/retry@0.12.2': - resolution: {integrity: sha1-7SeaZPpDi7afJIDtpEk3kSu3SAo=} + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} '@types/sarif@2.1.7': - resolution: {integrity: sha1-2rTRa6dWjphGxFSodk8zxdmOVSQ=} + resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} '@types/semver@7.7.1': - resolution: {integrity: sha1-POOvGlUk7zJ9Lank/YttlcjXBSg=} + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} '@types/send@0.17.4': - resolution: {integrity: sha1-ZhnNJOcnB5NwLk5qS5WKkBDPxXo=} + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} '@types/send@0.17.6': - resolution: {integrity: sha1-rrU4W+Yv9YpSzVRZ2qUJrpFlHSU=} + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} '@types/send@1.2.1': - resolution: {integrity: sha1-anhORVQ8GMd0wEm/9tPbrwRcnHQ=} + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} '@types/serve-index@1.9.4': - resolution: {integrity: sha1-5q4T1QU8sG7TY5IRC0+aSaxOyJg=} + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} '@types/serve-static@1.15.10': - resolution: {integrity: sha1-doFpFFp3j49d/LY2CurUFKOZT+4=} + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} '@types/serve-static@1.15.5': - resolution: {integrity: sha1-FeZ1AOxAeJoejJ3vwtMqiW8FsDM=} + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} '@types/sinon-chai@3.2.12': - resolution: {integrity: sha1-x8sGvuRKU07ITzpVNMOjpG/XebY=} + resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} '@types/sinon@21.0.1': - resolution: {integrity: sha1-+ZXir98VvoMtXxZFgD2CqOuVobw=} + resolution: {integrity: sha512-5yoJSqLbjH8T9V2bksgRayuhpZy+723/z6wBOR+Soe4ZlXC0eW8Na71TeaZPUWDQvM7LYKa9UGFc6LRqxiR5fQ==} '@types/sinonjs__fake-timers@15.0.1': - resolution: {integrity: sha1-Sfcx2UU/UtZN159aVibBzxuBvqQ=} + resolution: {integrity: sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==} '@types/sizzle@2.3.8': - resolution: {integrity: sha1-UYYJrvt5faGb8iL+sZno9lP/dic=} + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} '@types/sockjs@0.3.36': - resolution: {integrity: sha1-zjIs8HvMEZ1Mv3+IlU86O9D2dTU=} + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} '@types/spotify-api@0.0.25': - resolution: {integrity: sha1-nauzsKHwUn7WGTbr+KgMHROMJ8M=} + resolution: {integrity: sha512-okhoy0U9fPWtwqCfbDyW8VxamhqvXE0gXIVeMOh5HcvEFQvWW2X0VsvdiX/OyiGQpZbZiOJXIGrbnIPfK0AIpA==} '@types/stack-utils@2.0.2': - resolution: {integrity: sha1-AShN3p705tjO9kInmNmjrRimb4s=} + resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==} '@types/tough-cookie@4.0.5': - resolution: {integrity: sha1-y24qaRtwyxd8bjrpwdLosuqM0wQ=} + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} '@types/trusted-types@2.0.7': - resolution: {integrity: sha1-usywepcLkXB986PoumiWxX6tLRE=} + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} '@types/unist@2.0.11': - resolution: {integrity: sha1-Ea9XsSfjJId3SEH3pOVOqxZtA8Q=} + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/unist@3.0.3': - resolution: {integrity: sha1-rKqw+RnOaczmKcLU7S60rcG2wgw=} + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@types/verror@1.10.9': - resolution: {integrity: sha1-Qgwyrbmi3VCz20yPllAeBaDnKUE=} + resolution: {integrity: sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==} '@types/vscode@1.100.0': - resolution: {integrity: sha1-Nc1iioaxFYeFbflL6UBUqrAfLxc=} + resolution: {integrity: sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==} '@types/webidl-conversions@7.0.3': - resolution: {integrity: sha1-Ewbb+lN2i8vPyVocjN42eXVYGFk=} + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} '@types/webrtc@0.0.37': - resolution: {integrity: sha1-aTZj3F3oxshUBvbPVmHMwehOTGg=} + resolution: {integrity: sha512-JGAJC/ZZDhcrrmepU4sPLQLIOIAgs5oIK+Ieq90K8fdaNMhfdfqmYatJdgif1NDQtvrSlTOGJDUYHIDunuufOg==} '@types/webvtt-parser@2.2.0': - resolution: {integrity: sha1-xWYAxswfAGt1FhW8GPXL94ZNNnY=} + resolution: {integrity: sha512-T8n08m3VWAOCVDHWPOtEehnLcVSyQaUmyjIvGCERWRPMyVooUjqWaDsvKD3bcwQSU8TLBW19YTSRx9UxBNfckA==} '@types/whatwg-url@11.0.4': - resolution: {integrity: sha1-/+0NyNidkfYuPzaPy9oiKkh8T2M=} + resolution: {integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==} '@types/winreg@1.2.36': - resolution: {integrity: sha1-8dmpkYyukKY8YQbJgiSspqNpg/w=} + resolution: {integrity: sha512-DtafHy5A8hbaosXrbr7YdjQZaqVewXmiasRS5J4tYMzt3s1gkh40ixpxgVFfKiQ0JIYetTJABat47v9cpr/sQg==} '@types/ws@7.4.7': - resolution: {integrity: sha1-98OQo296Bnmqad4tUBMZ9PjZtwI=} + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} '@types/ws@8.18.1': - resolution: {integrity: sha1-SEZOS/Ld/RfbE9hFRn9gcP/qSqk=} + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} '@types/xml2js@0.4.14': - resolution: {integrity: sha1-XUYqKnMwNF4jCca1SaGDo3bej5o=} + resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} '@types/yargs-parser@21.0.2': - resolution: {integrity: sha1-e9BMXaN4SW7xaVoQCL+PcYR6i4s=} + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} '@types/yargs@17.0.29': - resolution: {integrity: sha1-Bqq8ckl7eYxkPIEqi1YVN/6nYM8=} + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} '@types/yauzl@2.10.3': - resolution: {integrity: sha1-6bKAi08QlQSgPNqVglmHb2EBeZk=} + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} '@typescript-eslint/eslint-plugin@8.62.1': - resolution: {integrity: sha1-Fzbc3KbK4zWdgYRWpH0YtnR2H38=} + resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.62.1 @@ -10477,291 +10495,291 @@ packages: typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/parser@8.62.1': - resolution: {integrity: sha1-0/e6GPG/eL+3JW/qAh0ZJ7SOcIA=} + resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/project-service@8.62.1': - resolution: {integrity: sha1-eNiA6xz2hZtewmPQT5VAPp+Qrkc=} + resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/scope-manager@8.62.1': - resolution: {integrity: sha1-fuZemm6zzNxIFlk6T/OIQDBt6Io=} + resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.62.1': - resolution: {integrity: sha1-4rXyT+chBEGJy36BEXyW11l51ic=} + resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/type-utils@8.62.1': - resolution: {integrity: sha1-69MLE7rLEwcJFyWaIzCc9kQSH5o=} + resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/types@8.62.1': - resolution: {integrity: sha1-xYvpVOSDsvyYJ1N01by0C5mELcE=} + resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.62.1': - resolution: {integrity: sha1-mMG7F2NdWwJrJBk6jSkYisZDgP8=} + resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/utils@8.62.1': - resolution: {integrity: sha1-FiK3XH5t8wgYHdC0SFXcQijaBFc=} + resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/visitor-keys@8.62.1': - resolution: {integrity: sha1-SZZX13/6+4qZ6x1sl4R8pDAjRyI=} + resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typespec/ts-http-runtime@0.2.2': - resolution: {integrity: sha1-oMdFjtmarm1+si78F6g5zsC0obM=} + resolution: {integrity: sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==} engines: {node: '>=18.0.0'} '@typespec/ts-http-runtime@0.3.3': - resolution: {integrity: sha1-YnZ7iN87p/xTv9ZqlMiN/h3sVbw=} + resolution: {integrity: sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==} engines: {node: '>=20.0.0'} '@upsetjs/venn.js@2.0.0': - resolution: {integrity: sha1-O+GSA4zdqSeqT4siq1Gvgqv0fzQ=} + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} '@vscode/codicons@0.0.42': - resolution: {integrity: sha1-eLbIwCfvQBdie4Qr7iuF1lYi4sU=} + resolution: {integrity: sha512-PlWPUA32rdiJE6250ltFGMzM3GyC1L9OaryDGOpxiMU0H9lBtEJrSFxpRvefdgJuQRcyUenGFTYzFuFbR9qzjg==} '@vscode/test-cli@0.0.12': - resolution: {integrity: sha1-OMFAVDahyWDhq8CHkOqCL8mz5BI=} + resolution: {integrity: sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==} engines: {node: '>=18'} hasBin: true '@vscode/test-electron@2.5.2': - resolution: {integrity: sha1-99QHjoIwzpyUMi8qKcwWwXlUCF0=} + resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} engines: {node: '>=16'} '@vscode/vsce-sign-alpine-arm64@2.0.2': - resolution: {integrity: sha1-SszEheVapv8EsZW0f3IurVfapY4=} + resolution: {integrity: sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==} cpu: [arm64] os: [alpine] '@vscode/vsce-sign-alpine-x64@2.0.2': - resolution: {integrity: sha1-Skt7UFtMwPWFljlIl8SaC84OVAw=} + resolution: {integrity: sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==} cpu: [x64] os: [alpine] '@vscode/vsce-sign-darwin-arm64@2.0.2': - resolution: {integrity: sha1-EKpp/rf4Gj3GjCQgOMoD6v8ZwS4=} + resolution: {integrity: sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==} cpu: [arm64] os: [darwin] '@vscode/vsce-sign-darwin-x64@2.0.2': - resolution: {integrity: sha1-MxVSjz6hAHpkizMgv/NqM6ngeqU=} + resolution: {integrity: sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==} cpu: [x64] os: [darwin] '@vscode/vsce-sign-linux-arm64@2.0.2': - resolution: {integrity: sha1-zlxc/JnjRUtPt3BAWBK0a9bcqHA=} + resolution: {integrity: sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==} cpu: [arm64] os: [linux] '@vscode/vsce-sign-linux-arm@2.0.2': - resolution: {integrity: sha1-QUL9qD5xMLMa7diqgeTapjNDI8I=} + resolution: {integrity: sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==} cpu: [arm] os: [linux] '@vscode/vsce-sign-linux-x64@2.0.2': - resolution: {integrity: sha1-WauT8yLvs89JFm1OLoEnicMRdCg=} + resolution: {integrity: sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==} cpu: [x64] os: [linux] '@vscode/vsce-sign-win32-arm64@2.0.2': - resolution: {integrity: sha1-0JVwShSwQEwLb2lumInppRsxqGw=} + resolution: {integrity: sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==} cpu: [arm64] os: [win32] '@vscode/vsce-sign-win32-x64@2.0.2': - resolution: {integrity: sha1-KU6nK0T+3WlNSfXO9MVb84dtwlc=} + resolution: {integrity: sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==} cpu: [x64] os: [win32] '@vscode/vsce-sign@2.0.5': - resolution: {integrity: sha1-iFADZHbcDU4IDZwtgyXj6X7/UZM=} + resolution: {integrity: sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q==} '@vscode/vsce@3.4.0': - resolution: {integrity: sha1-9iNxjGi8nNK7Mhz11nkUcBZrlNk=} + resolution: {integrity: sha512-vKyQxFSipqO4e1vUM3iDzOzMSXIKVhrJlWuGgYv/GF1ihAM/zzs2MVSGFC4CfdhF1ep+5AoLn1aRFn96CGhEWA==} engines: {node: '>= 20'} hasBin: true '@vue/compiler-core@3.5.16': - resolution: {integrity: sha1-L5X08XwWwJxXu/ZDmQdbkhUGYws=} + resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==} '@vue/compiler-core@3.5.39': - resolution: {integrity: sha1-O26iuV88DtQEjv2H1xxGjkAhlR0=} + resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==} '@vue/compiler-dom@3.5.16': - resolution: {integrity: sha1-FR2DkCUpdcCxp3MCkiD9/Pqi10M=} + resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==} '@vue/compiler-dom@3.5.39': - resolution: {integrity: sha1-1CYWciM0QnYr7hcJ3MNM7vwa6HM=} + resolution: {integrity: sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==} '@vue/compiler-sfc@3.5.16': - resolution: {integrity: sha1-V39/1CpG+sg1f/7Ubo+zTTJphBk=} + resolution: {integrity: sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==} '@vue/compiler-sfc@3.5.39': - resolution: {integrity: sha1-PrE5UOdEK8hu7r5zKH7Lxr8WePU=} + resolution: {integrity: sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==} '@vue/compiler-ssr@3.5.16': - resolution: {integrity: sha1-O3h03/dxqy+F+wm+cfbHanX8xaw=} + resolution: {integrity: sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==} '@vue/compiler-ssr@3.5.39': - resolution: {integrity: sha1-UORMnsWR5BnoPrxtO87cuqP3CAU=} + resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==} '@vue/reactivity@3.5.16': - resolution: {integrity: sha1-UoxTWgiLPBtn8oXx8iEb55QluWI=} + resolution: {integrity: sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==} '@vue/runtime-core@3.5.16': - resolution: {integrity: sha1-CoKMMiIkraJvgaLiJ8PUrry3LHo=} + resolution: {integrity: sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==} '@vue/runtime-dom@3.5.16': - resolution: {integrity: sha1-wby8yoYrdxhvgcku3VF250Zw8Hg=} + resolution: {integrity: sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==} '@vue/server-renderer@3.5.16': - resolution: {integrity: sha1-WmjNHUI9hD90yeazcTOFCrqwfBM=} + resolution: {integrity: sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==} peerDependencies: vue: 3.5.16 '@vue/shared@3.5.16': - resolution: {integrity: sha1-1ep2cRgnQhkpOKS0y/hu8SvvdBg=} + resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==} '@vue/shared@3.5.39': - resolution: {integrity: sha1-aUva6dRzgcL8/txtUnTyRQBowew=} + resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==} '@web/browser-logs@0.4.1': - resolution: {integrity: sha1-G+RGTJs9ylN7RZ1Jyxhzpt7vBgk=} + resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} engines: {node: '>=18.0.0'} '@web/config-loader@0.3.3': - resolution: {integrity: sha1-E9SFLEedHzrbwfJNecfm7u3rbl0=} + resolution: {integrity: sha512-ilzeQzrPpPLWZhzFCV+4doxKDGm7oKVfdKpW9wiUNVgive34NSzCw+WzXTvjE4Jgr5CkyTDIObEmMrqQEjhT0g==} engines: {node: '>=18.0.0'} '@web/dev-server-core@0.7.5': - resolution: {integrity: sha1-soPUbrLAOE6EgxHsnaJdBru8R98=} + resolution: {integrity: sha512-Da65zsiN6iZPMRuj4Oa6YPwvsmZmo5gtPWhW2lx3GTUf5CAEapjVpZVlUXnKPL7M7zRuk72jSsIl8lo+XpTCtw==} engines: {node: '>=18.0.0'} '@web/dev-server-rollup@0.6.4': - resolution: {integrity: sha1-0KT2nkplnSt58XLoYjbOpshy6Bw=} + resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} engines: {node: '>=18.0.0'} '@web/dev-server@0.4.6': - resolution: {integrity: sha1-GKRCHUdKm9G/yQQZp6eY7QtVOMU=} + resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} engines: {node: '>=18.0.0'} hasBin: true '@web/parse5-utils@2.1.1': - resolution: {integrity: sha1-oUEU7OYPf1V3JBCwgTWF4EZHj90=} + resolution: {integrity: sha512-7rBVZEMGfrq2iPcAEwJ0KSNSvmA2a6jT2CK8/gyIOHgn4reg7bSSRbzyWIEYWyIkeRoYEukX/aW+nAeCgSSqhQ==} engines: {node: '>=18.0.0'} '@web/test-runner-chrome@0.17.0': - resolution: {integrity: sha1-kKQ1c1eBmP4GP+LYlkkWEeF6qmU=} + resolution: {integrity: sha512-Il5N9z41NKWCrQM1TVgRaDWWYoJtG5Ha4fG+cN1MWL2OlzBS4WoOb4lFV3EylZ7+W3twZOFr1zy2Rx61yDYd/A==} engines: {node: '>=18.0.0'} '@web/test-runner-commands@0.9.0': - resolution: {integrity: sha1-7RWgISSZSCBLsnVZ60N/9s7u4Gc=} + resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} engines: {node: '>=18.0.0'} '@web/test-runner-core@0.13.4': - resolution: {integrity: sha1-32p2s+lwrbvTujnocPS/ZX1txD8=} + resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} engines: {node: '>=18.0.0'} '@web/test-runner-coverage-v8@0.8.0': - resolution: {integrity: sha1-eD6faF8Uyvw0pr8yP32SaMFHeTM=} + resolution: {integrity: sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==} engines: {node: '>=18.0.0'} '@web/test-runner-mocha@0.9.0': - resolution: {integrity: sha1-T7+lwyIsjHh/3MBX3ZMqB2MmexA=} + resolution: {integrity: sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==} engines: {node: '>=18.0.0'} '@web/test-runner-playwright@0.11.1': - resolution: {integrity: sha1-2ZMRKuISbrdMHFoXHW6kTC3SS04=} + resolution: {integrity: sha512-l9tmX0LtBqMaKAApS4WshpB87A/M8sOHZyfCobSGuYqnREgz5rqQpX314yx+4fwHXLLTa5N64mTrawsYkLjliw==} engines: {node: '>=18.0.0'} '@web/test-runner@0.19.0': - resolution: {integrity: sha1-6+gad/lC72kKNQRUZzJqk3/JfFo=} + resolution: {integrity: sha512-qLUupi88OK1Kl52cWPD/2JewUCRUxYsZ1V1DyLd05P7u09zCdrUYrtkB/cViWyxlBe/TOvqkSNpcTv6zLJ9GoA==} engines: {node: '>=18.0.0'} hasBin: true '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha1-qfagfysDyVyNOMRTah/ftSH/VbY=} + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha1-/Moe7dscxOe27tT8eVbWgTshufs=} + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha1-4KFhUiSLw42u523X4h8Vxe86sec=} + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha1-giqbxgMWZTH31d+E5ntb+ZtyuWs=} + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha1-29kyVI5xGfS4p4d/1ajSDmNJCy0=} + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha1-5VYQh1j0SKroTIUOWTzhig6zHgs=} + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha1-lindqcRDDqtUtZEFPW3G87oFA0g=} + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha1-HF6qzh1gatosf9cEXqk1bFnuDbo=} + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha1-V8XD3rAQXQLOJfo/109OvJ/Qu7A=} + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha1-kXog6T9xrVYClmwtaFrgxsIfYPE=} + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha1-rGaJ9QIhm1kZjd7ELc1JaxAE1Zc=} + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha1-mR5/DAkMsLtiu6yIIHbj0hnalXA=} + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha1-5vce18yuRngcIGAX08FMUO+oEGs=} + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha1-s+E/GJNgXKeLUsaOVM9qhl+Qufs=} + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha1-O7PpY4qK5f2vlhDnoGtNn5qm/gc=} + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} '@webpack-cli/configtest@2.1.1': - resolution: {integrity: sha1-Oy+FLpHaxuO4X7KjFPuL70bZRkY=} + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x '@webpack-cli/info@2.0.2': - resolution: {integrity: sha1-zD+/Iu/riP9iMQz4hcWwn0SuD90=} + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x '@webpack-cli/serve@2.0.5': - resolution: {integrity: sha1-Ml20I5XNSf5sFAV/mpAOQn34gQ4=} + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x @@ -10772,95 +10790,95 @@ packages: optional: true '@xmldom/xmldom@0.8.13': - resolution: {integrity: sha1-ANHdlAshjf8uSTCdQQ2LshIVkiU=} + resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} '@xmldom/xmldom@0.9.10': - resolution: {integrity: sha1-oK1aJv6KqZYxCHBybhcEl392ne4=} + resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} engines: {node: '>=14.6'} '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=} + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} '@xtuc/long@4.2.2': - resolution: {integrity: sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=} + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} '@yomguithereal/helpers@1.1.1': - resolution: {integrity: sha1-GF37D4jKK+7FPQrfbu0VwzscVJ0=} + resolution: {integrity: sha512-UYvAq/XCA7xoh1juWDYsq3W0WywOB+pz8cgVnE1b45ZfdMhBvHDrgmSFG3jXeZSr2tMTYLGHFHON+ekG05Jebg==} '@zone-eu/mailsplit@5.4.8': - resolution: {integrity: sha1-/D5DP1uBMhAzJNdyjz+gBCauqCI=} + resolution: {integrity: sha512-eEyACj4JZ7sjzRvy26QhLgKEMWwQbsw1+QZnlLX+/gihcNH07lVPOcnwf5U6UAL7gkc//J3jVd76o/WS+taUiA==} abab@2.0.6: - resolution: {integrity: sha1-QbgPLIcdGWhiFrgjCSMc/Tyz0pE=} + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead abbrev@4.0.0: - resolution: {integrity: sha1-7JM/Die2zWDom1xrKjBK9CIJuwU=} + resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} engines: {node: ^20.17.0 || >=22.9.0} abort-controller@3.0.0: - resolution: {integrity: sha1-6vVNU7YrrkE46AnKIlyEOabvs5I=} + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} accepts@1.3.8: - resolution: {integrity: sha1-C/C+EltnAUrcsLCSHmLbe//hay4=} + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} accepts@2.0.0: - resolution: {integrity: sha1-u89LpQdUZ/PyEx6rPP/HPC9deJU=} + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} acorn-globals@7.0.1: - resolution: {integrity: sha1-Db8FxE+nyUMykUwCBm1b7/YsQMM=} + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} acorn-import-phases@1.0.4: - resolution: {integrity: sha1-FuuFC6maBWy3y/6HL/uJcuGMi9c=} + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} engines: {node: '>=10.13.0'} peerDependencies: acorn: ^8.14.0 acorn-jsx@5.3.2: - resolution: {integrity: sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=} + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@8.3.0: - resolution: {integrity: sha1-IJdmWvUP0M96LfzNK5Nolk5mVA8=} + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} engines: {node: '>=0.4.0'} acorn@7.4.1: - resolution: {integrity: sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=} + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true acorn@8.17.0: - resolution: {integrity: sha1-F4WtuE+vjYrdEDabk4Jvwr0I8f4=} + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true agent-base@5.1.1: - resolution: {integrity: sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=} + resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} engines: {node: '>= 6.0.0'} agent-base@6.0.2: - resolution: {integrity: sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=} + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} agent-base@7.1.3: - resolution: {integrity: sha1-KUNeuCG8QZRjOluJ5bxHA7r8JaE=} + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} agentkeepalive@4.6.0: - resolution: {integrity: sha1-Nfc+lLP0C/ZfEFIZxiOtGcE26mo=} + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} aggregate-error@3.1.0: - resolution: {integrity: sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=} + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} ajv-formats@2.1.1: - resolution: {integrity: sha1-bmaUAGWet0lzu/LjMycYCgmWtSA=} + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -10868,7 +10886,7 @@ packages: optional: true ajv-formats@3.0.1: - resolution: {integrity: sha1-PV3HYryhdnnDwup+kK1rdTIwlXg=} + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -10876,281 +10894,281 @@ packages: optional: true ajv-keywords@3.5.2: - resolution: {integrity: sha1-MfKdpatuANHC0yms97WSlhTVAU0=} + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 ajv-keywords@5.1.0: - resolution: {integrity: sha1-adTThaRzPNvqtElkoRcKiPh/DhY=} + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 ajv@6.15.0: - resolution: {integrity: sha1-B+mCx0YmFnqnoklcU4F4ktcTlJI=} + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.18.0: - resolution: {integrity: sha1-iGQYa2c40APrOpMxcrs4M+EM77w=} + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ajv@8.20.0: - resolution: {integrity: sha1-MEs2Nq3Yi6fZNnYN1Q7OAG3qlfk=} + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-colors@4.1.3: - resolution: {integrity: sha1-N2ETQOsiQ+cMxgTK011jJw1IeBs=} + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} ansi-escapes@4.3.2: - resolution: {integrity: sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=} + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} ansi-escapes@7.0.0: - resolution: {integrity: sha1-APwZ9JG7sY4dSBuXhoIE+SEJv+c=} + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} ansi-html-community@0.0.8: - resolution: {integrity: sha1-afvE1sy+OD+XNpNK40w/gpDxv0E=} + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true ansi-regex@5.0.1: - resolution: {integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=} + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} ansi-regex@6.2.2: - resolution: {integrity: sha1-YCFu6kZNhkWXzigyAAc4oFiWUME=} + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: - resolution: {integrity: sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=} + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} ansi-styles@4.3.0: - resolution: {integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc=} + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: {integrity: sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=} + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} ansi-styles@6.2.3: - resolution: {integrity: sha1-wETV3MUhoHZBNHJZehrLHxA8QEE=} + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansi_up@6.0.5: - resolution: {integrity: sha1-k6s9bjHVjDUURZGCyh81q7t6PNk=} + resolution: {integrity: sha512-bo4K8S5usgFivfgvgQozTC2EfusPf76o7w0LUVdAOkpISvVmQqtwCdF5c6okokrgIN13KhFIVB/0BhnNXueQeA==} ansi_up@6.0.6: - resolution: {integrity: sha1-gE+vMfA4XlYtL3EnXqjP8Nnc9tw=} + resolution: {integrity: sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==} ansis@3.17.0: - resolution: {integrity: sha1-+o2cKpP+fRF34MF/nutWKlioMtc=} + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} any-promise@1.3.0: - resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} anymatch@3.1.3: - resolution: {integrity: sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4=} + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} apache-arrow@18.1.0: - resolution: {integrity: sha1-uxep6R5OL3tc9O/LnBq1fO2sfio=} + resolution: {integrity: sha512-v/ShMp57iBnBp4lDgV8Jx3d3Q5/Hac25FWmQ98eMahUiHPXcvwIMKJD0hBIgclm/FCG+LwPkAKtkRO1O/W0YGg==} hasBin: true app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha1-La+C+LrcaY4K3Mlbo2r0/wZQ3IA=} + resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} app-builder-lib@26.8.1: - resolution: {integrity: sha1-MVyJO/H1iCzGzRdM/NAFNdu3Z4Y=} + resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} engines: {node: '>=14.0.0'} peerDependencies: dmg-builder: 26.8.1 electron-builder-squirrel-windows: 26.8.1 app-module-path@2.2.0: - resolution: {integrity: sha1-ZBqlXft9am8KgUHEucCqULbCTdU=} + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} archiver-utils@2.1.0: - resolution: {integrity: sha1-6KRg6UtpPD49oYKgmMpihbqSSeI=} + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} archiver-utils@5.0.2: - resolution: {integrity: sha1-Y7xxnZUYA+/HLPlhpW74EHYN0U0=} + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} archiver@3.1.1: - resolution: {integrity: sha1-nbeBnU2vYK7BD+hrFsuSWM7WbqA=} + resolution: {integrity: sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==} engines: {node: '>= 6'} archiver@7.0.1: - resolution: {integrity: sha1-ydkcNQNiBAuJJzeceqacBlUSL2E=} + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} arg@4.1.3: - resolution: {integrity: sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=} + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} argparse@1.0.10: - resolution: {integrity: sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=} + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: - resolution: {integrity: sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=} + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} arr-union@3.1.0: - resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=} + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} array-back@3.1.0: - resolution: {integrity: sha1-uIWdelCIccmnss9C+ZQo9l6Wv7A=} + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} array-back@6.2.2: - resolution: {integrity: sha1-9WfZnpr4im09L538wh22+bqf0Vc=} + resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} array-buffer-byte-length@1.0.2: - resolution: {integrity: sha1-OE0So3KVrsN2mrAirTI6GKUcz4s=} + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} array-differ@3.0.0: - resolution: {integrity: sha1-PLs9DzFoEOr8xHYkc0I31q7krms=} + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} array-flatten@1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} array-union@2.1.0: - resolution: {integrity: sha1-t5hCCtvrHego2ErNii4j0+/oXo0=} + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha1-nXYNhNvdBtDL+SyISWFaGnqzGDw=} + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} arrify@2.0.1: - resolution: {integrity: sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo=} + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} asap@2.0.6: - resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=} + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} asn1@0.2.6: - resolution: {integrity: sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0=} + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} asn1js@3.0.10: - resolution: {integrity: sha1-3ybIdMiotBymBe/qR7KtB1UQE90=} + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} engines: {node: '>=12.0.0'} assert-never@1.4.0: - resolution: {integrity: sha1-sNSYhijIfzXrlHFsxUQipjkn4XU=} + resolution: {integrity: sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==} assert-plus@1.0.0: - resolution: {integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=} + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} assertion-error@2.0.1: - resolution: {integrity: sha1-9kGhlrM1aQsQcL8AtudZP+wZC/c=} + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} ast-module-types@6.0.2: - resolution: {integrity: sha1-sYoH3ja85N+4jt8FHI1oCNT+PdY=} + resolution: {integrity: sha512-6KuK/7nZ/2Qh7sGuVEiwxjCxzTY2Pdb5mTo5z1e6/J8BA0tvjR7G8vQJKrQMTqwmnA3UPEyKIFX4YUS1DO1Hvw==} engines: {node: '>=18'} ast-types@0.13.4: - resolution: {integrity: sha1-7g13s0MmOWXsw/ti2hbnIisrZ4I=} + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} astral-regex@2.0.0: - resolution: {integrity: sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=} + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} async-exit-hook@2.0.1: - resolution: {integrity: sha1-i9iwJLDsmxwBzMua+dspvXF9+vM=} + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} engines: {node: '>=0.12.0'} async-function@1.0.0: - resolution: {integrity: sha1-UJyfymDq+FA0xoKYOBiOTkyP+ys=} + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} async-mutex@0.4.0: - resolution: {integrity: sha1-roBIzU0ErOlDR1B1BLPPFeYxwl8=} + resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} async@2.6.4: - resolution: {integrity: sha1-cGt/9ghGZM1+rnE/b5ZUM7VQQiE=} + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} async@3.2.6: - resolution: {integrity: sha1-Gwco4Ukp1RuFtEm38G4nwRReOM4=} + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} asynckit@0.4.0: - resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} at-least-node@1.0.0: - resolution: {integrity: sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=} + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} auto-bind@5.0.1: - resolution: {integrity: sha1-UNjmPqWh3dy15eNkUcGoJm/7sq4=} + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} available-typed-arrays@1.0.7: - resolution: {integrity: sha1-pcw3XWoDwu/IelU/PgsVIt7xSEY=} + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} axe-core@4.11.4: - resolution: {integrity: sha1-W1NeOB/x5h/91hXlSD0WGG07RqU=} + resolution: {integrity: sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==} engines: {node: '>=4'} azure-devops-node-api@12.5.0: - resolution: {integrity: sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=} + resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} b4a@1.6.7: - resolution: {integrity: sha1-qZWH1Ou/vVpuOyG9tdX6OFdnq+Q=} + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} babel-jest@29.7.0: - resolution: {integrity: sha1-9DaZGSJbaExWCFmYrGPb0FvgINU=} + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha1-+ojsWSMv2bTjbbvFQKjsmptH2nM=} + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha1-qtvpQ0ZBgqiSLDySfDBn/0DSRiY=} + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha1-IHMNbNx92l2JQByrEKxqMgZ6zeY=} + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: '@babel/core': ^7.0.0 || ^8.0.0-0 babel-preset-jest@29.6.3: - resolution: {integrity: sha1-+gX6UQ59STiW17DdIDNgHIQPFxw=} + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 babel-walk@3.0.0-canary-5: - resolution: {integrity: sha1-9m7Ncpg1eu5ElV8jWm71QhkQSxE=} + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} engines: {node: '>= 10.0.0'} badgen@3.3.2: - resolution: {integrity: sha1-jQhoC87/j+DFlouDqYw4MPHagV8=} + resolution: {integrity: sha512-fbQwK9norfdzbdsoPwbLIAmgBXDGEme3jeIyqPAH7o6vp9lmuLHS7uXULvOiQ6XnMLkYNG4gDjILf74hgtTAug==} bail@2.0.2: - resolution: {integrity: sha1-0m9c2P5db4MqMVF7n3w1YEC6bV0=} + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: - resolution: {integrity: sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=} + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.3: - resolution: {integrity: sha1-Yzei8j4GBKMEgUI0MvmerGA1mfk=} + resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} bare-events@2.5.4: - resolution: {integrity: sha1-FhQ9Q14e2er9GrhfEribM1ekF0U=} + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} bare-fs@4.1.5: - resolution: {integrity: sha1-HQbAduaMyL+XAQ0pr546w4CM3Pc=} + resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -11159,14 +11177,14 @@ packages: optional: true bare-os@3.6.1: - resolution: {integrity: sha1-mSH29Z7b6Br6n1aRBlhCLA9IWNQ=} + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: - resolution: {integrity: sha1-tZ0YEwulKmr5J22z6WouPT6lIXg=} + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} bare-stream@2.6.5: - resolution: {integrity: sha1-u6joeWdMTCf34ngF3wBcFdeiygc=} + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -11177,171 +11195,171 @@ packages: optional: true base64-js@1.5.1: - resolution: {integrity: sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=} + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} baseline-browser-mapping@2.10.37: - resolution: {integrity: sha1-PmNkdbaykyROKyPixxoqudnmun0=} + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} engines: {node: '>=6.0.0'} hasBin: true basic-ftp@5.3.0: - resolution: {integrity: sha1-iPBX0bqEQmQ8UFxMg7uqREKxXP0=} + resolution: {integrity: sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==} engines: {node: '>=10.0.0'} batch@0.6.1: - resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=} + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} bent@7.3.12: - resolution: {integrity: sha1-4KJ3XUQl52dMZLeLJCr09J2msDU=} + resolution: {integrity: sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==} better-sqlite3@12.6.2: - resolution: {integrity: sha1-dwZJ8opi5UOjYPPfoa/kzJRLGTc=} + resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} bidi-js@1.0.3: - resolution: {integrity: sha1-b4vPPId8TZIg3fSbm7aTDIj4d9I=} + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} bignumber.js@9.3.1: - resolution: {integrity: sha1-dZxard8v/cTxVPe0k+HIdw+IxNc=} + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} binary-extensions@2.3.0: - resolution: {integrity: sha1-9uFKl4WNMnJSIAJC1Mz+UixEVSI=} + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} binaryextensions@4.19.0: - resolution: {integrity: sha1-eUS0HOa7vNPlROBfZXlKxIyqoTI=} + resolution: {integrity: sha512-DRxnVbOi/1OgA5pA9EDiRT8gvVYeqfuN7TmPfLyt6cyho3KbHCi3EtDQf39TTmGDrR5dZ9CspdXhPkL/j/WGbg==} engines: {node: '>=0.8'} bindings@1.5.0: - resolution: {integrity: sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=} + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} bl@4.1.0: - resolution: {integrity: sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=} + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} blamer@1.0.7: - resolution: {integrity: sha1-tUW9J8a6WDujGJcHr2tL929mUg4=} + resolution: {integrity: sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==} engines: {node: '>=8.9'} body-parser@1.20.3: - resolution: {integrity: sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=} + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} body-parser@1.20.5: - resolution: {integrity: sha1-MDyMNEI9HW+nmbx2TpPB5Nxuv2Q=} + resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} body-parser@2.2.2: - resolution: {integrity: sha1-GjLNuWa+r2jeUKnfvltY+Dy4iQw=} + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} bonjour-service@1.4.1: - resolution: {integrity: sha1-Z9DU5QUjqQsdS0RcSQyv3xC5n1g=} + resolution: {integrity: sha512-9KM4QMPKnaJqaja1v7gYO/+TXZGLtzPA05NmUTqDAJjcsWeVoOXKMvU9g0gfuuoYTQqJZ924hivICd5R/bCJbA==} boolbase@1.0.0: - resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} boolean@3.2.0: - resolution: {integrity: sha1-nlKUr06YMUSUy7F5efpUyhWfEWs=} + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. bootstrap@5.3.6: - resolution: {integrity: sha1-+9keuv8JP1sZGhwBqMhm0k+fpuE=} + resolution: {integrity: sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA==} peerDependencies: '@popperjs/core': ^2.11.8 boundary@2.0.0: - resolution: {integrity: sha1-FpyLHw1Ezywlk4lnoyjzfgpOXvw=} + resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} bowser@2.11.0: - resolution: {integrity: sha1-XKPDV1enqldxUAxwpzqfke9CCo8=} + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} brace-expansion@1.1.15: - resolution: {integrity: sha1-ptkNVAZyNuX0JXCjtzeNWU2bdzg=} + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} brace-expansion@2.1.1: - resolution: {integrity: sha1-xoscQRHHaq46b7pV1JbO4Qw52tg=} + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} brace-expansion@5.0.6: - resolution: {integrity: sha1-7Gj+CmQaKdhxFXnK9kHQW64fIoU=} + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: - resolution: {integrity: sha1-SQMy9AkZRSJy1VqEgK3AxEE1h4k=} + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} browser-stdout@1.3.1: - resolution: {integrity: sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=} + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} browserslist@4.28.2: - resolution: {integrity: sha1-9QtlNi70iXTKn1CzaAVm14a4EdI=} + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bs-logger@0.2.6: - resolution: {integrity: sha1-6302UwenLPl0zGzadraDVK0za9g=} + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} bser@2.1.1: - resolution: {integrity: sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=} + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} bson@6.10.3: - resolution: {integrity: sha1-X5pGOva4PiZL7dCLI20TVqMO2kc=} + resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} engines: {node: '>=16.20.1'} buffer-crc32@0.2.13: - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} buffer-crc32@1.0.0: - resolution: {integrity: sha1-oQmTuQVQgdVTBL2f60oHLeF59AU=} + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} buffer-from@1.1.2: - resolution: {integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=} + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.6.0: - resolution: {integrity: sha1-oxdJ3H2B2E2wir+Te2uMQDP2J4Y=} + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} buffer@5.7.1: - resolution: {integrity: sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=} + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} buffer@6.0.3: - resolution: {integrity: sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=} + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} builder-util-runtime@9.3.1: - resolution: {integrity: sha1-Da7d4PbTgfKgClCkB7Fm/n3KGmc=} + resolution: {integrity: sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==} engines: {node: '>=12.0.0'} builder-util-runtime@9.5.1: - resolution: {integrity: sha1-dBJfs3TR7L9HKuF4dIVIX/dhlwI=} + resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} engines: {node: '>=12.0.0'} builder-util@26.8.1: - resolution: {integrity: sha1-UP38LU/+tvc5rzY7W9YMScldQXA=} + resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} builtin-modules@3.3.0: - resolution: {integrity: sha1-yuYoEriYAellYzbkYiPgMDhr57Y=} + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} bundle-name@4.1.0: - resolution: {integrity: sha1-87lrNBYNZDGhnXaIE1r3z7h5eIk=} + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} bytes@3.1.2: - resolution: {integrity: sha1-iwvuuYYFrfGxKPpDhkA8AJ4CIaU=} + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} bytesish@0.4.4: - resolution: {integrity: sha1-87U1oPEVN0dCeu4nJWdIz/kjR+Y=} + resolution: {integrity: sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==} bytestreamjs@2.0.1: - resolution: {integrity: sha1-oylHx844mm+hGgmppWPQpFiJU14=} + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} c8@10.1.3: - resolution: {integrity: sha1-VK+yXr3MfzsAESSCxtkNdUGtL80=} + resolution: {integrity: sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -11351,436 +11369,436 @@ packages: optional: true cac@6.7.14: - resolution: {integrity: sha1-gE4eb1Bu42PLDjzLsJytXdmHCVk=} + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} cache-content-type@1.0.1: - resolution: {integrity: sha1-A1zeKwjuISn0qDFeqPAKANuhRTw=} + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} cacheable-lookup@5.0.4: - resolution: {integrity: sha1-WmuGWyxENXvj1evCpGewMnGacAU=} + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} cacheable-request@7.0.4: - resolution: {integrity: sha1-ejPr8IYTF4tANjW+e4mdPmm76Bc=} + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha1-S1QowiK+mF15w9gmV0edvgtZstY=} + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} call-bind@1.0.8: - resolution: {integrity: sha1-BzapZg9TfjOIgm9EDV7EX3ROqkw=} + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} call-bound@1.0.4: - resolution: {integrity: sha1-I43pNdKippKSjFOMfM+pEGf9Bio=} + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: - resolution: {integrity: sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=} + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} camel-case@4.1.2: - resolution: {integrity: sha1-lygHKpVPgFIoIlpt7qazhGHhvVo=} + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} camelcase@5.3.1: - resolution: {integrity: sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=} + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} camelcase@6.3.0: - resolution: {integrity: sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo=} + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} caniuse-lite@1.0.30001799: - resolution: {integrity: sha1-XJCROMJ/GmEhnT4JIHHBzH0y3FU=} + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} caseless@0.12.0: - resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} ccount@2.0.1: - resolution: {integrity: sha1-F6O/gjAuCHDW2kOgExGovAKj7PU=} + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} chai-a11y-axe@1.5.0: - resolution: {integrity: sha1-qvo3+R9Tuur+mCGXaOXe6Hds9lU=} + resolution: {integrity: sha512-V/Vg/zJDr9aIkaHJ2KQu7lGTQQm5ZOH4u1k5iTMvIXuSVlSuUo0jcSpSqf9wUn9zl6oQXa4e4E0cqH18KOgKlQ==} chalk-template@0.4.0: - resolution: {integrity: sha1-aSwDTQ7WJDa5BiwXB/rc0PdTIEs=} + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} chalk@2.4.2: - resolution: {integrity: sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=} + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} chalk@4.1.2: - resolution: {integrity: sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=} + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} chalk@5.6.2: - resolution: {integrity: sha1-sSOLbiPqM3r3HH+KKV21rwwViuo=} + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} change-case@5.4.4: - resolution: {integrity: sha1-DVK1B9j7jyBDQ0MjgdGm17/5egI=} + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} char-regex@1.0.2: - resolution: {integrity: sha1-10Q1giYhf5ge1Y9Hmx1rzClUXc8=} + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} character-entities@2.0.2: - resolution: {integrity: sha1-LQnC5yzZUjB2zLIRV9/2atQ/zCI=} + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} character-parser@2.2.0: - resolution: {integrity: sha1-x84o821LzZdE5f/CxfzeHHMmH8A=} + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} chardet@2.1.0: - resolution: {integrity: sha1-EAf0QaGun5GZpKZ/bpePsKqao/4=} + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} cheerio-select@2.1.0: - resolution: {integrity: sha1-TYZzKGuBJsoqjkJ0DV48SISuIbQ=} + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} cheerio@1.0.0-rc.12: - resolution: {integrity: sha1-eIv3RmUGsca/X65R0kosTWLkdoM=} + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} cheerio@1.1.0: - resolution: {integrity: sha1-h7m+xt02luQF6nnafSdJ2DCLCVM=} + resolution: {integrity: sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==} engines: {node: '>=18.17'} chokidar@3.6.0: - resolution: {integrity: sha1-GXxsxmnvKo3F57TZfuTgksPrDVs=} + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} chokidar@4.0.3: - resolution: {integrity: sha1-e+N6TAPJruHs/oYqSiOyxwwgXTA=} + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} chownr@1.1.4: - resolution: {integrity: sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=} + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} chownr@3.0.0: - resolution: {integrity: sha1-mFXmTs0kCpzEJnzopKpdJKHaFeQ=} + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} chrome-launcher@0.15.2: - resolution: {integrity: sha1-TmQE4yIACV/c5/ah4QBPm9Nvpdo=} + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} hasBin: true chrome-trace-event@1.0.3: - resolution: {integrity: sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=} + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} chromium-bidi@0.11.0: - resolution: {integrity: sha1-nDxC7ntC2ESOn86NZJ3Iv7zDEVM=} + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} peerDependencies: devtools-protocol: '*' chromium-bidi@14.0.0: - resolution: {integrity: sha1-FaEqsIOuUZpJpyTpSZTKCpztnI4=} + resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} peerDependencies: devtools-protocol: '*' chromium-pickle-js@0.2.0: - resolution: {integrity: sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=} + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} ci-info@3.9.0: - resolution: {integrity: sha1-QnmmICinsfJi80c/yWBfXiGMWbQ=} + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} ci-info@4.3.1: - resolution: {integrity: sha1-NVrVcZIIELViPhHUAjL0Q/FvHao=} + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} cjs-module-lexer@1.2.3: - resolution: {integrity: sha1-bDcKsZ+KM5TjGP5oJobsCsaE0Qc=} + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} clean-css@5.3.3: - resolution: {integrity: sha1-szBlPNO9a3UAnMJccUyue5M1HM0=} + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} clean-stack@2.2.0: - resolution: {integrity: sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=} + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} clean-stack@3.0.1: - resolution: {integrity: sha1-FVvwsiIb9fT7qJUo0kxZU/F/46g=} + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} cli-boxes@3.0.0: - resolution: {integrity: sha1-caEMcW/uugBeRQTzYynvCxfPMUU=} + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} cli-cursor@3.1.0: - resolution: {integrity: sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=} + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} cli-cursor@4.0.0: - resolution: {integrity: sha1-POz+NzS/T+Aqg2HL3A9v4oxqV+o=} + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} cli-cursor@5.0.0: - resolution: {integrity: sha1-JKSDHs9aawHd6zL7caSyCIsNzjg=} + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} cli-highlight@2.1.11: - resolution: {integrity: sha1-SXNvpFLwqvT65YDjCssmgo0twb8=} + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true cli-spinners@2.9.2: - resolution: {integrity: sha1-F3Oo9LnE1qwxVj31Oz/B15Ri/kE=} + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} cli-table3@0.6.5: - resolution: {integrity: sha1-ATuRNRdic5wWqVZ8IaBGMuRJvy8=} + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} cli-truncate@2.1.0: - resolution: {integrity: sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=} + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} cli-truncate@4.0.0: - resolution: {integrity: sha1-bMKKKST+6eJc6R6XPbVscGbmFyo=} + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} cli-width@4.1.0: - resolution: {integrity: sha1-QtqsQdPCVO84rYrAN2chMBc2kcU=} + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} cliui@7.0.4: - resolution: {integrity: sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=} + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} cliui@8.0.1: - resolution: {integrity: sha1-DASwddsCy/5g3I5s8vVIaxo2CKo=} + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} clone-deep@0.2.4: - resolution: {integrity: sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=} + resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==} engines: {node: '>=0.10.0'} clone-deep@4.0.1: - resolution: {integrity: sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=} + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} clone-response@1.0.3: - resolution: {integrity: sha1-ryAyqkeBY5nPXwodDbkC9ReruMM=} + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} clone@1.0.4: - resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} clone@2.1.2: - resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} clsx@2.1.1: - resolution: {integrity: sha1-7tOXyf2L2IK/sY3qtxAgSaLzKZk=} + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} co-body@6.2.0: - resolution: {integrity: sha1-r9d21g5WWfTu6GLfg0mWmOsa6hs=} + resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} engines: {node: '>=8.0.0'} co@4.6.0: - resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} cockatiel@3.2.1: - resolution: {integrity: sha1-V1+Te8QECiCuJzUqbQfJxadBmB8=} + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} engines: {node: '>=16'} code-excerpt@4.0.0: - resolution: {integrity: sha1-LefUbphRQ4XLAfezt0EyARX0yV4=} + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} codemirror@6.0.1: - resolution: {integrity: sha1-YrkRQtRZBFR+4+Dg5MGnkVgDWik=} + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} collect-v8-coverage@1.0.2: - resolution: {integrity: sha1-wLKbzTO80HeaE0TCE2BR5q/T2ek=} + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@1.9.3: - resolution: {integrity: sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=} + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} color-convert@2.0.1: - resolution: {integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=} + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} color-name@1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: - resolution: {integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=} + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} color-string@1.9.1: - resolution: {integrity: sha1-RGf5FG8Db4Vbdk37W/hYK/NCx6Q=} + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} color@4.2.3: - resolution: {integrity: sha1-14HsteVyJO5D6pYnVgEHwODGRjo=} + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} colorette@1.4.0: - resolution: {integrity: sha1-UZD7uHJ2JZqGrXAL/yxtb6o/ykA=} + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} colorette@2.0.20: - resolution: {integrity: sha1-nreT5oMwZ/cjWQL807CZF6AAqVo=} + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} colors@1.4.0: - resolution: {integrity: sha1-xQSRR51MG9rtLJztMs98fcI2D3g=} + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} combined-stream@1.0.8: - resolution: {integrity: sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=} + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} command-line-args@5.2.1: - resolution: {integrity: sha1-xEwy5DelfXxRFXaWiTxZCenOxC4=} + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} command-line-usage@7.0.3: - resolution: {integrity: sha1-a86ZI1T2rxDs6itjG/3wyLO/rqM=} + resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} engines: {node: '>=12.20.0'} commander@10.0.1: - resolution: {integrity: sha1-iB7ka0930cHczFgjQzqjmwIsvgY=} + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} commander@12.1.0: - resolution: {integrity: sha1-AUI7NvUBJZ/arE0OTWDJbJkVhdM=} + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} commander@14.0.2: - resolution: {integrity: sha1-tx/Tf+QGnkw8fBOSUlKtpOuhTo4=} + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} commander@15.0.0: - resolution: {integrity: sha1-lvOWHxKtrBeZ7z+9i8YdQFctGxE=} + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} engines: {node: '>=22.12.0'} commander@2.20.3: - resolution: {integrity: sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=} + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@5.1.0: - resolution: {integrity: sha1-Rqu9FlL44Fm92u+Zu9yyrZzxea4=} + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} commander@7.2.0: - resolution: {integrity: sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=} + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} commander@8.3.0: - resolution: {integrity: sha1-SDfqGy2me5xhamevuw+v7lZ7ymY=} + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} commander@9.5.0: - resolution: {integrity: sha1-vAjR61zt98y3l6lhmdQce8PmDTA=} + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} commondir@1.0.1: - resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} compare-version@0.1.2: - resolution: {integrity: sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=} + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} engines: {node: '>=0.10.0'} compress-commons@2.1.1: - resolution: {integrity: sha1-lBDZpTTPhDXj+7t8bOSN4twvBhA=} + resolution: {integrity: sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==} engines: {node: '>= 6'} compress-commons@6.0.2: - resolution: {integrity: sha1-JtMSUaZrnWuiOoQGTs06anHSYJ4=} + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} compressible@2.0.18: - resolution: {integrity: sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=} + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} compression@1.8.1: - resolution: {integrity: sha1-SkXZCawWUJGVqaKL2RCUiJwYDXk=} + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} concurrently@9.1.2: - resolution: {integrity: sha1-ItkQkpaWHq7nc+Er+xzppmvJg2w=} + resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} engines: {node: '>=18'} hasBin: true connect-history-api-fallback@2.0.0: - resolution: {integrity: sha1-ZHJkhFJRoNryW5fOh4NMrOD18cg=} + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} constantinople@4.0.1: - resolution: {integrity: sha1-De8RP6Dk3I3oMzGlz3nIsyUhMVE=} + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} content-disposition@0.5.4: - resolution: {integrity: sha1-i4K076yCUSoCuwsdzsnSxejrW/4=} + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} content-disposition@1.0.1: - resolution: {integrity: sha1-qLe76ykEvv37Z4flwMCGlZ9gX5s=} + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} content-type@1.0.5: - resolution: {integrity: sha1-i3cxYmVtHRCGeEyPI6VM5tc9eRg=} + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} convert-source-map@2.0.0: - resolution: {integrity: sha1-S1YPZJ/E6RjdCrdc9JYei8iC2Co=} + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} convert-to-spaces@2.0.1: - resolution: {integrity: sha1-YabJj4qmJsFrKWuGKpFBKjO862s=} + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} cookie-signature@1.0.7: - resolution: {integrity: sha1-q13Xq3V8VOYPN+9lUPSBxCbRBFQ=} + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie-signature@1.2.2: - resolution: {integrity: sha1-V8f8PMKTrKuf7FTXPhVpDr5KF5M=} + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} cookie@0.7.2: - resolution: {integrity: sha1-VWNpxHKiupEPKXmJG1JrNDYjftc=} + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} cookies@0.9.1: - resolution: {integrity: sha1-P/7W9gu0+18Ub+7tulCsxBivZ+M=} + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} copy-anything@2.0.6: - resolution: {integrity: sha1-CSRU6pWEp7etVXMGKyqH9ZAPxIA=} + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} copy-webpack-plugin@12.0.2: - resolution: {integrity: sha1-k15XuOYYPIL5W9k332WKWfai2ig=} + resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.1.0 copyfiles@2.4.1: - resolution: {integrity: sha1-0tz/YKqtEBXwnQtm5/Dxxc08XaU=} + resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} hasBin: true core-util-is@1.0.2: - resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} core-util-is@1.0.3: - resolution: {integrity: sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=} + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cors@2.8.5: - resolution: {integrity: sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=} + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} cose-base@1.0.3: - resolution: {integrity: sha1-ZQM0tBuGlXilQzWLgM2n4Kvgpgo=} + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} cose-base@2.2.0: - resolution: {integrity: sha1-HDlcNbbhC7g/l2nKi4F9YUrdXAE=} + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} cosmiconfig@8.3.6: - resolution: {integrity: sha1-Bgorhx1m26bIU46hEYuhrBb1+uM=} + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -11789,7 +11807,7 @@ packages: optional: true cosmiconfig@9.0.0: - resolution: {integrity: sha1-NMP8WCh7kV866QWrbcPeJYtVrZ0=} + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -11798,304 +11816,304 @@ packages: optional: true crc-32@1.2.2: - resolution: {integrity: sha1-PK01qTS4v3HyXKUkttpR+36s4v8=} + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} hasBin: true crc32-stream@3.0.1: - resolution: {integrity: sha1-yubu7QA7DkTXOdJ53lrmOxcbToU=} + resolution: {integrity: sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==} engines: {node: '>= 6.9.0'} crc32-stream@6.0.0: - resolution: {integrity: sha1-hSmjho+LJ6u5FfbDYXwPre2/lDA=} + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} crc@3.8.0: - resolution: {integrity: sha1-rWAmnCyFb4wpnixMwN5FVpFAVsY=} + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} create-jest@29.7.0: - resolution: {integrity: sha1-o1XFs8seGvAroXf+ev1/7uSaUyA=} + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true create-require@1.1.1: - resolution: {integrity: sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM=} + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} crelt@1.0.6: - resolution: {integrity: sha1-fMiY6nThkPtu+drlf4+Bz3MC33I=} + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} cross-dirname@0.1.0: - resolution: {integrity: sha1-uJlZnzClOJ9Z54wVDhn5V60Wo3w=} + resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} cross-env@7.0.3: - resolution: {integrity: sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=} + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true cross-spawn@6.0.6: - resolution: {integrity: sha1-MNDvoHEt2361p24ehyG/+vprXVc=} + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} cross-spawn@7.0.6: - resolution: {integrity: sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8=} + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} crx@5.0.1: - resolution: {integrity: sha1-M/eoE3Ws+rGqOoKRQkIjQ03Al4s=} + resolution: {integrity: sha512-n/PzBx/fR1+xZCiJBats9y5zw/a+YBcoJ0ABnUaY56xb1RpXuFhsiCMpNY6WjVtylLzhUUXSWsbitesVg7v2vg==} engines: {node: '>=10'} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. hasBin: true css-select@4.3.0: - resolution: {integrity: sha1-23EpsoRmYv2GKM/ElquytZ5BUps=} + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} css-select@5.1.0: - resolution: {integrity: sha1-uOvWVUw2N8zHZoiAStP2pv2uqKY=} + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} css-tree@3.2.1: - resolution: {integrity: sha1-hsrHARVhJysw5rHgQrps4EeqdRg=} + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.1.0: - resolution: {integrity: sha1-+17/z3bx3eosgb36pN5E55uscPQ=} + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} cssfilter@0.0.10: - resolution: {integrity: sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=} + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} cssom@0.3.8: - resolution: {integrity: sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=} + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} cssom@0.5.0: - resolution: {integrity: sha1-0lT6ks2Lb72DgRufuu00ZjzBfDY=} + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} cssstyle@2.3.0: - resolution: {integrity: sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI=} + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} cssstyle@6.2.0: - resolution: {integrity: sha1-xBtZlVwZx6EiM1LWfKRidQIErQ8=} + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} engines: {node: '>=20'} csstype@3.1.3: - resolution: {integrity: sha1-2A/ylNEU+w5qxQD7+FtgE31+/4E=} + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha1-di+hId+ZMP/rUaSV2HkXxXCsIJs=} + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 cytoscape-dagre@2.5.0: - resolution: {integrity: sha1-R9mDWrZN0LWW2clHMfBwKC+C/Fo=} + resolution: {integrity: sha512-VG2Knemmshop4kh5fpLO27rYcyUaaDkRw+6PiX4bstpB+QFt0p2oauMrsjVbUamGWQ6YNavh7x2em2uZlzV44g==} peerDependencies: cytoscape: ^3.2.22 cytoscape-fcose@2.2.0: - resolution: {integrity: sha1-5Nb2SQ30+rWK6c6p5cOrjXRy9HE=} + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} peerDependencies: cytoscape: ^3.2.0 cytoscape@3.32.0: - resolution: {integrity: sha1-NLwkAsm8dFerfZSSdF8DS3v0dkQ=} + resolution: {integrity: sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==} engines: {node: '>=0.10'} cytoscape@3.33.3: - resolution: {integrity: sha1-bIhYI8sIjrjDEIfDXZeGYdzeXq4=} + resolution: {integrity: sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==} engines: {node: '>=0.10'} d3-array@2.12.1: - resolution: {integrity: sha1-4gtBqvzf/fXVCSgATs7PgVpGXoE=} + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} d3-array@3.2.4: - resolution: {integrity: sha1-Ff7DOyN/l6xdfJhtx32ic6jtC7U=} + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} engines: {node: '>=12'} d3-axis@3.0.0: - resolution: {integrity: sha1-xCpKE+gTHWN7dF/Clzgkz+r5MyI=} + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} engines: {node: '>=12'} d3-brush@3.0.0: - resolution: {integrity: sha1-b3Z8Ttjct53n7ePhwPieY+9k0xw=} + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} engines: {node: '>=12'} d3-chord@3.0.1: - resolution: {integrity: sha1-0VbWH0hfzoMn5qvzOctB2Mu6aWY=} + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} engines: {node: '>=12'} d3-cloud@1.2.7: - resolution: {integrity: sha1-WnM8S65DI4y7R2C7jy0VkSqK16U=} + resolution: {integrity: sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==} d3-color@3.1.0: - resolution: {integrity: sha1-OVsoM9+scVB/EqwvevI7+BneJOI=} + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} d3-contour@4.0.2: - resolution: {integrity: sha1-u5IGO8jFZjrLJCL5nHPLtsauO8w=} + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} engines: {node: '>=12'} d3-delaunay@6.0.4: - resolution: {integrity: sha1-mBaQOHM6ClurvtpVBU95W7nkpYs=} + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} engines: {node: '>=12'} d3-dispatch@1.0.6: - resolution: {integrity: sha1-ANN7zuTdjNl3Kd2JOgrCnKq6XVg=} + resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} d3-dispatch@3.0.1: - resolution: {integrity: sha1-X8dShOnCN1w2yDlBGgz1UMv8TV4=} + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} d3-drag@3.0.0: - resolution: {integrity: sha1-mUqunNI8cZ9TteEOOgphCMaWB7o=} + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} engines: {node: '>=12'} d3-dsv@3.0.1: - resolution: {integrity: sha1-xjr5ePTWoNCEpSpnOSK+IWB4m3M=} + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} engines: {node: '>=12'} hasBin: true d3-ease@3.0.1: - resolution: {integrity: sha1-llisOKIUDVnTRhYPH2ww/aC9EvQ=} + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} d3-fetch@3.0.1: - resolution: {integrity: sha1-gxQb/5hWoO21443onNz+Y9CmCiI=} + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} engines: {node: '>=12'} d3-force@3.0.0: - resolution: {integrity: sha1-Piuhph5wiI/j2RlOMNbRTuzhVcQ=} + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} engines: {node: '>=12'} d3-format@3.1.0: - resolution: {integrity: sha1-kmDiOijqXLEJ6TshoG4k4uvVVkE=} + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} engines: {node: '>=12'} d3-geo@3.1.1: - resolution: {integrity: sha1-YCfPUSRvmy69ZPmeAdx8M2QDOk0=} + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} engines: {node: '>=12'} d3-hierarchy@3.1.2: - resolution: {integrity: sha1-sBzULB7tPUbbd6WWbPcm+MCRYMY=} + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} engines: {node: '>=12'} d3-interpolate@3.0.1: - resolution: {integrity: sha1-PEeqWzLFs9+1bvP9Q0IHimMrQA0=} + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} d3-path@1.0.9: - resolution: {integrity: sha1-SMBQux/owmJJOoyvVSTj6VkXAc8=} + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} d3-path@3.1.0: - resolution: {integrity: sha1-It+TkDL7WnGuixgA1h3beFHEJSY=} + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} engines: {node: '>=12'} d3-polygon@3.0.1: - resolution: {integrity: sha1-C0XT3RxIopyOBX5hNWk+yAvxY5g=} + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} engines: {node: '>=12'} d3-quadtree@3.0.1: - resolution: {integrity: sha1-bco+i+Kzk8mp1RTau9gKkt7vGk8=} + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} engines: {node: '>=12'} d3-random@3.0.1: - resolution: {integrity: sha1-1JJjeNMz2cC/0eb6AZTTCuuqIPQ=} + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} engines: {node: '>=12'} d3-sankey@0.12.3: - resolution: {integrity: sha1-s8JoYnvXLl2AM26N5qy/7J0V0B0=} + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} d3-scale-chromatic@3.1.0: - resolution: {integrity: sha1-NMOdopiyPCDgLxpLI5vQ8i5/ExQ=} + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} engines: {node: '>=12'} d3-scale@4.0.2: - resolution: {integrity: sha1-grOOjo/3CAdk+Nzsd71L45Nok5Y=} + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} engines: {node: '>=12'} d3-selection@3.0.0: - resolution: {integrity: sha1-wlM4IH76csxbm9FFihpBkB8eGzE=} + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} d3-shape@1.3.7: - resolution: {integrity: sha1-32OAG+B7yYa8VPY3ibT+UCmStdc=} + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} d3-shape@3.2.0: - resolution: {integrity: sha1-oag5y9m6RfKGdMadf4Vbz5HfxqU=} + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} engines: {node: '>=12'} d3-time-format@4.1.0: - resolution: {integrity: sha1-erUlelBB0R7LT+cKXH0WoZW7QIo=} + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} d3-time@3.1.0: - resolution: {integrity: sha1-kxDbVumS48AXXh7zheVF5Iqbtcc=} + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} d3-timer@3.0.1: - resolution: {integrity: sha1-YoTSonCChbGrt+IB7aQ4CvNeY7A=} + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} d3-transition@3.0.1: - resolution: {integrity: sha1-aGn93hRIhoB3/dWYkgDLYbKhZF8=} + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} engines: {node: '>=12'} peerDependencies: d3-selection: 2 - 3 d3-zoom@3.0.0: - resolution: {integrity: sha1-0T9BZccyF//qpUKVzWlps+eu6PM=} + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} engines: {node: '>=12'} d3@7.9.0: - resolution: {integrity: sha1-V556yz10nK+IYL0XQa6NNxBwzV0=} + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} engines: {node: '>=12'} dagre-d3-es@7.0.14: - resolution: {integrity: sha1-EnInbiZFfPO5faxWn48FMewzw3c=} + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} dagre@0.8.5: - resolution: {integrity: sha1-ujCwBV2sErbB/MJHgXRCd30Gr+4=} + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} data-uri-to-buffer@6.0.2: - resolution: {integrity: sha1-ili7ZzhLJho47xi+oYEMsBut0os=} + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} data-urls@3.0.2: - resolution: {integrity: sha1-nPJKR3riK871zV9vC/vB0tO+kUM=} + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} data-urls@7.0.0: - resolution: {integrity: sha1-bc6LYyJqHs/dkHzhiozPse7lBtM=} + 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: sha1-IRoDupXsr3eYqMcZjXlTYhH4hXA=} + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} data-view-byte-length@1.0.2: - resolution: {integrity: sha1-noD3ylJFPOPpPSWjUxh2fqdwRzU=} + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} data-view-byte-offset@1.0.1: - resolution: {integrity: sha1-BoMH+bcat2274QKROJ4CCFZgYZE=} + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} date-fns@2.30.0: - resolution: {integrity: sha1-82fmRIOf9XiU7GrEgN5AyuSw9NA=} + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} date-fns@4.1.0: - resolution: {integrity: sha1-ZLPYP/9aqAQ49bGmM8LoO4ocLRQ=} + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} dayjs@1.11.20: - resolution: {integrity: sha1-iNkZ/WOdyZFBXaX0y28bZlCBGTg=} + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} dbus-next@0.10.2: - resolution: {integrity: sha1-phI84DY0ETWiJq4PF3hKWwHll3c=} + resolution: {integrity: sha512-kLNQoadPstLgKKGIXKrnRsMgtAK/o+ix3ZmcfTfvBHzghiO9yHXpoKImGnB50EXwnfSFaSAullW/7UrSkAISSQ==} debounce@1.2.1: - resolution: {integrity: sha1-OIgdj0FmpcWEgCDBGCe4NLyz4KU=} + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} debug@2.6.9: - resolution: {integrity: sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=} + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -12103,7 +12121,7 @@ packages: optional: true debug@3.2.7: - resolution: {integrity: sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=} + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -12111,7 +12129,7 @@ packages: optional: true debug@4.4.1: - resolution: {integrity: sha1-5ai8bLxMbNPmQwiwaTo9T6VQGJs=} + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -12120,7 +12138,7 @@ packages: optional: true debug@4.4.3: - resolution: {integrity: sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=} + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -12129,21 +12147,21 @@ packages: optional: true decamelize@4.0.0: - resolution: {integrity: sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=} + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} decimal.js@10.6.0: - resolution: {integrity: sha1-5kmkPjq5U6chkv9Zg4ZeUJ837Zo=} + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} decode-named-character-reference@1.1.0: - resolution: {integrity: sha1-XWzmh5KAiQEhDaxCqOmFNRHiuL8=} + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} decompress-response@6.0.0: - resolution: {integrity: sha1-yjh2Et234QS9FthaqwDV7PCcZvw=} + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} dedent@1.7.0: - resolution: {integrity: sha1-wflEUzXwF1qWWHviRaKC/0UURso=} + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -12151,311 +12169,311 @@ packages: optional: true deep-equal@1.0.1: - resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=} + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} deep-extend@0.6.0: - resolution: {integrity: sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=} + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} deep-is@0.1.4: - resolution: {integrity: sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=} + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} deepmerge@4.3.1: - resolution: {integrity: sha1-RLXyFHzTsA1LVhN2hZZvJv0l3Uo=} + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} default-browser-id@5.0.0: - resolution: {integrity: sha1-odmL+WDBUILYo/pp6DFQzMzDryY=} + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} default-browser-id@5.0.1: - resolution: {integrity: sha1-96fMuPUQS/jg9xujscz6Xq/bIeg=} + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} default-browser@5.2.1: - resolution: {integrity: sha1-e3umEgT/PkJbVWhprm0+nZ8XEs8=} + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} default-browser@5.5.0: - resolution: {integrity: sha1-J5LohvJCKJRUWUfMgOGkRElsWXY=} + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} default-gateway@6.0.3: - resolution: {integrity: sha1-gZSUyIgFO9t0PtvzQ9bN9/KUOnE=} + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} defaults@1.0.4: - resolution: {integrity: sha1-sLAgYsHiqmL/XZUo8PmLqpCXjXo=} + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} defer-to-connect@2.0.1: - resolution: {integrity: sha1-gBa9tBQ+RjK3ejRJxiNid95SBYc=} + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} define-data-property@1.1.4: - resolution: {integrity: sha1-iU3BQbt9MGCuQ2b2oBB+aPvkjF4=} + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} define-lazy-prop@2.0.0: - resolution: {integrity: sha1-P3rkIRKbyqrJvHSQXJigAJ7J7n8=} + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} define-lazy-prop@3.0.0: - resolution: {integrity: sha1-27Ga37dG1/xtc0oGty9KANAhJV8=} + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} define-properties@1.2.1: - resolution: {integrity: sha1-EHgcxhbrlRqAoDS6/Kpzd/avK2w=} + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} degenerator@5.0.1: - resolution: {integrity: sha1-lAO/KXxtrZoezkCbN9snlU+R8vU=} + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} delaunator@5.0.1: - resolution: {integrity: sha1-OQMrCAU5I+kk1glP4s3hqZzFEng=} + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} delayed-stream@1.0.0: - resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} delegates@1.0.0: - resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} depd@1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} depd@2.0.0: - resolution: {integrity: sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=} + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dependency-graph@0.11.0: - resolution: {integrity: sha1-rAzn7WilTaIhZahel6AdU/XrLic=} + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} dependency-tree@11.5.0: - resolution: {integrity: sha1-//lUj4bm7OrOch34pcbaSzToyDQ=} + resolution: {integrity: sha512-K9zBwKDZrot3RkxizugpVSdImxULAg4Ycp3+ydy2r561k96oiiw6nfsOR15fwNDQ5BF2UXe+2JFM/H5Xz4MGQg==} engines: {node: '>=18'} hasBin: true dequal@2.0.3: - resolution: {integrity: sha1-JkQhTxmX057Q7g7OcjNUkKesZ74=} + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} destroy@1.2.0: - resolution: {integrity: sha1-SANzVQmti+VSk0xn32FPlOZvoBU=} + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} detect-indent@6.1.0: - resolution: {integrity: sha1-WSSF67v2s7GrK+F1yDk9BMoNV+Y=} + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} detect-indent@7.0.1: - resolution: {integrity: sha1-y7BgoShCucTTM/HKxKpNobtmvCU=} + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} engines: {node: '>=12.20'} detect-libc@2.0.3: - resolution: {integrity: sha1-8M1QO0D5k5uJRpfRmtUIleMM9wA=} + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} detect-libc@2.1.2: - resolution: {integrity: sha1-aJxdzcGQDvVYOky59te0c3QgdK0=} + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@3.1.0: - resolution: {integrity: sha1-V29d/GOuGhkv8ZLYrTr2MImRtlE=} + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} detect-newline@4.0.1: - resolution: {integrity: sha1-/O/bVxPh+4yyg5uLbuIuZxarjyM=} + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} detect-node@2.1.0: - resolution: {integrity: sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=} + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} detective-amd@6.1.0: - resolution: {integrity: sha1-esNfVTJa9d+XS7D+T9ysAycZ3DE=} + resolution: {integrity: sha512-fmI6LGMvotqd49QaA3ZYw+q0aGp2yXmMjzIuY6fH9j9YFIXY/73yDhMwhX9cPbhWd+AH06NH1Di/LKOuCH0Ubg==} engines: {node: '>=18'} hasBin: true detective-cjs@6.1.1: - resolution: {integrity: sha1-t8eLZJ29+gu6IoqyjJcH9KBNX9c=} + resolution: {integrity: sha512-pSh7mkCKEtLlmANqLu3KDFS3NV8Hx41jy/JF1/gAWOgU+Uo5QTkeI1tWNP4dWGo4L0E9j18Ez9EPsTleautKqA==} engines: {node: '>=18'} detective-es6@5.0.2: - resolution: {integrity: sha1-r8okW+VMu4uzFlkbGCy/m8gkPcA=} + resolution: {integrity: sha512-+qHHGYhjupiVs4rnIpI9nZ5B130A4AmE35ZX1w33hb46vcZ7T3jfDbvmPw0FhWtMHn5BS5HHu7ZtnZ53bMcXZA==} engines: {node: '>=18'} detective-postcss@8.0.4: - resolution: {integrity: sha1-1zlIPDDfu/YZQNH9sF0lBmNQcYk=} + resolution: {integrity: sha512-DZ7M/hWPZyr17ZUdoQ+TVXaPj70mYr4XXrAE+GeJbca44haCvZgb191L/jLJmFYewhxRJuBd4lUtNSu986TXag==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4.47 detective-sass@6.0.2: - resolution: {integrity: sha1-PzpHkYhKujU/wm3pCQvI3zLf0MQ=} + resolution: {integrity: sha512-i3xpXHDKS0qI2aFW4asQ7fqlPK00ndOVZELvQapFJCaF0VxYmsNWtd0AmvXbTLMk7bfO5VdIeorhY9KfmHVoVA==} engines: {node: '>=18'} detective-scss@5.0.2: - resolution: {integrity: sha1-GcAu4IXhyZTMK9QJ9tX302sVIgo=} + resolution: {integrity: sha512-9JOEMZ8pDh3ShXmftq7hoQqqJsClaGgxo1hghfCeFlmKf5TC/Twtwb0PAaK8dXwpg9Z0uCmEYSrCxO+kel2eEg==} engines: {node: '>=18'} detective-stylus@5.0.1: - resolution: {integrity: sha1-V9VKC0BTBe4WZV5CAIs4qCep8Xk=} + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} engines: {node: '>=18'} detective-typescript@14.1.2: - resolution: {integrity: sha1-EwIIq40NIZkxrnOUfOVoFKRittM=} + resolution: {integrity: sha512-bIeEn0eVi/JRsE1YizBR2ilnMlWRAIBJJ6kXCKNFxEEWhUcEY3R6I3KYIAy48ieURbD1hcb3Ebvl8AqeoPMSzg==} engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 || ^6.0.2 detective-vue2@2.3.0: - resolution: {integrity: sha1-jiApqW713PtXxdn+BbojCNbqK44=} + resolution: {integrity: sha512-3gwbZPqVTm9sL9XdZsgEJ7x4x99O853VVZHapQAiEkGuMJMpFPjHDrecSgfqnS5JW3FJfYXesLZGvUOibjn49g==} engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 || ^6.0.2 devlop@1.1.0: - resolution: {integrity: sha1-TbfCyk3G4Og0wwvnDJS7yXbccBg=} + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} devtools-protocol@0.0.1367902: - resolution: {integrity: sha1-czO/xEZsWlSkxt5Iqd+8tLgRZgw=} + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} devtools-protocol@0.0.1566079: - resolution: {integrity: sha1-KASe7QJaJc866pZPbGvVF3lsRKw=} + resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} diff-sequences@29.6.3: - resolution: {integrity: sha1-Ter4lNEUB8Ue/IQYAS+ecLhOqSE=} + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} diff@4.0.4: - resolution: {integrity: sha1-em2/2jJfJfB1F+m1GPiXwIMy4H0=} + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} diff@5.2.2: - resolution: {integrity: sha1-CkdCeXKB0Jz6aZt56jLSdyNiO60=} + resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} engines: {node: '>=0.3.1'} diff@7.0.0: - resolution: {integrity: sha1-P7NNOHzXbYA/buvqZ7kh2rAYKpo=} + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} dir-compare@4.2.0: - resolution: {integrity: sha1-0dSZnBT79VKBBx/a5Ck7O5zobxk=} + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} dir-glob@3.0.1: - resolution: {integrity: sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=} + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dmg-builder@26.8.1: - resolution: {integrity: sha1-35mqeQZ2rCoqwDM7utvvO2B2ywM=} + resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} dmg-license@1.0.11: - resolution: {integrity: sha1-ezvDdF0bUr51BrTugMth325M15o=} + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} engines: {node: '>=8'} os: [darwin] hasBin: true dns-packet@5.6.1: - resolution: {integrity: sha1-roiK1CWp0UeKBnQlarhm3hASzy8=} + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} doctypes@1.1.0: - resolution: {integrity: sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=} + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} dom-converter@0.2.0: - resolution: {integrity: sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=} + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dom-serializer@1.4.1: - resolution: {integrity: sha1-3l1Bsa6ikCFdxFptrorc8dMuLTA=} + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dom-serializer@2.0.0: - resolution: {integrity: sha1-5BuALh7t+fbK4YPOXmIteJ19jlM=} + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} domelementtype@2.3.0: - resolution: {integrity: sha1-XEXo6GmVJiYzHXqrMm0B2vZdWJ0=} + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} domexception@4.0.0: - resolution: {integrity: sha1-StG+VsytyG/HbQMzU5magDfQNnM=} + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead domhandler@4.3.1: - resolution: {integrity: sha1-jXkgM0FvWdaLwDpap7AYwcqJJ5w=} + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} engines: {node: '>= 4'} domhandler@5.0.3: - resolution: {integrity: sha1-zDhff3UfHR/GUMITdIBCVFOMfTE=} + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} dompurify@3.4.11: - resolution: {integrity: sha1-Kci6SWR18nnvQBV4QGhFL7FKBoA=} + resolution: {integrity: sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==} domutils@2.8.0: - resolution: {integrity: sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=} + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} domutils@3.1.0: - resolution: {integrity: sha1-xH9VEnjT3EsLGrjLtC11Gm8Ngk4=} + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} domutils@3.2.2: - resolution: {integrity: sha1-7b/itmiwwdl8JLrw8QYrEyIhvHg=} + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-case@3.0.4: - resolution: {integrity: sha1-mytnDQCkMWZ6inW6Kc0bmICc51E=} + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dotenv-expand@11.0.7: - resolution: {integrity: sha1-r2la6gB9b9yEyGzY0K1760CgvQg=} + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} dotenv@16.5.0: - resolution: {integrity: sha1-CStJ8l+AjwIAUAUdH/JY5ATHhpI=} + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} dotenv@17.4.2: - resolution: {integrity: sha1-wH5Up0bhHroCHdnhBHztWv3BwDQ=} + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} dunder-proto@1.0.1: - resolution: {integrity: sha1-165mfh3INIL4tw/Q9u78UNow9Yo=} + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} duplexer@0.1.2: - resolution: {integrity: sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=} + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} eastasianwidth@0.2.0: - resolution: {integrity: sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=} + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha1-rg8PothQRe8UqBfao86azQSJ5b8=} + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} ee-first@1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} ejs@3.1.10: - resolution: {integrity: sha1-aauDWLFOiW+AzDnmIIe4hQDDrDs=} + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true electron-builder-squirrel-windows@26.8.1: - resolution: {integrity: sha1-G23XCUsg+GNYUcz5b8MqXKuSC+k=} + resolution: {integrity: sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==} electron-builder@26.8.1: - resolution: {integrity: sha1-1JBWsv5dN/D5SqLrDh2zjyYfyMA=} + resolution: {integrity: sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@26.8.1: - resolution: {integrity: sha1-ajL6ju0NQZcd2lMHK+oGuZMr5YM=} + resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} electron-to-chromium@1.5.375: - resolution: {integrity: sha1-VKmmFtwrN2XnJj2Y0UwhNUCJVNk=} + resolution: {integrity: sha512-ZWP5eB4BVPW/ZYo9252hQZHZ5XavtsTgpbhcmMmRwymavC5AsLWQWBPaKMeNd2LW0KGby5HPXvj7+sr4ta5j/Q==} electron-updater@6.6.2: - resolution: {integrity: sha1-PmXgRPGpmwDWHiAOJN6OcJxpzpk=} + resolution: {integrity: sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==} electron-vite@4.0.1: - resolution: {integrity: sha1-bN95j4QsJVd5mDzK3Qaz1HXAL1c=} + resolution: {integrity: sha512-QqacJbA8f1pmwUTqki1qLL5vIBaOQmeq13CZZefZ3r3vKVaIoC7cpoTgE+KPKxJDFTax+iFZV0VYvLVWPiQ8Aw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -12466,218 +12484,218 @@ packages: optional: true electron-winstaller@5.4.0: - resolution: {integrity: sha1-8GYNR21cT1ef337dLwzwHVTE0LI=} + resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} electron@40.8.5: - resolution: {integrity: sha1-p+RZou7jW9AsMtqHFwySA4NlbE0=} + resolution: {integrity: sha512-pgTY/VPQKaiU4sTjfU96iyxCXrFm4htVPCMRT4b7q9ijNTRgtLmLvcmzp2G4e7xDrq9p7OLHSmu1rBKFf6Y1/A==} engines: {node: '>= 12.20.55'} hasBin: true emittery@0.13.1: - resolution: {integrity: sha1-wEuMNFdJDghHrlH87Tr1LTOOPa0=} + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} emoji-regex@10.4.0: - resolution: {integrity: sha1-A1U6/qgLOXV0nPyzb3dsomjkE9Q=} + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: - resolution: {integrity: sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=} + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: - resolution: {integrity: sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI=} + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} emojilib@2.4.0: - resolution: {integrity: sha1-rFGKi7DV923aVyicyy/fnTmuch4=} + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} encodeurl@1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} encodeurl@2.0.0: - resolution: {integrity: sha1-e46omAd9fkCdOsRUdOo46vCFelg=} + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} encoding-japanese@2.2.0: - resolution: {integrity: sha1-DvLSNRJQVH9DKi3RVUU1VcFt61k=} + resolution: {integrity: sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==} engines: {node: '>=8.10.0'} encoding-sniffer@0.2.1: - resolution: {integrity: sha1-OW7JesIs5aA3ukSvGZKsnUanuBk=} + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} encoding@0.1.13: - resolution: {integrity: sha1-VldK/deR9UqOmyeFwFgqLSYhD6k=} + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} end-of-stream@1.4.4: - resolution: {integrity: sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=} + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} end-of-stream@1.4.5: - resolution: {integrity: sha1-c0TXEd6kDgt0q8LtSXeHQ8ztsIw=} + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} enhanced-resolve@5.15.0: - resolution: {integrity: sha1-GvlGx9k2A+uI6Yls7kkE3AEunDU=} + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} enhanced-resolve@5.19.0: - resolution: {integrity: sha1-ZodEahXpaeqmPC+iaUUQ4Xrm2Xw=} + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} enhanced-resolve@5.24.1: - resolution: {integrity: sha1-skOa310x1+R2TeH57PlC1s0/yHQ=} + resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==} engines: {node: '>=10.13.0'} entities@2.2.0: - resolution: {integrity: sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=} + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} entities@4.5.0: - resolution: {integrity: sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=} + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} entities@6.0.1: - resolution: {integrity: sha1-wow0pDN5yn9h0HQTCy9fcCCjBpQ=} + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} entities@7.0.1: - resolution: {integrity: sha1-JuioiInbY0F9y5oeeaPxvJK1l2s=} + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} env-paths@2.2.1: - resolution: {integrity: sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=} + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} envinfo@7.11.0: - resolution: {integrity: sha1-w3k/RChKVf+Mgvrx/9kbxkeOoB8=} + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} engines: {node: '>=4'} hasBin: true environment@1.1.0: - resolution: {integrity: sha1-jobGaxgPNjx6sxF4fgJZZl9FqfE=} + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} err-code@2.0.3: - resolution: {integrity: sha1-I8Lzt1b/38YI0w4nyalBAkgH5/k=} + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} errno@0.1.8: - resolution: {integrity: sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=} + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true error-ex@1.3.2: - resolution: {integrity: sha1-tKxAZIEH/c3PriQvQovqihTU8b8=} + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} errorstacks@2.4.1: - resolution: {integrity: sha1-Ba323h9bBKZvLBLMBZPhvisYzQ8=} + resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} es-abstract@1.24.0: - resolution: {integrity: sha1-xEcy0r6wrMHtYN+ECGnjEG568yg=} + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: - resolution: {integrity: sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=} + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: {integrity: sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=} + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} es-module-lexer@1.7.0: - resolution: {integrity: sha1-kVlgFWGICoXyc0VgqQmbLDHlNyo=} + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-module-lexer@2.0.0: - resolution: {integrity: sha1-9lfNepRI3N2pwHCjy3Xl3B6F9bE=} + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: - resolution: {integrity: sha1-HE8sSDcydZfOadLKGQp/3RcjOME=} + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} es-object-atoms@1.1.2: - resolution: {integrity: sha1-otCzcyBXJN+lJdI7DD4bHKWCyZs=} + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: - resolution: {integrity: sha1-8x274MGDsAptJutjJcgQwP0YvU0=} + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} es-to-primitive@1.3.0: - resolution: {integrity: sha1-lsicgsxJ/YeUokg1uj4f+H8hThg=} + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} es-toolkit@1.46.1: - resolution: {integrity: sha1-OMonGRqYqGf8VEuBzxR3polH+wY=} + resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} es6-error@4.1.1: - resolution: {integrity: sha1-njr0B0Wd7tR+mpH5uIWoTrBcVh0=} + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} esbuild@0.21.5: - resolution: {integrity: sha1-nKMBsSCSKVm3ZjYNisgw2g0CmX0=} + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true esbuild@0.25.12: - resolution: {integrity: sha1-l6HQQfSrAML84vg40rmWmi0ql6U=} + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true esbuild@0.27.7: - resolution: {integrity: sha1-vK3OIrLz/XbyV+OmT4OmSYb+oR8=} + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} hasBin: true esbuild@0.28.1: - resolution: {integrity: sha1-70W0Y0ycnZeilq6kEUpfmED5VXg=} + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true escalade@3.2.0: - resolution: {integrity: sha1-ARo/aYVroYnf+n3I/M6Z0qh5A+U=} + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-html@1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} escape-string-regexp@2.0.0: - resolution: {integrity: sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=} + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} escape-string-regexp@4.0.0: - resolution: {integrity: sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=} + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} escape-string-regexp@5.0.0: - resolution: {integrity: sha1-RoMSa1ALYXYvLb66zhgG6L4xscg=} + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} escodegen@2.1.0: - resolution: {integrity: sha1-upO7t6Q5htKdYEH5n1Ji2nc+Lhc=} + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true eslint-plugin-sonarjs@4.1.0: - resolution: {integrity: sha1-YYeeWoU2peU7UkAYfMETpoP3EF4=} + resolution: {integrity: sha512-rh+FlVz0yfd2RNIb6WqSkuGh0addX/Qi5scwQ5FphXDFrM6fZKcxP1+attJ78yUKcyYfiu6MTaISPpAFPzqRJw==} peerDependencies: eslint: ^8.0.0 || ^9.0.0 || ^10.0.0 eslint-scope@5.1.1: - resolution: {integrity: sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=} + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} eslint-scope@9.1.2: - resolution: {integrity: sha1-ud5qzi+rHP8k0uWNhbdMj86jmAI=} + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: - resolution: {integrity: sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=} + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@5.0.1: - resolution: {integrity: sha1-njyUiWl4JNLUzjqK0SYo+R6fWb4=} + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint@10.6.0: - resolution: {integrity: sha1-4bQFnFgr6VDHCIybVfmEc4skPCc=} + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -12687,196 +12705,196 @@ packages: optional: true espree@11.2.0: - resolution: {integrity: sha1-AdXkfcMyqrowWQCDYkVKjMNMyqU=} + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@1.2.5: - resolution: {integrity: sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=} + resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==} engines: {node: '>=0.4.0'} hasBin: true esprima@4.0.1: - resolution: {integrity: sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=} + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true esquery@1.7.0: - resolution: {integrity: sha1-CNBI8mHw3e21uulfRoCUY9nJSW0=} + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: {integrity: sha1-eteWTWeauyi+5yzsY3WLHF0smSE=} + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: {integrity: sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=} + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: {integrity: sha1-LupSkHAvJquP5TcDcP+GyWXSESM=} + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: {integrity: sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw=} + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} esutils@2.0.3: - resolution: {integrity: sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=} + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} etag@1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} event-stream@3.3.4: - resolution: {integrity: sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=} + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} event-target-shim@5.0.1: - resolution: {integrity: sha1-XU0+vflYPWOlMzzi3rdICrKwV4k=} + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} eventemitter3@4.0.7: - resolution: {integrity: sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=} + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.4: - resolution: {integrity: sha1-qG1mFwQzcS3egUcHrFK1JxzrH+s=} + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} events@3.3.0: - resolution: {integrity: sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=} + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} eventsource-parser@3.0.6: - resolution: {integrity: sha1-KS4WXjTKy8k2w8knGe8ybUrrTpA=} + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} eventsource@3.0.7: - resolution: {integrity: sha1-EVdiLi9Td7tq7yEUNycougwVaYk=} + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} execa@1.0.0: - resolution: {integrity: sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=} + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} execa@4.1.0: - resolution: {integrity: sha1-TlSRrRVy8vF6d9OIxshXE1sihHo=} + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} execa@5.1.1: - resolution: {integrity: sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=} + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} exifreader@4.40.3: - resolution: {integrity: sha1-P1uewWrL5upiH3Uth0Tzo+ta5Ow=} + resolution: {integrity: sha512-58NvuV/lmrUoxR6Y3s5U3rwxn8ITB8xod2WgOkwew0oR5ziQj2bcJSXMbOTQPytnZi3grztHQhgZnHBSe3/P4A==} exit@0.1.2: - resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} expand-template@2.0.3: - resolution: {integrity: sha1-bhSz/O4POmNA7LV9LokYaSBSpHw=} + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} expect@29.7.0: - resolution: {integrity: sha1-V4h0WQ3LMhRRQITAgRXYruYeEbw=} + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} exponential-backoff@3.1.3: - resolution: {integrity: sha1-Uc+SwcBJPHZgU/nTq+5ENMJE0vY=} + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} express-rate-limit@7.5.1: - resolution: {integrity: sha1-jDpC9pIJo6HJaYkAcOzp4gqHnew=} + resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' express-rate-limit@8.3.1: - resolution: {integrity: sha1-CqugmOrdQPZzfzCpjmsW+hop7fs=} + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' express@4.22.1: - resolution: {integrity: sha1-HeI6CXRaT//bOSR7NEu16v84IGk=} + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} express@4.22.2: - resolution: {integrity: sha1-wXrgmB5e/CSyInLw4EHEZiUDtwA=} + resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} engines: {node: '>= 0.10.0'} express@5.2.1: - resolution: {integrity: sha1-jyHRW20yf5K0eU7PjLCKcvlWrAQ=} + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} extend@3.0.2: - resolution: {integrity: sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=} + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} extract-zip@2.0.1: - resolution: {integrity: sha1-Zj3KVv5G34kNXxMe9KBtIruLoTo=} + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true extsprintf@1.4.1: - resolution: {integrity: sha1-jRcsBkhn8jXAyEpZaAbSeb9LzAc=} + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} engines: {'0': node >=0.6.0} fast-deep-equal@3.1.3: - resolution: {integrity: sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=} + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-fifo@1.3.2: - resolution: {integrity: sha1-KG4x3pbrltOKl4mYFXQLoqTzZAw=} + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} fast-glob@3.3.2: - resolution: {integrity: sha1-qQRQHlfP3S/83tRemaVP71XkYSk=} + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} fast-glob@3.3.3: - resolution: {integrity: sha1-0G1YXOjbqQoWsFBcVDw8z7OuuBg=} + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=} + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-levenshtein@3.0.0: - resolution: {integrity: sha1-N7iZrkfhCQ5A4/0jGOTV8BQsqRI=} + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} fast-uri@3.1.2: - resolution: {integrity: sha1-ivPU/J0+cbEVcswmc7UUp9GoyOw=} + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fast-xml-builder@1.2.0: - resolution: {integrity: sha1-q9I2MUWnYl2Xia2W2jdfq+PP8ow=} + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} fast-xml-parser@5.7.0: - resolution: {integrity: sha1-uT5Jo9YqiCTFIS2PoJmsLlSNVIo=} + resolution: {integrity: sha512-MTcrUoRQ1GSQ9iG3QJzBGquYYYeA7piZaJoIWbPFGbRn6Jj6z7xgoAyi4DrZX4y2ZIQQBF59gc/zmvvejjgoFQ==} hasBin: true fast-xml-parser@5.7.1: - resolution: {integrity: sha1-F2l1UL3SoKDUfNxLRWwAnEy+igY=} + resolution: {integrity: sha512-8Cc3f8GUGUULg34pBch/KGyPLglS+OFs05deyOlY7fL2MTagYPKrVQNmR1fLF/yJ9PH5ZSTd3YDF6pnmeZU+zA==} hasBin: true fastest-levenshtein@1.0.16: - resolution: {integrity: sha1-IQ5htv8YHekeqbPRuE/e3UfgNOU=} + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} fastq@1.15.0: - resolution: {integrity: sha1-0E0HxqKmj+RZn+qNLhA6k3+uazo=} + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} faye-websocket@0.11.4: - resolution: {integrity: sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=} + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} fb-watchman@2.0.2: - resolution: {integrity: sha1-6VJO5rXHfp5QAa8PhfOtu4YjJVw=} + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} fd-package-json@2.0.0: - resolution: {integrity: sha1-A/U85aCvVSwvT69wOiTlJjEKJBE=} + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} fd-slicer@1.1.0: - resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} fdir@6.5.0: - resolution: {integrity: sha1-7Sq5Z6MxreYvGNB32uGSaE1Q01A=} + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 @@ -12885,77 +12903,77 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: {integrity: sha1-d4e93PETG/+5JjbGlFe7wO3W2B8=} + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} file-size@1.0.0: - resolution: {integrity: sha1-MzgmfV0ga79g9N9gwZ1+04E6Rlc=} + resolution: {integrity: sha512-tLIdonWTpABkU6Axg2yGChYdrOsy4V8xcm0IcyAP8fSsu6jiXLm5pgs083e4sq5fzNRZuAYolUbZyYmPvCKfwQ==} file-uri-to-path@1.0.0: - resolution: {integrity: sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=} + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} filelist@1.0.4: - resolution: {integrity: sha1-94l4oelEd1/55i50RCTyFeWDUrU=} + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} filing-cabinet@5.5.1: - resolution: {integrity: sha1-iYwmkC6sQSBM+9+6Bhfm6aGBzAI=} + resolution: {integrity: sha512-PzLBTChlVPn6LnNxF0KWs+XqPziVh3Sfmz/3TXOymHxu6a9yhrDcQn7YwgpcRM6mqhR2WHVGPR8RU4fmcF1IVA==} engines: {node: '>=18'} hasBin: true fill-range@7.1.1: - resolution: {integrity: sha1-RCZdPKwH4+p9wkdRY4BkN1SgUpI=} + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} finalhandler@1.3.2: - resolution: {integrity: sha1-HrwiKPx2c6rEpHLDEMwFt32FK4g=} + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} finalhandler@2.1.1: - resolution: {integrity: sha1-osUXplWYUrzbBtH4vX9Rto+tgJk=} + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} find-config@1.0.0: - resolution: {integrity: sha1-6vorm8B/qckOmgw++c7PHMgA9TA=} + resolution: {integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==} engines: {node: '>= 0.12'} find-exec@1.0.3: - resolution: {integrity: sha1-xLGPeVlo8XMAYHdvxS+Cm5d60p4=} + resolution: {integrity: sha512-gnG38zW90mS8hm5smNcrBnakPEt+cGJoiMkJwCU0IYnEb0H2NQk0NIljhNW+48oniCriFek/PH6QXbwsJo/qug==} find-replace@3.0.0: - resolution: {integrity: sha1-Pn4j07BRZ6dvdwyfvVJYsN72jDg=} + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} find-up@4.1.0: - resolution: {integrity: sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=} + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} find-up@5.0.0: - resolution: {integrity: sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=} + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} find-up@7.0.0: - resolution: {integrity: sha1-6N7BRV90942IitZb98oT3StOZvs=} + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} flat-cache@4.0.1: - resolution: {integrity: sha1-Ds45/LFO4BL0sEEL0z3ZwfAREnw=} + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} flat@5.0.2: - resolution: {integrity: sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=} + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true flatbuffers@24.3.25: - resolution: {integrity: sha1-4vkiWbqKpTrNCveESvt8frlecIk=} + resolution: {integrity: sha512-3HDgPbgiwWMI9zVB7VYBHaMrbOO7Gm0v+yD2FV/sCKj+9NDeVL7BOBYUuhWAQGKWOzBo8S9WdMvV0eixO233XQ==} flatbuffers@25.9.23: - resolution: {integrity: sha1-NGgRVX/pMSq1ZHU155PHYenIHrE=} + resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==} flatted@3.4.2: - resolution: {integrity: sha1-9cI8EH8PN96NvfJPE3IrO5jVJyY=} + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.16.0: - resolution: {integrity: sha1-KEdKFZ07nRHvYgUKFO1g5N9tYbw=} + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -12964,454 +12982,454 @@ packages: optional: true for-each@0.3.5: - resolution: {integrity: sha1-1lBogCeCaSD+6wr3R+57lCGkHUc=} + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} for-in@0.1.8: - resolution: {integrity: sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=} + resolution: {integrity: sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==} engines: {node: '>=0.10.0'} for-in@1.0.2: - resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=} + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} for-own@0.1.5: - resolution: {integrity: sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=} + resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} engines: {node: '>=0.10.0'} foreground-child@3.3.1: - resolution: {integrity: sha1-Mujp7Rtoo0l777msK2rfkqY4V28=} + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} form-data-encoder@1.7.2: - resolution: {integrity: sha1-Hxrj3M9Y7UaQuG2H5PV8ZU+6sEA=} + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} form-data@4.0.6: - resolution: {integrity: sha1-KOhk4beG2+u2jbH0UvljUnhmWCc=} + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} formatly@0.3.0: - resolution: {integrity: sha1-W7O05pL1qMdK2P4mFU3Qp0qsaBk=} + resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} engines: {node: '>=18.3.0'} hasBin: true formdata-node@4.4.1: - resolution: {integrity: sha1-I/aly5y1UxWRLL7E/3sPWbvRkeI=} + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} forwarded@0.2.0: - resolution: {integrity: sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=} + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} fresh@0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} fresh@2.0.0: - resolution: {integrity: sha1-jdffahs6Gzpc8YbAWl3SZ2ImNaQ=} + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} from@0.1.7: - resolution: {integrity: sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=} + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} fs-constants@1.0.0: - resolution: {integrity: sha1-a+Dem+mYzhavivwkSXue6bfM2a0=} + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} fs-extra@10.1.0: - resolution: {integrity: sha1-Aoc8+8QITd4SfqpfmQXu8jJdGr8=} + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} fs-extra@11.3.0: - resolution: {integrity: sha1-DaztE2u69lpVWjJnGa+TGtx6MU0=} + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} fs-extra@11.3.4: - resolution: {integrity: sha1-q2k07Ki89vf2uCdC4zWR+GMB1vw=} + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} fs-extra@7.0.1: - resolution: {integrity: sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=} + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} fs-extra@8.1.0: - resolution: {integrity: sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=} + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} fs-extra@9.1.0: - resolution: {integrity: sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=} + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} fs.realpath@1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.2: - resolution: {integrity: sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=} + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] fsevents@2.3.3: - resolution: {integrity: sha1-ysZAd4XQNnWipeGlMFxpezR9kNY=} + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: {integrity: sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=} + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.1.8: - resolution: {integrity: sha1-5o4d97JZpclJ7u+Vzb3lPt/6u3g=} + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functional-red-black-tree@1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} functions-have-names@1.2.3: - resolution: {integrity: sha1-BAT+TuK6L2B/Dg7DyAuumUEzuDQ=} + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} gaxios@6.7.1: - resolution: {integrity: sha1-69n3CT7eO6UCaF5zOQJIu1t/cfs=} + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} gcp-metadata@6.1.1: - resolution: {integrity: sha1-9lqmn1RrxW4RYGHRN9P1+QvexJQ=} + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} engines: {node: '>=14'} generator-function@2.0.1: - resolution: {integrity: sha1-DnXdQQ0SQ2h6C6LpUblO7bj3N6I=} + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} gensync@1.0.0-beta.2: - resolution: {integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=} + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} get-amd-module-type@6.0.2: - resolution: {integrity: sha1-JXYE6Va8fsP0jaIJyKflukRwovo=} + resolution: {integrity: sha512-7zShVYAYtMnj9S65CfN+hvpBCByfuB1OY8xID01nZEzXTZbx4YyysAfi+nMl95JSR6odt4q8TCj2W63KAoyVLQ==} engines: {node: '>=18'} get-caller-file@2.0.5: - resolution: {integrity: sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=} + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} get-east-asian-width@1.3.0: - resolution: {integrity: sha1-IbQHHuWO0E7g22UzcbVbQpmHU4k=} + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} get-folder-size@5.0.0: - resolution: {integrity: sha1-VUokjsgxWHH4nUZyRPUrTJ+UzeE=} + resolution: {integrity: sha512-+fgtvbL83tSDypEK+T411GDBQVQtxv+qtQgbV+HVa/TYubqDhNd5ghH/D6cOHY9iC5/88GtOZB7WI8PXy2A3bg==} engines: {node: '>=18.11.0'} hasBin: true get-intrinsic@1.3.0: - resolution: {integrity: sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=} + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha1-tf3nfyLL4185C04ImSLFC85u9mQ=} + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} get-package-type@0.1.0: - resolution: {integrity: sha1-jeLYA8/0TfO8bEVuZmizbDkm4Ro=} + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} get-proto@1.0.1: - resolution: {integrity: sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=} + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} get-stream@4.1.0: - resolution: {integrity: sha1-wbJVV189wh1Zv8ec09K0axw6VLU=} + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} get-stream@5.2.0: - resolution: {integrity: sha1-SWaheV7lrOZecGxLe+txJX1uItM=} + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} get-stream@6.0.1: - resolution: {integrity: sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=} + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} get-symbol-description@1.1.0: - resolution: {integrity: sha1-e91U4L7+j/yfO04gMiDZ8eiBtu4=} + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} get-tsconfig@4.14.0: - resolution: {integrity: sha1-mF2FxSqZA4ZCgMzCRI1BP78e/tg=} + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} get-uri@6.0.4: - resolution: {integrity: sha1-barunhL5dZ4Z5VujE5Vog+9Q4Kc=} + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} engines: {node: '>= 14'} git-hooks-list@1.0.3: - resolution: {integrity: sha1-vluq94IDzjQvL4RKnSsD26G0UVY=} + resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} git-hooks-list@4.1.1: - resolution: {integrity: sha1-rjQLgqkxI1THO0gAfzOEC72D08A=} + resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} github-from-package@0.0.0: - resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} glob-parent@5.1.2: - resolution: {integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=} + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: {integrity: sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM=} + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} glob-to-regex.js@1.2.0: - resolution: {integrity: sha1-KzI3KCcdEzgwhQ4yMR9AdmxfZBM=} + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' glob-to-regexp@0.4.1: - resolution: {integrity: sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=} + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} glob@10.5.0: - resolution: {integrity: sha1-jsA1WRnNMzjChCiiPU8k7MX+c4w=} + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.1.0: - resolution: {integrity: sha1-T4JlduTrmcfa04N5PS+fCPZ+UKY=} + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.6: - resolution: {integrity: sha1-B4ZmVmpCUUfMrPvS4zLetmor5x0=} + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} glob@7.2.3: - resolution: {integrity: sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=} + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@8.1.0: - resolution: {integrity: sha1-04j2Vlk+9wjuPjRkD9+5mp/Rwz4=} + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@9.3.5: - resolution: {integrity: sha1-yi7YykUngaMAloVgf98CWomd/iE=} + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-agent@3.0.0: - resolution: {integrity: sha1-rnzTG9NYO5PFoWQ3oa/ifMM6GrY=} + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} globals@17.7.0: - resolution: {integrity: sha1-VT1VCQtN3oIJ7C2kJYDW5+fYsQ0=} + resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} globalthis@1.0.4: - resolution: {integrity: sha1-dDDtOpddl7+1m8zkH1yruvplEjY=} + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} globby@10.0.0: - resolution: {integrity: sha1-q/zQYwA3rhdKiFkBMsL2gE4pEHI=} + resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==} engines: {node: '>=8'} globby@10.0.1: - resolution: {integrity: sha1-R4LDTLdd1oM1EzXFgpzDQg5gayI=} + resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} engines: {node: '>=8'} globby@11.1.0: - resolution: {integrity: sha1-vUvpi7BC+D15b344EZkfvoKg00s=} + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} globby@14.0.1: - resolution: {integrity: sha1-obRIQap/TG2K8rw5lREJ13MBlZs=} + resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} engines: {node: '>=18'} globby@14.1.0: - resolution: {integrity: sha1-E4t453z1qNeU4yexXc6Avx+wpz4=} + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} gonzales-pe@4.3.0: - resolution: {integrity: sha1-/p3sXzxVfurQn/hoxlgmvlTQZ7M=} + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} engines: {node: '>=0.6.0'} hasBin: true google-auth-library@9.15.1: - resolution: {integrity: sha1-DF2E7RiQsjdfHNdPA6x7gGs5KSg=} + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} engines: {node: '>=14'} google-logging-utils@0.0.2: - resolution: {integrity: sha1-X9g34G+jNNpFBDO54+GHDBWURmo=} + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} engines: {node: '>=14'} googleapis-common@7.2.0: - resolution: {integrity: sha1-XBkQLJrx5dJ1YL5eae4sz2h1XUI=} + resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} engines: {node: '>=14.0.0'} googleapis@144.0.0: - resolution: {integrity: sha1-lpr/Kb524wjqde5S8QmRr0yN3GM=} + resolution: {integrity: sha512-ELcWOXtJxjPX4vsKMh+7V+jZvgPwYMlEhQFiu2sa9Qmt5veX8nwXPksOWGGN6Zk4xCiLygUyaz7xGtcMO+Onxw==} engines: {node: '>=14.0.0'} gopd@1.2.0: - resolution: {integrity: sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=} + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} got@11.8.6: - resolution: {integrity: sha1-J26Cfq2Hcu3bz8lxcFkLhBgjIzo=} + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} graceful-fs@4.2.11: - resolution: {integrity: sha1-QYPk6L8Iu24Fu7L30uDI9xLKQOM=} + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} graphlib@2.1.8: - resolution: {integrity: sha1-V2HUFHN4cAhMkux7XbywWSydNdo=} + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} graphology-communities-louvain@2.0.2: - resolution: {integrity: sha1-r+eqjc091co1Bibi9Ig2Jbuvo8c=} + resolution: {integrity: sha512-zt+2hHVPYxjEquyecxWXoUoIuN/UvYzsvI7boDdMNz0rRvpESQ7+e+Ejv6wK7AThycbZXuQ6DkG8NPMCq6XwoA==} peerDependencies: graphology-types: '>=0.19.0' graphology-indices@0.17.0: - resolution: {integrity: sha1-uTrTIWL/iwmBRUeu2xASSPD8vS4=} + resolution: {integrity: sha512-A7RXuKQvdqSWOpn7ZVQo4S33O0vCfPBnUSf7FwE0zNCasqwZVUaCXePuWo5HBpWw68KJcwObZDHpFk6HKH6MYQ==} peerDependencies: graphology-types: '>=0.20.0' graphology-layout-forceatlas2@0.10.1: - resolution: {integrity: sha1-dBhCE1YJ2C0S21pf33RnIGLCggU=} + resolution: {integrity: sha512-ogzBeF1FvWzjkikrIFwxhlZXvD2+wlY54lqhsrWprcdPjopM2J9HoMweUmIgwaTvY4bUYVimpSsOdvDv1gPRFQ==} peerDependencies: graphology-types: '>=0.19.0' graphology-layout-noverlap@0.4.2: - resolution: {integrity: sha1-L/oFTO7rqjH8/+aV0nH8VXB80pw=} + resolution: {integrity: sha512-13WwZSx96zim6l1dfZONcqLh3oqyRcjIBsqz2c2iJ3ohgs3605IDWjldH41Gnhh462xGB1j6VGmuGhZ2FKISXA==} peerDependencies: graphology-types: '>=0.19.0' graphology-layout@0.6.1: - resolution: {integrity: sha1-58HWXAIuM3sRyXfi0wq+QHagMn0=} + resolution: {integrity: sha512-m9aMvbd0uDPffUCFPng5ibRkb2pmfNvdKjQWeZrf71RS1aOoat5874+DcyNfMeCT4aQguKC7Lj9eCbqZj/h8Ag==} peerDependencies: graphology-types: '>=0.19.0' graphology-metrics@2.4.0: - resolution: {integrity: sha1-MHJU9cWU9VWKmqEUfuSwssdnKDQ=} + resolution: {integrity: sha512-7WOfOP+mFLCaTJx55Qg4eY+211vr1/b3D/R3biz3SXGhAaCVcWYkfabnmO4O4WBNWANEHtVnFrGgJ0kj6MM6xw==} peerDependencies: graphology-types: '>=0.20.0' graphology-shortest-path@2.1.0: - resolution: {integrity: sha1-tcWlaOfIayTL/SBC+dhPKlTgszE=} + resolution: {integrity: sha512-KbT9CTkP/u72vGEJzyRr24xFC7usI9Es3LMmCPHGwQ1KTsoZjxwA9lMKxfU0syvT/w+7fZUdB/Hu2wWYcJBm6Q==} peerDependencies: graphology-types: '>=0.20.0' graphology-types@0.24.8: - resolution: {integrity: sha1-KeQtH71h1lBHYMsxNekde+tOYEs=} + resolution: {integrity: sha512-hDRKYXa8TsoZHjgEaysSRyPdT6uB78Ci8WnjgbStlQysz7xR52PInxNsmnB7IBOM1BhikxkNyCVEFgmPKnpx3Q==} graphology-utils@2.5.2: - resolution: {integrity: sha1-TTDW5WfSfAHxBeFJSvgWdC6NJEA=} + resolution: {integrity: sha512-ckHg8MXrXJkOARk56ZaSCM1g1Wihe2d6iTmz1enGOz4W/l831MBCKSayeFQfowgF8wd+PQ4rlch/56Vs/VZLDQ==} peerDependencies: graphology-types: '>=0.23.0' graphology@0.25.4: - resolution: {integrity: sha1-5SimRVWsHzkqnZZTIa2lsrhD7+E=} + resolution: {integrity: sha512-33g0Ol9nkWdD6ulw687viS8YJQBxqG5LWII6FI6nul0pq6iM2t5EKquOTFDbyTblRB3O9I+7KX4xI8u5ffekAQ==} peerDependencies: graphology-types: '>=0.24.0' gtoken@7.1.0: - resolution: {integrity: sha1-1htOvRATIiKBf3IiseYGS9Rj/CY=} + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} guid-typescript@1.0.9: - resolution: {integrity: sha1-4193ADU1sCl+oIVI9azmrbFIDdw=} + resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} hachure-fill@0.5.2: - resolution: {integrity: sha1-0ZvEzIdQpZYrR/sTAFV6hfz5NMw=} + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} handle-thing@2.0.1: - resolution: {integrity: sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=} + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} handlebars@4.7.9: - resolution: {integrity: sha1-bxOQgqtY3E5aDlHv59ta6JDVag8=} + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} hasBin: true has-bigints@1.1.0: - resolution: {integrity: sha1-KGB+llrJZ+A80qLHCiY2oe2tSf4=} + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} has-flag@3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} has-flag@4.0.0: - resolution: {integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=} + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} has-property-descriptors@1.0.2: - resolution: {integrity: sha1-lj7X0HHce/XwhMW/vg0bYiJYaFQ=} + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.2.0: - resolution: {integrity: sha1-XeWm6r2V/f/ZgYtDBV6AZeOf6dU=} + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} has-symbols@1.1.0: - resolution: {integrity: sha1-/JxqeDoISVHQuXH+EBjegTcHozg=} + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: {integrity: sha1-LNxC1AvvLltO6rfAGnPFTOerWrw=} + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} hasown@2.0.4: - resolution: {integrity: sha1-jGLYy5C+sqrV0KW2dYGtmFTD8AM=} + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} he@1.2.0: - resolution: {integrity: sha1-hK5l+n6vsWX922FWauFLrwVmTw8=} + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true hexy@0.2.11: - resolution: {integrity: sha1-mTnCXLb4apEwLyK4qKclc1GOJbQ=} + resolution: {integrity: sha512-ciq6hFsSG/Bpt2DmrZJtv+56zpPdnq+NQ4ijEFrveKN0ZG1mhl/LdT1NQZ9se6ty1fACcI4d4vYqC9v8EYpH2A==} hasBin: true highlight.js@10.7.3: - resolution: {integrity: sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE=} + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} hono@4.12.25: - resolution: {integrity: sha1-8tmZalToycDF9d4cjzqWLkOpjE4=} + resolution: {integrity: sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==} engines: {node: '>=16.9.0'} hosted-git-info@4.1.0: - resolution: {integrity: sha1-gnuChn6f8cjQxNnVOIA5fSyG0iQ=} + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} hosted-git-info@7.0.2: - resolution: {integrity: sha1-m3UaysCXdXZn8wEUYH73tmH/Txc=} + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} hpack.js@2.1.6: - resolution: {integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=} + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} hpagent@1.2.0: - resolution: {integrity: sha1-CuQXiVQw6zdwwDRDRWuNkMpGSQM=} + resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} engines: {node: '>=14'} html-encoding-sniffer@3.0.0: - resolution: {integrity: sha1-LLGozw21JBR3blsqegTV3ZgVjek=} + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} html-encoding-sniffer@6.0.0: - resolution: {integrity: sha1-+Nk5Czs0i1DU9hwW3S71wFmAqII=} + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} html-escaper@2.0.2: - resolution: {integrity: sha1-39YAJ9o2o238viNiYsAKWCJoFFM=} + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} html-link-extractor@1.0.5: - resolution: {integrity: sha1-pL40XLE7jDNS2CsoyLEku3v13W8=} + resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} html-minifier-terser@6.1.0: - resolution: {integrity: sha1-v8gYk0zAeRj2s2afV3Ts39SPMqs=} + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} hasBin: true html-to-text@9.0.5: - resolution: {integrity: sha1-YUmg9hiueg24CF3Km7+W0yu4No0=} + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} html-webpack-plugin@5.6.3: - resolution: {integrity: sha1-oxFF8P7kGE1Tp5T5UTFH3x5lNoU=} + resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} engines: {node: '>=10.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -13423,49 +13441,49 @@ packages: optional: true htmlparser2@10.0.0: - resolution: {integrity: sha1-d60kkDe2a/jMmcbihu9zuDrrYh0=} + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} htmlparser2@6.1.0: - resolution: {integrity: sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=} + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} htmlparser2@8.0.2: - resolution: {integrity: sha1-8AIVFwWzg+YkM7XPRm9bcW7a7CE=} + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} http-assert@1.5.0: - resolution: {integrity: sha1-w4nM2HrBbtLfpiRv1zuSaqAOa48=} + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} http-cache-semantics@4.2.0: - resolution: {integrity: sha1-IF9Ntk+FYrdqT/kjWqUnmDmgndU=} + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-deceiver@1.2.7: - resolution: {integrity: sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=} + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} http-errors@1.6.3: - resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=} + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} http-errors@1.8.1: - resolution: {integrity: sha1-fD8oV3y8iiBziEVdvWIpXtB71ow=} + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} http-errors@2.0.0: - resolution: {integrity: sha1-t3dKFIbvc892Z6ya4IWMASxXudM=} + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} http-errors@2.0.1: - resolution: {integrity: sha1-NtL2W8kJyHkAGN02+02T2myq4Gs=} + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} http-parser-js@0.5.10: - resolution: {integrity: sha1-syd71tftVYjiDqc79yT8vkRgkHU=} + resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} http-proxy-agent@7.0.2: - resolution: {integrity: sha1-mosfJGhmwChQlIZYX2K48sGMJw4=} + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} http-proxy-middleware@2.0.10: - resolution: {integrity: sha1-st97cFID16jCaayEUM+WsAxTL5Q=} + resolution: {integrity: sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==} engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 @@ -13474,124 +13492,124 @@ packages: optional: true http-proxy@1.18.1: - resolution: {integrity: sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=} + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} http2-wrapper@1.0.3: - resolution: {integrity: sha1-uPVeDB8l1OvQizsMLAeflZCACz0=} + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} https-proxy-agent@4.0.0: - resolution: {integrity: sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=} + resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} engines: {node: '>= 6.0.0'} https-proxy-agent@5.0.1: - resolution: {integrity: sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=} + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} https-proxy-agent@7.0.6: - resolution: {integrity: sha1-2o3+rH2hMLBcK6S1nJts1mYRprk=} + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} human-signals@1.1.1: - resolution: {integrity: sha1-xbHNFPUK6uCatsWf5jujOV/k36M=} + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} human-signals@2.1.0: - resolution: {integrity: sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=} + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} humanize-ms@1.2.1: - resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} hyperdyperid@1.2.0: - resolution: {integrity: sha1-WWaNMjrakiKNKoadPkdNWjO2nms=} + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} iconv-corefoundation@1.1.7: - resolution: {integrity: sha1-MQZearLJJyFUyLCCEVHiyI8bACo=} + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} engines: {node: ^8.11.2 || >=10} os: [darwin] iconv-lite@0.4.24: - resolution: {integrity: sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=} + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} iconv-lite@0.6.3: - resolution: {integrity: sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=} + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} iconv-lite@0.7.2: - resolution: {integrity: sha1-0L3qw/ErSDW3NZwq2JxCKk0cxy4=} + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} ieee754@1.2.1: - resolution: {integrity: sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=} + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.2: - resolution: {integrity: sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=} + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} ignore@7.0.5: - resolution: {integrity: sha1-TLX2zX1MerA2VzjHrqiIuqbX79k=} + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} image-size@0.5.5: - resolution: {integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=} + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true immediate@3.0.6: - resolution: {integrity: sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=} + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} import-fresh@3.3.0: - resolution: {integrity: sha1-NxYsJfy566oublPVtNiM4X2eDCs=} + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} import-local@3.1.0: - resolution: {integrity: sha1-tEed+KX9RPbNziQHBnVnYGPJXLQ=} + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true import-local@3.2.0: - resolution: {integrity: sha1-w9XHRXmMAqb4uJdyarpRABhu4mA=} + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true import-meta-resolve@4.2.0: - resolution: {integrity: sha1-CMuFtb037MjrHg9nDcJ2cALUNzQ=} + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} imurmurhash@0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} indent-string@4.0.0: - resolution: {integrity: sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=} + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} indent-string@5.0.0: - resolution: {integrity: sha1-T9KYD8yvhiLRTGTWlPTPM8gZUaU=} + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} inflation@2.1.0: - resolution: {integrity: sha1-khTbEaR+b3VtERxPnflpccYPiGw=} + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} engines: {node: '>= 0.8.0'} inflight@1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.3: - resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} inherits@2.0.4: - resolution: {integrity: sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=} + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ini@1.3.8: - resolution: {integrity: sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=} + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} ink@5.0.1: - resolution: {integrity: sha1-8u+XlqORGDDDmV3t0ifshK4n3ks=} + resolution: {integrity: sha512-ae4AW/t8jlkj/6Ou21H2av0wxTk8vrGzXv+v2v7j4in+bl1M5XRMVbfNghzhBokV++FjF8RBDJvYo+ttR9YVRg==} engines: {node: '>=18'} peerDependencies: '@types/react': '>=18.0.0' @@ -13604,409 +13622,409 @@ packages: optional: true internal-ip@6.2.0: - resolution: {integrity: sha1-1VQeeXFuQGt0rGsHuFbvGNwWIcE=} + resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} engines: {node: '>=10'} internal-slot@1.1.0: - resolution: {integrity: sha1-HqyRdilH0vcFa8g42T4TsulgSWE=} + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} internmap@1.0.1: - resolution: {integrity: sha1-ABfMijuZYF8DAvKxmNJy4BXl35U=} + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} internmap@2.0.3: - resolution: {integrity: sha1-ZoXyN1XkPFJOJR0py8lySOMGEAk=} + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} interpret@1.4.0: - resolution: {integrity: sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=} + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} interpret@3.1.1: - resolution: {integrity: sha1-W+DO7WfKecbEvFzw1+6EPc6hEMQ=} + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} ip-address@10.1.0: - resolution: {integrity: sha1-2Nz/s00OAuskFCdESm4j9bBZWqQ=} + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ip-address@10.2.0: - resolution: {integrity: sha1-gF/BeLIMUYvUyFSLJP4wiS1/MgY=} + resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} engines: {node: '>= 12'} ip-regex@4.3.0: - resolution: {integrity: sha1-aHJ1qw9X+naXj/j03dyKI9WZDbU=} + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} ipaddr.js@1.9.1: - resolution: {integrity: sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=} + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} ipaddr.js@2.4.0: - resolution: {integrity: sha1-A46c6vghnvxbt2NHt+t4eHXVCVs=} + resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==} engines: {node: '>= 10'} is-absolute-url@4.0.1: - resolution: {integrity: sha1-FuTUh9T97QXP4GheU+yGgEpelNw=} + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} is-array-buffer@3.0.5: - resolution: {integrity: sha1-ZXQuHmh70sxmYlMGj9hwf+TUQoA=} + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-arrayish@0.3.2: - resolution: {integrity: sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=} + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} is-async-function@2.1.1: - resolution: {integrity: sha1-PmkBjI4E5ztzh5PQIL/ohLn9NSM=} + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} is-bigint@1.1.0: - resolution: {integrity: sha1-3aejRF31ekJYPbQihoLrp8QXBnI=} + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} is-binary-path@2.1.0: - resolution: {integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=} + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} is-boolean-object@1.2.2: - resolution: {integrity: sha1-cGf0dwmAmjk8cf9bs+E12KkhXZ4=} + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} is-buffer@1.1.6: - resolution: {integrity: sha1-76ouqdqg16suoTqXsritUf776L4=} + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} is-callable@1.2.7: - resolution: {integrity: sha1-O8KoXqdC2eNiBdys3XLKH9xRsFU=} + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} is-core-module@2.13.1: - resolution: {integrity: sha1-rQ11Msb+qdoevcgnQtdFJcYnM4Q=} + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} is-core-module@2.16.2: - resolution: {integrity: sha1-PgdFCoCA684/vwysSU9NKrMk4II=} + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: - resolution: {integrity: sha1-uuCkG5aImGwhiN2mZX5WuPnmO44=} + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} is-date-object@1.1.0: - resolution: {integrity: sha1-rYVUGZb8eqiycpcB0ntzGfldgvc=} + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} is-docker@2.2.1: - resolution: {integrity: sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=} + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true is-docker@3.0.0: - resolution: {integrity: sha1-kAk6oxBid9inelkQ265xdH4VogA=} + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true is-expression@4.0.0: - resolution: {integrity: sha1-wzFVliq/IdCv0lUlFNZ9LsFv0qs=} + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} is-extendable@0.1.1: - resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=} + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} is-extglob@2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} is-finalizationregistry@1.1.1: - resolution: {integrity: sha1-7v3NxslN3QZ02chYh7+T+USpfJA=} + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=} + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha1-+uMWfHKedGP4RhzlErCApJJoqog=} + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha1-lgnvztfC+X2ntgFF70gceHx7pwQ=} + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} is-generator-fn@2.1.0: - resolution: {integrity: sha1-fRQK3DiarzARqPKipM+m+q3/sRg=} + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} is-generator-function@1.1.2: - resolution: {integrity: sha1-rjth49XqTkg5uQutIrAjNQUaF9U=} + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: - resolution: {integrity: sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=} + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} is-in-ci@0.1.0: - resolution: {integrity: sha1-XgfWoC7DqCktP1kJczV++j/OsNM=} + resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} engines: {node: '>=18'} hasBin: true is-inside-container@1.0.0: - resolution: {integrity: sha1-6B+6aZZi6zHb2vJnZqYdSBRxfqQ=} + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} hasBin: true is-interactive@1.0.0: - resolution: {integrity: sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=} + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} is-interactive@2.0.0: - resolution: {integrity: sha1-QMV2FFk4JtoRAK3mBZd41ZfxbpA=} + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} is-ip@3.1.0: - resolution: {integrity: sha1-KuXd+vrwXLgAimIJPPKXNPZXxdg=} + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} engines: {node: '>=8'} is-map@2.0.3: - resolution: {integrity: sha1-7elrf+HicLPERl46RlZYdkkm1i4=} + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} is-module@1.0.0: - resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=} + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} is-negative-zero@2.0.3: - resolution: {integrity: sha1-ztkDoCespjgbd3pXQwadc3akl0c=} + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} is-network-error@1.3.2: - resolution: {integrity: sha1-lGC8MPhBmkvKdxFPTeiKPuXgxRk=} + resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} engines: {node: '>=16'} is-number-object@1.1.1: - resolution: {integrity: sha1-FEsh6VobwUggXcwoFKkTTsQbJUE=} + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} is-number@7.0.0: - resolution: {integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=} + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} is-obj@1.0.1: - resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=} + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} is-path-inside@3.0.3: - resolution: {integrity: sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM=} + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} is-plain-obj@2.1.0: - resolution: {integrity: sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=} + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} is-plain-obj@3.0.0: - resolution: {integrity: sha1-r28uoUrFpkYYOlu9tbqrvBVq2dc=} + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} is-plain-obj@4.1.0: - resolution: {integrity: sha1-1lAl7ew2V84DL9fbY8l4g+rtcfA=} + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} is-plain-object@2.0.4: - resolution: {integrity: sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=} + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} is-plain-object@3.0.1: - resolution: {integrity: sha1-Zi2S0kwKpDAkB7DUXSHyJRyF+Fs=} + resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} engines: {node: '>=0.10.0'} is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha1-Fx7W8Z46xVQ5Tt94yqBXhKRb67U=} + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-promise@2.2.2: - resolution: {integrity: sha1-OauVnMv5p3TPB597QMeib3YxNfE=} + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} is-promise@4.0.0: - resolution: {integrity: sha1-Qv+fhCBsGZHSbev1IN1cAQQt0vM=} + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-regex@1.2.1: - resolution: {integrity: sha1-dtcKPtEO+b5I61d4h9dCBb8MrSI=} + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} is-regexp@1.0.0: - resolution: {integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk=} + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} is-relative-url@4.1.0: - resolution: {integrity: sha1-/o77Jhaycs8UHTyd6XYFlOU0U6c=} + resolution: {integrity: sha512-vhIXKasjAuxS7n+sdv7pJQykEAgS+YU8VBQOENXwo/VZpOHDgBBsIbHo7zFKaWBjYWF4qxERdhbPRRtFAeJKfg==} engines: {node: '>=14.16'} is-set@2.0.3: - resolution: {integrity: sha1-irIJ6kJGCBQTct7W4MsgDvHZ0B0=} + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.4: - resolution: {integrity: sha1-m2eES9m38ka6BwjDqT40Jpx3T28=} + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} is-stream@1.1.0: - resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} is-stream@2.0.1: - resolution: {integrity: sha1-+sHj1TuXrVqdCunO8jifWBClwHc=} + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} is-string@1.1.1: - resolution: {integrity: sha1-kuo/PVxbbgOcqGd+WsjQfqdzy7k=} + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} is-symbol@1.1.1: - resolution: {integrity: sha1-9HdhJ59TLisFpwJKdQbbvtrNBjQ=} + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} is-typed-array@1.1.15: - resolution: {integrity: sha1-S/tKRbYc7oOlpG+6d45OjVnAzgs=} + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-unicode-supported@0.1.0: - resolution: {integrity: sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=} + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} is-unicode-supported@1.3.0: - resolution: {integrity: sha1-2CSYS2FsKSouGYIH1KYJmDhC9xQ=} + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} is-unicode-supported@2.1.0: - resolution: {integrity: sha1-CfCrDebTdE1I0mXruY9l0R8qmzo=} + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} is-url-superb@4.0.0: - resolution: {integrity: sha1-tU0dJJm7FnknSKyWeqPstBozqMI=} + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} engines: {node: '>=10'} is-weakmap@2.0.2: - resolution: {integrity: sha1-v3JhXWSd/l9pkHnFS4PkfRrhnP0=} + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} is-weakref@1.1.1: - resolution: {integrity: sha1-7qQwGCvo1kF0vZa/+8RvIb8/kpM=} + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} is-weakset@2.0.4: - resolution: {integrity: sha1-yfXesLwZBsbW8QJ/KE3fRZJJ2so=} + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} is-what@3.14.1: - resolution: {integrity: sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=} + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} is-wsl@2.2.0: - resolution: {integrity: sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=} + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} is-wsl@3.1.0: - resolution: {integrity: sha1-4cZX45wQCQr8vt7GFyD2uSTDy9I=} + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} is-wsl@3.1.1: - resolution: {integrity: sha1-MniXsmgyo+sRfabCdJLQTKEyWU8=} + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} isarray@0.0.1: - resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=} + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} isarray@1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isarray@2.0.5: - resolution: {integrity: sha1-ivHkwSISRMxiRZ+vOJQNTmRKVyM=} + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isbinaryfile@4.0.10: - resolution: {integrity: sha1-DFteMMJVei8G/r03tzIpRqruQrM=} + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} isbinaryfile@5.0.0: - resolution: {integrity: sha1-A0t+VJidq4mGWYy86kH2ZmPGUjQ=} + resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} isexe@2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} isexe@3.1.1: - resolution: {integrity: sha1-SkB+K9eN37FL6gwnxvcHLd53Xw0=} + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} isexe@4.0.0: - resolution: {integrity: sha1-SPZXavjoehj+t5a37V4uWQO0Pco=} + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} engines: {node: '>=20'} isobject@3.0.1: - resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} isomorphic-ws@5.0.0: - resolution: {integrity: sha1-5VKRSJEuy5tFG0btRNU9rhzgS78=} + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' isomorphic.js@0.2.5: - resolution: {integrity: sha1-E+7PNvLbpT6F01XhG/nUIIxvf4g=} + resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha1-GJ55CdCjn6Wj361bA/cZR3cBkdM=} + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha1-0QyIhcISVXThwjHKyt+VVnXhzj0=} + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha1-+hVAHfbBWHS8shBfdzMl14xmZ2U=} + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} istanbul-lib-report@3.0.1: - resolution: {integrity: sha1-kIMFusmlvRdaxqdEier9D8JEWn0=} + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha1-iV86cJ/PujTG3lpCk5Ai8+Q1hVE=} + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} istanbul-reports@3.1.6: - resolution: {integrity: sha1-JUS8q0doFUKBovCHBHGQJwTMqho=} + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} istextorbinary@6.0.0: - resolution: {integrity: sha1-vG51QQBrwgP+/+FmKNCnKJOyrVQ=} + resolution: {integrity: sha512-4j3UqQCa06GAf6QHlN3giz2EeFU7qc6Q5uB/aY7Gmb3xmLDLepDOtsZqkb4sCfJgFvTbLUinNw0kHgHs8XOHoQ==} engines: {node: '>=10'} jackspeak@3.4.3: - resolution: {integrity: sha1-iDOp2Jq0rN5hiJQr0cU7Y5DtWoo=} + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jackspeak@4.1.1: - resolution: {integrity: sha1-lodgMPRQUCBH/H6Mf8+M6BJOQ64=} + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} engines: {node: 20 || >=22} jake@10.8.7: - resolution: {integrity: sha1-Y6MoIRd5QMM/NW4LpE/5004cfY8=} + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} hasBin: true jest-changed-files@29.7.0: - resolution: {integrity: sha1-HAbQfnfHjhWF0CBCTe3BDW4XrDo=} + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-chrome@0.8.0: - resolution: {integrity: sha1-90H1z0kpIybrmiUHERuad6AaSV0=} + resolution: {integrity: sha512-39RR1GT9nI4e4jsuH1vIf4l5ApxxkcstjGJr+GsOURL8f4Db0UlbRnsZaM+ZRniaGtokqklUH5VFKGZZ6YztUg==} peerDependencies: jest: ^26.0.1 || ^27.0.0 jest-circus@29.7.0: - resolution: {integrity: sha1-toF6RfzINdixbVli0MAmRz7jZoo=} + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-cli@29.7.0: - resolution: {integrity: sha1-VZLJQHmODK5nfuwWkmTy2DmjeZU=} + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -14016,7 +14034,7 @@ packages: optional: true jest-config@29.7.0: - resolution: {integrity: sha1-vL2ogG28wBseMWpGu3QIWoSwJF8=} + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -14028,19 +14046,19 @@ packages: optional: true jest-diff@29.7.0: - resolution: {integrity: sha1-AXk0pm67fs9vIF6EaZvhCv1wRYo=} + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-docblock@29.7.0: - resolution: {integrity: sha1-j922rcPNyVXJPiqH9hz9NQ1dEZo=} + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-each@29.7.0: - resolution: {integrity: sha1-FiqbPyMovdmRvqq/+7dHReVld9E=} + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-environment-jsdom@29.7.0: - resolution: {integrity: sha1-0gb6NVGTPD/VGeXf21ig9ROag38=} + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 @@ -14049,35 +14067,35 @@ packages: optional: true jest-environment-node@29.7.0: - resolution: {integrity: sha1-C5PhEd2o7BILyDAObR+5V24WQ3Y=} + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-get-type@29.6.3: - resolution: {integrity: sha1-NvSZ/c6hl8EEWhJzGcBIFyOQj9E=} + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-haste-map@29.7.0: - resolution: {integrity: sha1-PCOWUkSC9aBQY3bmyFjDu8wXsQQ=} + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-leak-detector@29.7.0: - resolution: {integrity: sha1-W37A2t/f7Ayjg9yaoBbTa16kxyg=} + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-matcher-utils@29.7.0: - resolution: {integrity: sha1-ro/sef8kn9WSzoDj7kdOg6bETxI=} + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-message-util@29.7.0: - resolution: {integrity: sha1-i8OS4gTpXf51ZKu+cqQE4o5R9/M=} + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-mock@29.7.0: - resolution: {integrity: sha1-ToNs9g6Zxvz6vp+Z0Bfz/dUKY0c=} + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-pnp-resolver@1.2.3: - resolution: {integrity: sha1-kwsVRhZNStWTfVVA5xHU041MrS4=} + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' @@ -14086,51 +14104,51 @@ packages: optional: true jest-regex-util@29.6.3: - resolution: {integrity: sha1-SlVtnHdq9o4cX0gZT00DJ9JOilI=} + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha1-GwTywJXzf8d2/0CAPckpIbHohCg=} + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve@29.7.0: - resolution: {integrity: sha1-ZNaomS3Sb2NasMAeXu9Dmca8vDA=} + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runner@29.7.0: - resolution: {integrity: sha1-gJrwctQIpT3P0uhJpMl20xMvcY4=} + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runtime@29.7.0: - resolution: {integrity: sha1-7+yzFBz303Z6OgzI98mZBYfT2Bc=} + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-snapshot@29.7.0: - resolution: {integrity: sha1-wsV0w/UYZdobsykDZ3imm/iKa+U=} + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-util@29.7.0: - resolution: {integrity: sha1-I8K2K/sivoK0TemAVYAv83EPwLw=} + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-validate@29.7.0: - resolution: {integrity: sha1-e/cFURxk2lkdRrFfzkFADVIUfZw=} + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-watcher@29.7.0: - resolution: {integrity: sha1-eBDTDWGcOmIJMiPOa7NZyhsoovI=} + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-worker@27.5.1: - resolution: {integrity: sha1-jRRvCQDolzsQa29zzB6ajLhvjbA=} + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} jest-worker@29.7.0: - resolution: {integrity: sha1-rK0HOsu663JivVOJ4bz0PhAFjUo=} + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest@29.7.0: - resolution: {integrity: sha1-mUZ2/CQXfwiPHF43N/VpcgT/JhM=} + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -14140,44 +14158,44 @@ packages: optional: true jiti@2.7.0: - resolution: {integrity: sha1-l0Io8vTKK8IYhaF5e0X+po6VDGQ=} + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true jju@1.4.0: - resolution: {integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo=} + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} jose@5.10.0: - resolution: {integrity: sha1-w3NGoJnWRnxAE1GpoMIWHg9SxL4=} + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} jose@6.1.3: - resolution: {integrity: sha1-hFPXvoive7fWSgSB1qNaAUW6PqU=} + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} js-stringify@1.0.2: - resolution: {integrity: sha1-Fzb939lyTyijaCrcYjCufk6Weds=} + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} js-tokens@4.0.0: - resolution: {integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk=} + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@3.15.0: - resolution: {integrity: sha1-WG5SFOr+Pok3VqQel5tQ2J0+Smc=} + resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} hasBin: true js-yaml@4.3.0: - resolution: {integrity: sha1-0ZAFcqf3zwtfVAyDZz5gutNDZZI=} + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true jsbi@2.0.5: - resolution: {integrity: sha1-gliQEdqH3Fm0tUnZTc71GpFV9v4=} + resolution: {integrity: sha512-TzO/62Hxeb26QMb4IGlI/5X+QLr9Uqp1FPkwp2+KOICW+Q+vSuFj61c8pkT6wAns4WcK56X7CmSHhJeDGWOqxQ==} jscpd-sarif-reporter@4.2.5: - resolution: {integrity: sha1-IDPIPfmUWaZNQcGhn/7Msoq38Z0=} + resolution: {integrity: sha512-O8LcM9grAS5yO5x1Q0yegYaYcUX//IEBEyvzGFSYCeo1YzHbMnAI6EK7oTrwD+7Csjvfg9m8B8G7OOxzcSlr9w==} jscpd@4.2.5: - resolution: {integrity: sha1-VKT0MeI49dobZg5TlRj1WkFc/ns=} + resolution: {integrity: sha512-KDpApYw1ChGelfHb7MwYTEx694OnW52pv3McAasidUV4ILcGDQMiVJzB+vI8ox+ZPVfOSvdXQCk8uRa9B0LXnw==} hasBin: true jsdom@20.0.3: - resolution: {integrity: sha1-iGpBuh1HJvZ6iFgCjJlIn+1q1Ns=} + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -14186,7 +14204,7 @@ packages: optional: true jsdom@28.1.0: - resolution: {integrity: sha1-rEID5Y/STXsPNDWasA1tnK69S2I=} + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -14195,389 +14213,389 @@ packages: optional: true jsesc@3.1.0: - resolution: {integrity: sha1-dNM1ojT2ftGZB/2t+sfM+dQJgl0=} + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true json-bigint@1.0.0: - resolution: {integrity: sha1-rlR4I6wMrYOYZn+M2e9HMPWwH/E=} + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} json-bignum@0.0.3: - resolution: {integrity: sha1-QRY7UENsdz2CQk28IO1w23YEuNc=} + resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} engines: {node: '>=0.8'} json-buffer@3.0.1: - resolution: {integrity: sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM=} + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=} + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-parse-even-better-errors@3.0.2: - resolution: {integrity: sha1-tD016JwPO+a1+76dxsgkZ7MMKNo=} + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} json-schema-to-ts@3.1.1: - resolution: {integrity: sha1-gfOsr1o0c2SS9vX1GHDvns4cqFM=} + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} json-schema-traverse@0.4.1: - resolution: {integrity: sha1-afaofZUTq4u4/mO9sJecRI5oRmA=} + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: {integrity: sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=} + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-schema-typed@8.0.2: - resolution: {integrity: sha1-6Y7nsYmf9KGEU00fFnwojGa77/Q=} + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json-stringify-safe@5.0.1: - resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=} + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} json5@2.2.3: - resolution: {integrity: sha1-eM1vGhm9wStz21rQxh79ZsHikoM=} + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true jsonc-parser@3.2.1: - resolution: {integrity: sha1-AxkEVxzPkp12cO6MVHVFCByzfxo=} + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} jsonfile@4.0.0: - resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} jsonfile@6.1.0: - resolution: {integrity: sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=} + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} jsonfile@6.2.0: - resolution: {integrity: sha1-fCZb0bZd5pd0eDAAh8mfHIQ4P2I=} + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonpath@1.3.0: - resolution: {integrity: sha1-YjGXlw+0M4RcaAJL+eK4ZPU3arI=} + resolution: {integrity: sha512-0kjkYHJBkAy50Z5QzArZ7udmvxrJzkpKYW27fiF//BrMY7TQibYLl+FYIXN2BiYmwMIVzSfD8aDRj6IzgBX2/w==} jsonwebtoken@9.0.2: - resolution: {integrity: sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=} + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} jstransformer@1.0.0: - resolution: {integrity: sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=} + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} jsx-ast-utils-x@0.1.0: - resolution: {integrity: sha1-sJM9ZqaeCqGuI/dPuHsHnsKYZS8=} + resolution: {integrity: sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} jszip@3.10.1: - resolution: {integrity: sha1-NK7nDrGOofrsL1iSCKFX0f6wkcI=} + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} jwa@1.4.2: - resolution: {integrity: sha1-FgEaxttI3nsQJ3fleJeQFSDux7k=} + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} jwa@2.0.1: - resolution: {integrity: sha1-v4F20a0M1y4PP1gzhZWhPhELyAQ=} + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} jws@3.2.3: - resolution: {integrity: sha1-WsBpC0YJAKJyZd4kUgUmhTwLjKE=} + resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} jws@4.0.1: - resolution: {integrity: sha1-B+3Bvo+sIOZ3soPs4mFJi9OPBpA=} + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} katex@0.16.22: - resolution: {integrity: sha1-0rPWZGSx5taeZGOyiobO1aAsXM0=} + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true katex@0.16.45: - resolution: {integrity: sha1-umDTnFR0a2uNOc4Of26s4HFDFJw=} + resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==} hasBin: true keygrip@1.1.0: - resolution: {integrity: sha1-hxsWgdXhWcYqRFsMdLYV4JF+ciY=} + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} keytar@7.9.0: - resolution: {integrity: sha1-TGIlcI9RtQy/d8Wq6BchlkwpGMs=} + resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} keyv@4.5.4: - resolution: {integrity: sha1-qHmpnilFL5QkOfKkBeOvizHU3pM=} + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} khroma@2.1.0: - resolution: {integrity: sha1-RfLOlM4jGkN89bY8LohubrQru7E=} + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} kind-of@2.0.1: - resolution: {integrity: sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=} + resolution: {integrity: sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==} engines: {node: '>=0.10.0'} kind-of@3.2.2: - resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} kind-of@6.0.3: - resolution: {integrity: sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=} + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} kleur@3.0.3: - resolution: {integrity: sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4=} + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} knip@6.24.0: - resolution: {integrity: sha1-h66MjDIs6sxjBWgyXcDsmMKuCUY=} + resolution: {integrity: sha512-PokLlgeEjLh1rAsB7ts+52wZ37HBr1nDhE6NNONwEaXdeZGCJOkP7ZlIAI2Gtu8xohquzTWy75bc/1diI9shQw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true koa-compose@4.1.0: - resolution: {integrity: sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc=} + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} koa-convert@2.0.0: - resolution: {integrity: sha1-hqDETYHUBVG64i/uZwmQRXPupPU=} + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} koa-etag@4.0.0: - resolution: {integrity: sha1-LCu3rmnKGsbO0Juijct4UjyBBBQ=} + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} koa-send@5.0.1: - resolution: {integrity: sha1-Odzuv6+zldDWC+r/ujpwtPVD/nk=} + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} koa-static@5.0.0: - resolution: {integrity: sha1-XpL8lrU3rVIZ9CUxnJW2R3J3aUM=} + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} koa@2.16.4: - resolution: {integrity: sha1-MDuZb1w/Kju3ccfbXkMD7gXyJl8=} + resolution: {integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} koffi@2.11.0: - resolution: {integrity: sha1-mDalb3J7iWt5FqhOeVQhfJVIxiQ=} + resolution: {integrity: sha512-AJ6MHz9Z8OIftKu322jrKJFvy/rZTdCD4b7F457WrK71rxYV7O5PSdWsJDN0p3rY1BZaPeLHVwyt4i2Xyk8wJg==} launch-editor@2.14.1: - resolution: {integrity: sha1-9+DaP1iq6gP+oBB02EC19zntfdw=} + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} layout-base@1.0.2: - resolution: {integrity: sha1-EpHilog8Miqd1MXdggY3IbU+JuI=} + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} layout-base@2.0.1: - resolution: {integrity: sha1-0DN5E1hskPnCwHUpIGn1wtpd0oU=} + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} lazy-cache@0.2.7: - resolution: {integrity: sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=} + resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} engines: {node: '>=0.10.0'} lazy-cache@1.0.4: - resolution: {integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4=} + resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} engines: {node: '>=0.10.0'} lazy-val@1.0.5: - resolution: {integrity: sha1-bPO59bwxzufuPjacCDK3WD3Nkj0=} + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} lazystream@1.0.1: - resolution: {integrity: sha1-SUyDEGLx+UCCUexE2xy6KSQqJjg=} + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} leac@0.6.0: - resolution: {integrity: sha1-3PE244LmZr0kdfRKEJYGG3DcCRI=} + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} less@4.3.0: - resolution: {integrity: sha1-7wz8JgqcqAee2NDjUSvaihLILyo=} + resolution: {integrity: sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==} engines: {node: '>=14'} hasBin: true leven@3.1.0: - resolution: {integrity: sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=} + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} levn@0.4.1: - resolution: {integrity: sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=} + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} lib0@0.2.108: - resolution: {integrity: sha1-6OEH1oD0T1+Hm78/gpXMKuMVkn8=} + resolution: {integrity: sha512-+3eK/B0SqYoZiQu9fNk4VEc6EX8cb0Li96tPGKgugzoGj/OdRdREtuTLvUW+mtinoB2mFiJjSqOJBIaMkAGhxQ==} engines: {node: '>=16'} hasBin: true lib0@0.2.117: - resolution: {integrity: sha1-bD+SZHXSiQSvBbWQcDy7vClHVxY=} + resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} engines: {node: '>=16'} hasBin: true libbase64@1.3.0: - resolution: {integrity: sha1-BTMUdVoF0uXwi7/EjQKQ6TIvRAY=} + resolution: {integrity: sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==} libmime@5.3.7: - resolution: {integrity: sha1-ODW2RD2YLVzRrDLuJBrbvBGzRAY=} + resolution: {integrity: sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==} libqp@2.1.1: - resolution: {integrity: sha1-8b52elj5ZvUAWXmXyrcs/B4Xq/o=} + resolution: {integrity: sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow==} lie@3.3.0: - resolution: {integrity: sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=} + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} lighthouse-logger@1.4.2: - resolution: {integrity: sha1-rvkPnpfNgds2fHY0KS7iIHkoCqo=} + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} lilconfig@3.1.3: - resolution: {integrity: sha1-obz9Ylf5WFv1rhTO7rt7VZAl5MQ=} + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: - resolution: {integrity: sha1-7KKE910pZQeTCdwK2SVauy68FjI=} + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} lines-and-columns@2.0.4: - resolution: {integrity: sha1-0AMYhVkF0mYNjAgi4/WkcVhV/EI=} + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} link-check@5.5.1: - resolution: {integrity: sha1-8XIJZYSn7UOok2qNWGmkOod75qA=} + resolution: {integrity: sha512-GrtE4Zp/FBduvElmad375NrPeMYnKwNt9rH/TDG/rbQbHL0QVC4S/cEPVKZ0CkhXlVuiK+/5flGpRxQzoLbjEA==} linkify-it@5.0.0: - resolution: {integrity: sha1-nvI4v6bccL2Of5VytS02mvVptCE=} + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} linkify-it@5.0.2: - resolution: {integrity: sha1-074KaTrz2p3ziD8eNGoOl0YajBk=} + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} lit-element@4.2.2: - resolution: {integrity: sha1-90/L++qUXq5WFOziKmdPpSyjNls=} + resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} lit-html@3.3.2: - resolution: {integrity: sha1-TbEf2/mPyKDF6r2bHn0IjTuyAaI=} + resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==} lit@3.3.2: - resolution: {integrity: sha1-2SMOu/I3v9PSCRvAtWxXakcKxNc=} + resolution: {integrity: sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==} loader-runner@4.3.1: - resolution: {integrity: sha1-bHbtKbDMzprzeSCCmfB/h23nN+M=} + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} locate-path@5.0.0: - resolution: {integrity: sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=} + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} locate-path@6.0.0: - resolution: {integrity: sha1-VTIeswn+u8WcSAHZMackUqaB0oY=} + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} locate-path@7.2.0: - resolution: {integrity: sha1-acsXeb2Qs1qx53Hh8viaICwqioo=} + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} lodash-es@4.18.1: - resolution: {integrity: sha1-uWLuuA2dmDqQC/NClh+3QYyhCx0=} + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} lodash.camelcase@4.3.0: - resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} lodash.debounce@4.0.8: - resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.defaults@4.2.0: - resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=} + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} lodash.difference@4.5.0: - resolution: {integrity: sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=} + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} lodash.escaperegexp@4.1.2: - resolution: {integrity: sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=} + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} lodash.flatten@4.4.0: - resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} lodash.includes@4.3.0: - resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} lodash.isboolean@3.0.3: - resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} lodash.isequal@4.5.0: - resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=} + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.isinteger@4.0.4: - resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} lodash.isnumber@3.0.3: - resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} lodash.isplainobject@4.0.6: - resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} lodash.isstring@4.0.1: - resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} lodash.memoize@4.1.2: - resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: - resolution: {integrity: sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=} + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.once@4.1.1: - resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} lodash.throttle@4.1.1: - resolution: {integrity: sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=} + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} lodash.truncate@4.4.2: - resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} lodash.union@4.6.0: - resolution: {integrity: sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=} + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} lodash@4.18.1: - resolution: {integrity: sha1-/ytmwfYybVlRPeJAe/iBQ5gSdxw=} + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-symbols@4.1.0: - resolution: {integrity: sha1-P727lbRoOsn8eFER55LlWNSr1QM=} + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} log-symbols@6.0.0: - resolution: {integrity: sha1-u5Xl8FMiZRysMMD+tkBPnyqKlDk=} + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} log-update@4.0.0: - resolution: {integrity: sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=} + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} long@4.0.0: - resolution: {integrity: sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=} + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} long@5.3.2: - resolution: {integrity: sha1-HYRGMJWZkmLX17f4v9SozFUWf4M=} + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} longest-streak@3.1.0: - resolution: {integrity: sha1-YvpnzZWHQqFXSvnzmGY2QQLZDNQ=} + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} loose-envify@1.4.0: - resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=} + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true lower-case@2.0.2: - resolution: {integrity: sha1-b6I3xj29xKgsoP2ILkci3F5jTig=} + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@2.0.0: - resolution: {integrity: sha1-JgPni3tLAAbLyi+8yKMgJVislHk=} + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} lru-cache@10.4.3: - resolution: {integrity: sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=} + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@11.2.7: - resolution: {integrity: sha1-kSdAJhfzTNZ2e5ba7pjCjnRFjTU=} + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} lru-cache@5.1.1: - resolution: {integrity: sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=} + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru-cache@6.0.0: - resolution: {integrity: sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=} + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} lru-cache@7.18.3: - resolution: {integrity: sha1-95OJbg/Q6VSlnf3YLwdzgI32qok=} + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} lru-cache@8.0.5: - resolution: {integrity: sha1-mD/jN/PhdmZ/jlZ8/M58sGTqIU4=} + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} engines: {node: '>=16.14'} madge@8.0.0: - resolution: {integrity: sha1-zKSrZvs4jntr9DwfeNyqs8rTD1A=} + resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -14587,410 +14605,410 @@ packages: optional: true magic-string@0.30.17: - resolution: {integrity: sha1-RQpElnPSRg5bvPupphkWoXFMdFM=} + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} magic-string@0.30.21: - resolution: {integrity: sha1-VnY+wJoPqAkd8nh5/ZTRkHjADZE=} + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mailparser@3.9.6: - resolution: {integrity: sha1-cmSgWfM3tyGu82QiDSXkVNRUTcs=} + resolution: {integrity: sha512-EJYTDWMrOS1kddK1mTsRkrx2Ngh2nYsg54SRMWVVWGVEGbHH4tod8tqqU9hIRPgGQVboSjFubDn9cboSitbM3Q==} make-dir@2.1.0: - resolution: {integrity: sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=} + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} make-dir@4.0.0: - resolution: {integrity: sha1-w8IwencSd82WODBfkVwprnQbYU4=} + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} make-error@1.3.6: - resolution: {integrity: sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=} + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} makeerror@1.0.12: - resolution: {integrity: sha1-Pl3SB5qC6BLpg8xmEMSiyw6qgBo=} + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} map-stream@0.1.0: - resolution: {integrity: sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=} + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} markdown-it-texmath@1.0.0: - resolution: {integrity: sha1-ZXA7I10HqPlrxYy/nUeK9XFU5fA=} + resolution: {integrity: sha512-4hhkiX8/gus+6e53PLCUmUrsa6ZWGgJW2XCW6O0ASvZUiezIK900ZicinTDtG3kAO2kon7oUA/ReWmpW2FByxg==} markdown-it@14.2.0: - resolution: {integrity: sha1-BtSNkDXnfVscha2zFUgvyCQCie8=} + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true markdown-link-check@3.14.2: - resolution: {integrity: sha1-VoPfsDnYxlgRejlQ9PqsnGd04Pg=} + resolution: {integrity: sha512-DPJ+itd3D5fcfXD5s1i53lugH0Z/h80kkQxlYCBh8tFwEZGhyVgDcLl0rnKlWssAVDAmSmcbePpHpMEY+JcMMQ==} hasBin: true markdown-link-extractor@4.0.3: - resolution: {integrity: sha1-S8oCVcWD8Bex8M6FfVoa9Wr5msQ=} + resolution: {integrity: sha512-aEltJiQ4/oC0h6Jbw/uuATGSHZPkcH8DIunNH1A0e+GSFkvZ6BbBkdvBTVfIV8r6HapCU3yTd0eFdi3ZeM1eAQ==} markdown-table@2.0.0: - resolution: {integrity: sha1-GUqQztJtMf51PYuUNEMCFMARhls=} + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} markdown-table@3.0.4: - resolution: {integrity: sha1-/kTW1BD/nW8uoXl6P2CqTStjHCo=} + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} marked-terminal@7.3.0: - resolution: {integrity: sha1-eoYjZWXz3VMPRl/86cP4ti7ycOg=} + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} engines: {node: '>=16.0.0'} peerDependencies: marked: '>=1 <16' marked@15.0.12: - resolution: {integrity: sha1-MHIsc0bhLQotAgermwxPAQLYbE4=} + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} engines: {node: '>= 18'} hasBin: true marked@16.0.0: - resolution: {integrity: sha1-DEjnl4LyYiT4zjSHhkTYwyCtWZ8=} + resolution: {integrity: sha512-MUKMXDjsD/eptB7GPzxo4xcnLS6oo7/RHimUMHEDRhUooPwmN9BEpMl7AEOJv3bmso169wHI2wUF9VQgL7zfmA==} engines: {node: '>= 20'} hasBin: true marked@16.4.2: - resolution: {integrity: sha1-SVmmS+bEhvDbdGfq184ojeVCkKM=} + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} engines: {node: '>= 20'} hasBin: true marked@17.0.6: - resolution: {integrity: sha1-KpdYaictO+WIDxmOAgt0rSfPhro=} + resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} engines: {node: '>= 20'} hasBin: true marky@1.3.0: - resolution: {integrity: sha1-QitjsLr2UCLwLtphojjszbvBSZc=} + resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} matcher@3.0.0: - resolution: {integrity: sha1-vZBg9MW3CqgEHMxvgDaHYJlPMMo=} + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} math-intrinsics@1.1.0: - resolution: {integrity: sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=} + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} mdast-util-definitions@6.0.0: - resolution: {integrity: sha1-wbtwbl52u5P5oJ3XrxdAAq5prCQ=} + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha1-cKMXTIlOFN9yKr9DvCUMuuRLEd8=} + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha1-SFA5DKfPF0E6m5oPvvzRvA60Fgo=} + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha1-q9VXYwM3vTCm1aS9glLhwtwIddU=} + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha1-d3jp2co99yOMwr0/orG/amWxlAM=} + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha1-1E756O0oOsjBFlqw0N/QWMJ2TBY=} + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha1-ekNftiI6crCGKzOvvXErba6HjTg=} + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha1-5oCV0vikMD7yQJSrZC4QR7mRqTY=} + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} mdast-util-gfm@3.1.0: - resolution: {integrity: sha1-LN9juSwqMxQGsPsNtMB3wbAzF1E=} + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} mdast-util-math@3.0.0: - resolution: {integrity: sha1-jXndO6+KuKx4H2K4hTdoGQuaALA=} + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} mdast-util-phrasing@4.1.0: - resolution: {integrity: sha1-fMCo3sMOrwS3salmGpKtszgqpuM=} + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha1-+RD/5giX8Eu0t+fuQ0SG92KINhs=} + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} mdast-util-to-string@4.0.0: - resolution: {integrity: sha1-elEhR1VWoE5+3etnsmSq550xKBQ=} + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} mdn-data@2.27.1: - resolution: {integrity: sha1-43ucUIgLdTZsTUCsY9m7ys22Hw4=} + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} mdurl@2.0.0: - resolution: {integrity: sha1-gGduwEMwJd0+F+6YPQ/o3loiN+A=} + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} media-typer@0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} media-typer@1.1.0: - resolution: {integrity: sha1-ardLjy0zIPIGSyqHo455Mf86VWE=} + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} memfs@4.57.7: - resolution: {integrity: sha1-uti8FoDYtTSdpldbCVd5lW9ribA=} + resolution: {integrity: sha512-YZPphUQZSRGk6ddPlsNuMbztrLwsbUATFNZcqKscSbSJZ4g0+Y3vSZLJ/rfnGZaB1FFhC7SrywZXev6i8lnHgg==} peerDependencies: tslib: '2' memory-pager@1.5.0: - resolution: {integrity: sha1-2HUWVdItOEaCdByXLyw9bfo+ZrU=} + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} merge-deep@3.0.3: - resolution: {integrity: sha1-Gisq6SbaiyrpOgrBXZDNGSJ2YAM=} + resolution: {integrity: sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==} engines: {node: '>=0.10.0'} merge-descriptors@1.0.3: - resolution: {integrity: sha1-2AMZpl88eTU1Hlz9rI+TGFBNvtU=} + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge-descriptors@2.0.0: - resolution: {integrity: sha1-6pIvZgY1oiSe5WXgRJ+VHmtgOAg=} + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} merge-stream@2.0.0: - resolution: {integrity: sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=} + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: {integrity: sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=} + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} mermaid@11.15.0: - resolution: {integrity: sha1-tIXBPqXh508zKMS7AEJ72of6HB4=} + resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==} methods@1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} mic@2.1.2: - resolution: {integrity: sha1-8DQoOBeY/4iakEBaAxgVHbBUpO0=} + resolution: {integrity: sha512-rpl4tgdXX24sAzYwjRc5OZfGNAuhUIIjdd0cw8+Ubq7rp3iGhi40AdqcwurDWhEZADk60tPOxb3E2MpoeLeyxw==} micromark-core-commonmark@2.0.3: - resolution: {integrity: sha1-xpFjDkhQIaaM8o28Kyyifr9njNQ=} + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha1-Yoau6WhsRGLB41UqnVBf7dzuuTU=} + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha1-TatW1OOYuYU/b+TvrE/JNh8+B1A=} + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha1-hhBt+LOmkrX2qSKA04eb5r5G2SM=} + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha1-+scLy/Uf5l9fRAMxGNOb6Km1lAs=} + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha1-8m2KeAe1mF+6E89hRltYyl/33Fc=} + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha1-vMNNgFY5gpmQ7BdcPuoSu1t4Hyw=} + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} micromark-extension-gfm@3.0.0: - resolution: {integrity: sha1-PhM3arld16XP0OKVYN/pmWV7PFs=} + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} micromark-extension-math@3.1.0: - resolution: {integrity: sha1-xC7jsd1amgNYToPdjwjj3lECEsE=} + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} micromark-factory-destination@2.0.1: - resolution: {integrity: sha1-j++OD3CB8EdPvdkt61DJkKAmRjk=} + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} micromark-factory-label@2.0.1: - resolution: {integrity: sha1-UmfvqX8eUlTvx/ILRZo4yyEFi6E=} + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} micromark-factory-space@2.0.1: - resolution: {integrity: sha1-NtAhLpYrKzEh+FJfx6PHwCnzNPw=} + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} micromark-factory-title@2.0.1: - resolution: {integrity: sha1-I35KpdWKlYY/AQMtnumwkPHebpQ=} + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha1-BrJrKYPE0nv8xlezPiUTTUhosLE=} + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} micromark-util-character@2.1.1: - resolution: {integrity: sha1-L5h4MaQNTFEKwmHomFLE6XA8zaY=} + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} micromark-util-chunked@2.0.1: - resolution: {integrity: sha1-R/vNk0caP8yrhs/wOEf8NVLbEFE=} + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} micromark-util-classify-character@2.0.1: - resolution: {integrity: sha1-05n6+cRcoUyLS+mLHqSBvO2Htik=} + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha1-Kg9JCrCL/1zC/V7sbdDKBPibMKk=} + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha1-/PFbZgl5OI5vEYzba/fXnXPSb+U=} + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} micromark-util-decode-string@2.0.1: - resolution: {integrity: sha1-bLmVguXScehO/KjmGoB5lNcWHrI=} + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} micromark-util-encode@2.0.1: - resolution: {integrity: sha1-DVHRwJVVHPqsNoMmljz1XxX1QLg=} + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha1-5AQDCWSBmGtBwQZif5j3LU0QuCU=} + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha1-ww13sugyrPZSb4vxqke8nJQ4wW0=} + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha1-4aLWLN0jcjCirhGDkCexk4HjHos=} + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha1-q4l4m4GKWHUrc9a1UjhiG3+qj9c=} + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha1-2K3lug8xl6HPaimZ+7/mNXoaGe4=} + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} micromark-util-symbol@2.0.1: - resolution: {integrity: sha1-5dpJTo6ysHGg0I+zT2zv7GwKGbg=} + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} micromark-util-types@2.0.2: - resolution: {integrity: sha1-8AIl9fWg68MlT5bDa2YFxLOTkI4=} + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} micromark@4.0.2: - resolution: {integrity: sha1-kTlaPhiEoZjmIRbjPJxWjjmTb9s=} + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} micromatch@4.0.8: - resolution: {integrity: sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=} + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} microsoft-cognitiveservices-speech-sdk@1.43.1: - resolution: {integrity: sha1-QWVkDgBMTUE9HrSiVeTeRrxad4s=} + resolution: {integrity: sha512-xO/rlhNSodzCNBtlA3edXDO0+8Q2tMG96nNsjE0JiyAR4Ul/qsZtM4iggTSi+Zax3JtYzrH7W+7349vdpJNaTA==} mime-db@1.52.0: - resolution: {integrity: sha1-u6vNwChZ9JhzAchW4zh85exDv3A=} + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} mime-db@1.54.0: - resolution: {integrity: sha1-zds+5PnGRTDf9kAjZmHULLajFPU=} + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} mime-types@2.1.35: - resolution: {integrity: sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=} + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} mime-types@3.0.2: - resolution: {integrity: sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=} + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} mime@1.6.0: - resolution: {integrity: sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=} + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true mime@2.6.0: - resolution: {integrity: sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=} + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true mimic-fn@2.1.0: - resolution: {integrity: sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=} + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} mimic-function@5.0.1: - resolution: {integrity: sha1-rL4rM0n5m53qyn+3Dki4PpTmcHY=} + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} mimic-response@1.0.1: - resolution: {integrity: sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=} + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} mimic-response@3.1.0: - resolution: {integrity: sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k=} + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} minimalistic-assert@1.0.1: - resolution: {integrity: sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=} + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} minimatch@10.2.4: - resolution: {integrity: sha1-Rls6zL0CGLgoH1MB4nztxpf5b94=} + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} minimatch@10.2.5: - resolution: {integrity: sha1-vUhoegvjjtKWE5kQVgD4MglYYdE=} + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@3.1.5: - resolution: {integrity: sha1-WAyI+NVEXyvWqo88re+g3nn71p4=} + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@5.1.9: - resolution: {integrity: sha1-EpPvFdsAmLOUVA6Pn3RPn9qN7ks=} + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} minimatch@8.0.7: - resolution: {integrity: sha1-lUdm4i2oij4KF62TtYwVydiled4=} + resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} engines: {node: '>=16 || 14 >=14.17'} minimatch@9.0.9: - resolution: {integrity: sha1-mwy5/LeAh/b9fqur4lEcTT1gV04=} + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: - resolution: {integrity: sha1-waRk52kzAuCCoHXO4MBXdBrEdyw=} + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@4.2.8: - resolution: {integrity: sha1-8AEPZDk+z8HRzLX1gryvRfSOGjo=} + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} minipass@7.1.2: - resolution: {integrity: sha1-k6libOXl5mvU24aEnnUV6SNApwc=} + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minipass@7.1.3: - resolution: {integrity: sha1-eTibTrG7LQA6m7qH1JLyvTe9xls=} + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@3.1.0: - resolution: {integrity: sha1-atdsOo8QInybUdHJrI4wsn9aJRw=} + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} mitt@3.0.1: - resolution: {integrity: sha1-6jbPDMMEA2Aa4HTI93twks2rNtE=} + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} mixin-object@2.0.1: - resolution: {integrity: sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=} + resolution: {integrity: sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==} engines: {node: '>=0.10.0'} mkdirp-classic@0.5.3: - resolution: {integrity: sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=} + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} mkdirp@0.5.6: - resolution: {integrity: sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY=} + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true mkdirp@1.0.4: - resolution: {integrity: sha1-PrXtYmInVteaXw4qIh3+utdcL34=} + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true mkdirp@3.0.1: - resolution: {integrity: sha1-5E5MVgf7J5wWgkFxPMbg/qmty1A=} + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true mnemonist@0.39.8: - resolution: {integrity: sha1-kHjNg4YIGv2YbMo0tStdhOp6TTg=} + resolution: {integrity: sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==} mocha@10.8.2: - resolution: {integrity: sha1-jYNC0BbtQRsSpCnrcxuCX5Ya+5Y=} + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} engines: {node: '>= 14.0.0'} hasBin: true mocha@11.7.5: - resolution: {integrity: sha1-WPW7+l4CEc5+XuYSgQfO/CUVpic=} + resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true module-definition@6.0.2: - resolution: {integrity: sha1-1yo2E9v2/nJH6+9k8R/dws0YuDs=} + resolution: {integrity: sha512-SvAU3lB0+Yjbq55yHY3wkRZBOh+fhU1SnIF3IFbTewv6mtAh7yUT8ACHAJ2mGIJ7tCes2QuCL/cl6m0JSZ/ArA==} engines: {node: '>=18'} hasBin: true module-lookup-amd@9.1.3: - resolution: {integrity: sha1-maPDow/wSYxpS6H25N4SY6ceVVE=} + resolution: {integrity: sha512-Jc3XmOaR9FdfMJSK8+vyLgsCkzm8z2L0NS6vrlRWi12DjS7MY7TMNE7E1yj8yXx837xtMDbKSSgcdXnFlJ2YLg==} engines: {node: '>=18'} hasBin: true mongodb-connection-string-url@3.0.0: - resolution: {integrity: sha1-tPh/kv2Fk/O5Nl9ZJRWgbTBKHpw=} + resolution: {integrity: sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==} mongodb@6.16.0: - resolution: {integrity: sha1-KnoZhuwVHZxzj8jOTPQyTD9yii8=} + resolution: {integrity: sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==} engines: {node: '>=16.20.1'} peerDependencies: '@aws-sdk/credential-providers': ^3.188.0 @@ -15017,122 +15035,122 @@ packages: optional: true ms@2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.3: - resolution: {integrity: sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=} + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} multicast-dns@7.2.5: - resolution: {integrity: sha1-d+tGBX9NetvRbZKQ+nKZ9vpkzO0=} + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true multimatch@5.0.0: - resolution: {integrity: sha1-kyuACWPOp6MaAzMo+h4MOhh02+Y=} + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} mute-stream@0.0.8: - resolution: {integrity: sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=} + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} mute-stream@2.0.0: - resolution: {integrity: sha1-pURvwMUStxyDxE2QjVx7e0xJOys=} + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} mz@2.7.0: - resolution: {integrity: sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=} + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} nanocolors@0.2.13: - resolution: {integrity: sha1-39HtC/qwXp/lQOtodFJfChaECZs=} + resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} nanoid@3.3.11: - resolution: {integrity: sha1-T08RLO++MDIC8hmYOBKJNiZtGFs=} + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true nanoid@3.3.15: - resolution: {integrity: sha1-NsSQ+tjG6GyCTJQN/d6Zm2ntQxY=} + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true nanoid@5.1.5: - resolution: {integrity: sha1-91l/nZBU602pVIzdU8pw8XkOh94=} + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} engines: {node: ^18 || >=20} hasBin: true napi-build-utils@2.0.0: - resolution: {integrity: sha1-E8IsAYf8/MzhRhhEE2NypH3cAn4=} + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} natural-compare@1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} natural-orderby@3.0.2: - resolution: {integrity: sha1-G4dNaF+9aL6rLG59FPKY4D1jHsM=} + resolution: {integrity: sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==} engines: {node: '>=18'} needle@3.3.1: - resolution: {integrity: sha1-Y/da7FgMLnfiCfPzJOLN89Kb0Ek=} + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} engines: {node: '>= 4.4.x'} hasBin: true negotiator@0.6.3: - resolution: {integrity: sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0=} + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} negotiator@0.6.4: - resolution: {integrity: sha1-d3lI4kUmUcVwtxLdAcI+JicT//c=} + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} negotiator@1.0.0: - resolution: {integrity: sha1-tskbtHFy1p+Tz9fDV7u1KQGbX2o=} + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} neo-async@2.6.2: - resolution: {integrity: sha1-tKr7k+OustgXTKU88WOrfXMIMF8=} + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} netmask@2.0.2: - resolution: {integrity: sha1-iwGgdkQGXVNjg4NYI7xSAE66xec=} + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} nice-try@1.0.5: - resolution: {integrity: sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=} + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} no-case@3.0.4: - resolution: {integrity: sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0=} + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} node-abi@3.77.0: - resolution: {integrity: sha1-OtkNXJ1FZjQg5apP9Y2/TjYlQZo=} + resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} engines: {node: '>=10'} node-abi@4.24.0: - resolution: {integrity: sha1-/MG0xkX/tMDzni2/ucQWmLp+eC4=} + resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} engines: {node: '>=22.12.0'} node-addon-api@1.7.2: - resolution: {integrity: sha1-PfMLlXILU8JOWZSLSVMrZiRE9U0=} + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} node-addon-api@4.3.0: - resolution: {integrity: sha1-UqGgtHUZPgko6Y4EJqDRJUeCt38=} + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} node-addon-api@7.1.1: - resolution: {integrity: sha1-Grpmk7DyVSWKBJ1iEykykyKq1Vg=} + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} node-api-version@0.2.1: - resolution: {integrity: sha1-GbrVT21lYoy+5OYHoyXkSIrOLek=} + resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} node-domexception@1.0.0: - resolution: {integrity: sha1-aIjbRqH3HAt2s/dVUBa2P+ZHZuU=} + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead node-email-verifier@3.4.1: - resolution: {integrity: sha1-CNRFpHrzTjMzJEdIm8A2DOVfgBk=} + resolution: {integrity: sha512-69JMeWgEUrCji+dOLULirdSoosRxgAq2y+imfmHHBGvgTwyTKqvm65Ls3+W30DCIWMrYj5kKVb/DHTQDK7OVwQ==} engines: {node: '>=18.0.0'} node-emoji@2.2.0: - resolution: {integrity: sha1-HQAOPHbkYld4lb4bQ29KotZ2DrA=} + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} node-fetch@2.7.0: - resolution: {integrity: sha1-0PD6bj4twdJ+/NitmdVQvalNGH0=} + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -15141,156 +15159,156 @@ packages: optional: true node-gyp@12.3.0: - resolution: {integrity: sha1-oODZNkd5RR6vQUi2+ac2b5gACz8=} + resolution: {integrity: sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true node-int64@0.4.0: - resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-pty@1.1.0: - resolution: {integrity: sha1-Fhk21FpHdRwuO2lMNl5zAXQXqIc=} + resolution: {integrity: sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==} node-releases@2.0.47: - resolution: {integrity: sha1-UhuyeG2o6xQLdIhBwLOzp1M0/8Q=} + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} engines: {node: '>=18'} node-rsa@1.1.1: - resolution: {integrity: sha1-79mtOCCXeC9QYVM5hJb3nkRkQ00=} + resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} node-sarif-builder@2.0.3: - resolution: {integrity: sha1-F5rlkM4CD5f55FA33BzehapDmOw=} + resolution: {integrity: sha512-Pzr3rol8fvhG/oJjIq2NTVB0vmdNNlz22FENhhPojYRZ4/ee08CfK4YuKmuL54V9MLhI1kpzxfOJ/63LzmZzDg==} engines: {node: '>=14'} node-sarif-builder@4.1.0: - resolution: {integrity: sha1-Jjhit2aUMI0NkVmIqHsyqgy2NDk=} + resolution: {integrity: sha512-IWqZF6u0EI/07HTBm+zZ+MgXgWl09dnSJRGaDCPBSlOqilDcx6pj3Mpb3HvPN8V2Gr+ISw7ZrMsL7STWs1F++w==} engines: {node: '>=20'} node-source-walk@7.0.2: - resolution: {integrity: sha1-sHUlnLQMMVhXBEe+e9Tez/0gdpQ=} + resolution: {integrity: sha512-71kFFjYaSshDTA8/a2HiTYPLdASWjLJxUyJxGE+ffxU+KhxSBtM9kiLUX+R2yooFdSFKMFpi4n3PFtDy6qXv8A==} engines: {node: '>=18'} nodemailer@8.0.4: - resolution: {integrity: sha1-tjYmWFaT83o5Ddrs3ic9qZHHYBA=} + resolution: {integrity: sha512-k+jf6N8PfQJ0Fe8ZhJlgqU5qJU44Lpvp2yvidH3vp1lPnVQMgi4yEEMPXg5eJS1gFIJTVq1NHBk7Ia9ARdSBdQ==} engines: {node: '>=6.0.0'} noms@0.0.0: - resolution: {integrity: sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=} + resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} nopt@9.0.0: - resolution: {integrity: sha1-a/8INrKWTSRQi2tBtamknE9KH5Y=} + resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true normalize-package-data@6.0.2: - resolution: {integrity: sha1-p7wiFn/iQCVBK8/wqWUet2iwNQY=} + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} normalize-path@3.0.0: - resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=} + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} normalize-url@6.1.0: - resolution: {integrity: sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo=} + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} npm-run-path@2.0.2: - resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=} + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} npm-run-path@4.0.1: - resolution: {integrity: sha1-t+zR5e1T2o43pV4cImnguX7XSOo=} + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} nth-check@2.1.1: - resolution: {integrity: sha1-yeq0KO/842zWuSySS9sADvHx7R0=} + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} nwsapi@2.2.20: - resolution: {integrity: sha1-IuUyU8Yeew5+k870LIkRVLzKEe8=} + resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} object-assign@4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} object-hash@3.0.0: - resolution: {integrity: sha1-c/l/dT57r/wOLMnW4HkHl0Ssguk=} + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} object-inspect@1.13.4: - resolution: {integrity: sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=} + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: {integrity: sha1-HEfyct8nfzsdrwYWd9nILiMixg4=} + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} object-treeify@4.0.1: - resolution: {integrity: sha1-+Rp97HldgnWIbn8b14QI9pdb6CU=} + resolution: {integrity: sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==} engines: {node: '>= 16'} object.assign@4.1.7: - resolution: {integrity: sha1-jBTKGkJMalYbC7KiL2b1BJqUXT0=} + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} obliterator@2.0.5: - resolution: {integrity: sha1-Ax4BRTVLDBiEAzauUdQefW0sdqo=} + resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} obuf@1.1.2: - resolution: {integrity: sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=} + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} on-finished@2.4.1: - resolution: {integrity: sha1-WMjEQRblSEWtV/FKsQsDUzGErD8=} + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} on-headers@1.1.0: - resolution: {integrity: sha1-WdpPkcRfX5icbkvO3Fo7Cu1w/2U=} + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} onetime@5.1.2: - resolution: {integrity: sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=} + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} onetime@7.0.0: - resolution: {integrity: sha1-nxbJLYye9RIOOs2d2ZV8zuzBq2A=} + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} only@0.0.2: - resolution: {integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=} + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} onnxruntime-common@1.21.0: - resolution: {integrity: sha1-qB1BkdQYrLv/JUapVMwswj7rCfg=} + resolution: {integrity: sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ==} onnxruntime-common@1.22.0-dev.20250409-89f8206ba4: - resolution: {integrity: sha1-PUo5VjuT2z0EKLVSfLpYo8j4JsI=} + resolution: {integrity: sha512-vDJMkfCfb0b1A836rgHj+ORuZf4B4+cc2bASQtpeoJLueuFc5DuYwjIZUBrSvx/fO5IrLjLz+oTrB3pcGlhovQ==} onnxruntime-node@1.21.0: - resolution: {integrity: sha1-f09ZRVuvhRGB4gf8hAEoisLrENE=} + resolution: {integrity: sha512-NeaCX6WW2L8cRCSqy3bInlo5ojjQqu2fD3D+9W5qb5irwxhEyWKXeH2vZ8W9r6VxaMPUan+4/7NDwZMtouZxEw==} os: [win32, darwin, linux] onnxruntime-web@1.22.0-dev.20250409-89f8206ba4: - resolution: {integrity: sha1-0eOgTgPf7jkrQdQg71R7agNRsGs=} + resolution: {integrity: sha512-0uS76OPgH0hWCPrFKlL8kYVV7ckM7t/36HfbgoFw6Nd0CZVVbQC4PkrR8mBX8LtNUFZO25IQBqV2Hx2ho3FlbQ==} open@10.1.0: - resolution: {integrity: sha1-p3lebl1Rmr5ChtmTe7JLURIlmOE=} + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} open@10.1.2: - resolution: {integrity: sha1-1d9AmEdVyanDyT34FWoSRn6IKSU=} + resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} engines: {node: '>=18'} open@10.2.0: - resolution: {integrity: sha1-udhVvgB2IOgLb7BfrJgUH+Yttzw=} + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} open@8.4.2: - resolution: {integrity: sha1-W1/+Ko95Pc0qrXPlUMuHtZywhPk=} + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} openai@4.103.0: - resolution: {integrity: sha1-hO5S/sIvNIbcwQcziy6vVo70kks=} + resolution: {integrity: sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -15302,7 +15320,7 @@ packages: optional: true openai@6.41.0: - resolution: {integrity: sha1-snQ1RQFn9BWqOKj4maMaXKD7NH8=} + resolution: {integrity: sha512-IGWPopZq6Rjoynjfb3NSLf/z2MTw7UiOsm9TAjPGAjUESH7Uq41Trg4QWehBEn58p74i+m7uoRPV2vXcpPXhyA==} peerDependencies: ws: ^8.18.0 zod: ^3.25 || ^4.0 @@ -15313,457 +15331,457 @@ packages: optional: true optionator@0.9.4: - resolution: {integrity: sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=} + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} ora@5.4.1: - resolution: {integrity: sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=} + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} ora@8.2.0: - resolution: {integrity: sha1-j7u3FRr+M7VA3RU/Fx/6i9OOmGE=} + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} orderedmap@2.1.1: - resolution: {integrity: sha1-YUgSacRAMcRJkVSXv1pK0nPFEtI=} + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} os-homedir@1.0.2: - resolution: {integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M=} + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} own-keys@1.0.1: - resolution: {integrity: sha1-5ABpEKK/kTWFKJZ27r1vOQz1E1g=} + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} oxc-parser@0.137.0: - resolution: {integrity: sha1-uIocWuKz02e50KHBy0LKXIF0XsQ=} + resolution: {integrity: sha512-yFImD+WLElJpLKy8llG1qe4DCmMsL18peRp8XP1JKfig/gISbJkglnpDtX2aTmAn10kZF7164HbN2H8QPsXxGg==} engines: {node: ^20.19.0 || >=22.12.0} oxc-resolver@11.21.3: - resolution: {integrity: sha1-D94b2AHOHCyV7wEEBgc6p80P6Mw=} + resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==} p-cancelable@2.1.1: - resolution: {integrity: sha1-qrf71BZYL6MqPbSYWcEiSHxe0s8=} + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} p-event@4.2.0: - resolution: {integrity: sha1-r0sEnIrNka6BCD69Hm9criBEwbU=} + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} engines: {node: '>=8'} p-finally@1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} p-limit@2.3.0: - resolution: {integrity: sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=} + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} p-limit@3.1.0: - resolution: {integrity: sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=} + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} p-limit@4.0.0: - resolution: {integrity: sha1-kUr2VE7TK/pUZwsGHK/L0EmEtkQ=} + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} p-locate@4.1.0: - resolution: {integrity: sha1-o0KLtwiLOmApL2aRkni3wpetTwc=} + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} p-locate@5.0.0: - resolution: {integrity: sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=} + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} p-locate@6.0.0: - resolution: {integrity: sha1-PamknUk0uQEIncozAvpl3FoFwE8=} + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} p-map@4.0.0: - resolution: {integrity: sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=} + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} p-retry@6.2.1: - resolution: {integrity: sha1-gYKPjcYcbvWoAFhUkVcsyYknA68=} + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} p-timeout@3.2.0: - resolution: {integrity: sha1-x+F6vJcdKnli74NiazXWNazyPf4=} + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} p-try@2.2.0: - resolution: {integrity: sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=} + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} pac-proxy-agent@7.2.0: - resolution: {integrity: sha1-nPrzP/Jdo29hR6IIRCMOySwG5d8=} + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} pac-resolver@7.0.1: - resolution: {integrity: sha1-VGdVWOo2i2TSEP2ckqZAtfO4q7Y=} + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} package-json-from-dist@1.0.1: - resolution: {integrity: sha1-TxRxoBCCeob5TP2bByfjbSZ95QU=} + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-manager-detector@1.6.0: - resolution: {integrity: sha1-cNDPCqAsh37q9mxNmE7eC+kTBzQ=} + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} pako@1.0.11: - resolution: {integrity: sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=} + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} pandemonium@2.4.1: - resolution: {integrity: sha1-vVHKchhMauE1+QSaM8hgW/25V00=} + resolution: {integrity: sha512-wRqjisUyiUfXowgm7MFH2rwJzKIr20rca5FsHXCMNm1W5YPP1hCtrZfgmQ62kP7OZ7Xt+cR858aB28lu5NX55g==} param-case@3.0.4: - resolution: {integrity: sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU=} + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} parent-module@1.0.1: - resolution: {integrity: sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=} + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} parse-json@5.2.0: - resolution: {integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=} + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} parse-json@7.1.1: - resolution: {integrity: sha1-aPfm8O34jFSrFMAOtwC3U7FOISA=} + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} parse-ms@2.1.0: - resolution: {integrity: sha1-NIVlp1PUOR+lJAKZVrFyy3dTCX0=} + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} parse-node-version@1.0.1: - resolution: {integrity: sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=} + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} parse-semver@1.1.1: - resolution: {integrity: sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=} + resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=} + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha1-I8LMIzvPCbt766i4pp1GsIxiwvE=} + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha1-tagGVI7Yk6Q+JMy0L7t4BpMR6Bs=} + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} parse5-parser-stream@7.1.2: - resolution: {integrity: sha1-18IOrcN5aNJy4sAmYP/5LdJ+YOE=} + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} parse5@5.1.1: - resolution: {integrity: sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=} + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} parse5@6.0.1: - resolution: {integrity: sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=} + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} parse5@7.1.2: - resolution: {integrity: sha1-Bza+u/13eTgjJAojt/xeAQt/jjI=} + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} parse5@7.3.0: - resolution: {integrity: sha1-1+Ik+nI5nHoXUJn0X8KtAksF7AU=} + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} parse5@8.0.0: - resolution: {integrity: sha1-rOsmf2sV+bbmup41v91IH8IWexI=} + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} parseley@0.12.1: - resolution: {integrity: sha1-Sv1WHVAhXr4lnj56hT5i9gBoOu8=} + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} parseurl@1.3.3: - resolution: {integrity: sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=} + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} pascal-case@3.1.2: - resolution: {integrity: sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs=} + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} patch-console@2.0.0: - resolution: {integrity: sha1-kCP0ZlhA5m9A6c53T5BKYxZ0M7s=} + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} path-data-parser@0.1.0: - resolution: {integrity: sha1-j1ulzHD8e+yz3O+uoI4mWaumC4w=} + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} path-exists@4.0.0: - resolution: {integrity: sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=} + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} path-exists@5.0.0: - resolution: {integrity: sha1-pqrZSJIAsh+rMeSc8JJ35RFvuec=} + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} path-expression-matcher@1.5.0: - resolution: {integrity: sha1-O5hUXciP/rtZPi2EWNCSnaknX0o=} + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} engines: {node: '>=14.0.0'} path-is-absolute@1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} path-key@2.0.1: - resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=} + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} path-key@3.1.1: - resolution: {integrity: sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=} + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} path-parse@1.0.7: - resolution: {integrity: sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=} + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-scurry@1.11.1: - resolution: {integrity: sha1-eWCmaIiFlKByCxKpEdGnQqufEdI=} + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} path-scurry@2.0.2: - resolution: {integrity: sha1-a+DQ7gKhDZ4N56mLrmXhgskGH4U=} + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} path-to-regexp@0.1.13: - resolution: {integrity: sha1-myLsFrw6uI0FoMfjaYaUIUAasX0=} + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} path-to-regexp@8.4.2: - resolution: {integrity: sha1-eVxCDE98pFxbiHNm9iLuDJhSzM0=} + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} path-type@4.0.0: - resolution: {integrity: sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=} + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} path-type@5.0.0: - resolution: {integrity: sha1-FLAe166n3fnHw/RhgdTQT5x4W7g=} + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} path-type@6.0.0: - resolution: {integrity: sha1-Lxu2eRqRzpkZTK7eXWxZIO2B61E=} + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} pause-stream@0.0.11: - resolution: {integrity: sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=} + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} pbf@3.3.0: - resolution: {integrity: sha1-F5Dz2ZEYMzzH9JjegWAoo0bvNn8=} + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} hasBin: true pdfjs-dist@5.3.31: - resolution: {integrity: sha1-DEKfO8Q8V+walfoodPL5MYnS1A4=} + resolution: {integrity: sha512-EhPdIjNX0fcdwYQO+e3BAAJPXt+XI29TZWC7COhIXs/K0JHcUt1Gdz1ITpebTwVMFiLsukdUZ3u0oTO7jij+VA==} engines: {node: '>=20.16.0 || >=22.3.0'} pe-library@0.4.1: - resolution: {integrity: sha1-4mm+A0DcsTqmlJ10PafWWMPi++o=} + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} engines: {node: '>=12', npm: '>=6'} peberminta@0.9.0: - resolution: {integrity: sha1-jsm8DrhLfTaBJucc6QM1Adyio1I=} + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} pend@1.2.0: - resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} picocolors@1.1.1: - resolution: {integrity: sha1-PTIa8+q5ObCDyPkpodEs2oHCa2s=} + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.2: - resolution: {integrity: sha1-WpQpFeJrNy3A8OZ1MUmhbmscVgE=} + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} picomatch@4.0.4: - resolution: {integrity: sha1-/W9eAKFDCG4HTf/kySS4+yk7BYk=} + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} picospinner@2.0.0: - resolution: {integrity: sha1-Kzz39JsOy9Kt4T4AX0XomGGjNNA=} + resolution: {integrity: sha512-bRX16jAx5sDlSAEKJ26hKloGU+w2DIkGw0qeUn87WkT8xircacGumNFHS0d/s51S9QbrtoEFwRSAvIvHNstfjA==} engines: {node: '>=18.0.0'} pify@4.0.1: - resolution: {integrity: sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=} + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} pirates@4.0.7: - resolution: {integrity: sha1-ZDtKGMQlfIplEEtz8wSc6aChXiI=} + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkce-challenge@5.0.1: - resolution: {integrity: sha1-O0RGhlsXsXRems4gFqMfSN32Iw0=} + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} pkg-dir@4.2.0: - resolution: {integrity: sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=} + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} pkijs@3.4.0: - resolution: {integrity: sha1-2RZN7zD/bZe+LYiWbV42GSSZypw=} + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} engines: {node: '>=16.0.0'} platform@1.3.6: - resolution: {integrity: sha1-SLTOmDFksgnC1FoQetsx9HOm56c=} + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} play-sound@1.1.6: - resolution: {integrity: sha1-5i7Z2vhQarqVno/SZ8Sdm5edifo=} + resolution: {integrity: sha512-09eO4QiXNFXJffJaOW5P6x6F5RLihpLUkXttvUZeWml0fU6x6Zp7AjG9zaeMpgH2ZNvq4GR1ytB22ddYcqJIZA==} playwright-core@1.57.0: - resolution: {integrity: sha1-PcyahlryVvqfCvDWf8jdVO7K6/U=} + resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} engines: {node: '>=18'} hasBin: true playwright@1.57.0: - resolution: {integrity: sha1-dNHaz/UEjcQL9GdpQLGQHhitD0Y=} + resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} engines: {node: '>=18'} hasBin: true plist@3.1.0: - resolution: {integrity: sha1-eXpRapPmL1veVeC5zJyWf4YIk8k=} + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} pluralize@2.0.0: - resolution: {integrity: sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=} + resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} pluralize@8.0.0: - resolution: {integrity: sha1-Gm+hajjRKhkB4DIPoBcFHFOc47E=} + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} points-on-curve@0.2.0: - resolution: {integrity: sha1-fbuYxDeRhZQ0KEdhMw+ok8uBtNE=} + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} points-on-path@0.2.1: - resolution: {integrity: sha1-VTICtUJMU77TcTWzGIWOrP+F3VI=} + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} portfinder@1.0.38: - resolution: {integrity: sha1-5Ps6LYiLINKXfaBQ5Iq14fV6GF4=} + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} engines: {node: '>= 10.12'} possible-typed-array-names@1.1.0: - resolution: {integrity: sha1-k+NYK8DlQmWG2dB7ee5A/IQd5K4=} + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-values-parser@6.0.2: - resolution: {integrity: sha1-Y27cW4bJU4lvG7DXp6ZhXfAPt28=} + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} peerDependencies: postcss: ^8.2.9 postcss@8.5.14: - resolution: {integrity: sha1-pmwteAj632nrtbhKA/i6/XbEkZw=} + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} postcss@8.5.16: - resolution: {integrity: sha1-EjDOC13zVMJMDqRfmc5faognnSg=} + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} postject@1.0.0-alpha.6: - resolution: {integrity: sha1-nQIjMicuLPzo3qTPzh7m3Rsu4TU=} + resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} engines: {node: '>=14.0.0'} hasBin: true prebuild-install@7.1.3: - resolution: {integrity: sha1-1jCrrSsUdEPyCiEpF76uaLgJLuw=} + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true precinct@12.3.2: - resolution: {integrity: sha1-DWoV0umVF0SiT13mqyfJsmk2URk=} + resolution: {integrity: sha512-JbJevI1K80z8e/WIyDt/4vUN/4qcfBSKKqOjJA4mosPPPb7zODKRJQV7YN7apVWN3k58nZYm/vEsLgEGYmnxwg==} engines: {node: '>=18'} hasBin: true prelude-ls@1.2.1: - resolution: {integrity: sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=} + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} prettier@3.5.3: - resolution: {integrity: sha1-T8LODWV+egLmAlSfBTsjnLff4bU=} + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true pretty-error@4.0.0: - resolution: {integrity: sha1-kKcD9G3XI0rbRtD4SCPp0cuPENY=} + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} pretty-format@29.7.0: - resolution: {integrity: sha1-ykLHWDEPNlv6caC9oKgHFgt3aBI=} + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} pretty-ms@7.0.1: - resolution: {integrity: sha1-fZA+qrKB99jgPGb4Z+I53DL7c+g=} + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} priorityqueuejs@2.0.0: - resolution: {integrity: sha1-lgZAQO3YR+6d0wE9jhYpc5mmvU8=} + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} prismjs@1.30.0: - resolution: {integrity: sha1-2XCZadnU4WQD9vNIxjVTsZ8Jdak=} + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} proc-log@6.1.0: - resolution: {integrity: sha1-GFGUgqN9UZjiMRM6cBRKUPIfAhU=} + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} engines: {node: ^20.17.0 || >=22.9.0} process-nextick-args@2.0.1: - resolution: {integrity: sha1-eCDZsWEgzFXKmud5JoCufbptf+I=} + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} process@0.11.10: - resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} progress@2.0.3: - resolution: {integrity: sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=} + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} promise-retry@2.0.1: - resolution: {integrity: sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI=} + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} promise@7.3.1: - resolution: {integrity: sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=} + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} prompts@2.4.2: - resolution: {integrity: sha1-e1fnOzpIAprRDr1E90sBcipMsGk=} + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} proper-lockfile@4.1.2: - resolution: {integrity: sha1-yLneKvay8WAQZ/mOAaxmuqIjFB8=} + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} prosemirror-changeset@2.3.1: - resolution: {integrity: sha1-7uMpnPq8egJ2lOmr3E6FUF6d1ec=} + resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} prosemirror-commands@1.7.1: - resolution: {integrity: sha1-0QH++FYYsb5T1bmeoXvuVgB4Gzg=} + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} prosemirror-dropcursor@1.8.2: - resolution: {integrity: sha1-LtMMR5YQnd6xz3KCNys4UFKLcig=} + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} prosemirror-gapcursor@1.3.2: - resolution: {integrity: sha1-X6M2uDeJxhmac0HJSTWH4kkhXLQ=} + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} prosemirror-history@1.4.1: - resolution: {integrity: sha1-zDcKRvtinoOjOUag4SYS6TSri5g=} + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} prosemirror-inputrules@1.5.0: - resolution: {integrity: sha1-4iv68dbqT+JArUR8GErz1SDUPDc=} + resolution: {integrity: sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==} prosemirror-keymap@1.2.3: - resolution: {integrity: sha1-wParlfdcC4LJfkTraq8py/wVBHI=} + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} prosemirror-model@1.25.1: - resolution: {integrity: sha1-rq6fHsefyqdvb8YZgA2R+89yaHA=} + resolution: {integrity: sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==} prosemirror-safari-ime-span@1.0.2: - resolution: {integrity: sha1-IMncsz39aLLlneiSO2UG+dwHw1Y=} + resolution: {integrity: sha512-QJqD8s1zE/CuK56kDsUhndh5hiHh/gFnAuPOA9ytva2s85/ZEt2tNWeALTJN48DtWghSKOmiBsvVn2OlnJ5H2w==} prosemirror-schema-list@1.5.1: - resolution: {integrity: sha1-WGnI90nodFw5RUi7EYILD+seMvU=} + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} prosemirror-state@1.4.3: - resolution: {integrity: sha1-lK7PP/1U7DfoeqcXnRNQjaGBoIA=} + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} prosemirror-tables@1.7.1: - resolution: {integrity: sha1-3yUH8oXGx1Ywl7SQTLfEueDNcks=} + resolution: {integrity: sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==} prosemirror-transform@1.10.4: - resolution: {integrity: sha1-VkGerBT59WYSyAauRvkjhkjz8C4=} + resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==} prosemirror-view@1.40.0: - resolution: {integrity: sha1-IS5iegxPAZismCOhIy4AmcmpKGU=} + resolution: {integrity: sha512-2G3svX0Cr1sJjkD/DYWSe3cfV5VPVTBOxI9XQEGWJDFEpsZb/gh4MV29ctv+OJx2RFX4BLt09i+6zaGM/ldkCw==} prosemirror-virtual-cursor@0.4.2: - resolution: {integrity: sha1-t5gloF2cmseLLdaQwtnrZ0UPtC0=} + resolution: {integrity: sha512-pUMKnIuOhhnMcgIJUjhIQTVJruBEGxfMBVQSrK0g2qhGPDm1i12KdsVaFw15dYk+29tZcxjMeR7P5VDKwmbwJg==} peerDependencies: prosemirror-model: ^1.0.0 prosemirror-state: ^1.0.0 @@ -15777,89 +15795,89 @@ packages: optional: true protobufjs@7.6.4: - resolution: {integrity: sha1-i7AAMAAm79Y+t5UdJuXbs49WWPI=} + resolution: {integrity: sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==} engines: {node: '>=12.0.0'} protocol-buffers-schema@3.6.1: - resolution: {integrity: sha1-/ZpYpcTpY4W5ZICPPd1Y+e8Yw8g=} + resolution: {integrity: sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==} proxy-addr@2.0.7: - resolution: {integrity: sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=} + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} proxy-agent@6.5.0: - resolution: {integrity: sha1-nkmsuo5O4jSqy1Ofie2cI9AvIy0=} + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} proxy-from-env@1.1.0: - resolution: {integrity: sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=} + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} prr@1.0.1: - resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=} + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} psl@1.15.0: - resolution: {integrity: sha1-vazjGJbx2XzsannoIkiYzpPZdMY=} + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} pug-attrs@3.0.0: - resolution: {integrity: sha1-sQRR4DSBZeMfrRzCPr3dncc0fEE=} + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} pug-code-gen@3.0.4: - resolution: {integrity: sha1-KoLNMX9Jg9m2G1EDXeNOT5ZNeI0=} + resolution: {integrity: sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==} pug-error@2.1.0: - resolution: {integrity: sha1-F+o3tYe2RD1LjxSDdOwntUtAblU=} + resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} pug-filters@4.0.0: - resolution: {integrity: sha1-0+Sa9bqEcum3pm2YDnB86dLMm14=} + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} pug-lexer@5.0.1: - resolution: {integrity: sha1-rkRijFvvmxkLZlaDsojKkCS4sNU=} + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} pug-linker@4.0.0: - resolution: {integrity: sha1-EsvAWU/Fo+Brn8Web5PBRpYqdwg=} + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} pug-load@3.0.0: - resolution: {integrity: sha1-n9nNpSICsIrbEdJWgfufNL1BtmI=} + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} pug-parser@6.0.0: - resolution: {integrity: sha1-qP3ANYY6lbLB3F6/Ts+AtOdqEmA=} + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} pug-runtime@3.0.1: - resolution: {integrity: sha1-9jaXYgRyPzWoxfb61qzaKhkbg9c=} + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} pug-strip-comments@2.0.0: - resolution: {integrity: sha1-+UsH/WtJVSMzD0kKf1VLT/h2MD4=} + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} pug-walk@2.0.0: - resolution: {integrity: sha1-QXqrwpIyu0SZtbUGmistKiTV9f4=} + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} pug@3.0.4: - resolution: {integrity: sha1-kEOujdhfyL61vs8J3Y5LdUuUsp8=} + resolution: {integrity: sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==} pump@3.0.2: - resolution: {integrity: sha1-g28+3WvC7lmSVskk/+DYhXPdy/g=} + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} pump@3.0.4: - resolution: {integrity: sha1-HzE0MFJ/qLkFYi69Iv4UROdXqzw=} + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode.js@2.3.1: - resolution: {integrity: sha1-a1PlatdViCNOefSv+pCXLH3Yzbc=} + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} punycode@2.3.1: - resolution: {integrity: sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU=} + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} puppeteer-core@23.11.1: - resolution: {integrity: sha1-PgZN4Rs8s6LfGoBg/y0FtBvlg9s=} + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} engines: {node: '>=18'} puppeteer-core@24.37.5: - resolution: {integrity: sha1-uVf0JHF8E/8VdlvGZKm5eAjly7Q=} + resolution: {integrity: sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==} engines: {node: '>=18'} puppeteer-extra-plugin-adblocker@2.13.6: - resolution: {integrity: sha1-mYKCQ1ebWe2B6LHaI9FqOg265Vc=} + resolution: {integrity: sha512-AftgnUZ1rg2RPe9RpX6rkYAxEohwp3iFeGIyjsAuTaIiw4VLZqOb1LSY8/S60vAxpeat60fbCajxoUetmLy4Dw==} engines: {node: '>=8'} peerDependencies: puppeteer: '*' @@ -15874,7 +15892,7 @@ packages: optional: true puppeteer-extra-plugin-stealth@2.11.2: - resolution: {integrity: sha1-vT9aF4HKyKmMmD0UgIZYWoT8yPE=} + resolution: {integrity: sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==} engines: {node: '>=8'} peerDependencies: playwright-extra: '*' @@ -15886,7 +15904,7 @@ packages: optional: true puppeteer-extra-plugin-user-data-dir@2.4.1: - resolution: {integrity: sha1-TqnVbSBFVnKlT+CGMJoQKlEmQRw=} + resolution: {integrity: sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==} engines: {node: '>=8'} peerDependencies: playwright-extra: '*' @@ -15898,7 +15916,7 @@ packages: optional: true puppeteer-extra-plugin-user-preferences@2.4.1: - resolution: {integrity: sha1-247GPASmoQqPiZfhX9/98TJyFh0=} + resolution: {integrity: sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==} engines: {node: '>=8'} peerDependencies: playwright-extra: '*' @@ -15910,7 +15928,7 @@ packages: optional: true puppeteer-extra-plugin@3.2.3: - resolution: {integrity: sha1-UMnwdJwAW7x7iyCLzQCp1GoVtYU=} + resolution: {integrity: sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==} engines: {node: '>=9.11.2'} peerDependencies: playwright-extra: '*' @@ -15922,7 +15940,7 @@ packages: optional: true puppeteer-extra@3.3.6: - resolution: {integrity: sha1-/Bb/OWquUmZIQtqaVX6o+lHqqLc=} + resolution: {integrity: sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==} engines: {node: '>=8'} peerDependencies: '@types/puppeteer': '*' @@ -15937,952 +15955,952 @@ packages: optional: true puppeteer@24.37.5: - resolution: {integrity: sha1-xhkyzbK8U9GJcGcb4Y1UchbSlfA=} + resolution: {integrity: sha512-3PAOIQLceyEmn1Fi76GkGO2EVxztv5OtdlB1m8hMUZL3f8KDHnlvXbvCXv+Ls7KzF1R0KdKBqLuT/Hhrok12hQ==} engines: {node: '>=18'} hasBin: true pure-rand@6.1.0: - resolution: {integrity: sha1-0XPPIyWCMZdsy9sFJHyXh5V2BPI=} + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} pvtsutils@1.3.6: - resolution: {integrity: sha1-7EbjTbdCK55P3FSQV4wYg2V9YAE=} + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} pvutils@1.1.5: - resolution: {integrity: sha1-hLDepKXWcCSaqYAFEYBO4LfCgJw=} + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} engines: {node: '>=16.0.0'} qs@6.13.0: - resolution: {integrity: sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=} + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} qs@6.14.2: - resolution: {integrity: sha1-tWNM+dmtmJjjH7o1BOhm6O+2eYw=} + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} qs@6.15.3: - resolution: {integrity: sha1-doUhMqWO1cfA72fkRBubtdYGGzs=} + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} querystringify@2.2.0: - resolution: {integrity: sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=} + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: - resolution: {integrity: sha1-SSkii7xyTfrEPg77BYyve2z7YkM=} + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-lru@5.1.1: - resolution: {integrity: sha1-NmST5rPkKjpoheLpnRj4D7eoyTI=} + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} quote-unquote@1.0.0: - resolution: {integrity: sha1-Z6mncUjv/q+BpNQoQEpxC6qsigs=} + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} range-parser@1.2.1: - resolution: {integrity: sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=} + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} raw-body@2.5.2: - resolution: {integrity: sha1-mf69g7kOCJdQh+jx+UGaFJNmtoo=} + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} raw-body@2.5.3: - resolution: {integrity: sha1-EcZlDudwp94bSU8ZeSfeDJI4IuI=} + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} raw-body@3.0.2: - resolution: {integrity: sha1-PjraWuVWj5CV2EN2/TpJuPsAClE=} + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} rc-config-loader@4.1.3: - resolution: {integrity: sha1-E1KYa4otjZbW/QVKW7GaYMV2h2o=} + resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} rc@1.2.8: - resolution: {integrity: sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=} + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true react-is@18.2.0: - resolution: {integrity: sha1-GZQx7qqi4J+GQn77tPFHPttHYJs=} + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} react-reconciler@0.29.2: - resolution: {integrity: sha1-js+vymNUmk9PPkweBJ3VrZrDpU8=} + resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} engines: {node: '>=0.10.0'} peerDependencies: react: ^18.3.1 react@18.3.1: - resolution: {integrity: sha1-SauJIAnFOTNiW9FrJTP8dUyrKJE=} + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} read-binary-file-arch@1.0.6: - resolution: {integrity: sha1-lZxGN9qpMigKm5EbGmdmp+RCiPw=} + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} hasBin: true read-pkg@8.1.0: - resolution: {integrity: sha1-bPVguR2Q32i85lhSfn4+7nX3xMc=} + resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} engines: {node: '>=16'} read@1.0.7: - resolution: {integrity: sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=} + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} readable-stream@1.0.34: - resolution: {integrity: sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=} + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} readable-stream@2.3.8: - resolution: {integrity: sha1-kRJegEK7obmIf0k0X2J3Anzovps=} + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readable-stream@3.6.2: - resolution: {integrity: sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=} + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} readable-stream@4.5.2: - resolution: {integrity: sha1-nn/ExFCZuu7ZNL/265e6bPJyngk=} + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} readdir-glob@1.1.3: - resolution: {integrity: sha1-w9gx9R9ee/pi+i/75LUIxkDwlYQ=} + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} readdirp@3.6.0: - resolution: {integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=} + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} readdirp@4.1.2: - resolution: {integrity: sha1-64WAFDX78qfuWPGeCSGwaPxplI0=} + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} readline@1.3.0: - resolution: {integrity: sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=} + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} rechoir@0.6.2: - resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=} + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} rechoir@0.8.0: - resolution: {integrity: sha1-Sfhm4NMhRhQto62PDv81KzIV/yI=} + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} refa@0.12.1: - resolution: {integrity: sha1-2sE8R4LcIra65szoGiuGOIjqOcY=} + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} reflect-metadata@0.2.2: - resolution: {integrity: sha1-QAyEW2y6h6IfLGXErrFY9PpNnFs=} + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} reflect.getprototypeof@1.0.10: - resolution: {integrity: sha1-xikhnnijMW2LYEx2XvaJlpZOe/k=} + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} regenerator-runtime@0.14.0: - resolution: {integrity: sha1-XhnWjrEtSG95fhWjxqkY987F60U=} + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} regexp-ast-analysis@0.7.1: - resolution: {integrity: sha1-wOJMsqkPbq3Uy6q6EpMX4p0pxII=} + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} regexp.escape@2.0.1: - resolution: {integrity: sha1-CeS+750gLb1zmGjzgYIj+XfPkdo=} + resolution: {integrity: sha512-JItRb4rmyTzmERBkAf6J87LjDPy/RscIwmaJQ3gsFlAzrmZbZU8LwBw5IydFZXW9hqpgbPlGbMhtpqtuAhMgtg==} engines: {node: '>= 0.4'} regexp.prototype.flags@1.5.4: - resolution: {integrity: sha1-GtbGLUSiWQB+VbOXDgD3Ru+8qhk=} + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} relateurl@0.2.7: - resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=} + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} remark-gfm@4.0.1: - resolution: {integrity: sha1-MyJ7KnQ5dnDTV78FwJjq+FE/DWs=} + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} remark-inline-links@7.0.0: - resolution: {integrity: sha1-d/v/gGGrw9DsNBh6txZ4pxDfBeE=} + resolution: {integrity: sha512-4uj1pPM+F495ySZhTIB6ay2oSkTsKgmYaKk/q5HIdhX2fuyLEegpjWa0VdJRJ01sgOqAFo7MBKdDUejIYBMVMQ==} remark-math@6.0.0: - resolution: {integrity: sha1-Cs33RnXxwZX+pu//p4WC9+1/wNc=} + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} remark-parse@11.0.0: - resolution: {integrity: sha1-qmB0P8s36/awaSBOtNowTkDbRaE=} + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} remark-stringify@11.0.0: - resolution: {integrity: sha1-TFsB3XEcJp3xqq4RdD634udjb9M=} + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} remark@15.0.1: - resolution: {integrity: sha1-rH51YyYFE7ZkJrxH+FDnqlhiw3w=} + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} renderkid@3.0.0: - resolution: {integrity: sha1-X9gj5NaVHTc1jsyaWLHwaDa2Joo=} + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} repeat-string@1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} require-directory@2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} require-from-string@2.0.2: - resolution: {integrity: sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=} + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} requirejs-config-file@4.0.0: - resolution: {integrity: sha1-QkTaXdH1mHQDjMEJHQeNYgq7brw=} + resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==} engines: {node: '>=10.13.0'} requirejs@2.3.8: - resolution: {integrity: sha1-vKBhS2GKshIkYll+RIeNt1WLu6M=} + resolution: {integrity: sha512-7/cTSLOdYkNBNJcDMWf+luFvMriVm7eYxp4BcFCsAX0wF421Vyce5SXP17c+Jd5otXKGNehIonFlyQXSowL6Mw==} engines: {node: '>=0.4.0'} hasBin: true requires-port@1.0.0: - resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=} + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resedit@1.7.2: - resolution: {integrity: sha1-sQQRcLmYEXEME/lJx9Ilhx3kzHg=} + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} engines: {node: '>=12', npm: '>=6'} resolve-alpn@1.2.1: - resolution: {integrity: sha1-t629rDVGqq7CC0Xn2CZZJwcnJvk=} + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} resolve-cwd@3.0.0: - resolution: {integrity: sha1-DwB18bslRHZs9zumpuKt/ryxPy0=} + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} resolve-dependency-path@4.0.1: - resolution: {integrity: sha1-G51D5bYjhDAeJtBAufzmHuXbYL0=} + resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} engines: {node: '>=18'} resolve-from@4.0.0: - resolution: {integrity: sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=} + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} resolve-from@5.0.0: - resolution: {integrity: sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=} + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} resolve-path@1.4.0: - resolution: {integrity: sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=} + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} resolve-pkg-maps@1.0.0: - resolution: {integrity: sha1-YWs9wsVwVrVYjDHN9LPWTbEzcg8=} + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolve-protobuf-schema@2.1.0: - resolution: {integrity: sha1-nKmp5pzxkrva8QBuwZc5SKpKN1g=} + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} resolve.exports@2.0.3: - resolution: {integrity: sha1-QZVebxtAE7dYb4c3SaY13qB+vj8=} + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} resolve@1.22.12: - resolution: {integrity: sha1-9bKmgIl8acI4oTzRaxVnH4tzVJ8=} + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true resolve@1.22.8: - resolution: {integrity: sha1-tsh6nyqgbfq1Lj1wrIzeMh+lpI0=} + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true responselike@2.0.1: - resolution: {integrity: sha1-mgvI/cJS8/scymiwFlkQWboUIrw=} + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} restore-cursor@3.1.0: - resolution: {integrity: sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=} + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} restore-cursor@4.0.0: - resolution: {integrity: sha1-UZVgpDGJdQlt725gnUQQDtqkzLk=} + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} restore-cursor@5.1.0: - resolution: {integrity: sha1-B2bZVpnvrLFBUJk/VbrwlT6h6+c=} + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} retry@0.12.0: - resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=} + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} retry@0.13.1: - resolution: {integrity: sha1-GFsVh6z2eRnWOzVzSeA1N7JIRlg=} + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} reusify@1.0.4: - resolution: {integrity: sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=} + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@2.6.3: - resolution: {integrity: sha1-stEE/g2Psnz54KHNqCYt04M8bKs=} + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: - resolution: {integrity: sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=} + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@4.4.1: - resolution: {integrity: sha1-vTM2T2cCHFt56T1/T6BWjHwht1U=} + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} engines: {node: '>=14'} hasBin: true rimraf@5.0.10: - resolution: {integrity: sha1-I7mEPT3JLbcfluGizpLjn9KoIhw=} + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true rimraf@6.0.1: - resolution: {integrity: sha1-/7itiETdYDMqsV9SvBBLw+1x6k4=} + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} hasBin: true roarr@2.15.4: - resolution: {integrity: sha1-9f55W3uDjM/jXcYI4Cgrnrouev0=} + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} robust-predicates@3.0.2: - resolution: {integrity: sha1-1bKFKMSCTSD8SN8ZKNQdnvoa13E=} + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} rollup-plugin-copy@3.5.0: - resolution: {integrity: sha1-f/oqeoMD4UOHb6ZPte7ZAi0wTus=} + resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} engines: {node: '>=8.3'} rollup@4.59.0: - resolution: {integrity: sha1-z3TtrBfBSG9WLXKKTZI6aUq98G8=} + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true rope-sequence@1.3.4: - resolution: {integrity: sha1-34VxGq7NMvHnVvduQ6QVFxI11CU=} + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} roughjs@4.6.6: - resolution: {integrity: sha1-EFn0ml4MgN7lQaAFsgzDIrIiFYs=} + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} router@2.2.0: - resolution: {integrity: sha1-AZvmILcRyHZBFnzHm5kJDwCxRu8=} + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} run-applescript@7.0.0: - resolution: {integrity: sha1-5aVTwr/9Yg4WnSdsHNjxtkd4++s=} + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} run-parallel@1.2.0: - resolution: {integrity: sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=} + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} run-script-os@1.1.6: - resolution: {integrity: sha1-iwF3+xtUyZpnD5XH/cVPGLnHI0c=} + resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} hasBin: true rw@1.3.3: - resolution: {integrity: sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=} + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} rxjs@7.8.1: - resolution: {integrity: sha1-b289meqARCke/ZLnx/z1YsQFdUM=} + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} safe-array-concat@1.1.3: - resolution: {integrity: sha1-yeVOxPYDsLu45+UAel7nrs0VOMM=} + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} safe-buffer@5.1.2: - resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=} + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: - resolution: {integrity: sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=} + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safe-push-apply@1.0.0: - resolution: {integrity: sha1-AYUOmBwWAtOYyFCB82Dk5tA9J/U=} + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} safe-regex-test@1.1.0: - resolution: {integrity: sha1-f4fftnoxUHguqvGFg/9dFxGsEME=} + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safer-buffer@2.1.2: - resolution: {integrity: sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=} + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} sanitize-filename@1.6.3: - resolution: {integrity: sha1-dV69dSBFkxl34wsgJdNA18kJA3g=} + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} sass-lookup@6.1.2: - resolution: {integrity: sha1-7vzJDr6uRR0lKkqdjQkP7xpionk=} + resolution: {integrity: sha512-GjmndmKQBtlPil79RK72L7yc5kDXZPCQeH97bP8R8DcxtXQJO6vECExb3WP/m6+cxaV9h4ZxrSRvCkPG2v/VSw==} engines: {node: '>=18'} hasBin: true sax@1.3.0: - resolution: {integrity: sha1-pdvnfbO+BcnR7neF29PqneUVk9A=} + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} saxes@6.0.0: - resolution: {integrity: sha1-/ltKR2jfTxSiAbG6amXB89mYjMU=} + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} scheduler@0.23.2: - resolution: {integrity: sha1-QUumSjsoKJLpRM8hCOzAeNEVzcM=} + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} schema-utils@4.2.0: - resolution: {integrity: sha1-cNfJPhU6JzqAWAGILr07/yDYnIs=} + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} schema-utils@4.3.3: - resolution: {integrity: sha1-WxhQkS+jHfkHFpY9RdkSH9/An0Y=} + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} scslre@0.3.0: - resolution: {integrity: sha1-wyEem/xVR/yGseq6o07RplcGAVU=} + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} secretlint@9.3.2: - resolution: {integrity: sha1-INXib/mVkOs62BS423g2tawVVtU=} + resolution: {integrity: sha512-IuFrtWMGeVFSWpuhn1T6JC0mgfwD9rbFNZG1aWtpkBKOUCbcKZ+RoJcJjdJ0DXv8oa9vRg/+DZUl6Q6omZdPQQ==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true secure-json-parse@4.1.0: - resolution: {integrity: sha1-Txq0HGehNJfqG5Exu0GDoihlR3w=} + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} selderee@0.11.0: - resolution: {integrity: sha1-avDHmD4HOtPjV4f/4gzv2drw7Io=} + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} select-hose@2.0.0: - resolution: {integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=} + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} selfsigned@5.5.0: - resolution: {integrity: sha1-TJq3x8nzXxj7apiCwlPrDmvWVXs=} + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} engines: {node: '>=18'} semaphore@1.1.0: - resolution: {integrity: sha1-qq2LhrIP6OmzKxbcLuaCqM0mqKo=} + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} engines: {node: '>=0.8.0'} semver-compare@1.0.0: - resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} semver@5.7.2: - resolution: {integrity: sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=} + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true semver@6.3.1: - resolution: {integrity: sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=} + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.5.4: - resolution: {integrity: sha1-SDmG7E7TjhxsSMNIlKkYLb/2im4=} + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true semver@7.7.1: - resolution: {integrity: sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=} + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true semver@7.7.2: - resolution: {integrity: sha1-Z9mf3NNc7CHm+Lh6f9UVoz+YK1g=} + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true semver@7.7.3: - resolution: {integrity: sha1-S19BQ9AHYzqNxnHNCm75FHuLuUY=} + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true semver@7.7.4: - resolution: {integrity: sha1-KEZONgYOmR+noR0CedLT87V6foo=} + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true semver@7.8.0: - resolution: {integrity: sha1-7QZhA5/LzaLOcfAfpq2++qdwQN8=} + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} hasBin: true semver@7.8.4: - resolution: {integrity: sha1-xz7O664GFpNL6N/yin/XB1fI5pY=} + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} hasBin: true send@0.19.0: - resolution: {integrity: sha1-u8WjiMjqbASJZwSdvqwOSj8J1/g=} + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} send@0.19.1: - resolution: {integrity: sha1-HCVjsu5P5RC4BrIexG81UAWjafk=} + resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} engines: {node: '>= 0.8.0'} send@0.19.2: - resolution: {integrity: sha1-WbwNobTqetQnNv1kKxxClOEU/yk=} + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} send@1.2.1: - resolution: {integrity: sha1-nqt0O4dPNVD0CiaGe/KGrWDT8+0=} + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} serialize-error@7.0.1: - resolution: {integrity: sha1-8TYLBEf2H/tIPsQVfHN/q313jhg=} + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} serialize-javascript@7.0.5: - resolution: {integrity: sha1-x5jMBVL/uwiYGRSkKodW4znQ1bE=} + resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} engines: {node: '>=20.0.0'} serve-index@1.9.2: - resolution: {integrity: sha1-KYjjYSEG14peSEnd/1Us5709m8s=} + resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} engines: {node: '>= 0.8.0'} serve-static@1.16.2: - resolution: {integrity: sha1-tqU0PaR/a90mc4SL9FdUlB6AMpY=} + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} serve-static@1.16.3: - resolution: {integrity: sha1-qXt02VV3hYPzhipPC4QetNXXjPk=} + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} serve-static@2.2.1: - resolution: {integrity: sha1-fxhqSk5fW2Y616QpT/G/N88OmKk=} + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} set-function-length@1.2.2: - resolution: {integrity: sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=} + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: {integrity: sha1-FqcFxaDcL15jjKltiozU4cK5CYU=} + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} set-proto@1.0.0: - resolution: {integrity: sha1-B2Dbz/MLLX6AH9bhmYPlbaM3Vl4=} + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} setimmediate@1.0.5: - resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} setprototypeof@1.1.0: - resolution: {integrity: sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=} + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} setprototypeof@1.2.0: - resolution: {integrity: sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=} + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shallow-clone@0.1.2: - resolution: {integrity: sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=} + resolution: {integrity: sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==} engines: {node: '>=0.10.0'} shallow-clone@3.0.1: - resolution: {integrity: sha1-jymBrZJTH1UDWwH7IwdppA4C76M=} + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} sharp@0.33.5: - resolution: {integrity: sha1-E+DkEwzDCdapSXWWcVJAsuwMWU4=} + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} sharp@0.34.5: - resolution: {integrity: sha1-tvFI5LjGHxeXveEanRz+u64sV7A=} + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@1.2.0: - resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=} + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} shebang-command@2.0.0: - resolution: {integrity: sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=} + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} shebang-regex@1.0.0: - resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=} + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} shebang-regex@3.0.0: - resolution: {integrity: sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=} + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} shell-quote@1.8.4: - resolution: {integrity: sha1-Lt2aTc78lmSeLiyxL2N7Hx2SoZA=} + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} shelljs@0.9.2: - resolution: {integrity: sha1-qKxyRDRSDNeuJNUgceN6GKwrsYM=} + resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} engines: {node: '>=18'} hasBin: true shx@0.4.0: - resolution: {integrity: sha1-xupqzn53jaCrMtLqud71nXiOkzY=} + resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} engines: {node: '>=18'} hasBin: true side-channel-list@1.0.0: - resolution: {integrity: sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=} + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} side-channel-list@1.0.1: - resolution: {integrity: sha1-wuC1oUpUCuvuO7xsP4ZmzJtQkSc=} + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: - resolution: {integrity: sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=} + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} engines: {node: '>= 0.4'} side-channel-weakmap@1.0.2: - resolution: {integrity: sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=} + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} side-channel@1.1.0: - resolution: {integrity: sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=} + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} side-channel@1.1.1: - resolution: {integrity: sha1-6gLGLgXcS+pn1EQvD7ce4ZL44Ks=} + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} signal-exit@3.0.7: - resolution: {integrity: sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk=} + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: {integrity: sha1-lSGIwcvVRgcOLdIND0HArgUwywQ=} + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} simple-concat@1.0.1: - resolution: {integrity: sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8=} + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} simple-get@4.0.1: - resolution: {integrity: sha1-SjnbVJKHyXnTUhEvoD/Zn9a8NUM=} + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} simple-swizzle@0.2.2: - resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} simple-update-notifier@2.0.0: - resolution: {integrity: sha1-1wuSvat9bZDf1zkxGVowtuPXzrs=} + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} sisteransi@1.0.5: - resolution: {integrity: sha1-E01oEpd1ZDfMBcoBNw06elcQde0=} + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} skin-tone@2.0.0: - resolution: {integrity: sha1-Tjkzq0XA1PT3gXRdZLn0wgjkEjc=} + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} slash@3.0.0: - resolution: {integrity: sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=} + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} slash@5.1.0: - resolution: {integrity: sha1-vjrd3N8JrDjuvo3Nx7GlenWwlc4=} + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} slice-ansi@3.0.0: - resolution: {integrity: sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=} + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} slice-ansi@4.0.0: - resolution: {integrity: sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=} + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} slice-ansi@5.0.0: - resolution: {integrity: sha1-tzBjxXqpb5zYgWVLFSlNldKFxCo=} + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} slice-ansi@7.1.0: - resolution: {integrity: sha1-zWtGVeKYqNG96wQlCkMwlLNHuak=} + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} smart-buffer@4.2.0: - resolution: {integrity: sha1-bh1x+k8YwF99D/IW3RakgdDo2a4=} + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} smol-toml@1.7.0: - resolution: {integrity: sha1-7RslnOfgWQffGr51iXG9Cg7ywN0=} + resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==} engines: {node: '>= 18'} sockjs@0.3.24: - resolution: {integrity: sha1-ybyJlfM6ERvqA5XsMKoyBr21zM4=} + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} socks-proxy-agent@8.0.5: - resolution: {integrity: sha1-uc205+mYUJ12WdaJznaXrCFkW+4=} + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} socks@2.8.7: - resolution: {integrity: sha1-4vsdmmA63XUFCiBn24w4GgtWaeo=} + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sort-object-keys@1.1.3: - resolution: {integrity: sha1-v/gz/oXKsUezR0LkWGNFPB4ZC0U=} + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} sort-package-json@1.57.0: - resolution: {integrity: sha1-6V+0Svjt4LthR+PzklgQLUuyP8Q=} + resolution: {integrity: sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==} hasBin: true sort-package-json@3.2.1: - resolution: {integrity: sha1-iJ8730PO7/X6QninxTrlsVINKH4=} + resolution: {integrity: sha512-rTfRdb20vuoAn7LDlEtCqOkYfl2X+Qze6cLbNOzcDpbmKEhJI30tTN44d5shbKJnXsvz24QQhlCm81Bag7EOKg==} hasBin: true source-map-js@1.2.1: - resolution: {integrity: sha1-HOVlD93YerwJnto33P8CTCZnrkY=} + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.13: - resolution: {integrity: sha1-MbJKnC5zwt6FBmwP631Edn7VKTI=} + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map-support@0.5.21: - resolution: {integrity: sha1-BP58f54e0tZiIzwoyys1ufY/bk8=} + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: - resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=} + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} source-map@0.7.4: - resolution: {integrity: sha1-qbvnBcnYhG9OCP9nZazw8bCJhlY=} + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} spark-md5@3.0.2: - resolution: {integrity: sha1-eVLEoweENHq87nMmjkc7nAFn4/w=} + resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} sparse-bitfield@3.0.3: - resolution: {integrity: sha1-/0rm5oZWBWuks+eSqzM004JzyhE=} + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} spdx-correct@3.2.0: - resolution: {integrity: sha1-T1qwZo8AWeNPnADc4zF4ShLeTpw=} + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} spdx-exceptions@2.5.0: - resolution: {integrity: sha1-XWB9J/yAb2bXtkp2ZlD6iQ8E7WY=} + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@3.0.1: - resolution: {integrity: sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=} + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} spdx-license-ids@3.0.21: - resolution: {integrity: sha1-bW6YDJ3ytvyQU0OjstcCpiOVNsM=} + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} spdy-transport@3.0.0: - resolution: {integrity: sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=} + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} spdy@4.0.2: - resolution: {integrity: sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=} + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} split@0.3.3: - resolution: {integrity: sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=} + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} sprintf-js@1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} sprintf-js@1.1.3: - resolution: {integrity: sha1-SRS5A6L4toXRf994pw6RfocuREo=} + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} stack-utils@2.0.6: - resolution: {integrity: sha1-qvB0gWnAL8M8gjKrzPkz9Uocw08=} + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} stat-mode@1.0.0: - resolution: {integrity: sha1-aLVcth6mOf9XE282shaikYANFGU=} + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} static-eval@2.1.1: - resolution: {integrity: sha1-caxqE6oyueFMW18GPDYhdrDVhLo=} + resolution: {integrity: sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==} statuses@1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} statuses@2.0.1: - resolution: {integrity: sha1-VcsADM8dSHKL0jxoWgY5mM8aG2M=} + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} statuses@2.0.2: - resolution: {integrity: sha1-j3XuzvdlteHPzcCA2llAntQk44I=} + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} stdin-discarder@0.2.2: - resolution: {integrity: sha1-OQA39ExK4aGuU1xf443Dq6jZl74=} + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} stop-iteration-iterator@1.1.0: - resolution: {integrity: sha1-9IH/cKVI9hJNAxLDqhTL+nqlQq0=} + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} stream-browserify@3.0.0: - resolution: {integrity: sha1-IrCihQzfZQPnMIXaH8e30MISLy8=} + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} stream-combiner@0.0.4: - resolution: {integrity: sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=} + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} stream-to-array@2.3.0: - resolution: {integrity: sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=} + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} streamx@2.22.0: - resolution: {integrity: sha1-zXteV8larvD/myrveQWvpi7G5Kc=} + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} string-compare@1.1.2: - resolution: {integrity: sha1-ByuOAKcTCLTkE3caGcpVtQ0L41g=} + resolution: {integrity: sha512-LKBVyWCmTPu6fg5Q8Jfdz7yFK9qaJMPVW+zJ1a23o8VuZa0UIgQ3oIsNaNUAXONRtFwD4dP5F/C/VuH+nDruig==} string-length@4.0.2: - resolution: {integrity: sha1-qKjce9XBqCubPIuH4SX2aHG25Xo=} + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} string-width@4.2.3: - resolution: {integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=} + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} string-width@5.1.2: - resolution: {integrity: sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q=} + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} string-width@7.2.0: - resolution: {integrity: sha1-tbuOIWXOJ11NQ0dt0nAK2Qkdttw=} + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} string.prototype.trim@1.2.10: - resolution: {integrity: sha1-QLLdXulMlZtNz7HWXOcukNpIDIE=} + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} string.prototype.trimend@1.0.9: - resolution: {integrity: sha1-YuJzEnLNKFBBs2WWBU6fZlabaUI=} + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: - resolution: {integrity: sha1-fug03ajHwX7/MRhHK7Nb/tqjTd4=} + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} string_decoder@0.10.31: - resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} string_decoder@1.1.1: - resolution: {integrity: sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=} + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: - resolution: {integrity: sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=} + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} stringify-object@3.3.0: - resolution: {integrity: sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=} + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} strip-ansi@6.0.1: - resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=} + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} strip-ansi@7.1.0: - resolution: {integrity: sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=} + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} strip-ansi@7.1.2: - resolution: {integrity: sha1-Eyh1q95njH6o1pFTPy5+Irt0Tbo=} + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@3.0.0: - resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} strip-bom@4.0.0: - resolution: {integrity: sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=} + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} strip-eof@1.0.0: - resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=} + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} strip-final-newline@2.0.0: - resolution: {integrity: sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=} + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} strip-json-comments@2.0.1: - resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} strip-json-comments@3.1.1: - resolution: {integrity: sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=} + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} strip-json-comments@5.0.3: - resolution: {integrity: sha1-tzBCSd1ALuZ/1RitqZOrNZNFi88=} + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} strnum@2.2.3: - resolution: {integrity: sha1-ARn84CdJoRuxJqTWhqxdvfbldYY=} + resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} structured-source@4.0.0: - resolution: {integrity: sha1-DJ5Z7kPe3Y/GCmNzH2DjWBAqSUg=} + resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} style-mod@4.1.2: - resolution: {integrity: sha1-yiOKGtR4ZSD3UVqFOdWmNpHXv2c=} + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} stylis@4.4.0: - resolution: {integrity: sha1-xYRsk0X0v8Ub0MvXyjWgdE9IWl0=} + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} stylus-lookup@6.1.2: - resolution: {integrity: sha1-W/3hcwW8dj31511FXpGe95Vf4Ms=} + resolution: {integrity: sha512-O+Q/SJ8s1X2aMLh4213fQ9X/bND9M3dhSsyTRe+O1OXPcewGLiYmAtKCrnP7FDvDBaXB2ZHPkCt3zi4cJXBlCQ==} engines: {node: '>=18'} hasBin: true sumchecker@3.0.1: - resolution: {integrity: sha1-Y3fplnlauwttNI6bPh37JDRajkI=} + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} supports-color@10.2.2: - resolution: {integrity: sha1-RmwpeMxc0AUtVCoLV2RhwrgC67Q=} + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} supports-color@5.5.0: - resolution: {integrity: sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=} + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} supports-color@7.2.0: - resolution: {integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=} + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} supports-color@8.1.1: - resolution: {integrity: sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=} + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} supports-hyperlinks@2.3.0: - resolution: {integrity: sha1-OUNUQ0fB/5CxXv+wP8FK5F7BBiQ=} + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} supports-hyperlinks@3.2.0: - resolution: {integrity: sha1-uOSFsXloHepJah56vfiYW9MUVGE=} + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha1-btpL00SjyUrqN21MwxvHcxEDngk=} + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} symbol-tree@3.2.4: - resolution: {integrity: sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=} + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} table-layout@4.1.1: - resolution: {integrity: sha1-D3KWXeGlwMFBnJuiHK5Oc6L3OkI=} + resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} engines: {node: '>=12.17'} table@6.9.0: - resolution: {integrity: sha1-UAQK+mJkFBx1ZrO4HU2CxHqGaPU=} + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} tapable@2.2.1: - resolution: {integrity: sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=} + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} tapable@2.3.3: - resolution: {integrity: sha1-XafJmSxGA4IhJnmFqyhCGoh58WA=} + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} tar-fs@2.1.4: - resolution: {integrity: sha1-gAgk2/TvBt7Zr+pKyv5xxnx2uTA=} + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} tar-fs@3.1.1: - resolution: {integrity: sha1-TxZOWftg8QPUcjYHMejGu0p/6e8=} + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@2.2.0: - resolution: {integrity: sha1-rK2EwoQTawYNw/qmRHSqmuvXcoc=} + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} tar-stream@3.1.7: - resolution: {integrity: sha1-JLP7XqutoZ/nM47W0m5ffEgueSs=} + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} tar@7.5.16: - resolution: {integrity: sha1-8R4GOv7UVU91gEnQgpCeN9a1PO0=} + resolution: {integrity: sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==} engines: {node: '>=18'} temp-file@3.4.0: - resolution: {integrity: sha1-dm6iiRHGg5lsJI7xog7qBNUWUsc=} + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} temp@0.9.4: - resolution: {integrity: sha1-zSCoWAy2NjXQ5OnUvZidRChudiA=} + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} terminal-link@2.1.1: - resolution: {integrity: sha1-FKZKJ6s8Dfkz6lRvulXy0HjtyZQ=} + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} terser-webpack-plugin@5.3.16: - resolution: {integrity: sha1-dB5EjMP5PYAm6+T3755K+s/VYzA=} + resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -16898,191 +16916,191 @@ packages: optional: true terser@5.27.0: - resolution: {integrity: sha1-cBCGidmrJf72HE6T6Ajp/Qkr8gw=} + resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} engines: {node: '>=10'} hasBin: true terser@5.39.2: - resolution: {integrity: sha1-WhYmAwckpnLi5bXJzZBwMIwg6Pk=} + resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} engines: {node: '>=10'} hasBin: true test-exclude@6.0.0: - resolution: {integrity: sha1-BKhphmHYBepvopO2y55jrARO8V4=} + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} test-exclude@7.0.1: - resolution: {integrity: sha1-ILO6SQasIJlOJ1u8r9aNUQJkwqI=} + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} text-decoder@1.2.1: - resolution: {integrity: sha1-4XP1Eh2Xv6P/hyNCmtW6kuHq1n4=} + resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} text-table@0.2.0: - resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} textextensions@5.16.0: - resolution: {integrity: sha1-V91gwwUBm7oyHoSLH98Pmb+lnsE=} + resolution: {integrity: sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==} engines: {node: '>=0.8'} thenify-all@1.6.0: - resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=} + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} thenify@3.3.1: - resolution: {integrity: sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=} + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} thingies@2.6.0: - resolution: {integrity: sha1-4JuYueb2yvinWeyoSB/qHel00rE=} + resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 through2@2.0.5: - resolution: {integrity: sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=} + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} through@2.3.8: - resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} thunky@1.1.0: - resolution: {integrity: sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=} + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} tiny-async-pool@1.3.0: - resolution: {integrity: sha1-wBPhs2kJXnAF21WV+V5kbMpu+KU=} + resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} tiny-typed-emitter@2.1.0: - resolution: {integrity: sha1-s7An/dOJ/4GhUsjoR+4vW+n617U=} + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} tinyexec@1.1.2: - resolution: {integrity: sha1-Ef7vIEtwbUZoykAT2ynzvWT1xNw=} + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} tinyglobby@0.2.12: - resolution: {integrity: sha1-rJQaQuDFdzvQtdCPMt6C50oaYbU=} + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} tinyglobby@0.2.14: - resolution: {integrity: sha1-UoCwzz+XKwUOdK6IQGwKalj0B50=} + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} tinyglobby@0.2.15: - resolution: {integrity: sha1-4ijdHmOM6pk9L9tPzS1GAqeZUcI=} + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinyglobby@0.2.17: - resolution: {integrity: sha1-ViqabJ6ys7Ej05cZ+a9btE/NdjE=} + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tlds@1.261.0: - resolution: {integrity: sha1-BV5BLpLwH4SpyKwFBNNHLWizxMk=} + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} hasBin: true tldts-core@5.7.112: - resolution: {integrity: sha1-FoRZqnlJX11GQHpoWnqfDNyaJys=} + resolution: {integrity: sha512-mutrEUgG2sp0e/MIAnv9TbSLR0IPbvmAImpzqul5O/HJ2XM1/I1sajchQ/fbj0fPdA31IiuWde8EUhfwyldY1Q==} tldts-core@6.1.86: - resolution: {integrity: sha1-qT5u2dUFy1TFQs5D/rFMc5EyZdg=} + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} tldts-core@7.0.26: - resolution: {integrity: sha1-Bw8UvHpN6r8RXGUBvFwLrk2nTRc=} + resolution: {integrity: sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==} tldts-experimental@5.7.112: - resolution: {integrity: sha1-akS+EoERYefa8uiZUFY7jn2pTtE=} + resolution: {integrity: sha512-Nq5qWN4OiLziAOOOEoSME7cZI4Hz8Srt+9q6cl8mZ5EAhCfmeE6l7K5XjuIKN+pySuGUvthE5aPiD185YU1/lg==} tldts-experimental@6.1.66: - resolution: {integrity: sha1-3uyv0mTuvmDel7F3H3j8VU1lpj4=} + resolution: {integrity: sha512-hAgdTxaOC1QP2WoB4HKH1R6Df7MDusIFtljZ9XB3bndsQPKeUxHyAuOmvXxzdF7MrgfJmMtfusavNlX/ateEow==} tldts@7.0.26: - resolution: {integrity: sha1-vyRy7YTlX6qv9cJCTAOmurabksU=} + resolution: {integrity: sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==} hasBin: true tmp-promise@3.0.3: - resolution: {integrity: sha1-YKGhzJjJiGdPy/0jtuM2e96sTOc=} + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} tmp@0.2.7: - resolution: {integrity: sha1-JvTbEdFgHOgBLcuKeY7OHAapkFk=} + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} engines: {node: '>=14.14'} tmpl@1.0.5: - resolution: {integrity: sha1-hoPguQK7nCDE9ybjwLafNlGMB8w=} + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-regex-range@5.0.1: - resolution: {integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=} + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} toidentifier@1.0.1: - resolution: {integrity: sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=} + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} token-stream@1.0.0: - resolution: {integrity: sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=} + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} tough-cookie@4.1.4: - resolution: {integrity: sha1-lF8UYbRbWox2ghwz6knDrBksGzY=} + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} tough-cookie@6.0.1: - resolution: {integrity: sha1-pJX4M4NmCe2YPBm8ZWOc+861THY=} + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} tr46@0.0.3: - resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@3.0.0: - resolution: {integrity: sha1-VVxOKXqVBhfo7t3vYzyH1NnWy/k=} + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} tr46@4.1.1: - resolution: {integrity: sha1-KBp1jcyCrrT+OMff5NEaOVqshGk=} + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} tr46@5.1.1: - resolution: {integrity: sha1-lq6GfN24/bZKScwwWajUKLzyOMo=} + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} tr46@6.0.0: - resolution: {integrity: sha1-9aGuVGoK2zKid6InjQ0X+i+Qk+Y=} + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} tree-dump@1.1.0: - resolution: {integrity: sha1-qykSkWncRgBEFPWp1KPG6J8T6KQ=} + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' tree-kill@1.2.2: - resolution: {integrity: sha1-TKCakJLIi3OnzcXooBtQeweQoMw=} + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true trough@2.2.0: - resolution: {integrity: sha1-lKYL1r03XBUsHfkRpLEdWwJW9Q8=} + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha1-QFkjkJWS1W94pYGENLC3hInKXys=} + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} ts-algebra@2.0.0: - resolution: {integrity: sha1-Tj4JU4ePJlGPzn9rsRUGSmU4i3o=} + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} ts-api-utils@2.5.0: - resolution: {integrity: sha1-Ss1KFV4ic0mQpe0f6el/ETvLN8E=} + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' ts-dedent@2.2.0: - resolution: {integrity: sha1-OeS9KXzQNikq4jlOs0Er5j9WO7U=} + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} ts-deepmerge@7.0.2: - resolution: {integrity: sha1-YzOtzeg+TEI2bpqaf5VcdO6RNUc=} + resolution: {integrity: sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==} engines: {node: '>=14.13.1'} ts-graphviz@2.1.6: - resolution: {integrity: sha1-AH/LQrToxV0mVD7OnoY5W9PDz9Y=} + resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} engines: {node: '>=18'} ts-jest@29.3.3: - resolution: {integrity: sha1-wkwxqdEiaPiImePusFkSyrQsV0w=} + resolution: {integrity: sha512-y6jLm19SL4GroiBmHwFK4dSHUfDNmOrJbRfp6QmDIlI9p5tT5Q8ItccB4pTIslCIqOZuQnBwpTR0bQ5eUMYwkw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17106,7 +17124,7 @@ packages: optional: true ts-jest@29.4.9: - resolution: {integrity: sha1-R9wz0PXDa93O3Rav764oXgsEnS0=} + resolution: {integrity: sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17133,14 +17151,14 @@ packages: optional: true ts-loader@9.5.2: - resolution: {integrity: sha1-Hz1/S7cJtIeqomDo8ZswFjXQgCA=} + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' webpack: ^5.0.0 ts-node@10.9.2: - resolution: {integrity: sha1-cPAhyeGFvM3Kgg4m3EE4BcEBxx8=} + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -17154,76 +17172,76 @@ packages: optional: true tsconfig-paths@4.2.0: - resolution: {integrity: sha1-73jhkDkTNEbSRL6sD9ahYy4tEHw=} + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} tslib@1.14.1: - resolution: {integrity: sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=} + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.6.2: - resolution: {integrity: sha1-cDrClCXns3zW/UVukkBNRtHz5K4=} + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tslib@2.8.1: - resolution: {integrity: sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=} + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsscmp@1.0.6: - resolution: {integrity: sha1-hbmVg6w1iexL/vgltQAKqRHWBes=} + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} tsx@4.21.0: - resolution: {integrity: sha1-Mqps8XSB4zb3Vhleb+BNrj5jCLE=} + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} hasBin: true tsyringe@4.10.0: - resolution: {integrity: sha1-0MlYFdWERkIUBgKF6qrdlKoDKZw=} + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} tunnel-agent@0.6.0: - resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} tunnel@0.0.6: - resolution: {integrity: sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=} + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} type-check@0.4.0: - resolution: {integrity: sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=} + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} type-detect@4.0.8: - resolution: {integrity: sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=} + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} type-fest@0.13.1: - resolution: {integrity: sha1-AXLLW86AsL1ULqNI21DH4hg02TQ=} + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} type-fest@0.21.3: - resolution: {integrity: sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=} + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} type-fest@2.19.0: - resolution: {integrity: sha1-iAaAFbszA2pZi5UuVekxGmD9Ops=} + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} type-fest@3.13.1: - resolution: {integrity: sha1-u3RMHwZ4vqdUOi0ewk6D5o6MhwY=} + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} type-fest@4.41.0: - resolution: {integrity: sha1-auHI5XMSc8K/H1itOcuuLJGkbFg=} + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} type-is@1.6.18: - resolution: {integrity: sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=} + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} type-is@2.0.1: - resolution: {integrity: sha1-ZPbPA/kvzkAVwrIkeT9r3UsGjJc=} + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} typechat@0.1.1: - resolution: {integrity: sha1-+qW7DRtkeF9FbOnD7HMCxXfZJQk=} + resolution: {integrity: sha512-Sw96vmkYqbAahqam7vCp8P/MjIGsR26Odz17UHpVGniYN5ir2B37nRRkoDuRpA5djwNQB+W5TB7w2xoF6kwbHQ==} engines: {node: '>=18'} peerDependencies: typescript: ^5.3.3 @@ -17235,242 +17253,242 @@ packages: optional: true typed-array-buffer@1.0.3: - resolution: {integrity: sha1-pyOVRQpIaewDP9VJNxtHrzou5TY=} + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} typed-array-byte-length@1.0.3: - resolution: {integrity: sha1-hAegT314aE89JSqhoUPSt3tBYM4=} + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.4: - resolution: {integrity: sha1-rjaYuOyRqKuUUBYQiu8A1b/xI1U=} + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} typed-array-length@1.0.7: - resolution: {integrity: sha1-7k3v+YS2S+HhGLDejJyHfVznPT0=} + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} typed-query-selector@2.12.0: - resolution: {integrity: sha1-krZdvApCZV/M9K6xoIsd3c6K9fI=} + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} typed-rest-client@1.8.11: - resolution: {integrity: sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=} + resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} typescript-eslint@8.62.1: - resolution: {integrity: sha1-65P9lNUnqgTsW4RPsLStphPMfT8=} + resolution: {integrity: sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' typescript@5.4.5: - resolution: {integrity: sha1-QszvLFcf29D2cYsdH15uXvAG9hE=} + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true typescript@5.9.3: - resolution: {integrity: sha1-W09Z4VMQqxeiFvXWz1PuR27eZw8=} + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true typical@4.0.0: - resolution: {integrity: sha1-y+r/O5164eK7+vWk5vEezP3pT8Q=} + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} typical@7.3.0: - resolution: {integrity: sha1-kwN2vjRCKHCfE0YTkR+iKqCWF6Q=} + resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} engines: {node: '>=12.17'} uc.micro@2.1.0: - resolution: {integrity: sha1-+NP30OxMPeo1p+PI76TLi0XJ5+4=} + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} uglify-js@3.19.3: - resolution: {integrity: sha1-gjFem7xvKyWIiFis0f/4RBA1t38=} + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true unbash@4.0.2: - resolution: {integrity: sha1-eewPzKmQ4kx45r3cybjLfXVlM/A=} + resolution: {integrity: sha512-8gwNZ29+0/3zmXw7ToIHZtg6wK37xnniRUdBt7B27xZxaxfgR5tGMaGHT0t0dLtBV9fXE7zurh0s6Z1DHVjfWg==} engines: {node: '>=14'} unbox-primitive@1.1.0: - resolution: {integrity: sha1-jZ0snt7qhGDH81AzqIhnlEk00eI=} + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} unbzip2-stream@1.4.3: - resolution: {integrity: sha1-sNoExDcTEd93HNwhXofyEwmRrOc=} + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} underscore@1.13.6: - resolution: {integrity: sha1-BHhqH1idxsCfdh/F9FuJ6TUTZEE=} + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} underscore@1.13.8: - resolution: {integrity: sha1-qTohGGwEnb8OhHSW26cre9jB6Ss=} + resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} undici-types@5.26.5: - resolution: {integrity: sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=} + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} undici-types@6.21.0: - resolution: {integrity: sha1-aR0ArzkJvpOn+qE75hs6W1DvEss=} + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici-types@7.16.0: - resolution: {integrity: sha1-/8zf82rqSITL/OmnUKBYAiT1ikY=} + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici-types@7.24.4: - resolution: {integrity: sha1-ZC2sDLZaKuOJ+MIo/aknMIxlVDs=} + resolution: {integrity: sha512-cRaY9PagdEZoRmcwzk3tUV3SVGrVQkR6bcSilav/A0vXsfpW4Lvd0BvgRMwTEDTLLGN+QdyBTG+nnvTgJhdt6w==} undici-types@7.24.6: - resolution: {integrity: sha1-YSdbSF1/1OnSacfPBOwoc8nMD5E=} + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} undici@6.27.0: - resolution: {integrity: sha1-Qfnkj3xaQNJzdsqurYyan8e8qcQ=} + resolution: {integrity: sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==} engines: {node: '>=18.17'} undici@7.28.0: - resolution: {integrity: sha1-l9ZFZBmLKFvCgfDo4pWX49Ef5+w=} + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} engines: {node: '>=20.18.1'} unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha1-271bVLow8ofiqNWiSdpsDO82lFk=} + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} unicorn-magic@0.1.0: - resolution: {integrity: sha1-G7mlHII6r51zqL/NPRoj3elLDOQ=} + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} unicorn-magic@0.3.0: - resolution: {integrity: sha1-Tv1FyFpp4N1XbSVTL7+iKqXIoQQ=} + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} unified@11.0.5: - resolution: {integrity: sha1-9mZ3YQpcCp7pDKsrjU1mA3Am2eE=} + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} unist-util-is@5.2.1: - resolution: {integrity: sha1-t0lg4UXBjctiJrxXkzWX9Uht6uk=} + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} unist-util-is@6.0.0: - resolution: {integrity: sha1-t3WVZIav8Qep3tlx2ZbBczdL5CQ=} + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} unist-util-remove-position@5.0.0: - resolution: {integrity: sha1-/qaKJWWECclGBAi8a0mRuWW1IWM=} + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} unist-util-stringify-position@4.0.0: - resolution: {integrity: sha1-RJxuIaiA4IVb9aq63rOnQDFKusI=} + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} unist-util-visit-parents@5.1.3: - resolution: {integrity: sha1-tFIIEbDKNChWM3hQRd96jWd2z+s=} + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} unist-util-visit-parents@6.0.1: - resolution: {integrity: sha1-TV+FdVw7jw3GniHspdbYLSIWKBU=} + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@4.1.2: - resolution: {integrity: sha1-ElpC0euHYoNxWjy1zOqlMYKMcuI=} + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} unist-util-visit@5.0.0: - resolution: {integrity: sha1-p94fMfcv/TUZ6nGBTMz1/WqSF9Y=} + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} universalify@0.1.2: - resolution: {integrity: sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=} + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} universalify@0.2.0: - resolution: {integrity: sha1-ZFF2BWb6hXU0dFqx3elS0bF2G+A=} + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} universalify@2.0.1: - resolution: {integrity: sha1-Fo78IYCWTmOG0GHglN9hr+I5sY0=} + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} unpipe@1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} untildify@4.0.0: - resolution: {integrity: sha1-K8lHuVNlJIfkYAlJ+wkeOujNkZs=} + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} update-browserslist-db@1.2.3: - resolution: {integrity: sha1-ZNdttYcTE2rL60xJEUNmzGzC6A0=} + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: {integrity: sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=} + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} url-join@4.0.1: - resolution: {integrity: sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec=} + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} url-parse@1.5.10: - resolution: {integrity: sha1-nTwvc2wddd070r5QfcwRHx4uqcE=} + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} url-template@2.0.8: - resolution: {integrity: sha1-/FZaPMy/93MMd19WQflVV5FDnyE=} + resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} user-home@2.0.0: - resolution: {integrity: sha1-nHC/2Babwdy/SGBODwS4tJzenp8=} + resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} engines: {node: '>=0.10.0'} utf8-byte-length@1.0.4: - resolution: {integrity: sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=} + resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} util-deprecate@1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} utila@0.4.0: - resolution: {integrity: sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=} + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} utils-merge@1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} uuid@14.0.1: - resolution: {integrity: sha1-ill1s+A4kCv9FpoQtSAvXsDPP68=} + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} hasBin: true uuid@8.3.2: - resolution: {integrity: sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=} + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@9.0.1: - resolution: {integrity: sha1-4YjUyIU8xyIiA5LEJM1jfzIpPzA=} + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha1-Yzbo1xllyz01obu3hoRFp8BSZL8=} + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} v8-to-istanbul@9.1.3: - resolution: {integrity: sha1-6kVmBBAc0YAFrCyuPN0aoFimMGs=} + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} engines: {node: '>=10.12.0'} validate-npm-package-license@3.0.4: - resolution: {integrity: sha1-/JH2uce6FchX9MssXe/uw51PQQo=} + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} validate-npm-package-name@6.0.0: - resolution: {integrity: sha1-Ot2WbIU8/jbg6OanYu3XKubx1qw=} + resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} engines: {node: ^18.17.0 || >=20.5.0} validator@13.15.23: - resolution: {integrity: sha1-Wah0+E5FlFiONAmrHtvmTpbQxi0=} + resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} engines: {node: '>= 0.10'} vary@1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} verror@1.10.1: - resolution: {integrity: sha1-S/Ce7M9FY7EJ7Us9RYOAyXKwzes=} + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} vfile-message@4.0.2: - resolution: {integrity: sha1-yIPJ9nfHLBZjYv1jXyH8Flp9EYE=} + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@6.0.3: - resolution: {integrity: sha1-NlKrHEllMYUr9VprrFevmB68OKs=} + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} vite@5.4.21: - resolution: {integrity: sha1-hKT3xdhgsHFnbTm6UTwNWY/ccCc=} + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17501,7 +17519,7 @@ packages: optional: true vite@6.4.3: - resolution: {integrity: sha1-haFk23znBvKndoEu+is0DxchhY4=} + resolution: {integrity: sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -17541,36 +17559,36 @@ packages: optional: true void-elements@3.1.0: - resolution: {integrity: sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=} + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} vscode-jsonrpc@8.2.0: - resolution: {integrity: sha1-9D36NftR52PRfNlNzKDJRY81q/k=} + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'} vscode-jsonrpc@8.2.1: - resolution: {integrity: sha1-oyLMDx2X95T/2cTNKomKC94JfzQ=} + resolution: {integrity: sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==} engines: {node: '>=14.0.0'} vscode-languageclient@9.0.1: - resolution: {integrity: sha1-zf4gJncmyNTbg53B6dGBbhKW6FQ=} + resolution: {integrity: sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==} engines: {vscode: ^1.82.0} vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha1-hkqLjzkINVcvThO9n4MT0OOsS+o=} + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} vscode-languageserver-textdocument@1.0.12: - resolution: {integrity: sha1-RX7gQnGrOJmKCTxowjQvU/bkpjE=} + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} vscode-languageserver-types@3.17.5: - resolution: {integrity: sha1-MnNnbwzy6rQLP0TQhay7fwijnYo=} + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} vscode-languageserver@9.0.1: - resolution: {integrity: sha1-UArvggl+uU35DQCGeLC2tfR0AVs=} + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} hasBin: true vue@3.5.16: - resolution: {integrity: sha1-8M3ojCaINU8A/y136ylcJkQPjHo=} + resolution: {integrity: sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -17578,57 +17596,57 @@ packages: optional: true w3c-keyname@2.2.8: - resolution: {integrity: sha1-exfIxog9TouGrIq6edOeiA+IacU=} + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} w3c-xmlserializer@4.0.0: - resolution: {integrity: sha1-rr3ISSDYBiIpNuPNzkCOMkiKMHM=} + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} w3c-xmlserializer@5.0.0: - resolution: {integrity: sha1-+SW6JoVRWFlNkHMTzt0UdsWWf2w=} + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} walk-up-path@4.0.0: - resolution: {integrity: sha1-WQZm3PgUbi1yMYFk8fKsbvUdQZg=} + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} walkdir@0.4.1: - resolution: {integrity: sha1-3BGfg/RCHfUuMGHlFCKKLbIK+jk=} + resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} engines: {node: '>=6.0.0'} walker@1.0.8: - resolution: {integrity: sha1-vUmNtHev5XPcBBhfAR06uKjXZT8=} + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} watchpack@2.5.1: - resolution: {integrity: sha1-3Ti2AfZp4Mv1Z8uALnXOrYLN4QI=} + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} wbuf@1.7.3: - resolution: {integrity: sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=} + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} wcwidth@1.0.1: - resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha1-KJhIa3T1FWCV5HPv6Ync8YUEejg=} + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} webdriver-bidi-protocol@0.4.1: - resolution: {integrity: sha1-1BHnuOFYQI2DuxZrC08QVPo/B34=} + resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} webidl-conversions@3.0.1: - resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} webidl-conversions@7.0.0: - resolution: {integrity: sha1-JWtOGIK+feu/AdBfCqIDl3jqCAo=} + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} webidl-conversions@8.0.1: - resolution: {integrity: sha1-Blflcf5vBvyxXKUO0f28tJXNFoY=} + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} webpack-cli@5.1.4: - resolution: {integrity: sha1-yOBGun6q5JEdfnHislt3b8w1dZs=} + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} hasBin: true peerDependencies: @@ -17645,7 +17663,7 @@ packages: optional: true webpack-dev-middleware@7.4.5: - resolution: {integrity: sha1-1OhyCqKcsDvBWAhKlO20WU47esA=} + resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.0.0 @@ -17654,7 +17672,7 @@ packages: optional: true webpack-dev-server@5.2.5: - resolution: {integrity: sha1-ZI/Oqsalc2sJNeXB5V1qodBiYRk=} + resolution: {integrity: sha512-4wZtCquSuv9CKX8oybo+mqxtxZqWz47uM1Ch94lxowBztOhWCbhqvRbfC/mODOwxgV2brY+JGZpHq58/SuVFYg==} engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: @@ -17667,15 +17685,15 @@ packages: optional: true webpack-merge@5.10.0: - resolution: {integrity: sha1-o61ddzJB6caCgDq/Yo1M1iuKQXc=} + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} webpack-sources@3.3.3: - resolution: {integrity: sha1-1L9/mQlnXXoHD/FNDvKk88mCxyM=} + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} webpack@5.105.0: - resolution: {integrity: sha1-OLXmxduMvoHeu9FuCJM1raBeojo=} + resolution: {integrity: sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -17685,152 +17703,152 @@ packages: optional: true websocket-driver@0.7.5: - resolution: {integrity: sha1-Vp0idkqyHy3iCvDnS0EeiuWg+kY=} + resolution: {integrity: sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==} engines: {node: '>=0.8.0'} websocket-extensions@0.1.4: - resolution: {integrity: sha1-f4RzvIOd/YdgituV1+sHUhFXikI=} + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} webvtt-parser@2.2.0: - resolution: {integrity: sha1-eQKfuQZ+3LIQgg+mEBw32bi3jZ8=} + resolution: {integrity: sha512-FzmaED+jZyt8SCJPTKbSsimrrnQU8ELlViE1wuF3x1pgiQUM8Llj5XWj2j/s6Tlk71ucPfGSMFqZWBtKn/0uEA==} whatwg-encoding@2.0.0: - resolution: {integrity: sha1-52NfWX/YcCCFhiaAWicp+naYrFM=} + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-encoding@3.1.1: - resolution: {integrity: sha1-0PTvdpkF1CbhaI8+NDgambYLduU=} + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@3.0.0: - resolution: {integrity: sha1-X6GnYjhn/xr2yj3HKta4pCCL66c=} + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} whatwg-mimetype@4.0.0: - resolution: {integrity: sha1-vBv5SphdxQOI1UqSWKxAXDyi/Ao=} + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} whatwg-mimetype@5.0.0: - resolution: {integrity: sha1-2CMoldvVJ86u5079QWIAj7ioz0g=} + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} whatwg-url@11.0.0: - resolution: {integrity: sha1-CoSe67X68hGbkBu3b9eVwoSNQBg=} + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} whatwg-url@13.0.0: - resolution: {integrity: sha1-t7U2rKSDBjlKNORL2o6Z8zJBD48=} + resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} engines: {node: '>=16'} whatwg-url@14.2.0: - resolution: {integrity: sha1-TuAtXXJRVdrgBPaulcc+fvXZVmM=} + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} whatwg-url@16.0.1: - resolution: {integrity: sha1-BH9/S9Nu92txmMFy0bHOvGb3ZN0=} + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} whatwg-url@5.0.0: - resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} which-boxed-primitive@1.1.1: - resolution: {integrity: sha1-127Cfff6Fl8Y1YCDdKX+I8KbF24=} + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} which-builtin-type@1.2.1: - resolution: {integrity: sha1-iRg9obSQerCJprAgKcxdjWV0Jw4=} + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} engines: {node: '>= 0.4'} which-collection@1.0.2: - resolution: {integrity: sha1-Yn73YkOSChB+fOjpYZHevksWwqA=} + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} which-typed-array@1.1.19: - resolution: {integrity: sha1-3wOELocLa4jhF1JKSzZLb8aJ+VY=} + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} which@1.3.1: - resolution: {integrity: sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=} + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true which@2.0.2: - resolution: {integrity: sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=} + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true which@5.0.0: - resolution: {integrity: sha1-2T8tk/eYNNQ2PH0MI+ANB8RmyNY=} + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true which@6.0.1: - resolution: {integrity: sha1-AhZCRDoZj7k7eEpWBnIcsYz8v84=} + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true widest-line@3.1.0: - resolution: {integrity: sha1-gpIzO79my0X/DeFgOxNreuFJbso=} + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} widest-line@5.0.0: - resolution: {integrity: sha1-t0gmoeSAeDNF8M2QYbSXU8nacNA=} + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} wildcard@2.0.1: - resolution: {integrity: sha1-WrENAkhxmJVINrY0n3T/+WHhD2c=} + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} winreg@1.2.5: - resolution: {integrity: sha1-tlA4PokniVJJS10RO6BJpaT6ltg=} + resolution: {integrity: sha512-uf7tHf+tw0B1y+x+mKTLHkykBgK2KMs3g+KlzmyMbLvICSHQyB/xOFjTT8qZ3oeTFyU7Bbj4FzXitGG6jvKhYw==} with@7.0.2: - resolution: {integrity: sha1-zO461ULSVTinp6gKrSErmChJW6w=} + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} engines: {node: '>= 10.0.0'} word-wrap@1.2.5: - resolution: {integrity: sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=} + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} wordwrap@1.0.0: - resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=} + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} wordwrapjs@5.1.0: - resolution: {integrity: sha1-TE0gRG3MZwsU+hFe9Pj9mUevKzo=} + resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} workerpool@6.5.1: - resolution: {integrity: sha1-Bg9zs50Mr5fG22TaAEzQG0wJlUQ=} + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} workerpool@9.3.4: - resolution: {integrity: sha1-9skjlbIUGv144qiJ6AyzOP6fykE=} + resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} wrap-ansi@6.2.0: - resolution: {integrity: sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=} + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} wrap-ansi@7.0.0: - resolution: {integrity: sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=} + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} wrap-ansi@8.1.0: - resolution: {integrity: sha1-VtwiNo7lcPrOG0mBmXXZuaXq0hQ=} + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} wrap-ansi@9.0.0: - resolution: {integrity: sha1-Gj3Itw2F7rg5jd+x5KAs0Ybliz4=} + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} wrappy@1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@4.0.2: - resolution: {integrity: sha1-qd8Brlt3hYoCf9LoB2juQzVV/P0=} + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} ws@7.5.11: - resolution: {integrity: sha1-lGDa8YEruBpCPFuerHRpQahjEPo=} + resolution: {integrity: sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -17842,7 +17860,7 @@ packages: optional: true ws@8.21.0: - resolution: {integrity: sha1-AS5BP8B0KZRRIbDBUxWMQ0MIaVE=} + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -17854,59 +17872,59 @@ packages: optional: true wsl-utils@0.1.0: - resolution: {integrity: sha1-h4PU32cdTVA2W+LuTHGRegVXuqs=} + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} xml-name-validator@4.0.0: - resolution: {integrity: sha1-eaAG4uYxSahgDxVDDwpHJdFSSDU=} + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} xml-name-validator@5.0.0: - resolution: {integrity: sha1-gr6blX96/az5YeWYDxvyJ8C/dnM=} + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} xml-naming@0.1.0: - resolution: {integrity: sha1-ircQbFuNI8qi+rrByt8XE2N5+9g=} + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} engines: {node: '>=16.0.0'} xml2js@0.4.23: - resolution: {integrity: sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=} + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} engines: {node: '>=4.0.0'} xml2js@0.5.0: - resolution: {integrity: sha1-2UQGMfuy7YACA/rRBvJyT2LEk7c=} + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} xml2js@0.6.2: - resolution: {integrity: sha1-3QtjAIOqCcFh4lpNCQHisqkptJk=} + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} xmlbuilder2@4.0.3: - resolution: {integrity: sha1-kWYPptMPGdcW+LEZTFZ2htRALGM=} + resolution: {integrity: sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==} engines: {node: '>=20.0'} xmlbuilder@11.0.1: - resolution: {integrity: sha1-vpuuHIoEbnazESdyY0fQrXACvrM=} + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} xmlbuilder@15.1.1: - resolution: {integrity: sha1-nc3OSe6mbY0QtCyulKecPI0MLsU=} + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} xmlchars@2.2.0: - resolution: {integrity: sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=} + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} xss@1.0.15: - resolution: {integrity: sha1-lqDhOIbwZhBjAotBDtGxhnD05Zo=} + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} engines: {node: '>= 0.10.0'} hasBin: true xtend@4.0.2: - resolution: {integrity: sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=} + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} y-prosemirror@1.3.5: - resolution: {integrity: sha1-tz3+4G+ck2hDQGNbKahPnjoAHJ0=} + resolution: {integrity: sha512-qW8fXCb72L6H2BWiuhZdSJ6hiShHUog08gh6KvBqLjhK6Et9DxfDnMDvx6yyO3iCdnEhDfUJviRvaMAAXb0dNg==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} peerDependencies: prosemirror-model: ^1.7.1 @@ -17916,121 +17934,121 @@ packages: yjs: ^13.5.38 y-protocols@1.0.6: - resolution: {integrity: sha1-ZtrYqVdSYjRD6OKMDpI2gtLA1JU=} + resolution: {integrity: sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} peerDependencies: yjs: ^13.0.0 y-websocket@3.0.0: - resolution: {integrity: sha1-6GvbKcwKU8uNbjPsjSRhSnI4Mq8=} + resolution: {integrity: sha512-mUHy7AzkOZ834T/7piqtlA8Yk6AchqKqcrCXjKW8J1w2lPtRDjz8W5/CvXz9higKAHgKRKqpI3T33YkRFLkPtg==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} peerDependencies: yjs: ^13.5.6 y18n@5.0.8: - resolution: {integrity: sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=} + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} yallist@3.1.1: - resolution: {integrity: sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=} + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: - resolution: {integrity: sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=} + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} yallist@5.0.0: - resolution: {integrity: sha1-AOLeRDY57Q14/YfeDSdGn7z/tTM=} + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} yaml@2.8.3: - resolution: {integrity: sha1-oNa9Lvs90DxZNwIjcBg05gQJvX0=} + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true yaml@2.9.0: - resolution: {integrity: sha1-eCdK/ZNZih391hMN9qVm3vy/mqQ=} + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true yargs-parser@20.2.9: - resolution: {integrity: sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=} + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} yargs-parser@21.1.1: - resolution: {integrity: sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU=} + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} yargs-unparser@2.0.0: - resolution: {integrity: sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=} + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} yargs@16.2.0: - resolution: {integrity: sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=} + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} yargs@17.7.2: - resolution: {integrity: sha1-mR3zmspnWhkrgW4eA2P5110qomk=} + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} yauzl@2.10.0: - resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} yazl@2.5.1: - resolution: {integrity: sha1-o9ZdPdZZpbCTeFDoYJ8i//orXDU=} + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} yjs@13.6.27: - resolution: {integrity: sha1-iJm+kp1X2gWgqhEtBEpcIEOTq3s=} + resolution: {integrity: sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} ylru@1.4.0: - resolution: {integrity: sha1-DPCqV+nCT4osveDMHKLJWSrE4PY=} + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} engines: {node: '>= 4.0.0'} yn@3.1.1: - resolution: {integrity: sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A=} + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} yocto-queue@0.1.0: - resolution: {integrity: sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=} + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} yocto-queue@1.1.1: - resolution: {integrity: sha1-/vZc46yfijLOrFpjT3ThflsjIRA=} + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} yoctocolors-cjs@2.1.2: - resolution: {integrity: sha1-9LkFqECjdQaBOnrKoo/r6XdnokI=} + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} yoga-wasm-web@0.3.3: - resolution: {integrity: sha1-646fyxjl5lGZRzLxmiIMuIXZMro=} + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} zip-stream@2.1.3: - resolution: {integrity: sha1-JsxL25NkGoWQ3QcRLh93rxdYhls=} + resolution: {integrity: sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==} engines: {node: '>= 6'} zip-stream@6.0.1: - resolution: {integrity: sha1-4UG5MO1gzK9df6nIJg4NF0iiu/s=} + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} zod-to-json-schema@3.25.1: - resolution: {integrity: sha1-fySWIQGkOd2t4r8a6rPDv+x9hLo=} + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: zod: ^3.25 || ^4 zod@3.23.8: - resolution: {integrity: sha1-43uVe11SB5dp+4CXCZtZLw70Bn0=} + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} zod@3.25.76: - resolution: {integrity: sha1-JoQcP2/SKmonYOfMtxkXl2hHHjQ=} + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zod@4.1.13: - resolution: {integrity: sha1-k2maiv6Te6lrrbsM6L5gM8CktrE=} + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} zod@4.3.6: - resolution: {integrity: sha1-icVuCqfSsFEH2JRBIicIeIWrESo=} + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} zwitch@2.0.4: - resolution: {integrity: sha1-yCfUsKy3b8PmhaTG7CkC1RBw6dc=} + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: @@ -20562,10 +20580,10 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0(supports-color@8.1.1) + '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -20576,7 +20594,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20597,10 +20615,10 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0(supports-color@8.1.1) + '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -20611,7 +20629,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20632,10 +20650,10 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0(supports-color@8.1.1) + '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -20646,7 +20664,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20670,7 +20688,7 @@ snapshots: '@jest/core@29.7.0(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0(supports-color@8.1.1) + '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -20738,7 +20756,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/reporters@29.7.0(supports-color@8.1.1)': + '@jest/reporters@29.7.0': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 @@ -20755,7 +20773,7 @@ snapshots: istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1(supports-color@8.1.1) + istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.6 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -22225,18 +22243,18 @@ snapshots: dependencies: '@secretlint/types': 9.3.2 - '@secretlint/config-loader@9.3.2(supports-color@8.1.1)': + '@secretlint/config-loader@9.3.2': dependencies: '@secretlint/profiler': 9.3.2 '@secretlint/resolver': 9.3.2 '@secretlint/types': 9.3.2 ajv: 8.20.0 debug: 4.4.3(supports-color@8.1.1) - rc-config-loader: 4.1.3(supports-color@8.1.1) + rc-config-loader: 4.1.3 transitivePeerDependencies: - supports-color - '@secretlint/core@9.3.2(supports-color@8.1.1)': + '@secretlint/core@9.3.2': dependencies: '@secretlint/profiler': 9.3.2 '@secretlint/types': 9.3.2 @@ -22245,11 +22263,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@secretlint/formatter@9.3.2(supports-color@8.1.1)': + '@secretlint/formatter@9.3.2': dependencies: '@secretlint/resolver': 9.3.2 '@secretlint/types': 9.3.2 - '@textlint/linter-formatter': 14.7.1(supports-color@8.1.1) + '@textlint/linter-formatter': 14.7.1 '@textlint/module-interop': 14.7.1 '@textlint/types': 14.7.1 chalk: 4.1.2 @@ -22261,11 +22279,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@secretlint/node@9.3.2(supports-color@8.1.1)': + '@secretlint/node@9.3.2': dependencies: - '@secretlint/config-loader': 9.3.2(supports-color@8.1.1) - '@secretlint/core': 9.3.2(supports-color@8.1.1) - '@secretlint/formatter': 9.3.2(supports-color@8.1.1) + '@secretlint/config-loader': 9.3.2 + '@secretlint/core': 9.3.2 + '@secretlint/formatter': 9.3.2 '@secretlint/profiler': 9.3.2 '@secretlint/source-creator': 9.3.2 '@secretlint/types': 9.3.2 @@ -22664,7 +22682,7 @@ snapshots: '@textlint/ast-node-types@14.7.1': {} - '@textlint/linter-formatter@14.7.1(supports-color@8.1.1)': + '@textlint/linter-formatter@14.7.1': dependencies: '@azu/format-text': 1.0.2 '@azu/style-format': 1.0.1 @@ -23591,7 +23609,7 @@ snapshots: '@vscode/vsce@3.4.0(supports-color@8.1.1)': dependencies: '@azure/identity': 4.13.1 - '@secretlint/node': 9.3.2(supports-color@8.1.1) + '@secretlint/node': 9.3.2 '@secretlint/secretlint-formatter-sarif': 9.3.2 '@secretlint/secretlint-rule-no-dotenv': 9.3.2 '@secretlint/secretlint-rule-preset-recommend': 9.3.2 @@ -23769,7 +23787,7 @@ snapshots: internal-ip: 6.2.0 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.38 + portfinder: 1.0.38(supports-color@8.1.1) transitivePeerDependencies: - bufferutil - supports-color @@ -23881,7 +23899,7 @@ snapshots: diff: 5.2.2 globby: 11.1.0 nanocolors: 0.2.13 - portfinder: 1.0.38 + portfinder: 1.0.38(supports-color@8.1.1) source-map: 0.7.4 transitivePeerDependencies: - bare-buffer @@ -27895,7 +27913,7 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@4.0.1(supports-color@8.1.1): + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.0 @@ -28007,7 +28025,7 @@ snapshots: jest-cli@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 @@ -28026,7 +28044,7 @@ snapshots: jest-cli@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 @@ -28558,24 +28576,24 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.19.19)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)): + jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -28584,7 +28602,7 @@ snapshots: jest@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 jest-cli: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) @@ -30463,7 +30481,7 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - portfinder@1.0.38: + portfinder@1.0.38(supports-color@8.1.1): dependencies: async: 3.2.6 debug: 4.4.3(supports-color@8.1.1) @@ -30996,7 +31014,7 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - rc-config-loader@4.1.3(supports-color@8.1.1): + rc-config-loader@4.1.3: dependencies: debug: 4.4.3(supports-color@8.1.1) js-yaml: 4.3.0 @@ -31447,8 +31465,8 @@ snapshots: secretlint@9.3.2(supports-color@8.1.1): dependencies: '@secretlint/config-creator': 9.3.2 - '@secretlint/formatter': 9.3.2(supports-color@8.1.1) - '@secretlint/node': 9.3.2(supports-color@8.1.1) + '@secretlint/formatter': 9.3.2 + '@secretlint/node': 9.3.2 '@secretlint/profiler': 9.3.2 debug: 4.4.3(supports-color@8.1.1) globby: 14.1.0 From 83b69d2fa9165a699d1474ea731cd18ca7630778 Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Sat, 18 Jul 2026 01:01:24 +0000 Subject: [PATCH 33/36] docs: regenerate README.AUTOGEN.md, command reference, and action browser --- ts/packages/agents/list/README.AUTOGEN.md | 90 +++++++++++++------ ts/packages/chat-ui/README.AUTOGEN.md | 20 ++--- ts/packages/commandExecutor/README.AUTOGEN.md | 6 +- .../dispatcher/dispatcher/README.AUTOGEN.md | 16 ++-- ts/packages/shell/README.AUTOGEN.md | 8 +- ts/packages/vscode-shell/README.AUTOGEN.md | 8 +- 6 files changed, 90 insertions(+), 58 deletions(-) diff --git a/ts/packages/agents/list/README.AUTOGEN.md b/ts/packages/agents/list/README.AUTOGEN.md index fa36e209c..e008aafcd 100644 --- a/ts/packages/agents/list/README.AUTOGEN.md +++ b/ts/packages/agents/list/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # list-agent — AI-generated documentation @@ -12,39 +12,45 @@ ## Overview -The `list-agent` package is a TypeAgent application agent designed to manage lists. It provides a set of actions for creating, modifying, and retrieving lists, making it suitable for use cases such as to-do lists, shopping lists, or other item collections. This agent is part of the TypeAgent monorepo and works in conjunction with other components to handle user requests related to list management. +The `list-agent` package is a TypeAgent application agent designed to manage lists. It provides a set of actions for creating, modifying, and retrieving lists, making it suitable for use cases such as to-do lists, shopping lists, or other item collections. This agent is part of the TypeAgent monorepo and integrates with other components to handle user requests related to list management. ## What it does -The `list-agent` supports six primary actions for managing lists: +The `list-agent` supports a range of actions for managing lists, which are defined in its schema and implemented in its action handler. These actions include: - **`addItems`**: Adds one or more items to a specified list. If the list does not exist, it will be created. This action requires the `items` (array of strings) and `listName` (string) parameters. - **`removeItems`**: Removes one or more items from a specified list. This action requires the `items` (array of strings) and `listName` (string) parameters. - **`createList`**: Creates a new list with the specified name. This action requires the `listName` (string) parameter. - **`getList`**: Retrieves the contents of a specified list. This action is useful for queries like "What's on my grocery list?" or "What are the contents of my to-do list?" It requires the `listName` (string) parameter. - **`clearList`**: Removes all items from a specified list. This action requires the `listName` (string) parameter. +- **`listLists`**: Lists all existing lists. This action is useful for queries like "What lists do I have?" or "Show me my lists." - **`startEditList`**: Initiates the editing of a specified list. This action requires the `listName` (string) parameter. These actions are defined in the [listSchema.ts](./src/listSchema.ts) file and implemented in the [listActionHandler.ts](./src/listActionHandler.ts) file. The agent uses schema definitions and grammar rules to interpret user input and map it to the appropriate actions. ## Setup -The `list-agent` package does not require any special setup beyond installing its dependencies. To get started, navigate to the package directory and run: +The `list-agent` package does not require any special setup beyond installing its dependencies. To get started: -```sh -pnpm install -``` +1. Navigate to the package directory: + ```sh + cd ts/packages/agents/list/ + ``` +2. Install the required dependencies: + ```sh + pnpm install + ``` For additional details, refer to the hand-written README. ## Key Files -The `list-agent` package is organized into several key files that define its behavior and functionality: +The `list-agent` package is structured around several key files that define its behavior and functionality: -- **[listManifest.json](./src/listManifest.json)**: This file contains metadata about the agent, including its description, emoji representation, and references to the schema and grammar files. -- **[listSchema.ts](./src/listSchema.ts)**: This file defines the action types and their parameters. It serves as the core of the agent's functionality, specifying the actions the agent can perform and the data they require. -- **[listSchema.agr](./src/listSchema.agr)**: This file contains grammar rules that map user utterances to actions. These rules help the agent interpret natural language input and determine the appropriate action to execute. -- **[listActionHandler.ts](./src/listActionHandler.ts)**: This file implements the logic for handling the actions defined in the schema. It contains the code that executes the behavior of each action. +- **[listManifest.json](./src/listManifest.json)**: Contains metadata about the agent, including its description, emoji representation, and references to the schema and grammar files. +- **[listSchema.ts](./src/listSchema.ts)**: Defines the action types and their parameters. This file is the core of the agent's functionality, specifying the actions the agent can perform and the data they require. +- **[listSchema.agr](./src/listSchema.agr)**: Contains grammar rules that map user utterances to actions. These rules help the agent interpret natural language input and determine the appropriate action to execute. +- **[listActionHandler.ts](./src/listActionHandler.ts)**: Implements the logic for handling the actions defined in the schema. This file contains the code that executes the behavior of each action. ### File Responsibilities @@ -57,21 +63,46 @@ The `list-agent` package is organized into several key files that define its beh To extend the functionality of the `list-agent` package, follow these steps: -1. **Add a new action**: - - - Define the new action type in [listSchema.ts](./src/listSchema.ts). Specify the action name and its required parameters. - - Add grammar rules for the new action in [listSchema.agr](./src/listSchema.agr). These rules should map user input to the new action. - - Implement the action's logic in [listActionHandler.ts](./src/listActionHandler.ts). This is where you define how the action will be executed. - -2. **Modify existing actions**: - - - Update the action type definitions in [listSchema.ts](./src/listSchema.ts) to reflect the changes. - - Adjust the corresponding grammar rules in [listSchema.agr](./src/listSchema.agr) to ensure they align with the updated action. - - Modify the implementation in [listActionHandler.ts](./src/listActionHandler.ts) to handle the updated behavior. - -3. **Test your changes**: - - Add or update tests to cover the new or modified functionality. - - Run the test suite to ensure that your changes work as expected and do not introduce regressions. +### 1. Add a New Action + +- **Define the action**: Add the new action type and its parameters in [listSchema.ts](./src/listSchema.ts). For example: + ```ts + export type NewAction = { + actionName: "newAction"; + parameters: { + param1: string; + param2: number; + }; + }; + ``` +- **Add grammar rules**: Define grammar rules for the new action in [listSchema.agr](./src/listSchema.agr). These rules should map user input to the new action. For example: + ```text + = do something with $(param1:wildcard) and $(param2:number) -> { + actionName: "newAction", + parameters: { + param1, + param2 + } + } + ``` +- **Implement the action**: Add the logic for the new action in [listActionHandler.ts](./src/listActionHandler.ts). For example: + ```ts + async function handleNewAction(action: NewAction, context: ActionContext) { + // Your implementation here + return createActionResultFromTextDisplay("Action executed successfully."); + } + ``` + +### 2. Modify Existing Actions + +- Update the action type definitions in [listSchema.ts](./src/listSchema.ts) to reflect the changes. +- Adjust the corresponding grammar rules in [listSchema.agr](./src/listSchema.agr) to ensure they align with the updated action. +- Modify the implementation in [listActionHandler.ts](./src/listActionHandler.ts) to handle the updated behavior. + +### 3. Test Your Changes + +- Add or update tests to cover the new or modified functionality. +- Run the test suite to ensure that your changes work as expected and do not introduce regressions. By following these steps, you can customize the `list-agent` package to support additional use cases or modify its existing behavior to better suit your needs. @@ -111,7 +142,7 @@ External: _None at runtime._ ### Actions -_6 actions implemented by this agent, parsed deterministically from `./src/listSchema.ts`. Sample utterances and parameter shapes are illustrative; consult the schema for the full signature._ +_7 actions implemented by this agent, parsed deterministically from `./src/listSchema.ts`. Sample utterances and parameter shapes are illustrative; consult the schema for the full signature._ | User says | Action | | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | @@ -120,10 +151,11 @@ _6 actions implemented by this agent, parsed deterministically from `./src/listS | _(no sample)_ | `createList` → `{ "listName": "…" }` | | _use this action to show the user what's on the list, for example, "What's on my grocery list?" or "what are the contents of my to do list?"_ | `getList` → `{ "listName": "…" }` | | _(no sample)_ | `clearList` → `{ "listName": "…" }` | +| _use this action to show the user which lists exist, for example, "what lists are there?", "show me my lists", "what lists do I have?"_ | `listLists` | | _(no sample)_ | `startEditList` → `{ "listName": "…" }` | --- -_Auto-generated against commit `ee4eba45bcb87911335cb938a0ced6a001aa3882` on `2026-07-17T22:05:48.260Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter list-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter list-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/chat-ui/README.AUTOGEN.md b/ts/packages/chat-ui/README.AUTOGEN.md index 0150c895a..db8109bbf 100644 --- a/ts/packages/chat-ui/README.AUTOGEN.md +++ b/ts/packages/chat-ui/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # chat-ui — AI-generated documentation @@ -12,16 +12,16 @@ ## Overview -The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to work across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package supports user and agent interactions, streaming updates, chat history management, command completions, feedback collection, and connection status indicators. Its platform-agnostic design ensures consistent functionality and appearance across different environments. +The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to deliver a consistent and interactive chat experience across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package supports user and agent interactions, streaming updates, chat history management, command completions, feedback collection, and connection status indicators. Its lightweight, DOM-based implementation ensures compatibility with various host environments. ## What it does -The `chat-ui` package offers a range of features to support interactive chat experiences: +The `chat-ui` package offers a comprehensive set of features for building and managing chat interfaces: -- **ChatPanel**: The primary component for rendering the chat interface. It supports: +- **ChatPanel**: The core component for rendering the chat interface. It provides methods for: - - Adding user and agent messages using `addAgentMessage`. - - Updating display metadata with `setDisplayInfo`. + - Adding user and agent messages with `addAgentMessage`. + - Updating display metadata using `setDisplayInfo`. - Replaying historical chat entries via `replayHistory`. - Streaming updates for dynamic content display. @@ -29,13 +29,13 @@ The `chat-ui` package offers a range of features to support interactive chat exp - **PartialCompletion**: Integrates with the `@typeagent/completion-ui` package to handle command completions, including input updates, acceptance, and dismissal. -- **Connection Status Management**: Provides a shared model and UI for displaying the connection status between the chat client and the server. It includes reconnect options and error handling. +- **Connection Status Management**: Implements a shared model and UI for displaying the connection status between the chat client and the server. It includes reconnect options and error handling. - **PlatformAdapter**: Abstracts platform-specific behaviors, such as handling link clicks and settings, to ensure compatibility across different environments. -- **Shared Styles**: Includes a CSS file (`styles/chat.css`) to ensure a consistent appearance for the chat UI across all host applications. +- **Shared Styles**: Provides a CSS file (`styles/chat.css`) to ensure a consistent appearance for the chat UI across all host applications. -The package is used by several TypeAgent components, such as the VS Code shell, the browser extension, and the Visual Studio extension webview. +The package is utilized by several TypeAgent components, including the VS Code shell, the browser extension, and the Visual Studio extension webview. ## Setup @@ -119,6 +119,6 @@ External: `ansi_up`, `dompurify`, `markdown-it` --- -_Auto-generated against commit `5cbcf613f047f08749d0451296eb1cdc610ae414` on `2026-07-17T18:24:18.404Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ diff --git a/ts/packages/commandExecutor/README.AUTOGEN.md b/ts/packages/commandExecutor/README.AUTOGEN.md index 4a7c2981d..ff50388ff 100644 --- a/ts/packages/commandExecutor/README.AUTOGEN.md +++ b/ts/packages/commandExecutor/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # command-executor-mcp — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The `command-executor-mcp` package is an MCP (Model Context Protocol) server designed to execute user commands such as playing music, managing lists, and working with calendars. It acts as an intermediary between MCP clients (e.g., Claude Code) and the TypeAgent system, translating natural language commands into structured actions that the TypeAgent dispatcher can process. +The `command-executor-mcp` package is an MCP (Model Context Protocol) server that facilitates the execution of user commands such as playing music, managing lists, and working with calendars. It acts as a bridge between MCP clients (e.g., Claude Code) and the TypeAgent system, translating natural language commands into structured actions that the TypeAgent dispatcher can process. ## What it does @@ -142,6 +142,6 @@ _3 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `5cbcf613f047f08749d0451296eb1cdc610ae414` on `2026-07-17T18:24:18.404Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter command-executor-mcp docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter command-executor-mcp docs:verify-links` to spot-check._ diff --git a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md index 1ab04b6fe..f3595b3e9 100644 --- a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md +++ b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-dispatcher — AI-generated documentation @@ -12,15 +12,15 @@ ## Overview -The TypeAgent Dispatcher is a TypeScript library that acts as the central hub for processing user requests within the TypeAgent ecosystem. It translates natural language inputs into structured actions using large language models (LLMs) and coordinates interactions between various application agents. The Dispatcher is designed to integrate with multiple front ends, such as the TypeAgent Shell and CLI, and supports an extensible architecture for building personal agents with natural language interfaces. +The TypeAgent Dispatcher is a TypeScript library that serves as the core component of the TypeAgent ecosystem. It is responsible for processing user requests, translating natural language inputs into structured actions using large language models (LLMs), and coordinating interactions between various application agents. The Dispatcher is designed to work with multiple front ends, such as the TypeAgent Shell and CLI, and provides an extensible architecture for building personal agents with natural language interfaces. ## What it does -The Dispatcher provides a framework for interpreting user inputs and orchestrating actions across different agents. It supports both natural language requests and system commands, enabling a wide range of interactions. +The Dispatcher acts as the central hub for managing and executing user requests. It supports both natural language inputs and system commands, enabling users to interact with the system in a flexible and intuitive manner. ### Natural Language Requests -The Dispatcher uses LLMs to process natural language inputs and translate them into structured actions defined by application agent schemas. For example: +The Dispatcher leverages LLMs to interpret natural language inputs and convert them into structured actions based on schemas defined by application agents. For example: ```bash [calendar]🤖> can you setup a meeting between 2-3PM @@ -29,7 +29,7 @@ Generating translation using GPT for 'can you setup a meeting between 2-3PM' Accept? (y/n) ``` -Other examples include: +Other examples of natural language requests include: - `play some music by Bach for me please` - `create a grocery list` @@ -37,7 +37,7 @@ Other examples include: ### System Commands -System commands prefixed with `@` allow users to configure and interact with the Dispatcher directly. Key commands include: +The Dispatcher also supports system commands, which are prefixed with `@`. These commands allow users to configure and interact with the Dispatcher directly. Examples include: - **Agent Management**: Enable or disable specific agents or groups of agents. @@ -58,7 +58,7 @@ System commands prefixed with `@` allow users to configure and interact with the ### Conversation Management -The Dispatcher supports managing conversations through natural language or system commands. Examples include: +The Dispatcher also supports managing conversations through natural language or system commands. Examples include: - "Create a new conversation called research." - "Switch to my work conversation." @@ -236,6 +236,6 @@ _9 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `c9ef0d288f10874ca031db370793375b7b88a8bc` on `2026-07-17T23:22:28.266Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ diff --git a/ts/packages/shell/README.AUTOGEN.md b/ts/packages/shell/README.AUTOGEN.md index 3dd677316..c27387837 100644 --- a/ts/packages/shell/README.AUTOGEN.md +++ b/ts/packages/shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-shell — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, it integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. The shell supports both text and voice input, multi-conversation management, and local or remote operation modes. +The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, the shell integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. It supports both text and voice input, multi-conversation management, and local or remote operation modes. ## What it does -The `agent-shell` package provides a rich set of features to enable interactive and conversational agent experiences: +The `agent-shell` package offers a range of features to enable interactive and conversational agent experiences: ### Conversation Management @@ -172,6 +172,6 @@ _5 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `5cbcf613f047f08749d0451296eb1cdc610ae414` on `2026-07-17T18:24:18.404Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ diff --git a/ts/packages/vscode-shell/README.AUTOGEN.md b/ts/packages/vscode-shell/README.AUTOGEN.md index b404f1da5..e96244078 100644 --- a/ts/packages/vscode-shell/README.AUTOGEN.md +++ b/ts/packages/vscode-shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # vscode-shell — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, allowing users to interact with TypeAgent conversations directly within the editor. It provides a dedicated side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. +The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, providing a way to interact with TypeAgent conversations directly within the editor. It offers a side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. ## What it does -The `vscode-shell` package provides a comprehensive chat interface within Visual Studio Code, enabling users to interact with the TypeAgent ecosystem. Key features include: +The `vscode-shell` package enables users to interact with the TypeAgent ecosystem through a chat interface embedded in Visual Studio Code. Its key features include: - **Chat Interface**: @@ -174,6 +174,6 @@ External: `ansi_up`, `debug`, `dompurify`, `isomorphic-ws`, `markdown-it`, `micr --- -_Auto-generated against commit `5cbcf613f047f08749d0451296eb1cdc610ae414` on `2026-07-17T18:24:18.404Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `2c26e6d289e04ac54b08f8483b292693a8d4bb64` on `2026-07-18T00:58:44.432Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ From febf2d24ff0f6c3c5363811f5aafa875916ce774 Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Sat, 18 Jul 2026 05:39:51 +0000 Subject: [PATCH 34/36] docs: regenerate README.AUTOGEN.md, command reference, and action browser --- ts/packages/agents/browser/README.AUTOGEN.md | 6 ++-- ts/packages/chat-ui/README.AUTOGEN.md | 32 +++++++++---------- ts/packages/cli/README.AUTOGEN.md | 14 ++++---- .../dispatcher/dispatcher/README.AUTOGEN.md | 8 ++--- ts/packages/vscode-shell/README.AUTOGEN.md | 10 +++--- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/ts/packages/agents/browser/README.AUTOGEN.md b/ts/packages/agents/browser/README.AUTOGEN.md index 9acb78839..f797c5870 100644 --- a/ts/packages/agents/browser/README.AUTOGEN.md +++ b/ts/packages/agents/browser/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # browser-typeagent — AI-generated documentation @@ -16,7 +16,7 @@ The `browser-typeagent` package is a TypeAgent application agent designed for br ## What it does -The `browser-typeagent` package provides a wide range of browser automation capabilities, including: +The `browser-typeagent` package provides a comprehensive set of browser automation capabilities, enabling users to interact with web pages and manage browser sessions programmatically. Key features include: - **Web Navigation**: Actions such as `openWebPage`, `goBack`, `goForward`, and `reloadPage` allow users to navigate between web pages and control browser tabs. - **User Interaction**: Users can interact with web content using actions like `clickOn`, `followLinkByText`, `scrollDown`, and `scrollUp`. @@ -190,6 +190,6 @@ _2 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `b1b5bcafdde8ba2387d669eec198eb70e8fa5986` on `2026-07-17T23:52:55.795Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ +_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ diff --git a/ts/packages/chat-ui/README.AUTOGEN.md b/ts/packages/chat-ui/README.AUTOGEN.md index 1d51ca771..8eebd3046 100644 --- a/ts/packages/chat-ui/README.AUTOGEN.md +++ b/ts/packages/chat-ui/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # chat-ui — AI-generated documentation @@ -12,47 +12,47 @@ ## Overview -The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to be used across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package enables interactive chat experiences with features such as user and agent message rendering, streaming updates, chat history replay, command completions, feedback collection, and connection status indicators. Its platform-agnostic design ensures consistent functionality and appearance across different environments. +The `chat-ui` package provides a shared, framework-free chat user interface for TypeAgent applications. It is designed to support consistent chat rendering across multiple platforms, including the VS Code shell extension, the browser extension chat panel, and the Visual Studio extension webview. The package includes components and utilities for rendering user and agent messages, handling streaming updates, replaying chat history, managing connection status, and collecting user feedback. ## What it does -The `chat-ui` package offers the following key features: +The `chat-ui` package offers a range of features to enable interactive and dynamic chat experiences: -- **ChatPanel**: The core component for rendering the chat interface. It supports: +- **ChatPanel**: The primary component for rendering the chat interface. It supports: - - Adding user and agent messages with `addAgentMessage`. - - Updating display metadata using `setDisplayInfo`. + - Adding user and agent messages using `addAgentMessage`. + - Updating display metadata with `setDisplayInfo`. - Replaying historical chat entries via `replayHistory`. - Streaming updates for dynamic content display. -- **FeedbackWidget**: A component for collecting user feedback on chat interactions. It supports thumbs-up/thumbs-down ratings, comments, and contextual information. +- **FeedbackWidget**: A component for collecting user feedback, including thumbs-up/thumbs-down ratings, comments, and contextual information. - **PartialCompletion**: Integrates with the `@typeagent/completion-ui` package to handle command completions, including input updates, acceptance, and dismissal. -- **Connection Status Management**: Provides a shared model and UI for displaying the connection status between the chat client and the server. It includes reconnect options and error handling. +- **Connection Status Management**: Provides a shared model and UI for displaying the connection status between the chat client and the server. This includes reconnect options and error handling. - **PlatformAdapter**: Abstracts platform-specific behaviors, such as handling link clicks and settings, to ensure compatibility across different environments. -- **Shared Styles**: Includes a CSS file (`styles/chat.css`) to ensure a consistent appearance for the chat UI across all host applications. +- **Shared Styles**: A CSS file (`styles/chat.css`) is included to provide a consistent appearance for the chat UI across all host applications. -The package is used by several TypeAgent components, such as the VS Code shell, the browser extension, and the Visual Studio extension webview. +The package is utilized by several TypeAgent components, such as the VS Code shell, the browser extension, and the Visual Studio extension webview. ## Setup -To integrate the `chat-ui` package into your project, follow these steps: +To use the `chat-ui` package in your project, follow these steps: 1. **Install the package**: Add `chat-ui` to your project dependencies using your package manager. 2. **Install required dependencies**: Ensure the following workspace dependencies are installed: - `@typeagent/agent-sdk` - `@typeagent/completion-ui` - `@typeagent/dispatcher-types` -3. **Include styles**: Import the CSS file located at `styles/chat.css` into your project to ensure the chat UI is styled correctly. +3. **Include styles**: Import the CSS file located at `styles/chat.css` into your project to apply the necessary styles for the chat UI. 4. **External libraries**: The package relies on the following external libraries: - `ansi_up` for processing ANSI escape codes. - `dompurify` for sanitizing HTML content. - `markdown-it` for rendering Markdown content. -Refer to the hand-written README for additional details on usage and integration. +For additional details on usage and integration, refer to the hand-written README. ## Key Files @@ -68,9 +68,9 @@ The `chat-ui` package is organized into several key files, each responsible for ## How to extend -To extend the `chat-ui` package, follow these guidelines: +To extend the `chat-ui` package, follow these steps: -1. **Understand the core components**: Start by reviewing the [chatPanel.ts](./src/chatPanel.ts) file, as it contains the implementation of the `ChatPanel` component, which is central to the package's functionality. +1. **Understand the core components**: Begin by reviewing the [chatPanel.ts](./src/chatPanel.ts) file, as it contains the implementation of the `ChatPanel` component, which is central to the package's functionality. 2. **Add new features**: To introduce new features, modify or extend the relevant components. For example: @@ -119,6 +119,6 @@ External: `ansi_up`, `dompurify`, `markdown-it` --- -_Auto-generated against commit `66ead8985b850f2775c9b1a96cb7de1d08e2aee1` on `2026-07-18T01:38:20.033Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ +_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter chat-ui docs:verify-links` to spot-check._ diff --git a/ts/packages/cli/README.AUTOGEN.md b/ts/packages/cli/README.AUTOGEN.md index 87c9b9ba3..fabca6ac4 100644 --- a/ts/packages/cli/README.AUTOGEN.md +++ b/ts/packages/cli/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-cli — AI-generated documentation @@ -12,13 +12,13 @@ ## Overview -The `agent-cli` package is a command-line interface (CLI) for interacting with the TypeAgent system. It provides tools for developers to connect to the TypeAgent Dispatcher, manage conversations, execute commands, and test agent interactions. The CLI supports both interactive and non-interactive workflows, making it a versatile tool for development, debugging, and testing. +The `agent-cli` package provides a command-line interface (CLI) for interacting with the TypeAgent system. It serves as a developer tool for managing conversations, testing agent interactions, and executing commands against the TypeAgent Dispatcher. The CLI supports both interactive and non-interactive workflows, making it a versatile utility for debugging, development, and testing. ## What it does -The `agent-cli` package offers several subcommands, each tailored to specific tasks: +The `agent-cli` package offers several subcommands, each designed for specific tasks: -- **`connect`**: The default subcommand, enabling real-time interaction with the TypeAgent Dispatcher. Users can send requests, receive responses, and manage conversations interactively. This mode is ideal for testing and debugging agent behavior. +- **`connect`**: The default subcommand, enabling interactive communication with the TypeAgent Dispatcher. Users can send requests, receive responses, and manage conversations in real time. This mode is particularly useful for testing and debugging agent behavior. - **`run`**: Executes dispatcher commands non-interactively. This includes sending requests, translating them, or generating explanations without requiring user confirmation. - **`replay`**: Replays chat histories for regression testing or generating test files. This is useful for validating agent behavior over time and ensuring consistency. - **`conversations`**: Provides tools for managing conversations on the agent server. Subcommands include: @@ -57,9 +57,9 @@ For additional details on setup and usage, refer to the hand-written README. ## Key Files -The `agent-cli` package is organized into several key files and directories, each responsible for specific functionalities: +The `agent-cli` package is structured to support its various subcommands and functionalities. Key files and their responsibilities include: -- **`src/commands/`**: Contains the implementation of CLI subcommands. +- **`src/commands/`**: This directory contains the implementation of all CLI subcommands. - **`connect.ts`**: Implements the `connect` subcommand for real-time interaction with the TypeAgent Dispatcher. - **`run/index.ts`**: Handles the `run` subcommand for executing dispatcher commands non-interactively. @@ -144,6 +144,6 @@ External: `@oclif/core`, `@oclif/plugin-help`, `chalk`, `debug`, `dotenv`, `html --- -_Auto-generated against commit `66ead8985b850f2775c9b1a96cb7de1d08e2aee1` on `2026-07-18T01:38:20.033Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ +_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-cli docs:verify-links` to spot-check._ diff --git a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md index 298d59462..572fe61ca 100644 --- a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md +++ b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-dispatcher — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The TypeAgent Dispatcher is a TypeScript library that serves as the central component for processing user requests in the TypeAgent ecosystem. It translates natural language inputs into structured actions using large language models (LLMs) and coordinates interactions between various application agents. The Dispatcher is designed to work with multiple front ends, such as the TypeAgent Shell and CLI, and supports an extensible architecture for building personal agents with natural language interfaces. +The TypeAgent Dispatcher is a TypeScript library that acts as the core component of the TypeAgent ecosystem. It is responsible for processing user requests, translating natural language inputs into structured actions using large language models (LLMs), and coordinating interactions between various application agents. The Dispatcher is designed to integrate with multiple front ends, such as the TypeAgent Shell and CLI, and supports an extensible architecture for building personal agents with natural language interfaces. ## What it does @@ -20,7 +20,7 @@ The Dispatcher provides a framework for interpreting user inputs and orchestrati ### Natural Language Requests -The Dispatcher uses LLMs to process natural language inputs and translate them into structured actions defined by application agent schemas. For example: +The Dispatcher leverages LLMs to process natural language inputs and translate them into structured actions defined by application agent schemas. For example: ```bash [calendar]🤖> can you setup a meeting between 2-3PM @@ -236,6 +236,6 @@ _9 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `66ead8985b850f2775c9b1a96cb7de1d08e2aee1` on `2026-07-18T01:38:20.033Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ +_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ diff --git a/ts/packages/vscode-shell/README.AUTOGEN.md b/ts/packages/vscode-shell/README.AUTOGEN.md index a400698e4..e14c6b0d1 100644 --- a/ts/packages/vscode-shell/README.AUTOGEN.md +++ b/ts/packages/vscode-shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # vscode-shell — AI-generated documentation @@ -12,16 +12,16 @@ ## Overview -The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, providing a way to interact with TypeAgent conversations directly within the editor. It offers a side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. +The `vscode-shell` package integrates the TypeAgent shell chat into Visual Studio Code, allowing users to interact with TypeAgent conversations directly within the editor. It provides a side panel and editor tabs for managing conversations hosted by a running TypeAgent agent server. ## What it does -The `vscode-shell` package enables users to interact with the TypeAgent ecosystem through a chat interface embedded in Visual Studio Code. Its key features include: +The `vscode-shell` package enables a chat-based interface within Visual Studio Code to interact with the TypeAgent ecosystem. Key features include: - **Chat Interface**: - A **Chat** side panel accessible from the activity bar. - - Support for multiple chat tabs in the editor, each representing a separate conversation. + - Support for multiple editor-tab chats, each representing a separate conversation. - **Command Palette Integration**: @@ -174,6 +174,6 @@ External: `ansi_up`, `debug`, `dompurify`, `isomorphic-ws`, `markdown-it`, `micr --- -_Auto-generated against commit `66ead8985b850f2775c9b1a96cb7de1d08e2aee1` on `2026-07-18T01:38:20.033Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter vscode-shell docs:verify-links` to spot-check._ From ecde1262fdb2a441768cf8312061c172262c5c9e Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Sat, 18 Jul 2026 09:51:07 +0000 Subject: [PATCH 35/36] docs: regenerate README.AUTOGEN.md, command reference, and action browser --- ts/packages/agentSdk/README.AUTOGEN.md | 48 +++++++++---------- ts/packages/agents/browser/README.AUTOGEN.md | 6 +-- .../agents/onboarding/README.AUTOGEN.md | 12 ++--- .../dispatcher/dispatcher/README.AUTOGEN.md | 10 ++-- ts/packages/shell/README.AUTOGEN.md | 12 +++-- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/ts/packages/agentSdk/README.AUTOGEN.md b/ts/packages/agentSdk/README.AUTOGEN.md index 40e1f7320..e91990d5a 100644 --- a/ts/packages/agentSdk/README.AUTOGEN.md +++ b/ts/packages/agentSdk/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # @typeagent/agent-sdk — AI-generated documentation @@ -12,46 +12,44 @@ ## Overview -The `@typeagent/agent-sdk` package provides the core interfaces, types, and utilities required to build and manage Dispatcher Agents in the TypeAgent ecosystem. It serves as the foundational library for creating agents that interact with the TypeAgent Dispatcher, enabling them to handle user commands, execute actions, and manage their lifecycle and context. - -This package is widely used across the TypeAgent ecosystem, including in the Shell, CLI, and other agents, making it a critical component for agent development and integration. +The `@typeagent/agent-sdk` package provides the foundational interfaces, types, and utilities for building Dispatcher Agents within the TypeAgent ecosystem. It is a core library that enables developers to create agents capable of handling user commands, executing actions, and managing their lifecycle and context. This package is widely used across the TypeAgent ecosystem, serving as a critical dependency for various tools and agents. ## What it does -The `@typeagent/agent-sdk` package offers a comprehensive set of tools and interfaces to facilitate the development of Dispatcher Agents. Its key features include: +The `@typeagent/agent-sdk` package facilitates the development of Dispatcher Agents by providing a comprehensive set of features and utilities: ### Manifest and Instantiation -- **Manifest**: The `AppAgentManifest` defines metadata about the agent, such as its emoji, description, and translator configuration. This manifest is loaded by the Dispatcher when the agent is initialized. +- **Manifest**: The `AppAgentManifest` defines metadata about the agent, such as its emoji, description, and translator configuration. This manifest is the first point of interaction between the Dispatcher and the agent. - **Instantiation Entry Point**: The `AppAgent` interface is the core contract that agents implement. The Dispatcher uses the `instantiate` function exported from the `./agent/handlers` module to create an instance of the agent. ### Lifecycle Management -- **initializeAgentContext**: Sets up the agent's runtime context, which is passed back in subsequent API calls. -- **updateAgentContext**: Updates the agent's context, such as enabling or disabling specific actions or sub-schemas. -- **closeAgentContext**: Cleans up resources when the agent is no longer needed. +The package provides lifecycle APIs to manage the initialization, update, and cleanup of an agent's context: + +- `initializeAgentContext`: Sets up the agent's runtime context, which is passed back in subsequent API calls. +- `updateAgentContext`: Updates the agent's context, such as enabling or disabling specific actions or sub-schemas. +- `closeAgentContext`: Cleans up resources when the agent is no longer needed. -### Command Handling +### Command and Action Handling -- **getCommands**: Returns a list of commands (`CommandDescriptors`) that the agent supports. -- **executeCommand**: Executes commands based on parsed parameters provided by the Dispatcher. +- **Command APIs**: -### Action Execution + - `getCommands`: Returns a list of commands (`CommandDescriptors`) that the agent supports. + - `executeCommand`: Executes commands based on parsed parameters provided by the Dispatcher. -- **executeAction**: Handles user-triggered actions routed by the Dispatcher. The agent is responsible for further routing to specific handlers. -- **streamPartialAction**: Supports streaming partial results for actions, such as generating responses incrementally. +- **Action APIs**: + - `executeAction`: Handles user-triggered actions routed by the Dispatcher. The agent is responsible for further routing to specific handlers. + - `streamPartialAction`: Supports streaming partial results for actions, such as generating responses incrementally. ### Readiness and Setup - **checkReadiness**: Reports the agent's readiness state, indicating whether it is ready, requires setup, or is unsupported. - **setup**: Provides an optional in-chat configuration flow to guide users through the setup process and transition the agent to a ready state. -### Display Management +### Display and Choice Management - **Dynamic and Periodic Updates**: Utilities for managing how information is displayed to users, including support for dynamic and periodic updates. - -### Choice Management - - **handleChoice**: Routes user responses to the agent's `ChoiceManager`, enabling interactive workflows. ## Setup @@ -69,8 +67,8 @@ To create a Dispatcher Agent using the `@typeagent/agent-sdk`, follow these step - Export an `instantiate` function from this file, which returns an instance of the `AppAgent`. - Specify the path to this file in your `package.json` under the `./agent/handlers` export path. -3. **Follow Examples**: - - Refer to the [List agent](../agents/list/) as a practical example of building a Dispatcher Agent. +3. **Refer to Examples**: + - Use the [List agent](../agents/list/) as a practical example of building a Dispatcher Agent. - Consult the Dispatcher README for instructions on registering your agent with the TypeAgent Dispatcher. ## Key Files @@ -158,15 +156,15 @@ External: `debug`, `type-fest` - [@typeagent/action-browser](../../tools/actionBrowser/README.md) - [@typeagent/agent-rpc](../../packages/agentRpc/README.md) +- [@typeagent/agent-server-client](../../packages/agentServer/client/README.md) +- [@typeagent/agent-server-protocol](../../packages/agentServer/protocol/README.md) - [@typeagent/copilot-plugin](../../packages/copilot-plugin/README.md) - [@typeagent/dispatcher-rpc](../../packages/dispatcher/rpc/README.md) - [@typeagent/dispatcher-types](../../packages/dispatcher/types/README.md) - [@typeagent/echo](../../examples/agentExamples/echo/README.md) - [agent-api](../../packages/api/README.md) - [agent-cache](../../packages/cache/README.md) -- [agent-cli](../../packages/cli/README.md) -- [agent-dispatcher](../../packages/dispatcher/dispatcher/README.md) -- _…and 48 more workspace consumers._ +- _…and 51 more workspace consumers._ ### Files of interest @@ -184,6 +182,6 @@ External: `debug`, `type-fest` --- -_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/agent-sdk docs:verify-links` to spot-check._ +_Auto-generated against commit `c97eb42726a9196c7ac72138faa0777c5cbc1aab` on `2026-07-18T09:48:36.613Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/agent-sdk docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/browser/README.AUTOGEN.md b/ts/packages/agents/browser/README.AUTOGEN.md index f797c5870..541da6ecd 100644 --- a/ts/packages/agents/browser/README.AUTOGEN.md +++ b/ts/packages/agents/browser/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # browser-typeagent — AI-generated documentation @@ -16,7 +16,7 @@ The `browser-typeagent` package is a TypeAgent application agent designed for br ## What it does -The `browser-typeagent` package provides a comprehensive set of browser automation capabilities, enabling users to interact with web pages and manage browser sessions programmatically. Key features include: +The `browser-typeagent` package provides a range of browser automation capabilities, allowing users to interact with web pages and manage browser sessions programmatically. Key features include: - **Web Navigation**: Actions such as `openWebPage`, `goBack`, `goForward`, and `reloadPage` allow users to navigate between web pages and control browser tabs. - **User Interaction**: Users can interact with web content using actions like `clickOn`, `followLinkByText`, `scrollDown`, and `scrollUp`. @@ -190,6 +190,6 @@ _2 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ +_Auto-generated against commit `c97eb42726a9196c7ac72138faa0777c5cbc1aab` on `2026-07-18T09:48:36.613Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter browser-typeagent docs:verify-links` to spot-check._ diff --git a/ts/packages/agents/onboarding/README.AUTOGEN.md b/ts/packages/agents/onboarding/README.AUTOGEN.md index 5684c3cb9..28f06e335 100644 --- a/ts/packages/agents/onboarding/README.AUTOGEN.md +++ b/ts/packages/agents/onboarding/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # onboarding-agent — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The `onboarding-agent` is a TypeAgent application agent designed to automate the process of integrating new applications and APIs into the TypeAgent ecosystem. It organizes the onboarding workflow into seven distinct phases, each managed by a sub-agent. This agent is particularly effective when used with AI orchestrators like Claude Code or GitHub Copilot, which can drive the onboarding process via TypeAgent's MCP interface. +The `onboarding-agent` is a TypeAgent application agent that automates the process of integrating new applications and APIs into the TypeAgent ecosystem. It organizes the onboarding workflow into seven distinct phases, each managed by a sub-agent. This agent is designed to streamline the onboarding process by generating the necessary artifacts and configurations for new integrations. It is particularly effective when used with AI orchestrators like Claude Code or GitHub Copilot, which can drive the onboarding process via TypeAgent's MCP interface. ## What it does @@ -33,13 +33,13 @@ The onboarding process is divided into seven phases, each producing specific art 6. **Testing**: Creates test cases and validates the generated artifacts through a phrase-to-action testing loop. 7. **Packaging**: Packages the completed agent for distribution and registration within the TypeAgent ecosystem. -The agent is designed to be driven by AI clients that can iteratively call TypeAgent actions, inspect artifacts, and guide each phase to completion. +Each phase is designed to produce specific outputs that are stored in a dedicated workspace directory, allowing the process to be paused and resumed as needed. ## Setup To use the `onboarding-agent`, you need to configure the following environment variables: -- **`TYPEAGENT_UIA_HELPER`**: Required for the experimental UI Automation crawling feature, which is used to discover actions in Windows desktop applications. Refer to the hand-written README for more details on how to set this up. +- **`TYPEAGENT_UIA_HELPER`**: This variable is required for the experimental UI Automation crawling feature, which is used to discover actions in Windows desktop applications. Refer to the hand-written README for more details on how to set this up. - **`__PORT_ENV__`**: Specifies the port environment for the agent. Ensure this is set to the appropriate value for your environment. Additionally, for optimal usage, it is recommended to set up TypeAgent as an MCP server. This allows AI clients like Claude Code or GitHub Copilot to communicate directly with the TypeAgent dispatcher. The hand-written README provides detailed instructions for this setup. @@ -135,7 +135,7 @@ External: `debug`, `typechat` - [./src/discovery/discoverySchema.ts](./src/discovery/discoverySchema.ts) - [./src/grammarGen/grammarGenHandler.ts](./src/grammarGen/grammarGenHandler.ts) - [./src/grammarGen/grammarGenSchema.agr](./src/grammarGen/grammarGenSchema.agr) -- _…and 84 more under `./src/`._ +- _…and 85 more under `./src/`._ ### Agent surface @@ -164,6 +164,6 @@ _4 actions implemented by this agent, parsed deterministically from `./src/onboa --- -_Auto-generated against commit `f928ce70269b7d0f8942977c29147b2c8832b722` on `2026-07-15T22:42:29.947Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter onboarding-agent docs:verify-links` to spot-check._ +_Auto-generated against commit `c97eb42726a9196c7ac72138faa0777c5cbc1aab` on `2026-07-18T09:48:36.613Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter onboarding-agent docs:verify-links` to spot-check._ diff --git a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md index 572fe61ca..912da8dd3 100644 --- a/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md +++ b/ts/packages/dispatcher/dispatcher/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-dispatcher — AI-generated documentation @@ -12,7 +12,7 @@ ## Overview -The TypeAgent Dispatcher is a TypeScript library that acts as the core component of the TypeAgent ecosystem. It is responsible for processing user requests, translating natural language inputs into structured actions using large language models (LLMs), and coordinating interactions between various application agents. The Dispatcher is designed to integrate with multiple front ends, such as the TypeAgent Shell and CLI, and supports an extensible architecture for building personal agents with natural language interfaces. +The TypeAgent Dispatcher is a TypeScript library that serves as the core component of the TypeAgent ecosystem. It processes user requests, translates natural language inputs into structured actions using large language models (LLMs), and coordinates interactions between various application agents. The Dispatcher is designed to integrate with multiple front ends, such as the TypeAgent Shell and CLI, and supports an extensible architecture for building personal agents with natural language interfaces. ## What it does @@ -20,7 +20,7 @@ The Dispatcher provides a framework for interpreting user inputs and orchestrati ### Natural Language Requests -The Dispatcher leverages LLMs to process natural language inputs and translate them into structured actions defined by application agent schemas. For example: +The Dispatcher uses LLMs to process natural language inputs and translate them into structured actions defined by application agent schemas. For example: ```bash [calendar]🤖> can you setup a meeting between 2-3PM @@ -218,7 +218,7 @@ External: `@anthropic-ai/claude-agent-sdk`, `@azure/core-client`, `@azure/core-r - [./src/context/dispatcher/schema/clarifyActionSchema.ts](./src/context/dispatcher/schema/clarifyActionSchema.ts) - [./src/context/dispatcher/schema/dispatcherActionSchema.ts](./src/context/dispatcher/schema/dispatcherActionSchema.ts) - [./src/context/dispatcher/schema/lookupActionSchema.ts](./src/context/dispatcher/schema/lookupActionSchema.ts) -- _…and 211 more under `./src/`._ +- _…and 212 more under `./src/`._ ### Environment variables @@ -236,6 +236,6 @@ _9 environment variables referenced from `./src/` (set in `ts/.env` or your shel --- -_Auto-generated against commit `296dbc72b659a615918e97949f106f0fee2bb9db` on `2026-07-18T05:37:16.532Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ +_Auto-generated against commit `c97eb42726a9196c7ac72138faa0777c5cbc1aab` on `2026-07-18T09:48:36.613Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-dispatcher docs:verify-links` to spot-check._ diff --git a/ts/packages/shell/README.AUTOGEN.md b/ts/packages/shell/README.AUTOGEN.md index 658ba7921..779378522 100644 --- a/ts/packages/shell/README.AUTOGEN.md +++ b/ts/packages/shell/README.AUTOGEN.md @@ -3,7 +3,7 @@ - + # agent-shell — AI-generated documentation @@ -12,11 +12,11 @@ ## Overview -The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, it integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. The shell supports both text and voice input, multi-conversation management, and local or remote operation modes. +The `agent-shell` package is a TypeScript library that serves as the graphical user interface (GUI) entry point for the TypeAgent ecosystem. It provides a personal agent interface for processing user requests, performing actions, answering questions, and managing conversations. Built on Electron, the shell integrates with other TypeAgent components, such as the dispatcher and agent server, to deliver an interactive and extensible experience. It supports both text and voice input, multi-conversation management, and local or remote operation modes. ## What it does -The `agent-shell` package provides a range of features to enable interactive and conversational agent experiences: +The `agent-shell` package offers a variety of features to enable interactive and conversational agent experiences: ### Conversation Management @@ -57,6 +57,7 @@ To set up and run the `agent-shell` package, follow these steps: - `SPEECH_SDK_ENDPOINT`: The service URL or speech API resource ID for Azure Speech Services. - `SPEECH_SDK_KEY`: The API key for Azure Speech Services. - `SPEECH_SDK_REGION`: The region of the Azure Speech Services (e.g., `westus2`). + - `TYPEAGENT_MODEL_PROVIDER`: Specifies the model provider for TypeAgent. - `WEBSOCKET_HOST`: The host for WebSocket connections. 3. **Run the Shell**: @@ -162,16 +163,17 @@ External: `@azure/identity`, `@azure/msal-node-extensions`, `@electron-toolkit/p ### Environment variables -_5 environment variables referenced from `./src/` (set in `ts/.env` or your shell). See the `## Setup` section above for guidance on obtaining each value._ +_6 environment variables referenced from `./src/` (set in `ts/.env` or your shell). See the `## Setup` section above for guidance on obtaining each value._ - `ELECTRON_RENDERER_URL` - `SPEECH_SDK_ENDPOINT` - `SPEECH_SDK_KEY` - `SPEECH_SDK_REGION` +- `TYPEAGENT_MODEL_PROVIDER` - `WEBSOCKET_HOST` --- -_Auto-generated against commit `bdf0bb82a95a3a61dfc2a32ea439f70c96228154` on `2026-07-18T01:48:24.228Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ +_Auto-generated against commit `c97eb42726a9196c7ac72138faa0777c5cbc1aab` on `2026-07-18T09:48:36.613Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter agent-shell docs:verify-links` to spot-check._ From 2a32e55e31f45e531c16a8d0e1c7e1d965f79acb Mon Sep 17 00:00:00 2001 From: Robert Gruen Date: Sat, 18 Jul 2026 10:41:01 -0700 Subject: [PATCH 36/36] test(shell): update listAgent e2e expectations for structured list output --- ts/packages/shell/test/listAgent.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ts/packages/shell/test/listAgent.spec.ts b/ts/packages/shell/test/listAgent.spec.ts index b8c3ab23f..0badc97af 100644 --- a/ts/packages/shell/test/listAgent.spec.ts +++ b/ts/packages/shell/test/listAgent.spec.ts @@ -24,13 +24,13 @@ test.describe("List Agent Tests", () => { ], [ "Created list: shopping", - "List 'shopping' is empty.", + "List 'shopping'\n\nThis list is empty.", "Added items: bread,milk,flour to list shopping", - "List 'shopping' has items:\n\nbread\nmilk\nflour", + "List 'shopping' — 3 items\nbread\nmilk\nflour", "Removed items: milk from list shopping", - "List 'shopping' has items:\n\nbread\nflour", + "List 'shopping' — 2 items\nbread\nflour", "Cleared list: shopping", - "List 'shopping' is empty.", + "List 'shopping'\n\nThis list is empty.", ], ); });