@dexto/agent-management 1.6.25 → 1.6.27

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.
@@ -137,6 +137,7 @@ const AgentFactory = {
137
137
  return await (0, import_agent_creation.createDextoAgentFromConfig)({
138
138
  config: configToEnrich,
139
139
  enrichOptions: { isInteractiveCli: options?.isInteractiveCli ?? false },
140
+ hostContext: options?.hostContext,
140
141
  runtimeOverrides: options?.runtimeOverrides
141
142
  });
142
143
  }
@@ -23,7 +23,7 @@
23
23
  * @see AgentManager for registry-based agent management
24
24
  * @see https://docs.dexto.ai/api/sdk/agent-factory for full documentation
25
25
  */
26
- import type { AgentConfig } from '@dexto/agent-config';
26
+ import type { AgentConfig, DextoHostContext } from '@dexto/agent-config';
27
27
  import type { DextoAgent, DextoAgentConfigInput } from '@dexto/core';
28
28
  import { type InstallOptions } from './installation.js';
29
29
  import type { AgentMetadata } from './AgentManager.js';
@@ -44,6 +44,8 @@ export interface CreateAgentOptions {
44
44
  agentId?: string;
45
45
  /** Whether this is interactive CLI mode (affects logger defaults) */
46
46
  isInteractiveCli?: boolean;
47
+ /** Optional host-owned resolution context for hosted runtimes */
48
+ hostContext?: DextoHostContext | undefined;
47
49
  /** Explicit runtime overrides applied outside the validated agent config */
48
50
  runtimeOverrides?: Pick<DextoAgentConfigInput, 'usageScopeId'> | undefined;
49
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AgentFactory.d.ts","sourceRoot":"","sources":["../src/AgentFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;CAC9E;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACrB;;;OAGG;yBACwB,iBAAiB;;;;;;;;;;;;;;;;;;IAyC5C;;OAEG;0BACyB,MAAM,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E;;OAEG;gCAEU,MAAM,cACH,MAAM,YACR,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,YAC/D,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC;IAelB;;;;OAIG;4BAC2B,MAAM,WAAW,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;wBACuB,WAAW,YAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CAoB5F,CAAC"}
1
+ {"version":3,"file":"AgentFactory.d.ts","sourceRoot":"","sources":["../src/AgentFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC3C,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;CAC9E;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACrB;;;OAGG;yBACwB,iBAAiB;;;;;;;;;;;;;;;;;;IAyC5C;;OAEG;0BACyB,MAAM,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E;;OAEG;gCAEU,MAAM,cACH,MAAM,YACR,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,YAC/D,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC;IAelB;;;;OAIG;4BAC2B,MAAM,WAAW,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;wBACuB,WAAW,YAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CAqB5F,CAAC"}
@@ -114,6 +114,7 @@ const AgentFactory = {
114
114
  return await createDextoAgentFromConfig({
115
115
  config: configToEnrich,
116
116
  enrichOptions: { isInteractiveCli: options?.isInteractiveCli ?? false },
117
+ hostContext: options?.hostContext,
117
118
  runtimeOverrides: options?.runtimeOverrides
118
119
  });
119
120
  }
@@ -61,7 +61,7 @@ function applySubAgentToolConstraints(config) {
61
61
  return { ...config, tools: constrainedTools };
62
62
  }
63
63
  async function createDextoAgentFromConfig(options) {
64
- const { configPath, enrichOptions, agentIdOverride, overrides, runtimeOverrides } = options;
64
+ const { configPath, enrichOptions, agentIdOverride, hostContext, overrides, runtimeOverrides } = options;
65
65
  const cleanedConfig = (0, import_agent_config.cleanNullValues)(options.config);
66
66
  const { image } = await loadImageForConfig({
67
67
  config: cleanedConfig,
@@ -80,12 +80,14 @@ async function createDextoAgentFromConfig(options) {
80
80
  enrichedConfig.agentId = agentIdOverride;
81
81
  }
82
82
  const validatedConfig = import_agent_config.AgentConfigSchema.parse(enrichedConfig);
83
- const services = await (0, import_agent_config.resolveServicesFromConfig)(validatedConfig, image);
83
+ const services = await (0, import_agent_config.resolveServicesFromConfig)(validatedConfig, image, hostContext);
84
84
  const mergedOverrides = overrides ? { ...overrides } : void 0;
85
85
  return new import_core.DextoAgent(
86
86
  (0, import_agent_config.toDextoAgentOptions)({
87
87
  config: validatedConfig,
88
88
  services,
89
+ image,
90
+ ...hostContext ? { hostContext } : {},
89
91
  ...runtimeOverrides ? { runtimeOverrides } : {},
90
92
  overrides: mergedOverrides
91
93
  })
@@ -1,4 +1,4 @@
1
- import type { AgentConfig } from '@dexto/agent-config';
1
+ import type { AgentConfig, DextoHostContext } from '@dexto/agent-config';
2
2
  import { DextoAgent, type DextoAgentConfigInput, type InitializeServicesOptions } from '@dexto/core';
3
3
  import { type EnrichAgentConfigOptions } from './config/index.js';
4
4
  type CreateDextoAgentFromConfigOptions = {
@@ -8,6 +8,7 @@ type CreateDextoAgentFromConfigOptions = {
8
8
  agentIdOverride?: string | undefined;
9
9
  imageNameOverride?: string | undefined;
10
10
  agentContext?: 'subagent' | undefined;
11
+ hostContext?: DextoHostContext | undefined;
11
12
  overrides?: InitializeServicesOptions | undefined;
12
13
  runtimeOverrides?: Pick<DextoAgentConfigInput, 'usageScopeId'> | undefined;
13
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-creation.d.ts","sourceRoot":"","sources":["../src/agent-creation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AASnE,OAAO,EACH,UAAU,EAEV,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGrF,KAAK,iCAAiC,GAAG;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAClD,gBAAgB,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;CAC9E,CAAC;AA0DF,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,iCAAiC,GAC3C,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
1
+ {"version":3,"file":"agent-creation.d.ts","sourceRoot":"","sources":["../src/agent-creation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAc,MAAM,qBAAqB,CAAC;AASrF,OAAO,EACH,UAAU,EAEV,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGrF,KAAK,iCAAiC,GAAG;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC3C,SAAS,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAClD,gBAAgB,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;CAC9E,CAAC;AA0DF,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,iCAAiC,GAC3C,OAAO,CAAC,UAAU,CAAC,CA0CrB"}
@@ -48,7 +48,7 @@ function applySubAgentToolConstraints(config) {
48
48
  return { ...config, tools: constrainedTools };
49
49
  }
50
50
  async function createDextoAgentFromConfig(options) {
51
- const { configPath, enrichOptions, agentIdOverride, overrides, runtimeOverrides } = options;
51
+ const { configPath, enrichOptions, agentIdOverride, hostContext, overrides, runtimeOverrides } = options;
52
52
  const cleanedConfig = cleanNullValues(options.config);
53
53
  const { image } = await loadImageForConfig({
54
54
  config: cleanedConfig,
@@ -67,12 +67,14 @@ async function createDextoAgentFromConfig(options) {
67
67
  enrichedConfig.agentId = agentIdOverride;
68
68
  }
69
69
  const validatedConfig = AgentConfigSchema.parse(enrichedConfig);
70
- const services = await resolveServicesFromConfig(validatedConfig, image);
70
+ const services = await resolveServicesFromConfig(validatedConfig, image, hostContext);
71
71
  const mergedOverrides = overrides ? { ...overrides } : void 0;
72
72
  return new DextoAgent(
73
73
  toDextoAgentOptions({
74
74
  config: validatedConfig,
75
75
  services,
76
+ image,
77
+ ...hostContext ? { hostContext } : {},
76
78
  ...runtimeOverrides ? { runtimeOverrides } : {},
77
79
  overrides: mergedOverrides
78
80
  })
@@ -78,6 +78,7 @@ const agentSpawnerToolsFactory = {
78
78
  updateWorkspaceRootHint(spawnerRuntime, context);
79
79
  attachTaskForker({ toolServices, taskForker: spawnerRuntime, logger });
80
80
  const taskSessions = /* @__PURE__ */ new Map();
81
+ const taskHostRuntimeContexts = /* @__PURE__ */ new Map();
81
82
  const emitTasksUpdate = (sessionId) => {
82
83
  const tasks = taskRegistry.list({
83
84
  status: ["running", "completed", "failed", "cancelled"]
@@ -100,13 +101,14 @@ const agentSpawnerToolsFactory = {
100
101
  }
101
102
  });
102
103
  };
103
- const triggerBackgroundCompletion = (taskId, sessionId) => {
104
+ const triggerBackgroundCompletion = (taskId, sessionId, hostRuntime) => {
104
105
  if (!sessionId) {
105
106
  return;
106
107
  }
107
108
  agent.emit("tool:background-completed", {
108
109
  toolCallId: taskId,
109
- sessionId
110
+ sessionId,
111
+ ...hostRuntime !== void 0 && { hostRuntime }
110
112
  });
111
113
  const taskInfo = taskRegistry.getInfo(taskId);
112
114
  const resultText = (() => {
@@ -154,9 +156,14 @@ const agentSpawnerToolsFactory = {
154
156
  sessionId,
155
157
  content,
156
158
  source: "external",
157
- metadata: { taskId }
159
+ metadata: { taskId },
160
+ ...hostRuntime !== void 0 && { hostRuntime }
158
161
  });
159
- agent.generate(content, sessionId).catch(() => void 0);
162
+ agent.generate(content, sessionId, {
163
+ ...hostRuntime !== void 0 && {
164
+ executionContext: hostRuntime
165
+ }
166
+ }).catch(() => void 0);
160
167
  }
161
168
  }).catch(() => {
162
169
  });
@@ -169,6 +176,9 @@ const agentSpawnerToolsFactory = {
169
176
  if (event.sessionId) {
170
177
  taskSessions.set(taskId, event.sessionId);
171
178
  }
179
+ if (event.hostRuntime !== void 0) {
180
+ taskHostRuntimeContexts.set(taskId, event.hostRuntime);
181
+ }
172
182
  try {
173
183
  taskRegistry.register(
174
184
  {
@@ -186,6 +196,7 @@ const agentSpawnerToolsFactory = {
186
196
  );
187
197
  } catch (error) {
188
198
  taskSessions.delete(taskId);
199
+ taskHostRuntimeContexts.delete(taskId);
189
200
  event.promise.catch(() => void 0);
190
201
  logger.warn(
191
202
  `Failed to register background task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,
@@ -196,8 +207,10 @@ const agentSpawnerToolsFactory = {
196
207
  emitTasksUpdate(event.sessionId);
197
208
  event.promise.finally(() => {
198
209
  taskSessions.delete(taskId);
210
+ const hostRuntime = taskHostRuntimeContexts.get(taskId);
211
+ taskHostRuntimeContexts.delete(taskId);
199
212
  emitTasksUpdate(event.sessionId);
200
- triggerBackgroundCompletion(taskId, event.sessionId);
213
+ triggerBackgroundCompletion(taskId, event.sessionId, hostRuntime);
201
214
  });
202
215
  };
203
216
  const abortController = new AbortController();
@@ -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;AAiBvD,OAAO,EAGH,KAAK,kBAAkB,EAC1B,MAAM,cAAc,CAAC;AAqCtB,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,kBAAkB,CA8WpE,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,CAiYpE,CAAC"}
@@ -68,6 +68,7 @@ const agentSpawnerToolsFactory = {
68
68
  updateWorkspaceRootHint(spawnerRuntime, context);
69
69
  attachTaskForker({ toolServices, taskForker: spawnerRuntime, logger });
70
70
  const taskSessions = /* @__PURE__ */ new Map();
71
+ const taskHostRuntimeContexts = /* @__PURE__ */ new Map();
71
72
  const emitTasksUpdate = (sessionId) => {
72
73
  const tasks = taskRegistry.list({
73
74
  status: ["running", "completed", "failed", "cancelled"]
@@ -90,13 +91,14 @@ const agentSpawnerToolsFactory = {
90
91
  }
91
92
  });
92
93
  };
93
- const triggerBackgroundCompletion = (taskId, sessionId) => {
94
+ const triggerBackgroundCompletion = (taskId, sessionId, hostRuntime) => {
94
95
  if (!sessionId) {
95
96
  return;
96
97
  }
97
98
  agent.emit("tool:background-completed", {
98
99
  toolCallId: taskId,
99
- sessionId
100
+ sessionId,
101
+ ...hostRuntime !== void 0 && { hostRuntime }
100
102
  });
101
103
  const taskInfo = taskRegistry.getInfo(taskId);
102
104
  const resultText = (() => {
@@ -144,9 +146,14 @@ const agentSpawnerToolsFactory = {
144
146
  sessionId,
145
147
  content,
146
148
  source: "external",
147
- metadata: { taskId }
149
+ metadata: { taskId },
150
+ ...hostRuntime !== void 0 && { hostRuntime }
148
151
  });
149
- agent.generate(content, sessionId).catch(() => void 0);
152
+ agent.generate(content, sessionId, {
153
+ ...hostRuntime !== void 0 && {
154
+ executionContext: hostRuntime
155
+ }
156
+ }).catch(() => void 0);
150
157
  }
151
158
  }).catch(() => {
152
159
  });
@@ -159,6 +166,9 @@ const agentSpawnerToolsFactory = {
159
166
  if (event.sessionId) {
160
167
  taskSessions.set(taskId, event.sessionId);
161
168
  }
169
+ if (event.hostRuntime !== void 0) {
170
+ taskHostRuntimeContexts.set(taskId, event.hostRuntime);
171
+ }
162
172
  try {
163
173
  taskRegistry.register(
164
174
  {
@@ -176,6 +186,7 @@ const agentSpawnerToolsFactory = {
176
186
  );
177
187
  } catch (error) {
178
188
  taskSessions.delete(taskId);
189
+ taskHostRuntimeContexts.delete(taskId);
179
190
  event.promise.catch(() => void 0);
180
191
  logger.warn(
181
192
  `Failed to register background task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,
@@ -186,8 +197,10 @@ const agentSpawnerToolsFactory = {
186
197
  emitTasksUpdate(event.sessionId);
187
198
  event.promise.finally(() => {
188
199
  taskSessions.delete(taskId);
200
+ const hostRuntime = taskHostRuntimeContexts.get(taskId);
201
+ taskHostRuntimeContexts.delete(taskId);
189
202
  emitTasksUpdate(event.sessionId);
190
- triggerBackgroundCompletion(taskId, event.sessionId);
203
+ triggerBackgroundCompletion(taskId, event.sessionId, hostRuntime);
191
204
  });
192
205
  };
193
206
  const abortController = new AbortController();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dexto/agent-management",
3
- "version": "1.6.25",
3
+ "version": "1.6.27",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,10 +17,10 @@
17
17
  "dependencies": {
18
18
  "yaml": "^2.8.3",
19
19
  "zod": "^3.25.0",
20
- "@dexto/agent-config": "1.6.25",
21
- "@dexto/core": "1.6.25",
22
- "@dexto/orchestration": "1.6.25",
23
- "@dexto/tools-builtins": "1.6.25"
20
+ "@dexto/agent-config": "1.6.27",
21
+ "@dexto/core": "1.6.27",
22
+ "@dexto/orchestration": "1.6.27",
23
+ "@dexto/tools-builtins": "1.6.27"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^22.13.5"