@dexto/agent-management 1.6.0 → 1.6.2

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 (69) hide show
  1. package/dist/agent-creation.cjs +2 -1
  2. package/dist/agent-creation.d.ts.map +1 -1
  3. package/dist/agent-creation.js +2 -1
  4. package/dist/config/config-enrichment.cjs +8 -3
  5. package/dist/config/config-enrichment.d.ts +6 -0
  6. package/dist/config/config-enrichment.d.ts.map +1 -1
  7. package/dist/config/config-enrichment.js +8 -3
  8. package/dist/index.cjs +3 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/models/custom-models.cjs +4 -3
  13. package/dist/models/custom-models.d.ts +26 -5
  14. package/dist/models/custom-models.d.ts.map +1 -1
  15. package/dist/models/custom-models.js +4 -3
  16. package/dist/preferences/loader.cjs +23 -8
  17. package/dist/preferences/loader.d.ts +7 -3
  18. package/dist/preferences/loader.d.ts.map +1 -1
  19. package/dist/preferences/loader.js +23 -8
  20. package/dist/preferences/schemas.cjs +47 -12
  21. package/dist/preferences/schemas.d.ts +92 -12
  22. package/dist/preferences/schemas.d.ts.map +1 -1
  23. package/dist/preferences/schemas.js +48 -8
  24. package/dist/registry/types.cjs +4 -0
  25. package/dist/registry/types.d.ts +8 -0
  26. package/dist/registry/types.d.ts.map +1 -1
  27. package/dist/registry/types.js +4 -0
  28. package/dist/runtime/AgentRuntime.cjs +23 -15
  29. package/dist/runtime/AgentRuntime.d.ts.map +1 -1
  30. package/dist/runtime/AgentRuntime.js +23 -15
  31. package/dist/runtime/approval-delegation.cjs +6 -3
  32. package/dist/runtime/approval-delegation.d.ts +2 -1
  33. package/dist/runtime/approval-delegation.d.ts.map +1 -1
  34. package/dist/runtime/approval-delegation.js +6 -3
  35. package/dist/runtime/schemas.cjs +1 -1
  36. package/dist/runtime/schemas.js +1 -1
  37. package/dist/runtime/types.d.ts +1 -1
  38. package/dist/runtime/types.d.ts.map +1 -1
  39. package/dist/tool-factories/agent-spawner/factory.cjs +63 -26
  40. package/dist/tool-factories/agent-spawner/factory.d.ts.map +1 -1
  41. package/dist/tool-factories/agent-spawner/factory.js +61 -24
  42. package/dist/tool-factories/agent-spawner/runtime.cjs +166 -15
  43. package/dist/tool-factories/agent-spawner/runtime.d.ts +8 -1
  44. package/dist/tool-factories/agent-spawner/runtime.d.ts.map +1 -1
  45. package/dist/tool-factories/agent-spawner/runtime.js +173 -17
  46. package/dist/tool-factories/agent-spawner/schemas.cjs +14 -2
  47. package/dist/tool-factories/agent-spawner/schemas.d.ts +10 -1
  48. package/dist/tool-factories/agent-spawner/schemas.d.ts.map +1 -1
  49. package/dist/tool-factories/agent-spawner/schemas.js +12 -2
  50. package/dist/tool-factories/agent-spawner/spawn-agent-tool.cjs +10 -1
  51. package/dist/tool-factories/agent-spawner/spawn-agent-tool.d.ts.map +1 -1
  52. package/dist/tool-factories/agent-spawner/spawn-agent-tool.js +10 -1
  53. package/dist/tool-factories/creator-tools/factory.cjs +434 -0
  54. package/dist/tool-factories/creator-tools/factory.d.ts +4 -0
  55. package/dist/tool-factories/creator-tools/factory.d.ts.map +1 -0
  56. package/dist/tool-factories/creator-tools/factory.js +407 -0
  57. package/dist/tool-factories/creator-tools/index.cjs +33 -0
  58. package/dist/tool-factories/creator-tools/index.d.ts +3 -0
  59. package/dist/tool-factories/creator-tools/index.d.ts.map +1 -0
  60. package/dist/tool-factories/creator-tools/index.js +10 -0
  61. package/dist/tool-factories/creator-tools/schemas.cjs +41 -0
  62. package/dist/tool-factories/creator-tools/schemas.d.ts +15 -0
  63. package/dist/tool-factories/creator-tools/schemas.d.ts.map +1 -0
  64. package/dist/tool-factories/creator-tools/schemas.js +16 -0
  65. package/dist/utils/path.cjs +10 -1
  66. package/dist/utils/path.d.ts +5 -2
  67. package/dist/utils/path.d.ts.map +1 -1
  68. package/dist/utils/path.js +10 -1
  69. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,0DAA0D;IAC1D,WAAW,EAAE,WAAW,CAAC;IAEzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,KAAK,EAAE,UAAU,CAAC;IAElB,kCAAkC;IAClC,MAAM,EAAE,WAAW,CAAC;IAEpB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IAEnB,kCAAkC;IAClC,SAAS,EAAE,IAAI,CAAC;IAEhB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAElB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAErC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,0DAA0D;IAC1D,WAAW,EAAE,WAAW,CAAC;IAEzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,KAAK,EAAE,UAAU,CAAC;IAElB,kCAAkC;IAClC,MAAM,EAAE,WAAW,CAAC;IAEpB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IAEnB,kCAAkC;IAClC,SAAS,EAAE,IAAI,CAAC;IAEhB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAElB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IAEjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uBAAuB;IACvB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAErC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB"}
@@ -22,16 +22,17 @@ __export(factory_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(factory_exports);
24
24
  var import_core = require("@dexto/core");
25
+ var import_core2 = require("@dexto/core");
25
26
  var import_orchestration = require("@dexto/orchestration");
26
27
  var import_schemas = require("./schemas.js");
27
28
  var import_runtime = require("./runtime.js");
28
29
  var import_spawn_agent_tool = require("./spawn-agent-tool.js");
29
30
  function requireAgentContext(context) {
30
31
  if (!context.agent) {
31
- throw import_core.ToolError.configInvalid("agent-spawner tools require ToolExecutionContext.agent");
32
+ throw import_core2.ToolError.configInvalid("agent-spawner tools require ToolExecutionContext.agent");
32
33
  }
33
34
  if (!context.services) {
34
- throw import_core.ToolError.configInvalid("agent-spawner tools require ToolExecutionContext.services");
35
+ throw import_core2.ToolError.configInvalid("agent-spawner tools require ToolExecutionContext.services");
35
36
  }
36
37
  return { agent: context.agent, logger: context.logger, toolServices: context.services };
37
38
  }
@@ -227,58 +228,94 @@ const agentSpawnerToolsFactory = {
227
228
  return [
228
229
  {
229
230
  id: "spawn_agent",
230
- displayName: "Agent",
231
231
  description: "Spawn a sub-agent to handle a task and return its result.",
232
232
  inputSchema: import_schemas.SpawnAgentInputSchema,
233
233
  execute: (input, context) => ensureToolsInitialized(context).spawnAgent.execute(input, context),
234
- generatePreview: async (input, context) => {
235
- const tool = ensureToolsInitialized(context).spawnAgent;
236
- if (!tool.generatePreview) {
237
- return null;
234
+ presentation: {
235
+ describeHeader: (input) => {
236
+ const agentId = typeof input.agentId === "string" ? input.agentId : void 0;
237
+ const agentLabel = agentId ? agentId.replace(/-agent$/, "") : void 0;
238
+ const title = agentLabel ? agentLabel.charAt(0).toUpperCase() + agentLabel.slice(1) : "Agent";
239
+ const task = typeof input.task === "string" ? input.task : "";
240
+ const argsText = task ? (0, import_core.truncateForHeader)(task, 120) : void 0;
241
+ return (0, import_core.createLocalToolCallHeader)({
242
+ title,
243
+ ...argsText ? { argsText } : {}
244
+ });
245
+ },
246
+ preview: async (input, context) => {
247
+ const tool = ensureToolsInitialized(context).spawnAgent;
248
+ const previewFn = tool.presentation?.preview;
249
+ if (!previewFn) {
250
+ return null;
251
+ }
252
+ return await previewFn(input, context);
238
253
  }
239
- return await tool.generatePreview(input, context);
240
254
  }
241
255
  },
242
256
  {
243
257
  id: "wait_for",
244
- displayName: "Wait",
245
258
  description: "Wait for background task(s) to complete.",
246
259
  inputSchema: import_orchestration.WaitForInputSchema,
247
260
  execute: (input, context) => ensureToolsInitialized(context).waitFor.execute(input, context),
248
- generatePreview: async (input, context) => {
249
- const tool = ensureToolsInitialized(context).waitFor;
250
- if (!tool.generatePreview) {
251
- return null;
261
+ presentation: {
262
+ describeHeader: (input) => {
263
+ const argsText = input.taskId ? (0, import_core.truncateForHeader)(input.taskId, 80) : input.taskIds && input.taskIds.length > 0 ? (0, import_core.truncateForHeader)(`${input.taskIds.length} tasks`, 80) : void 0;
264
+ return (0, import_core.createLocalToolCallHeader)({
265
+ title: "Wait",
266
+ ...argsText ? { argsText } : {}
267
+ });
268
+ },
269
+ preview: async (input, context) => {
270
+ const tool = ensureToolsInitialized(context).waitFor;
271
+ const previewFn = tool.presentation?.preview;
272
+ if (!previewFn) {
273
+ return null;
274
+ }
275
+ return await previewFn(input, context);
252
276
  }
253
- return await tool.generatePreview(input, context);
254
277
  }
255
278
  },
256
279
  {
257
280
  id: "check_task",
258
- displayName: "Check Task",
259
281
  description: "Check the status of a background task.",
260
282
  inputSchema: import_orchestration.CheckTaskInputSchema,
261
283
  execute: (input, context) => ensureToolsInitialized(context).checkTask.execute(input, context),
262
- generatePreview: async (input, context) => {
263
- const tool = ensureToolsInitialized(context).checkTask;
264
- if (!tool.generatePreview) {
265
- return null;
284
+ presentation: {
285
+ describeHeader: (input) => {
286
+ const argsText = (0, import_core.truncateForHeader)(input.taskId, 80);
287
+ return (0, import_core.createLocalToolCallHeader)({
288
+ title: "Check Task",
289
+ ...argsText ? { argsText } : {}
290
+ });
291
+ },
292
+ preview: async (input, context) => {
293
+ const tool = ensureToolsInitialized(context).checkTask;
294
+ const previewFn = tool.presentation?.preview;
295
+ if (!previewFn) {
296
+ return null;
297
+ }
298
+ return await previewFn(input, context);
266
299
  }
267
- return await tool.generatePreview(input, context);
268
300
  }
269
301
  },
270
302
  {
271
303
  id: "list_tasks",
272
- displayName: "List Tasks",
273
304
  description: "List background tasks and their statuses.",
274
305
  inputSchema: import_orchestration.ListTasksInputSchema,
275
306
  execute: (input, context) => ensureToolsInitialized(context).listTasks.execute(input, context),
276
- generatePreview: async (input, context) => {
277
- const tool = ensureToolsInitialized(context).listTasks;
278
- if (!tool.generatePreview) {
279
- return null;
307
+ presentation: {
308
+ describeHeader: () => (0, import_core.createLocalToolCallHeader)({
309
+ title: "List Tasks"
310
+ }),
311
+ preview: async (input, context) => {
312
+ const tool = ensureToolsInitialized(context).listTasks;
313
+ const previewFn = tool.presentation?.preview;
314
+ if (!previewFn) {
315
+ return null;
316
+ }
317
+ return await previewFn(input, context);
280
318
  }
281
- return await tool.generatePreview(input, context);
282
319
  }
283
320
  }
284
321
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/tool-factories/agent-spawner/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAevD,OAAO,EAGH,KAAK,kBAAkB,EAC1B,MAAM,cAAc,CAAC;AAkCtB,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,kBAAkB,CA8SpE,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/tool-factories/agent-spawner/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiBvD,OAAO,EAGH,KAAK,kBAAkB,EAC1B,MAAM,cAAc,CAAC;AAqCtB,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,kBAAkB,CA8VpE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { createLocalToolCallHeader, truncateForHeader } from "@dexto/core";
1
2
  import { ToolError } from "@dexto/core";
2
3
  import {
3
4
  ConditionEngine,
@@ -217,58 +218,94 @@ const agentSpawnerToolsFactory = {
217
218
  return [
218
219
  {
219
220
  id: "spawn_agent",
220
- displayName: "Agent",
221
221
  description: "Spawn a sub-agent to handle a task and return its result.",
222
222
  inputSchema: SpawnAgentInputSchema,
223
223
  execute: (input, context) => ensureToolsInitialized(context).spawnAgent.execute(input, context),
224
- generatePreview: async (input, context) => {
225
- const tool = ensureToolsInitialized(context).spawnAgent;
226
- if (!tool.generatePreview) {
227
- return null;
224
+ presentation: {
225
+ describeHeader: (input) => {
226
+ const agentId = typeof input.agentId === "string" ? input.agentId : void 0;
227
+ const agentLabel = agentId ? agentId.replace(/-agent$/, "") : void 0;
228
+ const title = agentLabel ? agentLabel.charAt(0).toUpperCase() + agentLabel.slice(1) : "Agent";
229
+ const task = typeof input.task === "string" ? input.task : "";
230
+ const argsText = task ? truncateForHeader(task, 120) : void 0;
231
+ return createLocalToolCallHeader({
232
+ title,
233
+ ...argsText ? { argsText } : {}
234
+ });
235
+ },
236
+ preview: async (input, context) => {
237
+ const tool = ensureToolsInitialized(context).spawnAgent;
238
+ const previewFn = tool.presentation?.preview;
239
+ if (!previewFn) {
240
+ return null;
241
+ }
242
+ return await previewFn(input, context);
228
243
  }
229
- return await tool.generatePreview(input, context);
230
244
  }
231
245
  },
232
246
  {
233
247
  id: "wait_for",
234
- displayName: "Wait",
235
248
  description: "Wait for background task(s) to complete.",
236
249
  inputSchema: WaitForInputSchema,
237
250
  execute: (input, context) => ensureToolsInitialized(context).waitFor.execute(input, context),
238
- generatePreview: async (input, context) => {
239
- const tool = ensureToolsInitialized(context).waitFor;
240
- if (!tool.generatePreview) {
241
- return null;
251
+ presentation: {
252
+ describeHeader: (input) => {
253
+ const argsText = input.taskId ? truncateForHeader(input.taskId, 80) : input.taskIds && input.taskIds.length > 0 ? truncateForHeader(`${input.taskIds.length} tasks`, 80) : void 0;
254
+ return createLocalToolCallHeader({
255
+ title: "Wait",
256
+ ...argsText ? { argsText } : {}
257
+ });
258
+ },
259
+ preview: async (input, context) => {
260
+ const tool = ensureToolsInitialized(context).waitFor;
261
+ const previewFn = tool.presentation?.preview;
262
+ if (!previewFn) {
263
+ return null;
264
+ }
265
+ return await previewFn(input, context);
242
266
  }
243
- return await tool.generatePreview(input, context);
244
267
  }
245
268
  },
246
269
  {
247
270
  id: "check_task",
248
- displayName: "Check Task",
249
271
  description: "Check the status of a background task.",
250
272
  inputSchema: CheckTaskInputSchema,
251
273
  execute: (input, context) => ensureToolsInitialized(context).checkTask.execute(input, context),
252
- generatePreview: async (input, context) => {
253
- const tool = ensureToolsInitialized(context).checkTask;
254
- if (!tool.generatePreview) {
255
- return null;
274
+ presentation: {
275
+ describeHeader: (input) => {
276
+ const argsText = truncateForHeader(input.taskId, 80);
277
+ return createLocalToolCallHeader({
278
+ title: "Check Task",
279
+ ...argsText ? { argsText } : {}
280
+ });
281
+ },
282
+ preview: async (input, context) => {
283
+ const tool = ensureToolsInitialized(context).checkTask;
284
+ const previewFn = tool.presentation?.preview;
285
+ if (!previewFn) {
286
+ return null;
287
+ }
288
+ return await previewFn(input, context);
256
289
  }
257
- return await tool.generatePreview(input, context);
258
290
  }
259
291
  },
260
292
  {
261
293
  id: "list_tasks",
262
- displayName: "List Tasks",
263
294
  description: "List background tasks and their statuses.",
264
295
  inputSchema: ListTasksInputSchema,
265
296
  execute: (input, context) => ensureToolsInitialized(context).listTasks.execute(input, context),
266
- generatePreview: async (input, context) => {
267
- const tool = ensureToolsInitialized(context).listTasks;
268
- if (!tool.generatePreview) {
269
- return null;
297
+ presentation: {
298
+ describeHeader: () => createLocalToolCallHeader({
299
+ title: "List Tasks"
300
+ }),
301
+ preview: async (input, context) => {
302
+ const tool = ensureToolsInitialized(context).listTasks;
303
+ const previewFn = tool.presentation?.preview;
304
+ if (!previewFn) {
305
+ return null;
306
+ }
307
+ return await previewFn(input, context);
270
308
  }
271
- return await tool.generatePreview(input, context);
272
309
  }
273
310
  }
274
311
  ];
@@ -31,6 +31,7 @@ __export(runtime_exports, {
31
31
  AgentSpawnerRuntime: () => AgentSpawnerRuntime
32
32
  });
33
33
  module.exports = __toCommonJS(runtime_exports);
34
+ var import_crypto = require("crypto");
34
35
  var import_core = require("@dexto/core");
35
36
  var import_AgentRuntime = require("../../runtime/AgentRuntime.js");
36
37
  var import_approval_delegation = require("../../runtime/approval-delegation.js");
@@ -40,12 +41,58 @@ var import_types = require("../../registry/types.js");
40
41
  var import_path = require("../../utils/path.js");
41
42
  var path = __toESM(require("path"), 1);
42
43
  var import_llm_resolution = require("./llm-resolution.js");
44
+ const REASONING_VARIANT_FALLBACK_ORDER = [
45
+ "disabled",
46
+ "none",
47
+ "minimal",
48
+ "low",
49
+ "enabled",
50
+ "medium",
51
+ "high",
52
+ "max",
53
+ "xhigh"
54
+ ];
43
55
  class AgentSpawnerRuntime {
44
56
  runtime;
45
57
  parentId;
46
58
  parentAgent;
47
59
  config;
48
60
  logger;
61
+ selectLowestReasoningVariant(provider, model, preferredVariant) {
62
+ const profile = (0, import_core.getReasoningProfile)(provider, model);
63
+ if (!profile.capable || profile.supportedVariants.length === 0) {
64
+ return void 0;
65
+ }
66
+ if ((0, import_core.supportsReasoningVariant)(profile, preferredVariant)) {
67
+ return preferredVariant;
68
+ }
69
+ for (const variant of REASONING_VARIANT_FALLBACK_ORDER) {
70
+ if ((0, import_core.supportsReasoningVariant)(profile, variant)) {
71
+ return variant;
72
+ }
73
+ }
74
+ return profile.defaultVariant ?? profile.supportedVariants[0];
75
+ }
76
+ applySubAgentLlmPolicy(llm) {
77
+ const maxIterationsCap = this.config.subAgentMaxIterations;
78
+ const preferredReasoningVariant = this.config.subAgentReasoningVariant;
79
+ const reasoningVariant = this.selectLowestReasoningVariant(
80
+ llm.provider,
81
+ llm.model,
82
+ preferredReasoningVariant
83
+ );
84
+ const existingMaxIterations = llm.maxIterations;
85
+ const cappedMaxIterations = typeof existingMaxIterations === "number" ? Math.min(existingMaxIterations, maxIterationsCap) : maxIterationsCap;
86
+ const adjusted = {
87
+ ...llm,
88
+ maxIterations: cappedMaxIterations,
89
+ ...reasoningVariant !== void 0 ? { reasoning: { variant: reasoningVariant } } : { reasoning: void 0 }
90
+ };
91
+ this.logger.debug(
92
+ `[AgentSpawnerRuntime] Applied sub-agent LLM policy: maxIterations=${adjusted.maxIterations}, preferredReasoning=${preferredReasoningVariant}, selectedReasoning=${reasoningVariant ?? "none"}`
93
+ );
94
+ return adjusted;
95
+ }
49
96
  resolveBundledAgentConfig(agentId) {
50
97
  const baseDir = "agents";
51
98
  const normalizedPath = path.relative(baseDir, path.join(baseDir, agentId));
@@ -187,6 +234,10 @@ class AgentSpawnerRuntime {
187
234
  const tokenUsage = { input: 0, output: 0, total: 0 };
188
235
  let currentTool = "";
189
236
  const emitProgress = (tool, args) => {
237
+ const subAgentLogFilePath = this.getSubAgentLogFilePath({
238
+ runtimeAgentId: subAgentHandle.agentId,
239
+ sessionId
240
+ });
190
241
  this.parentAgent.emit("service:event", {
191
242
  service: "agent-spawner",
192
243
  event: "progress",
@@ -195,6 +246,8 @@ class AgentSpawnerRuntime {
195
246
  data: {
196
247
  task: input.task,
197
248
  agentId: input.agentId ?? "default",
249
+ runtimeAgentId: subAgentHandle.agentId,
250
+ ...subAgentLogFilePath ? { subAgentLogFilePath } : {},
198
251
  toolsCalled: toolCount,
199
252
  currentTool: tool,
200
253
  currentArgs: args,
@@ -234,6 +287,44 @@ class AgentSpawnerRuntime {
234
287
  subAgentHandle.agent.off("llm:response", responseHandler);
235
288
  };
236
289
  }
290
+ /**
291
+ * Ensure spawned agent inherits the parent's workspace context.
292
+ */
293
+ async applyParentWorkspace(agent) {
294
+ let parentWorkspace;
295
+ try {
296
+ parentWorkspace = await this.parentAgent.getWorkspace();
297
+ } catch (error) {
298
+ this.logger.warn(
299
+ `Failed to read parent workspace for sub-agent: ${error instanceof Error ? error.message : String(error)}`
300
+ );
301
+ return;
302
+ }
303
+ if (!parentWorkspace?.path) {
304
+ return;
305
+ }
306
+ try {
307
+ await agent.setWorkspace({
308
+ path: parentWorkspace.path,
309
+ ...parentWorkspace.name ? { name: parentWorkspace.name } : {}
310
+ });
311
+ } catch (error) {
312
+ this.logger.warn(
313
+ `Failed to apply parent workspace to sub-agent: ${error instanceof Error ? error.message : String(error)}`
314
+ );
315
+ }
316
+ }
317
+ getSubAgentLogFilePath(options) {
318
+ const { runtimeAgentId, sessionId } = options;
319
+ if (!sessionId) {
320
+ return null;
321
+ }
322
+ const safeSessionId = sessionId.replace(/[^a-zA-Z0-9._-]/g, "_");
323
+ return (0, import_path.getDextoPath)(
324
+ "logs",
325
+ path.join(this.parentId, `${safeSessionId}.subagent.${runtimeAgentId}.log`)
326
+ );
327
+ }
237
328
  /**
238
329
  * Check if an error is LLM-related (API errors, credit issues, model not found, etc.)
239
330
  */
@@ -255,7 +346,10 @@ class AgentSpawnerRuntime {
255
346
  let llmMode = "subagent";
256
347
  let cleanupProgressTracking;
257
348
  try {
258
- const buildOptions = {};
349
+ const buildOptions = {
350
+ // Pre-generate the runtime agentId so we can deterministically route logs.
351
+ runtimeAgentId: `agent-${(0, import_crypto.randomUUID)().slice(0, 8)}`
352
+ };
259
353
  if (input.agentId !== void 0) {
260
354
  buildOptions.agentId = input.agentId;
261
355
  }
@@ -266,6 +360,7 @@ class AgentSpawnerRuntime {
266
360
  let handle;
267
361
  try {
268
362
  handle = await this.runtime.spawnAgent({
363
+ agentId: buildOptions.runtimeAgentId,
269
364
  agentConfig: subAgentConfig,
270
365
  ephemeral: true,
271
366
  group: this.parentId,
@@ -280,6 +375,7 @@ class AgentSpawnerRuntime {
280
375
  const delegatingHandler = (0, import_approval_delegation.createDelegatingApprovalHandler)(
281
376
  this.parentAgent.services.approvalManager,
282
377
  agent.config.agentId ?? "unknown",
378
+ sessionId,
283
379
  this.logger
284
380
  );
285
381
  agent.setApprovalHandler(delegatingHandler);
@@ -287,6 +383,7 @@ class AgentSpawnerRuntime {
287
383
  }
288
384
  });
289
385
  spawnedAgentId = handle.agentId;
386
+ await this.applyParentWorkspace(handle.agent);
290
387
  } catch (spawnError) {
291
388
  const isLlmError = this.isLLMError(spawnError);
292
389
  if (isLlmError && input.agentId && llmMode === "subagent") {
@@ -298,6 +395,7 @@ class AgentSpawnerRuntime {
298
395
  buildOptions.inheritLlm = true;
299
396
  subAgentConfig = await this.buildSubAgentConfig(buildOptions, sessionId);
300
397
  handle = await this.runtime.spawnAgent({
398
+ agentId: buildOptions.runtimeAgentId,
301
399
  agentConfig: subAgentConfig,
302
400
  ephemeral: true,
303
401
  group: this.parentId,
@@ -314,6 +412,7 @@ class AgentSpawnerRuntime {
314
412
  const delegatingHandler = (0, import_approval_delegation.createDelegatingApprovalHandler)(
315
413
  this.parentAgent.services.approvalManager,
316
414
  agent.config.agentId ?? "unknown",
415
+ sessionId,
317
416
  this.logger
318
417
  );
319
418
  agent.setApprovalHandler(delegatingHandler);
@@ -321,6 +420,7 @@ class AgentSpawnerRuntime {
321
420
  }
322
421
  });
323
422
  spawnedAgentId = handle.agentId;
423
+ await this.applyParentWorkspace(handle.agent);
324
424
  } else {
325
425
  throw spawnError;
326
426
  }
@@ -328,6 +428,23 @@ class AgentSpawnerRuntime {
328
428
  this.logger.info(
329
429
  `Spawned sub-agent '${spawnedAgentId}' for task: ${input.task}${autoApprove ? " (auto-approve)" : ""}${llmMode === "parent" ? " (using parent LLM)" : ""}`
330
430
  );
431
+ const subAgentLogFilePath = this.getSubAgentLogFilePath(
432
+ sessionId ? { runtimeAgentId: buildOptions.runtimeAgentId, sessionId } : { runtimeAgentId: buildOptions.runtimeAgentId }
433
+ );
434
+ if (subAgentLogFilePath) {
435
+ this.logger.info(`Sub-agent logs: ${subAgentLogFilePath}`);
436
+ }
437
+ if (sessionId) {
438
+ const parentSession = await this.parentAgent.getSession(sessionId);
439
+ if (parentSession) {
440
+ parentSession.logger.info("Sub-agent spawned", {
441
+ runtimeAgentId: spawnedAgentId,
442
+ registryAgentId: input.agentId ?? "default",
443
+ task: input.task,
444
+ ...subAgentLogFilePath ? { subAgentLogFilePath } : {}
445
+ });
446
+ }
447
+ }
331
448
  cleanupProgressTracking = this.setupProgressTracking(
332
449
  handle,
333
450
  input,
@@ -361,6 +478,7 @@ class AgentSpawnerRuntime {
361
478
  buildOptions.inheritLlm = true;
362
479
  subAgentConfig = await this.buildSubAgentConfig(buildOptions, sessionId);
363
480
  handle = await this.runtime.spawnAgent({
481
+ agentId: buildOptions.runtimeAgentId,
364
482
  agentConfig: subAgentConfig,
365
483
  ephemeral: true,
366
484
  group: this.parentId,
@@ -377,6 +495,7 @@ class AgentSpawnerRuntime {
377
495
  const delegatingHandler = (0, import_approval_delegation.createDelegatingApprovalHandler)(
378
496
  this.parentAgent.services.approvalManager,
379
497
  agent.config.agentId ?? "unknown",
498
+ sessionId,
380
499
  this.logger
381
500
  );
382
501
  agent.setApprovalHandler(delegatingHandler);
@@ -384,6 +503,7 @@ class AgentSpawnerRuntime {
384
503
  }
385
504
  });
386
505
  spawnedAgentId = handle.agentId;
506
+ await this.applyParentWorkspace(handle.agent);
387
507
  this.logger.info(
388
508
  `Re-spawned sub-agent '${spawnedAgentId}' for task: ${input.task} (using parent LLM)`
389
509
  );
@@ -443,13 +563,49 @@ class AgentSpawnerRuntime {
443
563
  * @param sessionId - Optional session ID to get session-specific LLM config
444
564
  */
445
565
  async buildSubAgentConfig(options, sessionId) {
446
- const { agentId, inheritLlm, autoApprove } = options;
566
+ const { agentId, inheritLlm, autoApprove, runtimeAgentId } = options;
447
567
  const parentSettings = this.parentAgent.config;
448
568
  const currentParentLLM = this.parentAgent.getCurrentLLMConfig(sessionId);
449
569
  this.logger.debug(
450
570
  `[AgentSpawnerRuntime] Building sub-agent config with LLM: ${currentParentLLM.provider}/${currentParentLLM.model}` + (sessionId ? ` (sessionId: ${sessionId})` : " (no sessionId)")
451
571
  );
452
572
  const permissionsMode = autoApprove ? "auto-approve" : "manual";
573
+ const parentToolPolicies = parentSettings.permissions?.toolPolicies;
574
+ const mergeToolPolicies = (subAgentPolicies) => {
575
+ const alwaysAllow = [
576
+ ...parentToolPolicies?.alwaysAllow ?? [],
577
+ ...subAgentPolicies?.alwaysAllow ?? []
578
+ ];
579
+ const alwaysDeny = [
580
+ ...parentToolPolicies?.alwaysDeny ?? [],
581
+ ...subAgentPolicies?.alwaysDeny ?? []
582
+ ];
583
+ return {
584
+ alwaysAllow: Array.from(new Set(alwaysAllow)),
585
+ alwaysDeny: Array.from(new Set(alwaysDeny))
586
+ };
587
+ };
588
+ const inheritedLoggerConfig = await (async () => {
589
+ if (!sessionId) {
590
+ return void 0;
591
+ }
592
+ const session = await this.parentAgent.getSession(sessionId);
593
+ if (!session) {
594
+ return void 0;
595
+ }
596
+ const parentSessionLogPath = session.logger.getLogFilePath();
597
+ if (!parentSessionLogPath) {
598
+ return void 0;
599
+ }
600
+ const subAgentLogFilePath = this.getSubAgentLogFilePath({ runtimeAgentId, sessionId });
601
+ if (!subAgentLogFilePath) {
602
+ return void 0;
603
+ }
604
+ return {
605
+ level: session.logger.getLevel(),
606
+ transports: [{ type: "file", path: subAgentLogFilePath }]
607
+ };
608
+ })();
453
609
  if (agentId) {
454
610
  let configPath = null;
455
611
  try {
@@ -487,18 +643,16 @@ class AgentSpawnerRuntime {
487
643
  this.logger.debug(`Sub-agent LLM resolution: ${resolution.reason}`);
488
644
  llmConfig = resolution.llm;
489
645
  }
646
+ llmConfig = this.applySubAgentLlmPolicy(llmConfig);
490
647
  return {
491
648
  ...loadedConfig,
492
649
  llm: llmConfig,
493
650
  permissions: {
494
651
  ...loadedConfig.permissions,
495
- mode: permissionsMode
652
+ mode: permissionsMode,
653
+ toolPolicies: mergeToolPolicies(loadedConfig.permissions?.toolPolicies)
496
654
  },
497
- // Suppress sub-agent console logs entirely using silent transport
498
- logger: {
499
- level: "error",
500
- transports: [{ type: "silent" }]
501
- }
655
+ ...inheritedLoggerConfig !== void 0 && { logger: inheritedLoggerConfig }
502
656
  };
503
657
  }
504
658
  this.logger.warn(
@@ -506,19 +660,16 @@ class AgentSpawnerRuntime {
506
660
  );
507
661
  }
508
662
  const config = {
509
- llm: { ...currentParentLLM },
663
+ llm: this.applySubAgentLlmPolicy({ ...currentParentLLM }),
510
664
  // Default system prompt for sub-agents
511
665
  systemPrompt: "You are a helpful sub-agent. Complete the task given to you efficiently and concisely.",
512
666
  permissions: {
513
- mode: permissionsMode
667
+ mode: permissionsMode,
668
+ toolPolicies: mergeToolPolicies(void 0)
514
669
  },
515
670
  // Inherit MCP servers from parent so subagent has tool access
516
671
  mcpServers: parentSettings.mcpServers ? { ...parentSettings.mcpServers } : {},
517
- // Suppress sub-agent console logs entirely using silent transport
518
- logger: {
519
- level: "error",
520
- transports: [{ type: "silent" }]
521
- }
672
+ ...inheritedLoggerConfig !== void 0 && { logger: inheritedLoggerConfig }
522
673
  };
523
674
  return config;
524
675
  }
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { DextoAgent, Logger, TaskForker } from '@dexto/core';
14
14
  import type { AgentRegistryEntry } from '../../registry/types.js';
15
- import type { AgentSpawnerConfig } from './schemas.js';
15
+ import { type AgentSpawnerConfig } from './schemas.js';
16
16
  import type { SpawnAgentOutput } from './types.js';
17
17
  export declare class AgentSpawnerRuntime implements TaskForker {
18
18
  private runtime;
@@ -20,6 +20,8 @@ export declare class AgentSpawnerRuntime implements TaskForker {
20
20
  private parentAgent;
21
21
  private config;
22
22
  private logger;
23
+ private selectLowestReasoningVariant;
24
+ private applySubAgentLlmPolicy;
23
25
  private resolveBundledAgentConfig;
24
26
  private createFallbackRegistryEntry;
25
27
  constructor(parentAgent: DextoAgent, config: AgentSpawnerConfig, logger: Logger);
@@ -85,6 +87,11 @@ export declare class AgentSpawnerRuntime implements TaskForker {
85
87
  * @returns Cleanup function to unsubscribe from events
86
88
  */
87
89
  private setupProgressTracking;
90
+ /**
91
+ * Ensure spawned agent inherits the parent's workspace context.
92
+ */
93
+ private applyParentWorkspace;
94
+ private getSubAgentLogFilePath;
88
95
  /**
89
96
  * Check if an error is LLM-related (API errors, credit issues, model not found, etc.)
90
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/tool-factories/agent-spawner/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,qBAAa,mBAAoB,YAAW,UAAU;IAClD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,2BAA2B;gBAYvB,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM;IAuB/E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;;;;;;;;;;;OAcG;IACG,eAAe,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8C7B;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIpE;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAwG7B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;YACW,oBAAoB;IAyPlC;;;;;;;OAOG;YACW,mBAAmB;IAmHjC;;;OAGG;IACH,kBAAkB,IAAI,kBAAkB,EAAE;IA6B1C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIjC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/tool-factories/agent-spawner/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAenD,qBAAa,mBAAoB,YAAW,UAAU;IAClD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,4BAA4B;IAuBpC,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,2BAA2B;gBAYvB,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM;IAuB/E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;;;;;;;;;;;OAcG;IACG,eAAe,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8C7B;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIpE;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA+G7B;;OAEG;YACW,oBAAoB;IA2BlC,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;YACW,oBAAoB;IA4RlC;;;;;;;OAOG;YACW,mBAAmB;IAmKjC;;;OAGG;IACH,kBAAkB,IAAI,kBAAkB,EAAE;IA6B1C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIjC"}