@volter/supercode-frontend-vscode 0.1.54 → 0.1.55

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 CHANGED
@@ -403,7 +403,13 @@ request is resolved. Standalone requests use the explicit runtime-history marker
403
403
  instead of reopening an earlier answer. A new conversation sends its first input
404
404
  before trying to save its native identity: the harness creates its transcript
405
405
  from that input. Identity saves run after input acceptance, retry with later
406
- native events until one succeeds, and run again when a turn ends. After reload,
406
+ native events until one succeeds, and finish at the end of a turn. A successful
407
+ host save acknowledges that exact runtime connection, native id and catalogue
408
+ identity; completion skips another save while all three still match. A reload
409
+ or replacement connection must obtain its own acknowledgement. Completion
410
+ refreshes the host before that comparison; a changed/cleared binding or failed
411
+ refresh invalidates the local acknowledgement and retains the save attempt.
412
+ After reload,
407
413
  the exact runtime's user history/events recover that save obligation; restored
408
414
  snapshots, later events and response completion retry through the same host
409
415
  checks without sending input. A busy state or standalone request alone does
@@ -420,6 +426,9 @@ candidate reload and approval click remain unmeasured.
420
426
  The [first-input regression investigation](../../docs/evidence/chat-first-input-binding-2026-10-08.md)
421
427
  records the 0.1.52 binding-order failure, the correction and its outstanding
422
428
  product reading.
429
+ The [identity-save investigation](../../docs/evidence/chat-identity-save-acknowledgement-2026-10-08.md)
430
+ names the repeated host lookup removed at completion; candidate latency and
431
+ real-editor qualification remain open.
423
432
 
424
433
  The pinned Code-OSS host needs a resource-scoping repair in its input-state change
425
434
  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
- save.remembered = true;
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
- if (nativeId)
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
- save.remembered = true;
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(() => {
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.54",
4
+ "version": "0.1.55",
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",