@dbx-tools/appkit-web-search 0.9.70 → 0.9.72

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.
package/lib/src/plugin.js CHANGED
@@ -21,7 +21,7 @@ import { log, stringUtils } from "@dbx-tools/shared-core";
21
21
  import { MODEL_ENV, SERVING_ENDPOINT_ENV, WEB_SEARCH_CONFIG_SCHEMA, } from "./config.js";
22
22
  import { runWebFetch } from "./fetch.js";
23
23
  import { createWebSearchRuntime } from "./runtime.js";
24
- import { webFetchRequestSchema, webSearchRequestSchema, WEB_FETCH_TOOL_DESCRIPTION, WEB_SEARCH_TOOL_DESCRIPTION, } from "./schema.js";
24
+ import { webFetchRequestSchema, webSearchToolRequestSchema, WEB_FETCH_TOOL_DESCRIPTION, WEB_SEARCH_TOOL_DESCRIPTION, } from "./schema.js";
25
25
  import { resolveWebSearchContext, runWebSearch } from "./search.js";
26
26
  const logger = log.logger("web-search");
27
27
  /**
@@ -116,10 +116,10 @@ export class WebSearchPlugin extends ToolRegistryPlugin {
116
116
  toolRegistry = {
117
117
  web_search: defineTool({
118
118
  description: WEB_SEARCH_TOOL_DESCRIPTION,
119
- schema: webSearchRequestSchema,
119
+ schema: webSearchToolRequestSchema,
120
120
  annotations: { effect: "read", requiresUserContext: true },
121
121
  autoInheritable: false,
122
- execute: async (args, signal) => this.search(webSearchRequestSchema.parse(args), signal),
122
+ execute: async (args, signal) => this.search(webSearchToolRequestSchema.parse(args), signal),
123
123
  }),
124
124
  web_fetch: defineTool({
125
125
  description: WEB_FETCH_TOOL_DESCRIPTION,
@@ -129,6 +129,16 @@ export class WebSearchPlugin extends ToolRegistryPlugin {
129
129
  execute: async (args, signal) => this.fetch(webFetchRequestSchema.parse(args), signal),
130
130
  }),
131
131
  };
132
+ /** Dispatch with the actual calling model and optional host progress sink. */
133
+ executeAgentTool(name, args, signal, context) {
134
+ if (name !== "web_search")
135
+ return super.executeAgentTool(name, args, signal, context);
136
+ const request = webSearchToolRequestSchema.parse(args);
137
+ return this.search({
138
+ ...request,
139
+ ...(context?.model ? { model: context.model } : {}),
140
+ }, signal, context?.writeProgress);
141
+ }
132
142
  /**
133
143
  * Log the effective policy so an active allow-list and caps are obvious at
134
144
  * boot. Runtime construction already resolved config and captured this
@@ -173,8 +183,8 @@ export class WebSearchPlugin extends ToolRegistryPlugin {
173
183
  fetch: (request, signal) => this.fetch(request, signal),
174
184
  };
175
185
  }
176
- async search(request, signal) {
177
- return runWebSearch(request, this.runtime, await resolveWebSearchContext(), signal);
186
+ async search(request, signal, writeProgress) {
187
+ return runWebSearch(request, this.runtime, await resolveWebSearchContext(), signal, writeProgress);
178
188
  }
179
189
  async fetch(request, signal) {
180
190
  return runWebFetch(request, this.runtime, signal);
@@ -206,4 +216,4 @@ export class WebSearchPlugin extends ToolRegistryPlugin {
206
216
  * ```
207
217
  */
208
218
  export const webSearch = toPlugin(WebSearchPlugin);
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFFBQVEsR0FHVCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsU0FBUyxFQUNULG9CQUFvQixFQUNwQix3QkFBd0IsR0FFekIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQXlCLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQiwyQkFBMkIsR0FDNUIsTUFBTSxhQUFhLENBQUM7QUFPckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRXhDOzs7Ozs7R0FNRztBQUNILE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsSUFBSSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7SUFDbkMsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLFdBQVcsRUFDVCx5RkFBeUY7UUFDekYsb0VBQW9FO0lBQ3RFLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLE1BQU0sRUFBRTtRQUNOLElBQUksRUFBRTtZQUNKLEdBQUcsRUFBRSxvQkFBb0I7WUFDekIsV0FBVyxFQUFFLHlDQUF5QyxTQUFTLGdCQUFnQjtZQUMvRSxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsVUFBVSxFQUFFLHFFQUFxRTtnQkFDakYsV0FBVyxFQUFFLE9BQU87YUFDckI7U0FDRjtLQUNGO0NBQzhDLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQXlDO0lBQzVFLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsSUFBSSxFQUFFLFlBQVk7UUFDbEIsV0FBVyxFQUFFLFlBQVk7UUFDekIsV0FBVyxFQUNULDRFQUE0RTtZQUM1RSw4RUFBOEU7WUFDOUUsdURBQXVEO1FBQ3pELFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLENBQUMseUJBQXlCLENBQUM7U0FDdEM7UUFDRCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7S0FDTixDQUFDO0lBRXpDLHlEQUF5RDtJQUN4QyxPQUFPLEdBQXFCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDaEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQzNCLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxNQUE2QjtRQUMxRCxNQUFNLE1BQU0sR0FDVixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ2dCLFlBQVksR0FBaUI7UUFDOUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztZQUNyQixXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLE1BQU0sRUFBRSxzQkFBc0I7WUFDOUIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7WUFDMUQsZUFBZSxFQUFFLEtBQUs7WUFDdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDekYsQ0FBQztRQUNGLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDcEIsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxNQUFNLEVBQUUscUJBQXFCO1lBQzdCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1lBQzFELGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO1NBQ3ZGLENBQUM7S0FDSCxDQUFDO0lBRUY7Ozs7T0FJRztJQUNNLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLGNBQWMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDeEUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDakMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDOUIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTztJQUNULENBQUM7SUFFRCwwREFBMEQ7SUFDakQscUJBQXFCO1FBQzVCLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFUSxPQUFPO1FBQ2QsT0FBTztZQUNMOzs7O2VBSUc7WUFDSCxNQUFNLEVBQUUsQ0FBQyxPQUF5QixFQUFFLE1BQW9CLEVBQTRCLEVBQUUsQ0FDcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzlCOzs7ZUFHRztZQUNILEtBQUssRUFBRSxDQUFDLE9BQXdCLEVBQUUsTUFBb0IsRUFBMkIsRUFBRSxDQUNqRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXlCLEVBQUUsTUFBb0I7UUFDbEUsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQXdCLEVBQUUsTUFBb0I7UUFDaEUsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUFHSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IHBsdWdpbiAocmVnaXN0ZXJlZCBuYW1lOiBgd2ViLXNlYXJjaGApIHRoYXQgb3ducyB0aGUgcmVzb2x2ZWRcbiAqIHdlYi1zZWFyY2ggcnVudGltZSAtIHRoZSBVUkwgcG9saWN5LCByZXN1bHQgLyBsZW5ndGggY2FwcywgdGltZW91dCwgYW5kXG4gKiBkZWZhdWx0IGFwcHJvdmFsIGdhdGUgaXRzIHRvb2xzIHJlYWQuIFJlZ2lzdGVyaW5nIGl0IHJlc29sdmVzIGFuZCBsb2dzIHRoZVxuICogZWZmZWN0aXZlIGNvbmZpZyAod2hpY2ggVVJMIHBvbGljeSBpcyBpbiBmb3JjZSwgdGhlIGNhcHMpIHNvIGFcbiAqIG1pc2NvbmZpZ3VyYXRpb24gaXMgdmlzaWJsZSBpbiB0aGUgYm9vdCBsb2dzIHJhdGhlciB0aGFuIG9uIHRoZSBmaXJzdFxuICogc2VhcmNoLiBUaGUgcGx1Z2luJ3MgYGV4ZWN1dGUoKWAgaXMgY2FwdHVyZWQgYnkgaXRzIG93biBydW50aW1lIHNvIGV2ZXJ5XG4gKiBvdXRib3VuZCBjYWxsIHBpY2tzIHVwIEFwcEtpdCdzIGNhY2hlIC8gcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gYWxzbyBpbXBsZW1lbnRzIEFwcEtpdCdzIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgZ2V0c1xuICogYHdlYl9zZWFyY2hgIC8gYHdlYl9mZXRjaGAgd2l0aG91dCBnb2luZyB0aHJvdWdoIE1hc3RyYS4gQXBwLWludGVncmF0ZWRcbiAqIE1hc3RyYSBhZ2VudHMgY29uc3VtZSB0aGlzIHByb3ZpZGVyIHRocm91Z2ggYHBsdWdpbnNbXCJ3ZWItc2VhcmNoXCJdLnRvb2xraXQoKWA7XG4gKiBzdGFuZGFsb25lIGZhY3RvcmllcyBpbiBgdG9vbC50c2AgdXNlIHRoZWlyIG93biBleHBsaWNpdCBydW50aW1lIG9yIGNvbmZpZy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgUmVzb3VyY2VUeXBlLFxuICB0b1BsdWdpbixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbiAgdHlwZSBSZXNvdXJjZVJlcXVpcmVtZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVUb29sLCB0eXBlIFRvb2xSZWdpc3RyeSB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHsgVG9vbFJlZ2lzdHJ5UGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1PREVMX0VOVixcbiAgU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gIFdFQl9TRUFSQ0hfQ09ORklHX1NDSEVNQSxcbiAgdHlwZSBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcnVuV2ViRmV0Y2ggfSBmcm9tIFwiLi9mZXRjaC50c1wiO1xuaW1wb3J0IHsgY3JlYXRlV2ViU2VhcmNoUnVudGltZSwgdHlwZSBXZWJTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICBXRUJfRkVUQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgV2ViRmV0Y2hSZXF1ZXN0LFxuICBXZWJGZXRjaFJlc3VsdCxcbiAgV2ViU2VhcmNoUmVxdWVzdCxcbiAgV2ViU2VhcmNoUmVzdWx0LFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0LCBydW5XZWJTZWFyY2ggfSBmcm9tIFwiLi9zZWFyY2gudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2hcIik7XG5cbi8qKlxuICogVGhlIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgcnVucyBvbi4gRGVjbGFyZWRcbiAqIG9wdGlvbmFsIGJlY2F1c2UgdGhlIHBsdWdpbiByZXNvbHZlcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCBmcm9tIHRoZVxuICogbGl2ZSBjYXRhbG9ndWUgd2hlbiBub3RoaW5nIGlzIHBpbm5lZDsge0BsaW5rIFdlYlNlYXJjaFBsdWdpbi5nZXRSZXNvdXJjZVJlcXVpcmVtZW50c31cbiAqIHByb21vdGVzIGl0IHRvIHJlcXVpcmVkIG9uY2UgYSBkZXBsb3ltZW50IG5hbWVzIG9uZS4gYENBTl9RVUVSWWAgaXMgdGhlXG4gKiB3ZWFrZXN0IHBlcm1pc3Npb24gdGhhdCBjYW4gaW52b2tlIGFuIGVuZHBvaW50LlxuICovXG5jb25zdCBTRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFID0ge1xuICB0eXBlOiBSZXNvdXJjZVR5cGUuU0VSVklOR19FTkRQT0lOVCxcbiAgYWxpYXM6IFwiV2ViIFNlYXJjaCBFbmRwb2ludFwiLFxuICByZXNvdXJjZUtleTogXCJ3ZWItc2VhcmNoLWVuZHBvaW50XCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiTW9kZWwgU2VydmluZyBlbmRwb2ludCBydW5uaW5nIHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sLiBPcHRpb25hbDogcmVzb2x2ZWQgZnJvbSB0aGUgXCIgK1xuICAgIFwid29ya3NwYWNlIGNhdGFsb2d1ZSAoR2VtaW5pLCB0aGVuIEdQVCkgd2hlbiBubyBlbmRwb2ludCBpcyBwaW5uZWQuXCIsXG4gIHBlcm1pc3Npb246IFwiQ0FOX1FVRVJZXCIsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IHtcbiAgICAgIGVudjogU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlcnZpbmcgZW5kcG9pbnQgbmFtZSBmb3Igd2ViIHNlYXJjaC4gJHtNT0RFTF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgICAgZGlzY292ZXJ5OiB7XG4gICAgICAgIHR5cGU6IFwiY2xpXCIsXG4gICAgICAgIGNsaUNvbW1hbmQ6IFwiZGF0YWJyaWNrcyBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IC0tcHJvZmlsZSA8UFJPRklMRT4gLS1vdXRwdXQganNvblwiLFxuICAgICAgICBzZWxlY3RGaWVsZDogXCIubmFtZVwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSBzYXRpc2ZpZXMgT21pdDxSZXNvdXJjZVJlcXVpcmVtZW50LCBcInJlcXVpcmVkXCI+O1xuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gdGhhdCByZXNvbHZlcyBhbmQgaG9sZHMgdGhlIHdlYi1zZWFyY2ggcnVudGltZSBjb25maWcgdXNlZFxuICogYnkgdGhlIGB3ZWJfc2VhcmNoYCAvIGB3ZWJfZmV0Y2hgIHRvb2xzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyB3ZWJTZWFyY2ggfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtd2ViLXNlYXJjaFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICB3ZWJTZWFyY2goe1xuICogICAgICAgbW9kZWw6IFwiZ2VtaW5pXCIsXG4gKiAgICAgICB1cmxQb2xpY3k6IFwiYWxsb3dsaXN0XCIsXG4gKiAgICAgICBhbGxvd2VkVXJsczogW1wiKi5kYXRhYnJpY2tzLmNvbVwiXSxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJTZWFyY2hQbHVnaW4gZXh0ZW5kcyBUb29sUmVnaXN0cnlQbHVnaW48V2ViU2VhcmNoUGx1Z2luQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcIndlYi1zZWFyY2hcIixcbiAgICBkaXNwbGF5TmFtZTogXCJXZWIgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaGVzIHRoZSB3ZWIgdGhyb3VnaCB0aGUgRGF0YWJyaWNrcyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sIG9uIGl0cyBvd24gXCIgK1xuICAgICAgXCJ3ZWItY2FwYWJsZSBzZXJ2aW5nIGVuZHBvaW50LCBhbmQgZmV0Y2hlcyBwYWdlcyB2aWEgZ290LXNjcmFwaW5nLCBiZWhpbmQgYW4gXCIgK1xuICAgICAgXCJvcHRpb25hbCBVUkwgYWxsb3ctbGlzdCBhbmQgcGVyLXRvb2wgYXBwcm92YWwgZ2F0aW5nLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW1NFUlZJTkdfRU5EUE9JTlRfUkVTT1VSQ0VdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwid2ViLXNlYXJjaFwiPjtcblxuICAvKiogUnVudGltZSBvd25lZCBleGNsdXNpdmVseSBieSB0aGlzIHBsdWdpbiBpbnN0YW5jZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lOiBXZWJTZWFyY2hSdW50aW1lID0gY3JlYXRlV2ViU2VhcmNoUnVudGltZSh0aGlzLmNvbmZpZywgKGZuLCBzZXR0aW5ncykgPT5cbiAgICB0aGlzLmV4ZWN1dGUoZm4sIHNldHRpbmdzKSxcbiAgKTtcblxuICAvKipcbiAgICogUHJvbW90ZSB0aGUgc2VydmluZyBlbmRwb2ludCB0byBhIHJlcXVpcmVkIHJlc291cmNlIG9uY2UgYSBkZXBsb3ltZW50XG4gICAqIHBpbnMgb25lLCB0aHJvdWdoIHBsdWdpbiBjb25maWcgb3IgZWl0aGVyIGVudmlyb25tZW50IG5hbWUuIExlZnQgb3B0aW9uYWxcbiAgICogb3RoZXJ3aXNlLCBiZWNhdXNlIHRoZSBwbHVnaW4gcGlja3MgYSB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnQgb3V0IG9mXG4gICAqIHRoZSBsaXZlIGNhdGFsb2d1ZSBvbiBpdHMgb3duLlxuICAgKi9cbiAgc3RhdGljIGdldFJlc291cmNlUmVxdWlyZW1lbnRzKGNvbmZpZzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnKTogUmVzb3VyY2VSZXF1aXJlbWVudFtdIHtcbiAgICBjb25zdCBwaW5uZWQgPVxuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChjb25maWcubW9kZWwpID8/XG4gICAgICBzdHJpbmdVdGlscy50cmltVG9OdWxsKHByb2Nlc3MuZW52W01PREVMX0VOVl0pID8/XG4gICAgICBzdHJpbmdVdGlscy50cmltVG9OdWxsKHByb2Nlc3MuZW52W1NFUlZJTkdfRU5EUE9JTlRfRU5WXSk7XG4gICAgcmV0dXJuIHBpbm5lZCA9PT0gbnVsbCA/IFtdIDogW3sgLi4uU0VSVklOR19FTkRQT0lOVF9SRVNPVVJDRSwgcmVxdWlyZWQ6IHRydWUgfV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuIEJvdGggYXJlIHJlYWRzIGFuZCBib3RoXG4gICAqIHJ1biB1bmRlciB0aGUgY2FsbGVyJ3MgaWRlbnRpdHkuXG4gICAqXG4gICAqIE5laXRoZXIgaXMgYGF1dG9Jbmhlcml0YWJsZWAuIGB3ZWJfZmV0Y2hgIHJlYWNoZXMgYSBVUkwgdGhlIG1vZGVsIGNob3NlLFxuICAgKiB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBpbnNpZGUgdGhlIHdvcmtzcGFjZSBuZXR3b3JrLCBzbyBpdCBtdXN0IG9ubHlcbiAgICogYXBwZWFyIGluIGFuIGFnZW50IHRoYXQgYXNrZWQgZm9yIGl0IGFuZCBhY2NlcHRlZCB0aGUgVVJMIHBvbGljeSB0aGF0XG4gICAqIGNvbWVzIHdpdGggaXQuIGB3ZWJfc2VhcmNoYCBpcyBzYWZlciBidXQgc3RpbGwgc3BlbmRzIHNlcnZpbmcgdG9rZW5zIG9uXG4gICAqIGV2ZXJ5IGNhbGwsIHNvIGl0IGlzIG9wdC1pbiBmb3IgY29zdCByYXRoZXIgdGhhbiBmb3Igc2FmZXR5LlxuICAgKlxuICAgKiBgZXhlY3V0ZWAgcmUtcGFyc2VzIGl0cyBhcmd1bWVudHMgd2l0aCB0aGUgbG9jYWwgc2NoZW1hOiBBcHBLaXQgdmFsaWRhdGVzXG4gICAqIGFnYWluc3QgdGhlIHNhbWUgc2NoZW1hIGZpcnN0LCBidXQgcmUtcGFyc2luZyBpcyB3aGF0IGdpdmVzIHRoZSBib2R5IHR5cGVkXG4gICAqIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGB1bmtub3duYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSA9IHtcbiAgICB3ZWJfc2VhcmNoOiBkZWZpbmVUb29sKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBXRUJfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgICBzY2hlbWE6IHdlYlNlYXJjaFJlcXVlc3RTY2hlbWEsXG4gICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5zZWFyY2god2ViU2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKSwgc2lnbmFsKSxcbiAgICB9KSxcbiAgICB3ZWJfZmV0Y2g6IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsXG4gICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5mZXRjaCh3ZWJGZXRjaFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyksIHNpZ25hbCksXG4gICAgfSksXG4gIH07XG5cbiAgLyoqXG4gICAqIExvZyB0aGUgZWZmZWN0aXZlIHBvbGljeSBzbyBhbiBhY3RpdmUgYWxsb3ctbGlzdCBhbmQgY2FwcyBhcmUgb2J2aW91cyBhdFxuICAgKiBib290LiBSdW50aW1lIGNvbnN0cnVjdGlvbiBhbHJlYWR5IHJlc29sdmVkIGNvbmZpZyBhbmQgY2FwdHVyZWQgdGhpc1xuICAgKiBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbi5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzLnJ1bnRpbWU7XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICBtb2RlbDogY29uZmlnLm1vZGVsID8/IGBmYWxsYmFja3M6WyR7Y29uZmlnLm1vZGVsRmFsbGJhY2tzLmpvaW4oXCIsIFwiKX1dYCxcbiAgICAgIG1vZGVsU291cmNlOiBjb25maWcubW9kZWxTb3VyY2UsXG4gICAgICB1cmxQb2xpY3k6IGNvbmZpZy51cmxQb2xpY3ksXG4gICAgICAuLi4oY29uZmlnLmFsbG93TGlzdC5yZXN0cmljdGVkID8geyBhbGxvd2VkVXJsczogY29uZmlnLmFsbG93TGlzdC5wYXR0ZXJucyB9IDoge30pLFxuICAgICAgbWF4Q2l0YXRpb25zOiBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgZmV0Y2hNYXhMZW5ndGg6IGNvbmZpZy5mZXRjaE1heExlbmd0aCxcbiAgICAgIGFwcHJvdmFsOiBjb25maWcuYXBwcm92YWwubW9kZSxcbiAgICAgIHNjcmFwZUZhbGxiYWNrOiBjb25maWcuc2NyYXBlRmFsbGJhY2ssXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTm8gcnVudGltZSByZXNvdXJjZXMgcmVxdWlyZSBkcmFpbmluZy4gVGhlIGluc3RhbmNlLW93bmVkIGNvbmZpZyBhbmRcbiAgICogZXhlY3V0b3IgYmVjb21lIHVucmVhY2hhYmxlIHdpdGggdGhpcyBwbHVnaW4uXG4gICAqL1xuICBzaHV0ZG93bigpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogQWJvcnQgaW4tZmxpZ2h0IHdvcmsgb3duZWQgYnkgdGhpcyBwbHVnaW4gaW5zdGFuY2UuICovXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogUnVuIGEgd2ViIHNlYXJjaCBkaXJlY3RseSAoYnlwYXNzaW5nIHRoZSBhZ2VudCB0b29sKS4gUmVzb2x2ZXMgdGhlXG4gICAgICAgKiBPQk8gY2xpZW50IGZyb20gdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBhbmQgcmVhZHMgdGhpcyBwbHVnaW4nc1xuICAgICAgICogcnVudGltZSBjb25maWcuXG4gICAgICAgKi9cbiAgICAgIHNlYXJjaDogKHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJTZWFyY2hSZXN1bHQ+ID0+XG4gICAgICAgIHRoaXMuc2VhcmNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKipcbiAgICAgICAqIEZldGNoIG9uZSBVUkwgZGlyZWN0bHkgKGJ5cGFzc2luZyB0aGUgYWdlbnQgdG9vbCkuIEVuZm9yY2VzIHRoZVxuICAgICAgICogY29uZmlndXJlZCBVUkwgcG9saWN5LlxuICAgICAgICovXG4gICAgICBmZXRjaDogKHJlcXVlc3Q6IFdlYkZldGNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFdlYkZldGNoUmVzdWx0PiA9PlxuICAgICAgICB0aGlzLmZldGNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJTZWFyY2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gcnVuV2ViU2VhcmNoKHJlcXVlc3QsIHRoaXMucnVudGltZSwgYXdhaXQgcmVzb2x2ZVdlYlNlYXJjaENvbnRleHQoKSwgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2gocmVxdWVzdDogV2ViRmV0Y2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViRmV0Y2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gcnVuV2ViRmV0Y2gocmVxdWVzdCwgdGhpcy5ydW50aW1lLCBzaWduYWwpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHdlYi1zZWFyY2ggcnVudGltZSB3aXRoIEFwcEtpdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgd2ViU2VhcmNoIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGFnZW50cywgbWFzdHJhIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHJlc2VhcmNoZXIgPSBhZ2VudHMuY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiUmVzZWFyY2ggcXVlc3Rpb25zIHdpdGggd2ViX3NlYXJjaCwgdGhlbiByZWFkIHNvdXJjZXMgd2l0aCB3ZWJfZmV0Y2guXCIsXG4gKiAgIGFzeW5jIHRvb2xzKHBsdWdpbnMpIHtcbiAqICAgICByZXR1cm4geyAuLi4oYXdhaXQgcGx1Z2luc1tcIndlYi1zZWFyY2hcIl0udG9vbGtpdCgpKSB9O1xuICogICB9LFxuICogfSk7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHdlYlNlYXJjaCh7IG1vZGVsOiBcImdlbWluaVwiIH0pLFxuICogICAgIG1hc3RyYSh7IGFnZW50czogcmVzZWFyY2hlciB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2ggPSB0b1BsdWdpbihXZWJTZWFyY2hQbHVnaW4pO1xuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFFBQVEsR0FHVCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsU0FBUyxFQUNULG9CQUFvQixFQUNwQix3QkFBd0IsR0FFekIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQXlCLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQiwyQkFBMkIsR0FDNUIsTUFBTSxhQUFhLENBQUM7QUFPckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRXhDOzs7Ozs7R0FNRztBQUNILE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsSUFBSSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7SUFDbkMsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLFdBQVcsRUFDVCx5RkFBeUY7UUFDekYsb0VBQW9FO0lBQ3RFLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLE1BQU0sRUFBRTtRQUNOLElBQUksRUFBRTtZQUNKLEdBQUcsRUFBRSxvQkFBb0I7WUFDekIsV0FBVyxFQUFFLHlDQUF5QyxTQUFTLGdCQUFnQjtZQUMvRSxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsVUFBVSxFQUFFLHFFQUFxRTtnQkFDakYsV0FBVyxFQUFFLE9BQU87YUFDckI7U0FDRjtLQUNGO0NBQzhDLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQXlDO0lBQzVFLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsSUFBSSxFQUFFLFlBQVk7UUFDbEIsV0FBVyxFQUFFLFlBQVk7UUFDekIsV0FBVyxFQUNULDRFQUE0RTtZQUM1RSw4RUFBOEU7WUFDOUUsdURBQXVEO1FBQ3pELFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLENBQUMseUJBQXlCLENBQUM7U0FDdEM7UUFDRCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7S0FDTixDQUFDO0lBRXpDLHlEQUF5RDtJQUN4QyxPQUFPLEdBQXFCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDaEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQzNCLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxNQUE2QjtRQUMxRCxNQUFNLE1BQU0sR0FDVixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ2dCLFlBQVksR0FBaUI7UUFDOUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztZQUNyQixXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLE1BQU0sRUFBRSwwQkFBMEI7WUFDbEMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7WUFDMUQsZUFBZSxFQUFFLEtBQUs7WUFDdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7U0FDN0YsQ0FBQztRQUNGLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDcEIsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxNQUFNLEVBQUUscUJBQXFCO1lBQzdCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1lBQzFELGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO1NBQ3ZGLENBQUM7S0FDSCxDQUFDO0lBRUYsOEVBQThFO0lBQ3JFLGdCQUFnQixDQUN2QixJQUFZLEVBQ1osSUFBYSxFQUNiLE1BQW9CLEVBQ3BCLE9BQW1DO1FBRW5DLElBQUksSUFBSSxLQUFLLFlBQVk7WUFBRSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RixNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUNoQjtZQUNFLEdBQUcsT0FBTztZQUNWLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNwRCxFQUNELE1BQU0sRUFDTixPQUFPLEVBQUUsYUFBYSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxjQUFjLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ3hFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEYsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztZQUNyQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQzlCLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU87SUFDVCxDQUFDO0lBRUQsMERBQTBEO0lBQ2pELHFCQUFxQjtRQUM1QixLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRVEsT0FBTztRQUNkLE9BQU87WUFDTDs7OztlQUlHO1lBQ0gsTUFBTSxFQUFFLENBQUMsT0FBeUIsRUFBRSxNQUFvQixFQUE0QixFQUFFLENBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM5Qjs7O2VBR0c7WUFDSCxLQUFLLEVBQUUsQ0FBQyxPQUF3QixFQUFFLE1BQW9CLEVBQTJCLEVBQUUsQ0FDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLE1BQU0sQ0FDbEIsT0FBeUIsRUFDekIsTUFBb0IsRUFDcEIsYUFBMEQ7UUFFMUQsT0FBTyxZQUFZLENBQ2pCLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxFQUNaLE1BQU0sdUJBQXVCLEVBQUUsRUFDL0IsTUFBTSxFQUNOLGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBd0IsRUFBRSxNQUFvQjtRQUNoRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOztBQUdIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGB3ZWItc2VhcmNoYCkgdGhhdCBvd25zIHRoZSByZXNvbHZlZFxuICogd2ViLXNlYXJjaCBydW50aW1lIC0gdGhlIFVSTCBwb2xpY3ksIHJlc3VsdCAvIGxlbmd0aCBjYXBzLCB0aW1lb3V0LCBhbmRcbiAqIGRlZmF1bHQgYXBwcm92YWwgZ2F0ZSBpdHMgdG9vbHMgcmVhZC4gUmVnaXN0ZXJpbmcgaXQgcmVzb2x2ZXMgYW5kIGxvZ3MgdGhlXG4gKiBlZmZlY3RpdmUgY29uZmlnICh3aGljaCBVUkwgcG9saWN5IGlzIGluIGZvcmNlLCB0aGUgY2Fwcykgc28gYVxuICogbWlzY29uZmlndXJhdGlvbiBpcyB2aXNpYmxlIGluIHRoZSBib290IGxvZ3MgcmF0aGVyIHRoYW4gb24gdGhlIGZpcnN0XG4gKiBzZWFyY2guIFRoZSBwbHVnaW4ncyBgZXhlY3V0ZSgpYCBpcyBjYXB0dXJlZCBieSBpdHMgb3duIHJ1bnRpbWUgc28gZXZlcnlcbiAqIG91dGJvdW5kIGNhbGwgcGlja3MgdXAgQXBwS2l0J3MgY2FjaGUgLyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uXG4gKlxuICogVGhlIHBsdWdpbiBhbHNvIGltcGxlbWVudHMgQXBwS2l0J3MgYFRvb2xQcm92aWRlcmAsIHNvIGFuIEFwcEtpdCBhZ2VudCBnZXRzXG4gKiBgd2ViX3NlYXJjaGAgLyBgd2ViX2ZldGNoYCB3aXRob3V0IGdvaW5nIHRocm91Z2ggTWFzdHJhLiBBcHAtaW50ZWdyYXRlZFxuICogTWFzdHJhIGFnZW50cyBjb25zdW1lIHRoaXMgcHJvdmlkZXIgdGhyb3VnaCBgcGx1Z2luc1tcIndlYi1zZWFyY2hcIl0udG9vbGtpdCgpYDtcbiAqIHN0YW5kYWxvbmUgZmFjdG9yaWVzIGluIGB0b29sLnRzYCB1c2UgdGhlaXIgb3duIGV4cGxpY2l0IHJ1bnRpbWUgb3IgY29uZmlnLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBSZXNvdXJjZVR5cGUsXG4gIHRvUGx1Z2luLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxuICB0eXBlIFJlc291cmNlUmVxdWlyZW1lbnQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRlZmluZVRvb2wsIHR5cGUgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBUb29sUmVnaXN0cnlQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnRUb29sRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC90b29sLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBsb2csIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1PREVMX0VOVixcbiAgU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gIFdFQl9TRUFSQ0hfQ09ORklHX1NDSEVNQSxcbiAgdHlwZSBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcnVuV2ViRmV0Y2ggfSBmcm9tIFwiLi9mZXRjaC50c1wiO1xuaW1wb3J0IHsgY3JlYXRlV2ViU2VhcmNoUnVudGltZSwgdHlwZSBXZWJTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJTZWFyY2hUb29sUmVxdWVzdFNjaGVtYSxcbiAgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sXG4gIFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFdlYkZldGNoUmVxdWVzdCxcbiAgV2ViRmV0Y2hSZXN1bHQsXG4gIFdlYlNlYXJjaFJlcXVlc3QsXG4gIFdlYlNlYXJjaFJlc3VsdCxcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlV2ViU2VhcmNoQ29udGV4dCwgcnVuV2ViU2VhcmNoIH0gZnJvbSBcIi4vc2VhcmNoLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ3ZWItc2VhcmNoXCIpO1xuXG4vKipcbiAqIFRoZSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IHRoZSBuYXRpdmUgd2ViLXNlYXJjaCB0b29sIHJ1bnMgb24uIERlY2xhcmVkXG4gKiBvcHRpb25hbCBiZWNhdXNlIHRoZSBwbHVnaW4gcmVzb2x2ZXMgYSB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnQgZnJvbSB0aGVcbiAqIGxpdmUgY2F0YWxvZ3VlIHdoZW4gbm90aGluZyBpcyBwaW5uZWQ7IHtAbGluayBXZWJTZWFyY2hQbHVnaW4uZ2V0UmVzb3VyY2VSZXF1aXJlbWVudHN9XG4gKiBwcm9tb3RlcyBpdCB0byByZXF1aXJlZCBvbmNlIGEgZGVwbG95bWVudCBuYW1lcyBvbmUuIGBDQU5fUVVFUllgIGlzIHRoZVxuICogd2Vha2VzdCBwZXJtaXNzaW9uIHRoYXQgY2FuIGludm9rZSBhbiBlbmRwb2ludC5cbiAqL1xuY29uc3QgU0VSVklOR19FTkRQT0lOVF9SRVNPVVJDRSA9IHtcbiAgdHlwZTogUmVzb3VyY2VUeXBlLlNFUlZJTkdfRU5EUE9JTlQsXG4gIGFsaWFzOiBcIldlYiBTZWFyY2ggRW5kcG9pbnRcIixcbiAgcmVzb3VyY2VLZXk6IFwid2ViLXNlYXJjaC1lbmRwb2ludFwiLFxuICBkZXNjcmlwdGlvbjpcbiAgICBcIk1vZGVsIFNlcnZpbmcgZW5kcG9pbnQgcnVubmluZyB0aGUgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbC4gT3B0aW9uYWw6IHJlc29sdmVkIGZyb20gdGhlIFwiICtcbiAgICBcIndvcmtzcGFjZSBjYXRhbG9ndWUgKEdlbWluaSwgdGhlbiBHUFQpIHdoZW4gbm8gZW5kcG9pbnQgaXMgcGlubmVkLlwiLFxuICBwZXJtaXNzaW9uOiBcIkNBTl9RVUVSWVwiLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICBlbnY6IFNFUlZJTkdfRU5EUE9JTlRfRU5WLFxuICAgICAgZGVzY3JpcHRpb246IGBTZXJ2aW5nIGVuZHBvaW50IG5hbWUgZm9yIHdlYiBzZWFyY2guICR7TU9ERUxfRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICAgIGRpc2NvdmVyeToge1xuICAgICAgICB0eXBlOiBcImNsaVwiLFxuICAgICAgICBjbGlDb21tYW5kOiBcImRhdGFicmlja3Mgc2VydmluZy1lbmRwb2ludHMgbGlzdCAtLXByb2ZpbGUgPFBST0ZJTEU+IC0tb3V0cHV0IGpzb25cIixcbiAgICAgICAgc2VsZWN0RmllbGQ6IFwiLm5hbWVcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0gc2F0aXNmaWVzIE9taXQ8UmVzb3VyY2VSZXF1aXJlbWVudCwgXCJyZXF1aXJlZFwiPjtcblxuLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgcmVzb2x2ZXMgYW5kIGhvbGRzIHRoZSB3ZWItc2VhcmNoIHJ1bnRpbWUgY29uZmlnIHVzZWRcbiAqIGJ5IHRoZSBgd2ViX3NlYXJjaGAgLyBgd2ViX2ZldGNoYCB0b29scy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgd2ViU2VhcmNoIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgd2ViU2VhcmNoKHtcbiAqICAgICAgIG1vZGVsOiBcImdlbWluaVwiLFxuICogICAgICAgdXJsUG9saWN5OiBcImFsbG93bGlzdFwiLFxuICogICAgICAgYWxsb3dlZFVybHM6IFtcIiouZGF0YWJyaWNrcy5jb21cIl0sXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgV2ViU2VhcmNoUGx1Z2luIGV4dGVuZHMgVG9vbFJlZ2lzdHJ5UGx1Z2luPFdlYlNlYXJjaFBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3QgPSB7XG4gICAgbmFtZTogXCJ3ZWItc2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiV2ViIFNlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZWFyY2hlcyB0aGUgd2ViIHRocm91Z2ggdGhlIERhdGFicmlja3MgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCBvbiBpdHMgb3duIFwiICtcbiAgICAgIFwid2ViLWNhcGFibGUgc2VydmluZyBlbmRwb2ludCwgYW5kIGZldGNoZXMgcGFnZXMgdmlhIGdvdC1zY3JhcGluZywgYmVoaW5kIGFuIFwiICtcbiAgICAgIFwib3B0aW9uYWwgVVJMIGFsbG93LWxpc3QgYW5kIHBlci10b29sIGFwcHJvdmFsIGdhdGluZy5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtTRVJWSU5HX0VORFBPSU5UX1JFU09VUkNFXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IFdFQl9TRUFSQ0hfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcIndlYi1zZWFyY2hcIj47XG5cbiAgLyoqIFJ1bnRpbWUgb3duZWQgZXhjbHVzaXZlbHkgYnkgdGhpcyBwbHVnaW4gaW5zdGFuY2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZTogV2ViU2VhcmNoUnVudGltZSA9IGNyZWF0ZVdlYlNlYXJjaFJ1bnRpbWUodGhpcy5jb25maWcsIChmbiwgc2V0dGluZ3MpID0+XG4gICAgdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncyksXG4gICk7XG5cbiAgLyoqXG4gICAqIFByb21vdGUgdGhlIHNlcnZpbmcgZW5kcG9pbnQgdG8gYSByZXF1aXJlZCByZXNvdXJjZSBvbmNlIGEgZGVwbG95bWVudFxuICAgKiBwaW5zIG9uZSwgdGhyb3VnaCBwbHVnaW4gY29uZmlnIG9yIGVpdGhlciBlbnZpcm9ubWVudCBuYW1lLiBMZWZ0IG9wdGlvbmFsXG4gICAqIG90aGVyd2lzZSwgYmVjYXVzZSB0aGUgcGx1Z2luIHBpY2tzIGEgd2ViLXNlYXJjaC1jYXBhYmxlIGVuZHBvaW50IG91dCBvZlxuICAgKiB0aGUgbGl2ZSBjYXRhbG9ndWUgb24gaXRzIG93bi5cbiAgICovXG4gIHN0YXRpYyBnZXRSZXNvdXJjZVJlcXVpcmVtZW50cyhjb25maWc6IFdlYlNlYXJjaFBsdWdpbkNvbmZpZyk6IFJlc291cmNlUmVxdWlyZW1lbnRbXSB7XG4gICAgY29uc3QgcGlubmVkID1cbiAgICAgIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29uZmlnLm1vZGVsKSA/P1xuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChwcm9jZXNzLmVudltNT0RFTF9FTlZdKSA/P1xuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChwcm9jZXNzLmVudltTRVJWSU5HX0VORFBPSU5UX0VOVl0pO1xuICAgIHJldHVybiBwaW5uZWQgPT09IG51bGwgPyBbXSA6IFt7IC4uLlNFUlZJTkdfRU5EUE9JTlRfUkVTT1VSQ0UsIHJlcXVpcmVkOiB0cnVlIH1dO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0b29scyB0aGlzIHBsdWdpbiBvZmZlcnMgdG8gYW4gQXBwS2l0IGFnZW50LiBCb3RoIGFyZSByZWFkcyBhbmQgYm90aFxuICAgKiBydW4gdW5kZXIgdGhlIGNhbGxlcidzIGlkZW50aXR5LlxuICAgKlxuICAgKiBOZWl0aGVyIGlzIGBhdXRvSW5oZXJpdGFibGVgLiBgd2ViX2ZldGNoYCByZWFjaGVzIGEgVVJMIHRoZSBtb2RlbCBjaG9zZSxcbiAgICogd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gaW5zaWRlIHRoZSB3b3Jrc3BhY2UgbmV0d29yaywgc28gaXQgbXVzdCBvbmx5XG4gICAqIGFwcGVhciBpbiBhbiBhZ2VudCB0aGF0IGFza2VkIGZvciBpdCBhbmQgYWNjZXB0ZWQgdGhlIFVSTCBwb2xpY3kgdGhhdFxuICAgKiBjb21lcyB3aXRoIGl0LiBgd2ViX3NlYXJjaGAgaXMgc2FmZXIgYnV0IHN0aWxsIHNwZW5kcyBzZXJ2aW5nIHRva2VucyBvblxuICAgKiBldmVyeSBjYWxsLCBzbyBpdCBpcyBvcHQtaW4gZm9yIGNvc3QgcmF0aGVyIHRoYW4gZm9yIHNhZmV0eS5cbiAgICpcbiAgICogYGV4ZWN1dGVgIHJlLXBhcnNlcyBpdHMgYXJndW1lbnRzIHdpdGggdGhlIGxvY2FsIHNjaGVtYTogQXBwS2l0IHZhbGlkYXRlc1xuICAgKiBhZ2FpbnN0IHRoZSBzYW1lIHNjaGVtYSBmaXJzdCwgYnV0IHJlLXBhcnNpbmcgaXMgd2hhdCBnaXZlcyB0aGUgYm9keSB0eXBlZFxuICAgKiBhcmd1bWVudHMgaW5zdGVhZCBvZiBgdW5rbm93bmAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnkgPSB7XG4gICAgd2ViX3NlYXJjaDogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiB3ZWJTZWFyY2hUb29sUmVxdWVzdFNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnNlYXJjaCh3ZWJTZWFyY2hUb29sUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKSwgc2lnbmFsKSxcbiAgICB9KSxcbiAgICB3ZWJfZmV0Y2g6IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsXG4gICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gdGhpcy5mZXRjaCh3ZWJGZXRjaFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyksIHNpZ25hbCksXG4gICAgfSksXG4gIH07XG5cbiAgLyoqIERpc3BhdGNoIHdpdGggdGhlIGFjdHVhbCBjYWxsaW5nIG1vZGVsIGFuZCBvcHRpb25hbCBob3N0IHByb2dyZXNzIHNpbmsuICovXG4gIG92ZXJyaWRlIGV4ZWN1dGVBZ2VudFRvb2woXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IHVua25vd24sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgY29udGV4dD86IEFnZW50VG9vbEV4ZWN1dGlvbkNvbnRleHQsXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmIChuYW1lICE9PSBcIndlYl9zZWFyY2hcIikgcmV0dXJuIHN1cGVyLmV4ZWN1dGVBZ2VudFRvb2wobmFtZSwgYXJncywgc2lnbmFsLCBjb250ZXh0KTtcbiAgICBjb25zdCByZXF1ZXN0ID0gd2ViU2VhcmNoVG9vbFJlcXVlc3RTY2hlbWEucGFyc2UoYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoKFxuICAgICAge1xuICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAuLi4oY29udGV4dD8ubW9kZWwgPyB7IG1vZGVsOiBjb250ZXh0Lm1vZGVsIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgc2lnbmFsLFxuICAgICAgY29udGV4dD8ud3JpdGVQcm9ncmVzcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyB0aGUgZWZmZWN0aXZlIHBvbGljeSBzbyBhbiBhY3RpdmUgYWxsb3ctbGlzdCBhbmQgY2FwcyBhcmUgb2J2aW91cyBhdFxuICAgKiBib290LiBSdW50aW1lIGNvbnN0cnVjdGlvbiBhbHJlYWR5IHJlc29sdmVkIGNvbmZpZyBhbmQgY2FwdHVyZWQgdGhpc1xuICAgKiBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbi5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzLnJ1bnRpbWU7XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICBtb2RlbDogY29uZmlnLm1vZGVsID8/IGBmYWxsYmFja3M6WyR7Y29uZmlnLm1vZGVsRmFsbGJhY2tzLmpvaW4oXCIsIFwiKX1dYCxcbiAgICAgIG1vZGVsU291cmNlOiBjb25maWcubW9kZWxTb3VyY2UsXG4gICAgICB1cmxQb2xpY3k6IGNvbmZpZy51cmxQb2xpY3ksXG4gICAgICAuLi4oY29uZmlnLmFsbG93TGlzdC5yZXN0cmljdGVkID8geyBhbGxvd2VkVXJsczogY29uZmlnLmFsbG93TGlzdC5wYXR0ZXJucyB9IDoge30pLFxuICAgICAgbWF4Q2l0YXRpb25zOiBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgZmV0Y2hNYXhMZW5ndGg6IGNvbmZpZy5mZXRjaE1heExlbmd0aCxcbiAgICAgIGFwcHJvdmFsOiBjb25maWcuYXBwcm92YWwubW9kZSxcbiAgICAgIHNjcmFwZUZhbGxiYWNrOiBjb25maWcuc2NyYXBlRmFsbGJhY2ssXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTm8gcnVudGltZSByZXNvdXJjZXMgcmVxdWlyZSBkcmFpbmluZy4gVGhlIGluc3RhbmNlLW93bmVkIGNvbmZpZyBhbmRcbiAgICogZXhlY3V0b3IgYmVjb21lIHVucmVhY2hhYmxlIHdpdGggdGhpcyBwbHVnaW4uXG4gICAqL1xuICBzaHV0ZG93bigpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogQWJvcnQgaW4tZmxpZ2h0IHdvcmsgb3duZWQgYnkgdGhpcyBwbHVnaW4gaW5zdGFuY2UuICovXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogUnVuIGEgd2ViIHNlYXJjaCBkaXJlY3RseSAoYnlwYXNzaW5nIHRoZSBhZ2VudCB0b29sKS4gUmVzb2x2ZXMgdGhlXG4gICAgICAgKiBPQk8gY2xpZW50IGZyb20gdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCBhbmQgcmVhZHMgdGhpcyBwbHVnaW4nc1xuICAgICAgICogcnVudGltZSBjb25maWcuXG4gICAgICAgKi9cbiAgICAgIHNlYXJjaDogKHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxXZWJTZWFyY2hSZXN1bHQ+ID0+XG4gICAgICAgIHRoaXMuc2VhcmNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKipcbiAgICAgICAqIEZldGNoIG9uZSBVUkwgZGlyZWN0bHkgKGJ5cGFzc2luZyB0aGUgYWdlbnQgdG9vbCkuIEVuZm9yY2VzIHRoZVxuICAgICAgICogY29uZmlndXJlZCBVUkwgcG9saWN5LlxuICAgICAgICovXG4gICAgICBmZXRjaDogKHJlcXVlc3Q6IFdlYkZldGNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFdlYkZldGNoUmVzdWx0PiA9PlxuICAgICAgICB0aGlzLmZldGNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKFxuICAgIHJlcXVlc3Q6IFdlYlNlYXJjaFJlcXVlc3QsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgd3JpdGVQcm9ncmVzcz86IEFnZW50VG9vbEV4ZWN1dGlvbkNvbnRleHRbXCJ3cml0ZVByb2dyZXNzXCJdLFxuICApOiBQcm9taXNlPFdlYlNlYXJjaFJlc3VsdD4ge1xuICAgIHJldHVybiBydW5XZWJTZWFyY2goXG4gICAgICByZXF1ZXN0LFxuICAgICAgdGhpcy5ydW50aW1lLFxuICAgICAgYXdhaXQgcmVzb2x2ZVdlYlNlYXJjaENvbnRleHQoKSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHdyaXRlUHJvZ3Jlc3MsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2gocmVxdWVzdDogV2ViRmV0Y2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViRmV0Y2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gcnVuV2ViRmV0Y2gocmVxdWVzdCwgdGhpcy5ydW50aW1lLCBzaWduYWwpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHdlYi1zZWFyY2ggcnVudGltZSB3aXRoIEFwcEtpdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgd2ViU2VhcmNoIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGFnZW50cywgbWFzdHJhIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHJlc2VhcmNoZXIgPSBhZ2VudHMuY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiUmVzZWFyY2ggcXVlc3Rpb25zIHdpdGggd2ViX3NlYXJjaCwgdGhlbiByZWFkIHNvdXJjZXMgd2l0aCB3ZWJfZmV0Y2guXCIsXG4gKiAgIGFzeW5jIHRvb2xzKHBsdWdpbnMpIHtcbiAqICAgICByZXR1cm4geyAuLi4oYXdhaXQgcGx1Z2luc1tcIndlYi1zZWFyY2hcIl0udG9vbGtpdCgpKSB9O1xuICogICB9LFxuICogfSk7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHdlYlNlYXJjaCh7IG1vZGVsOiBcImdlbWluaVwiIH0pLFxuICogICAgIG1hc3RyYSh7IGFnZW50czogcmVzZWFyY2hlciB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2ggPSB0b1BsdWdpbihXZWJTZWFyY2hQbHVnaW4pO1xuIl19
@@ -10,7 +10,7 @@
10
10
  * - OpenAI GPT models, via the Responses API (`/serving-endpoints/responses`):
11
11
  * `tools: [{ "type": "web_search" }]`
12
12
  * - Google Gemini models, via Chat Completions
13
- * (`/serving-endpoints/chat/completions`): `tools: [{ "google_search": {} }]`
13
+ * (`/serving-endpoints/chat/completions`): top-level `"google_search": {}`
14
14
  *
15
15
  * (Anthropic exposes it over MCP, which needs a different call shape; only
16
16
  * GPT + Gemini are wired here, matching what the platform supports today.)
@@ -22,19 +22,21 @@
22
22
  *
23
23
  * @module
24
24
  */
25
+ import { policy } from "@dbx-tools/model";
26
+ import type { ServingEndpointSummary } from "@dbx-tools/shared-model";
27
+ import { z } from "zod";
25
28
  /** A web-search-capable model provider family. */
26
29
  export type WebSearchProvider = "openai" | "gemini";
30
+ /** Serialized provider request fragment for native web search. */
31
+ export declare const WebSearchProviderSpecSchema: z.ZodObject<{
32
+ api: z.ZodEnum<{
33
+ chat: "chat";
34
+ responses: "responses";
35
+ }>;
36
+ request: z.ZodRecord<z.ZodString, z.ZodUnknown>;
37
+ }, z.core.$strict>;
27
38
  /** How a provider's native web-search call is shaped. */
28
- export interface WebSearchProviderSpec {
29
- /**
30
- * Which serving REST surface to call. `"responses"` posts to
31
- * `/serving-endpoints/responses` (OpenAI Responses API); `"chat"` posts to
32
- * `/serving-endpoints/chat/completions`.
33
- */
34
- api: "responses" | "chat";
35
- /** The tool entry appended to the request's `tools` array. */
36
- tool: Record<string, unknown>;
37
- }
39
+ export type WebSearchProviderSpec = z.infer<typeof WebSearchProviderSpecSchema>;
38
40
  /**
39
41
  * Built-in provider -> tool-spec map. Operators can override or extend this
40
42
  * per provider via the plugin's `webSearchTools` config (env
@@ -42,20 +44,16 @@ export interface WebSearchProviderSpec {
42
44
  */
43
45
  export declare const WEB_SEARCH_PROVIDERS: Readonly<Record<WebSearchProvider, WebSearchProviderSpec>>;
44
46
  /**
45
- * Detect the web-search provider family for an endpoint id, or `null` when
46
- * the model is not one of the web-search-capable families. Anthropic
47
- * (`opus`/`sonnet`/`haiku`) is intentionally excluded - it needs an MCP call
48
- * shape this module doesn't implement - so a Claude endpoint returns `null`
49
- * and is treated as unsupported.
47
+ * Map a model-owned family value to its native web-search provider contract.
50
48
  */
51
- export declare function detectWebSearchProvider(modelId: string): WebSearchProvider | null;
52
- /** Whether `modelId` is a web-search-capable model. */
53
- export declare function supportsWebSearch(modelId: string): boolean;
49
+ export declare function webSearchProviderForFamily(family: policy.ModelFamily | undefined): WebSearchProvider | null;
50
+ /** Whether a model has both native capability and a supported provider contract. */
51
+ export declare function supportsWebSearch(model: string | ServingEndpointSummary): boolean;
54
52
  /**
55
53
  * Resolve the effective {@link WebSearchProviderSpec} for a provider: the
56
54
  * built-in default, with any operator override (the `webSearchTools` map,
57
55
  * keyed by provider) shallow-merged over it. An override may replace just the
58
- * `tool` (the common case - a new tool type) or also the `api`. An override
56
+ * `request` fragment or also the `api`. An override
59
57
  * that is not one of those two fields is a deployment mistake that would
60
58
  * otherwise be silently dropped, so it throws.
61
59
  */
@@ -10,7 +10,7 @@
10
10
  * - OpenAI GPT models, via the Responses API (`/serving-endpoints/responses`):
11
11
  * `tools: [{ "type": "web_search" }]`
12
12
  * - Google Gemini models, via Chat Completions
13
- * (`/serving-endpoints/chat/completions`): `tools: [{ "google_search": {} }]`
13
+ * (`/serving-endpoints/chat/completions`): top-level `"google_search": {}`
14
14
  *
15
15
  * (Anthropic exposes it over MCP, which needs a different call shape; only
16
16
  * GPT + Gemini are wired here, matching what the platform supports today.)
@@ -23,52 +23,61 @@
23
23
  * @module
24
24
  */
25
25
  import { ValidationError } from "@databricks/appkit";
26
+ import { metadata, policy } from "@dbx-tools/model";
26
27
  import { z } from "zod";
28
+ /** Serialized provider request fragment for native web search. */
29
+ export const WebSearchProviderSpecSchema = z
30
+ .object({
31
+ api: z
32
+ .enum(["responses", "chat"])
33
+ .describe("Databricks serving API that accepts the provider request."),
34
+ request: z
35
+ .record(z.string(), z.unknown())
36
+ .describe("Provider-specific fields merged into the serving request body."),
37
+ })
38
+ .strict()
39
+ .describe("Native web-search request contract for one provider family.");
27
40
  /**
28
41
  * Built-in provider -> tool-spec map. Operators can override or extend this
29
42
  * per provider via the plugin's `webSearchTools` config (env
30
43
  * `WEB_SEARCH_TOOLS`), which is merged over these defaults.
31
44
  */
32
45
  export const WEB_SEARCH_PROVIDERS = {
33
- openai: { api: "responses", tool: { type: "web_search" } },
34
- gemini: { api: "chat", tool: { google_search: {} } },
46
+ openai: { api: "responses", request: { tools: [{ type: "web_search" }] } },
47
+ gemini: { api: "chat", request: { google_search: {} } },
35
48
  };
36
49
  /**
37
- * Detect the web-search provider family for an endpoint id, or `null` when
38
- * the model is not one of the web-search-capable families. Anthropic
39
- * (`opus`/`sonnet`/`haiku`) is intentionally excluded - it needs an MCP call
40
- * shape this module doesn't implement - so a Claude endpoint returns `null`
41
- * and is treated as unsupported.
50
+ * Map a model-owned family value to its native web-search provider contract.
42
51
  */
43
- export function detectWebSearchProvider(modelId) {
44
- const n = modelId.toLowerCase();
45
- // gpt-oss open-weights don't carry the hosted web-search tool; only the
46
- // hosted GPT family (Responses API) does. Both contain "gpt", so exclude
47
- // the open-weights explicitly.
48
- if (n.includes("gpt") && !n.includes("gpt-oss"))
49
- return "openai";
50
- if (n.includes("gemini"))
51
- return "gemini";
52
- return null;
52
+ export function webSearchProviderForFamily(family) {
53
+ switch (family) {
54
+ case policy.ModelFamily.Gpt:
55
+ return "openai";
56
+ case policy.ModelFamily.Gemini:
57
+ return "gemini";
58
+ default:
59
+ return null;
60
+ }
53
61
  }
54
- /** Whether `modelId` is a web-search-capable model. */
55
- export function supportsWebSearch(modelId) {
56
- return detectWebSearchProvider(modelId) !== null;
62
+ /** Whether a model has both native capability and a supported provider contract. */
63
+ export function supportsWebSearch(model) {
64
+ const identity = typeof model === "string" ? model : (model.modelServiceName ?? model.name);
65
+ return (webSearchProviderForFamily(policy.modelFamily(identity)) !== null &&
66
+ metadata.modelCapabilitiesFor(model).webSearch);
57
67
  }
58
68
  /**
59
69
  * Runtime shape of one entry in the operator override map. The map arrives as
60
70
  * parsed JSON (config or `WEB_SEARCH_TOOLS`), so it is validated rather than
61
71
  * asserted.
62
72
  */
63
- const providerOverrideSchema = z.object({
64
- api: z.enum(["responses", "chat"]).optional(),
65
- tool: z.record(z.string(), z.unknown()).optional(),
66
- });
73
+ const providerOverrideSchema = WebSearchProviderSpecSchema.partial()
74
+ .strict()
75
+ .describe("Partial native web-search provider override.");
67
76
  /**
68
77
  * Resolve the effective {@link WebSearchProviderSpec} for a provider: the
69
78
  * built-in default, with any operator override (the `webSearchTools` map,
70
79
  * keyed by provider) shallow-merged over it. An override may replace just the
71
- * `tool` (the common case - a new tool type) or also the `api`. An override
80
+ * `request` fragment or also the `api`. An override
72
81
  * that is not one of those two fields is a deployment mistake that would
73
82
  * otherwise be silently dropped, so it throws.
74
83
  */
@@ -79,11 +88,11 @@ export function webSearchToolSpec(provider, overrides) {
79
88
  return base;
80
89
  const parsed = providerOverrideSchema.safeParse(raw);
81
90
  if (!parsed.success) {
82
- throw ValidationError.invalidValue(`webSearchTools.${provider}`, raw, 'an object with an optional "api" ("responses" | "chat") and an optional "tool" object');
91
+ throw ValidationError.invalidValue(`webSearchTools.${provider}`, raw, 'an object with an optional "api" ("responses" | "chat") and an optional "request" object');
83
92
  }
84
93
  return {
85
94
  api: parsed.data.api ?? base.api,
86
- tool: parsed.data.tool ?? base.tool,
95
+ request: parsed.data.request ?? base.request,
87
96
  };
88
97
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFpQnhCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBK0Q7SUFDOUYsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUU7SUFDMUQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDckQsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxPQUFlO0lBQ3JELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyx3RUFBd0U7SUFDeEUseUVBQXlFO0lBQ3pFLCtCQUErQjtJQUMvQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ2pFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUMxQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQWU7SUFDL0MsT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDN0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNuRCxDQUFDLENBQUM7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixRQUEyQixFQUMzQixTQUFtQztJQUVuQyxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxNQUFNLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxJQUFJLEdBQUcsS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsTUFBTSxlQUFlLENBQUMsWUFBWSxDQUNoQyxrQkFBa0IsUUFBUSxFQUFFLEVBQzVCLEdBQUcsRUFDSCx1RkFBdUYsQ0FDeEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHO1FBQ2hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSTtLQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvdmlkZXIgZGV0ZWN0aW9uICsgd2ViLXNlYXJjaCB0b29sLXNwZWMgbWFwcGluZyBmb3IgdGhlIERhdGFicmlja3NcbiAqIE1vZGVsIFNlcnZpbmcgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbC5cbiAqXG4gKiBEYXRhYnJpY2tzIGV4cG9zZXMgd2ViIHNlYXJjaCBhcyBhIGZpcnN0LXBhcnR5IHRvb2wgdGhhdCBydW5zICppbnNpZGUqIGFcbiAqIG1vZGVsIGNhbGw6IHRoZSBtb2RlbCBzZWFyY2hlcyB0aGUgd2ViIGFuZCBmb2xkcyB0aGUgcmVzdWx0cyBpbnRvIGl0c1xuICogYW5zd2VyLiBUaGUgdG9vbCBzcGVjIGlzIHByb3ZpZGVyLXNwZWNpZmljIChzZWUgdGhlIERhdGFicmlja3MgZG9jcyxcbiAqIGBtYWNoaW5lLWxlYXJuaW5nL21vZGVsLXNlcnZpbmcvd2ViLXNlYXJjaGApOlxuICpcbiAqIC0gT3BlbkFJIEdQVCBtb2RlbHMsIHZpYSB0aGUgUmVzcG9uc2VzIEFQSSAoYC9zZXJ2aW5nLWVuZHBvaW50cy9yZXNwb25zZXNgKTpcbiAqICAgYHRvb2xzOiBbeyBcInR5cGVcIjogXCJ3ZWJfc2VhcmNoXCIgfV1gXG4gKiAtIEdvb2dsZSBHZW1pbmkgbW9kZWxzLCB2aWEgQ2hhdCBDb21wbGV0aW9uc1xuICogICAoYC9zZXJ2aW5nLWVuZHBvaW50cy9jaGF0L2NvbXBsZXRpb25zYCk6IGB0b29sczogW3sgXCJnb29nbGVfc2VhcmNoXCI6IHt9IH1dYFxuICpcbiAqIChBbnRocm9waWMgZXhwb3NlcyBpdCBvdmVyIE1DUCwgd2hpY2ggbmVlZHMgYSBkaWZmZXJlbnQgY2FsbCBzaGFwZTsgb25seVxuICogR1BUICsgR2VtaW5pIGFyZSB3aXJlZCBoZXJlLCBtYXRjaGluZyB3aGF0IHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyB0b2RheS4pXG4gKlxuICogVGhlIHByb3ZpZGVyIGZhbWlseSBpcyBkZXRlY3RlZCBmcm9tIHRoZSBlbmRwb2ludCBpZCB0aGUgc2FtZSB3YXlcbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGAncyBgY2xhc3NpZnlCeUZhbWlseWAga2V5cyBvZmYgbmFtZSBzdWJzdHJpbmdzXG4gKiAoYGdwdGAgLyBgZ2VtaW5pYCAvIGBjbGF1ZGVgKSwgc28gYSByZXNvbHZlZCBlbmRwb2ludCBsaWtlXG4gKiBgZGF0YWJyaWNrcy1ncHQtNWAgb3IgYGRhdGFicmlja3MtZ2VtaW5pLTMtcHJvYCBtYXBzIHRvIGl0cyBBUEkgc2hhcGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKiBBIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBwcm92aWRlciBmYW1pbHkuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hQcm92aWRlciA9IFwib3BlbmFpXCIgfCBcImdlbWluaVwiO1xuXG4vKiogSG93IGEgcHJvdmlkZXIncyBuYXRpdmUgd2ViLXNlYXJjaCBjYWxsIGlzIHNoYXBlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUHJvdmlkZXJTcGVjIHtcbiAgLyoqXG4gICAqIFdoaWNoIHNlcnZpbmcgUkVTVCBzdXJmYWNlIHRvIGNhbGwuIGBcInJlc3BvbnNlc1wiYCBwb3N0cyB0b1xuICAgKiBgL3NlcnZpbmctZW5kcG9pbnRzL3Jlc3BvbnNlc2AgKE9wZW5BSSBSZXNwb25zZXMgQVBJKTsgYFwiY2hhdFwiYCBwb3N0cyB0b1xuICAgKiBgL3NlcnZpbmctZW5kcG9pbnRzL2NoYXQvY29tcGxldGlvbnNgLlxuICAgKi9cbiAgYXBpOiBcInJlc3BvbnNlc1wiIHwgXCJjaGF0XCI7XG4gIC8qKiBUaGUgdG9vbCBlbnRyeSBhcHBlbmRlZCB0byB0aGUgcmVxdWVzdCdzIGB0b29sc2AgYXJyYXkuICovXG4gIHRvb2w6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEJ1aWx0LWluIHByb3ZpZGVyIC0+IHRvb2wtc3BlYyBtYXAuIE9wZXJhdG9ycyBjYW4gb3ZlcnJpZGUgb3IgZXh0ZW5kIHRoaXNcbiAqIHBlciBwcm92aWRlciB2aWEgdGhlIHBsdWdpbidzIGB3ZWJTZWFyY2hUb29sc2AgY29uZmlnIChlbnZcbiAqIGBXRUJfU0VBUkNIX1RPT0xTYCksIHdoaWNoIGlzIG1lcmdlZCBvdmVyIHRoZXNlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgY29uc3QgV0VCX1NFQVJDSF9QUk9WSURFUlM6IFJlYWRvbmx5PFJlY29yZDxXZWJTZWFyY2hQcm92aWRlciwgV2ViU2VhcmNoUHJvdmlkZXJTcGVjPj4gPSB7XG4gIG9wZW5haTogeyBhcGk6IFwicmVzcG9uc2VzXCIsIHRvb2w6IHsgdHlwZTogXCJ3ZWJfc2VhcmNoXCIgfSB9LFxuICBnZW1pbmk6IHsgYXBpOiBcImNoYXRcIiwgdG9vbDogeyBnb29nbGVfc2VhcmNoOiB7fSB9IH0sXG59O1xuXG4vKipcbiAqIERldGVjdCB0aGUgd2ViLXNlYXJjaCBwcm92aWRlciBmYW1pbHkgZm9yIGFuIGVuZHBvaW50IGlkLCBvciBgbnVsbGAgd2hlblxuICogdGhlIG1vZGVsIGlzIG5vdCBvbmUgb2YgdGhlIHdlYi1zZWFyY2gtY2FwYWJsZSBmYW1pbGllcy4gQW50aHJvcGljXG4gKiAoYG9wdXNgL2Bzb25uZXRgL2BoYWlrdWApIGlzIGludGVudGlvbmFsbHkgZXhjbHVkZWQgLSBpdCBuZWVkcyBhbiBNQ1AgY2FsbFxuICogc2hhcGUgdGhpcyBtb2R1bGUgZG9lc24ndCBpbXBsZW1lbnQgLSBzbyBhIENsYXVkZSBlbmRwb2ludCByZXR1cm5zIGBudWxsYFxuICogYW5kIGlzIHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXZWJTZWFyY2hQcm92aWRlcihtb2RlbElkOiBzdHJpbmcpOiBXZWJTZWFyY2hQcm92aWRlciB8IG51bGwge1xuICBjb25zdCBuID0gbW9kZWxJZC50b0xvd2VyQ2FzZSgpO1xuICAvLyBncHQtb3NzIG9wZW4td2VpZ2h0cyBkb24ndCBjYXJyeSB0aGUgaG9zdGVkIHdlYi1zZWFyY2ggdG9vbDsgb25seSB0aGVcbiAgLy8gaG9zdGVkIEdQVCBmYW1pbHkgKFJlc3BvbnNlcyBBUEkpIGRvZXMuIEJvdGggY29udGFpbiBcImdwdFwiLCBzbyBleGNsdWRlXG4gIC8vIHRoZSBvcGVuLXdlaWdodHMgZXhwbGljaXRseS5cbiAgaWYgKG4uaW5jbHVkZXMoXCJncHRcIikgJiYgIW4uaW5jbHVkZXMoXCJncHQtb3NzXCIpKSByZXR1cm4gXCJvcGVuYWlcIjtcbiAgaWYgKG4uaW5jbHVkZXMoXCJnZW1pbmlcIikpIHJldHVybiBcImdlbWluaVwiO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFdoZXRoZXIgYG1vZGVsSWRgIGlzIGEgd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzV2ViU2VhcmNoKG1vZGVsSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZGV0ZWN0V2ViU2VhcmNoUHJvdmlkZXIobW9kZWxJZCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogUnVudGltZSBzaGFwZSBvZiBvbmUgZW50cnkgaW4gdGhlIG9wZXJhdG9yIG92ZXJyaWRlIG1hcC4gVGhlIG1hcCBhcnJpdmVzIGFzXG4gKiBwYXJzZWQgSlNPTiAoY29uZmlnIG9yIGBXRUJfU0VBUkNIX1RPT0xTYCksIHNvIGl0IGlzIHZhbGlkYXRlZCByYXRoZXIgdGhhblxuICogYXNzZXJ0ZWQuXG4gKi9cbmNvbnN0IHByb3ZpZGVyT3ZlcnJpZGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGFwaTogei5lbnVtKFtcInJlc3BvbnNlc1wiLCBcImNoYXRcIl0pLm9wdGlvbmFsKCksXG4gIHRvb2w6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIHtAbGluayBXZWJTZWFyY2hQcm92aWRlclNwZWN9IGZvciBhIHByb3ZpZGVyOiB0aGVcbiAqIGJ1aWx0LWluIGRlZmF1bHQsIHdpdGggYW55IG9wZXJhdG9yIG92ZXJyaWRlICh0aGUgYHdlYlNlYXJjaFRvb2xzYCBtYXAsXG4gKiBrZXllZCBieSBwcm92aWRlcikgc2hhbGxvdy1tZXJnZWQgb3ZlciBpdC4gQW4gb3ZlcnJpZGUgbWF5IHJlcGxhY2UganVzdCB0aGVcbiAqIGB0b29sYCAodGhlIGNvbW1vbiBjYXNlIC0gYSBuZXcgdG9vbCB0eXBlKSBvciBhbHNvIHRoZSBgYXBpYC4gQW4gb3ZlcnJpZGVcbiAqIHRoYXQgaXMgbm90IG9uZSBvZiB0aG9zZSB0d28gZmllbGRzIGlzIGEgZGVwbG95bWVudCBtaXN0YWtlIHRoYXQgd291bGRcbiAqIG90aGVyd2lzZSBiZSBzaWxlbnRseSBkcm9wcGVkLCBzbyBpdCB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJTZWFyY2hUb29sU3BlYyhcbiAgcHJvdmlkZXI6IFdlYlNlYXJjaFByb3ZpZGVyLFxuICBvdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFdlYlNlYXJjaFByb3ZpZGVyU3BlYyB7XG4gIGNvbnN0IGJhc2UgPSBXRUJfU0VBUkNIX1BST1ZJREVSU1twcm92aWRlcl07XG4gIGNvbnN0IHJhdyA9IG92ZXJyaWRlcz8uW3Byb3ZpZGVyXTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZTtcbiAgY29uc3QgcGFyc2VkID0gcHJvdmlkZXJPdmVycmlkZVNjaGVtYS5zYWZlUGFyc2UocmF3KTtcbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBgd2ViU2VhcmNoVG9vbHMuJHtwcm92aWRlcn1gLFxuICAgICAgcmF3LFxuICAgICAgJ2FuIG9iamVjdCB3aXRoIGFuIG9wdGlvbmFsIFwiYXBpXCIgKFwicmVzcG9uc2VzXCIgfCBcImNoYXRcIikgYW5kIGFuIG9wdGlvbmFsIFwidG9vbFwiIG9iamVjdCcsXG4gICAgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFwaTogcGFyc2VkLmRhdGEuYXBpID8/IGJhc2UuYXBpLFxuICAgIHRvb2w6IHBhcnNlZC5kYXRhLnRvb2wgPz8gYmFzZS50b29sLFxuICB9O1xufVxuIl19
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUt4QixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQztLQUN6QyxNQUFNLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztTQUNILElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQixRQUFRLENBQUMsMkRBQTJELENBQUM7SUFDeEUsT0FBTyxFQUFFLENBQUM7U0FDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvQixRQUFRLENBQUMsZ0VBQWdFLENBQUM7Q0FDOUUsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0FBSzNFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBK0Q7SUFDOUYsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDMUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDeEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxNQUFzQztJQUV0QyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUc7WUFDekIsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDNUIsT0FBTyxRQUFRLENBQUM7UUFDbEI7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBc0M7SUFDdEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RixPQUFPLENBQ0wsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUk7UUFDakUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FDL0MsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLEVBQUU7S0FDakUsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7QUFFNUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFBMkIsRUFDM0IsU0FBbUM7SUFFbkMsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsSUFBSSxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FDaEMsa0JBQWtCLFFBQVEsRUFBRSxFQUM1QixHQUFHLEVBQ0gsMEZBQTBGLENBQzNGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRztRQUNoQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU87S0FDN0MsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIGRldGVjdGlvbiArIHdlYi1zZWFyY2ggdG9vbC1zcGVjIG1hcHBpbmcgZm9yIHRoZSBEYXRhYnJpY2tzXG4gKiBNb2RlbCBTZXJ2aW5nIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wuXG4gKlxuICogRGF0YWJyaWNrcyBleHBvc2VzIHdlYiBzZWFyY2ggYXMgYSBmaXJzdC1wYXJ0eSB0b29sIHRoYXQgcnVucyAqaW5zaWRlKiBhXG4gKiBtb2RlbCBjYWxsOiB0aGUgbW9kZWwgc2VhcmNoZXMgdGhlIHdlYiBhbmQgZm9sZHMgdGhlIHJlc3VsdHMgaW50byBpdHNcbiAqIGFuc3dlci4gVGhlIHRvb2wgc3BlYyBpcyBwcm92aWRlci1zcGVjaWZpYyAoc2VlIHRoZSBEYXRhYnJpY2tzIGRvY3MsXG4gKiBgbWFjaGluZS1sZWFybmluZy9tb2RlbC1zZXJ2aW5nL3dlYi1zZWFyY2hgKTpcbiAqXG4gKiAtIE9wZW5BSSBHUFQgbW9kZWxzLCB2aWEgdGhlIFJlc3BvbnNlcyBBUEkgKGAvc2VydmluZy1lbmRwb2ludHMvcmVzcG9uc2VzYCk6XG4gKiAgIGB0b29sczogW3sgXCJ0eXBlXCI6IFwid2ViX3NlYXJjaFwiIH1dYFxuICogLSBHb29nbGUgR2VtaW5pIG1vZGVscywgdmlhIENoYXQgQ29tcGxldGlvbnNcbiAqICAgKGAvc2VydmluZy1lbmRwb2ludHMvY2hhdC9jb21wbGV0aW9uc2ApOiB0b3AtbGV2ZWwgYFwiZ29vZ2xlX3NlYXJjaFwiOiB7fWBcbiAqXG4gKiAoQW50aHJvcGljIGV4cG9zZXMgaXQgb3ZlciBNQ1AsIHdoaWNoIG5lZWRzIGEgZGlmZmVyZW50IGNhbGwgc2hhcGU7IG9ubHlcbiAqIEdQVCArIEdlbWluaSBhcmUgd2lyZWQgaGVyZSwgbWF0Y2hpbmcgd2hhdCB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgdG9kYXkuKVxuICpcbiAqIFRoZSBwcm92aWRlciBmYW1pbHkgaXMgZGV0ZWN0ZWQgZnJvbSB0aGUgZW5kcG9pbnQgaWQgdGhlIHNhbWUgd2F5XG4gKiBgQGRieC10b29scy9zaGFyZWQtbW9kZWxgJ3MgYGNsYXNzaWZ5QnlGYW1pbHlgIGtleXMgb2ZmIG5hbWUgc3Vic3RyaW5nc1xuICogKGBncHRgIC8gYGdlbWluaWAgLyBgY2xhdWRlYCksIHNvIGEgcmVzb2x2ZWQgZW5kcG9pbnQgbGlrZVxuICogYGRhdGFicmlja3MtZ3B0LTVgIG9yIGBkYXRhYnJpY2tzLWdlbWluaS0zLXByb2AgbWFwcyB0byBpdHMgQVBJIHNoYXBlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBtZXRhZGF0YSwgcG9saWN5IH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyoqIEEgd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIHByb3ZpZGVyIGZhbWlseS4gKi9cbmV4cG9ydCB0eXBlIFdlYlNlYXJjaFByb3ZpZGVyID0gXCJvcGVuYWlcIiB8IFwiZ2VtaW5pXCI7XG5cbi8qKiBTZXJpYWxpemVkIHByb3ZpZGVyIHJlcXVlc3QgZnJhZ21lbnQgZm9yIG5hdGl2ZSB3ZWIgc2VhcmNoLiAqL1xuZXhwb3J0IGNvbnN0IFdlYlNlYXJjaFByb3ZpZGVyU3BlY1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgYXBpOiB6XG4gICAgICAuZW51bShbXCJyZXNwb25zZXNcIiwgXCJjaGF0XCJdKVxuICAgICAgLmRlc2NyaWJlKFwiRGF0YWJyaWNrcyBzZXJ2aW5nIEFQSSB0aGF0IGFjY2VwdHMgdGhlIHByb3ZpZGVyIHJlcXVlc3QuXCIpLFxuICAgIHJlcXVlc3Q6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgICAuZGVzY3JpYmUoXCJQcm92aWRlci1zcGVjaWZpYyBmaWVsZHMgbWVyZ2VkIGludG8gdGhlIHNlcnZpbmcgcmVxdWVzdCBib2R5LlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIk5hdGl2ZSB3ZWItc2VhcmNoIHJlcXVlc3QgY29udHJhY3QgZm9yIG9uZSBwcm92aWRlciBmYW1pbHkuXCIpO1xuXG4vKiogSG93IGEgcHJvdmlkZXIncyBuYXRpdmUgd2ViLXNlYXJjaCBjYWxsIGlzIHNoYXBlZC4gKi9cbmV4cG9ydCB0eXBlIFdlYlNlYXJjaFByb3ZpZGVyU3BlYyA9IHouaW5mZXI8dHlwZW9mIFdlYlNlYXJjaFByb3ZpZGVyU3BlY1NjaGVtYT47XG5cbi8qKlxuICogQnVpbHQtaW4gcHJvdmlkZXIgLT4gdG9vbC1zcGVjIG1hcC4gT3BlcmF0b3JzIGNhbiBvdmVycmlkZSBvciBleHRlbmQgdGhpc1xuICogcGVyIHByb3ZpZGVyIHZpYSB0aGUgcGx1Z2luJ3MgYHdlYlNlYXJjaFRvb2xzYCBjb25maWcgKGVudlxuICogYFdFQl9TRUFSQ0hfVE9PTFNgKSwgd2hpY2ggaXMgbWVyZ2VkIG92ZXIgdGhlc2UgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBXRUJfU0VBUkNIX1BST1ZJREVSUzogUmVhZG9ubHk8UmVjb3JkPFdlYlNlYXJjaFByb3ZpZGVyLCBXZWJTZWFyY2hQcm92aWRlclNwZWM+PiA9IHtcbiAgb3BlbmFpOiB7IGFwaTogXCJyZXNwb25zZXNcIiwgcmVxdWVzdDogeyB0b29sczogW3sgdHlwZTogXCJ3ZWJfc2VhcmNoXCIgfV0gfSB9LFxuICBnZW1pbmk6IHsgYXBpOiBcImNoYXRcIiwgcmVxdWVzdDogeyBnb29nbGVfc2VhcmNoOiB7fSB9IH0sXG59O1xuXG4vKipcbiAqIE1hcCBhIG1vZGVsLW93bmVkIGZhbWlseSB2YWx1ZSB0byBpdHMgbmF0aXZlIHdlYi1zZWFyY2ggcHJvdmlkZXIgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJTZWFyY2hQcm92aWRlckZvckZhbWlseShcbiAgZmFtaWx5OiBwb2xpY3kuTW9kZWxGYW1pbHkgfCB1bmRlZmluZWQsXG4pOiBXZWJTZWFyY2hQcm92aWRlciB8IG51bGwge1xuICBzd2l0Y2ggKGZhbWlseSkge1xuICAgIGNhc2UgcG9saWN5Lk1vZGVsRmFtaWx5LkdwdDpcbiAgICAgIHJldHVybiBcIm9wZW5haVwiO1xuICAgIGNhc2UgcG9saWN5Lk1vZGVsRmFtaWx5LkdlbWluaTpcbiAgICAgIHJldHVybiBcImdlbWluaVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogV2hldGhlciBhIG1vZGVsIGhhcyBib3RoIG5hdGl2ZSBjYXBhYmlsaXR5IGFuZCBhIHN1cHBvcnRlZCBwcm92aWRlciBjb250cmFjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1dlYlNlYXJjaChtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBpZGVudGl0eSA9IHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIiA/IG1vZGVsIDogKG1vZGVsLm1vZGVsU2VydmljZU5hbWUgPz8gbW9kZWwubmFtZSk7XG4gIHJldHVybiAoXG4gICAgd2ViU2VhcmNoUHJvdmlkZXJGb3JGYW1pbHkocG9saWN5Lm1vZGVsRmFtaWx5KGlkZW50aXR5KSkgIT09IG51bGwgJiZcbiAgICBtZXRhZGF0YS5tb2RlbENhcGFiaWxpdGllc0Zvcihtb2RlbCkud2ViU2VhcmNoXG4gICk7XG59XG5cbi8qKlxuICogUnVudGltZSBzaGFwZSBvZiBvbmUgZW50cnkgaW4gdGhlIG9wZXJhdG9yIG92ZXJyaWRlIG1hcC4gVGhlIG1hcCBhcnJpdmVzIGFzXG4gKiBwYXJzZWQgSlNPTiAoY29uZmlnIG9yIGBXRUJfU0VBUkNIX1RPT0xTYCksIHNvIGl0IGlzIHZhbGlkYXRlZCByYXRoZXIgdGhhblxuICogYXNzZXJ0ZWQuXG4gKi9cbmNvbnN0IHByb3ZpZGVyT3ZlcnJpZGVTY2hlbWEgPSBXZWJTZWFyY2hQcm92aWRlclNwZWNTY2hlbWEucGFydGlhbCgpXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQYXJ0aWFsIG5hdGl2ZSB3ZWItc2VhcmNoIHByb3ZpZGVyIG92ZXJyaWRlLlwiKTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUge0BsaW5rIFdlYlNlYXJjaFByb3ZpZGVyU3BlY30gZm9yIGEgcHJvdmlkZXI6IHRoZVxuICogYnVpbHQtaW4gZGVmYXVsdCwgd2l0aCBhbnkgb3BlcmF0b3Igb3ZlcnJpZGUgKHRoZSBgd2ViU2VhcmNoVG9vbHNgIG1hcCxcbiAqIGtleWVkIGJ5IHByb3ZpZGVyKSBzaGFsbG93LW1lcmdlZCBvdmVyIGl0LiBBbiBvdmVycmlkZSBtYXkgcmVwbGFjZSBqdXN0IHRoZVxuICogYHJlcXVlc3RgIGZyYWdtZW50IG9yIGFsc28gdGhlIGBhcGlgLiBBbiBvdmVycmlkZVxuICogdGhhdCBpcyBub3Qgb25lIG9mIHRob3NlIHR3byBmaWVsZHMgaXMgYSBkZXBsb3ltZW50IG1pc3Rha2UgdGhhdCB3b3VsZFxuICogb3RoZXJ3aXNlIGJlIHNpbGVudGx5IGRyb3BwZWQsIHNvIGl0IHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYlNlYXJjaFRvb2xTcGVjKFxuICBwcm92aWRlcjogV2ViU2VhcmNoUHJvdmlkZXIsXG4gIG92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogV2ViU2VhcmNoUHJvdmlkZXJTcGVjIHtcbiAgY29uc3QgYmFzZSA9IFdFQl9TRUFSQ0hfUFJPVklERVJTW3Byb3ZpZGVyXTtcbiAgY29uc3QgcmF3ID0gb3ZlcnJpZGVzPy5bcHJvdmlkZXJdO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBiYXNlO1xuICBjb25zdCBwYXJzZWQgPSBwcm92aWRlck92ZXJyaWRlU2NoZW1hLnNhZmVQYXJzZShyYXcpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIGB3ZWJTZWFyY2hUb29scy4ke3Byb3ZpZGVyfWAsXG4gICAgICByYXcsXG4gICAgICAnYW4gb2JqZWN0IHdpdGggYW4gb3B0aW9uYWwgXCJhcGlcIiAoXCJyZXNwb25zZXNcIiB8IFwiY2hhdFwiKSBhbmQgYW4gb3B0aW9uYWwgXCJyZXF1ZXN0XCIgb2JqZWN0JyxcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgYXBpOiBwYXJzZWQuZGF0YS5hcGkgPz8gYmFzZS5hcGksXG4gICAgcmVxdWVzdDogcGFyc2VkLmRhdGEucmVxdWVzdCA/PyBiYXNlLnJlcXVlc3QsXG4gIH07XG59XG4iXX0=
@@ -8,6 +8,7 @@
8
8
  * @module
9
9
  */
10
10
  import type { ExecutionResult } from "@databricks/appkit";
11
+ import { policy } from "@dbx-tools/model";
11
12
  import { type ResolvedWebSearchConfig, type WebSearchPluginConfig } from "./config.ts";
12
13
  import type { WebSearchExecutionSettings } from "./defaults.ts";
13
14
  /**
@@ -20,6 +21,8 @@ export type WebSearchExecutor = <T>(fn: (signal?: AbortSignal) => Promise<T>, se
20
21
  export interface WebSearchRuntime {
21
22
  config: ResolvedWebSearchConfig;
22
23
  execute: WebSearchExecutor;
24
+ /** Provider-family cooldown deadlines learned from workspace failures. */
25
+ familyCooldowns: Map<policy.ModelFamily, number>;
23
26
  }
24
27
  /** Runtime-aware operation input, retaining resolved-config compatibility. */
25
28
  export type WebSearchRuntimeInput = WebSearchRuntime | ResolvedWebSearchConfig;
@@ -19,11 +19,11 @@ const logger = log.logger("web-search/runtime");
19
19
  const directExecute = execution.directExecutor();
20
20
  /** Build an isolated runtime for one plugin instance or standalone tool set. */
21
21
  export function createWebSearchRuntime(overrides, execute = directExecute) {
22
- return { config: resolveWebSearchConfig(overrides), execute };
22
+ return { config: resolveWebSearchConfig(overrides), execute, familyCooldowns: new Map() };
23
23
  }
24
24
  /** Build an isolated runtime from config that has already been resolved. */
25
25
  export function createResolvedWebSearchRuntime(config, execute = directExecute) {
26
- return { config, execute };
26
+ return { config, execute, familyCooldowns: new Map() };
27
27
  }
28
28
  /** Normalize an explicit runtime or legacy resolved config for one operation. */
29
29
  export function toWebSearchRuntime(input) {
@@ -54,4 +54,4 @@ export async function executeRead(runtime, operation, settings, fn, signal) {
54
54
  signal,
55
55
  });
56
56
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHNCQUFzQixHQUd2QixNQUFNLGFBQWEsQ0FBQztBQUdyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFxQmhEOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUE4QixDQUFDO0FBRTdFLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFNBQWlDLEVBQ2pDLFVBQTZCLGFBQWE7SUFFMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNoRSxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsTUFBK0IsRUFDL0IsVUFBNkIsYUFBYTtJQUUxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzdCLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQTRCO0lBQzdELE9BQU8sU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUF5QixFQUFFLE9BQTBCO0lBQ3hGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUIsRUFDekIsU0FBaUIsRUFDakIsUUFBb0MsRUFDcEMsRUFBd0MsRUFDeEMsTUFBb0I7SUFFcEIsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUM7UUFDeEMsTUFBTSxFQUFFLFlBQVk7UUFDcEIsTUFBTTtRQUNOLFNBQVM7UUFDVCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLEVBQUU7UUFDRixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViLXNlYXJjaCBydW50aW1lIGNvbnN0cnVjdGlvbiBhbmQgZXhlY3V0aW9uIGhlbHBlcnMuXG4gKlxuICogRWFjaCBwbHVnaW4gaW5zdGFuY2Ugb3ducyBvbmUgcnVudGltZS4gU3RhbmRhbG9uZSB0b29sIGZhY3RvcmllcyBjcmVhdGUgdGhlaXJcbiAqIG93biBydW50aW1lLCBzbyBzZXBhcmF0ZSBhcHBzIGFuZCBkaXJlY3QgY29uc3VtZXJzIGNhbm5vdCBvdmVyd3JpdGUgZWFjaFxuICogb3RoZXIncyBwb2xpY3kgb3IgZXhlY3V0b3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcGx1Z2luRXhlY3V0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBleGVjdXRpb24sIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICByZXNvbHZlV2ViU2VhcmNoQ29uZmlnLFxuICB0eXBlIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnLFxuICB0eXBlIFdlYlNlYXJjaFBsdWdpbkNvbmZpZyxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2gvcnVudGltZVwiKTtcblxuLyoqXG4gKiBSdW5zIG9uZSBvdXRib3VuZCBjYWxsIHRocm91Z2ggQXBwS2l0J3MgaW50ZXJjZXB0b3IgY2hhaW4uIE1hdGNoZXNcbiAqIGBQbHVnaW4uZXhlY3V0ZSgpYCwgd2hpY2ggbmV2ZXIgdGhyb3dzOiBhIGZhaWx1cmUgY29tZXMgYmFjayBhc1xuICogYHsgb2s6IGZhbHNlIH1gLlxuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzLFxuKSA9PiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxUPj47XG5cbi8qKiBUaGUgcmVzb2x2ZWQgY29uZmlnIHBsdXMgdGhlIGV4ZWN1dG9yIG91dGJvdW5kIGNhbGxzIHJ1biB0aHJvdWdoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZWFyY2hSdW50aW1lIHtcbiAgY29uZmlnOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZztcbiAgZXhlY3V0ZTogV2ViU2VhcmNoRXhlY3V0b3I7XG59XG5cbi8qKiBSdW50aW1lLWF3YXJlIG9wZXJhdGlvbiBpbnB1dCwgcmV0YWluaW5nIHJlc29sdmVkLWNvbmZpZyBjb21wYXRpYmlsaXR5LiAqL1xuZXhwb3J0IHR5cGUgV2ViU2VhcmNoUnVudGltZUlucHV0ID0gV2ViU2VhcmNoUnVudGltZSB8IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnO1xuXG4vKipcbiAqIEV4ZWN1dG9yIHVzZWQgYnkgc3RhbmRhbG9uZSBydW50aW1lczogcnVuIHRoZSBjYWxsIGRpcmVjdGx5LCBtYXBwaW5nIGEgdGhyb3dcbiAqIG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc28gY2FsbCBzaXRlcyBicmFuY2ggb24gYG9rYFxuICogZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZSA9IGV4ZWN1dGlvbi5kaXJlY3RFeGVjdXRvcjxXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxuLyoqIEJ1aWxkIGFuIGlzb2xhdGVkIHJ1bnRpbWUgZm9yIG9uZSBwbHVnaW4gaW5zdGFuY2Ugb3Igc3RhbmRhbG9uZSB0b29sIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJTZWFyY2hSdW50aW1lKFxuICBvdmVycmlkZXM/OiBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG4gIGV4ZWN1dGU6IFdlYlNlYXJjaEV4ZWN1dG9yID0gZGlyZWN0RXhlY3V0ZSxcbik6IFdlYlNlYXJjaFJ1bnRpbWUge1xuICByZXR1cm4geyBjb25maWc6IHJlc29sdmVXZWJTZWFyY2hDb25maWcob3ZlcnJpZGVzKSwgZXhlY3V0ZSB9O1xufVxuXG4vKiogQnVpbGQgYW4gaXNvbGF0ZWQgcnVudGltZSBmcm9tIGNvbmZpZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZWRXZWJTZWFyY2hSdW50aW1lKFxuICBjb25maWc6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnLFxuICBleGVjdXRlOiBXZWJTZWFyY2hFeGVjdXRvciA9IGRpcmVjdEV4ZWN1dGUsXG4pOiBXZWJTZWFyY2hSdW50aW1lIHtcbiAgcmV0dXJuIHsgY29uZmlnLCBleGVjdXRlIH07XG59XG5cbi8qKiBOb3JtYWxpemUgYW4gZXhwbGljaXQgcnVudGltZSBvciBsZWdhY3kgcmVzb2x2ZWQgY29uZmlnIGZvciBvbmUgb3BlcmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvV2ViU2VhcmNoUnVudGltZShpbnB1dDogV2ViU2VhcmNoUnVudGltZUlucHV0KTogV2ViU2VhcmNoUnVudGltZSB7XG4gIHJldHVybiBcImV4ZWN1dGVcIiBpbiBpbnB1dCA/IGlucHV0IDogY3JlYXRlUmVzb2x2ZWRXZWJTZWFyY2hSdW50aW1lKGlucHV0KTtcbn1cblxuLyoqIEluc3RhbGwgYW4gZXhlY3V0b3Igb24gYW4gZXhwbGljaXQgcnVudGltZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRXZWJTZWFyY2hFeGVjdXRvcihydW50aW1lOiBXZWJTZWFyY2hSdW50aW1lLCBleGVjdXRlOiBXZWJTZWFyY2hFeGVjdXRvcik6IHZvaWQge1xuICBydW50aW1lLmV4ZWN1dGUgPSBleGVjdXRlO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgaWRlbXBvdGVudCByZWFkIHRocm91Z2ggdGhlIHJ1bnRpbWUgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIGNhbGwgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aFxuICogYSBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlUmVhZDxUPihcbiAgcnVudGltZTogV2ViU2VhcmNoUnVudGltZSxcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHBsdWdpbkV4ZWN1dGlvbi5ydW5QbHVnaW5FeGVjdXRpb24oe1xuICAgIHBsdWdpbjogXCJ3ZWItc2VhcmNoXCIsXG4gICAgbG9nZ2VyLFxuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlOiBydW50aW1lLmV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICB9KTtcbn1cbiJdfQ==
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHNCQUFzQixHQUd2QixNQUFNLGFBQWEsQ0FBQztBQUdyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUF1QmhEOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUE4QixDQUFDO0FBRTdFLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFNBQWlDLEVBQ2pDLFVBQTZCLGFBQWE7SUFFMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM1RixDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsTUFBK0IsRUFDL0IsVUFBNkIsYUFBYTtJQUUxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3pELENBQUM7QUFFRCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQTRCO0lBQzdELE9BQU8sU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUF5QixFQUFFLE9BQTBCO0lBQ3hGLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUIsRUFDekIsU0FBaUIsRUFDakIsUUFBb0MsRUFDcEMsRUFBd0MsRUFDeEMsTUFBb0I7SUFFcEIsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUM7UUFDeEMsTUFBTSxFQUFFLFlBQVk7UUFDcEIsTUFBTTtRQUNOLFNBQVM7UUFDVCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLEVBQUU7UUFDRixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViLXNlYXJjaCBydW50aW1lIGNvbnN0cnVjdGlvbiBhbmQgZXhlY3V0aW9uIGhlbHBlcnMuXG4gKlxuICogRWFjaCBwbHVnaW4gaW5zdGFuY2Ugb3ducyBvbmUgcnVudGltZS4gU3RhbmRhbG9uZSB0b29sIGZhY3RvcmllcyBjcmVhdGUgdGhlaXJcbiAqIG93biBydW50aW1lLCBzbyBzZXBhcmF0ZSBhcHBzIGFuZCBkaXJlY3QgY29uc3VtZXJzIGNhbm5vdCBvdmVyd3JpdGUgZWFjaFxuICogb3RoZXIncyBwb2xpY3kgb3IgZXhlY3V0b3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcGx1Z2luRXhlY3V0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBwb2xpY3kgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgZXhlY3V0aW9uLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyxcbiAgdHlwZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgdHlwZSBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyB9IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ3ZWItc2VhcmNoL3J1bnRpbWVcIik7XG5cbi8qKlxuICogUnVucyBvbmUgb3V0Ym91bmQgY2FsbCB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgV2ViU2VhcmNoRXhlY3V0b3IgPSA8VD4oXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNldHRpbmdzOiBXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncyxcbikgPT4gUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8VD4+O1xuXG4vKiogVGhlIHJlc29sdmVkIGNvbmZpZyBwbHVzIHRoZSBleGVjdXRvciBvdXRib3VuZCBjYWxscyBydW4gdGhyb3VnaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUnVudGltZSB7XG4gIGNvbmZpZzogUmVzb2x2ZWRXZWJTZWFyY2hDb25maWc7XG4gIGV4ZWN1dGU6IFdlYlNlYXJjaEV4ZWN1dG9yO1xuICAvKiogUHJvdmlkZXItZmFtaWx5IGNvb2xkb3duIGRlYWRsaW5lcyBsZWFybmVkIGZyb20gd29ya3NwYWNlIGZhaWx1cmVzLiAqL1xuICBmYW1pbHlDb29sZG93bnM6IE1hcDxwb2xpY3kuTW9kZWxGYW1pbHksIG51bWJlcj47XG59XG5cbi8qKiBSdW50aW1lLWF3YXJlIG9wZXJhdGlvbiBpbnB1dCwgcmV0YWluaW5nIHJlc29sdmVkLWNvbmZpZyBjb21wYXRpYmlsaXR5LiAqL1xuZXhwb3J0IHR5cGUgV2ViU2VhcmNoUnVudGltZUlucHV0ID0gV2ViU2VhcmNoUnVudGltZSB8IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnO1xuXG4vKipcbiAqIEV4ZWN1dG9yIHVzZWQgYnkgc3RhbmRhbG9uZSBydW50aW1lczogcnVuIHRoZSBjYWxsIGRpcmVjdGx5LCBtYXBwaW5nIGEgdGhyb3dcbiAqIG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc28gY2FsbCBzaXRlcyBicmFuY2ggb24gYG9rYFxuICogZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZSA9IGV4ZWN1dGlvbi5kaXJlY3RFeGVjdXRvcjxXZWJTZWFyY2hFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxuLyoqIEJ1aWxkIGFuIGlzb2xhdGVkIHJ1bnRpbWUgZm9yIG9uZSBwbHVnaW4gaW5zdGFuY2Ugb3Igc3RhbmRhbG9uZSB0b29sIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJTZWFyY2hSdW50aW1lKFxuICBvdmVycmlkZXM/OiBXZWJTZWFyY2hQbHVnaW5Db25maWcsXG4gIGV4ZWN1dGU6IFdlYlNlYXJjaEV4ZWN1dG9yID0gZGlyZWN0RXhlY3V0ZSxcbik6IFdlYlNlYXJjaFJ1bnRpbWUge1xuICByZXR1cm4geyBjb25maWc6IHJlc29sdmVXZWJTZWFyY2hDb25maWcob3ZlcnJpZGVzKSwgZXhlY3V0ZSwgZmFtaWx5Q29vbGRvd25zOiBuZXcgTWFwKCkgfTtcbn1cblxuLyoqIEJ1aWxkIGFuIGlzb2xhdGVkIHJ1bnRpbWUgZnJvbSBjb25maWcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVkV2ViU2VhcmNoUnVudGltZShcbiAgY29uZmlnOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgZXhlY3V0ZTogV2ViU2VhcmNoRXhlY3V0b3IgPSBkaXJlY3RFeGVjdXRlLFxuKTogV2ViU2VhcmNoUnVudGltZSB7XG4gIHJldHVybiB7IGNvbmZpZywgZXhlY3V0ZSwgZmFtaWx5Q29vbGRvd25zOiBuZXcgTWFwKCkgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBhbiBleHBsaWNpdCBydW50aW1lIG9yIGxlZ2FjeSByZXNvbHZlZCBjb25maWcgZm9yIG9uZSBvcGVyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gdG9XZWJTZWFyY2hSdW50aW1lKGlucHV0OiBXZWJTZWFyY2hSdW50aW1lSW5wdXQpOiBXZWJTZWFyY2hSdW50aW1lIHtcbiAgcmV0dXJuIFwiZXhlY3V0ZVwiIGluIGlucHV0ID8gaW5wdXQgOiBjcmVhdGVSZXNvbHZlZFdlYlNlYXJjaFJ1bnRpbWUoaW5wdXQpO1xufVxuXG4vKiogSW5zdGFsbCBhbiBleGVjdXRvciBvbiBhbiBleHBsaWNpdCBydW50aW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFdlYlNlYXJjaEV4ZWN1dG9yKHJ1bnRpbWU6IFdlYlNlYXJjaFJ1bnRpbWUsIGV4ZWN1dGU6IFdlYlNlYXJjaEV4ZWN1dG9yKTogdm9pZCB7XG4gIHJ1bnRpbWUuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogUnVuIG9uZSBpZGVtcG90ZW50IHJlYWQgdGhyb3VnaCB0aGUgcnVudGltZSBleGVjdXRvciBhbmQgdW53cmFwIGl0LlxuICpcbiAqIGBleGVjdXRlKClgIG5ldmVyIHRocm93cywgc28gYSBmYWlsZWQgY2FsbCBhcnJpdmVzIGFzIGB7IG9rOiBmYWxzZSB9YCB3aXRoXG4gKiBhIHN0YXR1cyB0aGUgaW50ZXJjZXB0b3JzIGFscmVhZHkgc2FuaXRpemVkOyBpdCBpcyBsb2dnZWQgaGVyZSBhbmQgcmUtcmFpc2VkXG4gKiBhcyBhIHN0YWJsZSB7QGxpbmsgRXhlY3V0aW9uRXJyb3J9IHNvIGFuIHVwc3RyZWFtIG1lc3NhZ2UgbmV2ZXIgYmVjb21lcyB0aGVcbiAqIGNhbGxlcidzIGVycm9yIHRleHQuIGBzaWduYWxgIGlzIHRoZSBjYWxsZXIncyBvd24gY2FuY2VsbGF0aW9uIChhbiBhZ2VudFxuICogcnVuLCBhIHJlcXVlc3QgdGVhcmRvd24pOyBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgc2lnbmFsIHRoZSB0aW1lb3V0XG4gKiBpbnRlcmNlcHRvciBzdXBwbGllcyBzbyBlaXRoZXIgb25lIHVud2luZHMgdGhlIEkvTy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVSZWFkPFQ+KFxuICBydW50aW1lOiBXZWJTZWFyY2hSdW50aW1lLFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgc2V0dGluZ3M6IFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzLFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gcGx1Z2luRXhlY3V0aW9uLnJ1blBsdWdpbkV4ZWN1dGlvbih7XG4gICAgcGx1Z2luOiBcIndlYi1zZWFyY2hcIixcbiAgICBsb2dnZXIsXG4gICAgb3BlcmF0aW9uLFxuICAgIHNldHRpbmdzLFxuICAgIGV4ZWN1dGU6IHJ1bnRpbWUuZXhlY3V0ZSxcbiAgICBmbixcbiAgICBzaWduYWwsXG4gIH0pO1xufVxuIl19
@@ -31,6 +31,12 @@ export declare const webSearchRequestSchema: z.ZodObject<{
31
31
  }, z.core.$strip>;
32
32
  /** A validated `web_search` request. */
33
33
  export type WebSearchRequest = z.infer<typeof webSearchRequestSchema>;
34
+ /** Model-facing `web_search` input; the host owns model selection. */
35
+ export declare const webSearchToolRequestSchema: z.ZodObject<{
36
+ query: z.ZodString;
37
+ }, z.core.$strip>;
38
+ /** Model-facing `web_search` request. */
39
+ export type WebSearchToolRequest = z.infer<typeof webSearchToolRequestSchema>;
34
40
  /** Schema for a single source the model cited while answering. */
35
41
  export declare const webSearchCitationSchema: z.ZodObject<{
36
42
  url: z.ZodString;
package/lib/src/schema.js CHANGED
@@ -47,14 +47,15 @@ export const webSearchRequestSchema = z.object({
47
47
  .string()
48
48
  .optional()
49
49
  .describe(stringUtils.toDescription(`
50
- Optional web-search-capable model to use (a Databricks serving
51
- endpoint name like "databricks-gemini-3-pro", a loose name like "gpt"
52
- or "gemini", or a capability class). Defaults to the plugin's
53
- configured web-search model. The web-search tool resolves its own
54
- model independently of the calling agent's chat model, since not
55
- every chat model supports web search.
50
+ Optional calling-model preference. The tool always tries the highest
51
+ web-search-capable Gemini first. When Gemini is unavailable, a matching
52
+ GPT endpoint wins before the highest-ranked GPT fallback.
56
53
  `)),
57
54
  });
55
+ /** Model-facing `web_search` input; the host owns model selection. */
56
+ export const webSearchToolRequestSchema = webSearchRequestSchema
57
+ .omit({ model: true })
58
+ .describe("Model-facing web-search input with host-owned model selection.");
58
59
  /** Schema for a single source the model cited while answering. */
59
60
  export const webSearchCitationSchema = z.object({
60
61
  url: z.string().describe("The source URL the answer drew on."),
@@ -99,4 +100,4 @@ export const webFetchResultSchema = z.object({
99
100
  content: z.string().describe("The page content in the requested format (text or html)."),
100
101
  truncated: z.boolean().describe("True when `content` was cut off at the length cap."),
101
102
  });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDOzs7Ozs7O0NBT3BFLENBQUMsQ0FBQztBQUVILG9HQUFvRztBQUNwRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDOzs7Ozs7Q0FNbkUsQ0FBQyxDQUFDO0FBRUgsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1AsNEhBQTRILENBQzdIO0lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsV0FBVyxDQUFDLGFBQWEsQ0FBQzs7Ozs7OztPQU96QixDQUFDLENBQ0g7Q0FDSixDQUFDLENBQUM7QUFLSCxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQztJQUM5RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQztJQUMvRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQztDQUM1RixDQUFDLENBQUM7QUFLSCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQztJQUNsRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQztJQUNyRixTQUFTLEVBQUUsQ0FBQztTQUNULEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztTQUM5QixRQUFRLENBQ1AsMEhBQTBILENBQzNIO0lBQ0gsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELENBQUM7Q0FDN0UsQ0FBQyxDQUFDO0FBS0gsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsR0FBRyxFQUFFLENBQUM7U0FDSCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1AsNElBQTRJLENBQzdJO0lBQ0gsTUFBTSxFQUFFLENBQUM7U0FDTixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdEIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUNQLFdBQVcsQ0FBQyxhQUFhLENBQUM7Ozs7T0FJekIsQ0FBQyxDQUNIO0lBQ0gsU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixHQUFHLEVBQUU7U0FDTCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsK0dBQStHLENBQ2hIO0NBQ0osQ0FBQyxDQUFDO0FBS0gsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUM7SUFDcEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUM7SUFDaEUsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0RBQW9ELENBQUM7SUFDakcsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMseUNBQXlDLENBQUM7SUFDaEYsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMERBQTBELENBQUM7SUFDeEYsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0RBQW9ELENBQUM7Q0FDdEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXaXJlLWZvcm1hdCBjb250cmFjdCBmb3IgdGhlIHdlYi1zZWFyY2ggYWRkLW9uOiB0aGUgdHdvIHRvb2wgaW5wdXRzIGFcbiAqIG1vZGVsIGZpbGxzIGluIChgd2ViX3NlYXJjaGAsIGB3ZWJfZmV0Y2hgKSBhbmQgdGhlIHJlc3VsdHMgaGFuZGVkIGJhY2suXG4gKiBQdXJlIHpvZCArIGluZmVycmVkIHR5cGVzIChubyBOb2RlLW9ubHkgaW1wb3J0cykgc28gdGhlIHRvb2wgbGF5ZXIsIHRoZVxuICogcGx1Z2luLCBhbmQgYW55IGZ1dHVyZSBVSSB2YWxpZGF0ZSAvIHR5cGUgYWdhaW5zdCBvbmUgZGVmaW5pdGlvbi5cbiAqXG4gKiBgd2ViX3NlYXJjaGAgaXMgYmFja2VkIGJ5IHRoZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgbmF0aXZlIHdlYi1zZWFyY2hcbiAqIHRvb2wgKHNlZSBgcHJvdmlkZXIudHNgKTogdGhlIG1vZGVsIHNlYXJjaGVzIHRoZSB3ZWIgc2VydmVyLXNpZGUgYW5kXG4gKiByZXR1cm5zIGEgc3ludGhlc2l6ZWQgYW5zd2VyIHBsdXMgdGhlIHNvdXJjZXMgaXQgdXNlZC4gYHdlYl9mZXRjaGAgcmVhZHMgYVxuICogc2luZ2xlIHBhZ2UncyBjb250ZW50cyB2aWEgZ290LXNjcmFwaW5nLlxuICpcbiAqIEFycmF5IGZpZWxkcyBpbnRlbnRpb25hbGx5IGF2b2lkIGAubWluKClgIC8gYC5ub25lbXB0eSgpYDogdGhvc2UgZW1pdFxuICogYG1pbkl0ZW1zYCBpbiB0aGUgSlNPTiBzY2hlbWEsIHdoaWNoIHNvbWUgTW9kZWwgU2VydmluZyBlbmRwb2ludHMgcmVqZWN0XG4gKiAoXCJhcnJheSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBtaW5JdGVtc1wiKSB3aGVuIHRoZSBzY2hlbWEgaXMgZm9yd2FyZGVkIGFzIGFcbiAqIHRvb2wgZGVmaW5pdGlvbiAtIHRoZSBzYW1lIGNvbnN0cmFpbnQgdGhlIGVtYWlsIGFkZC1vbiBkb2N1bWVudHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKlxuICogRGVzY3JpcHRpb24gdGhlIG1vZGVsIHJlYWRzIGZvciBgd2ViX3NlYXJjaGAuIFNoYXJlZCBieSB0aGUgTWFzdHJhIHRvb2wgYW5kXG4gKiB0aGUgQXBwS2l0IHRvb2wgcHJvdmlkZXIgc28gYm90aCBob3N0cyBkZXNjcmliZSB0aGUgdG9vbCBpZGVudGljYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiA9IHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICBTZWFyY2ggdGhlIHdlYiBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhbmQgZ2V0IGFuIGFuc3dlciBzeW50aGVzaXplZCBmcm9tXG4gIGxpdmUgcmVzdWx0cywgd2l0aCB0aGUgc291cmNlcyBpdCB1c2VkLiBQYXNzIGEgbmF0dXJhbC1sYW5ndWFnZSBxdWVyeTtcbiAgdGhlIHNlYXJjaCBydW5zIGluc2lkZSBhIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCAoY2hvc2VuIGluZGVwZW5kZW50bHlcbiAgb2YgeW91ciBvd24gbW9kZWwpLiBPcHRpb25hbGx5IHBhc3MgYSBtb2RlbCBuYW1lIHRvIHVzZSBhIHNwZWNpZmljXG4gIHdlYi1zZWFyY2ggbW9kZWwuIFVzZSBpdCB3aGVuZXZlciBhIHF1ZXN0aW9uIG5lZWRzIHVwLXRvLWRhdGUgb3IgZXh0ZXJuYWxcbiAgaW5mb3JtYXRpb24geW91IGRvbid0IGFscmVhZHkgaGF2ZS5cbmApO1xuXG4vKiogRGVzY3JpcHRpb24gdGhlIG1vZGVsIHJlYWRzIGZvciBgd2ViX2ZldGNoYC4gU2hhcmVkIGxpa2Uge0BsaW5rIFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTn0uICovXG5leHBvcnQgY29uc3QgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04gPSBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgRmV0Y2ggYSBzaW5nbGUgd2ViIHBhZ2UgYW5kIHJldHVybiBpdHMgcmVhZGFibGUgY29udGVudHMuIFBhc3MgYW5cbiAgYWJzb2x1dGUgVVJMIChpbmNsdWRpbmcgaHR0cHM6Ly8pOyBzZXQgZm9ybWF0IHRvIFwiaHRtbFwiIGZvciByYXcgbWFya3VwXG4gIGluc3RlYWQgb2YgZXh0cmFjdGVkIHRleHQuIFVzZSBpdCB0byByZWFkIGEgcGFnZSByZXR1cm5lZCBieSB3ZWJfc2VhcmNoXG4gIG9yIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLiBDb250ZW50IGlzIGxlbmd0aC1jYXBwZWQ7IGZldGNoaW5nIGEgVVJMIG91dHNpZGVcbiAgdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCBpcyByZWZ1c2VkLlxuYCk7XG5cbi8qKiBTY2hlbWEgZm9yIHRoZSBgd2ViX3NlYXJjaGAgdG9vbCBpbnB1dC4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVyeTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiV2hhdCB0byBzZWFyY2ggdGhlIHdlYiBmb3IsIHBocmFzZWQgYXMgYSBuYXR1cmFsLWxhbmd1YWdlIHF1ZXN0aW9uIG9yIHJlcXVlc3QuIFRoZSBtb2RlbCBzZWFyY2hlcyBhbmQgYW5zd2VycyBpbiBvbmUgc3RlcC5cIixcbiAgICApLFxuICBtb2RlbDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIE9wdGlvbmFsIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCB0byB1c2UgKGEgRGF0YWJyaWNrcyBzZXJ2aW5nXG4gICAgICAgIGVuZHBvaW50IG5hbWUgbGlrZSBcImRhdGFicmlja3MtZ2VtaW5pLTMtcHJvXCIsIGEgbG9vc2UgbmFtZSBsaWtlIFwiZ3B0XCJcbiAgICAgICAgb3IgXCJnZW1pbmlcIiwgb3IgYSBjYXBhYmlsaXR5IGNsYXNzKS4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzXG4gICAgICAgIGNvbmZpZ3VyZWQgd2ViLXNlYXJjaCBtb2RlbC4gVGhlIHdlYi1zZWFyY2ggdG9vbCByZXNvbHZlcyBpdHMgb3duXG4gICAgICAgIG1vZGVsIGluZGVwZW5kZW50bHkgb2YgdGhlIGNhbGxpbmcgYWdlbnQncyBjaGF0IG1vZGVsLCBzaW5jZSBub3RcbiAgICAgICAgZXZlcnkgY2hhdCBtb2RlbCBzdXBwb3J0cyB3ZWIgc2VhcmNoLlxuICAgICAgYCksXG4gICAgKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgYHdlYl9zZWFyY2hgIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2Ygd2ViU2VhcmNoUmVxdWVzdFNjaGVtYT47XG5cbi8qKiBTY2hlbWEgZm9yIGEgc2luZ2xlIHNvdXJjZSB0aGUgbW9kZWwgY2l0ZWQgd2hpbGUgYW5zd2VyaW5nLiAqL1xuZXhwb3J0IGNvbnN0IHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICB1cmw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgc291cmNlIFVSTCB0aGUgYW5zd2VyIGRyZXcgb24uXCIpLFxuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHNvdXJjZSBwYWdlIHRpdGxlLCB3aGVuIGF2YWlsYWJsZS5cIiksXG4gIHNuaXBwZXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkEgc2hvcnQgZXhjZXJwdCBmcm9tIHRoZSBzb3VyY2UsIHdoZW4gYXZhaWxhYmxlLlwiKSxcbn0pO1xuXG4vKiogQSBzaW5nbGUgY2l0ZWQgc291cmNlICh7QGxpbmsgd2ViU2VhcmNoQ2l0YXRpb25TY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFdlYlNlYXJjaENpdGF0aW9uID0gei5pbmZlcjx0eXBlb2Ygd2ViU2VhcmNoQ2l0YXRpb25TY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgYHdlYl9zZWFyY2hgIHRvb2wgb3V0cHV0LiAqL1xuZXhwb3J0IGNvbnN0IHdlYlNlYXJjaFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcXVlcnk6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFY2hvIG9mIHRoZSBxdWVyeSB0aGF0IHdhcyBzZWFyY2hlZC5cIiksXG4gIGFuc3dlcjogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBtb2RlbCdzIGFuc3dlciwgc3ludGhlc2l6ZWQgZnJvbSBsaXZlIHdlYiByZXN1bHRzLlwiKSxcbiAgY2l0YXRpb25zOiB6XG4gICAgLmFycmF5KHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiU291cmNlcyB0aGUgYW5zd2VyIGRyZXcgb24uIFdoZW4gYW4gYWxsb3ctbGlzdCBpcyBjb25maWd1cmVkLCBjaXRhdGlvbnMgd2hvc2UgVVJMIGlzIG5vdCBwZXJtaXR0ZWQgYXJlIHNpbGVudGx5IG9taXR0ZWQuXCIsXG4gICAgKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgc2VydmluZyBlbmRwb2ludCB0aGF0IHByb2R1Y2VkIHRoZSBhbnN3ZXIuXCIpLFxufSk7XG5cbi8qKiBUaGUgb3V0Y29tZSBvZiBhIGB3ZWJfc2VhcmNoYCBjYWxsICh7QGxpbmsgd2ViU2VhcmNoUmVzdWx0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiB3ZWJTZWFyY2hSZXN1bHRTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgYHdlYl9mZXRjaGAgdG9vbCBpbnB1dC4gKi9cbmV4cG9ydCBjb25zdCB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVybDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiVGhlIGFic29sdXRlIFVSTCB0byBmZXRjaCAobXVzdCBpbmNsdWRlIHRoZSBzY2hlbWUsIGUuZy4gaHR0cHM6Ly8pLiBXaGVuIGFuIGFsbG93LWxpc3QgaXMgY29uZmlndXJlZCwgYSBVUkwgaXQgZG9lcyBub3QgcGVybWl0IGlzIHJlZnVzZWQuXCIsXG4gICAgKSxcbiAgZm9ybWF0OiB6XG4gICAgLmVudW0oW1widGV4dFwiLCBcImh0bWxcIl0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgICAgICAgUmV0dXJuIGZvcm1hdDogXCJ0ZXh0XCIgKGRlZmF1bHQpIHN0cmlwcyB0aGUgcGFnZSB0byByZWFkYWJsZSBwbGFpblxuICAgICAgICB0ZXh0OyBcImh0bWxcIiByZXR1cm5zIHRoZSByYXcgcmVzcG9uc2UgYm9keS4gUHJlZmVyIFwidGV4dFwiIHVubGVzcyB5b3VcbiAgICAgICAgbmVlZCB0aGUgbWFya3VwLlxuICAgICAgYCksXG4gICAgKSxcbiAgbWF4TGVuZ3RoOiB6XG4gICAgLm51bWJlcigpXG4gICAgLmludCgpXG4gICAgLnBvc2l0aXZlKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiVHJ1bmNhdGUgdGhlIHJldHVybmVkIGNvbnRlbnQgdG8gYXQgbW9zdCB0aGlzIG1hbnkgY2hhcmFjdGVycyAodGhlIHBsdWdpbiBjYXBzIHRoaXMgYXQgaXRzIGNvbmZpZ3VyZWQgbGltaXQpLlwiLFxuICAgICksXG59KTtcblxuLyoqIEEgdmFsaWRhdGVkIGB3ZWJfZmV0Y2hgIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBXZWJGZXRjaFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiB3ZWJGZXRjaFJlcXVlc3RTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciB0aGUgYHdlYl9mZXRjaGAgdG9vbCBvdXRwdXQuICovXG5leHBvcnQgY29uc3Qgd2ViRmV0Y2hSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVybDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBmaW5hbCBVUkwgZmV0Y2hlZCAoYWZ0ZXIgcmVkaXJlY3RzKS5cIiksXG4gIHN0YXR1czogei5udW1iZXIoKS5kZXNjcmliZShcIkhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlwiKSxcbiAgY29udGVudFR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlJlc3BvbnNlIGBDb250ZW50LVR5cGVgLCB3aGVuIHRoZSBzZXJ2ZXIgc2VudCBvbmUuXCIpLFxuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHBhZ2UgPHRpdGxlPiwgd2hlbiBvbmUgd2FzIHByZXNlbnQuXCIpLFxuICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHBhZ2UgY29udGVudCBpbiB0aGUgcmVxdWVzdGVkIGZvcm1hdCAodGV4dCBvciBodG1sKS5cIiksXG4gIHRydW5jYXRlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIHdoZW4gYGNvbnRlbnRgIHdhcyBjdXQgb2ZmIGF0IHRoZSBsZW5ndGggY2FwLlwiKSxcbn0pO1xuXG4vKiogVGhlIG91dGNvbWUgb2YgYSBgd2ViX2ZldGNoYCBjYWxsICh7QGxpbmsgd2ViRmV0Y2hSZXN1bHRTY2hlbWF9KS4gKi9cbmV4cG9ydCB0eXBlIFdlYkZldGNoUmVzdWx0ID0gei5pbmZlcjx0eXBlb2Ygd2ViRmV0Y2hSZXN1bHRTY2hlbWE+O1xuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDOzs7Ozs7O0NBT3BFLENBQUMsQ0FBQztBQUVILG9HQUFvRztBQUNwRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDOzs7Ozs7Q0FNbkUsQ0FBQyxDQUFDO0FBRUgsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1AsNEhBQTRILENBQzdIO0lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsV0FBVyxDQUFDLGFBQWEsQ0FBQzs7OztPQUl6QixDQUFDLENBQ0g7Q0FDSixDQUFDLENBQUM7QUFLSCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsc0JBQXNCO0tBQzdELElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNyQixRQUFRLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUs5RSxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQztJQUM5RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQztJQUMvRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQztDQUM1RixDQUFDLENBQUM7QUFLSCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQztJQUNsRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQztJQUNyRixTQUFTLEVBQUUsQ0FBQztTQUNULEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztTQUM5QixRQUFRLENBQ1AsMEhBQTBILENBQzNIO0lBQ0gsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELENBQUM7Q0FDN0UsQ0FBQyxDQUFDO0FBS0gsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsR0FBRyxFQUFFLENBQUM7U0FDSCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1AsNElBQTRJLENBQzdJO0lBQ0gsTUFBTSxFQUFFLENBQUM7U0FDTixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdEIsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUNQLFdBQVcsQ0FBQyxhQUFhLENBQUM7Ozs7T0FJekIsQ0FBQyxDQUNIO0lBQ0gsU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixHQUFHLEVBQUU7U0FDTCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsK0dBQStHLENBQ2hIO0NBQ0osQ0FBQyxDQUFDO0FBS0gsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUM7SUFDcEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUM7SUFDaEUsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0RBQW9ELENBQUM7SUFDakcsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMseUNBQXlDLENBQUM7SUFDaEYsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMERBQTBELENBQUM7SUFDeEYsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0RBQW9ELENBQUM7Q0FDdEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXaXJlLWZvcm1hdCBjb250cmFjdCBmb3IgdGhlIHdlYi1zZWFyY2ggYWRkLW9uOiB0aGUgdHdvIHRvb2wgaW5wdXRzIGFcbiAqIG1vZGVsIGZpbGxzIGluIChgd2ViX3NlYXJjaGAsIGB3ZWJfZmV0Y2hgKSBhbmQgdGhlIHJlc3VsdHMgaGFuZGVkIGJhY2suXG4gKiBQdXJlIHpvZCArIGluZmVycmVkIHR5cGVzIChubyBOb2RlLW9ubHkgaW1wb3J0cykgc28gdGhlIHRvb2wgbGF5ZXIsIHRoZVxuICogcGx1Z2luLCBhbmQgYW55IGZ1dHVyZSBVSSB2YWxpZGF0ZSAvIHR5cGUgYWdhaW5zdCBvbmUgZGVmaW5pdGlvbi5cbiAqXG4gKiBgd2ViX3NlYXJjaGAgaXMgYmFja2VkIGJ5IHRoZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgbmF0aXZlIHdlYi1zZWFyY2hcbiAqIHRvb2wgKHNlZSBgcHJvdmlkZXIudHNgKTogdGhlIG1vZGVsIHNlYXJjaGVzIHRoZSB3ZWIgc2VydmVyLXNpZGUgYW5kXG4gKiByZXR1cm5zIGEgc3ludGhlc2l6ZWQgYW5zd2VyIHBsdXMgdGhlIHNvdXJjZXMgaXQgdXNlZC4gYHdlYl9mZXRjaGAgcmVhZHMgYVxuICogc2luZ2xlIHBhZ2UncyBjb250ZW50cyB2aWEgZ290LXNjcmFwaW5nLlxuICpcbiAqIEFycmF5IGZpZWxkcyBpbnRlbnRpb25hbGx5IGF2b2lkIGAubWluKClgIC8gYC5ub25lbXB0eSgpYDogdGhvc2UgZW1pdFxuICogYG1pbkl0ZW1zYCBpbiB0aGUgSlNPTiBzY2hlbWEsIHdoaWNoIHNvbWUgTW9kZWwgU2VydmluZyBlbmRwb2ludHMgcmVqZWN0XG4gKiAoXCJhcnJheSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBtaW5JdGVtc1wiKSB3aGVuIHRoZSBzY2hlbWEgaXMgZm9yd2FyZGVkIGFzIGFcbiAqIHRvb2wgZGVmaW5pdGlvbiAtIHRoZSBzYW1lIGNvbnN0cmFpbnQgdGhlIGVtYWlsIGFkZC1vbiBkb2N1bWVudHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKlxuICogRGVzY3JpcHRpb24gdGhlIG1vZGVsIHJlYWRzIGZvciBgd2ViX3NlYXJjaGAuIFNoYXJlZCBieSB0aGUgTWFzdHJhIHRvb2wgYW5kXG4gKiB0aGUgQXBwS2l0IHRvb2wgcHJvdmlkZXIgc28gYm90aCBob3N0cyBkZXNjcmliZSB0aGUgdG9vbCBpZGVudGljYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiA9IHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICBTZWFyY2ggdGhlIHdlYiBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhbmQgZ2V0IGFuIGFuc3dlciBzeW50aGVzaXplZCBmcm9tXG4gIGxpdmUgcmVzdWx0cywgd2l0aCB0aGUgc291cmNlcyBpdCB1c2VkLiBQYXNzIGEgbmF0dXJhbC1sYW5ndWFnZSBxdWVyeTtcbiAgdGhlIHNlYXJjaCBydW5zIGluc2lkZSBhIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCAoY2hvc2VuIGluZGVwZW5kZW50bHlcbiAgb2YgeW91ciBvd24gbW9kZWwpLiBPcHRpb25hbGx5IHBhc3MgYSBtb2RlbCBuYW1lIHRvIHVzZSBhIHNwZWNpZmljXG4gIHdlYi1zZWFyY2ggbW9kZWwuIFVzZSBpdCB3aGVuZXZlciBhIHF1ZXN0aW9uIG5lZWRzIHVwLXRvLWRhdGUgb3IgZXh0ZXJuYWxcbiAgaW5mb3JtYXRpb24geW91IGRvbid0IGFscmVhZHkgaGF2ZS5cbmApO1xuXG4vKiogRGVzY3JpcHRpb24gdGhlIG1vZGVsIHJlYWRzIGZvciBgd2ViX2ZldGNoYC4gU2hhcmVkIGxpa2Uge0BsaW5rIFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTn0uICovXG5leHBvcnQgY29uc3QgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04gPSBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgRmV0Y2ggYSBzaW5nbGUgd2ViIHBhZ2UgYW5kIHJldHVybiBpdHMgcmVhZGFibGUgY29udGVudHMuIFBhc3MgYW5cbiAgYWJzb2x1dGUgVVJMIChpbmNsdWRpbmcgaHR0cHM6Ly8pOyBzZXQgZm9ybWF0IHRvIFwiaHRtbFwiIGZvciByYXcgbWFya3VwXG4gIGluc3RlYWQgb2YgZXh0cmFjdGVkIHRleHQuIFVzZSBpdCB0byByZWFkIGEgcGFnZSByZXR1cm5lZCBieSB3ZWJfc2VhcmNoXG4gIG9yIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLiBDb250ZW50IGlzIGxlbmd0aC1jYXBwZWQ7IGZldGNoaW5nIGEgVVJMIG91dHNpZGVcbiAgdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCBpcyByZWZ1c2VkLlxuYCk7XG5cbi8qKiBTY2hlbWEgZm9yIHRoZSBgd2ViX3NlYXJjaGAgdG9vbCBpbnB1dC4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVyeTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiV2hhdCB0byBzZWFyY2ggdGhlIHdlYiBmb3IsIHBocmFzZWQgYXMgYSBuYXR1cmFsLWxhbmd1YWdlIHF1ZXN0aW9uIG9yIHJlcXVlc3QuIFRoZSBtb2RlbCBzZWFyY2hlcyBhbmQgYW5zd2VycyBpbiBvbmUgc3RlcC5cIixcbiAgICApLFxuICBtb2RlbDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIE9wdGlvbmFsIGNhbGxpbmctbW9kZWwgcHJlZmVyZW5jZS4gVGhlIHRvb2wgYWx3YXlzIHRyaWVzIHRoZSBoaWdoZXN0XG4gICAgICAgIHdlYi1zZWFyY2gtY2FwYWJsZSBHZW1pbmkgZmlyc3QuIFdoZW4gR2VtaW5pIGlzIHVuYXZhaWxhYmxlLCBhIG1hdGNoaW5nXG4gICAgICAgIEdQVCBlbmRwb2ludCB3aW5zIGJlZm9yZSB0aGUgaGlnaGVzdC1yYW5rZWQgR1BUIGZhbGxiYWNrLlxuICAgICAgYCksXG4gICAgKSxcbn0pO1xuXG4vKiogQSB2YWxpZGF0ZWQgYHdlYl9zZWFyY2hgIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2Ygd2ViU2VhcmNoUmVxdWVzdFNjaGVtYT47XG5cbi8qKiBNb2RlbC1mYWNpbmcgYHdlYl9zZWFyY2hgIGlucHV0OyB0aGUgaG9zdCBvd25zIG1vZGVsIHNlbGVjdGlvbi4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2hUb29sUmVxdWVzdFNjaGVtYSA9IHdlYlNlYXJjaFJlcXVlc3RTY2hlbWFcbiAgLm9taXQoeyBtb2RlbDogdHJ1ZSB9KVxuICAuZGVzY3JpYmUoXCJNb2RlbC1mYWNpbmcgd2ViLXNlYXJjaCBpbnB1dCB3aXRoIGhvc3Qtb3duZWQgbW9kZWwgc2VsZWN0aW9uLlwiKTtcblxuLyoqIE1vZGVsLWZhY2luZyBgd2ViX3NlYXJjaGAgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIFdlYlNlYXJjaFRvb2xSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2Ygd2ViU2VhcmNoVG9vbFJlcXVlc3RTY2hlbWE+O1xuXG4vKiogU2NoZW1hIGZvciBhIHNpbmdsZSBzb3VyY2UgdGhlIG1vZGVsIGNpdGVkIHdoaWxlIGFuc3dlcmluZy4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2hDaXRhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdXJsOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHNvdXJjZSBVUkwgdGhlIGFuc3dlciBkcmV3IG9uLlwiKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBzb3VyY2UgcGFnZSB0aXRsZSwgd2hlbiBhdmFpbGFibGUuXCIpLFxuICBzbmlwcGV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBIHNob3J0IGV4Y2VycHQgZnJvbSB0aGUgc291cmNlLCB3aGVuIGF2YWlsYWJsZS5cIiksXG59KTtcblxuLyoqIEEgc2luZ2xlIGNpdGVkIHNvdXJjZSAoe0BsaW5rIHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBXZWJTZWFyY2hDaXRhdGlvbiA9IHouaW5mZXI8dHlwZW9mIHdlYlNlYXJjaENpdGF0aW9uU2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIGB3ZWJfc2VhcmNoYCB0b29sIG91dHB1dC4gKi9cbmV4cG9ydCBjb25zdCB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXJ5OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRWNobyBvZiB0aGUgcXVlcnkgdGhhdCB3YXMgc2VhcmNoZWQuXCIpLFxuICBhbnN3ZXI6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgbW9kZWwncyBhbnN3ZXIsIHN5bnRoZXNpemVkIGZyb20gbGl2ZSB3ZWIgcmVzdWx0cy5cIiksXG4gIGNpdGF0aW9uczogelxuICAgIC5hcnJheSh3ZWJTZWFyY2hDaXRhdGlvblNjaGVtYSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlNvdXJjZXMgdGhlIGFuc3dlciBkcmV3IG9uLiBXaGVuIGFuIGFsbG93LWxpc3QgaXMgY29uZmlndXJlZCwgY2l0YXRpb25zIHdob3NlIFVSTCBpcyBub3QgcGVybWl0dGVkIGFyZSBzaWxlbnRseSBvbWl0dGVkLlwiLFxuICAgICksXG4gIG1vZGVsOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHNlcnZpbmcgZW5kcG9pbnQgdGhhdCBwcm9kdWNlZCB0aGUgYW5zd2VyLlwiKSxcbn0pO1xuXG4vKiogVGhlIG91dGNvbWUgb2YgYSBgd2ViX3NlYXJjaGAgY2FsbCAoe0BsaW5rIHdlYlNlYXJjaFJlc3VsdFNjaGVtYX0pLiAqL1xuZXhwb3J0IHR5cGUgV2ViU2VhcmNoUmVzdWx0ID0gei5pbmZlcjx0eXBlb2Ygd2ViU2VhcmNoUmVzdWx0U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIGB3ZWJfZmV0Y2hgIHRvb2wgaW5wdXQuICovXG5leHBvcnQgY29uc3Qgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB1cmw6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlRoZSBhYnNvbHV0ZSBVUkwgdG8gZmV0Y2ggKG11c3QgaW5jbHVkZSB0aGUgc2NoZW1lLCBlLmcuIGh0dHBzOi8vKS4gV2hlbiBhbiBhbGxvdy1saXN0IGlzIGNvbmZpZ3VyZWQsIGEgVVJMIGl0IGRvZXMgbm90IHBlcm1pdCBpcyByZWZ1c2VkLlwiLFxuICAgICksXG4gIGZvcm1hdDogelxuICAgIC5lbnVtKFtcInRleHRcIiwgXCJodG1sXCJdKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFJldHVybiBmb3JtYXQ6IFwidGV4dFwiIChkZWZhdWx0KSBzdHJpcHMgdGhlIHBhZ2UgdG8gcmVhZGFibGUgcGxhaW5cbiAgICAgICAgdGV4dDsgXCJodG1sXCIgcmV0dXJucyB0aGUgcmF3IHJlc3BvbnNlIGJvZHkuIFByZWZlciBcInRleHRcIiB1bmxlc3MgeW91XG4gICAgICAgIG5lZWQgdGhlIG1hcmt1cC5cbiAgICAgIGApLFxuICAgICksXG4gIG1heExlbmd0aDogelxuICAgIC5udW1iZXIoKVxuICAgIC5pbnQoKVxuICAgIC5wb3NpdGl2ZSgpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlRydW5jYXRlIHRoZSByZXR1cm5lZCBjb250ZW50IHRvIGF0IG1vc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgKHRoZSBwbHVnaW4gY2FwcyB0aGlzIGF0IGl0cyBjb25maWd1cmVkIGxpbWl0KS5cIixcbiAgICApLFxufSk7XG5cbi8qKiBBIHZhbGlkYXRlZCBgd2ViX2ZldGNoYCByZXF1ZXN0LiAqL1xuZXhwb3J0IHR5cGUgV2ViRmV0Y2hSZXF1ZXN0ID0gei5pbmZlcjx0eXBlb2Ygd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hPjtcblxuLyoqIFNjaGVtYSBmb3IgdGhlIGB3ZWJfZmV0Y2hgIHRvb2wgb3V0cHV0LiAqL1xuZXhwb3J0IGNvbnN0IHdlYkZldGNoUmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICB1cmw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgZmluYWwgVVJMIGZldGNoZWQgKGFmdGVyIHJlZGlyZWN0cykuXCIpLFxuICBzdGF0dXM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJIVFRQIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS5cIiksXG4gIGNvbnRlbnRUeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJSZXNwb25zZSBgQ29udGVudC1UeXBlYCwgd2hlbiB0aGUgc2VydmVyIHNlbnQgb25lLlwiKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBwYWdlIDx0aXRsZT4sIHdoZW4gb25lIHdhcyBwcmVzZW50LlwiKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBwYWdlIGNvbnRlbnQgaW4gdGhlIHJlcXVlc3RlZCBmb3JtYXQgKHRleHQgb3IgaHRtbCkuXCIpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVHJ1ZSB3aGVuIGBjb250ZW50YCB3YXMgY3V0IG9mZiBhdCB0aGUgbGVuZ3RoIGNhcC5cIiksXG59KTtcblxuLyoqIFRoZSBvdXRjb21lIG9mIGEgYHdlYl9mZXRjaGAgY2FsbCAoe0BsaW5rIHdlYkZldGNoUmVzdWx0U2NoZW1hfSkuICovXG5leHBvcnQgdHlwZSBXZWJGZXRjaFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIHdlYkZldGNoUmVzdWx0U2NoZW1hPjtcbiJdfQ==
@@ -20,10 +20,14 @@
20
20
  *
21
21
  * @module
22
22
  */
23
- import { invoke, modelCatalog } from "@dbx-tools/model";
23
+ import type { AgentToolExecutionContext } from "@dbx-tools/appkit/tool-provider";
24
+ import { invoke, policy, modelCatalog } from "@dbx-tools/model";
25
+ import { type ServingEndpointSummary } from "@dbx-tools/shared-model";
26
+ import { type ResolvedWebSearchConfig } from "./config.ts";
24
27
  import { type WebSearchRuntimeInput } from "./runtime.ts";
25
28
  import type { WebSearchRequest, WebSearchResult } from "./schema.ts";
26
29
  type WorkspaceClientLike = modelCatalog.WorkspaceClientLike & invoke.AuthenticatingClientLike;
30
+ type ProgressWriter = NonNullable<AgentToolExecutionContext["writeProgress"]>;
27
31
  /** Context a search needs from the caller: the OBO client + workspace host. */
28
32
  export interface WebSearchContext {
29
33
  client: WorkspaceClientLike;
@@ -31,6 +35,8 @@ export interface WebSearchContext {
31
35
  /** Trusted identity of the credential carried by `client`. */
32
36
  cacheIdentity?: string;
33
37
  }
38
+ /** Model-selection fields used to rank one web-search endpoint. */
39
+ export type WebSearchModelSelectionOptions = Pick<ResolvedWebSearchConfig, "model" | "modelFallbacks" | "fuzzy" | "fuzzyThreshold">;
34
40
  /**
35
41
  * Resolve the OBO workspace client + host from the active AppKit execution
36
42
  * context. Inside `agent.stream`'s `asUser(req)` scope this hits the serving
@@ -38,6 +44,8 @@ export interface WebSearchContext {
38
44
  * the service principal.
39
45
  */
40
46
  export declare function resolveWebSearchContext(): Promise<WebSearchContext>;
47
+ /** Select one deployed web-search endpoint using family and capability policy. */
48
+ export declare function selectWebSearchEndpoint(endpoints: readonly ServingEndpointSummary[], requested: string | undefined, config: WebSearchModelSelectionOptions, suppressedFamilies?: ReadonlySet<policy.ModelFamily>): ServingEndpointSummary | null;
41
49
  /**
42
50
  * Run a web search. Prefers the Databricks native web-search tool on a
43
51
  * deployed GPT/Gemini endpoint (synthesized answer + citations); when the
@@ -47,5 +55,5 @@ export declare function resolveWebSearchContext(): Promise<WebSearchContext>;
47
55
  *
48
56
  * `signal` cancels the whole call, including the in-flight serving request.
49
57
  */
50
- export declare function runWebSearch(request: WebSearchRequest, runtimeOrConfig: WebSearchRuntimeInput, ctx: WebSearchContext, signal?: AbortSignal): Promise<WebSearchResult>;
58
+ export declare function runWebSearch(request: WebSearchRequest, runtimeOrConfig: WebSearchRuntimeInput, ctx: WebSearchContext, signal?: AbortSignal, writeProgress?: ProgressWriter): Promise<WebSearchResult>;
51
59
  export {};