@xenosystem/agent-interface-ui 0.1.70 β†’ 0.1.72

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.
Files changed (2) hide show
  1. package/dist/agent.css +89 -27
  2. package/package.json +7 -7
package/dist/agent.css CHANGED
@@ -7667,7 +7667,20 @@ a.xeno-source-card:focus-visible {
7667
7667
  ticker to its glyph and the words vanished (2026-09-18); settled, beside a sources control, the line
7668
7668
  hugs its reading so the divider sits right after "1 step" */
7669
7669
  .xa-linerow > .xa-line { flex: 1 1 auto; min-width: 0; }
7670
- .xa-linerow > .xa-line.xa-with-sources { flex: none; }
7670
+ .xa-linerow > .xa-line.xa-with-sources { flex: 0 1 auto; }
7671
+ /* πŸ”΄ a DOCKED step beside the sources: `Worked for 4s | Searched the web Β· xeno hub | 1 source`.
7672
+ Its ticker is `flex: 1 1 0` β€” a zero basis β€” so inside a line that hugs its content it measured
7673
+ 19px and showed the GLYPH ALONE, the 0.1.48 defect again for the one shape it missed (measured
7674
+ 2026-09-24: the most common web-search receipt read `Worked for 4s | β—» | 1 source`). Sized to its
7675
+ words here, and shrinkable, so a long query still fades at the edge instead of pushing the sources off. */
7676
+ .xa-linerow > .xa-line.xa-with-sources .xa-cur { flex: 0 1 auto; }
7677
+ /* …and the words must be IN FLOW to be sized to at all: a live ticker's words are absolutely
7678
+ positioned (so one step can slide over the last), which gives its box no width but the glyph's.
7679
+ Settled there is nothing left to slide over, so the words take their place in the line β€” the
7680
+ thought-only line does the same β€” and the box, not a fixed basis, is what shrinks. */
7681
+ .xa-linerow > .xa-line.xa-with-sources .xa-cur .xa-tx { flex: 0 1 auto; }
7682
+ .xa-linerow > .xa-line.xa-with-sources .xa-cur .xa-t:not(.xa-out) { position: static; display: block; overflow: hidden; }
7683
+ .xa-linerow > .xa-line.xa-with-sources .xa-cur .xa-t.xa-out { display: none; }
7671
7684
  .xa-linerow > .xa-vr-src { display: block; flex: none; width: 1px; height: 10px; background: rgba(var(--xa-ink), 0.12); animation: xa-rise 280ms var(--xa-ease) both; animation-delay: 160ms; }
7672
7685
  .xa-srcline { display: flex; align-items: center; gap: 8px; height: 22px; cursor: pointer; font-size: 11px; color: var(--xa-t4); animation: xa-rise 280ms var(--xa-ease) both; animation-delay: 160ms; }
7673
7686
  .xa-srcline:hover { color: var(--xa-t2); }
@@ -7712,7 +7725,15 @@ a.xeno-source-card:focus-visible {
7712
7725
  /* collapsed steps: while it works the rail stays folded and the clock line carries the current step β€”
7713
7726
  "Working for 4s | Clicked Message @Lil Bro" β€” the text fading out on the right when it is long */
7714
7727
  .xa-line .xa-vr { display: none; flex: none; width: 1px; height: 10px; background: rgba(var(--xa-ink), 0.12); }
7715
- .xa-line .xa-cur { display: none; align-items: center; gap: 7px; flex: 1 1 0; min-width: 0; height: 16px; overflow: hidden; font-size: 11.5px; line-height: 16px; color: var(--xa-t4); mask-image: linear-gradient(to right, #000 calc(100% - 44px), transparent 100%); -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 44px), transparent 100%); }
7728
+ .xa-line .xa-cur { display: none; align-items: center; gap: 7px; flex: 1 1 0; min-width: 0; height: 16px; overflow: hidden; font-size: 11.5px; line-height: 16px; color: var(--xa-t4); }
7729
+ /* the fade is for words that are CUT OFF, and only those: masking every ticker faded the last 44px of a
7730
+ short line whole β€” `Searched the web Β· xeno hub` lost its object (the Ticker sets `xa-long` by
7731
+ measuring whether its words overflow) */
7732
+ .xa-line .xa-cur.xa-long { mask-image: linear-gradient(to right, #000 calc(100% - 44px), transparent 100%); -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 44px), transparent 100%); }
7733
+ /* a glyph leaving for a bare word closes its slot as it goes β€” width and the gap after it β€” instead of
7734
+ dropping 19px out from under the words in one frame when the old glyph is removed */
7735
+ .xa-line .xa-cur .xa-slot { transition: width 200ms var(--xa-ease), margin-right 200ms var(--xa-ease); }
7736
+ .xa-line .xa-cur .xa-slot.xa-slotout { width: 0; margin-right: -7px; }
7716
7737
  .xa-line .xa-cur .xa-mono { font-size: 11px; }
7717
7738
  /* the first step slides out from behind the clock β€” glyph, then its words; every later step replaces the
7718
7739
  pair: the glyph rises from below as the old one leaves upward, the words come out from behind the glyph */
@@ -7743,23 +7764,43 @@ a.xeno-source-card:focus-visible {
7743
7764
  settled turn cannot be asking (asking is live), so these only ever apply to a receipt. */
7744
7765
  .xa-collapsed .xa-turn.xa-done .xa-line.xa-docked .xa-vr { display: block; }
7745
7766
  .xa-collapsed .xa-turn.xa-done .xa-line.xa-docked .xa-cur { display: flex; }
7746
- /* thought-only ticker is a short word (Thinking / Thought). The line's mask fades the last
7747
- 44px of .xa-cur β€” on a hugging column that is the WHOLE word, so it vanished (2026-09-20).
7748
- Words are in-flow so the auto column sizes to them; the slot is optional (gone when settled). */
7767
+ /* thought-only: the words are IN FLOW so the auto column sizes to them β€” a short `Thinking` or
7768
+ `Thought for 3s` gets exactly its width and hugs the bar; the slot is optional (gone when settled).
7769
+
7770
+ πŸ”΄ In flow is not the same as unbounded. This rule used to say `min-width: min-content` and
7771
+ `overflow: visible`, which was right for the short word it was written for (2026-09-20) and wrong
7772
+ for the sentence the same slot carries while a thought STREAMS β€” `Thinking Β· Let me reconsider…`
7773
+ is the current line of the thought, not a word. A long line therefore ran past the clock line's
7774
+ right edge instead of stopping at it (measured 2026-09-25: words to x 1048 on a line ending at
7775
+ 744, with a horizontal scrollbar). `min-width: 0` lets the auto track shrink to the space there
7776
+ is; the column still sizes to the words whenever they fit, and the mask below fades them only
7777
+ when they are actually cut off. */
7749
7778
  .xa-collapsed .xa-turn.xa-thought-only .xa-line .xa-cur {
7750
7779
  flex: none;
7751
- min-width: min-content;
7752
- overflow: visible;
7753
- mask-image: none;
7754
- -webkit-mask-image: none;
7780
+ min-width: 0;
7781
+ overflow: hidden;
7755
7782
  }
7756
7783
  .xa-collapsed .xa-turn.xa-thought-only .xa-line .xa-cur .xa-tx {
7757
- flex: none;
7758
- min-width: min-content;
7759
- overflow: visible;
7784
+ flex: 0 1 auto;
7785
+ min-width: 0;
7786
+ overflow: hidden;
7760
7787
  height: auto;
7761
7788
  }
7762
7789
  .xa-collapsed .xa-turn.xa-thought-only .xa-line .xa-cur .xa-t { position: static; }
7790
+ /* πŸ”΄ The phrase that is LEAVING must not take a place in the flow. With both in flow, every new
7791
+ phrase of a streaming thought was laid out BESIDE the old one β€” `Thinking` at 156px, the new
7792
+ `Thinking Β· This is…` at 199px β€” for the 300 ms the old one takes to leave, and then jumped left
7793
+ into its real place; `Thinking` -> `Thought for 2s` did the same, 71px out (measured 2026-09-25).
7794
+ The leaving phrase overlays the arriving one at the left edge and blurs out, as it does on every
7795
+ other clock line, and is clipped to the words' box so it can neither widen the column nor mark
7796
+ the arriving words as cut off (the Ticker measures `.xa-tx` to decide the fade). */
7797
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line .xa-cur .xa-t.xa-out {
7798
+ position: absolute;
7799
+ left: 0;
7800
+ right: 0;
7801
+ top: 0;
7802
+ overflow: hidden;
7803
+ }
7763
7804
  /* thought-only: one grid live AND settled. Leftover width sits in shots, not in Thought,
7764
7805
  so `Worked for 2s | Thought β€Ί` hugs the bar and the hang (cur+chev+shots) never
7765
7806
  changes tracks when xa-live comes off. */
@@ -7781,8 +7822,12 @@ a.xeno-source-card:focus-visible {
7781
7822
  align-items: center;
7782
7823
  }
7783
7824
  /* settled: the square is display:none, but an empty first track still takes column-gap.
7784
- Drop the `dot` column so Worked for sits on the left with no indent. Hang stays on Thought. */
7785
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thought {
7825
+ Drop the `dot` column so Worked for sits on the left with no indent. Hang stays on Thought.
7826
+ πŸ”΄ Keyed on `xa-squared` β€” the square GONE β€” never on `:not(.xa-live)`. The turn stops being live
7827
+ ~500ms before the square leaves, and in that window this rule left a displayed square with no
7828
+ track: it fell into an implicit row, the line grew 22 -> 28px, and the square blinked out at the
7829
+ far right (measured 2026-09-24). */
7830
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thought.xa-squared {
7786
7831
  grid-template-columns: auto auto auto auto 1fr;
7787
7832
  grid-template-areas:
7788
7833
  "read vr cur chev shots"
@@ -7799,21 +7844,25 @@ a.xeno-source-card:focus-visible {
7799
7844
  child in its OWN track, which is what produced the second row. The header floats, the trace is
7800
7845
  ordinary flow text, and the browser shortens the first line by the float's width for free.
7801
7846
  The line stops being a grid here, so the `grid-area` assignments below no longer apply to it. */
7802
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo {
7847
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared {
7803
7848
  display: block;
7849
+ /* the 16px text line CENTRED in the 22px clock row, where the grid had it. A block puts its first
7850
+ line at the top, so without this the thought rose 3px at the fold β€” the vertical move the eye
7851
+ catches (measured 2026-09-24: y 29 -> 26). The padding is the centring; min-height keeps 22. */
7852
+ padding: 3px 0;
7804
7853
  }
7805
7854
  /* πŸ”΄ The float's HEIGHT decides how many lines are shortened. At the clock row's 22px it
7806
7855
  overlapped the trace's second 16px line too, so line 1 also started at x=91.6 instead of
7807
7856
  returning to the left margin β€” measured. Matching the float to the text's own line-height
7808
7857
  means exactly ONE line runs in, and every line after it is full width. */
7809
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-cur,
7810
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-chev {
7858
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-cur,
7859
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-chev {
7811
7860
  float: left;
7812
7861
  height: 16px;
7813
7862
  display: flex;
7814
7863
  align-items: center;
7815
7864
  }
7816
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-chev {
7865
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-chev {
7817
7866
  margin-right: 8px; /* the gap the grid's column-gap used to give */
7818
7867
  }
7819
7868
  /* πŸ”΄ The trace must NOT establish a block formatting context. `overflow: hidden` does, and a BFC
@@ -7821,29 +7870,35 @@ a.xeno-source-card:focus-visible {
7821
7870
  instead of wrapping under it. The fold's `overflow: hidden` therefore cannot live here; the
7822
7871
  0fr/1fr grid on `.xa-hang` is also a BFC, so the FOLD moves out to a wrapper and this element
7823
7872
  stays plain flow text. */
7824
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-hang {
7873
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-hang {
7825
7874
  display: block;
7826
7875
  overflow: visible;
7827
7876
  grid-template-rows: none;
7828
7877
  transition: none;
7829
7878
  }
7830
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-hang > .xa-hangin {
7879
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-hang > .xa-hangin {
7831
7880
  overflow: visible;
7832
7881
  padding: 0;
7833
7882
  }
7834
7883
  /* folded: the trace is simply not rendered, rather than a zero-height box that would still
7835
- shorten the first line */
7836
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-open) .xa-line.xa-thoughtsolo > .xa-hang { display: none; }
7837
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo > .xa-shots { float: right; }
7884
+ shorten the first line β€” except while CLOSING, when it stays laid out so the line can roll back up
7885
+ over it (the Transcript animates the line's height; the trace cannot animate its own) */
7886
+ .xa-collapsed .xa-turn.xa-thought-only:not(.xa-open) .xa-line.xa-thoughtsolo:not(.xa-closing) > .xa-hang { display: none; }
7887
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-shots { float: right; }
7838
7888
  /* the float must not escape the line into the reply below it */
7839
- .xa-collapsed .xa-turn.xa-thought-only:not(.xa-live) .xa-line.xa-thoughtsolo::after {
7889
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared::after {
7840
7890
  content: '';
7841
7891
  display: block;
7842
7892
  clear: both;
7843
7893
  }
7844
- .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo > .xa-read,
7845
- .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo > .xa-vr { display: none; }
7846
- .xa-turn.xa-settle .xa-line.xa-thoughtsolo .xa-read { animation: xa-dotout 200ms var(--xa-ease-out) both; }
7894
+ /* `Worked for |` leaves with the square: both blur out together (`xa-settle`), and only then are they
7895
+ removed (`xa-squared`) and the thought glides into their place. Removing them the moment the turn
7896
+ stopped β€” as 0.1.64 did β€” meant the blur could never render: the words vanished in one frame and
7897
+ the thought jumped 47px left, then sat there half a second before the fold (measured 2026-09-24). */
7898
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-read,
7899
+ .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thoughtsolo.xa-squared > .xa-vr { display: none; }
7900
+ .xa-turn.xa-settle .xa-line.xa-thoughtsolo > .xa-read,
7901
+ .xa-turn.xa-settle .xa-line.xa-thoughtsolo > .xa-vr { animation: xa-dotout 200ms var(--xa-ease-out) both; }
7847
7902
  .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thought > .xa-dot { grid-area: dot; }
7848
7903
  .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thought > .xa-read { grid-area: read; }
7849
7904
  .xa-collapsed .xa-turn.xa-thought-only .xa-line.xa-thought > .xa-vr { grid-area: vr; }
@@ -9456,6 +9511,9 @@ img.xa-fav { padding: 1px; background: #fff; }
9456
9511
  .min-h-full {
9457
9512
  min-height: 100%;
9458
9513
  }
9514
+ .w-0 {
9515
+ width: 0px;
9516
+ }
9459
9517
  .w-1 {
9460
9518
  width: 0.25rem;
9461
9519
  }
@@ -12185,6 +12243,10 @@ img.xa-fav { padding: 1px; background: #fff; }
12185
12243
  --tw-drop-shadow: drop-shadow(0 0 34px rgba(255,255,255,0.16));
12186
12244
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
12187
12245
  }
12246
+ .invert {
12247
+ --tw-invert: invert(100%);
12248
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
12249
+ }
12188
12250
  .filter {
12189
12251
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
12190
12252
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenosystem/agent-interface-ui",
3
- "version": "0.1.70",
3
+ "version": "0.1.72",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,11 +41,11 @@
41
41
  "react-markdown": "^10.1.0",
42
42
  "remark-gfm": "^4.0.1",
43
43
  "zustand": "^5.0.2",
44
- "@xenosystem/agent-conversation": "0.1.70",
45
- "@xenosystem/agent-interface-core": "0.1.70",
46
- "@xenosystem/agent-interface-client": "0.1.70",
47
- "@xenosystem/agent-interface-contract": "0.1.70",
48
- "@xenosystem/agent-interface-hub-adapter": "0.1.70"
44
+ "@xenosystem/agent-conversation": "0.1.72",
45
+ "@xenosystem/agent-interface-client": "0.1.72",
46
+ "@xenosystem/agent-interface-core": "0.1.72",
47
+ "@xenosystem/agent-interface-contract": "0.1.72",
48
+ "@xenosystem/agent-interface-hub-adapter": "0.1.72"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "react": "^19.0.0",
@@ -63,5 +63,5 @@
63
63
  "scripts": {
64
64
  "build:css": "node scripts/build-css.mjs"
65
65
  },
66
- "gitHead": "f7518d3ec8fdac26735619352954b178378ed2b3"
66
+ "gitHead": "88d6adeead1ddd1a09885dfdd05d0d281ceca2de"
67
67
  }