@mohamedatia/fly-design-system 2.10.0 → 2.11.0

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,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Type, InjectionToken, Signal, OnInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges, PipeTransform, signal, AfterViewInit, ElementRef } from '@angular/core';
3
- import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
2
+ import { Type, InjectionToken, Signal, WritableSignal, OnInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges, PipeTransform, signal, AfterViewInit, ElementRef } from '@angular/core';
4
3
  import { Observable } from 'rxjs';
4
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
5
  import { NavigationExtras } from '@angular/router';
6
6
  import * as _mohamedatia_fly_design_system from '@mohamedatia/fly-design-system';
7
7
 
@@ -123,6 +123,61 @@ declare const FLYOS_LAUNCH_EVENT = "flyos:launch";
123
123
  declare const FlyosPendingLaunchesGlobalKey: "__FLYOS_PENDING_LAUNCHES__";
124
124
  /** Type of the `globalThis[FlyosPendingLaunchesGlobalKey]` registry. */
125
125
  type FlyosPendingLaunches = Record<string, LaunchContext>;
126
+ /**
127
+ * Hint published by an app to drive the window-titlebar help-button deeplink.
128
+ *
129
+ * The shell renders the help button automatically on every non-chromeless
130
+ * window, defaulting the deeplink to `params.appId = win.appId`. An app
131
+ * customises that deeplink by injecting <see cref="WINDOW_HELP_HINT"/> and
132
+ * setting the writable signal — typically once on construct + again as the
133
+ * active route/page changes.
134
+ *
135
+ * - `appId` overrides `win.appId` (rare; reserved for embedded sub-apps
136
+ * whose help lives under a different seed-pack id).
137
+ * - `topic` seeds the help-center search query when the deeplink fires.
138
+ * Free-form short phrase (e.g. "calculated measures", "share dialog").
139
+ * Updated dynamically as the user navigates within the app.
140
+ */
141
+ interface WindowHelpHint {
142
+ /** Override for the help-center `appId` chip pre-selection. Optional. */
143
+ readonly appId?: string;
144
+ /** Free-form search-query seed for the help-center landing. */
145
+ readonly topic?: string | null;
146
+ }
147
+ /**
148
+ * Per-window injection token carrying the active <see cref="WindowHelpHint"/>
149
+ * as a writable signal. The shell creates one writable signal per window
150
+ * (alongside <see cref="LAUNCH_CONTEXT"/>); apps inject it and `.set(...)` to
151
+ * publish or update their hint. Setting `null` clears the hint — the chrome
152
+ * falls back to the implicit `win.appId` deeplink.
153
+ *
154
+ * **Federation note:** same caveat as <see cref="LAUNCH_CONTEXT"/> — Native
155
+ * Federation can split the InjectionToken across host/remote bundles, so
156
+ * federated remotes cannot rely on DI to publish hints. Use
157
+ * <see cref="FLY_WINDOW_HELP_HINT_EVENT"/> instead.
158
+ */
159
+ declare const WINDOW_HELP_HINT: InjectionToken<WritableSignal<WindowHelpHint | null>>;
160
+ /**
161
+ * Federation-safe window CustomEvent name for publishing a help hint from a
162
+ * federated remote that cannot see <see cref="WINDOW_HELP_HINT"/> via DI.
163
+ *
164
+ * Detail: <see cref="FlyWindowHelpHintEventDetail"/>. The shell listens at
165
+ * `window` scope and mirrors the payload into the matching per-window signal
166
+ * (keyed by `windowId` from <see cref="WINDOW_DATA"/>). Pairs with the
167
+ * <see cref="FLYOS_LAUNCH_EVENT"/> pattern.
168
+ */
169
+ declare const FLY_WINDOW_HELP_HINT_EVENT = "flyos:window-help-hint";
170
+ /**
171
+ * Detail payload of the <see cref="FLY_WINDOW_HELP_HINT_EVENT"/> CustomEvent.
172
+ * Federated remotes dispatch one event per hint change; the shell filters
173
+ * by `windowId` (each window owns its own hint).
174
+ */
175
+ interface FlyWindowHelpHintEventDetail {
176
+ /** Window id; remotes obtain via WINDOW_DATA at mount. */
177
+ readonly windowId: string;
178
+ /** Pass `null` to clear; the chrome reverts to win.appId. */
179
+ readonly hint: WindowHelpHint | null;
180
+ }
126
181
 
127
182
  interface User {
128
183
  id: string;
@@ -1224,6 +1279,59 @@ declare class SourceAppResolver {
1224
1279
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SourceAppResolver>;
1225
1280
  }
1226
1281
 
1282
+ /**
1283
+ * Publishes a {@link WindowHelpHint} for the current window so the shell's
1284
+ * titlebar Help button deeplinks the help-center reader to the article most
1285
+ * relevant to where the user is.
1286
+ *
1287
+ * This is the **publisher twin** of the shell's `WindowHelpHintService`
1288
+ * (the listener). It exists in the design system so that **any app — and
1289
+ * especially a federated remote — publishes hints the same way**, without
1290
+ * hand-rolling the cross-bundle CustomEvent contract.
1291
+ *
1292
+ * **Why a `window` CustomEvent and not the `WINDOW_HELP_HINT` DI token?**
1293
+ * Native Federation can split an `InjectionToken` instance across the host and
1294
+ * remote bundles, so a remote that injects `WINDOW_HELP_HINT` may get a
1295
+ * different token than the one the shell provides. The string-keyed
1296
+ * {@link FLY_WINDOW_HELP_HINT_EVENT} crosses bundles reliably; the shell
1297
+ * mirrors it into the matching per-window hint signal. In-shell (OS-Core) apps
1298
+ * may still use the DI token directly, but this service works for them too.
1299
+ *
1300
+ * **Imperative by design.** The service holds no signals and runs no effect —
1301
+ * the *app* owns its reactivity (route + state → resolved hint) and pushes the
1302
+ * result via {@link setHint}. The design system owns only the wire format. A
1303
+ * hint set before {@link bindWindow} is buffered and emitted once the window id
1304
+ * arrives, so call order doesn't matter.
1305
+ *
1306
+ * Usage (typically from the remote root + its feature components):
1307
+ * ```ts
1308
+ * private help = inject(FlyWindowHelpService);
1309
+ * constructor() {
1310
+ * this.help.bindWindow(inject(WINDOW_DATA, { optional: true })?.id);
1311
+ * effect(() => this.help.setHint(this.resolvedHint())); // app-specific
1312
+ * }
1313
+ * ```
1314
+ */
1315
+ declare class FlyWindowHelpService {
1316
+ private windowId;
1317
+ private hint;
1318
+ /**
1319
+ * Bind (or clear) the host window id — typically once, from the app root,
1320
+ * with `WINDOW_DATA.id`. Re-emits the current hint for the (new) window.
1321
+ * Passing null/undefined (standalone, no shell) makes publishing a no-op.
1322
+ */
1323
+ bindWindow(windowId: string | null | undefined): void;
1324
+ /**
1325
+ * Set the active hint (or null to clear — the shell then reverts to the
1326
+ * window's own `appId`). Emits immediately when a window is bound; otherwise
1327
+ * the value is buffered and emitted on the next {@link bindWindow}.
1328
+ */
1329
+ setHint(hint: WindowHelpHint | null): void;
1330
+ private publish;
1331
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyWindowHelpService, never>;
1332
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyWindowHelpService>;
1333
+ }
1334
+
1227
1335
  /**
1228
1336
  * fly-remote-styles — Shell-layer CSS loader for Native Federation remotes.
1229
1337
  *
@@ -1826,8 +1934,25 @@ declare class FlyFileUploadComponent {
1826
1934
  */
1827
1935
  /** Frozen MIME used by `flyAgentDraggable` and the drop-zone reader. Never change without a DS major. */
1828
1936
  declare const AGENT_DRAG_MIME: "application/x-fly-agent-payload+json";
1829
- /** Frozen payload envelope version. Bump only with a published DS major. */
1830
- declare const AGENT_PAYLOAD_VERSION: 1;
1937
+ /**
1938
+ * Frozen payload envelope version.
1939
+ *
1940
+ * v1 — minimal drag payload: kind / appId / version / payload / plainTextFallback /
1941
+ * suggestedCommandIds. Still used by the drag/drop surface.
1942
+ *
1943
+ * v2 — bus envelope ({@link AgentMessageEnvelope}). Adds optional `userMessage`,
1944
+ * `systemContext`, `attachments`, `mcpScope` so a dispatcher can give the agent
1945
+ * rich context without polluting the user-visible message bubble. v2 is a
1946
+ * superset of v1 — every v1 payload is a valid v2 payload — so the version
1947
+ * number ratchets forward without breaking existing callers.
1948
+ */
1949
+ declare const AGENT_PAYLOAD_VERSION: 2;
1950
+ /**
1951
+ * Versions accepted by the validator. v1 payloads (the drag/drop surface) remain valid;
1952
+ * v2 adds the optional bus-envelope fields. Renderers narrow on `version` when they need
1953
+ * to.
1954
+ */
1955
+ declare const SUPPORTED_AGENT_PAYLOAD_VERSIONS: readonly number[];
1831
1956
  /**
1832
1957
  * Where a command surfaces. `'global'` = always offered. `{ appId }` = offered only when
1833
1958
  * the host's live `liveAppIds` set (passed to {@link AgentCommandRegistry.visible}) contains
@@ -1874,22 +1999,263 @@ interface AgentCommandHandle {
1874
1999
  dispose(): void;
1875
2000
  }
1876
2001
  /**
1877
- * The wire envelope written to a `DataTransfer` by `flyAgentDraggable`. Renderers narrow
1878
- * on `kind`; mismatches fall back to `plainTextFallback`.
2002
+ * How a lookup fetches candidate entities. The picker calls the app's existing
2003
+ * authenticated REST search endpoint (the same one the agent's MCP `*_list_brief`
2004
+ * tool wraps) through the shell's HttpClient — gateway routing + auth
2005
+ * interceptor apply. We deliberately do NOT route typeahead through MCP (agent-
2006
+ * shaped, agent-auth) or the dataset executor (aggregation-shaped, no fulltext).
2007
+ *
2008
+ * Field mapping is declarative because entities differ: Circles trends/signals
2009
+ * expose `/brief` endpoints returning `{ id, title, status }`, while scenarios
2010
+ * have no brief variant and return full objects with `titleEn` / `titleAr`. The
2011
+ * `displayField` / `secondaryField` indirection absorbs that per-entity skew so
2012
+ * one picker component serves them all.
2013
+ */
2014
+ interface LookupSearch {
2015
+ /**
2016
+ * Relative REST path the picker GETs, e.g. `/api/circles/trends/brief`. Must
2017
+ * be a relative path (no scheme/host) — the SSRF guard at onboard time (when
2018
+ * the descriptor is manifest-backed) and the picker both reject absolute URLs.
2019
+ */
2020
+ readonly endpoint: string;
2021
+ /** Query param carrying the typed text, e.g. `search`. */
2022
+ readonly queryParam: string;
2023
+ /** Static query params merged into every request, e.g. `{ pageSize: '10' }`. */
2024
+ readonly extraParams?: Readonly<Record<string, string>>;
2025
+ /** Response-item field holding the entity id. Default `id`. */
2026
+ readonly idField?: string;
2027
+ /** Response-item field holding the display label, e.g. `title` / `titleEn`. */
2028
+ readonly displayField: string;
2029
+ /** Optional response-item field for the chip's secondary line (status, category). */
2030
+ readonly secondaryField?: string;
2031
+ /**
2032
+ * Dotted path to the results array within the response body when it is
2033
+ * wrapped, e.g. `items` for `{ items: [...], total }`. Omit when the response
2034
+ * body IS the array.
2035
+ */
2036
+ readonly resultsPath?: string;
2037
+ }
2038
+ /**
2039
+ * A lookupable entity offered by the `/lookup` palette. Registered by the owning
2040
+ * app (a federation remote self-registers at boot, mirroring {@link AgentCommand})
2041
+ * or, once manifest-backed, projected from the app's `lookups[]` manifest section.
2042
+ *
2043
+ * The descriptor is a shallow, business-logic-free descriptor: it tells the
2044
+ * picker WHAT to search, WHERE it is offered, and HOW to map the response — the
2045
+ * picker owns the typeahead UX, the shell owns the HTTP call.
2046
+ */
2047
+ interface LookupDescriptor {
2048
+ /**
2049
+ * Stable entity key, kebab/lower, e.g. `scenario`. Doubles as the `/lookup
2050
+ * <entity>` sub-token and the group key the picked ref is grouped under when
2051
+ * serialized for the agent.
2052
+ */
2053
+ readonly entity: string;
2054
+ /** i18n key for the entity's display name in the picker / palette. */
2055
+ readonly labelKey: string;
2056
+ /** Optional PrimeIcons class for the picker row + chip. */
2057
+ readonly icon?: string;
2058
+ /**
2059
+ * Route globs where this lookup is offered (matched against the shell's
2060
+ * router url), e.g. `['/scenarios/*', '/trends/*']`. Omit / empty = offered
2061
+ * everywhere the owning app is live.
2062
+ */
2063
+ readonly pages?: readonly string[];
2064
+ /** How to fetch + map candidates. */
2065
+ readonly search: LookupSearch;
2066
+ }
2067
+ /** What hosts pass to the lookup registry. Adds the scope to {@link LookupDescriptor}. */
2068
+ interface LookupRegistration extends LookupDescriptor {
2069
+ /** Same scoping semantics as {@link AgentCommandScope}. */
2070
+ readonly scope: AgentCommandScope;
2071
+ }
2072
+ /** One resolved row the picker returns once the user selects a candidate. */
2073
+ interface LookupResult {
2074
+ /** The entity kind (echoes {@link LookupDescriptor.entity}). */
2075
+ readonly entity: string;
2076
+ /** Selected entity id. */
2077
+ readonly id: string;
2078
+ /** Selected entity's display label. */
2079
+ readonly label: string;
2080
+ /** Optional secondary detail (status / category). */
2081
+ readonly secondary?: string;
2082
+ }
2083
+ /** Disposable handle returned by the lookup registry. Idempotent `dispose()`. */
2084
+ interface LookupHandle {
2085
+ dispose(): void;
2086
+ }
2087
+ /**
2088
+ * The wire envelope used by both the drag/drop surface and the imperative
2089
+ * {@link AgentActionBus}. Renderers narrow on `kind`; mismatches fall back to
2090
+ * `plainTextFallback`.
2091
+ *
2092
+ * The base fields (v1) describe **what** is being handed to the agent panel.
2093
+ * The v2 fields describe **how the agent should treat it** — `userMessage`
2094
+ * scopes the user-visible bubble, `systemContext` extends the system prompt,
2095
+ * `attachments` decorate the message with typed chips, and `mcpScope` hints
2096
+ * the agent toward a tool family. All v2 fields are optional so existing
2097
+ * v1 (drag/drop) payloads remain valid envelopes.
2098
+ *
2099
+ * Caps (see {@link AgentPayloadLimits}):
2100
+ * - JSON total 32 KB
2101
+ * - plainTextFallback 8 KB
2102
+ * - per-string field 4 KB
2103
+ * - userMessage 280 chars
2104
+ * - systemContext 32 entries × 4 KB per value, 8 KB total serialized
2105
+ * - attachments 4 entries, kind-dependent inner caps
2106
+ * - mcpScope.apis 5 prefixes × 128 chars
2107
+ *
2108
+ * The cap math is split per-section so an oversize attachment fails fast at the
2109
+ * attachment site instead of the whole envelope; field paths are dotted (see
2110
+ * {@link AgentPayloadValidationResult}).
1879
2111
  */
1880
2112
  interface AgentDragPayload<T = unknown> {
1881
2113
  /** Domain-stable kind, e.g. `circles.trend`. */
1882
2114
  readonly kind: string;
1883
2115
  /** Originating appId. Must match an entry in the host's app registry. */
1884
2116
  readonly appId: string;
1885
- /** Frozen format version. Mismatch -> renderer falls back to text. */
1886
- readonly version: typeof AGENT_PAYLOAD_VERSION;
2117
+ /** Frozen format version. Accepted: 1 or {@link AGENT_PAYLOAD_VERSION} (2). */
2118
+ readonly version: number;
1887
2119
  /** Domain object. Renderers narrow on `kind`. */
1888
2120
  readonly payload: T;
1889
2121
  /** Plain-text fallback written to the dataTransfer alongside the typed MIME. */
1890
2122
  readonly plainTextFallback: string;
1891
2123
  /** Optional command ids to highlight when this payload is dropped. */
1892
2124
  readonly suggestedCommandIds?: readonly string[];
2125
+ /**
2126
+ * Short, locale-resolved string the dispatcher wants shown in the user's
2127
+ * chat bubble. The agent panel uses it as the visible message text; when
2128
+ * absent, the panel falls back to a generic per-verb default
2129
+ * (e.g. "Tell me more about this"). Cap 280 chars — chip-sized, not essay.
2130
+ *
2131
+ * This is the ONLY field that should ever surface to the user verbatim.
2132
+ * Everything else (systemContext, attachment bodies, mcpScope) is wire-only.
2133
+ */
2134
+ readonly userMessage?: string;
2135
+ /**
2136
+ * Flat key→string facts the dispatcher wants injected into the agent's
2137
+ * system prompt for this turn. Keys are dot-namespaced (e.g.
2138
+ * `chart.name`, `chart.type`, `chart.dimension`) to keep the model's
2139
+ * mental schema flat and grep-friendly. Values are strings — booleans,
2140
+ * numbers, and dates must be pre-serialized at the call site so the
2141
+ * dispatcher owns the formatting (timezone, locale, number style).
2142
+ *
2143
+ * Cap: 32 entries, 4 KB per value, 8 KB total when serialized.
2144
+ *
2145
+ * NOT user-visible. The agent panel may transiently embed this as an
2146
+ * `[Internal context]` block in the wire content while the backend
2147
+ * learns to consume the dedicated field, but never renders it in the
2148
+ * user bubble.
2149
+ */
2150
+ readonly systemContext?: Readonly<Record<string, string>>;
2151
+ /**
2152
+ * Typed attachments rendered as a chip strip under the user's outgoing
2153
+ * message bubble. Each entry has a `kind` discriminator and a `label`
2154
+ * (locale-resolved by the dispatcher). v2 ships `json` + `text`;
2155
+ * `image` and `file` are reserved — their interfaces are stable so
2156
+ * future callers don't need a contract bump, but the panel may render
2157
+ * a generic chip for them until per-kind renderers land.
2158
+ *
2159
+ * Cap: 4 entries per envelope. Per-kind body caps:
2160
+ * - json: 16 KB serialized
2161
+ * - text: 8 KB UTF-8
2162
+ * - image / file: dataUrl ≤ 32 KB (small previews; large media stays in
2163
+ * the files-manager and is referenced by id)
2164
+ */
2165
+ readonly attachments?: readonly AgentEnvelopeAttachment[];
2166
+ /**
2167
+ * Advisory MCP scope. The agent service injects these prefixes into the
2168
+ * system prompt as a tool-selection hint ("prefer tools matching
2169
+ * `dashboard.reports.*` for this turn") — NOT a hard filter. The agent
2170
+ * remains free to pick any tool; this just biases the first guess so a
2171
+ * dashboard explain doesn't waste a tool-call probing Notes APIs first.
2172
+ *
2173
+ * Cap: 5 prefixes × 128 chars. Prefixes should match gateway-aggregated
2174
+ * OpenAPI tag/path roots so they line up with the names the MCP server
2175
+ * exposes — see `src/backend/gateway` Swagger aggregation + the dynamic
2176
+ * loader in `src/backend/mcp-server`.
2177
+ */
2178
+ readonly mcpScope?: AgentMcpScope;
2179
+ /**
2180
+ * Optional deep-link route the originating app can use to re-open the
2181
+ * source object. When set, payload chips (and any other renderer that
2182
+ * surfaces the envelope to the user) become clickable — clicking calls
2183
+ * `ShellLauncherService.launch({ appId, route: deepLinkRoute })` so the
2184
+ * target app opens / focuses and navigates to the originating object.
2185
+ *
2186
+ * Shape constraints (mirror `DeepLinkService.isValidRoute`):
2187
+ * - starts with `/`
2188
+ * - ≤ {@link AgentPayloadLimits.maxDeepLinkRouteBytes} bytes (default
2189
+ * 1024) — matches the route limit on the wider shell deep-link
2190
+ * contract so this field can be handed straight to the launcher.
2191
+ * - no `..` segments
2192
+ * - no `//` runs
2193
+ * - no scheme-like prefixes (`/javascript:`, `/data:`, `/http:`, `/https:`)
2194
+ *
2195
+ * The DS validator enforces only the byte cap — full route syntax
2196
+ * validation is owned by the shell side (`DeepLinkService`) because the
2197
+ * DS package is shell-agnostic and shouldn't grow a second copy of the
2198
+ * URL grammar. Apps building envelopes are expected to stamp routes that
2199
+ * match their own internal route schema (e.g. dashboard publishes
2200
+ * `/reports/{id}` and `/custom/{id}`); see `skills/cross-app-deep-linking.md`.
2201
+ *
2202
+ * Backwards-compat: absent on v1 payloads and on v2 payloads built
2203
+ * before this field was added. Persisted JSONB chips without the field
2204
+ * remain non-clickable; new chips light up automatically.
2205
+ */
2206
+ readonly deepLinkRoute?: string;
2207
+ }
2208
+ /**
2209
+ * Canonical name for the bus-side envelope. v2 callers should reference this
2210
+ * over {@link AgentDragPayload} for clarity — the underlying shape is
2211
+ * identical, but the name signals "this is going to the agent, not to a
2212
+ * drop zone." The alias is intentional: one wire shape, two semantic uses.
2213
+ */
2214
+ type AgentMessageEnvelope<T = unknown> = AgentDragPayload<T>;
2215
+ /**
2216
+ * Typed attachment discriminator for {@link AgentDragPayload.attachments}.
2217
+ *
2218
+ * - `json` — structured data the panel renders as a "code-ish" chip the
2219
+ * user can expand. Used for chart snapshots, query results, etc.
2220
+ * - `text` — short utterance / excerpt with optional MIME. Used when the
2221
+ * dispatcher wants the chip to preview a note paragraph, log line,
2222
+ * code snippet, etc.
2223
+ * - `image` / `file` — reserved. Stable interface; renderers added per
2224
+ * downstream caller (the panel may fall back to a generic icon-chip).
2225
+ *
2226
+ * Every kind carries `label` — that's what shows on the chip face and what
2227
+ * a11y trees announce.
2228
+ */
2229
+ type AgentEnvelopeAttachment = {
2230
+ readonly kind: 'json';
2231
+ readonly label: string;
2232
+ readonly json: unknown;
2233
+ } | {
2234
+ readonly kind: 'text';
2235
+ readonly label: string;
2236
+ readonly text: string;
2237
+ readonly mimeType?: string;
2238
+ } | {
2239
+ readonly kind: 'image';
2240
+ readonly label: string;
2241
+ /** `data:` URL — small previews only. Large media stays in files-manager. */
2242
+ readonly dataUrl: string;
2243
+ readonly mimeType: string;
2244
+ } | {
2245
+ readonly kind: 'file';
2246
+ readonly label: string;
2247
+ readonly dataUrl: string;
2248
+ readonly mimeType: string;
2249
+ readonly bytes: number;
2250
+ };
2251
+ /** Advisory tool-selection hint for {@link AgentDragPayload.mcpScope}. */
2252
+ interface AgentMcpScope {
2253
+ /**
2254
+ * Prefixes of gateway-aggregated OpenAPI tags / path roots — e.g.
2255
+ * `dashboard.reports`, `notes.documents`. The agent service treats these
2256
+ * as a soft preference, not a hard filter.
2257
+ */
2258
+ readonly apis: readonly string[];
1893
2259
  }
1894
2260
  /**
1895
2261
  * Where a chip is being rendered. `inline` = inside the input chip tray (removable);
@@ -1937,6 +2303,32 @@ interface AgentPayloadLimits {
1937
2303
  readonly maxPlainTextFallbackBytes: number;
1938
2304
  /** Cap on any single string field inside payload (recursive). Default 4 KB. */
1939
2305
  readonly maxStringFieldBytes: number;
2306
+ /** Cap on `userMessage` UTF-8 byte length. Default 280 chars (~1.1 KB). */
2307
+ readonly maxUserMessageBytes: number;
2308
+ /** Max entries in `systemContext`. Default 32. */
2309
+ readonly maxSystemContextEntries: number;
2310
+ /** Cap on any single systemContext value's UTF-8 byte length. Default 4 KB. */
2311
+ readonly maxSystemContextValueBytes: number;
2312
+ /** Cap on the full JSON.stringify(systemContext). Default 8 KB. */
2313
+ readonly maxSystemContextJsonBytes: number;
2314
+ /** Max attachments per envelope. Default 4. */
2315
+ readonly maxAttachments: number;
2316
+ /** Cap on a `json` attachment's serialized body. Default 16 KB. */
2317
+ readonly maxAttachmentJsonBytes: number;
2318
+ /** Cap on a `text` attachment's body bytes. Default 8 KB. */
2319
+ readonly maxAttachmentTextBytes: number;
2320
+ /** Cap on an `image` / `file` attachment's dataUrl bytes. Default 32 KB. */
2321
+ readonly maxAttachmentDataUrlBytes: number;
2322
+ /** Max prefixes in `mcpScope.apis`. Default 5. */
2323
+ readonly maxMcpScopeApis: number;
2324
+ /** Cap on any single mcpScope prefix string. Default 128 chars. */
2325
+ readonly maxMcpScopeApiBytes: number;
2326
+ /**
2327
+ * Cap on `deepLinkRoute` UTF-8 byte length. Default 1024 bytes — matches
2328
+ * the route limit on `DeepLinkService.isValidRoute` so this field can be
2329
+ * handed straight to the shell launcher without a second resize.
2330
+ */
2331
+ readonly maxDeepLinkRouteBytes: number;
1940
2332
  }
1941
2333
  declare const DEFAULT_AGENT_PAYLOAD_LIMITS: AgentPayloadLimits;
1942
2334
  /**
@@ -1951,7 +2343,7 @@ type AgentPayloadValidationResult = {
1951
2343
  readonly ok: true;
1952
2344
  } | {
1953
2345
  readonly ok: false;
1954
- readonly reason: 'json_too_large' | 'fallback_too_large' | 'field_too_large' | 'invalid_version' | 'invalid_kind';
2346
+ readonly reason: 'json_too_large' | 'fallback_too_large' | 'field_too_large' | 'invalid_version' | 'invalid_kind' | 'user_message_too_large' | 'system_context_too_many_entries' | 'system_context_value_too_large' | 'system_context_json_too_large' | 'too_many_attachments' | 'attachment_invalid_kind' | 'attachment_json_too_large' | 'attachment_text_too_large' | 'attachment_data_url_too_large' | 'mcp_scope_too_many_apis' | 'mcp_scope_api_too_large' | 'deep_link_route_too_large' | 'deep_link_route_invalid_shape';
1955
2347
  /** Dotted property-access path to the offending field, e.g. `payload.title` or `payload.tags[2]`. NOT RFC 6901 JSON Pointer. */
1956
2348
  readonly fieldPath?: string;
1957
2349
  readonly actualBytes?: number;
@@ -2007,6 +2399,53 @@ declare class AgentCommandRegistry {
2007
2399
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentCommandRegistry>;
2008
2400
  }
2009
2401
 
2402
+ /**
2403
+ * Singleton registry of entity lookups offered by the `/lookup` typeahead.
2404
+ *
2405
+ * Mirrors {@link AgentCommandRegistry} exactly — same federation-singleton story
2406
+ * (`sharedMappings: ['@mohamedatia/fly-design-system']`), same id-collision
2407
+ * "latest wins" contract, same disposable-handle ergonomics. Federated remotes
2408
+ * register their lookupable entities at boot (Circles: scenario / trend / signal)
2409
+ * and dispose on window close, so the picker only ever offers entities whose app
2410
+ * is currently live.
2411
+ *
2412
+ * Storage is a signal store keyed on {@link LookupRegistration.entity}. Because
2413
+ * `entity` is the collision key, an app re-registering the same entity replaces
2414
+ * the prior descriptor; a stale handle's `dispose()` then no-ops.
2415
+ */
2416
+ declare class AgentLookupRegistry {
2417
+ private readonly _lookups;
2418
+ /** All currently-registered lookups, in insertion order. */
2419
+ readonly all: Signal<readonly LookupRegistration[]>;
2420
+ /**
2421
+ * Lookups whose scope is `'global'` OR whose `scope.appId` is in the live app
2422
+ * set. Recomputes when either the registry or `liveAppIds` changes — pass a
2423
+ * `Signal<ReadonlySet<string>>` from the host's app-registry for reactive
2424
+ * filtering, exactly like {@link AgentCommandRegistry.visible}.
2425
+ */
2426
+ visible(liveAppIds: ReadonlySet<string> | Signal<ReadonlySet<string>>): Signal<readonly LookupRegistration[]>;
2427
+ /**
2428
+ * Register one lookup. Returns a handle whose `dispose()` removes the row by
2429
+ * `entity`. A later re-registration of the same entity makes the original
2430
+ * handle's `dispose()` a no-op (the newer registration owns the row).
2431
+ */
2432
+ register(lookup: LookupRegistration): LookupHandle;
2433
+ /**
2434
+ * Bulk register. Rolls back on a duplicate entity WITHIN the input batch
2435
+ * (throws before any row lands). Cross-batch duplicates against existing rows
2436
+ * follow the standard "latest wins" rule and do NOT trigger rollback.
2437
+ */
2438
+ registerAll(lookups: readonly LookupRegistration[]): LookupHandle;
2439
+ /** Tear down by entity. Idempotent. */
2440
+ unregister(entity: string): void;
2441
+ /** Monotonic counter; identifies which registration call currently owns each entity. */
2442
+ private _generation;
2443
+ /** entity → generation. Lets a stale handle's `dispose()` no-op after replacement. */
2444
+ private readonly _owners;
2445
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentLookupRegistry, never>;
2446
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentLookupRegistry>;
2447
+ }
2448
+
2010
2449
  /**
2011
2450
  * Singleton registry of chip-renderer components and keyboard-alternative draggable
2012
2451
  * items, keyed by `kind` and `appId`.
@@ -2063,6 +2502,202 @@ declare class AgentDropRegistry {
2063
2502
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentDropRegistry>;
2064
2503
  }
2065
2504
 
2505
+ /**
2506
+ * Imperative action published by an app, consumed by the agent panel.
2507
+ *
2508
+ * Re-uses {@link AgentDragPayload} as the wire envelope so a dragged item
2509
+ * and a programmatic "Explain" click are byte-for-byte the same shape —
2510
+ * renderers, validators, and serialisation paths never fork on transport.
2511
+ *
2512
+ * Adding a verb is a minor DS bump (consumers ignore unknown verbs in
2513
+ * their `switch`). Removing one is a major DS bump.
2514
+ */
2515
+ type AgentActionVerb = 'explain' | 'why-empty' | 'compose-query' | 'compare' | 'forecast' | 'summarize';
2516
+ /**
2517
+ * Whether the agent panel sends the staged payload immediately or stages
2518
+ * the chip for the user to edit and send manually.
2519
+ *
2520
+ * Phase 1 (DS v2.6.0) supports `'stage'` only. Dispatching with `'auto'`
2521
+ * throws {@link AgentActionUnsupportedDispatchError} so callers don't
2522
+ * silently fail. `'auto'` lands once `AgentInputComponent.programmaticSubmit`
2523
+ * is exposed and reviewed against the input's state machine.
2524
+ */
2525
+ type AgentActionDispatch = 'auto' | 'stage';
2526
+ interface AgentAction<T = unknown> {
2527
+ /** Intent the agent should apply to {@link payload}. */
2528
+ readonly verb: AgentActionVerb;
2529
+ /** The wire envelope. Validated against {@link validateAgentPayload}'s
2530
+ * size caps before the bus fans it out. */
2531
+ readonly payload: AgentDragPayload<T>;
2532
+ /** Optional slash command id to bind before send (e.g. `'explain-report'`).
2533
+ * Phase 1 captures this for telemetry only — actual binding lands when
2534
+ * the input's programmatic-send API ships. An unknown id is dropped
2535
+ * silently with a console warning, the chip still arrives. */
2536
+ readonly autoCommandId?: string;
2537
+ /** Phase 1 supports `'stage'` only. See {@link AgentActionDispatch}. */
2538
+ readonly dispatch: AgentActionDispatch;
2539
+ /** Source DOM rect for the FLIP entry animation. Omit to skip the
2540
+ * animation (e.g. dispatching from a keyboard shortcut with no anchor). */
2541
+ readonly originRect?: DOMRect;
2542
+ /** Optional HTML snippet rendered inside the flight ghost. Callers are
2543
+ * responsible for escaping untrusted text — the bus does not sanitise.
2544
+ * Defaults (when omitted) to a strong-wrapped escape of the payload's
2545
+ * `plainTextFallback` rendered by the panel host. */
2546
+ readonly originPreviewHtml?: string;
2547
+ }
2548
+ /**
2549
+ * Thrown synchronously by {@link AgentActionBus.dispatch} when a caller
2550
+ * supplies a dispatch mode this DS version doesn't implement yet. Catching
2551
+ * by class name lets a forward-compatible caller fall back to `'stage'`
2552
+ * without depending on instanceof across federation boundaries.
2553
+ */
2554
+ declare class AgentActionUnsupportedDispatchError extends Error {
2555
+ readonly dispatch: AgentActionDispatch;
2556
+ constructor(dispatch: AgentActionDispatch);
2557
+ }
2558
+
2559
+ /**
2560
+ * Imperative sibling to {@link AgentCommandRegistry} / {@link AgentDropRegistry}.
2561
+ *
2562
+ * Apps call {@link dispatch} to push a typed {@link AgentAction} onto the bus;
2563
+ * the agent panel subscribes once at construct and routes by verb. The bus
2564
+ * itself is a thin pass-through — it does NOT decide UI behaviour. The
2565
+ * subscriber (agent-panel) owns: showing the panel, staging the chip,
2566
+ * triggering the flight animation, and binding the command. This keeps the
2567
+ * DS free of host policy.
2568
+ *
2569
+ * Federation-safe: `providedIn: 'root'` + `sharedMappings: ['@mohamedatia/fly-design-system']`
2570
+ * give every federated remote the same singleton, so a remote's "Explain"
2571
+ * button reaches the host's panel without any cross-bundle wiring.
2572
+ *
2573
+ * Validation runs synchronously inside `dispatch` so a caller that sends an
2574
+ * oversize payload sees the throw at their site, not on the subscriber. The
2575
+ * subscriber therefore never has to defend against malformed envelopes.
2576
+ */
2577
+ declare class AgentActionBus {
2578
+ private readonly _actions$;
2579
+ /** Hot stream of actions in dispatch order. Subscribers receive only
2580
+ * actions dispatched AFTER they subscribe — late subscribers see nothing
2581
+ * retroactively. Use {@link lastAction} for the latest snapshot. */
2582
+ readonly actions$: Observable<AgentAction>;
2583
+ /** Most recent action — for DevTools, smoke tests, and late-subscriber
2584
+ * catch-up. Null until the first successful dispatch. */
2585
+ readonly lastAction: _angular_core.WritableSignal<AgentAction<unknown> | null>;
2586
+ /**
2587
+ * The action currently being processed by the subscriber, or null when
2588
+ * none. Set by {@link dispatch} immediately before emitting on
2589
+ * {@link actions$}; cleared by the subscriber via {@link settle} once
2590
+ * it finishes its handler (success or fail). Lets the dispatcher render
2591
+ * a busy state on the originating control — e.g. a card swapping its
2592
+ * sparkle icon for a spinner while the agent panel mints the optimistic
2593
+ * thread and starts the request. Identity check (`bus.inFlight() === act`)
2594
+ * is the panel-side contract; dispatchers usually project to a stable id
2595
+ * inside the payload (e.g. <c>reportId</c>) to scope busy-state visually.
2596
+ *
2597
+ * If multiple dispatches race, the latest wins — the prior in-flight
2598
+ * action is dropped on the floor here (the panel may still handle it,
2599
+ * but the dispatcher's busy indicator follows the newer action). Apps
2600
+ * that need stricter single-flight semantics should guard at the call
2601
+ * site (the agent-panel's <c>_pendingTempThreadId</c> already does so
2602
+ * for the explain verb).
2603
+ */
2604
+ readonly inFlight: _angular_core.WritableSignal<AgentAction<unknown> | null>;
2605
+ /**
2606
+ * Push an action onto the bus.
2607
+ *
2608
+ * Throws synchronously when:
2609
+ * - `dispatch === 'auto'` (not implemented in this DS version) — see
2610
+ * {@link AgentActionUnsupportedDispatchError}.
2611
+ * - the payload fails {@link validateAgentPayload} (oversize, invalid
2612
+ * version, invalid kind). The error message carries the field path
2613
+ * so the caller can fix the offending field.
2614
+ *
2615
+ * Subscribers see the action via {@link actions$} on the next tick of
2616
+ * the Subject; the {@link lastAction} signal updates synchronously
2617
+ * before the Subject emits so an effect reading both stays consistent.
2618
+ */
2619
+ dispatch<T>(action: AgentAction<T>): void;
2620
+ /**
2621
+ * Subscriber contract: call after the handler for {@link inFlight}
2622
+ * completes (success or fail). Only clears {@link inFlight} if it still
2623
+ * points at the passed action — a no-op when a later dispatch already
2624
+ * superseded it. Pass the same action reference the subscriber received
2625
+ * from {@link actions$}; identity is the gate.
2626
+ */
2627
+ settle(action: AgentAction): void;
2628
+ /**
2629
+ * Semantic alias of {@link settle} for explicit user-driven cancellation —
2630
+ * e.g. a future "Stop" button in the agent input tray, or a dispatcher
2631
+ * teardown that wants to abandon its own in-flight action. Identical
2632
+ * runtime behaviour (identity check + clear), but the two-method surface
2633
+ * lets the UI distinguish "handler finished" from "user said no" in
2634
+ * telemetry / logs without sniffing a "reason" parameter.
2635
+ *
2636
+ * Pass the same action reference returned from {@link inFlight} or held
2637
+ * by the dispatcher; identity is the gate.
2638
+ */
2639
+ cancel(action: AgentAction): void;
2640
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentActionBus, never>;
2641
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentActionBus>;
2642
+ }
2643
+
2644
+ /**
2645
+ * FLIP-style entry animation for payloads landing in the agent panel.
2646
+ *
2647
+ * Pure DOM + Web Animations API — no Chart.js, no Angular animations module,
2648
+ * no CSS transitions racing layout. Honours `prefers-reduced-motion`: the
2649
+ * ghost is appended then removed without animating when the user asked for
2650
+ * less motion (so DOM side-effects stay consistent).
2651
+ *
2652
+ * Lifecycle:
2653
+ * 1. The agent panel calls {@link registerTarget} in `ngAfterViewInit`
2654
+ * with its header element.
2655
+ * 2. A source app dispatches an `AgentAction` carrying an `originRect`
2656
+ * from `getBoundingClientRect()` on the click target.
2657
+ * 3. The bus subscriber calls {@link flyInto} with that rect.
2658
+ * 4. The animator creates a fixed-position ghost at the origin, animates
2659
+ * transform + opacity toward the registered target's rect, then
2660
+ * removes itself on `onfinish` / `oncancel`.
2661
+ *
2662
+ * Uses `getBoundingClientRect()` (physical viewport coords) so the animation
2663
+ * is RTL-correct without inset-inline math — the rect already encodes the
2664
+ * physical position regardless of `dir`.
2665
+ *
2666
+ * The 900 ms duration and easing curve are deliberately hardcoded — making
2667
+ * them configurable surfaces an API the host can't usefully tune without
2668
+ * understanding motion design as a whole.
2669
+ */
2670
+ declare class AgentFlightAnimator {
2671
+ /** Hardcoded — see class doc. */
2672
+ private static readonly DURATION_MS;
2673
+ private static readonly EASING;
2674
+ /** Floor the target/source scale ratio so a tiny target rect doesn't
2675
+ * collapse the ghost to invisibility before the animation finishes. */
2676
+ private static readonly MIN_SCALE;
2677
+ private targetEl;
2678
+ /** Called by the panel host to publish where flights should land. Pass
2679
+ * `null` on destroy so a re-mounted panel doesn't leave the animator
2680
+ * pointing at a detached node. */
2681
+ registerTarget(el: HTMLElement | null): void;
2682
+ /**
2683
+ * Animate a ghost element from {@link from} to the registered target's
2684
+ * rect. No-ops when:
2685
+ * - no target is registered (silent — panel may not be mounted yet)
2686
+ * - running outside a browser (SSR safety)
2687
+ * - the user has `prefers-reduced-motion: reduce` set (DOM is still
2688
+ * touched so callers see consistent side-effects, but no animation
2689
+ * runs)
2690
+ *
2691
+ * The ghost is appended to `document.body` (not the panel) so a parent
2692
+ * `overflow: hidden` on the panel can't clip the flight path.
2693
+ */
2694
+ flyInto(from: DOMRect, opts?: {
2695
+ previewHtml?: string;
2696
+ }): void;
2697
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentFlightAnimator, never>;
2698
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentFlightAnimator>;
2699
+ }
2700
+
2066
2701
  /**
2067
2702
  * Single canonical way to declare a drag source for the agent input.
2068
2703
  *
@@ -2231,11 +2866,14 @@ declare function trimAgentString(input: string, maxBytes: number, ellipsis?: str
2231
2866
  * structured failure with the offending field path and byte counts.
2232
2867
  *
2233
2868
  * Order of checks (cheap → expensive):
2234
- * 1. `version` matches the frozen {@link AGENT_PAYLOAD_VERSION}.
2869
+ * 1. `version` is in {@link SUPPORTED_AGENT_PAYLOAD_VERSIONS}.
2235
2870
  * 2. `kind` is a non-empty string.
2236
2871
  * 3. `plainTextFallback` fits its cap.
2237
2872
  * 4. Every string in `payload` (recursively) fits the per-field cap.
2238
- * 5. The full `JSON.stringify(envelope)` fits the JSON cap.
2873
+ * 5. v2 sections `userMessage`, `systemContext`, `attachments`, `mcpScope`
2874
+ * each fits their independent caps. Skipped when absent so v1 payloads pass
2875
+ * unchanged.
2876
+ * 6. The full `JSON.stringify(envelope)` fits the JSON cap.
2239
2877
  *
2240
2878
  * The walker stops on the first oversize string field — the intent is to surface
2241
2879
  * actionable feedback, not enumerate every offender.
@@ -2344,6 +2982,6 @@ declare const AUDIENCE_ERROR_CODES: {
2344
2982
  };
2345
2983
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
2346
2984
 
2347
- export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentCommandRegistry, AgentDropRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DialogResult, FLYOS_LAUNCH_EVENT, FLY_LOCALE_CATALOG, FLY_REMOTE_BASE_PATH, FLY_REMOTE_ROUTES, FLY_THEME_MODE_IDS, FlyAgentDraggableDirective, FlyBlockUiComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySecureSrcDirective, FlyThemeService, FlyosPendingLaunchesGlobalKey, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WindowManagerService, findLocaleByDialect, findLocaleByPrefix, isRtlLocale, isRtlLocaleEntry, loadRemoteStyles, matchFlyRoutePattern, normalizeFlyTheme, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload };
2348
- export type { AgentChipHostInputs, AgentCommand, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, ChartTerm, ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, DesktopAppKind, DialogResultWithAcknowledgement, FlyFileInfo, FlyLaunchEventDetail, FlyLocaleEntry, FlyRemoteMatch, FlyRemoteRoute, FlyThemeMode, FlyosPendingLaunches, LaunchContext, LoadBundleOptions, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, PresetTerm, RemoteAppDef, RoleOuLookupRow, RolePrincipal, RolesTerm, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, User, UserPrincipal, UsersTerm, WindowInstance, WindowState };
2985
+ export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DialogResult, FLYOS_LAUNCH_EVENT, FLY_LOCALE_CATALOG, FLY_REMOTE_BASE_PATH, FLY_REMOTE_ROUTES, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FlyAgentDraggableDirective, FlyBlockUiComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySecureSrcDirective, FlyThemeService, FlyWindowHelpService, FlyosPendingLaunchesGlobalKey, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, findLocaleByDialect, findLocaleByPrefix, isRtlLocale, isRtlLocaleEntry, loadRemoteStyles, matchFlyRoutePattern, normalizeFlyTheme, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload };
2986
+ export type { AgentAction, AgentActionDispatch, AgentActionVerb, AgentChipHostInputs, AgentCommand, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentEnvelopeAttachment, AgentMcpScope, AgentMessageEnvelope, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, ChartTerm, ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, DesktopAppKind, DialogResultWithAcknowledgement, FlyFileInfo, FlyLaunchEventDetail, FlyLocaleEntry, FlyRemoteMatch, FlyRemoteRoute, FlyThemeMode, FlyWindowHelpHintEventDetail, FlyosPendingLaunches, LaunchContext, LoadBundleOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, PresetTerm, RemoteAppDef, RoleOuLookupRow, RolePrincipal, RolesTerm, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
2349
2987
  //# sourceMappingURL=mohamedatia-fly-design-system.d.ts.map