From d8169a263b3e4a1bccd410edf35f5bb197ed695c Mon Sep 17 00:00:00 2001 From: Edwin Lim Date: Wed, 28 Oct 2026 17:20:22 -0700 Subject: [PATCH 1/4] feat(menu): describe skills with title, description and tags; freeze agent prompts Every skill-menu entry and bundle variant carries `title`, `description` and `tags`. The tags are the skill's own tags plus `framework:` for the framework it serves, its group, and `default` when set. The wizard selects skills by these tags; old wizards ignore the new fields. Agent prompts in `context/agents/` are frozen: the wizard bundles its own copy, and this one keeps publishing for wizard versions already in the field. `scripts/check-agents-frozen.sh` fails a pull request that edits it. `check:bundle-diff` compares two builds and fails on any difference beyond the menu metadata. The old-wizard compatibility test replays the wizard's skill resolution and checks that agent assets, skill variants and spellbook selections stay the same. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/build.yml | 12 + README.md | 2 +- context/agents/README.md | 5 + package.json | 2 + scripts/build.js | 5 + scripts/check-agents-frozen.sh | 21 + scripts/check-bundle-diff.js | 114 + scripts/lib/build-phases.js | 34 + scripts/lib/skill-generator.js | 2 + .../fixtures/old-wizard-resolutions.json | 3719 +++++++++++++++++ .../lib/tests/manifest-menu-writer.test.js | 25 + scripts/lib/tests/old-wizard-compat.test.js | 174 + 12 files changed, 4114 insertions(+), 1 deletion(-) create mode 100755 scripts/check-agents-frozen.sh create mode 100644 scripts/check-bundle-diff.js create mode 100644 scripts/lib/tests/fixtures/old-wizard-resolutions.json create mode 100644 scripts/lib/tests/old-wizard-compat.test.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b0c60e46..babe6bb2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,18 @@ on: branches: [ main ] jobs: + agents-frozen: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 + + - name: Block edits to frozen agent prompts + run: bash scripts/check-agents-frozen.sh "origin/${{ github.base_ref }}" + build: runs-on: ubuntu-latest diff --git a/README.md b/README.md index eba4f3ff..e5bbb698 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ Run `npm run build` to generate the release artifacts: |--------|-------------| | `dist/skills/.zip` | Per-skill bundles (SKILL.md + references + shared docs) | | `dist/skills/manifest.json` | Versioned manifest of every bundled skill and its download URL. It ships inside `skills-mcp-resources.zip`, not as its own release asset | -| `dist/skills/skill-menu.json` | Category groupings and `cliEntries` — the wizard's command lookup table | +| `dist/skills/skill-menu.json` | Category groupings and `cliEntries` — the wizard's command lookup table. Each entry and bundle variant carries `title`, `description` and `tags`; the tags add `framework:` for the framework it serves, its `group` and (when set) `default` to the skill's own | | `dist/agents/agent-menu.json` | Orchestrator flows and the task prompts in each one | | `dist/skills-mcp-resources.zip` | One bundle of `manifest.json` and every skill ZIP, for the MCP server | diff --git a/context/agents/README.md b/context/agents/README.md index 0f12d66d..5783fc86 100644 --- a/context/agents/README.md +++ b/context/agents/README.md @@ -1,5 +1,10 @@ # Agent prompts +> **Frozen.** The wizard bundles its agent prompts in its own repo, at +> `src/programs//agent/`; make prompt changes there. This copy is +> published only for wizard versions already in the field, and CI +> (`scripts/check-agents-frozen.sh`) rejects pull requests that change it. + One `/.md` per orchestrator task — the WHAT of the task. The folder is the flow: the wizard's registry is scoped per flow, so audit or migration agent sets get sibling folders. The frontmatter carries the artifacts the diff --git a/package.json b/package.json index 57836185..76136a72 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "test:skills": "vitest run scripts/lib/tests", "test:skills:watch": "vitest scripts/lib/tests", "test": "vitest run scripts/plugins/tests scripts/lib/tests", + "check:bundle-diff": "node scripts/check-bundle-diff.js", + "check:agents-frozen": "bash scripts/check-agents-frozen.sh", "security-scan": "node scripts/scan-warlock.js", "security-scan:skills": "node scripts/scan-warlock.js dist/skills" }, diff --git a/scripts/build.js b/scripts/build.js index 6e32dd0f..3d369e57 100755 --- a/scripts/build.js +++ b/scripts/build.js @@ -58,6 +58,11 @@ async function main() { version: BUILD_VERSION, }); + // Non-blocking: the wizard selects skills by tag, so an untagged skill is only reachable by id. + for (const skill of skills) { + if (!skill.tags?.length) console.warn(` [WARN] Skill "${skill.id}" has no tags`); + } + const docEntries = loadDocsConfig(configDir); console.log('\nCreating skill ZIPs...'); diff --git a/scripts/check-agents-frozen.sh b/scripts/check-agents-frozen.sh new file mode 100755 index 00000000..6e158bad --- /dev/null +++ b/scripts/check-agents-frozen.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# +# Fails when the branch changes an agent prompt under context/agents/ (the README excepted). +# The wizard bundles these prompts; this copy is frozen for wizard versions already in the field. +# +# Usage: bash scripts/check-agents-frozen.sh [base-ref] (default: origin/main) + +set -euo pipefail + +BASE_REF="${1:-origin/main}" + +CHANGED=$(git diff --name-only "${BASE_REF}...HEAD" -- context/agents | grep -v '^context/agents/README\.md$' || true) + +if [ -n "$CHANGED" ]; then + echo "::error::Agent prompts in context/agents/ are frozen. They now live in the wizard repo at src/programs//agent/ — make the change there." + echo "Changed files:" + echo "$CHANGED" | sed 's/^/ - /' + exit 1 +fi + +echo "No changes to frozen agent prompts in context/agents/." diff --git a/scripts/check-bundle-diff.js b/scripts/check-bundle-diff.js new file mode 100644 index 00000000..45906b50 --- /dev/null +++ b/scripts/check-bundle-diff.js @@ -0,0 +1,114 @@ +#!/usr/bin/env node + +/** + * Fail when a build's output differs from a baseline build in anything but the skill-menu's title/description/tags. + * Baseline from main: `git worktree add /tmp/cm-main main && (cd /tmp/cm-main && npm install && npm run build)`, + * then `npm run build && npm run check:bundle-diff -- /tmp/cm-main/dist [dist]`. + */ + +import crypto from 'crypto'; +import fs from 'fs'; +import path from 'path'; +import zlib from 'zlib'; + +const MENU_METADATA = ['title', 'description', 'tags']; + +const sha = buf => crypto.createHash('sha256').update(buf).digest('hex'); + +/** Entry name -> content buffer for a zip, read from its central directory (zip mtimes are ignored). */ +function readZip(buf) { + let eocd = buf.length - 22; + while (eocd >= 0 && buf.readUInt32LE(eocd) !== 0x06054b50) eocd--; + if (eocd < 0) throw new Error('not a zip archive'); + const count = buf.readUInt16LE(eocd + 10); + let offset = buf.readUInt32LE(eocd + 16); + const entries = {}; + for (let i = 0; i < count; i++) { + const method = buf.readUInt16LE(offset + 10); + const compressedSize = buf.readUInt32LE(offset + 20); + const nameLength = buf.readUInt16LE(offset + 28); + const extraLength = buf.readUInt16LE(offset + 30); + const commentLength = buf.readUInt16LE(offset + 32); + const localOffset = buf.readUInt32LE(offset + 42); + const name = buf.toString('utf8', offset + 46, offset + 46 + nameLength); + offset += 46 + nameLength + extraLength + commentLength; + if (name.endsWith('/')) continue; + const dataStart = localOffset + 30 + buf.readUInt16LE(localOffset + 26) + buf.readUInt16LE(localOffset + 28); + const data = buf.subarray(dataStart, dataStart + compressedSize); + entries[name] = method === 8 ? zlib.inflateRawSync(data) : Buffer.from(data); + } + return entries; +} + +function stripMenuMetadata(node) { + if (Array.isArray(node)) return node.map(stripMenuMetadata); + if (!node || typeof node !== 'object') return node; + return Object.fromEntries( + Object.entries(node).filter(([k]) => !MENU_METADATA.includes(k)).map(([k, v]) => [k, stripMenuMetadata(v)]), + ); +} + +/** Comparable digest of one file: zips by their entries, manifests without the build timestamp, the menu without its metadata fields. */ +function digest(name, buf) { + const base = path.basename(name); + if (base.endsWith('.zip')) { + const entries = readZip(buf); + return Object.fromEntries(Object.keys(entries).sort().map(n => [n, digest(n, entries[n])])); + } + if (base === 'manifest.json') { + const { buildTimestamp: _ts, ...rest } = JSON.parse(buf.toString('utf8')); + return sha(JSON.stringify(rest)); + } + if (base === 'skill-menu.json') { + const menu = JSON.parse(buf.toString('utf8')); + menu.categories = stripMenuMetadata(menu.categories); + return sha(JSON.stringify(menu)); + } + return sha(buf); +} + +function listFiles(root) { + return fs.readdirSync(root, { recursive: true }) + .filter(rel => fs.statSync(path.join(root, rel)).isFile()) + .map(rel => rel.split(path.sep).join('/')) + .sort(); +} + +function diff(a, b, at, out) { + if (typeof a === 'string' || typeof b === 'string') { + if (a !== b) out.push(at); + return; + } + for (const key of new Set([...Object.keys(a), ...Object.keys(b)])) { + if (!(key in a)) out.push(`${at}!${key} (added)`); + else if (!(key in b)) out.push(`${at}!${key} (removed)`); + else diff(a[key], b[key], `${at}!${key}`, out); + } +} + +const [baselineDir, candidateDir = 'dist'] = process.argv.slice(2); +if (!baselineDir) { + console.error('Usage: node scripts/check-bundle-diff.js [candidate-dist]'); + process.exit(2); +} + +const baseline = listFiles(baselineDir); +const candidate = listFiles(candidateDir); +const changes = []; +for (const rel of new Set([...baseline, ...candidate])) { + if (!baseline.includes(rel)) { changes.push(`${rel} (added)`); continue; } + if (!candidate.includes(rel)) { changes.push(`${rel} (removed)`); continue; } + diff( + digest(rel, fs.readFileSync(path.join(baselineDir, rel))), + digest(rel, fs.readFileSync(path.join(candidateDir, rel))), + rel, + changes, + ); +} + +if (changes.length > 0) { + console.error(`Build output differs from ${baselineDir} beyond the skill-menu metadata fields:`); + for (const change of changes) console.error(` - ${change}`); + process.exit(1); +} +console.log(`No differences beyond skill-menu ${MENU_METADATA.join('/')} (${candidate.length} files compared).`); diff --git a/scripts/lib/build-phases.js b/scripts/lib/build-phases.js index 5d7f15ea..9ad95e95 100644 --- a/scripts/lib/build-phases.js +++ b/scripts/lib/build-phases.js @@ -169,6 +169,35 @@ function generateManifest({ resources, uriSchema, version, docContents = {} }) { }; } +/** The tag naming the framework a variant serves. Prefixed, because content tags such as `python` describe a skill, not what it serves. */ +const FRAMEWORK_TAG_PREFIX = 'framework:'; + +/** + * Menu tags: the skill's own tags plus its served framework, group and `default`. + * Added here only, so the tags commandments are selected by stay untouched. + */ +function menuTags(tags, { framework, group, isDefault }) { + return [ + ...new Set( + [ + ...(tags || []), + framework ? `${FRAMEWORK_TAG_PREFIX}${framework}` : null, + group, + isDefault ? 'default' : null, + ].filter(Boolean), + ), + ]; +} + +/** The title, description and tags a menu entry or bundle variant publishes, matching manifest.json's name/description. */ +function menuMetadata(skill, group) { + return { + title: skill.displayName ?? skill.name, + description: skill.description, + tags: menuTags(skill.tags, { framework: skill.framework, group, isDefault: skill.default }), + }; +} + /** * Compose the manifest + skill-menu and write both to dist/skills/. * Returns the manifest object so callers (notably full builds) can pass it @@ -213,6 +242,9 @@ function writeManifestAndMenu({ allSkills, docContents, distDir, configDir, vers variants: [], // Bundled variants are absent from the manifest, so the group's URL is built from the base. downloadUrl: `${resolveBaseDownloadUrl(version)}/${group}.json`, + title: skill.name, + description: skill.name, + tags: menuTags(skill.groupTags, { group }), }; bundleEntries.set(group, entry); skillsByCategory[cat].push(entry); @@ -221,6 +253,7 @@ function writeManifestAndMenu({ allSkills, docContents, distDir, configDir, vers const variant = { id: skill.id }; if (skill.framework) variant.framework = skill.framework; if (skill.default) variant.default = true; + Object.assign(variant, menuMetadata(skill, group)); entry.variants.push(variant); continue; } @@ -228,6 +261,7 @@ function writeManifestAndMenu({ allSkills, docContents, distDir, configDir, vers const entry = { id: skill.id, name: skill.name, group, downloadUrl: url }; if (skill.framework) entry.framework = skill.framework; if (skill.default) entry.default = true; + Object.assign(entry, menuMetadata(skill, group)); skillsByCategory[cat].push(entry); } diff --git a/scripts/lib/skill-generator.js b/scripts/lib/skill-generator.js index 454142ac..c072aeed 100644 --- a/scripts/lib/skill-generator.js +++ b/scripts/lib/skill-generator.js @@ -339,6 +339,7 @@ function expandSkillGroups(config, configDir) { _references: group.references || null, _group: key, _bundle: bundled, + _groupTags: baseTags, _cli: cli, }); } @@ -821,6 +822,7 @@ function serializeSkill(s) { } if (s._bundle) { result.bundle = true; + result.groupTags = s._groupTags || []; } if (s._cli) { result.cli = s._cli; diff --git a/scripts/lib/tests/fixtures/old-wizard-resolutions.json b/scripts/lib/tests/fixtures/old-wizard-resolutions.json new file mode 100644 index 00000000..cf604346 --- /dev/null +++ b/scripts/lib/tests/fixtures/old-wizard-resolutions.json @@ -0,0 +1,3719 @@ +{ + "agents": { + "error-tracking/capture-exceptions": "agents-error-tracking-capture-exceptions.md", + "error-tracking/configure": "agents-error-tracking-configure.md", + "error-tracking/credentials": "agents-error-tracking-credentials.md", + "error-tracking/init": "agents-error-tracking-init.md", + "error-tracking/install": "agents-error-tracking-install.md", + "error-tracking/link-releases": "agents-error-tracking-link-releases.md", + "error-tracking/report": "agents-error-tracking-report.md", + "error-tracking/setup-error-tracking": "agents-error-tracking-setup-error-tracking.md", + "error-tracking/test-setup": "agents-error-tracking-test-setup.md", + "error-tracking/wire-ci": "agents-error-tracking-wire-ci.md", + "feature-flags/create-flag": "agents-feature-flags-create-flag.md", + "feature-flags/evaluate": "agents-feature-flags-evaluate.md", + "feature-flags/init": "agents-feature-flags-init.md", + "feature-flags/install": "agents-feature-flags-install.md", + "feature-flags/report": "agents-feature-flags-report.md", + "feature-flags/setup-feature-flags": "agents-feature-flags-setup-feature-flags.md", + "integration-v2/ai-observability": "agents-integration-v2-ai-observability.md", + "integration-v2/capture": "agents-integration-v2-capture.md", + "integration-v2/dashboard": "agents-integration-v2-dashboard.md", + "integration-v2/error-tracking": "agents-integration-v2-error-tracking.md", + "integration-v2/identify": "agents-integration-v2-identify.md", + "integration-v2/init": "agents-integration-v2-init.md", + "integration-v2/install": "agents-integration-v2-install.md", + "integration-v2/integrate-posthog": "agents-integration-v2-integrate-posthog.md", + "integration-v2/logs": "agents-integration-v2-logs.md", + "integration-v2/report": "agents-integration-v2-report.md", + "integration-v2/review": "agents-integration-v2-review.md", + "integration-v2/warehouse": "agents-integration-v2-warehouse.md", + "metrics/instrument-metrics": "agents-metrics-instrument-metrics.md", + "metrics/report": "agents-metrics-report.md", + "metrics/setup-metrics": "agents-metrics-setup-metrics.md", + "metrics/verify-sdk": "agents-metrics-verify-sdk.md", + "replay-vision/enable-replay": "agents-replay-vision-enable-replay.md", + "replay-vision/init": "agents-replay-vision-init.md", + "replay-vision/install": "agents-replay-vision-install.md", + "replay-vision/report": "agents-replay-vision-report.md", + "replay-vision/scanner-broken-experiences": "agents-replay-vision-scanner-broken-experiences.md", + "replay-vision/scanner-session-summaries": "agents-replay-vision-scanner-session-summaries.md", + "replay-vision/scanner-user-frustration": "agents-replay-vision-scanner-user-frustration.md", + "replay-vision/setup-replay-vision": "agents-replay-vision-setup-replay-vision.md" + }, + "variants": { + "integration-v2-error-tracking-step@android": "integration-v2-error-tracking-step-android", + "integration-v2-error-tracking-step@angular": "integration-v2-error-tracking-step-angular", + "integration-v2-error-tracking-step@astro": "integration-v2-error-tracking-step-astro-hybrid", + "integration-v2-error-tracking-step@django": "integration-v2-error-tracking-step-django", + "integration-v2-error-tracking-step@elixir": "integration-v2-error-tracking-step-elixir", + "integration-v2-error-tracking-step@fastapi": "integration-v2-error-tracking-step-fastapi", + "integration-v2-error-tracking-step@flask": "integration-v2-error-tracking-step-flask", + "integration-v2-error-tracking-step@flutter": "integration-v2-error-tracking-step-flutter", + "integration-v2-error-tracking-step@go": "integration-v2-error-tracking-step-go", + "integration-v2-error-tracking-step@java": "integration-v2-error-tracking-step-java", + "integration-v2-error-tracking-step@javascript_node": "integration-v2-error-tracking-step-javascript_node", + "integration-v2-error-tracking-step@javascript_web": "integration-v2-error-tracking-step-javascript_web", + "integration-v2-error-tracking-step@kmp": "integration-v2-error-tracking-step-kmp", + "integration-v2-error-tracking-step@laravel": "integration-v2-error-tracking-step-laravel", + "integration-v2-error-tracking-step@nextjs": "integration-v2-error-tracking-step-nextjs-app-router", + "integration-v2-error-tracking-step@nuxt": "integration-v2-error-tracking-step-nuxt-4", + "integration-v2-error-tracking-step@python": "integration-v2-error-tracking-step-python", + "integration-v2-error-tracking-step@rails": "integration-v2-error-tracking-step-ruby-on-rails", + "integration-v2-error-tracking-step@react-native": "integration-v2-error-tracking-step-react-native", + "integration-v2-error-tracking-step@react-router": "integration-v2-error-tracking-step-react-react-router-6", + "integration-v2-error-tracking-step@ruby": "integration-v2-error-tracking-step-ruby", + "integration-v2-error-tracking-step@rust": "integration-v2-error-tracking-step-rust", + "integration-v2-error-tracking-step@sveltekit": "integration-v2-error-tracking-step-sveltekit", + "integration-v2-error-tracking-step@swift": "integration-v2-error-tracking-step-swift", + "integration-v2-error-tracking-step@tanstack-router": "integration-v2-error-tracking-step-react-tanstack-router-code-based", + "integration-v2-error-tracking-step@tanstack-start": "integration-v2-error-tracking-step-tanstack-start", + "integration-v2-error-tracking-step@vue": "integration-v2-error-tracking-step-vue-3", + "integration-v2-error-tracking-step@wordpress": "integration-v2-error-tracking-step-wordpress", + "posthog-best-practices@-": "posthog-best-practices", + "posthog-best-practices@android": "posthog-best-practices", + "posthog-best-practices@angular": "posthog-best-practices", + "posthog-best-practices@anthropic": "posthog-best-practices", + "posthog-best-practices@astro": "posthog-best-practices", + "posthog-best-practices@autogen": "posthog-best-practices", + "posthog-best-practices@aws-bedrock": "posthog-best-practices", + "posthog-best-practices@azure-openai": "posthog-best-practices", + "posthog-best-practices@cerebras": "posthog-best-practices", + "posthog-best-practices@claude-agent-sdk": "posthog-best-practices", + "posthog-best-practices@claude-code": "posthog-best-practices", + "posthog-best-practices@cloudflare-ai-gateway": "posthog-best-practices", + "posthog-best-practices@cohere": "posthog-best-practices", + "posthog-best-practices@convex": "posthog-best-practices", + "posthog-best-practices@crewai": "posthog-best-practices", + "posthog-best-practices@dedalus": "posthog-best-practices", + "posthog-best-practices@deepseek": "posthog-best-practices", + "posthog-best-practices@django": "posthog-best-practices", + "posthog-best-practices@dspy": "posthog-best-practices", + "posthog-best-practices@elixir": "posthog-best-practices", + "posthog-best-practices@fastapi": "posthog-best-practices", + "posthog-best-practices@fireworks-ai": "posthog-best-practices", + "posthog-best-practices@flask": "posthog-best-practices", + "posthog-best-practices@flutter": "posthog-best-practices", + "posthog-best-practices@go": "posthog-best-practices", + "posthog-best-practices@google-adk": "posthog-best-practices", + "posthog-best-practices@google-gemini": "posthog-best-practices", + "posthog-best-practices@groq": "posthog-best-practices", + "posthog-best-practices@helicone": "posthog-best-practices", + "posthog-best-practices@hugging-face": "posthog-best-practices", + "posthog-best-practices@instructor": "posthog-best-practices", + "posthog-best-practices@java": "posthog-best-practices", + "posthog-best-practices@javascript_node": "posthog-best-practices", + "posthog-best-practices@javascript_web": "posthog-best-practices", + "posthog-best-practices@kmp": "posthog-best-practices", + "posthog-best-practices@langchain": "posthog-best-practices", + "posthog-best-practices@langgraph": "posthog-best-practices", + "posthog-best-practices@laravel": "posthog-best-practices", + "posthog-best-practices@litellm": "posthog-best-practices", + "posthog-best-practices@llamaindex": "posthog-best-practices", + "posthog-best-practices@manual-capture": "posthog-best-practices", + "posthog-best-practices@mastra": "posthog-best-practices", + "posthog-best-practices@mirascope": "posthog-best-practices", + "posthog-best-practices@mistral": "posthog-best-practices", + "posthog-best-practices@nextjs": "posthog-best-practices", + "posthog-best-practices@nuxt": "posthog-best-practices", + "posthog-best-practices@ollama": "posthog-best-practices", + "posthog-best-practices@openai": "posthog-best-practices", + "posthog-best-practices@openai-agents": "posthog-best-practices", + "posthog-best-practices@openclaw": "posthog-best-practices", + "posthog-best-practices@openrouter": "posthog-best-practices", + "posthog-best-practices@opentelemetry": "posthog-best-practices", + "posthog-best-practices@perplexity": "posthog-best-practices", + "posthog-best-practices@pi": "posthog-best-practices", + "posthog-best-practices@portkey": "posthog-best-practices", + "posthog-best-practices@pydantic-ai": "posthog-best-practices", + "posthog-best-practices@python": "posthog-best-practices", + "posthog-best-practices@rails": "posthog-best-practices", + "posthog-best-practices@react-native": "posthog-best-practices", + "posthog-best-practices@react-router": "posthog-best-practices", + "posthog-best-practices@ruby": "posthog-best-practices", + "posthog-best-practices@rust": "posthog-best-practices", + "posthog-best-practices@semantic-kernel": "posthog-best-practices", + "posthog-best-practices@smolagents": "posthog-best-practices", + "posthog-best-practices@sveltekit": "posthog-best-practices", + "posthog-best-practices@swift": "posthog-best-practices", + "posthog-best-practices@tanstack-router": "posthog-best-practices", + "posthog-best-practices@tanstack-start": "posthog-best-practices", + "posthog-best-practices@together-ai": "posthog-best-practices", + "posthog-best-practices@vercel-ai": "posthog-best-practices", + "posthog-best-practices@vue": "posthog-best-practices", + "posthog-best-practices@wordpress": "posthog-best-practices", + "posthog-best-practices@xai": "posthog-best-practices", + "integration-v2-init@android": "integration-v2-init-android", + "integration-v2-init@angular": "integration-v2-init-angular", + "integration-v2-init@astro": "integration-v2-init-astro-hybrid", + "integration-v2-init@django": "integration-v2-init-django", + "integration-v2-init@elixir": "integration-v2-init-elixir", + "integration-v2-init@fastapi": "integration-v2-init-fastapi", + "integration-v2-init@flask": "integration-v2-init-flask", + "integration-v2-init@flutter": "integration-v2-init-flutter", + "integration-v2-init@go": "integration-v2-init-go", + "integration-v2-init@java": "integration-v2-init-java", + "integration-v2-init@javascript_node": "integration-v2-init-javascript_node", + "integration-v2-init@javascript_web": "integration-v2-init-javascript_web", + "integration-v2-init@kmp": "integration-v2-init-kmp", + "integration-v2-init@laravel": "integration-v2-init-laravel", + "integration-v2-init@nextjs": "integration-v2-init-nextjs-app-router", + "integration-v2-init@nuxt": "integration-v2-init-nuxt-3-6", + "integration-v2-init@python": "integration-v2-init-python", + "integration-v2-init@rails": "integration-v2-init-ruby-on-rails", + "integration-v2-init@react-native": "integration-v2-init-react-native", + "integration-v2-init@react-router": "integration-v2-init-react-react-router-6", + "integration-v2-init@ruby": "integration-v2-init-ruby", + "integration-v2-init@rust": "integration-v2-init-rust", + "integration-v2-init@sveltekit": "integration-v2-init-sveltekit", + "integration-v2-init@swift": "integration-v2-init-swift", + "integration-v2-init@tanstack-router": "integration-v2-init-react-tanstack-router-code-based", + "integration-v2-init@tanstack-start": "integration-v2-init-tanstack-start", + "integration-v2-init@vue": "integration-v2-init-vue-3", + "integration-v2-init@wordpress": "integration-v2-init-wordpress", + "integration-v2-install@android": "integration-v2-install-android", + "integration-v2-install@angular": "integration-v2-install-angular", + "integration-v2-install@astro": "integration-v2-install-astro-hybrid", + "integration-v2-install@django": "integration-v2-install-django", + "integration-v2-install@elixir": "integration-v2-install-elixir", + "integration-v2-install@fastapi": "integration-v2-install-fastapi", + "integration-v2-install@flask": "integration-v2-install-flask", + "integration-v2-install@flutter": "integration-v2-install-flutter", + "integration-v2-install@go": "integration-v2-install-go", + "integration-v2-install@java": "integration-v2-install-java", + "integration-v2-install@javascript_node": "integration-v2-install-javascript_node", + "integration-v2-install@javascript_web": "integration-v2-install-javascript_web", + "integration-v2-install@kmp": "integration-v2-install-kmp", + "integration-v2-install@laravel": "integration-v2-install-laravel", + "integration-v2-install@nextjs": "integration-v2-install-nextjs-app-router", + "integration-v2-install@nuxt": "integration-v2-install-nuxt-3-6", + "integration-v2-install@python": "integration-v2-install-python", + "integration-v2-install@rails": "integration-v2-install-ruby-on-rails", + "integration-v2-install@react-native": "integration-v2-install-react-native", + "integration-v2-install@react-router": "integration-v2-install-react-react-router-6", + "integration-v2-install@ruby": "integration-v2-install-ruby", + "integration-v2-install@rust": "integration-v2-install-rust", + "integration-v2-install@sveltekit": "integration-v2-install-sveltekit", + "integration-v2-install@swift": "integration-v2-install-swift", + "integration-v2-install@tanstack-router": "integration-v2-install-react-tanstack-router-code-based", + "integration-v2-install@tanstack-start": "integration-v2-install-tanstack-start", + "integration-v2-install@vue": "integration-v2-install-vue-3", + "integration-v2-install@wordpress": "integration-v2-install-wordpress", + "integration-v2-mcp@-": "integration-v2-mcp", + "integration-v2-mcp@android": "integration-v2-mcp", + "integration-v2-mcp@angular": "integration-v2-mcp", + "integration-v2-mcp@anthropic": "integration-v2-mcp", + "integration-v2-mcp@astro": "integration-v2-mcp", + "integration-v2-mcp@autogen": "integration-v2-mcp", + "integration-v2-mcp@aws-bedrock": "integration-v2-mcp", + "integration-v2-mcp@azure-openai": "integration-v2-mcp", + "integration-v2-mcp@cerebras": "integration-v2-mcp", + "integration-v2-mcp@claude-agent-sdk": "integration-v2-mcp", + "integration-v2-mcp@claude-code": "integration-v2-mcp", + "integration-v2-mcp@cloudflare-ai-gateway": "integration-v2-mcp", + "integration-v2-mcp@cohere": "integration-v2-mcp", + "integration-v2-mcp@convex": "integration-v2-mcp", + "integration-v2-mcp@crewai": "integration-v2-mcp", + "integration-v2-mcp@dedalus": "integration-v2-mcp", + "integration-v2-mcp@deepseek": "integration-v2-mcp", + "integration-v2-mcp@django": "integration-v2-mcp", + "integration-v2-mcp@dspy": "integration-v2-mcp", + "integration-v2-mcp@elixir": "integration-v2-mcp", + "integration-v2-mcp@fastapi": "integration-v2-mcp", + "integration-v2-mcp@fireworks-ai": "integration-v2-mcp", + "integration-v2-mcp@flask": "integration-v2-mcp", + "integration-v2-mcp@flutter": "integration-v2-mcp", + "integration-v2-mcp@go": "integration-v2-mcp", + "integration-v2-mcp@google-adk": "integration-v2-mcp", + "integration-v2-mcp@google-gemini": "integration-v2-mcp", + "integration-v2-mcp@groq": "integration-v2-mcp", + "integration-v2-mcp@helicone": "integration-v2-mcp", + "integration-v2-mcp@hugging-face": "integration-v2-mcp", + "integration-v2-mcp@instructor": "integration-v2-mcp", + "integration-v2-mcp@java": "integration-v2-mcp", + "integration-v2-mcp@javascript_node": "integration-v2-mcp", + "integration-v2-mcp@javascript_web": "integration-v2-mcp", + "integration-v2-mcp@kmp": "integration-v2-mcp", + "integration-v2-mcp@langchain": "integration-v2-mcp", + "integration-v2-mcp@langgraph": "integration-v2-mcp", + "integration-v2-mcp@laravel": "integration-v2-mcp", + "integration-v2-mcp@litellm": "integration-v2-mcp", + "integration-v2-mcp@llamaindex": "integration-v2-mcp", + "integration-v2-mcp@manual-capture": "integration-v2-mcp", + "integration-v2-mcp@mastra": "integration-v2-mcp", + "integration-v2-mcp@mirascope": "integration-v2-mcp", + "integration-v2-mcp@mistral": "integration-v2-mcp", + "integration-v2-mcp@nextjs": "integration-v2-mcp", + "integration-v2-mcp@nuxt": "integration-v2-mcp", + "integration-v2-mcp@ollama": "integration-v2-mcp", + "integration-v2-mcp@openai": "integration-v2-mcp", + "integration-v2-mcp@openai-agents": "integration-v2-mcp", + "integration-v2-mcp@openclaw": "integration-v2-mcp", + "integration-v2-mcp@openrouter": "integration-v2-mcp", + "integration-v2-mcp@opentelemetry": "integration-v2-mcp", + "integration-v2-mcp@perplexity": "integration-v2-mcp", + "integration-v2-mcp@pi": "integration-v2-mcp", + "integration-v2-mcp@portkey": "integration-v2-mcp", + "integration-v2-mcp@pydantic-ai": "integration-v2-mcp", + "integration-v2-mcp@python": "integration-v2-mcp", + "integration-v2-mcp@rails": "integration-v2-mcp", + "integration-v2-mcp@react-native": "integration-v2-mcp", + "integration-v2-mcp@react-router": "integration-v2-mcp", + "integration-v2-mcp@ruby": "integration-v2-mcp", + "integration-v2-mcp@rust": "integration-v2-mcp", + "integration-v2-mcp@semantic-kernel": "integration-v2-mcp", + "integration-v2-mcp@smolagents": "integration-v2-mcp", + "integration-v2-mcp@sveltekit": "integration-v2-mcp", + "integration-v2-mcp@swift": "integration-v2-mcp", + "integration-v2-mcp@tanstack-router": "integration-v2-mcp", + "integration-v2-mcp@tanstack-start": "integration-v2-mcp", + "integration-v2-mcp@together-ai": "integration-v2-mcp", + "integration-v2-mcp@vercel-ai": "integration-v2-mcp", + "integration-v2-mcp@vue": "integration-v2-mcp", + "integration-v2-mcp@wordpress": "integration-v2-mcp", + "integration-v2-mcp@xai": "integration-v2-mcp", + "integration-v2-feature-flags-step@android": "integration-v2-feature-flags-step-android", + "integration-v2-feature-flags-step@angular": "integration-v2-feature-flags-step-angular", + "integration-v2-feature-flags-step@astro": "integration-v2-feature-flags-step-astro-hybrid", + "integration-v2-feature-flags-step@django": "integration-v2-feature-flags-step-django", + "integration-v2-feature-flags-step@elixir": "integration-v2-feature-flags-step-elixir", + "integration-v2-feature-flags-step@fastapi": "integration-v2-feature-flags-step-fastapi", + "integration-v2-feature-flags-step@flask": "integration-v2-feature-flags-step-flask", + "integration-v2-feature-flags-step@flutter": "integration-v2-feature-flags-step-flutter", + "integration-v2-feature-flags-step@go": "integration-v2-feature-flags-step-go", + "integration-v2-feature-flags-step@java": "integration-v2-feature-flags-step-java", + "integration-v2-feature-flags-step@javascript_node": "integration-v2-feature-flags-step-javascript_node", + "integration-v2-feature-flags-step@javascript_web": "integration-v2-feature-flags-step-javascript_web", + "integration-v2-feature-flags-step@kmp": "integration-v2-feature-flags-step-kmp", + "integration-v2-feature-flags-step@laravel": "integration-v2-feature-flags-step-laravel", + "integration-v2-feature-flags-step@nextjs": "integration-v2-feature-flags-step-nextjs-app-router", + "integration-v2-feature-flags-step@nuxt": "integration-v2-feature-flags-step-nuxt-4", + "integration-v2-feature-flags-step@python": "integration-v2-feature-flags-step-python", + "integration-v2-feature-flags-step@rails": "integration-v2-feature-flags-step-ruby-on-rails", + "integration-v2-feature-flags-step@react-native": "integration-v2-feature-flags-step-react-native", + "integration-v2-feature-flags-step@react-router": "integration-v2-feature-flags-step-react-react-router-6", + "integration-v2-feature-flags-step@ruby": "integration-v2-feature-flags-step-ruby", + "integration-v2-feature-flags-step@rust": "integration-v2-feature-flags-step-rust", + "integration-v2-feature-flags-step@sveltekit": "integration-v2-feature-flags-step-sveltekit", + "integration-v2-feature-flags-step@swift": "integration-v2-feature-flags-step-swift", + "integration-v2-feature-flags-step@tanstack-router": "integration-v2-feature-flags-step-react-tanstack-router-code-based", + "integration-v2-feature-flags-step@tanstack-start": "integration-v2-feature-flags-step-tanstack-start", + "integration-v2-feature-flags-step@vue": "integration-v2-feature-flags-step-vue-3", + "integration-v2-feature-flags-step@wordpress": "integration-v2-feature-flags-step-wordpress", + "integration-v2-notebook@-": "integration-v2-notebook", + "integration-v2-notebook@android": "integration-v2-notebook", + "integration-v2-notebook@angular": "integration-v2-notebook", + "integration-v2-notebook@anthropic": "integration-v2-notebook", + "integration-v2-notebook@astro": "integration-v2-notebook", + "integration-v2-notebook@autogen": "integration-v2-notebook", + "integration-v2-notebook@aws-bedrock": "integration-v2-notebook", + "integration-v2-notebook@azure-openai": "integration-v2-notebook", + "integration-v2-notebook@cerebras": "integration-v2-notebook", + "integration-v2-notebook@claude-agent-sdk": "integration-v2-notebook", + "integration-v2-notebook@claude-code": "integration-v2-notebook", + "integration-v2-notebook@cloudflare-ai-gateway": "integration-v2-notebook", + "integration-v2-notebook@cohere": "integration-v2-notebook", + "integration-v2-notebook@convex": "integration-v2-notebook", + "integration-v2-notebook@crewai": "integration-v2-notebook", + "integration-v2-notebook@dedalus": "integration-v2-notebook", + "integration-v2-notebook@deepseek": "integration-v2-notebook", + "integration-v2-notebook@django": "integration-v2-notebook", + "integration-v2-notebook@dspy": "integration-v2-notebook", + "integration-v2-notebook@elixir": "integration-v2-notebook", + "integration-v2-notebook@fastapi": "integration-v2-notebook", + "integration-v2-notebook@fireworks-ai": "integration-v2-notebook", + "integration-v2-notebook@flask": "integration-v2-notebook", + "integration-v2-notebook@flutter": "integration-v2-notebook", + "integration-v2-notebook@go": "integration-v2-notebook", + "integration-v2-notebook@google-adk": "integration-v2-notebook", + "integration-v2-notebook@google-gemini": "integration-v2-notebook", + "integration-v2-notebook@groq": "integration-v2-notebook", + "integration-v2-notebook@helicone": "integration-v2-notebook", + "integration-v2-notebook@hugging-face": "integration-v2-notebook", + "integration-v2-notebook@instructor": "integration-v2-notebook", + "integration-v2-notebook@java": "integration-v2-notebook", + "integration-v2-notebook@javascript_node": "integration-v2-notebook", + "integration-v2-notebook@javascript_web": "integration-v2-notebook", + "integration-v2-notebook@kmp": "integration-v2-notebook", + "integration-v2-notebook@langchain": "integration-v2-notebook", + "integration-v2-notebook@langgraph": "integration-v2-notebook", + "integration-v2-notebook@laravel": "integration-v2-notebook", + "integration-v2-notebook@litellm": "integration-v2-notebook", + "integration-v2-notebook@llamaindex": "integration-v2-notebook", + "integration-v2-notebook@manual-capture": "integration-v2-notebook", + "integration-v2-notebook@mastra": "integration-v2-notebook", + "integration-v2-notebook@mirascope": "integration-v2-notebook", + "integration-v2-notebook@mistral": "integration-v2-notebook", + "integration-v2-notebook@nextjs": "integration-v2-notebook", + "integration-v2-notebook@nuxt": "integration-v2-notebook", + "integration-v2-notebook@ollama": "integration-v2-notebook", + "integration-v2-notebook@openai": "integration-v2-notebook", + "integration-v2-notebook@openai-agents": "integration-v2-notebook", + "integration-v2-notebook@openclaw": "integration-v2-notebook", + "integration-v2-notebook@openrouter": "integration-v2-notebook", + "integration-v2-notebook@opentelemetry": "integration-v2-notebook", + "integration-v2-notebook@perplexity": "integration-v2-notebook", + "integration-v2-notebook@pi": "integration-v2-notebook", + "integration-v2-notebook@portkey": "integration-v2-notebook", + "integration-v2-notebook@pydantic-ai": "integration-v2-notebook", + "integration-v2-notebook@python": "integration-v2-notebook", + "integration-v2-notebook@rails": "integration-v2-notebook", + "integration-v2-notebook@react-native": "integration-v2-notebook", + "integration-v2-notebook@react-router": "integration-v2-notebook", + "integration-v2-notebook@ruby": "integration-v2-notebook", + "integration-v2-notebook@rust": "integration-v2-notebook", + "integration-v2-notebook@semantic-kernel": "integration-v2-notebook", + "integration-v2-notebook@smolagents": "integration-v2-notebook", + "integration-v2-notebook@sveltekit": "integration-v2-notebook", + "integration-v2-notebook@swift": "integration-v2-notebook", + "integration-v2-notebook@tanstack-router": "integration-v2-notebook", + "integration-v2-notebook@tanstack-start": "integration-v2-notebook", + "integration-v2-notebook@together-ai": "integration-v2-notebook", + "integration-v2-notebook@vercel-ai": "integration-v2-notebook", + "integration-v2-notebook@vue": "integration-v2-notebook", + "integration-v2-notebook@wordpress": "integration-v2-notebook", + "integration-v2-notebook@xai": "integration-v2-notebook", + "integration-v2-capture@android": "integration-v2-capture-android", + "integration-v2-capture@angular": "integration-v2-capture-angular", + "integration-v2-capture@astro": "integration-v2-capture-astro-hybrid", + "integration-v2-capture@django": "integration-v2-capture-django", + "integration-v2-capture@elixir": "integration-v2-capture-elixir", + "integration-v2-capture@fastapi": "integration-v2-capture-fastapi", + "integration-v2-capture@flask": "integration-v2-capture-flask", + "integration-v2-capture@flutter": "integration-v2-capture-flutter", + "integration-v2-capture@go": "integration-v2-capture-go", + "integration-v2-capture@java": "integration-v2-capture-java", + "integration-v2-capture@javascript_node": "integration-v2-capture-javascript_node", + "integration-v2-capture@javascript_web": "integration-v2-capture-javascript_web", + "integration-v2-capture@kmp": "integration-v2-capture-kmp", + "integration-v2-capture@laravel": "integration-v2-capture-laravel", + "integration-v2-capture@nextjs": "integration-v2-capture-nextjs-app-router", + "integration-v2-capture@nuxt": "integration-v2-capture-nuxt-3-6", + "integration-v2-capture@python": "integration-v2-capture-python", + "integration-v2-capture@rails": "integration-v2-capture-ruby-on-rails", + "integration-v2-capture@react-native": "integration-v2-capture-react-native", + "integration-v2-capture@react-router": "integration-v2-capture-react-react-router-6", + "integration-v2-capture@ruby": "integration-v2-capture-ruby", + "integration-v2-capture@rust": "integration-v2-capture-rust", + "integration-v2-capture@sveltekit": "integration-v2-capture-sveltekit", + "integration-v2-capture@swift": "integration-v2-capture-swift", + "integration-v2-capture@tanstack-router": "integration-v2-capture-react-tanstack-router-code-based", + "integration-v2-capture@tanstack-start": "integration-v2-capture-tanstack-start", + "integration-v2-capture@vue": "integration-v2-capture-vue-3", + "integration-v2-capture@wordpress": "integration-v2-capture-wordpress", + "integration-v2-dashboard@-": "integration-v2-dashboard", + "integration-v2-dashboard@android": "integration-v2-dashboard", + "integration-v2-dashboard@angular": "integration-v2-dashboard", + "integration-v2-dashboard@anthropic": "integration-v2-dashboard", + "integration-v2-dashboard@astro": "integration-v2-dashboard", + "integration-v2-dashboard@autogen": "integration-v2-dashboard", + "integration-v2-dashboard@aws-bedrock": "integration-v2-dashboard", + "integration-v2-dashboard@azure-openai": "integration-v2-dashboard", + "integration-v2-dashboard@cerebras": "integration-v2-dashboard", + "integration-v2-dashboard@claude-agent-sdk": "integration-v2-dashboard", + "integration-v2-dashboard@claude-code": "integration-v2-dashboard", + "integration-v2-dashboard@cloudflare-ai-gateway": "integration-v2-dashboard", + "integration-v2-dashboard@cohere": "integration-v2-dashboard", + "integration-v2-dashboard@convex": "integration-v2-dashboard", + "integration-v2-dashboard@crewai": "integration-v2-dashboard", + "integration-v2-dashboard@dedalus": "integration-v2-dashboard", + "integration-v2-dashboard@deepseek": "integration-v2-dashboard", + "integration-v2-dashboard@django": "integration-v2-dashboard", + "integration-v2-dashboard@dspy": "integration-v2-dashboard", + "integration-v2-dashboard@elixir": "integration-v2-dashboard", + "integration-v2-dashboard@fastapi": "integration-v2-dashboard", + "integration-v2-dashboard@fireworks-ai": "integration-v2-dashboard", + "integration-v2-dashboard@flask": "integration-v2-dashboard", + "integration-v2-dashboard@flutter": "integration-v2-dashboard", + "integration-v2-dashboard@go": "integration-v2-dashboard", + "integration-v2-dashboard@google-adk": "integration-v2-dashboard", + "integration-v2-dashboard@google-gemini": "integration-v2-dashboard", + "integration-v2-dashboard@groq": "integration-v2-dashboard", + "integration-v2-dashboard@helicone": "integration-v2-dashboard", + "integration-v2-dashboard@hugging-face": "integration-v2-dashboard", + "integration-v2-dashboard@instructor": "integration-v2-dashboard", + "integration-v2-dashboard@java": "integration-v2-dashboard", + "integration-v2-dashboard@javascript_node": "integration-v2-dashboard", + "integration-v2-dashboard@javascript_web": "integration-v2-dashboard", + "integration-v2-dashboard@kmp": "integration-v2-dashboard", + "integration-v2-dashboard@langchain": "integration-v2-dashboard", + "integration-v2-dashboard@langgraph": "integration-v2-dashboard", + "integration-v2-dashboard@laravel": "integration-v2-dashboard", + "integration-v2-dashboard@litellm": "integration-v2-dashboard", + "integration-v2-dashboard@llamaindex": "integration-v2-dashboard", + "integration-v2-dashboard@manual-capture": "integration-v2-dashboard", + "integration-v2-dashboard@mastra": "integration-v2-dashboard", + "integration-v2-dashboard@mirascope": "integration-v2-dashboard", + "integration-v2-dashboard@mistral": "integration-v2-dashboard", + "integration-v2-dashboard@nextjs": "integration-v2-dashboard", + "integration-v2-dashboard@nuxt": "integration-v2-dashboard", + "integration-v2-dashboard@ollama": "integration-v2-dashboard", + "integration-v2-dashboard@openai": "integration-v2-dashboard", + "integration-v2-dashboard@openai-agents": "integration-v2-dashboard", + "integration-v2-dashboard@openclaw": "integration-v2-dashboard", + "integration-v2-dashboard@openrouter": "integration-v2-dashboard", + "integration-v2-dashboard@opentelemetry": "integration-v2-dashboard", + "integration-v2-dashboard@perplexity": "integration-v2-dashboard", + "integration-v2-dashboard@pi": "integration-v2-dashboard", + "integration-v2-dashboard@portkey": "integration-v2-dashboard", + "integration-v2-dashboard@pydantic-ai": "integration-v2-dashboard", + "integration-v2-dashboard@python": "integration-v2-dashboard", + "integration-v2-dashboard@rails": "integration-v2-dashboard", + "integration-v2-dashboard@react-native": "integration-v2-dashboard", + "integration-v2-dashboard@react-router": "integration-v2-dashboard", + "integration-v2-dashboard@ruby": "integration-v2-dashboard", + "integration-v2-dashboard@rust": "integration-v2-dashboard", + "integration-v2-dashboard@semantic-kernel": "integration-v2-dashboard", + "integration-v2-dashboard@smolagents": "integration-v2-dashboard", + "integration-v2-dashboard@sveltekit": "integration-v2-dashboard", + "integration-v2-dashboard@swift": "integration-v2-dashboard", + "integration-v2-dashboard@tanstack-router": "integration-v2-dashboard", + "integration-v2-dashboard@tanstack-start": "integration-v2-dashboard", + "integration-v2-dashboard@together-ai": "integration-v2-dashboard", + "integration-v2-dashboard@vercel-ai": "integration-v2-dashboard", + "integration-v2-dashboard@vue": "integration-v2-dashboard", + "integration-v2-dashboard@wordpress": "integration-v2-dashboard", + "integration-v2-dashboard@xai": "integration-v2-dashboard", + "integration-v2-insight@-": "integration-v2-insight", + "integration-v2-insight@android": "integration-v2-insight", + "integration-v2-insight@angular": "integration-v2-insight", + "integration-v2-insight@anthropic": "integration-v2-insight", + "integration-v2-insight@astro": "integration-v2-insight", + "integration-v2-insight@autogen": "integration-v2-insight", + "integration-v2-insight@aws-bedrock": "integration-v2-insight", + "integration-v2-insight@azure-openai": "integration-v2-insight", + "integration-v2-insight@cerebras": "integration-v2-insight", + "integration-v2-insight@claude-agent-sdk": "integration-v2-insight", + "integration-v2-insight@claude-code": "integration-v2-insight", + "integration-v2-insight@cloudflare-ai-gateway": "integration-v2-insight", + "integration-v2-insight@cohere": "integration-v2-insight", + "integration-v2-insight@convex": "integration-v2-insight", + "integration-v2-insight@crewai": "integration-v2-insight", + "integration-v2-insight@dedalus": "integration-v2-insight", + "integration-v2-insight@deepseek": "integration-v2-insight", + "integration-v2-insight@django": "integration-v2-insight", + "integration-v2-insight@dspy": "integration-v2-insight", + "integration-v2-insight@elixir": "integration-v2-insight", + "integration-v2-insight@fastapi": "integration-v2-insight", + "integration-v2-insight@fireworks-ai": "integration-v2-insight", + "integration-v2-insight@flask": "integration-v2-insight", + "integration-v2-insight@flutter": "integration-v2-insight", + "integration-v2-insight@go": "integration-v2-insight", + "integration-v2-insight@google-adk": "integration-v2-insight", + "integration-v2-insight@google-gemini": "integration-v2-insight", + "integration-v2-insight@groq": "integration-v2-insight", + "integration-v2-insight@helicone": "integration-v2-insight", + "integration-v2-insight@hugging-face": "integration-v2-insight", + "integration-v2-insight@instructor": "integration-v2-insight", + "integration-v2-insight@java": "integration-v2-insight", + "integration-v2-insight@javascript_node": "integration-v2-insight", + "integration-v2-insight@javascript_web": "integration-v2-insight", + "integration-v2-insight@kmp": "integration-v2-insight", + "integration-v2-insight@langchain": "integration-v2-insight", + "integration-v2-insight@langgraph": "integration-v2-insight", + "integration-v2-insight@laravel": "integration-v2-insight", + "integration-v2-insight@litellm": "integration-v2-insight", + "integration-v2-insight@llamaindex": "integration-v2-insight", + "integration-v2-insight@manual-capture": "integration-v2-insight", + "integration-v2-insight@mastra": "integration-v2-insight", + "integration-v2-insight@mirascope": "integration-v2-insight", + "integration-v2-insight@mistral": "integration-v2-insight", + "integration-v2-insight@nextjs": "integration-v2-insight", + "integration-v2-insight@nuxt": "integration-v2-insight", + "integration-v2-insight@ollama": "integration-v2-insight", + "integration-v2-insight@openai": "integration-v2-insight", + "integration-v2-insight@openai-agents": "integration-v2-insight", + "integration-v2-insight@openclaw": "integration-v2-insight", + "integration-v2-insight@openrouter": "integration-v2-insight", + "integration-v2-insight@opentelemetry": "integration-v2-insight", + "integration-v2-insight@perplexity": "integration-v2-insight", + "integration-v2-insight@pi": "integration-v2-insight", + "integration-v2-insight@portkey": "integration-v2-insight", + "integration-v2-insight@pydantic-ai": "integration-v2-insight", + "integration-v2-insight@python": "integration-v2-insight", + "integration-v2-insight@rails": "integration-v2-insight", + "integration-v2-insight@react-native": "integration-v2-insight", + "integration-v2-insight@react-router": "integration-v2-insight", + "integration-v2-insight@ruby": "integration-v2-insight", + "integration-v2-insight@rust": "integration-v2-insight", + "integration-v2-insight@semantic-kernel": "integration-v2-insight", + "integration-v2-insight@smolagents": "integration-v2-insight", + "integration-v2-insight@sveltekit": "integration-v2-insight", + "integration-v2-insight@swift": "integration-v2-insight", + "integration-v2-insight@tanstack-router": "integration-v2-insight", + "integration-v2-insight@tanstack-start": "integration-v2-insight", + "integration-v2-insight@together-ai": "integration-v2-insight", + "integration-v2-insight@vercel-ai": "integration-v2-insight", + "integration-v2-insight@vue": "integration-v2-insight", + "integration-v2-insight@wordpress": "integration-v2-insight", + "integration-v2-insight@xai": "integration-v2-insight", + "integration-v2-identify@-": "integration-v2-identify", + "integration-v2-identify@android": "integration-v2-identify", + "integration-v2-identify@angular": "integration-v2-identify", + "integration-v2-identify@anthropic": "integration-v2-identify", + "integration-v2-identify@astro": "integration-v2-identify", + "integration-v2-identify@autogen": "integration-v2-identify", + "integration-v2-identify@aws-bedrock": "integration-v2-identify", + "integration-v2-identify@azure-openai": "integration-v2-identify", + "integration-v2-identify@cerebras": "integration-v2-identify", + "integration-v2-identify@claude-agent-sdk": "integration-v2-identify", + "integration-v2-identify@claude-code": "integration-v2-identify", + "integration-v2-identify@cloudflare-ai-gateway": "integration-v2-identify", + "integration-v2-identify@cohere": "integration-v2-identify", + "integration-v2-identify@convex": "integration-v2-identify", + "integration-v2-identify@crewai": "integration-v2-identify", + "integration-v2-identify@dedalus": "integration-v2-identify", + "integration-v2-identify@deepseek": "integration-v2-identify", + "integration-v2-identify@django": "integration-v2-identify", + "integration-v2-identify@dspy": "integration-v2-identify", + "integration-v2-identify@elixir": "integration-v2-identify", + "integration-v2-identify@fastapi": "integration-v2-identify", + "integration-v2-identify@fireworks-ai": "integration-v2-identify", + "integration-v2-identify@flask": "integration-v2-identify", + "integration-v2-identify@flutter": "integration-v2-identify", + "integration-v2-identify@go": "integration-v2-identify", + "integration-v2-identify@google-adk": "integration-v2-identify", + "integration-v2-identify@google-gemini": "integration-v2-identify", + "integration-v2-identify@groq": "integration-v2-identify", + "integration-v2-identify@helicone": "integration-v2-identify", + "integration-v2-identify@hugging-face": "integration-v2-identify", + "integration-v2-identify@instructor": "integration-v2-identify", + "integration-v2-identify@java": "integration-v2-identify", + "integration-v2-identify@javascript_node": "integration-v2-identify", + "integration-v2-identify@javascript_web": "integration-v2-identify", + "integration-v2-identify@kmp": "integration-v2-identify", + "integration-v2-identify@langchain": "integration-v2-identify", + "integration-v2-identify@langgraph": "integration-v2-identify", + "integration-v2-identify@laravel": "integration-v2-identify", + "integration-v2-identify@litellm": "integration-v2-identify", + "integration-v2-identify@llamaindex": "integration-v2-identify", + "integration-v2-identify@manual-capture": "integration-v2-identify", + "integration-v2-identify@mastra": "integration-v2-identify", + "integration-v2-identify@mirascope": "integration-v2-identify", + "integration-v2-identify@mistral": "integration-v2-identify", + "integration-v2-identify@nextjs": "integration-v2-identify", + "integration-v2-identify@nuxt": "integration-v2-identify", + "integration-v2-identify@ollama": "integration-v2-identify", + "integration-v2-identify@openai": "integration-v2-identify", + "integration-v2-identify@openai-agents": "integration-v2-identify", + "integration-v2-identify@openclaw": "integration-v2-identify", + "integration-v2-identify@openrouter": "integration-v2-identify", + "integration-v2-identify@opentelemetry": "integration-v2-identify", + "integration-v2-identify@perplexity": "integration-v2-identify", + "integration-v2-identify@pi": "integration-v2-identify", + "integration-v2-identify@portkey": "integration-v2-identify", + "integration-v2-identify@pydantic-ai": "integration-v2-identify", + "integration-v2-identify@python": "integration-v2-identify", + "integration-v2-identify@rails": "integration-v2-identify", + "integration-v2-identify@react-native": "integration-v2-identify", + "integration-v2-identify@react-router": "integration-v2-identify", + "integration-v2-identify@ruby": "integration-v2-identify", + "integration-v2-identify@rust": "integration-v2-identify", + "integration-v2-identify@semantic-kernel": "integration-v2-identify", + "integration-v2-identify@smolagents": "integration-v2-identify", + "integration-v2-identify@sveltekit": "integration-v2-identify", + "integration-v2-identify@swift": "integration-v2-identify", + "integration-v2-identify@tanstack-router": "integration-v2-identify", + "integration-v2-identify@tanstack-start": "integration-v2-identify", + "integration-v2-identify@together-ai": "integration-v2-identify", + "integration-v2-identify@vercel-ai": "integration-v2-identify", + "integration-v2-identify@vue": "integration-v2-identify", + "integration-v2-identify@wordpress": "integration-v2-identify", + "integration-v2-identify@xai": "integration-v2-identify", + "integration-v2-report@-": "integration-v2-report", + "integration-v2-report@android": "integration-v2-report", + "integration-v2-report@angular": "integration-v2-report", + "integration-v2-report@anthropic": "integration-v2-report", + "integration-v2-report@astro": "integration-v2-report", + "integration-v2-report@autogen": "integration-v2-report", + "integration-v2-report@aws-bedrock": "integration-v2-report", + "integration-v2-report@azure-openai": "integration-v2-report", + "integration-v2-report@cerebras": "integration-v2-report", + "integration-v2-report@claude-agent-sdk": "integration-v2-report", + "integration-v2-report@claude-code": "integration-v2-report", + "integration-v2-report@cloudflare-ai-gateway": "integration-v2-report", + "integration-v2-report@cohere": "integration-v2-report", + "integration-v2-report@convex": "integration-v2-report", + "integration-v2-report@crewai": "integration-v2-report", + "integration-v2-report@dedalus": "integration-v2-report", + "integration-v2-report@deepseek": "integration-v2-report", + "integration-v2-report@django": "integration-v2-report", + "integration-v2-report@dspy": "integration-v2-report", + "integration-v2-report@elixir": "integration-v2-report", + "integration-v2-report@fastapi": "integration-v2-report", + "integration-v2-report@fireworks-ai": "integration-v2-report", + "integration-v2-report@flask": "integration-v2-report", + "integration-v2-report@flutter": "integration-v2-report", + "integration-v2-report@go": "integration-v2-report", + "integration-v2-report@google-adk": "integration-v2-report", + "integration-v2-report@google-gemini": "integration-v2-report", + "integration-v2-report@groq": "integration-v2-report", + "integration-v2-report@helicone": "integration-v2-report", + "integration-v2-report@hugging-face": "integration-v2-report", + "integration-v2-report@instructor": "integration-v2-report", + "integration-v2-report@java": "integration-v2-report", + "integration-v2-report@javascript_node": "integration-v2-report", + "integration-v2-report@javascript_web": "integration-v2-report", + "integration-v2-report@kmp": "integration-v2-report", + "integration-v2-report@langchain": "integration-v2-report", + "integration-v2-report@langgraph": "integration-v2-report", + "integration-v2-report@laravel": "integration-v2-report", + "integration-v2-report@litellm": "integration-v2-report", + "integration-v2-report@llamaindex": "integration-v2-report", + "integration-v2-report@manual-capture": "integration-v2-report", + "integration-v2-report@mastra": "integration-v2-report", + "integration-v2-report@mirascope": "integration-v2-report", + "integration-v2-report@mistral": "integration-v2-report", + "integration-v2-report@nextjs": "integration-v2-report", + "integration-v2-report@nuxt": "integration-v2-report", + "integration-v2-report@ollama": "integration-v2-report", + "integration-v2-report@openai": "integration-v2-report", + "integration-v2-report@openai-agents": "integration-v2-report", + "integration-v2-report@openclaw": "integration-v2-report", + "integration-v2-report@openrouter": "integration-v2-report", + "integration-v2-report@opentelemetry": "integration-v2-report", + "integration-v2-report@perplexity": "integration-v2-report", + "integration-v2-report@pi": "integration-v2-report", + "integration-v2-report@portkey": "integration-v2-report", + "integration-v2-report@pydantic-ai": "integration-v2-report", + "integration-v2-report@python": "integration-v2-report", + "integration-v2-report@rails": "integration-v2-report", + "integration-v2-report@react-native": "integration-v2-report", + "integration-v2-report@react-router": "integration-v2-report", + "integration-v2-report@ruby": "integration-v2-report", + "integration-v2-report@rust": "integration-v2-report", + "integration-v2-report@semantic-kernel": "integration-v2-report", + "integration-v2-report@smolagents": "integration-v2-report", + "integration-v2-report@sveltekit": "integration-v2-report", + "integration-v2-report@swift": "integration-v2-report", + "integration-v2-report@tanstack-router": "integration-v2-report", + "integration-v2-report@tanstack-start": "integration-v2-report", + "integration-v2-report@together-ai": "integration-v2-report", + "integration-v2-report@vercel-ai": "integration-v2-report", + "integration-v2-report@vue": "integration-v2-report", + "integration-v2-report@wordpress": "integration-v2-report", + "integration-v2-report@xai": "integration-v2-report", + "integration-v2-build@-": "integration-v2-build", + "integration-v2-build@android": "integration-v2-build", + "integration-v2-build@angular": "integration-v2-build", + "integration-v2-build@anthropic": "integration-v2-build", + "integration-v2-build@astro": "integration-v2-build", + "integration-v2-build@autogen": "integration-v2-build", + "integration-v2-build@aws-bedrock": "integration-v2-build", + "integration-v2-build@azure-openai": "integration-v2-build", + "integration-v2-build@cerebras": "integration-v2-build", + "integration-v2-build@claude-agent-sdk": "integration-v2-build", + "integration-v2-build@claude-code": "integration-v2-build", + "integration-v2-build@cloudflare-ai-gateway": "integration-v2-build", + "integration-v2-build@cohere": "integration-v2-build", + "integration-v2-build@convex": "integration-v2-build", + "integration-v2-build@crewai": "integration-v2-build", + "integration-v2-build@dedalus": "integration-v2-build", + "integration-v2-build@deepseek": "integration-v2-build", + "integration-v2-build@django": "integration-v2-build", + "integration-v2-build@dspy": "integration-v2-build", + "integration-v2-build@elixir": "integration-v2-build", + "integration-v2-build@fastapi": "integration-v2-build", + "integration-v2-build@fireworks-ai": "integration-v2-build", + "integration-v2-build@flask": "integration-v2-build", + "integration-v2-build@flutter": "integration-v2-build", + "integration-v2-build@go": "integration-v2-build", + "integration-v2-build@google-adk": "integration-v2-build", + "integration-v2-build@google-gemini": "integration-v2-build", + "integration-v2-build@groq": "integration-v2-build", + "integration-v2-build@helicone": "integration-v2-build", + "integration-v2-build@hugging-face": "integration-v2-build", + "integration-v2-build@instructor": "integration-v2-build", + "integration-v2-build@java": "integration-v2-build", + "integration-v2-build@javascript_node": "integration-v2-build", + "integration-v2-build@javascript_web": "integration-v2-build", + "integration-v2-build@kmp": "integration-v2-build", + "integration-v2-build@langchain": "integration-v2-build", + "integration-v2-build@langgraph": "integration-v2-build", + "integration-v2-build@laravel": "integration-v2-build", + "integration-v2-build@litellm": "integration-v2-build", + "integration-v2-build@llamaindex": "integration-v2-build", + "integration-v2-build@manual-capture": "integration-v2-build", + "integration-v2-build@mastra": "integration-v2-build", + "integration-v2-build@mirascope": "integration-v2-build", + "integration-v2-build@mistral": "integration-v2-build", + "integration-v2-build@nextjs": "integration-v2-build", + "integration-v2-build@nuxt": "integration-v2-build", + "integration-v2-build@ollama": "integration-v2-build", + "integration-v2-build@openai": "integration-v2-build", + "integration-v2-build@openai-agents": "integration-v2-build", + "integration-v2-build@openclaw": "integration-v2-build", + "integration-v2-build@openrouter": "integration-v2-build", + "integration-v2-build@opentelemetry": "integration-v2-build", + "integration-v2-build@perplexity": "integration-v2-build", + "integration-v2-build@pi": "integration-v2-build", + "integration-v2-build@portkey": "integration-v2-build", + "integration-v2-build@pydantic-ai": "integration-v2-build", + "integration-v2-build@python": "integration-v2-build", + "integration-v2-build@rails": "integration-v2-build", + "integration-v2-build@react-native": "integration-v2-build", + "integration-v2-build@react-router": "integration-v2-build", + "integration-v2-build@ruby": "integration-v2-build", + "integration-v2-build@rust": "integration-v2-build", + "integration-v2-build@semantic-kernel": "integration-v2-build", + "integration-v2-build@smolagents": "integration-v2-build", + "integration-v2-build@sveltekit": "integration-v2-build", + "integration-v2-build@swift": "integration-v2-build", + "integration-v2-build@tanstack-router": "integration-v2-build", + "integration-v2-build@tanstack-start": "integration-v2-build", + "integration-v2-build@together-ai": "integration-v2-build", + "integration-v2-build@vercel-ai": "integration-v2-build", + "integration-v2-build@vue": "integration-v2-build", + "integration-v2-build@wordpress": "integration-v2-build", + "integration-v2-build@xai": "integration-v2-build", + "integration-v2-warehouse@-": "integration-v2-warehouse", + "integration-v2-warehouse@android": "integration-v2-warehouse", + "integration-v2-warehouse@angular": "integration-v2-warehouse", + "integration-v2-warehouse@anthropic": "integration-v2-warehouse", + "integration-v2-warehouse@astro": "integration-v2-warehouse", + "integration-v2-warehouse@autogen": "integration-v2-warehouse", + "integration-v2-warehouse@aws-bedrock": "integration-v2-warehouse", + "integration-v2-warehouse@azure-openai": "integration-v2-warehouse", + "integration-v2-warehouse@cerebras": "integration-v2-warehouse", + "integration-v2-warehouse@claude-agent-sdk": "integration-v2-warehouse", + "integration-v2-warehouse@claude-code": "integration-v2-warehouse", + "integration-v2-warehouse@cloudflare-ai-gateway": "integration-v2-warehouse", + "integration-v2-warehouse@cohere": "integration-v2-warehouse", + "integration-v2-warehouse@convex": "integration-v2-warehouse", + "integration-v2-warehouse@crewai": "integration-v2-warehouse", + "integration-v2-warehouse@dedalus": "integration-v2-warehouse", + "integration-v2-warehouse@deepseek": "integration-v2-warehouse", + "integration-v2-warehouse@django": "integration-v2-warehouse", + "integration-v2-warehouse@dspy": "integration-v2-warehouse", + "integration-v2-warehouse@elixir": "integration-v2-warehouse", + "integration-v2-warehouse@fastapi": "integration-v2-warehouse", + "integration-v2-warehouse@fireworks-ai": "integration-v2-warehouse", + "integration-v2-warehouse@flask": "integration-v2-warehouse", + "integration-v2-warehouse@flutter": "integration-v2-warehouse", + "integration-v2-warehouse@go": "integration-v2-warehouse", + "integration-v2-warehouse@google-adk": "integration-v2-warehouse", + "integration-v2-warehouse@google-gemini": "integration-v2-warehouse", + "integration-v2-warehouse@groq": "integration-v2-warehouse", + "integration-v2-warehouse@helicone": "integration-v2-warehouse", + "integration-v2-warehouse@hugging-face": "integration-v2-warehouse", + "integration-v2-warehouse@instructor": "integration-v2-warehouse", + "integration-v2-warehouse@java": "integration-v2-warehouse", + "integration-v2-warehouse@javascript_node": "integration-v2-warehouse", + "integration-v2-warehouse@javascript_web": "integration-v2-warehouse", + "integration-v2-warehouse@kmp": "integration-v2-warehouse", + "integration-v2-warehouse@langchain": "integration-v2-warehouse", + "integration-v2-warehouse@langgraph": "integration-v2-warehouse", + "integration-v2-warehouse@laravel": "integration-v2-warehouse", + "integration-v2-warehouse@litellm": "integration-v2-warehouse", + "integration-v2-warehouse@llamaindex": "integration-v2-warehouse", + "integration-v2-warehouse@manual-capture": "integration-v2-warehouse", + "integration-v2-warehouse@mastra": "integration-v2-warehouse", + "integration-v2-warehouse@mirascope": "integration-v2-warehouse", + "integration-v2-warehouse@mistral": "integration-v2-warehouse", + "integration-v2-warehouse@nextjs": "integration-v2-warehouse", + "integration-v2-warehouse@nuxt": "integration-v2-warehouse", + "integration-v2-warehouse@ollama": "integration-v2-warehouse", + "integration-v2-warehouse@openai": "integration-v2-warehouse", + "integration-v2-warehouse@openai-agents": "integration-v2-warehouse", + "integration-v2-warehouse@openclaw": "integration-v2-warehouse", + "integration-v2-warehouse@openrouter": "integration-v2-warehouse", + "integration-v2-warehouse@opentelemetry": "integration-v2-warehouse", + "integration-v2-warehouse@perplexity": "integration-v2-warehouse", + "integration-v2-warehouse@pi": "integration-v2-warehouse", + "integration-v2-warehouse@portkey": "integration-v2-warehouse", + "integration-v2-warehouse@pydantic-ai": "integration-v2-warehouse", + "integration-v2-warehouse@python": "integration-v2-warehouse", + "integration-v2-warehouse@rails": "integration-v2-warehouse", + "integration-v2-warehouse@react-native": "integration-v2-warehouse", + "integration-v2-warehouse@react-router": "integration-v2-warehouse", + "integration-v2-warehouse@ruby": "integration-v2-warehouse", + "integration-v2-warehouse@rust": "integration-v2-warehouse", + "integration-v2-warehouse@semantic-kernel": "integration-v2-warehouse", + "integration-v2-warehouse@smolagents": "integration-v2-warehouse", + "integration-v2-warehouse@sveltekit": "integration-v2-warehouse", + "integration-v2-warehouse@swift": "integration-v2-warehouse", + "integration-v2-warehouse@tanstack-router": "integration-v2-warehouse", + "integration-v2-warehouse@tanstack-start": "integration-v2-warehouse", + "integration-v2-warehouse@together-ai": "integration-v2-warehouse", + "integration-v2-warehouse@vercel-ai": "integration-v2-warehouse", + "integration-v2-warehouse@vue": "integration-v2-warehouse", + "integration-v2-warehouse@wordpress": "integration-v2-warehouse", + "integration-v2-warehouse@xai": "integration-v2-warehouse", + "replay-vision-enable-replay@android": "replay-vision-enable-replay-android", + "replay-vision-enable-replay@angular": "replay-vision-enable-replay-angular", + "replay-vision-enable-replay@astro": "replay-vision-enable-replay-astro-hybrid", + "replay-vision-enable-replay@django": "replay-vision-enable-replay-django", + "replay-vision-enable-replay@elixir": "replay-vision-enable-replay-elixir", + "replay-vision-enable-replay@fastapi": "replay-vision-enable-replay-fastapi", + "replay-vision-enable-replay@flask": "replay-vision-enable-replay-flask", + "replay-vision-enable-replay@flutter": "replay-vision-enable-replay-flutter", + "replay-vision-enable-replay@go": "replay-vision-enable-replay-go", + "replay-vision-enable-replay@java": "replay-vision-enable-replay-java", + "replay-vision-enable-replay@javascript_node": "replay-vision-enable-replay-javascript_node", + "replay-vision-enable-replay@javascript_web": "replay-vision-enable-replay-javascript_web", + "replay-vision-enable-replay@kmp": "replay-vision-enable-replay-kmp", + "replay-vision-enable-replay@laravel": "replay-vision-enable-replay-laravel", + "replay-vision-enable-replay@nextjs": "replay-vision-enable-replay-nextjs-app-router", + "replay-vision-enable-replay@nuxt": "replay-vision-enable-replay-nuxt-3-6", + "replay-vision-enable-replay@python": "replay-vision-enable-replay-python", + "replay-vision-enable-replay@rails": "replay-vision-enable-replay-ruby-on-rails", + "replay-vision-enable-replay@react-native": "replay-vision-enable-replay-react-native", + "replay-vision-enable-replay@react-router": "replay-vision-enable-replay-react-react-router-6", + "replay-vision-enable-replay@ruby": "replay-vision-enable-replay-ruby", + "replay-vision-enable-replay@rust": "replay-vision-enable-replay-rust", + "replay-vision-enable-replay@sveltekit": "replay-vision-enable-replay-sveltekit", + "replay-vision-enable-replay@swift": "replay-vision-enable-replay-swift", + "replay-vision-enable-replay@tanstack-router": "replay-vision-enable-replay-react-tanstack-router-code-based", + "replay-vision-enable-replay@tanstack-start": "replay-vision-enable-replay-tanstack-start", + "replay-vision-enable-replay@vue": "replay-vision-enable-replay-vue-3", + "replay-vision-enable-replay@wordpress": "replay-vision-enable-replay-wordpress", + "replay-vision-scanners-core@-": "replay-vision-scanners-core", + "replay-vision-scanners-core@android": "replay-vision-scanners-core", + "replay-vision-scanners-core@angular": "replay-vision-scanners-core", + "replay-vision-scanners-core@anthropic": "replay-vision-scanners-core", + "replay-vision-scanners-core@astro": "replay-vision-scanners-core", + "replay-vision-scanners-core@autogen": "replay-vision-scanners-core", + "replay-vision-scanners-core@aws-bedrock": "replay-vision-scanners-core", + "replay-vision-scanners-core@azure-openai": "replay-vision-scanners-core", + "replay-vision-scanners-core@cerebras": "replay-vision-scanners-core", + "replay-vision-scanners-core@claude-agent-sdk": "replay-vision-scanners-core", + "replay-vision-scanners-core@claude-code": "replay-vision-scanners-core", + "replay-vision-scanners-core@cloudflare-ai-gateway": "replay-vision-scanners-core", + "replay-vision-scanners-core@cohere": "replay-vision-scanners-core", + "replay-vision-scanners-core@convex": "replay-vision-scanners-core", + "replay-vision-scanners-core@crewai": "replay-vision-scanners-core", + "replay-vision-scanners-core@dedalus": "replay-vision-scanners-core", + "replay-vision-scanners-core@deepseek": "replay-vision-scanners-core", + "replay-vision-scanners-core@django": "replay-vision-scanners-core", + "replay-vision-scanners-core@dspy": "replay-vision-scanners-core", + "replay-vision-scanners-core@elixir": "replay-vision-scanners-core", + "replay-vision-scanners-core@fastapi": "replay-vision-scanners-core", + "replay-vision-scanners-core@fireworks-ai": "replay-vision-scanners-core", + "replay-vision-scanners-core@flask": "replay-vision-scanners-core", + "replay-vision-scanners-core@flutter": "replay-vision-scanners-core", + "replay-vision-scanners-core@go": "replay-vision-scanners-core", + "replay-vision-scanners-core@google-adk": "replay-vision-scanners-core", + "replay-vision-scanners-core@google-gemini": "replay-vision-scanners-core", + "replay-vision-scanners-core@groq": "replay-vision-scanners-core", + "replay-vision-scanners-core@helicone": "replay-vision-scanners-core", + "replay-vision-scanners-core@hugging-face": "replay-vision-scanners-core", + "replay-vision-scanners-core@instructor": "replay-vision-scanners-core", + "replay-vision-scanners-core@java": "replay-vision-scanners-core", + "replay-vision-scanners-core@javascript_node": "replay-vision-scanners-core", + "replay-vision-scanners-core@javascript_web": "replay-vision-scanners-core", + "replay-vision-scanners-core@kmp": "replay-vision-scanners-core", + "replay-vision-scanners-core@langchain": "replay-vision-scanners-core", + "replay-vision-scanners-core@langgraph": "replay-vision-scanners-core", + "replay-vision-scanners-core@laravel": "replay-vision-scanners-core", + "replay-vision-scanners-core@litellm": "replay-vision-scanners-core", + "replay-vision-scanners-core@llamaindex": "replay-vision-scanners-core", + "replay-vision-scanners-core@manual-capture": "replay-vision-scanners-core", + "replay-vision-scanners-core@mastra": "replay-vision-scanners-core", + "replay-vision-scanners-core@mirascope": "replay-vision-scanners-core", + "replay-vision-scanners-core@mistral": "replay-vision-scanners-core", + "replay-vision-scanners-core@nextjs": "replay-vision-scanners-core", + "replay-vision-scanners-core@nuxt": "replay-vision-scanners-core", + "replay-vision-scanners-core@ollama": "replay-vision-scanners-core", + "replay-vision-scanners-core@openai": "replay-vision-scanners-core", + "replay-vision-scanners-core@openai-agents": "replay-vision-scanners-core", + "replay-vision-scanners-core@openclaw": "replay-vision-scanners-core", + "replay-vision-scanners-core@openrouter": "replay-vision-scanners-core", + "replay-vision-scanners-core@opentelemetry": "replay-vision-scanners-core", + "replay-vision-scanners-core@perplexity": "replay-vision-scanners-core", + "replay-vision-scanners-core@pi": "replay-vision-scanners-core", + "replay-vision-scanners-core@portkey": "replay-vision-scanners-core", + "replay-vision-scanners-core@pydantic-ai": "replay-vision-scanners-core", + "replay-vision-scanners-core@python": "replay-vision-scanners-core", + "replay-vision-scanners-core@rails": "replay-vision-scanners-core", + "replay-vision-scanners-core@react-native": "replay-vision-scanners-core", + "replay-vision-scanners-core@react-router": "replay-vision-scanners-core", + "replay-vision-scanners-core@ruby": "replay-vision-scanners-core", + "replay-vision-scanners-core@rust": "replay-vision-scanners-core", + "replay-vision-scanners-core@semantic-kernel": "replay-vision-scanners-core", + "replay-vision-scanners-core@smolagents": "replay-vision-scanners-core", + "replay-vision-scanners-core@sveltekit": "replay-vision-scanners-core", + "replay-vision-scanners-core@swift": "replay-vision-scanners-core", + "replay-vision-scanners-core@tanstack-router": "replay-vision-scanners-core", + "replay-vision-scanners-core@tanstack-start": "replay-vision-scanners-core", + "replay-vision-scanners-core@together-ai": "replay-vision-scanners-core", + "replay-vision-scanners-core@vercel-ai": "replay-vision-scanners-core", + "replay-vision-scanners-core@vue": "replay-vision-scanners-core", + "replay-vision-scanners-core@wordpress": "replay-vision-scanners-core", + "replay-vision-scanners-core@xai": "replay-vision-scanners-core", + "replay-vision-scanner-broken-experiences@-": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@android": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@angular": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@anthropic": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@astro": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@autogen": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@aws-bedrock": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@azure-openai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@cerebras": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@claude-agent-sdk": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@claude-code": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@cloudflare-ai-gateway": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@cohere": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@convex": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@crewai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@dedalus": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@deepseek": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@django": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@dspy": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@elixir": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@fastapi": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@fireworks-ai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@flask": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@flutter": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@go": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@google-adk": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@google-gemini": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@groq": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@helicone": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@hugging-face": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@instructor": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@java": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@javascript_node": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@javascript_web": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@kmp": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@langchain": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@langgraph": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@laravel": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@litellm": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@llamaindex": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@manual-capture": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@mastra": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@mirascope": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@mistral": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@nextjs": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@nuxt": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@ollama": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@openai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@openai-agents": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@openclaw": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@openrouter": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@opentelemetry": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@perplexity": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@pi": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@portkey": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@pydantic-ai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@python": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@rails": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@react-native": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@react-router": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@ruby": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@rust": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@semantic-kernel": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@smolagents": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@sveltekit": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@swift": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@tanstack-router": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@tanstack-start": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@together-ai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@vercel-ai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@vue": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@wordpress": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-broken-experiences@xai": "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries@-": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@android": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@angular": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@anthropic": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@astro": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@autogen": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@aws-bedrock": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@azure-openai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@cerebras": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@claude-agent-sdk": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@claude-code": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@cloudflare-ai-gateway": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@cohere": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@convex": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@crewai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@dedalus": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@deepseek": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@django": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@dspy": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@elixir": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@fastapi": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@fireworks-ai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@flask": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@flutter": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@go": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@google-adk": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@google-gemini": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@groq": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@helicone": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@hugging-face": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@instructor": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@java": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@javascript_node": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@javascript_web": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@kmp": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@langchain": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@langgraph": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@laravel": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@litellm": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@llamaindex": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@manual-capture": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@mastra": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@mirascope": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@mistral": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@nextjs": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@nuxt": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@ollama": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@openai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@openai-agents": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@openclaw": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@openrouter": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@opentelemetry": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@perplexity": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@pi": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@portkey": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@pydantic-ai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@python": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@rails": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@react-native": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@react-router": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@ruby": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@rust": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@semantic-kernel": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@smolagents": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@sveltekit": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@swift": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@tanstack-router": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@tanstack-start": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@together-ai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@vercel-ai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@vue": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@wordpress": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-session-summaries@xai": "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration@-": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@android": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@angular": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@anthropic": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@astro": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@autogen": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@aws-bedrock": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@azure-openai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@cerebras": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@claude-agent-sdk": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@claude-code": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@cloudflare-ai-gateway": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@cohere": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@convex": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@crewai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@dedalus": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@deepseek": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@django": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@dspy": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@elixir": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@fastapi": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@fireworks-ai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@flask": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@flutter": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@go": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@google-adk": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@google-gemini": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@groq": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@helicone": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@hugging-face": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@instructor": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@java": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@javascript_node": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@javascript_web": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@kmp": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@langchain": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@langgraph": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@laravel": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@litellm": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@llamaindex": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@manual-capture": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@mastra": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@mirascope": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@mistral": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@nextjs": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@nuxt": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@ollama": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@openai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@openai-agents": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@openclaw": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@openrouter": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@opentelemetry": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@perplexity": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@pi": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@portkey": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@pydantic-ai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@python": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@rails": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@react-native": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@react-router": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@ruby": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@rust": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@semantic-kernel": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@smolagents": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@sveltekit": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@swift": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@tanstack-router": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@tanstack-start": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@together-ai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@vercel-ai": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@vue": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@wordpress": "replay-vision-scanner-user-frustration", + "replay-vision-scanner-user-frustration@xai": "replay-vision-scanner-user-frustration", + "integration@android": "integration-android", + "integration@angular": "integration-angular", + "integration@astro": "integration-astro-hybrid", + "integration@django": "integration-django", + "integration@elixir": "integration-elixir", + "integration@fastapi": "integration-fastapi", + "integration@flask": "integration-flask", + "integration@flutter": "integration-flutter", + "integration@go": "integration-go", + "integration@java": "integration-java", + "integration@javascript_node": "integration-javascript_node", + "integration@javascript_web": "integration-javascript_web", + "integration@kmp": "integration-kmp", + "integration@laravel": "integration-laravel", + "integration@nextjs": "integration-nextjs-app-router", + "integration@nuxt": "integration-nuxt-3-6", + "integration@python": "integration-python", + "integration@rails": "integration-ruby-on-rails", + "integration@react-native": "integration-react-native", + "integration@react-router": "integration-react-react-router-6", + "integration@ruby": "integration-ruby", + "integration@rust": "integration-rust", + "integration@sveltekit": "integration-sveltekit", + "integration@swift": "integration-swift", + "integration@tanstack-router": "integration-react-tanstack-router-code-based", + "integration@tanstack-start": "integration-tanstack-start", + "integration@vue": "integration-vue-3", + "integration@wordpress": "integration-wordpress" + }, + "spellbook": { + "posthog-integration@android": [ + "integration-android" + ], + "error-tracking@android": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@android": [ + "feature-flags-react" + ], + "integration-v2@android": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@android": [ + "metrics-javascript" + ], + "replay-vision@android": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@angular": [ + "integration-angular" + ], + "error-tracking@angular": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@angular": [ + "feature-flags-react" + ], + "integration-v2@angular": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@angular": [ + "metrics-javascript" + ], + "replay-vision@angular": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@anthropic": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@anthropic": [ + "feature-flags-react" + ], + "integration-v2@anthropic": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@anthropic": [ + "metrics-javascript" + ], + "replay-vision@anthropic": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@astro": [ + "integration-astro-hybrid" + ], + "error-tracking@astro": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@astro": [ + "feature-flags-react" + ], + "integration-v2@astro": [ + "integration-v2-build", + "integration-v2-capture-astro-hybrid", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-astro-hybrid", + "integration-v2-feature-flags-step-astro-hybrid", + "integration-v2-identify", + "integration-v2-init-astro-hybrid", + "integration-v2-insight", + "integration-v2-install-astro-hybrid", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@astro": [ + "metrics-javascript" + ], + "replay-vision@astro": [ + "replay-vision-setup", + "replay-vision-enable-replay-astro-hybrid", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@autogen": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@autogen": [ + "feature-flags-react" + ], + "integration-v2@autogen": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@autogen": [ + "metrics-javascript" + ], + "replay-vision@autogen": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@aws-bedrock": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@aws-bedrock": [ + "feature-flags-react" + ], + "integration-v2@aws-bedrock": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@aws-bedrock": [ + "metrics-javascript" + ], + "replay-vision@aws-bedrock": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@azure-openai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@azure-openai": [ + "feature-flags-react" + ], + "integration-v2@azure-openai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@azure-openai": [ + "metrics-javascript" + ], + "replay-vision@azure-openai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@cerebras": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@cerebras": [ + "feature-flags-react" + ], + "integration-v2@cerebras": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@cerebras": [ + "metrics-javascript" + ], + "replay-vision@cerebras": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@claude-agent-sdk": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@claude-agent-sdk": [ + "feature-flags-react" + ], + "integration-v2@claude-agent-sdk": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@claude-agent-sdk": [ + "metrics-javascript" + ], + "replay-vision@claude-agent-sdk": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@claude-code": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@claude-code": [ + "feature-flags-react" + ], + "integration-v2@claude-code": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@claude-code": [ + "metrics-javascript" + ], + "replay-vision@claude-code": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@cloudflare-ai-gateway": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@cloudflare-ai-gateway": [ + "feature-flags-react" + ], + "integration-v2@cloudflare-ai-gateway": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@cloudflare-ai-gateway": [ + "metrics-javascript" + ], + "replay-vision@cloudflare-ai-gateway": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@cohere": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@cohere": [ + "feature-flags-react" + ], + "integration-v2@cohere": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@cohere": [ + "metrics-javascript" + ], + "replay-vision@cohere": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@convex": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@convex": [ + "feature-flags-react" + ], + "integration-v2@convex": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@convex": [ + "metrics-javascript" + ], + "replay-vision@convex": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@crewai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@crewai": [ + "feature-flags-react" + ], + "integration-v2@crewai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@crewai": [ + "metrics-javascript" + ], + "replay-vision@crewai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@dedalus": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@dedalus": [ + "feature-flags-react" + ], + "integration-v2@dedalus": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@dedalus": [ + "metrics-javascript" + ], + "replay-vision@dedalus": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@deepseek": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@deepseek": [ + "feature-flags-react" + ], + "integration-v2@deepseek": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@deepseek": [ + "metrics-javascript" + ], + "replay-vision@deepseek": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@django": [ + "integration-django" + ], + "error-tracking@django": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@django": [ + "feature-flags-react" + ], + "integration-v2@django": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@django": [ + "metrics-javascript" + ], + "replay-vision@django": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@dspy": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@dspy": [ + "feature-flags-react" + ], + "integration-v2@dspy": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@dspy": [ + "metrics-javascript" + ], + "replay-vision@dspy": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@elixir": [ + "integration-elixir" + ], + "error-tracking@elixir": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@elixir": [ + "feature-flags-react" + ], + "integration-v2@elixir": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@elixir": [ + "metrics-javascript" + ], + "replay-vision@elixir": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@fastapi": [ + "integration-fastapi" + ], + "error-tracking@fastapi": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@fastapi": [ + "feature-flags-react" + ], + "integration-v2@fastapi": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@fastapi": [ + "metrics-javascript" + ], + "replay-vision@fastapi": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@fireworks-ai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@fireworks-ai": [ + "feature-flags-react" + ], + "integration-v2@fireworks-ai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@fireworks-ai": [ + "metrics-javascript" + ], + "replay-vision@fireworks-ai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@flask": [ + "integration-flask" + ], + "error-tracking@flask": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@flask": [ + "feature-flags-react" + ], + "integration-v2@flask": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@flask": [ + "metrics-javascript" + ], + "replay-vision@flask": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@flutter": [ + "integration-flutter" + ], + "error-tracking@flutter": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@flutter": [ + "feature-flags-react" + ], + "integration-v2@flutter": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@flutter": [ + "metrics-javascript" + ], + "replay-vision@flutter": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@go": [ + "integration-go" + ], + "error-tracking@go": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@go": [ + "feature-flags-react" + ], + "integration-v2@go": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@go": [ + "metrics-javascript" + ], + "replay-vision@go": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@google-adk": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@google-adk": [ + "feature-flags-react" + ], + "integration-v2@google-adk": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@google-adk": [ + "metrics-javascript" + ], + "replay-vision@google-adk": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@google-gemini": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@google-gemini": [ + "feature-flags-react" + ], + "integration-v2@google-gemini": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@google-gemini": [ + "metrics-javascript" + ], + "replay-vision@google-gemini": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@groq": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@groq": [ + "feature-flags-react" + ], + "integration-v2@groq": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@groq": [ + "metrics-javascript" + ], + "replay-vision@groq": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@helicone": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@helicone": [ + "feature-flags-react" + ], + "integration-v2@helicone": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@helicone": [ + "metrics-javascript" + ], + "replay-vision@helicone": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@hugging-face": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@hugging-face": [ + "feature-flags-react" + ], + "integration-v2@hugging-face": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@hugging-face": [ + "metrics-javascript" + ], + "replay-vision@hugging-face": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@instructor": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@instructor": [ + "feature-flags-react" + ], + "integration-v2@instructor": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@instructor": [ + "metrics-javascript" + ], + "replay-vision@instructor": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@java": [ + "integration-java" + ], + "error-tracking@java": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@java": [ + "feature-flags-react" + ], + "integration-v2@java": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@java": [ + "metrics-javascript" + ], + "replay-vision@java": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@javascript_node": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@javascript_node": [ + "feature-flags-react" + ], + "integration-v2@javascript_node": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@javascript_node": [ + "metrics-javascript" + ], + "replay-vision@javascript_node": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@javascript_web": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@javascript_web": [ + "feature-flags-react" + ], + "integration-v2@javascript_web": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@javascript_web": [ + "metrics-javascript" + ], + "replay-vision@javascript_web": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@kmp": [ + "integration-kmp" + ], + "error-tracking@kmp": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@kmp": [ + "feature-flags-react" + ], + "integration-v2@kmp": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@kmp": [ + "metrics-javascript" + ], + "replay-vision@kmp": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@langchain": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@langchain": [ + "feature-flags-react" + ], + "integration-v2@langchain": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@langchain": [ + "metrics-javascript" + ], + "replay-vision@langchain": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@langgraph": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@langgraph": [ + "feature-flags-react" + ], + "integration-v2@langgraph": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@langgraph": [ + "metrics-javascript" + ], + "replay-vision@langgraph": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@laravel": [ + "integration-laravel" + ], + "error-tracking@laravel": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@laravel": [ + "feature-flags-react" + ], + "integration-v2@laravel": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@laravel": [ + "metrics-javascript" + ], + "replay-vision@laravel": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@litellm": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@litellm": [ + "feature-flags-react" + ], + "integration-v2@litellm": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@litellm": [ + "metrics-javascript" + ], + "replay-vision@litellm": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@llamaindex": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@llamaindex": [ + "feature-flags-react" + ], + "integration-v2@llamaindex": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@llamaindex": [ + "metrics-javascript" + ], + "replay-vision@llamaindex": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@manual-capture": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@manual-capture": [ + "feature-flags-react" + ], + "integration-v2@manual-capture": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@manual-capture": [ + "metrics-javascript" + ], + "replay-vision@manual-capture": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@mastra": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@mastra": [ + "feature-flags-react" + ], + "integration-v2@mastra": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@mastra": [ + "metrics-javascript" + ], + "replay-vision@mastra": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@mirascope": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@mirascope": [ + "feature-flags-react" + ], + "integration-v2@mirascope": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@mirascope": [ + "metrics-javascript" + ], + "replay-vision@mirascope": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@mistral": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@mistral": [ + "feature-flags-react" + ], + "integration-v2@mistral": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@mistral": [ + "metrics-javascript" + ], + "replay-vision@mistral": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@nextjs": [ + "integration-nextjs-app-router" + ], + "error-tracking@nextjs": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@nextjs": [ + "feature-flags-react" + ], + "integration-v2@nextjs": [ + "integration-v2-build", + "integration-v2-capture-nextjs-app-router", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-nextjs-app-router", + "integration-v2-feature-flags-step-nextjs-app-router", + "integration-v2-identify", + "integration-v2-init-nextjs-app-router", + "integration-v2-insight", + "integration-v2-install-nextjs-app-router", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@nextjs": [ + "metrics-javascript" + ], + "replay-vision@nextjs": [ + "replay-vision-setup", + "replay-vision-enable-replay-nextjs-app-router", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@nuxt": [ + "integration-nuxt-3-6" + ], + "error-tracking@nuxt": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@nuxt": [ + "feature-flags-react" + ], + "integration-v2@nuxt": [ + "integration-v2-build", + "integration-v2-capture-nuxt-3-6", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-nuxt-4", + "integration-v2-feature-flags-step-nuxt-4", + "integration-v2-identify", + "integration-v2-init-nuxt-3-6", + "integration-v2-insight", + "integration-v2-install-nuxt-3-6", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@nuxt": [ + "metrics-javascript" + ], + "replay-vision@nuxt": [ + "replay-vision-setup", + "replay-vision-enable-replay-nuxt-3-6", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@ollama": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@ollama": [ + "feature-flags-react" + ], + "integration-v2@ollama": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@ollama": [ + "metrics-javascript" + ], + "replay-vision@ollama": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@openai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@openai": [ + "feature-flags-react" + ], + "integration-v2@openai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@openai": [ + "metrics-javascript" + ], + "replay-vision@openai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@openai-agents": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@openai-agents": [ + "feature-flags-react" + ], + "integration-v2@openai-agents": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@openai-agents": [ + "metrics-javascript" + ], + "replay-vision@openai-agents": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@openclaw": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@openclaw": [ + "feature-flags-react" + ], + "integration-v2@openclaw": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@openclaw": [ + "metrics-javascript" + ], + "replay-vision@openclaw": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@openrouter": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@openrouter": [ + "feature-flags-react" + ], + "integration-v2@openrouter": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@openrouter": [ + "metrics-javascript" + ], + "replay-vision@openrouter": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@opentelemetry": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@opentelemetry": [ + "feature-flags-react" + ], + "integration-v2@opentelemetry": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@opentelemetry": [ + "metrics-javascript" + ], + "replay-vision@opentelemetry": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@perplexity": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@perplexity": [ + "feature-flags-react" + ], + "integration-v2@perplexity": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@perplexity": [ + "metrics-javascript" + ], + "replay-vision@perplexity": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@pi": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@pi": [ + "feature-flags-react" + ], + "integration-v2@pi": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@pi": [ + "metrics-javascript" + ], + "replay-vision@pi": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@portkey": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@portkey": [ + "feature-flags-react" + ], + "integration-v2@portkey": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@portkey": [ + "metrics-javascript" + ], + "replay-vision@portkey": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@pydantic-ai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@pydantic-ai": [ + "feature-flags-react" + ], + "integration-v2@pydantic-ai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@pydantic-ai": [ + "metrics-javascript" + ], + "replay-vision@pydantic-ai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@python": [ + "integration-python" + ], + "error-tracking@python": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@python": [ + "feature-flags-react" + ], + "integration-v2@python": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@python": [ + "metrics-javascript" + ], + "replay-vision@python": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@rails": [ + "integration-ruby-on-rails" + ], + "error-tracking@rails": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@rails": [ + "feature-flags-react" + ], + "integration-v2@rails": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@rails": [ + "metrics-javascript" + ], + "replay-vision@rails": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@react-native": [ + "integration-react-native" + ], + "error-tracking@react-native": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@react-native": [ + "feature-flags-react" + ], + "integration-v2@react-native": [ + "integration-v2-build", + "integration-v2-capture-react-native", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-native", + "integration-v2-feature-flags-step-react-native", + "integration-v2-identify", + "integration-v2-init-react-native", + "integration-v2-insight", + "integration-v2-install-react-native", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@react-native": [ + "metrics-javascript" + ], + "replay-vision@react-native": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-native", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@react-router": [ + "integration-react-react-router-6" + ], + "error-tracking@react-router": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@react-router": [ + "feature-flags-react" + ], + "integration-v2@react-router": [ + "integration-v2-build", + "integration-v2-capture-react-react-router-6", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-react-router-6", + "integration-v2-feature-flags-step-react-react-router-6", + "integration-v2-identify", + "integration-v2-init-react-react-router-6", + "integration-v2-insight", + "integration-v2-install-react-react-router-6", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@react-router": [ + "metrics-javascript" + ], + "replay-vision@react-router": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-react-router-6", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@ruby": [ + "integration-ruby" + ], + "error-tracking@ruby": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@ruby": [ + "feature-flags-react" + ], + "integration-v2@ruby": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@ruby": [ + "metrics-javascript" + ], + "replay-vision@ruby": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@rust": [ + "integration-rust" + ], + "error-tracking@rust": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@rust": [ + "feature-flags-react" + ], + "integration-v2@rust": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@rust": [ + "metrics-javascript" + ], + "replay-vision@rust": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@semantic-kernel": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@semantic-kernel": [ + "feature-flags-react" + ], + "integration-v2@semantic-kernel": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@semantic-kernel": [ + "metrics-javascript" + ], + "replay-vision@semantic-kernel": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@smolagents": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@smolagents": [ + "feature-flags-react" + ], + "integration-v2@smolagents": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@smolagents": [ + "metrics-javascript" + ], + "replay-vision@smolagents": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@sveltekit": [ + "integration-sveltekit" + ], + "error-tracking@sveltekit": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@sveltekit": [ + "feature-flags-react" + ], + "integration-v2@sveltekit": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@sveltekit": [ + "metrics-javascript" + ], + "replay-vision@sveltekit": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@swift": [ + "integration-swift" + ], + "error-tracking@swift": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@swift": [ + "feature-flags-react" + ], + "integration-v2@swift": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@swift": [ + "metrics-javascript" + ], + "replay-vision@swift": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@tanstack-router": [ + "integration-react-tanstack-router-code-based" + ], + "error-tracking@tanstack-router": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@tanstack-router": [ + "feature-flags-react" + ], + "integration-v2@tanstack-router": [ + "integration-v2-build", + "integration-v2-capture-react-tanstack-router-code-based", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-tanstack-router-code-based", + "integration-v2-feature-flags-step-react-tanstack-router-code-based", + "integration-v2-identify", + "integration-v2-init-react-tanstack-router-code-based", + "integration-v2-insight", + "integration-v2-install-react-tanstack-router-code-based", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@tanstack-router": [ + "metrics-javascript" + ], + "replay-vision@tanstack-router": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-tanstack-router-code-based", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@tanstack-start": [ + "integration-tanstack-start" + ], + "error-tracking@tanstack-start": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@tanstack-start": [ + "feature-flags-react" + ], + "integration-v2@tanstack-start": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@tanstack-start": [ + "metrics-javascript" + ], + "replay-vision@tanstack-start": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@together-ai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@together-ai": [ + "feature-flags-react" + ], + "integration-v2@together-ai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@together-ai": [ + "metrics-javascript" + ], + "replay-vision@together-ai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@vercel-ai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@vercel-ai": [ + "feature-flags-react" + ], + "integration-v2@vercel-ai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@vercel-ai": [ + "metrics-javascript" + ], + "replay-vision@vercel-ai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@vue": [ + "integration-vue-3" + ], + "error-tracking@vue": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@vue": [ + "feature-flags-react" + ], + "integration-v2@vue": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@vue": [ + "metrics-javascript" + ], + "replay-vision@vue": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "posthog-integration@wordpress": [ + "integration-wordpress" + ], + "error-tracking@wordpress": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@wordpress": [ + "feature-flags-react" + ], + "integration-v2@wordpress": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@wordpress": [ + "metrics-javascript" + ], + "replay-vision@wordpress": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ], + "error-tracking@xai": [ + "error-tracking-react", + "error-tracking-link-releases-python", + "error-tracking-upload-source-maps-web" + ], + "feature-flags@xai": [ + "feature-flags-react" + ], + "integration-v2@xai": [ + "integration-v2-build", + "integration-v2-capture-react-vite", + "integration-v2-dashboard", + "integration-v2-error-tracking-step-react-vite", + "integration-v2-feature-flags-step-react-vite", + "integration-v2-identify", + "integration-v2-init-react-vite", + "integration-v2-insight", + "integration-v2-install-react-vite", + "integration-v2-mcp", + "integration-v2-notebook", + "integration-v2-report", + "integration-v2-warehouse" + ], + "metrics@xai": [ + "metrics-javascript" + ], + "replay-vision@xai": [ + "replay-vision-setup", + "replay-vision-enable-replay-react-vite", + "replay-vision-scanner-broken-experiences", + "replay-vision-scanner-session-summaries", + "replay-vision-scanner-user-frustration", + "replay-vision-scanners-core" + ] + } +} diff --git a/scripts/lib/tests/manifest-menu-writer.test.js b/scripts/lib/tests/manifest-menu-writer.test.js index 5e0cfa06..8995654a 100644 --- a/scripts/lib/tests/manifest-menu-writer.test.js +++ b/scripts/lib/tests/manifest-menu-writer.test.js @@ -67,4 +67,29 @@ describe('writeManifestAndMenu', () => { expect(entry.downloadUrl).toMatch(/\/integration-v2-capture-nextjs\.zip$/); }); + it('publishes title, description and tags, adding the served framework, group and default without touching the skill', () => { + const rails = skill('rails', { displayName: 'Ruby on Rails', framework: 'rails', default: true, tags: ['ruby-on-rails'] }); + write([rails]); + + const [entry] = menuEntries(); + expect(entry).toMatchObject({ title: 'Ruby on Rails', description: 'rails description', framework: 'rails', default: true }); + expect(entry.tags).toEqual(['ruby-on-rails', 'framework:rails', 'integration-v2-capture', 'default']); + expect(rails.tags).toEqual(['ruby-on-rails']); + }); + + it('publishes metadata on a bundle entry and on each of its variants', () => { + write([ + skill('django', { bundle: true, groupTags: ['capture'], framework: 'django', tags: ['capture', 'python'] }), + skill('nextjs', { bundle: true, groupTags: ['capture'], framework: 'nextjs', default: true, tags: ['capture'] }), + ]); + + const [entry] = menuEntries(); + expect(entry.tags).toEqual(['capture', 'integration-v2-capture']); + expect(entry.title).toBe('django'); + expect(entry.variants).toEqual([ + { id: 'integration-v2-capture-django', framework: 'django', title: 'django', description: 'django description', tags: ['capture', 'python', 'framework:django', 'integration-v2-capture'] }, + { id: 'integration-v2-capture-nextjs', framework: 'nextjs', default: true, title: 'nextjs', description: 'nextjs description', tags: ['capture', 'framework:nextjs', 'integration-v2-capture', 'default'] }, + ]); + }); + }); diff --git a/scripts/lib/tests/old-wizard-compat.test.js b/scripts/lib/tests/old-wizard-compat.test.js new file mode 100644 index 00000000..bf3ca78a --- /dev/null +++ b/scripts/lib/tests/old-wizard-compat.test.js @@ -0,0 +1,174 @@ +// Wizard versions already in the field resolve agent-prompt skills with the logic vendored below. +// Regenerate the snapshot after a deliberate menu change: UPDATE_OLD_WIZARD_SNAPSHOT=1 npm run test:skills +import { describe, it, expect, beforeAll, afterAll } from 'vitest'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { loadAndExpandSkills, serializeSkill } from '../skill-generator.js'; +import { writeManifestAndMenu } from '../build-phases.js'; +import { buildAgents } from '../agent-generator.js'; + +const REPO_ROOT = path.join(import.meta.dirname, '..', '..', '..'); +const CONFIG_DIR = path.join(REPO_ROOT, 'context'); +const SNAPSHOT = path.join(import.meta.dirname, 'fixtures', 'old-wizard-resolutions.json'); + +// Vendored from the wizard: src/shared/skill-menu.ts +function expandBundleEntry(entry) { + if (!entry.bundle || !entry.variants) return [entry]; + return entry.variants.map(variant => ({ + ...variant, + name: entry.name, + group: entry.group, + bundle: true, + downloadUrl: entry.downloadUrl, + })); +} + +// Vendored from the wizard: src/agent/runner/sequence/orchestrator/orchestrator-runner.ts +function resolveSkillVariantId(entries, skillId, framework) { + if (entries.some(e => e.id === skillId)) return skillId; + if (!framework) return undefined; + const family = entries.filter(e => e.group === skillId && e.framework === framework); + return (family.find(e => e.default) ?? family[0])?.id; +} + +// Vendored from the wizard: src/tui/services/wizard-spellbook.ts +function selectSkills(menu, session, program) { + const entries = Object.values(menu.categories) + .flat() + .filter(entry => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(entry.id)); + const skillId = program.skillId ?? session.skillId; + const exact = entries.find(entry => entry.id === skillId); + if (exact) return [exact]; + + const framework = session.integration; + const referenceGroup = skillId === framework ? 'integration' : skillId; + const references = entries.filter( + entry => entry.group === referenceGroup && entry.framework === framework, + ); + const reference = references.find(entry => entry.default) ?? references[0]; + if (reference) return [reference]; + + const flow = program.agentFlow ?? program.id; + const groups = new Map(); + for (const entry of entries) { + const group = entry.group; + if ( + !group || + (group !== flow && !group.startsWith(`${flow}-`)) || + (entry.framework && entry.framework !== framework) + ) { + continue; + } + if (!groups.has(group) || entry.default) groups.set(group, entry); + } + return [...groups.values()]; +} + +function agentSkills(flow, id) { + const text = fs.readFileSync(path.join(CONFIG_DIR, 'agents', flow, `${id}.md`), 'utf8'); + const frontmatter = text.match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] ?? ''; + const list = frontmatter.match(/^skills:\s*\[(.*)\]\s*$/m)?.[1] ?? ''; + return list.split(',').map(s => s.trim()).filter(Boolean); +} + +let dir; +let menu; +let entries; +let agentMenu; +let current; + +beforeAll(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'old-wizard-compat-')); + const { skills } = loadAndExpandSkills({ configDir: CONFIG_DIR }); + writeManifestAndMenu({ + allSkills: skills.map(serializeSkill), + docContents: {}, + distDir: dir, + configDir: CONFIG_DIR, + version: 'dev', + }); + buildAgents({ configDir: CONFIG_DIR, distDir: dir, version: 'dev' }); + menu = JSON.parse(fs.readFileSync(path.join(dir, 'skills', 'skill-menu.json'), 'utf8')); + agentMenu = JSON.parse(fs.readFileSync(path.join(dir, 'agents', 'agent-menu.json'), 'utf8')); + + // The wizard expands bundles on fetch, so every resolver sees the flattened menu. + const expanded = { + ...menu, + categories: Object.fromEntries( + Object.entries(menu.categories).map(([c, es]) => [c, es.flatMap(expandBundleEntry)]), + ), + }; + entries = Object.values(expanded.categories).flat(); + const frameworks = [...new Set(entries.map(e => e.framework).filter(Boolean))].sort(); + + const agents = {}; + const variants = {}; + const spellbook = {}; + for (const { id, flow, downloadUrl } of agentMenu.agents) { + agents[`${flow}/${id}`] = path.basename(downloadUrl); + for (const skillId of agentSkills(flow, id)) { + for (const framework of [undefined, ...frameworks]) { + const resolved = resolveSkillVariantId(entries, skillId, framework); + if (resolved) variants[`${skillId}@${framework ?? '-'}`] = resolved; + } + } + } + const flows = [...new Set(agentMenu.agents.map(a => a.flow))]; + for (const framework of frameworks) { + const reference = resolveSkillVariantId(entries, 'integration', framework); + if (reference) variants[`integration@${framework}`] = reference; + const ids = selectSkills(expanded, { skillId: framework, integration: framework }, { id: 'posthog-integration' }).map(e => e.id); + if (ids.length) spellbook[`posthog-integration@${framework}`] = ids; + for (const flow of flows) { + const flowIds = selectSkills(expanded, { integration: framework }, { id: flow }).map(e => e.id); + if (flowIds.length) spellbook[`${flow}@${framework}`] = flowIds; + } + } + current = { agents, variants, spellbook }; + if (process.env.UPDATE_OLD_WIZARD_SNAPSHOT) { + fs.mkdirSync(path.dirname(SNAPSHOT), { recursive: true }); + fs.writeFileSync(SNAPSHOT, JSON.stringify(current, null, 2) + '\n'); + } +}); + +afterAll(() => fs.rmSync(dir, { recursive: true, force: true })); + +describe('old wizard compatibility', () => { + it('publishes every agent prompt the snapshot knows, at the same asset name', () => { + const snapshot = JSON.parse(fs.readFileSync(SNAPSHOT, 'utf8')); + for (const [key, asset] of Object.entries(snapshot.agents)) { + expect(current.agents[key], key).toBe(asset); + } + }); + + it('resolves every agent skill and framework reference to the same id', () => { + const snapshot = JSON.parse(fs.readFileSync(SNAPSHOT, 'utf8')); + for (const [key, id] of Object.entries(snapshot.variants)) { + expect(current.variants[key], key).toBe(id); + } + }); + + it('selects the same spellbook skills', () => { + const snapshot = JSON.parse(fs.readFileSync(SNAPSHOT, 'utf8')); + for (const [key, ids] of Object.entries(snapshot.spellbook)) { + expect(current.spellbook[key], key).toEqual(ids); + } + }); + + it('keeps the fields old wizards read', () => { + for (const entry of entries) { + expect(typeof entry.id).toBe('string'); + expect(typeof entry.name).toBe('string'); + expect(typeof entry.group).toBe('string'); + expect(entry.downloadUrl).toMatch(/\.(zip|json)$/); + if ('framework' in entry) expect(typeof entry.framework).toBe('string'); + if ('default' in entry) expect(entry.default).toBe(true); + } + for (const agent of agentMenu.agents) { + expect(typeof agent.id).toBe('string'); + expect(typeof agent.flow).toBe('string'); + expect(agent.downloadUrl).toMatch(/\.md$/); + } + }); +}); From 495f1c57dff47135ee02245096ebc80968150f61 Mon Sep 17 00:00:00 2001 From: Edwin Lim Date: Thu, 29 Oct 2026 12:49:15 -0700 Subject: [PATCH 2/4] ci(agents): let an urgent prompt fix through with the agents-freeze-override label The agents-frozen check runs in its own workflow, so adding or removing the label re-runs only that check. With the label it passes with a warning to make the same fix in the wizard's copy. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/agents-frozen.yml | 23 +++++++++++++++++++++++ .github/workflows/build.yml | 12 ------------ context/agents/README.md | 5 ++++- scripts/check-agents-frozen.sh | 19 ++++++++++++++----- 4 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/agents-frozen.yml diff --git a/.github/workflows/agents-frozen.yml b/.github/workflows/agents-frozen.yml new file mode 100644 index 00000000..71f3e84f --- /dev/null +++ b/.github/workflows/agents-frozen.yml @@ -0,0 +1,23 @@ +name: PostHog Context Mill - Agents frozen +permissions: + contents: read + +# Its own workflow so adding or removing the override label re-runs only this check. +on: + pull_request: + branches: [ main ] + types: [ opened, synchronize, reopened, labeled, unlabeled ] + +jobs: + agents-frozen: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 + + - name: Block edits to frozen agent prompts + env: + AGENTS_FREEZE_OVERRIDE: ${{ contains(github.event.pull_request.labels.*.name, 'agents-freeze-override') }} + run: bash scripts/check-agents-frozen.sh "origin/${{ github.base_ref }}" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index babe6bb2..b0c60e46 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,18 +9,6 @@ on: branches: [ main ] jobs: - agents-frozen: - if: github.event_name == 'pull_request' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - fetch-depth: 0 - - - name: Block edits to frozen agent prompts - run: bash scripts/check-agents-frozen.sh "origin/${{ github.base_ref }}" - build: runs-on: ubuntu-latest diff --git a/context/agents/README.md b/context/agents/README.md index 5783fc86..fde7bdb4 100644 --- a/context/agents/README.md +++ b/context/agents/README.md @@ -2,8 +2,11 @@ > **Frozen.** The wizard bundles its agent prompts in its own repo, at > `src/programs//agent/`; make prompt changes there. This copy is -> published only for wizard versions already in the field, and CI +> published for wizard versions that fetch their prompts, and CI > (`scripts/check-agents-frozen.sh`) rejects pull requests that change it. +> An urgent fix for those versions lands here with the +> `agents-freeze-override` label, and the same fix goes into the wizard's +> copy. One `/.md` per orchestrator task — the WHAT of the task. The folder is the flow: the wizard's registry is scoped per flow, so audit or migration diff --git a/scripts/check-agents-frozen.sh b/scripts/check-agents-frozen.sh index 6e158bad..b428ad64 100755 --- a/scripts/check-agents-frozen.sh +++ b/scripts/check-agents-frozen.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash # # Fails when the branch changes an agent prompt under context/agents/ (the README excepted). -# The wizard bundles these prompts; this copy is frozen for wizard versions already in the field. +# The wizard bundles its own copy; this one is frozen for wizard versions that fetch their prompts. +# With AGENTS_FREEZE_OVERRIDE=true (CI sets it from the agents-freeze-override label) it passes with a warning. # # Usage: bash scripts/check-agents-frozen.sh [base-ref] (default: origin/main) @@ -11,11 +12,19 @@ BASE_REF="${1:-origin/main}" CHANGED=$(git diff --name-only "${BASE_REF}...HEAD" -- context/agents | grep -v '^context/agents/README\.md$' || true) -if [ -n "$CHANGED" ]; then - echo "::error::Agent prompts in context/agents/ are frozen. They now live in the wizard repo at src/programs//agent/ — make the change there." +if [ -z "$CHANGED" ]; then + echo "No changes to frozen agent prompts in context/agents/." + exit 0 +fi + +if [ "${AGENTS_FREEZE_OVERRIDE:-}" = "true" ]; then + echo "::warning::Frozen agent prompts changed under the agents-freeze-override label. Make the same fix in the wizard repo, at src/programs//agent/." echo "Changed files:" echo "$CHANGED" | sed 's/^/ - /' - exit 1 + exit 0 fi -echo "No changes to frozen agent prompts in context/agents/." +echo "::error::Agent prompts in context/agents/ are frozen. Make the change in the wizard repo, at src/programs//agent/. An urgent fix for wizard versions that fetch these prompts can land here with the agents-freeze-override label, plus the same fix in the wizard." +echo "Changed files:" +echo "$CHANGED" | sed 's/^/ - /' +exit 1 From 65d57c1e7c08c0068d41143709832ae26c96d59a Mon Sep 17 00:00:00 2001 From: Edwin Lim Date: Thu, 29 Oct 2026 12:53:23 -0700 Subject: [PATCH 3/4] ci(agents): pass the base ref to the freeze check through env Co-Authored-By: Claude Opus 5.5 --- .github/workflows/agents-frozen.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/agents-frozen.yml b/.github/workflows/agents-frozen.yml index 71f3e84f..909b8d86 100644 --- a/.github/workflows/agents-frozen.yml +++ b/.github/workflows/agents-frozen.yml @@ -19,5 +19,6 @@ jobs: - name: Block edits to frozen agent prompts env: + BASE_REF: origin/${{ github.base_ref }} AGENTS_FREEZE_OVERRIDE: ${{ contains(github.event.pull_request.labels.*.name, 'agents-freeze-override') }} - run: bash scripts/check-agents-frozen.sh "origin/${{ github.base_ref }}" + run: bash scripts/check-agents-frozen.sh "$BASE_REF" From 619cf5fbfc4bd4542e2caf55125550ea6aecf2ad Mon Sep 17 00:00:00 2001 From: Edwin Lim Date: Thu, 29 Oct 2026 16:11:24 -0700 Subject: [PATCH 4/4] ci(agents): drop the agent prompt freeze check The context/agents README says the wizard bundles its own copy of the prompts and that a prompt change goes in both places; review keeps the two in step. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/agents-frozen.yml | 24 ----------------------- context/agents/README.md | 10 +++------- package.json | 1 - scripts/check-agents-frozen.sh | 30 ----------------------------- 4 files changed, 3 insertions(+), 62 deletions(-) delete mode 100644 .github/workflows/agents-frozen.yml delete mode 100755 scripts/check-agents-frozen.sh diff --git a/.github/workflows/agents-frozen.yml b/.github/workflows/agents-frozen.yml deleted file mode 100644 index 909b8d86..00000000 --- a/.github/workflows/agents-frozen.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: PostHog Context Mill - Agents frozen -permissions: - contents: read - -# Its own workflow so adding or removing the override label re-runs only this check. -on: - pull_request: - branches: [ main ] - types: [ opened, synchronize, reopened, labeled, unlabeled ] - -jobs: - agents-frozen: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - with: - fetch-depth: 0 - - - name: Block edits to frozen agent prompts - env: - BASE_REF: origin/${{ github.base_ref }} - AGENTS_FREEZE_OVERRIDE: ${{ contains(github.event.pull_request.labels.*.name, 'agents-freeze-override') }} - run: bash scripts/check-agents-frozen.sh "$BASE_REF" diff --git a/context/agents/README.md b/context/agents/README.md index fde7bdb4..44c3abca 100644 --- a/context/agents/README.md +++ b/context/agents/README.md @@ -1,12 +1,8 @@ # Agent prompts -> **Frozen.** The wizard bundles its agent prompts in its own repo, at -> `src/programs//agent/`; make prompt changes there. This copy is -> published for wizard versions that fetch their prompts, and CI -> (`scripts/check-agents-frozen.sh`) rejects pull requests that change it. -> An urgent fix for those versions lands here with the -> `agents-freeze-override` label, and the same fix goes into the wizard's -> copy. +> **The wizard has its own copy.** It bundles these prompts in its own repo, +> at `src/programs//agent/`. This copy is published for wizard versions +> that fetch their prompts. Make a prompt change in both places. One `/.md` per orchestrator task — the WHAT of the task. The folder is the flow: the wizard's registry is scoped per flow, so audit or migration diff --git a/package.json b/package.json index 76136a72..7c637077 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "test:skills:watch": "vitest scripts/lib/tests", "test": "vitest run scripts/plugins/tests scripts/lib/tests", "check:bundle-diff": "node scripts/check-bundle-diff.js", - "check:agents-frozen": "bash scripts/check-agents-frozen.sh", "security-scan": "node scripts/scan-warlock.js", "security-scan:skills": "node scripts/scan-warlock.js dist/skills" }, diff --git a/scripts/check-agents-frozen.sh b/scripts/check-agents-frozen.sh deleted file mode 100755 index b428ad64..00000000 --- a/scripts/check-agents-frozen.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# -# Fails when the branch changes an agent prompt under context/agents/ (the README excepted). -# The wizard bundles its own copy; this one is frozen for wizard versions that fetch their prompts. -# With AGENTS_FREEZE_OVERRIDE=true (CI sets it from the agents-freeze-override label) it passes with a warning. -# -# Usage: bash scripts/check-agents-frozen.sh [base-ref] (default: origin/main) - -set -euo pipefail - -BASE_REF="${1:-origin/main}" - -CHANGED=$(git diff --name-only "${BASE_REF}...HEAD" -- context/agents | grep -v '^context/agents/README\.md$' || true) - -if [ -z "$CHANGED" ]; then - echo "No changes to frozen agent prompts in context/agents/." - exit 0 -fi - -if [ "${AGENTS_FREEZE_OVERRIDE:-}" = "true" ]; then - echo "::warning::Frozen agent prompts changed under the agents-freeze-override label. Make the same fix in the wizard repo, at src/programs//agent/." - echo "Changed files:" - echo "$CHANGED" | sed 's/^/ - /' - exit 0 -fi - -echo "::error::Agent prompts in context/agents/ are frozen. Make the change in the wizard repo, at src/programs//agent/. An urgent fix for wizard versions that fetch these prompts can land here with the agents-freeze-override label, plus the same fix in the wizard." -echo "Changed files:" -echo "$CHANGED" | sed 's/^/ - /' -exit 1