{"id":"baoyu-image-gen","name":"baoyu-image-gen","summary":"OpenAI GPT Image 2、Azure OpenAI、Google、OpenRouter、DashScope、Z.AI GLM-Image、MiniMax、Jimeng、Seedream、Replicate、Agnes APIを用いたAI画像生成。","body":"# Image Generation (AI SDK)\n\nOfficial API-based image generation. Supports OpenAI GPT Image 2, Azure OpenAI, Google, OpenRouter, DashScope (阿里通义万象), Z.AI GLM-Image, MiniMax, Jimeng (即梦), Seedream (豆包), Replicate and Agnes.\n\n## User Input Tools\n\nWhen this skill prompts the user, follow this tool-selection rule (priority order):\n\n1. **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., `AskUserQuestion`, `request_user_input`, `clarify`, `ask_user`, or any equivalent.\n2. **Fallback**: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.\n3. **Batching**: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.\n\nConcrete `AskUserQuestion` references below are examples — substitute the local equivalent in other runtimes.\n\n## Script Directory\n\n`{baseDir}` = this SKILL.md's directory. All `scripts/...` paths below are relative to `{baseDir}`. Main script: `{baseDir}/scripts/main.ts`. Batch payload helper: `{baseDir}/scripts/build-batch.ts`. Resolve `${BUN_X}`: prefer `bun`; else `npx -y bun`; else suggest `brew install oven-sh/bun/bun`.\n\n## Step 0: Load Preferences ⛔ BLOCKING\n\nThis step MUST complete before any image generation — generation is blocked until EXTEND.md exists.\n\nCheck these paths in order; first hit wins:\n\n| Path | Scope |\n|------|-------|\n| `.baoyu-skills/baoyu-image-gen/EXTEND.md` | Project |\n| `${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-image-gen/EXTEND.md` | XDG |\n| `$HOME/.baoyu-skills/baoyu-image-gen/EXTEND.md` | User home |\n\n- **Found** → load, parse, apply. If `default_model.[provider]` is null → ask model only.\n- **Not found** → run first-time setup (`references/config/first-time-setup.md`) using AskUserQuestion to collect provider + model + quality + save location. Save EXTEND.md, then continue. Do not generate images before this completes.\n\nLegacy compatibility: if `.baoyu-skills/baoyu-imagine/EXTEND.md` exists and the new path doesn't, the runtime renames it to `baoyu-image-gen`. If both exist, the runtime leaves them alone and uses the new path.\n\n**EXTEND.md keys**: default provider, default quality, default aspect ratio, default image size, OpenAI image API dialect, default models, batch worker cap, provider-specific batch limits. Schema: `references/config/preferences-schema.md`.\n\n## Usage\n\nMinimum working examples — see `references/usage-examples.md` for the full set including per-provider invocations and batch mode.\n\n### Identity-preserving reference prompts\n\nWhen the user wants a real person/character/object preserved from reference images, do **not** replace the reference with a long generic description. Prefer short, hard identity-preservation language:\n\n- \"Use the person/object in the reference image(s) as the same identity. Do not redesign it or create a similar-looking new subject.\"\n- \"Only change scene, clothing, pose, lighting, rendering style, and composition. Keep the face/proportions/hair/key accessories/overall identity from the references.\"\n- If using multiple references, state that they are the same subject and should jointly define identity.\n\nPitfall: long descriptions like \"young East Asian woman, oval face, clear eyes...\" can cause the model to synthesize a new person matching the description instead of preserving the referenced person.\n\n```bash\n# Basic\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A cat\" --image cat.png\n\n# With aspect ratio and high quality\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A landscape\" --image out.png --ar 16:9 --quality 2k\n\n# Prompt from files\n${BUN_X} {baseDir}/scripts/main.ts --promptfiles system.md content.md --image out.png\n\n# With reference image\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"Make blue\" --image out.png --ref source.png\n\n# Specific provider\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A cat\" --image out.png --provider dashscope --model qwen-image-2.0-pro\n\n# OpenAI GPT Image 2\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A cat\" --image out.png --provider openai --model gpt-image-2\n\n# Codex CLI (uses logged-in Codex subscription — no OPENAI_API_KEY required; requires `codex` on PATH)\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A cat\" --image out.png --provider codex-cli --ar 16:9\n\n# Batch mode\n${BUN_X} {baseDir}/scripts/main.ts --batchfile batch.json --jobs 4\n\n# Build a batch file from outline.md + prompts/ (e.g. baoyu-article-illustrator output)\n${BUN_X} {baseDir}/scripts/build-batch.ts --outline outline.md --prompts prompts --output batch.json --images-dir attachments\n${BUN_X} {baseDir}/scripts/main.ts --batchfile batch.json --jobs 4\n```\n\n## Reference-Image Identity Preservation\n\nWhen the user wants a person/object preserved from reference images:\n\n- Prefer a small curated set of existing source references (usually 2–4) over many images; large multi-megabyte refs can destabilize streaming providers.\n- Make the prompt say the references are the same subject and the output must use that identity. Avoid long generic facial-feature descriptions that can cause the model to synthesize a new similar-looking person.\n- Do not use newly generated outputs as references unless the user explicitly asks; generated refs compound drift.\n- If results become too polished or influencer-like, reduce stylized refs and add explicit anti-beautification constraints (no face slimming, eye enlargement, heavy makeup, commercial travel shoot, over-smoothing).\n- If the subject should look younger/older, preserve the face and express age through clothing, posture, scene, and styling; do not ask the model to change facial identity.\n\n## Options\n\n| Option | Description |\n|--------|-------------|\n| `--prompt <text>`, `-p` | Prompt text |\n| `--promptfiles <files...>` | Read prompt from files (concatenated) |\n| `--image <path>` | Output image path (required in single-image mode) |\n| `--batchfile <path>` | JSON batch file for multi-image generation |\n| `--jobs <count>` | Worker count for batch mode (default: auto, max from config, built-in default 10) |\n| `--provider google\\|openai\\|azure\\|openrouter\\|dashscope\\|zai\\|minimax\\|jimeng\\|seedream\\|replicate\\|codex-cli\\|agnes` | Force provider (default: auto-detect; `codex-cli` is never auto-selected — must be pinned via CLI or EXTEND.md) |\n| `--model <id>`, `-m` | Model ID — see provider references for defaults and allowed values |\n| `--ar <ratio>` | Aspect ratio (`16:9`, `1:1`, `4:3`, …) |\n| `--size <WxH>` | Explicit size (e.g., `1024x1024`; for `gpt-image-2`, width/height must be multiples of 16, max edge 3840px, ratio no wider than 3:1) |\n| `--quality normal\\|2k` | Quality preset (default: `2k`) |\n| `--imageSize 1K\\|2K\\|4K` | Image size for Google/OpenRouter (default: from quality) |\n| `--imageApiDialect openai-native\\|ratio-metadata` | OpenAI-compatible endpoint dialect — use `ratio-metadata` for gateways that expect aspect-ratio `size` plus `metadata.resolution` |\n| `--ref <files...>` | Reference images. Supported by Google multimodal, OpenAI GPT Image edits, Azure OpenAI edits (PNG/JPG only), OpenRouter multimodal models, Replicate supported families, MiniMax subject-reference, Seedream 5.0/4.5/4.0, DashScope `wan2.7-image-pro`/`wan2.7-image`. Not supported by Jimeng, Seedream 3.0, SeedEdit 3.0, or any DashScope model outside the `wan2.7-image*` family |\n| `--n <count>` | Number of images. Replicate requires `--n 1` (single-output save semantics) |\n| `--json` | JSON output |\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `OPENAI_API_KEY` | OpenAI API key |\n| `AZURE_OPENAI_API_KEY` | Azure OpenAI API key |\n| `OPENROUTER_API_KEY` | OpenRouter API key |\n| `GOOGLE_API_KEY` | Google API key |\n| `DASHSCOPE_API_KEY` | DashScope API key |\n| `ZAI_API_KEY` (alias `BIGMODEL_API_KEY`) | Z.AI API key |\n| `MINIMAX_API_KEY` | MiniMax API key |\n| `REPLICATE_API_TOKEN` | Replicate API token |\n| `JIMENG_ACCESS_KEY_ID`, `JIMENG_SECRET_ACCESS_KEY` | Jimeng (即梦) Volcengine credentials |\n| `ARK_API_KEY` | Seedream (豆包) Volcengine ARK API key |\n| `<PROVIDER>_IMAGE_MODEL` | Per-provider model override (`OPENAI_IMAGE_MODEL`, `GOOGLE_IMAGE_MODEL`, `DASHSCOPE_IMAGE_MODEL`, `ZAI_IMAGE_MODEL`/`BIGMODEL_IMAGE_MODEL`, `MINIMAX_IMAGE_MODEL`, `OPENROUTER_IMAGE_MODEL`, `REPLICATE_IMAGE_MODEL`, `JIMENG_IMAGE_MODEL`, `SEEDREAM_IMAGE_MODEL`, `AGNES_IMAGE_MODEL`) |\n| `AZURE_OPENAI_DEPLOYMENT` (alias `AZURE_OPENAI_IMAGE_MODEL`) | Azure default deployment |\n| `<PROVIDER>_BASE_URL` | Per-provider endpoint override |\n| `AZURE_API_VERSION` | Azure image API version (default `2025-04-01-preview`) |\n| `JIMENG_REGION` | Jimeng region (default `cn-north-1`) |\n| `OPENAI_IMAGE_API_DIALECT` | `openai-native` \\| `ratio-metadata` |\n| `OPENROUTER_HTTP_REFERER`, `OPENROUTER_TITLE` | Optional OpenRouter attribution |\n| `BAOYU_IMAGE_GEN_MAX_WORKERS` | Override batch worker cap |\n| `BAOYU_IMAGE_GEN_<PROVIDER>_CONCURRENCY` | Per-provider concurrency (e.g., `BAOYU_IMAGE_GEN_REPLICATE_CONCURRENCY`; for codex-cli use `BAOYU_IMAGE_GEN_CODEX_CLI_CONCURRENCY`) |\n| `BAOYU_IMAGE_GEN_<PROVIDER>_START_INTERVAL_MS` | Per-provider start-gap |\n| `BAOYU_CODEX_IMAGEGEN_BIN` | Override the codex-imagegen wrapper path for the `codex-cli` provider (default: bundled `scripts/codex-imagegen/main.ts`; accepts `.ts` or legacy `.sh`/binary) |\n| `BAOYU_CODEX_IMAGEGEN_CACHE_DIR` | Enable idempotency cache for the `codex-cli` provider (off by default) |\n| `BAOYU_CODEX_IMAGEGEN_TIMEOUT_MS` | Per-attempt `codex exec` timeout for the `codex-cli` provider (default: 300000 ms) |\n| `BAOYU_CODEX_IMAGEGEN_RETRIES` | Wrapper-side retry attempts on retryable errors for the `codex-cli` provider (default: 2) |\n| `BAOYU_CODEX_IMAGEGEN_LOG_FILE` | Append JSONL diagnostic log for the `codex-cli` provider |\n\n**Load priority**: CLI args > EXTEND.md > env vars > `<cwd>/.baoyu-skills/.env` > `~/.baoyu-skills/.env`\n\n### Codex/ChatGPT OAuth is not an OpenAI API key\n\n`--provider openai --model gpt-image-2` uses the standard OpenAI Images API (`/v1/images/generations` or `/v1/images/edits`) and requires `OPENAI_API_KEY`. A Codex or ChatGPT desktop login is a different entitlement and is not a drop-in replacement for `OPENAI_API_KEY`; do not paste a Codex OAuth token into `OPENAI_API_KEY` or only set `OPENAI_BASE_URL` to a Codex backend.\n\nIf the user wants to use their Codex subscription / GPT Image 2 entitlement without an OpenAI API key, route through a Codex-native backend instead of this skill's `openai` provider:\n\n- In Codex runtime: use the native `imagegen` skill/tool.\n- In non-Codex runtimes with `codex` CLI installed and logged in: use `baoyu-image-gen --provider codex-cli` (preferred — it gives you the same retry / cache / batch flow as every other provider). The provider spawns the bundled `scripts/codex-imagegen/main.ts`; the same code lives upstream at `packages/baoyu-codex-imagegen/src/main.ts` for standalone callers.\n- In Hermes runtimes with a native `image_generate` tool: use that tool as a fallback, and state whether reference images were passed directly or reconstructed from extracted traits.\n\nDo not modify the existing `openai` provider to silently consume Codex OAuth. The first-class Codex-CLI path is the dedicated `codex-cli` provider, which has its own auth (Codex login), route (`codex exec`), request shape, and tests. See `references/codex-oauth-vs-openai-api-key.md`.\n\n## Model Resolution\n\nPriority (highest → lowest) applies to every provider:\n\n1. CLI flag `--model <id>`\n2. EXTEND.md `default_model.[provider]`\n3. Env var `<PROVIDER>_IMAGE_MODEL`\n4. Built-in default\n\nFor OpenAI, the built-in default is `gpt-image-2`. `gpt-image-1.5`, `gpt-image-1`, and GPT Image snapshots remain selectable with `--model` or `OPENAI_IMAGE_MODEL`.\n\nFor Azure, `--model` / `default_model.azure` is the Azure deployment name. `AZURE_OPENAI_DEPLOYMENT` is the preferred env var; `AZURE_OPENAI_IMAGE_MODEL` is kept as a backward-compatible alias. If your Azure deployment is named after the underlying model, use `gpt-image-2`; otherwise use the exact custom deployment name.\n\nEXTEND.md overrides env vars: if EXTEND.md sets `default_model.google: \"gemini-3-pro-image\"` and the env var sets `GOOGLE_IMAGE_MODEL=gemini-3.1-flash-image`, EXTEND.md wins.\n\n**Display model info before each generation**:\n\n- `Using [provider] / [model]`\n- `Switch model: --model <id> | EXTEND.md default_model.[provider] | env <PROVIDER>_IMAGE_MODEL`\n\n## OpenAI-Compatible Gateway Dialects\n\n`provider=openai` means the auth and routing entrypoint is OpenAI-compatible. It does **not** guarantee the upstream image API uses OpenAI native semantics. When a gateway expects a different wire format, set `default_image_api_dialect` in EXTEND.md, `OPENAI_IMAGE_API_DIALECT`, or `--imageApiDialect`:\n\n- `openai-native`: pixel `size` (`1536x1024`) and native OpenAI quality fields\n- `ratio-metadata`: aspect-ratio `size` (`16:9`) plus `metadata.resolution` (`1K|2K|4K`) and `metadata.orientation`\n\nUse `openai-native` for the OpenAI native API or strict clones; try `ratio-metadata` for compatibility gateways in front of Gemini or similar models. Current limitation: `ratio-metadata` applies only to text-to-image; reference-image edits still need `openai-native` or a provider with first-class edit support.\n\n## Provider-Specific Guides\n\nEach provider has its own quirks (model families, size rules, ref support, limits). Read these when the user picks that provider or asks for non-default behavior:\n\n| Provider | Reference |\n|----------|-----------|\n| DashScope (Qwen-Image families, custom sizes) | `references/providers/dashscope.md` |\n| Z.AI (GLM-Image, cogview-4) | `references/providers/zai.md` |\n| MiniMax (image-01, subject-reference) | `references/providers/minimax.md` |\n| OpenRouter (multimodal models, `/chat/completions` flow) | `references/providers/openrouter.md` |\n| Replicate (nano-banana, Seedream, Wan) | `references/providers/replicate.md` |\n| Codex CLI (wraps bundled `scripts/codex-imagegen/`; Codex login, no `OPENAI_API_KEY`) | `references/providers/codex-cli.md` |\n| Agnes (agnes-image-2.1-flash, reference-image support) | `references/providers/agnes.md` |\n\n## Provider Selection\n\n1. `--ref` provided + no `--provider` → auto-select Google → OpenAI → Azure → OpenRouter → Replicate → Seedream → MiniMax → Agnes (MiniMax's subject reference is more specialized toward character/portrait consistency)\n2. `--provider` specified → use it (if `--ref`, must be google/openai/azure/openrouter/replicate/seedream/minimax/codex-cli/agnes)\n3. Only one API key present → use that provider\n4. Multiple keys → default priority: Google → OpenAI → Azure → OpenRouter → DashScope → Z.AI → MiniMax → Replicate → Jimeng → Seedream → Agnes\n5. `codex-cli` is **never auto-selected** — set `default_provider: codex-cli` in EXTEND.md or pass `--provider codex-cli`. It spawns `codex exec` via the bundled `scripts/codex-imagegen/main.ts` TS entrypoint (run with `bun`) and uses the user's Codex subscription (no `OPENAI_API_KEY`). Requires `codex` on `PATH` with an active `codex login`.\n\n## Quality Presets\n\n| Preset | Google imageSize | OpenAI size | OpenRouter size | Replicate resolution | Use case |\n|--------|------------------|-------------|-----------------|----------------------|----------|\n| `normal` | 1K | 1024px target | 1K | 1K | Quick previews |\n| `2k` (default) | 2K | 2048px target | 2K | 2K | Covers, illustrations, infographics |\n\nGoogle/OpenRouter `imageSize` can be overridden with `--imageSize 1K|2K|4K`.\n\nFor OpenAI native `gpt-image-2`, `normal` maps to `quality=medium` and a low-latency valid size near the requested aspect ratio; `2k` maps to `quality=high` and 2048px-class sizes such as `2048x2048`, `2048x1152`, or `1152x2048`. Use explicit `--size` for valid custom or 4K outputs, e.g. `3840x2160`.\n\n## Aspect Ratios\n\nSupported: `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `2.35:1`.\n\n- Google multimodal: `imageConfig.aspectRatio`\n- OpenAI: `gpt-image-2` uses the closest valid custom size for the requested ratio; older GPT Image and DALL·E models use their closest supported fixed size\n- OpenRouter: `imageGenerationOptions.aspect_ratio`; if only `--size <WxH>` is given, the ratio is inferred\n- Replicate: behavior is model-specific — `google/nano-banana*` uses `aspect_ratio`, `bytedance/seedream-*` uses documented Replicate ratios, Wan 2.7 maps `--ar` to a concrete `size`\n- MiniMax: official `aspect_ratio` values; if `--size <WxH>` is given without `--ar`, sends `width`/`height` for `image-01`\n\n## Generation Mode\n\n**Default**: sequential. **Batch parallel**: enabled automatically when `--batchfile` contains 2+ pending tasks.\n\n| Situation | Prefer | Why |\n|-----------|--------|-----|\n| One image, or 1-2 simple images | Sequential | Lower coordination overhead, easier debugging |\n| Multiple images with saved prompt files | Batch (`--batchfile`) | Reuses finalized prompts, applies shared throttling/retries, predictable throughput |\n| Each image still needs its own reasoning / prompt writing / style exploration | Subagents | Work is still exploratory, each needs independent analysis |\n| Input is `outline.md` + `prompts/` (e.g. from `baoyu-article-illustrator`) | Batch — use `{baseDir}/scripts/build-batch.ts` to assemble the payload | The outline + prompt files already contain everything needed |\n\nRule of thumb: once prompt files are saved and the task is \"generate all of these\", prefer batch over subagents. Use subagents only when generation is coupled with per-image thinking or divergent creative exploration.\n\n**Parallel behavior**:\n\n- Default worker count is automatic, capped by config, built-in default 10\n- Provider-specific throttling applies only in batch mode; defaults are tuned for throughput while avoiding RPM bursts\n- Override with `--jobs <count>`\n- Each image retries up to 3 attempts\n- Final output includes success count, failure count, and per-image failure reasons\n\n## Error Handling\n\n- Missing API key → error with setup instructions\n- Generation failure → auto-retry up to 3 attempts per image\n- Invalid aspect ratio → warning, proceed with default\n- Reference images with unsupported provider/model → error with fix hint\n\n### Codex image2 fallback\n\nIf `--provider openai --model gpt-image-2` fails because `OPENAI_API_KEY` is missing but the current runtime has a native image-generation backend or the repo-level `codex-imagegen` wrapper is available, use that path rather than leaving the user waiting. Be explicit about whether the fallback is true reference-image generation or only a text-prompt reconstruction from extracted visual traits. See `references/codex-image2-fallback.md`.\n\n## References\n\n| File | Content |\n|------|---------|\n| `references/usage-examples.md` | Extended CLI examples across providers and batch mode |\n| `references/codex-oauth-vs-openai-api-key.md` | Why Codex/ChatGPT OAuth image2 entitlement is not usable through baoyu-image-gen's standard OpenAI API-key provider |\n| `references/codex-image2-fallback.md` | Practical fallback behavior when OpenAI API credentials are absent but Codex/native image generation is available |\n| `references/providers/dashscope.md` | DashScope families, sizes, limits |\n| `references/providers/zai.md` | Z.AI GLM-image / cogview-4 |\n| `references/providers/minimax.md` | MiniMax image-01 + subject reference |\n| `references/providers/openrouter.md` | OpenRouter multimodal flow |\n| `references/providers/replicate.md` | Replicate supported families + guardrails |\n| `references/providers/agnes.md` | Agnes (agnes-image-2.1-flash) sizing, refs, and limits |\n| `references/config/preferences-schema.md` | EXTEND.md schema |\n| `references/config/first-time-setup.md` | First-time setup flow |\n\n## Extension Support\n\nCustom configurations via EXTEND.md. See Step 0 for paths and schema.","author":"@JimLiu","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-image-gen","license":"MIT","category":null,"lang":"en","tokens":5169,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/codex-image2-fallback.md","size":1985,"sha256":"4374255d906edef8b05e3bda39da31eea714f21c1aefa1d5c7b2d6e4cc1f7030"},{"path":"references/codex-oauth-vs-openai-api-key.md","size":2137,"sha256":"86868733972a5e552e23ce2519abe9df6bddcca5fcb249e542c2420a02710ea9"},{"path":"references/config/first-time-setup.md","size":13316,"sha256":"f39f0d5881a427abba1816b36637e8260f2443abfd9136fab3feee89aed2ad20"},{"path":"references/config/preferences-schema.md","size":4890,"sha256":"59d7a0fb52258daadff2acc46eeec4b640f0cc4cb02fb6f4b960161682cc0595"},{"path":"references/providers/agnes.md","size":2301,"sha256":"585105d6ce0f345722cb1c396731a14aacfa1d77001bb1747d3690d336c03ca2"},{"path":"references/providers/codex-cli.md","size":6011,"sha256":"14cf190966f2e7548ed0841a83d5bea0058b969a54e7cf9d832d3c4c2511ee77"},{"path":"references/providers/dashscope.md","size":4597,"sha256":"3a0ff29dd08737784853f3b32ae8e07edf59be66464585f792659b5bcefdf439"},{"path":"references/providers/minimax.md","size":1228,"sha256":"53611835eaf23aba939e3a57044f34581cd4a7e14751a64d4b6e6fffbac4d383"},{"path":"references/providers/openrouter.md","size":760,"sha256":"73ce9fd0697fde79442ae5a1e52ab70df35e8d96bc29ed3d8838d2304c5cf815"},{"path":"references/providers/replicate.md","size":1814,"sha256":"594027163bf9fa9bde5a5eb8feb183f167db1005a9e4a28d27c1a4ba55ae6fdd"},{"path":"references/providers/zai.md","size":1099,"sha256":"de41701abbb9e5b71ec36decca09b1237344e7bd3d08b980ecb4d5db17c6ae1a"},{"path":"references/usage-examples.md","size":6101,"sha256":"42a3b53c5ce72e50870a06943d351532996a09d46db527ebfed846e790edc828"},{"path":"scripts/build-batch.test.ts","size":4575,"sha256":"75211b7279b714ff5cfff3d4e1479a820569a6e4b1fec4662cbe15ca3e288f2a"},{"path":"scripts/build-batch.ts","size":7593,"sha256":"862adec8c58f3f1d63b7034558f0a32ca2ddc9e122b78e484f527f0067e81590"},{"path":"scripts/codex-imagegen/cache.ts","size":2300,"sha256":"f742faae1d97dabeeb99509774c32a7b990fac67a31264e1bb619451228c9e82"},{"path":"scripts/codex-imagegen/logger.ts","size":1356,"sha256":"b14a85eda394c93d3821016cb0429a97b41b1989ee51309972095f5667587274"},{"path":"scripts/codex-imagegen/main.ts","size":12089,"sha256":"ecf2ae088ed8f4c932e386813d454d44f8bcc0b36d031dc9e977b96b7de6189d"},{"path":"scripts/codex-imagegen/parser.ts","size":2072,"sha256":"b81cd7b9e720e4f2a19c35a9694c9da03ff942bd3e6c475d8ac15de77c62ba9f"},{"path":"scripts/codex-imagegen/spawn.ts","size":2432,"sha256":"db923773ab1666771d66dfdd34141ca8875c13e9e58d16d15d1df5404c25f4e3"},{"path":"scripts/codex-imagegen/types.ts","size":1632,"sha256":"9972556623578074f0525eb6e7318879023229dfaba77d4c938638fd137accc3"},{"path":"scripts/codex-imagegen/validator.ts","size":2353,"sha256":"13ac88957471aff97ea654e9d971eaa10f395a1e664b9b76651cdea852399bba"},{"path":"scripts/main.test.ts","size":18783,"sha256":"a1152107b4b91e07231b6d292940ad9e7ca7b7e10afdd0930c213abc8633cb9d"},{"path":"scripts/main.ts","size":46544,"sha256":"f49d4e1a6165a63ac7146e28d85c8c58fe26b3e82608c5f7ab9fac1c24ec6ea2"},{"path":"scripts/providers/agnes.test.ts","size":6810,"sha256":"4077d1aef532d61665be4d6a52498b4169d436c83e98d94eef158944a96da646"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"apihub.agnes-ai.com, docs.z.ai, example.openai.azure.com, help.aliyun.com, platform.minimaxi.com","message":"bundled scripts reach 5 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["apihub.agnes-ai.com","docs.z.ai","example.openai.azure.com","help.aliyun.com","platform.minimaxi.com"]}}