@volter/supercode-frontend-vscode 0.1.54 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/extension.js +38 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -88,6 +88,11 @@ the pinned workbench's [first-send materialization](https://github.com/volter-ai
|
|
|
88
88
|
and [draft acceptance](https://github.com/volter-ai/code-oss/blob/f16dc165c0dffe701a7bbf59aefb1c662b206cee/src/vs/workbench/contrib/chat/browser/widget/chatWidget.ts#L3493)
|
|
89
89
|
paths. A failed startup leaves the draft available to retry.
|
|
90
90
|
|
|
91
|
+
New Chat highlights the agent from the focused conversation (or an already
|
|
92
|
+
chosen draft) before opening the blank chat. With no matching choice it keeps
|
|
93
|
+
the host/native default. This is a source correction with
|
|
94
|
+
[real Chat qualification still open](../../docs/evidence/chat-agent-picker-focus-2026-10-09.md).
|
|
95
|
+
|
|
91
96
|
The pending agent/model choice belongs to that blank chat's untitled resource
|
|
92
97
|
and is retired when another conversation opens. Cancelling or opening sign-in
|
|
93
98
|
does not choose an agent. Readiness polling continues to discover
|
|
@@ -403,7 +408,13 @@ request is resolved. Standalone requests use the explicit runtime-history marker
|
|
|
403
408
|
instead of reopening an earlier answer. A new conversation sends its first input
|
|
404
409
|
before trying to save its native identity: the harness creates its transcript
|
|
405
410
|
from that input. Identity saves run after input acceptance, retry with later
|
|
406
|
-
native events until one succeeds, and
|
|
411
|
+
native events until one succeeds, and finish at the end of a turn. A successful
|
|
412
|
+
host save acknowledges that exact runtime connection, native id and catalogue
|
|
413
|
+
identity; completion skips another save while all three still match. A reload
|
|
414
|
+
or replacement connection must obtain its own acknowledgement. Completion
|
|
415
|
+
refreshes the host before that comparison; a changed/cleared binding or failed
|
|
416
|
+
refresh invalidates the local acknowledgement and retains the save attempt.
|
|
417
|
+
After reload,
|
|
407
418
|
the exact runtime's user history/events recover that save obligation; restored
|
|
408
419
|
snapshots, later events and response completion retry through the same host
|
|
409
420
|
checks without sending input. A busy state or standalone request alone does
|
|
@@ -420,6 +431,9 @@ candidate reload and approval click remain unmeasured.
|
|
|
420
431
|
The [first-input regression investigation](../../docs/evidence/chat-first-input-binding-2026-10-08.md)
|
|
421
432
|
records the 0.1.52 binding-order failure, the correction and its outstanding
|
|
422
433
|
product reading.
|
|
434
|
+
The [identity-save investigation](../../docs/evidence/chat-identity-save-acknowledgement-2026-10-08.md)
|
|
435
|
+
names the repeated host lookup removed at completion; candidate latency and
|
|
436
|
+
real-editor qualification remain open.
|
|
423
437
|
|
|
424
438
|
The pinned Code-OSS host needs a resource-scoping repair in its input-state change
|
|
425
439
|
routing: stock code broadcasts changes to all input states of a provider. The
|
package/dist/extension.js
CHANGED
|
@@ -435,6 +435,14 @@ export async function activate(context) {
|
|
|
435
435
|
|| connection.session.replay.some(event => event.kind === 'user_message');
|
|
436
436
|
return save;
|
|
437
437
|
};
|
|
438
|
+
const identitySaved = (connection, nativeId) => {
|
|
439
|
+
const save = identitySave(connection);
|
|
440
|
+
save.remembered = true;
|
|
441
|
+
const identity = controls?.state.sessions.find(session => session.id === connection.id)?.identity;
|
|
442
|
+
// Only a successful host save acknowledges this runtime/native-id pair.
|
|
443
|
+
// A restored catalogue identity alone is not a save receipt for a new connection.
|
|
444
|
+
save.acknowledged = identity ? { nativeId, identity } : undefined;
|
|
445
|
+
};
|
|
438
446
|
const rememberIdentity = (connection, submitted = false) => {
|
|
439
447
|
const save = identitySave(connection);
|
|
440
448
|
save.submitted ||= submitted;
|
|
@@ -453,7 +461,7 @@ export async function activate(context) {
|
|
|
453
461
|
save.again = false;
|
|
454
462
|
try {
|
|
455
463
|
await controls.remember(connection.id, nativeId);
|
|
456
|
-
|
|
464
|
+
identitySaved(connection, nativeId);
|
|
457
465
|
}
|
|
458
466
|
catch (error) {
|
|
459
467
|
log.warn(`Could not yet save conversation identity: ${String(error)}`);
|
|
@@ -468,10 +476,24 @@ export async function activate(context) {
|
|
|
468
476
|
if (!controls || attachedIds.has(connection.id))
|
|
469
477
|
return;
|
|
470
478
|
await save.pending;
|
|
479
|
+
// The host may have cleared a binding since its last lifecycle reply.
|
|
480
|
+
// Read it before treating a local acknowledgement as satisfied.
|
|
481
|
+
const refreshed = await controls.refresh().then(() => true, error => {
|
|
482
|
+
log.warn(`Could not refresh chat identity: ${String(error)}`);
|
|
483
|
+
return false;
|
|
484
|
+
});
|
|
471
485
|
const nativeId = connection.session.descriptor?.session_id;
|
|
472
|
-
|
|
486
|
+
const identity = controls.state.sessions.find(session => session.id === connection.id)?.identity;
|
|
487
|
+
const acknowledged = save.acknowledged;
|
|
488
|
+
const satisfied = Boolean(refreshed && nativeId && acknowledged
|
|
489
|
+
&& acknowledged.nativeId === nativeId && acknowledged.identity === identity);
|
|
490
|
+
if (!satisfied) {
|
|
491
|
+
save.acknowledged = undefined;
|
|
492
|
+
save.remembered = false;
|
|
493
|
+
}
|
|
494
|
+
if (nativeId && !satisfied)
|
|
473
495
|
await controls.remember(connection.id, nativeId).then(() => {
|
|
474
|
-
|
|
496
|
+
identitySaved(connection, nativeId);
|
|
475
497
|
}, error => {
|
|
476
498
|
log.warn(`Could not save conversation identity: ${String(error)}`);
|
|
477
499
|
if (save.submitted && !save.remembered && !save.warned
|
|
@@ -480,7 +502,6 @@ export async function activate(context) {
|
|
|
480
502
|
void vscode.window.showWarningMessage('Your prompt was submitted, but Chat could not save this conversation for reopening. Keep this chat open; do not send the prompt again.');
|
|
481
503
|
}
|
|
482
504
|
});
|
|
483
|
-
await controls.refresh().catch(error => log.warn(`Could not refresh chat identity: ${String(error)}`));
|
|
484
505
|
controlsChanged.fire();
|
|
485
506
|
};
|
|
486
507
|
context.subscriptions.push(frontends.onDidChange(() => {
|
|
@@ -927,7 +948,9 @@ export async function activate(context) {
|
|
|
927
948
|
quick.title = title;
|
|
928
949
|
quick.placeholder = placeholder;
|
|
929
950
|
quick.items = items;
|
|
930
|
-
|
|
951
|
+
// Agent choices can also contain a model-configuration row with the same
|
|
952
|
+
// harness id. The ordinary agent row comes first; activate only that row.
|
|
953
|
+
quick.activeItems = items.filter(item => item.id === currentId).slice(0, 1);
|
|
931
954
|
return new Promise(resolve => {
|
|
932
955
|
quick.onDidAccept(() => resolve(quick.selectedItems[0]));
|
|
933
956
|
quick.onDidHide(() => resolve(undefined));
|
|
@@ -1155,6 +1178,15 @@ export async function activate(context) {
|
|
|
1155
1178
|
return;
|
|
1156
1179
|
}
|
|
1157
1180
|
await controls.refresh();
|
|
1181
|
+
// Capture the conversation's agent before opening the blank chat clears
|
|
1182
|
+
// focus. A saved conversation need not be the host's active runtime yet.
|
|
1183
|
+
const previousId = focusedResource ? boundId(focusedResource) : controls.state.activeSession;
|
|
1184
|
+
const previousAttachment = focusedResource && attachedIds.has(focusedResource.authority)
|
|
1185
|
+
? frontends.get(focusedResource.authority) : undefined;
|
|
1186
|
+
const previousHarness = previousAttachment?.session.descriptor?.source_harness
|
|
1187
|
+
?? draftSelection()?.harness
|
|
1188
|
+
?? controls.state.sessions.find(session => session.id === previousId)?.selection.harness
|
|
1189
|
+
?? controls.state.selection.harness;
|
|
1158
1190
|
const agents = setupAgents(controls.state);
|
|
1159
1191
|
const localChoices = agents.map(agent => ({ label: agent.name, id: agent.harness,
|
|
1160
1192
|
description: agent.harness === 'codex' ? (agent.signedIn ? 'Signed in with ChatGPT' : 'Sign in with ChatGPT…')
|
|
@@ -1171,7 +1203,7 @@ export async function activate(context) {
|
|
|
1171
1203
|
return;
|
|
1172
1204
|
}
|
|
1173
1205
|
await chooseNewChat(async () => {
|
|
1174
|
-
const harness = await
|
|
1206
|
+
const harness = await pickWithCurrent(choices, 'New chat', 'Choose your coding agent', previousHarness);
|
|
1175
1207
|
if (!harness)
|
|
1176
1208
|
return { kind: 'cancelled' };
|
|
1177
1209
|
if (harness.configure) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volter/supercode-frontend-vscode",
|
|
3
3
|
"displayName": "Volter Harness",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.56",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "VS Code chat-view frontend for an existing Volter Harness SDK runtime",
|
|
7
7
|
"publisher": "volter-ai-dev",
|