@darkiceinteractive/mcp-conductor 1.1.0 → 3.0.0-beta.1

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 (293) hide show
  1. package/README.md +35 -5
  2. package/dist/bin/cli.d.ts +20 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +260 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/bridge/http-server.d.ts +65 -1
  7. package/dist/bridge/http-server.d.ts.map +1 -1
  8. package/dist/bridge/http-server.js +192 -7
  9. package/dist/bridge/http-server.js.map +1 -1
  10. package/dist/bridge/index.d.ts +1 -0
  11. package/dist/bridge/index.d.ts.map +1 -1
  12. package/dist/bridge/index.js +1 -0
  13. package/dist/bridge/index.js.map +1 -1
  14. package/dist/bridge/pool.d.ts +95 -0
  15. package/dist/bridge/pool.d.ts.map +1 -0
  16. package/dist/bridge/pool.js +384 -0
  17. package/dist/bridge/pool.js.map +1 -0
  18. package/dist/bridge/session-registry.d.ts +64 -0
  19. package/dist/bridge/session-registry.d.ts.map +1 -0
  20. package/dist/bridge/session-registry.js +124 -0
  21. package/dist/bridge/session-registry.js.map +1 -0
  22. package/dist/cache/cache.d.ts +43 -0
  23. package/dist/cache/cache.d.ts.map +1 -0
  24. package/dist/cache/cache.js +167 -0
  25. package/dist/cache/cache.js.map +1 -0
  26. package/dist/cache/delta.d.ts +32 -0
  27. package/dist/cache/delta.d.ts.map +1 -0
  28. package/dist/cache/delta.js +131 -0
  29. package/dist/cache/delta.js.map +1 -0
  30. package/dist/cache/disk.d.ts +65 -0
  31. package/dist/cache/disk.d.ts.map +1 -0
  32. package/dist/cache/disk.js +238 -0
  33. package/dist/cache/disk.js.map +1 -0
  34. package/dist/cache/index.d.ts +53 -0
  35. package/dist/cache/index.d.ts.map +1 -0
  36. package/dist/cache/index.js +12 -0
  37. package/dist/cache/index.js.map +1 -0
  38. package/dist/cache/key.d.ts +44 -0
  39. package/dist/cache/key.d.ts.map +1 -0
  40. package/dist/cache/key.js +83 -0
  41. package/dist/cache/key.js.map +1 -0
  42. package/dist/cache/lru.d.ts +57 -0
  43. package/dist/cache/lru.d.ts.map +1 -0
  44. package/dist/cache/lru.js +112 -0
  45. package/dist/cache/lru.js.map +1 -0
  46. package/dist/cache/policy.d.ts +34 -0
  47. package/dist/cache/policy.d.ts.map +1 -0
  48. package/dist/cache/policy.js +95 -0
  49. package/dist/cache/policy.js.map +1 -0
  50. package/dist/cli/commands/doctor.d.ts +33 -0
  51. package/dist/cli/commands/doctor.d.ts.map +1 -0
  52. package/dist/cli/commands/doctor.js +135 -0
  53. package/dist/cli/commands/doctor.js.map +1 -0
  54. package/dist/cli/commands/export-servers.d.ts +22 -0
  55. package/dist/cli/commands/export-servers.d.ts.map +1 -0
  56. package/dist/cli/commands/export-servers.js +45 -0
  57. package/dist/cli/commands/export-servers.js.map +1 -0
  58. package/dist/cli/commands/import-servers.d.ts +57 -0
  59. package/dist/cli/commands/import-servers.d.ts.map +1 -0
  60. package/dist/cli/commands/import-servers.js +137 -0
  61. package/dist/cli/commands/import-servers.js.map +1 -0
  62. package/dist/cli/commands/routing.d.ts +34 -0
  63. package/dist/cli/commands/routing.d.ts.map +1 -0
  64. package/dist/cli/commands/routing.js +60 -0
  65. package/dist/cli/commands/routing.js.map +1 -0
  66. package/dist/cli/commands/test-server.d.ts +34 -0
  67. package/dist/cli/commands/test-server.d.ts.map +1 -0
  68. package/dist/cli/commands/test-server.js +86 -0
  69. package/dist/cli/commands/test-server.js.map +1 -0
  70. package/dist/cli/daemon.d.ts +60 -0
  71. package/dist/cli/daemon.d.ts.map +1 -0
  72. package/dist/cli/daemon.js +244 -0
  73. package/dist/cli/daemon.js.map +1 -0
  74. package/dist/cli/replay.d.ts +16 -0
  75. package/dist/cli/replay.d.ts.map +1 -0
  76. package/dist/cli/replay.js +89 -0
  77. package/dist/cli/replay.js.map +1 -0
  78. package/dist/cli/wizard/setup.d.ts +12 -0
  79. package/dist/cli/wizard/setup.d.ts.map +1 -0
  80. package/dist/cli/wizard/setup.js +71 -0
  81. package/dist/cli/wizard/setup.js.map +1 -0
  82. package/dist/config/defaults.d.ts +10 -0
  83. package/dist/config/defaults.d.ts.map +1 -1
  84. package/dist/config/defaults.js +14 -1
  85. package/dist/config/defaults.js.map +1 -1
  86. package/dist/config/schema.d.ts +34 -0
  87. package/dist/config/schema.d.ts.map +1 -1
  88. package/dist/daemon/client.d.ts +97 -0
  89. package/dist/daemon/client.d.ts.map +1 -0
  90. package/dist/daemon/client.js +279 -0
  91. package/dist/daemon/client.js.map +1 -0
  92. package/dist/daemon/discovery.d.ts +50 -0
  93. package/dist/daemon/discovery.d.ts.map +1 -0
  94. package/dist/daemon/discovery.js +104 -0
  95. package/dist/daemon/discovery.js.map +1 -0
  96. package/dist/daemon/index.d.ts +16 -0
  97. package/dist/daemon/index.d.ts.map +1 -0
  98. package/dist/daemon/index.js +11 -0
  99. package/dist/daemon/index.js.map +1 -0
  100. package/dist/daemon/sandbox-api.d.ts +45 -0
  101. package/dist/daemon/sandbox-api.d.ts.map +1 -0
  102. package/dist/daemon/sandbox-api.js +74 -0
  103. package/dist/daemon/sandbox-api.js.map +1 -0
  104. package/dist/daemon/server.d.ts +65 -0
  105. package/dist/daemon/server.d.ts.map +1 -0
  106. package/dist/daemon/server.js +351 -0
  107. package/dist/daemon/server.js.map +1 -0
  108. package/dist/daemon/shared-kv.d.ts +81 -0
  109. package/dist/daemon/shared-kv.d.ts.map +1 -0
  110. package/dist/daemon/shared-kv.js +215 -0
  111. package/dist/daemon/shared-kv.js.map +1 -0
  112. package/dist/daemon/shared-lock.d.ts +71 -0
  113. package/dist/daemon/shared-lock.d.ts.map +1 -0
  114. package/dist/daemon/shared-lock.js +119 -0
  115. package/dist/daemon/shared-lock.js.map +1 -0
  116. package/dist/hub/mcp-hub.d.ts +23 -0
  117. package/dist/hub/mcp-hub.d.ts.map +1 -1
  118. package/dist/hub/mcp-hub.js +34 -1
  119. package/dist/hub/mcp-hub.js.map +1 -1
  120. package/dist/index.js +19 -0
  121. package/dist/index.js.map +1 -1
  122. package/dist/observability/anomaly.d.ts +67 -0
  123. package/dist/observability/anomaly.d.ts.map +1 -0
  124. package/dist/observability/anomaly.js +141 -0
  125. package/dist/observability/anomaly.js.map +1 -0
  126. package/dist/observability/cost-predictor.d.ts +49 -0
  127. package/dist/observability/cost-predictor.d.ts.map +1 -0
  128. package/dist/observability/cost-predictor.js +145 -0
  129. package/dist/observability/cost-predictor.js.map +1 -0
  130. package/dist/observability/hot-path.d.ts +49 -0
  131. package/dist/observability/hot-path.d.ts.map +1 -0
  132. package/dist/observability/hot-path.js +125 -0
  133. package/dist/observability/hot-path.js.map +1 -0
  134. package/dist/observability/index.d.ts +10 -0
  135. package/dist/observability/index.d.ts.map +1 -0
  136. package/dist/observability/index.js +10 -0
  137. package/dist/observability/index.js.map +1 -0
  138. package/dist/observability/replay.d.ts +104 -0
  139. package/dist/observability/replay.d.ts.map +1 -0
  140. package/dist/observability/replay.js +239 -0
  141. package/dist/observability/replay.js.map +1 -0
  142. package/dist/registry/built-in-recommendations.d.ts +54 -0
  143. package/dist/registry/built-in-recommendations.d.ts.map +1 -0
  144. package/dist/registry/built-in-recommendations.js +65 -0
  145. package/dist/registry/built-in-recommendations.js.map +1 -0
  146. package/dist/registry/events.d.ts +26 -0
  147. package/dist/registry/events.d.ts.map +1 -0
  148. package/dist/registry/events.js +22 -0
  149. package/dist/registry/events.js.map +1 -0
  150. package/dist/registry/index.d.ts +159 -0
  151. package/dist/registry/index.d.ts.map +1 -0
  152. package/dist/registry/index.js +12 -0
  153. package/dist/registry/index.js.map +1 -0
  154. package/dist/registry/registry.d.ts +87 -0
  155. package/dist/registry/registry.d.ts.map +1 -0
  156. package/dist/registry/registry.js +294 -0
  157. package/dist/registry/registry.js.map +1 -0
  158. package/dist/registry/snapshot.d.ts +42 -0
  159. package/dist/registry/snapshot.d.ts.map +1 -0
  160. package/dist/registry/snapshot.js +71 -0
  161. package/dist/registry/snapshot.js.map +1 -0
  162. package/dist/registry/typegen.d.ts +48 -0
  163. package/dist/registry/typegen.d.ts.map +1 -0
  164. package/dist/registry/typegen.js +200 -0
  165. package/dist/registry/typegen.js.map +1 -0
  166. package/dist/registry/validator.d.ts +23 -0
  167. package/dist/registry/validator.d.ts.map +1 -0
  168. package/dist/registry/validator.js +50 -0
  169. package/dist/registry/validator.js.map +1 -0
  170. package/dist/reliability/breaker.d.ts +57 -0
  171. package/dist/reliability/breaker.d.ts.map +1 -0
  172. package/dist/reliability/breaker.js +130 -0
  173. package/dist/reliability/breaker.js.map +1 -0
  174. package/dist/reliability/errors.d.ts +78 -0
  175. package/dist/reliability/errors.d.ts.map +1 -0
  176. package/dist/reliability/errors.js +160 -0
  177. package/dist/reliability/errors.js.map +1 -0
  178. package/dist/reliability/gateway.d.ts +88 -0
  179. package/dist/reliability/gateway.d.ts.map +1 -0
  180. package/dist/reliability/gateway.js +180 -0
  181. package/dist/reliability/gateway.js.map +1 -0
  182. package/dist/reliability/index.d.ts +20 -0
  183. package/dist/reliability/index.d.ts.map +1 -0
  184. package/dist/reliability/index.js +16 -0
  185. package/dist/reliability/index.js.map +1 -0
  186. package/dist/reliability/profile.d.ts +49 -0
  187. package/dist/reliability/profile.d.ts.map +1 -0
  188. package/dist/reliability/profile.js +58 -0
  189. package/dist/reliability/profile.js.map +1 -0
  190. package/dist/reliability/retry.d.ts +39 -0
  191. package/dist/reliability/retry.d.ts.map +1 -0
  192. package/dist/reliability/retry.js +51 -0
  193. package/dist/reliability/retry.js.map +1 -0
  194. package/dist/reliability/timeout.d.ts +34 -0
  195. package/dist/reliability/timeout.d.ts.map +1 -0
  196. package/dist/reliability/timeout.js +53 -0
  197. package/dist/reliability/timeout.js.map +1 -0
  198. package/dist/runtime/executor.d.ts +12 -0
  199. package/dist/runtime/executor.d.ts.map +1 -1
  200. package/dist/runtime/executor.js +148 -16
  201. package/dist/runtime/executor.js.map +1 -1
  202. package/dist/runtime/findtool/embed.d.ts +28 -0
  203. package/dist/runtime/findtool/embed.d.ts.map +1 -0
  204. package/dist/runtime/findtool/embed.js +85 -0
  205. package/dist/runtime/findtool/embed.js.map +1 -0
  206. package/dist/runtime/findtool/index.d.ts +52 -0
  207. package/dist/runtime/findtool/index.d.ts.map +1 -0
  208. package/dist/runtime/findtool/index.js +78 -0
  209. package/dist/runtime/findtool/index.js.map +1 -0
  210. package/dist/runtime/findtool/vector-index.d.ts +53 -0
  211. package/dist/runtime/findtool/vector-index.d.ts.map +1 -0
  212. package/dist/runtime/findtool/vector-index.js +71 -0
  213. package/dist/runtime/findtool/vector-index.js.map +1 -0
  214. package/dist/runtime/helpers/budget.d.ts +27 -0
  215. package/dist/runtime/helpers/budget.d.ts.map +1 -0
  216. package/dist/runtime/helpers/budget.js +103 -0
  217. package/dist/runtime/helpers/budget.js.map +1 -0
  218. package/dist/runtime/helpers/compact.d.ts +32 -0
  219. package/dist/runtime/helpers/compact.d.ts.map +1 -0
  220. package/dist/runtime/helpers/compact.js +93 -0
  221. package/dist/runtime/helpers/compact.js.map +1 -0
  222. package/dist/runtime/helpers/delta.d.ts +45 -0
  223. package/dist/runtime/helpers/delta.d.ts.map +1 -0
  224. package/dist/runtime/helpers/delta.js +116 -0
  225. package/dist/runtime/helpers/delta.js.map +1 -0
  226. package/dist/runtime/helpers/index.d.ts +16 -0
  227. package/dist/runtime/helpers/index.d.ts.map +1 -0
  228. package/dist/runtime/helpers/index.js +13 -0
  229. package/dist/runtime/helpers/index.js.map +1 -0
  230. package/dist/runtime/helpers/summarize.d.ts +24 -0
  231. package/dist/runtime/helpers/summarize.d.ts.map +1 -0
  232. package/dist/runtime/helpers/summarize.js +124 -0
  233. package/dist/runtime/helpers/summarize.js.map +1 -0
  234. package/dist/runtime/helpers/worker-preload.d.ts +25 -0
  235. package/dist/runtime/helpers/worker-preload.d.ts.map +1 -0
  236. package/dist/runtime/helpers/worker-preload.js +223 -0
  237. package/dist/runtime/helpers/worker-preload.js.map +1 -0
  238. package/dist/runtime/index.d.ts +1 -0
  239. package/dist/runtime/index.d.ts.map +1 -1
  240. package/dist/runtime/index.js +1 -0
  241. package/dist/runtime/index.js.map +1 -1
  242. package/dist/runtime/pool/index.d.ts +11 -0
  243. package/dist/runtime/pool/index.d.ts.map +1 -0
  244. package/dist/runtime/pool/index.js +8 -0
  245. package/dist/runtime/pool/index.js.map +1 -0
  246. package/dist/runtime/pool/recycle.d.ts +44 -0
  247. package/dist/runtime/pool/recycle.d.ts.map +1 -0
  248. package/dist/runtime/pool/recycle.js +50 -0
  249. package/dist/runtime/pool/recycle.js.map +1 -0
  250. package/dist/runtime/pool/worker-pool.d.ts +77 -0
  251. package/dist/runtime/pool/worker-pool.d.ts.map +1 -0
  252. package/dist/runtime/pool/worker-pool.js +216 -0
  253. package/dist/runtime/pool/worker-pool.js.map +1 -0
  254. package/dist/runtime/pool/worker.d.ts +80 -0
  255. package/dist/runtime/pool/worker.d.ts.map +1 -0
  256. package/dist/runtime/pool/worker.js +324 -0
  257. package/dist/runtime/pool/worker.js.map +1 -0
  258. package/dist/server/mcp-server.d.ts +6 -0
  259. package/dist/server/mcp-server.d.ts.map +1 -1
  260. package/dist/server/mcp-server.js +610 -45
  261. package/dist/server/mcp-server.js.map +1 -1
  262. package/dist/server/passthrough-registrar.d.ts +73 -0
  263. package/dist/server/passthrough-registrar.d.ts.map +1 -0
  264. package/dist/server/passthrough-registrar.js +110 -0
  265. package/dist/server/passthrough-registrar.js.map +1 -0
  266. package/dist/skills/skills-engine.d.ts +9 -1
  267. package/dist/skills/skills-engine.d.ts.map +1 -1
  268. package/dist/skills/skills-engine.js +20 -3
  269. package/dist/skills/skills-engine.js.map +1 -1
  270. package/dist/utils/index.d.ts +3 -0
  271. package/dist/utils/index.d.ts.map +1 -1
  272. package/dist/utils/index.js +3 -0
  273. package/dist/utils/index.js.map +1 -1
  274. package/dist/utils/logger.d.ts.map +1 -1
  275. package/dist/utils/logger.js +5 -1
  276. package/dist/utils/logger.js.map +1 -1
  277. package/dist/utils/orphan-watch.d.ts +34 -0
  278. package/dist/utils/orphan-watch.d.ts.map +1 -0
  279. package/dist/utils/orphan-watch.js +54 -0
  280. package/dist/utils/orphan-watch.js.map +1 -0
  281. package/dist/utils/redact.d.ts +15 -0
  282. package/dist/utils/redact.d.ts.map +1 -0
  283. package/dist/utils/redact.js +48 -0
  284. package/dist/utils/redact.js.map +1 -0
  285. package/dist/utils/tokenize.d.ts +55 -0
  286. package/dist/utils/tokenize.d.ts.map +1 -0
  287. package/dist/utils/tokenize.js +205 -0
  288. package/dist/utils/tokenize.js.map +1 -0
  289. package/dist/version.d.ts +3 -3
  290. package/dist/version.d.ts.map +1 -1
  291. package/dist/version.js +3 -3
  292. package/dist/version.js.map +1 -1
  293. package/package.json +13 -3
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Worker preload — inline sandbox helper source
3
+ *
4
+ * Generates the JavaScript source string that is written to a temp file
5
+ * and passed via WorkerOptions.preloadHelpers[] so the Deno worker evaluates
6
+ * it before any user code runs. Injects compact/summarize/delta/budget/findTool
7
+ * onto the mcp global.
8
+ *
9
+ * @module runtime/helpers/worker-preload
10
+ */
11
+ /**
12
+ * Build a self-contained JS source string for the Deno worker preload.
13
+ * The string is plain JavaScript — no TypeScript-only syntax — because
14
+ * it runs inside the Deno subprocess at runtime.
15
+ */
16
+ export function buildHelperPreloadSource(options = {}) {
17
+ const toolsJson = JSON.stringify(options.tools ?? []);
18
+ const compactSrc = `
19
+ (function injectCompact() {
20
+ function buildSelectorTree(fields) {
21
+ var tree = {};
22
+ for (var i = 0; i < fields.length; i++) {
23
+ var parts = fields[i].split('.');
24
+ var node = tree;
25
+ for (var j = 0; j < parts.length; j++) {
26
+ if (j === parts.length - 1) { node[parts[j]] = true; }
27
+ else { if (typeof node[parts[j]] !== 'object') node[parts[j]] = {}; node = node[parts[j]]; }
28
+ }
29
+ }
30
+ return tree;
31
+ }
32
+ function trimValue(value, selector, opts, depth) {
33
+ var maxDepth = opts.maxDepth !== undefined ? opts.maxDepth : Infinity;
34
+ if (depth > maxDepth) return (typeof value === 'object' && value !== null) ? '[truncated]' : value;
35
+ if (typeof value === 'string') {
36
+ var max = opts.maxStringLength;
37
+ return (max !== undefined && value.length > max) ? value.slice(0, max) + '…' : value;
38
+ }
39
+ if (Array.isArray(value)) {
40
+ var arr = opts.maxItems !== undefined ? value.slice(0, opts.maxItems) : value;
41
+ return arr.map(function(item) { return trimValue(item, selector, opts, depth + 1); });
42
+ }
43
+ if (typeof value === 'object' && value !== null) {
44
+ var result = {};
45
+ if (selector && Object.keys(selector).length > 0) {
46
+ var keys = Object.keys(selector);
47
+ for (var k = 0; k < keys.length; k++) {
48
+ var key = keys[k];
49
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
50
+ var cs = selector[key];
51
+ result[key] = trimValue(value[key], cs === true ? null : cs, opts, depth + 1);
52
+ }
53
+ }
54
+ } else {
55
+ var objKeys = Object.keys(value);
56
+ for (var ok = 0; ok < objKeys.length; ok++) result[objKeys[ok]] = trimValue(value[objKeys[ok]], null, opts, depth + 1);
57
+ }
58
+ return result;
59
+ }
60
+ return value;
61
+ }
62
+ globalThis.__mcp_compact = function compact(data, options) {
63
+ options = options || {};
64
+ var selector = (options.fields && options.fields.length > 0) ? buildSelectorTree(options.fields) : null;
65
+ return trimValue(data, selector, options, 0);
66
+ };
67
+ })();
68
+ `;
69
+ const summarizeSrc = `
70
+ (function injectSummarize() {
71
+ var CPT = 4;
72
+ function clip(text, max) { return text.length <= max ? text : text.slice(0, Math.max(0, max - 1)) + '…'; }
73
+ globalThis.__mcp_summarize = function summarize(data, options) {
74
+ var maxChars = options.maxTokens * CPT;
75
+ var style = options.style || 'list';
76
+ if (style === 'json') { try { return clip(JSON.stringify(data, null, 2), maxChars); } catch(e) { return clip(String(data), maxChars); } }
77
+ if (style === 'paragraph') {
78
+ var text;
79
+ if (typeof data === 'string') { text = data; }
80
+ else if (Array.isArray(data)) {
81
+ var prev = data.slice(0,3).map(function(x){return typeof x==='object'?JSON.stringify(x).slice(0,60):String(x).slice(0,60);}).join(', ');
82
+ text = data.length + ' item' + (data.length!==1?'s':'') + ': ' + prev + (data.length>3?'...':'');
83
+ } else if (typeof data === 'object' && data !== null) {
84
+ var kk = Object.keys(data);
85
+ text = 'Object with ' + kk.length + ' field' + (kk.length!==1?'s':'') + ': ' + kk.slice(0,5).map(function(k){return k+': '+JSON.stringify(data[k]).slice(0,30);}).join('; ');
86
+ } else { text = String(data); }
87
+ return clip(text, maxChars);
88
+ }
89
+ var lines = [];
90
+ if (Array.isArray(data)) {
91
+ for (var i = 0; i < data.length; i++) {
92
+ var item = data[i];
93
+ if (typeof item === 'object' && item !== null) {
94
+ lines.push('• ' + Object.entries(item).slice(0,4).map(function(e){return e[0]+'='+JSON.stringify(e[1]);}).join(', '));
95
+ } else { lines.push('• ' + String(item)); }
96
+ }
97
+ } else if (typeof data === 'object' && data !== null) {
98
+ Object.entries(data).forEach(function(e){lines.push(e[0]+': '+(typeof e[1]==='object'?JSON.stringify(e[1]):String(e[1])));});
99
+ } else { lines.push(String(data)); }
100
+ var result = '';
101
+ for (var li = 0; li < lines.length; li++) {
102
+ var candidate = result ? result + '\n' + lines[li] : lines[li];
103
+ if (candidate.length > maxChars) { var rem = maxChars - result.length - 1; if (rem > 4) result += (result?'\n':'')+clip(lines[li],rem); break; }
104
+ result = candidate;
105
+ }
106
+ return result || clip(String(data), maxChars);
107
+ };
108
+ })();
109
+ `;
110
+ const deltaSrc = `
111
+ (function injectDelta() {
112
+ var __snapshots = new Map();
113
+ globalThis.__mcp_delta = async function delta(server, tool, args, current) {
114
+ var key = server + '::' + tool + '::' + JSON.stringify(args);
115
+ var previous = __snapshots.get(key);
116
+ __snapshots.set(key, current);
117
+ if (previous === undefined) return { changed: true, delta: current };
118
+ if (Array.isArray(current) && Array.isArray(previous)) {
119
+ var changed = JSON.stringify(previous) !== JSON.stringify(current);
120
+ return { changed: changed, delta: changed ? current : [], added: Math.max(0,current.length-previous.length), removed: Math.max(0,previous.length-current.length) };
121
+ }
122
+ if (typeof current === 'object' && current !== null && !Array.isArray(current)) {
123
+ var d = {}; var ck = [];
124
+ var allKeys = new Set(Object.keys(previous||{}).concat(Object.keys(current)));
125
+ allKeys.forEach(function(k){ if(JSON.stringify((previous||{})[k])!==JSON.stringify(current[k])){ d[k]=current[k]; ck.push(k); } });
126
+ return { changed: ck.length > 0, delta: ck.length > 0 ? d : {}, changedKeys: ck };
127
+ }
128
+ var prim_changed = JSON.stringify(previous) !== JSON.stringify(current);
129
+ return { changed: prim_changed, delta: prim_changed ? current : undefined };
130
+ };
131
+ })();
132
+ `;
133
+ const budgetSrc = `
134
+ (function injectBudget() {
135
+ var CPT = 4;
136
+ function est(data) { try { return Math.ceil((JSON.stringify(data)||String(data)).length/CPT); } catch(e) { return Math.ceil(String(data).length/CPT); } }
137
+ function BudgetExceededError(estimated, max) {
138
+ this.name = 'BudgetExceededError';
139
+ this.message = 'Result exceeds token budget: '+estimated+' > '+max;
140
+ this.estimatedTokens = estimated;
141
+ this.maxTokens = max;
142
+ }
143
+ BudgetExceededError.prototype = Object.create(Error.prototype);
144
+ function tryTrim(data, maxTokens) {
145
+ if (Array.isArray(data)) {
146
+ var mxList = [100, 50, 20, 10, 5, 1];
147
+ for (var mi = 0; mi < mxList.length; mi++) {
148
+ var t = globalThis.__mcp_compact(data, {maxItems: mxList[mi], maxStringLength: 200});
149
+ if (est(t) <= maxTokens) return t;
150
+ }
151
+ }
152
+ if (typeof data === 'object' && data !== null) {
153
+ var mdList = [5, 3, 2, 1];
154
+ for (var md = 0; md < mdList.length; md++) {
155
+ var td = globalThis.__mcp_compact(data, {maxDepth: mdList[md], maxItems: 20, maxStringLength: 200});
156
+ if (est(td) <= maxTokens) return td;
157
+ }
158
+ }
159
+ var ls = globalThis.__mcp_summarize(data, {maxTokens: maxTokens, style: 'list'});
160
+ if (est(ls) <= maxTokens) return ls;
161
+ var ps = globalThis.__mcp_summarize(data, {maxTokens: maxTokens, style: 'paragraph'});
162
+ if (est(ps) <= maxTokens) return ps;
163
+ var raw = typeof data === 'string' ? data : JSON.stringify(data) || String(data);
164
+ var cl = raw.slice(0, maxTokens * CPT - 1) + '…';
165
+ if (est(cl) <= maxTokens) return cl;
166
+ throw new BudgetExceededError(est(data), maxTokens);
167
+ }
168
+ globalThis.__mcp_budget = async function budget(maxTokens, fn) {
169
+ var result = await fn();
170
+ return est(result) <= maxTokens ? result : tryTrim(result, maxTokens);
171
+ };
172
+ globalThis.BudgetExceededError = BudgetExceededError;
173
+ })();
174
+ `;
175
+ const findToolSrc = `
176
+ (function injectFindTool() {
177
+ var EMBED_DIM = 256;
178
+ function tokenise(text) { return text.toLowerCase().replace(/[^a-z0-9_.-]/g,' ').split(/\\s+/).filter(Boolean); }
179
+ function hashBucket(s) { var h=5381; for(var i=0;i<s.length;i++){h=((h<<5)+h)^s.charCodeAt(i);h=h>>>0;} return h%EMBED_DIM; }
180
+ function embed(text) {
181
+ var vec = new Float32Array(EMBED_DIM);
182
+ var tokens = tokenise(text);
183
+ if (!tokens.length) return vec;
184
+ for (var i=0;i<tokens.length;i++) vec[hashBucket(tokens[i])]+=1;
185
+ for (var j=0;j<tokens.length-1;j++) vec[hashBucket(tokens[j]+'_'+tokens[j+1])]+=0.5;
186
+ var norm=0; for(var k=0;k<EMBED_DIM;k++) norm+=vec[k]*vec[k]; norm=Math.sqrt(norm);
187
+ if(norm>0) for(var n=0;n<EMBED_DIM;n++) vec[n]/=norm;
188
+ return vec;
189
+ }
190
+ function cosine(a,b) { var d=0; for(var i=0;i<a.length;i++) d+=a[i]*b[i]; return d; }
191
+ var __toolEntries = ${toolsJson}.map(function(e){return{server:e.server,tool:e.tool,description:e.description,vector:embed(e.tool+'\\n'+e.description)};});
192
+ globalThis.__mcp_findTool = async function findTool(query, options) {
193
+ options = options || {};
194
+ var qv = embed(query);
195
+ var topK = options.topK || 5;
196
+ var filter = options.serverFilter;
197
+ var candidates = filter ? __toolEntries.filter(function(e){return filter.includes(e.server);}) : __toolEntries;
198
+ var scored = candidates.map(function(e){return{server:e.server,tool:e.tool,description:e.description,score:cosine(qv,e.vector)};});
199
+ scored.sort(function(a,b){return b.score-a.score;});
200
+ return scored.slice(0,topK);
201
+ };
202
+ })();
203
+ `;
204
+ const extendMcpSrc = `
205
+ if (typeof mcp !== 'undefined') {
206
+ Object.defineProperty(mcp, 'compact', { value: globalThis.__mcp_compact, writable: false, configurable: true });
207
+ Object.defineProperty(mcp, 'summarize', { value: globalThis.__mcp_summarize, writable: false, configurable: true });
208
+ Object.defineProperty(mcp, 'delta', { value: globalThis.__mcp_delta, writable: false, configurable: true });
209
+ Object.defineProperty(mcp, 'budget', { value: globalThis.__mcp_budget, writable: false, configurable: true });
210
+ Object.defineProperty(mcp, 'findTool', { value: globalThis.__mcp_findTool, writable: false, configurable: true });
211
+ }
212
+ `;
213
+ return [
214
+ '// Phase 5 Sandbox Helpers — auto-injected into Deno worker via preloadHelpers[]',
215
+ compactSrc,
216
+ summarizeSrc,
217
+ deltaSrc,
218
+ budgetSrc,
219
+ findToolSrc,
220
+ extendMcpSrc,
221
+ ].join('\n');
222
+ }
223
+ //# sourceMappingURL=worker-preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-preload.js","sourceRoot":"","sources":["../../../src/runtime/helpers/worker-preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAA0B,EAAE;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDpB,CAAC;IAEA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCtB,CAAC;IAEA,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;IAEA,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCnB,CAAC;IAEA,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;wBAgBE,SAAS;;;;;;;;;;;;CAYhC,CAAC;IAEA,MAAM,YAAY,GAAG;;;;;;;;CAQtB,CAAC;IAEA,OAAO;QACL,kFAAkF;QAClF,UAAU;QACV,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,WAAW;QACX,YAAY;KACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -4,4 +4,5 @@
4
4
  * @module runtime
5
5
  */
6
6
  export * from './executor.js';
7
+ export * from './pool/index.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -4,4 +4,5 @@
4
4
  * @module runtime
5
5
  */
6
6
  export * from './executor.js';
7
+ export * from './pool/index.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Runtime pool — warm Deno worker pool for low-latency code execution.
3
+ * @module runtime/pool
4
+ */
5
+ export { WorkerPool } from './worker-pool.js';
6
+ export type { WorkerPoolOptions, PoolExecuteOptions } from './worker-pool.js';
7
+ export { PooledWorker } from './worker.js';
8
+ export type { WorkerOptions, WorkerJob, WorkerResult, WorkerState } from './worker.js';
9
+ export { evaluateRecycle, isEligible } from './recycle.js';
10
+ export type { RecycleCandidate, RecycleDecision } from './recycle.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/pool/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Runtime pool — warm Deno worker pool for low-latency code execution.
3
+ * @module runtime/pool
4
+ */
5
+ export { WorkerPool } from './worker-pool.js';
6
+ export { PooledWorker } from './worker.js';
7
+ export { evaluateRecycle, isEligible } from './recycle.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/pool/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Worker Recycle Policy
3
+ *
4
+ * Determines when a warm Deno worker should be replaced. Three eviction
5
+ * triggers are evaluated in order:
6
+ * 1. Error state — worker crashed or entered an unrecoverable error
7
+ * 2. Age — worker has been alive longer than `maxAgeMs`
8
+ * 3. Job count — worker has processed more than `maxJobsPerWorker` jobs
9
+ *
10
+ * Recycle is designed to be async-safe: the pool spawns a replacement
11
+ * *before* terminating the old worker, ensuring capacity is never reduced
12
+ * during normal operation.
13
+ *
14
+ * @module runtime/pool/recycle
15
+ */
16
+ import type { WorkerPoolOptions } from './worker-pool.js';
17
+ export interface RecycleCandidate {
18
+ /** Worker unique identifier */
19
+ id: string;
20
+ /** Current state of the worker */
21
+ state: 'idle' | 'busy' | 'recycling' | 'dead';
22
+ /** Epoch ms when the worker was created */
23
+ createdAt: number;
24
+ /** Total jobs run since creation */
25
+ jobsRun: number;
26
+ }
27
+ export interface RecycleDecision {
28
+ shouldRecycle: boolean;
29
+ reason?: 'error' | 'age' | 'job-count';
30
+ }
31
+ /**
32
+ * Evaluate whether a worker should be recycled based on the pool policy.
33
+ *
34
+ * Called by the pool after every job completion and after any error event.
35
+ * When `shouldRecycle` is true, the pool spawns a replacement then calls
36
+ * `worker.shutdown(drainFirst=false)` on the old worker.
37
+ */
38
+ export declare function evaluateRecycle(candidate: RecycleCandidate, opts: Pick<WorkerPoolOptions, 'maxJobsPerWorker' | 'maxAgeMs'>): RecycleDecision;
39
+ /**
40
+ * Return true if a worker is eligible to receive new jobs
41
+ * (idle and not scheduled for recycle).
42
+ */
43
+ export declare function isEligible(candidate: RecycleCandidate, opts: Pick<WorkerPoolOptions, 'maxJobsPerWorker' | 'maxAgeMs'>): boolean;
44
+ //# sourceMappingURL=recycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/pool/recycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,UAAU,CAAC,GAC7D,eAAe,CAoBjB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,UAAU,CAAC,GAC7D,OAAO,CAIT"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Worker Recycle Policy
3
+ *
4
+ * Determines when a warm Deno worker should be replaced. Three eviction
5
+ * triggers are evaluated in order:
6
+ * 1. Error state — worker crashed or entered an unrecoverable error
7
+ * 2. Age — worker has been alive longer than `maxAgeMs`
8
+ * 3. Job count — worker has processed more than `maxJobsPerWorker` jobs
9
+ *
10
+ * Recycle is designed to be async-safe: the pool spawns a replacement
11
+ * *before* terminating the old worker, ensuring capacity is never reduced
12
+ * during normal operation.
13
+ *
14
+ * @module runtime/pool/recycle
15
+ */
16
+ /**
17
+ * Evaluate whether a worker should be recycled based on the pool policy.
18
+ *
19
+ * Called by the pool after every job completion and after any error event.
20
+ * When `shouldRecycle` is true, the pool spawns a replacement then calls
21
+ * `worker.shutdown(drainFirst=false)` on the old worker.
22
+ */
23
+ export function evaluateRecycle(candidate, opts) {
24
+ // Error state always recycles
25
+ if (candidate.state === 'dead' || candidate.state === 'recycling') {
26
+ return { shouldRecycle: true, reason: 'error' };
27
+ }
28
+ const now = Date.now();
29
+ const ageMs = now - candidate.createdAt;
30
+ const maxAge = opts.maxAgeMs ?? 600_000;
31
+ const maxJobs = opts.maxJobsPerWorker ?? 100;
32
+ if (ageMs >= maxAge) {
33
+ return { shouldRecycle: true, reason: 'age' };
34
+ }
35
+ if (candidate.jobsRun >= maxJobs) {
36
+ return { shouldRecycle: true, reason: 'job-count' };
37
+ }
38
+ return { shouldRecycle: false };
39
+ }
40
+ /**
41
+ * Return true if a worker is eligible to receive new jobs
42
+ * (idle and not scheduled for recycle).
43
+ */
44
+ export function isEligible(candidate, opts) {
45
+ if (candidate.state !== 'idle')
46
+ return false;
47
+ const { shouldRecycle } = evaluateRecycle(candidate, opts);
48
+ return !shouldRecycle;
49
+ }
50
+ //# sourceMappingURL=recycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recycle.js","sourceRoot":"","sources":["../../../src/runtime/pool/recycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoBH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA2B,EAC3B,IAA8D;IAE9D,8BAA8B;IAC9B,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAClE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC;IAE7C,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,SAAS,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;QACjC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,SAA2B,EAC3B,IAA8D;IAE9D,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,aAAa,CAAC;AACxB,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Warm Deno Worker Pool
3
+ *
4
+ * Maintains a fixed pool of pre-warmed Deno workers so that the first
5
+ * execute_code call after startup hits an already-running sandbox.
6
+ *
7
+ * Lifecycle:
8
+ * 1. `new WorkerPool(opts)` — configure
9
+ * 2. `await pool.warmUp()` — spawn `size` workers concurrently
10
+ * 3. `await pool.execute(job)` — pick idle worker, run, release
11
+ * 4. `await pool.shutdown()` — drain in-flight jobs, terminate all workers
12
+ *
13
+ * Recycle policy (see recycle.ts):
14
+ * - After `maxJobsPerWorker` jobs the worker is replaced before termination
15
+ * - After `maxAgeMs` age the worker is replaced after its current job finishes
16
+ * - After any uncaught error the worker is replaced immediately
17
+ *
18
+ * Phase 5 plug-in: pass `preloadHelpers` to `WorkerPoolOptions` and the
19
+ * bootstrap script inside `worker.ts` will `await import()` each path before
20
+ * entering the job loop.
21
+ *
22
+ * @module runtime/pool/worker-pool
23
+ */
24
+ import type { WorkerJob } from './worker.js';
25
+ export interface WorkerPoolOptions {
26
+ /** Number of warm workers to maintain (default: 4) */
27
+ size?: number;
28
+ /** Recycle a worker after this many jobs (default: 100) */
29
+ maxJobsPerWorker?: number;
30
+ /** Recycle a worker after this age in ms (default: 600000 = 10 min) */
31
+ maxAgeMs?: number;
32
+ /** Directory of generated .d.ts files from the registry (Agent A output) */
33
+ preloadTypesDir: string;
34
+ /**
35
+ * Additional helper scripts to preload in each worker.
36
+ * Phase 5 (Agent E) passes compact/summarize/delta helpers here.
37
+ * Default: [] (no additional preloads).
38
+ */
39
+ preloadHelpers?: string[];
40
+ /** Max Deno memory per worker in MB (default: 128) */
41
+ maxMemoryMb?: number;
42
+ /** Bridge URL injected into the sandbox (default: http://127.0.0.1:9847) */
43
+ bridgeUrl?: string;
44
+ }
45
+ export interface PoolExecuteOptions {
46
+ signal?: AbortSignal;
47
+ /** Timeout in ms for waiting to acquire an idle worker (default: 5000) */
48
+ acquireTimeoutMs?: number;
49
+ }
50
+ export declare class WorkerPool {
51
+ private readonly opts;
52
+ private workers;
53
+ private queue;
54
+ private isShuttingDown;
55
+ private isWarmedUp;
56
+ constructor(options: WorkerPoolOptions);
57
+ /** Pre-spawn all workers. Must be called before `execute()`. */
58
+ warmUp(): Promise<void>;
59
+ /**
60
+ * Execute a job on an idle worker.
61
+ *
62
+ * If no idle worker is available, the job is queued until one becomes
63
+ * free or the acquire timeout elapses.
64
+ */
65
+ execute<T = unknown>(job: Omit<WorkerJob, 'signal'>, execOpts?: PoolExecuteOptions): Promise<T>;
66
+ size(): number;
67
+ busyCount(): number;
68
+ idleCount(): number;
69
+ /** Gracefully drain all in-flight jobs then terminate all workers. */
70
+ shutdown(): Promise<void>;
71
+ private _findIdle;
72
+ private _runOnWorker;
73
+ private _maybeRecycle;
74
+ private _removeWorker;
75
+ private _drainQueue;
76
+ }
77
+ //# sourceMappingURL=worker-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../src/runtime/pool/worker-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAA+B,MAAM,aAAa,CAAC;AAM1E,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAkBD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,iBAAiB;IAYtC,gEAAgE;IAC1D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB7B;;;;;OAKG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAC9B,QAAQ,GAAE,kBAAuB,GAChC,OAAO,CAAC,CAAC,CAAC;IAkCb,IAAI,IAAI,MAAM;IAId,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM;IAInB,sEAAsE;IAChE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,OAAO,CAAC,SAAS;YAIH,YAAY;YAuBZ,aAAa;IAkD3B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;CAapB"}