agent-afk 5.108.0 → 5.108.2

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.
@@ -239,14 +239,64 @@ html, body {
239
239
  .tool-more:hover { color: var(--text); border-color: var(--accent); }
240
240
 
241
241
  /* ── composer ────────────────────────────────────────────────────────────── */
242
- .composer { border-top: 1px solid var(--border); background: var(--bg-raised); padding: 12px 20px; }
242
+ .composer { border-top: 1px solid var(--border); background: var(--bg-raised); padding: 12px 20px; position: relative; }
243
243
  .composer.is-readonly { opacity: 0.6; }
244
+
245
+ /* Slash-command menu. Anchored to the composer and floated ABOVE it so opening
246
+ it never reflows the transcript or shifts the textarea under the cursor. */
247
+ .slash-menu {
248
+ position: absolute; bottom: 100%; left: 20px; right: 20px; z-index: 20;
249
+ max-height: 40vh; overflow-y: auto; margin-bottom: 6px;
250
+ background: var(--bg-raised); border: 1px solid var(--border);
251
+ border-radius: var(--radius); box-shadow: 0 8px 24px rgb(0 0 0 / 45%);
252
+ }
253
+ .slash-menu[hidden] { display: none; }
254
+ .slash-status {
255
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
256
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
257
+ }
258
+ .slash-row {
259
+ display: flex; align-items: baseline; gap: 8px;
260
+ padding: 6px 12px; cursor: pointer; font-size: 13px;
261
+ border-left: 2px solid transparent;
262
+ }
263
+ .slash-row.is-selected { background: var(--bg-sunken); border-left-color: var(--accent); }
264
+ .slash-name { font-family: var(--mono); color: var(--accent); white-space: nowrap; }
265
+ .slash-row.is-selected .slash-name { font-weight: 600; }
266
+ .slash-summary {
267
+ color: var(--text-dim); overflow: hidden;
268
+ text-overflow: ellipsis; white-space: nowrap;
269
+ }
270
+ .slash-badge {
271
+ font-size: 11px; color: var(--text-faint); border: 1px solid var(--border);
272
+ border-radius: 4px; padding: 0 5px; white-space: nowrap; flex: none;
273
+ }
244
274
  .composer-row { display: flex; gap: 10px; align-items: flex-end; }
245
- #prompt {
246
- flex: 1; resize: vertical; background: var(--bg-sunken); color: var(--text);
275
+ .prompt-wrap { flex: 1; position: relative; display: flex; }
276
+
277
+ /* Invariant: #prompt and .prompt-mirror paint the SAME string on top of each
278
+ other, so every metric that affects text layout must be declared once, here,
279
+ for both. Changing font, size, line-height, padding, or border width on one
280
+ alone makes the highlight ghost behind the caret. */
281
+ #prompt, .prompt-mirror {
247
282
  border: 1px solid var(--border); border-radius: var(--radius);
248
283
  padding: 10px 12px; font-family: var(--sans); font-size: 14px; line-height: 1.5;
284
+ white-space: pre-wrap; overflow-wrap: break-word;
285
+ }
286
+ #prompt {
287
+ flex: 1; resize: vertical; background: transparent; position: relative; z-index: 1;
288
+ }
289
+ #prompt.slash-highlight-active {
290
+ /* Text is transparent so the mirror shows through; the caret is not. */
291
+ color: transparent; caret-color: var(--text);
249
292
  }
293
+ #prompt::placeholder { color: var(--text-faint); }
294
+ .prompt-mirror {
295
+ position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden;
296
+ background: var(--bg-sunken); color: var(--text); border-color: transparent;
297
+ }
298
+ .prompt-mirror .tok-known { color: var(--accent); }
299
+ .prompt-mirror .tok-slash { color: var(--text-faint); }
250
300
  #prompt:focus { outline: none; border-color: var(--accent); }
251
301
  #prompt:disabled { cursor: not-allowed; }
252
302
  .send {
@@ -280,51 +330,6 @@ html, body {
280
330
  .composer { padding: 10px 14px; }
281
331
  }
282
332
 
283
- /*
284
- * Approvals.
285
- *
286
- * Invariant: a pending approval BLOCKS the agent's turn, so these cards must be
287
- * impossible to miss — they sit directly above the composer (the region the
288
- * operator is already looking at) rather than in the transcript, where new
289
- * output would scroll them out of view while the turn stays stuck.
290
- */
291
- .approvals:empty { display: none; }
292
- .approvals {
293
- border-top: 1px solid var(--border); background: var(--bg-sunken);
294
- padding: 10px 16px; display: flex; flex-direction: column; gap: 8px;
295
- max-height: 42vh; overflow-y: auto;
296
- }
297
- .approval-card {
298
- border: 1px solid var(--warning); border-radius: var(--radius);
299
- background: var(--bg-raised); padding: 11px 13px;
300
- }
301
- .approval-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
302
- .approval-badge {
303
- font-family: var(--mono); font-size: 10px; text-transform: uppercase;
304
- letter-spacing: 0.06em; color: var(--warning);
305
- border: 1px solid var(--warning); border-radius: 4px; padding: 1px 6px;
306
- }
307
- .approval-source { font-family: var(--mono); font-size: 10px; color: var(--text-faint); }
308
- .approval-title { font-size: 13px; line-height: 1.5; color: var(--text); }
309
- .approval-desc { font-size: 12px; line-height: 1.5; color: var(--text-dim); margin-top: 4px; }
310
- .approval-input {
311
- width: 100%; margin-top: 8px; padding: 7px 9px;
312
- font-family: var(--mono); font-size: 12px;
313
- color: var(--text); background: var(--bg-sunken);
314
- border: 1px solid var(--border); border-radius: 6px;
315
- }
316
- .approval-input:focus { outline: none; border-color: var(--accent); }
317
- .approval-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
318
- .approval-btn {
319
- font: inherit; font-size: 12px; cursor: pointer;
320
- color: var(--text); background: var(--bg-sunken);
321
- border: 1px solid var(--border); border-radius: 6px; padding: 5px 12px;
322
- }
323
- .approval-btn:hover { border-color: var(--text-dim); }
324
- .approval-primary { color: var(--bg); background: var(--success); border-color: var(--success); }
325
- .approval-primary:hover { filter: brightness(1.08); }
326
- .approval-danger { color: var(--error); border-color: var(--error); background: transparent; }
327
- .approval-danger:hover { background: rgba(248, 113, 113, 0.12); }
328
333
  .stop {
329
334
  font: inherit; font-size: 12px; cursor: pointer; white-space: nowrap;
330
335
  color: var(--error); background: transparent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-afk",
3
- "version": "5.108.0",
3
+ "version": "5.108.2",
4
4
  "description": "Open-source coding-agent harness you can actually change — own the loop (prompts, gates, routing, skills, terminal states), use any model, run long tasks while you're away.",
5
5
  "main": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",