loadtoagent 1.3.8 → 1.3.10

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.
@@ -525,6 +525,30 @@ button[aria-busy="true"] {
525
525
  animation: control-room-pulse 1s ease-in-out infinite;
526
526
  }
527
527
 
528
+ .chat-delivery-status.confirming,
529
+ .chat-delivery-status.received,
530
+ .chat-delivery-status.responding {
531
+ background: rgba(91,169,255,.09);
532
+ color: #8fc3ff !important;
533
+ }
534
+
535
+ .chat-delivery-status.confirming::before,
536
+ .chat-delivery-status.responding::before {
537
+ display: inline-block;
538
+ width: 5px;
539
+ height: 5px;
540
+ margin-right: 5px;
541
+ border-radius: 50%;
542
+ background: #71b2ff;
543
+ content: "";
544
+ animation: control-room-pulse 1s ease-in-out infinite;
545
+ }
546
+
547
+ .chat-delivery-status.delayed {
548
+ background: rgba(246,190,75,.11);
549
+ color: #f1c66f !important;
550
+ }
551
+
528
552
  .chat-delivery-status.failed {
529
553
  background: rgba(255,107,127,.1);
530
554
  color: #ff9baa !important;
@@ -1120,100 +1144,177 @@ button[aria-busy="true"] {
1120
1144
  animation: control-room-pulse 1.35s ease-in-out infinite;
1121
1145
  }
1122
1146
 
1123
- .chat-progress-updates {
1147
+ .chat-delivery-progress {
1148
+ display: grid;
1149
+ gap: 11px;
1124
1150
  margin-left: 43px;
1125
- border: 1px solid #263342;
1126
- border-radius: 11px;
1127
- background: #0a1017;
1128
- overflow: hidden;
1151
+ padding: 13px;
1152
+ border: 1px solid rgba(91,169,255,.24);
1153
+ border-radius: 12px;
1154
+ background: linear-gradient(145deg,rgba(35,76,125,.13),rgba(10,15,22,.76));
1155
+ color: #b9c7d8;
1129
1156
  }
1130
1157
 
1131
- .chat-progress-updates > summary {
1132
- display: flex;
1133
- align-items: center;
1134
- justify-content: space-between;
1135
- gap: 12px;
1136
- padding: 11px 13px;
1137
- cursor: pointer;
1138
- list-style: none;
1158
+ .chat-delivery-progress > header {
1159
+ display: grid;
1160
+ grid-template-columns: 8px minmax(0,1fr);
1161
+ align-items: start;
1162
+ gap: 9px;
1139
1163
  }
1140
1164
 
1141
- .chat-progress-updates > summary::-webkit-details-marker {
1142
- display: none;
1165
+ .chat-delivery-progress > header > span {
1166
+ width: 7px;
1167
+ height: 7px;
1168
+ margin-top: 5px;
1169
+ border-radius: 50%;
1170
+ background: #71b2ff;
1171
+ box-shadow: 0 0 0 4px rgba(91,169,255,.09);
1172
+ animation: control-room-pulse 1.35s ease-in-out infinite;
1143
1173
  }
1144
1174
 
1145
- .chat-progress-updates > summary span,
1146
- .chat-progress-updates > summary small {
1147
- display: block;
1175
+ .chat-delivery-progress > header > div {
1176
+ display: grid;
1177
+ gap: 3px;
1178
+ min-width: 0;
1148
1179
  }
1149
1180
 
1150
- .chat-progress-updates > summary b {
1151
- color: #aebbc9;
1181
+ .chat-delivery-progress > header b {
1182
+ color: #d8e6f7;
1152
1183
  font-size: 12px;
1153
1184
  }
1154
1185
 
1155
- .chat-progress-updates > summary small {
1156
- margin-top: 3px;
1157
- color: #68778a;
1158
- font-size: 11px;
1186
+ .chat-delivery-progress > header small,
1187
+ .chat-delivery-progress li small,
1188
+ .chat-delivery-progress footer {
1189
+ color: #8494a8;
1190
+ font-size: 10px;
1191
+ line-height: 1.5;
1192
+ }
1193
+
1194
+ .chat-delivery-progress ol {
1195
+ display: grid;
1196
+ grid-template-columns: repeat(3,minmax(0,1fr));
1197
+ gap: 7px;
1198
+ margin: 0;
1199
+ padding: 0;
1200
+ list-style: none;
1201
+ }
1202
+
1203
+ .chat-delivery-progress.phase-observed ol {
1204
+ grid-template-columns: repeat(2,minmax(0,1fr));
1205
+ }
1206
+
1207
+ .chat-delivery-progress li {
1208
+ display: grid;
1209
+ grid-template-columns: 22px minmax(0,1fr);
1210
+ align-items: start;
1211
+ gap: 7px;
1212
+ min-width: 0;
1213
+ padding: 8px;
1214
+ border: 1px solid #202b38;
1215
+ border-radius: 9px;
1216
+ background: rgba(9,14,21,.62);
1159
1217
  }
1160
1218
 
1161
- .chat-progress-updates > summary i {
1219
+ .chat-delivery-progress li > i {
1220
+ width: 21px;
1221
+ height: 21px;
1222
+ display: grid;
1223
+ place-items: center;
1224
+ border: 1px solid #334154;
1225
+ border-radius: 50%;
1162
1226
  color: #718196;
1163
- font-size: 12px;
1227
+ font-size: 9px;
1164
1228
  font-style: normal;
1165
- transition: transform var(--motion-fast) ease;
1229
+ font-weight: 800;
1166
1230
  }
1167
1231
 
1168
- .chat-progress-updates[open] > summary i {
1169
- transform: rotate(180deg);
1232
+ .chat-delivery-progress li > span {
1233
+ display: grid;
1234
+ gap: 2px;
1235
+ min-width: 0;
1170
1236
  }
1171
1237
 
1172
- .chat-progress-list {
1173
- display: grid;
1174
- gap: 8px;
1175
- padding: 0 10px 10px;
1238
+ .chat-delivery-progress li b {
1239
+ color: #aebdce;
1240
+ font-size: 10px;
1176
1241
  }
1177
1242
 
1178
- .chat-progress-list article {
1179
- padding: 10px;
1180
- border: 1px solid #202b38;
1181
- border-radius: 9px;
1182
- background: #0d141d;
1243
+ .chat-delivery-progress li.done {
1244
+ border-color: rgba(89,223,167,.2);
1245
+ background: rgba(35,104,78,.08);
1183
1246
  }
1184
1247
 
1185
- .chat-progress-list article > header {
1186
- display: flex;
1187
- justify-content: space-between;
1188
- gap: 10px;
1189
- margin-bottom: 7px;
1190
- color: #7e8da0;
1191
- font-size: 11px;
1248
+ .chat-delivery-progress li.done > i {
1249
+ border-color: rgba(89,223,167,.35);
1250
+ background: rgba(89,223,167,.1);
1251
+ color: #70d9ad;
1192
1252
  }
1193
1253
 
1194
- .chat-progress-list .chat-content {
1195
- font-size: 12px;
1254
+ .chat-delivery-progress li.active {
1255
+ border-color: rgba(91,169,255,.3);
1256
+ background: rgba(48,102,171,.1);
1257
+ }
1258
+
1259
+ .chat-delivery-progress li.active > i {
1260
+ border-color: rgba(91,169,255,.48);
1261
+ color: #8fc3ff;
1262
+ animation: control-room-pulse 1.2s ease-in-out infinite;
1263
+ }
1264
+
1265
+ .chat-delivery-progress li.warning {
1266
+ border-color: rgba(246,190,75,.32);
1267
+ background: rgba(116,80,17,.11);
1196
1268
  }
1197
1269
 
1198
- .chat-turn-waiting {
1270
+ .chat-delivery-progress li.warning > i {
1271
+ border-color: rgba(246,190,75,.46);
1272
+ color: #f1c66f;
1273
+ }
1274
+
1275
+ .chat-delivery-progress li.error {
1276
+ border-color: rgba(255,107,127,.34);
1277
+ background: rgba(94,31,44,.12);
1278
+ }
1279
+
1280
+ .chat-delivery-progress li.error > i {
1281
+ border-color: rgba(255,107,127,.46);
1282
+ color: #ff9baa;
1283
+ }
1284
+
1285
+ .chat-delivery-progress footer {
1199
1286
  display: flex;
1200
1287
  align-items: center;
1201
- gap: 8px;
1202
- margin-left: 43px;
1203
- padding: 11px 13px;
1204
- border: 1px solid rgba(71,214,153,.22);
1205
- border-radius: 10px;
1206
- background: rgba(34,118,83,.08);
1207
- color: #91bca9;
1208
- font-size: 12px;
1288
+ gap: 6px;
1289
+ padding-top: 9px;
1290
+ border-top: 1px solid #1f2a37;
1209
1291
  }
1210
1292
 
1211
- .chat-turn-waiting span {
1212
- width: 6px;
1213
- height: 6px;
1214
- border-radius: 50%;
1215
- background: #59dfa7;
1216
- animation: control-room-pulse 1.35s ease-in-out infinite;
1293
+ .chat-delivery-progress footer i {
1294
+ color: #6e829a;
1295
+ font-style: normal;
1296
+ }
1297
+
1298
+ .chat-delivery-progress.phase-delayed {
1299
+ border-color: rgba(246,190,75,.28);
1300
+ background: linear-gradient(145deg,rgba(111,75,18,.13),rgba(10,15,22,.76));
1301
+ }
1302
+
1303
+ .chat-delivery-progress.phase-delayed > header > span {
1304
+ background: #efbd5d;
1305
+ box-shadow: 0 0 0 4px rgba(246,190,75,.09);
1306
+ animation: none;
1307
+ }
1308
+
1309
+ .chat-delivery-progress.phase-failed {
1310
+ border-color: rgba(255,107,127,.3);
1311
+ background: linear-gradient(145deg,rgba(94,31,44,.14),rgba(10,15,22,.76));
1312
+ }
1313
+
1314
+ .chat-delivery-progress.phase-failed > header > span {
1315
+ background: #ff7e91;
1316
+ box-shadow: 0 0 0 4px rgba(255,107,127,.08);
1317
+ animation: none;
1217
1318
  }
1218
1319
 
1219
1320
  .subagent-call-moment {
@@ -151,7 +151,8 @@
151
151
  animation: motion-backdrop-in var(--motion-medium) ease both;
152
152
  }
153
153
 
154
- .drawer-backdrop.closing {
154
+ .drawer-backdrop.closing,
155
+ .drawer-backdrop.hidden {
155
156
  animation: motion-backdrop-out 260ms ease both;
156
157
  pointer-events: none;
157
158
  }
@@ -405,8 +405,7 @@
405
405
  align-items: flex-start;
406
406
  }
407
407
 
408
- .chat-progress-updates,
409
- .chat-turn-waiting,
408
+ .chat-delivery-progress,
410
409
  .subagent-call-moment,
411
410
  .subagent-call-event {
412
411
  margin-left: 0;
@@ -417,6 +416,11 @@
417
416
  width: 100%;
418
417
  }
419
418
 
419
+ .chat-delivery-progress ol,
420
+ .chat-delivery-progress.phase-observed ol {
421
+ grid-template-columns: 1fr;
422
+ }
423
+
420
424
  .json-object>div {
421
425
  grid-template-columns: 1fr;
422
426
  }
@@ -153,12 +153,15 @@ window.LoadToAgentTerminalAgentActions = function createModule(context) {
153
153
  const created = await window.loadtoagent.terminalCreate({
154
154
  type: 'agent',
155
155
  provider: support.provider,
156
- args: resumeLaunchArgs(support, sendDraft ? prompt : '', { background: options.focus === false }),
156
+ args: resumeLaunchArgs(support, sendDraft ? prompt : ''),
157
157
  cwd,
158
158
  distro,
159
159
  bridgeId: agentSession.id,
160
160
  title,
161
- transient: options.focus === false,
161
+ // Conversation sends must keep the resumed PTY alive. A transient
162
+ // one-shot process can exit after spawn (for example when the session is
163
+ // busy) while the composer incorrectly reports that the prompt was sent.
164
+ transient: false,
162
165
  cols: 120,
163
166
  rows: 32,
164
167
  });
@@ -179,11 +179,9 @@
179
179
  return { supported: true, provider, sessionId, args };
180
180
  }
181
181
 
182
- function resumeLaunchArgs(support, prompt = '', options = {}) {
182
+ function resumeLaunchArgs(support, prompt = '') {
183
183
  const args = [...support.args];
184
184
  const text = String(prompt || '').trim();
185
- if (options.background && text && support.provider === 'codex') return ['exec', 'resume', support.sessionId, text];
186
- if (options.background && text && support.provider === 'claude') return ['--resume', support.sessionId, '--print', text];
187
185
  if (text) args.push(text);
188
186
  return args;
189
187
  }
@@ -698,13 +696,26 @@
698
696
  state.active = false;
699
697
  return;
700
698
  }
699
+ // Snapshot renders call activate repeatedly while this view is already
700
+ // open. Refreshing and re-showing the same xterm screen would temporarily
701
+ // hide its helper textarea and steal direct keyboard focus.
702
+ if (!enteringMode) return;
701
703
  await refreshSessions();
702
704
  if (!state.active || state.mode !== nextMode) return;
705
+ let selectionChanged = false;
703
706
  if (enteringMode && !state.selectedId && !state.selectedTmux) {
704
707
  const visible = modeSessions();
705
- if (visible.length) state.selectedId = visible[0].id;
706
- else if (state.mode === 'tmux') state.selectedTmux = tmuxRows()[0] || null;
708
+ if (visible.length) {
709
+ state.selectedId = visible[0].id;
710
+ selectionChanged = true;
711
+ } else if (state.mode === 'tmux') {
712
+ state.selectedTmux = tmuxRows()[0] || null;
713
+ selectionChanged = Boolean(state.selectedTmux);
714
+ }
707
715
  }
716
+ // refreshSessions already rendered and showed the existing selection. Avoid
717
+ // hiding the same xterm host a second time after users can start typing.
718
+ if (!selectionChanged) return;
708
719
  renderAll();
709
720
  await showSelection();
710
721
  }