@dbx-tools/appkit-mastra 0.6.9 → 0.6.11

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.
@@ -7,12 +7,17 @@
7
7
  * contributions merge extra filesystems and skill scan roots; built-in
8
8
  * Assistant skill trees are toggled with `assistantSkills` (on by default).
9
9
  *
10
+ * Databricks mounts use `@dbx-tools/databricks` {@link DatabricksFileSystem}
11
+ * wrapped by {@link filesystems}; missing roots fall back to
12
+ * {@link scratchFilesystem}.
13
+ *
10
14
  * @module
11
15
  */
16
+ import { DatabricksFileSystem } from "@dbx-tools/databricks";
12
17
  import { log, string, token } from "@dbx-tools/shared-core";
13
18
  import { CompositeFilesystem, Workspace, } from "@mastra/core/workspace";
14
19
  import { MASTRA_SCOPES_KEY, MASTRA_USER_EMAIL_KEY, MASTRA_USER_KEY } from "./config.js";
15
- import { DatabricksWorkspaceFilesystem, emptyFilesystem } from "./filesystems.js";
20
+ import { scratchFilesystem, filesystems } from "./filesystems.js";
16
21
  /* ------------------------------ constants ------------------------------ */
17
22
  /** Shared Assistant skills tree in the workspace namespace. */
18
23
  const ASSISTANT_SHARED_SKILLS_PATH = "/Workspace/.assistant/skills";
@@ -101,7 +106,7 @@ function hasWorkspaceFileScope(requestContext) {
101
106
  * set. Returns empty mounts when the OBO user or client is missing.
102
107
  * Mastra owns filesystem initialization.
103
108
  */
104
- function resolveAssistantSkillsMounts(context) {
109
+ async function resolveAssistantSkillsMounts(context) {
105
110
  const mounts = {};
106
111
  const requestContext = context.requestContext;
107
112
  if (!shouldMountAssistantSkills(requestContext)) {
@@ -121,10 +126,10 @@ function resolveAssistantSkillsMounts(context) {
121
126
  });
122
127
  return { mounts, skillPaths: [] };
123
128
  }
124
- mounts[ASSISTANT_WORKSPACE_SKILLS_MOUNT] = databricksFilesystem(client, ASSISTANT_SHARED_SKILLS_PATH);
129
+ mounts[ASSISTANT_WORKSPACE_SKILLS_MOUNT] = await databricksFilesystem(client, ASSISTANT_SHARED_SKILLS_PATH);
125
130
  const email = resolveScopedEmail(requestContext);
126
131
  if (email) {
127
- mounts[ASSISTANT_USER_SKILLS_MOUNT] = databricksFilesystem(client, userAssistantSkillsPath(email), false);
132
+ mounts[ASSISTANT_USER_SKILLS_MOUNT] = await databricksFilesystem(client, userAssistantSkillsPath(email), false);
128
133
  }
129
134
  logger.debug("assistant-skills:mounted", {
130
135
  sharedPath: ASSISTANT_SHARED_SKILLS_PATH,
@@ -186,13 +191,32 @@ function resolveScopedEmail(requestContext) {
186
191
  const email = requestContext?.get(MASTRA_USER_EMAIL_KEY);
187
192
  return email?.trim() || undefined;
188
193
  }
189
- /** Construct a read-only {@link DatabricksWorkspaceFilesystem} for `basePath`. */
190
- function databricksFilesystem(client, basePath, readOnly = true) {
191
- return new DatabricksWorkspaceFilesystem({
194
+ /**
195
+ * Wrap a {@link DatabricksFileSystem} as a Mastra filesystem. When the root is
196
+ * missing (and {@link readOnly} so we will not create it), fall back to
197
+ * {@link scratchFilesystem} so skill scans still have a writable local mount.
198
+ */
199
+ async function databricksFilesystem(client, root, readOnly = true) {
200
+ const fs = new DatabricksFileSystem({
192
201
  client,
193
- basePath,
202
+ root,
194
203
  readOnly,
204
+ createRoot: !readOnly,
195
205
  });
206
+ try {
207
+ await fs.init();
208
+ if (await fs.exists(".")) {
209
+ return filesystems(fs, { readOnly });
210
+ }
211
+ }
212
+ catch (err) {
213
+ logger.debug("databricks-mount:scratch-fallback", {
214
+ root,
215
+ readOnly,
216
+ error: err instanceof Error ? err.message : String(err),
217
+ });
218
+ }
219
+ return scratchFilesystem();
196
220
  }
197
221
  /**
198
222
  * Run every mount resolver for one request and merge mounts plus skill paths.
@@ -222,17 +246,17 @@ async function resolveWorkspaceContribution(resolvers, context) {
222
246
  /**
223
247
  * Dynamic filesystem resolver passed to Mastra {@link Workspace}.
224
248
  *
225
- * Returns a {@link CompositeFilesystem} when any mount resolved; otherwise
226
- * {@link emptyFilesystem}.
249
+ * Returns a {@link CompositeFilesystem} when any mount resolved; otherwise a
250
+ * fresh {@link scratchFilesystem} so Mastra always has a writable local root.
227
251
  */
228
252
  async function resolveWorkspaceFilesystem(resolvers, context) {
229
253
  const { mounts } = await resolveWorkspaceContribution(resolvers, context);
230
254
  const mountKeys = Object.keys(mounts);
231
255
  if (mountKeys.length === 0) {
232
- logger.debug("filesystem:empty", {
256
+ logger.debug("filesystem:scratch", {
233
257
  hasRequestContext: Boolean(context.requestContext),
234
258
  });
235
- return emptyFilesystem();
259
+ return scratchFilesystem();
236
260
  }
237
261
  logger.debug("filesystem:composite", { mountKeys });
238
262
  return new CompositeFilesystem({ mounts });
@@ -249,4 +273,4 @@ function buildWorkspaceSkillsResolver(resolvers, extraSkillPaths = []) {
249
273
  return merged;
250
274
  };
251
275
  }
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFNBQVMsR0FJVixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQWEsTUFBTSxhQUFhLENBQUM7QUFDbkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxGLDZFQUE2RTtBQUU3RSwrREFBK0Q7QUFDL0QsTUFBTSw0QkFBNEIsR0FBRyw4QkFBOEIsQ0FBQztBQUVwRSxnRUFBZ0U7QUFDaEUsTUFBTSxnQ0FBZ0MsR0FBRyxtQkFBbUIsQ0FBQztBQUU3RCxrRUFBa0U7QUFDbEUsTUFBTSwyQkFBMkIsR0FBRyx3QkFBd0IsQ0FBQztBQUU3RCwrREFBK0Q7QUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUV4RixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFrRC9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsVUFBa0MsRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lB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SSxFQUFFLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgd29ya3NwYWNlIGZhY3RvcnkgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBCdWlsZHMgYSBwZXItcmVxdWVzdCB7QGxpbmsgV29ya3NwYWNlfSB3aG9zZSBmaWxlc3lzdGVtIGlzIGFcbiAqIHtAbGluayBDb21wb3NpdGVGaWxlc3lzdGVtfSBvdmVyIERhdGFicmlja3MgcGF0aHMgcmVzb2x2ZWQgZnJvbSB0aGVcbiAqIE9CTyBjbGllbnQgb24ge0BsaW5rIE1BU1RSQV9VU0VSX0tFWX0uIE9wdGlvbmFsIG1vdW50IHJlc29sdmVyXG4gKiBjb250cmlidXRpb25zIG1lcmdlIGV4dHJhIGZpbGVzeXN0ZW1zIGFuZCBza2lsbCBzY2FuIHJvb3RzOyBidWlsdC1pblxuICogQXNzaXN0YW50IHNraWxsIHRyZWVzIGFyZSB0b2dnbGVkIHdpdGggYGFzc2lzdGFudFNraWxsc2AgKG9uIGJ5IGRlZmF1bHQpLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsXCI7XG5pbXBvcnQgeyBsb2csIHN0cmluZywgdG9rZW4gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVGaWxlc3lzdGVtLFxuICBXb3Jrc3BhY2UsXG4gIHR5cGUgU2tpbGxzQ29udGV4dCxcbiAgdHlwZSBTa2lsbHNSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VGaWxlc3lzdGVtLFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuXG5pbXBvcnQgeyBNQVNUUkFfU0NPUEVTX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfVVNFUl9LRVksIHR5cGUgVXNlciB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc1dvcmtzcGFjZUZpbGVzeXN0ZW0sIGVtcHR5RmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW1zLnRzXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBTaGFyZWQgQXNzaXN0YW50IHNraWxscyB0cmVlIGluIHRoZSB3b3Jrc3BhY2UgbmFtZXNwYWNlLiAqL1xuY29uc3QgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCA9IFwiL1dvcmtzcGFjZS8uYXNzaXN0YW50L3NraWxsc1wiO1xuXG4vKiogQ29tcG9zaXRlIG1vdW50IGZvciB7QGxpbmsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSH0uICovXG5jb25zdCBBU1NJU1RBTlRfV09SS1NQQUNFX1NLSUxMU19NT1VOVCA9IFwiL3dvcmtzcGFjZV9za2lsbHNcIjtcblxuLyoqIENvbXBvc2l0ZSBtb3VudCBmb3IgdGhlIGNhbGxlcidzIGAvLmFzc2lzdGFudC9za2lsbHNgIHRyZWUuICovXG5jb25zdCBBU1NJU1RBTlRfVVNFUl9TS0lMTFNfTU9VTlQgPSBcIi93b3Jrc3BhY2VfdXNlcl9za2lsbHNcIjtcblxuLyoqIE9BdXRoIHNjb3BlcyB0aGF0IGdhdGUgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZSBtb3VudHMuICovXG5jb25zdCBXT1JLU1BBQ0VfRklMRV9TQ09QRVMgPSBbXCJ3b3Jrc3BhY2VcIiwgXCJ3b3Jrc3BhY2Uud29ya3NwYWNlXCIsIFwiYWxsLWFwaXNcIl0gYXMgY29uc3Q7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvd29ya3NwYWNlc1wiKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIFBlci1yZXF1ZXN0IGNvbnRleHQgZm9yIG1vdW50IHJlc29sdmVycy4gKi9cbmludGVyZmFjZSBXb3Jrc3BhY2VNb3VudENvbnRleHQge1xuICByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0O1xufVxuXG4vKiogTW91bnQgbWFwIHBsdXMgb3B0aW9uYWwgTWFzdHJhIHNraWxsIHNjYW4gcm9vdHMgZm9yIG9uZSByZXNvbHZlci4gKi9cbmludGVyZmFjZSBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB7XG4gIG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT47XG4gIC8qKiBQYXRocyB3aXRoaW4gdGhlIGNvbXBvc2l0ZSBuYW1lc3BhY2Ugd2hlcmUgYFNLSUxMLm1kYCBmaWxlcyBhcmUgc2Nhbm5lZC4gKi9cbiAgc2tpbGxQYXRocz86IHN0cmluZ1tdO1xufVxuXG4vKiogQ29udHJpYnV0ZXMgZmlsZXN5c3RlbSBtb3VudHMgKGFuZCBvcHRpb25hbCBza2lsbCBwYXRocykgZm9yIG9uZSByZXF1ZXN0LiAqL1xudHlwZSBXb3Jrc3BhY2VNb3VudFJlc29sdmVyID0gKFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pID0+IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj47XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlV29ya3NwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgaWQ7IGRlcml2ZWQgZnJvbSBgbmFtZWAgb3IgYFwid29ya3NwYWNlXCJgIHdoZW4gb21pdHRlZC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWU7IGRlcml2ZWQgZnJvbSBgaWRgIHdoZW4gb21pdHRlZC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1vdW50IHJlYWQtb25seSBBc3Npc3RhbnQgc2tpbGwgdHJlZXMgZnJvbSBgL1dvcmtzcGFjZS8uYXNzaXN0YW50L3NraWxsc2BcbiAgICogYW5kIGAvVXNlcnMvPGVtYWlsPi8uYXNzaXN0YW50L3NraWxsc2AuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIGFzc2lzdGFudFNraWxscz86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBwZXItcmVxdWVzdCBtb3VudCByZXNvbHZlcnMgKHJ1biBhZnRlciBidWlsdC1pbiBvcHRpb25zKS4gKi9cbiAgbW91bnRzPzogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdO1xuICAvKiogUmVwbGFjZSB0aGUgYXV0by1idWlsdCBkeW5hbWljIHNraWxscyByZXNvbHZlci4gKi9cbiAgc2tpbGxzPzogU2tpbGxzUmVzb2x2ZXI7XG4gIC8qKiBGb3J3YXJkZWQgdG8gTWFzdHJhIHdoZW4gc2tpbGwgZGlzY292ZXJ5IGlzIGVuYWJsZWQuICovXG4gIGNoZWNrU2tpbGxGaWxlTXRpbWU/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIEJNMjUga2V5d29yZCBzZWFyY2ggb3ZlciBpbmRleGVkIHdvcmtzcGFjZSBjb250ZW50LiAqL1xuICBibTI1PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIExPQ0FMIHNraWxsIHNjYW4gcGF0aHMgYWRkZWQgdG8gZXZlcnkgcmVxdWVzdCdzIHNraWxsIGRpc2NvdmVyeS5cbiAgICogVXNlZCBieSB0aGUgcGx1Z2luIHRvIHN1cmZhY2UgcmVtb3RlIHNraWxscyBwcm92aXNpb25lZCB0byBhIGxvY2FsIHRlbXBcbiAgICogZGlyIGF0IHN0YXJ0dXAgKHNlZSBgcmVtb3RlLXNraWxscy50c2ApLiBEYXRhYnJpY2tzLWhvc3RlZCByZW1vdGUgc2tpbGxzXG4gICAqIG5lZWQgbm8gZW50cnkgaGVyZSAtIHRoZXkgbGFuZCBpbiB0aGUgQXNzaXN0YW50IHRyZWUgdGhlIGJ1aWx0LWluIG1vdW50XG4gICAqIGFscmVhZHkgc2NhbnMuXG4gICAqL1xuICBleHRyYVNraWxsUGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0gd2l0aCBwZXItcmVxdWVzdCBEYXRhYnJpY2tzIG1vdW50cy5cbiAqXG4gKiBAZXhhbXBsZSBBc3Npc3RhbnQgc2tpbGxzIG9ubHkgKGRlZmF1bHQgZm9yIGFnZW50cyBpbiB0aGlzIHBsdWdpbilcbiAqIGBgYHRzXG4gKiBjcmVhdGVXb3Jrc3BhY2UoKVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQXNzaXN0YW50IHNraWxscyBwbHVzIGEgY3VzdG9tIG1vdW50IHJlc29sdmVyXG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKHtcbiAqICAgYXNzaXN0YW50U2tpbGxzOiB0cnVlLFxuICogICBtb3VudHM6IFtcbiAqICAgICBhc3luYyAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PiAoe1xuICogICAgICAgbW91bnRzOiB7IFwiL2RhdGFcIjogbXlGaWxlc3lzdGVtIH0sXG4gKiAgICAgICBza2lsbFBhdGhzOiBbXSxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZShvcHRpb25zOiBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zID0ge30pOiBXb3Jrc3BhY2Uge1xuICBjb25zdCB7IGlkLCBuYW1lIH0gPSByZXNvbHZlV29ya3NwYWNlSWRlbnRpdHkob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVycyA9IGJ1aWxkTW91bnRSZXNvbHZlcnMob3B0aW9ucyk7XG4gIGNvbnN0IGV4dHJhU2tpbGxQYXRocyA9IG9wdGlvbnMuZXh0cmFTa2lsbFBhdGhzID8/IFtdO1xuICBjb25zdCBza2lsbHMgPVxuICAgIG9wdGlvbnMuc2tpbGxzID8/XG4gICAgKHJlc29sdmVycy5sZW5ndGggPiAwIHx8IGV4dHJhU2tpbGxQYXRocy5sZW5ndGggPiAwXG4gICAgICA/IGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIocmVzb2x2ZXJzLCBleHRyYVNraWxsUGF0aHMpXG4gICAgICA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoZWNrU2tpbGxGaWxlTXRpbWUgPSBvcHRpb25zLmNoZWNrU2tpbGxGaWxlTXRpbWUgPz8gb3B0aW9ucy5hc3Npc3RhbnRTa2lsbHMgIT09IGZhbHNlO1xuICBjb25zdCBibTI1ID0gb3B0aW9ucy5ibTI1ICE9PSBmYWxzZTtcbiAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlOmNyZWF0ZVwiLCB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICByZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICAgIGFzc2lzdGFudFNraWxsczogb3B0aW9ucy5hc3Npc3RhbnRTa2lsbHMgIT09IGZhbHNlLFxuICAgIGN1c3RvbU1vdW50UmVzb2x2ZXJzOiBvcHRpb25zLm1vdW50cz8ubGVuZ3RoID8/IDAsXG4gICAgY3VzdG9tU2tpbGxzUmVzb2x2ZXI6IEJvb2xlYW4ob3B0aW9ucy5za2lsbHMpLFxuICAgIGNoZWNrU2tpbGxGaWxlTXRpbWUsXG4gICAgYm0yNSxcbiAgICBleHRyYVNraWxsUGF0aHM6IGV4dHJhU2tpbGxQYXRocy5sZW5ndGgsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgV29ya3NwYWNlKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGZpbGVzeXN0ZW06IChjb250ZXh0KSA9PiByZXNvbHZlV29ya3NwYWNlRmlsZXN5c3RlbShyZXNvbHZlcnMsIGNvbnRleHQpLFxuICAgIC4uLihza2lsbHNcbiAgICAgID8ge1xuICAgICAgICAgIHNraWxscyxcbiAgICAgICAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICBibTI1LFxuICB9KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcml2YXRlIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE1hcCBhbiBPQk8gdXNlciBlbWFpbCB0byB0aGVpciBBc3Npc3RhbnQgc2tpbGxzIGRpcmVjdG9yeSBpbiB0aGVcbiAqIHdvcmtzcGFjZSBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHVzZXJBc3Npc3RhbnRTa2lsbHNQYXRoKHVzZXJFbWFpbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAvVXNlcnMvJHt1c2VyRW1haWwudHJpbSgpfS8uYXNzaXN0YW50L3NraWxsc2A7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgdG9rZW4gY2FycmllcyBhIHNjb3BlIHRoYXQgYWxsb3dzIHdvcmtzcGFjZVxuICogZmlsZSBBUEkgYWNjZXNzIChgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIG9uIHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0pLlxuICovXG5mdW5jdGlvbiBoYXNXb3Jrc3BhY2VGaWxlU2NvcGUocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiB0b2tlbi5pbmNsdWRlc0FjY2Vzc1Rva2VuU2NvcGUoXG4gICAgcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfU0NPUEVTX0tFWSksXG4gICAgV09SS1NQQUNFX0ZJTEVfU0NPUEVTLFxuICApO1xufVxuXG4vKipcbiAqIEJ1aWx0LWluIG1vdW50IHJlc29sdmVyIGZvciBBc3Npc3RhbnQgYFNLSUxMLm1kYCB0cmVlcy5cbiAqXG4gKiBNb3VudHMge0BsaW5rIEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEh9IHdoZW4gc2NvcGUgY2hlY2tzIHBhc3MgYW5kXG4gKiBgL1VzZXJzLzxlbWFpbD4vLmFzc2lzdGFudC9za2lsbHNgIHdoZW4ge0BsaW5rIE1BU1RSQV9VU0VSX0VNQUlMX0tFWX0gaXNcbiAqIHNldC4gUmV0dXJucyBlbXB0eSBtb3VudHMgd2hlbiB0aGUgT0JPIHVzZXIgb3IgY2xpZW50IGlzIG1pc3NpbmcuXG4gKiBNYXN0cmEgb3ducyBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzaXN0YW50U2tpbGxzTW91bnRzKGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCk6IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHtcbiAgY29uc3QgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBEYXRhYnJpY2tzV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBjb250ZXh0LnJlcXVlc3RDb250ZXh0O1xuXG4gIGlmICghc2hvdWxkTW91bnRBc3Npc3RhbnRTa2lsbHMocmVxdWVzdENvbnRleHQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXNzaXN0YW50LXNraWxsczpza2lwcGVkXCIsIHtcbiAgICAgIHJlYXNvbjogIXJlcXVlc3RDb250ZXh0ID8gXCJuby1yZXF1ZXN0LWNvbnRleHRcIiA6IFwibWlzc2luZy13b3Jrc3BhY2Utc2NvcGVcIixcbiAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgc2NvcGVzOiBjb250ZXh0LnJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1NDT1BFU19LRVkpLFxuICAgIH0pO1xuICAgIHJldHVybiB7IG1vdW50cywgc2tpbGxQYXRoczogW10gfTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dCEuZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xpZW50ID0gdXNlcj8uZXhlY3V0aW9uQ29udGV4dC5jbGllbnQ7XG4gIGlmICghY2xpZW50KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXNzaXN0YW50LXNraWxsczpza2lwcGVkXCIsIHtcbiAgICAgIHJlYXNvbjogXCJtaXNzaW5nLW9iby1jbGllbnRcIixcbiAgICAgIHVzZXJJZDogdXNlcj8uaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW91bnRzLCBza2lsbFBhdGhzOiBbXSB9O1xuICB9XG5cbiAgbW91bnRzW0FTU0lTVEFOVF9XT1JLU1BBQ0VfU0tJTExTX01PVU5UXSA9IGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICAgIGNsaWVudCxcbiAgICBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRILFxuICApO1xuXG4gIGNvbnN0IGVtYWlsID0gcmVzb2x2ZVNjb3BlZEVtYWlsKHJlcXVlc3RDb250ZXh0KTtcbiAgaWYgKGVtYWlsKSB7XG4gICAgbW91bnRzW0FTU0lTVEFOVF9VU0VSX1NLSUxMU19NT1VOVF0gPSBkYXRhYnJpY2tzRmlsZXN5c3RlbShcbiAgICAgIGNsaWVudCxcbiAgICAgIHVzZXJBc3Npc3RhbnRTa2lsbHNQYXRoKGVtYWlsKSxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJhc3Npc3RhbnQtc2tpbGxzOm1vdW50ZWRcIiwge1xuICAgIHNoYXJlZFBhdGg6IEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEgsXG4gICAgc2hhcmVkTW91bnQ6IEFTU0lTVEFOVF9XT1JLU1BBQ0VfU0tJTExTX01PVU5ULFxuICAgIHVzZXJNb3VudDogZW1haWwgPyBBU1NJU1RBTlRfVVNFUl9TS0lMTFNfTU9VTlQgOiB1bmRlZmluZWQsXG4gICAgdXNlclBhdGg6IGVtYWlsID8gdXNlckFzc2lzdGFudFNraWxsc1BhdGgoZW1haWwpIDogdW5kZWZpbmVkLFxuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgbW91bnRzLCBza2lsbFBhdGhzOiBPYmplY3Qua2V5cyhtb3VudHMpIH07XG59XG5cbi8qKlxuICogRmlsbCBpbiBgaWRgIGFuZCBgbmFtZWAgd2hlbiBlaXRoZXIgaXMgb21pdHRlZCBvbiB7QGxpbmsgQ3JlYXRlV29ya3NwYWNlT3B0aW9uc30uXG4gKiBTbHVnaWZpZXMgYG5hbWVgIGludG8gYGlkYDsgdG9rZW5pemVzIGBpZGAgaW50byBhIGRpc3BsYXkgYG5hbWVgLlxuICovXG5mdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlSWRlbnRpdHkob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyk6IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufSB7XG4gIGxldCBpZCA9IG9wdGlvbnMuaWQ7XG4gIGxldCBuYW1lID0gb3B0aW9ucy5uYW1lO1xuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBuYW1lID8gc3RyaW5nLnRvU2x1ZyhuYW1lKSA6IFwid29ya3NwYWNlXCI7XG4gIH1cbiAgaWYgKCFuYW1lKSB7XG4gICAgbmFtZSA9IEFycmF5LmZyb20oc3RyaW5nLnRva2VuaXplKGlkKSkuam9pbihcIiBcIik7XG4gIH1cbiAgcmV0dXJuIHsgaWQsIG5hbWUgfTtcbn1cblxuLyoqIENvbGxlY3QgYnVpbHQtaW4gYW5kIGNhbGxlci1zdXBwbGllZCBtb3VudCByZXNvbHZlcnMgZm9yIG9uZSB3b3Jrc3BhY2UuICovXG5mdW5jdGlvbiBidWlsZE1vdW50UmVzb2x2ZXJzKG9wdGlvbnM6IENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMpOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10ge1xuICBjb25zdCByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSA9IFtdO1xuICBjb25zdCB7IGFzc2lzdGFudFNraWxscyA9IHRydWUsIG1vdW50cyB9ID0gb3B0aW9ucztcbiAgaWYgKGFzc2lzdGFudFNraWxscykge1xuICAgIHJlc29sdmVycy5wdXNoKHJlc29sdmVBc3Npc3RhbnRTa2lsbHNNb3VudHMpO1xuICB9XG4gIGlmIChtb3VudHM/Lmxlbmd0aCkge1xuICAgIHJlc29sdmVycy5wdXNoKC4uLm1vdW50cyk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOnJlc29sdmVyc1wiLCB7XG4gICAgYXNzaXN0YW50U2tpbGxzLFxuICAgIGJ1aWx0SW5SZXNvbHZlcjogYXNzaXN0YW50U2tpbGxzLFxuICAgIGN1c3RvbVJlc29sdmVyQ291bnQ6IG1vdW50cz8ubGVuZ3RoID8/IDAsXG4gICAgdG90YWxSZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVycztcbn1cblxuLyoqXG4gKiBHYXRlIEFzc2lzdGFudCBza2lsbCBtb3VudHMgb24gcmVxdWVzdCBjb250ZXh0LlxuICpcbiAqIEFsd2F5cyBhbGxvd3MgbW91bnRzIGluIGRldmVsb3BtZW50OyBpbiBvdGhlciBlbnZpcm9ubWVudHMgcmVxdWlyZXNcbiAqIHtAbGluayBoYXNXb3Jrc3BhY2VGaWxlU2NvcGV9LlxuICovXG5mdW5jdGlvbiBzaG91bGRNb3VudEFzc2lzdGFudFNraWxscyhcbiAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkLFxuKTogcmVxdWVzdENvbnRleHQgaXMgUmVxdWVzdENvbnRleHQge1xuICBpZiAoIXJlcXVlc3RDb250ZXh0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dCk7XG59XG5cbi8qKiBSZWFkIHRoZSB0cmltbWVkIE9CTyB1c2VyIGVtYWlsIHN0YW1wZWQgb24ge0BsaW5rIE1BU1RSQV9VU0VSX0VNQUlMX0tFWX0uICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW1haWwgPSByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9VU0VSX0VNQUlMX0tFWSkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gZW1haWw/LnRyaW0oKSB8fCB1bmRlZmluZWQ7XG59XG5cbi8qKiBDb25zdHJ1Y3QgYSByZWFkLW9ubHkge0BsaW5rIERhdGFicmlja3NXb3Jrc3BhY2VGaWxlc3lzdGVtfSBmb3IgYGJhc2VQYXRoYC4gKi9cbmZ1bmN0aW9uIGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgcmVhZE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuKTogRGF0YWJyaWNrc1dvcmtzcGFjZUZpbGVzeXN0ZW0ge1xuICByZXR1cm4gbmV3IERhdGFicmlja3NXb3Jrc3BhY2VGaWxlc3lzdGVtKHtcbiAgICBjbGllbnQsXG4gICAgYmFzZVBhdGgsXG4gICAgcmVhZE9ubHksXG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1biBldmVyeSBtb3VudCByZXNvbHZlciBmb3Igb25lIHJlcXVlc3QgYW5kIG1lcmdlIG1vdW50cyBwbHVzIHNraWxsIHBhdGhzLlxuICogTGF0ZXIgcmVzb2x2ZXJzIG92ZXJ3cml0ZSBtb3VudCBrZXlzIGZyb20gZWFybGllciBvbmVzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHNraWxsUGF0aHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJlc29sdmVyXSBvZiByZXNvbHZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZXIoY29udGV4dCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOnJlc29sdmVyXCIsIHtcbiAgICAgIGluZGV4LFxuICAgICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhjb250cmlidXRpb24ubW91bnRzKSxcbiAgICAgIHNraWxsUGF0aHM6IGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzID8/IFtdLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24obW91bnRzLCBjb250cmlidXRpb24ubW91bnRzKTtcbiAgICBpZiAoY29udHJpYnV0aW9uLnNraWxsUGF0aHM/Lmxlbmd0aCkge1xuICAgICAgc2tpbGxQYXRocy5wdXNoKC4uLmNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6bWVyZ2VkXCIsIHtcbiAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKG1vdW50cyksXG4gICAgc2tpbGxQYXRocyxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgbW91bnRzLCBza2lsbFBhdGhzIH07XG59XG5cbi8qKlxuICogRHluYW1pYyBmaWxlc3lzdGVtIHJlc29sdmVyIHBhc3NlZCB0byBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0uXG4gKlxuICogUmV0dXJucyBhIHtAbGluayBDb21wb3NpdGVGaWxlc3lzdGVtfSB3aGVuIGFueSBtb3VudCByZXNvbHZlZDsgb3RoZXJ3aXNlXG4gKiB7QGxpbmsgZW1wdHlGaWxlc3lzdGVtfS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUZpbGVzeXN0ZW0oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBQcm9taXNlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHtcbiAgY29uc3QgeyBtb3VudHMgfSA9IGF3YWl0IHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24ocmVzb2x2ZXJzLCBjb250ZXh0KTtcbiAgY29uc3QgbW91bnRLZXlzID0gT2JqZWN0LmtleXMobW91bnRzKTtcbiAgaWYgKG1vdW50S2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZGVidWcoXCJmaWxlc3lzdGVtOmVtcHR5XCIsIHtcbiAgICAgIGhhc1JlcXVlc3RDb250ZXh0OiBCb29sZWFuKGNvbnRleHQucmVxdWVzdENvbnRleHQpLFxuICAgIH0pO1xuICAgIHJldHVybiBlbXB0eUZpbGVzeXN0ZW0oKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJmaWxlc3lzdGVtOmNvbXBvc2l0ZVwiLCB7IG1vdW50S2V5cyB9KTtcbiAgcmV0dXJuIG5ldyBDb21wb3NpdGVGaWxlc3lzdGVtKHsgbW91bnRzIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkeW5hbWljIHtAbGluayBTa2lsbHNSZXNvbHZlcn0gdGhhdCBjb2xsZWN0cyBgc2tpbGxQYXRoc2AgZnJvbVxuICogZXZlcnkgbW91bnQgcmVzb2x2ZXIgb24gZWFjaCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBidWlsZFdvcmtzcGFjZVNraWxsc1Jlc29sdmVyKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgZXh0cmFTa2lsbFBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuKTogU2tpbGxzUmVzb2x2ZXIge1xuICByZXR1cm4gYXN5bmMgKGNvbnRleHQ6IFNraWxsc0NvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IHNraWxsUGF0aHMgfSA9IGF3YWl0IHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24ocmVzb2x2ZXJzLCBjb250ZXh0KTtcbiAgICBjb25zdCBtZXJnZWQgPSBbLi4uKHNraWxsUGF0aHMgPz8gW10pLCAuLi5leHRyYVNraWxsUGF0aHNdO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsczpyZXNvbHZlZFwiLCB7IHNraWxsUGF0aHMsIGV4dHJhU2tpbGxQYXRocyB9KTtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9O1xufVxuIl19
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixTQUFTLEdBSVYsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFhLE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRSw2RUFBNkU7QUFFN0UsK0RBQStEO0FBQy9ELE1BQU0sNEJBQTRCLEdBQUcsOEJBQThCLENBQUM7QUFFcEUsZ0VBQWdFO0FBQ2hFLE1BQU0sZ0NBQWdDLEdBQUcsbUJBQW1CLENBQUM7QUFFN0Qsa0VBQWtFO0FBQ2xFLE1BQU0sMkJBQTJCLEdBQUcsd0JBQXdCLENBQUM7QUFFN0QsK0RBQStEO0FBQy9ELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxXQUFXLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFFeEYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBa0QvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQWtDLEVBQUU7SUFDbEUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMv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dEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUU7WUFDakMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDbkQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNwRCxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDRCQUE0QixDQUNuQyxTQUFtQyxFQUNuQyxrQkFBNEIsRUFBRTtJQUU5QixPQUFPLEtBQUssRUFBRSxPQUFzQixFQUFFLEVBQUU7UUFDdEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgd29ya3NwYWNlIGZhY3RvcnkgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBCdWlsZHMgYSBwZXItcmVxdWVzdCB7QGxpbmsgV29ya3NwYWNlfSB3aG9zZSBmaWxlc3lzdGVtIGlzIGFcbiAqIHtAbGluayBDb21wb3NpdGVGaWxlc3lzdGVtfSBvdmVyIERhdGFicmlja3MgcGF0aHMgcmVzb2x2ZWQgZnJvbSB0aGVcbiAqIE9CTyBjbGllbnQgb24ge0BsaW5rIE1BU1RSQV9VU0VSX0tFWX0uIE9wdGlvbmFsIG1vdW50IHJlc29sdmVyXG4gKiBjb250cmlidXRpb25zIG1lcmdlIGV4dHJhIGZpbGVzeXN0ZW1zIGFuZCBza2lsbCBzY2FuIHJvb3RzOyBidWlsdC1pblxuICogQXNzaXN0YW50IHNraWxsIHRyZWVzIGFyZSB0b2dnbGVkIHdpdGggYGFzc2lzdGFudFNraWxsc2AgKG9uIGJ5IGRlZmF1bHQpLlxuICpcbiAqIERhdGFicmlja3MgbW91bnRzIHVzZSBgQGRieC10b29scy9kYXRhYnJpY2tzYCB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19XG4gKiB3cmFwcGVkIGJ5IHtAbGluayBmaWxlc3lzdGVtc307IG1pc3Npbmcgcm9vdHMgZmFsbCBiYWNrIHRvXG4gKiB7QGxpbmsgc2NyYXRjaEZpbGVzeXN0ZW19LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzRmlsZVN5c3RlbSB9IGZyb20gXCJAZGJ4LXRvb2xzL2RhdGFicmlja3NcIjtcbmltcG9ydCB7IGxvZywgc3RyaW5nLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW0sXG4gIFdvcmtzcGFjZSxcbiAgdHlwZSBTa2lsbHNDb250ZXh0LFxuICB0eXBlIFNraWxsc1Jlc29sdmVyLFxuICB0eXBlIFdvcmtzcGFjZUZpbGVzeXN0ZW0sXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5cbmltcG9ydCB7IE1BU1RSQV9TQ09QRVNfS0VZLCBNQVNUUkFfVVNFUl9FTUFJTF9LRVksIE1BU1RSQV9VU0VSX0tFWSwgdHlwZSBVc2VyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBzY3JhdGNoRmlsZXN5c3RlbSwgZmlsZXN5c3RlbXMgfSBmcm9tIFwiLi9maWxlc3lzdGVtcy50c1wiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogU2hhcmVkIEFzc2lzdGFudCBza2lsbHMgdHJlZSBpbiB0aGUgd29ya3NwYWNlIG5hbWVzcGFjZS4gKi9cbmNvbnN0IEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEggPSBcIi9Xb3Jrc3BhY2UvLmFzc2lzdGFudC9za2lsbHNcIjtcblxuLyoqIENvbXBvc2l0ZSBtb3VudCBmb3Ige0BsaW5rIEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEh9LiAqL1xuY29uc3QgQVNTSVNUQU5UX1dPUktTUEFDRV9TS0lMTFNfTU9VTlQgPSBcIi93b3Jrc3BhY2Vfc2tpbGxzXCI7XG5cbi8qKiBDb21wb3NpdGUgbW91bnQgZm9yIHRoZSBjYWxsZXIncyBgLy5hc3Npc3RhbnQvc2tpbGxzYCB0cmVlLiAqL1xuY29uc3QgQVNTSVNUQU5UX1VTRVJfU0tJTExTX01PVU5UID0gXCIvd29ya3NwYWNlX3VzZXJfc2tpbGxzXCI7XG5cbi8qKiBPQXV0aCBzY29wZXMgdGhhdCBnYXRlIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGUgbW91bnRzLiAqL1xuY29uc3QgV09SS1NQQUNFX0ZJTEVfU0NPUEVTID0gW1wid29ya3NwYWNlXCIsIFwid29ya3NwYWNlLndvcmtzcGFjZVwiLCBcImFsbC1hcGlzXCJdIGFzIGNvbnN0O1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL3dvcmtzcGFjZXNcIik7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBQZXItcmVxdWVzdCBjb250ZXh0IGZvciBtb3VudCByZXNvbHZlcnMuICovXG5pbnRlcmZhY2UgV29ya3NwYWNlTW91bnRDb250ZXh0IHtcbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbn1cblxuLyoqIE1vdW50IG1hcCBwbHVzIG9wdGlvbmFsIE1hc3RyYSBza2lsbCBzY2FuIHJvb3RzIGZvciBvbmUgcmVzb2x2ZXIuICovXG5pbnRlcmZhY2UgV29ya3NwYWNlTW91bnRDb250cmlidXRpb24ge1xuICBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+O1xuICAvKiogUGF0aHMgd2l0aGluIHRoZSBjb21wb3NpdGUgbmFtZXNwYWNlIHdoZXJlIGBTS0lMTC5tZGAgZmlsZXMgYXJlIHNjYW5uZWQuICovXG4gIHNraWxsUGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIENvbnRyaWJ1dGVzIGZpbGVzeXN0ZW0gbW91bnRzIChhbmQgb3B0aW9uYWwgc2tpbGwgcGF0aHMpIGZvciBvbmUgcmVxdWVzdC4gKi9cbnR5cGUgV29ya3NwYWNlTW91bnRSZXNvbHZlciA9IChcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKSA9PiBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB8IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZVdvcmtzcGFjZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGlkOyBkZXJpdmVkIGZyb20gYG5hbWVgIG9yIGBcIndvcmtzcGFjZVwiYCB3aGVuIG9taXR0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lOyBkZXJpdmVkIGZyb20gYGlkYCB3aGVuIG9taXR0ZWQuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNb3VudCByZWFkLW9ubHkgQXNzaXN0YW50IHNraWxsIHRyZWVzIGZyb20gYC9Xb3Jrc3BhY2UvLmFzc2lzdGFudC9za2lsbHNgXG4gICAqIGFuZCBgL1VzZXJzLzxlbWFpbD4vLmFzc2lzdGFudC9za2lsbHNgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBhc3Npc3RhbnRTa2lsbHM/OiBib29sZWFuO1xuICAvKiogRXh0cmEgcGVyLXJlcXVlc3QgbW91bnQgcmVzb2x2ZXJzIChydW4gYWZ0ZXIgYnVpbHQtaW4gb3B0aW9ucykuICovXG4gIG1vdW50cz86IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXTtcbiAgLyoqIFJlcGxhY2UgdGhlIGF1dG8tYnVpbHQgZHluYW1pYyBza2lsbHMgcmVzb2x2ZXIuICovXG4gIHNraWxscz86IFNraWxsc1Jlc29sdmVyO1xuICAvKiogRm9yd2FyZGVkIHRvIE1hc3RyYSB3aGVuIHNraWxsIGRpc2NvdmVyeSBpcyBlbmFibGVkLiAqL1xuICBjaGVja1NraWxsRmlsZU10aW1lPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBCTTI1IGtleXdvcmQgc2VhcmNoIG92ZXIgaW5kZXhlZCB3b3Jrc3BhY2UgY29udGVudC4gKi9cbiAgYm0yNT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHRyYSBMT0NBTCBza2lsbCBzY2FuIHBhdGhzIGFkZGVkIHRvIGV2ZXJ5IHJlcXVlc3QncyBza2lsbCBkaXNjb3ZlcnkuXG4gICAqIFVzZWQgYnkgdGhlIHBsdWdpbiB0byBzdXJmYWNlIHJlbW90ZSBza2lsbHMgcHJvdmlzaW9uZWQgdG8gYSBsb2NhbCB0ZW1wXG4gICAqIGRpciBhdCBzdGFydHVwIChzZWUgYHJlbW90ZS1za2lsbHMudHNgKS4gRGF0YWJyaWNrcy1ob3N0ZWQgcmVtb3RlIHNraWxsc1xuICAgKiBuZWVkIG5vIGVudHJ5IGhlcmUgLSB0aGV5IGxhbmQgaW4gdGhlIEFzc2lzdGFudCB0cmVlIHRoZSBidWlsdC1pbiBtb3VudFxuICAgKiBhbHJlYWR5IHNjYW5zLlxuICAgKi9cbiAgZXh0cmFTa2lsbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgTWFzdHJhIHtAbGluayBXb3Jrc3BhY2V9IHdpdGggcGVyLXJlcXVlc3QgRGF0YWJyaWNrcyBtb3VudHMuXG4gKlxuICogQGV4YW1wbGUgQXNzaXN0YW50IHNraWxscyBvbmx5IChkZWZhdWx0IGZvciBhZ2VudHMgaW4gdGhpcyBwbHVnaW4pXG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKClcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEFzc2lzdGFudCBza2lsbHMgcGx1cyBhIGN1c3RvbSBtb3VudCByZXNvbHZlclxuICogYGBgdHNcbiAqIGNyZWF0ZVdvcmtzcGFjZSh7XG4gKiAgIGFzc2lzdGFudFNraWxsczogdHJ1ZSxcbiAqICAgbW91bnRzOiBbXG4gKiAgICAgYXN5bmMgKHsgcmVxdWVzdENvbnRleHQgfSkgPT4gKHtcbiAqICAgICAgIG1vdW50czogeyBcIi9kYXRhXCI6IG15RmlsZXN5c3RlbSB9LFxuICogICAgICAgc2tpbGxQYXRoczogW10sXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyA9IHt9KTogV29ya3NwYWNlIHtcbiAgY29uc3QgeyBpZCwgbmFtZSB9ID0gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnMpO1xuICBjb25zdCByZXNvbHZlcnMgPSBidWlsZE1vdW50UmVzb2x2ZXJzKG9wdGlvbnMpO1xuICBjb25zdCBleHRyYVNraWxsUGF0aHMgPSBvcHRpb25zLmV4dHJhU2tpbGxQYXRocyA/PyBbXTtcbiAgY29uc3Qgc2tpbGxzID1cbiAgICBvcHRpb25zLnNraWxscyA/P1xuICAgIChyZXNvbHZlcnMubGVuZ3RoID4gMCB8fCBleHRyYVNraWxsUGF0aHMubGVuZ3RoID4gMFxuICAgICAgPyBidWlsZFdvcmtzcGFjZVNraWxsc1Jlc29sdmVyKHJlc29sdmVycywgZXh0cmFTa2lsbFBhdGhzKVxuICAgICAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBjaGVja1NraWxsRmlsZU10aW1lID0gb3B0aW9ucy5jaGVja1NraWxsRmlsZU10aW1lID8/IG9wdGlvbnMuYXNzaXN0YW50U2tpbGxzICE9PSBmYWxzZTtcbiAgY29uc3QgYm0yNSA9IG9wdGlvbnMuYm0yNSAhPT0gZmFsc2U7XG4gIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZTpjcmVhdGVcIiwge1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgcmVzb2x2ZXJDb3VudDogcmVzb2x2ZXJzLmxlbmd0aCxcbiAgICBhc3Npc3RhbnRTa2lsbHM6IG9wdGlvbnMuYXNzaXN0YW50U2tpbGxzICE9PSBmYWxzZSxcbiAgICBjdXN0b21Nb3VudFJlc29sdmVyczogb3B0aW9ucy5tb3VudHM/Lmxlbmd0aCA/PyAwLFxuICAgIGN1c3RvbVNraWxsc1Jlc29sdmVyOiBCb29sZWFuKG9wdGlvbnMuc2tpbGxzKSxcbiAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgIGJtMjUsXG4gICAgZXh0cmFTa2lsbFBhdGhzOiBleHRyYVNraWxsUGF0aHMubGVuZ3RoLFxuICB9KTtcblxuICByZXR1cm4gbmV3IFdvcmtzcGFjZSh7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICBmaWxlc3lzdGVtOiAoY29udGV4dCkgPT4gcmVzb2x2ZVdvcmtzcGFjZUZpbGVzeXN0ZW0ocmVzb2x2ZXJzLCBjb250ZXh0KSxcbiAgICAuLi4oc2tpbGxzXG4gICAgICA/IHtcbiAgICAgICAgICBza2lsbHMsXG4gICAgICAgICAgY2hlY2tTa2lsbEZpbGVNdGltZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgYm0yNSxcbiAgfSk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJpdmF0ZSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBNYXAgYW4gT0JPIHVzZXIgZW1haWwgdG8gdGhlaXIgQXNzaXN0YW50IHNraWxscyBkaXJlY3RvcnkgaW4gdGhlXG4gKiB3b3Jrc3BhY2UgbmFtZXNwYWNlLlxuICovXG5mdW5jdGlvbiB1c2VyQXNzaXN0YW50U2tpbGxzUGF0aCh1c2VyRW1haWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgL1VzZXJzLyR7dXNlckVtYWlsLnRyaW0oKX0vLmFzc2lzdGFudC9za2lsbHNgO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSByZXF1ZXN0IHRva2VuIGNhcnJpZXMgYSBzY29wZSB0aGF0IGFsbG93cyB3b3Jrc3BhY2VcbiAqIGZpbGUgQVBJIGFjY2VzcyAoYHdvcmtzcGFjZWAgb3IgYGFsbC1hcGlzYCBvbiB7QGxpbmsgTUFTVFJBX1NDT1BFU19LRVl9KS5cbiAqL1xuZnVuY3Rpb24gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9rZW4uaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlKFxuICAgIHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1NDT1BFU19LRVkpLFxuICAgIFdPUktTUEFDRV9GSUxFX1NDT1BFUyxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsdC1pbiBtb3VudCByZXNvbHZlciBmb3IgQXNzaXN0YW50IGBTS0lMTC5tZGAgdHJlZXMuXG4gKlxuICogTW91bnRzIHtAbGluayBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRIfSB3aGVuIHNjb3BlIGNoZWNrcyBwYXNzIGFuZFxuICogYC9Vc2Vycy88ZW1haWw+Ly5hc3Npc3RhbnQvc2tpbGxzYCB3aGVuIHtAbGluayBNQVNUUkFfVVNFUl9FTUFJTF9LRVl9IGlzXG4gKiBzZXQuIFJldHVybnMgZW1wdHkgbW91bnRzIHdoZW4gdGhlIE9CTyB1c2VyIG9yIGNsaWVudCBpcyBtaXNzaW5nLlxuICogTWFzdHJhIG93bnMgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUFzc2lzdGFudFNraWxsc01vdW50cyhcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gY29udGV4dC5yZXF1ZXN0Q29udGV4dDtcblxuICBpZiAoIXNob3VsZE1vdW50QXNzaXN0YW50U2tpbGxzKHJlcXVlc3RDb250ZXh0KSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImFzc2lzdGFudC1za2lsbHM6c2tpcHBlZFwiLCB7XG4gICAgICByZWFzb246ICFyZXF1ZXN0Q29udGV4dCA/IFwibm8tcmVxdWVzdC1jb250ZXh0XCIgOiBcIm1pc3Npbmctd29ya3NwYWNlLXNjb3BlXCIsXG4gICAgICBub2RlRW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICAgIHNjb3BlczogY29udGV4dC5yZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHM6IFtdIH07XG4gIH1cblxuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQhLmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNsaWVudCA9IHVzZXI/LmV4ZWN1dGlvbkNvbnRleHQuY2xpZW50IGFzIFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhc3Npc3RhbnQtc2tpbGxzOnNraXBwZWRcIiwge1xuICAgICAgcmVhc29uOiBcIm1pc3Npbmctb2JvLWNsaWVudFwiLFxuICAgICAgdXNlcklkOiB1c2VyPy5pZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHM6IFtdIH07XG4gIH1cblxuICBtb3VudHNbQVNTSVNUQU5UX1dPUktTUEFDRV9TS0lMTFNfTU9VTlRdID0gYXdhaXQgZGF0YWJyaWNrc0ZpbGVzeXN0ZW0oXG4gICAgY2xpZW50LFxuICAgIEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEgsXG4gICk7XG5cbiAgY29uc3QgZW1haWwgPSByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQpO1xuICBpZiAoZW1haWwpIHtcbiAgICBtb3VudHNbQVNTSVNUQU5UX1VTRVJfU0tJTExTX01PVU5UXSA9IGF3YWl0IGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICAgICAgY2xpZW50LFxuICAgICAgdXNlckFzc2lzdGFudFNraWxsc1BhdGgoZW1haWwpLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcImFzc2lzdGFudC1za2lsbHM6bW91bnRlZFwiLCB7XG4gICAgc2hhcmVkUGF0aDogQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCxcbiAgICBzaGFyZWRNb3VudDogQVNTSVNUQU5UX1dPUktTUEFDRV9TS0lMTFNfTU9VTlQsXG4gICAgdXNlck1vdW50OiBlbWFpbCA/IEFTU0lTVEFOVF9VU0VSX1NLSUxMU19NT1VOVCA6IHVuZGVmaW5lZCxcbiAgICB1c2VyUGF0aDogZW1haWwgPyB1c2VyQXNzaXN0YW50U2tpbGxzUGF0aChlbWFpbCkgOiB1bmRlZmluZWQsXG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICB9KTtcblxuICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHM6IE9iamVjdC5rZXlzKG1vdW50cykgfTtcbn1cblxuLyoqXG4gKiBGaWxsIGluIGBpZGAgYW5kIGBuYW1lYCB3aGVuIGVpdGhlciBpcyBvbWl0dGVkIG9uIHtAbGluayBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zfS5cbiAqIFNsdWdpZmllcyBgbmFtZWAgaW50byBgaWRgOyB0b2tlbml6ZXMgYGlkYCBpbnRvIGEgZGlzcGxheSBgbmFtZWAuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VJZGVudGl0eShvcHRpb25zOiBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zKToge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59IHtcbiAgbGV0IGlkID0gb3B0aW9ucy5pZDtcbiAgbGV0IG5hbWUgPSBvcHRpb25zLm5hbWU7XG4gIGlmICghaWQpIHtcbiAgICBpZCA9IG5hbWUgPyBzdHJpbmcudG9TbHVnKG5hbWUpIDogXCJ3b3Jrc3BhY2VcIjtcbiAgfVxuICBpZiAoIW5hbWUpIHtcbiAgICBuYW1lID0gQXJyYXkuZnJvbShzdHJpbmcudG9rZW5pemUoaWQpKS5qb2luKFwiIFwiKTtcbiAgfVxuICByZXR1cm4geyBpZCwgbmFtZSB9O1xufVxuXG4vKiogQ29sbGVjdCBidWlsdC1pbiBhbmQgY2FsbGVyLXN1cHBsaWVkIG1vdW50IHJlc29sdmVycyBmb3Igb25lIHdvcmtzcGFjZS4gKi9cbmZ1bmN0aW9uIGJ1aWxkTW91bnRSZXNvbHZlcnMob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyk6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSB7XG4gIGNvbnN0IHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdID0gW107XG4gIGNvbnN0IHsgYXNzaXN0YW50U2tpbGxzID0gdHJ1ZSwgbW91bnRzIH0gPSBvcHRpb25zO1xuICBpZiAoYXNzaXN0YW50U2tpbGxzKSB7XG4gICAgcmVzb2x2ZXJzLnB1c2gocmVzb2x2ZUFzc2lzdGFudFNraWxsc01vdW50cyk7XG4gIH1cbiAgaWYgKG1vdW50cz8ubGVuZ3RoKSB7XG4gICAgcmVzb2x2ZXJzLnB1c2goLi4ubW91bnRzKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJzXCIsIHtcbiAgICBhc3Npc3RhbnRTa2lsbHMsXG4gICAgYnVpbHRJblJlc29sdmVyOiBhc3Npc3RhbnRTa2lsbHMsXG4gICAgY3VzdG9tUmVzb2x2ZXJDb3VudDogbW91bnRzPy5sZW5ndGggPz8gMCxcbiAgICB0b3RhbFJlc29sdmVyQ291bnQ6IHJlc29sdmVycy5sZW5ndGgsXG4gIH0pO1xuICByZXR1cm4gcmVzb2x2ZXJzO1xufVxuXG4vKipcbiAqIEdhdGUgQXNzaXN0YW50IHNraWxsIG1vdW50cyBvbiByZXF1ZXN0IGNvbnRleHQuXG4gKlxuICogQWx3YXlzIGFsbG93cyBtb3VudHMgaW4gZGV2ZWxvcG1lbnQ7IGluIG90aGVyIGVudmlyb25tZW50cyByZXF1aXJlc1xuICoge0BsaW5rIGhhc1dvcmtzcGFjZUZpbGVTY29wZX0uXG4gKi9cbmZ1bmN0aW9uIHNob3VsZE1vdW50QXNzaXN0YW50U2tpbGxzKFxuICByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfCB1bmRlZmluZWQsXG4pOiByZXF1ZXN0Q29udGV4dCBpcyBSZXF1ZXN0Q29udGV4dCB7XG4gIGlmICghcmVxdWVzdENvbnRleHQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0KTtcbn1cblxuLyoqIFJlYWQgdGhlIHRyaW1tZWQgT0JPIHVzZXIgZW1haWwgc3RhbXBlZCBvbiB7QGxpbmsgTUFTVFJBX1VTRVJfRU1BSUxfS0VZfS4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRFbWFpbChyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBlbWFpbCA9IHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJldHVybiBlbWFpbD8udHJpbSgpIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIGEge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfSBhcyBhIE1hc3RyYSBmaWxlc3lzdGVtLiBXaGVuIHRoZSByb290IGlzXG4gKiBtaXNzaW5nIChhbmQge0BsaW5rIHJlYWRPbmx5fSBzbyB3ZSB3aWxsIG5vdCBjcmVhdGUgaXQpLCBmYWxsIGJhY2sgdG9cbiAqIHtAbGluayBzY3JhdGNoRmlsZXN5c3RlbX0gc28gc2tpbGwgc2NhbnMgc3RpbGwgaGF2ZSBhIHdyaXRhYmxlIGxvY2FsIG1vdW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBkYXRhYnJpY2tzRmlsZXN5c3RlbShcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHJvb3Q6IHN0cmluZyxcbiAgcmVhZE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IGZzID0gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKHtcbiAgICBjbGllbnQsXG4gICAgcm9vdCxcbiAgICByZWFkT25seSxcbiAgICBjcmVhdGVSb290OiAhcmVhZE9ubHksXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLmluaXQoKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKFwiLlwiKSkge1xuICAgICAgcmV0dXJuIGZpbGVzeXN0ZW1zKGZzLCB7IHJlYWRPbmx5IH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZGF0YWJyaWNrcy1tb3VudDpzY3JhdGNoLWZhbGxiYWNrXCIsIHtcbiAgICAgIHJvb3QsXG4gICAgICByZWFkT25seSxcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHNjcmF0Y2hGaWxlc3lzdGVtKCk7XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IG1vdW50IHJlc29sdmVyIGZvciBvbmUgcmVxdWVzdCBhbmQgbWVyZ2UgbW91bnRzIHBsdXMgc2tpbGwgcGF0aHMuXG4gKiBMYXRlciByZXNvbHZlcnMgb3ZlcndyaXRlIG1vdW50IGtleXMgZnJvbSBlYXJsaWVyIG9uZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3Qgc2tpbGxQYXRoczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcmVzb2x2ZXJdIG9mIHJlc29sdmVycy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBjb250cmlidXRpb24gPSBhd2FpdCByZXNvbHZlcihjb250ZXh0KTtcbiAgICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJcIiwge1xuICAgICAgaW5kZXgsXG4gICAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKGNvbnRyaWJ1dGlvbi5tb3VudHMpLFxuICAgICAgc2tpbGxQYXRoczogY29udHJpYnV0aW9uLnNraWxsUGF0aHMgPz8gW10sXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihtb3VudHMsIGNvbnRyaWJ1dGlvbi5tb3VudHMpO1xuICAgIGlmIChjb250cmlidXRpb24uc2tpbGxQYXRocz8ubGVuZ3RoKSB7XG4gICAgICBza2lsbFBhdGhzLnB1c2goLi4uY29udHJpYnV0aW9uLnNraWxsUGF0aHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czptZXJnZWRcIiwge1xuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgICBza2lsbFBhdGhzLFxuICB9KTtcblxuICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbn1cblxuLyoqXG4gKiBEeW5hbWljIGZpbGVzeXN0ZW0gcmVzb2x2ZXIgcGFzc2VkIHRvIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfS5cbiAqXG4gKiBSZXR1cm5zIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IHdoZW4gYW55IG1vdW50IHJlc29sdmVkOyBvdGhlcndpc2UgYVxuICogZnJlc2gge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBNYXN0cmEgYWx3YXlzIGhhcyBhIHdyaXRhYmxlIGxvY2FsIHJvb3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IHsgbW91bnRzIH0gPSBhd2FpdCByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKHJlc29sdmVycywgY29udGV4dCk7XG4gIGNvbnN0IG1vdW50S2V5cyA9IE9iamVjdC5rZXlzKG1vdW50cyk7XG4gIGlmIChtb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZmlsZXN5c3RlbTpzY3JhdGNoXCIsIHtcbiAgICAgIGhhc1JlcXVlc3RDb250ZXh0OiBCb29sZWFuKGNvbnRleHQucmVxdWVzdENvbnRleHQpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY3JhdGNoRmlsZXN5c3RlbSgpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06Y29tcG9zaXRlXCIsIHsgbW91bnRLZXlzIH0pO1xuICByZXR1cm4gbmV3IENvbXBvc2l0ZUZpbGVzeXN0ZW0oeyBtb3VudHMgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGR5bmFtaWMge0BsaW5rIFNraWxsc1Jlc29sdmVyfSB0aGF0IGNvbGxlY3RzIGBza2lsbFBhdGhzYCBmcm9tXG4gKiBldmVyeSBtb3VudCByZXNvbHZlciBvbiBlYWNoIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIoXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBleHRyYVNraWxsUGF0aHM6IHN0cmluZ1tdID0gW10sXG4pOiBTa2lsbHNSZXNvbHZlciB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogU2tpbGxzQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgc2tpbGxQYXRocyB9ID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IG1lcmdlZCA9IFsuLi4oc2tpbGxQYXRocyA/PyBbXSksIC4uLmV4dHJhU2tpbGxQYXRoc107XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOnJlc29sdmVkXCIsIHsgc2tpbGxQYXRocywgZXh0cmFTa2lsbFBhdGhzIH0pO1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"root":["../src/agents.ts","../src/chart.ts","../src/config.ts","../src/databricks-aitools.ts","../src/defaults.ts","../src/filesystems.ts","../src/genie.ts","../src/history.ts","../src/identity.ts","../src/mcp.ts","../src/memory.ts","../src/mlflow.ts","../src/model.ts","../src/observability.ts","../src/pagination.ts","../src/plugin.ts","../src/processors.ts","../src/remote-skills.ts","../src/rest.ts","../src/server.ts","../src/serving-sanitize.ts","../src/serving.ts","../src/statement.ts","../src/storage-schema.ts","../src/summarize.ts","../src/threads.ts","../src/validation.ts","../src/workspaces.ts","../src/writer.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/agents.ts","../src/chart.ts","../src/config.ts","../src/defaults.ts","../src/filesystems.ts","../src/genie.ts","../src/history.ts","../src/identity.ts","../src/mcp.ts","../src/memory.ts","../src/mlflow.ts","../src/model.ts","../src/observability.ts","../src/pagination.ts","../src/plugin.ts","../src/processors.ts","../src/remote-skills.ts","../src/rest.ts","../src/server.ts","../src/serving-sanitize.ts","../src/serving.ts","../src/statement.ts","../src/storage-schema.ts","../src/summarize.ts","../src/threads.ts","../src/validation.ts","../src/workspaces.ts","../src/writer.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -32,22 +32,25 @@
32
32
  "express": "^5.1.0",
33
33
  "pg": "^8.22.0",
34
34
  "zod": "4.3.6",
35
- "@dbx-tools/appkit": "0.6.9",
36
- "@dbx-tools/genie": "0.6.9",
37
- "@dbx-tools/path": "0.6.9",
38
- "@dbx-tools/model": "0.6.9",
39
- "@dbx-tools/core": "0.6.9",
40
- "@dbx-tools/shared-core": "0.6.9",
41
- "@dbx-tools/shared-genie": "0.6.9",
42
- "@dbx-tools/shared-model": "0.6.9",
43
- "@dbx-tools/shared-mastra": "0.6.9"
35
+ "@dbx-tools/core": "0.6.11",
36
+ "@dbx-tools/fs": "0.6.11",
37
+ "@dbx-tools/databricks": "0.6.11",
38
+ "@dbx-tools/model": "0.6.11",
39
+ "@dbx-tools/genie": "0.6.11",
40
+ "@dbx-tools/shared-core": "0.6.11",
41
+ "@dbx-tools/appkit": "0.6.11",
42
+ "@dbx-tools/path": "0.6.11",
43
+ "@dbx-tools/shared-genie": "0.6.11",
44
+ "@dbx-tools/shared-mastra": "0.6.11",
45
+ "@dbx-tools/shared-fs": "0.6.11",
46
+ "@dbx-tools/shared-model": "0.6.11"
44
47
  },
45
48
  "main": "./lib/index.js",
46
49
  "license": "UNLICENSED",
47
50
  "publishConfig": {
48
51
  "access": "public"
49
52
  },
50
- "version": "0.6.9",
53
+ "version": "0.6.11",
51
54
  "types": "./lib/index.d.ts",
52
55
  "type": "module",
53
56
  "exports": {
package/src/config.ts CHANGED
@@ -26,7 +26,6 @@ import type { MastraAgentDefinition, MastraTools } from "./agents.ts";
26
26
  import type { GenieSpacesConfig } from "./genie.ts";
27
27
  import type { MastraIdentityMode } from "./identity.ts";
28
28
  import type { RemoteSkillsOption } from "./remote-skills.ts";
29
- import type { DatabricksAIToolsOption } from "./databricks-aitools.ts";
30
29
 
31
30
  /**
32
31
  * `RequestContext` key under which {@link MastraServer} stores the
@@ -581,28 +580,6 @@ export interface MastraPluginConfig extends BasePluginConfig {
581
580
  * ```
582
581
  */
583
582
  remoteSkills?: RemoteSkillsOption;
584
-
585
- /**
586
- * Fold Databricks AI Tools skills (`databricks aitools`) into every
587
- * default-workspace agent as extra local skill scan paths.
588
- *
589
- * `false` (default) off; `"auto"` enables only when the CLI's installed
590
- * skills tree (`~/.databricks/aitools/skills`) exists or the `databricks`
591
- * CLI is resolvable, else silently no-op; `true` requires one of those and
592
- * fails startup otherwise. Pass an options bag to select `skills`, include
593
- * `experimental` skills, `refresh` from the CLI, or set an explicit `path`.
594
- *
595
- * Reuses the already-installed global tree when present (no CLI call);
596
- * otherwise runs `databricks aitools install --path <dir> --skills-only` to
597
- * materialize a resolved, agent-agnostic set into a temp dir.
598
- *
599
- * @example
600
- * ```ts
601
- * mastra({ databricksAITools: "auto" });
602
- * mastra({ databricksAITools: { skills: ["databricks-core", "databricks-jobs"] } });
603
- * ```
604
- */
605
- databricksAITools?: DatabricksAIToolsOption;
606
583
  }
607
584
 
608
585
  /**
@@ -624,12 +601,7 @@ export const MASTRA_CONFIG_SCHEMA: ConfigSchema = {
624
601
  remoteSkills: {
625
602
  type: ["string", "array", "object"],
626
603
  description:
627
- "Remote Agent-Skill sources provisioned at startup (GitHub owner/repo, git/GitLab URL, or a direct SKILL.md/archive URL). Prefers the optional `skills` npm CLI, else a direct fetch; fails startup on error unless failOnError:false. Written to the Databricks user Assistant skills folder, or a local temp dir when no workspace is writable.",
628
- },
629
- databricksAITools: {
630
- type: ["boolean", "string", "object"],
631
- description:
632
- 'Fold Databricks AI Tools skills (databricks aitools) into agents as extra local skill paths. false (default) off; "auto" enables when the installed tree or the databricks CLI is available; true requires one and fails startup otherwise. An object selects skills, experimental, refresh, or path.',
604
+ 'Remote Agent-Skill sources provisioned at startup: "aitools" for Databricks\' own skill set (read from the public databricks/databricks-agent-skills repo, no CLI needed), a GitHub owner/repo, a git/GitLab URL, or a direct SKILL.md/archive URL. Non-aitools sources prefer the optional `skills` npm CLI, else a direct fetch; fails startup on error unless failOnError:false. Written to the Databricks user Assistant skills folder, or a local temp dir when no workspace is writable.',
633
605
  },
634
606
  storage: {
635
607
  type: ["boolean", "object"],