diff --git a/README.md b/README.md index 2aec262..0228b99 100644 --- a/README.md +++ b/README.md @@ -1,226 +1,145 @@ # agent-tty -`agent-tty` is a CLI-first terminal automation tool for AI agents and humans. -It creates long-lived PTY-backed sessions, lets automation drive and inspect those sessions across CLI invocations, and produces reviewable artifacts such as semantic snapshots, PNG screenshots, asciicast recordings, and WebM exports. +Drive and inspect long-lived terminal sessions from the CLI, with reviewable snapshots, screenshots, and recordings. -The goal is to make terminal and TUI automation inspectable rather than only scriptable. -It is inspired by the `agent-browser` style of agent workflow: give an agent a stateful environment, explicit wait/inspect primitives, and evidence a human can review after the fact. +[![npm](https://img.shields.io/npm/v/agent-tty)](https://www.npmjs.com/package/agent-tty) +[![CI](https://github.com/coder/agent-tty/actions/workflows/ci.yml/badge.svg)](https://github.com/coder/agent-tty/actions/workflows/ci.yml) +[![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE) +![Node](https://img.shields.io/node/v/agent-tty) -## Why It Exists +![agent-tty: drive a terminal session and inspect it as reviewable text](./assets/hero.gif) -Most terminal automation falls back to brittle patterns: blind sleeps, long simulated keystroke streams, ad hoc screenshots, or detached `tmux` sessions that are hard for another process to inspect. -`agent-tty` provides a tighter loop: +`agent-tty` keeps a real PTY-backed terminal session alive across separate CLI invocations. You `run` a command in it, `wait` for the screen to reach a condition instead of sleeping, then capture what happened as a semantic text snapshot, a PNG screenshot, an asciinema-compatible `.cast`, or a WebM. The recording is the point: a human — or an AI coding agent — can replay and verify exactly what the terminal did, instead of trusting a blind script. -1. create an isolated terminal session, -2. run setup or send input, -3. wait for observable terminal state, -4. inspect the screen semantically, -5. capture renderer-backed visual evidence, -6. export replay artifacts, -7. clean up the session. +It started as a way to reproduce and verify TUI bug reports (see [Why it exists](#why-it-exists)), and it's equally useful for shell automation, CI smoke tests, and driving interactive CLIs. -That loop is useful for AI coding agents, shell scripts, CI smoke tests, TUI dogfooding, and humans debugging terminal workflows locally. +## Quickstart -## What It Provides - -- Long-lived terminal sessions backed by `node-pty`. -- A stable, machine-readable CLI surface with JSON envelopes. -- `run`, `type`, `paste`, `send-keys`, `resize`, and `signal` controls. -- `wait` and `snapshot` primitives for semantic inspection. -- Renderer-backed screenshots and WebM exports using `ghostty-web` under Playwright/Chromium. -- Append-only event logs so snapshots, screenshots, and recordings can be replayed from session history. -- Isolated homes via `--home`, useful for agents, tests, CI, and proof bundles. - -## How It Works - -The architecture is: - -```text -agent-tty CLI -> per-session host -> PTY + event log -> ghostty-web renderer -> artifacts -``` - -The PTY and append-only event log are the execution truth. -`ghostty-web` is the reference renderer for semantic snapshots, screenshots, and replay video; it is not a native-terminal parity guarantee. -The design keeps rendering behind an adapter so future native renderers can be added without changing the public CLI contract. - -## Quick Start - -`agent-tty` requires Node `>=24 <27`. -Renderer-backed screenshots and WebM export also require a discoverable Playwright Chromium install. +Requires Node `>=24 <27`. Screenshots and WebM export also need a Playwright Chromium install (`npx playwright install chromium`). ```bash npm install -g agent-tty -AGENT_HOME="$(mktemp -d)" -agent-tty --home "$AGENT_HOME" doctor --json - -SESSION_ID=$(agent-tty --home "$AGENT_HOME" create --json --name demo -- /bin/bash | jq -r '.result.sessionId') -agent-tty --home "$AGENT_HOME" run "$SESSION_ID" 'printf "hello from agent-tty\n"' --json -agent-tty --home "$AGENT_HOME" wait "$SESSION_ID" --text 'hello from agent-tty' --json -agent-tty --home "$AGENT_HOME" snapshot "$SESSION_ID" --format text --json -agent-tty --home "$AGENT_HOME" screenshot "$SESSION_ID" --json -agent-tty --home "$AGENT_HOME" destroy "$SESSION_ID" --json +# Sessions, logs, and artifacts live under ~/.agent-tty by default. +# Optionally point AGENT_TTY_HOME at a throwaway dir for an isolated run: +export AGENT_TTY_HOME="$(mktemp -d)" +agent-tty doctor --json # check your environment + +# Open a session, do something, wait for it, look at the result. +SID=$(agent-tty create --json -- /bin/bash | jq -r '.result.sessionId') +agent-tty run "$SID" 'printf "hello from agent-tty\n"' --json +agent-tty wait "$SID" --text 'hello from agent-tty' --json +agent-tty snapshot "$SID" --format text --json +agent-tty screenshot "$SID" --json +agent-tty destroy "$SID" --json ``` -If Chromium is missing on a fresh machine, run: +Driving an interactive TUI is the same loop with key chords and a stability wait: ```bash -npx playwright install chromium +agent-tty run "$SID" 'nvim --clean' --no-wait --json +agent-tty wait "$SID" --screen-stable-ms 1000 --json +agent-tty send-keys "$SID" Down Down Enter --json +agent-tty screenshot "$SID" --json +agent-tty record export "$SID" --format webm --json ``` -For prerelease channels, tarball installs, authenticated GitHub Release installs, and source-checkout tarballs, see [`docs/INSTALL.md`](./docs/INSTALL.md). +More workflows in [`docs/USAGE.md`](./docs/USAGE.md). Other install paths (tarballs, prerelease channels, source checkouts) in [`docs/INSTALL.md`](./docs/INSTALL.md). -## Agent Demo +## Why not just tmux, expect, asciinema, or Playwright? -This dogfood bundle uses VHS as the outer camera for real Codex and Claude interactive TUIs while each agent explores the `agent-tty` skill/CLI, drives `nvim --clean`, writes a file, and exports inner proof artifacts. +Those tools are good, and you can get partway with any of them. `agent-tty` exists because driving a terminal _and_ getting reviewable evidence back is awkward with each one: - - - - - - - - - -
CodexClaude
- - - -
+| If you reach for… | You get | What `agent-tty` adds | +| ------------------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tmux` + `send-keys` / `capture-pane` | drive a pane, scrape raw bytes | a `wait`-for-condition primitive (stop sleeping and grepping), semantic snapshots, and PNG / `.cast` / WebM artifacts a process or human can review | +| `expect` | scripted input/output matching on a byte stream | a model of the _rendered screen_ (cursor, alt-screen, colors), plus shareable visual artifacts | +| `asciinema` / VHS | a recording to watch later | programmatic drive + `wait` + inspect — act on terminal state, not just record it (and it still exports asciinema-compatible `.cast`) | +| Playwright | this exact stateful loop, for browsers | the same drive → wait → inspect → snapshot loop, applied to terminals and TUIs | -GitHub renders these as inline H.264 MP4 video players. See [`VIDEO_PLAYBACK.md`](./dogfood/agent-uses-agent-tty/VIDEO_PLAYBACK.md) for the upload flow that produces the `user-attachments` URLs; the checked-in WebM proof files remain the canonical source of truth. +`agent-tty` is an automation-and-inspection layer, not a tmux replacement. -See [`dogfood/agent-uses-agent-tty/`](./dogfood/agent-uses-agent-tty/) for the Hero Demo reproducer, outer transcripts, inner Neovim recordings, and final file proofs. +## How it works -## Common Usage +```text +agent-tty CLI → per-session host → PTY + append-only event log → Ghostty renderer → artifacts +``` -### Run setup inside a shell +Every session is backed by a real PTY (`node-pty`) and an append-only event log. The log is the source of truth, so snapshots, screenshots, and recordings can be regenerated deterministically by replaying it — even after the session has exited. -```bash -AGENT_HOME="$(mktemp -d)" -SESSION_ID=$(agent-tty --home "$AGENT_HOME" create --json -- /bin/bash | jq -r '.result.sessionId') +Rendering uses Ghostty's terminal engine through two interchangeable backends (`--renderer`): -agent-tty --home "$AGENT_HOME" run "$SESSION_ID" 'pwd && npm test' --json -agent-tty --home "$AGENT_HOME" snapshot "$SESSION_ID" --format text --json -agent-tty --home "$AGENT_HOME" destroy "$SESSION_ID" --json -``` +- **`libghostty-vt`** — Ghostty's native VT engine, bound into Node. Fast, browser-free semantic snapshots and `wait` checks. +- **`ghostty-web`** (default) — a headless web build of Ghostty driven by Playwright/Chromium. Adds pixel PNG screenshots and WebM video. -### Drive an interactive CLI or TUI +`ghostty-web` is a _reference_ renderer: it shows what a pinned Ghostty build draws, not a pixel-for-pixel guarantee of any particular native terminal window. That tradeoff is deliberate — the renderer sits behind an adapter, so native backends can be added later without changing the CLI contract. -```bash -AGENT_HOME="$(mktemp -d)" -SESSION_ID=$(agent-tty --home "$AGENT_HOME" create --json -- /bin/bash | jq -r '.result.sessionId') - -agent-tty --home "$AGENT_HOME" run "$SESSION_ID" '' --no-wait --json -agent-tty --home "$AGENT_HOME" wait "$SESSION_ID" --screen-stable-ms 1000 --json -agent-tty --home "$AGENT_HOME" send-keys "$SESSION_ID" Down Down Enter --json -agent-tty --home "$AGENT_HOME" screenshot "$SESSION_ID" --json -agent-tty --home "$AGENT_HOME" destroy "$SESSION_ID" --json -``` +## Why it exists -### Export reviewer-facing proof +I maintain [`coder/claudecode.nvim`](https://github.com/coder/claudecode.nvim) and was drowning in issues and PRs I couldn't easily reproduce — Neovim is a TUI, and "reproduce this, configure that, screenshot the result" is painful to script with sleeps and `capture-pane`. `agent-tty` lets me spin up an isolated, reproducible terminal environment, hand it to a coding agent to attempt a fix, and then verify the fix with a fresh session and a recording I can actually look at. -```bash -AGENT_HOME="$(mktemp -d)" -SESSION_ID=$(agent-tty --home "$AGENT_HOME" create --json -- /bin/bash | jq -r '.result.sessionId') - -agent-tty --home "$AGENT_HOME" run "$SESSION_ID" 'printf "artifact proof\n"' --json -agent-tty --home "$AGENT_HOME" wait "$SESSION_ID" --text 'artifact proof' --json -agent-tty --home "$AGENT_HOME" screenshot "$SESSION_ID" --json -agent-tty --home "$AGENT_HOME" record export "$SESSION_ID" --format asciicast --json -agent-tty --home "$AGENT_HOME" record export "$SESSION_ID" --format webm --json -agent-tty --home "$AGENT_HOME" destroy "$SESSION_ID" --json -``` - -For command details, examples, and workflow notes, see [`docs/USAGE.md`](./docs/USAGE.md). +A colleague then used `agent-tty` to build an experimental TUI for Coder agents almost entirely by letting coding agents drive it — checking the screenshots and recordings it produced instead of watching over their shoulder. That's the loop it's built for: **an agent acts, `agent-tty` captures reviewable evidence, a human (or another agent) verifies.** -## Command Surface +## Command surface -Global flags: +Global flags: `--home ` (or `AGENT_TTY_HOME`; defaults to `~/.agent-tty`), `--renderer ` (or `AGENT_TTY_RENDERER`), `--json`, `--timeout-ms `, `--no-color`, `--log-level `, `--profile `. -- `--home `: override the agent-tty home directory. -- `--timeout-ms `: apply a shared CLI timeout budget in milliseconds. -- `--no-color`: disable ANSI color in human-readable output. -- `--log-level `: set log level (`debug`, `info`, `warn`, `error`). -- `--profile `: select a default render profile. -- `--json`: available on user-facing commands for structured output. +- **Environment:** `version`, `doctor`, `skills list|get|path` +- **Lifecycle:** `create`, `list`, `inspect`, `destroy`, `gc` +- **Input & control:** `run`, `type`, `paste`, `send-keys`, `resize`, `signal`, `mark` +- **Observe & capture:** `wait`, `snapshot`, `screenshot`, `record export` -Command groups: +Every user-facing command takes `--json` and returns a stable, machine-readable envelope. See [`docs/USAGE.md`](./docs/USAGE.md) for details and [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md) for renderer/environment issues. -- Environment and skills: `version`, `doctor`, `skills list|get|path`. -- Lifecycle: `create`, `list`, `inspect`, `destroy`, `gc`. -- Input and control: `run`, `type`, `paste`, `send-keys`, `resize`, `signal`, `mark`. -- Observation and artifacts: `wait`, `snapshot`, `screenshot`, `record export`. +## Demos -## Notes And Limitations +Real Codex and Claude TUIs discovering the `agent-tty` skill, driving `nvim --clean`, writing a file, and exporting inner proof artifacts. (GitHub renders these as click-to-play H.264 players.) -- Linux and macOS are tier-1 targets; Windows is tier-2 and not CI-tested. -- Screenshots and WebM export depend on Playwright/Chromium and the bundled `ghostty-web` renderer. -- `ghostty-web` provides reference visual truth, not exact parity with every native terminal emulator. -- `run` is best for shell-oriented setup and bootstrap work. It does not capture command output as a structured result or report the child command's exit status. -- Use `--home ` for isolated automation. Passing the same home to every command keeps manifests, sockets, event logs, and artifacts together. -- Run `agent-tty --home doctor --json` before screenshot or recording workflows in a new machine, CI job, or container. + + + + + + + + + +
CodexClaude
-Troubleshooting notes live in [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md). +Full reproducer, transcripts, and proof bundles in [`dogfood/agent-uses-agent-tty/`](./dogfood/agent-uses-agent-tty/) and [`dogfood/CATALOG.md`](./dogfood/CATALOG.md). -## Agent Skills +## Agent skills -`agent-tty` ships a thin public bootstrap skill under `skills/agent-tty/` and canonical runtime skills under `skill-data/`. -After installing the CLI, coding agents can load the current runtime instructions directly: +`agent-tty` ships a bootstrap skill so coding agents can load current usage instructions at runtime: ```bash -agent-tty skills get agent-tty agent-tty skills list -agent-tty skills get dogfood-tui +agent-tty skills get agent-tty ``` -For TanStack Intent, Mux, and direct skill-copy instructions, see [`docs/AGENT-SKILLS.md`](./docs/AGENT-SKILLS.md). - -## Vision And Roadmap +See [`docs/AGENT-SKILLS.md`](./docs/AGENT-SKILLS.md). -The current `0.2.x` line is centered on reliable, isolated, reviewable TUI automation through the CLI. -Future work includes native renderer adapters, broader platform parity, mouse input, richer semantic TUI automation, remote/networked control, and external control layers such as an MCP wrapper. +## Status & platform support -- [`RELEASE.md`](./RELEASE.md) defines the supported release contract. -- [`ROADMAP.md`](./ROADMAP.md) tracks intentionally deferred work and post-release direction. -- [`design/ARCHITECTURE.md`](./design/ARCHITECTURE.md) explains the architecture and product intent in more detail. +`agent-tty` is `0.2.x` and focused on reliable, isolated, reviewable terminal/TUI automation through a stable CLI. -## Local Development +- Linux and macOS are tier-1; Windows is tier-2 and not CI-tested. +- Screenshots and WebM export depend on Playwright/Chromium and the `ghostty-web` backend. +- `run` is best for shell setup and command injection; it does not capture a child command's structured output or exit status. +- Apache-2.0, runs entirely locally, no account or SaaS. -Preferred setup uses `mise`: +Deferred work (native renderers, mouse input, remote control, an MCP wrapper) is tracked in [`ROADMAP.md`](./ROADMAP.md). The supported contract is in [`RELEASE.md`](./RELEASE.md); the architecture is in [`design/ARCHITECTURE.md`](./design/ARCHITECTURE.md). -```bash -mise install -mise run bootstrap -``` +## Contributing -Fallback setup after installing `aube` directly: - -```bash -aube exec playwright install chromium -``` - -Useful local commands: +Issues and PRs welcome — see [`docs/CONTRIBUTING.md`](./docs/CONTRIBUTING.md) and the [`good first issue`](https://github.com/coder/agent-tty/labels/good%20first%20issue) / [`help wanted`](https://github.com/coder/agent-tty/labels/help%20wanted) labels. ```bash +mise install && mise run bootstrap # preferred npm run cli -- --help npm run verify ``` -Use `npx tsx src/cli/main.ts ...` while developing from a source checkout, and use an isolated absolute `AGENT_TTY_HOME` for tests or manual dogfooding. -For contributor details, see [`docs/CONTRIBUTING.md`](./docs/CONTRIBUTING.md). - -## Documentation - -- [`docs/README.md`](./docs/README.md) — user, contributor, and maintainer docs map. -- [`docs/INSTALL.md`](./docs/INSTALL.md) — installation paths and release tarball flows. -- [`docs/USAGE.md`](./docs/USAGE.md) — CLI workflows and command examples. -- [`docs/AGENT-SKILLS.md`](./docs/AGENT-SKILLS.md) — packaged agent skill guidance. -- [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md) — environment and renderer troubleshooting. -- [`design/README.md`](./design/README.md) — architecture and design references. -- [`dogfood/CATALOG.md`](./dogfood/CATALOG.md) — curated proof bundles and review paths. - ## License -`agent-tty` is licensed under the [Apache License 2.0](./LICENSE). +[Apache License 2.0](./LICENSE). diff --git a/assets/hero.gif b/assets/hero.gif new file mode 100644 index 0000000..b5d20a1 Binary files /dev/null and b/assets/hero.gif differ diff --git a/assets/hero.tape b/assets/hero.tape new file mode 100644 index 0000000..a58b0fc --- /dev/null +++ b/assets/hero.tape @@ -0,0 +1,81 @@ +# assets/hero.tape — generates the README hero GIF with VHS (charmbracelet/vhs). +# +# Run from the repo root: +# vhs assets/hero.tape # writes assets/hero.gif +# +# Prereqs (vhs 0.11.0 + jq are pinned in mise's [tools]): +# - `agent-tty` on PATH (npm i -g agent-tty, or `npm run build && npm link`) +# - `jq` +# It uses the fast, browser-free `libghostty-vt` renderer so the GIF stays short +# (no Chromium boot). For a crisper, tighter, more "terminal" look, tune +# FontFamily (must be installed!), FontSize, LineHeight, LetterSpacing, and +# Padding below, plus the per-step Sleeps. The session is sized to 72x18 so a +# 26pt font fills the frame without the 80-col default wrapping. Regenerate, +# then replace the HERO DEMO comment block in README.md with: +# ![agent-tty: drive a terminal session and inspect it as reviewable text](./assets/hero.gif) + +Output assets/hero.gif + +Require agent-tty +Require jq + +Set Shell bash +# Use a font that's actually installed (VHS silently falls back to an ugly +# default otherwise). FiraCode Nerd Font Mono is on this machine and reads clean. +# Bulletproof alternatives: "Menlo", "SF Mono", "Monaco", "JetBrains Mono". +Set FontFamily "FiraCode Nerd Font Mono" +Set FontSize 26 +Set Width 1280 +Set Height 640 +Set Padding 16 # tighter frame (was 28) +Set LineHeight 1.0 # tight lines; nudge to ~1.15 if they touch +Set LetterSpacing 0 # no extra tracking +Set Theme "Catppuccin Mocha" # any VHS theme works; try "Dracula", "Nord" +Set TypingSpeed 40ms +Set PlaybackSpeed 1.0 + +# --- hidden setup: isolated home + fast native renderer, then a clean screen --- +Hide +Type "export AGENT_TTY_HOME=$(mktemp -d) AGENT_TTY_RENDERER=libghostty-vt" Enter +Type "clear" Enter +Show + +Sleep 800ms +Type "# open a long-lived terminal session" Enter +Sleep 500ms +Type 'SID=$(agent-tty create --json --cols 72 --rows 18 -- bash | jq -r .result.sessionId)' Enter +Sleep 1200ms + +Type "# run a command inside it" Enter +Sleep 500ms +Type 'agent-tty run "$SID" "echo hello from agent-tty"' Enter +Sleep 1500ms + +Type "# wait for the screen — no sleeps, no grep" Enter +Sleep 500ms +Type 'agent-tty wait "$SID" --text "hello from agent-tty"' Enter +Sleep 1500ms + +Type "# inspect the rendered screen as text you can diff" Enter +Sleep 500ms +Type 'agent-tty snapshot "$SID" --format text' Enter +Sleep 2800ms + +Type "# screenshots, asciicasts and WebM export come from the same session" Enter +Sleep 1200ms + +# --- hidden teardown --- +Hide +Type 'agent-tty destroy "$SID" >/dev/null 2>&1' Enter +Show +Sleep 500ms + +# ----------------------------------------------------------------------------- +# ALTERNATIVE — dogfood it: record the loop with agent-tty itself, then convert. +# Drive the same create/run/wait/snapshot sequence, then: +# agent-tty record export "$SID" --format webm --out demo.webm +# ffmpeg -i demo.webm -vf "fps=12,scale=1200:-1:flags=lanczos" assets/hero.gif +# This makes the hero GIF literally the tool's own output ("recorded by the tool +# it documents"), at the cost of the Chromium-backed ghostty-web render path. +# ffmpeg isn't in mise's [tools] (it can't be cross-locked on Linux via conda); +# install it yourself for this path (brew install ffmpeg / apt-get install ffmpeg). diff --git a/assets/render-social-preview.mjs b/assets/render-social-preview.mjs new file mode 100644 index 0000000..e4f0e6e --- /dev/null +++ b/assets/render-social-preview.mjs @@ -0,0 +1,40 @@ +// Renders assets/social-preview.html -> assets/social-preview.png (OG card, 1200x630). +// Supersamples at 2x then downscales with `sips` (macOS) so text stays crisp at +// the recommended OG size. Usage: node assets/render-social-preview.mjs +import { chromium } from 'playwright'; +import { execFileSync } from 'node:child_process'; +import { dirname, join } from 'node:path'; +import { rmSync } from 'node:fs'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +const W = 1200; +const H = 630; +const dir = dirname(fileURLToPath(import.meta.url)); +const htmlPath = join(dir, 'social-preview.html'); +const outPath = join(dir, 'social-preview.png'); +const hiResPath = join(dir, 'social-preview@2x.png'); + +const browser = await chromium.launch(); +const page = await browser.newPage({ + viewport: { width: W, height: H }, + deviceScaleFactor: 2, // -> 2400x1260 supersample +}); +await page.goto(pathToFileURL(htmlPath).href); +await page.evaluate(() => document.fonts.ready); +await page.waitForTimeout(150); +await page.screenshot({ + path: hiResPath, + clip: { x: 0, y: 0, width: W, height: H }, +}); +await browser.close(); + +// Downscale 2400x1260 -> 1200x630 (sips is built into macOS). +execFileSync( + 'sips', + ['--resampleHeightWidth', String(H), String(W), hiResPath, '--out', outPath], + { + stdio: 'ignore', + }, +); +rmSync(hiResPath, { force: true }); +console.log(`wrote ${outPath} (${W}x${H})`); diff --git a/assets/social-preview-spec.md b/assets/social-preview-spec.md new file mode 100644 index 0000000..b9fc9bd --- /dev/null +++ b/assets/social-preview-spec.md @@ -0,0 +1,79 @@ +# Social preview (Open Graph) image spec + +This is the image GitHub shows when `github.com/coder/agent-tty` is shared on +Hacker News, X, Slack, LinkedIn, etc. The repo currently has **no custom image** +(`usesCustomOpenGraphImage: false`), so it falls back to GitHub's auto-generated +avatar+stats card. Replacing it is the single highest-leverage pre-launch task — +it's what people see _before_ they click. + +Target output: **`assets/social-preview.png`** (generated — see "How to produce" +below) → upload via **repo Settings → General → Social preview → Edit → Upload an +image**. + +## Hard specs + +| Property | Value | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Dimensions | **1200 × 630 px** (universal OG 1.91:1 — passes opengraph.xyz; GitHub also accepts it. GitHub's own rec is 1280×640, but 1200×630 is the safer cross-platform card for X/Slack/LinkedIn) | +| File size | **< 1 MB** (a flat dark bg + text exports well under this; run `pngquant` if needed) | +| Format | PNG, sRGB (JPG/GIF also accepted) | +| Min accepted | 640 × 320 px | + +**Safe area:** keep the wordmark and tagline inside a centered **~1120 × 500** +region (≈80 px side / ≈70 px top-bottom margins). X/LinkedIn/Facebook re-crop to +1.91:1, so anything near the edges can get clipped. + +## Layout + +``` +┌──────────────────────────────────────────────────────────────┐ +│ (dark terminal background — #11111b / #0d1117, flat) │ +│ │ +│ agent-tty ▏ ← optional │ +│ ───────── block cursor │ +│ Drive and inspect terminal sessions from the CLI — │ +│ reviewable snapshots, screenshots & recordings. │ +│ │ +│ $ agent-tty snapshot $SID --format text │ +│ ┌ hello from agent-tty ───────────────────┐ ← faux captured │ +│ │ user@host:~$ █ │ screen, dim │ +│ └──────────────────────────────────────────┘ │ +│ │ +│ github.com/coder/agent-tty Apache-2.0 · Ghostty VT │ +└──────────────────────────────────────────────────────────────┘ +``` + +## Copy (use verbatim — matches the README + repo description) + +- **Wordmark:** `agent-tty` +- **Tagline (one line):** `Drive and inspect terminal sessions from the CLI — reviewable snapshots, screenshots & recordings.` + - If it's too long at your font size, shorten to: `Scriptable terminal sessions with reviewable snapshots, screenshots & recordings.` +- **Footer:** `github.com/coder/agent-tty` · optional honest credit `Powered by Ghostty's VT engine` +- Do **not** put "for AI agents" in the image headline (saturated/risky per the launch research); the agent angle lives in the README body and your HN first comment. + +## Type & color + +- **Monospace throughout** (JetBrains Mono / Berkeley Mono / IBM Plex Mono / Geist Mono). It reads as an authentic terminal tool, not a marketing site. +- High contrast: light text (`#cdd6f4` / `#e6edf3`) on a dark base. One accent color max (e.g. a green `#a6e3a1` for the prompt `$`). +- Wordmark large (~96–120 px), tagline ~34–40 px, footer ~24 px. + +## Do / Don't + +- ✅ Flat dark terminal aesthetic, monospace, a real command + a snippet of captured screen. +- ✅ Let the _artifact_ (a text snapshot of a real screen) be the visual idea. +- ❌ Gradient hero blobs, neon glows, glassmorphism, "pulsing live" pills, emoji, 3D shapes, stock dev illustrations. These read as AI-generated "slop" and HN calls them out within minutes — the image must not undercut a launch built on "honest, inspectable tooling." + +## How to produce it + +**Implemented (HTML/CSS → Playwright screenshot):** edit [`social-preview.html`](./social-preview.html) and run `node assets/render-social-preview.mjs`. It renders at 2× and downscales with `sips` to a crisp 1200×630 PNG. This is the source of truth for the card. + +Other approaches if you'd rather start over: + +1. **Figma / design tool** — 1200×630 frame, paste the copy, export PNG. +2. **VHS still** — a one-frame `.tape` (`Output assets/social-preview.png`, `Set Width 1200`, `Set Height 630`, type the command + snapshot, no playback) gives a real captured screen as the card. + +## Verify before launch + +Paste the repo URL into (or just DM yourself the link +in Slack) and confirm the card renders with no clipped text. GitHub can take a +few minutes to refresh its cache after upload. diff --git a/assets/social-preview.html b/assets/social-preview.html new file mode 100644 index 0000000..aaaee6c --- /dev/null +++ b/assets/social-preview.html @@ -0,0 +1,111 @@ + + + + + + + + +
+
agent-tty_
+
+ Drive and inspect terminal sessions from the CLI —
+ reviewable snapshots, screenshots & recordings. +
+
$ npm install -g agent-tty
+ +
+ github.com/coder/agent-tty + Apache-2.0 · powered by Ghostty's VT engine +
+
+ + diff --git a/assets/social-preview.png b/assets/social-preview.png new file mode 100644 index 0000000..45fc98b Binary files /dev/null and b/assets/social-preview.png differ diff --git a/mise.lock b/mise.lock index 4fc8d77..215e719 100644 --- a/mise.lock +++ b/mise.lock @@ -1,5 +1,945 @@ # @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html +[conda-packages.macos-arm64."aom-3.9.1-h7bae524_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda" +checksum = "sha256:ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef" + +[conda-packages.macos-arm64."bzip2-1.0.8-hd037594_9"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda" +checksum = "sha256:540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df" + +[conda-packages.macos-arm64."ca-certificates-2026.5.20-hbd8a1cb_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda" +checksum = "sha256:9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b" + +[conda-packages.macos-arm64."cairo-1.18.4-he0f2337_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda" +checksum = "sha256:cde9b79ee206fe3ba6ca2dc5906593fb7a1350515f85b2a1135a4ce8ec1539e3" + +[conda-packages.macos-arm64."dav1d-1.2.1-hb547adb_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda" +checksum = "sha256:93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8" + +[conda-packages.macos-arm64."dbus-1.16.2-h3ff7a7c_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/dbus-1.16.2-h3ff7a7c_1.conda" +checksum = "sha256:a8207751ed261764061866880da38e4d3063e167178bfe85b6db9501432462ba" + +[conda-packages.macos-arm64."font-ttf-dejavu-sans-mono-2.37-hab24e00_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2" +checksum = "sha256:58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b" + +[conda-packages.macos-arm64."font-ttf-inconsolata-3.000-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2" +checksum = "sha256:c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c" + +[conda-packages.macos-arm64."font-ttf-source-code-pro-2.038-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2" +checksum = "sha256:00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139" + +[conda-packages.macos-arm64."font-ttf-ubuntu-0.83-h77eed37_3"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda" +checksum = "sha256:2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14" + +[conda-packages.macos-arm64."fontconfig-2.18.0-h2b252f5_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.0-h2b252f5_0.conda" +checksum = "sha256:938d18fca474d5a7ed716b88dbc4f962f9a44ac9f2fe29393d7d9d04ac6cbf15" + +[conda-packages.macos-arm64.fonts-conda-ecosystem-1-0] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2" +checksum = "sha256:a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61" + +[conda-packages.macos-arm64.fonts-conda-forge-1-hc364b38_1] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda" +checksum = "sha256:54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333" + +[conda-packages.macos-arm64."fribidi-1.0.16-hc919400_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda" +checksum = "sha256:d856dc6744ecfba78c5f7df3378f03a75c911aadac803fa2b41a583667b4b600" + +[conda-packages.macos-arm64."gdk-pixbuf-2.44.6-h4e57454_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.44.6-h4e57454_0.conda" +checksum = "sha256:07cbba4e12430de35ea608eb3006cf1f7f63832c4f89a081cd6f3872944c1aa6" + +[conda-packages.macos-arm64."glslang-16.3.0-h7cb4797_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/glslang-16.3.0-h7cb4797_0.conda" +checksum = "sha256:d5bb8e2373cb39d1404ef7dc8019e764b27180c8a0f88ba234a595dc330caabb" + +[conda-packages.macos-arm64."gmp-6.3.0-h7bae524_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda" +checksum = "sha256:76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd" + +[conda-packages.macos-arm64."graphite2-1.3.14-hec049ff_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda" +checksum = "sha256:c507ae9989dbea7024aa6feaebb16cbf271faac67ac3f0342ef1ab747c20475d" + +[conda-packages.macos-arm64."harfbuzz-14.2.0-h3103d1b_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.0-h3103d1b_0.conda" +checksum = "sha256:40ccd6a589c60a4cedb2f9921dfa60ea5845b5ce323477b042b6f90218b239f6" + +[conda-packages.macos-arm64."icu-78.3-hef89b57_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda" +checksum = "sha256:3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5" + +[conda-packages.macos-arm64."lame-3.100-h1a8c8d9_1003"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/lame-3.100-h1a8c8d9_1003.tar.bz2" +checksum = "sha256:f40ce7324b2cf5338b766d4cdb8e0453e4156a4f83c2f31bbfff750785de304c" + +[conda-packages.macos-arm64."lcms2-2.19.1-hdfa7624_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda" +checksum = "sha256:d589ff5294e42576563b22bdea0860cb80b0cbe0f3852836eddaadedf6eec4ef" + +[conda-packages.macos-arm64."lerc-4.1.0-h1eee2c3_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda" +checksum = "sha256:66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51" + +[conda-packages.macos-arm64."libabseil-20260107.1-cxx17_h2062a1b_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda" +checksum = "sha256:756611fbb8d2957a5b4635d9772bd8432cb6ddac05580a6284cca6fdc9b07fca" + +[conda-packages.macos-arm64."libass-0.17.4-hcbd7ca7_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libass-0.17.4-hcbd7ca7_0.conda" +checksum = "sha256:079f5fdf7aace970a0db91cd2cc493c754dfdc4520d422ecec43d2561021167a" + +[conda-packages.macos-arm64."libbrotlicommon-1.2.0-hc919400_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda" +checksum = "sha256:a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229" + +[conda-packages.macos-arm64."libbrotlidec-1.2.0-hc919400_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda" +checksum = "sha256:2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf" + +[conda-packages.macos-arm64."libbrotlienc-1.2.0-hc919400_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda" +checksum = "sha256:01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1" + +[conda-packages.macos-arm64."libcxx-22.1.6-h55c6f16_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.6-h55c6f16_0.conda" +checksum = "sha256:3e2f8ad32ddab88c5114b9aa2160f8c129f515df0e551d0d86ef5744446afdbd" + +[conda-packages.macos-arm64."libdeflate-1.25-hc11a715_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda" +checksum = "sha256:5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c" + +[conda-packages.macos-arm64."libdovi-3.3.2-h78f8ca3_4"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libdovi-3.3.2-h78f8ca3_4.conda" +checksum = "sha256:0eff0b03662d30b14b6f95a930fedf19948d45b05653389f59ae964ddf92ba9c" + +[conda-packages.macos-arm64."libexpat-2.8.1-hf6b4638_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_0.conda" +checksum = "sha256:3133fb6bfa871288b92c8b8752696686a841bf4ffe035aa3038033c9e15b738e" + +[conda-packages.macos-arm64."libffi-3.5.2-hcf2aa1b_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda" +checksum = "sha256:6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7" + +[conda-packages.macos-arm64."libfreetype-2.14.3-hce30654_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda" +checksum = "sha256:a047a2f238362a37d484f9620e8cba29f513a933cd9eb68571ad4b270d6f8f3e" + +[conda-packages.macos-arm64."libfreetype6-2.14.3-hdfa99f5_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda" +checksum = "sha256:ff764608e1f2839e95e2cf9b243681475f8778c36af7a42b3f78f476fdbb1dd3" + +[conda-packages.macos-arm64."libglib-2.88.1-ha08bb59_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda" +checksum = "sha256:3b32a7a710132d509f2ea38b2f0384414c863533e0fc7ac71b6a0763e4c67424" + +[conda-packages.macos-arm64."libhwloc-2.13.0-default_ha97f43a_1000"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libhwloc-2.13.0-default_ha97f43a_1000.conda" +checksum = "sha256:d47c3c030671d196ff1cdd343e93eb2ae0d7b665cb79f8164cc91488796db437" + +[conda-packages.macos-arm64."libhwy-1.4.0-ha332bbd_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda" +checksum = "sha256:4fcad3cbec60da940312e883b7866816517acc5f9baecfe9a778de57327a1b1b" + +[conda-packages.macos-arm64."libiconv-1.18-h23cfdf5_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda" +checksum = "sha256:de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03" + +[conda-packages.macos-arm64."libintl-0.25.1-h493aca8_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda" +checksum = "sha256:99d2cebcd8f84961b86784451b010f5f0a795ed1c08f1e7c76fbb3c22abf021a" + +[conda-packages.macos-arm64."libjpeg-turbo-3.1.4.1-h84a0fba_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda" +checksum = "sha256:17e035ae6a520ff6a6bb5dd93a4a7c3895891f4f9743bcb8c6ef607445a31cd0" + +[conda-packages.macos-arm64."libjxl-0.11.2-h934fa54_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda" +checksum = "sha256:948cf1370abb58e06a7c9554838c68672ef1d78e01c3fc4e62ccfc3072579645" + +[conda-packages.macos-arm64."liblzma-5.8.3-h8088a28_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda" +checksum = "sha256:34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e" + +[conda-packages.macos-arm64."libogg-1.3.5-h48c0fde_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libogg-1.3.5-h48c0fde_1.conda" +checksum = "sha256:28bd1fe20fe43da105da41b95ac201e95a1616126f287985df8e86ddebd1c3d8" + +[conda-packages.macos-arm64."libopenvino-2026.0.0-h3e6d54f_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-2026.0.0-h3e6d54f_1.conda" +checksum = "sha256:ffbd4a3c8540dfaddbdd68cf3073967a3c8faadd97d7df912f73734e53f9213e" + +[conda-packages.macos-arm64."libopenvino-arm-cpu-plugin-2026.0.0-h3e6d54f_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-arm-cpu-plugin-2026.0.0-h3e6d54f_1.conda" +checksum = "sha256:352ebc24805cb756ef11afa5c9606b3e19da99e434afc35cddc356538b5ec49d" + +[conda-packages.macos-arm64."libopenvino-auto-batch-plugin-2026.0.0-h2406d2e_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-batch-plugin-2026.0.0-h2406d2e_1.conda" +checksum = "sha256:1cbbf43149334ccf793f782bd0924e08e5952c667578ac33a33076a4ab54ad47" + +[conda-packages.macos-arm64."libopenvino-auto-plugin-2026.0.0-h2406d2e_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-plugin-2026.0.0-h2406d2e_1.conda" +checksum = "sha256:fa6c01a897ccc92998cae1e75ac65c68f311ad0834182801d5d3139ac307309f" + +[conda-packages.macos-arm64."libopenvino-hetero-plugin-2026.0.0-h85cbfa6_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-hetero-plugin-2026.0.0-h85cbfa6_1.conda" +checksum = "sha256:18e6b6d061d27049e2a34fbd1a633209294eb700aa7eee7a3d2877ce4d45888b" + +[conda-packages.macos-arm64."libopenvino-ir-frontend-2026.0.0-h85cbfa6_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-ir-frontend-2026.0.0-h85cbfa6_1.conda" +checksum = "sha256:166792875fe62f90a528a4931f29ea18cf74694469870e98c8772460f92fc653" + +[conda-packages.macos-arm64."libopenvino-onnx-frontend-2026.0.0-h41365f2_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-onnx-frontend-2026.0.0-h41365f2_1.conda" +checksum = "sha256:eb307ee1ad8eb47aa011d03d77995bfd1153b80893ab5880fd928093ad50cab4" + +[conda-packages.macos-arm64."libopenvino-paddle-frontend-2026.0.0-h41365f2_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-paddle-frontend-2026.0.0-h41365f2_1.conda" +checksum = "sha256:e3ca93158beac502b65256ae78736889e8b40184b0dc938a1b8136ae2a0c3a4d" + +[conda-packages.macos-arm64."libopenvino-pytorch-frontend-2026.0.0-hf6b4638_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-pytorch-frontend-2026.0.0-hf6b4638_1.conda" +checksum = "sha256:c694e5dc1bbb2ea876e65c8c33b148a24f56b5f7a60f8449ca62b159d9020709" + +[conda-packages.macos-arm64."libopenvino-tensorflow-frontend-2026.0.0-hc295da0_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-frontend-2026.0.0-hc295da0_1.conda" +checksum = "sha256:f680809aef09ca68d7446e3f1810ca3f3d9f744cbfe3a8d8ec9bd807f17d80fd" + +[conda-packages.macos-arm64."libopenvino-tensorflow-lite-frontend-2026.0.0-hf6b4638_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-lite-frontend-2026.0.0-hf6b4638_1.conda" +checksum = "sha256:3079cdc940a7e0b84376845accefd084f9a01c37af5901083ae47cc02fd5723d" + +[conda-packages.macos-arm64."libopus-1.6.1-h1a92334_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libopus-1.6.1-h1a92334_0.conda" +checksum = "sha256:5c95a5f7712f543c59083e62fc3a95efec8b7f3773fbf4542ad1fb87fbf51ff4" + +[conda-packages.macos-arm64."libplacebo-7.360.1-h176d363_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libplacebo-7.360.1-h176d363_0.conda" +checksum = "sha256:e9b39572e2feaef496167ba9f4ab75ed3afa4c16c3aeb0bb8c71adc515a74536" + +[conda-packages.macos-arm64."libpng-1.6.58-h132b30e_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda" +checksum = "sha256:66eae34546df1f098a67064970c92aa14ae7a7505091889e00468294d2882c36" + +[conda-packages.macos-arm64."libprotobuf-6.33.5-h2d4b707_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h2d4b707_1.conda" +checksum = "sha256:416c2244999d678dc9a4d8c3472336f8f754676125605399cf6e43956fa3d18b" + +[conda-packages.macos-arm64."librsvg-2.62.2-he8aa2a2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.2-he8aa2a2_0.conda" +checksum = "sha256:17c1544598dd50840e74ef17ea5b4fd27408140827f3f2c17c052086d4036a88" + +[conda-packages.macos-arm64."libtiff-4.7.1-h4030677_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda" +checksum = "sha256:e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f" + +[conda-packages.macos-arm64."libusb-1.0.29-hbc156a2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libusb-1.0.29-hbc156a2_0.conda" +checksum = "sha256:5eee9a2bf359e474d4548874bcfc8d29ebad0d9ba015314439c256904e40aaad" + +[conda-packages.macos-arm64."libvorbis-1.3.7-h81086ad_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libvorbis-1.3.7-h81086ad_2.conda" +checksum = "sha256:95768e4eceaffb973081fd986d03da15d93aa10609ed202e6fd5ca1e490a3dce" + +[conda-packages.macos-arm64."libvpx-1.15.2-ha759d40_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libvpx-1.15.2-ha759d40_0.conda" +checksum = "sha256:d21729b04fe101d1b2f8cdd607faacf1070abba3702db699787a3fe026eeaca6" + +[conda-packages.macos-arm64."libvulkan-loader-1.4.341.0-h3feff0a_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libvulkan-loader-1.4.341.0-h3feff0a_0.conda" +checksum = "sha256:d2790dafc9149b1acd45b9033d02cfa3f3e9ee5af97bd61e0a5718c414a0a135" + +[conda-packages.macos-arm64."libwebp-base-1.6.0-h07db88b_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda" +checksum = "sha256:a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd" + +[conda-packages.macos-arm64."libxml2-16-2.15.3-h5ef1a60_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda" +checksum = "sha256:ff75b84cdb9e8d123db2fa694a8ac2c2059516b6cbc98ac21fb68e235d0fd354" + +[conda-packages.macos-arm64."libxml2-2.15.3-h5654f7c_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda" +checksum = "sha256:2fe1d8de0854342ae9cabe408b476935f82f5636e153b3b497456264dc8ff3a1" + +[conda-packages.macos-arm64."libzlib-1.3.2-h8088a28_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda" +checksum = "sha256:361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05" + +[conda-packages.macos-arm64."openh264-2.6.0-hb5b2745_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/openh264-2.6.0-hb5b2745_0.conda" +checksum = "sha256:fbea05722a8e8abfb41c989e2cec7ba6597eabe27cb6b88ff0b6443a5abb9069" + +[conda-packages.macos-arm64."openssl-3.6.2-hd24854e_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda" +checksum = "sha256:c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea" + +[conda-packages.macos-arm64."pango-1.56.4-hf80efc4_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.56.4-hf80efc4_1.conda" +checksum = "sha256:b57c59cf5abb06d407b3a79017b990ca5bfb10c15a10c62fc29e113f2b12d9a9" + +[conda-packages.macos-arm64."pcre2-10.47-h30297fc_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda" +checksum = "sha256:5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba" + +[conda-packages.macos-arm64."pixman-0.46.4-h81086ad_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda" +checksum = "sha256:29c9b08a9b8b7810f9d4f159aecfd205fce051633169040005c0b7efad4bc718" + +[conda-packages.macos-arm64."pugixml-1.15-hd3d436d_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/pugixml-1.15-hd3d436d_0.conda" +checksum = "sha256:5ad8d036040b095f85d23c70624d3e5e1e4c00bc5cea97831542f2dcae294ec9" + +[conda-packages.macos-arm64."sdl2-2.32.56-h248ca61_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/sdl2-2.32.56-h248ca61_0.conda" +checksum = "sha256:704c5cae4bc839a18c70cbf3387d7789f1902828c79c6ddabcd34daf594f4103" + +[conda-packages.macos-arm64."sdl3-3.4.8-h6fa9c73_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/sdl3-3.4.8-h6fa9c73_0.conda" +checksum = "sha256:0c15a7f3f46d175c70ca7b032cee3eee9ef602492688a79a6e734f2efc466dad" + +[conda-packages.macos-arm64."shaderc-2026.2-hf31e910_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/shaderc-2026.2-hf31e910_0.conda" +checksum = "sha256:97870b15002b9e78a169681655a148049cd1763d4062114155268e84b3ef8793" + +[conda-packages.macos-arm64."snappy-1.2.2-hada39a4_1"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda" +checksum = "sha256:cb9305ede19584115f43baecdf09a3866bfcd5bcca0d9e527bd76d9a1dbe2d8d" + +[conda-packages.macos-arm64."spirv-tools-2026.1-h4ddebb9_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/spirv-tools-2026.1-h4ddebb9_0.conda" +checksum = "sha256:8c7b7b1f7a42f1a878f08e44ee94023285eb51ba8e5042f28d61dce305b10242" + +[conda-packages.macos-arm64."svt-av1-4.0.1-h0cb729a_0"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda" +checksum = "sha256:bdef3c1c4d2a396ad4f7dc64c5e9a02d4c5a21ff93ed07a33e49574de5d2d18d" + +[conda-packages.macos-arm64."tbb-2023.0.0-he0260a5_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-he0260a5_2.conda" +checksum = "sha256:6f72a2984052444b9381020fa329b83dace95f335573dc21199f1b1d1a5f5473" + +[conda-packages.macos-arm64."x264-1!164.3095-h57fd34a_2"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/x264-1!164.3095-h57fd34a_2.tar.bz2" +checksum = "sha256:debdf60bbcfa6a60201b12a1d53f36736821db281a28223a09e0685edcce105a" + +[conda-packages.macos-arm64."x265-3.5-hbc6ce65_3"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2" +checksum = "sha256:2fed6987dba7dee07bd9adc1a6f8e6c699efb851431bcb6ebad7de196e87841d" + +[conda-packages.macos-arm64."zstd-1.5.7-hbf9d68e_6"] +url = "https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda" +checksum = "sha256:9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9" + +[conda-packages.macos-x64."aom-3.9.1-hf036a51_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda" +checksum = "sha256:3032f2f55d6eceb10d53217c2a7f43e1eac83603d91e21ce502e8179e63a75f5" + +[conda-packages.macos-x64."bzip2-1.0.8-h500dc9f_9"] +url = "https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda" +checksum = "sha256:9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42" + +[conda-packages.macos-x64."ca-certificates-2026.5.20-hbd8a1cb_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda" +checksum = "sha256:9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b" + +[conda-packages.macos-x64."cairo-1.18.4-h7656bdc_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/cairo-1.18.4-h7656bdc_1.conda" +checksum = "sha256:88e7e1efb6a0f6b1477e617338e0ed3d27d4572a3283f8341ce6143b7118e31a" + +[conda-packages.macos-x64."dav1d-1.2.1-h0dc2134_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda" +checksum = "sha256:ec71a835866b42e946cd2039a5f7a6458851a21890d315476f5e66790ac11c96" + +[conda-packages.macos-x64."dbus-1.16.2-h6e7f9a9_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/dbus-1.16.2-h6e7f9a9_1.conda" +checksum = "sha256:80ea0a20236ecb7006f7a89235802a34851eaac2f7f4323ca7acc094bcf7f372" + +[conda-packages.macos-x64."font-ttf-dejavu-sans-mono-2.37-hab24e00_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2" +checksum = "sha256:58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b" + +[conda-packages.macos-x64."font-ttf-inconsolata-3.000-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2" +checksum = "sha256:c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c" + +[conda-packages.macos-x64."font-ttf-source-code-pro-2.038-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2" +checksum = "sha256:00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139" + +[conda-packages.macos-x64."font-ttf-ubuntu-0.83-h77eed37_3"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda" +checksum = "sha256:2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14" + +[conda-packages.macos-x64."fontconfig-2.18.0-h7a4440b_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.18.0-h7a4440b_0.conda" +checksum = "sha256:4495ee28d8c15c202a792ade053c9df8bfda81cdf50e78357edb536d6477c44f" + +[conda-packages.macos-x64.fonts-conda-ecosystem-1-0] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2" +checksum = "sha256:a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61" + +[conda-packages.macos-x64.fonts-conda-forge-1-hc364b38_1] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda" +checksum = "sha256:54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333" + +[conda-packages.macos-x64."fribidi-1.0.16-h8616949_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/fribidi-1.0.16-h8616949_0.conda" +checksum = "sha256:53dd0a6c561cf31038633aaa0d52be05da1f24e86947f06c4e324606c72c7413" + +[conda-packages.macos-x64."gdk-pixbuf-2.44.6-hae309b2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/gdk-pixbuf-2.44.6-hae309b2_0.conda" +checksum = "sha256:27a223201fd86f85284c7e218121ac9ecf0be16e0a73eea42776701c8c90c50b" + +[conda-packages.macos-x64."glslang-16.3.0-he78e680_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/glslang-16.3.0-he78e680_0.conda" +checksum = "sha256:7daad6c8e66ab4ced78305c3c55cd8fdfd4f694b1912b94e8420ae3993acd2df" + +[conda-packages.macos-x64."gmp-6.3.0-hf036a51_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda" +checksum = "sha256:75aa5e7a875afdcf4903b7dc98577672a3dc17b528ac217b915f9528f93c85fc" + +[conda-packages.macos-x64."graphite2-1.3.14-h21dd04a_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/graphite2-1.3.14-h21dd04a_2.conda" +checksum = "sha256:c356eb7a42775bd2bae243d9987436cd1a442be214b1580251bb7fdc136d804b" + +[conda-packages.macos-x64."harfbuzz-14.2.0-hf0bc557_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-14.2.0-hf0bc557_0.conda" +checksum = "sha256:ab070b8961569fbdd3e414bee89887f1ca97522c73afb0fa2f055ad775c7dd20" + +[conda-packages.macos-x64."icu-78.3-h25d91c4_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda" +checksum = "sha256:1294117122d55246bb83ad5b589e2a031aacdf2d0b1f99fd338aa4394f881735" + +[conda-packages.macos-x64."lame-3.100-hb7f2c08_1003"] +url = "https://conda.anaconda.org/conda-forge/osx-64/lame-3.100-hb7f2c08_1003.tar.bz2" +checksum = "sha256:0f943b08abb4c748d73207594321b53bad47eea3e7d06b6078e0f6c59ce6771e" + +[conda-packages.macos-x64."lcms2-2.19.1-h5ea7634_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_0.conda" +checksum = "sha256:af14a2021a151b3bd98e5b40db0762b35ff54e57fa8c1968cca728cef8d13a8a" + +[conda-packages.macos-x64."lerc-4.1.0-h35c7297_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/lerc-4.1.0-h35c7297_0.conda" +checksum = "sha256:f918716c71c8bebbc0c40e1050878aa512fea92c1d17c363ca35650bc60f6c35" + +[conda-packages.macos-x64."libabseil-20260107.1-cxx17_h7ed6875_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda" +checksum = "sha256:2b4ff36082ddfbacc47ac6e11d4dd9f3403cd109ce8d7f0fbee0cdd47cdef013" + +[conda-packages.macos-x64."libass-0.17.4-h87c4fc2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libass-0.17.4-h87c4fc2_0.conda" +checksum = "sha256:7ddcb016d016919f1735fd2c6b826bb4d7dabd995d053b748d41ef47343fe001" + +[conda-packages.macos-x64."libbrotlicommon-1.2.0-h8616949_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda" +checksum = "sha256:4c19b211b3095f541426d5a9abac63e96a5045e509b3d11d4f9482de53efe43b" + +[conda-packages.macos-x64."libbrotlidec-1.2.0-h8616949_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda" +checksum = "sha256:729158be90ae655a4e0427fe4079767734af1f9b69ff58cf94ca6e8d4b3eb4b7" + +[conda-packages.macos-x64."libbrotlienc-1.2.0-h8616949_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda" +checksum = "sha256:8ece7b41b6548d6601ac2c2cd605cf2261268fc4443227cc284477ed23fbd401" + +[conda-packages.macos-x64."libcxx-22.1.6-h19cb2f5_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.6-h19cb2f5_0.conda" +checksum = "sha256:6d60efb63fe4d0299526fcb26e06de1933de55c36fc2ae5a1478f1aa734604bb" + +[conda-packages.macos-x64."libdeflate-1.25-h517ebb2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda" +checksum = "sha256:025f8b1e85dd8254e0ca65f011919fb1753070eb507f03bca317871a884d24de" + +[conda-packages.macos-x64."libdovi-3.3.2-h59a3c7f_4"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libdovi-3.3.2-h59a3c7f_4.conda" +checksum = "sha256:74e5c45cb86449bd7141e6be6d38ad5e7b11286a18f7adf338c2a763ade47add" + +[conda-packages.macos-x64."libexpat-2.8.1-hcc62823_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_0.conda" +checksum = "sha256:460afe7ba0882e6d2fcc0ad1568dce27025110ec09c2b9ce9e3b49d61e52ce6b" + +[conda-packages.macos-x64."libffi-3.5.2-hd1f9c09_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda" +checksum = "sha256:951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6" + +[conda-packages.macos-x64."libfreetype-2.14.3-h694c41f_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_0.conda" +checksum = "sha256:b5daa4cee3beb98a0317e81a20aa507b9f897a9e21b11fe0b2e32852e372f746" + +[conda-packages.macos-x64."libfreetype6-2.14.3-h58fbd8d_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.3-h58fbd8d_0.conda" +checksum = "sha256:9d34b5b2be6ebdd3bcd9e21d6598d493afce4d3fcd2d419f3356022cb4d746fd" + +[conda-packages.macos-x64."libglib-2.88.1-hf28f236_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda" +checksum = "sha256:9e10d37f49b4efef3426ac323dd8cec88a48df57d49e335d5aef8eac08ea9226" + +[conda-packages.macos-x64."libhwloc-2.13.0-default_h4e3125e_1000"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libhwloc-2.13.0-default_h4e3125e_1000.conda" +checksum = "sha256:8e051b990da280ca6eca2f025640572459a0ddfa2b3b71a113e4d14b4277aa33" + +[conda-packages.macos-x64."libhwy-1.4.0-hca42a69_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.4.0-hca42a69_0.conda" +checksum = "sha256:fb82a974f5bc029963665a77a0d669cacecfd067e1f3b32fe427d806ec21d52b" + +[conda-packages.macos-x64."libiconv-1.18-h57a12c2_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda" +checksum = "sha256:a1c8cecdf9966921e13f0ae921309a1f415dfbd2b791f2117cf7e8f5e61a48b6" + +[conda-packages.macos-x64."libintl-0.25.1-h3184127_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libintl-0.25.1-h3184127_1.conda" +checksum = "sha256:8c352744517bc62d24539d1ecc813b9fdc8a785c780197c5f0b84ec5b0dfe122" + +[conda-packages.macos-x64."libjpeg-turbo-3.1.4.1-ha1e9b39_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda" +checksum = "sha256:6b809d8acb6b97bbb1a858eb4ba7b7163c67257b6c3f199dd9d1e0751f4c5b18" + +[conda-packages.macos-x64."libjxl-0.11.2-h473410d_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.2-h473410d_1.conda" +checksum = "sha256:5c59a02fcb345c49ef8bdd5e1889de8aa918bedd95917f9805d20659cec65da1" + +[conda-packages.macos-x64."liblzma-5.8.3-hbb4bfdb_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda" +checksum = "sha256:d9e2006051529aec5578c6efeb13bb6a7200a014b2d5a77a579e83a8049d5f3c" + +[conda-packages.macos-x64."libogg-1.3.5-he3325bb_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libogg-1.3.5-he3325bb_1.conda" +checksum = "sha256:26691d40c70e83d3955a8daaee713aa7d087aa351c5a1f43786bbb0e871f29da" + +[conda-packages.macos-x64."libopenvino-2026.0.0-hb00a3bc_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-2026.0.0-hb00a3bc_1.conda" +checksum = "sha256:5b7438c6e51cfda96081777fa9eeb912e1cfa8ae347805623ae1fe33c8283b09" + +[conda-packages.macos-x64."libopenvino-auto-batch-plugin-2026.0.0-hb282e6e_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-auto-batch-plugin-2026.0.0-hb282e6e_1.conda" +checksum = "sha256:74449b53eddf09e3f5ac77d0d63c295408693eb35c2f3f06497739228c6fd43e" + +[conda-packages.macos-x64."libopenvino-auto-plugin-2026.0.0-hb282e6e_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-auto-plugin-2026.0.0-hb282e6e_1.conda" +checksum = "sha256:7f6d0e5c59355d26349bcda3d6f93e87d80c4558c8d3a250c46828043be7d142" + +[conda-packages.macos-x64."libopenvino-hetero-plugin-2026.0.0-hdd33d0b_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-hetero-plugin-2026.0.0-hdd33d0b_1.conda" +checksum = "sha256:80f35bd1d5bb1e5576d21033dc45fd9bb4851b3c83a6fd038513e5ae2f5f9aea" + +[conda-packages.macos-x64."libopenvino-intel-cpu-plugin-2026.0.0-hb00a3bc_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-intel-cpu-plugin-2026.0.0-hb00a3bc_1.conda" +checksum = "sha256:50a2239be28a1d25b2bfdb9db8544af7757ac5a7bfb03237e182a433540a47ac" + +[conda-packages.macos-x64."libopenvino-ir-frontend-2026.0.0-hdd33d0b_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-ir-frontend-2026.0.0-hdd33d0b_1.conda" +checksum = "sha256:3a11682b364affb7c9ef6d12834b58a5ca3062ab685667382273770a03a29e07" + +[conda-packages.macos-x64."libopenvino-onnx-frontend-2026.0.0-h4178b9d_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-onnx-frontend-2026.0.0-h4178b9d_1.conda" +checksum = "sha256:1ad9ceacfe4bb1b33ef5b233c68b445d00052972c5798a21576d29f76aa5cb4b" + +[conda-packages.macos-x64."libopenvino-paddle-frontend-2026.0.0-h4178b9d_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-paddle-frontend-2026.0.0-h4178b9d_1.conda" +checksum = "sha256:7156655d855ea7c2a58fbfa8fe691cf9dcca546027fec360d8f9651ad15aa393" + +[conda-packages.macos-x64."libopenvino-pytorch-frontend-2026.0.0-hcc62823_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-pytorch-frontend-2026.0.0-hcc62823_1.conda" +checksum = "sha256:b2488eb49b1b33bbe2a2ae4b544f4e816564ace190b15d69f81e47ed9c476591" + +[conda-packages.macos-x64."libopenvino-tensorflow-frontend-2026.0.0-hc17a88c_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-tensorflow-frontend-2026.0.0-hc17a88c_1.conda" +checksum = "sha256:195cc0ffc34f4f5d1d0d05c52c312755224b068b3103bef728a50f50573dee26" + +[conda-packages.macos-x64."libopenvino-tensorflow-lite-frontend-2026.0.0-hcc62823_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hcc62823_1.conda" +checksum = "sha256:53a85cb10d8add9072b8a38d8cb299a0c2cbc452aba4be16099d33cf8bef5570" + +[conda-packages.macos-x64."libopus-1.6.1-hc6ced15_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libopus-1.6.1-hc6ced15_0.conda" +checksum = "sha256:14389effc1a614456cfe013e4b34e0431f28c5e0047bb6fc80b7dbdab3df4d25" + +[conda-packages.macos-x64."libplacebo-7.351.0-he17f467_3"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libplacebo-7.351.0-he17f467_3.conda" +checksum = "sha256:bf83d4df6edb2da98cf00f79c8afb7b728e9ae12f72456671e854473b9ac2737" + +[conda-packages.macos-x64."libpng-1.6.58-he930e7c_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.58-he930e7c_0.conda" +checksum = "sha256:a669b22978e546484d18d99a210801b1823360a266d7035c713d8d1facd035f7" + +[conda-packages.macos-x64."libprotobuf-6.33.5-hff14b61_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.33.5-hff14b61_1.conda" +checksum = "sha256:c511b4e8026c94b152031a9ee410583991b4a610ebbb1b86992724c37d9abf50" + +[conda-packages.macos-x64."librsvg-2.62.2-h7321050_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/librsvg-2.62.2-h7321050_0.conda" +checksum = "sha256:891a5c97cf7f1795f5e480c9f6c50f4758a77695c5e649809da69d98edc61f87" + +[conda-packages.macos-x64."libtiff-4.7.1-ha0a348c_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda" +checksum = "sha256:e53424c34147301beae2cd9223ebf593720d94c038b3f03cacd0535e12c9668e" + +[conda-packages.macos-x64."libusb-1.0.29-h2287256_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libusb-1.0.29-h2287256_0.conda" +checksum = "sha256:b46c1c71d8be2d19615a10eaa997b3547848d1aee25a7e9486ad1ca8d61626a7" + +[conda-packages.macos-x64."libvorbis-1.3.7-ha059160_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libvorbis-1.3.7-ha059160_2.conda" +checksum = "sha256:7b79c0e867db70c66e57ea0abf03ea940070ed8372289d6dc5db7ab59e30acc1" + +[conda-packages.macos-x64."libvpx-1.15.2-heffb93a_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libvpx-1.15.2-heffb93a_0.conda" +checksum = "sha256:e82f4e3e40e1d31eaecda27970bace1f13037c39ff65c043fc451a07defeddce" + +[conda-packages.macos-x64."libvulkan-loader-1.4.341.0-ha6bc089_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libvulkan-loader-1.4.341.0-ha6bc089_0.conda" +checksum = "sha256:ce9bc992ffffdefbde5f7977b0a3ad9036650f8323611e4024908755891674e0" + +[conda-packages.macos-x64."libwebp-base-1.6.0-hb807250_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda" +checksum = "sha256:00dbfe574b5d9b9b2b519acb07545380a6bc98d1f76a02695be4995d4ec91391" + +[conda-packages.macos-x64."libxml2-16-2.15.3-h7a90416_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.3-h7a90416_0.conda" +checksum = "sha256:437f003e299d77403db42d17e532d686236f357ac5c3d6bf466558c697902597" + +[conda-packages.macos-x64."libxml2-2.15.3-h953d39d_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.3-h953d39d_0.conda" +checksum = "sha256:24248928e63b5de45012c8ad3fd6b350ae1fe2fc355613bb89ee5f0a35835bea" + +[conda-packages.macos-x64."libzlib-1.3.2-hbb4bfdb_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda" +checksum = "sha256:4c6da089952b2d70150c74234679d6f7ac04f4a98f9432dec724968f912691e7" + +[conda-packages.macos-x64."openh264-2.6.0-h4883158_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/openh264-2.6.0-h4883158_0.conda" +checksum = "sha256:a6d734ddbfed9b6b972e7564f5d5eeaab9db2ba128ef92677abd11d36192ff2f" + +[conda-packages.macos-x64."openssl-3.6.2-hc881268_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda" +checksum = "sha256:334fd49ea31b99114f5afb1ec44555dc8c90640648302a4f8f838ee345d1ec50" + +[conda-packages.macos-x64."pango-1.56.4-hf280016_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/pango-1.56.4-hf280016_1.conda" +checksum = "sha256:c1150e6a405985b25830c18f896d5e89b9777ef7e420bc0b1d88634f9a614769" + +[conda-packages.macos-x64."pcre2-10.47-h13923f0_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda" +checksum = "sha256:8d64a9d36073346542e5ea042ef8207a45a0069a2e65ce3323ee3146db78134c" + +[conda-packages.macos-x64."pixman-0.46.4-ha059160_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/pixman-0.46.4-ha059160_1.conda" +checksum = "sha256:ff8b679079df25aa3ed5daf3f4e3a9c7ee79e7d4b2bd8a21de0f8e7ec7207806" + +[conda-packages.macos-x64."pugixml-1.15-h46091d4_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/pugixml-1.15-h46091d4_0.conda" +checksum = "sha256:d22fd205d2db21c835e233c30e91e348735e18418c35327b0406d2d917e39a90" + +[conda-packages.macos-x64."sdl2-2.32.56-h53ec75d_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/sdl2-2.32.56-h53ec75d_0.conda" +checksum = "sha256:3f64f2cabdfe2f4ed8df6adf26a86bd9db07380cb8fa28d18a80040cc8b8b7d9" + +[conda-packages.macos-x64."sdl3-3.4.8-hf9078ff_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/sdl3-3.4.8-hf9078ff_0.conda" +checksum = "sha256:48f52ad61d8d5b0fc59643fd079a83f4b8c58f02dadd3a0454fdaf44c9fcc477" + +[conda-packages.macos-x64."shaderc-2026.2-hce4445a_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/shaderc-2026.2-hce4445a_0.conda" +checksum = "sha256:53b067144e8eb8393c27d56c13fc4164bf984a55ff11b7f12c1c5b7f4496409f" + +[conda-packages.macos-x64."snappy-1.2.2-h01f5ddf_1"] +url = "https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda" +checksum = "sha256:1525e6d8e2edf32dabfe2a8e2fc8bf2df81c5ef9f0b5374a3d4ccfa672bfd949" + +[conda-packages.macos-x64."spirv-tools-2026.1-h06b67a2_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/spirv-tools-2026.1-h06b67a2_0.conda" +checksum = "sha256:88a446dd143d9d318343fa2c92e67b6cbefd0d48b71693aacb3f2dcba6a4eaf3" + +[conda-packages.macos-x64."svt-av1-4.0.1-h991f03e_0"] +url = "https://conda.anaconda.org/conda-forge/osx-64/svt-av1-4.0.1-h991f03e_0.conda" +checksum = "sha256:5f8c150f558437364bfe6dade1a81cf1b3fe8ba291d8d8db01f889c32a310f08" + +[conda-packages.macos-x64."tbb-2023.0.0-he3dc2fa_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/tbb-2023.0.0-he3dc2fa_2.conda" +checksum = "sha256:f57b374fa5bbb1823a9e1b7e4a9db044c42964313c59d4c652b948f20b55d1a0" + +[conda-packages.macos-x64."x264-1!164.3095-h775f41a_2"] +url = "https://conda.anaconda.org/conda-forge/osx-64/x264-1!164.3095-h775f41a_2.tar.bz2" +checksum = "sha256:de611da29f4ed0733a330402e163f9260218e6ba6eae593a5f945827d0ee1069" + +[conda-packages.macos-x64."x265-3.5-hbb4e6a2_3"] +url = "https://conda.anaconda.org/conda-forge/osx-64/x265-3.5-hbb4e6a2_3.tar.bz2" +checksum = "sha256:6b6a57710192764d0538f72ea1ccecf2c6174a092e0bc76d790f8ca36bbe90e4" + +[conda-packages.macos-x64."zstd-1.5.7-h3eecb57_6"] +url = "https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda" +checksum = "sha256:47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f" + +[conda-packages.windows-x64."aom-3.9.1-he0c23c2_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda" +checksum = "sha256:0524d0c0b61dacd0c22ac7a8067f977b1d52380210933b04141f5099c5b6fec7" + +[conda-packages.windows-x64."bzip2-1.0.8-h0ad9c76_9"] +url = "https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda" +checksum = "sha256:76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902" + +[conda-packages.windows-x64."ca-certificates-2026.5.20-h4c7d964_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-h4c7d964_0.conda" +checksum = "sha256:86981d764e4ea1883409d30447ff9da46127426d31a63df08315aaded768e652" + +[conda-packages.windows-x64."cairo-1.18.4-h477c42c_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda" +checksum = "sha256:9ee4ad706c5d3e1c6c469785d60e3c2b263eec569be0eac7be33fbaef978bccc" + +[conda-packages.windows-x64."dav1d-1.2.1-hcfcfb64_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda" +checksum = "sha256:2aa2083c9c186da7d6f975ccfbef654ed54fff27f4bc321dbcd12cee932ec2c4" + +[conda-packages.windows-x64."font-ttf-dejavu-sans-mono-2.37-hab24e00_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2" +checksum = "sha256:58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b" + +[conda-packages.windows-x64."font-ttf-inconsolata-3.000-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2" +checksum = "sha256:c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c" + +[conda-packages.windows-x64."font-ttf-source-code-pro-2.038-h77eed37_0"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2" +checksum = "sha256:00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139" + +[conda-packages.windows-x64."font-ttf-ubuntu-0.83-h77eed37_3"] +url = "https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda" +checksum = "sha256:2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14" + +[conda-packages.windows-x64."fontconfig-2.18.0-hd47e2ca_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.0-hd47e2ca_0.conda" +checksum = "sha256:b1bd6a9a15517d32ffa3165f3562808c6b02319ffed0b49d39a7d15381fb0527" + +[conda-packages.windows-x64.fonts-conda-ecosystem-1-0] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2" +checksum = "sha256:a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61" + +[conda-packages.windows-x64.fonts-conda-forge-1-hc364b38_1] +url = "https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda" +checksum = "sha256:54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333" + +[conda-packages.windows-x64."fribidi-1.0.16-hfd05255_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda" +checksum = "sha256:15011071ee56c216ffe276c8d734427f1f893f275ef733f728d13f610ed89e6e" + +[conda-packages.windows-x64."gdk-pixbuf-2.44.6-h1f5b9c4_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.6-h1f5b9c4_0.conda" +checksum = "sha256:3b8a4bdb183b3b9b70caa91498680add15fb70678ec2a21391e6860c5dfed3e7" + +[conda-packages.windows-x64."glslang-16.3.0-h294ba9c_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda" +checksum = "sha256:d80276b89d8aeab6ff0d8d7d4b9af336b368fc0b8fa28ea8cde6f6f2aa07bacf" + +[conda-packages.windows-x64."graphite2-1.3.14-hac47afa_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda" +checksum = "sha256:5f1714b07252f885a62521b625898326ade6ca25fbc20727cfe9a88f68a54bfd" + +[conda-packages.windows-x64."harfbuzz-14.2.0-h5a1b470_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.0-h5a1b470_0.conda" +checksum = "sha256:82abc468768c5130b45e4025fe289e0c84ea015d7fa23059503da212c89097cb" + +[conda-packages.windows-x64."icu-78.3-h637d24d_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda" +checksum = "sha256:1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4" + +[conda-packages.windows-x64."lame-3.100-hcfcfb64_1003"] +url = "https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2" +checksum = "sha256:824988a396b97bb9138823a1b3aabd8326e06da5834b3011253d72bb45fd3a88" + +[conda-packages.windows-x64."lerc-4.1.0-hd936e49_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda" +checksum = "sha256:45df58fca800b552b17c3914cc9ab0d55a82c5172d72b5c44a59c710c06c5473" + +[conda-packages.windows-x64."libbrotlicommon-1.2.0-hfd05255_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda" +checksum = "sha256:5097303c2fc8ebf9f9ea9731520aa5ce4847d0be41764edd7f6dee2100b82986" + +[conda-packages.windows-x64."libbrotlidec-1.2.0-hfd05255_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda" +checksum = "sha256:3239ce545cf1c32af6fffb7fc7c75cb1ef5b6ea8221c66c85416bb2d46f5cccb" + +[conda-packages.windows-x64."libbrotlienc-1.2.0-hfd05255_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda" +checksum = "sha256:3226df6b7df98734440739f75527d585d42ca2bfe912fbe8d1954c512f75341a" + +[conda-packages.windows-x64."libdeflate-1.25-h51727cc_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda" +checksum = "sha256:834e4881a18b690d5ec36f44852facd38e13afe599e369be62d29bd675f107ee" + +[conda-packages.windows-x64."libexpat-2.8.1-hac47afa_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_0.conda" +checksum = "sha256:a65e518c20d1482182bc0f1f6dd5d992f25ca44c3b32307be39ae8310db8f060" + +[conda-packages.windows-x64."libffi-3.5.2-h3d046cb_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda" +checksum = "sha256:59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190" + +[conda-packages.windows-x64."libfreetype-2.14.3-h57928b3_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_0.conda" +checksum = "sha256:71fae9ae05563ceec70adceb7bc66faa326a81a6590a8aac8a5074019070a2d8" + +[conda-packages.windows-x64."libfreetype6-2.14.3-hdbac1cb_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_0.conda" +checksum = "sha256:497e9ab7c80f579e1b2850523740d6a543b8020f6b43be6bd6e83b3a6fb7fb32" + +[conda-packages.windows-x64."libglib-2.88.1-h7ce1215_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda" +checksum = "sha256:f61277e224e9889c221bb2eac0f57d5aeeb82fc45d3dc326957d251c97444f7c" + +[conda-packages.windows-x64."libhwy-1.4.0-h172a326_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda" +checksum = "sha256:4b45bf59ee46d3c746272c27651da9ce709fda4eee8536c7424acea60d0e2ad0" + +[conda-packages.windows-x64."libiconv-1.18-hc1393d2_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda" +checksum = "sha256:0dcdb1a5f01863ac4e8ba006a8b0dc1a02d2221ec3319b5915a1863254d7efa7" + +[conda-packages.windows-x64."libintl-0.22.5-h5728263_3"] +url = "https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda" +checksum = "sha256:c7e4600f28bcada8ea81456a6530c2329312519efcf0c886030ada38976b0511" + +[conda-packages.windows-x64."libjpeg-turbo-3.1.4.1-hfd05255_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda" +checksum = "sha256:698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d" + +[conda-packages.windows-x64."libjxl-0.11.2-h932607e_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-h932607e_1.conda" +checksum = "sha256:4715e22c602526c85da09f73865676add67e0995a944b821fbff84547a9db533" + +[conda-packages.windows-x64."liblzma-5.8.3-hfd05255_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda" +checksum = "sha256:d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1" + +[conda-packages.windows-x64."libogg-1.3.5-h2466b09_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda" +checksum = "sha256:c63e5fb169dbd192aacdcee6e37235407f106b8ca9c9036942a25e0366cbc73c" + +[conda-packages.windows-x64."libopus-1.6.1-h6a83c73_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda" +checksum = "sha256:c3678f111866235b44fa65265966abae7d90b6387178f1459afaedcee8b4a997" + +[conda-packages.windows-x64."libpng-1.6.58-h7351971_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda" +checksum = "sha256:218913aeee391460bd0e341b834dbd9c6fa6ae0a4276c0c300266cc99a816a28" + +[conda-packages.windows-x64."librsvg-2.62.2-h15cfe45_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.2-h15cfe45_0.conda" +checksum = "sha256:972bcb47055863e7a7e13d6c8af415b7df8963f149a8cd279252e8890678088f" + +[conda-packages.windows-x64."libtiff-4.7.1-h8f73337_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda" +checksum = "sha256:f1b8cccaaeea38a28b9cd496694b2e3d372bb5be0e9377c9e3d14b330d1cba8a" + +[conda-packages.windows-x64."libusb-1.0.29-h1839187_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda" +checksum = "sha256:9837f8e8de20b6c9c033561cd33b4554cd551b217e3b8d2862b353ed2c23d8b8" + +[conda-packages.windows-x64."libvorbis-1.3.7-h5112557_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda" +checksum = "sha256:429124709c73b2e8fae5570bdc6b42f5418a7551ba72e591bb960b752e87b365" + +[conda-packages.windows-x64."libvulkan-loader-1.4.341.0-h477610d_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda" +checksum = "sha256:0f0965edca8b255187604fc7712c53fe9064b31a1845a7dfb2b63bf660de84a7" + +[conda-packages.windows-x64."libwebp-base-1.6.0-h4d5522a_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda" +checksum = "sha256:7b6316abfea1007e100922760e9b8c820d6fc19df3f42fb5aca684cfacb31843" + +[conda-packages.windows-x64."libxml2-16-2.15.3-h3cfd58e_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda" +checksum = "sha256:3b61ee3caba702d2ff432fa3920835db963026e5c99c4e6fdca0c6114f59e7ce" + +[conda-packages.windows-x64."libxml2-2.15.3-h8ef44ab_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda" +checksum = "sha256:a4599c6bbbbdd7db570896e520c557eec8e66d94e839a59d17dc1f24a3d5f82b" + +[conda-packages.windows-x64."libzlib-1.3.2-hfd05255_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda" +checksum = "sha256:88609816e0cc7452bac637aaf65783e5edf4fee8a9f8e22bdc3a75882c536061" + +[conda-packages.windows-x64."openh264-2.6.0-hb17fa0b_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda" +checksum = "sha256:914702d9a64325ff3afb072c8bc0f8cbea3f19955a8395a8c190e45604f83c76" + +[conda-packages.windows-x64."openssl-3.6.2-hf411b9b_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda" +checksum = "sha256:feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154" + +[conda-packages.windows-x64."pango-1.56.4-h13911b6_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda" +checksum = "sha256:3d4e6e541e633f6fd22fc2c1d79ad5ec39503dea3ba04fc3e01d5be904ec7cea" + +[conda-packages.windows-x64."pcre2-10.47-hd2b5f0e_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda" +checksum = "sha256:3e9e02174edf02cb4bcdd75668ad7b74b8061791a3bc8bdb8a52ae336761ba3e" + +[conda-packages.windows-x64."pixman-0.46.4-h5112557_1"] +url = "https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda" +checksum = "sha256:246fce4706b3f8b247a7d6142ba8d732c95263d3c96e212b9d63d6a4ab4aff35" + +[conda-packages.windows-x64."sdl2-2.32.56-h5112557_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda" +checksum = "sha256:d17da21386bdbf32bce5daba5142916feb95eed63ef92b285808c765705bbfd2" + +[conda-packages.windows-x64."sdl3-3.4.8-h5112557_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.8-h5112557_0.conda" +checksum = "sha256:54412f664cfe7f9bebb1cf0eabeb8b4b83c8e37791a2e0fa3692a2b3cfd95888" + +[conda-packages.windows-x64."shaderc-2026.2-h8fa7867_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda" +checksum = "sha256:3a4edc274c947d34258af01886d9ca301098fe037dacd91ccd5f5291dda5ca0b" + +[conda-packages.windows-x64."spirv-tools-2026.1-h49e36cd_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.1-h49e36cd_0.conda" +checksum = "sha256:9976eeaf650d43833c110447ba264a72f470928d8a8fa5d1cfbadcd2a276184c" + +[conda-packages.windows-x64."svt-av1-4.0.1-hac47afa_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda" +checksum = "sha256:4d77eec06ee4c5de38d330fb7dfd6dac2f867ec007123acb901be9942e12c08a" + +[conda-packages.windows-x64."ucrt-10.0.26100.0-h57928b3_0"] +url = "https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda" +checksum = "sha256:3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5" + +[conda-packages.windows-x64."vc-14.5-h1b7c187_38"] +url = "https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_38.conda" +checksum = "sha256:61b68e5a4fc71a17f8d64b12e013a2f971ad980bd08e9c389d5e68efe1a67de0" + +[conda-packages.windows-x64."vc14_runtime-14.51.36231-h1b9f54f_38"] +url = "https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_38.conda" +checksum = "sha256:957c7c65583c7107a5e76f39756c6361fcb7b0dc101ac7c0aea86e7ca09fe49c" + +[conda-packages.windows-x64."vcomp14-14.51.36231-h1b9f54f_38"] +url = "https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_38.conda" +checksum = "sha256:c645fdc1f0f47718431d973386e946754a10200e7ba2c32032560913a970cacd" + +[conda-packages.windows-x64."vs2015_runtime-14.51.36231-h84cd919_38"] +url = "https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_38.conda" +checksum = "sha256:c4f38268563dc6b8322b0191481e5d20002fc6e37b076c15e0b955a553c8b4a0" + +[conda-packages.windows-x64."x264-1!164.3095-h8ffe710_2"] +url = "https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2" +checksum = "sha256:97166b318f8c68ffe4d50b2f4bd36e415219eeaef233e7d41c54244dc6108249" + +[conda-packages.windows-x64."x265-3.5-h2d74725_3"] +url = "https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2" +checksum = "sha256:02b9874049112f2b7335c9a3e880ac05d99a08d9a98160c5a98898b2b3ac42b2" + +[conda-packages.windows-x64."zstd-1.5.7-h534d264_6"] +url = "https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda" +checksum = "sha256:368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2" + [[tools.actionlint]] version = "1.7.12" backend = "aqua:rhysd/actionlint" @@ -119,6 +1059,302 @@ url = "https://github.com/jdx/communique/releases/download/v1.1.3/communique-x86 url_api = "https://api.github.com/repos/jdx/communique/releases/assets/413755231" provenance = "github-attestations" +[[tools.ffmpeg]] +version = "8.1.1" +backend = "conda:ffmpeg" + +[tools.ffmpeg."platforms.macos-arm64"] +checksum = "sha256:0ae2fddd81ad657d18eee5f8273d290f039f2f0075c0da74c2edd60110c62243" +url = "https://conda.anaconda.org/conda-forge/osx-arm64/ffmpeg-8.1.1-gpl_h246f3d5_101.conda" +conda_deps = [ + "svt-av1-4.0.1-h0cb729a_0", + "shaderc-2026.2-hf31e910_0", + "sdl2-2.32.56-h248ca61_0", + "openh264-2.6.0-hb5b2745_0", + "libzlib-1.3.2-h8088a28_2", + "libwebp-base-1.6.0-h07db88b_0", + "libvulkan-loader-1.4.341.0-h3feff0a_0", + "libvpx-1.15.2-ha759d40_0", + "libplacebo-7.360.1-h176d363_0", + "libopus-1.6.1-h1a92334_0", + "liblzma-5.8.3-h8088a28_0", + "libfreetype6-2.14.3-hdfa99f5_0", + "libfreetype-2.14.3-hce30654_0", + "libass-0.17.4-hcbd7ca7_0", + "harfbuzz-14.2.0-h3103d1b_0", + "fonts-conda-ecosystem-1-0", + "dav1d-1.2.1-hb547adb_0", + "aom-3.9.1-h7bae524_0", + "spirv-tools-2026.1-h4ddebb9_0", + "icu-78.3-hef89b57_0", + "cairo-1.18.4-he0f2337_1", + "bzip2-1.0.8-hd037594_9", + "fontconfig-2.18.0-h2b252f5_0", + "libintl-0.25.1-h493aca8_0", + "libexpat-2.8.1-hf6b4638_0", + "gmp-6.3.0-h7bae524_2", + "lame-3.100-h1a8c8d9_1003", + "libcxx-22.1.6-h55c6f16_0", + "libiconv-1.18-h23cfdf5_2", + "libjxl-0.11.2-h934fa54_1", + "libhwy-1.4.0-ha332bbd_0", + "libopenvino-2026.0.0-h3e6d54f_1", + "pugixml-1.15-hd3d436d_0", + "libopenvino-tensorflow-lite-frontend-2026.0.0-hf6b4638_1", + "libopenvino-tensorflow-frontend-2026.0.0-hc295da0_1", + "libopenvino-pytorch-frontend-2026.0.0-hf6b4638_1", + "libopenvino-paddle-frontend-2026.0.0-h41365f2_1", + "libopenvino-onnx-frontend-2026.0.0-h41365f2_1", + "libopenvino-ir-frontend-2026.0.0-h85cbfa6_1", + "libopenvino-hetero-plugin-2026.0.0-h85cbfa6_1", + "libopenvino-auto-plugin-2026.0.0-h2406d2e_1", + "libopenvino-auto-batch-plugin-2026.0.0-h2406d2e_1", + "libopenvino-arm-cpu-plugin-2026.0.0-h3e6d54f_1", + "libabseil-20260107.1-cxx17_h2062a1b_0", + "librsvg-2.62.2-he8aa2a2_0", + "gdk-pixbuf-2.44.6-h4e57454_0", + "libvorbis-1.3.7-h81086ad_2", + "libxml2-2.15.3-h5654f7c_0", + "libxml2-16-2.15.3-h5ef1a60_0", + "openssl-3.6.2-hd24854e_0", + "x264-1!164.3095-h57fd34a_2", + "x265-3.5-hbc6ce65_3", + "fonts-conda-forge-1-hc364b38_1", + "font-ttf-dejavu-sans-mono-2.37-hab24e00_0", + "graphite2-1.3.14-hec049ff_2", + "libglib-2.88.1-ha08bb59_2", + "pcre2-10.47-h30297fc_0", + "fribidi-1.0.16-hc919400_0", + "libpng-1.6.58-h132b30e_0", + "libbrotlienc-1.2.0-hc919400_1", + "libbrotlicommon-1.2.0-hc919400_1", + "libbrotlidec-1.2.0-hc919400_1", + "tbb-2023.0.0-he0260a5_2", + "libhwloc-2.13.0-default_ha97f43a_1000", + "libprotobuf-6.33.5-h2d4b707_1", + "snappy-1.2.2-hada39a4_1", + "libdovi-3.3.2-h78f8ca3_4", + "lcms2-2.19.1-hdfa7624_0", + "libjpeg-turbo-3.1.4.1-h84a0fba_0", + "pango-1.56.4-hf80efc4_1", + "libogg-1.3.5-h48c0fde_1", + "ca-certificates-2026.5.20-hbd8a1cb_0", + "sdl3-3.4.8-h6fa9c73_0", + "libusb-1.0.29-hbc156a2_0", + "glslang-16.3.0-h7cb4797_0", + "font-ttf-ubuntu-0.83-h77eed37_3", + "font-ttf-inconsolata-3.000-h77eed37_0", + "font-ttf-source-code-pro-2.038-h77eed37_0", + "pixman-0.46.4-h81086ad_1", + "libffi-3.5.2-hcf2aa1b_0", + "libtiff-4.7.1-h4030677_1", + "libdeflate-1.25-hc11a715_0", + "dbus-1.16.2-h3ff7a7c_1", + "lerc-4.1.0-h1eee2c3_0", + "zstd-1.5.7-hbf9d68e_6", +] + +[tools.ffmpeg."platforms.macos-x64"] +checksum = "sha256:45dc1a765347263a66548376f4f71bb7ae36e446495ac2457d1c0a74b2bc8128" +url = "https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-8.1.1-gpl_h4173f9d_100.conda" +conda_deps = [ + "svt-av1-4.0.1-h991f03e_0", + "shaderc-2026.2-hce4445a_0", + "sdl2-2.32.56-h53ec75d_0", + "openh264-2.6.0-h4883158_0", + "libzlib-1.3.2-hbb4bfdb_2", + "libwebp-base-1.6.0-hb807250_0", + "libvulkan-loader-1.4.341.0-ha6bc089_0", + "libvpx-1.15.2-heffb93a_0", + "libopus-1.6.1-hc6ced15_0", + "liblzma-5.8.3-hbb4bfdb_0", + "libfreetype6-2.14.3-h58fbd8d_0", + "libfreetype-2.14.3-h694c41f_0", + "libass-0.17.4-h87c4fc2_0", + "harfbuzz-14.2.0-hf0bc557_0", + "fonts-conda-ecosystem-1-0", + "dav1d-1.2.1-h0dc2134_0", + "aom-3.9.1-hf036a51_0", + "spirv-tools-2026.1-h06b67a2_0", + "icu-78.3-h25d91c4_0", + "libplacebo-7.351.0-he17f467_3", + "cairo-1.18.4-h7656bdc_1", + "bzip2-1.0.8-h500dc9f_9", + "fontconfig-2.18.0-h7a4440b_0", + "libexpat-2.8.1-hcc62823_0", + "gmp-6.3.0-hf036a51_2", + "lame-3.100-hb7f2c08_1003", + "libcxx-22.1.6-h19cb2f5_0", + "libiconv-1.18-h57a12c2_2", + "libjxl-0.11.2-h473410d_1", + "libhwy-1.4.0-hca42a69_0", + "libopenvino-2026.0.0-hb00a3bc_1", + "pugixml-1.15-h46091d4_0", + "libopenvino-tensorflow-lite-frontend-2026.0.0-hcc62823_1", + "libopenvino-tensorflow-frontend-2026.0.0-hc17a88c_1", + "libopenvino-pytorch-frontend-2026.0.0-hcc62823_1", + "libopenvino-paddle-frontend-2026.0.0-h4178b9d_1", + "libopenvino-onnx-frontend-2026.0.0-h4178b9d_1", + "libopenvino-ir-frontend-2026.0.0-hdd33d0b_1", + "libopenvino-intel-cpu-plugin-2026.0.0-hb00a3bc_1", + "libopenvino-hetero-plugin-2026.0.0-hdd33d0b_1", + "libopenvino-auto-plugin-2026.0.0-hb282e6e_1", + "libopenvino-auto-batch-plugin-2026.0.0-hb282e6e_1", + "libabseil-20260107.1-cxx17_h7ed6875_0", + "librsvg-2.62.2-h7321050_0", + "gdk-pixbuf-2.44.6-hae309b2_0", + "libvorbis-1.3.7-ha059160_2", + "libxml2-2.15.3-h953d39d_0", + "libxml2-16-2.15.3-h7a90416_0", + "openssl-3.6.2-hc881268_0", + "x264-1!164.3095-h775f41a_2", + "x265-3.5-hbb4e6a2_3", + "libintl-0.25.1-h3184127_1", + "fonts-conda-forge-1-hc364b38_1", + "font-ttf-dejavu-sans-mono-2.37-hab24e00_0", + "graphite2-1.3.14-h21dd04a_2", + "libglib-2.88.1-hf28f236_2", + "pcre2-10.47-h13923f0_0", + "fribidi-1.0.16-h8616949_0", + "libpng-1.6.58-he930e7c_0", + "libbrotlienc-1.2.0-h8616949_1", + "libbrotlicommon-1.2.0-h8616949_1", + "libbrotlidec-1.2.0-h8616949_1", + "tbb-2023.0.0-he3dc2fa_2", + "libhwloc-2.13.0-default_h4e3125e_1000", + "libprotobuf-6.33.5-hff14b61_1", + "snappy-1.2.2-h01f5ddf_1", + "lcms2-2.19.1-h5ea7634_0", + "libjpeg-turbo-3.1.4.1-ha1e9b39_0", + "libdovi-3.3.2-h59a3c7f_4", + "pango-1.56.4-hf280016_1", + "libogg-1.3.5-he3325bb_1", + "ca-certificates-2026.5.20-hbd8a1cb_0", + "sdl3-3.4.8-hf9078ff_0", + "libusb-1.0.29-h2287256_0", + "glslang-16.3.0-he78e680_0", + "font-ttf-ubuntu-0.83-h77eed37_3", + "font-ttf-inconsolata-3.000-h77eed37_0", + "font-ttf-source-code-pro-2.038-h77eed37_0", + "pixman-0.46.4-ha059160_1", + "libffi-3.5.2-hd1f9c09_0", + "libtiff-4.7.1-ha0a348c_1", + "libdeflate-1.25-h517ebb2_0", + "dbus-1.16.2-h6e7f9a9_1", + "lerc-4.1.0-h35c7297_0", + "zstd-1.5.7-h3eecb57_6", +] + +[tools.ffmpeg."platforms.windows-x64"] +checksum = "sha256:edf430689fdc2194a13df5a39773f95fe76be8c707679f22926942be862492ff" +url = "https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.1-gpl_h7d7abef_901.conda" +conda_deps = [ + "x265-3.5-h2d74725_3", + "svt-av1-4.0.1-hac47afa_0", + "shaderc-2026.2-h8fa7867_0", + "sdl2-2.32.56-h5112557_0", + "openh264-2.6.0-hb17fa0b_0", + "libzlib-1.3.2-hfd05255_2", + "libwebp-base-1.6.0-h4d5522a_0", + "libvulkan-loader-1.4.341.0-h477610d_0", + "libopus-1.6.1-h6a83c73_0", + "liblzma-5.8.3-hfd05255_0", + "libfreetype6-2.14.3-hdbac1cb_0", + "libfreetype-2.14.3-h57928b3_0", + "harfbuzz-14.2.0-h5a1b470_0", + "fonts-conda-ecosystem-1-0", + "dav1d-1.2.1-hcfcfb64_0", + "aom-3.9.1-he0c23c2_0", + "spirv-tools-2026.1-h49e36cd_0", + "icu-78.3-h637d24d_0", + "cairo-1.18.4-h477c42c_1", + "bzip2-1.0.8-h0ad9c76_9", + "fontconfig-2.18.0-hd47e2ca_0", + "libexpat-2.8.1-hac47afa_0", + "lame-3.100-hcfcfb64_1003", + "libiconv-1.18-hc1393d2_2", + "libjxl-0.11.2-h932607e_1", + "libhwy-1.4.0-h172a326_0", + "librsvg-2.62.2-h15cfe45_0", + "gdk-pixbuf-2.44.6-h1f5b9c4_0", + "libvorbis-1.3.7-h5112557_2", + "libxml2-2.15.3-h8ef44ab_0", + "libxml2-16-2.15.3-h3cfd58e_0", + "openssl-3.6.2-hf411b9b_0", + "ucrt-10.0.26100.0-h57928b3_0", + "vc-14.5-h1b7c187_38", + "vc14_runtime-14.51.36231-h1b9f54f_38", + "vcomp14-14.51.36231-h1b9f54f_38", + "vs2015_runtime-14.51.36231-h84cd919_38", + "x264-1!164.3095-h8ffe710_2", + "libintl-0.22.5-h5728263_3", + "fonts-conda-forge-1-hc364b38_1", + "font-ttf-dejavu-sans-mono-2.37-hab24e00_0", + "graphite2-1.3.14-hac47afa_2", + "libglib-2.88.1-h7ce1215_2", + "pcre2-10.47-hd2b5f0e_0", + "libpng-1.6.58-h7351971_0", + "libbrotlienc-1.2.0-hfd05255_1", + "libbrotlicommon-1.2.0-hfd05255_1", + "libbrotlidec-1.2.0-hfd05255_1", + "pango-1.56.4-h13911b6_1", + "fribidi-1.0.16-hfd05255_0", + "libogg-1.3.5-h2466b09_1", + "ca-certificates-2026.5.20-h4c7d964_0", + "sdl3-3.4.8-h5112557_0", + "libusb-1.0.29-h1839187_0", + "glslang-16.3.0-h294ba9c_0", + "font-ttf-ubuntu-0.83-h77eed37_3", + "font-ttf-inconsolata-3.000-h77eed37_0", + "font-ttf-source-code-pro-2.038-h77eed37_0", + "pixman-0.46.4-h5112557_1", + "libffi-3.5.2-h3d046cb_0", + "libjpeg-turbo-3.1.4.1-hfd05255_0", + "libtiff-4.7.1-h8f73337_1", + "libdeflate-1.25-h51727cc_0", + "lerc-4.1.0-hd936e49_0", + "zstd-1.5.7-h534d264_6", +] + +[[tools.jq]] +version = "1.8.1" +backend = "aqua:jqlang/jq" + +[tools.jq."platforms.linux-arm64"] +checksum = "sha256:6bc62f25981328edd3cfcfe6fe51b073f2d7e7710d7ef7fcdac28d4e384fc3d4" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-arm64" +provenance = "github-attestations" + +[tools.jq."platforms.linux-arm64-musl"] +checksum = "sha256:6bc62f25981328edd3cfcfe6fe51b073f2d7e7710d7ef7fcdac28d4e384fc3d4" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-arm64" +provenance = "github-attestations" + +[tools.jq."platforms.linux-x64"] +checksum = "sha256:020468de7539ce70ef1bceaf7cde2e8c4f2ca6c3afb84642aabc5c97d9fc2a0d" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-amd64" +provenance = "github-attestations" + +[tools.jq."platforms.linux-x64-musl"] +checksum = "sha256:020468de7539ce70ef1bceaf7cde2e8c4f2ca6c3afb84642aabc5c97d9fc2a0d" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-amd64" +provenance = "github-attestations" + +[tools.jq."platforms.macos-arm64"] +checksum = "sha256:a9fe3ea2f86dfc72f6728417521ec9067b343277152b114f4e98d8cb0e263603" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-macos-arm64" +provenance = "github-attestations" + +[tools.jq."platforms.macos-x64"] +checksum = "sha256:e80dbe0d2a2597e3c11c404f03337b981d74b4a8504b70586c354b7697a7c27f" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-macos-amd64" +provenance = "github-attestations" + +[tools.jq."platforms.windows-x64"] +checksum = "sha256:23cb60a1354eed6bcc8d9b9735e8c7b388cd1fdcb75726b93bc299ef22dd9334" +url = "https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-windows-amd64.exe" +provenance = "github-attestations" + [[tools.node]] version = "26.2.0" backend = "core:node" @@ -190,6 +1426,38 @@ checksum = "sha256:4d26ade49e9571ccb3bd1a88cfc72c52b11a9a9f6e204a57f38592aed1375 url = "https://github.com/astral-sh/python-build-standalone/releases/download/20260510/cpython-3.14.5+20260510-x86_64-pc-windows-msvc-install_only_stripped.tar.gz" provenance = "github-attestations" +[[tools.vhs]] +version = "0.11.0" +backend = "aqua:charmbracelet/vhs" + +[tools.vhs."platforms.linux-arm64"] +checksum = "sha256:af782cddbf844a377df6ea41c0e72339393fa021be3f6cb70a2f47d48675d92b" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Linux_arm64.tar.gz" + +[tools.vhs."platforms.linux-arm64-musl"] +checksum = "sha256:af782cddbf844a377df6ea41c0e72339393fa021be3f6cb70a2f47d48675d92b" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Linux_arm64.tar.gz" + +[tools.vhs."platforms.linux-x64"] +checksum = "sha256:99cb634587eaae0473c1ea377db80c3a048c27f99fe0a7febb1a1e8cb7ee5009" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Linux_x86_64.tar.gz" + +[tools.vhs."platforms.linux-x64-musl"] +checksum = "sha256:99cb634587eaae0473c1ea377db80c3a048c27f99fe0a7febb1a1e8cb7ee5009" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Linux_x86_64.tar.gz" + +[tools.vhs."platforms.macos-arm64"] +checksum = "sha256:eec91ee450ba50b6d4fce2800593b2ac5fdd88a73056367d2c3b870ee44de3f7" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Darwin_arm64.tar.gz" + +[tools.vhs."platforms.macos-x64"] +checksum = "sha256:dd5c86c1cec1cf9ebd5ac6cf8119efcb731f055bbe7c7010408c741ee7770f64" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Darwin_x86_64.tar.gz" + +[tools.vhs."platforms.windows-x64"] +checksum = "sha256:e3d87403b25e1e88addec6548bdbfdbee772a5c313c9f6f96c495b8e163f18ba" +url = "https://github.com/charmbracelet/vhs/releases/download/v0.11.0/vhs_0.11.0_Windows_x86_64.zip" + [[tools.zizmor]] version = "1.25.2" backend = "aqua:zizmorcore/zizmor" diff --git a/mise.toml b/mise.toml index 011282a..d7c1b37 100644 --- a/mise.toml +++ b/mise.toml @@ -1,12 +1,12 @@ [tools] actionlint = "1.7.12" +aube = "1.10.4" communique = "1.1.3" -zizmor = "1.25.2" - -# CI installs [tools] with `mise install --locked`; update mise.lock whenever tool versions or supported CI platforms change. +jq = "1.8.1" node = "26" python = "3" -aube = "1.10.4" +vhs = "0.11.0" +zizmor = "1.25.2" [tasks.bootstrap] description = "Install deps and Chromium for local development"