syntaqxAn agent can put an image in a pull request, an issue or a comment without committing it: on flagon-io/session-lab #2 a cloud session asked to show a screenshot of its preview in the pull request's description found no way to upload one (not in g1t --help, g1t api --list or the docs), so it committed the PNG, linked it at that commit and removed it in a second commit. The site has no comment-image upload either; images only ever came from repository files. Now upload_attachment (POST /repos/{owner}/{repo}/attachments, issues:write, the issue tool's attach action over MCP) takes name, data (the file base64-encoded, as upload_sarif takes its file) and an optional content_type, and answers in snake_case with id, name, url, markdown (, ready to paste), content_type and size. The work service decides, as add_comment does: a confirmed account that can read the repository, which is not archived. The type is read from the bytes (PNG, JPEG, GIF or WebP; a content_type that says otherwise is refused), at most 10 MB; too large is the new FailureCode too_large (413), another type the new unsupported_type (415), in Rust and TS contracts and the OpenAPI error codes. The bytes go in the usercontent namespace (AVATARS, now bound to work) under attachments/<id>, where the id is 256 random bits so the address is its permission, as Docs files' is; a row in the new attachments table (migration 0048) names the repository, and repo.purged deletes the bytes, then the rows. The usercontent origin serves /attachments/<id> as it serves avatars (stored type, nosniff, sandboxed). The API forms url from USERCONTENT_URL as the site does (g1tusercontent.com for g1t.sh, SITE_URL/-/usercontent elsewhere; the self-host config now passes it to the API). The CLI has g1t attach FILE... (prints each image's Markdown; --json the fields, a list for several) and --attach FILE (repeatable) on g1t issue create, issue comment, pr create, pr comment and pr ready, which uploads and appends the Markdown after the text. A session's run credential gets upload_attachment through issues:write, bound to its own repository (tested), and the cloud session's system prompt says to upload screenshots with g1t attach and never commit images just to link them. Docs: the CLI guide (Images in descriptions and comments), pull requests (Images), sessions, the MCP reference, self-hosting's USERCONTENT_URL row, reference.json and the regenerated openapi.json, CLI ops table and CLI reference. Deploy order: apply work migration 0048 and deploy work (new AVATARS binding), then the site (usercontent serves /attachments), then api, then integrations (prompt) and the docs; g1t attach and --attach ship with the next CLI release, which cloud sessions need before the prompt's advice works. Checked: cargo test -p g1t-contracts (319), -p g1t-work (209), -p g1t-api (211; openapi regenerated with G1T_WRITE_OPENAPI), -p g1t (112 + 51; ops_table and cli_reference regenerated with G1T_WRITE_OPS and G1T_WRITE_DOCS), -p g1t-integrations (76); cargo check -p g1t-api, -p g1t-work and -p g1t-integrations --target wasm32-unknown-unknown; node --test apps/web/app/lib/token-scopes.test.ts.5011621History
- ..
- about.ts
- access.ts
- account-deletion.ts
- accounts.ts
- actions.ts
- advisories.ts
- agent-sessions.ts
- agents.ts
- ai.ts
- audit.ts
- billing.ts
- chat-markdown.test.ts
- chat-markdown.ts
- chat.test.ts
- chat.ts
- checks.ts
- clients.ts
- codeowners.ts
- coding-agents.test.ts
- coding-agents.ts
- compute.ts
- connectors.test.ts
- connectors.ts
- d1.test.ts
- d1.ts
- datasets.fixtures.json
- datasets.test.ts
- datasets.ts
- deploy-keys.ts
- deployments.ts
- discovery.test.ts
- discovery.ts
- docs.ts
- events.ts
- folios-dashboard.ts
- folios-design.ts
- folios-slides.ts
- folios.fixtures.json
- folios.test.ts
- folios.ts
- github.ts
- guardrails.ts
- identity.ts
- ids.test.ts
- ids.ts
- inbox.ts
- index.ts
- instances.ts
- integrations.ts
- members.ts
- names.test.ts
- names.ts
- notify.ts
- oauth.ts
- og.ts
- packages.ts
- people.ts
- platform.ts
- privacy.ts
- projects.ts
- rate-limits.ts
- repos.ts
- result.ts
- rules.ts
- runners.ts
- scopes.ts
- search.ts
- security-suite.ts
- security.ts
- sounds.ts
- status.ts
- teams.ts
- telemetry.ts
- updates.ts
- webhooks.ts
- work.ts