feat(chat): Comments and review in VS Code, like the OpenChamber desktop app (#1724)

* feat(chat): render code comments as cards instead of fenced text

* fix(vscode): route Add Comment to the active session editor panel

* fix(chat): persist queued inline comments and tighten file-chip path matching

* feat(vscode): comment on code from the editor

* fix(chat): keep attached context in the message and broadcast comment removal

* fix(vscode): hold every pending comment and gate both entry points on the workspace

* fix(vscode): let only the owning surface decide its comment threads

* fix(vscode): drop a comment removed while its delivery was still in flight

* test(vscode): cover the in-flight comment removal guard

* test(vscode): cover comment removal reaching every chat surface

* fix(vscode): give up on a comment the chat never confirmed holding

* fix(vscode): retract a comment everywhere before reporting it discarded

* fix(chat): preserve queued comment cards

* fix: preserve inline comment context across send paths

* fix(chat): preserve command routing with context

* fix(chat): keep unavailable actions on normal send path

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Felipe Gené
2026-09-05 12:28:17 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent d323b51a0a
commit a12b9be443
35 changed files with 2192 additions and 131 deletions
+12
View File
@@ -84,6 +84,18 @@ export function sendBridgeMessage<T = unknown>(type: string, payload?: unknown):
return sendBridgeMessageWithOptions<T>(type, payload);
}
/**
* Tells the extension something without waiting for an answer.
*
* Requests are tracked until a response arrives, so a message the extension
* never replies to would leak a pending entry on every call. State the webview
* pushes outward (editor comment threads following the composer's drafts) has
* no answer to wait for, so it does not go through the request path at all.
*/
export function postBridgeNotification<Payload extends object>(type: string, payload: Payload): void {
getVSCodeAPI().postMessage({ type, payload });
}
export function sendBridgeMessageWithOptions<T = unknown>(
type: string,
payload?: unknown,