@tangle-network/agent-app 0.45.50 → 0.45.51

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.
@@ -522,7 +522,8 @@
522
522
 
523
523
  /* The waiting label. `background-clip: text` over a moving gradient, so the
524
524
  shimmer runs THROUGH the glyphs rather than behind them. Marked essential:
525
- it is the only signal that work is still in flight. */
525
+ it is the only signal that work is still in flight. Its reduced-motion
526
+ answer is at the bottom of this file, with the floor it opts out of. */
526
527
  .agent-shimmer {
527
528
  background: linear-gradient(
528
529
  90deg,
@@ -583,6 +584,13 @@
583
584
  * out by declaring `data-motion="essential"`; the exclusion covers that element
584
585
  * and its subtree, and `:where()` keeps the selector at zero specificity so a
585
586
  * consumer's own `!important` can still win.
587
+ *
588
+ * `essential` is an exemption from the BLANKET rule, not a licence to keep
589
+ * running. It exists because collapsing a meaning-carrying animation to a 1ms
590
+ * flash destroys the meaning, so the element gets to answer for itself — and it
591
+ * then OWES that answer. An element with no end condition owes it most, which
592
+ * is why `.agent-shimmer` states its own below: the sweep stops, and what it
593
+ * was saying is re-stated as a static difference the reader can still see.
586
594
  */
587
595
  @media (prefers-reduced-motion: reduce) {
588
596
  :root {
@@ -603,6 +611,42 @@
603
611
  transition-duration: 1ms !important;
604
612
  }
605
613
 
614
+ /* The waiting label's own answer. It is `data-motion="essential"` because the
615
+ sweep is the ONLY thing separating an agent that is working from one that
616
+ is stuck, so the floor above must not collapse it — but an INFINITE
617
+ animation is exactly what someone asking for reduced motion is asking to be
618
+ rid of, and running it anyway because the element declared itself essential
619
+ is the override this file calls a defect.
620
+
621
+ So the meaning is carried without the motion. The sweep stops and the
622
+ gradient comes off (it exists only to be moved), which puts the glyphs back
623
+ under `color` instead of leaving them transparent windows onto it.
624
+
625
+ The DOTTED RULE is the discriminator, and it is the only one. Measured in
626
+ Chromium under `prefers-reduced-motion: reduce`, light and dark: the live
627
+ label computes `text-decoration: underline dotted` where a settled label
628
+ beside it computes `none`, and the two resolve to the SAME color and the
629
+ same weight. That is by construction — `color: inherit` hands the label
630
+ whatever its context already uses, and the settled label shares that
631
+ context. In `mission-activity`'s lane both tool names read rgb(12,12,21)
632
+ light / rgb(236,236,241) dark; in the chat trace toggle "Thinking · 12s"
633
+ and "Thought for 12s" both read rgb(96,96,99) light / rgb(158,158,160)
634
+ dark, because that button is `text-muted-foreground`. So the reader tells
635
+ in-flight from done by the rule under the word, from a still frame — not by
636
+ tone and not by weight.
637
+
638
+ Not `content: '…'` or any other generated text: this element's text is read
639
+ by a screen reader, and adding pseudo-content changes what is announced. */
640
+ .agent-shimmer {
641
+ animation: none;
642
+ background: none;
643
+ background-clip: border-box;
644
+ -webkit-background-clip: border-box;
645
+ color: inherit;
646
+ text-decoration: underline dotted currentColor;
647
+ text-underline-offset: 3px;
648
+ }
649
+
606
650
  html {
607
651
  scroll-behavior: auto !important;
608
652
  }
@@ -527,7 +527,14 @@ interface QuestionOptionListProps {
527
527
  }
528
528
  /** The radio/checkbox option rows for a select field. Renders a fragment of
529
529
  * option `<label>` rows so a card keeps its own wrapping layout and appends
530
- * its own write-in input. */
530
+ * its own write-in input.
531
+ *
532
+ * The rows arrive as a SEQUENCE (`.agent-arrive` + `--stagger-index`), which
533
+ * is the difference between reading a list and being shown one: the eye is
534
+ * told there are N choices and in what order before it has read any of them.
535
+ * The index is safe to take straight from the map because an option list does
536
+ * not re-sort under a mounted card — a different set of options is a
537
+ * different `key`, and a different ask resets the card wholesale. */
531
538
  declare function QuestionOptionList({ groupName, idPrefix, options, multi, selectedValues, disabled, onToggle, answered, }: QuestionOptionListProps): react.JSX.Element;
532
539
  interface InteractionQuestionCardProps {
533
540
  interaction: ChatInteraction;
@@ -1050,6 +1057,12 @@ interface MissionActivityLaneProps {
1050
1057
  /**
1051
1058
  * Collapsed sub-rows under a mission step — one row per delegated run —
1052
1059
  * expanding to the step's waterfall. Renders nothing for an empty lane.
1060
+ *
1061
+ * A sub-row appears because a delegated run STARTED or FINISHED, which is the
1062
+ * one kind of list change worth choreographing: it arrives, and the group
1063
+ * arrives as a sequence. Keying on `taskId` is what keeps the rest still — the
1064
+ * snapshot re-renders every poll, and a row whose status merely advanced holds
1065
+ * the DOM node it already had.
1053
1066
  */
1054
1067
  declare function MissionActivityLane({ activity, startedAt, nowMs }: MissionActivityLaneProps): react.JSX.Element | null;
1055
1068
  interface AgentActivityPanelProps {
@@ -131,7 +131,7 @@ import {
131
131
  withoutRecordGridCreated,
132
132
  withoutRecordGridRemoved,
133
133
  withoutRecordGridUpdate
134
- } from "../chunk-7HY4LX7O.js";
134
+ } from "../chunk-CXPWUCXC.js";
135
135
  import "../chunk-FBVLEGEG.js";
136
136
  import {
137
137
  EvidenceLineageTable,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-app",
3
- "version": "0.45.50",
3
+ "version": "0.45.51",
4
4
  "packageManager": "pnpm@11.17.0",
5
5
  "description": "Build agent applications with typed chat, tools, sandboxes, integrations, billing, and evaluation.",
6
6
  "keywords": [