@tangle-network/agent-app 0.45.49 → 0.45.50

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.
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, RefObject } from 'react';
2
+ import { ReactNode, RefObject, ReactElement, CSSProperties } from 'react';
3
3
  import { ToolPart } from '@tangle-network/ui/types';
4
4
  import { C as ChatInteractionField, I as InteractionAnswers, a as ChatInteractionStatus, b as ChatInteraction, c as InteractionCancelData, d as ChatSelectField, e as InteractionRequestWire } from '../contract-OxG_jVMx.js';
5
5
  export { f as ChatFreeTextField, g as ComposerAnswerDelivery, h as INTERACTION_CANCEL_EVENT, i as INTERACTION_EVENT, j as INTERACTION_RESOLVED_EVENT, k as InteractionAnswerValue, l as InteractionPersistedPart, N as NoticeKind, m as NoticePersistedPart, P as ParseInteractionAnswersResult, n as ParseInteractionResult, o as canTransitionInteractionStatus, p as cancelStatusFor, q as composerAnswerData, r as composerAnswerDeliveries, s as dedupeQuestionInteractionsByContent, t as fieldAcceptsFreeText, u as interactionFromWireRequest, v as interactionPartKey, w as interactionToPersistedPart, x as isRenderableInteractionKind, y as isSafeInteractionFieldKey, z as isTerminalInteractionStatus, A as noticePart, B as noticePartKey, D as parseInteractionAnswers, E as parseInteractionCancel, F as parseInteractionRequest, G as persistedPartToInteraction, H as questionInteractionContentSignature, J as stampInteractionAnswers } from '../contract-OxG_jVMx.js';
@@ -1949,6 +1949,360 @@ interface RecordGridProps {
1949
1949
  */
1950
1950
  declare function RecordGrid({ columns, caption, state, empty, onCreate, onUpdate, onDelete, newRowDefaults, addLabel, locale, toolbar, loadingRowCount, className, }: RecordGridProps): react.JSX.Element;
1951
1951
 
1952
+ /**
1953
+ * `Sparkline` — the series behind a number, as inline SVG.
1954
+ *
1955
+ * `/spend`, `/missions` and the eval lanes all produce a number for today, and
1956
+ * every product renders it as text. Text cannot separate "$41, up from $38"
1957
+ * from "$41, up from $4" — the same sentence, two different situations — so the
1958
+ * reader opens a second surface to find out which one they are in. The series
1959
+ * next to the number answers it in one glance.
1960
+ *
1961
+ * No chart dependency: this subpath is react + `@tangle-network/ui` only, and a
1962
+ * polyline is not worth a bundle. What a chart library would give us here is
1963
+ * axes, ticks and a tooltip, none of which belong on a 96×24 glyph.
1964
+ *
1965
+ * The three shapes a hand-rolled sparkline gets wrong, each handled here rather
1966
+ * than left to the caller:
1967
+ *
1968
+ * - **no readings** renders an explicit empty label, never a line. A line
1969
+ * along the baseline is a claim — "this metric sat at zero" — and a series
1970
+ * nobody has measured yet did not sit anywhere.
1971
+ * - **one reading** renders a point. A line needs two coordinates; drawing one
1972
+ * from a single reading invents the segment before it.
1973
+ * - **equal readings** render flat at MID height. The obvious normalisation
1974
+ * divides by `max - min`, which is `0` for a perfectly stable metric, and
1975
+ * the resulting `NaN` lands in the `points` attribute — SVG drops the whole
1976
+ * polyline, so the metric that never moved is the one that disappears.
1977
+ * - **a missing reading renders as a GAP, and the accessible name says so.**
1978
+ * A `null` from a hole in a series and a `NaN` from a producer's unguarded
1979
+ * division are not smaller series — they are readings nobody has. Deleting
1980
+ * them closed the line straight across the hole and announced a count that
1981
+ * was short by the number deleted: measured on `[1, NaN, 3]`, one continuous
1982
+ * two-point line labelled "2 readings, rising from 1 to 3", with nothing
1983
+ * anywhere saying a reading was unreadable. The card's figure slot already
1984
+ * refuses to let a non-measurement look measured; the series one line below
1985
+ * it holds the same rule. The x axis is the SAMPLE index, so the hole keeps
1986
+ * its width, the line breaks at it, and the label carries "N not available".
1987
+ *
1988
+ * Accessibility: `role="img"` with an `aria-label` naming the metric, its range
1989
+ * and its direction. A sparkline with no accessible name is decoration a screen
1990
+ * reader cannot report, which would leave the shape — the entire reason the
1991
+ * component exists — visible to exactly one kind of reader.
1992
+ *
1993
+ * Deliberately not animated. `docs/product-surfaces.md` Pattern 4 lists chart
1994
+ * draw-on under what this package does not animate: the shape IS the answer,
1995
+ * and easing it in taxes every read of a surface people sit in for hours. The
1996
+ * card around it arrives (`.agent-arrive`); the line does not draw itself.
1997
+ */
1998
+
1999
+ /** Where a series ended relative to where it started. */
2000
+ type SparklineDirection = 'rising' | 'falling' | 'flat';
2001
+ interface SparklinePoint {
2002
+ readonly x: number;
2003
+ readonly y: number;
2004
+ }
2005
+ interface SparklineGeometry {
2006
+ /** The finite readings, in order — what was actually plotted. */
2007
+ readonly readings: readonly number[];
2008
+ /** Every plotted point, in order. Positions are on the SAMPLE axis, so a
2009
+ * missing reading leaves its width behind rather than closing up. */
2010
+ readonly points: readonly SparklinePoint[];
2011
+ /** The points split into runs of CONSECUTIVE samples. One run is one stroke:
2012
+ * a line drawn across a missing reading states a movement nobody measured. */
2013
+ readonly segments: readonly (readonly SparklinePoint[])[];
2014
+ /** Samples that carried no usable reading — a `null`, a `NaN`, an infinity.
2015
+ * Counted rather than discarded, because the accessible name has to state
2016
+ * them: a shorter series announced as a complete one is the silent loss. */
2017
+ readonly gaps: number;
2018
+ readonly min: number;
2019
+ readonly max: number;
2020
+ readonly first: number;
2021
+ readonly last: number;
2022
+ readonly direction: SparklineDirection;
2023
+ }
2024
+ interface SparklineGeometryOptions {
2025
+ width?: number;
2026
+ height?: number;
2027
+ /** Keeps the stroke and the end dot inside the viewBox instead of clipping
2028
+ * them at the extremes, where the interesting readings always are. */
2029
+ inset?: number;
2030
+ }
2031
+ declare const DEFAULT_SPARKLINE_WIDTH = 96;
2032
+ declare const DEFAULT_SPARKLINE_HEIGHT = 24;
2033
+ /** Only a name, never a metric: it exists so the accessible label is never
2034
+ * empty. Every caller in this package passes the metric's own title. */
2035
+ declare const DEFAULT_SPARKLINE_LABEL = "Trend";
2036
+ declare const DEFAULT_SPARKLINE_EMPTY_LABEL = "No history yet";
2037
+ /** Nothing was measurable, which is not the same as nothing was measured yet —
2038
+ * and "No history yet" over a series that arrived full of `NaN` reads as the
2039
+ * metric being new when the producer is broken. */
2040
+ declare const DEFAULT_SPARKLINE_UNAVAILABLE_LABEL = "No readings available";
2041
+ /** The package's default number rendering, pinned to `en-US` so a card and its
2042
+ * series read the same on every host — a series formatted by the server's
2043
+ * locale and a value formatted by the browser's is a defect nobody sees until
2044
+ * the decimal separators disagree. */
2045
+ declare function formatSparklineValue(value: number): string;
2046
+ /**
2047
+ * The readings that can be plotted.
2048
+ *
2049
+ * A `null` from a gap in a series, or a `NaN` from a division a producer did
2050
+ * not guard, is not plotted rather than coerced to `0`: plotting a missing
2051
+ * reading at the baseline draws a cliff that never happened.
2052
+ *
2053
+ * This returns the readings ALONE, so it cannot tell a caller how many are
2054
+ * missing. That is what {@link SparklineGeometry.gaps} is for, and what the
2055
+ * accessible name reports — dropping a sample and then announcing the shorter
2056
+ * count as the whole series is the defect, not the filter.
2057
+ */
2058
+ declare function sparklineReadings(values: readonly number[]): number[];
2059
+ /**
2060
+ * Plots the series into the viewBox.
2061
+ *
2062
+ * Pure and exported so the cases that produce a broken chart — nothing, one
2063
+ * reading, a flat series, negatives — are unit-testable without a DOM.
2064
+ */
2065
+ declare function sparklineGeometry(values: readonly number[], { width, height, inset }?: SparklineGeometryOptions): SparklineGeometry;
2066
+ /** `"2,14 48,3 94,21"` — the `points` attribute of the polyline. */
2067
+ declare function sparklinePointsAttribute(points: readonly SparklinePoint[]): string;
2068
+ interface SparklineLabelOptions {
2069
+ label?: string;
2070
+ format?: (value: number) => string;
2071
+ }
2072
+ /**
2073
+ * The accessible name: metric, how many readings, how many are missing, the
2074
+ * range, and the direction.
2075
+ *
2076
+ * All of it is load-bearing. The range without the direction describes a shape
2077
+ * that could have been walked in either order; the direction without the range
2078
+ * says "rising" about a metric that moved by a rounding error; and the count
2079
+ * without the gaps is the number of readings that SURVIVED announced as the
2080
+ * number that were taken — the shape a reader cannot see is exactly the one
2081
+ * this sentence exists to carry.
2082
+ */
2083
+ declare function sparklineLabel(values: readonly number[], { label, format }?: SparklineLabelOptions): string;
2084
+ interface SparklineProps {
2085
+ values: readonly number[];
2086
+ /** Names the metric in the accessible label. */
2087
+ label?: string;
2088
+ /** Renders a reading in that label; defaults to the package number format. */
2089
+ format?: (value: number) => string;
2090
+ width?: number;
2091
+ height?: number;
2092
+ /** Shown instead of a line when the metric has no history yet. */
2093
+ emptyLabel?: string;
2094
+ /** Shown instead of a line when every sample arrived unreadable — a different
2095
+ * state from "no history yet", and one the reader has to be able to tell
2096
+ * apart, because one is a new metric and the other is a broken producer. */
2097
+ unavailableLabel?: string;
2098
+ className?: string;
2099
+ }
2100
+ /** The series glyph. Strokes in `currentColor`, so tone is the caller's. */
2101
+ declare function Sparkline({ values, label, format, width, height, emptyLabel, unavailableLabel, className, }: SparklineProps): ReactElement;
2102
+
2103
+ /**
2104
+ * `InsightCard` + `InsightDeck` — the number that moved, and the paged deck of
2105
+ * them.
2106
+ *
2107
+ * Every product on this shell computes insights already: `/spend` knows today's
2108
+ * burn against yesterday's, `/missions` knows how many runs landed, the eval
2109
+ * lanes know a pass rate per release. All of it renders as a line of text, so
2110
+ * the reader does the comparison in their head and the series behind the number
2111
+ * never reaches the screen at all.
2112
+ *
2113
+ * Two rules this surface exists to hold:
2114
+ *
2115
+ * - **A delta needs a baseline.** `previous` absent means no delta is drawn —
2116
+ * not a green `+0%`, which is the specific fabrication a hand-rolled card
2117
+ * produces when it defaults its baseline to zero, and which reads as "we
2118
+ * measured, nothing changed" when the truth is "we have nothing to compare
2119
+ * against". {@link insightDelta} returns `null` rather than a zero.
2120
+ * - **Direction is not sentiment.** Spend going up and missions going up are
2121
+ * the same arrow and opposite news, so tone is a caller declaration
2122
+ * (`polarity`), and the default is neutral. A card that paints every rise
2123
+ * green teaches the reader to stop reading the label.
2124
+ *
2125
+ * The deck is built on `web-react/async` rather than a loading boolean, so it
2126
+ * inherits that module's invariant instead of restating it: `AsyncView` renders
2127
+ * `error` with its message and retry, and `empty` is reachable only from a load
2128
+ * that resolved — a failed fetch can never paint "No insights yet"
2129
+ * (`docs/async-state-module.md`).
2130
+ *
2131
+ * Motion: cards arrive with `.agent-arrive`, staggered by `--stagger-index`
2132
+ * from the deck, and a page TURN remounts them so the next page arrives as a
2133
+ * sequence instead of swapping text under cards that never moved. A REFRESH is
2134
+ * the opposite case and gets the opposite treatment — see the deck's own note.
2135
+ * Every piece of that is decoration, carries no `data-motion`, and collapses
2136
+ * under `prefers-reduced-motion` — the live label included.
2137
+ *
2138
+ * The live label does NOT opt out, and the reasoning is worth stating because
2139
+ * the opposite reads plausible. What tells the reader a figure is still being
2140
+ * computed is the WORD (`liveLabel`, "Updating"): it is rendered only while
2141
+ * `live`, and a settled card does not render it at all. The sweep through its
2142
+ * glyphs is emphasis on a signal that is already there, not the signal. So a
2143
+ * reader who asked for less motion still sees the word — static, in the
2144
+ * shimmer's resting gradient, still legible, and still disappearing the moment
2145
+ * the figure is final. Nothing here overrides a request the reader made.
2146
+ */
2147
+
2148
+ type InsightDirection = 'up' | 'down' | 'flat';
2149
+ /** Which way is good news for THIS metric. `neutral` is the default because it
2150
+ * is the only answer that is true for every metric. */
2151
+ type InsightPolarity = 'higher-is-better' | 'lower-is-better' | 'neutral';
2152
+ type InsightTone = 'positive' | 'negative' | 'neutral';
2153
+ interface InsightDelta {
2154
+ /** The baseline the move is measured against — rendered, so the delta is
2155
+ * never a number floating free of what produced it. */
2156
+ readonly previous: number;
2157
+ readonly absolute: number;
2158
+ /** `null` when the baseline is `0`: a share of nothing is undefined, and
2159
+ * "+∞%" or a silently-dropped percentage are both worse than the absolute. */
2160
+ readonly percent: number | null;
2161
+ readonly direction: InsightDirection;
2162
+ }
2163
+ /**
2164
+ * The move, or `null` when there is no honest one to state.
2165
+ *
2166
+ * `unknown` inputs on purpose: these arrive from a fetched payload, and the
2167
+ * cases that must not produce a delta — a missing baseline, a `null` from a
2168
+ * first-ever reading, a `NaN` from a producer's division — are exactly the ones
2169
+ * a narrower signature would let through as `0`.
2170
+ */
2171
+ declare function insightDelta(value: unknown, previous: unknown): InsightDelta | null;
2172
+ /** Maps a direction onto good/bad news, which only the caller knows. */
2173
+ declare function insightDeltaTone(direction: InsightDirection, polarity?: InsightPolarity): InsightTone;
2174
+ /**
2175
+ * The delta as words: direction, magnitude, and the baseline it is measured
2176
+ * against. Words rather than an arrow plus a bare number, because the arrow is
2177
+ * `aria-hidden` and a reader hearing "12%" learns nothing about which way.
2178
+ */
2179
+ declare function formatInsightDelta(delta: InsightDelta, format?: (value: number) => string): string;
2180
+ interface InsightAction {
2181
+ label: string;
2182
+ onClick: () => void;
2183
+ }
2184
+ interface InsightCardProps {
2185
+ /** What was measured, in the reader's words ("Spend today"). */
2186
+ title: string;
2187
+ /** The number that moved. A `string` renders verbatim — a total the caller
2188
+ * already formatted with its own currency — and takes no delta, because
2189
+ * there is nothing to subtract. A non-finite number is not a measurement and
2190
+ * renders as {@link INSIGHT_UNAVAILABLE_GLYPH}, never as "NaN" or "∞". */
2191
+ value: number | string;
2192
+ /** "USD", "runs", "%" — the unit the number is in, beside it rather than
2193
+ * glued into it, so the figure stays scannable. */
2194
+ unit?: string;
2195
+ /** The baseline. Absent ⇒ the card renders the value and no delta. */
2196
+ previous?: number;
2197
+ polarity?: InsightPolarity;
2198
+ /** One number format for the value, the delta and the series, so the three
2199
+ * cannot disagree about decimals on the same card. */
2200
+ format?: (value: number) => string;
2201
+ series?: readonly number[];
2202
+ /** Names the series in its accessible label; defaults to the card's title. */
2203
+ seriesLabel?: string;
2204
+ /** One line of context under the number — what the window is, what is
2205
+ * excluded. Not a restatement of the title. */
2206
+ description?: string;
2207
+ /** The next action for this insight. An element renders as supplied (a link,
2208
+ * a dialog trigger); the object form renders the standard button. */
2209
+ action?: InsightAction | ReactElement;
2210
+ /** The number is still being computed. The label's PRESENCE is the signal, so
2211
+ * it reads the same with motion collapsed — see the module note. */
2212
+ live?: boolean;
2213
+ liveLabel?: string;
2214
+ className?: string;
2215
+ style?: CSSProperties;
2216
+ }
2217
+ declare function InsightCard({ title, value, unit, previous, polarity, format, series, seriesLabel, description, action, live, liveLabel, className, style, }: InsightCardProps): ReactElement;
2218
+ interface Insight extends InsightCardProps {
2219
+ /** Stable across refreshes: it keys the card. Paired with the deck holding
2220
+ * the last loaded page across a reload, a stable id is what lets a settled
2221
+ * card keep its own DOM node — and therefore not replay its arrival — when
2222
+ * a poll returns the same insight. */
2223
+ readonly id: string;
2224
+ }
2225
+ declare const DEFAULT_INSIGHT_PAGE_SIZE = 3;
2226
+ /**
2227
+ * The page size — ONE definition, read by the count and by the slice.
2228
+ *
2229
+ * Two definitions is how a deck hides an insight with no error at all: a count
2230
+ * that divides by the raw `2.5` claims two pages of a five-card deck, a slice
2231
+ * that floors it puts two cards on each, and the fifth card is on no page the
2232
+ * reader can reach. Nothing renders wrong; a card is simply gone.
2233
+ *
2234
+ * A page size is a count of cards, so a fraction, a zero and a negative are not
2235
+ * smaller decks — they are caller mistakes, and this normalises them back to the
2236
+ * default and says so once per offending value. Normalised rather than thrown
2237
+ * because the value is often computed from a measured viewport, where the first
2238
+ * paint legitimately produces a `0`: a deck that pages in threes is a far
2239
+ * smaller failure than a dashboard that throws during render.
2240
+ */
2241
+ declare function insightPageSize(pageSize?: number): number;
2242
+ /** Always at least one page, so "Page 1 of 0" cannot be rendered. */
2243
+ declare function insightPageCount(total: number, pageSize?: number): number;
2244
+ /** The items on `page`, with the page clamped into range — a deck whose list
2245
+ * shrank under the reader shows the last page that exists, never a blank one. */
2246
+ declare function insightPageSlice<T>(items: readonly T[], page: number, pageSize?: number): readonly T[];
2247
+ interface InsightDeckProps {
2248
+ /** The same five-state contract every other screen fetches through. */
2249
+ state: AsyncResourceState<readonly Insight[]>;
2250
+ /** Required by `AsyncView`: an empty deck must say what is missing and what
2251
+ * to do about it. */
2252
+ empty: AsyncEmptySpec | ReactElement;
2253
+ /** Names the region for assistive tech and titles nothing visually — the
2254
+ * cards carry their own headings. */
2255
+ label?: string;
2256
+ pageSize?: number;
2257
+ loadingLabel?: string;
2258
+ retryLabel?: string;
2259
+ className?: string;
2260
+ /**
2261
+ * The page the reader is ON, whatever moved them there.
2262
+ *
2263
+ * That includes the render-time clamp: a list that shrinks under a reader
2264
+ * standing on page 3 leaves them on the last page that exists, and a parent
2265
+ * persisting this to a URL or to storage would otherwise keep writing a page
2266
+ * number nothing can reach. Reported once per effective page, never twice for
2267
+ * the same one.
2268
+ */
2269
+ onPageChange?: (page: number) => void;
2270
+ }
2271
+ /**
2272
+ * The paged deck.
2273
+ *
2274
+ * `AsyncView` owns the non-`ready` branches, which is what makes the invariant
2275
+ * structural here: the cards are rendered from one branch of that component,
2276
+ * and no branch of this one could paint the empty copy over a failure.
2277
+ *
2278
+ * **A REFRESH DOES NOT REPLACE WHAT IS ON SCREEN.** `useAsyncResource` re-enters
2279
+ * `loading` with no value held on every reload, and handing that straight to
2280
+ * `AsyncView` swaps the ready subtree for the busy block — which destroys the
2281
+ * DOM the reader is standing in. Measured, on a real reload: `document.
2282
+ * activeElement` fell to `document.body`, so a keyboard reader mid-page lost
2283
+ * their place on every automatic poll; and every settled card was a NEW node, so
2284
+ * `.agent-arrive` replayed across the whole visible page — the exact flash this
2285
+ * surface's motion rules exist to prevent. Holding the page NUMBER above the
2286
+ * boundary fixed the counter and none of that, because the subtree under it was
2287
+ * still being torn down.
2288
+ *
2289
+ * So the deck holds the last insights it rendered and keeps handing them to the
2290
+ * SAME `AsyncView` branch while a reload is in flight: same element, same
2291
+ * position, same keys — React reuses the nodes, focus stays where the reader put
2292
+ * it, and nothing re-animates. `aria-busy` on the region is the signal that a
2293
+ * load is in flight; a per-card one is `live` on the card.
2294
+ *
2295
+ * The bridge is only ever over a WAIT. `error` and `empty` are answers about the
2296
+ * resource, so they drop what was held and render their own branch — a failed
2297
+ * fetch still cannot paint stale numbers, and the async module's invariant is
2298
+ * untouched.
2299
+ *
2300
+ * It bridges one resource, not one component: if the SUBJECT changes (a
2301
+ * different workspace, a different window), give the deck a `key` so it remounts
2302
+ * rather than showing the previous subject's numbers while the new ones load.
2303
+ */
2304
+ declare function InsightDeck({ state, empty, label, pageSize, loadingLabel, retryLabel, className, onPageChange, }: InsightDeckProps): ReactElement;
2305
+
1952
2306
  /** Describe metrics related to a chat message including model, token counts, and duration */
1953
2307
  interface ChatMessageMetrics {
1954
2308
  modelUsed?: string;
@@ -2158,4 +2512,4 @@ declare function useThinkingSeconds(active: boolean): number;
2158
2512
  */
2159
2513
  declare function ChatMessages({ messages, messageSize, chrome, models, renderMarkdown, renderExtras, durableCards, userLabel, agentLabel, loading, approval, onToolCallClick, toolRenderers, error, onRetry, renderEmpty, emptyState, header, resolveAttachmentUrl, workProductCards, }: ChatMessagesProps): react.JSX.Element;
2160
2514
 
2161
- export { type ActivityTone, type AgentActivityPage, AgentActivityPanel, type AgentActivityPanelProps, type AgentActivityRecord, type AttachmentFileResult, CatalogModel, ChatAttachmentInput, ChatAttachmentKind, ChatAttachmentPart, ChatComposer, type ChatComposerProps, type ChatEmptyDoor, ChatEmptyState, type ChatEmptyStateProps, ChatInteraction, ChatInteractionField, type ChatInteractionRestoreMode, ChatInteractionStatus, ChatMentionPart, type ChatMessageMetrics, type ChatMessageSegment, ChatMessages, type ChatMessagesProps, ChatSelectField, type ChatStreamCallbacks, type ChatStreamToolCall, type ChatStreamToolResult, type ChatToolCallInfo, type ChatUiMessage, type ComposerFile, type ComposerFilePart, type ComposerSendFailure, type ComposerSendHandler, type ComposerSendOutcome, type ComposerSendPartsHandler, type ComposerSendRejected, type ComposerSendResult, type ConsumeChatStreamResult, DEFAULT_PROVENANCE_CONFIDENCE_POLICY, type DurableChatCard, DurableChatCards, type DurableChatCardsProps, type DurableInteractionAnswerSubmitterOptions, DurablePlanCard, type DurablePlanCardProps, DurablePlanClientError, type DurablePlanCurrentInput, type DurablePlanDecision, type DurablePlanDecisionClient, type DurablePlanDecisionClientOptions, type DurablePlanDecisionInput, type DurablePlanDecisionResult, type DurablePlanFollowUpReceipt, EMPTY_RECORD_GRID_OVERLAY, EvidenceLineageTable, type EvidenceLineageTableProps, ExceptionList, type ExceptionListProps, type FetchSessionPage, type FieldValues, FlowWaterfall, type FlowWaterfallProps, HarnessGlyph, type HarnessGlyphProps, INTERACTION_SUBMIT_TIMEOUT_MESSAGE, INTERACTION_SUBMIT_TIMEOUT_MS, InteractionActionButton, type InteractionAnswerSubmission, type InteractionAnswerSubmitterOptions, InteractionAnswers, type InteractionAttemptStore, InteractionBadge, type InteractionBadgeVariant, InteractionCancelData, InteractionPlanCard, type InteractionPlanCardProps, InteractionQuestionCard, type InteractionQuestionCardProps, InteractionRequestWire, type InteractionSubmitResult, type LinkLikeComponent, type LinkLikeProps, type MentionTextSegment, MessageAttachments, type MessageAttachmentsProps, MissionActivityLane, type MissionActivityLaneProps, PROVENANCE_BASES, type ProposalApprovalHandlers, type ProvenanceBasis, type ProvenanceBasisMeta, type ProvenanceConfidencePolicy, type ProvenanceGap, type ProvenanceGapKind, ProvenanceLegend, type ProvenanceLegendProps, type ProvenanceRecord, type ProvenanceSource, type ProvenanceSourceStatus, ProvenanceStamp, type ProvenanceStampProps, type ProvenanceStanding, type ProvenanceStandingMeta, ProvenanceValue, type ProvenanceValueProps, ProviderLogo, type ProviderLogoProps, QualityCheckList, type QualityCheckListProps, QuestionOptionList, type QuestionOptionListProps, RecordGrid, type RecordGridBooleanColumn, type RecordGridCellChange, type RecordGridCellOutcome, type RecordGridCellSource, type RecordGridColumn, type RecordGridColumnBase, type RecordGridCreateOutcome, type RecordGridCurrencyColumn, type RecordGridDateColumn, type RecordGridDependency, type RecordGridNumberColumn, type RecordGridOverlay, type RecordGridProps, type RecordGridRow, type RecordGridRowOutcome, type RecordGridSelectColumn, type RecordGridSelectOption, type RecordGridSourceBasis, type RecordGridTextColumn, type RecordGridValue, type RecordGridWriteOutcome, type RestoreChatInteractionsOptions, ReviewQueueItem, type ReviewQueuePage, ReviewQueuePanel, type ReviewQueuePanelProps, ReviewQueueState, RunDrillIn, type RunDrillInProps, SeatPaywall, type SeatPaywallProps, type SessionActionLabels, type SessionActions, type SessionActionsOptions, type SessionBulkAction, SessionHistoryPanel, type SessionHistoryPanelProps, type SessionHistoryState, type SessionPageQuery, type SmoothRevealOptions, type StreamChatOptions, type SubmitInteractionAnswer, type ToolDetailRenderers, type ToolRunRecord, type ToolRunStep, type UseChatInteractionsOptions, type UseChatInteractionsResult, type UseComposerAttachmentsOptions, type UseComposerAttachmentsResult, type UseDurablePlanFlowOptions, type UseDurablePlanFlowResult, type UseInfiniteScrollOptions, type UseSessionHistoryOptions, type WaterfallRow, WorkProductCard, type WorkProductCardProps, __resetAttachmentFileCacheForTests, activityTone, buildAnswerData, cancelChatInteraction, chatToolCallPart, consumeChatStream, createDurableInteractionAnswerSubmitter, createDurablePlanDecisionClient, createInteractionAnswerSubmitter, createMemoryInteractionAttemptStore, createSessionInteractionAttemptStore, describeProvenance, describeProvenanceSourceStatus, dispatchChatStreamLine, durableChatCardsFromParts, fieldAnswer, fieldValuesFromAnswers, formatActivityCost, formatActivityDuration, formatModelCost, formatRecordGridValue, formatSessionTimestamp, formatTokensPerSecond, hasSecretField, hydrateChatInteractions, interactionStatusLabels, interactionSubmissionSignature, interactionTerminalNotes, isLateAnswerableStatus, isRecordGridCellApplicable, lateAnswerMessage, loadAttachmentFile, loadingProvenanceSources, mergeActivityPages, mergeReviewQueuePages, nextRevealCount, parseRecordGridInput, pendingApprovalOf, projectRecordGridRows, provenanceBasisMeta, provenanceGaps, provenanceNextMove, provenanceStandingMeta, provenanceTriggerLabel, pruneRecordGridOverlay, readRecordGridCell, recordGridEditorText, recordGridFail, recordGridOk, recordGridRowLabel, resolveChatInteraction, resolveProvenanceStanding, responseErrorMessage, restoreChatInteractions, reviewQueueStateLabel, rollUpProvenanceStanding, sameRecordGridValue, segmentMentionContent, settleInteractionSubmit, standingFromConfidence, streamChatTurn, sumRecordGridColumn, terminalizePendingChatInteractions, triggerAttachmentDownload, upsertChatInteraction, useChatInteractions, useComposerAttachments, useDurablePlanFlow, useInfiniteScroll, useSessionActions, useSessionHistory, useSmoothText, useThinkingSeconds, validateRecordGridCell, validateRecordGridRow, waterfallLayout, weakerProvenanceStanding, withRecordGridCreated, withRecordGridRemoved, withRecordGridServerRow, withRecordGridUpdate, withoutRecordGridCreated, withoutRecordGridRemoved, withoutRecordGridUpdate, workProductPartsFromMessageParts, workProductStatusLabel };
2515
+ export { type ActivityTone, type AgentActivityPage, AgentActivityPanel, type AgentActivityPanelProps, type AgentActivityRecord, type AttachmentFileResult, CatalogModel, ChatAttachmentInput, ChatAttachmentKind, ChatAttachmentPart, ChatComposer, type ChatComposerProps, type ChatEmptyDoor, ChatEmptyState, type ChatEmptyStateProps, ChatInteraction, ChatInteractionField, type ChatInteractionRestoreMode, ChatInteractionStatus, ChatMentionPart, type ChatMessageMetrics, type ChatMessageSegment, ChatMessages, type ChatMessagesProps, ChatSelectField, type ChatStreamCallbacks, type ChatStreamToolCall, type ChatStreamToolResult, type ChatToolCallInfo, type ChatUiMessage, type ComposerFile, type ComposerFilePart, type ComposerSendFailure, type ComposerSendHandler, type ComposerSendOutcome, type ComposerSendPartsHandler, type ComposerSendRejected, type ComposerSendResult, type ConsumeChatStreamResult, DEFAULT_INSIGHT_PAGE_SIZE, DEFAULT_PROVENANCE_CONFIDENCE_POLICY, DEFAULT_SPARKLINE_EMPTY_LABEL, DEFAULT_SPARKLINE_HEIGHT, DEFAULT_SPARKLINE_LABEL, DEFAULT_SPARKLINE_UNAVAILABLE_LABEL, DEFAULT_SPARKLINE_WIDTH, type DurableChatCard, DurableChatCards, type DurableChatCardsProps, type DurableInteractionAnswerSubmitterOptions, DurablePlanCard, type DurablePlanCardProps, DurablePlanClientError, type DurablePlanCurrentInput, type DurablePlanDecision, type DurablePlanDecisionClient, type DurablePlanDecisionClientOptions, type DurablePlanDecisionInput, type DurablePlanDecisionResult, type DurablePlanFollowUpReceipt, EMPTY_RECORD_GRID_OVERLAY, EvidenceLineageTable, type EvidenceLineageTableProps, ExceptionList, type ExceptionListProps, type FetchSessionPage, type FieldValues, FlowWaterfall, type FlowWaterfallProps, HarnessGlyph, type HarnessGlyphProps, INTERACTION_SUBMIT_TIMEOUT_MESSAGE, INTERACTION_SUBMIT_TIMEOUT_MS, type Insight, type InsightAction, InsightCard, type InsightCardProps, InsightDeck, type InsightDeckProps, type InsightDelta, type InsightDirection, type InsightPolarity, type InsightTone, InteractionActionButton, type InteractionAnswerSubmission, type InteractionAnswerSubmitterOptions, InteractionAnswers, type InteractionAttemptStore, InteractionBadge, type InteractionBadgeVariant, InteractionCancelData, InteractionPlanCard, type InteractionPlanCardProps, InteractionQuestionCard, type InteractionQuestionCardProps, InteractionRequestWire, type InteractionSubmitResult, type LinkLikeComponent, type LinkLikeProps, type MentionTextSegment, MessageAttachments, type MessageAttachmentsProps, MissionActivityLane, type MissionActivityLaneProps, PROVENANCE_BASES, type ProposalApprovalHandlers, type ProvenanceBasis, type ProvenanceBasisMeta, type ProvenanceConfidencePolicy, type ProvenanceGap, type ProvenanceGapKind, ProvenanceLegend, type ProvenanceLegendProps, type ProvenanceRecord, type ProvenanceSource, type ProvenanceSourceStatus, ProvenanceStamp, type ProvenanceStampProps, type ProvenanceStanding, type ProvenanceStandingMeta, ProvenanceValue, type ProvenanceValueProps, ProviderLogo, type ProviderLogoProps, QualityCheckList, type QualityCheckListProps, QuestionOptionList, type QuestionOptionListProps, RecordGrid, type RecordGridBooleanColumn, type RecordGridCellChange, type RecordGridCellOutcome, type RecordGridCellSource, type RecordGridColumn, type RecordGridColumnBase, type RecordGridCreateOutcome, type RecordGridCurrencyColumn, type RecordGridDateColumn, type RecordGridDependency, type RecordGridNumberColumn, type RecordGridOverlay, type RecordGridProps, type RecordGridRow, type RecordGridRowOutcome, type RecordGridSelectColumn, type RecordGridSelectOption, type RecordGridSourceBasis, type RecordGridTextColumn, type RecordGridValue, type RecordGridWriteOutcome, type RestoreChatInteractionsOptions, ReviewQueueItem, type ReviewQueuePage, ReviewQueuePanel, type ReviewQueuePanelProps, ReviewQueueState, RunDrillIn, type RunDrillInProps, SeatPaywall, type SeatPaywallProps, type SessionActionLabels, type SessionActions, type SessionActionsOptions, type SessionBulkAction, SessionHistoryPanel, type SessionHistoryPanelProps, type SessionHistoryState, type SessionPageQuery, type SmoothRevealOptions, Sparkline, type SparklineDirection, type SparklineGeometry, type SparklineGeometryOptions, type SparklineLabelOptions, type SparklinePoint, type SparklineProps, type StreamChatOptions, type SubmitInteractionAnswer, type ToolDetailRenderers, type ToolRunRecord, type ToolRunStep, type UseChatInteractionsOptions, type UseChatInteractionsResult, type UseComposerAttachmentsOptions, type UseComposerAttachmentsResult, type UseDurablePlanFlowOptions, type UseDurablePlanFlowResult, type UseInfiniteScrollOptions, type UseSessionHistoryOptions, type WaterfallRow, WorkProductCard, type WorkProductCardProps, __resetAttachmentFileCacheForTests, activityTone, buildAnswerData, cancelChatInteraction, chatToolCallPart, consumeChatStream, createDurableInteractionAnswerSubmitter, createDurablePlanDecisionClient, createInteractionAnswerSubmitter, createMemoryInteractionAttemptStore, createSessionInteractionAttemptStore, describeProvenance, describeProvenanceSourceStatus, dispatchChatStreamLine, durableChatCardsFromParts, fieldAnswer, fieldValuesFromAnswers, formatActivityCost, formatActivityDuration, formatInsightDelta, formatModelCost, formatRecordGridValue, formatSessionTimestamp, formatSparklineValue, formatTokensPerSecond, hasSecretField, hydrateChatInteractions, insightDelta, insightDeltaTone, insightPageCount, insightPageSize, insightPageSlice, interactionStatusLabels, interactionSubmissionSignature, interactionTerminalNotes, isLateAnswerableStatus, isRecordGridCellApplicable, lateAnswerMessage, loadAttachmentFile, loadingProvenanceSources, mergeActivityPages, mergeReviewQueuePages, nextRevealCount, parseRecordGridInput, pendingApprovalOf, projectRecordGridRows, provenanceBasisMeta, provenanceGaps, provenanceNextMove, provenanceStandingMeta, provenanceTriggerLabel, pruneRecordGridOverlay, readRecordGridCell, recordGridEditorText, recordGridFail, recordGridOk, recordGridRowLabel, resolveChatInteraction, resolveProvenanceStanding, responseErrorMessage, restoreChatInteractions, reviewQueueStateLabel, rollUpProvenanceStanding, sameRecordGridValue, segmentMentionContent, settleInteractionSubmit, sparklineGeometry, sparklineLabel, sparklinePointsAttribute, sparklineReadings, standingFromConfidence, streamChatTurn, sumRecordGridColumn, terminalizePendingChatInteractions, triggerAttachmentDownload, upsertChatInteraction, useChatInteractions, useComposerAttachments, useDurablePlanFlow, useInfiniteScroll, useSessionActions, useSessionHistory, useSmoothText, useThinkingSeconds, validateRecordGridCell, validateRecordGridRow, waterfallLayout, weakerProvenanceStanding, withRecordGridCreated, withRecordGridRemoved, withRecordGridServerRow, withRecordGridUpdate, withoutRecordGridCreated, withoutRecordGridRemoved, withoutRecordGridUpdate, workProductPartsFromMessageParts, workProductStatusLabel };
@@ -3,9 +3,15 @@ import {
3
3
  ChatComposer,
4
4
  ChatEmptyState,
5
5
  ChatMessages,
6
+ DEFAULT_INSIGHT_PAGE_SIZE,
6
7
  DEFAULT_MENTION_EMPTY_TEXT,
7
8
  DEFAULT_MENTION_LIMIT,
8
9
  DEFAULT_PROVENANCE_CONFIDENCE_POLICY,
10
+ DEFAULT_SPARKLINE_EMPTY_LABEL,
11
+ DEFAULT_SPARKLINE_HEIGHT,
12
+ DEFAULT_SPARKLINE_LABEL,
13
+ DEFAULT_SPARKLINE_UNAVAILABLE_LABEL,
14
+ DEFAULT_SPARKLINE_WIDTH,
9
15
  DurableChatCards,
10
16
  DurablePlanCard,
11
17
  DurablePlanClientError,
@@ -14,6 +20,8 @@ import {
14
20
  INDEX_REFRESH_AFTER_MS,
15
21
  INTERACTION_SUBMIT_TIMEOUT_MESSAGE,
16
22
  INTERACTION_SUBMIT_TIMEOUT_MS,
23
+ InsightCard,
24
+ InsightDeck,
17
25
  InteractionActionButton,
18
26
  InteractionBadge,
19
27
  InteractionPlanCard,
@@ -28,6 +36,7 @@ import {
28
36
  RunDrillIn,
29
37
  SeatPaywall,
30
38
  SessionHistoryPanel,
39
+ Sparkline,
31
40
  __resetAttachmentFileCacheForTests,
32
41
  activityTone,
33
42
  buildAnswerData,
@@ -47,12 +56,19 @@ import {
47
56
  fieldValuesFromAnswers,
48
57
  formatActivityCost,
49
58
  formatActivityDuration,
59
+ formatInsightDelta,
50
60
  formatModelCost,
51
61
  formatRecordGridValue,
52
62
  formatSessionTimestamp,
63
+ formatSparklineValue,
53
64
  formatTokensPerSecond,
54
65
  hasSecretField,
55
66
  hydrateChatInteractions,
67
+ insightDelta,
68
+ insightDeltaTone,
69
+ insightPageCount,
70
+ insightPageSize,
71
+ insightPageSlice,
56
72
  interactionStatusLabels,
57
73
  interactionSubmissionSignature,
58
74
  interactionTerminalNotes,
@@ -86,6 +102,10 @@ import {
86
102
  sameRecordGridValue,
87
103
  segmentMentionContent,
88
104
  settleInteractionSubmit,
105
+ sparklineGeometry,
106
+ sparklineLabel,
107
+ sparklinePointsAttribute,
108
+ sparklineReadings,
89
109
  standingFromConfidence,
90
110
  streamChatTurn,
91
111
  sumRecordGridColumn,
@@ -111,7 +131,7 @@ import {
111
131
  withoutRecordGridCreated,
112
132
  withoutRecordGridRemoved,
113
133
  withoutRecordGridUpdate
114
- } from "../chunk-ZAKKG6WI.js";
134
+ } from "../chunk-7HY4LX7O.js";
115
135
  import "../chunk-FBVLEGEG.js";
116
136
  import {
117
137
  EvidenceLineageTable,
@@ -154,6 +174,7 @@ import {
154
174
  tabTerminalConnectionId,
155
175
  useSandboxTerminalConnection
156
176
  } from "../chunk-BATKJP3P.js";
177
+ import "../chunk-3UBAO3N5.js";
157
178
  import "../chunk-PC2WYTK7.js";
158
179
  import "../chunk-QY4BRKRJ.js";
159
180
  import {
@@ -218,9 +239,15 @@ export {
218
239
  ChatEmptyState,
219
240
  ChatMessages,
220
241
  DEFAULT_EFFORT_LEVELS,
242
+ DEFAULT_INSIGHT_PAGE_SIZE,
221
243
  DEFAULT_MENTION_EMPTY_TEXT,
222
244
  DEFAULT_MENTION_LIMIT,
223
245
  DEFAULT_PROVENANCE_CONFIDENCE_POLICY,
246
+ DEFAULT_SPARKLINE_EMPTY_LABEL,
247
+ DEFAULT_SPARKLINE_HEIGHT,
248
+ DEFAULT_SPARKLINE_LABEL,
249
+ DEFAULT_SPARKLINE_UNAVAILABLE_LABEL,
250
+ DEFAULT_SPARKLINE_WIDTH,
224
251
  DISPATCH_MAX_MEDIA_PARTS,
225
252
  DISPATCH_MAX_PARTS,
226
253
  DISPATCH_REQUEST_MAX_BYTES,
@@ -242,6 +269,8 @@ export {
242
269
  INTERACTION_RESOLVED_EVENT,
243
270
  INTERACTION_SUBMIT_TIMEOUT_MESSAGE,
244
271
  INTERACTION_SUBMIT_TIMEOUT_MS,
272
+ InsightCard,
273
+ InsightDeck,
245
274
  InteractionActionButton,
246
275
  InteractionBadge,
247
276
  InteractionPlanCard,
@@ -264,6 +293,7 @@ export {
264
293
  RunDrillIn,
265
294
  SeatPaywall,
266
295
  SessionHistoryPanel,
296
+ Sparkline,
267
297
  WorkProductCard,
268
298
  __resetAttachmentFileCacheForTests,
269
299
  activityTone,
@@ -301,12 +331,19 @@ export {
301
331
  fileMentionsToParts,
302
332
  formatActivityCost,
303
333
  formatActivityDuration,
334
+ formatInsightDelta,
304
335
  formatModelCost,
305
336
  formatRecordGridValue,
306
337
  formatSessionTimestamp,
338
+ formatSparklineValue,
307
339
  formatTokensPerSecond,
308
340
  hasSecretField,
309
341
  hydrateChatInteractions,
342
+ insightDelta,
343
+ insightDeltaTone,
344
+ insightPageCount,
345
+ insightPageSize,
346
+ insightPageSlice,
310
347
  interactionFromWireRequest,
311
348
  interactionPartKey,
312
349
  interactionStatusLabels,
@@ -362,6 +399,10 @@ export {
362
399
  sameRecordGridValue,
363
400
  segmentMentionContent,
364
401
  settleInteractionSubmit,
402
+ sparklineGeometry,
403
+ sparklineLabel,
404
+ sparklinePointsAttribute,
405
+ sparklineReadings,
365
406
  stampInteractionAnswers,
366
407
  standingFromConfidence,
367
408
  streamChatTurn,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-app",
3
- "version": "0.45.49",
3
+ "version": "0.45.50",
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": [