-
Notifications
You must be signed in to change notification settings - Fork 33
Add composer attachments and harden ACP session handling #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
haxudev
wants to merge
16
commits into
formulahendry:main
Choose a base branch
from
haxudev:feat/composer-attachments
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
e712c73
test(ui): add vitest infrastructure for tauri vue app
98649af
feat(attachments): add shared attachment model and validation helpers
sisyphus-dev-ai ec3c1f1
feat(attachments): add acp resource link serialization helper
c5db864
feat(attachments): add platform attachment normalization helper
sisyphus-dev-ai db1c0db
fix(attachments): align resource_link shape with ACP SDK types
7afe60b
feat(chat): add composer attachment ui
b09cd4a
feat(session): support attachment-aware prompt dispatch
fd0ffa0
feat(chat): persist attachment metadata in messages
adede8f
feat(chat): add attachment validation feedback
4410873
test(attachments): add cross-platform contract coverage
d141475
feat(chat): render attachment metadata in history
c0c9b8d
test(chat): add composer attachment reset regressions
haxudev 7474efb
feat(chat): finalize generic attachment send flow
c08d46b
fix(chat): collapse dead branch in command select
haxudev dcaa686
fix(chat): collapse dead branch in command select
haxudev 1a7ec57
fix(session): tolerate streamed prompt completion edge cases
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| CI workflow includes a `Run tests` step before `Type check` in `.github/workflows/ci.yml`. | ||
| Step order: Checkout -> Setup Node.js -> Install Rust stable -> Rust cache -> Install frontend dependencies -> Run tests -> Type check -> Build Tauri app. |
Binary file not shown.
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| Task 10 cross-platform attachment contract coverage | ||
|
|
||
| Verification: | ||
| - Added src/__tests__/cross-platform-contract.test.ts | ||
| - Covered desktop/web normalization into shared AttachmentRef shape | ||
| - Covered ACP resource_link serialization for multiple attachments | ||
| - Covered allowed and disallowed file extensions | ||
| - Mocked @tauri-apps/plugin-fs stat to return size 2048 | ||
| - Ran npx vitest run: PASS | ||
|
|
||
| Result: | ||
| - 9 test files passed | ||
| - 39 tests passed |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| | ||
| [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90mD:/agi-project/acp-ui[39m | ||
|
|
||
| [32m鉁?[39m src/__tests__/cross-platform-contract.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 12[2mms[22m[39m | ||
|
|
||
| [2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m | ||
| [2m Tests [22m [1m[32m3 passed[39m[22m[90m (3)[39m | ||
| [2m Start at [22m 18:04:32 | ||
| [2m Duration [22m 1.65s[2m (transform 177ms, setup 82ms, collect 138ms, tests 12ms, environment 877ms, prepare 214ms)[22m | ||
|
|
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| | ||
| [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90mD:/agi-project/acp-ui[39m | ||
|
|
||
| [90mstdout[2m | src/__tests__/session-reset-regression.test.ts[2m > [22m[2msession reset regressions[2m > [22m[2mcomposer attachment lifecycle on send clears pending state but keeps message metadata | ||
| [22m[39mAgent initialized: { agentCapabilities: { loadSession: [33mtrue[39m }, authMethods: [] } | ||
|
|
||
| [90mstdout[2m | src/__tests__/session-reset-regression.test.ts[2m > [22m[2msession reset regressions[2m > [22m[2mcomposer attachment lifecycle on send clears pending state but keeps message metadata | ||
| [22m[39mPrompt completed: end_turn | ||
|
|
||
| [90mstdout[2m | src/__tests__/session-reset-regression.test.ts[2m > [22m[2msession reset regressions[2m > [22m[2msession switch clears pending attachments | ||
| [22m[39mAgent initialized: { agentCapabilities: { loadSession: [33mtrue[39m }, authMethods: [] } | ||
|
|
||
| [90mstdout[2m | src/__tests__/session-reset-regression.test.ts[2m > [22m[2msession reset regressions[2m > [22m[2mcanceling picker is a no-op | ||
| [22m[39mAgent initialized: { agentCapabilities: { loadSession: [33mtrue[39m }, authMethods: [] } | ||
|
|
||
| [32m鉁?[39m src/__tests__/session-reset-regression.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 89[2mms[22m[39m | ||
|
|
||
| [2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m | ||
| [2m Tests [22m [1m[32m3 passed[39m[22m[90m (3)[39m | ||
| [2m Start at [22m 18:03:58 | ||
| [2m Duration [22m 2.77s[2m (transform 465ms, setup 44ms, collect 658ms, tests 89ms, environment 483ms, prepare 202ms)[22m | ||
|
|
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| Task 11 regression evidence | ||
|
|
||
| - Added composer reset regression tests for send, session switch, and picker cancel behavior. | ||
| - Added minimal ChatView session-change watcher to clear pending composer state only. | ||
| - Verification: `npx vitest run` passed (45 tests). |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| Task 12 evidence - generic attachment send behavior | ||
|
|
||
| Audit findings: | ||
| - ChatView handleAttach/handleSend/template contain no ingest-only branching; pending attachments are selected, validated, rendered, and sent through one generic path. | ||
| - sessionStore.sendPrompt(text, attachments) always builds one text block plus optional serialized attachment resource_link blocks with no command-specific checks. | ||
| - src/lib/attachments.ts and src/lib/file-picker.ts contain no ingest/command branching. | ||
| - Platform-specific picker logic remains isolated to src/lib/file-picker.ts via the mockable _rawPicker seam. | ||
| - No scope creep detected: no drag/drop, clipboard paste, preview thumbnails, upload progress, base64 embedding, custom Rust command, ACP extension, or upload service layer. | ||
|
|
||
| Added test: | ||
| - src/__tests__/integration-command-agnostic.test.ts | ||
| - Verifies /ingest some-text, /query some-text, and plain text all use the same sendPrompt attachment path. | ||
| - Asserts identical attachment metadata on stored user messages and identical resource_link block structure apart from the text block content itself. | ||
|
|
||
| Verification: | ||
| - npx vitest run -> 12 passed files, 46 passed tests | ||
| - npx vue-tsc --noEmit -> passed | ||
|
|
||
| Result: | ||
| - Generic attachments are command-agnostic and flow through the existing UI/store/serialization path without special-casing. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| | ||
| [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90mD:/agi-project/acp-ui[39m | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mAgent initialized: { agentCapabilities: {}, authMethods: [] } | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mPrompt completed: end_turn | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mAgent initialized: { agentCapabilities: {}, authMethods: [] } | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mPrompt completed: end_turn | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mAgent initialized: { agentCapabilities: {}, authMethods: [] } | ||
|
|
||
| [90mstdout[2m | src/__tests__/integration-command-agnostic.test.ts[2m > [22m[2mattachment flow stays command agnostic[2m > [22m[2muses the same attachment prompt structure for slash commands and plain text | ||
| [22m[39mPrompt completed: end_turn | ||
|
|
||
| [31m鉂?[39m src/__tests__/integration-command-agnostic.test.ts [2m([22m[2m1 test[22m[2m | [22m[31m1 failed[39m[2m)[22m[32m 106[2mms[22m[39m | ||
| [31m [31m脳[31m attachment flow stays command agnostic[2m > [22muses the same attachment prompt structure for slash commands and plain text[39m[32m 104[2mms[22m[39m | ||
| [31m 鈫?expected [ { type: 'text', 鈥?1) }, 鈥?2) ] to deeply equal [ { type: 'text', 鈥?1) }, 鈥?2) ][39m | ||
| node.exe : | ||
| 所在位置 行:1 字符: 1 | ||
| + & "C:\Program Files\nodejs/node.exe" "C:\Users\haxu\AppData\Roaming\n ... | ||
| + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| + CategoryInfo : NotSpecified: (:String) [], RemoteException | ||
| + FullyQualifiedErrorId : NativeCommandError | ||
|
|
||
| [31m鈳幆鈳幆鈳幆鈳?[39m[1m[41m Failed Tests 1 [49m[22m[31m鈳幆鈳幆鈳幆鈳?[39m | ||
|
|
||
| [41m[1m FAIL [22m[49m src/__tests__/integration-command-agnostic.test.ts[2m > [22mattachment flow stays command a | ||
| gnostic[2m > [22muses the same attachment prompt structure for slash commands and plain text | ||
| [31m[1mAssertionError[22m: expected [ { type: 'text', 鈥?1) }, 鈥?2) ] to deeply equal [ { type: 'text', 鈥?1) }, 鈥?2) | ||
| ][39m | ||
|
|
||
| [32m- Expected[39m | ||
| [31m+ Received[39m | ||
|
|
||
| [33m@@ -4,15 +4,17 @@[39m | ||
| [2m "type": "text",[22m | ||
| [2m },[22m | ||
| [2m {[22m | ||
| [2m "mimeType": "text/markdown",[22m | ||
| [2m "name": "notes.md",[22m | ||
| [31m+ "size": 12n,[39m | ||
| [2m "type": "resource_link",[22m | ||
| [2m "uri": "file:///C%3A/docs/notes.md",[22m | ||
| [2m },[22m | ||
| [2m {[22m | ||
| [2m "mimeType": "text/csv",[22m | ||
| [2m "name": "table.csv",[22m | ||
| [31m+ "size": 34n,[39m | ||
| [2m "type": "resource_link",[22m | ||
| [2m "uri": "file:///C%3A/docs/table.csv",[22m | ||
| [2m },[22m | ||
| [2m ][22m | ||
|
|
||
| [36m [2m鉂?[22m src/__tests__/integration-command-agnostic.test.ts:[2m116:32[22m[39m | ||
| [90m114| [39m | ||
| [90m115| [39m [34mexpect[39m(recordedPrompts)[33m.[39m[34mtoHaveLength[39m([34m3[39m)[33m;[39m | ||
| [90m116| [39m [34mexpect[39m(recordedPrompts[[34m0[39m])[33m.[39m[34mtoEqual[39m([ | ||
| [90m | [39m [31m^[39m | ||
| [90m117| [39m { type[33m:[39m [32m'text'[39m[33m,[39m text[33m:[39m [32m'/ingest some-text'[39m } | ||
| [33m,[39m | ||
| [90m118| [39m { type: 'resource_link', uri: 'file:///C%3A/docs/notes.md', name鈥? | ||
| [31m[2m鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆鈳幆[1/1]鈳?[22m[39m | ||
|
|
||
|
|
||
| [2m Test Files [22m [1m[31m1 failed[39m[22m[90m (1)[39m | ||
| [2m Tests [22m [1m[31m1 failed[39m[22m[90m (1)[39m | ||
| [2m Start at [22m 18:03:59 | ||
| [2m Duration [22m 2.05s[2m (transform 134ms, setup 46ms, collect 165ms, tests 106ms, environment 513ms, prepare 233ms)[22m | ||
|
|
||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| FAIL: npm test | ||
| Result: none |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| PASS: npm test | ||
| Result: 2 test files passed, 10 tests passed | ||
| Attachment validation tests: passed |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Windows path encoding: file:///C%3A/Users/docs/file.md | ||
| Unicode/space encoding: file:///home/user/%E7%9F%A5%E8%AF%86%E5%BA%93%20%E6%96%87%E6%A1%A3.pdf |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| npm test passed: 4 files, 21 tests |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| Task 5 evidence: attachment-aware session dispatch | ||
|
|
||
| Changed files: | ||
| - src/stores/session.ts | ||
| - src/lib/types.ts | ||
| - src/__tests__/session-store.test.ts | ||
|
|
||
| Relevant behavior: | ||
| - sendPrompt(text, attachments?) now builds a ContentBlock[] prompt with: | ||
| 1. { type: 'text', text } | ||
| 2. zero-to-many serialized resource_link blocks from serializeAttachmentsToContentBlocks(attachments) | ||
| - user messages persist attachments only when attachments.length > 0 | ||
|
|
||
| Automated proof: | ||
| - src/__tests__/session-store.test.ts :: sends text plus attachment resource links and stores attachments metadata | ||
| - Assertion verifies prompt payload equals: | ||
| [ | ||
| { type: 'text', text: 'hello' }, | ||
| { type: 'resource_link', uri: 'file:///path1', name: 'file1.md', mimeType: 'text/markdown' }, | ||
| { type: 'resource_link', uri: 'file:///path2', name: 'file2.json', mimeType: 'application/json' } | ||
| ] | ||
| - Assertion verifies store.messages[0].attachments equals the original attachment array | ||
|
|
||
| Command result: | ||
| - npm test PASS | ||
| - Included: src/__tests__/session-store.test.ts (3 tests) | ||
|
|
||
| Excerpt: | ||
| - "✓ src/__tests__/session-store.test.ts (3 tests)" | ||
| - "Tests 28 passed (28)" |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| Task 5 evidence: text-only regression coverage | ||
|
|
||
| Regression target: | ||
| - sendPrompt('hello') without attachments must keep prior text-only ACP prompt behavior | ||
| - sendPrompt('hello', []) must behave the same as text-only | ||
|
|
||
| Automated proof: | ||
| - src/__tests__/session-store.test.ts :: sends a text-only prompt and stores no attachments metadata | ||
| Expected prompt: | ||
| [{ type: 'text', text: 'hello' }] | ||
| Expected user message attachments: undefined | ||
|
|
||
| - src/__tests__/session-store.test.ts :: treats an empty attachments array like a text-only prompt | ||
| Expected prompt: | ||
| [{ type: 'text', text: 'hello' }] | ||
| Expected user message attachments: undefined | ||
|
|
||
| Command result: | ||
| - npm test PASS | ||
| - npm run build PASS | ||
|
|
||
| Excerpts: | ||
| - "✓ src/__tests__/session-store.test.ts (3 tests)" | ||
| - "Test Files 6 passed (6)" | ||
| - "✓ built in 2.09s" |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| Validated composer rejection handling for invalid attachment selections. | ||
|
|
||
| Results: | ||
| - Disallowed files are filtered out with visible feedback. | ||
| - Rejection messages render in the composer area. | ||
| - Valid attachments remain available alongside rejections. | ||
|
|
||
| Verification: | ||
| - npm test ✅ | ||
| - npm run build ✅ |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| Validated pending attachment state preservation during invalid selections. | ||
|
|
||
| Results: | ||
| - Existing valid pending attachments survive later invalid picks. | ||
| - Duplicate and over-count cases are rejected without clearing valid chips. | ||
| - Composer feedback remains generic and composable. | ||
|
|
||
| Verification: | ||
| - npm test ✅ | ||
| - npm run build ✅ |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| Verified with tests that sent user messages retain attachment metadata in store state after composer reset. | ||
|
|
||
| Coverage: | ||
| - user messages keep attachments metadata after sendPrompt | ||
| - composer pending attachments are cleared before async send | ||
| - message history remains metadata-only | ||
|
|
||
| Commands: | ||
| - npm test | ||
| - npm run build | ||
|
|
||
| Result: | ||
| - PASS |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| Verified message history stores attachment metadata only. | ||
|
|
||
| Checks: | ||
| - no fileContent field on message objects | ||
| - no body field on message objects | ||
| - no data field on message objects | ||
| - no base64 field on message objects | ||
| - no blob field on message objects | ||
| - attachment entries contain only id, name, path, mimeType, size, source | ||
|
|
||
| Result: | ||
| - PASS |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| | ||
| [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90mD:/agi-project/acp-ui[39m | ||
|
|
||
| [32m鉁?[39m src/__tests__/chatview-history-attachments.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 61[2mms[22m[39m | ||
|
|
||
| [2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m | ||
| [2m Tests [22m [1m[32m3 passed[39m[22m[90m (3)[39m | ||
| [2m Start at [22m 18:03:58 | ||
| [2m Duration [22m 2.43s[2m (transform 391ms, setup 35ms, collect 676ms, tests 61ms, environment 885ms, prepare 397ms)[22m | ||
|
|
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| ## 2026-04-12 | ||
| - ChatView needs a minimal watcher on `sessionStore.currentSession` to clear only composer-local pending state. | ||
| - Pending composer attachments should reset on send and on session transitions, but sent message attachment metadata must remain in the store. | ||
| - Canceling the file picker returns an empty selection path and should leave composer state untouched. |
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR description says
npm testpassed, but this committed evidence file shows a failing Vitest run forintegration-command-agnostic.test.ts. If.sisyphus/evidenceis intended to reflect current validation, update or remove this failing transcript (or replace it with the passing output) to avoid confusion during reviews/triage.