feat(chat): attach arbitrary files to messages - #228
Merged
Conversation
incognitojam
marked this pull request as ready for review
August 20, 2026 12:58
incognitojam
added a commit
that referenced
this pull request
Aug 20, 2026
> [!NOTE] > TL;DR: Add ledger coverage for the seven substantive fork capabilities merged after the latest nightly promotion, so the next upstream rebase reports their semantic overlap before release. The fork feature ledger did not yet cover draft pull request status, missing-workspace startup guards, attention-state sidebar prominence, provider subscription limits, active-terminal close confirmation, fork analytics identity, or arbitrary file attachments. This records the behavioral invariants, implementation and upstream watch paths, focused test evidence, and retirement criteria for PRs #219, #222, #224, #225, #226, #227, and #228. Draft status and terminal close confirmation cite their partial upstream counterparts in [upstream pingdotgg#7148](pingdotgg#7148) and [upstream pingdotgg#7592](pingdotgg#7592). The smaller #220, #221, and #223 fixes intentionally remain patch-stack-only under the ledger's incremental coverage policy. The ledger mutation tests now select fixtures by the property they need instead of assuming the alphabetically first capability has multiple PRs and an unassessed upstream status. Verification: - `vp run --filter @t3tools/scripts ledger:check` - `vp test run scripts/fork-feature-ledger.test.ts scripts/generate-fork-features-summary.test.ts` — 34 tests passed - `vp check .github/fork-features.yml scripts/fork-feature-ledger.test.ts` --- Written by an agent (T3 Code, gpt-5.6-sol).
yngatech-nightly Bot
pushed a commit
that referenced
this pull request
Aug 20, 2026
> [!NOTE] > TL;DR: Users can drop arbitrary files into chat, and agents receive a safe local path while supported images keep their native provider handling. ## Problem The composer accepted dropped images but rejected code, text, Markdown, PDFs, installers, and other files even though agents can inspect those files directly from disk. ## Solution Persist attachments under a safe preserved basename, extend the chat contracts and composer to support generic files, and include each persisted path, MIME type, and size in provider input. Supported image formats continue through native provider image channels; all other formats remain opaque files for the agent to inspect from their local path. Attachment count and aggregate-byte admission are enforced atomically so overlapping drops cannot exceed composer limits. Web and mobile timelines render generic file chips, and legacy image storage remains readable. ## Validation - 245 focused contract, server, and web tests passed after rebasing onto the latest `origin/main`. - Targeted contracts, server, web, and mobile typechecks passed. - Targeted lint passed. - Manual web/desktop verification covered text files, mixed image/file messages, and an opaque `.pkg` installer. ## Screenshots Sanitized before/after screenshots are pending before this draft is marked ready for review. --- Written by an agent (T3 Code, gpt-5.6-sol).
yngatech-nightly Bot
pushed a commit
that referenced
this pull request
Aug 20, 2026
> [!NOTE] > TL;DR: Add ledger coverage for the seven substantive fork capabilities merged after the latest nightly promotion, so the next upstream rebase reports their semantic overlap before release. The fork feature ledger did not yet cover draft pull request status, missing-workspace startup guards, attention-state sidebar prominence, provider subscription limits, active-terminal close confirmation, fork analytics identity, or arbitrary file attachments. This records the behavioral invariants, implementation and upstream watch paths, focused test evidence, and retirement criteria for PRs #219, #222, #224, #225, #226, #227, and #228. Draft status and terminal close confirmation cite their partial upstream counterparts in [upstream pingdotgg#7148](pingdotgg#7148) and [upstream pingdotgg#7592](pingdotgg#7592). The smaller #220, #221, and #223 fixes intentionally remain patch-stack-only under the ledger's incremental coverage policy. The ledger mutation tests now select fixtures by the property they need instead of assuming the alphabetically first capability has multiple PRs and an unassessed upstream status. Verification: - `vp run --filter @t3tools/scripts ledger:check` - `vp test run scripts/fork-feature-ledger.test.ts scripts/generate-fork-features-summary.test.ts` — 34 tests passed - `vp check .github/fork-features.yml scripts/fork-feature-ledger.test.ts` --- Written by an agent (T3 Code, gpt-5.6-sol).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
TL;DR: Users can drop arbitrary files into chat, and agents receive a safe local path while supported images keep their native provider handling.
Problem
The composer accepted dropped images but rejected code, text, Markdown, PDFs, installers, and other files even though agents can inspect those files directly from disk.
Solution
Persist attachments under a safe preserved basename, extend the chat contracts and composer to support generic files, and include each persisted path, MIME type, and size in provider input. Supported image formats continue through native provider image channels; all other formats remain opaque files for the agent to inspect from their local path. Attachment count and aggregate-byte admission are enforced atomically so overlapping drops cannot exceed composer limits. Web and mobile timelines render generic file chips, and legacy image storage remains readable.
Validation
origin/main..pkginstaller.Screenshots
Sanitized before/after screenshots are pending before this draft is marked ready for review.
Written by an agent (T3 Code, gpt-5.6-sol).