@modelprofile.com/flexharness 13.1.0 → 13.2.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.
Files changed (53) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/classes.flexharness.cachewarm.d.ts +64 -0
  3. package/dist_ts/classes.flexharness.cachewarm.js +353 -0
  4. package/dist_ts/classes.flexharness.callbacks.js +2 -1
  5. package/dist_ts/classes.flexharness.core.d.ts +4 -1
  6. package/dist_ts/classes.flexharness.core.js +9 -3
  7. package/dist_ts/classes.flexharness.d.ts +10 -1
  8. package/dist_ts/classes.flexharness.deletion.js +2 -1
  9. package/dist_ts/classes.flexharness.js +14 -1
  10. package/dist_ts/classes.flexharness.lifecycle.js +4 -1
  11. package/dist_ts/classes.flexharness.prompts.d.ts +1 -1
  12. package/dist_ts/classes.flexharness.prompts.js +28 -9
  13. package/dist_ts/classes.flexharness.reversions.d.ts +2 -0
  14. package/dist_ts/classes.flexharness.reversions.js +7 -2
  15. package/dist_ts/classes.flexharness.runs.js +25 -3
  16. package/dist_ts/classes.toolcatalog.d.ts +10 -2
  17. package/dist_ts/classes.toolcatalog.js +73 -7
  18. package/dist_ts/interfaces.d.ts +89 -1
  19. package/dist_ts/interfaces.flexharness.d.ts +15 -0
  20. package/dist_ts/interfaces.js +1 -1
  21. package/dist_ts/plugins.d.ts +1 -1
  22. package/dist_ts/plugins.js +1 -1
  23. package/dist_ts/utils.harnessoptions.d.ts +8 -1
  24. package/dist_ts/utils.harnessoptions.js +50 -6
  25. package/dist_ts/utils.json.js +9 -2
  26. package/dist_ts/utils.sessionpreview.d.ts +3 -3
  27. package/dist_ts/utils.sessionpreview.js +5 -5
  28. package/dist_ts_chat_harness/classes.transcript.js +17 -4
  29. package/dist_ts_chat_harness/functions.mapping.d.ts +1 -0
  30. package/dist_ts_chat_harness/functions.mapping.js +5 -2
  31. package/package.json +3 -3
  32. package/readme.md +27 -0
  33. package/ts/00_commitinfo_data.ts +1 -1
  34. package/ts/classes.flexharness.cachewarm.ts +433 -0
  35. package/ts/classes.flexharness.callbacks.ts +1 -0
  36. package/ts/classes.flexharness.core.ts +8 -1
  37. package/ts/classes.flexharness.deletion.ts +1 -0
  38. package/ts/classes.flexharness.lifecycle.ts +3 -0
  39. package/ts/classes.flexharness.prompts.ts +25 -6
  40. package/ts/classes.flexharness.reversions.ts +7 -1
  41. package/ts/classes.flexharness.runs.ts +20 -2
  42. package/ts/classes.flexharness.ts +21 -0
  43. package/ts/classes.toolcatalog.ts +76 -7
  44. package/ts/interfaces.flexharness.ts +16 -0
  45. package/ts/interfaces.ts +100 -1
  46. package/ts/plugins.ts +1 -0
  47. package/ts/readme.md +27 -0
  48. package/ts/utils.harnessoptions.ts +74 -5
  49. package/ts/utils.json.ts +8 -1
  50. package/ts/utils.sessionpreview.ts +4 -4
  51. package/ts_chat_harness/classes.transcript.ts +14 -3
  52. package/ts_chat_harness/functions.mapping.ts +3 -1
  53. package/ts_chat_harness/readme.md +1 -0
@@ -189,6 +189,11 @@ export interface IFlexMessage {
189
189
  rejectedPermissionId?: string;
190
190
  /** On a user message that steered its running run: the caller's steer identity. */
191
191
  steerId?: string;
192
+ /**
193
+ * On both messages of a cache-warm turn: the harness sent the prompt only to keep the model's
194
+ * prompt cache warm. Hosts leave these out of what they show and report as work.
195
+ */
196
+ cacheWarm?: true;
192
197
  }
193
198
  export interface IFlexSessionActivity {
194
199
  runId?: string;
@@ -200,6 +205,8 @@ export interface IFlexSessionActivity {
200
205
  limit?: TFlexModelLimit;
201
206
  /** The permission whose rejection stopped the last run, next to its error. */
202
207
  rejectedPermissionId?: string;
208
+ /** The run is or was a cache-warm turn; see {@link IFlexMessage.cacheWarm}. */
209
+ cacheWarm?: true;
203
210
  }
204
211
  export interface IFlexSession {
205
212
  scopeId: string;
@@ -430,6 +437,8 @@ export interface IFlexPromptQueueEntry {
430
437
  queuedAt: string;
431
438
  runId?: string;
432
439
  scheduleKey?: string;
440
+ /** The entry is a cache-warm prompt; see {@link IFlexMessage.cacheWarm}. */
441
+ cacheWarm?: true;
433
442
  startedAt?: string;
434
443
  finishedAt?: string;
435
444
  error?: IFlexErrorInfo;
@@ -1515,7 +1524,44 @@ export interface IFlexProjectManagementBuiltInToolsOptions {
1515
1524
  export interface IFlexBuiltInToolsOptions {
1516
1525
  renameSession?: boolean;
1517
1526
  projectManagement?: IFlexProjectManagementBuiltInToolsOptions;
1527
+ /** The `keep_cache_warm` tool of root sessions; see `FlexHarness.keepCacheWarm()`. */
1528
+ cacheWarm?: boolean;
1529
+ }
1530
+ /** The clock the cache keeper reads and sets its timers on. Tests pass a fake one. */
1531
+ export interface IFlexCacheWarmClock {
1532
+ now(): number;
1533
+ setTimeout(callback: () => void, delayMs: number): unknown;
1534
+ clearTimeout(handle: unknown): void;
1535
+ }
1536
+ export interface IFlexCacheWarmOptions {
1537
+ /** The longest warm period one call sets, in milliseconds. Defaults to 4 hours. */
1538
+ maxDurationMs?: number;
1539
+ /** Caps the output tokens of each model call of a cache-warm turn. Defaults to 1024. */
1540
+ maxOutputTokens?: number;
1541
+ clock?: IFlexCacheWarmClock;
1542
+ }
1543
+ /** What `keepCacheWarm()` sets. */
1544
+ export interface IFlexCacheWarmInput {
1545
+ /** How long from now to keep the cache warm, in milliseconds; 0 stops. Capped at the maximum. */
1546
+ durationMs: number;
1547
+ }
1548
+ /** A session's cache keeper. Process-local: it ends with the harness. */
1549
+ export interface IFlexCacheWarmState {
1550
+ sessionId: string;
1551
+ /** Present while the keeper runs: when it stops, as an ISO timestamp. */
1552
+ warmUntil?: string;
1553
+ /** Present while a warm turn is due: when, as an ISO timestamp. */
1554
+ nextWarmAt?: string;
1555
+ /** The idle time after a model call at which a warm turn is due, in milliseconds. */
1556
+ idleMs?: number;
1557
+ /**
1558
+ * What `idleMs` rests on, from the last model call: the observed cache lifetime of its provider,
1559
+ * model and endpoint (see `TSmartAiCacheBudgetBasis` of `@modelprofile.com/flexharness-models`).
1560
+ * Absent while no call was observed, when the five-minute default applies.
1561
+ */
1562
+ basis?: TFlexCacheWarmBasis;
1518
1563
  }
1564
+ export type TFlexCacheWarmBasis = plugins.TSmartAiCacheBudgetBasis;
1519
1565
  /** What an attachment resolver is asked for: the attachment `url` names, for one session. */
1520
1566
  export interface IFlexAttachmentRequest<TScope = unknown> extends IFlexAgentContextInvocation<TScope> {
1521
1567
  readonly url: URL;
@@ -1570,6 +1616,8 @@ export interface IFlexHarnessOptions<TScope> {
1570
1616
  /** Maximum child depth (root is 0). Defaults to 6; configurable from 1 through 8. */
1571
1617
  maxSubagentDepth?: number;
1572
1618
  maxSubagentCallsPerRun?: number;
1619
+ /** Bounds and the clock of the cache keeper; see `keepCacheWarm()`. */
1620
+ cacheWarm?: IFlexCacheWarmOptions;
1573
1621
  }
1574
1622
  export interface IFlexUncertainToolExecution {
1575
1623
  intentId: string;
@@ -1625,6 +1673,8 @@ export interface IFlexRunStartedEvent extends IFlexEventBase {
1625
1673
  readonly runId: string;
1626
1674
  readonly messageId: string;
1627
1675
  readonly session: IFlexSession;
1676
+ /** The run is a cache-warm turn; see {@link IFlexMessage.cacheWarm}. */
1677
+ readonly cacheWarm?: true;
1628
1678
  }
1629
1679
  export interface IFlexMessageChangedEvent extends IFlexEventBase {
1630
1680
  readonly type: 'message.created' | 'message.updated';
@@ -1694,6 +1744,8 @@ export interface IFlexRunFinishedEvent extends IFlexEventBase {
1694
1744
  * steer it accepted.
1695
1745
  */
1696
1746
  readonly unappliedSteerIds: readonly string[];
1747
+ /** The run is a cache-warm turn; see {@link IFlexMessage.cacheWarm}. */
1748
+ readonly cacheWarm?: true;
1697
1749
  }
1698
1750
  /** The running run accepted a steer; it is taken in at the run's next step boundary. */
1699
1751
  export interface IFlexSteerAcceptedEvent extends IFlexEventBase {
@@ -1729,6 +1781,8 @@ export type TFlexModelUsageEvent = IFlexEventBase & {
1729
1781
  readonly type: 'model.usage';
1730
1782
  readonly runId?: string;
1731
1783
  readonly source: 'generation' | 'compaction';
1784
+ /** The call belongs to a cache-warm turn; see {@link IFlexMessage.cacheWarm}. */
1785
+ readonly cacheWarm?: true;
1732
1786
  } & Readonly<TFlexObservedModelCallUsage>;
1733
1787
  export interface IFlexPromptQueueEvent extends IFlexEventBase {
1734
1788
  readonly type: 'prompt.queued' | 'prompt.started' | 'prompt.running' | 'prompt.finished';
@@ -1741,6 +1795,40 @@ export interface IFlexSessionHistoryChangedEvent extends IFlexEventBase {
1741
1795
  readonly direction: 'undo' | 'redo' | 'branch';
1742
1796
  readonly runId?: string;
1743
1797
  }
1798
+ /**
1799
+ * The session's cache keeper changed: `warmUntil` is when it stops, absent once it stopped.
1800
+ * `source` is who set it: the host through `keepCacheWarm()` or the agent through its tool.
1801
+ */
1802
+ export interface IFlexCacheWarmChangedEvent extends IFlexEventBase {
1803
+ readonly type: 'cache.warm.changed';
1804
+ readonly source: 'host' | 'agent';
1805
+ readonly warmUntil?: string;
1806
+ }
1807
+ /** A cache-warm turn completed; `usage` shows whether it read the cached prefix. */
1808
+ export interface IFlexCacheWarmCompletedEvent extends IFlexEventBase {
1809
+ readonly type: 'cache.warm.completed';
1810
+ readonly runId: string;
1811
+ /**
1812
+ * The turn's usage. `cacheReadTokens` and `cacheWriteTokens` are the provider's own counts:
1813
+ * OpenAI's `input_tokens_details.cached_tokens` and `cache_write_tokens`, Anthropic's
1814
+ * `cache_read_input_tokens` and `cache_creation_input_tokens`.
1815
+ */
1816
+ readonly usage: IFlexUsage;
1817
+ /** How long the session had been idle since its previous model call when the turn was due. */
1818
+ readonly idleForMs?: number;
1819
+ /** What the keeper's timing rested on; see {@link IFlexCacheWarmState.basis}. */
1820
+ readonly basis?: TFlexCacheWarmBasis;
1821
+ }
1822
+ /**
1823
+ * The session's cache keeper stopped: its deadline passed, the host or agent cleared it, a warm
1824
+ * turn failed, or the session can no longer be warmed.
1825
+ */
1826
+ export interface IFlexCacheWarmStoppedEvent extends IFlexEventBase {
1827
+ readonly type: 'cache.warm.stopped';
1828
+ readonly reason: 'deadline' | 'cleared' | 'failed' | 'unavailable';
1829
+ readonly runId?: string;
1830
+ readonly error?: IFlexErrorInfo;
1831
+ }
1744
1832
  export interface IFlexErrorInfo {
1745
1833
  name: string;
1746
1834
  message: string;
@@ -1750,6 +1838,6 @@ export interface IFlexErrorInfo {
1750
1838
  /** Set when a rejected permission stopped the run: the rejected request's `permissionId`. */
1751
1839
  permissionId?: string;
1752
1840
  }
1753
- export type TFlexHarnessEvent = IFlexSessionCreatedEvent | IFlexSessionUpdatedEvent | IFlexSessionDeletedEvent | IFlexRunStartedEvent | IFlexMessageChangedEvent | TFlexPartEvent | IFlexPermissionRequestedEvent | IFlexPermissionResolvedEvent | IFlexRunFinishedEvent | IFlexRunRetryingEvent | TFlexModelUsageEvent | IFlexPromptQueueEvent | IFlexSteerAcceptedEvent | IFlexSteerAppliedEvent | IFlexSessionHistoryChangedEvent;
1841
+ export type TFlexHarnessEvent = IFlexSessionCreatedEvent | IFlexSessionUpdatedEvent | IFlexSessionDeletedEvent | IFlexRunStartedEvent | IFlexMessageChangedEvent | TFlexPartEvent | IFlexPermissionRequestedEvent | IFlexPermissionResolvedEvent | IFlexRunFinishedEvent | IFlexRunRetryingEvent | TFlexModelUsageEvent | IFlexPromptQueueEvent | IFlexSteerAcceptedEvent | IFlexSteerAppliedEvent | IFlexSessionHistoryChangedEvent | IFlexCacheWarmChangedEvent | IFlexCacheWarmCompletedEvent | IFlexCacheWarmStoppedEvent;
1754
1842
  export type TFlexHarnessEventListener = (event: TFlexHarnessEvent) => void;
1755
1843
  export {};
@@ -58,6 +58,17 @@ export interface IStoredSessionState {
58
58
  terminalPromptQueueEntries: Map<string, IFlexPromptQueueEntry>;
59
59
  outstandingPromptBytes: number;
60
60
  promptQueueDrain?: Promise<void>;
61
+ /** The last model call of the session in this process, on the cache keeper's clock. */
62
+ lastCacheDispatch?: ICacheDispatchMark;
63
+ /** What the last root prompt asked of the model, which its cache-warm turns repeat. */
64
+ cacheWarmPromptOptions?: Pick<IFlexPromptOptions, 'modelHint' | 'system'>;
65
+ }
66
+ export interface ICacheDispatchMark {
67
+ at: number;
68
+ /** How long after `at` a cache-warm turn is due: the cache's TTL less a minute. */
69
+ idleMs: number;
70
+ /** What the TTL rests on; absent for the five-minute default. */
71
+ basis?: plugins.TSmartAiCacheBudgetBasis;
61
72
  }
62
73
  export interface IRetainedSessionCleanup {
63
74
  stored: IStoredSessionState;
@@ -171,6 +182,8 @@ export interface IActiveRun {
171
182
  transaction?: plugins.IAgentGenerationHandle;
172
183
  scheduleKey?: string;
173
184
  debounceMs?: number;
185
+ /** A cache-warm turn of the session's cache keeper; see `keepCacheWarm()`. */
186
+ cacheWarm?: true;
174
187
  ownerCancellation?: FlexHarnessAbortError;
175
188
  internalFailure?: unknown;
176
189
  callbackError?: unknown;
@@ -332,6 +345,8 @@ export interface IQueuedPrompt {
332
345
  runId?: string;
333
346
  scheduleKey?: string;
334
347
  debounceMs?: number;
348
+ /** A cache-warm prompt of the session's cache keeper; see `keepCacheWarm()`. */
349
+ cacheWarm?: true;
335
350
  startedAt?: string;
336
351
  prompt?: INormalizedFlexPrompt;
337
352
  options?: IFlexPromptOptions;
@@ -121,4 +121,4 @@ export const FLEX_SESSION_REVERSION_BARRIER_CAUSES = [
121
121
  'nonrevertible',
122
122
  'transcript-only',
123
123
  ];
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNldBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUF1VkgseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQW9CaEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxvREFBb0Q7SUFDcEQsY0FBYyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQiwwREFB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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb1hBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUF5VkgseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQW9CaEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxvREFBb0Q7SUFDcEQsY0FBYyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQiwwREFB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
@@ -74,7 +74,7 @@ export interface ICodeSandboxEngine {
74
74
  export declare const importCodeSandboxEngine: () => Promise<ICodeSandboxEngine>;
75
75
  import { AgentEventStoreConflictError, AgentPendingInputQueue, applyAgentEventChange, assertAgentEventChange, assertAttachmentResolver, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchive, validateAgentEventSnapshot, z } from '@modelprofile.com/flexharness-agent';
76
76
  export { AgentEventStoreConflictError, AgentPendingInputQueue, applyAgentEventChange, assertAgentEventChange, assertAttachmentResolver, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchive, validateAgentEventSnapshot, z, };
77
- export type { IAgentAppliedInput, IAgentResolvedAttachment, ISmartAiCacheDispatch, IAgentEventArchive, IAgentEventChange, IAgentContextCompactionOptions, IAgentEventSnapshot, IAgentEventStore, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentToolExecutionOptions, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, IToolPermissionRequest, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentObservedModelCallUsage, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
77
+ export type { IAgentAppliedInput, IAgentResolvedAttachment, ISmartAiCacheDispatch, TSmartAiCacheBudgetBasis, IAgentEventArchive, IAgentEventChange, IAgentContextCompactionOptions, IAgentEventSnapshot, IAgentEventStore, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentToolExecutionOptions, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, IToolPermissionRequest, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentObservedModelCallUsage, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
78
78
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
79
79
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
80
80
  export type { IModelLimitInfo } from '@modelprofile.com/flexharness-models';
@@ -26,4 +26,4 @@ import { AgentEventStoreConflictError, AgentPendingInputQueue, applyAgentEventCh
26
26
  export { AgentEventStoreConflictError, AgentPendingInputQueue, applyAgentEventChange, assertAgentEventChange, assertAttachmentResolver, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchive, validateAgentEventSnapshot, z, };
27
27
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
28
28
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUV2RCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFrRXJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssSUFBaUMsRUFBRTtJQUM3RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxPQUFPO1FBQ0wsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7S0FDakYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQiw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsSUFBSSxFQUNKLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsQ0FBQyxHQUNGLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLENBQUMsR0FDRixDQUFDO0FBMENGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWxILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDIn0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUV2RCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFrRXJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssSUFBaUMsRUFBRTtJQUM3RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxPQUFPO1FBQ0wsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7S0FDakYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQiw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsSUFBSSxFQUNKLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsQ0FBQyxHQUNGLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLENBQUMsR0FDRixDQUFDO0FBMkNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWxILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import type { IFlexAgentSessionPolicy, IFlexAttachmentResolver, IFlexCallbackLimits, IFlexHarnessOptions, IFlexHarnessStores, IFlexJsonLimits, IFlexPromptQueueLimits, IFlexResultLimits, IFlexReversionLimits, IFlexSlashCommandHandlerRegistration, IFlexSlashCommandTemplateRegistration, IFlexCodeModeLimits, IFlexSubagentDefinition, IFlexToolCatalogOptions, TFlexSlashCommandRegistration } from './interfaces.js';
1
+ import type { IFlexAgentSessionPolicy, IFlexAttachmentResolver, IFlexCacheWarmClock, IFlexCallbackLimits, IFlexHarnessOptions, IFlexHarnessStores, IFlexJsonLimits, IFlexPromptQueueLimits, IFlexResultLimits, IFlexReversionLimits, IFlexSlashCommandHandlerRegistration, IFlexSlashCommandTemplateRegistration, IFlexCodeModeLimits, IFlexSubagentDefinition, IFlexToolCatalogOptions, TFlexSlashCommandRegistration } from './interfaces.js';
2
2
  export type TRegisteredSlashCommand<TScope> = Readonly<IFlexSlashCommandTemplateRegistration> | Readonly<IFlexSlashCommandHandlerRegistration<TScope>>;
3
3
  export interface INormalizedProjectManagementTools {
4
4
  readonly task: boolean;
@@ -8,6 +8,12 @@ export interface INormalizedProjectManagementTools {
8
8
  export interface INormalizedBuiltInTools {
9
9
  readonly renameSession: boolean;
10
10
  readonly projectManagement?: INormalizedProjectManagementTools;
11
+ readonly cacheWarm: boolean;
12
+ }
13
+ export interface INormalizedCacheWarmOptions {
14
+ readonly maxDurationMs: number;
15
+ readonly maxOutputTokens: number;
16
+ readonly clock: IFlexCacheWarmClock;
11
17
  }
12
18
  export declare const maxSubagentNameBytes = 128;
13
19
  export declare function normalizeAllowedTools(names: readonly string[] | undefined, label?: string): readonly string[] | undefined;
@@ -22,6 +28,7 @@ export interface INormalizedToolCatalogOptions {
22
28
  export declare function normalizeToolCatalogOptions(options: IFlexToolCatalogOptions | undefined): INormalizedToolCatalogOptions;
23
29
  export declare function normalizeBuiltInTools(options: IFlexHarnessOptions<unknown>['builtInTools']): INormalizedBuiltInTools;
24
30
  export declare function normalizeSlashCommands<TScope>(registrations: readonly TFlexSlashCommandRegistration<TScope>[] | undefined): ReadonlyMap<string, TRegisteredSlashCommand<TScope>>;
31
+ export declare function normalizeCacheWarmOptions(input: IFlexHarnessOptions<unknown>['cacheWarm']): INormalizedCacheWarmOptions;
25
32
  export declare function resolveBoundedPositiveInteger(value: number | undefined, name: string, defaultValue: number, maximum: number): number;
26
33
  export declare function resolveReversionMaintenanceTimeoutMs<TScope>(options: IFlexHarnessOptions<TScope>): number;
27
34
  export declare function resolveCallbackLimits(limits?: IFlexCallbackLimits): Required<IFlexCallbackLimits>;
@@ -3,6 +3,11 @@ import * as plugins from './plugins.js';
3
3
  import { FLEX_CODE_MODE_DEFAULT_LIMITS, FLEX_CODE_MODE_MAXIMUM_LIMITS, FLEX_RESULT_LIMITS, FLEX_REVERSION_DEFAULT_LIMITS, FLEX_TOOL_CATALOG_DEFAULT_OUTPUT_TYPE_DEPTH, FLEX_TOOL_CATALOG_LIMITS, FLEX_REVERSION_MAXIMUM_LIMITS, } from './interfaces.js';
4
4
  import { FLEX_SLASH_COMMAND_MAX_INPUT_BYTES, isReservedSlashCommandName, isValidSlashCommandName, } from './utils.slashcommands.js';
5
5
  import { validateUtf8String } from './utils.validation.js';
6
+ const defaultCacheWarmMaxDurationMs = 4 * 60 * 60 * 1000;
7
+ // One call warms for at most a day; a host extends it by calling again.
8
+ const maximumCacheWarmMaxDurationMs = 24 * 60 * 60 * 1000;
9
+ const defaultCacheWarmMaxOutputTokens = 1024;
10
+ const maximumCacheWarmMaxOutputTokens = 32_768;
6
11
  const DEFAULT_CALLBACK_LIMITS = {
7
12
  maxEvents: 10_000,
8
13
  maxOutputBytes: 1024 * 1024,
@@ -158,7 +163,7 @@ function normalizeCodeModeLimits(codeMode) {
158
163
  }
159
164
  export function normalizeBuiltInTools(options) {
160
165
  if (options === undefined)
161
- return Object.freeze({ renameSession: false });
166
+ return Object.freeze({ renameSession: false, cacheWarm: false });
162
167
  if (!options
163
168
  || typeof options !== 'object'
164
169
  || Array.isArray(options)
@@ -166,15 +171,20 @@ export function normalizeBuiltInTools(options) {
166
171
  throw new FlexHarnessValidationError('builtInTools must be a plain object.');
167
172
  }
168
173
  const unsupported = Object.keys(options)
169
- .find((key) => !['renameSession', 'projectManagement'].includes(key));
174
+ .find((key) => !['renameSession', 'projectManagement', 'cacheWarm'].includes(key));
170
175
  if (unsupported)
171
176
  throw new FlexHarnessValidationError(`builtInTools does not support "${unsupported}".`);
172
- if (options.renameSession !== undefined && typeof options.renameSession !== 'boolean') {
173
- throw new FlexHarnessValidationError('builtInTools.renameSession must be a boolean.');
177
+ for (const key of ['renameSession', 'cacheWarm']) {
178
+ if (options[key] !== undefined && typeof options[key] !== 'boolean') {
179
+ throw new FlexHarnessValidationError(`builtInTools.${key} must be a boolean.`);
180
+ }
174
181
  }
175
182
  const projectManagement = options.projectManagement;
176
183
  if (projectManagement === undefined) {
177
- return Object.freeze({ renameSession: options.renameSession ?? false });
184
+ return Object.freeze({
185
+ renameSession: options.renameSession ?? false,
186
+ cacheWarm: options.cacheWarm ?? false,
187
+ });
178
188
  }
179
189
  if (!projectManagement
180
190
  || typeof projectManagement !== 'object'
@@ -194,6 +204,7 @@ export function normalizeBuiltInTools(options) {
194
204
  }
195
205
  return Object.freeze({
196
206
  renameSession: options.renameSession ?? false,
207
+ cacheWarm: options.cacheWarm ?? false,
197
208
  projectManagement: Object.freeze({
198
209
  task: projectManagement.task ?? true,
199
210
  goal: projectManagement.goal ?? true,
@@ -265,6 +276,39 @@ export function normalizeSlashCommands(registrations) {
265
276
  }
266
277
  return Object.freeze(normalized);
267
278
  }
279
+ const systemCacheWarmClock = Object.freeze({
280
+ now: () => Date.now(),
281
+ setTimeout: (callback, delayMs) => {
282
+ const handle = setTimeout(callback, delayMs);
283
+ // A warm period never holds the process open.
284
+ handle.unref?.();
285
+ return handle;
286
+ },
287
+ clearTimeout: (handle) => clearTimeout(handle),
288
+ });
289
+ export function normalizeCacheWarmOptions(input) {
290
+ if (input !== undefined && !isPlainOptions(input)) {
291
+ throw new FlexHarnessValidationError('cacheWarm must be a plain object.');
292
+ }
293
+ const options = input ?? {};
294
+ const unsupported = Object.keys(options)
295
+ .find((key) => !['maxDurationMs', 'maxOutputTokens', 'clock'].includes(key));
296
+ if (unsupported)
297
+ throw new FlexHarnessValidationError(`cacheWarm does not support "${unsupported}".`);
298
+ const clock = options.clock ?? systemCacheWarmClock;
299
+ if (!clock
300
+ || typeof clock !== 'object'
301
+ || typeof clock.now !== 'function'
302
+ || typeof clock.setTimeout !== 'function'
303
+ || typeof clock.clearTimeout !== 'function') {
304
+ throw new FlexHarnessValidationError('cacheWarm.clock must provide now, setTimeout and clearTimeout.');
305
+ }
306
+ return Object.freeze({
307
+ maxDurationMs: resolveBoundedPositiveInteger(options.maxDurationMs, 'cacheWarm.maxDurationMs', defaultCacheWarmMaxDurationMs, maximumCacheWarmMaxDurationMs),
308
+ maxOutputTokens: resolveBoundedPositiveInteger(options.maxOutputTokens, 'cacheWarm.maxOutputTokens', defaultCacheWarmMaxOutputTokens, maximumCacheWarmMaxOutputTokens),
309
+ clock,
310
+ });
311
+ }
268
312
  export function resolveBoundedPositiveInteger(value, name, defaultValue, maximum) {
269
313
  const resolved = value ?? defaultValue;
270
314
  if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > maximum) {
@@ -384,4 +428,4 @@ export function requireHarnessStores(stores) {
384
428
  }
385
429
  return stores;
386
430
  }
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3QiwyQ0FBMkMsRUFDM0Msd0JBQXdCLEVBQ3hCLDZCQUE2QixHQUM5QixNQUFNLGlCQUFpQixDQUFDO0FBa0J6QixPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWlCM0QsTUFBTSx1QkFBdUIsR0FBa0M7SUFDN0QsU0FBUyxFQUFFLE1BQU07SUFDakIsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxLQUFLO0NBQ2hCLENBQUM7QUFDRixNQUFNLDJCQUEyQixHQUFxQztJQUNwRSwrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLDZCQUE2QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMvQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtJQUMzQyw0QkFBNEIsRUFBRSxFQUFFO0NBQ2pDLENBQUM7QUFDRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBTSxz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
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuaGFybmVzc29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy91dGlscy5oYXJuZXNzb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUM3QiwyQ0FBMkMsRUFDM0Msd0JBQXdCLEVBQ3hCLDZCQUE2QixHQUM5QixNQUFNLGlCQUFpQixDQUFDO0FBb0J6QixPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXdCM0QsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekQsd0VBQXdFO0FBQ3hFLE1BQU0sNkJBQTZCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1BQU0sK0JBQStCLEdBQUcsTUFBTSxDQUFDO0FBRS9DLE1BQU0sdUJBQXVCLEdBQWtDO0lBQzdELFNBQVMsRUFBRSxNQUFNO0lBQ2pCLGNBQWMsRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUMzQixRQUFRLEVBQUUsS0FBSztDQUNoQixDQUFDO0FBQ0YsTUFBTSwyQkFBMkIsR0FBcUM7SUFDcEUsK0JBQStCLEVBQUUsRUFBRTtJQUNuQyw2QkFBNkIsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDL0Msb0JBQW9CLEVBQUUsRUFBRTtJQUN4Qix3QkFBd0IsRUFBRSxHQUFHLEdB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