@modelprofile.com/flexharness 10.15.1 → 10.17.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 (54) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/classes.codesandbox.js +6 -2
  3. package/dist_ts/classes.flexharness.d.ts +36 -0
  4. package/dist_ts/classes.flexharness.js +360 -56
  5. package/dist_ts/classes.stores.d.ts +3 -1
  6. package/dist_ts/classes.stores.js +92 -2
  7. package/dist_ts/classes.toolcatalog.d.ts +18 -1
  8. package/dist_ts/classes.toolcatalog.js +179 -18
  9. package/dist_ts/interfaces.d.ts +67 -0
  10. package/dist_ts/interfaces.js +12 -2
  11. package/dist_ts/plugins.d.ts +3 -3
  12. package/dist_ts/plugins.js +3 -3
  13. package/dist_ts/utils.json.d.ts +5 -0
  14. package/dist_ts/utils.json.js +35 -1
  15. package/dist_ts/utils.results.d.ts +21 -0
  16. package/dist_ts/utils.results.js +158 -0
  17. package/dist_ts/utils.storerules.d.ts +5 -0
  18. package/dist_ts/utils.storerules.js +10 -1
  19. package/dist_ts/utils.tooloutput.d.ts +5 -2
  20. package/dist_ts/utils.tooloutput.js +10 -3
  21. package/dist_ts_stores_nosqldb/classes.nosqldbstores.d.ts +2 -1
  22. package/dist_ts_stores_nosqldb/classes.nosqldbstores.js +63 -5
  23. package/dist_ts_stores_nosqldb/classes.recordstore.d.ts +6 -3
  24. package/dist_ts_stores_nosqldb/classes.recordstore.js +8 -2
  25. package/dist_ts_typedrequest/catalog.d.ts +28 -0
  26. package/dist_ts_typedrequest/catalog.js +79 -0
  27. package/dist_ts_typedrequest/describe.d.ts +10 -0
  28. package/dist_ts_typedrequest/describe.js +189 -0
  29. package/dist_ts_typedrequest/index.d.ts +3 -0
  30. package/dist_ts_typedrequest/index.js +4 -0
  31. package/dist_ts_typedrequest/interfaces.d.ts +107 -0
  32. package/dist_ts_typedrequest/interfaces.js +2 -0
  33. package/dist_ts_typedrequest/plugins.d.ts +7 -0
  34. package/dist_ts_typedrequest/plugins.js +11 -0
  35. package/package.json +14 -4
  36. package/ts/00_commitinfo_data.ts +1 -1
  37. package/ts/classes.codesandbox.ts +5 -1
  38. package/ts/classes.flexharness.ts +419 -55
  39. package/ts/classes.stores.ts +109 -0
  40. package/ts/classes.toolcatalog.ts +177 -14
  41. package/ts/interfaces.ts +69 -1
  42. package/ts/plugins.ts +3 -0
  43. package/ts/utils.json.ts +30 -0
  44. package/ts/utils.results.ts +164 -0
  45. package/ts/utils.storerules.ts +15 -0
  46. package/ts/utils.tooloutput.ts +9 -2
  47. package/ts_stores_nosqldb/classes.nosqldbstores.ts +68 -2
  48. package/ts_stores_nosqldb/classes.recordstore.ts +14 -4
  49. package/ts_typedrequest/catalog.ts +91 -0
  50. package/ts_typedrequest/describe.ts +211 -0
  51. package/ts_typedrequest/index.ts +3 -0
  52. package/ts_typedrequest/interfaces.ts +124 -0
  53. package/ts_typedrequest/plugins.ts +15 -0
  54. package/ts_typedrequest/readme.md +66 -0
@@ -113,6 +113,11 @@ export interface IFlexToolMessagePart {
113
113
  childSessionId?: string;
114
114
  /** For a catalog call a `run_code` program made: the `run_code` call's ID. */
115
115
  parentToolCallId?: string;
116
+ /**
117
+ * For a read-only call an identical read earlier in the turn answered: that call's ID. The call
118
+ * did not run; its output is the earlier call's.
119
+ */
120
+ deduplicatedFrom?: string;
116
121
  model?: IFlexModelIdentity;
117
122
  /** ISO time the tool call began. Absent on parts recorded before part times existed. */
118
123
  startedAt?: string;
@@ -543,11 +548,44 @@ export interface IFlexToolHandle<TScope = unknown> {
543
548
  * every run: FlexHarness prepares a catalog once per object and treats it as immutable.
544
549
  */
545
550
  catalog?: IFlexToolCatalog<TScope>;
551
+ /**
552
+ * Tells read-only calls apart, by the tool's name or a catalog method's path and the call's
553
+ * input or params: they have no effect but their result. They run concurrently, may start while
554
+ * the model still streams its response, and a turn answers identical ones once. Every other call
555
+ * runs in the order the model made it, after the calls before it. A catalog method's `readOnly`
556
+ * declaration needs no classifier. It may be asked more than once about one call.
557
+ */
558
+ isReadOnlyToolCall?(call: {
559
+ toolName: string;
560
+ input: unknown;
561
+ }): boolean;
546
562
  close?(): Promise<void> | void;
547
563
  }
548
564
  export interface IFlexToolProvider<TScope> {
549
565
  provideTools(context: IFlexToolProviderContext<TScope>): Promise<IFlexToolHandle<TScope> | undefined> | IFlexToolHandle<TScope> | undefined;
550
566
  }
567
+ /** The catalog method that reads stored results, reserved while a run stores results. */
568
+ export declare const FLEX_RESULT_METHOD = "results.get";
569
+ export declare const FLEX_RESULT_LIMITS: Readonly<{
570
+ /** The most of one output a result stores; beyond it the stored value is truncated. */
571
+ maxStoredBytes: number;
572
+ /** The results a session keeps; a new one beyond them deletes the oldest. */
573
+ maxResultsPerSession: 32;
574
+ /** The size of the summary the model gets in place of the output. */
575
+ summaryBytes: number;
576
+ }>;
577
+ /** What the model gets in place of an output over the budget. */
578
+ export interface IFlexResultHandle {
579
+ $flexType: 'result';
580
+ handle: string;
581
+ /** The stored output's size as JSON. */
582
+ bytes: number;
583
+ /** The pages `results.get` reads the whole output in. */
584
+ pages: number;
585
+ summary: TJsonValue;
586
+ /** How to read it. */
587
+ read: string;
588
+ }
551
589
  /** The names of the built-in catalog tools, reserved while a run has a catalog. */
552
590
  export declare const FLEX_TOOL_CATALOG_TOOL_NAMES: Readonly<{
553
591
  readonly search: "search_tools";
@@ -690,6 +728,14 @@ export interface IFlexCatalogMethod<TScope = unknown, TParams = any, TResult = u
690
728
  declaration?: string;
691
729
  /** Runs the method with validated parameters. */
692
730
  run(params: TParams, context: IFlexCatalogRunContext<TScope>): TResult | PromiseLike<TResult> | AsyncIterable<TResult>;
731
+ /**
732
+ * The method only reads: it has no effect but its result. Its calls run concurrently with other
733
+ * read-only calls, `execute` may start one while the model still streams its response, and a
734
+ * turn answers identical calls once. Calls of other methods, and of a method with `onCall`, run
735
+ * in the order the model made them. A method that asks for permission is best left undeclared:
736
+ * the prompts of concurrent calls would overlap.
737
+ */
738
+ readOnly?: boolean;
693
739
  /**
694
740
  * Decides each validated call before it runs: `run` (the default without this hook), `propose`
695
741
  * to hand it to the catalog's `onProposals` instead of running it, or `{ deny }` to refuse it.
@@ -1110,6 +1156,21 @@ export interface IFlexToolJobStoreProvider {
1110
1156
  releaseSession?(storageKey: string, sessionId: string): Promise<void> | void;
1111
1157
  deleteSession(storageKey: string, sessionId: string): Promise<void>;
1112
1158
  }
1159
+ /**
1160
+ * Tool outputs over the output budget, stored whole for the session that produced them. A result
1161
+ * is written once under its handle and read by `results.get`; FlexHarness keeps a session's latest
1162
+ * `FLEX_RESULT_LIMITS.maxResultsPerSession` results and deletes older ones. A FlexHarness writes a
1163
+ * session's results one operation at a time, so a store need not order concurrent writes of one
1164
+ * session.
1165
+ */
1166
+ export interface IFlexResultStore {
1167
+ save(storageKey: string, sessionId: string, handle: string, value: TJsonValue): Promise<void>;
1168
+ load(storageKey: string, sessionId: string, handle: string): Promise<TJsonValue | undefined>;
1169
+ /** The handles of the session's results, oldest first. */
1170
+ list(storageKey: string, sessionId: string): Promise<string[]>;
1171
+ delete(storageKey: string, sessionId: string, handle: string): Promise<void>;
1172
+ deleteSession(storageKey: string, sessionId: string): Promise<void>;
1173
+ }
1113
1174
  export interface IFlexHarnessStores {
1114
1175
  scopes: IFlexScopeStore;
1115
1176
  projections: IFlexProjectionStore;
@@ -1117,6 +1178,12 @@ export interface IFlexHarnessStores {
1117
1178
  projectManagement: IFlexProjectManagementStore;
1118
1179
  agentEvents: IFlexAgentEventStoreProvider;
1119
1180
  jobs: IFlexToolJobStoreProvider;
1181
+ /**
1182
+ * Stores the outputs of a run with a tool catalog that exceed the output budget: the model gets a
1183
+ * summary and a handle it reads with `results.get`. Without it, such outputs are truncated to
1184
+ * the budget. The built-in stores provide it.
1185
+ */
1186
+ results?: IFlexResultStore;
1120
1187
  }
1121
1188
  export interface IFlexJsonLimits {
1122
1189
  maxDepth?: number;
@@ -16,6 +16,16 @@ export const FLEX_SESSION_IMPORT_MAXIMUM_LIMITS = Object.freeze({
16
16
  maxPageBytes: 1536 * 1024,
17
17
  stagedImportIdleTimeoutMs: 60 * 60 * 1000,
18
18
  });
19
+ /** The catalog method that reads stored results, reserved while a run stores results. */
20
+ export const FLEX_RESULT_METHOD = 'results.get';
21
+ export const FLEX_RESULT_LIMITS = Object.freeze({
22
+ /** The most of one output a result stores; beyond it the stored value is truncated. */
23
+ maxStoredBytes: 8 * 1024 * 1024,
24
+ /** The results a session keeps; a new one beyond them deletes the oldest. */
25
+ maxResultsPerSession: 32,
26
+ /** The size of the summary the model gets in place of the output. */
27
+ summaryBytes: 2 * 1024,
28
+ });
19
29
  /** The names of the built-in catalog tools, reserved while a run has a catalog. */
20
30
  export const FLEX_TOOL_CATALOG_TOOL_NAMES = Object.freeze({
21
31
  search: 'search_tools',
@@ -30,7 +40,7 @@ export const FLEX_TOOL_CATALOG_LIMITS = Object.freeze({
30
40
  maxIdentifierCharacters: 128,
31
41
  maxSummaryCharacters: 120,
32
42
  maxDescriptionBytes: 16 * 1024,
33
- maxDeclarationBytes: 16 * 1024,
43
+ maxDeclarationBytes: 64 * 1024,
34
44
  maxTags: 16,
35
45
  maxTagCharacters: 48,
36
46
  maxAliases: 16,
@@ -105,4 +115,4 @@ export const FLEX_REVERSION_MAX_AFFECTED_WORKSPACES = 64;
105
115
  export const FLEX_REVERSION_WORKSPACE_ID_MAX_BYTES = 512;
106
116
  export const FLEX_REVERSION_WORKSPACE_LABEL_MAX_BYTES = 2048;
107
117
  export const FLEX_REVERSION_REASON_CODE_MAX_BYTES = 128;
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNlRBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUErVUgsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEQsTUFBTSxFQUFFLGNBQWM7SUFDdEIsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUMsQ0FBQztBQUVaLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixH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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa1VBLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUM7SUFDakIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2pDLFlBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtJQUN6Qix5QkFBeUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsRUFBRTtJQUNsQixxQkFBcUIsRUFBRSxNQUFNO0lBQzdCLGVBQWUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDbEMsWUFBWSxFQUFFLElBQUksR0FBRyxJQUFJO0lBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUMxQyxDQUFDLENBQUM7QUF1VkgseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlDLHVGQUF1RjtJQUN2RixjQUFjLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO0lBQy9CLDZFQUE2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
@@ -68,9 +68,9 @@ export interface ICodeSandboxEngine {
68
68
  }
69
69
  /** Loads QuickJS and amaro, the optional peers code mode needs. */
70
70
  export declare const importCodeSandboxEngine: () => Promise<ICodeSandboxEngine>;
71
- import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z } from '@modelprofile.com/flexharness-agent';
72
- export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
73
- export type { IAgentAppliedInput, ISmartAiCacheDispatch, IAgentEventArchiveV2, IAgentContextCompactionOptions, IAgentEventSnapshotV2, IAgentEventStoreV2, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentObservedModelCallUsage, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
71
+ import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z } from '@modelprofile.com/flexharness-agent';
72
+ export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
73
+ export type { IAgentAppliedInput, ISmartAiCacheDispatch, IAgentEventArchiveV2, IAgentContextCompactionOptions, IAgentEventSnapshotV2, IAgentEventStoreV2, IAgentGenerateResult, IAgentGenerationHandle, IAgentGenerationLease, IAgentRetryEvent, IAgentRunResult, IAgentSession, IAgentSessionOptions, IAgentToolCallUpdateEvent, IAgentToolExecutionOptions, IAgentRuntimeEventPayload, IGenerationBegunEvent, IGenerationExecutionCompletedEvent, IGenerationExecutionStartedEvent, IGenerationOutcomeEvent, IToolExecutionContext, IToolExecutionIntentEvent, IToolJobSnapshot, IToolJobState, IToolJobStore, TAgentContextBuilder, TAgentContextCompactor, TAgentEvent, TAgentGenerationOutcome, TAgentModelCallUsage, TAgentModelCallUsageEvent, TAgentObservedModelCallUsage, TAgentRetryReason, TAgentToolCallFinishEvent, TAgentToolExecutionReconciliationOptions, } from '@modelprofile.com/flexharness-agent';
74
74
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
75
75
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
76
76
  export type { IModelLimitInfo } from '@modelprofile.com/flexharness-models';
@@ -23,8 +23,8 @@ export const importCodeSandboxEngine = async () => {
23
23
  };
24
24
  };
25
25
  // @push.rocks scope
26
- import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, } from '@modelprofile.com/flexharness-agent';
27
- export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
26
+ import { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, } from '@modelprofile.com/flexharness-agent';
27
+ export { AgentEventStoreConflictError, AgentPendingInputQueue, AgentPendingInputRejectedError, AgentSession, AgentToolCallScheduler, buildModelMessages, ToolJobStoreConflictError, createAgentEvent, filterModelVisibleAgentEvents, getAgentGenerationTransactions, isGenerationInModelContext, modelMessagesToAgentEvents, tool, validateAgentEventArchiveV2, validateAgentEventSnapshotV2, z, };
28
28
  import { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo } from '@modelprofile.com/flexharness-models';
29
29
  export { getSmartAiCacheWaitMs, isModelLimitError, isModelLimitInfo };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0FBa0VyRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxJQUFpQyxFQUFFO0lBQzdFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxNQUFNLENBQUMseUJBQXlCLENBQUM7UUFDakMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsNEZBQTRGO0lBQzVGLE1BQU0sY0FBYyxHQUFJLE9BQWdDLENBQUMsT0FBcUUsQ0FBQztJQUMvSCxPQUFPO1FBQ0wsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsY0FBYyxDQUE4QjtRQUM5RyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtLQUNqRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLENBQUMsR0FDRixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLElBQUksRUFDSiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLENBQUMsR0FDRixDQUFDO0FBc0NGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWxILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDIn0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0FBa0VyRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxJQUFpQyxFQUFFO0lBQzdFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxNQUFNLENBQUMseUJBQXlCLENBQUM7UUFDakMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsNEZBQTRGO0lBQzVGLE1BQU0sY0FBYyxHQUFJLE9BQWdDLENBQUMsT0FBcUUsQ0FBQztJQUMvSCxPQUFPO1FBQ0wsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsY0FBYyxDQUE4QjtRQUM5RyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtLQUNqRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLDZCQUE2QixFQUM3Qiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixDQUFDLEdBQ0YsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQiw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsSUFBSSxFQUNKLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsQ0FBQyxHQUNGLENBQUM7QUF1Q0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFbEgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLENBQUMifQ==
@@ -13,6 +13,11 @@ export declare function assertFlexProjectionSnapshotV2(value: unknown): asserts
13
13
  export declare function assertFlexProjectionSnapshotV3(value: unknown): asserts value is IFlexProjectionSnapshotV3;
14
14
  export declare function assertFlexProjectionSnapshot(value: unknown): asserts value is IFlexProjectionSnapshotV1 | IFlexProjectionSnapshotV2 | IFlexProjectionSnapshotV3;
15
15
  export declare function assertFlexPermissionSnapshot(value: unknown): asserts value is IFlexPermissionSnapshot;
16
+ /**
17
+ * The JSON text of a plain JSON value with every object's keys sorted, so equal values read the
18
+ * same; undefined for anything else, such as a Date or a Map, whose JSON could equal another's.
19
+ */
20
+ export declare function canonicalJson(value: unknown): string | undefined;
16
21
  export declare function cloneSerializable<T>(value: T): T;
17
22
  export declare function deepFreeze<T>(value: T): T;
18
23
  export declare function serializeAgentMessages(messages: TFlexAgentModelMessage[]): TFlexAgentModelMessage[];