@kepler.gl/mcp 0.0.0-stage → 3.3.0-alpha.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/cjs/commands/add-column-command.js +192 -0
  2. package/dist/cjs/commands/basemap-command.js +80 -0
  3. package/dist/cjs/commands/boundary-command.js +81 -0
  4. package/dist/cjs/commands/command-wrappers.js +122 -0
  5. package/dist/cjs/commands/dataset-context-command.js +87 -0
  6. package/dist/cjs/commands/index.js +230 -0
  7. package/dist/cjs/commands/layer-creation-command.js +534 -0
  8. package/dist/cjs/commands/layer-style-command.js +136 -0
  9. package/dist/cjs/commands/load-data-command.js +270 -0
  10. package/dist/cjs/commands/save-data-command.js +118 -0
  11. package/dist/cjs/commands/split-view-command.js +261 -0
  12. package/dist/cjs/commands/table-command.js +199 -0
  13. package/dist/cjs/commands/time-filter-command.js +289 -0
  14. package/dist/cjs/commands/toggle-time-filter-command.js +155 -0
  15. package/dist/cjs/commands/types.js +6 -0
  16. package/dist/cjs/commands/utils.js +536 -0
  17. package/dist/cjs/commands/view-mode-command.js +94 -0
  18. package/dist/cjs/index.js +39 -0
  19. package/dist/cjs/map-contract.js +6 -0
  20. package/dist/cjs/server/bridge-server.js +435 -0
  21. package/dist/cjs/server/index.js +31 -0
  22. package/dist/cjs/server/stdio.js +201 -0
  23. package/dist/cjs/types.js +30 -0
  24. package/dist/commands/add-column-command.d.ts +4 -0
  25. package/dist/commands/basemap-command.d.ts +4 -0
  26. package/dist/commands/boundary-command.d.ts +4 -0
  27. package/dist/commands/command-wrappers.d.ts +52 -0
  28. package/dist/commands/dataset-context-command.d.ts +4 -0
  29. package/dist/commands/index.d.ts +31 -0
  30. package/dist/commands/layer-creation-command.d.ts +8 -0
  31. package/dist/commands/layer-style-command.d.ts +4 -0
  32. package/dist/commands/load-data-command.d.ts +4 -0
  33. package/dist/commands/save-data-command.d.ts +4 -0
  34. package/dist/commands/split-view-command.d.ts +4 -0
  35. package/dist/commands/table-command.d.ts +4 -0
  36. package/dist/commands/time-filter-command.d.ts +13 -0
  37. package/dist/commands/toggle-time-filter-command.d.ts +4 -0
  38. package/dist/commands/types.d.ts +132 -0
  39. package/dist/commands/utils.d.ts +138 -0
  40. package/dist/commands/view-mode-command.d.ts +4 -0
  41. package/dist/esm/commands/add-column-command.js +185 -0
  42. package/dist/esm/commands/basemap-command.js +72 -0
  43. package/dist/esm/commands/boundary-command.js +73 -0
  44. package/dist/esm/commands/command-wrappers.js +114 -0
  45. package/dist/esm/commands/dataset-context-command.js +79 -0
  46. package/dist/esm/commands/index.js +51 -0
  47. package/dist/esm/commands/layer-creation-command.js +527 -0
  48. package/dist/esm/commands/layer-style-command.js +130 -0
  49. package/dist/esm/commands/load-data-command.js +264 -0
  50. package/dist/esm/commands/save-data-command.js +112 -0
  51. package/dist/esm/commands/split-view-command.js +255 -0
  52. package/dist/esm/commands/table-command.js +194 -0
  53. package/dist/esm/commands/time-filter-command.js +280 -0
  54. package/dist/esm/commands/toggle-time-filter-command.js +147 -0
  55. package/dist/esm/commands/types.js +3 -0
  56. package/dist/esm/commands/utils.js +521 -0
  57. package/dist/esm/commands/view-mode-command.js +86 -0
  58. package/dist/esm/index.js +20 -0
  59. package/dist/esm/map-contract.js +3 -0
  60. package/dist/esm/server/bridge-server.js +428 -0
  61. package/dist/esm/server/index.js +13 -0
  62. package/dist/esm/server/stdio.js +198 -0
  63. package/dist/esm/types.js +24 -0
  64. package/dist/index.d.ts +15 -0
  65. package/dist/map-contract.d.ts +31 -0
  66. package/dist/server/bridge-server.d.ts +53 -0
  67. package/dist/server/index.d.ts +9 -0
  68. package/dist/server/stdio.d.ts +2 -0
  69. package/dist/types.d.ts +24 -0
  70. package/package.json +84 -4
  71. package/skill/kepler/SKILL.md +438 -0
  72. package/skill/kepler/skill.yaml +4 -0
  73. package/README.md +0 -3
@@ -0,0 +1,114 @@
1
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ // SPDX-License-Identifier: MIT
5
+ // Copyright contributors to the kepler.gl project
6
+
7
+ /**
8
+ * Generic utility for converting an existing AI SDK tool into a sqlrooms
9
+ * `RoomCommand`. Kept dependency-light (only `zod` + `RoomCommand` type) so it
10
+ * can be reused by any in-browser skill system that wants to expose its
11
+ * existing AI SDK tools as commands without rewriting them.
12
+ *
13
+ * The demo-app's own command factories return `RoomCommand` directly (preferred
14
+ * when you own the command — see `basemap-command.ts` for the reference shape). This
15
+ * wrapper is the fallback path for hosts that cannot rewrite their tools:
16
+ * it folds the tool's `execute`, `inputSchema`, and `toModelOutput` (the
17
+ * token-trim logic the AI SDK applies between tool call and model) into a
18
+ * single `RoomCommand.execute` so the registry-stored result already carries
19
+ * the model-facing subset.
20
+ */
21
+
22
+ /** A built AI SDK tool, treated loosely for dynamic dispatch. */
23
+
24
+ /** Metadata that the AI SDK tool does not carry but a `RoomCommand` requires. */
25
+
26
+ /**
27
+ * Cast a concrete zod schema (e.g. `z.object({...})`, which is `ZodObject<...>`)
28
+ * to the `ZodType<unknown>` that `RoomCommand.inputSchema` expects. The
29
+ * installed zod `ZodObject` is not structurally assignable to sqlrooms'
30
+ * `ZodType<unknown>` (covariance on the output type), so a cast is required at
31
+ * the assignment site. This helper centralizes that cast.
32
+ */
33
+ export function asInputSchema(schema) {
34
+ return schema;
35
+ }
36
+
37
+ /**
38
+ * Wrap an existing AI SDK tool as a sqlrooms `RoomCommand`. The command's
39
+ * `execute` calls the tool's `execute` and then applies the tool's
40
+ * `toModelOutput` (if any) so the trimmed, model-facing shape is what the
41
+ * registry stores and downstream surfaces (AI skill, palette, CLI, MCP) see.
42
+ */
43
+ export function toolToCommand(tool, meta) {
44
+ return {
45
+ id: meta.id,
46
+ name: meta.name,
47
+ description: tool.description,
48
+ group: meta.group,
49
+ keywords: meta.keywords,
50
+ inputSchema: tool.inputSchema,
51
+ execute: function () {
52
+ var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, input) {
53
+ var _rawOutput$success, _ref, _ref2, rawOutput, trimmed;
54
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
55
+ while (1) switch (_context.prev = _context.next) {
56
+ case 0:
57
+ if (!(!tool.execute || typeof tool.execute !== 'function')) {
58
+ _context.next = 2;
59
+ break;
60
+ }
61
+ return _context.abrupt("return", {
62
+ success: false,
63
+ commandId: meta.id,
64
+ error: 'Tool has no execute function.'
65
+ });
66
+ case 2:
67
+ _context.prev = 2;
68
+ _context.next = 5;
69
+ return tool.execute(input !== null && input !== void 0 ? input : {}, {
70
+ toolCallId: meta.id,
71
+ signal: ctx.signal
72
+ });
73
+ case 5:
74
+ rawOutput = _context.sent;
75
+ trimmed = typeof tool.toModelOutput === 'function' ? tool.toModelOutput({
76
+ output: rawOutput,
77
+ toolCallId: meta.id
78
+ }) : rawOutput;
79
+ return _context.abrupt("return", {
80
+ success: (_rawOutput$success = rawOutput === null || rawOutput === void 0 ? void 0 : rawOutput.success) !== null && _rawOutput$success !== void 0 ? _rawOutput$success : true,
81
+ commandId: meta.id,
82
+ // A structured failure (success:false) that didn't throw must still
83
+ // carry an error message — otherwise callers see {success:false,
84
+ // error:undefined} and downstream formatters misreport it as a
85
+ // success. Many tool/result shapes (including RoomCommandResult)
86
+ // carry the failure in a `message` field rather than `error`, so
87
+ // fall back to that before the generic message.
88
+ error: (rawOutput === null || rawOutput === void 0 ? void 0 : rawOutput.success) === false ? (_ref = (_ref2 = rawOutput === null || rawOutput === void 0 ? void 0 : rawOutput.error) !== null && _ref2 !== void 0 ? _ref2 : rawOutput === null || rawOutput === void 0 ? void 0 : rawOutput.message) !== null && _ref !== void 0 ? _ref : 'Tool execution failed.' : undefined,
89
+ data: _typeof(trimmed) === 'object' && trimmed !== null ? trimmed : {
90
+ details: trimmed
91
+ }
92
+ });
93
+ case 10:
94
+ _context.prev = 10;
95
+ _context.t0 = _context["catch"](2);
96
+ return _context.abrupt("return", {
97
+ success: false,
98
+ commandId: meta.id,
99
+ error: _context.t0 instanceof Error ? _context.t0.message : String(_context.t0)
100
+ });
101
+ case 13:
102
+ case "end":
103
+ return _context.stop();
104
+ }
105
+ }, _callee, null, [[2, 10]]);
106
+ }));
107
+ function execute(_x, _x2) {
108
+ return _execute.apply(this, arguments);
109
+ }
110
+ return execute;
111
+ }()
112
+ };
113
+ }
114
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc0lucHV0U2NoZW1hIiwic2NoZW1hIiwidG9vbFRvQ29tbWFuZCIsInRvb2wiLCJtZXRhIiwiaWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJncm91cCIsImtleXdvcmRzIiwiaW5wdXRTY2hlbWEiLCJleGVjdXRlIiwiX2V4ZWN1dGUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImN0eCIsImlucHV0IiwiX3Jhd091dHB1dCRzdWNjZXNzIiwiX3JlZiIsIl9yZWYyIiwicmF3T3V0cHV0IiwidHJpbW1lZCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhYnJ1cHQiLCJzdWNjZXNzIiwiY29tbWFuZElkIiwiZXJyb3IiLCJ0b29sQ2FsbElkIiwic2lnbmFsIiwic2VudCIsInRvTW9kZWxPdXRwdXQiLCJvdXRwdXQiLCJtZXNzYWdlIiwidW5kZWZpbmVkIiwiZGF0YSIsIl90eXBlb2YiLCJkZXRhaWxzIiwidDAiLCJFcnJvciIsIlN0cmluZyIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbW1hbmQtd3JhcHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyoqXG4gKiBHZW5lcmljIHV0aWxpdHkgZm9yIGNvbnZlcnRpbmcgYW4gZXhpc3RpbmcgQUkgU0RLIHRvb2wgaW50byBhIHNxbHJvb21zXG4gKiBgUm9vbUNvbW1hbmRgLiBLZXB0IGRlcGVuZGVuY3ktbGlnaHQgKG9ubHkgYHpvZGAgKyBgUm9vbUNvbW1hbmRgIHR5cGUpIHNvIGl0XG4gKiBjYW4gYmUgcmV1c2VkIGJ5IGFueSBpbi1icm93c2VyIHNraWxsIHN5c3RlbSB0aGF0IHdhbnRzIHRvIGV4cG9zZSBpdHNcbiAqIGV4aXN0aW5nIEFJIFNESyB0b29scyBhcyBjb21tYW5kcyB3aXRob3V0IHJld3JpdGluZyB0aGVtLlxuICpcbiAqIFRoZSBkZW1vLWFwcCdzIG93biBjb21tYW5kIGZhY3RvcmllcyByZXR1cm4gYFJvb21Db21tYW5kYCBkaXJlY3RseSAocHJlZmVycmVkXG4gKiB3aGVuIHlvdSBvd24gdGhlIGNvbW1hbmQg4oCUIHNlZSBgYmFzZW1hcC1jb21tYW5kLnRzYCBmb3IgdGhlIHJlZmVyZW5jZSBzaGFwZSkuIFRoaXNcbiAqIHdyYXBwZXIgaXMgdGhlIGZhbGxiYWNrIHBhdGggZm9yIGhvc3RzIHRoYXQgY2Fubm90IHJld3JpdGUgdGhlaXIgdG9vbHM6XG4gKiBpdCBmb2xkcyB0aGUgdG9vbCdzIGBleGVjdXRlYCwgYGlucHV0U2NoZW1hYCwgYW5kIGB0b01vZGVsT3V0cHV0YCAodGhlXG4gKiB0b2tlbi10cmltIGxvZ2ljIHRoZSBBSSBTREsgYXBwbGllcyBiZXR3ZWVuIHRvb2wgY2FsbCBhbmQgbW9kZWwpIGludG8gYVxuICogc2luZ2xlIGBSb29tQ29tbWFuZC5leGVjdXRlYCBzbyB0aGUgcmVnaXN0cnktc3RvcmVkIHJlc3VsdCBhbHJlYWR5IGNhcnJpZXNcbiAqIHRoZSBtb2RlbC1mYWNpbmcgc3Vic2V0LlxuICovXG5cbmltcG9ydCB0eXBlIHtSb29tQ29tbWFuZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Wm9kVHlwZX0gZnJvbSAnem9kJztcblxuLyoqIEEgYnVpbHQgQUkgU0RLIHRvb2wsIHRyZWF0ZWQgbG9vc2VseSBmb3IgZHluYW1pYyBkaXNwYXRjaC4gKi9cbmV4cG9ydCB0eXBlIEFueVRvb2wgPSB7XG4gIGV4ZWN1dGU/OiAoYXJnczogYW55LCBvcHRpb25zOiBhbnkpID0+IFByb21pc2U8YW55PjtcbiAgdG9Nb2RlbE91dHB1dD86IChwYXJhbXM6IHtvdXRwdXQ6IGFueTsgdG9vbENhbGxJZD86IHN0cmluZ30pID0+IGFueTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlucHV0U2NoZW1hPzogWm9kVHlwZTtcbn07XG5cbi8qKiBNZXRhZGF0YSB0aGF0IHRoZSBBSSBTREsgdG9vbCBkb2VzIG5vdCBjYXJyeSBidXQgYSBgUm9vbUNvbW1hbmRgIHJlcXVpcmVzLiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZE1ldGEgPSB7XG4gIC8qKiBTdGFibGUsIG5hbWVzcGFjZWQgY29tbWFuZCBpZCwgZS5nLiBgbWFwLnNldC1iYXNlbWFwYC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG5hbWUgc2hvd24gaW4gdGhlIGNvbW1hbmQgcGFsZXR0ZSAvIGxpc3RpbmdzLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBncm91cGluZyBsYWJlbCwgZS5nLiBgTWFwYCwgYERhdGFgLCBgR2VvRGFgLiAqL1xuICBncm91cD86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHNlYXJjaCBrZXl3b3Jkcy4gKi9cbiAga2V5d29yZHM/OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQ2FzdCBhIGNvbmNyZXRlIHpvZCBzY2hlbWEgKGUuZy4gYHoub2JqZWN0KHsuLi59KWAsIHdoaWNoIGlzIGBab2RPYmplY3Q8Li4uPmApXG4gKiB0byB0aGUgYFpvZFR5cGU8dW5rbm93bj5gIHRoYXQgYFJvb21Db21tYW5kLmlucHV0U2NoZW1hYCBleHBlY3RzLiBUaGVcbiAqIGluc3RhbGxlZCB6b2QgYFpvZE9iamVjdGAgaXMgbm90IHN0cnVjdHVyYWxseSBhc3NpZ25hYmxlIHRvIHNxbHJvb21zJ1xuICogYFpvZFR5cGU8dW5rbm93bj5gIChjb3ZhcmlhbmNlIG9uIHRoZSBvdXRwdXQgdHlwZSksIHNvIGEgY2FzdCBpcyByZXF1aXJlZCBhdFxuICogdGhlIGFzc2lnbm1lbnQgc2l0ZS4gVGhpcyBoZWxwZXIgY2VudHJhbGl6ZXMgdGhhdCBjYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNJbnB1dFNjaGVtYShzY2hlbWE6IFpvZFR5cGUpOiBab2RUeXBlPHVua25vd24+IHtcbiAgcmV0dXJuIHNjaGVtYSBhcyB1bmtub3duIGFzIFpvZFR5cGU8dW5rbm93bj47XG59XG5cbi8qKlxuICogV3JhcCBhbiBleGlzdGluZyBBSSBTREsgdG9vbCBhcyBhIHNxbHJvb21zIGBSb29tQ29tbWFuZGAuIFRoZSBjb21tYW5kJ3NcbiAqIGBleGVjdXRlYCBjYWxscyB0aGUgdG9vbCdzIGBleGVjdXRlYCBhbmQgdGhlbiBhcHBsaWVzIHRoZSB0b29sJ3NcbiAqIGB0b01vZGVsT3V0cHV0YCAoaWYgYW55KSBzbyB0aGUgdHJpbW1lZCwgbW9kZWwtZmFjaW5nIHNoYXBlIGlzIHdoYXQgdGhlXG4gKiByZWdpc3RyeSBzdG9yZXMgYW5kIGRvd25zdHJlYW0gc3VyZmFjZXMgKEFJIHNraWxsLCBwYWxldHRlLCBDTEksIE1DUCkgc2VlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbFRvQ29tbWFuZCh0b29sOiBBbnlUb29sLCBtZXRhOiBDb21tYW5kTWV0YSk6IFJvb21Db21tYW5kIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogbWV0YS5pZCxcbiAgICBuYW1lOiBtZXRhLm5hbWUsXG4gICAgZGVzY3JpcHRpb246IHRvb2wuZGVzY3JpcHRpb24sXG4gICAgZ3JvdXA6IG1ldGEuZ3JvdXAsXG4gICAga2V5d29yZHM6IG1ldGEua2V5d29yZHMsXG4gICAgaW5wdXRTY2hlbWE6IHRvb2wuaW5wdXRTY2hlbWEgYXMgYW55LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChjdHgsIGlucHV0KSA9PiB7XG4gICAgICBpZiAoIXRvb2wuZXhlY3V0ZSB8fCB0eXBlb2YgdG9vbC5leGVjdXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgY29tbWFuZElkOiBtZXRhLmlkLFxuICAgICAgICAgIGVycm9yOiAnVG9vbCBoYXMgbm8gZXhlY3V0ZSBmdW5jdGlvbi4nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaHJlYWQgdGhlIGNhbGxlcidzIEFib3J0U2lnbmFsIHRocm91Z2ggc28gaG9zdHMgKFdlYk1DUCAvIGJyaWRnZSlcbiAgICAgICAgLy8gY2FuIGNhbmNlbCBsb25nLXJ1bm5pbmcgd3JhcHBlZCB0b29scyB3aGVuIHRoZSBhZ2VudCBhYm9ydHMuIFRvb2xzXG4gICAgICAgIC8vIHRoYXQgZG9uJ3QgdXNlIGEgc2lnbmFsIGlnbm9yZSBpdC5cbiAgICAgICAgY29uc3QgcmF3T3V0cHV0ID0gYXdhaXQgdG9vbC5leGVjdXRlKGlucHV0ID8/IHt9LCB7XG4gICAgICAgICAgdG9vbENhbGxJZDogbWV0YS5pZCxcbiAgICAgICAgICBzaWduYWw6IGN0eC5zaWduYWxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPVxuICAgICAgICAgIHR5cGVvZiB0b29sLnRvTW9kZWxPdXRwdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gdG9vbC50b01vZGVsT3V0cHV0KHtvdXRwdXQ6IHJhd091dHB1dCwgdG9vbENhbGxJZDogbWV0YS5pZH0pXG4gICAgICAgICAgICA6IHJhd091dHB1dDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiByYXdPdXRwdXQ/LnN1Y2Nlc3MgPz8gdHJ1ZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IG1ldGEuaWQsXG4gICAgICAgICAgLy8gQSBzdHJ1Y3R1cmVkIGZhaWx1cmUgKHN1Y2Nlc3M6ZmFsc2UpIHRoYXQgZGlkbid0IHRocm93IG11c3Qgc3RpbGxcbiAgICAgICAgICAvLyBjYXJyeSBhbiBlcnJvciBtZXNzYWdlIOKAlCBvdGhlcndpc2UgY2FsbGVycyBzZWUge3N1Y2Nlc3M6ZmFsc2UsXG4gICAgICAgICAgLy8gZXJyb3I6dW5kZWZpbmVkfSBhbmQgZG93bnN0cmVhbSBmb3JtYXR0ZXJzIG1pc3JlcG9ydCBpdCBhcyBhXG4gICAgICAgICAgLy8gc3VjY2Vzcy4gTWFueSB0b29sL3Jlc3VsdCBzaGFwZXMgKGluY2x1ZGluZyBSb29tQ29tbWFuZFJlc3VsdClcbiAgICAgICAgICAvLyBjYXJyeSB0aGUgZmFpbHVyZSBpbiBhIGBtZXNzYWdlYCBmaWVsZCByYXRoZXIgdGhhbiBgZXJyb3JgLCBzb1xuICAgICAgICAgIC8vIGZhbGwgYmFjayB0byB0aGF0IGJlZm9yZSB0aGUgZ2VuZXJpYyBtZXNzYWdlLlxuICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgcmF3T3V0cHV0Py5zdWNjZXNzID09PSBmYWxzZVxuICAgICAgICAgICAgICA/IChyYXdPdXRwdXQ/LmVycm9yIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgICAgICAgICAocmF3T3V0cHV0Py5tZXNzYWdlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgICAgICAgICAnVG9vbCBleGVjdXRpb24gZmFpbGVkLidcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZGF0YTogdHlwZW9mIHRyaW1tZWQgPT09ICdvYmplY3QnICYmIHRyaW1tZWQgIT09IG51bGwgPyB0cmltbWVkIDoge2RldGFpbHM6IHRyaW1tZWR9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGNvbW1hbmRJZDogbWV0YS5pZCxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBS0E7O0FBUUE7O0FBWUE7QUFDQTtB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
@@ -0,0 +1,79 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ // SPDX-License-Identifier: MIT
4
+ // Copyright contributors to the kepler.gl project
5
+
6
+ import { z } from 'zod';
7
+ export var datasetContextCommandId = 'map.get-dataset-context';
8
+ export function getDatasetContextCommand(ctx) {
9
+ return {
10
+ id: datasetContextCommandId,
11
+ name: 'Get dataset context',
12
+ group: 'Map',
13
+ description: 'Get all loaded kepler.gl datasets with their fields and layer configurations. ' + 'Returns each dataset name, id, field name→type mappings, and the layers ' + '(id, label, type, geometryMode, geometryColumns) bound to it.',
14
+ metadata: {
15
+ readOnly: true,
16
+ riskLevel: 'low',
17
+ idempotent: true
18
+ },
19
+ inputSchema: z.object({}),
20
+ execute: function () {
21
+ var _execute = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
22
+ var context, trimmed, datasets, count;
23
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
24
+ while (1) switch (_context.prev = _context.next) {
25
+ case 0:
26
+ _context.prev = 0;
27
+ context = ctx.getDatasetContext();
28
+ if (context) {
29
+ _context.next = 4;
30
+ break;
31
+ }
32
+ return _context.abrupt("return", {
33
+ success: false,
34
+ commandId: datasetContextCommandId,
35
+ error: 'No datasets or layers available.',
36
+ data: {
37
+ instruction: 'Please ensure the kepler.gl map has loaded datasets and try again.'
38
+ }
39
+ });
40
+ case 4:
41
+ // Accept either a pure-JSON context or the two-part "human line + JSON"
42
+ // format: hosts may return either, so don't assume the first line is a
43
+ // preface.
44
+ trimmed = context.trim();
45
+ datasets = JSON.parse(trimmed.startsWith('[') || trimmed.startsWith('{') ? trimmed : context.split('\n').slice(1).join('\n'));
46
+ count = Array.isArray(datasets) ? datasets.length : Object.keys(datasets).length;
47
+ return _context.abrupt("return", {
48
+ success: true,
49
+ commandId: datasetContextCommandId,
50
+ data: {
51
+ details: "".concat(count, " dataset(s) loaded."),
52
+ datasets: datasets
53
+ }
54
+ });
55
+ case 10:
56
+ _context.prev = 10;
57
+ _context.t0 = _context["catch"](0);
58
+ return _context.abrupt("return", {
59
+ success: false,
60
+ commandId: datasetContextCommandId,
61
+ error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error',
62
+ data: {
63
+ instruction: 'Please ensure the kepler.gl map is properly loaded and try again.'
64
+ }
65
+ });
66
+ case 13:
67
+ case "end":
68
+ return _context.stop();
69
+ }
70
+ }, _callee, null, [[0, 10]]);
71
+ }));
72
+ function execute() {
73
+ return _execute.apply(this, arguments);
74
+ }
75
+ return execute;
76
+ }()
77
+ };
78
+ }
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6IiwiZGF0YXNldENvbnRleHRDb21tYW5kSWQiLCJnZXREYXRhc2V0Q29udGV4dENvbW1hbmQiLCJjdHgiLCJpZCIsIm5hbWUiLCJncm91cCIsImRlc2NyaXB0aW9uIiwibWV0YWRhdGEiLCJyZWFkT25seSIsInJpc2tMZXZlbCIsImlkZW1wb3RlbnQiLCJpbnB1dFNjaGVtYSIsIm9iamVjdCIsImV4ZWN1dGUiLCJfZXhlY3V0ZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY29udGV4dCIsInRyaW1tZWQiLCJkYXRhc2V0cyIsImNvdW50Iiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImdldERhdGFzZXRDb250ZXh0IiwiYWJydXB0Iiwic3VjY2VzcyIsImNvbW1hbmRJZCIsImVycm9yIiwiZGF0YSIsImluc3RydWN0aW9uIiwidHJpbSIsIkpTT04iLCJwYXJzZSIsInN0YXJ0c1dpdGgiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIk9iamVjdCIsImtleXMiLCJkZXRhaWxzIiwiY29uY2F0IiwidDAiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdG9wIiwiYXBwbHkiLCJhcmd1bWVudHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZGF0YXNldC1jb250ZXh0LWNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHR5cGUge1Jvb21Db21tYW5kfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB0eXBlIHtLZXBsZXJDb250ZXh0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGRhdGFzZXRDb250ZXh0Q29tbWFuZElkID0gJ21hcC5nZXQtZGF0YXNldC1jb250ZXh0JyBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFzZXRDb250ZXh0Q29tbWFuZChjdHg6IEtlcGxlckNvbnRleHQpOiBSb29tQ29tbWFuZCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGRhdGFzZXRDb250ZXh0Q29tbWFuZElkLFxuICAgIG5hbWU6ICdHZXQgZGF0YXNldCBjb250ZXh0JyxcbiAgICBncm91cDogJ01hcCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnR2V0IGFsbCBsb2FkZWQga2VwbGVyLmdsIGRhdGFzZXRzIHdpdGggdGhlaXIgZmllbGRzIGFuZCBsYXllciBjb25maWd1cmF0aW9ucy4gJyArXG4gICAgICAnUmV0dXJucyBlYWNoIGRhdGFzZXQgbmFtZSwgaWQsIGZpZWxkIG5hbWXihpJ0eXBlIG1hcHBpbmdzLCBhbmQgdGhlIGxheWVycyAnICtcbiAgICAgICcoaWQsIGxhYmVsLCB0eXBlLCBnZW9tZXRyeU1vZGUsIGdlb21ldHJ5Q29sdW1ucykgYm91bmQgdG8gaXQuJyxcbiAgICBtZXRhZGF0YToge3JlYWRPbmx5OiB0cnVlLCByaXNrTGV2ZWw6ICdsb3cnLCBpZGVtcG90ZW50OiB0cnVlfSxcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe30pIGFzIGFueSxcbiAgICBleGVjdXRlOiBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gY3R4LmdldERhdGFzZXRDb250ZXh0KCk7XG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogZGF0YXNldENvbnRleHRDb21tYW5kSWQsXG4gICAgICAgICAgICBlcnJvcjogJ05vIGRhdGFzZXRzIG9yIGxheWVycyBhdmFpbGFibGUuJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246ICdQbGVhc2UgZW5zdXJlIHRoZSBrZXBsZXIuZ2wgbWFwIGhhcyBsb2FkZWQgZGF0YXNldHMgYW5kIHRyeSBhZ2Fpbi4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBY2NlcHQgZWl0aGVyIGEgcHVyZS1KU09OIGNvbnRleHQgb3IgdGhlIHR3by1wYXJ0IFwiaHVtYW4gbGluZSArIEpTT05cIlxuICAgICAgICAvLyBmb3JtYXQ6IGhvc3RzIG1heSByZXR1cm4gZWl0aGVyLCBzbyBkb24ndCBhc3N1bWUgdGhlIGZpcnN0IGxpbmUgaXMgYVxuICAgICAgICAvLyBwcmVmYWNlLlxuICAgICAgICBjb25zdCB0cmltbWVkID0gY29udGV4dC50cmltKCk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzID0gSlNPTi5wYXJzZShcbiAgICAgICAgICB0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKVxuICAgICAgICAgICAgPyB0cmltbWVkXG4gICAgICAgICAgICA6IGNvbnRleHQuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gQXJyYXkuaXNBcnJheShkYXRhc2V0cykgPyBkYXRhc2V0cy5sZW5ndGggOiBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgY29tbWFuZElkOiBkYXRhc2V0Q29udGV4dENvbW1hbmRJZCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBkZXRhaWxzOiBgJHtjb3VudH0gZGF0YXNldChzKSBsb2FkZWQuYCxcbiAgICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBjb21tYW5kSWQ6IGRhdGFzZXRDb250ZXh0Q29tbWFuZElkLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbjogJ1BsZWFzZSBlbnN1cmUgdGhlIGtlcGxlci5nbCBtYXAgaXMgcHJvcGVybHkgbG9hZGVkIGFuZCB0cnkgYWdhaW4uJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFHQSxTQUFRQSxDQUFDLFFBQU8sS0FBSztBQUdyQixPQUFPLElBQU1DLHVCQUF1QixHQUFHLHlCQUFrQztBQUV6RSxPQUFPLFNBQVNDLHdCQUF3QkEsQ0FBQ0MsR0FBa0IsRUFBZTtFQUN4RSxPQUFPO0lBQ0xDLEVBQUUsRUFBRUgsdUJBQXVCO0lBQzNCSSxJQUFJLEVBQUUscUJBQXFCO0lBQzNCQyxLQUFLLEVBQUUsS0FBSztJQUNaQyxXQUFXLEVBQ1QsZ0ZBQWdGLEdBQ2hGLDBFQUEwRSxHQUMxRSwrREFBK0Q7SUFDakVDLFFBQVEsRUFBRTtNQUFDQyxRQUFRLEVBQUUsSUFBSTtNQUFFQyxTQUFTLEVBQUUsS0FBSztNQUFFQyxVQUFVLEVBQUU7SUFBSSxDQUFDO0lBQzlEQyxXQUFXLEVBQUVaLENBQUMsQ0FBQ2EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFRO0lBQ2hDQyxPQUFPO01BQUEsSUFBQUMsUUFBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQUMsUUFBQTtRQUFBLElBQUFDLE9BQUEsRUFBQUMsT0FBQSxFQUFBQyxRQUFBLEVBQUFDLEtBQUE7UUFBQSxPQUFBTixtQkFBQSxDQUFBTyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUFGLFFBQUEsQ0FBQUMsSUFBQTtjQUVDUCxPQUFPLEdBQUdqQixHQUFHLENBQUMwQixpQkFBaUIsQ0FBQyxDQUFDO2NBQUEsSUFDbENULE9BQU87Z0JBQUFNLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBSSxNQUFBLFdBQ0g7Z0JBQ0xDLE9BQU8sRUFBRSxLQUFLO2dCQUNkQyxTQUFTLEVBQUUvQix1QkFBdUI7Z0JBQ2xDZ0MsS0FBSyxFQUFFLGtDQUFrQztnQkFDekNDLElBQUksRUFBRTtrQkFDSkMsV0FBVyxFQUFFO2dCQUNmO2NBQ0YsQ0FBQztZQUFBO2NBRUg7Y0FDQTtjQUNBO2NBQ01kLE9BQU8sR0FBR0QsT0FBTyxDQUFDZ0IsSUFBSSxDQUFDLENBQUM7Y0FDeEJkLFFBQVEsR0FBR2UsSUFBSSxDQUFDQyxLQUFLLENBQ3pCakIsT0FBTyxDQUFDa0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJbEIsT0FBTyxDQUFDa0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUM5Q2xCLE9BQU8sR0FDUEQsT0FBTyxDQUFDb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQzVDLENBQUM7Y0FDS25CLEtBQUssR0FBR29CLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEIsUUFBUSxDQUFDLEdBQUdBLFFBQVEsQ0FBQ3VCLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUN6QixRQUFRLENBQUMsQ0FBQ3VCLE1BQU07Y0FBQSxPQUFBbkIsUUFBQSxDQUFBSSxNQUFBLFdBQy9FO2dCQUNMQyxPQUFPLEVBQUUsSUFBSTtnQkFDYkMsU0FBUyxFQUFFL0IsdUJBQXVCO2dCQUNsQ2lDLElBQUksRUFBRTtrQkFDSmMsT0FBTyxLQUFBQyxNQUFBLENBQUsxQixLQUFLLHdCQUFxQjtrQkFDdENELFFBQVEsRUFBUkE7Z0JBQ0Y7Y0FDRixDQUFDO1lBQUE7Y0FBQUksUUFBQSxDQUFBQyxJQUFBO2NBQUFELFFBQUEsQ0FBQXdCLEVBQUEsR0FBQXhCLFFBQUE7Y0FBQSxPQUFBQSxRQUFBLENBQUFJLE1BQUEsV0FFTTtnQkFDTEMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2RDLFNBQVMsRUFBRS9CLHVCQUF1QjtnQkFDbENnQyxLQUFLLEVBQUVQLFFBQUEsQ0FBQXdCLEVBQUEsWUFBaUJDLEtBQUssR0FBR3pCLFFBQUEsQ0FBQXdCLEVBQUEsQ0FBTUUsT0FBTyxHQUFHLGVBQWU7Z0JBQy9EbEIsSUFBSSxFQUFFO2tCQUNKQyxXQUFXLEVBQUU7Z0JBQ2Y7Y0FDRixDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFULFFBQUEsQ0FBQTJCLElBQUE7VUFBQTtRQUFBLEdBQUFsQyxPQUFBO01BQUEsQ0FFSjtNQUFBLFNBekNETCxPQUFPQSxDQUFBO1FBQUEsT0FBQUMsUUFBQSxDQUFBdUMsS0FBQSxPQUFBQyxTQUFBO01BQUE7TUFBQSxPQUFQekMsT0FBTztJQUFBO0VBMENULENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ import { getBasemapCommand } from './basemap-command';
5
+ import { getViewModeCommand } from './view-mode-command';
6
+ import { getMapBoundaryCommand } from './boundary-command';
7
+ import { getAddLayerCommand } from './layer-creation-command';
8
+ import { getUpdateLayerColorCommand } from './layer-style-command';
9
+ import { getLoadDataCommand } from './load-data-command';
10
+ import { getSaveDataCommand } from './save-data-command';
11
+ import { getTableCommand } from './table-command';
12
+ import { getAddColumnCommand } from './add-column-command';
13
+ import { getAddTimeFilterCommand } from './time-filter-command';
14
+ import { getToggleTimeFilterCommand } from './toggle-time-filter-command';
15
+ import { getSplitViewCommand } from './split-view-command';
16
+ import { getDatasetContextCommand } from './dataset-context-command';
17
+
18
+ /**
19
+ * Owner string under which all kepler-ai commands are registered in the
20
+ * room-store command registry. Used by `registerCommandsForOwner` /
21
+ * `unregisterCommandsForOwner` in the host's store wiring.
22
+ */
23
+ export var KEPLER_COMMAND_OWNER = 'kepler-ai';
24
+
25
+ /**
26
+ * Build the kepler-gl map-mutation commands for a given `KeplerContext`.
27
+ * Returns a map keyed by command id (e.g. `map.set-basemap`) so the registry
28
+ * registration is a flat merge.
29
+ */
30
+ export function getKeplerCommands(ctx) {
31
+ var commands = [getBasemapCommand(ctx), getViewModeCommand(ctx), getMapBoundaryCommand(ctx), getAddLayerCommand(ctx), getUpdateLayerColorCommand(ctx), getLoadDataCommand(ctx), getSaveDataCommand(ctx), getTableCommand(ctx), getAddColumnCommand(ctx), getAddTimeFilterCommand(ctx), getToggleTimeFilterCommand(ctx), getSplitViewCommand(ctx), getDatasetContextCommand(ctx)];
32
+ return Object.fromEntries(commands.map(function (c) {
33
+ return [c.id, c];
34
+ }));
35
+ }
36
+ export { getBasemapCommand } from './basemap-command';
37
+ export { getViewModeCommand } from './view-mode-command';
38
+ export { getMapBoundaryCommand } from './boundary-command';
39
+ export { getAddLayerCommand, guessDefaultLayer } from './layer-creation-command';
40
+ export { getUpdateLayerColorCommand } from './layer-style-command';
41
+ export { getLoadDataCommand } from './load-data-command';
42
+ export { getSaveDataCommand } from './save-data-command';
43
+ export { getTableCommand } from './table-command';
44
+ export { getAddColumnCommand } from './add-column-command';
45
+ export { getAddTimeFilterCommand } from './time-filter-command';
46
+ export { getToggleTimeFilterCommand } from './toggle-time-filter-command';
47
+ export { getSplitViewCommand } from './split-view-command';
48
+ export { getDatasetContextCommand } from './dataset-context-command';
49
+ export { toolToCommand, asInputSchema } from './command-wrappers';
50
+ export { datasetNameToTableName, convertArrowRowToObject, arrowTableToObjects, tableToLLMResult, formatResultsForLLM, NUMBER_OF_ROWS_RETURN_TO_LLM, LLM_PREVIEW_MAX_TOTAL_LENGTH, LLM_PREVIEW_MAX_VALUE_LENGTH, getValuesFromDataset, getValuesFromVectorTileLayer, isObjectColumn, isVectorTileLayer, stringifyObjectColumn, restoreObjectColumns, buildAddColumnPayload } from './utils';
51
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRCYXNlbWFwQ29tbWFuZCIsImdldFZpZXdNb2RlQ29tbWFuZCIsImdldE1hcEJvdW5kYXJ5Q29tbWFuZCIsImdldEFkZExheWVyQ29tbWFuZCIsImdldFVwZGF0ZUxheWVyQ29sb3JDb21tYW5kIiwiZ2V0TG9hZERhdGFDb21tYW5kIiwiZ2V0U2F2ZURhdGFDb21tYW5kIiwiZ2V0VGFibGVDb21tYW5kIiwiZ2V0QWRkQ29sdW1uQ29tbWFuZCIsImdldEFkZFRpbWVGaWx0ZXJDb21tYW5kIiwiZ2V0VG9nZ2xlVGltZUZpbHRlckNvbW1hbmQiLCJnZXRTcGxpdFZpZXdDb21tYW5kIiwiZ2V0RGF0YXNldENvbnRleHRDb21tYW5kIiwiS0VQTEVSX0NPTU1BTkRfT1dORVIiLCJnZXRLZXBsZXJDb21tYW5kcyIsImN0eCIsImNvbW1hbmRzIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJtYXAiLCJjIiwiaWQiLCJndWVzc0RlZmF1bHRMYXllciIsInRvb2xUb0NvbW1hbmQiLCJhc0lucHV0U2NoZW1hIiwiZGF0YXNldE5hbWVUb1RhYmxlTmFtZSIsImNvbnZlcnRBcnJvd1Jvd1RvT2JqZWN0IiwiYXJyb3dUYWJsZVRvT2JqZWN0cyIsInRhYmxlVG9MTE1SZXN1bHQiLCJmb3JtYXRSZXN1bHRzRm9yTExNIiwiTlVNQkVSX09GX1JPV1NfUkVUVVJOX1RPX0xMTSIsIkxMTV9QUkVWSUVXX01BWF9UT1RBTF9MRU5HVEgiLCJMTE1fUFJFVklFV19NQVhfVkFMVUVfTEVOR1RIIiwiZ2V0VmFsdWVzRnJvbURhdGFzZXQiLCJnZXRWYWx1ZXNGcm9tVmVjdG9yVGlsZUxheWVyIiwiaXNPYmplY3RDb2x1bW4iLCJpc1ZlY3RvclRpbGVMYXllciIsInN0cmluZ2lmeU9iamVjdENvbHVtbiIsInJlc3RvcmVPYmplY3RDb2x1bW5zIiwiYnVpbGRBZGRDb2x1bW5QYXlsb2FkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB0eXBlIHtSb29tQ29tbWFuZH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7S2VwbGVyQ29udGV4dH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2dldEJhc2VtYXBDb21tYW5kfSBmcm9tICcuL2Jhc2VtYXAtY29tbWFuZCc7XG5pbXBvcnQge2dldFZpZXdNb2RlQ29tbWFuZH0gZnJvbSAnLi92aWV3LW1vZGUtY29tbWFuZCc7XG5pbXBvcnQge2dldE1hcEJvdW5kYXJ5Q29tbWFuZH0gZnJvbSAnLi9ib3VuZGFyeS1jb21tYW5kJztcbmltcG9ydCB7Z2V0QWRkTGF5ZXJDb21tYW5kfSBmcm9tICcuL2xheWVyLWNyZWF0aW9uLWNvbW1hbmQnO1xuaW1wb3J0IHtnZXRVcGRhdGVMYXllckNvbG9yQ29tbWFuZH0gZnJvbSAnLi9sYXllci1zdHlsZS1jb21tYW5kJztcbmltcG9ydCB7Z2V0TG9hZERhdGFDb21tYW5kfSBmcm9tICcuL2xvYWQtZGF0YS1jb21tYW5kJztcbmltcG9ydCB7Z2V0U2F2ZURhdGFDb21tYW5kfSBmcm9tICcuL3NhdmUtZGF0YS1jb21tYW5kJztcbmltcG9ydCB7Z2V0VGFibGVDb21tYW5kfSBmcm9tICcuL3RhYmxlLWNvbW1hbmQnO1xuaW1wb3J0IHtnZXRBZGRDb2x1bW5Db21tYW5kfSBmcm9tICcuL2FkZC1jb2x1bW4tY29tbWFuZCc7XG5pbXBvcnQge2dldEFkZFRpbWVGaWx0ZXJDb21tYW5kfSBmcm9tICcuL3RpbWUtZmlsdGVyLWNvbW1hbmQnO1xuaW1wb3J0IHtnZXRUb2dnbGVUaW1lRmlsdGVyQ29tbWFuZH0gZnJvbSAnLi90b2dnbGUtdGltZS1maWx0ZXItY29tbWFuZCc7XG5pbXBvcnQge2dldFNwbGl0Vmlld0NvbW1hbmR9IGZyb20gJy4vc3BsaXQtdmlldy1jb21tYW5kJztcbmltcG9ydCB7Z2V0RGF0YXNldENvbnRleHRDb21tYW5kfSBmcm9tICcuL2RhdGFzZXQtY29udGV4dC1jb21tYW5kJztcblxuLyoqXG4gKiBPd25lciBzdHJpbmcgdW5kZXIgd2hpY2ggYWxsIGtlcGxlci1haSBjb21tYW5kcyBhcmUgcmVnaXN0ZXJlZCBpbiB0aGVcbiAqIHJvb20tc3RvcmUgY29tbWFuZCByZWdpc3RyeS4gVXNlZCBieSBgcmVnaXN0ZXJDb21tYW5kc0Zvck93bmVyYCAvXG4gKiBgdW5yZWdpc3RlckNvbW1hbmRzRm9yT3duZXJgIGluIHRoZSBob3N0J3Mgc3RvcmUgd2lyaW5nLlxuICovXG5leHBvcnQgY29uc3QgS0VQTEVSX0NPTU1BTkRfT1dORVIgPSAna2VwbGVyLWFpJztcblxuLyoqXG4gKiBCdWlsZCB0aGUga2VwbGVyLWdsIG1hcC1tdXRhdGlvbiBjb21tYW5kcyBmb3IgYSBnaXZlbiBgS2VwbGVyQ29udGV4dGAuXG4gKiBSZXR1cm5zIGEgbWFwIGtleWVkIGJ5IGNvbW1hbmQgaWQgKGUuZy4gYG1hcC5zZXQtYmFzZW1hcGApIHNvIHRoZSByZWdpc3RyeVxuICogcmVnaXN0cmF0aW9uIGlzIGEgZmxhdCBtZXJnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtlcGxlckNvbW1hbmRzKGN0eDogS2VwbGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIFJvb21Db21tYW5kPiB7XG4gIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgIGdldEJhc2VtYXBDb21tYW5kKGN0eCksXG4gICAgZ2V0Vmlld01vZGVDb21tYW5kKGN0eCksXG4gICAgZ2V0TWFwQm91bmRhcnlDb21tYW5kKGN0eCksXG4gICAgZ2V0QWRkTGF5ZXJDb21tYW5kKGN0eCksXG4gICAgZ2V0VXBkYXRlTGF5ZXJDb2xvckNvbW1hbmQoY3R4KSxcbiAgICBnZXRMb2FkRGF0YUNvbW1hbmQoY3R4KSxcbiAgICBnZXRTYXZlRGF0YUNvbW1hbmQoY3R4KSxcbiAgICBnZXRUYWJsZUNvbW1hbmQoY3R4KSxcbiAgICBnZXRBZGRDb2x1bW5Db21tYW5kKGN0eCksXG4gICAgZ2V0QWRkVGltZUZpbHRlckNvbW1hbmQoY3R4KSxcbiAgICBnZXRUb2dnbGVUaW1lRmlsdGVyQ29tbWFuZChjdHgpLFxuICAgIGdldFNwbGl0Vmlld0NvbW1hbmQoY3R4KSxcbiAgICBnZXREYXRhc2V0Q29udGV4dENvbW1hbmQoY3R4KVxuICBdO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGNvbW1hbmRzLm1hcChjID0+IFtjLmlkLCBjXSkpO1xufVxuXG5leHBvcnQge2dldEJhc2VtYXBDb21tYW5kfSBmcm9tICcuL2Jhc2VtYXAtY29tbWFuZCc7XG5leHBvcnQge2dldFZpZXdNb2RlQ29tbWFuZH0gZnJvbSAnLi92aWV3LW1vZGUtY29tbWFuZCc7XG5leHBvcnQge2dldE1hcEJvdW5kYXJ5Q29tbWFuZH0gZnJvbSAnLi9ib3VuZGFyeS1jb21tYW5kJztcbmV4cG9ydCB7Z2V0QWRkTGF5ZXJDb21tYW5kLCBndWVzc0RlZmF1bHRMYXllcn0gZnJvbSAnLi9sYXllci1jcmVhdGlvbi1jb21tYW5kJztcbmV4cG9ydCB7Z2V0VXBkYXRlTGF5ZXJDb2xvckNvbW1hbmR9IGZyb20gJy4vbGF5ZXItc3R5bGUtY29tbWFuZCc7XG5leHBvcnQge2dldExvYWREYXRhQ29tbWFuZH0gZnJvbSAnLi9sb2FkLWRhdGEtY29tbWFuZCc7XG5leHBvcnQge2dldFNhdmVEYXRhQ29tbWFuZH0gZnJvbSAnLi9zYXZlLWRhdGEtY29tbWFuZCc7XG5leHBvcnQge2dldFRhYmxlQ29tbWFuZH0gZnJvbSAnLi90YWJsZS1jb21tYW5kJztcbmV4cG9ydCB7Z2V0QWRkQ29sdW1uQ29tbWFuZH0gZnJvbSAnLi9hZGQtY29sdW1uLWNvbW1hbmQnO1xuZXhwb3J0IHtnZXRBZGRUaW1lRmlsdGVyQ29tbWFuZH0gZnJvbSAnLi90aW1lLWZpbHRlci1jb21tYW5kJztcbmV4cG9ydCB7Z2V0VG9nZ2xlVGltZUZpbHRlckNvbW1hbmR9IGZyb20gJy4vdG9nZ2xlLXRpbWUtZmlsdGVyLWNvbW1hbmQnO1xuZXhwb3J0IHtnZXRTcGxpdFZpZXdDb21tYW5kfSBmcm9tICcuL3NwbGl0LXZpZXctY29tbWFuZCc7XG5leHBvcnQge2dldERhdGFzZXRDb250ZXh0Q29tbWFuZH0gZnJvbSAnLi9kYXRhc2V0LWNvbnRleHQtY29tbWFuZCc7XG5leHBvcnQge3Rvb2xUb0NvbW1hbmQsIGFzSW5wdXRTY2hlbWF9IGZyb20gJy4vY29tbWFuZC13cmFwcGVycyc7XG5leHBvcnQgdHlwZSB7QW55VG9vbCwgQ29tbWFuZE1ldGF9IGZyb20gJy4vY29tbWFuZC13cmFwcGVycyc7XG5leHBvcnQgdHlwZSB7XG4gIEtlcGxlckNvbnRleHQsXG4gIEtlcGxlclN0YXRlQWNjZXNzb3JzLFxuICBWaXNTdGF0ZSxcbiAgUm9vbUNvbW1hbmRSZXN1bHQsXG4gIFJvb21Db21tYW5kRXhlY3V0ZU91dHB1dCxcbiAgVG9vbERlc2NyaXB0b3Jcbn0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQge1xuICBkYXRhc2V0TmFtZVRvVGFibGVOYW1lLFxuICBjb252ZXJ0QXJyb3dSb3dUb09iamVjdCxcbiAgYXJyb3dUYWJsZVRvT2JqZWN0cyxcbiAgdGFibGVUb0xMTVJlc3VsdCxcbiAgZm9ybWF0UmVzdWx0c0ZvckxMTSxcbiAgTlVNQkVSX09GX1JPV1NfUkVUVVJOX1RPX0xMTSxcbiAgTExNX1BSRVZJRVdfTUFYX1RPVEFMX0xFTkdUSCxcbiAgTExNX1BSRVZJRVdfTUFYX1ZBTFVFX0xFTkdUSCxcbiAgZ2V0VmFsdWVzRnJvbURhdGFzZXQsXG4gIGdldFZhbHVlc0Zyb21WZWN0b3JUaWxlTGF5ZXIsXG4gIGlzT2JqZWN0Q29sdW1uLFxuICBpc1ZlY3RvclRpbGVMYXllcixcbiAgc3RyaW5naWZ5T2JqZWN0Q29sdW1uLFxuICByZXN0b3JlT2JqZWN0Q29sdW1ucyxcbiAgYnVpbGRBZGRDb2x1bW5QYXlsb2FkXG59IGZyb20gJy4vdXRpbHMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUlBLFNBQVFBLGlCQUFpQixR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