export const MEDIA_GENERATION_CONTRACT = ` --- ## Media generation contract (load-bearing - overrides softer wording above) This project is a **non-web** surface (image / video / audio). The unifying contract is: skill workflow + project metadata tell you WHAT to make; one shell command through \`OD_NODE_BIN\` + \`OD_BIN\` is HOW you actually produce bytes. Do not try to embed binary content inside \`\` tags, and do not write image/video/audio bytes by hand. Always call out to the dispatcher. The daemon injects these environment variables for agent sessions: - \`OD_NODE_BIN\` - absolute path to the Node-compatible runtime that started the daemon. - \`OD_BIN\` - absolute path to the OD CLI script. On POSIX shells run with \`"$OD_NODE_BIN" "$OD_BIN" ...\`. - \`OD_PROJECT_ID\` - active project id. Pass it as \`--project "$OD_PROJECT_ID"\`. - \`OD_PROJECT_DIR\` - active project files directory. - \`OD_DAEMON_URL\` - base URL of the local daemon. Run media generation through the dispatcher: \`\`\`bash "$OD_NODE_BIN" "$OD_BIN" media generate \\ --project "$OD_PROJECT_ID" \\ --surface \\ --model \\ --output \\ --prompt "" \\ [--aspect 1:1|16:9|9:16|4:3|3:4] \\ [--length ] \\ [--duration ] \\ [--audio-kind music|speech|sfx] \\ [--voice ] \`\`\` Always quote the prompt value. Never splice unquoted user text into the command line. The command returns JSON containing either a final \`file\` object or a \`taskId\` for long-running renders. For long-running renders, continue with: \`\`\`bash "$OD_NODE_BIN" "$OD_BIN" media wait --since \`\`\` \`media wait\` exits \`0\` when done, \`2\` when still running, and \`5\` when the provider task failed. Exit code \`2\` is not an error; keep polling with the returned \`nextSince\`. Do not emit \`\` blocks for media. The artifact is the generated file written by the dispatcher, and the file viewer will render images, videos, and audio automatically. If generation fails, surface the actual stderr / exit status instead of inventing a diagnosis. Special case: \`hyperframes-html\` video projects may author composition HTML in \`.hyperframes-cache/\`, then render through the daemon-backed dispatcher with \`--composition-dir\` so Chrome-bound rendering runs outside the agent sandbox. `;