# messages_fts_content

c0:
  {"content": "1|{\n2|  \"name\": \"model-studio-3d\",\n3|  \"private\": false,\n4|  \"version\": \"0.1.0\",\n5|  \"type\": \"module\",\n6|  \"scripts\": {\n7|    \"dev\": \"vite\",\n8|    \"dev:api\": \"node server.mjs\",\n9|    \"build\": \"vite build\",\n10|    \"lint\": \"eslint .\",\n11|    \"test\": \"node --test test/*.test.mjs\",\n12|    \"test:visual\": \"NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1 playwright test\",\n13|    \"test:visual:update\": \"NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1 playwright test --update-snapshots\",\n14|    \"preview\": \"vite preview\"\n15|  },\n16|  \"dependencies\": {\n17|    \"@fal-ai/client\": \"^1.10.1\",\n18|    \"@react-three/drei\": \"^10.7.7\",\n19|    \"@react-three/fiber\": \"^9.6.1\",\n20|    \"@react-three/postprocessing\": \"^3.0.4\",\n21|    \"framer-motion\": \"^12.38.0\",\n22|    \"lucide-react\": \"^1.14.0\",\n23|    \"postprocessing\": \"^6.39.1\",\n24|    \"react\": \"^19.2.5\",\n25|    \"react-dom\": \"^19.2.5\",\n26|    \"three\": \"^0.184.0\",\n27|    \"undici\": \"^8.2.0\"\n28|  },\n29|  \"devDependencies\": {\n30|    \"@eslint/js\": \"^10.0.1\",\n31|    \"@playwright/test\": \"^1.60.0\",\n32|    \"@types/react\": \"^19.2.14\",\n33|    \"@types/react-dom\": \"^19.2.3\",\n34|    \"@vitejs/plugin-react\": \"^6.0.1\",\n35|    \"eslint\": \"^10.2.1\",\n36|    \"eslint-plugin-react-hooks\": \"^7.1.1\",\n37|    \"eslint-plugin-react-refresh\": \"^0.5.2\",\n38|    \"globals\": \"^17.5.0\",\n39|    \"vite\": \"^8.0.10\"\n40|  }\n41|}\n42|", "total_lines": 41, "file_size": 1255, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
  ## Análise do Repositório: huangserva/3DCellForge

  ### Problema
  Criar modelos 3D de qualidade profissional tradicionalmente exige softwares especializados caros (Blender, Maya), conhecimento técnico de modelagem e pipelines complexos. Transformar imagens de referência em modelos 3D navegáveis e apresentáveis era um processo fragmentado, sem uma solução unificada e acessível via browser.

  ### Tema Principal
  Um **estúdio interativo de geração, inspeção e apresentação de modelos 3D** powered by AI. É uma aplicação web completa onde o usuário envia imagens ou arquivos GLB e obtém um workspace 3D profissional com ferramentas de inspeção, comparação, apresentação e exportação — tudo no browser.

  ### Razão do Hype (⭐ 2.396)
  - **Múltiplos providers AI**: suporta Hyper3D, Tripo, Fal.ai, Hunyuan3D e fallback JS Depth — o usuário escolhe o melhor custo/qualidade
  - **Viewer interativo profissional**: controles de órbita, inspeção de peças, destaque de materiais e foco por categoria
  - **Demo Mode cinematográfico**: caminhos de câmera adaptativos por tipo de modelo (carros, aeronaves, navios, orgânicos)
  - **Persistência offline**: IndexedDB para histórico e modelos gerados cacheados em `.generated-models/`
  - **Workflow de apresentação**: screenshots, gravação de tela, comparação entre versões sem sair do app
  - **Segurança**: API keys ficam no backend (`.env.local`), nunca expostas ao frontend

  ### Tecnologias
  | Camada | Tecnologias |
  |---|---|
  | Frontend | React 19, Vite 8 |
  | 3D | Three.js, React Three Fiber, Drei, Post-processing |
  | UI/Animação | Framer Motion, Lucide React |
  | Backend | Node.js (`server.mjs`) |
  | Testes | Playwright (visual regression), Node test runner |
  | Qualidade | ESLint |

  ### Estrutura do Projeto
  - `src/` — app React com workbench 3-colunas (biblioteca / stage / ferramentas)
  - `server.mjs` — API backend Node para proxy seguro de APIs e cache de GLBs
  - `public/generated-models/` — modelos GLB de demonstração cacheados
  - `docs/demo/` — vídeo demo gravado  


c0:
  Me mostra entao... pega os 20 repositorios com mais estrelas no ultimo mes, analisa cada um deles e me traz estruturado em uma tabela. Agrupa o resultado em tema de atuacao, como ia, dev, ou outro agrupamento q entender para classificar o q o repo resolve  


c0:
  Vou demonstrar a orquestração multiagente em ação. Primeiro vou buscar a lista dos 20 repositórios mais estrelados do último mês, depois vou spawnar agentes paralelos para analisar cada um.  [{"id": "chatcmpl-tool-aac7318bf127e087", "call_id": "chatcmpl-tool-aac7318bf127e087", "response_item_id": "fc_chatcmpl-tool-aac7318bf127e087", "type": "function", "function": {"name": "execute_code", "arguments": "{\"code\": \"\\nimport urllib.request, json, datetime\\n\\n# Calcular data de 30 dias atr\u00e1s\\ntoday = datetime.date(2026, 5, 30)\\nthirty_days_ago = (today - datetime.timedelta(days=30)).isoformat() + \\\"T00:00:00Z\\\"\\n\\n# Buscar top 20 repos por stars criados/atualizados nos \u00faltimos 30 dias\\nquery = f\\\"created:>{thirty_days_ago} sort:stars\\\"\\nurl = f\\\"https://api.github.com/search/repositories?q={urllib.parse.quote(query)}&per_page=20&sort=stars&order=desc\\\"\\n\\nreq = urllib.request.Request(url, headers={\\\"User-Agent\\\": \\\"HermesAgent/1.0\\\", \\\"Accept\\\": \\\"application/vnd.github.v3+json\\\"})\\nwith urllib.request.urlopen(req) as resp:\\n    data = json.load(resp)\\n\\nitems = []\\nfor repo in data.get(\\\"items\\\", []):\\n    items.append({\\n        \\\"name\\\": repo[\\\"full_name\\\"],\\n        \\\"url\\\": repo[\\\"html_url\\\"],\\n        \\\"language\\\": repo.get(\\\"language\\\") or \\\"N/A\\\",\\n        \\\"stars\\\": repo[\\\"stargazers_count\\\"],\\n        \\\"description\\\": repo.get(\\\"description\\\") or \\\"\\\",\\n        \\\"created_at\\\": repo[\\\"created_at\\\"],\\n        \\\"updated_at\\\": repo[\\\"updated_at\\\"],\\n    })\\n\\nprint(json.dumps({\\n    \\\"total\\\": len(items),\\n    \\\"items\\\": items\\n}, ensure_ascii=False, indent=2))\\n\"}"}}]


c0:
  {"status": "success", "output": "{\n  \"total\": 20,\n  \"items\": [\n    {\n      \"name\": \"antirez/ds4\",\n      \"url\": \"https://github.com/antirez/ds4\",\n      \"language\": \"C\",\n      \"stars\": 12551,\n      \"description\": \"DeepSeek 4 Flash local inference engine for Metal and CUDA\",\n      \"created_at\": \"2026-05-06T17:17:05Z\",\n      \"updated_at\": \"2026-05-30T22:46:47Z\"\n    },\n    {\n      \"name\": \"BigPizzaV3/CodexPlusPlus\",\n      \"url\": \"https://github.com/BigPizzaV3/CodexPlusPlus\",\n      \"language\": \"Rust\",\n      \"stars\": 8869,\n      \"description\": \"An enhanced tool for CodexApp, striving to make Codex better to use and more comfortable 一个CodexApp的增强工具，努力让Codex变得更好用更舒服\",\n      \"created_at\": \"2026-05-06T09:32:49Z\",\n      \"updated_at\": \"2026-05-30T22:42:06Z\"\n    },\n    {\n      \"name\": \"FULU-Foundation/OrcaSlicer-bambulab\",\n      \"url\": \"https://github.com/FULU-Foundation/OrcaSlicer-bambulab\",\n      \"language\": \"C++\",\n      \"stars\": 6667,\n      \"description\": \"\",\n      \"created_at\": \"2026-05-11T17:44:55Z\",\n      \"updated_at\": \"2026-05-30T19:50:07Z\"\n    },\n    {\n      \"name\": \"nexu-io/html-anything\",\n      \"url\": \"https://github.com/nexu-io/html-anything\",\n      \"language\": \"HTML\",\n      \"stars\": 5445,\n      \"description\": \"✨ The agentic HTML editor — your local AI agent writes the HTML, you ship it. 🚀 75 Skills × 9 Surfaces (magazine · deck · poster · XHS / tweet · prototype · data report · Hyperframes) 🛡️ Sandboxed preview · 📤 1-click to WeChat / X / Zhihu / HTML / PNG 🔑 Zero API key — Claude Code / Cursor / Codex / Gemini / Copilot / OpenCode / Qwen / Aider.\",\n      \"created_at\": \"2026-05-11T09:40:38Z\",\n      \"updated_at\": \"2026-05-30T22:41:25Z\"\n    },\n    {\n      \"name\": \"darrylmorley/whatcable\",\n      \"url\": \"https://github.com/darrylmorley/whatcable\",\n      \"language\": \"Swift\",\n      \"stars\": 4894,\n      \"description\": \"macOS menu bar app that tells you, in plain English, what each USB-C cable plugged into your Mac can actually do\",\n      \"created_at\": \"2026-05-01T07:45:10Z\",\n      \"updated_at\": \"2026-05-30T22:41:32Z\"\n    },\n    {\n      \"name\": \"V4bel/dirtyfrag\",\n      \"url\": \"https://github.com/V4bel/dirtyfrag\",\n      \"language\": \"C\",\n      \"stars\": 4786,\n      \"description\": \"\",\n      \"created_at\": \"2026-05-07T18:18:28Z\",\n      \"updated_at\": \"2026-05-30T20:21:12Z\"\n    },\n    {\n      \"name\": \"vercel-labs/zerolang\",\n      \"url\": \"https://github.com/vercel-labs/zerolang\",\n      \"language\": \"C\",\n      \"stars\": 4733,\n      \"description\": \"The programming language for agents\",\n      \"created_at\": \"2026-05-15T16:55:16Z\",\n      \"updated_at\": \"2026-05-30T21:53:10Z\"\n    },\n    {\n      \"name\": \"vercel-labs/zero-native\",\n      \"url\": \"https://github.com/vercel-labs/zero-native\",\n      \"language\": \"Zig\",\n      \"stars\": 4037,\n      \"description\": \"Build desktop + mobile apps with Zig and web UI\",\n      \"created_at\": \"2026-05-08T19:53:41Z\",\n      \"updated_at\": \"2026-05-30T18:45:28Z\"\n    },\n    {\n      \"name\": \"perplexityai/bumblebee\",\n      \"url\": \"https://github.com/perplexityai/bumblebee\",\n      \"language\": \"Go\",\n      \"stars\": 3980,\n      \"description\": \"Read-only developer endpoint scanner for on-disk package, extension, and developer-tool metadata, built to check exposure to known software supply-chain compromises.\",\n      \"created_at\": \"2026-05-20T18:11:37Z\",\n      \"updated_at\": \"2026-05-30T22:07:37Z\"\n    },\n    {\n      \"name\": \"simplifaisoul/osiris\",\n      \"url\": \"https://github.com/simplifaisoul/osiris\",\n      \"language\": \"TypeScript\",\n      \"stars\": 3732,\n      \"description\": \"Open Source Global Intelligence Platform - Real-Time OSINT Dashboard - A Palantir Alternative\",\n      \"created_at\": \"2026-05-12T20:09:25Z\",\n      \"updated_at\": \"2026-05-30T22:48:07Z\"\n    },\n    {\n      \"name\": \"microsoft/SkillOpt\",\n      \"url\": \"https://github.com/microsoft/SkillOpt\",\n      \"language\": \"Python\",\n      \"stars\": 3220,\n      \"description\": \"SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.\",\n      \"created_at\": \"2026-05-08T06:41:01Z\",\n      \"updated_at\": \"2026-05-30T22:50:38Z\"\n    },\n    {\n      \"name\": \"FoundZiGu/GuJumpgate\",\n      \"url\": \"https://github.com/FoundZiGu/GuJumpgate\",\n      \"language\": \"JavaScript\",\n      \"stars\": 3115,\n      \"description\": \"\",\n      \"created_at\": \"2026-05-19T11:52:52Z\",\n      \"updated_at\": \"2026-05-30T22:37:54Z\"\n    },\n    {\n      \"name\": \"XBuilderLAB/cheat-on-content\",\n      \"url\": \"https://github.com/XBuilderLAB/cheat-on-content\",\n      \"language\": \"Python\",\n      \"stars\": 3055,\n      \"description\": \"You're reading this. The skill predicted it. A workflow that turns every post into a calibrated experiment—score, blind-predict, retro, evolve. The future doesn't reward effort, it rewards those who see the pattern first. 1M followers in a month — not luck, system.\",\n      \"created_at\": \"2026-05-05T10:28:33Z\",\n      \"updated_at\": \"2026-05-30T20:10:10Z\"\n    },\n    {\n      \"name\": \"vercel-labs/deepsec\",\n      \"url\": \"https://github.com/vercel-labs/deepsec\",\n      \"language\": \"TypeScript\",\n      \"stars\": 2989,\n      \"description\": \"Deepsec is a security harness for finding vulnerabilities in your codebase powered by coding agents\",\n      \"created_at\": \"2026-04-30T16:16:11Z\",\n      \"updated_at\": \"2026-05-30T18:08:30Z\"\n    },\n    {\n      \"name\": \"simonlin1212/a-stock-data\",\n      \"url\": \"https://github.com/simonlin1212/a-stock-data\",\n      \"language\": \"N/A\",\n      \"stars\": 2983,\n      \"description\": \"A股全栈数据工具包 — 7层架构 · 28端点 · 13数据源 · 零第三方依赖 | Full-stack China A-Share data toolkit for AI coding assistants\",\n      \"created_at\": \"2026-05-11T01:08:15Z\",\n      \"updated_at\": \"2026-05-30T19:30:10Z\"\n    },\n    {\n      \"name\": \"strukto-ai/mirage\",\n      \"url\": \"https://github.com/strukto-ai/mirage\",\n      \"language\": \"TypeScript\",\n      \"stars\": 2814,\n      \"description\": \"A Unified Virtual Filesystem For AI Agents\",\n      \"created_at\": \"2026-05-06T17:00:48Z\",\n      \"updated_at\": \"2026-05-30T22:19:47Z\"\n    },\n    {\n      \"name\": \"virgiliojr94/book-to-skill\",\n      \"url\": \"https://github.com/virgiliojr94/book-to-skill\",\n      \"language\": \"Python\",\n      \"stars\": 2612,\n      \"description\": \"Turn any technical book PDF into a Claude Code skill — ready to study, reference, and use while you work.\",\n      \"created_at\": \"2026-05-01T02:09:39Z\",\n      \"updated_at\": \"2026-05-30T22:36:08Z\"\n    },\n    {\n      \"name\": \"crafter-station/petdex\",\n      \"url\": \"https://github.com/crafter-station/petdex\",\n      \"language\": \"TypeScript\",\n      \"stars\": 2598,\n      \"description\": \"The public gallery of animated pet for Codex, Claude Code, OpenCode y Gemini CLI\",\n      \"created_at\": \"2026-05-02T07:51:35Z\",\n      \"updated_at\": \"2026-05-30T20:11:18Z\"\n    },\n    {\n      \"name\": \"thananon/9arm-skills\",\n      \"url\": \"https://github.com/thananon/9arm-skills\",\n      \"language\": \"Shell\",\n      \"stars\": 2549,\n      \"description\": \"\",\n      \"created_at\": \"2026-05-20T00:49:37Z\",\n      \"updated_at\": \"2026-05-30T20:58:14Z\"\n    },\n    {\n      \"name\": \"huangserva/3DCellForge\",\n      \"url\": \"https://github.com/huangserva/3DCellForge\",\n      \"language\": \"JavaScript\",\n      \"stars\": 2396,\n      \"description\": \"AI-powered interactive 3D model generation, inspection, and presentation studio.\",\n      \"created_at\": \"2026-05-10T10:34:50Z\",\n      \"updated_at\": \"2026-05-30T21:47:41Z\"\n    }\n  ]\n}\n", "tool_calls_made": 0, "duration_seconds": 1.03} execute_code 


c0:
  Agora vou spawnar agentes paralelos para analisar cada um desses repositórios. Vou dividir em lotes de até 3 análises simultâneas:  [{"id": "chatcmpl-tool-a675f699478de973", "call_id": "chatcmpl-tool-a675f699478de973", "response_item_id": "fc_chatcmpl-tool-a675f699478de973", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: antirez/ds4\\nURL: https://github.com/antirez/ds4\\nLinguagem: C\\nDescri\u00e7\u00e3o: DeepSeek 4 Flash local inference engine for Metal and CUDA\\nStars: 12.551\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o (IA, Dev, DevOps, Seguran\u00e7a, Dados, etc)\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: BigPizzaV3/CodexPlusPlus\\nURL: https://github.com/BigPizzaV3/CodexPlusPlus\\nLinguagem: Rust\\nDescri\u00e7\u00e3o: An enhanced tool for CodexApp, striving to make Codex better to use and more comfortable \u4e00\u4e2aCodexApp\u7684\u589e\u5f3a\u5de5\u5177\uff0c\u52aa\u529b\u8ba9Codex\u53d8\u5f97\u66f4\u597d\u7528\u66f4\u8212\u670d\\nStars: 8.869\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: FULU-Foundation/OrcaSlicer-bambulab\\nURL: https://github.com/FULU-Foundation/OrcaSlicer-bambulab\\nLinguagem: C++\\nDescri\u00e7\u00e3o: (sem descri\u00e7\u00e3o)\\nStars: 6.667\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "# Análise do Repositório `antirez/ds4`\n\n## Problema que resolve\nO **DwarfStar** nasceu da necessidade de uma engine de inferência local **específica e polida** para o **DeepSeek V4 Flash**, um modelo de 284B parâmetros (13B ativos) capaz de rodar em máquinas pessoais high-end com 96–128 GB de RAM. A proposta é diferente de runners genéricos de GGUF: é uma engine fechada, _end-to-end_, com:\n- Carregamento de GGUF próprios (não aceita qualquer arquivo GGUF)\n- KV cache comprimido com persistência **em disco**\n- Prompt rendering, tool calling e tratamento de estado de conversação\n- Server API OpenAI/Anthropic-compatível\n- Agente de codificação integrado\n\n---\n\n## Tema principal de atuação\n**Inteligência Artificial / Inferência Local de LLMs de grande escala**\n\nÉ um projeto no limite entre research e produto, focado em **LLM inference em hardware local de alta gama** (MacBooks M-series, Mac Studio, DGX Spark).\n\n---\n\n## Razão do hype / tendência\n1. **Autor influente**: criado por Salvatore Sanfilippo (antirez), autor do Redis — traz atenção imediata da comunidade.\n2. **Acessibilidade inédita**: permite rodar um modelo de 284B parâmetros em um MacBook comum via quantização 2-bit especial.\n3. **Engineering de ponta**: otimizações profundas para Metal (Apple Silicon), CUDA (DGX Spark/GB10) e ROCm, com benchmarks públicos.\n4. **KV cache como cidadão de disco**: mudança de mentalidade — a cache não precisa mais morar só em RAM.\n5. **Inferência distribuída TCP**: possibilidade de \"clusterar\" CUDA/Metal via Thunderbolt ou WiFi para modelos que não cabem em uma máquina.\n6. **Corretude oficial**: validação contra logits oficiais do DeepSeek, algo raro em runners comunitários.\n7. **Agente nativo com baixa latência**: sem overhead de sockets entre agente e engine; tudo compartilha o mesmo KV cache.\n8. **Momentum do DeepSeek V4**: combina com a onda de modelos \"massivos mas locais\" (DeepSeek V4, Qwen3, Llama 4).\n\n---\n\n## Tecnologias envolvidas\n| Tecnologia | Papel |\n|---|---|\n| **C** | Linguagem principal da engine (`ds4.c` principal) |\n| **Metal** | Backend primário (macOS, Apple Silicon) |\n| **NVIDIA CUDA** | Backend secundário (Linux, DGX Spark / GB10) |\n| **AMD ROCm** | Backend em branch separada (`rocm`) |\n| **GGUF / GGML** | Formato de pesos e referência de kernels/quantização |\n| **TCP (IPv4/IPv6)** | Protocolo de inferência distribuída |\n| **SQLite / arquivos de cache** | Persistência de KV cache e sessões |\n| **HTTP + SSE** | Server API (`ds4-server`) |\n| **CUDA Graphs / Metal Compute** | Graph execution para baixa latência |\n| **RoCE / Thunderbolt** | Recomendado para links rápidos em modo distribuído |\n| **Quantizações IQ2_XXS / Q2_K** | Esquema assimétrico customizado para MoE |\n\n---\n\n## Arquivos relevantes inspecionados\n- `/home/ice/ds4/README.md` — documentação completa\n- `/home/ice/ds4/MODEL_CARD.md` — detalhes técnicos do modelo, arquitetura CSA/HCA, prompt template DSML\n\n**Repositório em**: `/home/ice/ds4`", "api_calls": 4, "duration_seconds": 21.55, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 41067, "output": 1665}, "tool_trace": [{"tool": "terminal", "args_bytes": 107, "result_bytes": 66, "status": "ok"}, {"tool": "read_file", "args_bytes": 35, "result_bytes": 31458, "status": "ok"}, {"tool": "search_files", "args_bytes": 63, "result_bytes": 632, "status": "ok"}, {"tool": "read_file", "args_bytes": 64, "result_bytes": 11204, "status": "ok"}, {"tool": "read_file", "args_bytes": 39, "result_bytes": 10497, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "## Análise do Repositório: BigPizzaV3/CodexPlusPlus\n\n### Problema que resolve\nO **Codex++** resolve o problema de aprimorar o aplicativo **Codex** (assistente de IA da OpenAI) sem modificar seus arquivos originais. Ele funciona como um *launcher* e gerenciador externo que injeta funcionalidades via **Chromium DevTools Protocol (CDP)**, permitindo desbloqueio de plugins, gerenciamento de sessões, injeção de scripts personalizados, relay de API e mais — sem *patching* de `app.asar` ou escrita de DLLs na instalação original.\n\nO produto oferece dois fluxos principais:\n- **Launcher silencioso** (`Codex++`): inicia o Codex já com as injeções aplicadas, sem interface.\n- **Manager** (`Codex++ Manager`): painel de controle Tauri para configurar injeções, relays, atualizações e diagnósticos.\n\n---\n\n### Tema principal de atuação\nFerramenta de **desenvolvimento e produtividade** voltada para **aprimoramento de assistentes de código com IA (Codex/Claude Code/Gemini)**. Atua na intersecção entre desktop apps, injeção de scripts em browsers e gerenciamento de credenciais/relays de API.\n\n---\n\n### Razão do hype/tendência\n- **Abordagem não invasiva**: não altera o app original, o que reduz risco de quebra por atualizações e evita problemas de segurança/modificação de binários.\n- **Híbrido Rust + Tauri + React**: performance do Rust com interface desktop moderna e multiplataforma.\n- **Relay injection único**: permite manter login oficial do ChatGPT enquanto redireciona requisições para APIs compatíveis customizadas (útil para acessar modelos com custo reduzido ou em regiões com restrições).\n- **Ecossistema de \" unlocks \"**: desbloqueia plugins, exportação de sessões, Timeline, scripts de usuário e funcionalidades que o Codex original limita.\n- **Cross-platform**: Windows (NSIS installer) e macOS (DMG separado para x64/arm64).\n- **Comunidade ativa e patrocinada**: múltiplos patrocinadores de relay, grupo de discussão e ~8.9k stars no GitHub.\n\n---\n\n### Tecnologias envolvidas\n| Camada | Tecnologias |\n|--------|-------------|\n| **Backend** | Rust (edition 2024), Tokio (async), reqwest (HTTP com rustls), tokio-tungstenite (WebSocket) |\n| **Desktop App** | Tauri 2.x + React |\n| **Injeção** | Chromium DevTools Protocol (CDP), JavaScript (renderer-inject.js) |\n| **Dados** | SQLite (rusqlite), TOML (config), JSON |\n| **Empacotamento** | NSIS (Windows), DMG scripts (macOS), winresource |\n| **CI/CD** | GitHub Actions (implícito por release badges e estrutura .github) |\n| **Dependências notáveis** | `directories`, `fs2`, `toml_edit`, `tempfile`, `uuid`, `base64` |\n\n---\n\n### Estrutura observada\n- `apps/`: launcher silencioso e manager Tauri\n- `crates/`: núcleo (`codex-plus-core`) e dados/sessões (`codex-plus-data`)\n- `assets/inject/`: script de injeção no renderer\n- `scripts/installer/`: empacotamento Windows/macOS", "api_calls": 4, "duration_seconds": 25.55, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 28788, "output": 1800}, "tool_trace": [{"tool": "terminal", "args_bytes": 152, "result_bytes": 1172, "status": "ok"}, {"tool": "read_file", "args_bytes": 62, "result_bytes": 14981, "status": "ok"}, {"tool": "read_file", "args_bytes": 46, "result_bytes": 1242, "status": "ok"}, {"tool": "terminal", "args_bytes": 169, "result_bytes": 271, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "Análise concluída.\n\n- Problema que resolve: Restaura suporte BambuNetwork completo (Wi‑Fi) para impressoras Bambu Lab, que havia sido removido ou quebrado em certas versões, e não apenas restringe a impressão via LAN local.\n- Tema principal de atuação: *Slicer* 3D (pré-processamento/geração de G‑code) e controle de impressão 3D, com ênfase na integração com impressoras Bambu Lab.\n- Razão do hype/tendência: A comunidade Bambu Lab valoriza preservar recursos de nuvem e rede da marca — esse fork reintroduz funcionalidade perdida, gerando alto interesse.\n- Tecnologias envolvidas: C++17, CMake, wxWidgets, OpenGL, Boost, TBB, FFMPEG, OpenVDB, CGAL, Embree (renderização de preview), além de bibliotecas de geometria/processamento de malha.\n\nFerramentas/arquivos significativos observados: `src/` (core), `tests/`, `scripts/`, muito código C++ e dependências em `deps/`.", "api_calls": 13, "duration_seconds": 54.98, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 108694, "output": 1456}, "tool_trace": [{"tool": "terminal", "args_bytes": 130, "result_bytes": 2232, "status": "ok"}, {"tool": "terminal", "args_bytes": 116, "result_bytes": 3351, "status": "ok"}, {"tool": "read_file", "args_bytes": 51, "result_bytes": 1224, "status": "ok"}, {"tool": "terminal", "args_bytes": 57, "result_bytes": 2254, "status": "ok"}, {"tool": "terminal", "args_bytes": 58, "result_bytes": 163, "status": "ok"}, {"tool": "read_file", "args_bytes": 53, "result_bytes": 925, "status": "ok"}, {"tool": "terminal", "args_bytes": 170, "result_bytes": 66, "status": "ok"}, {"tool": "terminal", "args_bytes": 91, "result_bytes": 278, "status": "ok"}, {"tool": "terminal", "args_bytes": 75, "result_bytes": 8010, "status": "ok"}, {"tool": "terminal", "args_bytes": 122, "result_bytes": 681, "status": "ok"}, {"tool": "search_files", "args_bytes": 93, "result_bytes": 18, "status": "ok"}, {"tool": "search_files", "args_bytes": 124, "result_bytes": 1300, "status": "ok"}]}], "total_duration_seconds": 55.18} delegate_task 


c0:
  Ótimo! Primeiro lote concluído com 3 análises. Vou prosseguir com o próximo lote:  [{"id": "chatcmpl-tool-b110cc0844c3683c", "call_id": "chatcmpl-tool-b110cc0844c3683c", "response_item_id": "fc_chatcmpl-tool-b110cc0844c3683c", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: nexu-io/html-anything\\nURL: https://github.com/nexu-io/html-anything\\nLinguagem: HTML\\nDescri\u00e7\u00e3o: \u2728 The agentic HTML editor \u2014 your local AI agent writes the HTML, you ship it. \ud83d\ude80 75 Skills \u00d7 9 Surfaces (magazine \u00b7 deck \u00b7 poster \u00b7 XHS / tweet \u00b7 prototype \u00b7 data report \u00b7 Hyperframes) \ud83d\udee1\ufe0f Sandboxed preview \u00b7 \ud83d\udce4 1-click to WeChat / X / Zhihu / HTML / PNG \ud83d\udd11 Zero API key \u2014 Claude Code / Cursor / Codex / Gemini / Copilot / OpenCode / Qwen / Aider.\\nStars: 5.445\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o (IA, Dev, DevOps, Seguran\u00e7a, Dados, etc)\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: darrylmorley/whatcable\\nURL: https://github.com/darrylmorley/whatcable\\nLinguagem: Swift\\nDescri\u00e7\u00e3o: macOS menu bar app that tells you, in plain English, what each USB-C cable plugged into your Mac can actually do\\nStars: 4.894\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: V4bel/dirtyfrag\\nURL: https://github.com/V4bel/dirtyfrag\\nLinguagem: C\\nDescri\u00e7\u00e3o: (sem descri\u00e7\u00e3o)\\nStars: 4.786\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "Resultado da análise:\n\n- Problema que resolve\n  - Usuários precisam transformar conteúdo (Markdown/CSV/Excel/JSON/SQL/notas) em HTML final envioável para humanos/público, mas editar HTML/CSS/layout continua sendo tarefa de dev/designer. HTML Anything fecha o loop com agente local: o usuário fornece conteúdo bruto e recebe um HTML de página única, pronto para ser publicado/exportado.\n\n- Tema principal de atuação\n  - IA aplicada a conteúdo/produtividade (agentic tooling), com forte capa de design engineering e DX de export multiplataforma.\n\n- Razão do hype/tendência\n  - movimento \"HTML final para humanos\" vs Markdown intermediário;\n  - local-first + sem API key, reaproveitando CLIs de agentes já autenticados;\n  - modelo simples de skills em pastas (75 templates);\n  - export um-clique para WeChat/X/Zhihu, com CSS inline e PNG high-DPI;\n  - herança/hype do ecossistema `nexu-io/open-design`.\n\n- Tecnologias envolvidas\n  - Frontend: Next.js 16 (App Router), React 19, Tailwind v4, Zustand.\n  - Backend/runtime: Node runtime + `child_process.spawn` para integração com agentes + SSE streaming.\n  - Segurança/preview: `iframe[sandbox=\"allow-scripts allow-same-origin\"]`, DOMPurify, validação de Host header no middleware.\n  - Agentes suportados: Claude Code, OpenAI Codex, Cursor Agent, Gemini CLI, Copilot CLI, OpenCode, Qwen Coder, Aider.\n  - Dados/formatos: `marked` + `highlight.js`, `papaparse`, `xlsx`.\n  - Export: `juice`, `modern-screenshot`, `ClipboardItem`, `pptxgenjs`, `jszip`.\n\nResumo da execução\n- Clonado o repositório em `/home/ice/html-anything`.\n- Li a documentação principal (`README.md`) e `package.json` em `/home/ice/html-anything` e `/home/ice/html-anything/next/package.json`.\n- Inspecionei rapidamente as rotas em `/home/ice/html-anything/next/src/app/api/convert/route.ts` para confirmar o fluxo SSE e o promptagem.\n- Nenhum arquivo foi criado ou modificado; não houve bloqueios relevantes nesta análise.", "api_calls": 7, "duration_seconds": 38.2, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 96661, "output": 2534}, "tool_trace": [{"tool": "terminal", "args_bytes": 110, "result_bytes": 1564, "status": "ok"}, {"tool": "terminal", "args_bytes": 140, "result_bytes": 476, "status": "ok"}, {"tool": "read_file", "args_bytes": 45, "result_bytes": 48029, "status": "ok"}, {"tool": "read_file", "args_bytes": 48, "result_bytes": 363, "status": "ok"}, {"tool": "read_file", "args_bytes": 53, "result_bytes": 1537, "status": "ok"}, {"tool": "terminal", "args_bytes": 87, "result_bytes": 399, "status": "ok"}, {"tool": "read_file", "args_bytes": 96, "result_bytes": 5225, "status": "ok"}, {"tool": "search_files", "args_bytes": 115, "result_bytes": 18, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "## Análise do repositório darrylmorley/whatcable\n\n### Problema que resolve\nCabos USB-C são **visualmente idênticos**, mas têm capacidades muito diferentes (de “somente carga” USB 2.0 até Thunderbolt 4 com 40 Gbps e 240 W). O macOS já expõe essas informações via IOKit, mas não há uma forma amigável de o usuário descobrir **o que cada cabo realmente faz** ou **por que o carregamento está lento**. WhatCable resolve isso expondo esses dados brutos em linguagem simples, direto na barra de menus.\n\n### Tema principal de atuação\nUtilitário macOS para **diagnóstico de hardware de porta USB-C/Thunderbolt**: identifica cabo, carregador, dispositivos conectados, velocidade negociação de barramento, PD (Power Delivery), topologia Thunderbolt e saúde da porta.\n\n### Razão do hype/tendência\n- **4.894 stars** e presença no Product Hunt, o que reflete forte interesse do público por uma resposta prática a um problema comum.\n- Resolve uma **dor real e crescente**: com a padronização do USB-C, usuários não sabem qual cabo comprar/usar nem por que a carga está lenta.\n- Abordagem tecnicamente ousada: usa IOKit sem APIs privadas, entitlements ou daemons extra, apenas leituras públicas.\n- Distribuição profissional: app signed + notarizado pela Apple, CLI funcionalvia Homebrew, widgets de desktop e site próprio em `whatcable.uk`.\n- Multiplataforma conceitual: funciona como menu bar app **e** como ferramenta de linha de comando para scripts.\n\n### Tecnologias envolvidas\n- **Swift** + **Swift Package Manager**\n- **IOKit** (`AppleHPMInterfaceType10/11/12`, `IOPort`, `IOPortTransportComponentCCUSBSOP`, XHCI controller subtree)\n- **USB Power Delivery** (especificação USB-PD R3.2 V1.2)\n- **Thunderbolt / USB4 / DisplayPort** decoding\n- **SQLite** (banco `whatcable.db` com lista USB-IF, `usb.ids` e fingerprints de cabos reportados por usuários)\n- **WidgetKit** (widgets desktop)\n- **CLI** (`whatcable` com flags para JSON, watch, monitor, etc.)\n- **Notarização e assinatura Apple** (Developer ID + hardened runtime)\n- **Eleventy (11ty)** para o site de documentação\n\nEm resumo: é um utilitário macOS de nicho bem executado, que transpõe dados brutos de hardware de porta USB-C em informação útil e legível, ganhando destaque por resolver um problema real e mainstream com técnica sólida.", "api_calls": 4, "duration_seconds": 20.18, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 25174, "output": 1335}, "tool_trace": [{"tool": "terminal", "args_bytes": 106, "result_bytes": 72, "status": "ok"}, {"tool": "terminal", "args_bytes": 116, "result_bytes": 6554, "status": "ok"}, {"tool": "read_file", "args_bytes": 55, "result_bytes": 13302, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "## Análise do repositório `V4bel/dirtyfrag`\n\n### Problema que resolve\n- **Escalação de privilégio local (LPE) determinística no Linux** → obtém **root** sem precisar de condição de corrida (race) e sem que o kernel between em pânico se a exploração falhar.\n- Funciona como uma **“arma” real (weaponized exploit)** contra falhas do kernel Linux que permitem escrita arbitrária na **page cache** de arquivos como `/usr/bin/su` ou `/etc/passwd`.\n\n---\n\n### Tema principal de atuação\n- **Segurança ofensiva / exploit kernel Linux (LPE)**\n- Pesquisa e exploração de classes de vulnerabilidades que “sujam” (dirty) estruturas internas do kernel (no caso, o campo `frag` de `struct sk_buff`) via caminhos zero-copy usando `splice()`, resultando em **page cache write** por parte de usuário não privilegiado.\n\n---\n\n### Razão do hype/tendência\n- **Sucesso quase garantido**: não depende de *race condition*, é um bug determinístico.\n- **Cobertura ampla**: funciona nas principais distribuições Linux (Ubuntu, RHEL, Fedora, openSUSE, AlmaLinux etc.) tanto com quanto sem suporte a *user namespaces*.\n- **Herdou relevância de bugs anteriores (Dirty Pipe, Copy Fail)**: amplia a superfície para redes/ESP/RxRPC, contornando mitigações já conhecidas.\n- **Impacto real**: CVEs recentes (**CVE-2026-43284** e **CVE-2026-43500**), com patches já merged no mainline do Linux.\n\n---\n\n### Tecnologias envolvidas\n- **Sistema**: Linux kernel networking/XFRM/RxRPC, page cache, `splice()`, `vmsplice()`\n- **Linguagem**: C\n- **APIs/Headers**: `net/xfrm.h`, `linux/rxrpc.h`, `linux/if_alg.h`, `netlink`, `if_ether`, `keyctl`, `termios`\n- **Conceitos**: ESP/AEAD in-place crypto, `pcbc(fcrypt)`, RxKAD, AF_ALG, user namespaces, XFRM SA, ESN replay, page cache pinning\n\n---\n\n### Resumo do que foi feito\n- Clonei o repositório `V4bel/dirtyfrag`.\n- Li `README.md`, `assets/write-up.md` e `exp.c`.\n- Estruturei os 4 pontos solicitados em português, de forma direta e concisa.", "api_calls": 4, "duration_seconds": 19.36, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 39067, "output": 1042}, "tool_trace": [{"tool": "terminal", "args_bytes": 84, "result_bytes": 72, "status": "ok"}, {"tool": "terminal", "args_bytes": 88, "result_bytes": 145, "status": "ok"}, {"tool": "read_file", "args_bytes": 41, "result_bytes": 5845, "status": "ok"}, {"tool": "read_file", "args_bytes": 37, "result_bytes": 19403, "status": "ok"}, {"tool": "read_file", "args_bytes": 50, "result_bytes": 34675, "status": "ok"}]}], "total_duration_seconds": 38.29} delegate_task 


c0:
  Excelente progresso! 6 repositórios analisados. Continuando com o próximo lote:  [{"id": "chatcmpl-tool-83dd3b105c9c5a44", "call_id": "chatcmpl-tool-83dd3b105c9c5a44", "response_item_id": "fc_chatcmpl-tool-83dd3b105c9c5a44", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: vercel-labs/zerolang\\nURL: https://github.com/vercel-labs/zerolang\\nLinguagem: C\\nDescri\u00e7\u00e3o: The programming language for agents\\nStars: 4.733\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o (IA, Dev, DevOps, Seguran\u00e7a, Dados, etc)\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: vercel-labs/zero-native\\nURL: https://github.com/vercel-labs/zero-native\\nLinguagem: Zig\\nDescri\u00e7\u00e3o: Build desktop + mobile apps with Zig and web UI\\nStars: 4.037\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: perplexityai/bumblebee\\nURL: https://github.com/perplexityai/bumblebee\\nLinguagem: Go\\nDescri\u00e7\u00e3o: Read-only developer endpoint scanner for on-disk package, extension, and developer-tool metadata, built to check exposure to known software supply-chain compromises.\\nStars: 3.980\\n\\nAnalise este reposit\u00f3rio e retorne:\\n- Problema que resolve\\n- Tema principal de atua\u00e7\u00e3o\\n- Raz\u00e3o do hype/tend\u00eancia\\n- Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "Análise concluída do repositório [`vercel-labs/zerolang`](https://github.com/vercel-labs/zerolang). Resumo final:\n\n---\n\n## 🔍 Problema que resolve\n\n**Limitações da edição semântica por texto pura quando agentes de IA modificam código.**\n\nEditar código tradicionalmente por diff/patch de texto é um processo *inseguro* para agentes:\n- referências que parecem relacionadas podem não ser;\n- intervalos de linha ficam obsoletos com facilidade;\n- edições não garantem preservação de ownership, efeitos, imports, tipos ou constraints de capacidade.\n\n**Solução proposta:** representar semanticamente a estrutura do programa como um grafo derivado pelo compilador (`ProgramGraph`), permitindo que agentes editem **nós e arestas com IDs estáveis**, ao invés de ranges de texto. O source continua sendo a fonte da verdade, mas o grafo é a interface entre agente e compilador.\n\n---\n\n## 🎯 Tema principal de atuação\n\n**IA (Inteligência Artificial)** — com foco em **Engenharia de Agentes / AI Software Engineering**.  \nÉ classificada como uma linguagem \"agent-first\", criada para ser entendida e mutável por modelos de linguagem de forma determinística, não para humanos em primeiro lugar.\n\n---\n\n## 🔥 Razão do hype / tendência\n\n- **Primeira linguagem pensada primariamente para agentes:** não é uma linguagem convencional com “novidades para devs”; ela inverte o problema: “como seres humanos + agentes leem e escrevem código?”\n- **Grafo semântico editável:** `zero graph dump` e `zero graph patch` resolvem diretamente o loop de *edit → formata → reparse → valida → corrige* que hoje gera muitos erros em agentes codificadores.\n- **Performance extrema:** meta declarada de zero dependências, baixo consumo de memória, startup rápido e build rápido.\n- **Vercel Labs por trás:** forte branding e acesso a ecossistema de ferramentas da Vercel.\n- **4.7k+ estrelas** em pouco tempo, refletindo interesse crescente em runtimes e linguagens otimizadas para IA.\n\n---\n\n## 🛠️ Tecnologias envolvidas\n\n| Camada | Tecnologias / Conceitos |\n|---|---|\n| **Compilador nativo** | C, MIR (Mid-level IR), verificador de tipos TypeCore, direct emitters |\n| **Backend emissor** | x64, AArch64, ELF, Mach-O, COFF |\n| **CLI / Tooling** | Node.js, TypeScript, pnpm workspace, Turbo |\n| **Representação do programa** | ProgramGraph, nós hasheados, arestas semânticas |\n| **Safety** | Verificador de tipos, rastreamento de borrow/provenance, sandbox compile-time |\n| **Ecossistema** | Extensões VS Code, cursores, benchmarks conformance |\n| **SKILL bundles** | `zero skills` (language, diagnostics, stdlib, packages, testing, graph) instaláveis junto ao compilador |\n| **Integração com agentes** | JSON schemas em todos os subcomandos (`check --json`, `graph --json`, `fix --plan --json`) para consumo por LLMs/agents |\n\n---\n\n### Observações adicionais úteis\n- A extensão de arquivo é `.0` (leia-se \"zero\"), não relacionado ao número.\n- V0.2.0 é a versão atual analisada e já suporta grafo editável com *source-backed* rewrite.\n- Projeto está **Apache-2.0** e os mantenedores enfatizam que ainda tem bugs de segurança; recomenda-se uso em ambientes isolados.", "api_calls": 4, "duration_seconds": 23.2, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 28301, "output": 1796}, "tool_trace": [{"tool": "terminal", "args_bytes": 145, "result_bytes": 87, "status": "ok"}, {"tool": "terminal", "args_bytes": 118, "result_bytes": 12506, "status": "ok"}, {"tool": "search_files", "args_bytes": 68, "result_bytes": 2526, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 5412, "status": "ok"}, {"tool": "read_file", "args_bytes": 56, "result_bytes": 6533, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "## Análise do repositório vercel-labs/zero-native\n\n### Problema que resolve\nPermite criar apps desktop e mobile usando Zig + interface web, funcionando como uma “camada nativa” para apps de frontend moderno.\n- Atua como shell que carrega WebView e expõe ponte com código nativo.\n- Torna apps compactos, com binários pequenos, memória reduzida e reconstrução rápida.\n\n### Tema principal\nFramework/shell de aplicativo nativo Zig para frontends web modernos.\n- Conceitos principais: `App`, `Runtime`, `WebViewSource`, `app.zon`,\n- API `window.zero.invoke()` JS→Zig\n- Separação clara entre web e nativo, com segurança explícita.\n\n### Razão do hype/tendência\n- Zig estamos sob crescente adoção por desempenho e compilação rápida.\n- Apoio do Vercel/Labs traz credibilidade e visibilidade.\n- Estratégia dupla web engine: WebView do sistema (leve) ou CEF/Chromium (rendering consistente).\n- Cobre desktop (macOS, Linux, Windows) e mobile (iOS, Android).\n- Foco em developer experience: CLI no npm, exemplos multi-framework, mobile embedding C ABI.\n- Ênfase em segurança: WebView trata-se como não-confiável, permissões e políticas explícitas.\n\n### Tecnologias envolvidas\n- Linguagem: Zig 0.16+\n- Web engines:\n  - Sistema: WKWebView (macOS), WebKitGTK (Linux), WebView2 (Windows)\n  - CEF/Chromium\n- Integrações nativas: Objective-C/C++/C\n  - macOS: AppKit, CEF, Automation host\n  - Linux: GTK4\n  - Windows: WebView2, CEF\n- Package/CLI: Node.js/npm (`zero-native`)\n- Frontend: exemplo para Next.js, React, Svelte, Vue\n- Mobile: C ABI (`libzero-native.a`) para host iOS/Android\n- Schema/app config: `app.zon`\n- Build/CI: Zig (`build.zig`), GitHub Actions e processo manual de release\n- Documentação: MDX no site `zero-native.dev`", "api_calls": 8, "duration_seconds": 37.3, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 66465, "output": 1796}, "tool_trace": [{"tool": "terminal", "args_bytes": 108, "result_bytes": 74, "status": "ok"}, {"tool": "search_files", "args_bytes": 68, "result_bytes": 3655, "status": "ok"}, {"tool": "terminal", "args_bytes": 44, "result_bytes": 1214, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 4893, "status": "ok"}, {"tool": "read_file", "args_bytes": 47, "result_bytes": 684, "status": "ok"}, {"tool": "read_file", "args_bytes": 46, "result_bytes": 6496, "status": "ok"}, {"tool": "terminal", "args_bytes": 118, "result_bytes": 1965, "status": "ok"}, {"tool": "terminal", "args_bytes": 124, "result_bytes": 1389, "status": "ok"}, {"tool": "read_file", "args_bytes": 70, "result_bytes": 6597, "status": "ok"}, {"tool": "terminal", "args_bytes": 71, "result_bytes": 989, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "## Análise — perplxexityai/bumblebee\n\n### Problema que resolve\nEm resposta a um advisory de supply-chain, equipes precisam saber **quais dev endpoints têm, agora, uma correspondência exata no disco** (lockfiles, manifests, metadados de pacotes, extensões e configs de ferramentas). Esse estado local é fragmentado e os meios tradicionais não cobrem bem esse cenário: SBOMs mostram o que foi empacotado, EDR mostra o que executou, mas a resposta a incidentes frequentemente precisa dessa visão de inventário “suja” e local.\n\n### Tema principal\nScanner read-only de inventário de endpoints de desenvolvedor, gerando registros NDJSON de pacotes, extensões e ferramentas locais, e oferecendo verificação de exposição contra catálogos de advisory.\n\n### Razão do hype/tendência\n- **Escopo estreito e resolvível**: responde uma pergunta de incidente que SBOM/EDR não cobriam.\n- **Design minimalista**: Go 1.25+, binário estático, zero dependências além da stdlib.\n- **Perfis operacionais claros** (`baseline`, `project`, `deep`) para diferentes frequências e tipos de varredura.\n- **Read-only e seguro**: não executa gerenciadores de pacotes e não lê código fonte.\n- **Pronto para-uso em fleet**: selftest embutido, saída NDJSON, modelo de estado e suporte a descoberta de raízes.\n\n### Tecnologias envolvidas\n- Go (stdlib apenas)\n- NDJSON para transporte de registros\n- Múltiplas fontes/metadados de ecossistemas: npm, pnpm, yarn, bun, Go modules, PyPI, RubyGems, Composer, MCP, extensões de editor/browser, Homebrew\n- HTTP sink opcional, catálogos JSON de exposição, dedup, timeouts e concorrência controlada", "api_calls": 5, "duration_seconds": 24.67, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 37126, "output": 1084}, "tool_trace": [{"tool": "terminal", "args_bytes": 102, "result_bytes": 82, "status": "ok"}, {"tool": "terminal", "args_bytes": 47, "result_bytes": 863, "status": "ok"}, {"tool": "read_file", "args_bytes": 55, "result_bytes": 8632, "status": "ok"}, {"tool": "read_file", "args_bytes": 38, "result_bytes": 170, "status": "ok"}, {"tool": "terminal", "args_bytes": 84, "result_bytes": 1617, "status": "ok"}, {"tool": "read_file", "args_bytes": 61, "result_bytes": 1098, "status": "ok"}, {"tool": "read_file", "args_bytes": 59, "result_bytes": 21279, "status": "ok"}]}], "total_duration_seconds": 37.38} delegate_task 


c0:
  Seguimos com mais 3:  [{"id": "chatcmpl-tool-b2be6baef9cb23ef", "call_id": "chatcmpl-tool-b2be6baef9cb23ef", "response_item_id": "fc_chatcmpl-tool-b2be6baef9cb23ef", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: simplifaisoul/osiris\\nURL: https://github.com/simplifaisoul/osiris\\nLinguagem: TypeScript\\nDescri\u00e7\u00e3o: Open Source Global Intelligence Platform - Real-Time OSINT Dashboard - A Palantir Alternative\\nStars: 3.732\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o do hype, Tecnologias envolvidas\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: microsoft/SkillOpt\\nURL: https://github.com/microsoft/SkillOpt\\nLinguagem: Python\\nDescri\u00e7\u00e3o: SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.\\nStars: 3.220\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: FoundZiGu/GuJumpgate\\nURL: https://github.com/FoundZiGu/GuJumpgate\\nLinguagem: JavaScript\\nDescri\u00e7\u00e3o: (sem descri\u00e7\u00e3o)\\nStars: 3.115\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "Resultado da análise do repositório `simplifaisoul/osiris` — documento já fechado, sem arquivos gerados ou alterados.\n\n- Problema: Falta uma plataforma unificada e em tempo real para correlacionar inteligência de domínios dispersos (aviação, marítimo, terremotos, câmeras, notícias, cyber, cripto e sanções) sem precisar de múltiplas ferramentas separadas.\n\n- Tema principal: Dashboard OSINT global em tempo real — “Inteligência Global & Reconhecimento Integrado”, focado em consciência situacional via um único mapa interativo.\n\n- Razão do hype: Junta feeds ao vivo de várias fontes em uma interface acelerada por WebGL (MapLibre GL) com 60fps, inclui até um módulo “RECON” com scanner, DNS, WHOIS, SSL e busca em sanções OFAC, transmitindo a ideia de uma ferramenta estilo “Palantir” para o público geral.\n\n- Tecnologias envolvidas:\n  - TypeScript 5\n  - Next.js 16 (App Router, Turbopack)\n  - React 19\n  - MapLibre GL JS / WebGL\n  - Framer Motion, lucide-react\n  - hls.js, satellite.js, rss-parser\n  - Tailwind CSS 4\n  - Vercel Edge\n  - Node 22 para imagem Docker", "api_calls": 10, "duration_seconds": 44.27, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 89049, "output": 2493}, "tool_trace": [{"tool": "terminal", "args_bytes": 115, "result_bytes": 69, "status": "ok"}, {"tool": "terminal", "args_bytes": 115, "result_bytes": 1397, "status": "ok"}, {"tool": "read_file", "args_bytes": 65, "result_bytes": 10331, "status": "ok"}, {"tool": "read_file", "args_bytes": 67, "result_bytes": 1580, "status": "ok"}, {"tool": "read_file", "args_bytes": 41, "result_bytes": 1416, "status": "ok"}, {"tool": "terminal", "args_bytes": 114, "result_bytes": 1597, "status": "ok"}, {"tool": "search_files", "args_bytes": 124, "result_bytes": 18, "status": "ok"}, {"tool": "search_files", "args_bytes": 123, "result_bytes": 18, "status": "ok"}, {"tool": "terminal", "args_bytes": 110, "result_bytes": 2786, "status": "ok"}, {"tool": "search_files", "args_bytes": 122, "result_bytes": 18, "status": "ok"}, {"tool": "read_file", "args_bytes": 84, "result_bytes": 6384, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "## Análise do repositório `microsoft/SkillOpt`\n\n### Procedimento\n1. Clonei o repositório para `/home/ice/SkillOpt`.\n2. Li `README.md` e `pyproject.toml` para identificar o problema, tema, hype e tecnologias.\n\n### Problema\n Como otimizar habilidades reutilizáveis em linguagem natural (prompts/instruções, os \"skills\") para agentes LLM **congelados**, sem necessidade de ajustar pesos ou retreinar o modelo base.\n\n### Tema principal\n**Otimização de skills/agentes em espaço textual**, enquadrada como uma “treino” em texto-space com epochs, batch size, taxa de aprendizado e validação, gerando artefatos deployáveis como `best_skill.md`.\n\n### Razões do hype\n- **Framing inovador**: tratar o aprendizado de prompt como se fosse treinamento de rede neural, mas sem mexer nos pesos do LLM.\n- **Produto Microsoft** com paper no arXiv (2605.23904) e página oficial.\n- Suporte a **múltiplos benchmarks** (SearchQA, ALFWorld, DocVQA, LiveMathematicianBench, SpreadsheetBench, OfficeQA).\n- Compatível com **múltiplos backends** (Azure OpenAI, OpenAI-compatible, Anthropic Claude, Qwen/vLLM).\n- Artefatos **reutilizáveis e deployáveis** (`best_skill.md`).\n- **Validação-gated updates** (só atualiza se houver melhoria real).\n- **WebUI opcional** (Gradio) para monitoramento da evolução dos skills.\n- Alta popularidade: ~3.2k estrelas.\n\n### Tecnologias\n- **Linguagem**: Python 3.10+\n- **Dependências core**: `openai >=1.30.0`, `pyyaml`, `numpy`, `openpyxl`, `azure-identity`, `azure-core`, `httpx`\n- **Opcionais**: `alfworld`/`gymnasium`, `claude-agent-sdk`, `vllm` (Qwen), `gradio` (WebUI), `mkdocs-material` (docs), `ruff` e `pytest` (dev)\n- **CLI**: `skillopt-train` e `skillopt-eval`\n- **Arquitetura**: configs YAML por benchmark, saída estruturada em `outputs/` (history, skills, formatos `.md`)\n- **Licença**: MIT\n\nEm resumo: é uma ferramenta de prompt optimization “treinável” para agentes LLM, com loop de validação e múltiplos suportes, criada pela Microsoft e alinhada à tendência de agentic AI / reusable skills.", "api_calls": 6, "duration_seconds": 23.98, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 36570, "output": 1593}, "tool_trace": [{"tool": "search_files", "args_bytes": 44, "result_bytes": 18, "status": "ok"}, {"tool": "terminal", "args_bytes": 101, "result_bytes": 81, "status": "ok"}, {"tool": "read_file", "args_bytes": 40, "result_bytes": 9842, "status": "ok"}, {"tool": "search_files", "args_bytes": 78, "result_bytes": 66, "status": "ok"}, {"tool": "read_file", "args_bytes": 45, "result_bytes": 2608, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "## Análise do repositório FoundZiGu/GuJumpgate\n\n**O que foi feito:**\n- Clonei o repositório em `/home/ice/GuJumpgate`\n- Li README, manifest.json, package.json, Release.md, rules.json e documentação em chinês\n\n### O que encontrei\n\n**Problema:**\nAutomação do registro e ativação do ChatGPT Plus / GPT-Plus com método “plus via PayPal” (Plus Checkout). A barreira é que, para obter Plus, é preciso fazer OAuth com uma conta GPT Free válida e depois passar pelo fluxo de pagamento (Stripe/PayPal), que exige dados de cartão/endereço, número de telefone para verificação e, além disso, o site tem bloqueios (captcha, slider do PayPal, verificação SMS). O projeto resolve isso automatizando passo a passo dentro do navegador, eliminando trabalho manual repetitivo.\n\n**Tema principal:**\nExtensão para navegador Chrome (MV3) de automação de cadastro e ativação de ChatGPT Plus. Destaque: fluxo automatizado de conferência de pagamento final usando PayPal (JP e US) e Stripe, sem depender de cartão de crédito na etapa do Plus (usa a verificação PayPal).\n\n**Razão do hype (3.115 estrelas):**\n- Funcionalidade altamente procurada: ChatGPT Plus “sem esforço”\n- Hype construído por relatos de alta confiabilidade em ambiente JP (10/10 sucesso relatado no README)\n- Combinação “automatizada” de contas (Hotmail/Outlook, iCloud, alias) + pagamentos + bypass de bloqueios (Slider/Captcha)\n- Baseado no projeto aberto FlowPilot/StepFlow, com PRs e comunidade ativa\n- Lançamento e ciclo rápido de versões (Release notes detalhadas)\n\n**Tecnologias usadas:**\n- JavaScript (Vanilla) — extensão Chrome MV3\n- Chrome Extension Manifest v3 (service worker, side panel, declarativeNetRequest)\n- Service worker: `background.js`\n- Content scripts injetados em domínios chave: OpenAI, Stripe, PayPal, iCloud, mail 163/qq, DuckDuckGo\n- Painel lateral (sidepanel): HTML + CSS + JS\n- Ferramentas auxiliares: Cloudflare Temp Email, Microsoft Graph/IMAP, iCloud Mail\n- Provedores de SMS (5-Sim, GrizzlySMS, Hero SMS, NexSMS, SMSPool, SMSBower, SMS Verification Number, ChatGPTSMS)\n- Manipulação de proxy (mihomo/clash recomendado)\n- Python para serviços auxiliares (ex.: `scripts/hotmail_helper.py`, `services/checkout-converter/app.py`)\n- Semanticamente, o projeto faz scraping/automação DOM e gerenciamento de sessão, OAuth e fluxos multi-steps\n\n### Arquivos relevantes\n- `/home/ice/GuJumpgate/README.md`\n- `/home/ice/GuJumpgate/manifest.json`\n- `/home/ice/GuJumpgate/Release.md`\n- `/home/ice/GuJumpgate/rules.json`\n- `/home/ice/GuJumpgate/package.json`", "api_calls": 5, "duration_seconds": 24.45, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 38966, "output": 1384}, "tool_trace": [{"tool": "terminal", "args_bytes": 100, "result_bytes": 73, "status": "ok"}, {"tool": "terminal", "args_bytes": 48, "result_bytes": 2819, "status": "ok"}, {"tool": "search_files", "args_bytes": 67, "result_bytes": 2671, "status": "ok"}, {"tool": "read_file", "args_bytes": 42, "result_bytes": 4395, "status": "ok"}, {"tool": "read_file", "args_bytes": 46, "result_bytes": 4822, "status": "ok"}, {"tool": "read_file", "args_bytes": 45, "result_bytes": 202, "status": "ok"}, {"tool": "read_file", "args_bytes": 73, "result_bytes": 2498, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 2350, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 1540, "status": "ok"}]}], "total_duration_seconds": 44.36} delegate_task 


c0:
  Falta pouco! Próximo lote:  [{"id": "chatcmpl-tool-93e43fbec8f3f798", "call_id": "chatcmpl-tool-93e43fbec8f3f798", "response_item_id": "fc_chatcmpl-tool-93e43fbec8f3f798", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: XBuilderLAB/cheat-on-content\\nURL: https://github.com/XBuilderLAB/cheat-on-content\\nLinguagem: Python\\nDescri\u00e7\u00e3o: You're reading this. The skill predicted it. A workflow that turns every post into a calibrated experiment\u2014score, blind-predict, retro, evolve. The future doesn't reward effort, it rewards those who see the pattern first. 1M followers in a month \u2014 not luck, system.\\nStars: 3.055\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: simonlin1212/a-stock-data\\nURL: https://github.com/simonlin1212/a-stock-data\\nLinguagem: N/A\\nDescri\u00e7\u00e3o: A\u80a1\u5168\u6808\u6570\u636e\u5de5\u5177\u5305 \u2014 7\u5c42\u67b6\u6784 \u00b7 28\u7aef\u70b9 \u00b7 13\u6570\u636e\u6e90 \u00b7 \u96f6\u7b2c\u4e09\u65b9\u4f9d\u8d56 | Full-stack China A-Share data toolkit for AI coding assistants\\nStars: 2.983\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: strukto-ai/mirage\\nURL: https://github.com/strukto-ai/mirage\\nLinguagem: TypeScript\\nDescri\u00e7\u00e3o: A Unified Virtual Filesystem For AI Agents\\nStars: 2.814\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "Retorno da análise do repositório **XBuilderLAB/cheat-on-content**:\n\n- O que fiz: clonei o repo em `/home/ice/repo-cheat-on-content` e examinei README, SKILL.md, estrutura de `skills/`, `adapters/`, `tools/`, `hooks/`, `templates/` e `starter-rubrics/`.\n- Problema: criadores de conteúdo operam em loop de publicação sem aprendizado estruturado — publicam, recebem métricas, mas não transformam o erro em intuição mensurável; subsistem em “feeling” não calibrado e em ferramentas genéricas que não lembram nem se adaptam ao canal individual.\n- Tema principal: edge-of-pattern — usar AI para calibrar juízo criativo ao longo do tempo via um ciclo previsível de avaliar, prever cego, publicar, revisar em T+3d e evoluir a fórmula (rubric) automaticamente.\n- Razões do hype:\n  - Narrativa forte: “1M em 1 mês” e tom quase profético (“isto é mais sistema que motivação”).\n  - Diferencial real percebido: não é “IA que escreve por você”, é uma ops-deck calibrada pelo *seu* canal que evolui.\n  - Rituais rígidos (blind prediction imutável, bump via rerun total, rubrica como workbench) geram confiança ritualística.\n  - Hooks + integração com agentes (Claude Code/Codex) e bundle de 14 sub-skills baixam o custo de adoção.\n  - Mercado de creator tools saturado por dicas genéricas; esse repo ataca ansiedade específica de quem já enxerga fama como padrão previsível.\n- Tecnologias:\n  - Python (principalmente como CLI/runtime de ferramentas e adapters)\n  - Scripts bash (`install.sh`, `uninstall.sh`, hooks) para integração com agentes\n  - Markdown como camada de dados/produto (`SKILL.md`, templates, starter-rubrics)\n  - JSON para state, hooks, eventos passivos (`.cheat-state.json`, `prediction-immutability.json`, `meta-logging.json`)\n  - SQL opcional (`content.db.schema.sql`) para escala da pool de calibração\n  - Integração com Claude Code `.claude/settings.json` (slashes commands + SessionStart hook)\n  - Fontes de dados em `adapters/` (trends, candidate pool, extração de script/audio, dados de performance de sessões)\n\nArquivos relevantes: `README.md`, `SKILL.md`, `tools/score-curve.py`, `tools/diff_pct.py`, `hooks/*`, `skills/*`, `shared-references/*`, `migrations/*` e `adapters/*`.", "api_calls": 10, "duration_seconds": 43.89, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 87689, "output": 2043}, "tool_trace": [{"tool": "terminal", "args_bytes": 48, "result_bytes": 1050, "status": "ok"}, {"tool": "terminal", "args_bytes": 114, "result_bytes": 84, "status": "ok"}, {"tool": "terminal", "args_bytes": 59, "result_bytes": 1076, "status": "ok"}, {"tool": "read_file", "args_bytes": 53, "result_bytes": 7718, "status": "ok"}, {"tool": "terminal", "args_bytes": 90, "result_bytes": 1548, "status": "ok"}, {"tool": "read_file", "args_bytes": 66, "result_bytes": 11280, "status": "ok"}, {"tool": "terminal", "args_bytes": 194, "result_bytes": 565, "status": "ok"}, {"tool": "search_files", "args_bytes": 64, "result_bytes": 183, "status": "ok"}, {"tool": "search_files", "args_bytes": 102, "result_bytes": 763, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "Resumo da análise do repositório **simonlin1212/a-stock-data**:\n\n- Tema principal: toolkit “full-stack” de dados para ações chinesas A-share, empacotado principalmente como um arquivo **SKILL.md** auto-contido para ser injetado em assistentes de código/IA (Claude Code, Codex, OpenClaw).\n- Problema resolvido: acessar dados de 13 fontes chinesas exigia wrappers complexos e frágeis (akshare, mootdx, iwencai com headers específicos, mudanças de API etc.). O projeto elimina dependências de pacotes terceiros de dados, conectando diretamente às APIs HTTP/TCP originais e já lida com prevenção de bloqueio de IP pelos endpoints de leste-europeu.\n- Razão do hype: \n  - **Zero terceirização de dados**: remove akshare, com dependências mínimas (mootdx, requests, pandas, stockstats).\n  - **Pronto para agentes de IA**: SKILL.md com código Python inline, ativação contextual, exemplos e fluxos prontos.\n  - **Mitigação de bloqueio**: prioriza fontes estáveis+mootdx/腾讯 e introduz limitador série comum `em_get()` para dados de leste-europeu.\n- Tecnologias:\n  - **mootdx** (TCP 7709 direto, só aqui para preservar protocolo)\n  - **HTTP direto** (腾讯, 同花顺, 东财, 百度股市通, 新浪, 巨潮)\n  - **Python** (requests, pandas, stockstats)\n  - Somente um endpoint opcional pago/key: **iwencai** (OpenAPI)\n\nSem prosseguir para leitura adicional do código, porque o repositório é basicamente uma documentação estruturada em markdown com blocos de código; os achados acima já respondem aos 4 elementos pedidos.", "api_calls": 6, "duration_seconds": 27.89, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 42500, "output": 1201}, "tool_trace": [{"tool": "terminal", "args_bytes": 43, "result_bytes": 1437, "status": "ok"}, {"tool": "terminal", "args_bytes": 99, "result_bytes": 75, "status": "ok"}, {"tool": "terminal", "args_bytes": 36, "result_bytes": 1547, "status": "ok"}, {"tool": "terminal", "args_bytes": 97, "result_bytes": 290, "status": "ok"}, {"tool": "read_file", "args_bytes": 58, "result_bytes": 6962, "status": "ok"}, {"tool": "read_file", "args_bytes": 61, "result_bytes": 5227, "status": "ok"}, {"tool": "read_file", "args_bytes": 57, "result_bytes": 7480, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "- **O que foi feito**\n  - Clonei o repositório `strukto-ai/mirage` para `/tmp/mirage`.\n  - Li `README.md`, `CLAUDE.md` e listei os `package.json` do módulo TypeScript.\n  - Gerei um arquivo de análise estruturado em `/home/ice/analise_repositorio.md`.\n\n- **Resultado**\n  - **Problema:** Fragilidade na integração de agentes de IA com múltiplos serviços externos, exigindo SDKs e interfaces diferentes por backend.\n  - **Tema principal:** Sistema de arquivos virtual unificado para agentes de IA, montando vários serviços como diretórios de um único filesystem.\n  - **Razão do hype:** Abstração simples (shell/semântica de filesystem), stack multi-linguagem e multi-framework, cache plugável e possibilidade de snapshot/clone do ambiente.\n  - **Tecnologias:** TypeScript + Python, Node ≥ 20, Python ≥ 3.12, `uv` (Python), Redis, aio stack, RAM/Disk/SQLite/DuckDB como backends locais.\n\n- **Arquivo gerado:** `/home/ice/analise_repositorio.md`", "api_calls": 5, "duration_seconds": 24.85, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 37434, "output": 1732}, "tool_trace": [{"tool": "terminal", "args_bytes": 87, "result_bytes": 74, "status": "ok"}, {"tool": "terminal", "args_bytes": 98, "result_bytes": 2764, "status": "ok"}, {"tool": "read_file", "args_bytes": 33, "result_bytes": 12195, "status": "ok"}, {"tool": "read_file", "args_bytes": 33, "result_bytes": 5831, "status": "ok"}, {"tool": "search_files", "args_bytes": 69, "result_bytes": 496, "status": "ok"}, {"tool": "write_file", "args_bytes": 2415, "result_bytes": 223, "status": "ok"}]}], "total_duration_seconds": 43.99} delegate_task 


c0:
    [{"id": "chatcmpl-tool-bebef11fb2393535", "call_id": "chatcmpl-tool-bebef11fb2393535", "response_item_id": "fc_chatcmpl-tool-bebef11fb2393535", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: virgiliojr94/book-to-skill\\nURL: https://github.com/virgiliojr94/book-to-skill\\nLinguagem: Python\\nDescri\u00e7\u00e3o: Turn any technical book PDF into a Claude Code skill \u2014 ready to study, reference, and use while you work.\\nStars: 2.612\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: crafter-station/petdex\\nURL: https://github.com/crafter-station/petdex\\nLinguagem: TypeScript\\nDescri\u00e7\u00e3o: The public gallery of animated pet for Codex, Claude Code, OpenCode y Gemini CLI\\nStars: 2.598\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}, {\"context\": \"Reposit\u00f3rio: thananon/9arm-skills\\nURL: https://github.com/thananon/9arm-skills\\nLinguagem: Shell\\nDescri\u00e7\u00e3o: (sem descri\u00e7\u00e3o)\\nStars: 2.549\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "# Análise do repositório `virgiliojr94/book-to-skill`\n\n## Problema\nA dificuldade de reaproveitar conhecimento de livros técnicos após a leitura. Os workarounds usuais não funcionam bem:\n- Procurar no PDF retorna páginas, não respostas.\n- Perguntar a um LLM geralmente gera alucinação ou ausência do conteúdo.\n- Fazer anotações resulta em documentos que raramente são revisitados.\n- Colocar o livro todo no contexto queima o orçamento de tokens e fica caro.\n\n## Tema principal\nTransformar livros/documentos técnicos (PDF, EPUB, DOCX, etc.) em **skills** estruturadas para Claude Code (e Amp), prontas para estudo, consulta e uso durante o trabalho. Em vez de jogar o texto cru no contexto, o projeto extrai: frameworks nomeados pelo autor, princípios, técnicas, anti-patterns, glossário, cheatsheet e índices de capítulos/tópicos — em arquivos compactos e sob demanda.\n\n## Razão do hype\n- **Custo/token reduzido:** chapters ficam em disco e são carregados sob demanda, evitando custo de 200K tokens de um livro inteiro.\n- **Compilação vs RAG:** alega ser diferente de RAG porque faz uma análise profunda única (extraindo a estrutura do autor) em vez de busca por similaridade.\n- **Versatilidade:** funciona com muitos formatos e tem fallbacks inteligentes quando dependências estão ausentes.\n- **Aderência ao fluxo do desenvolvedor:** integra diretamente no CLI do Claude Code como `/book-to-skill ...`.\n\n## Tecnologias principais\n- Python\n- Extração PDF: `pdftotext` (poppler), `PyPDF2`, `pdfminer.six`, `docling`\n- Extração EPUB: `ebooklib`, `beautifulsoup4`, fallback stdlib `zipfile`\n- Outros formatos: `python-docx`, `beautifulsoup4`, `striprtf`, Calibre `ebook-convert`\n- Markdown estruturado para saída (`SKILL.md`, `chapters/`, `glossary.md`, `patterns.md`, `cheatsheet.md`)\n- Sem dependências externas obrigatórias para formatos básicos (`txt`, `md`, `html`, etc.)", "api_calls": 4, "duration_seconds": 14.45, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 33348, "output": 927}, "tool_trace": [{"tool": "terminal", "args_bytes": 114, "result_bytes": 86, "status": "ok"}, {"tool": "search_files", "args_bytes": 70, "result_bytes": 257, "status": "ok"}, {"tool": "read_file", "args_bytes": 45, "result_bytes": 12204, "status": "ok"}, {"tool": "read_file", "args_bytes": 44, "result_bytes": 21573, "status": "ok"}, {"tool": "read_file", "args_bytes": 54, "result_bytes": 18347, "status": "ok"}]}, {"task_index": 1, "status": "completed", "summary": "Luiz, já analisei. Aqui o resumo do repositório `crafter-station/petdex`::\n\n### 🎯 Problema\nAgentes de código (Codex, Claude Code, OpenCode, Gemini CLI) não tinham uma forma fácil de personalizar a interface com mascotes animados. Não havia nem galeria pública nem instalação com um comando — cada pet era um pacote solto, sem curadoria, distribuição ou ecossistema.\n\n---\n\n### 🧩 Tema principal\n**Galerias e CLI de mascotes animados para agentes de IA**  \nÉ um ecossistema em três partes:\n1. A galeria web (petdex.crafter.run) para browse, submit e review de pets  \n2. O `petdex-cli` (`npx petdex install`) para instalar pets com um comando  \n3. O desktop floater (app que exibe o pet na tela e reage à atividade do agente em tempo real)\n\nCada pet é uma pasta simples com `pet.json` + `spritesheet`, no estilo Pokédex.\n\n---\n\n### ✅ Razão do hype (~2.6k stars)\n- **Ecossistema completo**: gallery + CLI + desktop app em um único repo.  \n- **Instalação trivial**: `npx petdex install <slug>` é charmosa e acessível.  \n- **Comunidade-first**: submissão pública, curadoria, Discord ativo, Badge de built-with, modelo de contribuição claro.  \n- **Tokens**: pet como objeto de coleção, “hatch a pet” dentro do Codex, vibe gamificada/colecionável.  \n- **Projetos derivados**: já tem 13+ projetos open-source construídos em cima da API/manifesto público.  \n- **Desktop \"fofo\"**: floater no macOS com Zig + WebKit que reage a eventos do agente (hooks real-time) — recurso diferenciador.\n\n---\n\n### 🛠️ Tecnologias\n**Web / App**  \n- Next.js 16, React 19, Tailwind v4, next-intl (i18n: en/es/zh)  \n- Drizzle ORM + Postgres (via PGlite em dev/mock ou Neon em produção)  \n- Clerk (auth OAuth/PKCE), Upstash Redis, UploadThing/R2/S3  \n- Vercel AI Gateway, OpenAI, ElevenLabs, Stripe, Resend  \n\n**CLI**  \n- Bun + TypeScript, publicado como npm package `petdex` (`petdex-cli`)  \n- Auth via Clerk OAuth + PKCE  \n\n**Desktop**  \n- Zig + WebKit (fork do `vercel-labs/zero-native`)  \n- Node sidecar para agent hooks  \n\n**Dev / Infra**  \n- Biome (lint/format), Bun test, `dev:mock` com PGlite (zero credenciais), Docker/Podman para dev real  \n\n---\n\nSe quiser, eu posso descer em algum ponto específico: arquitetura, análise de código, ou montar um pet fictício para ver como o schema funciona.", "api_calls": 4, "duration_seconds": 23.43, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 24857, "output": 1300}, "tool_trace": [{"tool": "terminal", "args_bytes": 27, "result_bytes": 294, "status": "ok"}, {"tool": "terminal", "args_bytes": 87, "result_bytes": 4388, "status": "ok"}, {"tool": "read_file", "args_bytes": 41, "result_bytes": 3475, "status": "ok"}, {"tool": "read_file", "args_bytes": 38, "result_bytes": 7941, "status": "ok"}, {"tool": "read_file", "args_bytes": 38, "result_bytes": 4470, "status": "ok"}]}, {"task_index": 2, "status": "completed", "summary": "## Análise do Repositório `thananon/9arm-skills`\n\n### O que fiz\nClonei o repositório para `/home/ice/9arm-skills`, examinei a estrutura principal (`README.md`, `CLAUDE.md` e os 4 arquivos `SKILL.md`).\n\n### O que encontrei\n\n**Problema / Contexto**\nRepositório de *agent skills* para o Claude Code (Anthropic), solucionando a falta de fluxos de trabalho estruturados e disciplinados para tarefas comuns de engenharia. Não é um repo de código executável, mas sim de conhecimento \"empacotado\" como skills reutilizáveis por um agente de IA.\n\n**Tema principal**\nClaude Code Agent Skills — coleções de instruções estruturadas para IA executar workflows de engenharia com qualidade consistente.\n\n**Razão do hype (popularidade)**\n- **2.549 ⭐**: bastante popular no ecossistema Claude Code, provavelmente pelo timing (comunidade ainda formando boas práticas de agentes)\n- Skills são acionáveis via slash commands (ex: `/debug-mantra`, `/post-mortem`)\n- São methodologias de engenharia tradicionais adaptadas para agentes de IA, o que gera identificação rápida com times técnicos\n- Separação clara entre engineering, productivity, personal, deprecated → artigo de skill é um \"plugin\" bem segmentado\n\n**Tecnologias utilizadas**\n| Item | Descrição |\n|------|-----------|\n| Markdown + YAML frontmatter | Interface principal das skills |\n| `.claude-plugin/plugin.json` | Orquestração Claude Code |\n| Shell scripts | Installer (`npx skills add` + `scripts/link-skills.sh`) |\n| JSON | Configuração do plugin |\n\n**Categorias de skills**\n- **engineering/**: `debug-mantra`, `post-mortem`, `scrutinize`\n- **productivity/**: `management-talk`\n- **misc/**: vazio\n- **(outras pastas)**: `personal/`, `in-progress/`, `deprecated/` conforme `CLAUDE.md`\n\n### Estrutura resumida\n```\n9arm-skills/\n├── .claude-plugin/plugin.json\n├── skills/\n│   ├── engineering/\n│   │   ├── debug-mantra/\n│   │   ├── post-mortem/\n│   │   └── scrutinize/\n│   ├── productivity/\n│   │   └── management-talk/\n│   ├── misc/\n│   ├── personal/\n│   ├── in-progress/\n│   └── deprecated/\n└── scripts/\n```", "api_calls": 4, "duration_seconds": 22.6, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 29516, "output": 1475}, "tool_trace": [{"tool": "terminal", "args_bytes": 110, "result_bytes": 940, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 2355, "status": "ok"}, {"tool": "search_files", "args_bytes": 78, "result_bytes": 294, "status": "ok"}, {"tool": "read_file", "args_bytes": 74, "result_bytes": 5136, "status": "ok"}, {"tool": "read_file", "args_bytes": 73, "result_bytes": 14243, "status": "ok"}, {"tool": "read_file", "args_bytes": 72, "result_bytes": 5034, "status": "ok"}, {"tool": "read_file", "args_bytes": 78, "result_bytes": 13859, "status": "ok"}]}], "total_duration_seconds": 23.53} delegate_task 


c0:
    [{"id": "chatcmpl-tool-b67670e4d7c7c155", "call_id": "chatcmpl-tool-b67670e4d7c7c155", "response_item_id": "fc_chatcmpl-tool-b67670e4d7c7c155", "type": "function", "function": {"name": "delegate_task", "arguments": "{\"tasks\": [{\"context\": \"Reposit\u00f3rio: huangserva/3DCellForge\\nURL: https://github.com/huangserva/3DCellForge\\nLinguagem: JavaScript\\nDescri\u00e7\u00e3o: AI-powered interactive 3D model generation, inspection, and presentation studio.\\nStars: 2.396\\n\\nAnalise e retorne: Problema, Tema principal, Raz\u00e3o hype, Tecnologias\", \"goal\": \"Analisar reposit\u00f3rio\", \"toolsets\": [\"web\", \"terminal\", \"file\"]}]}"}}]


c0:
  {"results": [{"task_index": 0, "status": "completed", "summary": "## Análise do Repositório: huangserva/3DCellForge\n\n### Problema\nCriar modelos 3D de qualidade profissional tradicionalmente exige softwares especializados caros (Blender, Maya), conhecimento técnico de modelagem e pipelines complexos. Transformar imagens de referência em modelos 3D navegáveis e apresentáveis era um processo fragmentado, sem uma solução unificada e acessível via browser.\n\n### Tema Principal\nUm **estúdio interativo de geração, inspeção e apresentação de modelos 3D** powered by AI. É uma aplicação web completa onde o usuário envia imagens ou arquivos GLB e obtém um workspace 3D profissional com ferramentas de inspeção, comparação, apresentação e exportação — tudo no browser.\n\n### Razão do Hype (⭐ 2.396)\n- **Múltiplos providers AI**: suporta Hyper3D, Tripo, Fal.ai, Hunyuan3D e fallback JS Depth — o usuário escolhe o melhor custo/qualidade\n- **Viewer interativo profissional**: controles de órbita, inspeção de peças, destaque de materiais e foco por categoria\n- **Demo Mode cinematográfico**: caminhos de câmera adaptativos por tipo de modelo (carros, aeronaves, navios, orgânicos)\n- **Persistência offline**: IndexedDB para histórico e modelos gerados cacheados em `.generated-models/`\n- **Workflow de apresentação**: screenshots, gravação de tela, comparação entre versões sem sair do app\n- **Segurança**: API keys ficam no backend (`.env.local`), nunca expostas ao frontend\n\n### Tecnologias\n| Camada | Tecnologias |\n|---|---|\n| Frontend | React 19, Vite 8 |\n| 3D | Three.js, React Three Fiber, Drei, Post-processing |\n| UI/Animação | Framer Motion, Lucide React |\n| Backend | Node.js (`server.mjs`) |\n| Testes | Playwright (visual regression), Node test runner |\n| Qualidade | ESLint |\n\n### Estrutura do Projeto\n- `src/` — app React com workbench 3-colunas (biblioteca / stage / ferramentas)\n- `server.mjs` — API backend Node para proxy seguro de APIs e cache de GLBs\n- `public/generated-models/` — modelos GLB de demonstração cacheados\n- `docs/demo/` — vídeo demo gravado", "api_calls": 4, "duration_seconds": 28.49, "model": "stepfun/step-3.7-flash:free", "exit_reason": "completed", "tokens": {"input": 21262, "output": 1294}, "tool_trace": [{"tool": "terminal", "args_bytes": 102, "result_bytes": 74, "status": "ok"}, {"tool": "search_files", "args_bytes": 97, "result_bytes": 18, "status": "ok"}, {"tool": "terminal", "args_bytes": 49, "result_bytes": 1175, "status": "ok"}, {"tool": "read_file", "args_bytes": 43, "result_bytes": 8655, "status": "ok"}, {"tool": "read_file", "args_bytes": 46, "result_bytes": 1661, "status": "ok"}]}], "total_duration_seconds": 28.52} delegate_task 


c0:
  Pronto! Todos os 20 repositórios foram analisados por agentes paralelos. Agora vou montar a tabela estruturada por tema:

  📊 **TOP 20 REPOSITÓRIOS NOVOS MAIS ESTRELADOS — ÚLTIMO MÊS**

  ## 🔥 IA / Machine Learning

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | antirez/ds4 | 12.551 | C | Engine de inferência local para DeepSeek V4 Flash (284B params) em Mac/Metal/CUDA | Autor do Redis + modelo massivo rodando em hardware comum |
  | 2 | microsoft/SkillOpt | 3.220 | Python | Otimização de skills em texto para LLMs congelados (sem retreino) | Framing de "treino de prompts" com epochs, validação-gated e artefatos deployáveis |
  | 3 | huangserva/3DCellForge | 2.396 | JavaScript | Gerador interativo de modelos 3D via AI no browser | Múltiplos providers (Hyper3D, Tripo, Hunyuan3D), viewer profissional, demo mode cinematográfico |

  ## 🛠️ Dev Tools / Ferramentas para Desenvolvedores

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | nexu-io/html-anything | 5.445 | HTML | Transformar conteúdo em HTML final envioável sem precisar de dev | 75 skills, 9 superfícies, export 1-clique, zero API key usando agentes já autenticados |
  | 2 | vercel-labs/zerolang | 4.733 | C | Linguagem de programação pensada PRIMEIRAMENTE para agentes de IA editarem código | Grafo semântico editável, Vercel Labs, sem dependências |
  | 3 | vercel-labs/zero-native | 4.037 | Zig | Build apps desktop+mobile com Zig + web UI | Zig em alta, shell nativo leve com WebView, suporte multi-SO |
  | 4 | BigPizzaV3/CodexPlusPlus | 8.869 | Rust | Aprimorar o Codex (OpenAI) sem modificar binários originais | Abordagem não-invasiva via CDP, relay de API, community-driven |
  | 5 | virgiliojr94/book-to-skill | 2.612 | Python | Transformar PDFs técnicos em skills utilizáveis para Claude Code | On-demand loading, estrutura do autor extraída, economia de tokens |

  ## 📱 UX / Utilitários

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | darrylmorley/whatcable | 4.894 | Swift | Descobrir o que cada cabo USB-C plugged no Mac realmente faz | Resolve dor real mainstream, tecnicamente sólido (IOKit), signed+notarizado Apple |

  ## 🔐 Segurança

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | V4bel/dirtyfrag | 4.786 | C | Escalação de privilégio determinística no Linux (LPE) sem race condition | Exploit kernel "arma real", CVEs recentes, suporte multi-distro |
  | 2 | perplexityai/bumblebee | 3.980 | Go | Scanner de endpoints de dev para detectar exposição a supply-chain compromises | Perplexity + escopo resolvível, binário estático Go, pronto para fleet |

  ## 📊 Dados / Finanças

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | simonlin1212/a-stock-data | 2.983 | N/A | Toolkit completo de dados A-share chineses sem dependência de terceiros | Zero terceirização de dados, pronto para agentes IA, 28 endpoints |

  ## 🎨 Entretenimento / Gamificação

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | crafter-station/petdex | 2.598 | TypeScript | Galeria de mascotes animados para agentes de código (Codex, Claude Code, etc) | Ecossistema completo (gallery+CLI+desktop floater), vibe gamificada/colecionável |
  | 2 | 9arm-skills | 2.549 | Shell | Skills estruturadas para Claude Code (debug, post-mortem, productivity) | Segmentação clara, timing certo (comunidade formando boas práticas) |

  ## 🌐 OSINT / Inteligência

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | simplifaisoul/osiris | 3.732 | TypeScript | Plataforma unificada de inteligência global em tempo real (estilo Palantir) | 60fps WebGL, múltiplos feeds, módulo RECON com scanner DNS/WHOIS |

  ## 🤖 Automação / Produtividade Criativa

  | # | Repo | Stars | Linguagem | Problema | Por que trending |
  |---|------|-------|-----------|----------|------------------|
  | 1 | XBuilderLAB/cheat-on-content | 3.055 | Python | Framework de calibração de criadores de conteúdo via IA | Sistema previsível (avalia→prevê→publica→evolui), narrativa forte, bundle de 14 sub-skills |
  | 2 | FULU-Foundation/OrcaSlicer-bambulab | 6.667 | C++ | Slicer 3D com suporte BambuLab preservando cloud/Wi-Fi | Reintroduz funcionalidade removida, comunidade impressão 3D forte |
  | 3 | FoundZiGu/GuJumpgate | 3.115 | JavaScript | Automação de registro/ativação ChatGPT Plus com PayPal | Alta demanda, fluxo automatizado multi-steps, bypass de bloqueios |

  ---

  **Resumo por categoria:**
  - **IA/ML**: 3 repos — agentes, inferência local, otimização de skills
  - **Dev Tools**: 5 repos — linguagens, ferramentas de código, workflows
  - **Segurança**: 2 repos — exploits + supply chain
  - **Dados/Finanças**: 1 repo — toolkit chinês A-shares
  - **OSINT**: 1 repo — dashboard de inteligência global
  - **Gamificação/UX**: 3 repos — mascotes + skills + utilitário macOS
  - **Automação Criativa**: 3 repos — criadores de conteúdo + impressão 3D + browser automation

  **Insight geral:** O mês foi dominado por projetos de **IA aplicada a agentes** (zerolang, ds4, book-to-skill, SkillOpt) e **ferramentas de produtividade para devs**. A categoria de segurança também apareceu forte, especialmente exploits de kernel e supply-chain scanning.  


c0:
  Estou sentindo falta de repositorios de ia aqui... o openhuman por exemplo eu sei q eh um pacote xom bastante estrela e nao estah aqui  


c0:
  Você tem razão. O problema é que a busca que eu fiz pegou repositórios **criados** nos últimos 30 dias, que é muito diferente de repositórios que **ganharam mais estrelas** no último mês. Muitos projetos de IA são mais antigos, mas explodem em popularidade recentemente.

  Vou refazer a busca com uma abordagem melhor — pegando os mais ativos e estrelados do último mês, e focando em projetos de IA que realmente estão em alta:  [{"id": "chatcmpl-tool-937738259256044a", "call_id": "chatcmpl-tool-937738259256044a", "response_item_id": "fc_chatcmpl-tool-937738259256044a", "type": "function", "function": {"name": "execute_code", "arguments": "{\"code\": \"\\nimport urllib.request, json, datetime\\n\\n# Buscar repos atualizados no \u00faltimo m\u00eas com muitas estrelas, focando em IA\\nqueries = [\\n    \\\"stars:>5000 pushed:>2026-04-30 language:python artificial-intelligence\\\",\\n    \\\"stars:>5000 pushed:>2026-04-30 LLM\\\",\\n    \\\"stars:>5000 pushed:>2026-04-30 language:python machine-learning\\\",\\n    \\\"stars:>3000 pushed:>2026-04-30 AI agent\\\",\\n    \\\"stars:>2000 pushed:>2026-04-30 deep learning\\\",\\n]\\n\\nseen = set()\\nall_repos = []\\n\\nfor q in queries:\\n    url = f\\\"https://api.github.com/search/repositories?q={urllib.parse.quote(q)}&per_page=20&sort=stars&order=desc\\\"\\n    try:\\n        req = urllib.request.Request(url, headers={\\\"User-Agent\\\": \\\"HermesAgent/1.0\\\", \\\"Accept\\\": \\\"application/vnd.github.v3+json\\\"})\\n        with urllib.request.urlopen(req) as resp:\\n            data = json.load(resp)\\n        for repo in data.get(\\\"items\\\", []):\\n            if repo[\\\"full_name\\\"] not in seen:\\n                seen.add(repo[\\\"full_name\\\"])\\n                all_repos.append({\\n                    \\\"name\\\": repo[\\\"full_name\\\"],\\n                    \\\"url\\\": repo[\\\"html_url\\\"],\\n                    \\\"language\\\": repo.get(\\\"language\\\") or \\\"N/A\\\",\\n                    \\\"stars\\\": repo[\\\"stargazers_count\\\"],\\n                    \\\"description\\\": repo.get(\\\"description\\\") or \\\"\\\",\\n                    \\\"pushed_at\\\": repo[\\\"pushed_at\\\"],\\n                    \\\"created_at\\\": repo[\\\"created_at\\\"],\\n                })\\n    except Exception as e:\\n        print(f\\\"Error: {e}\\\")\\n\\n# Ordenar por estrelas\\nall_repos.sort(key=lambda x: x[\\\"stars\\\"], reverse=True)\\n\\nprint(json.dumps({\\\"total\\\": len(all_repos), \\\"items\\\": all_repos[:30]}, ensure_ascii=False, indent=2))\\n\"}"}}]


c0:
  {"status": "success", "output": "{\n  \"total\": 85,\n  \"items\": [\n    {\n      \"name\": \"affaan-m/ECC\",\n      \"url\": \"https://github.com/affaan-m/ECC\",\n      \"language\": \"JavaScript\",\n      \"stars\": 199246,\n      \"description\": \"The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.\",\n      \"pushed_at\": \"2026-05-28T11:45:48Z\",\n      \"created_at\": \"2026-01-18T00:51:51Z\"\n    },\n    {\n      \"name\": \"Significant-Gravitas/AutoGPT\",\n      \"url\": \"https://github.com/Significant-Gravitas/AutoGPT\",\n      \"language\": \"Python\",\n      \"stars\": 184657,\n      \"description\": \"AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.\",\n      \"pushed_at\": \"2026-05-30T09:47:56Z\",\n      \"created_at\": \"2023-03-16T09:21:07Z\"\n    },\n    {\n      \"name\": \"NousResearch/hermes-agent\",\n      \"url\": \"https://github.com/NousResearch/hermes-agent\",\n      \"language\": \"Python\",\n      \"stars\": 173682,\n      \"description\": \"The agent that grows with you\",\n      \"pushed_at\": \"2026-05-30T22:41:00Z\",\n      \"created_at\": \"2025-07-22T22:22:28Z\"\n    },\n    {\n      \"name\": \"ollama/ollama\",\n      \"url\": \"https://github.com/ollama/ollama\",\n      \"language\": \"Go\",\n      \"stars\": 172680,\n      \"description\": \"Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.\",\n      \"pushed_at\": \"2026-05-30T21:59:01Z\",\n      \"created_at\": \"2023-06-26T19:39:32Z\"\n    },\n    {\n      \"name\": \"f/prompts.chat\",\n      \"url\": \"https://github.com/f/prompts.chat\",\n      \"language\": \"HTML\",\n      \"stars\": 163068,\n      \"description\": \"f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.\",\n      \"pushed_at\": \"2026-05-30T04:26:00Z\",\n      \"created_at\": \"2022-12-05T13:54:13Z\"\n    },\n    {\n      \"name\": \"huggingface/transformers\",\n      \"url\": \"https://github.com/huggingface/transformers\",\n      \"language\": \"Python\",\n      \"stars\": 161078,\n      \"description\": \"🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training. \",\n      \"pushed_at\": \"2026-05-30T19:59:19Z\",\n      \"created_at\": \"2018-10-29T13:56:00Z\"\n    },\n    {\n      \"name\": \"Snailclimb/JavaGuide\",\n      \"url\": \"https://github.com/Snailclimb/JavaGuide\",\n      \"language\": \"JavaScript\",\n      \"stars\": 155978,\n      \"description\": \"Java 面试 & 后端通用面试指南，覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发\",\n      \"pushed_at\": \"2026-05-28T13:49:05Z\",\n      \"created_at\": \"2018-05-07T13:27:00Z\"\n    },\n    {\n      \"name\": \"langflow-ai/langflow\",\n      \"url\": \"https://github.com/langflow-ai/langflow\",\n      \"language\": \"Python\",\n      \"stars\": 148923,\n      \"description\": \"Langflow is a powerful tool for building and deploying AI-powered agents and workflows.\",\n      \"pushed_at\": \"2026-05-30T16:16:50Z\",\n      \"created_at\": \"2023-02-08T22:28:03Z\"\n    },\n    {\n      \"name\": \"langgenius/dify\",\n      \"url\": \"https://github.com/langgenius/dify\",\n      \"language\": \"TypeScript\",\n      \"stars\": 143189,\n      \"description\": \"Production-ready platform for agentic workflow development.\",\n      \"pushed_at\": \"2026-05-30T17:54:52Z\",\n      \"created_at\": \"2023-04-12T07:40:24Z\"\n    },\n    {\n      \"name\": \"open-webui/open-webui\",\n      \"url\": \"https://github.com/open-webui/open-webui\",\n      \"language\": \"Python\",\n      \"stars\": 139294,\n      \"description\": \"User-friendly AI Interface (Supports Ollama, OpenAI API, ...)\",\n      \"pushed_at\": \"2026-05-28T22:48:07Z\",\n      \"created_at\": \"2023-10-06T22:08:27Z\"\n    },\n    {\n      \"name\": \"x1xhlol/system-prompts-and-models-of-ai-tools\",\n      \"url\": \"https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools\",\n      \"language\": \"N/A\",\n      \"stars\": 138576,\n      \"description\": \"FULL Augment Code, Claude Code, Cluely, CodeBuddy, Comet, Cursor, Devin AI, Junie, Kiro, Leap.new, Lovable, Manus, NotionAI, Orchids.app, Perplexity, Poke, Qoder, Replit, Same.dev, Trae, Traycer AI, VSCode Agent, Warp.dev, Windsurf, Xcode, Z.ai Code, Dia & v0. (And other Open Sourced) System Prompts, Internal Tools & AI Models\",\n      \"pushed_at\": \"2026-05-23T11:15:30Z\",\n      \"created_at\": \"2025-03-05T16:38:29Z\"\n    },\n    {\n      \"name\": \"langchain-ai/langchain\",\n      \"url\": \"https://github.com/langchain-ai/langchain\",\n      \"language\": \"Python\",\n      \"stars\": 138054,\n      \"description\": \"The agent engineering platform.\",\n      \"pushed_at\": \"2026-05-30T08:49:10Z\",\n      \"created_at\": \"2022-10-17T02:58:36Z\"\n    },\n    {\n      \"name\": \"firecrawl/firecrawl\",\n      \"url\": \"https://github.com/firecrawl/firecrawl\",\n      \"language\": \"TypeScript\",\n      \"stars\": 126493,\n      \"description\": \"The API to search, scrape, and interact with the web at scale. 🔥\",\n      \"pushed_at\": \"2026-05-30T13:22:21Z\",\n      \"created_at\": \"2024-04-15T21:02:29Z\"\n    },\n    {\n      \"name\": \"ggml-org/llama.cpp\",\n      \"url\": \"https://github.com/ggml-org/llama.cpp\",\n      \"language\": \"C++\",\n      \"stars\": 113848,\n      \"description\": \"LLM inference in C/C++\",\n      \"pushed_at\": \"2026-05-30T21:49:31Z\",\n      \"created_at\": \"2023-03-10T18:58:00Z\"\n    },\n    {\n      \"name\": \"Shubhamsaboo/awesome-llm-apps\",\n      \"url\": \"https://github.com/Shubhamsaboo/awesome-llm-apps\",\n      \"language\": \"Python\",\n      \"stars\": 112264,\n      \"description\": \"100+ AI Agent & RAG apps you can actually run — clone, customize, ship.\",\n      \"pushed_at\": \"2026-05-23T04:24:14Z\",\n      \"created_at\": \"2024-04-29T05:30:25Z\"\n    },\n    {\n      \"name\": \"google-gemini/gemini-cli\",\n      \"url\": \"https://github.com/google-gemini/gemini-cli\",\n      \"language\": \"TypeScript\",\n      \"stars\": 104753,\n      \"description\": \"An open-source AI agent that brings the power of Gemini directly into your terminal.\",\n      \"pushed_at\": \"2026-05-30T02:45:08Z\",\n      \"created_at\": \"2025-04-17T17:04:31Z\"\n    },\n    {\n      \"name\": \"pytorch/pytorch\",\n      \"url\": \"https://github.com/pytorch/pytorch\",\n      \"language\": \"Python\",\n      \"stars\": 100278,\n      \"description\": \"Tensors and Dynamic neural networks in Python with strong GPU acceleration\",\n      \"pushed_at\": \"2026-05-30T22:58:46Z\",\n      \"created_at\": \"2016-08-13T05:26:41Z\"\n    },\n    {\n      \"name\": \"rasbt/LLMs-from-scratch\",\n      \"url\": \"https://github.com/rasbt/LLMs-from-scratch\",\n      \"language\": \"Jupyter Notebook\",\n      \"stars\": 96347,\n      \"description\": \"Implement a ChatGPT-like LLM in PyTorch from scratch, step by step\",\n      \"pushed_at\": \"2026-05-23T15:02:00Z\",\n      \"created_at\": \"2023-07-23T18:15:57Z\"\n    },\n    {\n      \"name\": \"browser-use/browser-use\",\n      \"url\": \"https://github.com/browser-use/browser-use\",\n      \"language\": \"Python\",\n      \"stars\": 96307,\n      \"description\": \"🌐 Make websites accessible for AI agents. Automate tasks online with ease.\",\n      \"pushed_at\": \"2026-05-26T03:46:14Z\",\n      \"created_at\": \"2024-10-31T16:00:56Z\"\n    },\n    {\n      \"name\": \"hacksider/Deep-Live-Cam\",\n      \"url\": \"https://github.com/hacksider/Deep-Live-Cam\",\n      \"language\": \"Python\",\n      \"stars\": 93440,\n      \"description\": \"real time face swap and one-click video deepfake with only a single image\",\n      \"pushed_at\": \"2026-05-24T10:55:35Z\",\n      \"created_at\": \"2023-09-24T13:19:31Z\"\n    },\n    {\n      \"name\": \"infiniflow/ragflow\",\n      \"url\": \"https://github.com/infiniflow/ragflow\",\n      \"language\": \"Python\",\n      \"stars\": 81564,\n      \"description\": \"RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs\",\n      \"pushed_at\": \"2026-05-29T14:05:46Z\",\n      \"created_at\": \"2023-12-12T06:13:13Z\"\n    },\n    {\n      \"name\": \"vllm-project/vllm\",\n      \"url\": \"https://github.com/vllm-project/vllm\",\n      \"language\": \"Python\",\n      \"stars\": 81446,\n      \"description\": \"A high-throughput and memory-efficient inference and serving engine for LLMs\",\n      \"pushed_at\": \"2026-05-30T20:07:46Z\",\n      \"created_at\": \"2023-02-09T11:23:20Z\"\n    },\n    {\n      \"name\": \"TauricResearch/TradingAgents\",\n      \"url\": \"https://github.com/TauricResearch/TradingAgents\",\n      \"language\": \"Python\",\n      \"stars\": 80978,\n      \"description\": \"TradingAgents: Multi-Agents LLM Financial Trading Framework\",\n      \"pushed_at\": \"2026-05-17T07:54:07Z\",\n      \"created_at\": \"2024-12-28T03:31:08Z\"\n    },\n    {\n      \"name\": \"thedotmack/claude-mem\",\n      \"url\": \"https://github.com/thedotmack/claude-mem\",\n      \"language\": \"TypeScript\",\n      \"stars\": 79745,\n      \"description\": \"Persistent Context Across Sessions for Every Agent –  Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More\",\n      \"pushed_at\": \"2026-05-29T19:19:59Z\",\n      \"created_at\": \"2025-08-31T20:50:03Z\"\n    },\n    {\n      \"name\": \"PaddlePaddle/PaddleOCR\",\n      \"url\": \"https://github.com/PaddlePaddle/PaddleOCR\",\n      \"language\": \"Python\",\n      \"stars\": 79071,\n      \"description\": \"Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.\",\n      \"pushed_at\": \"2026-05-29T08:02:25Z\",\n      \"created_at\": \"2020-05-08T10:38:16Z\"\n    },\n    {\n      \"name\": \"lobehub/lobehub\",\n      \"url\": \"https://github.com/lobehub/lobehub\",\n      \"language\": \"TypeScript\",\n      \"stars\": 77993,\n      \"description\": \"🤯 LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.\",\n      \"pushed_at\": \"2026-05-30T21:34:46Z\",\n      \"created_at\": \"2023-05-21T07:19:12Z\"\n    },\n    {\n      \"name\": \"OpenHands/OpenHands\",\n      \"url\": \"https://github.com/OpenHands/OpenHands\",\n      \"language\": \"Python\",\n      \"stars\": 75424,\n      \"description\": \"🙌 OpenHands: AI-Driven Development\",\n      \"pushed_at\": \"2026-05-30T21:01:42Z\",\n      \"created_at\": \"2024-03-13T03:33:31Z\"\n    },\n    {\n      \"name\": \"thedaviddias/Front-End-Checklist\",\n      \"url\": \"https://github.com/thedaviddias/Front-End-Checklist\",\n      \"language\": \"MDX\",\n      \"stars\": 72748,\n      \"description\": \"🗂 The essential checklist for modern web development, for humans and AI agents\",\n      \"pushed_at\": \"2026-05-30T03:31:30Z\",\n      \"created_at\": \"2017-10-16T10:12:36Z\"\n    },\n    {\n      \"name\": \"josephmisiti/awesome-machine-learning\",\n      \"url\": \"https://github.com/josephmisiti/awesome-machine-learning\",\n      \"language\": \"Python\",\n      \"stars\": 72630,\n      \"description\": \"A curated list of awesome Machine Learning frameworks, libraries and software.\",\n      \"pushed_at\": \"2026-05-12T13:17:23Z\",\n      \"created_at\": \"2014-07-15T19:11:19Z\"\n    },\n    {\n      \"name\": \"harry0703/MoneyPrinterTurbo\",\n      \"url\": \"https://github.com/harry0703/MoneyPrinterTurbo\",\n      \"language\": \"Python\",\n      \"stars\": 71884,\n      \"description\": \"利用AI大模型，一键生成高清短视频 Generate short videos with one click using AI LLM.\",\n      \"pushed_at\": \"2026-05-30T09:38:53Z\",\n      \"created_at\": \"2024-03-11T02:57:34Z\"\n    }\n  ]\n}\n", "tool_calls_made": 0, "duration_seconds": 3.83} execute_code 


c0:
  Você tá certo — a busca anterior puxou só projetos muito recentes e deixou de fora pesos-pesados de IA que exploding em atividade agora. Em vez de sair automatizando mais uma rodada cega, eu prefiro alinhar contigo:

  Quer que eu **refaça a seleção dos 20 com foco em representar IA em alta no último mês**, incluindo pesos-pesados como:
  - `OpenWebUI/open-webui`
  - `infiniflow/ragflow`
  - `vllm-project/vllm`
  - `langflow-ai/langflow`
  - `browser-use/browser-use`
  - `lobehub/lobehub`
  - `TauricResearch/TradingAgents`
  - e outros que ganharam ritmo recentemente?

  Ou prefere uma **lista só de IA pura**, separada dos outros temas?  


c0:
    [{"id": "chatcmpl-tool-bb8ce06e84852960", "call_id": "chatcmpl-tool-bb8ce06e84852960", "response_item_id": "fc_chatcmpl-tool-bb8ce06e84852960", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice && git clone --depth 1 https://github.com/openclaw/openclaw.git 2>&1\", \"timeout\": 120}"}}]


c0:
  {"output": "Cloning into 'openclaw'...\nUpdating files:  70% (13612/19429)\rUpdating files:  71% (13795/19429)\rUpdating files:  72% (13989/19429)\rUpdating files:  73% (14184/19429)\rUpdating files:  74% (14378/19429)\rUpdating files:  75% (14572/19429)\rUpdating files:  76% (14767/19429)\rUpdating files:  77% (14961/19429)\rUpdating files:  78% (15155/19429)\rUpdating files:  79% (15349/19429)\rUpdating files:  80% (15544/19429)\rUpdating files:  81% (15738/19429)\rUpdating files:  82% (15932/19429)\rUpdating files:  83% (16127/19429)\rUpdating files:  84% (16321/19429)\rUpdating files:  85% (16515/19429)\rUpdating files:  86% (16709/19429)\rUpdating files:  87% (16904/19429)\rUpdating files:  88% (17098/19429)\rUpdating files:  89% (17292/19429)\rUpdating files:  90% (17487/19429)\rUpdating files:  91% (17681/19429)\rUpdating files:  92% (17875/19429)\rUpdating files:  93% (18069/19429)\rUpdating files:  94% (18264/19429)\rUpdating files:  95% (18458/19429)\rUpdating files:  96% (18652/19429)\rUpdating files:  97% (18847/19429)\rUpdating files:  98% (19041/19429)\rUpdating files:  99% (19235/19429)\rUpdating files: 100% (19429/19429)\rUpdating files: 100% (19429/19429), done.", "exit_code": 0, "error": null} terminal 


c0:
    [{"id": "chatcmpl-tool-944e3d36b7355b39", "call_id": "chatcmpl-tool-944e3d36b7355b39", "response_item_id": "fc_chatcmpl-tool-944e3d36b7355b39", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/openclaw/package.json\"}"}}, {"id": "chatcmpl-tool-823e83ffaa52f459", "call_id": "chatcmpl-tool-823e83ffaa52f459", "response_item_id": "fc_chatcmpl-tool-823e83ffaa52f459", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/openclaw/README.md\", \"limit\": 220}"}}, {"id": "chatcmpl-tool-8e7b3ca1a98d8f49", "call_id": "chatcmpl-tool-8e7b3ca1a98d8f49", "response_item_id": "fc_chatcmpl-tool-8e7b3ca1a98d8f49", "type": "function", "function": {"name": "search_files", "arguments": "{\"path\": \"/home/ice/openclaw\", \"target\": \"files\", \"pattern\": \"README*\"}"}}]


c0:
  {"content": "1|{\n2|  \"name\": \"openclaw\",\n3|  \"version\": \"2026.5.30\",\n4|  \"description\": \"Multi-channel AI gateway with extensible messaging integrations\",\n5|  \"keywords\": [],\n6|  \"homepage\": \"https://github.com/openclaw/openclaw#readme\",\n7|  \"bugs\": {\n8|    \"url\": \"https://github.com/openclaw/openclaw/issues\"\n9|  },\n10|  \"license\": \"MIT\",\n11|  \"author\": \"\",\n12|  \"repository\": {\n13|    \"type\": \"git\",\n14|    \"url\": \"git+https://github.com/openclaw/openclaw.git\"\n15|  },\n16|  \"bin\": {\n17|    \"openclaw\": \"openclaw.mjs\"\n18|  },\n19|  \"directories\": {\n20|    \"doc\": \"docs\",\n21|    \"test\": \"test\"\n22|  },\n23|  \"files\": [\n24|    \"CHANGELOG.md\",\n25|    \"LICENSE\",\n26|    \"npm-shrinkwrap.json\",\n27|    \"openclaw.mjs\",\n28|    \"pnpm-workspace.yaml\",\n29|    \"README.md\",\n30|    \"THIRD_PARTY_NOTICES.md\",\n31|    \"dist/\",\n32|    \"!dist/.buildstamp\",\n33|    \"!dist/.runtime-postbuildstamp\",\n34|    \"!dist/**/*.map\",\n35|    \"!dist/plugin-sdk/.tsbuildinfo\",\n36|    \"!dist/plugin-sdk/agent-runtime-test-contracts.js\",\n37|    \"!dist/plugin-sdk/agent-runtime-test-contracts.d.ts\",\n38|    \"!dist/plugin-sdk/channel-contract-testing.js\",\n39|    \"!dist/plugin-sdk/channel-contract-testing.d.ts\",\n40|    \"!dist/plugin-sdk/channel-target-testing.js\",\n41|    \"!dist/plugin-sdk/channel-target-testing.d.ts\",\n42|    \"!dist/plugin-sdk/channel-test-helpers.js\",\n43|    \"!dist/plugin-sdk/channel-test-helpers.d.ts\",\n44|    \"!dist/plugin-sdk/codex-native-task-runtime.js\",\n45|    \"!dist/plugin-sdk/codex-native-task-runtime.d.ts\",\n46|    \"!dist/plugin-sdk/plugin-test-api.js\",\n47|    \"!dist/plugin-sdk/plugin-test-api.d.ts\",\n48|    \"!dist/plugin-sdk/plugin-test-contracts.js\",\n49|    \"!dist/plugin-sdk/plugin-test-contracts.d.ts\",\n50|    \"!dist/plugin-sdk/plugin-state-test-runtime.js\",\n51|    \"!dist/plugin-sdk/plugin-state-test-runtime.d.ts\",\n52|    \"!dist/plugin-sdk/plugin-test-runtime.js\",\n53|    \"!dist/plugin-sdk/plugin-test-runtime.d.ts\",\n54|    \"!dist/plugin-sdk/provider-http-test-mocks.js\",\n55|    \"!dist/plugin-sdk/provider-http-test-mocks.d.ts\",\n56|    \"!dist/plugin-sdk/provider-test-contracts.js\",\n57|    \"!dist/plugin-sdk/provider-test-contracts.d.ts\",\n58|    \"!dist/plugin-sdk/reply-payload-testing.js\",\n59|    \"!dist/plugin-sdk/reply-payload-testing.d.ts\",\n60|    \"!dist/plugin-sdk/ssrf-runtime-internal.js\",\n61|    \"!dist/plugin-sdk/ssrf-runtime-internal.d.ts\",\n62|    \"!dist/plugin-sdk/test-env.js\",\n63|    \"!dist/plugin-sdk/test-env.d.ts\",\n64|    \"!dist/plugin-sdk/test-fixtures.js\",\n65|    \"!dist/plugin-sdk/test-fixtures.d.ts\",\n66|    \"!dist/plugin-sdk/test-node-mocks.js\",\n67|    \"!dist/plugin-sdk/test-node-mocks.d.ts\",\n68|    \"!dist/plugin-sdk/test-utils.js\",\n69|    \"!dist/plugin-sdk/test-utils.d.ts\",\n70|    \"!dist/plugin-sdk/testing.js\",\n71|    \"!dist/plugin-sdk/testing.d.ts\",\n72|    \"!dist/plugin-sdk/src/agents/test-helpers/**\",\n73|    \"!dist/plugin-sdk/src/test-helpers/**\",\n74|    \"!dist/plugin-sdk/src/test-utils/**\",\n75|    \"!dist/plugin-sdk/src/plugin-sdk/test-helpers/**\",\n76|    \"!dist/extensions/acpx/**\",\n77|    \"!dist/extensions/amazon-bedrock/**\",\n78|    \"!dist/extensions/amazon-bedrock-mantle/**\",\n79|    \"!dist/extensions/anthropic-vertex/**\",\n80|    \"!dist/extensions/node_modules/**\",\n81|    \"!dist/extensions/*/node_modules/**\",\n82|    \"!dist/extensions/brave/**\",\n83|    \"!dist/extensions/codex/**\",\n84|    \"!dist/extensions/copilot/**\",\n85|    \"!dist/extensions/diagnostics-otel/**\",\n86|    \"!dist/extensions/diagnostics-prometheus/**\",\n87|    \"!dist/extensions/diffs/**\",\n88|    \"!dist/extensions/diffs-language-pack/**\",\n89|    \"!dist/extensions/discord/**\",\n90|    \"!dist/extensions/feishu/**\",\n91|    \"!dist/extensions/google-meet/**\",\n92|    \"!dist/extensions/googlechat/**\",\n93|    \"!dist/extensions/line/**\",\n94|    \"!dist/extensions/lobster/**\",\n95|    \"!dist/extensions/memory-lancedb/**\",\n96|    \"!dist/extensions/matrix/**\",\n97|    \"!dist/extensions/msteams/**\",\n98|    \"!dist/extensions/nextcloud-talk/**\",\n99|    \"!dist/extensions/nostr/**\",\n100|    \"!dist/extensions/qqbot/**\",\n101|    \"!dist/extensions/pixverse/**\",\n102|    \"!dist/extensions/qa-channel/**\",\n103|    \"!dist/extensions/qa-lab/**\",\n104|    \"!dist/extensions/qa-matrix/**\",\n105|    \"!dist/extensions/openshell/**\",\n106|    \"!dist/extensions/slack/**\",\n107|    \"!dist/extensions/synology-chat/**\",\n108|    \"!dist/extensions/tokenjuice/**\",\n109|    \"!dist/extensions/tlon/**\",\n110|    \"!dist/extensions/twitch/**\",\n111|    \"!dist/extensions/voice-call/**\",\n112|    \"!dist/extensions/whatsapp/**\",\n113|    \"!dist/extensions/zalo/**\",\n114|    \"!dist/extensions/zalouser/**\",\n115|    \"!dist/plugin-sdk/extensions/qa-channel/**\",\n116|    \"!dist/plugin-sdk/extensions/qa-lab/**\",\n117|    \"!dist/plugin-sdk/qa-channel.*\",\n118|    \"!dist/plugin-sdk/qa-channel-protocol.*\",\n119|    \"!dist/plugin-sdk/qa-lab.*\",\n120|    \"!dist/plugin-sdk/qa-runtime.*\",\n121|    \"!dist/plugin-sdk/src/**\",\n122|    \"!dist/plugin-sdk/src/plugin-sdk/qa-channel.d.ts\",\n123|    \"!dist/plugin-sdk/src/plugin-sdk/qa-channel-protocol.d.ts\",\n124|    \"!dist/plugin-sdk/src/plugin-sdk/qa-lab.d.ts\",\n125|    \"!dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts\",\n126|    \"!dist/qa-runtime-*.js\",\n127|    \"docs/\",\n128|    \"!docs/.generated/**\",\n129|    \"!docs/channels/qa-channel.md\",\n130|    \"!docs/assets/**\",\n131|    \"!docs/images/**\",\n132|    \"!docs/**/*.jpg\",\n133|    \"!docs/**/*.png\",\n134|    \"src/agents/templates/\",\n135|    \"scripts/crabbox-wrapper.mjs\",\n136|    \"patches/\",\n137|    \"skills/\",\n138|    \"scripts/npm-runner.mjs\",\n139|    \"scripts/prepare-git-hooks.mjs\",\n140|    \"scripts/preinstall-package-manager-warning.mjs\",\n141|    \"scripts/lib/official-external-channel-catalog.json\",\n142|    \"scripts/lib/official-external-plugin-catalog.json\",\n143|    \"scripts/lib/official-external-provider-catalog.json\",\n144|    \"scripts/lib/package-dist-imports.mjs\",\n145|    \"scripts/postinstall-bundled-plugins.mjs\",\n146|    \"scripts/windows-cmd-helpers.mjs\"\n147|  ],\n148|  \"type\": \"module\",\n149|  \"main\": \"dist/index.js\",\n150|  \"exports\": {\n151|    \".\": \"./dist/index.js\",\n152|    \"./plugin-sdk\": {\n153|      \"types\": \"./dist/plugin-sdk/index.d.ts\",\n154|      \"default\": \"./dist/plugin-sdk/index.js\"\n155|    },\n156|    \"./plugin-sdk/core\": {\n157|      \"types\": \"./dist/plugin-sdk/core.d.ts\",\n158|      \"default\": \"./dist/plugin-sdk/core.js\"\n159|    },\n160|    \"./plugin-sdk/lmstudio\": {\n161|      \"types\": \"./dist/plugin-sdk/lmstudio.d.ts\",\n162|      \"default\": \"./dist/plugin-sdk/lmstudio.js\"\n163|    },\n164|    \"./plugin-sdk/lmstudio-runtime\": {\n165|      \"types\": \"./dist/plugin-sdk/lmstudio-runtime.d.ts\",\n166|      \"default\": \"./dist/plugin-sdk/lmstudio-runtime.js\"\n167|    },\n168|    \"./plugin-sdk/provider-setup\": {\n169|      \"types\": \"./dist/plugin-sdk/provider-setup.d.ts\",\n170|      \"default\": \"./dist/plugin-sdk/provider-setup.js\"\n171|    },\n172|    \"./plugin-sdk/sandbox\": {\n173|      \"types\": \"./dist/plugin-sdk/sandbox.d.ts\",\n174|      \"default\": \"./dist/plugin-sdk/sandbox.js\"\n175|    },\n176|    \"./plugin-sdk/self-hosted-provider-setup\": {\n177|      \"types\": \"./dist/plugin-sdk/self-hosted-provider-setup.d.ts\",\n178|      \"default\": \"./dist/plugin-sdk/self-hosted-provider-setup.js\"\n179|    },\n180|    \"./plugin-sdk/routing\": {\n181|      \"types\": \"./dist/plugin-sdk/routing.d.ts\",\n182|      \"default\": \"./dist/plugin-sdk/routing.js\"\n183|    },\n184|    \"./plugin-sdk/runtime\": {\n185|      \"types\": \"./dist/plugin-sdk/runtime.d.ts\",\n186|      \"default\": \"./dist/plugin-sdk/runtime.js\"\n187|    },\n188|    \"./plugin-sdk/health\": {\n189|      \"types\": \"./dist/plugin-sdk/health.d.ts\",\n190|      \"default\": \"./dist/plugin-sdk/health.js\"\n191|    },\n192|    \"./plugin-sdk/runtime-doctor\": {\n193|      \"types\": \"./dist/plugin-sdk/runtime-doctor.d.ts\",\n194|      \"default\": \"./dist/plugin-sdk/runtime-doctor.js\"\n195|    },\n196|    \"./plugin-sdk/runtime-env\": {\n197|      \"types\": \"./dist/plugin-sdk/runtime-env.d.ts\",\n198|      \"default\": \"./dist/plugin-sdk/runtime-env.js\"\n199|    },\n200|    \"./plugin-sdk/runtime-logger\": {\n201|      \"types\": \"./dist/plugin-sdk/runtime-logger.d.ts\",\n202|      \"default\": \"./dist/plugin-sdk/runtime-logger.js\"\n203|    },\n204|    \"./plugin-sdk/proxy-capture\": {\n205|      \"types\": \"./dist/plugin-sdk/proxy-capture.d.ts\",\n206|      \"default\": \"./dist/plugin-sdk/proxy-capture.js\"\n207|    },\n208|    \"./plugin-sdk/runtime-secret-resolution\": {\n209|      \"types\": \"./dist/plugin-sdk/runtime-secret-resolution.d.ts\",\n210|      \"default\": \"./dist/plugin-sdk/runtime-secret-resolution.js\"\n211|    },\n212|    \"./plugin-sdk/setup\": {\n213|      \"types\": \"./dist/plugin-sdk/setup.d.ts\",\n214|      \"default\": \"./dist/plugin-sdk/setup.js\"\n215|    },\n216|    \"./plugin-sdk/setup-adapter-runtime\": {\n217|      \"types\": \"./dist/plugin-sdk/setup-adapter-runtime.d.ts\",\n218|      \"default\": \"./dist/plugin-sdk/setup-adapter-runtime.js\"\n219|    },\n220|    \"./plugin-sdk/setup-runtime\": {\n221|      \"types\": \"./dist/plugin-sdk/setup-runtime.d.ts\",\n222|      \"default\": \"./dist/plugin-sdk/setup-runtime.js\"\n223|    },\n224|    \"./plugin-sdk/channel-setup\": {\n225|      \"types\": \"./dist/plugin-sdk/channel-setup.d.ts\",\n226|      \"default\": \"./dist/plugin-sdk/channel-setup.js\"\n227|    },\n228|    \"./plugin-sdk/channel-streaming\": {\n229|      \"types\": \"./dist/plugin-sdk/channel-streaming.d.ts\",\n230|      \"default\": \"./dist/plugin-sdk/channel-streaming.js\"\n231|    },\n232|    \"./plugin-sdk/setup-tools\": {\n233|      \"types\": \"./dist/plugin-sdk/setup-tools.d.ts\",\n234|      \"default\": \"./dist/plugin-sdk/setup-tools.js\"\n235|    },\n236|    \"./plugin-sdk/approval-auth-runtime\": {\n237|      \"types\": \"./dist/plugin-sdk/approval-auth-runtime.d.ts\",\n238|      \"default\": \"./dist/plugin-sdk/approval-auth-runtime.js\"\n239|    },\n240|    \"./plugin-sdk/approval-client-runtime\": {\n241|      \"types\": \"./dist/plugin-sdk/approval-client-runtime.d.ts\",\n242|      \"default\": \"./dist/plugin-sdk/approval-client-runtime.js\"\n243|    },\n244|    \"./plugin-sdk/approval-delivery-runtime\": {\n245|      \"types\": \"./dist/plugin-sdk/approval-delivery-runtime.d.ts\",\n246|      \"default\": \"./dist/plugin-sdk/approval-delivery-runtime.js\"\n247|    },\n248|    \"./plugin-sdk/approval-gateway-runtime\": {\n249|      \"types\": \"./dist/plugin-sdk/approval-gateway-runtime.d.ts\",\n250|      \"default\": \"./dist/plugin-sdk/approval-gateway-runtime.js\"\n251|    },\n252|    \"./plugin-sdk/approval-handler-adapter-runtime\": {\n253|      \"types\": \"./dist/plugin-sdk/approval-handler-adapter-runtime.d.ts\",\n254|      \"default\": \"./dist/plugin-sdk/approval-handler-adapter-runtime.js\"\n255|    },\n256|    \"./plugin-sdk/approval-handler-runtime\": {\n257|      \"types\": \"./dist/plugin-sdk/approval-handler-runtime.d.ts\",\n258|      \"default\": \"./dist/plugin-sdk/approval-handler-runtime.js\"\n259|    },\n260|    \"./plugin-sdk/channel-runtime-context\": {\n261|      \"types\": \"./dist/plugin-sdk/channel-runtime-context.d.ts\",\n262|      \"default\": \"./dist/plugin-sdk/channel-runtime-context.js\"\n263|    },\n264|    \"./plugin-sdk/approval-native-runtime\": {\n265|      \"types\": \"./dist/plugin-sdk/approval-native-runtime.d.ts\",\n266|      \"default\": \"./dist/plugin-sdk/approval-native-runtime.js\"\n267|    },\n268|    \"./plugin-sdk/approval-reaction-runtime\": {\n269|      \"types\": \"./dist/plugin-sdk/approval-reaction-runtime.d.ts\",\n270|      \"default\": \"./dist/plugin-sdk/approval-reaction-runtime.js\"\n271|    },\n272|    \"./plugin-sdk/approval-reply-runtime\": {\n273|      \"types\": \"./dist/plugin-sdk/approval-reply-runtime.d.ts\",\n274|      \"default\": \"./dist/plugin-sdk/approval-reply-runtime.js\"\n275|    },\n276|    \"./plugin-sdk/approval-runtime\": {\n277|      \"types\": \"./dist/plugin-sdk/approval-runtime.d.ts\",\n278|      \"default\": \"./dist/plugin-sdk/approval-runtime.js\"\n279|    },\n280|    \"./plugin-sdk/config-runtime\": {\n281|      \"types\": \"./dist/plugin-sdk/config-runtime.d.ts\",\n282|      \"default\": \"./dist/plugin-sdk/config-runtime.js\"\n283|    },\n284|    \"./plugin-sdk/config-contracts\": {\n285|      \"types\": \"./dist/plugin-sdk/config-contracts.d.ts\",\n286|      \"default\": \"./dist/plugin-sdk/config-contracts.js\"\n287|    },\n288|    \"./plugin-sdk/config-types\": {\n289|      \"types\": \"./dist/plugin-sdk/config-types.d.ts\",\n290|      \"default\": \"./dist/plugin-sdk/config-types.js\"\n291|    },\n292|    \"./plugin-sdk/plugin-config-runtime\": {\n293|      \"types\": \"./dist/plugin-sdk/plugin-config-runtime.d.ts\",\n294|      \"default\": \"./dist/plugin-sdk/plugin-config-runtime.js\"\n295|    },\n296|    \"./plugin-sdk/config-mutation\": {\n297|      \"types\": \"./dist/plugin-sdk/config-mutation.d.ts\",\n298|      \"default\": \"./dist/plugin-sdk/config-mutation.js\"\n299|    },\n300|    \"./plugin-sdk/cron-store-runtime\": {\n301|      \"types\": \"./dist/plugin-sdk/cron-store-runtime.d.ts\",\n302|      \"default\": \"./dist/plugin-sdk/cron-store-runtime.js\"\n303|    },\n304|    \"./plugin-sdk/config-schema\": {\n305|      \"types\": \"./dist/plugin-sdk/config-schema.d.ts\",\n306|      \"default\": \"./dist/plugin-sdk/config-schema.js\"\n307|    },\n308|    \"./plugin-sdk/json-schema-runtime\": {\n309|      \"types\": \"./dist/plugin-sdk/json-schema-runtime.d.ts\",\n310|      \"default\": \"./dist/plugin-sdk/json-schema-runtime.js\"\n311|    },\n312|    \"./plugin-sdk/json-unsafe-integers\": {\n313|      \"types\": \"./dist/plugin-sdk/json-unsafe-integers.d.ts\",\n314|      \"default\": \"./dist/plugin-sdk/json-unsafe-integers.js\"\n315|    },\n316|    \"./plugin-sdk/reply-runtime\": {\n317|      \"types\": \"./dist/plugin-sdk/reply-runtime.d.ts\",\n318|      \"default\": \"./dist/plugin-sdk/reply-runtime.js\"\n319|    },\n320|    \"./plugin-sdk/reply-dedupe\": {\n321|      \"types\": \"./dist/plugin-sdk/reply-dedupe.d.ts\",\n322|      \"default\": \"./dist/plugin-sdk/reply-dedupe.js\"\n323|    },\n324|    \"./plugin-sdk/reply-dispatch-runtime\": {\n325|      \"types\": \"./dist/plugin-sdk/reply-dispatch-runtime.d.ts\",\n326|      \"default\": \"./dist/plugin-sdk/reply-dispatch-runtime.js\"\n327|    },\n328|    \"./plugin-sdk/reply-reference\": {\n329|      \"types\": \"./dist/plugin-sdk/reply-reference.d.ts\",\n330|      \"default\": \"./dist/plugin-sdk/reply-reference.js\"\n331|    },\n332|    \"./plugin-sdk/reply-chunking\": {\n333|      \"types\": \"./dist/plugin-sdk/reply-chunking.d.ts\",\n334|      \"default\": \"./dist/plugin-sdk/reply-chunking.js\"\n335|    },\n336|    \"./plugin-sdk/reply-payload\": {\n337|      \"types\": \"./dist/plugin-sdk/reply-payload.d.ts\",\n338|      \"default\": \"./dist/plugin-sdk/reply-payload.js\"\n339|    },\n340|    \"./plugin-sdk/agent-media-payload\": {\n341|      \"types\": \"./dist/plugin-sdk/agent-media-payload.d.ts\",\n342|      \"default\": \"./dist/plugin-sdk/agent-media-payload.js\"\n343|    },\n344|    \"./plugin-sdk/inbound-reply-dispatch\": {\n345|      \"types\": \"./dist/plugin-sdk/inbound-reply-dispatch.d.ts\",\n346|      \"default\": \"./dist/plugin-sdk/inbound-reply-dispatch.js\"\n347|    },\n348|    \"./plugin-sdk/inbound-envelope\": {\n349|      \"types\": \"./dist/plugin-sdk/inbound-envelope.d.ts\",\n350|      \"default\": \"./dist/plugin-sdk/inbound-envelope.js\"\n351|    },\n352|    \"./plugin-sdk/channel-reply-pipeline\": {\n353|      \"types\": \"./dist/plugin-sdk/channel-reply-pipeline.d.ts\",\n354|      \"default\": \"./dist/plugin-sdk/channel-reply-pipeline.js\"\n355|    },\n356|    \"./plugin-sdk/channel-reply-options-runtime\": {\n357|      \"types\": \"./dist/plugin-sdk/channel-reply-options-runtime.d.ts\",\n358|      \"default\": \"./dist/plugin-sdk/channel-reply-options-runtime.js\"\n359|    },\n360|    \"./plugin-sdk/channel-runtime\": {\n361|      \"types\": \"./dist/plugin-sdk/channel-runtime.d.ts\",\n362|      \"default\": \"./dist/plugin-sdk/channel-runtime.js\"\n363|    },\n364|    \"./plugin-sdk/interactive-runtime\": {\n365|      \"types\": \"./dist/plugin-sdk/interactive-runtime.d.ts\",\n366|      \"default\": \"./dist/plugin-sdk/interactive-runtime.js\"\n367|    },\n368|    \"./plugin-sdk/outbound-media\": {\n369|      \"types\": \"./dist/plugin-sdk/outbound-media.d.ts\",\n370|      \"default\": \"./dist/plugin-sdk/outbound-media.js\"\n371|    },\n372|    \"./plugin-sdk/outbound-send-deps\": {\n373|      \"types\": \"./dist/plugin-sdk/outbound-send-deps.d.ts\",\n374|      \"default\": \"./dist/plugin-sdk/outbound-send-deps.js\"\n375|    },\n376|    \"./plugin-sdk/outbound-runtime\": {\n377|      \"types\": \"./dist/plugin-sdk/outbound-runtime.d.ts\",\n378|      \"default\": \"./dist/plugin-sdk/outbound-runtime.js\"\n379|    },\n380|    \"./plugin-sdk/pair-loop-guard-runtime\": {\n381|      \"types\": \"./dist/plugin-sdk/pair-loop-guard-runtime.d.ts\",\n382|      \"default\": \"./dist/plugin-sdk/pair-loop-guard-runtime.js\"\n383|    },\n384|    \"./plugin-sdk/poll-runtime\": {\n385|      \"types\": \"./dist/plugin-sdk/poll-runtime.d.ts\",\n386|      \"default\": \"./dist/plugin-sdk/poll-runtime.js\"\n387|    },\n388|    \"./plugin-sdk/async-lock-runtime\": {\n389|      \"types\": \"./dist/plugin-sdk/async-lock-runtime.d.ts\",\n390|      \"default\": \"./dist/plugin-sdk/async-lock-runtime.js\"\n391|    },\n392|    \"./plugin-sdk/channel-activity-runtime\": {\n393|      \"types\": \"./dist/plugin-sdk/channel-activity-runtime.d.ts\",\n394|      \"default\": \"./dist/plugin-sdk/channel-activity-runtime.js\"\n395|    },\n396|    \"./plugin-sdk/concurrency-runtime\": {\n397|      \"types\": \"./dist/plugin-sdk/concurrency-runtime.d.ts\",\n398|      \"default\": \"./dist/plugin-sdk/concurrency-runtime.js\"\n399|    },\n400|    \"./plugin-sdk/dedupe-runtime\": {\n401|      \"types\": \"./dist/plugin-sdk/dedupe-runtime.d.ts\",\n402|      \"default\": \"./dist/plugin-sdk/dedupe-runtime.js\"\n403|    },\n404|    \"./plugin-sdk/delivery-queue-runtime\": {\n405|      \"types\": \"./dist/plugin-sdk/delivery-queue-runtime.d.ts\",\n406|      \"default\": \"./dist/plugin-sdk/delivery-queue-runtime.js\"\n407|    },\n408|    \"./plugin-sdk/file-access-runtime\": {\n409|      \"types\": \"./dist/plugin-sdk/file-access-runtime.d.ts\",\n410|      \"default\": \"./dist/plugin-sdk/file-access-runtime.js\"\n411|    },\n412|    \"./plugin-sdk/heartbeat-runtime\": {\n413|      \"types\": \"./dist/plugin-sdk/heartbeat-runtime.d.ts\",\n414|      \"default\": \"./dist/plugin-sdk/heartbeat-runtime.js\"\n415|    },\n416|    \"./plugin-sdk/number-runtime\": {\n417|      \"types\": \"./dist/plugin-sdk/number-runtime.d.ts\",\n418|      \"default\": \"./dist/plugin-sdk/number-runtime.js\"\n419|    },\n420|    \"./plugin-sdk/secure-random-runtime\": {\n421|      \"types\": \"./dist/plugin-sdk/secure-random-runtime.d.ts\",\n422|      \"default\": \"./dist/plugin-sdk/secure-random-runtime.js\"\n423|    },\n424|    \"./plugin-sdk/system-event-runtime\": {\n425|      \"types\": \"./dist/plugin-sdk/system-event-runtime.d.ts\",\n426|      \"default\": \"./dist/plugin-sdk/system-event-runtime.js\"\n427|    },\n428|    \"./plugin-sdk/transport-ready-runtime\": {\n429|      \"types\": \"./dist/plugin-sdk/transport-ready-runtime.d.ts\",\n430|      \"default\": \"./dist/plugin-sdk/transport-ready-runtime.js\"\n431|    },\n432|    \"./plugin-sdk/exec-approvals-runtime\": {\n433|      \"types\": \"./dist/plugin-sdk/exec-approvals-runtime.d.ts\",\n434|      \"default\": \"./dist/plugin-sdk/exec-approvals-runtime.js\"\n435|    },\n436|    \"./plugin-sdk/infra-runtime\": {\n437|      \"types\": \"./dist/plugin-sdk/infra-runtime.d.ts\",\n438|      \"default\": \"./dist/plugin-sdk/infra-runtime.js\"\n439|    },\n440|    \"./plugin-sdk/runtime-config-snapshot\": {\n441|      \"types\": \"./dist/plugin-sdk/runtime-config-snapshot.d.ts\",\n442|      \"default\": \"./dist/plugin-sdk/runtime-config-snapshot.js\"\n443|    },\n444|    \"./plugin-sdk/runtime-group-policy\": {\n445|      \"types\": \"./dist/plugin-sdk/runtime-group-policy.d.ts\",\n446|      \"default\": \"./dist/plugin-sdk/runtime-group-policy.js\"\n447|    },\n448|    \"./plugin-sdk/model-session-runtime\": {\n449|      \"types\": \"./dist/plugin-sdk/model-session-runtime.d.ts\",\n450|      \"default\": \"./dist/plugin-sdk/model-session-runtime.js\"\n451|    },\n452|    \"./plugin-sdk/talk-config-runtime\": {\n453|      \"types\": \"./dist/plugin-sdk/talk-config-runtime.d.ts\",\n454|      \"default\": \"./dist/plugin-sdk/talk-config-runtime.js\"\n455|    },\n456|    \"./plugin-sdk/ssrf-policy\": {\n457|      \"types\": \"./dist/plugin-sdk/ssrf-policy.d.ts\",\n458|      \"default\": \"./dist/plugin-sdk/ssrf-policy.js\"\n459|    },\n460|    \"./plugin-sdk/ssrf-runtime\": {\n461|      \"types\": \"./dist/plugin-sdk/ssrf-runtime.d.ts\",\n462|      \"default\": \"./dist/plugin-sdk/ssrf-runtime.js\"\n463|    },\n464|    \"./plugin-sdk/media-runtime\": {\n465|      \"types\": \"./dist/plugin-sdk/media-runtime.d.ts\",\n466|      \"default\": \"./dist/plugin-sdk/media-runtime.js\"\n467|    },\n468|    \"./plugin-sdk/media-store\": {\n469|      \"types\": \"./dist/plugin-sdk/media-store.d.ts\",\n470|      \"default\": \"./dist/plugin-sdk/media-store.js\"\n471|    },\n472|    \"./plugin-sdk/media-mime\": {\n473|      \"types\": \"./dist/plugin-sdk/media-mime.d.ts\",\n474|      \"default\": \"./dist/plugin-sdk/media-mime.js\"\n475|    },\n476|    \"./plugin-sdk/embedding-providers\": {\n477|      \"types\": \"./dist/plugin-sdk/embedding-providers.d.ts\",\n478|      \"default\": \"./dist/plugin-sdk/embedding-providers.js\"\n479|    },\n480|    \"./plugin-sdk/media-generation-runtime\": {\n481|      \"types\": \"./dist/plugin-sdk/media-generation-runtime.d.ts\",\n482|      \"default\": \"./dist/plugin-sdk/media-generation-runtime.js\"\n483|    },\n484|    \"./plugin-sdk/conversation-binding-runtime\": {\n485|      \"types\": \"./dist/plugin-sdk/conversation-binding-runtime.d.ts\",\n486|      \"default\": \"./dist/plugin-sdk/conversation-binding-runtime.js\"\n487|    },\n488|    \"./plugin-sdk/conversation-runtime\": {\n489|      \"types\": \"./dist/plugin-sdk/conversation-runtime.d.ts\",\n490|      \"default\": \"./dist/plugin-sdk/conversation-runtime.js\"\n491|    },\n492|    \"./plugin-sdk/thread-bindings-runtime\": {\n493|      \"types\": \"./dist/plugin-sdk/thread-bindings-runtime.d.ts\",\n494|      \"default\": \"./dist/plugin-sdk/thread-bindings-runtime.js\"\n495|    },\n496|    \"./plugin-sdk/thread-bindings-session-runtime\": {\n497|      \"types\": \"./dist/plugin-sdk/thread-bindings-session-runtime.d.ts\",\n498|      \"default\": \"./dist/plugin-sdk/thread-bindings-session-runtime.js\"\n499|    },\n500|    \"./plugin-sdk/text-runtime\": {\n501|", "total_lines": 1957, "file_size": 106656, "truncated": true, "hint": "Use offset=501 to continue reading (showing 1-500 of 1957 lines)", "is_binary": false, "is_image": false}

  [Subdirectory context discovered: openclaw/AGENTS.md]
  # AGENTS.MD

  Telegraph style. Root rules only. Read scoped `AGENTS.md` before subtree work.
  Skills own workflows; root owns hard policy and routing.

  ## Start

  - Repo: `https://github.com/openclaw/openclaw`
  - Replies: repo-root refs only: `extensions/telegram/src/index.ts:80`. No absolute paths, no `~/`.
  - Docs/user-visible work: `pnpm docs:list`, then read relevant docs only.
  - Fix/triage answers need source, tests, current/shipped behavior, and dependency contract proof.
  - Dependency-backed behavior: read upstream docs/source/types first. No API/default/error/timing guesses.
  - Live-verify when feasible. Never print secrets.
  - Missing deps: `pnpm install`, retry once, then report first actionable error.
  - CODEOWNERS: maint/refactor/tests ok. Larger behavior/product/security/ownership: owner ask/review.
  - Product/docs/UI/changelog wording: "plugin/plugins"; `extensions/` is internal.
  - New channel/plugin/app/doc surface: update `.github/labeler.yml` + GH labels.
  - New `AGENTS.md`: add sibling `CLAUDE.md` symlink; edit `AGENTS.md` only.

  ## ClawSweeper Review Policy

  - OpenClaw-specific review rules live here; generic ClawSweeper prompts stay repo-agnostic.
  - ClawSweeper-owned schema, labels, close reasons, protected-label gates, maintainer-item gates, and mutation rules live in `openclaw/clawsweeper`.
  - Review workers read this full root `AGENTS.md` before judging; no reliance on search snippets, `head`, partial ranges, local excerpts, or truncated copies. Then read every scoped `AGENTS.md` that owns touched paths.
  - Optional integrations, providers, channels, skill bundles, MCP surfaces, and service workflows route to plugins, ClawHub, or owner repos when current seams suffice. Keep core items for missing core/plugin APIs, bundled regressions, security/core hardening, or maintainer product decisions.
  - Plugin APIs, provider routing, auth/session state, persisted preferences, config loading, config/default additions, migrations, setup, startup checks, and fallback behavior are compatibility/upgrade-sensitive. Treat config breaks, new config/default surfaces, removed fallbacks, fail-closed changes, stricter validation, or new operator action as merge risk even with green CI when they can affect existing users, upgrades, provider/plugin behavior, or maintainer operations.
  - For PRs that add, remove, or change config/default surfaces with possible compatibility, upgrade, provider/plugin, operator, setup, startup, or fallback impact, ClawSweeper review should emit a `reviewMetrics` entry when practical. The metric should name the count and direction of the changes, such as added, changed, or removed config/default surfaces, and explain why the metric matters before merge. When the metric indicates concrete merge risk, also surface the concern in `risks`, use `mergeRiskLabels` when the risk matches the label rubric, make `bestSolution` name the desired pre-merge state, and ensure `labelJustifications` explain the specific reason rather than restating the label.
  - Review whole decision surfaces, not only the touched runtime, provider, channel, harness, plugin seam, or context path. Check sibling Codex/Pi-style runtimes, provider/model routing, channel delivery, gateway/protocol, plugin SDK, and context-management paths when relevant.
  - One-sided fixes need sibling-surface proof, an explanation for why siblings are unaffected, or explicit follow-up work.
  - Changelog findings: see Docs / Changelog.
  - Public ClawSweeper comments prefer `https://docs.openclaw.ai/...` when a public docs page exists; structured evidence still cites repo files, lines, SHAs.
  - Findings need current source, shipped/current behavior, tests/CI evidence, and dependency contract proof when dependency-backed behavior is involved. Validation is judged against touched and sibling surfaces plus this file's commands; real behavior proof matters for user-visible changes, with Telegram/Desktop proof for Telegram-visible behavior when feasible.
  - Prefer findings for concrete behavior regressions, missing changed-surface proof, owner-boundary violations, security/API contract issues, or docs/config mismatches.
  - Do not file findings for repo policy preference when changed code follows the relevant scoped guide and no user-visible, runtime, security, or maintainer-risk impact is shown.

  ## Map

  - Core TS: `src/`, `ui/`, `packages/`; plugins: `extensions/`; SDK: `src/plugin-sdk/*`; channels: `src/channels/*`; loader: `src/plugins/*`; protocol: `packages/gateway-protocol/*`; docs/apps: `docs/`, `apps/`.
  - Installers: sibling `../openclaw.ai`.
  - Scoped guides: `extensions/`, `src/{plugin-sdk,channels,plugins,gateway,agents}/`, `packages/`, `test/helpers*/`, `docs/`, `ui/`, `scripts/`.

  ## Docs

  - Source docs: `docs/**`; publish repo: `openclaw/docs`; host: `https://docs.openclaw.ai`.
  - Flow: source -> `docs-sync-publish.yml` -> mirror build -> R2 -> Worker router.
  - Docs AI: `openclaw/ask-molty`; see its `AGENTS.md`.

  ## Architecture

  - Core stays plugin-agnostic. No bundled ids/defaults/policy in core when manifest/registry/capability contracts work.
  - Plugins cross into core only via `openclaw/plugin-sdk/*`, manifest metadata, injected runtime helpers, documented barrels (`api.ts`, `runtime-api.ts`).
  - Plugin prod code: no core `src/**`, `src/plugin-sdk-internal/**`, other plugin `src/**`, or relative outside package.
  - Core/tests: no deep plugin internals (`extensions/*/src/**`, `onboard.js`). Use public barrels, SDK facade, generic contracts.
  - Owner boundary: owner-specific repair/detection/onboarding/auth/defaults/provider behavior lives in owner plugin. Shared/core gets generic seams only.
  - Dependency ownership follows runtime ownership: plugin-only deps stay plugin-local; root deps only for core imports or intentionally internalized bundled plugin runtime.
  - Internal bundled plugins ship in core dist; bundled-only facade loader ok only for them.
  - External official plugins own package/deps and are excluded from core dist; core uses registry-aware `facade-runtime` or generic contracts.
  - Externalizing a bundled plugin: update package excludes, official catalogs, docs, tests, and prove core runtime paths resolve installed plugin roots before root-dep removal.
  - Runtime reads canonical config only. No silent compat for old/malformed config keys. If a config change invalidates existing files, add a matching `openclaw doctor --fix` migration. Core/auth config repairs live in core doctor; plugin-owned config repairs live in that plugin's doctor contract (`legacyConfigRules` / `normalizeCompatibilityConfig`).
  - CLI setup flows are public API when external docs, installers, or integrations can copy them. Changes to `openclaw onboard`, `openclaw configure`, their documented flags, non-interactive behavior, or generated config shape are compatibility-sensitive API contract changes; prefer additive flags/aliases, deprecation windows, and backward-preserving migrations over breaking existing snippets.
  - Fix shape: default to clean bounded refactor, not smallest patch. Move ownership to right boundary; delete stale abstractions, duplicate policy, dead branches, wrappers, fallback stacks.
  - Fix observed local failures with generic product rules; do not hardcode names, ids, log phrases, or user examples in prod code unless they are an explicit contract.
  - Tests may use observed examples, but prod literals need a short contract reason.
  - Compatibility is opt-in. "Shipped" means reachable from a release Git tag; main/GitHub/PR/unreleased code is not shipped.
  - Refactor default: one canonical path. Delete the old path unless user explicitly wants compat or the shipped public contract is obvious and cited.
  - Keep old behavior only for an explicit public API/config/plugin SDK/data contract, tagged upgrade path, security/migration boundary, dependency contract, or observed prod state.
  - If unsure, ask before preserving compat. Do not keep aliases, shims, fallback stacks, stale names, or obsolete tests just i

  [...truncated AGENTS.md: 26,878 chars total] read_file 


c0:
  {"content": "1|# 🦞 OpenClaw — Personal AI Assistant\n2|\n3|<p align=\"center\">\n4|    <picture>\n5|        <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/openclaw-logo-text-dark.svg\">\n6|        <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/openclaw-logo-text.svg\" alt=\"OpenClaw\" width=\"500\">\n7|    </picture>\n8|</p>\n9|\n10|<p align=\"center\">\n11|  <strong>EXFOLIATE! EXFOLIATE!</strong>\n12|</p>\n13|\n14|<p align=\"center\">\n15|  <a href=\"https://github.com/openclaw/openclaw/actions/workflows/ci.yml?branch=main\"><img src=\"https://img.shields.io/github/actions/workflow/status/openclaw/openclaw/ci.yml?branch=main&style=for-the-badge\" alt=\"CI status\"></a>\n16|  <a href=\"https://github.com/openclaw/openclaw/releases\"><img src=\"https://img.shields.io/github/v/release/openclaw/openclaw?include_prereleases&style=for-the-badge\" alt=\"GitHub release\"></a>\n17|  <a href=\"https://discord.gg/clawd\"><img src=\"https://img.shields.io/discord/1456350064065904867?label=Discord&logo=discord&logoColor=white&color=5865F2&style=for-the-badge\" alt=\"Discord\"></a>\n18|  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge\" alt=\"MIT License\"></a>\n19|</p>\n20|\n21|**OpenClaw** is a _personal AI assistant_ you run on your own devices.\n22|It answers you on the channels you already use. It can speak and listen on macOS/iOS/Android, and can render a live Canvas you control. The Gateway is just the control plane — the product is the assistant.\n23|\n24|If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.\n25|\n26|Supported channels include: WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, IRC, Microsoft Teams, Matrix, Feishu, LINE, Mattermost, Nextcloud Talk, Nostr, Synology Chat, Tlon, Twitch, Zalo, Zalo Personal, WeChat, QQ, WebChat.\n27|\n28|[Website](https://openclaw.ai) · [Docs](https://docs.openclaw.ai) · [Vision](VISION.md) · [Third-party notices](THIRD_PARTY_NOTICES.md) · [DeepWiki](https://deepwiki.com/openclaw/openclaw) · [Getting Started](https://docs.openclaw.ai/start/getting-started) · [Updating](https://docs.openclaw.ai/install/updating) · [Showcase](https://docs.openclaw.ai/start/showcase) · [FAQ](https://docs.openclaw.ai/help/faq) · [Onboarding](https://docs.openclaw.ai/start/wizard) · [Nix](https://github.com/openclaw/nix-openclaw) · [Docker](https://docs.openclaw.ai/install/docker) · [Discord](https://discord.gg/clawd)\n29|\n30|New install? Start here: [Getting started](https://docs.openclaw.ai/start/getting-started)\n31|\n32|Preferred setup: run `openclaw onboard` in your terminal.\n33|OpenClaw Onboard guides you step by step through setting up the gateway, workspace, channels, and skills. It is the recommended CLI setup path and works on **macOS, Linux, and Windows (via WSL2; strongly recommended)**.\n34|Works with npm, pnpm, or bun.\n35|\n36|## Sponsors\n37|\n38|<table>\n39|  <tr>\n40|    <td align=\"center\" width=\"16.66%\">\n41|      <a href=\"https://openai.com/\">\n42|        <picture>\n43|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/openai-light.svg\">\n44|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/openai.svg\" alt=\"OpenAI\" height=\"28\">\n45|        </picture>\n46|      </a>\n47|    </td>\n48|    <td align=\"center\" width=\"16.66%\">\n49|      <a href=\"https://github.com/\">\n50|        <picture>\n51|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/github-light.svg\">\n52|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/github.svg\" alt=\"GitHub\" height=\"28\">\n53|        </picture>\n54|      </a>\n55|    </td>\n56|    <td align=\"center\" width=\"16.66%\">\n57|      <a href=\"https://www.nvidia.com/\">\n58|        <picture>\n59|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/nvidia.svg\">\n60|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/nvidia-dark.svg\" alt=\"NVIDIA\" height=\"28\">\n61|        </picture>\n62|      </a>\n63|    </td>\n64|    <td align=\"center\" width=\"16.66%\">\n65|      <a href=\"https://vercel.com/\">\n66|        <picture>\n67|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/vercel-light.svg\">\n68|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/vercel.svg\" alt=\"Vercel\" height=\"24\">\n69|        </picture>\n70|      </a>\n71|    </td>\n72|    <td align=\"center\" width=\"16.66%\">\n73|      <a href=\"https://blacksmith.sh/\">\n74|        <picture>\n75|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/blacksmith-light.svg\">\n76|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/blacksmith.svg\" alt=\"Blacksmith\" height=\"28\">\n77|        </picture>\n78|      </a>\n79|    </td>\n80|    <td align=\"center\" width=\"16.66%\">\n81|      <a href=\"https://www.convex.dev/\">\n82|        <picture>\n83|          <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/convex-light.svg\">\n84|          <img src=\"https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/sponsors/convex.svg\" alt=\"Convex\" height=\"24\">\n85|        </picture>\n86|      </a>\n87|    </td>\n88|  </tr>\n89|</table>\n90|\n91|**Subscriptions (OAuth):**\n92|\n93|- **[OpenAI](https://openai.com/)** (ChatGPT/Codex)\n94|\n95|Model note: while many providers and models are supported, prefer a current flagship model from the provider you trust and already use. See [Onboarding](https://docs.openclaw.ai/start/wizard).\n96|\n97|## Install (recommended)\n98|\n99|Runtime: **Node 24 (recommended) or Node 22.19+**.\n100|\n101|```bash\n102|npm install -g openclaw@latest\n103|# or: pnpm add -g openclaw@latest\n104|\n105|openclaw onboard --install-daemon\n106|```\n107|\n108|OpenClaw Onboard installs the Gateway daemon (launchd/systemd user service) so it stays running.\n109|\n110|## Quick start (TL;DR)\n111|\n112|Runtime: **Node 24 (recommended) or Node 22.19+**.\n113|\n114|Full beginner guide (auth, pairing, channels): [Getting started](https://docs.openclaw.ai/start/getting-started)\n115|\n116|Recommended daemon mode:\n117|\n118|```bash\n119|openclaw onboard --install-daemon\n120|openclaw gateway status\n121|```\n122|\n123|Foreground/debug mode:\n124|\n125|```bash\n126|openclaw gateway stop\n127|openclaw gateway --port 18789 --verbose\n128|```\n129|\n130|Send a test message or ask the assistant after either startup mode is running:\n131|\n132|```bash\n133|# Send a message\n134|openclaw message send --target +123****7890 --message \"Hello from OpenClaw\"\n135|\n136|# Talk to the assistant (optionally deliver back to any connected channel: WhatsApp/Telegram/Slack/Discord/Google Chat/Signal/iMessage/IRC/Microsoft Teams/Matrix/Feishu/LINE/Mattermost/Nextcloud Talk/Nostr/Synology Chat/Tlon/Twitch/Zalo/Zalo Personal/WeChat/QQ/WebChat)\n137|openclaw agent --message \"Ship checklist\" --thinking high\n138|```\n139|\n140|Upgrading? [Updating guide](https://docs.openclaw.ai/install/updating) (and run `openclaw doctor`).\n141|\n142|Models config + CLI: [Models](https://docs.openclaw.ai/concepts/models). Auth profile rotation + fallbacks: [Model failover](https://docs.openclaw.ai/concepts/model-failover).\n143|\n144|## Security defaults (DM access)\n145|\n146|OpenClaw connects to real messaging surfaces. Treat inbound DMs as **untrusted input**.\n147|\n148|Full security guide: [Security](https://docs.openclaw.ai/gateway/security).\n149|Before remote exposure, use the [Gateway exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook).\n150|\n151|Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:\n152|\n153|- **DM pairing** (`dmPolicy=\"pairing\"` / `channels.discord.dmPolicy=\"pairing\"` / `channels.slack.dmPolicy=\"pairing\"`; legacy: `channels.discord.dm.policy`, `channels.slack.dm.policy`): unknown senders receive a short pairing code and the bot does not process their message.\n154|- Approve with: `openclaw pairing approve <channel> <code>` (then the sender is added to a local allowlist store).\n155|- Public inbound DMs require an explicit opt-in: set `dmPolicy=\"open\"` and include `\"*\"` in the channel allowlist (`allowFrom` / `channels.discord.allowFrom` / `channels.slack.allowFrom`; legacy: `channels.discord.dm.allowFrom`, `channels.slack.dm.allowFrom`).\n156|\n157|Run `openclaw doctor` to surface risky/misconfigured DM policies.\n158|\n159|## Highlights\n160|\n161|- **[Local-first Gateway](https://docs.openclaw.ai/gateway)** — single control plane for sessions, channels, tools, and events.\n162|- **[Multi-channel inbox](https://docs.openclaw.ai/channels)** — WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, IRC, Microsoft Teams, Matrix, Feishu, LINE, Mattermost, Nextcloud Talk, Nostr, Synology Chat, Tlon, Twitch, Zalo, Zalo Personal, WeChat, QQ, WebChat, macOS, iOS/Android.\n163|- **[Multi-agent routing](https://docs.openclaw.ai/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions).\n164|- **[Voice Wake](https://docs.openclaw.ai/nodes/voicewake) + [Talk Mode](https://docs.openclaw.ai/nodes/talk)** — wake words on macOS/iOS and continuous voice on Android (ElevenLabs + system TTS fallback).\n165|- **[Live Canvas](https://docs.openclaw.ai/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://docs.openclaw.ai/platforms/mac/canvas#canvas-a2ui).\n166|- **[First-class tools](https://docs.openclaw.ai/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions.\n167|- **[Companion apps](https://docs.openclaw.ai/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://docs.openclaw.ai/nodes).\n168|- **[Onboarding](https://docs.openclaw.ai/start/wizard) + [skills](https://docs.openclaw.ai/tools/skills)** — onboarding-driven setup with bundled/managed/workspace skills.\n169|\n170|## Security model (important)\n171|\n172|- Default: tools run on the host for the `main` session, so the agent has full access when it is just you.\n173|- Group/channel safety: set `agents.defaults.sandbox.mode: \"non-main\"` to run non-`main` sessions inside sandboxes. Docker is the default sandbox backend; SSH and OpenShell backends are also available.\n174|- Typical sandbox default: allow `bash`, `process`, `read`, `write`, `edit`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`; deny `browser`, `canvas`, `nodes`, `cron`, `discord`, `gateway`.\n175|- Before exposing anything remotely, read [Security](https://docs.openclaw.ai/gateway/security), [Gateway exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing), and [Configuration](https://docs.openclaw.ai/gateway/configuration).\n176|\n177|## Operator quick refs\n178|\n179|- Chat commands: `/status`, `/new`, `/reset`, `/compact`, `/think <level>`, `/verbose on|off`, `/trace on|off`, `/usage off|tokens|full`, `/restart`, `/activation mention|always`\n180|- Session tools: `sessions_list`, `sessions_history`, `sessions_send`\n181|- Skills registry: [ClawHub](https://clawhub.ai)\n182|- Architecture overview: [Architecture](https://docs.openclaw.ai/concepts/architecture)\n183|\n184|## Docs by goal\n185|\n186|- New here: [Getting started](https://docs.openclaw.ai/start/getting-started), [Onboarding](https://docs.openclaw.ai/start/wizard), [Updating](https://docs.openclaw.ai/install/updating)\n187|- Channel setup: [Channels index](https://docs.openclaw.ai/channels), [WhatsApp](https://docs.openclaw.ai/channels/whatsapp), [Telegram](https://docs.openclaw.ai/channels/telegram), [Discord](https://docs.openclaw.ai/channels/discord), [Slack](https://docs.openclaw.ai/channels/slack)\n188|- Apps + nodes: [macOS](https://docs.openclaw.ai/platforms/macos), [iOS](https://docs.openclaw.ai/platforms/ios), [Android](https://docs.openclaw.ai/platforms/android), [Nodes](https://docs.openclaw.ai/nodes)\n189|- Config + security: [Configuration](https://docs.openclaw.ai/gateway/configuration), [Security](https://docs.openclaw.ai/gateway/security), [Exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing)\n190|- Remote + web: [Gateway](https://docs.openclaw.ai/gateway), [Remote access](https://docs.openclaw.ai/gateway/remote), [Tailscale](https://docs.openclaw.ai/gateway/tailscale), [Web surfaces](https://docs.openclaw.ai/web)\n191|- Tools + automation: [Tools](https://docs.openclaw.ai/tools), [Skills](https://docs.openclaw.ai/tools/skills), [Cron jobs](https://docs.openclaw.ai/automation/cron-jobs), [Webhooks](https://docs.openclaw.ai/automation/webhook), [Gmail Pub/Sub](https://docs.openclaw.ai/automation/gmail-pubsub)\n192|- Internals: [Architecture](https://docs.openclaw.ai/concepts/architecture), [Agent](https://docs.openclaw.ai/concepts/agent), [Session model](https://docs.openclaw.ai/concepts/session), [Gateway protocol](https://docs.openclaw.ai/reference/rpc)\n193|- Troubleshooting: [Channel troubleshooting](https://docs.openclaw.ai/channels/troubleshooting), [Logging](https://docs.openclaw.ai/logging), [Docs home](https://docs.openclaw.ai)\n194|\n195|## Apps (optional)\n196|\n197|The Gateway alone delivers a great experience. All apps are optional and add extra features.\n198|\n199|If you plan to build/run companion apps, follow the platform runbooks below.\n200|\n201|### macOS (OpenClaw.app) (optional)\n202|\n203|- Menu bar control for the Gateway and health.\n204|- Voice Wake + push-to-talk overlay.\n205|- WebChat + debug tools.\n206|- Remote gateway control over SSH.\n207|\n208|Note: signed builds required for macOS permissions to stick across rebuilds (see [macOS Permissions](https://docs.openclaw.ai/platforms/mac/permissions)).\n209|\n210|### iOS node (optional)\n211|\n212|- Pairs as a node over the Gateway WebSocket (device pairing).\n213|- Voice trigger forwarding + Canvas surface.\n214|- Controlled via `openclaw nodes …`.\n215|\n216|Runbook: [iOS connect](https://docs.openclaw.ai/platforms/ios).\n217|\n218|### Android node (optional)\n219|\n220|- Pairs as a WS node via device pairing (`openclaw devices ...`).\n221|", "total_lines": 499, "file_size": 86712, "truncated": true, "hint": "Use offset=221 to continue reading (showing 1-220 of 499 lines)", "is_binary": false, "is_image": false} read_file 


c0:
  {"total_count": 45, "files": ["/home/ice/openclaw/test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/README.md", "/home/ice/openclaw/src/hooks/bundled/README.md", "/home/ice/openclaw/security/opengrep/README.md", "/home/ice/openclaw/security/README.md", "/home/ice/openclaw/scripts/clawdock/README.md", "/home/ice/openclaw/qa/convex-credential-broker/README.md", "/home/ice/openclaw/qa/README.md", "/home/ice/openclaw/extensions/zalouser/README.md", "/home/ice/openclaw/extensions/zalo/README.md", "/home/ice/openclaw/extensions/voice-call/README.md", "/home/ice/openclaw/extensions/vllm/README.md", "/home/ice/openclaw/extensions/twitch/README.md", "/home/ice/openclaw/extensions/tokenjuice/README.md", "/home/ice/openclaw/extensions/tlon/README.md", "/home/ice/openclaw/extensions/sglang/README.md", "/home/ice/openclaw/extensions/qa-lab/src/providers/README.md", "/home/ice/openclaw/extensions/pixverse/README.md", "/home/ice/openclaw/extensions/openshell/README.md", "/home/ice/openclaw/extensions/open-prose/skills/prose/lib/README.md", "/home/ice/openclaw/extensions/open-prose/skills/prose/examples/roadmap/README.md", "/home/ice/openclaw/extensions/open-prose/skills/prose/examples/README.md", "/home/ice/openclaw/extensions/open-prose/README.md", "/home/ice/openclaw/extensions/ollama/README.md", "/home/ice/openclaw/extensions/nostr/README.md", "/home/ice/openclaw/extensions/minimax/README.md", "/home/ice/openclaw/extensions/memory-wiki/README.md", "/home/ice/openclaw/extensions/memory-lancedb/README.md", "/home/ice/openclaw/extensions/lobster/README.md", "/home/ice/openclaw/extensions/lmstudio/README.md", "/home/ice/openclaw/extensions/llm-task/README.md", "/home/ice/openclaw/extensions/google-meet/README.md", "/home/ice/openclaw/extensions/diffs/README.md", "/home/ice/openclaw/extensions/diffs-language-pack/README.md", "/home/ice/openclaw/extensions/diagnostics-prometheus/README.md", "/home/ice/openclaw/extensions/diagnostics-otel/README.md", "/home/ice/openclaw/extensions/copilot/README.md", "/home/ice/openclaw/extensions/copilot-proxy/README.md", "/home/ice/openclaw/extensions/brave/README.md", "/home/ice/openclaw/extensions/acpx/README.md", "/home/ice/openclaw/apps/swabble/README.md", "/home/ice/openclaw/apps/macos/README.md", "/home/ice/openclaw/apps/ios/fastlane/metadata/README.md", "/home/ice/openclaw/apps/ios/README.md", "/home/ice/openclaw/apps/android/README.md", "/home/ice/openclaw/README.md"]} search_files 


c0:
    [{"id": "chatcmpl-tool-8d514026039b0a65", "call_id": "chatcmpl-tool-8d514026039b0a65", "response_item_id": "fc_chatcmpl-tool-8d514026039b0a65", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/openclaw/package.json\", \"offset\": 500, \"limit\": 520}"}}, {"id": "chatcmpl-tool-bf57ae82e63331ef", "call_id": "chatcmpl-tool-bf57ae82e63331ef", "response_item_id": "fc_chatcmpl-tool-bf57ae82e63331ef", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/openclaw/package.json\", \"offset\": 1020, \"limit\": 520}"}}, {"id": "chatcmpl-tool-8c4ff66ef3925232", "call_id": "chatcmpl-tool-8c4ff66ef3925232", "response_item_id": "fc_chatcmpl-tool-8c4ff66ef3925232", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/openclaw/package.json\", \"offset\": 1500, \"limit\": 520}"}}]


c0:
  {"content": "500|    \"./plugin-sdk/text-runtime\": {\n501|      \"types\": \"./dist/plugin-sdk/text-runtime.d.ts\",\n502|      \"default\": \"./dist/plugin-sdk/text-runtime.js\"\n503|    },\n504|    \"./plugin-sdk/text-chunking\": {\n505|      \"types\": \"./dist/plugin-sdk/text-chunking.d.ts\",\n506|      \"default\": \"./dist/plugin-sdk/text-chunking.js\"\n507|    },\n508|    \"./plugin-sdk/agent-runtime\": {\n509|      \"types\": \"./dist/plugin-sdk/agent-runtime.d.ts\",\n510|      \"default\": \"./dist/plugin-sdk/agent-runtime.js\"\n511|    },\n512|    \"./plugin-sdk/simple-completion-runtime\": {\n513|      \"types\": \"./dist/plugin-sdk/simple-completion-runtime.d.ts\",\n514|      \"default\": \"./dist/plugin-sdk/simple-completion-runtime.js\"\n515|    },\n516|    \"./plugin-sdk/speech-core\": {\n517|      \"types\": \"./dist/plugin-sdk/speech-core.d.ts\",\n518|      \"default\": \"./dist/plugin-sdk/speech-core.js\"\n519|    },\n520|    \"./plugin-sdk/tts-runtime\": {\n521|      \"types\": \"./dist/plugin-sdk/tts-runtime.d.ts\",\n522|      \"default\": \"./dist/plugin-sdk/tts-runtime.js\"\n523|    },\n524|    \"./plugin-sdk/plugin-runtime\": {\n525|      \"types\": \"./dist/plugin-sdk/plugin-runtime.d.ts\",\n526|      \"default\": \"./dist/plugin-sdk/plugin-runtime.js\"\n527|    },\n528|    \"./plugin-sdk/skills-runtime\": {\n529|      \"types\": \"./dist/plugin-sdk/skills-runtime.d.ts\",\n530|      \"default\": \"./dist/plugin-sdk/skills-runtime.js\"\n531|    },\n532|    \"./plugin-sdk/channel-secret-basic-runtime\": {\n533|      \"types\": \"./dist/plugin-sdk/channel-secret-basic-runtime.d.ts\",\n534|      \"default\": \"./dist/plugin-sdk/channel-secret-basic-runtime.js\"\n535|    },\n536|    \"./plugin-sdk/channel-secret-runtime\": {\n537|      \"types\": \"./dist/plugin-sdk/channel-secret-runtime.d.ts\",\n538|      \"default\": \"./dist/plugin-sdk/channel-secret-runtime.js\"\n539|    },\n540|    \"./plugin-sdk/channel-secret-tts-runtime\": {\n541|      \"types\": \"./dist/plugin-sdk/channel-secret-tts-runtime.d.ts\",\n542|      \"default\": \"./dist/plugin-sdk/channel-secret-tts-runtime.js\"\n543|    },\n544|    \"./plugin-sdk/secret-ref-runtime\": {\n545|      \"types\": \"./dist/plugin-sdk/secret-ref-runtime.d.ts\",\n546|      \"default\": \"./dist/plugin-sdk/secret-ref-runtime.js\"\n547|    },\n548|    \"./plugin-sdk/secret-provider-integration\": {\n549|      \"types\": \"./dist/plugin-sdk/secret-provider-integration.d.ts\",\n550|      \"default\": \"./dist/plugin-sdk/secret-provider-integration.js\"\n551|    },\n552|    \"./plugin-sdk/secret-file-runtime\": {\n553|      \"types\": \"./dist/plugin-sdk/secret-file-runtime.d.ts\",\n554|      \"default\": \"./dist/plugin-sdk/secret-file-runtime.js\"\n555|    },\n556|    \"./plugin-sdk/security-runtime\": {\n557|      \"types\": \"./dist/plugin-sdk/security-runtime.d.ts\",\n558|      \"default\": \"./dist/plugin-sdk/security-runtime.js\"\n559|    },\n560|    \"./plugin-sdk/gateway-method-runtime\": {\n561|      \"types\": \"./dist/plugin-sdk/gateway-method-runtime.d.ts\",\n562|      \"default\": \"./dist/plugin-sdk/gateway-method-runtime.js\"\n563|    },\n564|    \"./plugin-sdk/gateway-runtime\": {\n565|      \"types\": \"./dist/plugin-sdk/gateway-runtime.d.ts\",\n566|      \"default\": \"./dist/plugin-sdk/gateway-runtime.js\"\n567|    },\n568|    \"./plugin-sdk/cli-runtime\": {\n569|      \"types\": \"./dist/plugin-sdk/cli-runtime.d.ts\",\n570|      \"default\": \"./dist/plugin-sdk/cli-runtime.js\"\n571|    },\n572|    \"./plugin-sdk/cli-backend\": {\n573|      \"types\": \"./dist/plugin-sdk/cli-backend.d.ts\",\n574|      \"default\": \"./dist/plugin-sdk/cli-backend.js\"\n575|    },\n576|    \"./plugin-sdk/codex-mcp-projection\": {\n577|      \"types\": \"./dist/plugin-sdk/codex-mcp-projection.d.ts\",\n578|      \"default\": \"./dist/plugin-sdk/codex-mcp-projection.js\"\n579|    },\n580|    \"./plugin-sdk/agent-harness-task-runtime\": {\n581|      \"types\": \"./dist/plugin-sdk/agent-harness-task-runtime.d.ts\",\n582|      \"default\": \"./dist/plugin-sdk/agent-harness-task-runtime.js\"\n583|    },\n584|    \"./plugin-sdk/agent-harness\": {\n585|      \"types\": \"./dist/plugin-sdk/agent-harness.d.ts\",\n586|      \"default\": \"./dist/plugin-sdk/agent-harness.js\"\n587|    },\n588|    \"./plugin-sdk/agent-harness-runtime\": {\n589|      \"types\": \"./dist/plugin-sdk/agent-harness-runtime.d.ts\",\n590|      \"default\": \"./dist/plugin-sdk/agent-harness-runtime.js\"\n591|    },\n592|    \"./plugin-sdk/hook-runtime\": {\n593|      \"types\": \"./dist/plugin-sdk/hook-runtime.d.ts\",\n594|      \"default\": \"./dist/plugin-sdk/hook-runtime.js\"\n595|    },\n596|    \"./plugin-sdk/host-runtime\": {\n597|      \"types\": \"./dist/plugin-sdk/host-runtime.d.ts\",\n598|      \"default\": \"./dist/plugin-sdk/host-runtime.js\"\n599|    },\n600|    \"./plugin-sdk/types\": {\n601|      \"types\": \"./dist/plugin-sdk/types.d.ts\",\n602|      \"default\": \"./dist/plugin-sdk/types.js\"\n603|    },\n604|    \"./plugin-sdk/process-runtime\": {\n605|      \"types\": \"./dist/plugin-sdk/process-runtime.d.ts\",\n606|      \"default\": \"./dist/plugin-sdk/process-runtime.js\"\n607|    },\n608|    \"./plugin-sdk/windows-spawn\": {\n609|      \"types\": \"./dist/plugin-sdk/windows-spawn.d.ts\",\n610|      \"default\": \"./dist/plugin-sdk/windows-spawn.js\"\n611|    },\n612|    \"./plugin-sdk/acp-runtime\": {\n613|      \"types\": \"./dist/plugin-sdk/acp-runtime.d.ts\",\n614|      \"default\": \"./dist/plugin-sdk/acp-runtime.js\"\n615|    },\n616|    \"./plugin-sdk/acp-runtime-backend\": {\n617|      \"types\": \"./dist/plugin-sdk/acp-runtime-backend.d.ts\",\n618|      \"default\": \"./dist/plugin-sdk/acp-runtime-backend.js\"\n619|    },\n620|    \"./plugin-sdk/acp-binding-runtime\": {\n621|      \"types\": \"./dist/plugin-sdk/acp-binding-runtime.d.ts\",\n622|      \"default\": \"./dist/plugin-sdk/acp-binding-runtime.js\"\n623|    },\n624|    \"./plugin-sdk/acp-binding-resolve-runtime\": {\n625|      \"types\": \"./dist/plugin-sdk/acp-binding-resolve-runtime.d.ts\",\n626|      \"default\": \"./dist/plugin-sdk/acp-binding-resolve-runtime.js\"\n627|    },\n628|    \"./plugin-sdk/lazy-runtime\": {\n629|      \"types\": \"./dist/plugin-sdk/lazy-runtime.d.ts\",\n630|      \"default\": \"./dist/plugin-sdk/lazy-runtime.js\"\n631|    },\n632|    \"./plugin-sdk/temp-path\": {\n633|      \"types\": \"./dist/plugin-sdk/temp-path.d.ts\",\n634|      \"default\": \"./dist/plugin-sdk/temp-path.js\"\n635|    },\n636|    \"./plugin-sdk/time-runtime\": {\n637|      \"types\": \"./dist/plugin-sdk/time-runtime.d.ts\",\n638|      \"default\": \"./dist/plugin-sdk/time-runtime.js\"\n639|    },\n640|    \"./plugin-sdk/logging-core\": {\n641|      \"types\": \"./dist/plugin-sdk/logging-core.d.ts\",\n642|      \"default\": \"./dist/plugin-sdk/logging-core.js\"\n643|    },\n644|    \"./plugin-sdk/migration\": {\n645|      \"types\": \"./dist/plugin-sdk/migration.d.ts\",\n646|      \"default\": \"./dist/plugin-sdk/migration.js\"\n647|    },\n648|    \"./plugin-sdk/migration-runtime\": {\n649|      \"types\": \"./dist/plugin-sdk/migration-runtime.d.ts\",\n650|      \"default\": \"./dist/plugin-sdk/migration-runtime.js\"\n651|    },\n652|    \"./plugin-sdk/plugin-state-runtime\": {\n653|      \"types\": \"./dist/plugin-sdk/plugin-state-runtime.d.ts\",\n654|      \"default\": \"./dist/plugin-sdk/plugin-state-runtime.js\"\n655|    },\n656|    \"./plugin-sdk/markdown-table-runtime\": {\n657|      \"types\": \"./dist/plugin-sdk/markdown-table-runtime.d.ts\",\n658|      \"default\": \"./dist/plugin-sdk/markdown-table-runtime.js\"\n659|    },\n660|    \"./plugin-sdk/account-helpers\": {\n661|      \"types\": \"./dist/plugin-sdk/account-helpers.d.ts\",\n662|      \"default\": \"./dist/plugin-sdk/account-helpers.js\"\n663|    },\n664|    \"./plugin-sdk/account-core\": {\n665|      \"types\": \"./dist/plugin-sdk/account-core.d.ts\",\n666|      \"default\": \"./dist/plugin-sdk/account-core.js\"\n667|    },\n668|    \"./plugin-sdk/account-id\": {\n669|      \"types\": \"./dist/plugin-sdk/account-id.d.ts\",\n670|      \"default\": \"./dist/plugin-sdk/account-id.js\"\n671|    },\n672|    \"./plugin-sdk/account-resolution\": {\n673|      \"types\": \"./dist/plugin-sdk/account-resolution.d.ts\",\n674|      \"default\": \"./dist/plugin-sdk/account-resolution.js\"\n675|    },\n676|    \"./plugin-sdk/account-resolution-runtime\": {\n677|      \"types\": \"./dist/plugin-sdk/account-resolution-runtime.d.ts\",\n678|      \"default\": \"./dist/plugin-sdk/account-resolution-runtime.js\"\n679|    },\n680|    \"./plugin-sdk/agent-config-primitives\": {\n681|      \"types\": \"./dist/plugin-sdk/agent-config-primitives.d.ts\",\n682|      \"default\": \"./dist/plugin-sdk/agent-config-primitives.js\"\n683|    },\n684|    \"./plugin-sdk/access-groups\": {\n685|      \"types\": \"./dist/plugin-sdk/access-groups.d.ts\",\n686|      \"default\": \"./dist/plugin-sdk/access-groups.js\"\n687|    },\n688|    \"./plugin-sdk/allow-from\": {\n689|      \"types\": \"./dist/plugin-sdk/allow-from.d.ts\",\n690|      \"default\": \"./dist/plugin-sdk/allow-from.js\"\n691|    },\n692|    \"./plugin-sdk/allowlist-config-edit\": {\n693|      \"types\": \"./dist/plugin-sdk/allowlist-config-edit.d.ts\",\n694|      \"default\": \"./dist/plugin-sdk/allowlist-config-edit.js\"\n695|    },\n696|    \"./plugin-sdk/browser-config\": {\n697|      \"types\": \"./dist/plugin-sdk/browser-config.d.ts\",\n698|      \"default\": \"./dist/plugin-sdk/browser-config.js\"\n699|    },\n700|    \"./plugin-sdk/boolean-param\": {\n701|      \"types\": \"./dist/plugin-sdk/boolean-param.d.ts\",\n702|      \"default\": \"./dist/plugin-sdk/boolean-param.js\"\n703|    },\n704|    \"./plugin-sdk/dangerous-name-runtime\": {\n705|      \"types\": \"./dist/plugin-sdk/dangerous-name-runtime.d.ts\",\n706|      \"default\": \"./dist/plugin-sdk/dangerous-name-runtime.js\"\n707|    },\n708|    \"./plugin-sdk/command-auth\": {\n709|      \"types\": \"./dist/plugin-sdk/command-auth.d.ts\",\n710|      \"default\": \"./dist/plugin-sdk/command-auth.js\"\n711|    },\n712|    \"./plugin-sdk/command-auth-native\": {\n713|      \"types\": \"./dist/plugin-sdk/command-auth-native.d.ts\",\n714|      \"default\": \"./dist/plugin-sdk/command-auth-native.js\"\n715|    },\n716|    \"./plugin-sdk/command-gating\": {\n717|      \"types\": \"./dist/plugin-sdk/command-gating.d.ts\",\n718|      \"default\": \"./dist/plugin-sdk/command-gating.js\"\n719|    },\n720|    \"./plugin-sdk/command-primitives-runtime\": {\n721|      \"types\": \"./dist/plugin-sdk/command-primitives-runtime.d.ts\",\n722|      \"default\": \"./dist/plugin-sdk/command-primitives-runtime.js\"\n723|    },\n724|    \"./plugin-sdk/command-status\": {\n725|      \"types\": \"./dist/plugin-sdk/command-status.d.ts\",\n726|      \"default\": \"./dist/plugin-sdk/command-status.js\"\n727|    },\n728|    \"./plugin-sdk/command-status-runtime\": {\n729|      \"types\": \"./dist/plugin-sdk/command-status-runtime.d.ts\",\n730|      \"default\": \"./dist/plugin-sdk/command-status-runtime.js\"\n731|    },\n732|    \"./plugin-sdk/command-detection\": {\n733|      \"types\": \"./dist/plugin-sdk/command-detection.d.ts\",\n734|      \"default\": \"./dist/plugin-sdk/command-detection.js\"\n735|    },\n736|    \"./plugin-sdk/command-surface\": {\n737|      \"types\": \"./dist/plugin-sdk/command-surface.d.ts\",\n738|      \"default\": \"./dist/plugin-sdk/command-surface.js\"\n739|    },\n740|    \"./plugin-sdk/collection-runtime\": {\n741|      \"types\": \"./dist/plugin-sdk/collection-runtime.d.ts\",\n742|      \"default\": \"./dist/plugin-sdk/collection-runtime.js\"\n743|    },\n744|    \"./plugin-sdk/compat\": {\n745|      \"types\": \"./dist/plugin-sdk/compat.d.ts\",\n746|      \"default\": \"./dist/plugin-sdk/compat.js\"\n747|    },\n748|    \"./plugin-sdk/direct-dm\": {\n749|      \"types\": \"./dist/plugin-sdk/direct-dm.d.ts\",\n750|      \"default\": \"./dist/plugin-sdk/direct-dm.js\"\n751|    },\n752|    \"./plugin-sdk/direct-dm-access\": {\n753|      \"types\": \"./dist/plugin-sdk/direct-dm-access.d.ts\",\n754|      \"default\": \"./dist/plugin-sdk/direct-dm-access.js\"\n755|    },\n756|    \"./plugin-sdk/direct-dm-guard-policy\": {\n757|      \"types\": \"./dist/plugin-sdk/direct-dm-guard-policy.d.ts\",\n758|      \"default\": \"./dist/plugin-sdk/direct-dm-guard-policy.js\"\n759|    },\n760|    \"./plugin-sdk/discord\": {\n761|      \"types\": \"./dist/plugin-sdk/discord.d.ts\",\n762|      \"default\": \"./dist/plugin-sdk/discord.js\"\n763|    },\n764|    \"./plugin-sdk/mattermost\": {\n765|      \"types\": \"./dist/plugin-sdk/mattermost.d.ts\",\n766|      \"default\": \"./dist/plugin-sdk/mattermost.js\"\n767|    },\n768|    \"./plugin-sdk/matrix\": {\n769|      \"types\": \"./dist/plugin-sdk/matrix.d.ts\",\n770|      \"default\": \"./dist/plugin-sdk/matrix.js\"\n771|    },\n772|    \"./plugin-sdk/device-bootstrap\": {\n773|      \"types\": \"./dist/plugin-sdk/device-bootstrap.d.ts\",\n774|      \"default\": \"./dist/plugin-sdk/device-bootstrap.js\"\n775|    },\n776|    \"./plugin-sdk/diagnostic-runtime\": {\n777|      \"types\": \"./dist/plugin-sdk/diagnostic-runtime.d.ts\",\n778|      \"default\": \"./dist/plugin-sdk/diagnostic-runtime.js\"\n779|    },\n780|    \"./plugin-sdk/error-runtime\": {\n781|      \"types\": \"./dist/plugin-sdk/error-runtime.d.ts\",\n782|      \"default\": \"./dist/plugin-sdk/error-runtime.js\"\n783|    },\n784|    \"./plugin-sdk/extension-shared\": {\n785|      \"types\": \"./dist/plugin-sdk/extension-shared.d.ts\",\n786|      \"default\": \"./dist/plugin-sdk/extension-shared.js\"\n787|    },\n788|    \"./plugin-sdk/channel-config-helpers\": {\n789|      \"types\": \"./dist/plugin-sdk/channel-config-helpers.d.ts\",\n790|      \"default\": \"./dist/plugin-sdk/channel-config-helpers.js\"\n791|    },\n792|    \"./plugin-sdk/channel-config-writes\": {\n793|      \"types\": \"./dist/plugin-sdk/channel-config-writes.d.ts\",\n794|      \"default\": \"./dist/plugin-sdk/channel-config-writes.js\"\n795|    },\n796|    \"./plugin-sdk/channel-config-primitives\": {\n797|      \"types\": \"./dist/plugin-sdk/channel-config-primitives.d.ts\",\n798|      \"default\": \"./dist/plugin-sdk/channel-config-primitives.js\"\n799|    },\n800|    \"./plugin-sdk/channel-config-schema\": {\n801|      \"types\": \"./dist/plugin-sdk/channel-config-schema.d.ts\",\n802|      \"default\": \"./dist/plugin-sdk/channel-config-schema.js\"\n803|    },\n804|    \"./plugin-sdk/bundled-channel-config-schema\": {\n805|      \"types\": \"./dist/plugin-sdk/bundled-channel-config-schema.d.ts\",\n806|      \"default\": \"./dist/plugin-sdk/bundled-channel-config-schema.js\"\n807|    },\n808|    \"./plugin-sdk/channel-config-schema-legacy\": {\n809|      \"types\": \"./dist/plugin-sdk/channel-config-schema-legacy.d.ts\",\n810|      \"default\": \"./dist/plugin-sdk/channel-config-schema-legacy.js\"\n811|    },\n812|    \"./plugin-sdk/channel-actions\": {\n813|      \"types\": \"./dist/plugin-sdk/channel-actions.d.ts\",\n814|      \"default\": \"./dist/plugin-sdk/channel-actions.js\"\n815|    },\n816|    \"./plugin-sdk/channel-plugin-common\": {\n817|      \"types\": \"./dist/plugin-sdk/channel-plugin-common.d.ts\",\n818|      \"default\": \"./dist/plugin-sdk/channel-plugin-common.js\"\n819|    },\n820|    \"./plugin-sdk/channel-core\": {\n821|      \"types\": \"./dist/plugin-sdk/channel-core.d.ts\",\n822|      \"default\": \"./dist/plugin-sdk/channel-core.js\"\n823|    },\n824|    \"./plugin-sdk/channel-entry-contract\": {\n825|      \"types\": \"./dist/plugin-sdk/channel-entry-contract.d.ts\",\n826|      \"default\": \"./dist/plugin-sdk/channel-entry-contract.js\"\n827|    },\n828|    \"./plugin-sdk/channel-contract\": {\n829|      \"types\": \"./dist/plugin-sdk/channel-contract.d.ts\",\n830|      \"default\": \"./dist/plugin-sdk/channel-contract.js\"\n831|    },\n832|    \"./plugin-sdk/channel-envelope\": {\n833|      \"types\": \"./dist/plugin-sdk/channel-envelope.d.ts\",\n834|      \"default\": \"./dist/plugin-sdk/channel-envelope.js\"\n835|    },\n836|    \"./plugin-sdk/channel-feedback\": {\n837|      \"types\": \"./dist/plugin-sdk/channel-feedback.d.ts\",\n838|      \"default\": \"./dist/plugin-sdk/channel-feedback.js\"\n839|    },\n840|    \"./plugin-sdk/channel-inbound\": {\n841|      \"types\": \"./dist/plugin-sdk/channel-inbound.d.ts\",\n842|      \"default\": \"./dist/plugin-sdk/channel-inbound.js\"\n843|    },\n844|    \"./plugin-sdk/channel-inbound-debounce\": {\n845|      \"types\": \"./dist/plugin-sdk/channel-inbound-debounce.d.ts\",\n846|      \"default\": \"./dist/plugin-sdk/channel-inbound-debounce.js\"\n847|    },\n848|    \"./plugin-sdk/channel-inbound-roots\": {\n849|      \"types\": \"./dist/plugin-sdk/channel-inbound-roots.d.ts\",\n850|      \"default\": \"./dist/plugin-sdk/channel-inbound-roots.js\"\n851|    },\n852|    \"./plugin-sdk/channel-logging\": {\n853|      \"types\": \"./dist/plugin-sdk/channel-logging.d.ts\",\n854|      \"default\": \"./dist/plugin-sdk/channel-logging.js\"\n855|    },\n856|    \"./plugin-sdk/channel-location\": {\n857|      \"types\": \"./dist/plugin-sdk/channel-location.d.ts\",\n858|      \"default\": \"./dist/plugin-sdk/channel-location.js\"\n859|    },\n860|    \"./plugin-sdk/channel-mention-gating\": {\n861|      \"types\": \"./dist/plugin-sdk/channel-mention-gating.d.ts\",\n862|      \"default\": \"./dist/plugin-sdk/channel-mention-gating.js\"\n863|    },\n864|    \"./plugin-sdk/channel-lifecycle\": {\n865|      \"types\": \"./dist/plugin-sdk/channel-lifecycle.d.ts\",\n866|      \"default\": \"./dist/plugin-sdk/channel-lifecycle.js\"\n867|    },\n868|    \"./plugin-sdk/channel-ingress\": {\n869|      \"types\": \"./dist/plugin-sdk/channel-ingress.d.ts\",\n870|      \"default\": \"./dist/plugin-sdk/channel-ingress.js\"\n871|    },\n872|    \"./plugin-sdk/channel-ingress-runtime\": {\n873|      \"types\": \"./dist/plugin-sdk/channel-ingress-runtime.d.ts\",\n874|      \"default\": \"./dist/plugin-sdk/channel-ingress-runtime.js\"\n875|    },\n876|    \"./plugin-sdk/channel-message\": {\n877|      \"types\": \"./dist/plugin-sdk/channel-message.d.ts\",\n878|      \"default\": \"./dist/plugin-sdk/channel-message.js\"\n879|    },\n880|    \"./plugin-sdk/channel-message-runtime\": {\n881|      \"types\": \"./dist/plugin-sdk/channel-message-runtime.d.ts\",\n882|      \"default\": \"./dist/plugin-sdk/channel-message-runtime.js\"\n883|    },\n884|    \"./plugin-sdk/channel-outbound\": {\n885|      \"types\": \"./dist/plugin-sdk/channel-outbound.d.ts\",\n886|      \"default\": \"./dist/plugin-sdk/channel-outbound.js\"\n887|    },\n888|    \"./plugin-sdk/channel-pairing\": {\n889|      \"types\": \"./dist/plugin-sdk/channel-pairing.d.ts\",\n890|      \"default\": \"./dist/plugin-sdk/channel-pairing.js\"\n891|    },\n892|    \"./plugin-sdk/channel-pairing-paths\": {\n893|      \"types\": \"./dist/plugin-sdk/channel-pairing-paths.d.ts\",\n894|      \"default\": \"./dist/plugin-sdk/channel-pairing-paths.js\"\n895|    },\n896|    \"./plugin-sdk/channel-policy\": {\n897|      \"types\": \"./dist/plugin-sdk/channel-policy.d.ts\",\n898|      \"default\": \"./dist/plugin-sdk/channel-policy.js\"\n899|    },\n900|    \"./plugin-sdk/channel-send-result\": {\n901|      \"types\": \"./dist/plugin-sdk/channel-send-result.d.ts\",\n902|      \"default\": \"./dist/plugin-sdk/channel-send-result.js\"\n903|    },\n904|    \"./plugin-sdk/channel-route\": {\n905|      \"types\": \"./dist/plugin-sdk/channel-route.d.ts\",\n906|      \"default\": \"./dist/plugin-sdk/channel-route.js\"\n907|    },\n908|    \"./plugin-sdk/channel-targets\": {\n909|      \"types\": \"./dist/plugin-sdk/channel-targets.d.ts\",\n910|      \"default\": \"./dist/plugin-sdk/channel-targets.js\"\n911|    },\n912|    \"./plugin-sdk/context-visibility-runtime\": {\n913|      \"types\": \"./dist/plugin-sdk/context-visibility-runtime.d.ts\",\n914|      \"default\": \"./dist/plugin-sdk/context-visibility-runtime.js\"\n915|    },\n916|    \"./plugin-sdk/file-lock\": {\n917|      \"types\": \"./dist/plugin-sdk/file-lock.d.ts\",\n918|      \"default\": \"./dist/plugin-sdk/file-lock.js\"\n919|    },\n920|    \"./plugin-sdk/fetch-runtime\": {\n921|      \"types\": \"./dist/plugin-sdk/fetch-runtime.d.ts\",\n922|      \"default\": \"./dist/plugin-sdk/fetch-runtime.js\"\n923|    },\n924|    \"./plugin-sdk/runtime-fetch\": {\n925|      \"types\": \"./dist/plugin-sdk/runtime-fetch.d.ts\",\n926|      \"default\": \"./dist/plugin-sdk/runtime-fetch.js\"\n927|    },\n928|    \"./plugin-sdk/inline-image-data-url-runtime\": {\n929|      \"types\": \"./dist/plugin-sdk/inline-image-data-url-runtime.d.ts\",\n930|      \"default\": \"./dist/plugin-sdk/inline-image-data-url-runtime.js\"\n931|    },\n932|    \"./plugin-sdk/response-limit-runtime\": {\n933|      \"types\": \"./dist/plugin-sdk/response-limit-runtime.d.ts\",\n934|      \"default\": \"./dist/plugin-sdk/response-limit-runtime.js\"\n935|    },\n936|    \"./plugin-sdk/session-binding-runtime\": {\n937|      \"types\": \"./dist/plugin-sdk/session-binding-runtime.d.ts\",\n938|      \"default\": \"./dist/plugin-sdk/session-binding-runtime.js\"\n939|    },\n940|    \"./plugin-sdk/session-key-runtime\": {\n941|      \"types\": \"./dist/plugin-sdk/session-key-runtime.d.ts\",\n942|      \"default\": \"./dist/plugin-sdk/session-key-runtime.js\"\n943|    },\n944|    \"./plugin-sdk/session-store-runtime\": {\n945|      \"types\": \"./dist/plugin-sdk/session-store-runtime.d.ts\",\n946|      \"default\": \"./dist/plugin-sdk/session-store-runtime.js\"\n947|    },\n948|    \"./plugin-sdk/session-transcript-hit\": {\n949|      \"types\": \"./dist/plugin-sdk/session-transcript-hit.d.ts\",\n950|      \"default\": \"./dist/plugin-sdk/session-transcript-hit.js\"\n951|    },\n952|    \"./plugin-sdk/session-visibility\": {\n953|      \"types\": \"./dist/plugin-sdk/session-visibility.d.ts\",\n954|      \"default\": \"./dist/plugin-sdk/session-visibility.js\"\n955|    },\n956|    \"./plugin-sdk/ssrf-dispatcher\": {\n957|      \"types\": \"./dist/plugin-sdk/ssrf-dispatcher.d.ts\",\n958|      \"default\": \"./dist/plugin-sdk/ssrf-dispatcher.js\"\n959|    },\n960|    \"./plugin-sdk/string-coerce-runtime\": {\n961|      \"types\": \"./dist/plugin-sdk/string-coerce-runtime.d.ts\",\n962|      \"default\": \"./dist/plugin-sdk/string-coerce-runtime.js\"\n963|    },\n964|    \"./plugin-sdk/group-activation\": {\n965|      \"types\": \"./dist/plugin-sdk/group-activation.d.ts\",\n966|      \"default\": \"./dist/plugin-sdk/group-activation.js\"\n967|    },\n968|    \"./plugin-sdk/group-access\": {\n969|      \"types\": \"./dist/plugin-sdk/group-access.d.ts\",\n970|      \"default\": \"./dist/plugin-sdk/group-access.js\"\n971|    },\n972|    \"./plugin-sdk/global-singleton\": {\n973|      \"types\": \"./dist/plugin-sdk/global-singleton.d.ts\",\n974|      \"default\": \"./dist/plugin-sdk/global-singleton.js\"\n975|    },\n976|    \"./plugin-sdk/directory-config-runtime\": {\n977|      \"types\": \"./dist/plugin-sdk/directory-config-runtime.d.ts\",\n978|      \"default\": \"./dist/plugin-sdk/directory-config-runtime.js\"\n979|    },\n980|    \"./plugin-sdk/directory-runtime\": {\n981|      \"types\": \"./dist/plugin-sdk/directory-runtime.d.ts\",\n982|      \"default\": \"./dist/plugin-sdk/directory-runtime.js\"\n983|    },\n984|    \"./plugin-sdk/media-generation-runtime-shared\": {\n985|      \"types\": \"./dist/plugin-sdk/media-generation-runtime-shared.d.ts\",\n986|      \"default\": \"./dist/plugin-sdk/media-generation-runtime-shared.js\"\n987|    },\n988|    \"./plugin-sdk/image-generation\": {\n989|      \"types\": \"./dist/plugin-sdk/image-generation.d.ts\",\n990|      \"default\": \"./dist/plugin-sdk/image-generation.js\"\n991|    },\n992|    \"./plugin-sdk/image-generation-runtime\": {\n993|      \"types\": \"./dist/plugin-sdk/image-generation-runtime.d.ts\",\n994|      \"default\": \"./dist/plugin-sdk/image-generation-runtime.js\"\n995|    },\n996|    \"./plugin-sdk/image-generation-core\": {\n997|      \"types\": \"./dist/plugin-sdk/image-generation-core.d.ts\",\n998|      \"default\": \"./dist/plugin-sdk/image-generation-core.js\"\n999|    },\n1000|    \"./plugin-sdk/music-generation\": {\n1001|      \"types\": \"./dist/plugin-sdk/music-generation.d.ts\",\n1002|      \"default\": \"./dist/plugin-sdk/music-generation.js\"\n1003|    },\n1004|    \"./plugin-sdk/music-generation-core\": {\n1005|      \"types\": \"./dist/plugin-sdk/music-generation-core.d.ts\",\n1006|      \"default\": \"./dist/plugin-sdk/music-generation-core.js\"\n1007|    },\n1008|    \"./plugin-sdk/video-generation\": {\n1009|      \"types\": \"./dist/plugin-sdk/video-generation.d.ts\",\n1010|      \"default\": \"./dist/plugin-sdk/video-generation.js\"\n1011|    },\n1012|    \"./plugin-sdk/video-generation-runtime\": {\n1013|      \"types\": \"./dist/plugin-sdk/video-generation-runtime.d.ts\",\n1014|      \"default\": \"./dist/plugin-sdk/video-generation-runtime.js\"\n1015|    },\n1016|    \"./plugin-sdk/video-generation-core\": {\n1017|      \"types\": \"./dist/plugin-sdk/video-generation-core.d.ts\",\n1018|      \"default\": \"./dist/plugin-sdk/video-generation-core.js\"\n1019|    },\n1020|", "total_lines": 1957, "file_size": 106656, "truncated": true, "hint": "Use offset=1020 to continue reading (showing 500-1019 of 1957 lines)", "is_binary": false, "is_image": false} read_file 


c0:
  {"content": "1020|    \"./plugin-sdk/reply-history\": {\n1021|      \"types\": \"./dist/plugin-sdk/reply-history.d.ts\",\n1022|      \"default\": \"./dist/plugin-sdk/reply-history.js\"\n1023|    },\n1024|    \"./plugin-sdk/realtime-transcription\": {\n1025|      \"types\": \"./dist/plugin-sdk/realtime-transcription.d.ts\",\n1026|      \"default\": \"./dist/plugin-sdk/realtime-transcription.js\"\n1027|    },\n1028|    \"./plugin-sdk/realtime-bootstrap-context\": {\n1029|      \"types\": \"./dist/plugin-sdk/realtime-bootstrap-context.d.ts\",\n1030|      \"default\": \"./dist/plugin-sdk/realtime-bootstrap-context.js\"\n1031|    },\n1032|    \"./plugin-sdk/realtime-voice\": {\n1033|      \"types\": \"./dist/plugin-sdk/realtime-voice.d.ts\",\n1034|      \"default\": \"./dist/plugin-sdk/realtime-voice.js\"\n1035|    },\n1036|    \"./plugin-sdk/transcripts\": {\n1037|      \"types\": \"./dist/plugin-sdk/transcripts.d.ts\",\n1038|      \"default\": \"./dist/plugin-sdk/transcripts.js\"\n1039|    },\n1040|    \"./plugin-sdk/media-understanding\": {\n1041|      \"types\": \"./dist/plugin-sdk/media-understanding.d.ts\",\n1042|      \"default\": \"./dist/plugin-sdk/media-understanding.js\"\n1043|    },\n1044|    \"./plugin-sdk/media-understanding-runtime\": {\n1045|      \"types\": \"./dist/plugin-sdk/media-understanding-runtime.d.ts\",\n1046|      \"default\": \"./dist/plugin-sdk/media-understanding-runtime.js\"\n1047|    },\n1048|    \"./plugin-sdk/messaging-targets\": {\n1049|      \"types\": \"./dist/plugin-sdk/messaging-targets.d.ts\",\n1050|      \"default\": \"./dist/plugin-sdk/messaging-targets.js\"\n1051|    },\n1052|    \"./plugin-sdk/request-url\": {\n1053|      \"types\": \"./dist/plugin-sdk/request-url.d.ts\",\n1054|      \"default\": \"./dist/plugin-sdk/request-url.js\"\n1055|    },\n1056|    \"./plugin-sdk/runtime-store\": {\n1057|      \"types\": \"./dist/plugin-sdk/runtime-store.d.ts\",\n1058|      \"default\": \"./dist/plugin-sdk/runtime-store.js\"\n1059|    },\n1060|    \"./plugin-sdk/json-store\": {\n1061|      \"types\": \"./dist/plugin-sdk/json-store.d.ts\",\n1062|      \"default\": \"./dist/plugin-sdk/json-store.js\"\n1063|    },\n1064|    \"./plugin-sdk/persistent-dedupe\": {\n1065|      \"types\": \"./dist/plugin-sdk/persistent-dedupe.d.ts\",\n1066|      \"default\": \"./dist/plugin-sdk/persistent-dedupe.js\"\n1067|    },\n1068|    \"./plugin-sdk/keyed-async-queue\": {\n1069|      \"types\": \"./dist/plugin-sdk/keyed-async-queue.d.ts\",\n1070|      \"default\": \"./dist/plugin-sdk/keyed-async-queue.js\"\n1071|    },\n1072|    \"./plugin-sdk/qa-runner-runtime\": {\n1073|      \"types\": \"./dist/plugin-sdk/qa-runner-runtime.d.ts\",\n1074|      \"default\": \"./dist/plugin-sdk/qa-runner-runtime.js\"\n1075|    },\n1076|    \"./plugin-sdk/qa-live-transport-scenarios\": {\n1077|      \"types\": \"./dist/plugin-sdk/qa-live-transport-scenarios.d.ts\",\n1078|      \"default\": \"./dist/plugin-sdk/qa-live-transport-scenarios.js\"\n1079|    },\n1080|    \"./plugin-sdk/memory-core\": {\n1081|      \"types\": \"./dist/plugin-sdk/memory-core.d.ts\",\n1082|      \"default\": \"./dist/plugin-sdk/memory-core.js\"\n1083|    },\n1084|    \"./plugin-sdk/memory-core-engine-runtime\": {\n1085|      \"types\": \"./dist/plugin-sdk/memory-core-engine-runtime.d.ts\",\n1086|      \"default\": \"./dist/plugin-sdk/memory-core-engine-runtime.js\"\n1087|    },\n1088|    \"./plugin-sdk/memory-core-host-engine-embeddings\": {\n1089|      \"types\": \"./dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts\",\n1090|      \"default\": \"./dist/plugin-sdk/memory-core-host-engine-embeddings.js\"\n1091|    },\n1092|    \"./plugin-sdk/memory-core-host-engine-foundation\": {\n1093|      \"types\": \"./dist/plugin-sdk/memory-core-host-engine-foundation.d.ts\",\n1094|      \"default\": \"./dist/plugin-sdk/memory-core-host-engine-foundation.js\"\n1095|    },\n1096|    \"./plugin-sdk/memory-core-host-engine-qmd\": {\n1097|      \"types\": \"./dist/plugin-sdk/memory-core-host-engine-qmd.d.ts\",\n1098|      \"default\": \"./dist/plugin-sdk/memory-core-host-engine-qmd.js\"\n1099|    },\n1100|    \"./plugin-sdk/memory-core-host-engine-storage\": {\n1101|      \"types\": \"./dist/plugin-sdk/memory-core-host-engine-storage.d.ts\",\n1102|      \"default\": \"./dist/plugin-sdk/memory-core-host-engine-storage.js\"\n1103|    },\n1104|    \"./plugin-sdk/memory-core-host-multimodal\": {\n1105|      \"types\": \"./dist/plugin-sdk/memory-core-host-multimodal.d.ts\",\n1106|      \"default\": \"./dist/plugin-sdk/memory-core-host-multimodal.js\"\n1107|    },\n1108|    \"./plugin-sdk/memory-core-host-query\": {\n1109|      \"types\": \"./dist/plugin-sdk/memory-core-host-query.d.ts\",\n1110|      \"default\": \"./dist/plugin-sdk/memory-core-host-query.js\"\n1111|    },\n1112|    \"./plugin-sdk/memory-core-host-secret\": {\n1113|      \"types\": \"./dist/plugin-sdk/memory-core-host-secret.d.ts\",\n1114|      \"default\": \"./dist/plugin-sdk/memory-core-host-secret.js\"\n1115|    },\n1116|    \"./plugin-sdk/memory-core-host-events\": {\n1117|      \"types\": \"./dist/plugin-sdk/memory-core-host-events.d.ts\",\n1118|      \"default\": \"./dist/plugin-sdk/memory-core-host-events.js\"\n1119|    },\n1120|    \"./plugin-sdk/memory-core-host-status\": {\n1121|      \"types\": \"./dist/plugin-sdk/memory-core-host-status.d.ts\",\n1122|      \"default\": \"./dist/plugin-sdk/memory-core-host-status.js\"\n1123|    },\n1124|    \"./plugin-sdk/memory-core-host-runtime-cli\": {\n1125|      \"types\": \"./dist/plugin-sdk/memory-core-host-runtime-cli.d.ts\",\n1126|      \"default\": \"./dist/plugin-sdk/memory-core-host-runtime-cli.js\"\n1127|    },\n1128|    \"./plugin-sdk/memory-core-host-runtime-core\": {\n1129|      \"types\": \"./dist/plugin-sdk/memory-core-host-runtime-core.d.ts\",\n1130|      \"default\": \"./dist/plugin-sdk/memory-core-host-runtime-core.js\"\n1131|    },\n1132|    \"./plugin-sdk/memory-core-host-runtime-files\": {\n1133|      \"types\": \"./dist/plugin-sdk/memory-core-host-runtime-files.d.ts\",\n1134|      \"default\": \"./dist/plugin-sdk/memory-core-host-runtime-files.js\"\n1135|    },\n1136|    \"./plugin-sdk/memory-host-core\": {\n1137|      \"types\": \"./dist/plugin-sdk/memory-host-core.d.ts\",\n1138|      \"default\": \"./dist/plugin-sdk/memory-host-core.js\"\n1139|    },\n1140|    \"./plugin-sdk/memory-host-events\": {\n1141|      \"types\": \"./dist/plugin-sdk/memory-host-events.d.ts\",\n1142|      \"default\": \"./dist/plugin-sdk/memory-host-events.js\"\n1143|    },\n1144|    \"./plugin-sdk/memory-host-files\": {\n1145|      \"types\": \"./dist/plugin-sdk/memory-host-files.d.ts\",\n1146|      \"default\": \"./dist/plugin-sdk/memory-host-files.js\"\n1147|    },\n1148|    \"./plugin-sdk/memory-host-markdown\": {\n1149|      \"types\": \"./dist/plugin-sdk/memory-host-markdown.d.ts\",\n1150|      \"default\": \"./dist/plugin-sdk/memory-host-markdown.js\"\n1151|    },\n1152|    \"./plugin-sdk/memory-host-search\": {\n1153|      \"types\": \"./dist/plugin-sdk/memory-host-search.d.ts\",\n1154|      \"default\": \"./dist/plugin-sdk/memory-host-search.js\"\n1155|    },\n1156|    \"./plugin-sdk/memory-host-status\": {\n1157|      \"types\": \"./dist/plugin-sdk/memory-host-status.d.ts\",\n1158|      \"default\": \"./dist/plugin-sdk/memory-host-status.js\"\n1159|    },\n1160|    \"./plugin-sdk/models-provider-runtime\": {\n1161|      \"types\": \"./dist/plugin-sdk/models-provider-runtime.d.ts\",\n1162|      \"default\": \"./dist/plugin-sdk/models-provider-runtime.js\"\n1163|    },\n1164|    \"./plugin-sdk/skill-commands-runtime\": {\n1165|      \"types\": \"./dist/plugin-sdk/skill-commands-runtime.d.ts\",\n1166|      \"default\": \"./dist/plugin-sdk/skill-commands-runtime.js\"\n1167|    },\n1168|    \"./plugin-sdk/native-command-config-runtime\": {\n1169|      \"types\": \"./dist/plugin-sdk/native-command-config-runtime.d.ts\",\n1170|      \"default\": \"./dist/plugin-sdk/native-command-config-runtime.js\"\n1171|    },\n1172|    \"./plugin-sdk/native-command-registry\": {\n1173|      \"types\": \"./dist/plugin-sdk/native-command-registry.d.ts\",\n1174|      \"default\": \"./dist/plugin-sdk/native-command-registry.js\"\n1175|    },\n1176|    \"./plugin-sdk/provider-auth\": {\n1177|      \"types\": \"./dist/plugin-sdk/provider-auth.d.ts\",\n1178|      \"default\": \"./dist/plugin-sdk/provider-auth.js\"\n1179|    },\n1180|    \"./plugin-sdk/provider-oauth-runtime\": {\n1181|      \"types\": \"./dist/plugin-sdk/provider-oauth-runtime.d.ts\",\n1182|      \"default\": \"./dist/plugin-sdk/provider-oauth-runtime.js\"\n1183|    },\n1184|    \"./plugin-sdk/provider-auth-runtime\": {\n1185|      \"types\": \"./dist/plugin-sdk/provider-auth-runtime.d.ts\",\n1186|      \"default\": \"./dist/plugin-sdk/provider-auth-runtime.js\"\n1187|    },\n1188|    \"./plugin-sdk/provider-auth-api-key\": {\n1189|      \"types\": \"./dist/plugin-sdk/provider-auth-api-key.d.ts\",\n1190|      \"default\": \"./dist/plugin-sdk/provider-auth-api-key.js\"\n1191|    },\n1192|    \"./plugin-sdk/provider-auth-result\": {\n1193|      \"types\": \"./dist/plugin-sdk/provider-auth-result.d.ts\",\n1194|      \"default\": \"./dist/plugin-sdk/provider-auth-result.js\"\n1195|    },\n1196|    \"./plugin-sdk/provider-auth-login\": {\n1197|      \"types\": \"./dist/plugin-sdk/provider-auth-login.d.ts\",\n1198|      \"default\": \"./dist/plugin-sdk/provider-auth-login.js\"\n1199|    },\n1200|    \"./plugin-sdk/provider-selection-runtime\": {\n1201|      \"types\": \"./dist/plugin-sdk/provider-selection-runtime.d.ts\",\n1202|      \"default\": \"./dist/plugin-sdk/provider-selection-runtime.js\"\n1203|    },\n1204|    \"./plugin-sdk/plugin-entry\": {\n1205|      \"types\": \"./dist/plugin-sdk/plugin-entry.d.ts\",\n1206|      \"default\": \"./dist/plugin-sdk/plugin-entry.js\"\n1207|    },\n1208|    \"./plugin-sdk/provider-catalog-runtime\": {\n1209|      \"types\": \"./dist/plugin-sdk/provider-catalog-runtime.d.ts\",\n1210|      \"default\": \"./dist/plugin-sdk/provider-catalog-runtime.js\"\n1211|    },\n1212|    \"./plugin-sdk/provider-catalog-shared\": {\n1213|      \"types\": \"./dist/plugin-sdk/provider-catalog-shared.d.ts\",\n1214|      \"default\": \"./dist/plugin-sdk/provider-catalog-shared.js\"\n1215|    },\n1216|    \"./plugin-sdk/provider-entry\": {\n1217|      \"types\": \"./dist/plugin-sdk/provider-entry.d.ts\",\n1218|      \"default\": \"./dist/plugin-sdk/provider-entry.js\"\n1219|    },\n1220|    \"./plugin-sdk/provider-env-vars\": {\n1221|      \"types\": \"./dist/plugin-sdk/provider-env-vars.d.ts\",\n1222|      \"default\": \"./dist/plugin-sdk/provider-env-vars.js\"\n1223|    },\n1224|    \"./plugin-sdk/provider-http\": {\n1225|      \"types\": \"./dist/plugin-sdk/provider-http.d.ts\",\n1226|      \"default\": \"./dist/plugin-sdk/provider-http.js\"\n1227|    },\n1228|    \"./plugin-sdk/provider-model-types\": {\n1229|      \"types\": \"./dist/plugin-sdk/provider-model-types.d.ts\",\n1230|      \"default\": \"./dist/plugin-sdk/provider-model-types.js\"\n1231|    },\n1232|    \"./plugin-sdk/provider-model-shared\": {\n1233|      \"types\": \"./dist/plugin-sdk/provider-model-shared.d.ts\",\n1234|      \"default\": \"./dist/plugin-sdk/provider-model-shared.js\"\n1235|    },\n1236|    \"./plugin-sdk/provider-onboard\": {\n1237|      \"types\": \"./dist/plugin-sdk/provider-onboard.d.ts\",\n1238|      \"default\": \"./dist/plugin-sdk/provider-onboard.js\"\n1239|    },\n1240|    \"./plugin-sdk/provider-stream-family\": {\n1241|      \"types\": \"./dist/plugin-sdk/provider-stream-family.d.ts\",\n1242|      \"default\": \"./dist/plugin-sdk/provider-stream-family.js\"\n1243|    },\n1244|    \"./plugin-sdk/provider-stream-shared\": {\n1245|      \"types\": \"./dist/plugin-sdk/provider-stream-shared.d.ts\",\n1246|      \"default\": \"./dist/plugin-sdk/provider-stream-shared.js\"\n1247|    },\n1248|    \"./plugin-sdk/provider-transport-runtime\": {\n1249|      \"types\": \"./dist/plugin-sdk/provider-transport-runtime.d.ts\",\n1250|      \"default\": \"./dist/plugin-sdk/provider-transport-runtime.js\"\n1251|    },\n1252|    \"./plugin-sdk/provider-stream\": {\n1253|      \"types\": \"./dist/plugin-sdk/provider-stream.d.ts\",\n1254|      \"default\": \"./dist/plugin-sdk/provider-stream.js\"\n1255|    },\n1256|    \"./plugin-sdk/provider-tools\": {\n1257|      \"types\": \"./dist/plugin-sdk/provider-tools.d.ts\",\n1258|      \"default\": \"./dist/plugin-sdk/provider-tools.js\"\n1259|    },\n1260|    \"./plugin-sdk/provider-usage\": {\n1261|      \"types\": \"./dist/plugin-sdk/provider-usage.d.ts\",\n1262|      \"default\": \"./dist/plugin-sdk/provider-usage.js\"\n1263|    },\n1264|    \"./plugin-sdk/document-extractor\": {\n1265|      \"types\": \"./dist/plugin-sdk/document-extractor.d.ts\",\n1266|      \"default\": \"./dist/plugin-sdk/document-extractor.js\"\n1267|    },\n1268|    \"./plugin-sdk/web-content-extractor\": {\n1269|      \"types\": \"./dist/plugin-sdk/web-content-extractor.d.ts\",\n1270|      \"default\": \"./dist/plugin-sdk/web-content-extractor.js\"\n1271|    },\n1272|    \"./plugin-sdk/provider-web-fetch-contract\": {\n1273|      \"types\": \"./dist/plugin-sdk/provider-web-fetch-contract.d.ts\",\n1274|      \"default\": \"./dist/plugin-sdk/provider-web-fetch-contract.js\"\n1275|    },\n1276|    \"./plugin-sdk/provider-web-fetch\": {\n1277|      \"types\": \"./dist/plugin-sdk/provider-web-fetch.d.ts\",\n1278|      \"default\": \"./dist/plugin-sdk/provider-web-fetch.js\"\n1279|    },\n1280|    \"./plugin-sdk/provider-web-search-config-contract\": {\n1281|      \"types\": \"./dist/plugin-sdk/provider-web-search-config-contract.d.ts\",\n1282|      \"default\": \"./dist/plugin-sdk/provider-web-search-config-contract.js\"\n1283|    },\n1284|    \"./plugin-sdk/provider-web-search-contract\": {\n1285|      \"types\": \"./dist/plugin-sdk/provider-web-search-contract.d.ts\",\n1286|      \"default\": \"./dist/plugin-sdk/provider-web-search-contract.js\"\n1287|    },\n1288|    \"./plugin-sdk/provider-web-search\": {\n1289|      \"types\": \"./dist/plugin-sdk/provider-web-search.d.ts\",\n1290|      \"default\": \"./dist/plugin-sdk/provider-web-search.js\"\n1291|    },\n1292|    \"./plugin-sdk/retry-runtime\": {\n1293|      \"types\": \"./dist/plugin-sdk/retry-runtime.d.ts\",\n1294|      \"default\": \"./dist/plugin-sdk/retry-runtime.js\"\n1295|    },\n1296|    \"./plugin-sdk/run-command\": {\n1297|      \"types\": \"./dist/plugin-sdk/run-command.d.ts\",\n1298|      \"default\": \"./dist/plugin-sdk/run-command.js\"\n1299|    },\n1300|    \"./plugin-sdk/param-readers\": {\n1301|      \"types\": \"./dist/plugin-sdk/param-readers.d.ts\",\n1302|      \"default\": \"./dist/plugin-sdk/param-readers.js\"\n1303|    },\n1304|    \"./plugin-sdk/provider-zai-endpoint\": {\n1305|      \"types\": \"./dist/plugin-sdk/provider-zai-endpoint.d.ts\",\n1306|      \"default\": \"./dist/plugin-sdk/provider-zai-endpoint.js\"\n1307|    },\n1308|    \"./plugin-sdk/secret-input\": {\n1309|      \"types\": \"./dist/plugin-sdk/secret-input.d.ts\",\n1310|      \"default\": \"./dist/plugin-sdk/secret-input.js\"\n1311|    },\n1312|    \"./plugin-sdk/secret-input-runtime\": {\n1313|      \"types\": \"./dist/plugin-sdk/secret-input-runtime.d.ts\",\n1314|      \"default\": \"./dist/plugin-sdk/secret-input-runtime.js\"\n1315|    },\n1316|    \"./plugin-sdk/channel-status\": {\n1317|      \"types\": \"./dist/plugin-sdk/channel-status.d.ts\",\n1318|      \"default\": \"./dist/plugin-sdk/channel-status.js\"\n1319|    },\n1320|    \"./plugin-sdk/status-helpers\": {\n1321|      \"types\": \"./dist/plugin-sdk/status-helpers.d.ts\",\n1322|      \"default\": \"./dist/plugin-sdk/status-helpers.js\"\n1323|    },\n1324|    \"./plugin-sdk/speech\": {\n1325|      \"types\": \"./dist/plugin-sdk/speech.d.ts\",\n1326|      \"default\": \"./dist/plugin-sdk/speech.js\"\n1327|    },\n1328|    \"./plugin-sdk/string-normalization-runtime\": {\n1329|      \"types\": \"./dist/plugin-sdk/string-normalization-runtime.d.ts\",\n1330|      \"default\": \"./dist/plugin-sdk/string-normalization-runtime.js\"\n1331|    },\n1332|    \"./plugin-sdk/state-paths\": {\n1333|      \"types\": \"./dist/plugin-sdk/state-paths.d.ts\",\n1334|      \"default\": \"./dist/plugin-sdk/state-paths.js\"\n1335|    },\n1336|    \"./plugin-sdk/target-resolver-runtime\": {\n1337|      \"types\": \"./dist/plugin-sdk/target-resolver-runtime.d.ts\",\n1338|      \"default\": \"./dist/plugin-sdk/target-resolver-runtime.js\"\n1339|    },\n1340|    \"./plugin-sdk/telegram-account\": {\n1341|      \"types\": \"./dist/plugin-sdk/telegram-account.d.ts\",\n1342|      \"default\": \"./dist/plugin-sdk/telegram-account.js\"\n1343|    },\n1344|    \"./plugin-sdk/telegram-command-config\": {\n1345|      \"types\": \"./dist/plugin-sdk/telegram-command-config.d.ts\",\n1346|      \"default\": \"./dist/plugin-sdk/telegram-command-config.js\"\n1347|    },\n1348|    \"./plugin-sdk/text-autolink-runtime\": {\n1349|      \"types\": \"./dist/plugin-sdk/text-autolink-runtime.d.ts\",\n1350|      \"default\": \"./dist/plugin-sdk/text-autolink-runtime.js\"\n1351|    },\n1352|    \"./plugin-sdk/text-utility-runtime\": {\n1353|      \"types\": \"./dist/plugin-sdk/text-utility-runtime.d.ts\",\n1354|      \"default\": \"./dist/plugin-sdk/text-utility-runtime.js\"\n1355|    },\n1356|    \"./plugin-sdk/tool-plugin\": {\n1357|      \"types\": \"./dist/plugin-sdk/tool-plugin.d.ts\",\n1358|      \"default\": \"./dist/plugin-sdk/tool-plugin.js\"\n1359|    },\n1360|    \"./plugin-sdk/tool-payload\": {\n1361|      \"types\": \"./dist/plugin-sdk/tool-payload.d.ts\",\n1362|      \"default\": \"./dist/plugin-sdk/tool-payload.js\"\n1363|    },\n1364|    \"./plugin-sdk/tool-send\": {\n1365|      \"types\": \"./dist/plugin-sdk/tool-send.d.ts\",\n1366|      \"default\": \"./dist/plugin-sdk/tool-send.js\"\n1367|    },\n1368|    \"./plugin-sdk/webhook-ingress\": {\n1369|      \"types\": \"./dist/plugin-sdk/webhook-ingress.d.ts\",\n1370|      \"default\": \"./dist/plugin-sdk/webhook-ingress.js\"\n1371|    },\n1372|    \"./plugin-sdk/webhook-targets\": {\n1373|      \"types\": \"./dist/plugin-sdk/webhook-targets.d.ts\",\n1374|      \"default\": \"./dist/plugin-sdk/webhook-targets.js\"\n1375|    },\n1376|    \"./plugin-sdk/webhook-request-guards\": {\n1377|      \"types\": \"./dist/plugin-sdk/webhook-request-guards.d.ts\",\n1378|      \"default\": \"./dist/plugin-sdk/webhook-request-guards.js\"\n1379|    },\n1380|    \"./plugin-sdk/webhook-path\": {\n1381|      \"types\": \"./dist/plugin-sdk/webhook-path.d.ts\",\n1382|      \"default\": \"./dist/plugin-sdk/webhook-path.js\"\n1383|    },\n1384|    \"./plugin-sdk/web-media\": {\n1385|      \"types\": \"./dist/plugin-sdk/web-media.d.ts\",\n1386|      \"default\": \"./dist/plugin-sdk/web-media.js\"\n1387|    },\n1388|    \"./plugin-sdk/zalouser\": {\n1389|      \"types\": \"./dist/plugin-sdk/zalouser.d.ts\",\n1390|      \"default\": \"./dist/plugin-sdk/zalouser.js\"\n1391|    },\n1392|    \"./plugin-sdk/zod\": {\n1393|      \"types\": \"./dist/plugin-sdk/zod.d.ts\",\n1394|      \"default\": \"./dist/plugin-sdk/zod.js\"\n1395|    },\n1396|    \"./plugin-sdk/agent-core\": {\n1397|      \"types\": \"./dist/plugin-sdk/agent-core.d.ts\",\n1398|      \"default\": \"./dist/plugin-sdk/agent-core.js\"\n1399|    },\n1400|    \"./plugin-sdk/agent-sessions\": {\n1401|      \"types\": \"./dist/plugin-sdk/agent-sessions.d.ts\",\n1402|      \"default\": \"./dist/plugin-sdk/agent-sessions.js\"\n1403|    },\n1404|    \"./plugin-sdk/llm\": {\n1405|      \"types\": \"./dist/plugin-sdk/llm.d.ts\",\n1406|      \"default\": \"./dist/plugin-sdk/llm.js\"\n1407|    },\n1408|    \"./extension-api\": \"./dist/extensionAPI.js\",\n1409|    \"./cli-entry\": \"./openclaw.mjs\"\n1410|  },\n1411|  \"scripts\": {\n1412|    \"android:assemble\": \"cd apps/android && ./gradlew :app:assemblePlayDebug\",\n1413|    \"android:assemble:third-party\": \"cd apps/android && ./gradlew :app:assembleThirdPartyDebug\",\n1414|    \"android:bundle:release\": \"bun apps/android/scripts/build-release-aab.ts\",\n1415|    \"android:format\": \"cd apps/android && ./gradlew :app:ktlintFormat :benchmark:ktlintFormat\",\n1416|    \"android:install\": \"cd apps/android && ./gradlew :app:installPlayDebug\",\n1417|    \"android:install:third-party\": \"cd apps/android && ./gradlew :app:installThirdPartyDebug\",\n1418|    \"android:lint\": \"cd apps/android && ./gradlew :app:ktlintCheck :benchmark:ktlintCheck\",\n1419|    \"android:lint:android\": \"cd apps/android && ./gradlew :app:lintDebug\",\n1420|    \"android:run\": \"cd apps/android && ./gradlew :app:installPlayDebug && adb shell am start -n ai.openclaw.app/.MainActivity\",\n1421|    \"android:run:third-party\": \"cd apps/android && ./gradlew :app:installThirdPartyDebug && adb shell am start -n ai.openclaw.app/.MainActivity\",\n1422|    \"android:test\": \"cd apps/android && ./gradlew :app:testPlayDebugUnitTest\",\n1423|    \"android:test:integration\": \"node scripts/run-with-env.mjs OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_ANDROID_NODE=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.live.config.ts src/gateway/android-node.capabilities.live.test.ts\",\n1424|    \"android:test:third-party\": \"cd apps/android && ./gradlew :app:testThirdPartyDebugUnitTest\",\n1425|    \"audit:seams\": \"node scripts/audit-seams.mjs\",\n1426|    \"build\": \"node scripts/build-all.mjs\",\n1427|    \"build:ci-artifacts\": \"node scripts/build-all.mjs ciArtifacts\",\n1428|    \"build:docker\": \"node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && pnpm plugins:assets:build && pnpm plugins:assets:copy && node --experimental-strip-types scripts/copy-hook-metadata.ts && node --experimental-strip-types scripts/copy-export-html-templates.ts && node --experimental-strip-types scripts/write-build-info.ts && node --experimental-strip-types scripts/write-cli-startup-metadata.ts && node --experimental-strip-types scripts/write-cli-compat.ts\",\n1429|    \"build:plugin-sdk:dts\": \"node scripts/run-tsgo.mjs -p tsconfig.plugin-sdk.dts.json --declaration true\",\n1430|    \"build:plugin-sdk:strict-smoke\": \"pnpm build:plugin-sdk:dts && node --experimental-strip-types scripts/write-plugin-sdk-entry-dts.ts\",\n1431|    \"build:strict-smoke\": \"pnpm plugins:assets:build && node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && pnpm build:plugin-sdk:dts && node --experimental-strip-types scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs\",\n1432|    \"canvas:a2ui:bundle\": \"node scripts/bundle-a2ui.mjs\",\n1433|    \"changed:lanes\": \"node scripts/changed-lanes.mjs\",\n1434|    \"check\": \"node scripts/check.mjs\",\n1435|    \"check:architecture\": \"pnpm check:import-cycles && pnpm check:madge-import-cycles && pnpm check:deprecated-api-usage && pnpm check:deprecated-jsdoc && pnpm db:kysely:check && pnpm lint:kysely\",\n1436|    \"check:base-config-schema\": \"node --import tsx scripts/generate-base-config-schema.ts --check\",\n1437|    \"check:bundled-channel-config-metadata\": \"node --import tsx scripts/generate-bundled-channel-config-metadata.ts --check\",\n1438|    \"check:changed\": \"node scripts/check-changed.mjs\",\n1439|    \"check:changelog-attributions\": \"node scripts/check-changelog-attributions.mjs\",\n1440|    \"check:deprecated-api-usage\": \"node scripts/check-deprecated-api-usage.mjs\",\n1441|    \"check:deprecated-jsdoc\": \"node scripts/check-deprecated-jsdoc.mjs\",\n1442|    \"check:docs\": \"pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-mdx && pnpm docs:check-i18n-glossary && pnpm docs:check-links\",\n1443|    \"check:host-env-policy:swift\": \"node scripts/generate-host-env-security-policy-swift.mjs --check\",\n1444|    \"check:import-cycles\": \"node --import tsx scripts/check-import-cycles.ts\",\n1445|    \"check:loc\": \"node --import tsx scripts/check-ts-max-loc.ts --max 500\",\n1446|    \"check:madge-import-cycles\": \"node --import tsx scripts/check-madge-import-cycles.ts\",\n1447|    \"check:media-download-helpers\": \"node scripts/check-media-download-helper-roundtrip.mjs\",\n1448|    \"check:no-conflict-markers\": \"node scripts/check-no-conflict-markers.mjs\",\n1449|    \"check:no-runtime-action-load-config\": \"node scripts/check-no-runtime-action-load-config.mjs\",\n1450|    \"check:opengrep-rule-metadata\": \"node security/opengrep/check-rule-metadata.mjs\",\n1451|    \"check:runtime-sidecar-loaders\": \"node --import tsx scripts/check-runtime-sidecar-loaders.mjs\",\n1452|    \"check:static-import-sccs\": \"pnpm check:madge-import-cycles\",\n1453|    \"check:temp-path-guardrails\": \"node --import tsx scripts/check-temp-path-guardrails.ts\",\n1454|    \"check:test-types\": \"pnpm tsgo:test\",\n1455|    \"check:timed\": \"node scripts/check-timed.mjs\",\n1456|    \"check:timed:all-types\": \"node scripts/check-timed.mjs --include-test-types\",\n1457|    \"check:timed:architecture\": \"node scripts/check-timed.mjs --include-architecture\",\n1458|    \"check:workflows\": \"node scripts/check-workflows.mjs\",\n1459|    \"ci:full-release\": \"node scripts/full-release-validation-at-sha.mjs\",\n1460|    \"ci:timings\": \"node scripts/ci-run-timings.mjs --latest-main\",\n1461|    \"ci:timings:recent\": \"node scripts/ci-run-timings.mjs --recent 10\",\n1462|    \"clean:dist\": \"node -e \\\"require('fs').rmSync('dist', {recursive: true, force: true})\\\"\",\n1463|    \"codex-app-server:protocol:check\": \"node --import tsx scripts/check-codex-app-server-protocol.ts\",\n1464|    \"codex-app-server:protocol:sync\": \"node --import tsx scripts/sync-codex-app-server-protocol.ts\",\n1465|    \"codex-supervisor:mcp\": \"node --import tsx extensions/codex-supervisor/src/mcp-serve.ts\",\n1466|    \"config:channels:check\": \"node --import tsx scripts/generate-bundled-channel-config-metadata.ts --check\",\n1467|    \"config:channels:gen\": \"node --import tsx scripts/generate-bundled-channel-config-metadata.ts --write\",\n1468|    \"config:docs:check\": \"node --import tsx scripts/generate-config-doc-baseline.ts --check\",\n1469|    \"config:docs:gen\": \"node --import tsx scripts/generate-config-doc-baseline.ts --write\",\n1470|    \"config:schema:check\": \"node --import tsx scripts/generate-base-config-schema.ts --check\",\n1471|    \"config:schema:gen\": \"node --import tsx scripts/generate-base-config-schema.ts --write\",\n1472|    \"crabbox:hydrate\": \"node scripts/crabbox-wrapper.mjs actions hydrate\",\n1473|    \"crabbox:run\": \"node scripts/crabbox-wrapper.mjs run\",\n1474|    \"crabbox:stop\": \"node scripts/crabbox-wrapper.mjs stop\",\n1475|    \"crabbox:warmup\": \"node scripts/crabbox-wrapper.mjs warmup\",\n1476|    \"deadcode:ci\": \"pnpm deadcode:report:ci:knip && pnpm deadcode:report:ci:ts-unused\",\n1477|    \"deadcode:dependencies\": \"pnpm --config.minimum-release-age=0 dlx knip@6.8.0 --config config/knip.config.ts --production --no-progress --reporter compact --dependencies --no-config-hints\",\n1478|    \"deadcode:knip\": \"pnpm dlx knip --config config/knip.config.ts --production --no-progress --reporter compact --files --dependencies\",\n1479|    \"deadcode:report\": \"pnpm deadcode:knip; pnpm deadcode:ts-prune; pnpm deadcode:ts-unused\",\n1480|    \"deadcode:report:ci:knip\": \"mkdir -p .artifacts/deadcode && pnpm deadcode:knip > .artifacts/deadcode/knip.txt 2>&1 || true\",\n1481|    \"deadcode:report:ci:ts-prune\": \"mkdir -p .artifacts/deadcode && pnpm deadcode:ts-prune > .artifacts/deadcode/ts-prune.txt 2>&1 || true\",\n1482|    \"deadcode:report:ci:ts-unused\": \"mkdir -p .artifacts/deadcode && pnpm deadcode:ts-unused > .artifacts/deadcode/ts-unused-exports.txt 2>&1 || true\",\n1483|    \"deadcode:ts-prune\": \"pnpm dlx ts-prune src extensions scripts\",\n1484|    \"deadcode:ts-unused\": \"pnpm dlx ts-unused-exports tsconfig.json --ignoreTestFiles --exitWithCount\",\n1485|    \"deadcode:unused-files\": \"node scripts/check-deadcode-unused-files.mjs\",\n1486|    \"deps:root-ownership\": \"node scripts/root-dependency-ownership-audit.mjs\",\n1487|    \"deps:root-ownership:check\": \"node scripts/root-dependency-ownership-audit.mjs --check\",\n1488|    \"deps:changes:report\": \"node scripts/dependency-changes-report.mjs\",\n1489|    \"deps:patches:check\": \"node scripts/check-package-patches.mjs\",\n1490|    \"deps:pins:check\": \"node scripts/check-dependency-pins.mjs\",\n1491|    \"deps:shrinkwrap:check\": \"node scripts/generate-npm-shrinkwrap.mjs --all --check\",\n1492|    \"deps:shrinkwrap:changed:check\": \"node scripts/generate-npm-shrinkwrap.mjs --changed --check\",\n1493|    \"deps:shrinkwrap:changed:generate\": \"node scripts/generate-npm-shrinkwrap.mjs --changed\",\n1494|    \"deps:shrinkwrap:generate\": \"node scripts/generate-npm-shrinkwrap.mjs --all\",\n1495|    \"deps:shrinkwrap:root:check\": \"node scripts/generate-npm-shrinkwrap.mjs --check\",\n1496|    \"deps:shrinkwrap:root:generate\": \"node scripts/generate-npm-shrinkwrap.mjs\",\n1497|    \"deps:ownership-surface:check\": \"node scripts/dependency-ownership-surface-report.mjs --check\",\n1498|    \"deps:ownership-surface:report\": \"node scripts/dependency-ownership-surface-report.mjs\",\n1499|    \"deps:transitive-risk:report\": \"node scripts/transitive-manifest-risk-report.mjs\",\n1500|    \"deps:vuln:gate\": \"node scripts/dependency-vulnerability-gate.mjs\",\n1501|    \"db:kysely:check\": \"node scripts/generate-kysely-types.mjs --verify\",\n1502|    \"db:kysely:gen\": \"node scripts/generate-kysely-types.mjs\",\n1503|    \"dev\": \"node scripts/run-node.mjs\",\n1504|    \"dev:ui:mock\": \"node --import tsx scripts/control-ui-mock-dev.ts\",\n1505|    \"docs:bin\": \"node scripts/build-docs-list.mjs\",\n1506|    \"docs:check-i18n-glossary\": \"node scripts/check-docs-i18n-glossary.mjs\",\n1507|    \"docs:check-links\": \"node scripts/docs-link-audit.mjs\",\n1508|    \"docs:check-links:anchors\": \"node scripts/docs-link-audit.mjs --anchors\",\n1509|    \"docs:check-mdx\": \"node scripts/check-docs-mdx.mjs docs README.md\",\n1510|    \"docs:dev\": \"cd docs && mint dev\",\n1511|    \"docs:list\": \"node scripts/docs-list.js\",\n1512|    \"docs:spellcheck\": \"bash scripts/docs-spellcheck.sh\",\n1513|    \"docs:spellcheck:fix\": \"bash scripts/docs-spellcheck.sh --write\",\n1514|    \"dup:check\": \"node scripts/check-duplicates.mjs\",\n1515|    \"dup:check:coverage\": \"node scripts/check-duplicates.mjs --coverage\",\n1516|    \"dup:check:json\": \"node scripts/check-duplicates.mjs --json\",\n1517|    \"format\": \"oxfmt --write --threads=1\",\n1518|    \"format:all\": \"pnpm format && pnpm format:swift\",\n1519|    \"format:check\": \"oxfmt --check --threads=1\",\n1520|    \"format:diff\": \"oxfmt --write --threads=1 && git --no-pager diff\",\n1521|    \"format:docs\": \"node scripts/format-docs.mjs\",\n1522|    \"format:docs:check\": \"node scripts/format-docs.mjs --check\",\n1523|    \"format:fix\": \"oxfmt --write --threads=1\",\n1524|    \"format:swift\": \"swiftformat --lint --config config/swiftformat --exclude '**/apps/swabble,**/apps/android,**/apps/ios,**/apps/shared,**/OpenClawProtocol,**/HostEnvSecurityPolicy.generated.swift' apps/macos/Sources apps/ios/Sources apps/shared/OpenClawKit/Sources\",\n1525|    \"gateway:dev\": \"node scripts/run-with-env.mjs OPENCLAW_SKIP_CHANNELS=1 -- node scripts/run-node.mjs --dev gateway\",\n1526|    \"gateway:dev:reset\": \"node scripts/run-with-env.mjs OPENCLAW_SKIP_CHANNELS=1 -- node scripts/run-node.mjs --dev gateway --reset\",\n1527|    \"gateway:watch\": \"node scripts/gateway-watch-tmux.mjs gateway --force\",\n1528|    \"gateway:watch:raw\": \"node scripts/watch-node.mjs gateway --force\",\n1529|    \"gen:host-env-policy:swift\": \"node scripts/generate-host-env-security-policy-swift.mjs --write\",\n1530|    \"ghsa:patch\": \"node scripts/ghsa-patch.mjs\",\n1531|    \"ios:beta\": \"bash scripts/ios-beta-release.sh\",\n1532|    \"ios:beta:archive\": \"bash scripts/ios-beta-archive.sh\",\n1533|    \"ios:beta:prepare\": \"bash scripts/ios-beta-prepare.sh\",\n1534|    \"ios:build\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \\\"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\\\" -configuration Debug build'\",\n1535|    \"ios:gen\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate'\",\n1536|    \"ios:open\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && open OpenClaw.xcodeproj'\",\n1537|    \"ios:run\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \\\"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\\\" -configuration Debug build && xcrun simctl boot \\\"${IOS_SIM:-iPhone 17}\\\" || true && xcrun simctl launch booted ai.openclaw.ios'\",\n1538|    \"ios:version\": \"node --import tsx scripts/ios-version.ts --json\",\n1539|    \"ios:version:check\": \"node --import tsx scripts/ios-sync-versioning.ts --check\",\n1540|", "total_lines": 1957, "file_size": 106656, "truncated": true, "hint": "Use offset=1540 to continue reading (showing 1020-1539 of 1957 lines)", "is_binary": false, "is_image": false} read_file 


c0:
  {"content": "1500|    \"deps:vuln:gate\": \"node scripts/dependency-vulnerability-gate.mjs\",\n1501|    \"db:kysely:check\": \"node scripts/generate-kysely-types.mjs --verify\",\n1502|    \"db:kysely:gen\": \"node scripts/generate-kysely-types.mjs\",\n1503|    \"dev\": \"node scripts/run-node.mjs\",\n1504|    \"dev:ui:mock\": \"node --import tsx scripts/control-ui-mock-dev.ts\",\n1505|    \"docs:bin\": \"node scripts/build-docs-list.mjs\",\n1506|    \"docs:check-i18n-glossary\": \"node scripts/check-docs-i18n-glossary.mjs\",\n1507|    \"docs:check-links\": \"node scripts/docs-link-audit.mjs\",\n1508|    \"docs:check-links:anchors\": \"node scripts/docs-link-audit.mjs --anchors\",\n1509|    \"docs:check-mdx\": \"node scripts/check-docs-mdx.mjs docs README.md\",\n1510|    \"docs:dev\": \"cd docs && mint dev\",\n1511|    \"docs:list\": \"node scripts/docs-list.js\",\n1512|    \"docs:spellcheck\": \"bash scripts/docs-spellcheck.sh\",\n1513|    \"docs:spellcheck:fix\": \"bash scripts/docs-spellcheck.sh --write\",\n1514|    \"dup:check\": \"node scripts/check-duplicates.mjs\",\n1515|    \"dup:check:coverage\": \"node scripts/check-duplicates.mjs --coverage\",\n1516|    \"dup:check:json\": \"node scripts/check-duplicates.mjs --json\",\n1517|    \"format\": \"oxfmt --write --threads=1\",\n1518|    \"format:all\": \"pnpm format && pnpm format:swift\",\n1519|    \"format:check\": \"oxfmt --check --threads=1\",\n1520|    \"format:diff\": \"oxfmt --write --threads=1 && git --no-pager diff\",\n1521|    \"format:docs\": \"node scripts/format-docs.mjs\",\n1522|    \"format:docs:check\": \"node scripts/format-docs.mjs --check\",\n1523|    \"format:fix\": \"oxfmt --write --threads=1\",\n1524|    \"format:swift\": \"swiftformat --lint --config config/swiftformat --exclude '**/apps/swabble,**/apps/android,**/apps/ios,**/apps/shared,**/OpenClawProtocol,**/HostEnvSecurityPolicy.generated.swift' apps/macos/Sources apps/ios/Sources apps/shared/OpenClawKit/Sources\",\n1525|    \"gateway:dev\": \"node scripts/run-with-env.mjs OPENCLAW_SKIP_CHANNELS=1 -- node scripts/run-node.mjs --dev gateway\",\n1526|    \"gateway:dev:reset\": \"node scripts/run-with-env.mjs OPENCLAW_SKIP_CHANNELS=1 -- node scripts/run-node.mjs --dev gateway --reset\",\n1527|    \"gateway:watch\": \"node scripts/gateway-watch-tmux.mjs gateway --force\",\n1528|    \"gateway:watch:raw\": \"node scripts/watch-node.mjs gateway --force\",\n1529|    \"gen:host-env-policy:swift\": \"node scripts/generate-host-env-security-policy-swift.mjs --write\",\n1530|    \"ghsa:patch\": \"node scripts/ghsa-patch.mjs\",\n1531|    \"ios:beta\": \"bash scripts/ios-beta-release.sh\",\n1532|    \"ios:beta:archive\": \"bash scripts/ios-beta-archive.sh\",\n1533|    \"ios:beta:prepare\": \"bash scripts/ios-beta-prepare.sh\",\n1534|    \"ios:build\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \\\"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\\\" -configuration Debug build'\",\n1535|    \"ios:gen\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate'\",\n1536|    \"ios:open\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && open OpenClaw.xcodeproj'\",\n1537|    \"ios:run\": \"bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \\\"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\\\" -configuration Debug build && xcrun simctl boot \\\"${IOS_SIM:-iPhone 17}\\\" || true && xcrun simctl launch booted ai.openclaw.ios'\",\n1538|    \"ios:version\": \"node --import tsx scripts/ios-version.ts --json\",\n1539|    \"ios:version:check\": \"node --import tsx scripts/ios-sync-versioning.ts --check\",\n1540|    \"ios:version:pin\": \"node --import tsx scripts/ios-pin-version.ts\",\n1541|    \"ios:version:sync\": \"node --import tsx scripts/ios-sync-versioning.ts --write\",\n1542|    \"leak:embedded-run\": \"node --import tsx --expose-gc scripts/embedded-run-abort-leak.ts\",\n1543|    \"lint\": \"node scripts/run-oxlint-shards.mjs\",\n1544|    \"lint:agent:ingress-owner\": \"node scripts/check-ingress-agent-owner-context.mjs\",\n1545|    \"lint:all\": \"node scripts/run-oxlint.mjs\",\n1546|    \"lint:apps\": \"pnpm lint:swift\",\n1547|    \"lint:auth:no-pairing-store-group\": \"node scripts/check-no-pairing-store-group-auth.mjs\",\n1548|    \"lint:auth:pairing-account-scope\": \"node scripts/check-pairing-account-scope.mjs\",\n1549|    \"lint:core\": \"node scripts/run-oxlint-shards.mjs --only=core --split-core\",\n1550|    \"lint:docker-e2e\": \"node scripts/check-docker-e2e-boundaries.mjs\",\n1551|    \"lint:kysely\": \"node scripts/check-kysely-guardrails.mjs\",\n1552|    \"lint:docs\": \"pnpm dlx --config.resolution-mode=highest markdownlint-cli2 --config config/markdownlint-cli2.jsonc\",\n1553|    \"lint:docs:fix\": \"pnpm dlx --config.resolution-mode=highest markdownlint-cli2 --config config/markdownlint-cli2.jsonc --fix\",\n1554|    \"lint:extensions:no-deprecated-channel-access\": \"node --import tsx scripts/check-no-deprecated-channel-access.ts\",\n1555|    \"lint:extensions:telegram-grammy-types\": \"node scripts/check-telegram-grammy-types-imports.mjs\",\n1556|    \"lint:extensions\": \"node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions\",\n1557|    \"lint:extensions:bundled\": \"node scripts/run-bundled-extension-oxlint.mjs\",\n1558|    \"lint:extensions:channels\": \"node scripts/run-extension-channel-oxlint.mjs\",\n1559|    \"lint:extensions:no-guarded-wildcard-reexports\": \"node scripts/check-extension-wildcard-reexports.mjs\",\n1560|    \"lint:extensions:no-plugin-sdk-internal\": \"node scripts/check-extension-plugin-sdk-boundary.mjs --mode=plugin-sdk-internal\",\n1561|    \"lint:extensions:no-plugin-sdk-wildcard-reexports\": \"node scripts/check-plugin-sdk-wildcard-reexports.mjs\",\n1562|    \"lint:extensions:no-relative-outside-package\": \"node scripts/check-extension-plugin-sdk-boundary.mjs --mode=relative-outside-package\",\n1563|    \"lint:extensions:no-src-outside-plugin-sdk\": \"node scripts/check-extension-plugin-sdk-boundary.mjs --mode=src-outside-plugin-sdk\",\n1564|    \"lint:fix\": \"node scripts/run-oxlint.mjs --fix && pnpm format\",\n1565|    \"lint:plugins:no-extension-imports\": \"node scripts/check-plugin-extension-import-boundary.mjs\",\n1566|    \"lint:plugins:no-extension-src-imports\": \"node --import tsx scripts/check-no-extension-src-imports.ts\",\n1567|    \"lint:plugins:no-extension-test-core-imports\": \"node --import tsx scripts/check-no-extension-test-core-imports.ts\",\n1568|    \"lint:plugins:no-monolithic-plugin-sdk-entry-imports\": \"node --import tsx scripts/check-no-monolithic-plugin-sdk-entry-imports.ts\",\n1569|    \"lint:plugins:no-register-http-handler\": \"node scripts/check-no-register-http-handler.mjs\",\n1570|    \"lint:plugins:plugin-sdk-subpaths-exported\": \"node scripts/check-plugin-sdk-subpath-exports.mjs\",\n1571|    \"lint:scripts\": \"pnpm lint:docker-e2e && pnpm lint:tmp:no-raw-http2-imports && node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.scripts.json scripts\",\n1572|    \"lint:swift\": \"swiftlint lint --config config/swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)\",\n1573|    \"lint:tmp:channel-agnostic-boundaries\": \"node scripts/check-channel-agnostic-boundaries.mjs\",\n1574|    \"lint:tmp:dynamic-import-warts\": \"node scripts/check-dynamic-import-warts.mjs\",\n1575|    \"lint:tmp:no-random-messaging\": \"node scripts/check-no-random-messaging-tmp.mjs\",\n1576|    \"lint:tmp:no-raw-channel-fetch\": \"node scripts/check-no-raw-channel-fetch.mjs\",\n1577|    \"lint:tmp:no-raw-http2-imports\": \"node scripts/check-no-raw-http2-imports.mjs\",\n1578|    \"lint:tmp:tsgo-core-boundary\": \"node scripts/check-tsgo-core-boundary.mjs\",\n1579|    \"lint:ui:no-raw-window-open\": \"node scripts/check-no-raw-window-open.mjs\",\n1580|    \"lint:web-fetch-provider-boundaries\": \"node scripts/check-web-fetch-provider-boundaries.mjs\",\n1581|    \"lint:web-search-provider-boundaries\": \"node scripts/check-web-search-provider-boundaries.mjs\",\n1582|    \"lint:webhook:no-low-level-body-read\": \"node scripts/check-webhook-auth-body-order.mjs\",\n1583|    \"mac:open\": \"open dist/OpenClaw.app\",\n1584|    \"mac:package\": \"bash scripts/package-mac-app.sh\",\n1585|    \"mac:restart\": \"bash scripts/restart-mac.sh\",\n1586|    \"moltbot:rpc\": \"node scripts/run-node.mjs agent --mode rpc --json\",\n1587|    \"openclaw\": \"node scripts/run-node.mjs\",\n1588|    \"openclaw:rpc\": \"node scripts/run-node.mjs agent --mode rpc --json\",\n1589|    \"perf:issue-78851\": \"node --import tsx scripts/perf/issue-78851-model-resolution.ts\",\n1590|    \"perf:kova:summary\": \"node scripts/kova-ci-summary.mjs\",\n1591|    \"perf:source:summary\": \"node scripts/openclaw-performance-source-summary.mjs\",\n1592|    \"plugin-sdk:api:check\": \"node --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --check\",\n1593|    \"plugin-sdk:api:gen\": \"node --max-old-space-size=8192 --import tsx scripts/generate-plugin-sdk-api-baseline.ts --write\",\n1594|    \"plugin-sdk:check-exports\": \"node scripts/sync-plugin-sdk-exports.mjs --check\",\n1595|    \"plugin-sdk:surface\": \"node --max-old-space-size=8192 scripts/plugin-sdk-surface-report.mjs\",\n1596|    \"plugin-sdk:surface:check\": \"node --max-old-space-size=8192 scripts/plugin-sdk-surface-report.mjs --check\",\n1597|    \"plugin-sdk:sync-exports\": \"node scripts/sync-plugin-sdk-exports.mjs\",\n1598|    \"plugin-sdk:usage\": \"node --import tsx scripts/analyze-plugin-sdk-usage.ts\",\n1599|    \"plugins:boundary-report\": \"node --import tsx scripts/plugin-boundary-report.ts\",\n1600|    \"plugins:boundary-report:ci\": \"node --import tsx scripts/plugin-boundary-report.ts --summary --fail-on-cross-owner --fail-on-unclassified-unused-reserved --fail-on-eligible-compat\",\n1601|    \"plugins:boundary-report:json\": \"node --import tsx scripts/plugin-boundary-report.ts --json\",\n1602|    \"plugins:boundary-report:summary\": \"node --import tsx scripts/plugin-boundary-report.ts --summary\",\n1603|    \"plugins:assets:build\": \"node scripts/bundled-plugin-assets.mjs --phase build\",\n1604|    \"plugins:assets:copy\": \"node scripts/bundled-plugin-assets.mjs --phase copy\",\n1605|    \"plugins:inventory:check\": \"node scripts/generate-plugin-inventory-doc.mjs --check\",\n1606|    \"plugins:inventory:gen\": \"node scripts/generate-plugin-inventory-doc.mjs --write\",\n1607|    \"plugins:sync\": \"node --import tsx scripts/sync-plugin-versions.ts\",\n1608|    \"plugins:sync:check\": \"node --import tsx scripts/sync-plugin-versions.ts --check\",\n1609|    \"postinstall\": \"node scripts/postinstall-bundled-plugins.mjs\",\n1610|    \"postpack\": \"node scripts/package-changelog.mjs restore\",\n1611|    \"preinstall\": \"node scripts/preinstall-package-manager-warning.mjs\",\n1612|    \"prepack\": \"node --import tsx scripts/openclaw-prepack.ts\",\n1613|    \"prepare\": \"node scripts/prepare-git-hooks.mjs\",\n1614|    \"prepush:ci\": \"bash scripts/prepush-ci.sh\",\n1615|    \"probe:anthropic:prompt\": \"node --import tsx scripts/anthropic-prompt-probe.ts\",\n1616|    \"prompt:snapshots:check\": \"node --import tsx scripts/generate-prompt-snapshots.ts --check\",\n1617|    \"prompt:snapshots:gen\": \"node --import tsx scripts/generate-prompt-snapshots.ts --write\",\n1618|    \"prompt:snapshots:sync-codex-model\": \"node --import tsx scripts/sync-codex-model-prompt-fixture.ts\",\n1619|    \"protocol:check\": \"pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/OpenClawProtocol/GatewayModels.swift apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift\",\n1620|    \"protocol:gen\": \"node --import tsx scripts/protocol-gen.ts\",\n1621|    \"protocol:gen:swift\": \"node --import tsx scripts/protocol-gen-swift.ts\",\n1622|    \"proxy:coverage\": \"node scripts/run-node.mjs proxy coverage\",\n1623|    \"proxy:gateway\": \"node scripts/run-node.mjs proxy run -- node scripts/run-node.mjs gateway\",\n1624|    \"proxy:install-ca\": \"node --import tsx scripts/proxy-install-ca.mjs\",\n1625|    \"proxy:run\": \"node scripts/run-node.mjs proxy run\",\n1626|    \"proxy:start\": \"node scripts/run-node.mjs proxy start\",\n1627|    \"qa:e2e\": \"node --import tsx scripts/qa-e2e.ts\",\n1628|    \"qa:lab:build\": \"vite build --config extensions/qa-lab/web/vite.config.ts\",\n1629|    \"qa:lab:ui\": \"pnpm openclaw qa ui\",\n1630|    \"qa:lab:up\": \"node --import tsx scripts/qa-lab-up.ts\",\n1631|    \"qa:lab:up:fast\": \"node --import tsx scripts/qa-lab-up.ts --use-prebuilt-image --bind-ui-dist --skip-ui-build\",\n1632|    \"qa:lab:watch\": \"vite build --watch --config extensions/qa-lab/web/vite.config.ts\",\n1633|    \"qa:observability:collector-smoke\": \"pnpm qa:otel:collector-smoke && pnpm qa:prometheus:smoke\",\n1634|    \"qa:observability:smoke\": \"pnpm qa:otel:smoke && pnpm qa:prometheus:smoke\",\n1635|    \"qa:otel:collector-smoke\": \"node --import tsx scripts/qa-otel-smoke.ts --collector docker\",\n1636|    \"qa:otel:smoke\": \"node --import tsx scripts/qa-otel-smoke.ts\",\n1637|    \"qa:prometheus:smoke\": \"node scripts/run-node.mjs qa suite --provider-mode mock-openai --scenario docker-prometheus-smoke --concurrency 1 --fast\",\n1638|    \"release-metadata:check\": \"node scripts/check-release-metadata-only.mjs\",\n1639|    \"release:beta\": \"node scripts/release-candidate-checklist.mjs\",\n1640|    \"release:beta-smoke\": \"node --import tsx scripts/release-beta-smoke.ts\",\n1641|    \"release:candidate\": \"node scripts/release-candidate-checklist.mjs\",\n1642|    \"release:check\": \"pnpm release:generated:check && node --import tsx scripts/release-check.ts\",\n1643|    \"release:fast-pretag-check\": \"bash scripts/release-fast-pretag-check.sh\",\n1644|    \"release:generated:check\": \"node scripts/release-preflight.mjs --check\",\n1645|    \"release:openclaw:npm:check\": \"node --import tsx scripts/openclaw-npm-release-check.ts\",\n1646|    \"release:openclaw:npm:verify-published\": \"node --import tsx scripts/openclaw-npm-postpublish-verify.ts\",\n1647|    \"release:plugins:clawhub:check\": \"node --import tsx scripts/plugin-clawhub-release-check.ts\",\n1648|    \"release:plugins:clawhub:plan\": \"node --import tsx scripts/plugin-clawhub-release-plan.ts\",\n1649|    \"release:plugins:npm:check\": \"node --import tsx scripts/plugin-npm-release-check.ts\",\n1650|    \"release:plugins:npm:plan\": \"node --import tsx scripts/plugin-npm-release-plan.ts\",\n1651|    \"release:verify-beta\": \"node --import tsx scripts/release-verify-beta.ts\",\n1652|    \"release:prep\": \"node scripts/release-preflight.mjs --fix\",\n1653|    \"rtt\": \"node --import tsx scripts/rtt.ts\",\n1654|    \"runtime-sidecars:check\": \"node --import tsx scripts/generate-runtime-sidecar-paths-baseline.ts --check\",\n1655|    \"runtime-sidecars:gen\": \"node --import tsx scripts/generate-runtime-sidecar-paths-baseline.ts --write\",\n1656|    \"start\": \"node openclaw.mjs\",\n1657|    \"test\": \"node scripts/test-projects.mjs\",\n1658|    \"test:all\": \"pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all\",\n1659|    \"test:auth:compat\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.gateway.config.ts src/gateway/server.auth.compat-baseline.test.ts src/gateway/client.test.ts src/gateway/reconnect-gating.test.ts && node scripts/run-vitest.mjs run packages/gateway-protocol/src/connect-error-details.test.ts\",\n1660|    \"test:build:singleton\": \"node scripts/test-built-plugin-singleton.mjs\",\n1661|    \"test:build:status-message-runtime\": \"node scripts/test-built-status-message-runtime.mjs\",\n1662|    \"test:bundled\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.bundled.config.ts\",\n1663|    \"test:changed\": \"node scripts/test-projects.mjs --changed origin/main\",\n1664|    \"test:changed:max\": \"node scripts/test-projects-max.mjs --changed origin/main\",\n1665|    \"test:channels\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.channels.config.ts\",\n1666|    \"test:contracts\": \"pnpm test:contracts:channels && pnpm test:contracts:plugins\",\n1667|    \"test:contracts:channels\": \"node scripts/test-projects.mjs --maxWorkers=1 test/vitest/vitest.contracts-channel-surface.config.ts test/vitest/vitest.contracts-channel-config.config.ts test/vitest/vitest.contracts-channel-registry.config.ts test/vitest/vitest.contracts-channel-session.config.ts\",\n1668|    \"test:contracts:plugins\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.contracts-plugin.config.ts --maxWorkers=1\",\n1669|    \"test:coverage\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.unit.config.ts --coverage\",\n1670|    \"test:coverage:changed\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.unit.config.ts --coverage --changed origin/main\",\n1671|    \"test:docker:agent-bundle-mcp-tools\": \"bash scripts/e2e/agent-bundle-mcp-tools-docker.sh\",\n1672|    \"test:docker:agents-delete-shared-workspace\": \"bash scripts/e2e/agents-delete-shared-workspace-docker.sh\",\n1673|    \"test:docker:all\": \"node scripts/test-docker-all.mjs\",\n1674|    \"test:docker:browser-cdp-snapshot\": \"bash scripts/e2e/browser-cdp-snapshot-docker.sh\",\n1675|    \"test:docker:bundled-plugin-install-uninstall\": \"bash scripts/e2e/bundled-plugin-install-uninstall-docker.sh\",\n1676|    \"test:docker:cleanup\": \"bash scripts/test-cleanup-docker.sh\",\n1677|    \"test:docker:commitments-safety\": \"bash scripts/e2e/commitments-safety-docker.sh\",\n1678|    \"test:docker:config-reload\": \"bash scripts/e2e/config-reload-source-docker.sh\",\n1679|    \"test:docker:crestodian-first-run\": \"bash scripts/e2e/crestodian-first-run-docker.sh\",\n1680|    \"test:docker:crestodian-planner\": \"bash scripts/e2e/crestodian-planner-docker.sh\",\n1681|    \"test:docker:crestodian-rescue\": \"bash scripts/e2e/crestodian-rescue-docker.sh\",\n1682|    \"test:docker:cron-mcp-cleanup\": \"bash scripts/e2e/cron-mcp-cleanup-docker.sh\",\n1683|    \"test:docker:codex-media-path\": \"bash scripts/e2e/codex-media-path-docker.sh\",\n1684|    \"test:docker:doctor-switch\": \"bash scripts/e2e/doctor-install-switch-docker.sh\",\n1685|    \"test:docker:e2e-build\": \"bash scripts/e2e/build-image.sh\",\n1686|    \"test:docker:gateway-network\": \"bash scripts/e2e/gateway-network-docker.sh\",\n1687|    \"test:docker:kitchen-sink-plugin\": \"bash scripts/e2e/kitchen-sink-plugin-docker.sh\",\n1688|    \"test:docker:kitchen-sink-rpc\": \"bash scripts/e2e/kitchen-sink-rpc-docker.sh\",\n1689|    \"test:docker:live-acp-bind\": \"bash scripts/test-live-acp-bind-docker.sh\",\n1690|    \"test:docker:live-acp-bind:claude\": \"OPENCLAW_LIVE_ACP_BIND_AGENT=claude bash scripts/test-live-acp-bind-docker.sh\",\n1691|    \"test:docker:live-acp-bind:codex\": \"OPENCLAW_LIVE_ACP_BIND_AGENT=codex bash scripts/test-live-acp-bind-docker.sh\",\n1692|    \"test:docker:live-acp-bind:droid\": \"OPENCLAW_LIVE_ACP_BIND_AGENT=droid OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1 bash scripts/test-live-acp-bind-docker.sh\",\n1693|    \"test:docker:live-acp-bind:gemini\": \"OPENCLAW_LIVE_ACP_BIND_AGENT=gemini bash scripts/test-live-acp-bind-docker.sh\",\n1694|    \"test:docker:live-acp-bind:opencode\": \"OPENCLAW_LIVE_ACP_BIND_AGENT=opencode OPENCLAW_LIVE_ACP_BIND_REQUIRE_TRANSCRIPT=1 bash scripts/test-live-acp-bind-docker.sh\",\n1695|    \"test:docker:live-build\": \"bash scripts/test-live-build-docker.sh\",\n1696|    \"test:docker:live-cli-backend\": \"bash scripts/test-live-cli-backend-docker.sh\",\n1697|    \"test:docker:live-cli-backend:claude\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=claude-cli/claude-sonnet-4-6 bash scripts/test-live-cli-backend-docker.sh\",\n1698|    \"test:docker:live-cli-backend:claude-subscription\": \"OPENCLAW_LIVE_CLI_BACKEND_AUTH=subscription OPENCLAW_LIVE_CLI_BACKEND_MODEL=claude-cli/claude-sonnet-4-6 OPENCLAW_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG=1 OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0 OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1 OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=0 OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=0 bash scripts/test-live-cli-backend-docker.sh\",\n1699|    \"test:docker:live-cli-backend:claude:mcp\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=claude-cli/claude-sonnet-4-6 OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1 bash scripts/test-live-cli-backend-docker.sh\",\n1700|    \"test:docker:live-cli-backend:claude:resume\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=claude-cli/claude-sonnet-4-6 OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1 bash scripts/test-live-cli-backend-docker.sh\",\n1701|    \"test:docker:live-cli-backend:gemini\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=google-gemini-cli/gemini-3-flash-preview bash scripts/test-live-cli-backend-docker.sh\",\n1702|    \"test:docker:live-cli-backend:gemini:mcp\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=google-gemini-cli/gemini-3-flash-preview OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1 bash scripts/test-live-cli-backend-docker.sh\",\n1703|    \"test:docker:live-cli-backend:gemini:resume\": \"OPENCLAW_LIVE_CLI_BACKEND_MODEL=google-gemini-cli/gemini-3-flash-preview OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1 bash scripts/test-live-cli-backend-docker.sh\",\n1704|    \"test:docker:live-codex-bind\": \"OPENCLAW_LIVE_CODEX_BIND=1 OPENCLAW_LIVE_CODEX_TEST_FILES=src/gateway/gateway-codex-bind.live.test.ts bash scripts/test-live-codex-harness-docker.sh\",\n1705|    \"test:docker:live-codex-harness\": \"bash scripts/test-live-codex-harness-docker.sh\",\n1706|    \"test:docker:live-codex-media-path\": \"OPENCLAW_LIVE_CODEX_HARNESS_AUTH=api-key OPENCLAW_LIVE_CODEX_HARNESS_CHAT_IMAGE_PROBE=1 OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 bash scripts/test-live-codex-harness-docker.sh\",\n1707|    \"test:docker:live-codex-npm-plugin\": \"bash scripts/e2e/codex-npm-plugin-live-docker.sh\",\n1708|    \"test:docker:live-plugin-tool\": \"bash scripts/e2e/live-plugin-tool-docker.sh\",\n1709|    \"test:docker:live-subagent-announce\": \"bash scripts/test-live-subagent-announce-docker.sh\",\n1710|    \"test:docker:live-gateway\": \"bash scripts/test-live-gateway-models-docker.sh\",\n1711|    \"test:docker:live-gateway:claude\": \"OPENCLAW_LIVE_GATEWAY_PROVIDERS=claude-cli OPENCLAW_LIVE_GATEWAY_MODELS=claude-cli/claude-sonnet-4-6 bash scripts/test-live-gateway-models-docker.sh\",\n1712|    \"test:docker:live-gateway:gemini\": \"OPENCLAW_LIVE_GATEWAY_PROVIDERS=google-gemini-cli OPENCLAW_LIVE_GATEWAY_MODELS=google-gemini-cli/gemini-3.1-pro-preview bash scripts/test-live-gateway-models-docker.sh\",\n1713|    \"test:docker:live-models\": \"bash scripts/test-live-models-docker.sh\",\n1714|    \"test:docker:live-models:claude\": \"OPENCLAW_LIVE_PROVIDERS=claude-cli OPENCLAW_LIVE_MODELS=claude-cli/claude-sonnet-4-6 bash scripts/test-live-models-docker.sh\",\n1715|    \"test:docker:live-models:gemini\": \"OPENCLAW_LIVE_PROVIDERS=google-gemini-cli OPENCLAW_LIVE_MODELS=google-gemini-cli/gemini-3.1-pro-preview bash scripts/test-live-models-docker.sh\",\n1716|    \"test:docker:live:all\": \"node scripts/run-with-env.mjs OPENCLAW_DOCKER_ALL_LIVE_MODE=only -- node scripts/test-docker-all.mjs\",\n1717|    \"test:docker:local:all\": \"node scripts/run-with-env.mjs OPENCLAW_DOCKER_ALL_LIVE_MODE=skip -- node scripts/test-docker-all.mjs\",\n1718|    \"test:docker:mcp-channels\": \"bash scripts/e2e/mcp-channels-docker.sh\",\n1719|    \"test:docker:multi-node-update\": \"bash scripts/e2e/multi-node-update-docker.sh\",\n1720|    \"test:docker:codex-on-demand\": \"bash scripts/e2e/codex-on-demand-docker.sh\",\n1721|    \"test:docker:npm-onboard-channel-agent\": \"bash scripts/e2e/npm-onboard-channel-agent-docker.sh\",\n1722|    \"test:docker:npm-onboard-discord-channel-agent\": \"OPENCLAW_NPM_ONBOARD_CHANNEL=discord bash scripts/e2e/npm-onboard-channel-agent-docker.sh\",\n1723|    \"test:docker:npm-onboard-slack-channel-agent\": \"OPENCLAW_NPM_ONBOARD_CHANNEL=slack bash scripts/e2e/npm-onboard-channel-agent-docker.sh\",\n1724|    \"test:docker:npm-telegram-live\": \"bash scripts/e2e/npm-telegram-live-docker.sh\",\n1725|    \"test:docker:onboard\": \"bash scripts/e2e/onboard-docker.sh\",\n1726|    \"test:docker:release-user-journey\": \"bash scripts/e2e/release-user-journey-docker.sh\",\n1727|    \"test:docker:release-typed-onboarding\": \"bash scripts/e2e/release-typed-onboarding-docker.sh\",\n1728|    \"test:docker:release-media-memory\": \"bash scripts/e2e/release-media-memory-docker.sh\",\n1729|    \"test:docker:release-upgrade-user-journey\": \"bash scripts/e2e/release-upgrade-user-journey-docker.sh\",\n1730|    \"test:docker:release-plugin-marketplace\": \"bash scripts/e2e/release-plugin-marketplace-docker.sh\",\n1731|    \"test:docker:openai-chat-tools\": \"bash scripts/e2e/openai-chat-tools-docker.sh\",\n1732|    \"test:docker:openai-image-auth\": \"bash scripts/e2e/openai-image-auth-docker.sh\",\n1733|    \"test:docker:openai-web-search-minimal\": \"bash scripts/e2e/openai-web-search-minimal-docker.sh\",\n1734|    \"test:docker:openwebui\": \"bash scripts/e2e/openwebui-docker.sh\",\n1735|    \"test:docker:plugin-binding-command-escape\": \"bash scripts/e2e/plugin-binding-command-escape-docker.sh\",\n1736|    \"test:docker:plugin-lifecycle-matrix\": \"bash scripts/e2e/plugin-lifecycle-matrix-docker.sh\",\n1737|    \"test:docker:plugin-update\": \"bash scripts/e2e/plugin-update-unchanged-docker.sh\",\n1738|    \"test:docker:plugins\": \"bash scripts/e2e/plugins-docker.sh\",\n1739|    \"test:docker:published-upgrade-survivor\": \"env OPENCLAW_UPGRADE_SURVIVOR_PUBLISHED_BASELINE=1 OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=${OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC:-openclaw@latest} OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT=${OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT:-1500s} bash scripts/e2e/upgrade-survivor-docker.sh\",\n1740|    \"test:docker:qr\": \"bash scripts/e2e/qr-import-docker.sh\",\n1741|    \"test:docker:rerun\": \"node scripts/docker-e2e-rerun.mjs\",\n1742|    \"test:docker:root-managed-vps-upgrade\": \"env OPENCLAW_UPGRADE_SURVIVOR_PUBLISHED_BASELINE=1 OPENCLAW_UPGRADE_SURVIVOR_ROOT_MANAGED_VPS=1 OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=${OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC:-openclaw@2026.5.7} OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT=${OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT:-1500s} bash scripts/e2e/upgrade-survivor-docker.sh\",\n1743|    \"test:docker:session-runtime-context\": \"bash scripts/e2e/session-runtime-context-docker.sh\",\n1744|    \"test:docker:skill-install\": \"bash scripts/e2e/skill-install-docker.sh\",\n1745|    \"test:docker:timings\": \"node scripts/docker-e2e-timings.mjs\",\n1746|    \"test:docker:update-channel-switch\": \"bash scripts/e2e/update-channel-switch-docker.sh\",\n1747|    \"test:docker:update-corrupt-plugin\": \"bash scripts/e2e/update-corrupt-plugin-docker.sh\",\n1748|    \"test:docker:update-migration\": \"env OPENCLAW_UPGRADE_SURVIVOR_PUBLISHED_BASELINE=1 OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=${OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC:-openclaw@2026.4.23} OPENCLAW_UPGRADE_SURVIVOR_SCENARIO=${OPENCLAW_UPGRADE_SURVIVOR_SCENARIO:-plugin-deps-cleanup} bash scripts/e2e/upgrade-survivor-docker.sh\",\n1749|    \"test:docker:update-restart-auth\": \"env OPENCLAW_UPGRADE_SURVIVOR_UPDATE_RESTART_MODE=auto-auth OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT=${OPENCLAW_UPGRADE_SURVIVOR_DOCKER_RUN_TIMEOUT:-1500s} bash scripts/e2e/upgrade-survivor-docker.sh\",\n1750|    \"test:docker:upgrade-survivor\": \"bash scripts/e2e/upgrade-survivor-docker.sh\",\n1751|    \"test:e2e\": \"pnpm test:e2e:gateway && pnpm test:ui:e2e\",\n1752|    \"test:e2e:gateway\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts\",\n1753|    \"test:e2e:openshell\": \"node scripts/run-with-env.mjs OPENCLAW_E2E_OPENSHELL=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts extensions/openshell/src/backend.e2e.test.ts\",\n1754|    \"test:e2e:status-corrupt-plugin-deps\": \"bash scripts/e2e/status-corrupt-plugin-deps.sh\",\n1755|    \"test:extension\": \"node scripts/test-extension.mjs\",\n1756|    \"test:extensions\": \"node scripts/test-projects.mjs extensions\",\n1757|    \"test:extensions:batch\": \"node scripts/test-extension-batch.mjs\",\n1758|    \"test:extensions:memory\": \"node scripts/profile-extension-memory.mjs\",\n1759|    \"test:extensions:package-boundary\": \"node scripts/check-extension-package-tsc-boundary.mjs\",\n1760|    \"test:extensions:package-boundary:canary\": \"node scripts/check-extension-package-tsc-boundary.mjs --mode=canary\",\n1761|    \"test:extensions:package-boundary:compile\": \"node scripts/check-extension-package-tsc-boundary.mjs --mode=compile\",\n1762|    \"test:fast\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.unit.config.ts\",\n1763|    \"test:force\": \"node --import tsx scripts/test-force.ts\",\n1764|    \"test:gateway\": \"node scripts/run-with-env.mjs OPENCLAW_GATEWAY_PROJECT_SHARDS=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.gateway.config.ts\",\n1765|    \"test:gateway:cpu-scenarios\": \"node scripts/check-gateway-cpu-scenarios.mjs\",\n1766|    \"test:gateway:memory-fd-repro\": \"node scripts/check-memory-fd-repro.mjs\",\n1767|    \"test:gateway:watch-regression\": \"node scripts/check-gateway-watch-regression.mjs\",\n1768|    \"test:install:e2e\": \"bash scripts/test-install-sh-e2e-docker.sh\",\n1769|    \"test:install:e2e:anthropic\": \"OPENCLAW_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh\",\n1770|    \"test:install:e2e:openai\": \"OPENCLAW_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh\",\n1771|    \"test:install:smoke\": \"bash scripts/test-install-sh-docker.sh\",\n1772|    \"test:live\": \"node scripts/test-live.mjs\",\n1773|    \"test:live:cache\": \"node scripts/run-with-env.mjs OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 -- node --import tsx scripts/check-live-cache.ts\",\n1774|    \"test:live:codex-harness\": \"node scripts/test-live.mjs --codex-harness -- src/gateway/gateway-codex-harness.live.test.ts\",\n1775|    \"test:live:crestodian-rescue-channel\": \"node scripts/run-with-env.mjs OPENCLAW_LIVE_CRESTODIAN_RESCUE_CHANNEL=1 -- node scripts/test-live.mjs -- src/crestodian/rescue-channel.live.test.ts\",\n1776|    \"test:live:gateway-profiles\": \"node scripts/test-live.mjs -- src/gateway/gateway-models.profiles.live.test.ts\",\n1777|    \"test:live:media\": \"node --import tsx scripts/test-live-media.ts\",\n1778|    \"test:live:media:image\": \"node --import tsx scripts/test-live-media.ts image\",\n1779|    \"test:live:media:music\": \"node --import tsx scripts/test-live-media.ts music\",\n1780|    \"test:live:media:video\": \"node --import tsx scripts/test-live-media.ts video\",\n1781|    \"test:live:models-profiles\": \"node scripts/test-live.mjs -- src/agents/models.profiles.live.test.ts\",\n1782|    \"test:macos:ci\": \"node scripts/test-projects.mjs src/daemon/launchd.test.ts src/daemon/runtime-paths.test.ts src/daemon/runtime-binary.test.ts src/infra/brew.test.ts src/infra/stable-node-path.test.ts test/scripts/vitest-process-group.test.ts test/scripts/package-mac-app.test.ts test/scripts/package-mac-dist.test.ts test/scripts/create-dmg.test.ts\",\n1783|    \"test:max\": \"node scripts/test-projects-max.mjs\",\n1784|    \"test:parallels:linux\": \"bash scripts/e2e/parallels-linux-smoke.sh\",\n1785|    \"test:parallels:macos\": \"bash scripts/e2e/parallels-macos-smoke.sh\",\n1786|    \"test:parallels:npm-update\": \"bash scripts/e2e/parallels-npm-update-smoke.sh\",\n1787|    \"test:parallels:windows\": \"bash scripts/e2e/parallels-windows-smoke.sh\",\n1788|    \"test:perf:budget\": \"node scripts/test-perf-budget.mjs\",\n1789|    \"test:perf:changed:bench\": \"node scripts/bench-test-changed.mjs\",\n1790|    \"test:perf:groups\": \"node scripts/test-group-report.mjs\",\n1791|    \"test:perf:groups:compare\": \"node scripts/test-group-report.mjs --compare\",\n1792|    \"test:perf:hotspots\": \"node scripts/test-hotspots.mjs\",\n1793|    \"test:perf:imports\": \"node scripts/test-projects-imports.mjs\",\n1794|    \"test:perf:imports:changed\": \"node scripts/test-projects-imports.mjs --changed origin/main\",\n1795|    \"test:perf:profile:main\": \"node scripts/run-vitest-profile.mjs main\",\n1796|    \"test:perf:profile:runner\": \"node scripts/run-vitest-profile.mjs runner\",\n1797|    \"test:plugins:gateway-gauntlet\": \"node scripts/check-plugin-gateway-gauntlet.mjs\",\n1798|    \"test:plugins:kitchen-sink-live\": \"bash -lc 'if [ -x \\\"$HOME/.local/bin/openclaw-testbox-env\\\" ]; then exec \\\"$HOME/.local/bin/openclaw-testbox-env\\\" pnpm openclaw qa suite --provider-mode live-frontier --scenario kitchen-sink-live-openai; fi; exec pnpm openclaw qa suite --provider-mode live-frontier --scenario kitchen-sink-live-openai'\",\n1799|    \"test:plugins:kitchen-sink-rpc\": \"node --import tsx scripts/e2e/kitchen-sink-rpc-walk.mjs\",\n1800|    \"test:sectriage\": \"node scripts/run-with-env.mjs OPENCLAW_GATEWAY_PROJECT_SHARDS=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.gateway.config.ts && node scripts/run-vitest.mjs run --config test/vitest/vitest.unit.config.ts --exclude src/daemon/launchd.integration.test.ts --exclude src/process/exec.test.ts\",\n1801|    \"test:serial\": \"node scripts/test-projects-serial.mjs\",\n1802|    \"test:stability:gateway\": \"node scripts/run-with-env.mjs OPENCLAW_VITEST_MAX_WORKERS=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.gateway.config.ts src/gateway/gateway-stability.test.ts && node scripts/run-with-env.mjs OPENCLAW_VITEST_MAX_WORKERS=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.logging.config.ts src/logging/diagnostic-stability-bundle.test.ts && node scripts/run-with-env.mjs OPENCLAW_VITEST_MAX_WORKERS=1 -- node scripts/run-vitest.mjs run --config test/vitest/vitest.infra.config.ts src/infra/fatal-error-hooks.test.ts\",\n1803|    \"test:cli-response:contract\": \"node scripts/build-all.mjs cliStartup && node scripts/test-cli-startup-bench-budget.mjs --preset response --runs 1 --warmup 0 --timeout-ms 10000 --skip-baseline\",\n1804|    \"test:startup:bench\": \"node --import tsx scripts/bench-cli-startup.ts\",\n1805|    \"test:startup:bench:check\": \"node scripts/test-cli-startup-bench-budget.mjs\",\n1806|    \"test:startup:bench:save\": \"node --import tsx scripts/bench-cli-startup.ts --preset all --runs 5 --warmup 1 --output .artifacts/cli-startup-bench-all.json\",\n1807|    \"test:startup:bench:smoke\": \"node scripts/ensure-cli-startup-build.mjs && node --import tsx scripts/bench-cli-startup.ts --preset real --case gatewayStatusJson --runs 1 --warmup 0 --output .artifacts/cli-startup-bench-smoke.json\",\n1808|    \"test:startup:bench:update\": \"node scripts/test-update-cli-startup-bench.mjs\",\n1809|    \"test:startup:gateway\": \"node --import tsx scripts/bench-gateway-startup.ts\",\n1810|    \"test:restart:gateway\": \"node --import tsx scripts/bench-gateway-restart.ts\",\n1811|    \"test:startup:memory\": \"node scripts/ensure-cli-startup-build.mjs && node scripts/check-cli-startup-memory.mjs\",\n1812|    \"test:ui\": \"pnpm ui:i18n:check && pnpm lint:ui:no-raw-window-open && pnpm --dir ui test\",\n1813|    \"test:ui:e2e\": \"node scripts/ensure-playwright-chromium.mjs && node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner\",\n1814|    \"test:unit\": \"pnpm test:unit:fast && node scripts/run-vitest.mjs run --config test/vitest/vitest.unit.config.ts\",\n1815|    \"test:unit:fast\": \"node scripts/run-vitest.mjs run --config test/vitest/vitest.unit-fast.config.ts\",\n1816|    \"test:unit:fast:audit\": \"node scripts/test-unit-fast-audit.mjs\",\n1817|    \"test:voicecall:closedloop\": \"node scripts/test-voicecall-closedloop.mjs\",\n1818|    \"test:watch\": \"node scripts/test-projects.mjs --watch\",\n1819|    \"test:windows:ci\": \"node scripts/test-projects.mjs src/shared/runtime-import.test.ts src/plugins/import-specifier.test.ts src/process/exec.windows.test.ts src/process/windows-command.test.ts src/infra/windows-install-roots.test.ts extensions/lobster/src/lobster-runner.test.ts test/scripts/format-generated-module.test.ts test/scripts/npm-runner.test.ts test/scripts/pnpm-runner.test.ts test/scripts/run-with-env.test.ts test/scripts/ui.test.ts test/scripts/vitest-process-group.test.ts\",\n1820|    \"tool-display:check\": \"node --import tsx scripts/tool-display.ts --check\",\n1821|    \"tool-display:write\": \"node --import tsx scripts/tool-display.ts --write\",\n1822|    \"ts-topology\": \"node --import tsx scripts/ts-topology.ts\",\n1823|    \"tsgo\": \"pnpm tsgo:core\",\n1824|    \"tsgo:all\": \"node scripts/run-tsgo.mjs -b tsconfig.projects.json\",\n1825|    \"tsgo:core\": \"node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo\",\n1826|    \"tsgo:core:all\": \"node scripts/run-tsgo.mjs -b tsconfig.core.projects.json\",\n1827|    \"tsgo:core:test\": \"node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo\",\n1828|    \"tsgo:extensions\": \"node scripts/run-tsgo.mjs -p tsconfig.extensions.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions.tsbuildinfo\",\n1829|    \"tsgo:extensions:all\": \"node scripts/run-tsgo.mjs -b tsconfig.extensions.projects.json\",\n1830|    \"tsgo:extensions:test\": \"node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.extensions.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions-test.tsbuildinfo\",\n1831|    \"tsgo:prod\": \"pnpm tsgo:core && pnpm tsgo:extensions\",\n1832|    \"tsgo:profile\": \"node scripts/profile-tsgo.mjs\",\n1833|    \"tsgo:test\": \"pnpm tsgo:core:test && pnpm tsgo:extensions:test\",\n1834|    \"tsgo:test:extensions\": \"pnpm tsgo:extensions:test\",\n1835|    \"tsgo:test:packages\": \"node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.packages.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-packages.tsbuildinfo\",\n1836|    \"tsgo:test:src\": \"node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.src.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-src.tsbuildinfo\",\n1837|    \"tsgo:test:ui\": \"node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.ui.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-ui.tsbuildinfo\",\n1838|    \"tui\": \"node scripts/run-node.mjs tui\",\n1839|    \"tui:dev\": \"node scripts/run-with-env.mjs OPENCLAW_PROFILE=dev -- node scripts/run-node.mjs --dev tui\",\n1840|    \"tui:pty:test:watch\": \"node --import tsx scripts/dev/tui-pty-test-watch.ts\",\n1841|    \"tui:pty:test:watch:all\": \"node --import tsx scripts/dev/tui-pty-test-watch.ts --mode all\",\n1842|    \"tui:pty:test:watch:fake\": \"node --import tsx scripts/dev/tui-pty-test-watch.ts --mode fake\",\n1843|    \"tui:pty:test:watch:local\": \"node --import tsx scripts/dev/tui-pty-test-watch.ts --mode local\",\n1844|    \"ui:build\": \"node scripts/ui.js build\",\n1845|    \"ui:dev\": \"node scripts/ui.js dev\",\n1846|    \"ui:i18n:check\": \"node --import tsx scripts/control-ui-i18n.ts check\",\n1847|    \"ui:i18n:report\": \"node --import tsx scripts/control-ui-i18n-report.ts\",\n1848|    \"ui:i18n:sync\": \"node --import tsx scripts/control-ui-i18n.ts sync --write\",\n1849|    \"ui:install\": \"node scripts/ui.js install\",\n1850|    \"verify\": \"node scripts/verify.mjs\"\n1851|  },\n1852|  \"dependencies\": {\n1853|    \"@agentclientprotocol/sdk\": \"0.22.1\",\n1854|    \"@anthropic-ai/sdk\": \"0.98.0\",\n1855|    \"@clack/core\": \"1.3.1\",\n1856|    \"@clack/prompts\": \"1.4.0\",\n1857|    \"@earendil-works/pi-tui\": \"0.76.0\",\n1858|    \"@google/genai\": \"2.6.0\",\n1859|    \"@grammyjs/runner\": \"2.0.3\",\n1860|    \"@grammyjs/transformer-throttler\": \"1.2.1\",\n1861|    \"@homebridge/ciao\": \"1.3.9\",\n1862|    \"@lydell/node-pty\": \"1.2.0-beta.12\",\n1863|    \"@mistralai/mistralai\": \"2.2.5\",\n1864|    \"@modelcontextprotocol/sdk\": \"1.29.0\",\n1865|    \"@mozilla/readability\": \"0.6.0\",\n1866|    \"@openclaw/fs-safe\": \"0.3.0\",\n1867|    \"@openclaw/proxyline\": \"0.3.3\",\n1868|    \"chalk\": \"5.6.2\",\n1869|    \"chokidar\": \"5.0.0\",\n1870|    \"clawpdf\": \"0.2.0\",\n1871|    \"commander\": \"14.0.3\",\n1872|    \"croner\": \"10.0.1\",\n1873|    \"cross-spawn\": \"7.0.6\",\n1874|    \"diff\": \"9.0.0\",\n1875|    \"dotenv\": \"17.4.2\",\n1876|    \"express\": \"5.2.1\",\n1877|    \"file-type\": \"22.0.1\",\n1878|    \"glob\": \"13.0.6\",\n1879|    \"grammy\": \"1.43.0\",\n1880|    \"highlight.js\": \"11.11.1\",\n1881|    \"hosted-git-info\": \"9.0.3\",\n1882|    \"ignore\": \"7.0.5\",\n1883|    \"jiti\": \"2.7.0\",\n1884|    \"json5\": \"2.2.3\",\n1885|    \"jszip\": \"3.10.1\",\n1886|    \"kysely\": \"0.29.2\",\n1887|    \"linkedom\": \"0.18.12\",\n1888|    \"minimatch\": \"10.2.5\",\n1889|    \"node-edge-tts\": \"1.2.10\",\n1890|    \"openai\": \"6.39.0\",\n1891|    \"partial-json\": \"0.1.7\",\n1892|    \"playwright-core\": \"1.60.0\",\n1893|    \"proper-lockfile\": \"4.1.2\",\n1894|    \"qrcode\": \"1.5.4\",\n1895|    \"quickjs-wasi\": \"3.0.0\",\n1896|    \"rastermill\": \"0.3.1\",\n1897|    \"tar\": \"7.5.15\",\n1898|    \"tree-sitter-bash\": \"0.25.1\",\n1899|    \"tslog\": \"4.10.2\",\n1900|    \"typebox\": \"1.1.38\",\n1901|    \"typescript\": \"6.0.3\",\n1902|    \"undici\": \"8.3.0\",\n1903|    \"web-push\": \"3.6.7\",\n1904|    \"web-tree-sitter\": \"0.26.9\",\n1905|    \"ws\": \"8.21.0\",\n1906|    \"yaml\": \"2.9.0\",\n1907|    \"zod\": \"4.4.3\"\n1908|  },\n1909|  \"devDependencies\": {\n1910|    \"@a2ui/lit\": \"0.10.0\",\n1911|    \"@copilotkit/aimock\": \"1.27.1\",\n1912|    \"@grammyjs/types\": \"3.27.3\",\n1913|    \"@lit-labs/signals\": \"0.3.0\",\n1914|    \"@lit/context\": \"1.1.6\",\n1915|    \"@mdx-js/mdx\": \"3.1.1\",\n1916|    \"@shikijs/core\": \"4.1.0\",\n1917|    \"@shikijs/engine-javascript\": \"4.1.0\",\n1918|    \"@shikijs/engine-oniguruma\": \"4.1.0\",\n1919|    \"@types/cross-spawn\": \"6.0.6\",\n1920|    \"@types/express\": \"5.0.6\",\n1921|    \"@types/hosted-git-info\": \"3.0.5\",\n1922|    \"@types/markdown-it\": \"14.1.2\",\n1923|    \"@types/node\": \"25.9.1\",\n1924|    \"@types/proper-lockfile\": \"4.1.4\",\n1925|    \"@types/ws\": \"8.18.1\",\n1926|    \"@typescript/native-preview\": \"7.0.0-dev.20260527.2\",\n1927|    \"@vitest/coverage-v8\": \"4.1.7\",\n1928|    \"esbuild\": \"0.28.0\",\n1929|    \"jscpd\": \"4.2.4\",\n1930|    \"jsdom\": \"29.1.1\",\n1931|    \"lit\": \"3.3.3\",\n1932|    \"oxfmt\": \"0.52.0\",\n1933|    \"oxlint\": \"1.67.0\",\n1934|    \"oxlint-tsgolint\": \"0.23.0\",\n1935|    \"shiki\": \"4.1.0\",\n1936|    \"signal-utils\": \"0.21.1\",\n1937|    \"tsdown\": \"0.22.0\",\n1938|    \"tsx\": \"4.22.3\",\n1939|    \"unrun\": \"0.3.0\",\n1940|    \"vitest\": \"4.1.7\"\n1941|  },\n1942|  \"optionalDependencies\": {\n1943|    \"sqlite-vec\": \"0.1.9\"\n1944|  },\n1945|  \"overrides\": {\n1946|    \"axios\": \"1.16.0\",\n1947|    \"fast-uri\": \"3.1.2\",\n1948|    \"follow-redirects\": \"1.16.0\",\n1949|    \"ip-address\": \"10.2.0\",\n1950|    \"node-domexception\": \"npm:@nolyfill/domexception@1.0.28\",\n1951|    \"uuid\": \"14.0.0\"\n1952|  },\n1953|  \"engines\": {\n1954|    \"node\": \">=22.19.0\"\n1955|  },\n1956|  \"packageManager\": \"pnpm@11.2.2+sha512.36e6621fad506178936455e70247b8808ef4ec25797a9f437a93281a020484e2607f6a469a22e982987c3dbb8866e3071514ab10a4a1749e06edcd1ec118436f\"\n1957|}\n1958|", "total_lines": 1957, "file_size": 106656, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
  Não precisa clonar o repositório para fazer essa análise. Vou fazer diretamente a partir do projeto público `openclaw/openclaw`.

  **Problema**
  Hoje a maioria das assistentes de IA é cloud-first e atrelada a plataformas específicas. Quem quer uma IA mais próxima, executada nos próprios dispositivos e respondendo onde a pessoa já está WhatsApp/Telegram/Slack/iMessage/etc.), precisa concatenar várias ferramentas, contas e gateways separados.  O “problema” resolvido pelo OpenClaw é justamente esse: juntar control plane local da IA com acesso multi-canal em um só lugar, evitando fragmentação. Problema central = dificuldade de ter uma IA pessoal sempre disponível, unificada e conectada aos apps que o usuário já usa, sem perder controle.

  **Tema**
  Assistente de IA pessoal local-first e multi-canal. Não é só um app de chat ou só um gateway de API: é uma camada de controle local que une agentes, canais de mensagem, sessões, memória, automação e nós/dispositivos extras.

  **Razão do hype**
  1. Multi-canal  
     O README lista muitos canais: WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, IRC, Microsoft Teams, Matrix, Feishu, LINE, Mattermost, Nextcloud Talk, Nostr, Synology Chat, Tlon, Twitch, Zalo, Zalo Personal, WeChat, QQ, WebChat. Esse alcance é raro em uma base só.
  2. Local-first  
     A proposta é rodar o gateway na máquina do usuário, com CLI como `openclaw onboard` e suporte a daemon/systemd, o que combina com privacidade e offline-first.
  3. Multi-agent routing  
     Menciona rotear por canal, conta ou peer para agentes/workspaces isolados. Isso vira “produto operacional” para quem usa várias contas.
  4. UX de uso contínuo  
     Voice Wake, Talk Mode, Canvas, Live Canvas e apps companion em macOS/iOS/Android. Isso emplaca uma narrativa de “assistente sempre ligada”.
  5. Ecossistema  
     Plugin SDK, skills, habilidades e manifestos estruturados geram rede de valor: marketplace tipo ClawHub e docs oficiais ampliam o crescimento orgânico.
  6. Engenharia visível  
     O `package.json` e estrutura mostram projeto grande, maduro: monorepo TypeScript, muitos comandos de release, Docker, QA Labs, vitest, audit de deps, shrinkwrap, engenharia de release cuidada.
  7. Expressividade  
     Tem estrutura de repo bem políciada: `AGENTS.md` no root, docs sincronizados, release flows, onboarding CLI, checklist de release. Isso ajuda a manter crescimento sem perder coerência.

  **Tecnologias**
  - Linguagem principal: TypeScript
  - Runtime: Node 22.19+ / Node 24 recomendado; TypeScript 6
  - Package manager: pnpm
  - Testes: vitest
  - Frameworks/build-runtime de plugin: tsdown, tsx, tsgo/native TS preview, build scripts próprias
  - SDK/contratos: Zod, TypeBox, Kysely
  - Infra/runtime: express, undici, ws, chokidar, dotenv, commander, croner, jszip, yaml, qrcode, jiti
  - Canais/providers: grammy, @anthropic-ai/sdk, openai, @google/genai, @mistralai/mistralai, @modelcontextprotocol/sdk
  - Browser/media/web: playwright-core, @mozilla/readability, linkedom, node-edge-tts, rastermill, web-push
  - Observabilidade/telemetria: tslog, diagnóstico e métricas próprias, OTEL
  - QA/E2E: Docker, vitest, scripts e2e grande em bash, instâncias live testing
  - iOS/macOS/Android: Swift/SwiftLint, XcodeGen, Gradle
  - Outros: sqlite-vec opcional, hosted-git-info, glob, partial-json, web-tree-sitter

  **Arquitetura em uma linha**
  Gateway local em TypeScript com plugin SDK extensível, vários canais integrados, CLI parruda, apps companion opcionais e ferramentas próprias de memória, voz, agente e sandbox.

  Se quiser, posso criar um resumo curto no formato de seção “Problema | Tema | Razão hype | Tecnologias” ou até com 3 frases comerciais para pitch ou card.  


c0:
    [{"id": "chatcmpl-tool-94881a0d315ad557", "call_id": "chatcmpl-tool-94881a0d315ad557", "response_item_id": "fc_chatcmpl-tool-94881a0d315ad557", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice && git clone https://github.com/ollama/ollama.git 2>&1\", \"timeout\": 300}"}}]


c0:
    [{"id": "chatcmpl-tool-8aad4318a26c1d7c", "call_id": "chatcmpl-tool-8aad4318a26c1d7c", "response_item_id": "fc_chatcmpl-tool-8aad4318a26c1d7c", "type": "function", "function": {"name": "read_file", "arguments": "{\"limit\": 200, \"path\": \"/home/ice/ollama/README.md\"}"}}, {"id": "chatcmpl-tool-b7eb9edd3dfc821a", "call_id": "chatcmpl-tool-b7eb9edd3dfc821a", "response_item_id": "fc_chatcmpl-tool-b7eb9edd3dfc821a", "type": "function", "function": {"name": "search_files", "arguments": "{\"path\": \"/home/ice/ollama\", \"pattern\": \"go.mod\", \"target\": \"files\"}"}}]


c0:
  {"content": "1|<p align=\"center\">\n2|  <a href=\"https://ollama.com\">\n3|    <img src=\"https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7\" alt=\"ollama\" width=\"200\"/>\n4|  </a>\n5|</p>\n6|\n7|# Ollama\n8|\n9|Start building with open models.\n10|\n11|## Download\n12|\n13|### macOS\n14|\n15|```shell\n16|curl -fsSL https://ollama.com/install.sh | sh\n17|```\n18|\n19|or [download manually](https://ollama.com/download/Ollama.dmg)\n20|\n21|### Windows\n22|\n23|```shell\n24|irm https://ollama.com/install.ps1 | iex\n25|```\n26|\n27|or [download manually](https://ollama.com/download/OllamaSetup.exe)\n28|\n29|### Linux\n30|\n31|```shell\n32|curl -fsSL https://ollama.com/install.sh | sh\n33|```\n34|\n35|[Manual install instructions](https://docs.ollama.com/linux#manual-install)\n36|\n37|### Docker\n38|\n39|The official [Ollama Docker image](https://hub.docker.com/r/ollama/ollama) `ollama/ollama` is available on Docker Hub.\n40|\n41|### Libraries\n42|\n43|- [ollama-python](https://github.com/ollama/ollama-python)\n44|- [ollama-js](https://github.com/ollama/ollama-js)\n45|\n46|### Community\n47|\n48|- [Discord](https://discord.gg/ollama)\n49|- [𝕏 (Twitter)](https://x.com/ollama)\n50|- [Reddit](https://reddit.com/r/ollama)\n51|\n52|## Get started\n53|\n54|```\n55|ollama\n56|```\n57|\n58|You'll be prompted to run a model or connect Ollama to your existing agents or applications such as `Claude Code`, `OpenClaw`, `OpenCode` , `Codex`, `Copilot`,  and more.\n59|\n60|### Coding\n61|\n62|To launch a specific integration:\n63|\n64|```\n65|ollama launch claude\n66|```\n67|\n68|Supported integrations include [Claude Code](https://docs.ollama.com/integrations/claude-code), [Codex](https://docs.ollama.com/integrations/codex), [Copilot CLI](https://docs.ollama.com/integrations/copilot-cli), [Droid](https://docs.ollama.com/integrations/droid), and [OpenCode](https://docs.ollama.com/integrations/opencode).\n69|\n70|### AI assistant\n71|\n72|Use [OpenClaw](https://docs.ollama.com/integrations/openclaw) to turn Ollama into a personal AI assistant across WhatsApp, Telegram, Slack, Discord, and more:\n73|\n74|```\n75|ollama launch openclaw\n76|```\n77|\n78|### Chat with a model\n79|\n80|Run and chat with [Gemma 3](https://ollama.com/library/gemma3):\n81|\n82|```\n83|ollama run gemma3\n84|```\n85|\n86|See [ollama.com/library](https://ollama.com/library) for the full list.\n87|\n88|See the [quickstart guide](https://docs.ollama.com/quickstart) for more details.\n89|\n90|## REST API\n91|\n92|Ollama has a REST API for running and managing models.\n93|\n94|```\n95|curl http://localhost:11434/api/chat -d '{\n96|  \"model\": \"gemma3\",\n97|  \"messages\": [{\n98|    \"role\": \"user\",\n99|    \"content\": \"Why is the sky blue?\"\n100|  }],\n101|  \"stream\": false\n102|}'\n103|```\n104|\n105|See the [API documentation](https://docs.ollama.com/api) for all endpoints.\n106|\n107|### Python\n108|\n109|```\n110|pip install ollama\n111|```\n112|\n113|```python\n114|from ollama import chat\n115|\n116|response = chat(model='gemma3', messages=[\n117|  {\n118|    'role': 'user',\n119|    'content': 'Why is the sky blue?',\n120|  },\n121|])\n122|print(response.message.content)\n123|```\n124|\n125|### JavaScript\n126|\n127|```\n128|npm i ollama\n129|```\n130|\n131|```javascript\n132|import ollama from \"ollama\";\n133|\n134|const response = await ollama.chat({\n135|  model: \"gemma3\",\n136|  messages: [{ role: \"user\", content: \"Why is the sky blue?\" }],\n137|});\n138|console.log(response.message.content);\n139|```\n140|\n141|## Supported backends\n142|\n143|- [llama.cpp](https://github.com/ggml-org/llama.cpp) project founded by Georgi Gerganov.\n144|\n145|## Documentation\n146|\n147|- [CLI reference](https://docs.ollama.com/cli)\n148|- [REST API reference](https://docs.ollama.com/api)\n149|- [Importing models](https://docs.ollama.com/import)\n150|- [Modelfile reference](https://docs.ollama.com/modelfile)\n151|- [Building from source](https://github.com/ollama/ollama/blob/main/docs/development.md)\n152|\n153|## Community Integrations\n154|\n155|> Want to add your project? Open a pull request.\n156|\n157|### Chat Interfaces\n158|\n159|#### Web\n160|\n161|- [Open WebUI](https://github.com/open-webui/open-webui) - Extensible, self-hosted AI interface\n162|- [Onyx](https://github.com/onyx-dot-app/onyx) - Connected AI workspace\n163|- [LibreChat](https://github.com/danny-avila/LibreChat) - Enhanced ChatGPT clone with multi-provider support\n164|- [Lobe Chat](https://github.com/lobehub/lobe-chat) - Modern chat framework with plugin ecosystem ([docs](https://lobehub.com/docs/self-hosting/examples/ollama))\n165|- [NextChat](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web) - Cross-platform ChatGPT UI ([docs](https://docs.nextchat.dev/models/ollama))\n166|- [Perplexica](https://github.com/ItzCrazyKns/Perplexica) - AI-powered search engine, open-source Perplexity alternative\n167|- [big-AGI](https://github.com/enricoros/big-AGI) - AI suite for professionals\n168|- [Lollms WebUI](https://github.com/ParisNeo/lollms-webui) - Multi-model web interface\n169|- [ChatOllama](https://github.com/sugarforever/chat-ollama) - Chatbot with knowledge bases\n170|- [Bionic GPT](https://github.com/bionic-gpt/bionic-gpt) - On-premise AI platform\n171|- [Chatbot UI](https://github.com/ivanfioravanti/chatbot-ollama) - ChatGPT-style web interface\n172|- [Hollama](https://github.com/fmaclen/hollama) - Minimal web interface\n173|- [Chatbox](https://github.com/Bin-Huang/Chatbox) - Desktop and web AI client\n174|- [chat](https://github.com/swuecho/chat) - Chat web app for teams\n175|- [Ollama RAG Chatbot](https://github.com/datvodinh/rag-chatbot.git) - Chat with multiple PDFs using RAG\n176|- [Tkinter-based client](https://github.com/chyok/ollama-gui) - Python desktop client\n177|\n178|#### Desktop\n179|\n180|- [Dify.AI](https://github.com/langgenius/dify) - LLM app development platform\n181|- [AnythingLLM](https://github.com/Mintplex-Labs/anything-llm) - All-in-one AI app for Mac, Windows, and Linux\n182|- [Maid](https://github.com/Mobile-Artificial-Intelligence/maid) - Cross-platform mobile and desktop client\n183|- [Witsy](https://github.com/nbonamy/witsy) - AI desktop app for Mac, Windows, and Linux\n184|- [Cherry Studio](https://github.com/kangfenmao/cherry-studio) - Multi-provider desktop client\n185|- [Ollama App](https://github.com/JHubi1/ollama-app) - Multi-platform client for desktop and mobile\n186|- [PyGPT](https://github.com/szczyglis-dev/py-gpt) - AI desktop assistant for Linux, Windows, and Mac\n187|- [Alpaca](https://github.com/Jeffser/Alpaca) - GTK4 client for Linux and macOS\n188|- [SwiftChat](https://github.com/aws-samples/swift-chat) - Cross-platform including iOS, Android, and Apple Vision Pro\n189|- [Enchanted](https://github.com/AugustDev/enchanted) - Native macOS and iOS client\n190|- [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) - Multi-model desktop runner\n191|- [Ollama Grid Search](https://github.com/dezoito/ollama-grid-search) - Evaluate and compare models\n192|- [macai](https://github.com/Renset/macai) - macOS client for Ollama and ChatGPT\n193|- [AI Studio](https://github.com/MindWorkAI/AI-Studio) - Multi-provider desktop IDE\n194|- [Reins](https://github.com/ibrahimcetin/reins) - Parameter tuning and reasoning model support\n195|- [ConfiChat](https://github.com/1runeberg/confichat) - Privacy-focused with optional encryption\n196|- [LLocal.in](https://github.com/kartikm7/llocal) - Electron desktop client\n197|- [MindMac](https://mindmac.app) - AI chat client for Mac\n198|- [Msty](https://msty.app) - Multi-model desktop client\n199|- [BoltAI for Mac](https://boltai.com) - AI chat client for Mac\n200|- [IntelliBar](https://intellibar.app/) - AI-powered assistant for macOS\n201|", "total_lines": 356, "file_size": 19150, "truncated": true, "hint": "Use offset=201 to continue reading (showing 1-200 of 356 lines)", "is_binary": false, "is_image": false} read_file 


c0:
    [{"id": "chatcmpl-tool-aff9e47d26e0bd19", "call_id": "chatcmpl-tool-aff9e47d26e0bd19", "response_item_id": "fc_chatcmpl-tool-aff9e47d26e0bd19", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/ollama/go.mod\"}"}}, {"id": "chatcmpl-tool-84ad67e14ba17a04", "call_id": "chatcmpl-tool-84ad67e14ba17a04", "response_item_id": "fc_chatcmpl-tool-84ad67e14ba17a04", "type": "function", "function": {"name": "search_files", "arguments": "{\"limit\": 40, \"path\": \"/home/ice/ollama\", \"pattern\": \"^[A-Za-z].*\", \"target\": \"files\"}"}}]


c0:
  {"content": "1|module github.com/ollama/ollama\n2|\n3|go 1.26.0\n4|\n5|require (\n6|\tgithub.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf\n7|\tgithub.com/containerd/console v1.0.3\n8|\tgithub.com/gin-gonic/gin v1.10.0\n9|\tgithub.com/golang/protobuf v1.5.4 // indirect\n10|\tgithub.com/google/go-cmp v0.7.0\n11|\tgithub.com/google/uuid v1.6.0\n12|\tgithub.com/ledongthuc/pdf v0.0.0-20250511090121-5959a4027728\n13|\tgithub.com/mattn/go-sqlite3 v1.14.24\n14|\tgithub.com/olekukonko/tablewriter v0.0.5\n15|\tgithub.com/spf13/cobra v1.7.0\n16|\tgithub.com/stretchr/testify v1.10.0\n17|\tgithub.com/x448/float16 v0.8.4\n18|\tgolang.org/x/sync v0.17.0\n19|\tgolang.org/x/sys v0.37.0\n20|)\n21|\n22|require (\n23|\tgithub.com/agnivade/levenshtein v1.1.1\n24|\tgithub.com/charmbracelet/bubbletea v1.3.10\n25|\tgithub.com/charmbracelet/lipgloss v1.1.0\n26|\tgithub.com/d4l3k/go-bfloat16 v0.0.0-20211005043715-690c3bdd05f1\n27|\tgithub.com/dlclark/regexp2 v1.11.5\n28|\tgithub.com/emirpasic/gods/v2 v2.0.0-alpha\n29|\tgithub.com/klauspost/compress v1.18.3\n30|\tgithub.com/mattn/go-runewidth v0.0.16\n31|\tgithub.com/nlpodyssey/gopickle v0.3.0\n32|\tgithub.com/pdevine/tensor v0.0.0-20240510204454-f88f4562727c\n33|\tgithub.com/pelletier/go-toml/v2 v2.2.2\n34|\tgithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c\n35|\tgithub.com/tkrajina/typescriptify-golang-structs v0.2.0\n36|\tgithub.com/tree-sitter/go-tree-sitter v0.25.0\n37|\tgithub.com/tree-sitter/tree-sitter-cpp v0.23.4\n38|\tgithub.com/wk8/go-ordered-map/v2 v2.1.8\n39|\tgolang.org/x/image v0.22.0\n40|\tgolang.org/x/mod v0.30.0\n41|\tgolang.org/x/tools v0.38.0\n42|\tgonum.org/v1/gonum v0.15.0\n43|)\n44|\n45|require (\n46|\tgithub.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect\n47|\tgithub.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect\n48|\tgithub.com/bahlo/generic-list-go v0.2.0 // indirect\n49|\tgithub.com/buger/jsonparser v1.1.1 // indirect\n50|\tgithub.com/bytedance/sonic/loader v0.1.1 // indirect\n51|\tgithub.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect\n52|\tgithub.com/charmbracelet/x/ansi v0.10.1 // indirect\n53|\tgithub.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect\n54|\tgithub.com/charmbracelet/x/term v0.2.1 // indirect\n55|\tgithub.com/chewxy/hm v1.0.0 // indirect\n56|\tgithub.com/chewxy/math32 v1.11.0 // indirect\n57|\tgithub.com/cloudwego/base64x v0.1.4 // indirect\n58|\tgithub.com/cloudwego/iasm v0.2.0 // indirect\n59|\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n60|\tgithub.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect\n61|\tgithub.com/gogo/protobuf v1.3.2 // indirect\n62|\tgithub.com/google/flatbuffers v24.3.25+incompatible // indirect\n63|\tgithub.com/kr/text v0.2.0 // indirect\n64|\tgithub.com/lucasb-eyer/go-colorful v1.2.0 // indirect\n65|\tgithub.com/mailru/easyjson v0.7.7 // indirect\n66|\tgithub.com/mattn/go-localereader v0.0.1 // indirect\n67|\tgithub.com/mattn/go-pointer v0.0.1 // indirect\n68|\tgithub.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect\n69|\tgithub.com/muesli/cancelreader v0.2.2 // indirect\n70|\tgithub.com/muesli/termenv v0.16.0 // indirect\n71|\tgithub.com/pkg/errors v0.9.1 // indirect\n72|\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n73|\tgithub.com/rivo/uniseg v0.4.7 // indirect\n74|\tgithub.com/tkrajina/go-reflector v0.5.5 // indirect\n75|\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect\n76|\tgithub.com/xtgo/set v1.0.0 // indirect\n77|\tgo4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect\n78|\tgolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect\n79|\tgorgonia.org/vecf32 v0.9.0 // indirect\n80|\tgorgonia.org/vecf64 v0.9.0 // indirect\n81|)\n82|\n83|require (\n84|\tgithub.com/bytedance/sonic v1.11.6 // indirect\n85|\tgithub.com/gabriel-vasile/mimetype v1.4.3 // indirect\n86|\tgithub.com/gin-contrib/cors v1.7.2\n87|\tgithub.com/gin-contrib/sse v0.1.0 // indirect\n88|\tgithub.com/go-playground/locales v0.14.1 // indirect\n89|\tgithub.com/go-playground/universal-translator v0.18.1 // indirect\n90|\tgithub.com/go-playground/validator/v10 v10.20.0 // indirect\n91|\tgithub.com/goccy/go-json v0.10.2 // indirect\n92|\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n93|\tgithub.com/json-iterator/go v1.1.12 // indirect\n94|\tgithub.com/klauspost/cpuid/v2 v2.2.7 // indirect\n95|\tgithub.com/leodido/go-urn v1.4.0 // indirect\n96|\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n97|\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n98|\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n99|\tgithub.com/spf13/pflag v1.0.5 // indirect\n100|\tgithub.com/twitchyliquid64/golang-asm v0.15.1 // indirect\n101|\tgithub.com/ugorji/go/codec v1.2.12 // indirect\n102|\tgolang.org/x/arch v0.8.0 // indirect\n103|\tgolang.org/x/crypto v0.43.0\n104|\tgolang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect\n105|\tgolang.org/x/net v0.46.0 // indirect\n106|\tgolang.org/x/term v0.36.0\n107|\tgolang.org/x/text v0.30.0\n108|\tgoogle.golang.org/protobuf v1.34.1\n109|\tgopkg.in/yaml.v3 v3.0.1\n110|)\n111|", "total_lines": 110, "file_size": 4648, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
    [{"id": "chatcmpl-tool-9e535881efbe9094", "call_id": "chatcmpl-tool-9e535881efbe9094", "response_item_id": "fc_chatcmpl-tool-9e535881efbe9094", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"ls -la /home/ice/ollama\"}"}}]


c0:
  {"output": "total 309\ndrwxrwxr-x 41 ice ice    58 May 30 23:05 .\ndrwx------ 30 ice ice    36 May 30 23:05 ..\n-rw-rw-r--  1 ice ice    65 May 30 23:05 .dockerignore\ndrwxrwxr-x  8 ice ice    13 May 30 23:05 .git\n-rw-rw-r--  1 ice ice   860 May 30 23:05 .gitattributes\ndrwxrwxr-x  4 ice ice     4 May 30 23:05 .github\n-rw-rw-r--  1 ice ice   164 May 30 23:05 .gitignore\n-rw-rw-r--  1 ice ice  1139 May 30 23:05 .golangci.yaml\n-rw-rw-r--  1 ice ice  2863 May 30 23:05 CMakeLists.txt\n-rw-rw-r--  1 ice ice   704 May 30 23:05 CMakePresets.json\n-rw-rw-r--  1 ice ice  3678 May 30 23:05 CONTRIBUTING.md\n-rw-rw-r--  1 ice ice 12525 May 30 23:05 Dockerfile\n-rw-rw-r--  1 ice ice  1058 May 30 23:05 LICENSE\n-rw-rw-r--  1 ice ice     6 May 30 23:05 LLAMA_CPP_VERSION\n-rw-rw-r--  1 ice ice    41 May 30 23:05 MLX_C_VERSION\n-rw-rw-r--  1 ice ice    41 May 30 23:05 MLX_VERSION\n-rw-rw-r--  1 ice ice 19150 May 30 23:05 README.md\n-rw-rw-r--  1 ice ice  1003 May 30 23:05 SECURITY.md\ndrwxrwxr-x  2 ice ice     5 May 30 23:05 anthropic\ndrwxrwxr-x  3 ice ice     8 May 30 23:05 api\ndrwxrwxr-x 18 ice ice    22 May 30 23:05 app\ndrwxrwxr-x  2 ice ice     3 May 30 23:05 auth\ndrwxrwxr-x  3 ice ice     6 May 30 23:05 cmake\ndrwxrwxr-x  8 ice ice    22 May 30 23:05 cmd\ndrwxrwxr-x  4 ice ice    65 May 30 23:05 convert\ndrwxrwxr-x  2 ice ice    26 May 30 23:05 discover\ndrwxrwxr-x  7 ice ice    34 May 30 23:05 docs\ndrwxrwxr-x  2 ice ice     5 May 30 23:05 envconfig\ndrwxrwxr-x  2 ice ice     8 May 30 23:05 format\ndrwxrwxr-x  5 ice ice     6 May 30 23:05 fs\n-rw-rw-r--  1 ice ice  4648 May 30 23:05 go.mod\n-rw-rw-r--  1 ice ice 43699 May 30 23:05 go.sum\ndrwxrwxr-x  2 ice ice     4 May 30 23:05 harmony\ndrwxrwxr-x  3 ice ice    26 May 30 23:05 integration\ndrwxrwxr-x  5 ice ice     5 May 30 23:05 internal\ndrwxrwxr-x  2 ice ice    10 May 30 23:05 kvcache\ndrwxrwxr-x  4 ice ice     5 May 30 23:05 llama\ndrwxrwxr-x  2 ice ice    21 May 30 23:05 llm\ndrwxrwxr-x  2 ice ice     4 May 30 23:05 logutil\n-rw-rw-r--  1 ice ice   180 May 30 23:05 main.go\ndrwxrwxr-x  2 ice ice     6 May 30 23:05 manifest\ndrwxrwxr-x  2 ice ice     8 May 30 23:05 middleware\ndrwxrwxr-x  4 ice ice     9 May 30 23:05 ml\ndrwxrwxr-x  6 ice ice     7 May 30 23:05 model\ndrwxrwxr-x  2 ice ice     7 May 30 23:05 openai\ndrwxrwxr-x  2 ice ice     5 May 30 23:05 parser\ndrwxrwxr-x  2 ice ice     6 May 30 23:05 progress\ndrwxrwxr-x  2 ice ice    13 May 30 23:05 readline\ndrwxrwxr-x  2 ice ice     4 May 30 23:05 runner\ndrwxrwxr-x  3 ice ice    16 May 30 23:05 scripts\ndrwxrwxr-x  3 ice ice    52 May 30 23:05 server\ndrwxrwxr-x  3 ice ice    46 May 30 23:05 template\ndrwxrwxr-x  2 ice ice     6 May 30 23:05 thinking\ndrwxrwxr-x  3 ice ice    12 May 30 23:05 tokenizer\ndrwxrwxr-x  2 ice ice     6 May 30 23:05 tools\ndrwxrwxr-x  5 ice ice     5 May 30 23:05 types\ndrwxrwxr-x  2 ice ice     3 May 30 23:05 version\ndrwxrwxr-x 14 ice ice    14 May 30 23:05 x", "exit_code": 0, "error": null} terminal 


c0:
    [{"id": "chatcmpl-tool-9a0ad0ba2f2c8c35", "call_id": "chatcmpl-tool-9a0ad0ba2f2c8c35", "response_item_id": "fc_chatcmpl-tool-9a0ad0ba2f2c8c35", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/ollama/main.go\"}"}}, {"id": "chatcmpl-tool-990064d42500fa5b", "call_id": "chatcmpl-tool-990064d42500fa5b", "response_item_id": "fc_chatcmpl-tool-990064d42500fa5b", "type": "function", "function": {"name": "read_file", "arguments": "{\"limit\": 200, \"path\": \"/home/ice/ollama/docs/development.md\"}"}}]


c0:
  {"content": "1|package main\n2|\n3|import (\n4|\t\"context\"\n5|\n6|\t\"github.com/spf13/cobra\"\n7|\n8|\t\"github.com/ollama/ollama/cmd\"\n9|)\n10|\n11|func main() {\n12|\tcobra.CheckErr(cmd.NewCLI().ExecuteContext(context.Background()))\n13|}\n14|", "total_lines": 13, "file_size": 180, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
  {"content": "1|# Development\n2|\n3|Install prerequisites:\n4|\n5|- [Go](https://go.dev/doc/install)\n6|- [CMake](https://cmake.org/download/) 3.24 or newer\n7|- C/C++ compiler: Clang on macOS, Visual Studio 2022 C++ tools on Windows, or GCC/Clang on Linux\n8|- [Ninja](https://github.com/ninja-build/ninja/releases) in `PATH` is recommended, especially on Windows\n9|\n10|For pure Go iteration against an existing native payload, run Ollama from the repository root:\n11|\n12|```shell\n13|go run . serve\n14|```\n15|\n16|> [!NOTE]\n17|> Ollama includes native code compiled with CGO.  From time to time these data structures can change and CGO can get out of sync resulting in unexpected crashes.  You can force a full build of the native code by running `go clean -cache` first. \n18|\n19|## Native build model\n20|\n21|For a fresh checkout, or after changing native code, build from the repository root. On macOS arm64, this builds Metal inference. On all other platforms this builds CPU-only inference. It builds the Go binary at the repository root and installs the native runtime payload under `build/lib/ollama`.\n22|\n23|```shell\n24|cmake -B build .\n25|cmake --build build --parallel 8\n26|./ollama serve\n27|```\n28|\n29|To install into a standard prefix layout:\n30|\n31|```shell\n32|cmake --install build --prefix /path/to/install\n33|```\n34|\n35|On all platforms except macOS arm64, to build GPU backends select the backends explicitly:\n36|\n37|```shell\n38|cmake -B build . -DOLLAMA_LLAMA_BACKENDS=\"cuda_v13;vulkan\"\n39|cmake --build build --parallel 8\n40|```\n41|\n42|Supported backend values are `cuda_v12`, `cuda_v13`, `rocm_v7_1`, `rocm_v7_2`, `vulkan`, `cuda_jetpack5`, and `cuda_jetpack6`.\n43|\n44|Use standard CMake architecture overrides to narrow GPU builds for local hardware:\n45|\n46|```shell\n47|# CUDA\n48|cmake -B build . -DOLLAMA_LLAMA_BACKENDS=cuda_v13 -DCMAKE_CUDA_ARCHITECTURES=native\n49|\n50|# ROCm / HIP\n51|cmake -B build . -DOLLAMA_LLAMA_BACKENDS=rocm_v7_2 -DCMAKE_HIP_ARCHITECTURES=gfx1100\n52|```\n53|\n54|You can tune GGML build options by setting `GGML_*` values during configure. For example, to build CUDA v12 for Pascal without flash attention kernels:\n55|\n56|```shell\n57|cmake -B build . -DOLLAMA_LLAMA_BACKENDS=cuda_v12 -DCMAKE_CUDA_ARCHITECTURES=61 -DGGML_CUDA_FA=OFF\n58|```\n59|\n60|## macOS (Apple Silicon)\n61|\n62|Additional prerequisites:\n63|\n64|MLX Metal requires the Metal toolchain. Install [Xcode](https://developer.apple.com/xcode/) first, then:\n65|\n66|```shell\n67|xcodebuild -downloadComponent MetalToolchain\n68|```\n69|\n70|## Windows\n71|\n72|Additional prerequisites:\n73|\n74|- [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) including the Native Desktop Workload\n75|- (Optional) AMD GPU support\n76|    - [ROCm](https://rocm.docs.amd.com/en/latest/)\n77|- (Optional) NVIDIA GPU support\n78|    - [CUDA SDK](https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_type=exe_network)\n79|- (Optional) Vulkan GPU support\n80|    - [Vulkan SDK](https://vulkan.lunarg.com/sdk/home) - useful for AMD/Intel GPUs\n81|- (Optional) MLX engine support\n82|    - [CUDA 13+ SDK](https://developer.nvidia.com/cuda-downloads)\n83|    - [cuDNN 9+](https://developer.nvidia.com/cudnn)\n84|\n85|For Ninja builds, run CMake from a Developer PowerShell/Command Prompt or another shell where the Visual Studio compiler is available.\n86|\n87|> Building for Vulkan requires VULKAN_SDK environment variable:\n88|> \n89|> PowerShell\n90|> ```powershell\n91|> $env:VULKAN_SDK=\"C:\\VulkanSDK\\<version>\"\n92|> ```\n93|> CMD\n94|> ```cmd\n95|> set VULKAN_SDK=C:\\VulkanSDK\\<version>\n96|> ```\n97|\n98|## Windows (ARM)\n99|\n100|Windows ARM does not support additional acceleration libraries at this time.\n101|\n102|## Linux\n103|\n104|Additional prerequisites:\n105|\n106|- (Optional) AMD GPU support\n107|    - [ROCm](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html)\n108|- (Optional) NVIDIA GPU support\n109|    - [CUDA SDK](https://developer.nvidia.com/cuda-downloads)\n110|- (Optional) Vulkan GPU support\n111|    - [Vulkan SDK](https://vulkan.lunarg.com/sdk/home) - useful for AMD/Intel GPUs\n112|    - Or install via package manager: `sudo apt install vulkan-sdk` (Ubuntu/Debian) or `sudo dnf install vulkan-sdk` (Fedora/CentOS)\n113|- (Optional) MLX engine support\n114|    - [CUDA 13+ SDK](https://developer.nvidia.com/cuda-downloads)\n115|    - [cuDNN 9+](https://developer.nvidia.com/cudnn)\n116|    - OpenBLAS/LAPACK: `sudo apt install libopenblas-dev liblapack-dev liblapacke-dev` (Ubuntu/Debian)\n117|> [!IMPORTANT]\n118|> Ensure prerequisites are in `PATH` before running CMake.\n119|\n120|## MLX Engine (Optional)\n121|\n122|The MLX engine enables running safetensor based models. On macOS arm64, MLX is enabled by default. On other platforms, MLX backends are selected with `OLLAMA_MLX_BACKENDS`.\n123|\n124|### CUDA\n125|\n126|Requires CUDA 13+ and [cuDNN](https://developer.nvidia.com/cudnn) 9+.\n127|\n128|```shell\n129|cmake -B build . -DOLLAMA_MLX_BACKENDS=cuda_v13\n130|cmake --build build --parallel 8\n131|```\n132|\n133|### Local MLX source overrides\n134|\n135|To build against a local checkout of MLX and/or MLX-C (useful for development), set environment variables before running CMake:\n136|\n137|```shell\n138|export OLLAMA_MLX_SOURCE=/path/to/mlx\n139|export OLLAMA_MLX_C_SOURCE=/path/to/mlx-c\n140|```\n141|\n142|On macOS arm64:\n143|\n144|```shell\n145|OLLAMA_MLX_SOURCE=../mlx OLLAMA_MLX_C_SOURCE=../mlx-c cmake -B build .\n146|cmake --build build --parallel 8\n147|```\n148|\n149|For CUDA:\n150|\n151|```powershell\n152|$env:OLLAMA_MLX_SOURCE=\"../mlx\"\n153|$env:OLLAMA_MLX_C_SOURCE=\"../mlx-c\"\n154|cmake -B build . -DOLLAMA_MLX_BACKENDS=cuda_v13\n155|cmake --build build --parallel 8\n156|```\n157|\n158|## Docker\n159|\n160|```shell\n161|docker build .\n162|```\n163|\n164|### ROCm\n165|\n166|```shell\n167|docker build --build-arg FLAVOR=rocm .\n168|```\n169|\n170|## Running tests\n171|\n172|To run tests, use `go test`:\n173|\n174|```shell\n175|go test ./...\n176|```\n177|\n178|## Library detection\n179|\n180|Ollama looks for native helper binaries and acceleration libraries in installed and local development layouts:\n181|\n182|* `../lib/ollama` for standard installs where `ollama` is under `bin/`\n183|* `./lib/ollama` for Windows release-style payloads and local dist output\n184|* `.` for macOS release artifacts that colocate helpers with `ollama`\n185|* `build/lib/ollama` and `dist/<platform>/lib/ollama` for local development builds\n186|\n187|If the libraries are not found, Ollama will not run with any acceleration libraries.\n188|", "total_lines": 187, "file_size": 5884, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
    [{"id": "chatcmpl-tool-b0786b50dd7f6394", "call_id": "chatcmpl-tool-b0786b50dd7f6394", "response_item_id": "fc_chatcmpl-tool-b0786b50dd7f6394", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"ls -la /home/ice/ollama/cmd && ls -la /home/ice/ollama/api && ls -la /home/ice/ollama/server\"}"}}, {"id": "chatcmpl-tool-a0959b1c90c9e04c", "call_id": "chatcmpl-tool-a0959b1c90c9e04c", "response_item_id": "fc_chatcmpl-tool-a0959b1c90c9e04c", "type": "function", "function": {"name": "search_files", "arguments": "{\"limit\": 50, \"path\": \"/home/ice/ollama\", \"pattern\": \"PROBLEM|ISSUE|TODO|FIXME\", \"target\": \"content\"}"}}]


c0:
  {"output": "total 143\ndrwxrwxr-x  8 ice ice    22 May 30 23:05 .\ndrwxrwxr-x 41 ice ice    58 May 30 23:05 ..\n-rw-rw-r--  1 ice ice   343 May 30 23:05 background_unix.go\n-rw-rw-r--  1 ice ice   355 May 30 23:05 background_windows.go\ndrwxrwxr-x  2 ice ice     5 May 30 23:05 bench\n-rw-rw-r--  1 ice ice 69858 May 30 23:05 cmd.go\n-rw-rw-r--  1 ice ice  9325 May 30 23:05 cmd_launcher_test.go\n-rw-rw-r--  1 ice ice 67895 May 30 23:05 cmd_test.go\ndrwxrwxr-x  2 ice ice     5 May 30 23:05 config\n-rw-rw-r--  1 ice ice    61 May 30 23:05 editor_unix.go\n-rw-rw-r--  1 ice ice    62 May 30 23:05 editor_windows.go\n-rw-rw-r--  1 ice ice 21963 May 30 23:05 interactive.go\n-rw-rw-r--  1 ice ice  3922 May 30 23:05 interactive_test.go\ndrwxrwxr-x  3 ice ice     3 May 30 23:05 internal\ndrwxrwxr-x  2 ice ice    45 May 30 23:05 launch\ndrwxrwxr-x  2 ice ice     3 May 30 23:05 runner\n-rw-rw-r--  1 ice ice   514 May 30 23:05 start.go\n-rw-rw-r--  1 ice ice   703 May 30 23:05 start_darwin.go\n-rw-rw-r--  1 ice ice   265 May 30 23:05 start_default.go\n-rw-rw-r--  1 ice ice  2908 May 30 23:05 start_windows.go\ndrwxrwxr-x  2 ice ice    10 May 30 23:05 tui\n-rw-rw-r--  1 ice ice  1642 May 30 23:05 warn_thinking_test.go\ntotal 72\ndrwxrwxr-x  3 ice ice     8 May 30 23:05 .\ndrwxrwxr-x 41 ice ice    58 May 30 23:05 ..\n-rw-rw-r--  1 ice ice 14515 May 30 23:05 client.go\n-rw-rw-r--  1 ice ice 10186 May 30 23:05 client_test.go\ndrwxrwxr-x  7 ice ice     8 May 30 23:05 examples\n-rw-rw-r--  1 ice ice 41109 May 30 23:05 types.go\n-rw-rw-r--  1 ice ice 22934 May 30 23:05 types_test.go\n-rw-rw-r--  1 ice ice  2768 May 30 23:05 types_typescript_test.go\ntotal 438\ndrwxrwxr-x  3 ice ice    52 May 30 23:05 .\ndrwxrwxr-x 41 ice ice    58 May 30 23:05 ..\n-rw-rw-r--  1 ice ice  2264 May 30 23:05 auth.go\n-rw-rw-r--  1 ice ice  3148 May 30 23:05 auth_test.go\n-rw-rw-r--  1 ice ice 14808 May 30 23:05 cloud_proxy.go\n-rw-rw-r--  1 ice ice  9937 May 30 23:05 cloud_proxy_test.go\n-rw-rw-r--  1 ice ice 38581 May 30 23:05 create.go\n-rw-rw-r--  1 ice ice  6686 May 30 23:05 create_test.go\n-rw-rw-r--  1 ice ice 11924 May 30 23:05 download.go\n-rw-rw-r--  1 ice ice   598 May 30 23:05 fixblobs.go\n-rw-rw-r--  1 ice ice  2134 May 30 23:05 fixblobs_test.go\n-rw-rw-r--  1 ice ice  2226 May 30 23:05 gemma4_test.go\n-rw-rw-r--  1 ice ice 35504 May 30 23:05 images.go\n-rw-rw-r--  1 ice ice 23143 May 30 23:05 images_test.go\n-rw-rw-r--  1 ice ice  3719 May 30 23:05 inference_request_log.go\ndrwxrwxr-x  8 ice ice     8 May 30 23:05 internal\n-rw-rw-r--  1 ice ice   950 May 30 23:05 logprob.go\n-rw-rw-r--  1 ice ice  3463 May 30 23:05 model.go\n-rw-rw-r--  1 ice ice   610 May 30 23:05 model_caches.go\n-rw-rw-r--  1 ice ice 21555 May 30 23:05 model_list_cache.go\n-rw-rw-r--  1 ice ice  7198 May 30 23:05 model_list_cache_test.go\n-rw-rw-r--  1 ice ice 10533 May 30 23:05 model_recommendations.go\n-rw-rw-r--  1 ice ice 19984 May 30 23:05 model_recommendations_test.go\n-rw-rw-r--  1 ice ice  2004 May 30 23:05 model_resolver.go\n-rw-rw-r--  1 ice ice  4764 May 30 23:05 model_resolver_test.go\n-rw-rw-r--  1 ice ice 19721 May 30 23:05 model_show_cache.go\n-rw-rw-r--  1 ice ice 16576 May 30 23:05 model_show_cache_test.go\n-rw-rw-r--  1 ice ice  4017 May 30 23:05 prompt.go\n-rw-rw-r--  1 ice ice 17385 May 30 23:05 prompt_test.go\n-rw-rw-r--  1 ice ice  9342 May 30 23:05 quantization.go\n-rw-rw-r--  1 ice ice   567 May 30 23:05 quantization_stub_test.go\n-rw-rw-r--  1 ice ice  6103 May 30 23:05 quantization_test.go\n-rw-rw-r--  1 ice ice  2386 May 30 23:05 renderer_resolution.go\n-rw-rw-r--  1 ice ice 92836 May 30 23:05 routes.go\n-rw-rw-r--  1 ice ice 33821 May 30 23:05 routes_cloud_test.go\n-rw-rw-r--  1 ice ice 58713 May 30 23:05 routes_create_test.go\n-rw-rw-r--  1 ice ice 13258 May 30 23:05 routes_debug_test.go\n-rw-rw-r--  1 ice ice  4354 May 30 23:05 routes_delete_test.go\n-rw-rw-r--  1 ice ice 11691 May 30 23:05 routes_generate_renderer_test.go\n-rw-rw-r--  1 ice ice 99928 May 30 23:05 routes_generate_test.go\n-rw-rw-r--  1 ice ice 21317 May 30 23:05 routes_harmony_streaming_test.go\n-rw-rw-r--  1 ice ice  1839 May 30 23:05 routes_list_test.go\n-rw-rw-r--  1 ice ice  6998 May 30 23:05 routes_options_test.go\n-rw-rw-r--  1 ice ice  3497 May 30 23:05 routes_request_log_test.go\n-rw-rw-r--  1 ice ice 34191 May 30 23:05 routes_test.go\n-rw-rw-r--  1 ice ice  9571 May 30 23:05 routes_web_experimental_test.go\n-rw-rw-r--  1 ice ice 55894 May 30 23:05 sched.go\n-rw-rw-r--  1 ice ice 71098 May 30 23:05 sched_test.go\n-rw-rw-r--  1 ice ice    79 May 30 23:05 sparse_common.go\n-rw-rw-r--  1 ice ice   307 May 30 23:05 sparse_windows.go\n-rw-rw-r--  1 ice ice   256 May 30 23:05 test_home_test.go\n-rw-rw-r--  1 ice ice  9355 May 30 23:05 upload.go", "exit_code": 0, "error": null} terminal 


c0:
    [{"id": "chatcmpl-tool-936100dc13c8d249", "call_id": "chatcmpl-tool-936100dc13c8d249", "response_item_id": "fc_chatcmpl-tool-936100dc13c8d249", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"ls -la /home/ice/ollama/llama && ls -la /home/ice/ollama/cmd/bench && ls -la /home/ice/ollama/ml\"}"}}]


c0:
  {"output": "total 19\ndrwxrwxr-x  4 ice ice  5 May 30 23:05 .\ndrwxrwxr-x 41 ice ice 58 May 30 23:05 ..\n-rw-rw-r--  1 ice ice 19 May 30 23:05 .gitignore\ndrwxrwxr-x  2 ice ice 10 May 30 23:05 compat\ndrwxrwxr-x  2 ice ice  4 May 30 23:05 server\ntotal 39\ndrwxrwxr-x 2 ice ice     5 May 30 23:05 .\ndrwxrwxr-x 8 ice ice    22 May 30 23:05 ..\n-rw-rw-r-- 1 ice ice  4671 May 30 23:05 README.md\n-rw-rw-r-- 1 ice ice 17289 May 30 23:05 bench.go\n-rw-rw-r-- 1 ice ice 37549 May 30 23:05 bench_test.go\ntotal 61\ndrwxrwxr-x  4 ice ice     9 May 30 23:05 .\ndrwxrwxr-x 41 ice ice    58 May 30 23:05 ..\ndrwxrwxr-x  3 ice ice     3 May 30 23:05 backend\n-rw-rw-r--  1 ice ice 12109 May 30 23:05 backend.go\n-rw-rw-r--  1 ice ice 22869 May 30 23:05 device.go\n-rw-rw-r--  1 ice ice  7091 May 30 23:05 device_test.go\ndrwxrwxr-x  4 ice ice    10 May 30 23:05 nn\n-rw-rw-r--  1 ice ice  2879 May 30 23:05 path.go\n-rw-rw-r--  1 ice ice  3632 May 30 23:05 path_test.go", "exit_code": 0, "error": null} terminal 


c0:
  Análise concluída do repositório `ollama/ollama`. Aqui está o resumo:

  ---

  **Problema**
  Rodar LLMs localmente é tradicionalmente complexo, exigindo instalação e configuração de runtimes Python/PyTorch, drivers CUDA/ROCm, gerenciamento de modelos (download, empacotamento, quantização) e integrações customizadas com ferramentas de desenvolvedor. Não há uma interface padronizada e simples para executar modelos open-source como Llama, Gemma, Qwen, DeepSeek, etc.

  **Tema**
  Plataforma de inferência e execução local de modelos de linguagem LLMs — um runtime unificado para baixar, empacotar e rodar modelos de IA diretamente na máquina do usuário.

  **Razão hype**
  - **Simplicidade absurda**: instala com `curl | sh` e roda com `ollama run <modelo>`, análogo ao `docker run`.
  - **Ecossistema aberto**: suporta dezenas de modelos populares em uma interface única.
  - **API e SDKs facilmente integráveis**: REST API + libs `ollama-python` e `ollama-js`.
  - **Performance GPU real**: aceleração CUDA, ROCm, Vulkan e Metal/MLX, com backend nativo otimizado.
  - **Privacidade**: modelos rodam 100% local, sem enviar dados para nuvem.
  - **Adoção massiva**: 172k+ stars no GitHub, integrações com Claude Code, Copilot, VS Code, Discord, Telegram, etc.

  **Tecnologias principais**
  - **Go** — core da aplicação (CLI, API REST, agendamento, runtime coordination).
  - **CMake + C/C++ (CGO)** — runtime nativo de inferência (baseado em `llama.cpp`/GGML) com kernels GPU.
  - **Geradores de backend**: CUDA, ROCm, Vulkan, Apple Metal/MLX.
  - **Gin** — framework HTTP para o servidor de API.
  - **Cobra** — framework CLI.
  - **SQLite** (`go-sqlite3`) — armazenamento local de modelos e histórico.
  - **Protobuf** — serialização em comunicação interna e APIs.
  - **Tree-sitter** — suporte a parsing/linguagens.
  - **Python + JavaScript** — clientes oficiais.

  Nenhum problema técnico inesperado foi encontrado na estrutura do repositório; o projeto está bem documentado e organizado com build desenvolvimento via `go run .` ou CMake para código nativo.  


c0:
    [{"id": "chatcmpl-tool-82aefde4ec8b20d9", "call_id": "chatcmpl-tool-82aefde4ec8b20d9", "response_item_id": "fc_chatcmpl-tool-82aefde4ec8b20d9", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice && git clone https://github.com/Significant-Gravitas/AutoGPT.git 2>&1 | tail -20\"}"}}]


c0:
    [{"id": "chatcmpl-tool-8c2ffc428e9aea7c", "call_id": "chatcmpl-tool-8c2ffc428e9aea7c", "response_item_id": "fc_chatcmpl-tool-8c2ffc428e9aea7c", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"ls -la /home/ice/AutoGPT\"}"}}]


c0:
  {"output": "total 127\ndrwxrwxr-x 11 ice ice    30 May 30 23:06 .\ndrwx------ 30 ice ice    36 May 30 23:05 ..\ndrwxrwxr-x  2 ice ice     3 May 30 23:06 .agents\n-rw-rw-r--  1 ice ice   936 May 30 23:06 .branchlet.json\ndrwxrwxr-x  3 ice ice     4 May 30 23:06 .claude\n-rw-rw-r--  1 ice ice   300 May 30 23:06 .deepsource.toml\n-rw-rw-r--  1 ice ice  1490 May 30 23:06 .dockerignore\ndrwxrwxr-x  8 ice ice    13 May 30 23:06 .git\n-rw-rw-r--  1 ice ice   231 May 30 23:06 .gitattributes\ndrwxrwxr-x  5 ice ice    10 May 30 23:06 .github\n-rw-rw-r--  1 ice ice  3398 May 30 23:06 .gitignore\n-rw-rw-r--  1 ice ice  1156 May 30 23:06 .gitleaks.toml\n-rw-rw-r--  1 ice ice     3 May 30 23:06 .nvmrc\n-rw-rw-r--  1 ice ice    79 May 30 23:06 .pr_agent.toml\n-rw-rw-r--  1 ice ice 10541 May 30 23:06 .pre-commit-config.yaml\n-rw-rw-r--  1 ice ice 16035 May 30 23:06 .secrets.baseline\ndrwxrwxr-x  2 ice ice     4 May 30 23:06 .vscode\n-rw-rw-r--  1 ice ice  3818 May 30 23:06 AGENTS.md\n-rw-rw-r--  1 ice ice   561 May 30 23:06 CITATION.cff\n-rw-rw-r--  1 ice ice    11 May 30 23:06 CLAUDE.md\n-rw-rw-r--  1 ice ice  1841 May 30 23:06 CODE_OF_CONDUCT.md\n-rw-rw-r--  1 ice ice  2224 May 30 23:06 CONTRIBUTING.md\n-rw-rw-r--  1 ice ice  8547 May 30 23:06 LICENSE\n-rw-rw-r--  1 ice ice 11844 May 30 23:06 README.md\n-rw-rw-r--  1 ice ice  2435 May 30 23:06 SECURITY.md\ndrwxrwxr-x  2 ice ice     5 May 30 23:06 assets\ndrwxrwxr-x  9 ice ice    21 May 30 23:06 autogpt_platform\ndrwxrwxr-x  6 ice ice    14 May 30 23:06 classic\n-rw-rw-r--  1 ice ice  2102 May 30 23:06 codecov.yml\ndrwxrwxr-x  6 ice ice     8 May 30 23:06 docs", "exit_code": 0, "error": null}

  [Subdirectory context discovered: AutoGPT/AGENTS.md]
  # AutoGPT Platform Contribution Guide

  This guide provides context for coding agents when updating the **autogpt_platform** folder.

  ## Directory overview

  - `autogpt_platform/backend` – FastAPI based backend service.
  - `autogpt_platform/autogpt_libs` – Shared Python libraries.
  - `autogpt_platform/frontend` – Next.js + Typescript frontend.
  - `autogpt_platform/docker-compose.yml` – development stack.

  See `docs/content/platform/getting-started.md` for setup instructions.

  ## Code style

  - Format Python code with `poetry run format`.
  - Format frontend code using `pnpm format`.

  ## Frontend guidelines:

  See `/frontend/CONTRIBUTING.md` for complete patterns. Quick reference:

  1. **Pages**: Create in `src/app/(platform)/feature-name/page.tsx`
     - Add `usePageName.ts` hook for logic
     - Put sub-components in local `components/` folder
  2. **Components**: Structure as `ComponentName/ComponentName.tsx` + `useComponentName.ts` + `helpers.ts`
     - Use design system components from `src/components/` (atoms, molecules, organisms)
     - Never use `src/components/__legacy__/*`
  3. **Data fetching**: Use generated API hooks from `@/app/api/__generated__/endpoints/`
     - Regenerate with `pnpm generate:api`
     - Pattern: `use{Method}{Version}{OperationName}`
  4. **Styling**: Tailwind CSS only, use design tokens, Phosphor Icons only
  5. **Testing**: Integration tests (Vitest + RTL + MSW) are the default (~90%, page-level). Playwright for E2E critical flows. Storybook for design system components. See `autogpt_platform/frontend/TESTING.md`
  6. **Code conventions**: Function declarations (not arrow functions) for components/handlers

  - Component props should be `interface Props { ... }` (not exported) unless the interface needs to be used outside the component
  - Separate render logic from business logic (component.tsx + useComponent.ts + helpers.ts)
  - Colocate state when possible and avoid creating large components, use sub-components ( local `/components` folder next to the parent component ) when sensible
  - Avoid large hooks, abstract logic into `helpers.ts` files when sensible
  - Use function declarations for components, arrow functions only for callbacks
  - No barrel files or `index.ts` re-exports
  - Avoid comments at all times unless the code is very complex
  - Do not use `useCallback` or `useMemo` unless asked to optimise a given function
  - Do not type hook returns, let Typescript infer as much as possible
  - Never type with `any`, if not types available use `unknown`

  ## Testing

  - Backend: `poetry run test` (runs pytest with a docker based postgres + prisma).
  - Frontend integration tests: `pnpm test:unit` (Vitest + RTL + MSW, primary testing approach).
  - Frontend E2E tests: `pnpm test` or `pnpm test-ui` for Playwright tests.
  - See `autogpt_platform/frontend/TESTING.md` for the full testing strategy.

  Always run the relevant linters and tests before committing.
  Use conventional commit messages for all commits (e.g. `feat(backend): add API`).
  Types: - feat - fix - refactor - ci - dx (developer experience)
  Scopes: - platform - platform/library - platform/marketplace - backend - backend/executor - frontend - frontend/library - frontend/marketplace - blocks

  ## Pull requests

  - Use the template in `.github/PULL_REQUEST_TEMPLATE.md`.
  - Rely on the pre-commit checks for linting and formatting
  - Fill out the **Changes** section and the checklist.
  - Use conventional commit titles with a scope (e.g. `feat(frontend): add feature`).
  - Keep out-of-scope changes under 20% of the PR.
  - Ensure PR descriptions are complete.
  - For changes touching `data/*.py`, validate user ID checks or explain why not needed.
  - If adding protected frontend routes, update `frontend/lib/supabase/middleware.ts`.
  - Use the linear ticket branch structure if given codex/open-1668-resume-dropped-runs terminal 


c0:
    [{"id": "chatcmpl-tool-8457188a0d640e83", "call_id": "chatcmpl-tool-8457188a0d640e83", "response_item_id": "fc_chatcmpl-tool-8457188a0d640e83", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/AutoGPT/README.md\", \"limit\": 200}"}}, {"id": "chatcmpl-tool-b3d5b114126c4c6f", "call_id": "chatcmpl-tool-b3d5b114126c4c6f", "response_item_id": "fc_chatcmpl-tool-b3d5b114126c4c6f", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/AutoGPT/autogpt_platform/backend/pyproject.toml\", \"limit\": 200}"}}, {"id": "chatcmpl-tool-954c2d7d5e406ea6", "call_id": "chatcmpl-tool-954c2d7d5e406ea6", "response_item_id": "fc_chatcmpl-tool-954c2d7d5e406ea6", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/AutoGPT/autogpt_platform/frontend/package.json\", \"limit\": 200}"}}]


c0:
  {"content": "1|# AutoGPT: Build, Deploy, and Run AI Agents\n2|\n3|[![Discord Follow](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscord.com%2Fapi%2Finvites%2Fautogpt%3Fwith_counts%3Dtrue&query=%24.approximate_member_count&label=total%20members&logo=discord&logoColor=white&color=7289da)](https://discord.gg/autogpt) &ensp;\n4|[![Twitter Follow](https://img.shields.io/twitter/follow/Auto_GPT?style=social)](https://twitter.com/Auto_GPT) &ensp;\n5|\n6|<!-- Keep these links. Translations will automatically update with the README. -->\n7|[Deutsch](https://zdoc.app/de/Significant-Gravitas/AutoGPT) | \n8|[Español](https://zdoc.app/es/Significant-Gravitas/AutoGPT) | \n9|[français](https://zdoc.app/fr/Significant-Gravitas/AutoGPT) | \n10|[日本語](https://zdoc.app/ja/Significant-Gravitas/AutoGPT) | \n11|[한국어](https://zdoc.app/ko/Significant-Gravitas/AutoGPT) | \n12|[Português](https://zdoc.app/pt/Significant-Gravitas/AutoGPT) | \n13|[Русский](https://zdoc.app/ru/Significant-Gravitas/AutoGPT) | \n14|[中文](https://zdoc.app/zh/Significant-Gravitas/AutoGPT)\n15|\n16|**AutoGPT** is a powerful platform that allows you to create, deploy, and manage continuous AI agents that automate complex workflows. \n17|\n18|## Hosting Options \n19|   - Download to self-host (Free!)\n20|   - [Join the Waitlist](https://bit.ly/3ZDijAI) for the cloud-hosted beta (Closed Beta - Public release Coming Soon!)\n21|\n22|## How to Self-Host the AutoGPT Platform\n23|> [!NOTE]\n24|> Setting up and hosting the AutoGPT Platform yourself is a technical process. \n25|> If you'd rather something that just works, we recommend [joining the waitlist](https://bit.ly/3ZDijAI) for the cloud-hosted beta.\n26|\n27|### System Requirements\n28|\n29|Before proceeding with the installation, ensure your system meets the following requirements:\n30|\n31|#### Hardware Requirements\n32|- CPU: 4+ cores recommended\n33|- RAM: Minimum 8GB, 16GB recommended\n34|- Storage: At least 10GB of free space\n35|\n36|#### Software Requirements\n37|- Operating Systems:\n38|  - Linux (Ubuntu 20.04 or newer recommended)\n39|  - macOS (10.15 or newer)\n40|  - Windows 10/11 with WSL2\n41|- Required Software (with minimum versions):\n42|  - Docker Engine (20.10.0 or newer)\n43|  - Docker Compose (2.0.0 or newer)\n44|  - Git (2.30 or newer)\n45|  - Node.js (16.x or newer)\n46|  - npm (8.x or newer)\n47|  - VSCode (1.60 or newer) or any modern code editor\n48|\n49|#### Network Requirements\n50|- Stable internet connection\n51|- Access to required ports (will be configured in Docker)\n52|- Ability to make outbound HTTPS connections\n53|\n54|### Updated Setup Instructions:\n55|We've moved to a fully maintained and regularly updated documentation site.\n56|\n57|👉 [Follow the official self-hosting guide here](https://agpt.co/docs/platform/getting-started/getting-started)\n58|\n59|\n60|This tutorial assumes you have Docker, VSCode, git and npm installed.\n61|\n62|---\n63|\n64|#### ⚡ Quick Setup with One-Line Script (Recommended for Local Hosting)\n65|\n66|Skip the manual steps and get started in minutes using our automatic setup script.\n67|\n68|For macOS/Linux:\n69|```\n70|curl -fsSL https://setup.agpt.co/install.sh -o install.sh && bash install.sh\n71|```\n72|\n73|For Windows (PowerShell):\n74|```\n75|powershell -c \"iwr https://setup.agpt.co/install.bat -o install.bat; ./install.bat\"\n76|```\n77|\n78|This will install dependencies, configure Docker, and launch your local instance — all in one go.\n79|\n80|### 🧱 AutoGPT Frontend\n81|\n82|The AutoGPT frontend is where users interact with our powerful AI automation platform. It offers multiple ways to engage with and leverage our AI agents. This is the interface where you'll bring your AI automation ideas to life:\n83|\n84|   **Agent Builder:** For those who want to customize, our intuitive, low-code interface allows you to design and configure your own AI agents. \n85|   \n86|   **Workflow Management:** Build, modify, and optimize your automation workflows with ease. You build your agent by connecting blocks, where each block performs a single action.\n87|   \n88|   **Deployment Controls:** Manage the lifecycle of your agents, from testing to production.\n89|   \n90|   **Ready-to-Use Agents:** Don't want to build? Simply select from our library of pre-configured agents and put them to work immediately.\n91|   \n92|   **Agent Interaction:** Whether you've built your own or are using pre-configured agents, easily run and interact with them through our user-friendly interface.\n93|\n94|   **Monitoring and Analytics:** Keep track of your agents' performance and gain insights to continually improve your automation processes.\n95|\n96|[Read this guide](https://docs.agpt.co/platform/new_blocks/) to learn how to build your own custom blocks.\n97|\n98|### 💽 AutoGPT Server\n99|\n100|The AutoGPT Server is the powerhouse of our platform This is where your agents run. Once deployed, agents can be triggered by external sources and can operate continuously. It contains all the essential components that make AutoGPT run smoothly.\n101|\n102|   **Source Code:** The core logic that drives our agents and automation processes.\n103|   \n104|   **Infrastructure:** Robust systems that ensure reliable and scalable performance.\n105|   \n106|   **Marketplace:** A comprehensive marketplace where you can find and deploy a wide range of pre-built agents.\n107|\n108|### 🐙 Example Agents\n109|\n110|Here are two examples of what you can do with AutoGPT:\n111|\n112|1. **Generate Viral Videos from Trending Topics**\n113|   - This agent reads topics on Reddit.\n114|   - It identifies trending topics.\n115|   - It then automatically creates a short-form video based on the content. \n116|\n117|2. **Identify Top Quotes from Videos for Social Media**\n118|   - This agent subscribes to your YouTube channel.\n119|   - When you post a new video, it transcribes it.\n120|   - It uses AI to identify the most impactful quotes to generate a summary.\n121|   - Then, it writes a post to automatically publish to your social media. \n122|\n123|These examples show just a glimpse of what you can achieve with AutoGPT! You can create customized workflows to build agents for any use case.\n124|\n125|---\n126|\n127|### **License Overview:**\n128|\n129|🛡️ **Polyform Shield License:**\n130|All code and content within the `autogpt_platform` folder is licensed under the Polyform Shield License. This new project is our in-developlemt platform for building, deploying and managing agents.</br>_[Read more about this effort](https://agpt.co/blog/introducing-the-autogpt-platform)_\n131|\n132|🦉 **MIT License:**\n133|All other portions of the AutoGPT repository (i.e., everything outside the `autogpt_platform` folder) are licensed under the MIT License. This includes the original stand-alone AutoGPT Agent, along with projects such as [Forge](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/forge), [agbenchmark](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/benchmark) and the [AutoGPT Classic GUI](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/frontend).</br>We also publish additional work under the MIT Licence in other repositories, such as [GravitasML](https://github.com/Significant-Gravitas/gravitasml) which is developed for and used in the AutoGPT Platform. See also our MIT Licenced [Code Ability](https://github.com/Significant-Gravitas/AutoGPT-Code-Ability) project.\n134|\n135|---\n136|### Mission\n137|Our mission is to provide the tools, so that you can focus on what matters:\n138|\n139|- 🏗️ **Building** - Lay the foundation for something amazing.\n140|- 🧪 **Testing** - Fine-tune your agent to perfection.\n141|- 🤝 **Delegating** - Let AI work for you, and have your ideas come to life.\n142|\n143|Be part of the revolution! **AutoGPT** is here to stay, at the forefront of AI innovation.\n144|\n145|**📖 [Documentation](https://docs.agpt.co)**\n146|&ensp;|&ensp;\n147|**🚀 [Contributing](CONTRIBUTING.md)**\n148|\n149|---\n150|## 🤖 AutoGPT Classic\n151|> Below is information about the classic version of AutoGPT.\n152|\n153|**🛠️ [Build your own Agent - Quickstart](classic/FORGE-QUICKSTART.md)**\n154|\n155|### 🏗️ Forge\n156|\n157|**Forge your own agent!** &ndash; Forge is a ready-to-go toolkit to build your own agent application. It handles most of the boilerplate code, letting you channel all your creativity into the things that set *your* agent apart. All tutorials are located [here](https://medium.com/@aiedge/autogpt-forge-e3de53cc58ec). Components from [`forge`](/classic/forge/) can also be used individually to speed up development and reduce boilerplate in your agent project.\n158|\n159|🚀 [**Getting Started with Forge**](https://github.com/Significant-Gravitas/AutoGPT/blob/master/classic/forge/tutorials/001_getting_started.md) &ndash;\n160|This guide will walk you through the process of creating your own agent and using the benchmark and user interface.\n161|\n162|📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/forge) about Forge\n163|\n164|### 🎯 Benchmark\n165|\n166|**Measure your agent's performance!** The `agbenchmark` can be used with any agent that supports the agent protocol, and the integration with the project's [CLI] makes it even easier to use with AutoGPT and forge-based agents. The benchmark offers a stringent testing environment. Our framework allows for autonomous, objective performance evaluations, ensuring your agents are primed for real-world action.\n167|\n168|<!-- TODO: insert visual demonstrating the benchmark -->\n169|\n170|📦 [`agbenchmark`](https://pypi.org/project/agbenchmark/) on Pypi\n171|&ensp;|&ensp;\n172|📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/benchmark) about the Benchmark\n173|\n174|### 💻 UI\n175|\n176|**Makes agents easy to use!** The `frontend` gives you a user-friendly interface to control and monitor your agents. It connects to agents through the [agent protocol](#-agent-protocol), ensuring compatibility with many agents from both inside and outside of our ecosystem.\n177|\n178|<!-- TODO: insert screenshot of front end -->\n179|\n180|The frontend works out-of-the-box with all agents in the repo. Just use the [CLI] to run your agent of choice!\n181|\n182|📘 [Learn More](https://github.com/Significant-Gravitas/AutoGPT/tree/master/classic/frontend) about the Frontend\n183|\n184|### ⌨️ CLI\n185|\n186|[CLI]: #-cli\n187|\n188|To make it as easy as possible to use all of the tools offered by the repository, a CLI is included at the root of the repo:\n189|\n190|```shell\n191|$ ./run\n192|Usage: cli.py [OPTIONS] COMMAND [ARGS]...\n193|\n194|Options:\n195|  --help  Show this message and exit.\n196|\n197|Commands:\n198|  agent      Commands to create, start and stop agents\n199|  benchmark  Commands to start the benchmark and list tests and categories\n200|  setup      Installs dependencies needed for your system.\n201|", "total_lines": 238, "file_size": 11844, "truncated": true, "hint": "Use offset=201 to continue reading (showing 1-200 of 238 lines)", "is_binary": false, "is_image": false} read_file 


c0:
  {"content": "1|[tool.poetry]\n2|name = \"autogpt-platform-backend\"\n3|version = \"0.6.22\"\n4|description = \"A platform for building AI-powered agentic workflows\"\n5|authors = [\"AutoGPT <info@agpt.co>\"]\n6|readme = \"README.md\"\n7|packages = [{ include = \"backend\", format = \"sdist\" }]\n8|\n9|\n10|[tool.poetry.dependencies]\n11|python = \">=3.10,<3.14\"\n12|aio-pika = \"^9.5.5\"\n13|aiohttp = \"^3.10.0\"\n14|aiodns = \"^3.5.0\"\n15|agentmail = \"^0.4.5\"\n16|anthropic = \"^0.79.0\"\n17|apscheduler = \"^3.11.1\"\n18|autogpt-libs = { path = \"../autogpt_libs\", develop = true }\n19|bleach = { extras = [\"css\"], version = \"^6.2.0\" }\n20|cachetools = \"^5.5.0\"\n21|claude-agent-sdk = \"^0.1.64\"  # bundled CLI 2.1.116 -- 2.1.98+ fixes the --resume + excludeDynamicSections crash that used to force a per-turn 33K cache write. CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 env var strips the broken context-management beta. See sdk_compat_test.py.\n22|click = \"^8.2.0\"\n23|cryptography = \"^46.0\"\n24|discord-py = \"^2.5.2\"\n25|e2b = \"^2.15.2\"\n26|e2b-code-interpreter = \"^2.0\"\n27|elevenlabs = \"^1.50.0\"\n28|falkordb = \"^1.1.2\"\n29|fastapi = \"^0.128.6\"\n30|feedparser = \"^6.0.11\"\n31|flake8 = \"^7.3.0\"\n32|google-api-python-client = \"^2.177.0\"\n33|google-auth-oauthlib = \"^1.2.2\"\n34|google-cloud-storage = \"^3.2.0\"\n35|googlemaps = \"^4.10.0\"\n36|gravitasml = \"^0.1.4\"\n37|graphiti-core = \"^0.28.2\"\n38|groq = \"^0.30.0\"\n39|html2text = \"^2024.2.26\"\n40|jinja2 = \"^3.1.6\"\n41|jsonref = \"^1.1.0\"\n42|jsonschema = \"^4.25.0\"\n43|langfuse = \"^3.14.1\"\n44|launchdarkly-server-sdk = \"^9.14.1\"\n45|mem0ai = \"^0.1.115\"\n46|moviepy = \"^2.1.2\"\n47|ollama = \"^0.6.1\"\n48|openai = \"^1.97.1\"\n49|orjson = \"^3.10.0\"\n50|pika = \"^1.3.2\"\n51|pinecone = \"^7.3.0\"\n52|poetry = \"2.2.1\" # CHECK DEPENDABOT SUPPORT BEFORE UPGRADING\n53|postmarker = \"^1.0\"\n54|praw = \"~7.8.1\"\n55|prisma = \"^0.15.0\"\n56|rank-bm25 = \"^0.2.2\"\n57|prometheus-client = \"^0.24.1\"\n58|prometheus-fastapi-instrumentator = \"^7.0.0\"\n59|psutil = \"^7.0.0\"\n60|psycopg2-binary = \"^2.9.10\"\n61|pydantic = { extras = [\"email\"], version = \"^2.12.5\" }\n62|pydantic-settings = \"^2.12.0\"\n63|pywebpush = \"^2.3\"\n64|pytest = \"^8.4.1\"\n65|pytest-asyncio = \"^1.1.0\"\n66|python-dotenv = \"^1.1.1\"\n67|python-multipart = \"^0.0.22\"\n68|redis = \"^6.2.0\"\n69|regex = \"^2025.9.18\"\n70|replicate = \"^1.0.6\"\n71|sentry-sdk = {extras = [\"anthropic\", \"fastapi\", \"launchdarkly\", \"openai\", \"sqlalchemy\"], version = \"^2.44.0\"}\n72|sqlalchemy = \"^2.0.40\"\n73|strenum = \"^0.4.9\"\n74|stripe = \"^11.5.0\"\n75|supabase = \"2.28.0\"\n76|tenacity = \"^9.1.4\"\n77|todoist-api-python = \"^2.1.7\"\n78|tweepy = \"^4.16.0\"\n79|uvicorn = { extras = [\"standard\"], version = \"^0.40.0\" }\n80|websockets = \"^15.0\"\n81|youtube-transcript-api = \"^1.2.1\"\n82|yt-dlp = \"2025.12.08\"\n83|zerobouncesdk = \"^1.1.2\"\n84|# NOTE: please insert new dependencies in their alphabetical location\n85|pytest-snapshot = \"^0.9.0\"\n86|aiofiles = \"^25.1.0\"\n87|tiktoken = \"^0.12.0\"\n88|aioclamd = \"^1.0.0\"\n89|setuptools = \"^80.9.0\"\n90|gcloud-aio-storage = \"^9.5.0\"\n91|pandas = \"^2.3.1\"\n92|firecrawl-py = \"^4.3.6\"\n93|exa-py = \"^1.14.20\"\n94|croniter = \"^6.0.0\"\n95|stagehand = \"^3.4.0\"\n96|gravitas-md2gdocs = \"^0.1.0\"\n97|posthog = \"^7.6.0\"\n98|fpdf2 = \"^2.8.6\"\n99|langsmith = \"^0.7.7\"\n100|openpyxl = \"^3.1.5\"\n101|pymssql = \"^2.3.2\"\n102|pymysql = \"^1.1.1\"\n103|pyarrow = \"^23.0.0\"\n104|sqlparse = \"^0.5.5\"\n105|\n106|[tool.poetry.group.dev.dependencies]\n107|aiohappyeyeballs = \"^2.6.1\"\n108|black = \"^24.10.0\"\n109|faker = \"^38.2.0\"\n110|httpx = \"^0.28.1\"\n111|isort = \"^5.13.2\"\n112|poethepoet = \"^0.41.0\"\n113|pre-commit = \"^4.4.0\"\n114|pyright = \"^1.1.407\"\n115|pytest-cov = \"^7.1.0\"\n116|pytest-mock = \"^3.15.1\"\n117|pytest-watcher = \"^0.6.3\"\n118|requests = \"^2.32.5\"\n119|ruff = \"^0.15.0\"\n120|# NOTE: please insert new dependencies in their alphabetical location\n121|\n122|[build-system]\n123|requires = [\"poetry-core\"]\n124|build-backend = \"poetry.core.masonry.api\"\n125|\n126|[tool.poetry.scripts]\n127|app = \"backend.app:main\"\n128|rest = \"backend.rest:main\"\n129|db = \"backend.db:main\"\n130|ws = \"backend.ws:main\"\n131|scheduler = \"backend.scheduler:main\"\n132|notification = \"backend.notification:main\"\n133|platform-linking-manager = \"backend.platform_linking_manager:main\"\n134|executor = \"backend.exec:main\"\n135|analytics-setup = \"scripts.generate_views:main_setup\"\n136|analytics-views = \"scripts.generate_views:main_views\"\n137|copilot-executor = \"backend.copilot.executor.__main__:main\"\n138|copilot-bot = \"backend.copilot.bot.__main__:main\"\n139|cli = \"backend.cli:main\"\n140|format = \"scripts.linter:format\"\n141|lint = \"scripts.linter:lint\"\n142|test = \"scripts.run_tests:test\"\n143|load-store-agents = \"test.load_store_agents:run\"\n144|export-api-schema = \"backend.cli.generate_openapi_json:main\"\n145|gen-prisma-stub = \"scripts.gen_prisma_types_stub:main\"\n146|oauth-tool = \"backend.cli.oauth_tool:cli\"\n147|\n148|[tool.isort]\n149|profile = \"black\"\n150|\n151|[tool.pytest-watcher]\n152|now = false\n153|clear = true\n154|delay = 0.2\n155|runner = \"pytest\"\n156|runner_args = []\n157|patterns = [\"*.py\"]\n158|ignore_patterns = []\n159|\n160|[tool.pytest.ini_options]\n161|asyncio_mode = \"auto\"\n162|asyncio_default_fixture_loop_scope = \"session\"\n163|# Disable syrupy plugin to avoid conflict with pytest-snapshot\n164|# Both provide --snapshot-update argument causing ArgumentError\n165|addopts = \"-p no:syrupy\"\n166|markers = [\n167|    \"supplementary: tests kept for coverage but superseded by integration tests\",\n168|    \"integration: end-to-end tests that require a live database (skipped in CI)\",\n169|    \"slow: tests that take more than a few seconds (e.g. spin up an isolated docker stack)\",\n170|]\n171|filterwarnings = [\n172|    \"ignore:'audioop' is deprecated:DeprecationWarning:discord.player\",\n173|    \"ignore:invalid escape sequence:DeprecationWarning:tweepy.api\",\n174|]\n175|\n176|[tool.ruff]\n177|target-version = \"py310\"\n178|", "total_lines": 177, "file_size": 5147, "truncated": false, "is_binary": false, "is_image": false}

  [Subdirectory context discovered: AutoGPT/autogpt_platform/AGENTS.md]
  # AutoGPT Platform

  This file provides guidance to coding agents when working with code in this repository.

  ## Repository Overview

  AutoGPT Platform is a monorepo containing:

  - **Backend** (`backend`): Python FastAPI server with async support
  - **Frontend** (`frontend`): Next.js React application
  - **Shared Libraries** (`autogpt_libs`): Common Python utilities

  ## Component Documentation

  - **Backend**: See @backend/AGENTS.md for backend-specific commands, architecture, and development tasks
  - **Frontend**: See @frontend/AGENTS.md for frontend-specific commands, architecture, and development patterns

  ## Key Concepts

  1. **Agent Graphs**: Workflow definitions stored as JSON, executed by the backend
  2. **Blocks**: Reusable components in `backend/backend/blocks/` that perform specific tasks
  3. **Integrations**: OAuth and API connections stored per user
  4. **Store**: Marketplace for sharing agent templates
  5. **Virus Scanning**: ClamAV integration for file upload security

  ### Environment Configuration

  #### Configuration Files

  - **Backend**: `backend/.env.default` (defaults) → `backend/.env` (user overrides)
  - **Frontend**: `frontend/.env.default` (defaults) → `frontend/.env` (user overrides)
  - **Platform**: `.env.default` (Supabase/shared defaults) → `.env` (user overrides)

  #### Docker Environment Loading Order

  1. `.env.default` files provide base configuration (tracked in git)
  2. `.env` files provide user-specific overrides (gitignored)
  3. Docker Compose `environment:` sections provide service-specific overrides
  4. Shell environment variables have highest precedence

  #### Key Points

  - All services use hardcoded defaults in docker-compose files (no `${VARIABLE}` substitutions)
  - The `env_file` directive loads variables INTO containers at runtime
  - Backend/Frontend services use YAML anchors for consistent configuration
  - Supabase services (`db/docker/docker-compose.yml`) follow the same pattern

  ### Branching Strategy

  - **`dev`** is the main development branch. All PRs should target `dev`.
  - **`master`** is the production branch. Only used for production releases.

  ### Creating Pull Requests

  - Create the PR against the `dev` branch of the repository.
  - **Split PRs by concern** — each PR should have a single clear purpose. For example, "usage tracking" and "credit charging" should be separate PRs even if related. Combining multiple concerns makes it harder for reviewers to understand what belongs to what.
  - Ensure the branch name is descriptive (e.g., `feature/add-new-block`)
  - Use conventional commit messages (see below)
  - **Structure the PR description with Why / What / How** — Why: the motivation (what problem it solves, what's broken/missing without it); What: high-level summary of changes; How: approach, key implementation details, or architecture decisions. Reviewers need all three to judge whether the approach fits the problem.
  - Fill out the .github/PULL_REQUEST_TEMPLATE.md template as the PR description
  - Always use `--body-file` to pass PR body — avoids shell interpretation of backticks and special characters:
    ```bash
    PR_BODY=$(mktemp)
    cat > "$PR_BODY" << 'PREOF'
    ## Summary
    - use `backticks` freely here
    PREOF
    gh pr create --title "..." --body-file "$PR_BODY" --base dev
    rm "$PR_BODY"
    ```
  - Run the github pre-commit hooks to ensure code quality.

  ### Test-Driven Development (TDD)

  When fixing a bug or adding a feature, follow a test-first approach:

  1. **Write a failing test first** — create a test that reproduces the bug or validates the new behavior, marked with `@pytest.mark.xfail` (backend) or `.fixme` (Playwright). Run it to confirm it fails for the right reason.
  2. **Implement the fix/feature** — write the minimal code to make the test pass.
  3. **Remove the xfail marker** — once the test passes, remove the `xfail`/`.fixme` annotation and run the full test suite to confirm nothing else broke.

  This ensures every change is covered by a test and that the test actually validates the intended behavior.

  ### Reviewing/Revising Pull Requests

  Use `/pr-review` to review a PR or `/pr-address` to address comments.

  When fetching comments manually:
  - `gh api repos/Significant-Gravitas/AutoGPT/pulls/{N}/reviews --paginate` — top-level reviews
  - `gh api repos/Significant-Gravitas/AutoGPT/pulls/{N}/comments --paginate` — inline review comments (always paginate to avoid missing comments beyond page 1)
  - `gh api repos/Significant-Gravitas/AutoGPT/issues/{N}/comments` — PR conversation comments

  ### Conventional Commits

  Use this format for commit messages and Pull Request titles:

  **Conventional Commit Types:**

  - `feat`: Introduces a new feature to the codebase
  - `fix`: Patches a bug in the codebase
  - `refactor`: Code change that neither fixes a bug nor adds a feature; also applies to removing features
  - `ci`: Changes to CI configuration
  - `docs`: Documentation-only changes
  - `dx`: Improvements to the developer experience

  **Recommended Base Scopes:**

  - `platform`: Changes affecting both frontend and backend
  - `frontend`
  - `backend`
  - `infra`
  - `blocks`: Modifications/additions of individual blocks

  **Subscope Examples:**

  - `backend/executor`
  - `backend/db`
  - `frontend/builder` (includes changes to the block UI component)
  - `infra/prod`

  Use these scopes and subscopes for clarity and consistency in commit messages.

  [Subdirectory context discovered: AutoGPT/autogpt_platform/backend/AGENTS.md]
  # Backend

  This file provides guidance to coding agents when working with the backend.

  ## Essential Commands

  To run something with Python package dependencies you MUST use `poetry run ...`.

  ```bash
  # Install dependencies
  poetry install

  # Run database migrations
  poetry run prisma migrate dev

  # Start all services (database, redis, rabbitmq, clamav)
  docker compose up -d

  # Run the backend as a whole
  poetry run app

  # Run tests
  poetry run test

  # Run specific test
  poetry run pytest path/to/test_file.py::test_function_name

  # Run block tests (tests that validate all blocks work correctly)
  poetry run pytest backend/blocks/test/test_block.py -xvs

  # Run tests for a specific block (e.g., GetCurrentTimeBlock)
  poetry run pytest 'backend/blocks/test/test_block.py::test_available_blocks[GetCurrentTimeBlock]' -xvs

  # Lint and format
  # prefer format if you want to just "fix" it and only get the errors that can't be autofixed
  poetry run format  # Black + isort
  poetry run lint    # ruff
  ```

  More details can be found in @TESTING.md

  ### Creating/Updating Snapshots

  When you first write a test or when the expected output changes:

  ```bash
  poetry run pytest path/to/test.py --snapshot-update
  ```

  ⚠️ **Important**: Always review snapshot changes before committing! Use `git diff` to verify the changes are expected.

  ## Architecture

  - **API Layer**: FastAPI with REST and WebSocket endpoints
  - **Database**: PostgreSQL with Prisma ORM, includes pgvector for embeddings
  - **Queue System**: RabbitMQ for async task processing
  - **Execution Engine**: Separate executor service processes agent workflows
  - **Authentication**: JWT-based with Supabase integration
  - **Security**: Cache protection middleware prevents sensitive data caching in browsers/proxies

  ## Code Style

  - **Top-level imports only** — no local/inner imports (lazy imports only for heavy optional deps like `openpyxl`)
  - **Absolute imports** — use `from backend.module import ...` for cross-package imports. Single-dot relative (`from .sibling import ...`) is acceptable for sibling modules within the same package (e.g., blocks). Avoid double-dot relative imports (`from ..parent import ...`) — use the absolute path instead
  - **No duck typing** — no `hasattr`/`getattr`/`isinstance` for type dispatch; use typed interfaces/unions/protocols
  - **Pydantic models** over dataclass/namedtuple/dict for structured data
  - **No linter suppressors** — no `# type: ignore`, `# noqa`, `# pyright: ignore`; fix the type/code
  - **List comprehensions** over manual loop-and-append
  - **Early return** — guard clauses first, avoid deep nesting
  - **f-strings vs printf syntax in log statements** — Use `%s` for deferred interpolation in `debug` statements, f-strings elsewhere for readability: `logger.debug("Processing %s items", count)`, `logger.info(f"Processing {count} items")`
  - **Sanitize error paths** — `os.path.basename()` in error messages to avoid leaking directory structure
  - **TOCTOU awareness** — avoid check-then-act patterns for file access and credit charging
  - **`Security()` vs `Depends()`** — use `Security()` for auth deps to get proper OpenAPI security spec
  - **Redis pipelines** — `transaction=True` for atomicity on multi-step operations
  - **`max(0, value)` guards** — for computed values that should never be negative
  - **SSE protocol** — `data:` lines for frontend-parsed events (must match Zod schema), `: comment` lines for heartbeats/status
  - **File length** — keep files under ~300 lines; if a file grows beyond this, split by responsibility (e.g. extract helpers, models, or a sub-module into a new file). Never keep appending to a long file.
  - **Function length** — keep functions under ~40 lines; extract named helpers when a function grows longer. Long functions are a sign of mixed concerns, not complexity.
  - **Top-down ordering** — define the main/public function or class first, then the helpers it uses below. A reader should encounter high-level logic before implementation details.

  ## Testing Approach

  - Uses pytest with snapshot testing for API responses
  - Test files are colocated with source files (`*_test.py`)
  - Mock at boundaries — mock where the symbol is **used**, not where it's **defined**
  - After refactoring, update mock targets to match new module paths
  - Use `AsyncMock` for async functions (`from unittest.mock import AsyncMock`)

  ### Test-Driven Development (TDD)

  When fixing a bug or adding a feature, write the test **before** the implementation:

  ```python
  # 1. Write a failing test marked xfail
  @pytest.mark.xfail(reason="Bug #1234: widget crashes on empty input")
  def test_widget_handles_empty_input():
      result = widget.process("")
      assert result == Widget.EMPTY_RESULT

  # 2. Run it — confirm it fails (XFAIL)
  # poetry run pytest path/to/test.py::test_widget_handles_empty_input -xvs

  # 3. Implement the fix

  # 4. Remove xfail, run again — confirm it passes
  def test_widget_handles_empty_input():
      result = widget.process("")
      assert result == Widget.EMPTY_RESULT
  ```

  This catches regressions and proves the fix actually works. **Every bug fix should include a test that would have caught it.**

  ## Database Schema

  Key models (defined in `schema.prisma`):

  - `User`: Authentication and profile data
  - `AgentGraph`: Workflow definitions with version control
  - `AgentGraphExecution`: Execution history and results
  - `AgentNode`: Individual nodes in a workflow
  - `StoreListing`: Marketplace listings for sharing agents

  ## Environment Configuration

  - **Backend**: `.env.default` (defaults) → `.env` (user overrides)

  ## Common Development Tasks

  ### Adding a new block

  Follow the comprehensive [Block SDK Guide](@../../docs/platform/block-sdk-guide.md) which covers:

  - Provider configuration with `ProviderBuilder`
  - Block schema definition
  - Authentication (API keys, OAuth, webhooks)
  - Testing and validation
  - File organization

  Quick steps:

  1. Create new file in `backend/blocks/`
  2. Configure provider using `ProviderBuilder` in `_config.py`
  3. Inherit from `Block` base class
  4. Define input/output schemas using `BlockSchema`
  5. Implement async `run` method
  6. Generate unique block ID using `uuid.uuid4()`
  7. Test with `poetry run pytest backend/blocks/test/test_block.py`

  Note: when making many new blocks analyze the interfaces for each of these blocks and picture if they would go well together in a graph-based editor or would they struggle to connect productively?
  ex: do the inputs and outputs tie well together?

  If you get any pushback or hit complex block conditions check the new_blocks guide in the docs.

  #### Handling files in blocks with `store_media_file()`

  When blocks need to work with files (images, videos, documents), use `store_media_file()` from `backend.util.file`. The `return_format` parameter determines what you get back:

  | Format | Use When | Returns |
  |--------|----------|---------|
  | `"for_local_processing"` | Processing with local tools (ffmpeg, MoviePy, PIL) | Local file path (e.g., `"image.png"`) |
  | `"for_external_api"` | Sending content to external APIs (Replicate, OpenAI) | Data URI (e.g., `"data:image/png;base64,..."`) |
  | `"for_block_output"` | Returning output from your block | Smart: `workspace://` in CoPilot, data URI in graphs |

  **Examples:**

  ```python
  # INPUT: Need to process file locally with ffmpeg
  local_path = await store_media_file(
      file=input_data.video,
      execution_context=execution_context,
      return_format="for_local_processing",
  )
  # local_path = "video.mp4" - use with Path/ffmpeg/etc

  # INPUT: Need to send to external API like Replicate
  image_b64 = await store_media_file(
      file=input_data.image,
      execution_context=execution_context,
      return_format="for_external_api",
  )
  # image_b64 = "data:image/png;base64,iVBORw0..." - send to API

  # OUTPUT: Returning result from block
  result_url = await store_media_file(
      file=generated_image_url,
      execution_context=execution_context,
      return_format="for_block_output",
  )
  yield "image_url", result_url
  # In CoPilot: r

  [...truncated AGENTS.md: 9,760 chars total] read_file 


c0:
  {"content": "1|{\n2|  \"name\": \"frontend\",\n3|  \"version\": \"0.3.4\",\n4|  \"private\": true,\n5|  \"engines\": {\n6|    \"node\": \"22.x\"\n7|  },\n8|  \"scripts\": {\n9|    \"dev\": \"pnpm run generate:api:force && next dev --turbo\",\n10|    \"build\": \"cross-env NODE_OPTIONS=--max-old-space-size=16384 next build\",\n11|    \"start\": \"next start\",\n12|    \"start:standalone\": \"cd .next/standalone && node server.js\",\n13|    \"lint\": \"next lint && prettier --check .\",\n14|    \"format\": \"next lint --fix; prettier --write .\",\n15|    \"types\": \"tsc --noEmit\",\n16|    \"test\": \"NEXT_PUBLIC_PW_TEST=true next build --turbo && pnpm test:e2e:no-build\",\n17|    \"test-ui\": \"NEXT_PUBLIC_PW_TEST=true next build --turbo && pnpm test:e2e:ui\",\n18|    \"test:unit\": \"vitest run --coverage\",\n19|    \"test:unit:watch\": \"vitest\",\n20|    \"test:e2e\": \"NEXT_PUBLIC_PW_TEST=true next build --turbo && pnpm test:e2e:no-build\",\n21|    \"test:e2e:no-build\": \"playwright test\",\n22|    \"test:e2e:ui\": \"playwright test --ui\",\n23|    \"gentests\": \"playwright codegen http://localhost:3000\",\n24|    \"storybook\": \"storybook dev -p 6006\",\n25|    \"build-storybook\": \"storybook build\",\n26|    \"test-storybook\": \"test-storybook\",\n27|    \"test-storybook:ci\": \"concurrently -k -s first -n \\\"SB,TEST\\\" -c \\\"magenta,blue\\\" \\\"pnpm run build-storybook -- --quiet && npx http-server storybook-static --port 6006 --silent\\\" \\\"wait-on tcp:6006 && pnpm run test-storybook\\\"\",\n28|    \"generate:api\": \"npx --yes tsx ./scripts/generate-api-queries.ts && orval --config ./orval.config.ts\",\n29|    \"generate:api:force\": \"npx --yes tsx ./scripts/generate-api-queries.ts --force && orval --config ./orval.config.ts\"\n30|  },\n31|  \"browserslist\": [\n32|    \"defaults\"\n33|  ],\n34|  \"dependencies\": {\n35|    \"@ai-sdk/react\": \"3.0.61\",\n36|    \"@faker-js/faker\": \"10.0.0\",\n37|    \"@ferrucc-io/emoji-picker\": \"0.0.48\",\n38|    \"@hookform/resolvers\": \"5.2.2\",\n39|    \"@next/third-parties\": \"15.4.6\",\n40|    \"@number-flow/react\": \"0.6.0\",\n41|    \"@phosphor-icons/react\": \"2.1.10\",\n42|    \"@posthog/react\": \"1.7.0\",\n43|    \"@radix-ui/react-accordion\": \"1.2.12\",\n44|    \"@radix-ui/react-alert-dialog\": \"1.1.15\",\n45|    \"@radix-ui/react-avatar\": \"1.1.10\",\n46|    \"@radix-ui/react-checkbox\": \"1.3.3\",\n47|    \"@radix-ui/react-collapsible\": \"1.1.12\",\n48|    \"@radix-ui/react-context-menu\": \"2.2.16\",\n49|    \"@radix-ui/react-dialog\": \"1.1.15\",\n50|    \"@radix-ui/react-dropdown-menu\": \"2.1.16\",\n51|    \"@radix-ui/react-icons\": \"1.3.2\",\n52|    \"@radix-ui/react-label\": \"2.1.7\",\n53|    \"@radix-ui/react-popover\": \"1.1.15\",\n54|    \"@radix-ui/react-radio-group\": \"1.3.8\",\n55|    \"@radix-ui/react-scroll-area\": \"1.2.10\",\n56|    \"@radix-ui/react-select\": \"2.2.6\",\n57|    \"@radix-ui/react-separator\": \"1.1.7\",\n58|    \"@radix-ui/react-slider\": \"1.3.6\",\n59|    \"@radix-ui/react-slot\": \"1.2.3\",\n60|    \"@radix-ui/react-switch\": \"1.2.6\",\n61|    \"@radix-ui/react-tabs\": \"1.1.13\",\n62|    \"@radix-ui/react-toast\": \"1.2.15\",\n63|    \"@radix-ui/react-tooltip\": \"1.2.8\",\n64|    \"@rjsf/core\": \"6.1.2\",\n65|    \"@rjsf/utils\": \"6.1.2\",\n66|    \"@rjsf/validator-ajv8\": \"6.1.2\",\n67|    \"@sentry/nextjs\": \"10.27.0\",\n68|    \"@streamdown/cjk\": \"1.0.1\",\n69|    \"@streamdown/math\": \"1.0.1\",\n70|    \"@streamdown/mermaid\": \"1.0.1\",\n71|    \"@supabase/ssr\": \"0.7.0\",\n72|    \"@supabase/supabase-js\": \"2.78.0\",\n73|    \"@tanstack/react-query\": \"5.90.6\",\n74|    \"@tanstack/react-table\": \"8.21.3\",\n75|    \"@types/jaro-winkler\": \"0.2.4\",\n76|    \"@vercel/analytics\": \"1.5.0\",\n77|    \"@vercel/speed-insights\": \"1.2.0\",\n78|    \"@xyflow/react\": \"12.9.2\",\n79|    \"ai\": \"6.0.134\",\n80|    \"boring-avatars\": \"1.11.2\",\n81|    \"canvas-confetti\": \"1.9.4\",\n82|    \"class-variance-authority\": \"0.7.1\",\n83|    \"clsx\": \"2.1.1\",\n84|    \"cmdk\": \"1.1.1\",\n85|    \"cookie\": \"1.0.2\",\n86|    \"date-fns\": \"4.1.0\",\n87|    \"dexie\": \"4.2.1\",\n88|    \"dotenv\": \"17.2.3\",\n89|    \"elliptic\": \"6.6.1\",\n90|    \"embla-carousel-react\": \"8.6.0\",\n91|    \"flatbush\": \"4.5.0\",\n92|    \"framer-motion\": \"12.23.24\",\n93|    \"geist\": \"1.5.1\",\n94|    \"highlight.js\": \"11.11.1\",\n95|    \"jaro-winkler\": \"0.2.8\",\n96|    \"jszip\": \"3.10.1\",\n97|    \"katex\": \"0.16.25\",\n98|    \"launchdarkly-react-client-sdk\": \"3.9.0\",\n99|    \"lodash\": \"4.17.21\",\n100|    \"lucide-react\": \"0.552.0\",\n101|    \"motion\": \"12.38.0\",\n102|    \"next\": \"15.5.18\",\n103|    \"next-themes\": \"0.4.6\",\n104|    \"nuqs\": \"2.7.2\",\n105|    \"posthog-js\": \"1.334.1\",\n106|    \"react\": \"18.3.1\",\n107|    \"react-currency-input-field\": \"4.0.3\",\n108|    \"react-day-picker\": \"9.11.1\",\n109|    \"react-dom\": \"18.3.1\",\n110|    \"react-hook-form\": \"7.66.0\",\n111|    \"react-icons\": \"5.5.0\",\n112|    \"react-markdown\": \"9.0.3\",\n113|    \"react-modal\": \"3.16.3\",\n114|    \"react-shepherd\": \"6.1.9\",\n115|    \"react-window\": \"2.2.0\",\n116|    \"recharts\": \"3.3.0\",\n117|    \"rehype-autolink-headings\": \"7.1.0\",\n118|    \"rehype-highlight\": \"7.0.2\",\n119|    \"rehype-katex\": \"7.0.1\",\n120|    \"rehype-slug\": \"6.0.0\",\n121|    \"remark-gfm\": \"4.0.1\",\n122|    \"remark-math\": \"6.0.0\",\n123|    \"shepherd.js\": \"14.5.1\",\n124|    \"shiki\": \"^3.21.0\",\n125|    \"simplex-noise\": \"4.0.3\",\n126|    \"sonner\": \"2.0.7\",\n127|    \"streamdown\": \"2.1.0\",\n128|    \"tailwind-merge\": \"2.6.0\",\n129|    \"tailwind-scrollbar\": \"3.1.0\",\n130|    \"tailwindcss-animate\": \"1.0.7\",\n131|    \"twemoji\": \"14.0.2\",\n132|    \"use-stick-to-bottom\": \"1.1.2\",\n133|    \"uuid\": \"11.1.0\",\n134|    \"vaul\": \"1.1.2\",\n135|    \"zod\": \"3.25.76\",\n136|    \"zustand\": \"5.0.8\"\n137|  },\n138|  \"devDependencies\": {\n139|    \"@chromatic-com/storybook\": \"4.1.2\",\n140|    \"@opentelemetry/instrumentation\": \"0.209.0\",\n141|    \"@playwright/test\": \"1.56.1\",\n142|    \"@storybook/addon-a11y\": \"9.1.5\",\n143|    \"@storybook/addon-docs\": \"9.1.5\",\n144|    \"@storybook/addon-links\": \"9.1.5\",\n145|    \"@storybook/addon-onboarding\": \"9.1.5\",\n146|    \"@storybook/nextjs\": \"9.1.5\",\n147|    \"@tanstack/eslint-plugin-query\": \"5.91.2\",\n148|    \"@tanstack/react-query-devtools\": \"5.90.2\",\n149|    \"@testing-library/dom\": \"10.4.1\",\n150|    \"@testing-library/react\": \"16.3.2\",\n151|    \"@testing-library/user-event\": \"14.6.1\",\n152|    \"@types/canvas-confetti\": \"1.9.0\",\n153|    \"@types/lodash\": \"4.17.20\",\n154|    \"@types/negotiator\": \"0.6.4\",\n155|    \"@types/node\": \"24.10.0\",\n156|    \"@types/react\": \"18.3.17\",\n157|    \"@types/react-dom\": \"18.3.5\",\n158|    \"@types/react-modal\": \"3.16.3\",\n159|    \"@types/react-window\": \"2.0.0\",\n160|    \"@types/twemoji\": \"13.1.2\",\n161|    \"@vitejs/plugin-react\": \"5.1.2\",\n162|    \"@vitest/coverage-v8\": \"4.0.17\",\n163|    \"agentation\": \"3.0.2\",\n164|    \"axe-playwright\": \"2.2.2\",\n165|    \"chromatic\": \"13.3.3\",\n166|    \"concurrently\": \"9.2.1\",\n167|    \"cross-env\": \"10.1.0\",\n168|    \"eslint\": \"8.57.1\",\n169|    \"eslint-config-next\": \"15.5.7\",\n170|    \"eslint-plugin-storybook\": \"9.1.5\",\n171|    \"happy-dom\": \"20.3.4\",\n172|    \"import-in-the-middle\": \"2.0.2\",\n173|    \"monocart-reporter\": \"2.10.0\",\n174|    \"msw\": \"2.11.6\",\n175|    \"msw-storybook-addon\": \"2.0.6\",\n176|    \"orval\": \"7.13.0\",\n177|    \"pbkdf2\": \"3.1.5\",\n178|    \"postcss\": \"8.5.6\",\n179|    \"prettier\": \"3.6.2\",\n180|    \"prettier-plugin-tailwindcss\": \"0.7.1\",\n181|    \"require-in-the-middle\": \"8.0.1\",\n182|    \"storybook\": \"9.1.5\",\n183|    \"tailwindcss\": \"3.4.17\",\n184|    \"typescript\": \"5.9.3\",\n185|    \"vite-tsconfig-paths\": \"6.0.4\",\n186|    \"vitest\": \"4.0.17\"\n187|  },\n188|  \"msw\": {\n189|    \"workerDirectory\": [\n190|      \"public\"\n191|    ]\n192|  },\n193|  \"pnpm\": {\n194|    \"overrides\": {\n195|      \"@opentelemetry/instrumentation\": \"0.209.0\",\n196|      \"lodash-es\": \"4.17.23\"\n197|    }\n198|  },\n199|  \"packageManager\": \"pnpm@10.20.0+sha512.cf9998222162dd85864d0a8102e7892e7ba4ceadebbf5a31f9c2fce48dfce317a9c53b9f6464d1ef9042cba2e02ae02a9f7c143a2b438cd93c91840f0192b9dd\"\n200|}\n201|", "total_lines": 200, "file_size": 6930, "truncated": false, "is_binary": false, "is_image": false}

  [Subdirectory context discovered: AutoGPT/autogpt_platform/frontend/AGENTS.md]
  # Frontend

  This file provides guidance to coding agents when working with the frontend.

  ## Essential Commands

  ```bash
  # Install dependencies
  pnpm i

  # Generate API client from OpenAPI spec
  pnpm generate:api

  # Start development server
  pnpm dev

  # Run E2E tests
  pnpm test

  # Run Storybook for component development
  pnpm storybook

  # Build production
  pnpm build

  # Format and lint
  pnpm format

  # Type checking
  pnpm types
  ```

  ### Pre-completion Checks (MANDATORY)

  After making **any** code changes in the frontend, you MUST run the following commands **in order** before reporting work as done, creating commits, or opening PRs:

  1. `pnpm format` — auto-fix formatting issues
  2. `pnpm lint` — check for lint errors; fix any that appear
  3. `pnpm types` — check for type errors; fix any that appear

  Do NOT skip these steps. If any command reports errors, fix them and re-run until clean. Only then may you consider the task complete. If typing keeps failing, stop and ask the user.

  4. `pnpm test:unit` — run integration tests; fix any failures

  ### Code Style

  - Fully capitalize acronyms in symbols, e.g. `graphID`, `useBackendAPI`
  - Use function declarations (not arrow functions) for components/handlers
  - No `dark:` Tailwind classes — the design system handles dark mode
  - Use Next.js `<Link>` for internal navigation — never raw `<a>` tags
  - No `any` types unless the value genuinely can be anything
  - No linter suppressors (`// @ts-ignore`, `// eslint-disable`) — fix the actual issue
  - **File length** — keep files under ~200 lines; extract sub-components or hooks into their own files when a file grows beyond this
  - **Function/component length** — keep render functions and hooks under ~50 lines; extract named helpers or sub-components when they grow longer

  ## Architecture

  - **Framework**: Next.js 15 App Router (client-first approach)
  - **Data Fetching**: Type-safe generated API hooks via Orval + React Query
  - **State Management**: React Query for server state, co-located UI state in components/hooks
  - **Component Structure**: Separate render logic (`.tsx`) from business logic (`use*.ts` hooks)
  - **Workflow Builder**: Visual graph editor using @xyflow/react
  - **UI Components**: shadcn/ui (Radix UI primitives) with Tailwind CSS styling
  - **Icons**: Phosphor Icons only
  - **Feature Flags**: LaunchDarkly integration
  - **Error Handling**: ErrorCard for render errors, toast for mutations, Sentry for exceptions
  - **Testing**: Vitest + React Testing Library + MSW for integration tests (primary), Playwright for E2E, Storybook for visual

  ## Environment Configuration

  `.env.default` (defaults) → `.env` (user overrides)

  ## Feature Development

  See @CONTRIBUTING.md for complete patterns. Quick reference:

  1. **Pages**: Create in `src/app/(platform)/feature-name/page.tsx`
     - Extract component logic into custom hooks grouped by concern, not by component. Each hook should represent a cohesive domain of functionality (e.g., useSearch, useFilters, usePagination) rather than bundling all state into one useComponentState hook.
       - Put each hook in its own `.ts` file
     - Put sub-components in local `components/` folder
     - Component props should be `type Props = { ... }` (not exported) unless it needs to be used outside the component
  2. **Components**: Structure as `ComponentName/ComponentName.tsx` + `useComponentName.ts` + `helpers.ts`
     - Use design system components from `src/components/` (atoms, molecules, organisms)
     - Never use `src/components/__legacy__/*`
  3. **Data fetching**: Use generated API hooks from `@/app/api/__generated__/endpoints/`
     - Regenerate with `pnpm generate:api`
     - Pattern: `use{Method}{Version}{OperationName}`
  4. **Styling**: Tailwind CSS only, use design tokens, Phosphor Icons only
     - Always import the `-Icon`-suffixed alias from `@phosphor-icons/react` (e.g. `TrashIcon`, `PlusIcon`, `SquareIcon`) — bare exports like `Trash`/`Plus` are deprecated.
  5. **Testing**: Integration tests are the default (~90%). See `TESTING.md` for full details.
     - **New pages/features**: Write integration tests in `__tests__/` next to `page.tsx` using Vitest + RTL + MSW
     - **API mocking**: Use Orval-generated MSW handlers from `@/app/api/__generated__/endpoints/{tag}/{tag}.msw.ts`
     - **Run**: `pnpm test:unit` (integration/unit), `pnpm test` (Playwright E2E)
     - **Storybook**: For design system components in `src/components/`
     - **TDD**: Write a failing test first, implement, then verify
  6. **Code conventions**:
     - Use function declarations (not arrow functions) for components/handlers
     - Do not use `useCallback` or `useMemo` unless asked to optimise a given function
     - Do not type hook returns, let Typescript infer as much as possible
     - Never type with `any` unless a variable/attribute can ACTUALLY be of any type
     - avoid index and barrel files read_file 


c0:
    [{"id": "chatcmpl-tool-882e3b6bb3cde5ac", "call_id": "chatcmpl-tool-882e3b6bb3cde5ac", "response_item_id": "fc_chatcmpl-tool-882e3b6bb3cde5ac", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice/AutoGPT && git log --oneline -20\"}"}}, {"id": "chatcmpl-tool-a48dcbfdfc001d13", "call_id": "chatcmpl-tool-a48dcbfdfc001d13", "response_item_id": "fc_chatcmpl-tool-a48dcbfdfc001d13", "type": "function", "function": {"name": "search_files", "arguments": "{\"limit\": 30, \"path\": \"/home/ice/AutoGPT\", \"pattern\": \"^.*$\", \"target\": \"files\"}"}}]


c0:
  {"output": "a59ff3c35 feat(frontend): capture marketing-site triggerprompt into sessionStorage (#13248)\nc194ab1b7 Merge branch 'master' into dev\ncae869f7e fix(blocks): clean up file input base64 description (#13032)\n9073c0172 docs: fix Ayrshare comment typo (#13226)\n6ecb0cc1a fix(frontend/autopilot): improve AutoPilot OS push notification icon and copy (#13231)\n9c194bfa8 fix(backend/copilot-bot): point /unlink button to the new bots page (#13198)\naea4d5abd feat(platform): add Bots settings page with per-platform link management (#13222)\n7e2154c31 feat(backend/copilot): keep linked server names fresh from bot gateway events (#13221)\n8dc55d916 feat(backend/copilot-bot): post intro message when added to a server (#13220)\n5ac3fe29a feat(backend/copilot-bot): add /resume to pick and resume a past chat (#13219)\nd8d5d5f2b feat(platform): share agent chat results via public link (#13081)\n676fed209 fix(paywall): do not show for local users (#13229)\n4074fdb40 feat(backend/copilot-bot): add /new to start a fresh conversation (#13199)\nb5ab84784 fix(backend/copilot-bot): recover deleted chat sessions instead of erroring (#13197)\n8cc307208 fix(backend/copilot-bot): only answer other bots when @mentioned (#13174)\n7d8eee147 refactor(frontend/library): extract briefing tab sub-components and reorganize panel (#13213)\nbaef6f8c3 fix(copilot): strip null credential fields before validation (#13185)\na11174b7c feat(backend/copilot): require library similarity check before create_agent (#13080)\n6771f20cf fix(frontend/library): autopilot pill counts copilot follow-ups only, not graph schedules (#13212)\n4ff22cd0e fix(frontend): clean up agent briefing cost breakdown UX (#13196)", "exit_code": 0, "error": null} terminal 


c0:
    [{"id": "chatcmpl-tool-b9c975be711ba317", "call_id": "chatcmpl-tool-b9c975be711ba317", "response_item_id": "fc_chatcmpl-tool-b9c975be711ba317", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice/AutoGPT && find . -maxdepth 3 -type d | sed 's|^\\\\./||' | sort | head -80\"}"}}]


c0:
  {"output": ".\n.agents\n.claude\n.claude/skills\n.claude/skills/open-pr\n.claude/skills/orchestrate\n.claude/skills/pr-address\n.claude/skills/pr-polish\n.claude/skills/pr-review\n.claude/skills/pr-test\n.claude/skills/setup-repo\n.claude/skills/vercel-react-best-practices\n.claude/skills/worktree\n.claude/skills/write-frontend-tests\n.git\n.git/branches\n.git/hooks\n.git/info\n.git/logs\n.git/logs/refs\n.git/objects\n.git/objects/info\n.git/objects/pack\n.git/refs\n.git/refs/heads\n.git/refs/remotes\n.git/refs/tags\n.github\n.github/ISSUE_TEMPLATE\n.github/scripts\n.github/workflows\n.github/workflows/scripts\n.vscode\nassets\nautogpt_platform\nautogpt_platform/analytics\nautogpt_platform/analytics/queries\nautogpt_platform/autogpt_libs\nautogpt_platform/autogpt_libs/autogpt_libs\nautogpt_platform/backend\nautogpt_platform/backend/agents\nautogpt_platform/backend/backend\nautogpt_platform/backend/load-tests\nautogpt_platform/backend/migrations\nautogpt_platform/backend/scripts\nautogpt_platform/backend/snapshots\nautogpt_platform/backend/test\nautogpt_platform/db\nautogpt_platform/db/docker\nautogpt_platform/frontend\nautogpt_platform/frontend/.storybook\nautogpt_platform/frontend/public\nautogpt_platform/frontend/scripts\nautogpt_platform/frontend/src\nautogpt_platform/graph_templates\nautogpt_platform/installer\nclassic\nclassic/direct_benchmark\nclassic/direct_benchmark/challenges\nclassic/direct_benchmark/direct_benchmark\nclassic/forge\nclassic/forge/agbenchmark_config\nclassic/forge/forge\nclassic/forge/tests\nclassic/original_autogpt\nclassic/original_autogpt/.claude\nclassic/original_autogpt/.devcontainer\nclassic/original_autogpt/agbenchmark_config\nclassic/original_autogpt/autogpt\nclassic/original_autogpt/data\nclassic/original_autogpt/docs\nclassic/original_autogpt/hooks\nclassic/original_autogpt/plugins\nclassic/original_autogpt/scripts\nclassic/original_autogpt/tests\nclassic/reports\ndocs\ndocs/content\ndocs/content/challenges\ndocs/content/classic", "exit_code": 0, "error": null} terminal 


c0:
  # Análise do repositório AutoGPT

  **O que fiz:** clonei o repositório, li a documentação principal (`README.md`) e examinei as definições de stack do backend, frontend e estrutura do monorepo.

  **Problema**
  Automação de fluxos complexos com IA ainda é pouco acessível para maioria dos usuários. AutoGPT resolve isso oferecendo uma plataforma para criar, implantar e gerenciar agentes de IA contínuos que automatizam workflows de ponta a ponta.

  **Tema**
  Construção, implantação e gerenciamento de agentes autônomos de IA, com marketplace de agentes, editor visual de workflows, execução contínua e suporte a integrações com serviços externos.

  **Razão do hype**
  - Ecossistema de agentes autônomos popular e pioneiro (um dos mais estrelados do mundo).
  - Processamento contínuo, não só chat: agentes leem contextos (ex.: Reddit, YouTube) e executam ações sem intervenção.
  - Interface low-code para montar workflows por blocos.
  - Marketplace para compartilhar templates de agentes.
  - Stack robusta e open source com backend/frontend bem definidos.

  **Tecnologias principais**

  Backend:
  - Python >=3.10,<3.14, FastAPI, Uvicorn
  - PostgreSQL + Prisma + pgvector
  - Redis, RabbitMQ
  - Supabase (auth), Pydantic, SQLAlchemy
  - Integrações: OpenAI, Anthropic, Claude Agent SDK, ElevenLabs, Groq, Ollama, yt-dlp, Reddit (praw), Twitter (tweepy), Google APIs, E2B, Firecrawl, Exa
  - Observabilidade: Sentry, Prometheus, Langfuse, PostHog, LangSmith
  - Testes: pytest + snapshot testing

  Frontend:
  - Next.js 15 (App Router), React 18, TypeScript
  - Tailwind CSS, Radix UI, shadcn/ui, Phosphor Icons
  - Zustand, React Query, Orval (OpenAPI -> TS client)
  - Workflow builder visual: @xyflow/react
  - Vitest + React Testing Library + MSW; Playwright para E2E
  - Storybook, Sentry, Launchdarkly, PostHog

  Infra/Dev:
  - Docker Compose, Poetry, pnpm, PNPM workspaces
  - Pre-commit, Ruff, Black, Isort
  - CI/CD via GitHub Actions

  Arquitetura geral: monorepo com `autogpt_platform/backend`, `autogpt_platform/frontend` e `autogpt_platform/autogpt_libs`, além da pasta `classic` contendo versões anteriores e ferramentas de benchmark.  


c0:
    [{"id": "chatcmpl-tool-826aaa0560a4baa6", "call_id": "chatcmpl-tool-826aaa0560a4baa6", "response_item_id": "fc_chatcmpl-tool-826aaa0560a4baa6", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\": \"cd /home/ice && git clone --depth 1 https://github.com/vllm-project/vllm.git\", \"timeout\": 120}"}}]


c0:
    [{"id": "chatcmpl-tool-a4b1b92fa9032a51", "call_id": "chatcmpl-tool-a4b1b92fa9032a51", "response_item_id": "fc_chatcmpl-tool-a4b1b92fa9032a51", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/vllm/README.md\", \"limit\": 150}"}}, {"id": "chatcmpl-tool-af81555537e850d2", "call_id": "chatcmpl-tool-af81555537e850d2", "response_item_id": "fc_chatcmpl-tool-af81555537e850d2", "type": "function", "function": {"name": "search_files", "arguments": "{\"target\": \"files\", \"path\": \"/home/ice/vllm\", \"pattern\": \"setup.py\"}"}}]


c0:
  {"content": "1|<!-- markdownlint-disable MD001 MD041 -->\n2|<p align=\"center\">\n3|  <picture>\n4|    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/vllm-project/vllm/main/docs/assets/logos/vllm-logo-text-dark.png\">\n5|    <img alt=\"vLLM\" src=\"https://raw.githubusercontent.com/vllm-project/vllm/main/docs/assets/logos/vllm-logo-text-light.png\" width=55%>\n6|  </picture>\n7|</p>\n8|\n9|<h3 align=\"center\">\n10|Easy, fast, and cheap LLM serving for everyone\n11|</h3>\n12|\n13|<p align=\"center\">\n14|| <a href=\"https://docs.vllm.ai\"><b>Documentation</b></a> | <a href=\"https://blog.vllm.ai/\"><b>Blog</b></a> | <a href=\"https://arxiv.org/abs/2309.06180\"><b>Paper</b></a> | <a href=\"https://x.com/vllm_project\"><b>Twitter/X</b></a> | <a href=\"https://discuss.vllm.ai\"><b>User Forum</b></a> | <a href=\"https://slack.vllm.ai\"><b>Developer Slack</b></a> |\n15|</p>\n16|\n17|🔥 We have built a vLLM website to help you get started with vLLM. Please visit [vllm.ai](https://vllm.ai) to learn more.\n18|For events, please visit [vllm.ai/events](https://vllm.ai/events) to join us.\n19|\n20|---\n21|\n22|## About\n23|\n24|vLLM is a fast and easy-to-use library for LLM inference and serving.\n25|\n26|Originally developed in the [Sky Computing Lab](https://sky.cs.berkeley.edu) at UC Berkeley, vLLM has grown into one of the most active open-source AI projects built and maintained by a diverse community of many dozens of academic institutions and companies from over 2000 contributors.\n27|\n28|vLLM is fast with:\n29|\n30|- State-of-the-art serving throughput\n31|- Efficient management of attention key and value memory with [**PagedAttention**](https://blog.vllm.ai/2023/06/20/vllm.html)\n32|- Continuous batching of incoming requests, chunked prefill, prefix caching\n33|- Fast and flexible model execution with piecewise and full CUDA/HIP graphs\n34|- Quantization: FP8, MXFP8/MXFP4, NVFP4, INT8, INT4, GPTQ/AWQ, GGUF, compressed-tensors, ModelOpt, TorchAO, and [more](https://docs.vllm.ai/en/latest/features/quantization/index.html)\n35|- Optimized attention kernels including FlashAttention, FlashInfer, TRTLLM-GEN, FlashMLA, and Triton\n36|- Optimized GEMM/MoE kernels for various precisions using CUTLASS, TRTLLM-GEN, CuTeDSL\n37|- Speculative decoding including n-gram, suffix, EAGLE, DFlash\n38|- Automatic kernel generation and graph-level transformations using torch.compile\n39|- Disaggregated prefill, decode, and encode\n40|\n41|vLLM is flexible and easy to use with:\n42|\n43|- Seamless integration with popular Hugging Face models\n44|- High-throughput serving with various decoding algorithms, including *parallel sampling*, *beam search*, and more\n45|- Tensor, pipeline, data, expert, and context parallelism for distributed inference\n46|- Streaming outputs\n47|- Generation of structured outputs using xgrammar or guidance\n48|- Tool calling and reasoning parsers\n49|- OpenAI-compatible API server, plus Anthropic Messages API and gRPC support\n50|- Efficient multi-LoRA support for dense and MoE layers\n51|- Support for NVIDIA GPUs, AMD GPUs, and x86/ARM/PowerPC CPUs. Additionally, diverse hardware plugins such as Google TPUs, Intel Gaudi, IBM Spyre, Huawei Ascend, Rebellions NPU, Apple Silicon, MetaX GPU, and more.\n52|\n53|vLLM seamlessly supports 200+ model architectures on Hugging Face, including:\n54|\n55|- Decoder-only LLMs (e.g., Llama, Qwen, Gemma)\n56|- Mixture-of-Expert LLMs (e.g., Mixtral, DeepSeek-V3, Qwen-MoE, GPT-OSS)\n57|- Hybrid attention and state-space models (e.g., Mamba, Qwen3.5)\n58|- Multi-modal models (e.g., LLaVA, Qwen-VL, Pixtral)\n59|- Embedding and retrieval models (e.g., E5-Mistral, GTE, ColBERT)\n60|- Reward and classification models (e.g., Qwen-Math)\n61|\n62|Find the full list of supported models [here](https://docs.vllm.ai/en/latest/models/supported_models.html).\n63|\n64|## Getting Started\n65|\n66|Install vLLM with [`uv`](https://docs.astral.sh/uv/) (recommended) or `pip`:\n67|\n68|```bash\n69|uv pip install vllm\n70|```\n71|\n72|Or [build from source](https://docs.vllm.ai/en/latest/getting_started/installation/gpu/index.html#build-wheel-from-source) for development.\n73|\n74|Visit our [documentation](https://docs.vllm.ai/en/latest/) to learn more.\n75|\n76|- [Installation](https://docs.vllm.ai/en/latest/getting_started/installation.html)\n77|- [Quickstart](https://docs.vllm.ai/en/latest/getting_started/quickstart.html)\n78|- [List of Supported Models](https://docs.vllm.ai/en/latest/models/supported_models.html)\n79|\n80|## Contributing\n81|\n82|We welcome and value any contributions and collaborations.\n83|Please check out [Contributing to vLLM](https://docs.vllm.ai/en/latest/contributing/index.html) for how to get involved.\n84|\n85|## Citation\n86|\n87|If you use vLLM for your research, please cite our [paper](https://arxiv.org/abs/2309.06180):\n88|\n89|```bibtex\n90|@inproceedings{kwon2023efficient,\n91|  title={Efficient Memory Management for Large Language Model Serving with PagedAttention},\n92|  author={Woosuk Kwon and Zhuohan Li and Siyuan Zhuang and Ying Sheng and Lianmin Zheng and Cody Hao Yu and Joseph E. Gonzalez and Hao Zhang and Ion Stoica},\n93|  booktitle={Proceedings of the ACM SIGOPS 29th Symposium on Operating Systems Principles},\n94|  year={2023}\n95|}\n96|```\n97|\n98|## Contact Us\n99|\n100|<!-- --8<-- [start:contact-us] -->\n101|- For technical questions and feature requests, please use GitHub [Issues](https://github.com/vllm-project/vllm/issues)\n102|- For discussing with fellow users, please use the [vLLM Forum](https://discuss.vllm.ai)\n103|- For coordinating contributions and development, please use [Slack](https://slack.vllm.ai)\n104|- For security disclosures, please use GitHub's [Security Advisories](https://github.com/vllm-project/vllm/security/advisories) feature\n105|- For collaborations and partnerships, please contact us at [collaboration@vllm.ai](mailto:collaboration@vllm.ai)\n106|<!-- --8<-- [end:contact-us] -->\n107|\n108|## Media Kit\n109|\n110|- If you wish to use vLLM's logo, please refer to [our media kit repo](https://github.com/vllm-project/media-kit)\n111|", "total_lines": 110, "file_size": 5696, "truncated": false, "is_binary": false, "is_image": false}

  [Subdirectory context discovered: vllm/AGENTS.md]
  # Agent Instructions for vLLM

  > These instructions apply to **all** AI-assisted contributions to `vllm-project/vllm`.
  > Breaching these guidelines can result in automatic banning.

  ## 1. Contribution Policy (Mandatory)

  ### Duplicate-work checks

  Before proposing a PR, run these checks:

  ```bash
  gh issue view <issue_number> --repo vllm-project/vllm --comments
  gh pr list --repo vllm-project/vllm --state open --search "<issue_number> in:body"
  gh pr list --repo vllm-project/vllm --state open --search "<short area keywords>"
  ```

  - If an open PR already addresses the same fix, do not open another.
  - If your approach is materially different, explain the difference in the issue.

  ### No low-value busywork PRs

  Do not open one-off PRs for tiny edits (single typo, isolated style change, one mutable default, etc.). Mechanical cleanups are acceptable only when bundled with substantive work.

  ### Accountability

  - Pure code-agent PRs are **not allowed**. A human submitter must understand and defend the change end-to-end.
  - The submitting human must review every changed line and run relevant tests.
  - PR descriptions for AI-assisted work **must** include:
      - Why this is not duplicating an existing PR.
      - Test commands run and results.
      - Clear statement that AI assistance was used.

  ### Fail-closed behavior

  If work is duplicate/trivial busywork, **do not proceed**. Return a short explanation of what is missing.

  ---

  ## 2. Development Workflow

  - **Never use system `python3` or bare `pip`/`pip install`.** All Python commands must go through `uv` and `.venv/bin/python`.

  ### Environment setup

  ```bash
  # Install `uv` if you don't have it already:
  curl -LsSf https://astral.sh/uv/install.sh | sh

  # Always use `uv` for Python environment management:
  uv venv --python 3.12
  source .venv/bin/activate

  # Always make sure `pre-commit` and its hooks are installed:
  uv pip install -r requirements/lint.txt
  pre-commit install
  ```

  ### Installing dependencies

  ```bash
  # If you are only making Python changes:
  VLLM_USE_PRECOMPILED=1 uv pip install -e . --torch-backend=auto

  # If you are also making C/C++ changes:
  uv pip install -e . --torch-backend=auto
  ```

  ### Running tests

  > Requires [Environment setup](#environment-setup) and [Installing dependencies](#installing-dependencies).

  ```bash
  # Install test dependencies.
  # requirements/test/cuda.txt is pinned to x86_64; on other platforms, use the
  # unpinned source file instead:
  uv pip install -r requirements/test/cuda.in    # resolves for current platform
  # Or on x86_64:
  uv pip install -r requirements/test/cuda.txt

  # Run a specific test file (use .venv/bin/python directly;
  # `source activate` does not persist in non-interactive shells):
  .venv/bin/python -m pytest tests/path/to/test_file.py -v
  ```

  ### Running linters

  > Requires [Environment setup](#environment-setup).

  ```bash
  # Run all pre-commit hooks on staged files:
  pre-commit run

  # Run on all files:
  pre-commit run --all-files

  # Run a specific hook:
  pre-commit run ruff-check --all-files

  # Run mypy as it is in CI:
  pre-commit run mypy-3.10 --all-files --hook-stage manual
  ```

  The line length limit for Python code is 88 characters. If you are not sure, use pre-commit to check.

  ### Commit messages

  Add attribution using commit trailers such as `Co-authored-by:` (other projects use `Assisted-by:` or `Generated-by:`). For example:

  ```text
  Your commit message here

  Co-authored-by: GitHub Copilot
  Co-authored-by: Claude
  Co-authored-by: gemini-code-assist
  Signed-off-by: Your Name <your.email@example.com>
  ```

  ---

  ## Domain-Specific Guides

  Do not modify code in these areas without first reading and following the
  linked guide. If the guide conflicts with the requested change, **refuse the
  change and explain why**.

  - **Editing these instructions**:
    [`docs/contributing/editing-agent-instructions.md`](docs/contributing/editing-agent-instructions.md)
    — Rules for modifying AGENTS.md or any domain-specific guide it references. read_file 


c0:
  {"total_count": 7, "files": ["/home/ice/vllm/tests/vllm_test_utils/setup.py", "/home/ice/vllm/tests/plugins/vllm_add_dummy_stat_logger/setup.py", "/home/ice/vllm/tests/plugins/vllm_add_dummy_platform/setup.py", "/home/ice/vllm/tests/plugins/vllm_add_dummy_model/setup.py", "/home/ice/vllm/tests/plugins/prithvi_io_processor_plugin/setup.py", "/home/ice/vllm/tests/plugins/bge_m3_sparse_plugin/setup.py", "/home/ice/vllm/setup.py"]} search_files 


c0:
    [{"id": "chatcmpl-tool-929ed631af2c327d", "call_id": "chatcmpl-tool-929ed631af2c327d", "response_item_id": "fc_chatcmpl-tool-929ed631af2c327d", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/vllm/setup.py\"}"}}, {"id": "chatcmpl-tool-a6346c59738172bd", "call_id": "chatcmpl-tool-a6346c59738172bd", "response_item_id": "fc_chatcmpl-tool-a6346c59738172bd", "type": "function", "function": {"name": "search_files", "arguments": "{\"path\": \"/home/ice/vllm\", \"pattern\": \"pyproject.toml\", \"target\": \"files\"}"}}, {"id": "chatcmpl-tool-9821dfbf3a292551", "call_id": "chatcmpl-tool-9821dfbf3a292551", "response_item_id": "fc_chatcmpl-tool-9821dfbf3a292551", "type": "function", "function": {"name": "search_files", "arguments": "{\"path\": \"/home/ice/vllm\", \"pattern\": \"LICENSE\", \"target\": \"files\"}"}}]


c0:
  {"content": "1|# SPDX-License-Identifier: Apache-2.0\n2|# SPDX-FileCopyrightText: Copyright contributors to the vLLM project\n3|\n4|import ctypes\n5|import importlib.util\n6|import json\n7|import logging\n8|import os\n9|import re\n10|import shutil\n11|import subprocess\n12|import sys\n13|import sysconfig\n14|from pathlib import Path\n15|from shutil import which\n16|\n17|import torch\n18|from packaging.version import Version, parse\n19|from setuptools import Extension, setup\n20|from setuptools.command.build_ext import build_ext\n21|from setuptools_rust import Binding, RustExtension\n22|from setuptools_rust.build import build_rust\n23|from setuptools_scm import get_version\n24|from torch.utils.cpp_extension import CUDA_HOME, ROCM_HOME\n25|\n26|\n27|def load_module_from_path(module_name, path):\n28|    spec = importlib.util.spec_from_file_location(module_name, path)\n29|    module = importlib.util.module_from_spec(spec)\n30|    sys.modules[module_name] = module\n31|    spec.loader.exec_module(module)\n32|    return module\n33|\n34|\n35|ROOT_DIR = Path(__file__).parent\n36|logger = logging.getLogger(__name__)\n37|\n38|PRECOMPILED_RUST_FRONTEND_PATH = ROOT_DIR / \"vllm\" / \"vllm-rs\"\n39|\n40|# cannot import envs directly because it depends on vllm,\n41|#  which is not installed yet\n42|envs = load_module_from_path(\"envs\", os.path.join(ROOT_DIR, \"vllm\", \"envs.py\"))\n43|\n44|VLLM_TARGET_DEVICE = envs.VLLM_TARGET_DEVICE\n45|USE_PRECOMPILED_EXTENSIONS = envs.VLLM_USE_PRECOMPILED\n46|# VLLM_USE_PRECOMPILED implies precompiled rust frontend too.\n47|USE_PRECOMPILED_RUST_FRONTEND = (\n48|    envs.VLLM_USE_PRECOMPILED or envs.VLLM_USE_PRECOMPILED_RUST\n49|)\n50|\n51|\n52|def should_require_rust_frontend() -> bool:\n53|    value = os.getenv(\"VLLM_REQUIRE_RUST_FRONTEND\", \"\")\n54|    return value.lower() not in (\"\", \"0\", \"false\", \"no\")\n55|\n56|\n57|if sys.platform.startswith(\"darwin\") and VLLM_TARGET_DEVICE != \"cpu\":\n58|    logger.warning(\"VLLM_TARGET_DEVICE automatically set to `cpu` due to macOS\")\n59|    VLLM_TARGET_DEVICE = \"cpu\"\n60|elif not (sys.platform.startswith(\"linux\") or sys.platform.startswith(\"darwin\")):\n61|    logger.warning(\n62|        \"vLLM only supports Linux platform (including WSL) and MacOS.\"\n63|        \"Building on %s, \"\n64|        \"so vLLM may not be able to run correctly\",\n65|        sys.platform,\n66|    )\n67|    VLLM_TARGET_DEVICE = \"empty\"\n68|elif sys.platform.startswith(\"linux\") and os.getenv(\"VLLM_TARGET_DEVICE\") is None:\n69|    if torch.version.hip is not None:\n70|        VLLM_TARGET_DEVICE = \"rocm\"\n71|        logger.info(\"Auto-detected ROCm\")\n72|    elif torch.version.xpu is not None:\n73|        VLLM_TARGET_DEVICE = \"xpu\"\n74|        logger.info(\"Auto-detected XPU\")\n75|    elif torch.version.cuda is not None:\n76|        VLLM_TARGET_DEVICE = \"cuda\"\n77|        logger.info(\"Auto-detected CUDA\")\n78|    else:\n79|        VLLM_TARGET_DEVICE = \"cpu\"\n80|\n81|\n82|def is_sccache_available() -> bool:\n83|    return which(\"sccache\") is not None and not bool(\n84|        int(os.getenv(\"VLLM_DISABLE_SCCACHE\", \"0\"))\n85|    )\n86|\n87|\n88|def is_ccache_available() -> bool:\n89|    return which(\"ccache\") is not None\n90|\n91|\n92|def is_ninja_available() -> bool:\n93|    return which(\"ninja\") is not None\n94|\n95|\n96|def is_freethreaded():\n97|    return bool(sysconfig.get_config_var(\"Py_GIL_DISABLED\"))\n98|\n99|\n100|def should_bundle_tcmalloc() -> bool:\n101|    import platform\n102|\n103|    return (\n104|        VLLM_TARGET_DEVICE == \"cpu\"\n105|        and sys.platform.startswith(\"linux\")\n106|        and platform.machine() in (\"aarch64\", \"x86_64\")\n107|    )\n108|\n109|\n110|def find_tcmalloc() -> Path | None:\n111|    try:\n112|        # get all shared libs the dynamic loader knows about\n113|        output = subprocess.check_output(\n114|            [\"ldconfig\", \"-p\"],\n115|            text=True,\n116|            stderr=subprocess.DEVNULL,\n117|        )\n118|    except Exception:\n119|        return None\n120|\n121|    # search for libtcmalloc and libtcmalloc_minimal\n122|    for library_pattern in (\n123|        r\"\\blibtcmalloc_minimal\\.so\\.(\\d+)\\b\",\n124|        r\"\\blibtcmalloc\\.so\\.(\\d+)\\b\",\n125|    ):\n126|        candidates: list[tuple[int, Path]] = []\n127|        for line in output.splitlines():\n128|            match = re.search(library_pattern, line)\n129|            if match is None or \"=>\" not in line:\n130|                continue\n131|            candidate = Path(line.split(\"=>\")[1].strip())\n132|            if candidate.exists():\n133|                candidates.append((int(match.group(1)), candidate))\n134|\n135|        if candidates:\n136|            # if multiple candidates are found, pick the one with the highest\n137|            # version number\n138|            return max(candidates, key=lambda item: item[0])[1]\n139|\n140|    return None\n141|\n142|\n143|def bundle_tcmalloc(build_lib: str) -> None:\n144|    tcmalloc_library = find_tcmalloc()\n145|    if tcmalloc_library is None:\n146|        logger.warning(\n147|            \"Failed to locate tcmalloc. For best performance, \"\n148|            \"please install tcmalloc (e.g. `sudo apt-get \"\n149|            \"install -y --no-install-recommends libtcmalloc-minimal4`)\"\n150|        )\n151|        return\n152|\n153|    bundle_dir = os.path.join(build_lib, \"vllm\", \"libs\")\n154|    os.makedirs(bundle_dir, exist_ok=True)\n155|    bundle_path = os.path.join(bundle_dir, tcmalloc_library.name)\n156|    shutil.copy2(tcmalloc_library, bundle_path)\n157|    logger.info(\"Bundled tcmalloc into wheel: %s\", bundle_path)\n158|\n159|\n160|class CMakeExtension(Extension):\n161|    def __init__(self, name: str, cmake_lists_dir: str = \".\", **kwa) -> None:\n162|        super().__init__(name, sources=[], py_limited_api=not is_freethreaded(), **kwa)\n163|        self.cmake_lists_dir = os.path.abspath(cmake_lists_dir)\n164|\n165|\n166|class cmake_build_ext(build_ext):\n167|    # A dict of extension directories that have been configured.\n168|    did_config: dict[str, bool] = {}\n169|\n170|    #\n171|    # Determine number of compilation jobs and optionally nvcc compile threads.\n172|    #\n173|    def compute_num_jobs(self):\n174|        # `num_jobs` is either the value of the MAX_JOBS environment variable\n175|        # (if defined) or the number of CPUs available.\n176|        num_jobs = envs.MAX_JOBS\n177|        if num_jobs is not None:\n178|            num_jobs = int(num_jobs)\n179|            logger.info(\"Using MAX_JOBS=%d as the number of jobs.\", num_jobs)\n180|        else:\n181|            try:\n182|                # os.sched_getaffinity() isn't universally available, so fall\n183|                #  back to os.cpu_count() if we get an error here.\n184|                num_jobs = len(os.sched_getaffinity(0))\n185|            except AttributeError:\n186|                num_jobs = os.cpu_count()\n187|\n188|        nvcc_threads = None\n189|        if _is_cuda() and CUDA_HOME is not None:\n190|            try:\n191|                nvcc_version = get_nvcc_cuda_version()\n192|                if nvcc_version >= Version(\"11.2\"):\n193|                    # `nvcc_threads` is either the value of the NVCC_THREADS\n194|                    # environment variable (if defined) or 1.\n195|                    # when it is set, we reduce `num_jobs` to avoid\n196|                    # overloading the system.\n197|                    nvcc_threads = envs.NVCC_THREADS\n198|                    if nvcc_threads is not None:\n199|                        nvcc_threads = int(nvcc_threads)\n200|                        logger.info(\n201|                            \"Using NVCC_THREADS=%d as the number of nvcc threads.\",\n202|                            nvcc_threads,\n203|                        )\n204|                    else:\n205|                        nvcc_threads = 1\n206|                    num_jobs = max(1, num_jobs // nvcc_threads)\n207|            except Exception as e:\n208|                logger.warning(\"Failed to get NVCC version: %s\", e)\n209|\n210|        return num_jobs, nvcc_threads\n211|\n212|    #\n213|    # Perform cmake configuration for a single extension.\n214|    #\n215|    def configure(self, ext: CMakeExtension) -> None:\n216|        # If we've already configured using the CMakeLists.txt for\n217|        # this extension, exit early.\n218|        if ext.cmake_lists_dir in cmake_build_ext.did_config:\n219|            return\n220|\n221|        cmake_build_ext.did_config[ext.cmake_lists_dir] = True\n222|\n223|        # Select the build type.\n224|        # Note: optimization level + debug info are set by the build type\n225|        default_cfg = \"Debug\" if self.debug else \"RelWithDebInfo\"\n226|        cfg = envs.CMAKE_BUILD_TYPE or default_cfg\n227|\n228|        cmake_args = [\n229|            \"-DCMAKE_BUILD_TYPE={}\".format(cfg),\n230|            \"-DVLLM_TARGET_DEVICE={}\".format(VLLM_TARGET_DEVICE),\n231|        ]\n232|\n233|        verbose = envs.VERBOSE\n234|        if verbose:\n235|            cmake_args += [\"-DCMAKE_VERBOSE_MAKEFILE=ON\"]\n236|\n237|        if is_sccache_available():\n238|            cmake_args += [\n239|                \"-DCMAKE_C_COMPILER_LAUNCHER=sccache\",\n240|                \"-DCMAKE_CXX_COMPILER_LAUNCHER=sccache\",\n241|                \"-DCMAKE_CUDA_COMPILER_LAUNCHER=sccache\",\n242|                \"-DCMAKE_HIP_COMPILER_LAUNCHER=sccache\",\n243|            ]\n244|        elif is_ccache_available():\n245|            cmake_args += [\n246|                \"-DCMAKE_C_COMPILER_LAUNCHER=ccache\",\n247|                \"-DCMAKE_CXX_COMPILER_LAUNCHER=ccache\",\n248|                \"-DCMAKE_CUDA_COMPILER_LAUNCHER=ccache\",\n249|                \"-DCMAKE_HIP_COMPILER_LAUNCHER=ccache\",\n250|            ]\n251|\n252|        # Pass the python executable to cmake so it can find an exact\n253|        # match.\n254|        cmake_args += [\"-DVLLM_PYTHON_EXECUTABLE={}\".format(sys.executable)]\n255|\n256|        # Pass the python path to cmake so it can reuse the build dependencies\n257|        # on subsequent calls to python.\n258|        cmake_args += [\"-DVLLM_PYTHON_PATH={}\".format(\":\".join(sys.path))]\n259|\n260|        # Override the base directory for FetchContent downloads to $ROOT/.deps\n261|        # This allows sharing dependencies between profiles,\n262|        # and plays more nicely with sccache.\n263|        # To override this, set the FETCHCONTENT_BASE_DIR environment variable.\n264|        fc_base_dir = os.path.join(ROOT_DIR, \".deps\")\n265|        fc_base_dir = os.environ.get(\"FETCHCONTENT_BASE_DIR\", fc_base_dir)\n266|        cmake_args += [\"-DFETCHCONTENT_BASE_DIR={}\".format(fc_base_dir)]\n267|\n268|        #\n269|        # Setup parallelism and build tool\n270|        #\n271|        num_jobs, nvcc_threads = self.compute_num_jobs()\n272|\n273|        if nvcc_threads:\n274|            cmake_args += [\"-DNVCC_THREADS={}\".format(nvcc_threads)]\n275|\n276|        if is_ninja_available():\n277|            build_tool = [\"-G\", \"Ninja\"]\n278|            cmake_args += [\n279|                \"-DCMAKE_JOB_POOL_COMPILE:STRING=compile\",\n280|                \"-DCMAKE_JOB_POOLS:STRING=compile={}\".format(num_jobs),\n281|            ]\n282|        else:\n283|            # Default build tool to whatever cmake picks.\n284|            build_tool = []\n285|        # Make sure we use the nvcc from CUDA_HOME\n286|        if _is_cuda() and CUDA_HOME is not None:\n287|            cmake_args += [f\"-DCMAKE_CUDA_COMPILER={CUDA_HOME}/bin/nvcc\"]\n288|        elif _is_hip() and ROCM_HOME is not None:\n289|            cmake_args += [f\"-DROCM_PATH={ROCM_HOME}\"]\n290|\n291|        other_cmake_args = os.environ.get(\"CMAKE_ARGS\")\n292|        if other_cmake_args:\n293|            cmake_args += other_cmake_args.split()\n294|\n295|        subprocess.check_call(\n296|            [\"cmake\", ext.cmake_lists_dir, *build_tool, *cmake_args],\n297|            cwd=self.build_temp,\n298|        )\n299|\n300|    def build_extensions(self) -> None:\n301|        # Ensure that CMake is present and working\n302|        try:\n303|            subprocess.check_output([\"cmake\", \"--version\"])\n304|        except OSError as e:\n305|            raise RuntimeError(\"Cannot find CMake executable\") from e\n306|\n307|        # Create build directory if it does not exist.\n308|        if not os.path.exists(self.build_temp):\n309|            os.makedirs(self.build_temp)\n310|\n311|        targets = []\n312|\n313|        def target_name(s: str) -> str:\n314|            return s.removeprefix(\"vllm.\").removeprefix(\"vllm_flash_attn.\")\n315|\n316|        # Build all the extensions\n317|        for ext in self.extensions:\n318|            self.configure(ext)\n319|            targets.append(target_name(ext.name))\n320|\n321|        num_jobs, _ = self.compute_num_jobs()\n322|\n323|        build_args = [\n324|            \"--build\",\n325|            \".\",\n326|            f\"-j={num_jobs}\",\n327|            *[f\"--target={name}\" for name in targets],\n328|        ]\n329|\n330|        subprocess.check_call([\"cmake\", *build_args], cwd=self.build_temp)\n331|\n332|        # Install the libraries\n333|        for ext in self.extensions:\n334|            # Install the extension into the proper location\n335|            outdir = Path(self.get_ext_fullpath(ext.name)).parent.absolute()\n336|\n337|            # Skip if the install directory is the same as the build directory\n338|            if outdir == self.build_temp:\n339|                continue\n340|\n341|            # CMake appends the extension prefix to the install path,\n342|            # and outdir already contains that prefix, so we need to remove it.\n343|            prefix = outdir\n344|            for _ in range(ext.name.count(\".\")):\n345|                prefix = prefix.parent\n346|\n347|            # prefix here should actually be the same for all components\n348|            install_args = [\n349|                \"cmake\",\n350|                \"--install\",\n351|                \".\",\n352|                \"--prefix\",\n353|                prefix,\n354|                \"--component\",\n355|                target_name(ext.name),\n356|            ]\n357|            subprocess.check_call(install_args, cwd=self.build_temp)\n358|\n359|    def run(self):\n360|        # First, run the standard build_ext command to compile the extensions\n361|        super().run()\n362|\n363|        # bundle tcmalloc into CPU wheels for best OOB perf\n364|        if should_bundle_tcmalloc():\n365|            bundle_tcmalloc(self.build_lib)\n366|\n367|        # copy vllm/vllm_flash_attn/**/*.py from self.build_lib to current\n368|        # directory so that they can be included in the editable build\n369|        import glob\n370|\n371|        files = glob.glob(\n372|            os.path.join(self.build_lib, \"vllm\", \"vllm_flash_attn\", \"**\", \"*.py\"),\n373|            recursive=True,\n374|        )\n375|        for file in files:\n376|            dst_file = os.path.join(\n377|                \"vllm/vllm_flash_attn\", file.split(\"vllm/vllm_flash_attn/\")[-1]\n378|            )\n379|            print(f\"Copying {file} to {dst_file}\")\n380|            os.makedirs(os.path.dirname(dst_file), exist_ok=True)\n381|            self.copy_file(file, dst_file)\n382|\n383|        if _is_cuda() or _is_hip():\n384|            # copy vllm/third_party/triton_kernels/**/*.py from self.build_lib\n385|            # to current directory so that they can be included in the editable\n386|            # build\n387|            print(\n388|                f\"Copying {self.build_lib}/vllm/third_party/triton_kernels \"\n389|                \"to vllm/third_party/triton_kernels\"\n390|            )\n391|            shutil.copytree(\n392|                f\"{self.build_lib}/vllm/third_party/triton_kernels\",\n393|                \"vllm/third_party/triton_kernels\",\n394|                dirs_exist_ok=True,\n395|            )\n396|\n397|        if _is_cuda():\n398|            # copy vendored deep_gemm package from build_lib to source tree\n399|            # for editable installs\n400|            deep_gemm_build = os.path.join(\n401|                self.build_lib, \"vllm\", \"third_party\", \"deep_gemm\"\n402|            )\n403|            if os.path.exists(deep_gemm_build):\n404|                print(f\"Copying {deep_gemm_build} to vllm/third_party/deep_gemm\")\n405|                shutil.copytree(\n406|                    deep_gemm_build,\n407|                    \"vllm/third_party/deep_gemm\",\n408|                    dirs_exist_ok=True,\n409|                )\n410|\n411|\n412|class precompiled_build_ext(build_ext):\n413|    \"\"\"Disables extension building when using precompiled binaries.\"\"\"\n414|\n415|    def run(self) -> None:\n416|        return\n417|\n418|    def build_extensions(self) -> None:\n419|        print(\"Skipping build_ext: using precompiled extensions.\")\n420|        return\n421|\n422|\n423|class precompiled_build_rust(build_rust):\n424|    \"\"\"Skips local Rust builds when the precompiled wheel already ships vllm-rs.\"\"\"\n425|\n426|    def run(self) -> None:\n427|        if PRECOMPILED_RUST_FRONTEND_PATH.exists():\n428|            logger.info(\n429|                \"Skipping local Rust build: using precompiled %s\",\n430|                PRECOMPILED_RUST_FRONTEND_PATH,\n431|            )\n432|            return\n433|\n434|        logger.warning(\n435|            \"Precompiled wheel did not provide %s; falling back to local Rust build.\",\n436|            PRECOMPILED_RUST_FRONTEND_PATH,\n437|        )\n438|        super().run()\n439|\n440|\n441|class precompiled_wheel_utils:\n442|    \"\"\"Extracts libraries and other files from an existing wheel.\"\"\"\n443|\n444|    @staticmethod\n445|    def fetch_metadata_for_variant(\n446|        commit: str, variant: str | None\n447|    ) -> tuple[list[dict], str]:\n448|        \"\"\"\n449|        Fetches metadata for a specific variant of the precompiled wheel.\n450|        \"\"\"\n451|        variant_dir = f\"{variant}/\" if variant is not None else \"\"\n452|        repo_url = f\"https://wheels.vllm.ai/{commit}/{variant_dir}vllm/\"\n453|        meta_url = repo_url + \"metadata.json\"\n454|        print(f\"Trying to fetch nightly build metadata from {meta_url}\")\n455|        from urllib.request import urlopen\n456|\n457|        with urlopen(meta_url) as resp:\n458|            # urlopen raises HTTPError on unexpected status code\n459|            wheels = json.loads(resp.read().decode(\"utf-8\"))\n460|        return wheels, repo_url\n461|\n462|    @staticmethod\n463|    def is_rocm_system() -> bool:\n464|        \"\"\"Detect ROCm without relying on torch (for build environment).\"\"\"\n465|        if os.getenv(\"ROCM_PATH\"):\n466|            return True\n467|        if os.path.isdir(\"/opt/rocm\"):\n468|            return True\n469|        if which(\"rocminfo\") is not None:\n470|            return True\n471|        try:\n472|            import torch\n473|\n474|            return torch.version.hip is not None\n475|        except ImportError:\n476|            return False\n477|\n478|    @staticmethod\n479|    def detect_system_cuda_variant() -> str:\n480|        \"\"\"Auto-detect CUDA variant from torch, nvidia-smi, or env default.\"\"\"\n481|\n482|        # Map CUDA major version to hosted wheel variants on wheels.vllm.ai\n483|        supported = {12: \"cu129\", 13: \"cu130\"}\n484|\n485|        # Respect explicitly set VLLM_MAIN_CUDA_VERSION\n486|        if envs.is_set(\"VLLM_MAIN_CUDA_VERSION\"):\n487|            v = envs.VLLM_MAIN_CUDA_VERSION\n488|            print(f\"Using VLLM_MAIN_CUDA_VERSION={v}\")\n489|            return \"cu\" + v.replace(\".\", \"\")[:3]\n490|\n491|        # Try torch.version.cuda\n492|        cuda_version = None\n493|        try:\n494|            import torch\n495|\n496|            cuda_version = torch.version.cuda\n497|        except Exception:\n498|            pass\n499|\n500|        # Try nvidia-smi\n501|", "total_lines": 1199, "file_size": 45537, "truncated": true, "hint": "Use offset=501 to continue reading (showing 1-500 of 1199 lines)", "is_binary": false, "is_image": false} read_file 


c0:
  {"total_count": 2, "files": ["/home/ice/vllm/pyproject.toml", "/home/ice/vllm/examples/features/structured_outputs/pyproject.toml"]} search_files 


c0:
    [{"id": "chatcmpl-tool-9e8fad65fe0a2ad8", "call_id": "chatcmpl-tool-9e8fad65fe0a2ad8", "response_item_id": "fc_chatcmpl-tool-9e8fad65fe0a2ad8", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/vllm/pyproject.toml\"}"}}, {"id": "chatcmpl-tool-ab54ccc9a8b0bdb8", "call_id": "chatcmpl-tool-ab54ccc9a8b0bdb8", "response_item_id": "fc_chatcmpl-tool-ab54ccc9a8b0bdb8", "type": "function", "function": {"name": "read_file", "arguments": "{\"path\": \"/home/ice/vllm/LICENSE\"}"}}]


c0:
  {"content": "1|[build-system]\n2|# Should be mirrored in requirements/build/cuda.txt\n3|requires = [\n4|    \"cmake>=3.26.1\",\n5|    \"ninja\",\n6|    \"packaging>=24.2\",\n7|    \"setuptools>=77.0.3,<81.0.0\",\n8|    \"setuptools-scm>=8.0\",\n9|    \"setuptools-rust>=1.9.0\",\n10|    \"torch == 2.11.0\",\n11|    \"wheel\",\n12|    \"jinja2\",\n13|]\n14|build-backend = \"setuptools.build_meta\"\n15|\n16|[project]\n17|name = \"vllm\"\n18|authors = [{name = \"vLLM Team\"}]\n19|license = \"Apache-2.0\"\n20|license-files = [\"LICENSE\"]\n21|readme = \"README.md\"\n22|description = \"A high-throughput and memory-efficient inference and serving engine for LLMs\"\n23|classifiers = [\n24|    \"Programming Language :: Python :: 3.10\",\n25|    \"Programming Language :: Python :: 3.11\",\n26|    \"Programming Language :: Python :: 3.12\",\n27|    \"Programming Language :: Python :: 3.13\",\n28|    \"Programming Language :: Python :: 3.14\",\n29|    \"Intended Audience :: Developers\",\n30|    \"Intended Audience :: Information Technology\",\n31|    \"Intended Audience :: Science/Research\",\n32|    \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n33|    \"Topic :: Scientific/Engineering :: Information Analysis\",\n34|]\n35|requires-python = \">=3.10,<3.15\"\n36|dynamic = [ \"version\", \"dependencies\", \"optional-dependencies\"]\n37|\n38|[project.urls]\n39|Homepage=\"https://github.com/vllm-project/vllm\"\n40|Documentation=\"https://docs.vllm.ai/en/latest/\"\n41|Slack=\"https://slack.vllm.ai/\"\n42|\n43|[project.scripts]\n44|vllm = \"vllm.entrypoints.cli.main:main\"\n45|\n46|[project.entry-points.\"vllm.general_plugins\"]\n47|lora_filesystem_resolver = \"vllm.plugins.lora_resolvers.filesystem_resolver:register_filesystem_resolver\"\n48|lora_hf_hub_resolver = \"vllm.plugins.lora_resolvers.hf_hub_resolver:register_hf_hub_resolver\"\n49|\n50|[tool.setuptools_scm]\n51|# no extra settings needed, presence enables setuptools-scm\n52|\n53|[tool.setuptools.packages.find]\n54|where = [\".\"]\n55|include = [\"vllm*\"]\n56|\n57|[tool.ruff.lint.per-file-ignores]\n58|\"vllm/third_party/**\" = [\"ALL\"]\n59|\"vllm/version.py\" = [\"F401\"]\n60|\"vllm/_version.py\" = [\"ALL\"]\n61|\n62|[tool.ruff.lint]\n63|select = [\n64|    # pycodestyle\n65|    \"E\",\n66|    # Pyflakes\n67|    \"F\",\n68|    # pyupgrade\n69|    \"UP\",\n70|    # flake8-bugbear\n71|    \"B\",\n72|    # flake8-implicit-str-concat\n73|    \"ISC\",\n74|    # flake8-simplify\n75|    \"SIM\",\n76|    # isort\n77|    \"I\",\n78|    # flake8-logging-format\n79|    \"G\",\n80|]\n81|ignore = [\n82|    # star imports\n83|    \"F405\", \"F403\",\n84|    # lambda expression assignment\n85|    \"E731\",\n86|    # zip without `strict=`\n87|    \"B905\",\n88|    # Loop control variable not used within loop body\n89|    \"B007\",\n90|    # f-string format\n91|    \"UP032\",\n92|]\n93|\n94|[tool.ruff.format]\n95|docstring-code-format = true\n96|\n97|[tool.mypy]\n98|plugins = ['pydantic.mypy']\n99|ignore_missing_imports = true\n100|check_untyped_defs = true\n101|follow_imports = \"silent\"\n102|\n103|[tool.pytest.ini_options]\n104|markers = [\n105|    \"slow_test\",\n106|    \"skip_global_cleanup\",\n107|    \"core_model: enable this model test in each PR instead of only nightly\",\n108|    \"hybrid_model: models that contain mamba layers (including pure SSM and hybrid architectures)\",\n109|    \"cpu_model: enable this model test in CPU tests\",\n110|    \"cpu_test: mark test as CPU-only test\",\n111|    \"split: run this test as part of a split\",\n112|    \"distributed: run this test only in distributed GPU tests\",\n113|    \"optional: optional tests that are automatically skipped, include --optional to run them\",\n114|]\n115|\n116|[tool.ty.src]\n117|respect-ignore-files = true\n118|\n119|[tool.ty.environment]\n120|python = \"./.venv\"\n121|\n122|[tool.typos.files]\n123|# these files may be written in non english words\n124|extend-exclude = [\"tests/models/fixtures/*\", \"tests/prompts/*\", \"tests/tokenizers_/*\",\n125|    \"benchmarks/sonnet.txt\", \"tests/lora/data/*\", \"build/*\",\n126|    \"examples/pooling/token_embed/*\", \"tests/models/language/pooling/*\",\n127|    \"vllm/third_party/*\", \"vllm/entrypoints/serve/instrumentator/static/*\",\n128|    \"tests/entrypoints/speech_to_text/transcription/test_transcription_validation.py\",\n129|    \"docs/governance/process.md\", \"docs/assets/contributing/vllm_bench_serve_timeline.html\", \n130|    \"tests/v1/engine/test_fast_incdec_prefix_err.py\", \".git/*\", \"csrc/cpu/sgl-kernels/*\",\n131|    \"rust/src/chat/src/renderer/deepseek_v32/fixtures/*\",\n132|    \"rust/src/tool-parser/src/gemma4.rs\", \"rust/src/text/src/output/decoded.rs\",\n133|    \"rust/src/tokenizer/src/incremental.rs\", \"rust/src/reasoning-parser/src/tests.rs\"]\n134|ignore-hidden = false\n135|\n136|[tool.typos.default]\n137|extend-ignore-identifiers-re = [\".*[Uu][Ee][0-9][Mm][0-9].*\"]\n138|\n139|[tool.typos.default.extend-identifiers]\n140|bbc5b7ede = \"bbc5b7ede\"\n141|NOOPs = \"NOOPs\"\n142|nin_shortcut = \"nin_shortcut\"\n143|cudaDevAttrMaxSharedMemoryPerBlockOptin = \"cudaDevAttrMaxSharedMemoryPerBlockOptin\"\n144|sharedMemPerBlockOptin = \"sharedMemPerBlockOptin\"\n145|\n146|depthwise_seperable_out_channel = \"depthwise_seperable_out_channel\"\n147|pard_token = \"pard_token\"\n148|ptd_token_id = \"ptd_token_id\"\n149|ser_de = \"ser_de\"\n150|shared_memory_per_block_optin = \"shared_memory_per_block_optin\"\n151|FoPE = \"FoPE\"\n152|k_ot = \"k_ot\"\n153|view_seperator = \"view_seperator\"\n154|inverse_std_variences = \"inverse_std_variences\"\n155|\n156|[tool.typos.default.extend-words]\n157|iy = \"iy\"\n158|indx = \"indx\"\n159|# intel cpu features\n160|tme = \"tme\"\n161|dout = \"dout\"\n162|Pn = \"Pn\"\n163|arange = \"arange\"\n164|thw = \"thw\"\n165|subtile = \"subtile\"\n166|HSA = \"HSA\"\n167|setp = \"setp\"\n168|CPY = \"CPY\"\n169|thr = \"thr\"\n170|Thr = \"Thr\"\n171|PARD = \"PARD\"\n172|pard = \"pard\"\n173|AKS = \"AKS\"\n174|ba = \"ba\"\n175|fo = \"fo\"\n176|nd = \"nd\"\n177|eles = \"eles\"\n178|datas = \"datas\"\n179|ser = \"ser\"\n180|ure = \"ure\"\n181|VALU = \"VALU\"\n182|# Walsh-Hadamard Transform\n183|wht = \"wht\"\n184|WHT = \"WHT\"\n185|# Huawei Compute Architecture for Neural Networks\n186|CANN = \"CANN\"\n187|\n188|[tool.uv]\n189|no-build-isolation-package = [\"torch\"]\n190|", "total_lines": 189, "file_size": 5275, "truncated": false, "is_binary": false, "is_image": false} read_file 


c0:
  {"content": "1|                                 Apache License\n2|                           Version 2.0, January 2004\n3|                        http://www.apache.org/licenses/\n4|\n5|   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n6|\n7|   1. Definitions.\n8|\n9|      \"License\" shall mean the terms and conditions for use, reproduction,\n10|      and distribution as defined by Sections 1 through 9 of this document.\n11|\n12|      \"Licensor\" shall mean the copyright owner or entity authorized by\n13|      the copyright owner that is granting the License.\n14|\n15|      \"Legal Entity\" shall mean the union of the acting entity and all\n16|      other entities that control, are controlled by, or are under common\n17|      control with that entity. For the purposes of this definition,\n18|      \"control\" means (i) the power, direct or indirect, to cause the\n19|      direction or management of such entity, whether by contract or\n20|      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n21|      outstanding shares, or (iii) beneficial ownership of such entity.\n22|\n23|      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n24|      exercising permissions granted by this License.\n25|\n26|      \"Source\" form shall mean the preferred form for making modifications,\n27|      including but not limited to software source code, documentation\n28|      source, and configuration files.\n29|\n30|      \"Object\" form shall mean any form resulting from mechanical\n31|      transformation or translation of a Source form, including but\n32|      not limited to compiled object code, generated documentation,\n33|      and conversions to other media types.\n34|\n35|      \"Work\" shall mean the work of authorship, whether in Source or\n36|      Object form, made available under the License, as indicated by a\n37|      copyright notice that is included in or attached to the work\n38|      (an example is provided in the Appendix below).\n39|\n40|      \"Derivative Works\" shall mean any work, whether in Source or Object\n41|      form, that is based on (or derived from) the Work and for which the\n42|      editorial revisions, annotations, elaborations, or other modifications\n43|      represent, as a whole, an original work of authorship. For the purposes\n44|      of this License, Derivative Works shall not include works that remain\n45|      separable from, or merely link (or bind by name) to the interfaces of,\n46|      the Work and Derivative Works thereof.\n47|\n48|      \"Contribution\" shall mean any work of authorship, including\n49|      the original version of the Work and any modifications or additions\n50|      to that Work or Derivative Works thereof, that is intentionally\n51|      submitted to Licensor for inclusion in the Work by the copyright owner\n52|      or by an individual or Legal Entity authorized to submit on behalf of\n53|      the copyright owner. For the purposes of this definition, \"submitted\"\n54|      means any form of electronic, verbal, or written communication sent\n55|      to the Licensor or its representatives, including but not limited to\n56|      communication on electronic mailing lists, source code control systems,\n57|      and issue tracking systems that are managed by, or on behalf of, the\n58|      Licensor for the purpose of discussing and improving the Work, but\n59|      excluding communication that is conspicuously marked or otherwise\n60|      designated in writing by the copyright owner as \"Not a Contribution.\"\n61|\n62|      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n63|      on behalf of whom a Contribution has been received by Licensor and\n64|      subsequently incorporated within the Work.\n65|\n66|   2. Grant of Copyright License. Subject to the terms and conditions of\n67|      this License, each Contributor hereby grants to You a perpetual,\n68|      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n69|      copyright license to reproduce, prepare Derivative Works of,\n70|      publicly display, publicly perform, sublicense, and distribute the\n71|      Work and such Derivative Works in Source or Object form.\n72|\n73|   3. Grant of Patent License. Subject to the terms and conditions of\n74|      this License, each Contributor hereby grants to You a perpetual,\n75|      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n76|      (except as stated in this section) patent license to make, have made,\n77|      use, offer to sell, sell, import, and otherwise transfer the Work,\n78|      where such license applies only to those patent claims licensable\n79|      by such Contributor that are necessarily infringed by their\n80|      Contribution(s) alone or by combination of their Contribution(s)\n81|      with the Work to which such Contribution(s) was submitted. If You\n82|      institute patent litigation against any entity (including a\n83|      cross-claim or counterclaim in a lawsuit) alleging that the Work\n84|      or a Contribution incorporated within the Work constitutes direct\n85|      or contributory patent infringement, then any patent licenses\n86|      granted to You under this License for that Work shall terminate\n87|      as of the date such litigation is filed.\n88|\n89|   4. Redistribution. You may reproduce and distribute copies of the\n90|      Work or Derivative Works thereof in any medium, with or without\n91|      modifications, and in Source or Object form, provided that You\n92|      meet the following conditions:\n93|\n94|      (a) You must give any other recipients of the Work or\n95|          Derivative Works a copy of this License; and\n96|\n97|      (b) You must cause any modified files to carry prominent notices\n98|          stating that You changed the files; and\n99|\n100|      (c) You must retain, in the Source form of any Derivative Works\n101|          that You distribute, all copyright, patent, trademark, and\n102|          attribution notices from the Source form of the Work,\n103|          excluding those notices that do not pertain to any part of\n104|          the Derivative Works; and\n105|\n106|      (d) If the Work includes a \"NOTICE\" text file as part of its\n107|          distribution, then any Derivative Works that You distribute must\n108|          include a readable copy of the attribution notices contained\n109|          within such NOTICE file, excluding those notices that do not\n110|          pertain to any part of the Derivative Works, in at least one\n111|          of the following places: within a NOTICE text file distributed\n112|          as part of the Derivative Works; within the Source form or\n113|          documentation, if provided along with the Derivative Works; or,\n114|          within a display generated by the Derivative Works, if and\n115|          wherever such third-party notices normally appear. The contents\n116|          of the NOTICE file are for informational purposes only and\n117|          do not modify the License. You may add Your own attribution\n118|          notices within Derivative Works that You distribute, alongside\n119|          or as an addendum to the NOTICE text from the Work, provided\n120|          that such additional attribution notices cannot be construed\n121|          as modifying the License.\n122|\n123|      You may add Your own copyright statement to Your modifications and\n124|      may provide additional or different license terms and conditions\n125|      for use, reproduction, or distribution of Your modifications, or\n126|      for any such Derivative Works as a whole, provided Your use,\n127|      reproduction, and distribution of the Work otherwise complies with\n128|      the conditions stated in this License.\n129|\n130|   5. Submission of Contributions. Unless You explicitly state otherwise,\n131|      any Contribution intentionally submitted for inclusion in the Work\n132|      by You to the Licensor shall be under the terms and conditions of\n133|      this License, without any additional terms or conditions.\n134|      Notwithstanding the above, nothing herein shall supersede or modify\n135|      the terms of any separate license agreement you may have executed\n136|      with Licensor regarding such Contributions.\n137|\n138|   6. Trademarks. This License does not grant permission to use the trade\n139|      names, trademarks, service marks, or product names of the Licensor,\n140|      except as required for reasonable and customary use in describing the\n141|      origin of the Work and reproducing the content of the NOTICE file.\n142|\n143|   7. Disclaimer of Warranty. Unless required by applicable law or\n144|      agreed to in writing, Licensor provides the Work (and each\n145|      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n146|      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n147|      implied, including, without limitation, any warranties or conditions\n148|      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n149|      PARTICULAR PURPOSE. You are solely responsible for determining the\n150|      appropriateness of using or redistributing the Work and assume any\n151|      risks associated with Your exercise of permissions under this License.\n152|\n153|   8. Limitation of Liability. In no event and under no legal theory,\n154|      whether in tort (including negligence), contract, or otherwise,\n155|      unless required by applicable law (such as deliberate and grossly\n156|      negligent acts) or agreed to in writing, shall any Contributor be\n157|      liable to You for damages, including any direct, indirect, special,\n158|      incidental, or consequential damages of any character arising as a\n159|      result of this License or out of the use or inability to use the\n160|      Work (including but not limited to damages for loss of goodwill,\n161|      work stoppage, computer failure or malfunction, or any and all\n162|      other commercial damages or losses), even if such Contributor\n163|      has been advised of the possibility of such damages.\n164|\n165|   9. Accepting Warranty or Additional Liability. While redistributing\n166|      the Work or Derivative Works thereof, You may choose to offer,\n167|      and charge a fee for, acceptance of support, warranty, indemnity,\n168|      or other liability obligations and/or rights consistent with this\n169|      License. However, in accepting such obligations, You may act only\n170|      on Your own behalf and on Your sole responsibility, not on behalf\n171|      of any other Contributor, and only if You agree to indemnify,\n172|      defend, and hold each Contributor harmless for any liability\n173|      incurred by, or claims asserted against, such Contributor by reason\n174|      of your accepting any such warranty or additional liability.\n175|\n176|   END OF TERMS AND CONDITIONS\n177|\n178|   APPENDIX: How to apply the Apache License to your work.\n179|\n180|      To apply the Apache License to your work, attach the following\n181|      boilerplate notice, with the fields enclosed by brackets \"[]\"\n182|      replaced with your own identifying information. (Don't include\n183|      the brackets!)  The text should be enclosed in the appropriate\n184|      comment syntax for the file format. We also recommend that a\n185|      file or class name and description of purpose be included on the\n186|      same \"printed page\" as the copyright notice for easier\n187|      identification within third-party archives.\n188|\n189|   Copyright [yyyy] [name of copyright owner]\n190|\n191|   Licensed under the Apache License, Version 2.0 (the \"License\");\n192|   you may not use this file except in compliance with the License.\n193|   You may obtain a copy of the License at\n194|\n195|       http://www.apache.org/licenses/LICENSE-2.0\n196|\n197|   Unless required by applicable law or agreed to in writing, software\n198|   distributed under the License is distributed on an \"AS IS\" BASIS,\n199|   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n200|   See the License for the specific language governing permissions and\n201|   limitations under the License.\n202|", "total_lines": 201, "file_size": 11357, "truncated": false, "is_binary": false, "is_image": false} read_file 


