@dexto/core 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.
- package/dist/agent/DextoAgent.cjs +102 -104
- package/dist/agent/DextoAgent.d.ts +11 -10
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +103 -105
- package/dist/agent/error-codes.cjs +1 -0
- package/dist/agent/error-codes.d.ts +1 -0
- package/dist/agent/error-codes.d.ts.map +1 -1
- package/dist/agent/error-codes.js +1 -0
- package/dist/agent/errors.cjs +13 -0
- package/dist/agent/errors.d.ts +6 -0
- package/dist/agent/errors.d.ts.map +1 -1
- package/dist/agent/errors.js +13 -0
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/schemas.d.ts +2 -2
- package/dist/agent/types.d.ts +11 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/approval/factory.cjs +1 -0
- package/dist/approval/factory.d.ts.map +1 -1
- package/dist/approval/factory.js +1 -0
- package/dist/approval/manager.cjs +345 -182
- package/dist/approval/manager.d.ts +45 -31
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +345 -182
- package/dist/approval/schemas.cjs +10 -0
- package/dist/approval/schemas.d.ts +305 -0
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +10 -0
- package/dist/approval/session-approval-store.cjs +91 -0
- package/dist/approval/session-approval-store.d.ts +55 -0
- package/dist/approval/session-approval-store.d.ts.map +1 -0
- package/dist/approval/session-approval-store.js +68 -0
- package/dist/events/index.cjs +210 -75
- package/dist/events/index.d.ts +44 -181
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +206 -74
- package/dist/hooks/manager.cjs +5 -2
- package/dist/hooks/manager.d.ts +2 -0
- package/dist/hooks/manager.d.ts.map +1 -1
- package/dist/hooks/manager.js +5 -2
- package/dist/hooks/types.d.ts +3 -0
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/llm/executor/turn-executor.cjs +15 -7
- package/dist/llm/executor/turn-executor.d.ts +3 -1
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +15 -7
- package/dist/llm/services/factory.cjs +10 -4
- package/dist/llm/services/factory.d.ts +2 -21
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +11 -7
- package/dist/llm/services/types.d.ts +33 -2
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +33 -11
- package/dist/llm/services/vercel.d.ts +6 -3
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +29 -8
- package/dist/logger/default-logger-factory.d.ts +12 -12
- package/dist/logger/v2/schemas.d.ts +6 -6
- package/dist/mcp/manager.cjs +7 -2
- package/dist/mcp/manager.d.ts +3 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +7 -2
- package/dist/mcp/mcp-client.cjs +71 -62
- package/dist/mcp/mcp-client.d.ts +3 -2
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +71 -62
- package/dist/mcp/schemas.d.ts +10 -10
- package/dist/resources/handlers/filesystem-handler.cjs +22 -3
- package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.js +22 -3
- package/dist/runtime/host-runtime.cjs +163 -0
- package/dist/runtime/host-runtime.d.ts +23 -0
- package/dist/runtime/host-runtime.d.ts.map +1 -0
- package/dist/runtime/host-runtime.js +133 -0
- package/dist/runtime/index.cjs +42 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +21 -0
- package/dist/runtime/run-context.cjs +53 -0
- package/dist/runtime/run-context.d.ts +13 -0
- package/dist/runtime/run-context.d.ts.map +1 -0
- package/dist/runtime/run-context.js +34 -0
- package/dist/session/chat-session.cjs +67 -71
- package/dist/session/chat-session.d.ts +25 -25
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +68 -72
- package/dist/session/error-codes.cjs +1 -0
- package/dist/session/error-codes.d.ts +2 -1
- package/dist/session/error-codes.d.ts.map +1 -1
- package/dist/session/error-codes.js +1 -0
- package/dist/session/errors.cjs +13 -0
- package/dist/session/errors.d.ts +6 -0
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +13 -0
- package/dist/session/message-queue-store.cjs +75 -0
- package/dist/session/message-queue-store.d.ts +16 -0
- package/dist/session/message-queue-store.d.ts.map +1 -0
- package/dist/session/message-queue-store.js +52 -0
- package/dist/session/message-queue.cjs +140 -46
- package/dist/session/message-queue.d.ts +18 -6
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/message-queue.js +140 -46
- package/dist/session/session-manager.cjs +130 -25
- package/dist/session/session-manager.d.ts +18 -1
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +130 -25
- package/dist/session/title-generator.cjs +9 -2
- package/dist/session/title-generator.d.ts +2 -0
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +9 -2
- package/dist/telemetry/decorators.cjs +75 -57
- package/dist/telemetry/decorators.d.ts +2 -0
- package/dist/telemetry/decorators.d.ts.map +1 -1
- package/dist/telemetry/decorators.js +75 -57
- package/dist/telemetry/errors.cjs +2 -2
- package/dist/telemetry/errors.js +2 -2
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +3 -1
- package/dist/telemetry/telemetry.cjs +62 -21
- package/dist/telemetry/telemetry.d.ts +14 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -1
- package/dist/telemetry/telemetry.js +62 -21
- package/dist/telemetry/utils.cjs +9 -6
- package/dist/telemetry/utils.d.ts +3 -0
- package/dist/telemetry/utils.d.ts.map +1 -1
- package/dist/telemetry/utils.js +9 -6
- package/dist/test-utils/session-state-stores.cjs +68 -0
- package/dist/test-utils/session-state-stores.js +42 -0
- package/dist/tools/session-tool-preferences-store.cjs +86 -0
- package/dist/tools/session-tool-preferences-store.d.ts +29 -0
- package/dist/tools/session-tool-preferences-store.d.ts.map +1 -0
- package/dist/tools/session-tool-preferences-store.js +63 -0
- package/dist/tools/tool-manager.cjs +223 -68
- package/dist/tools/tool-manager.d.ts +29 -9
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +223 -68
- package/dist/tools/types.d.ts +7 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/service-initializer.cjs +38 -5
- package/dist/utils/service-initializer.d.ts +11 -1
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +36 -4
- package/package.json +1 -1
package/dist/events/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import "../chunk-PTJYTZNU.js";
|
|
2
|
-
import { EventEmitter } from "events";
|
|
3
2
|
const AGENT_EVENT_NAMES = [
|
|
4
3
|
"session:reset",
|
|
5
4
|
"session:created",
|
|
@@ -28,7 +27,7 @@ const AGENT_EVENT_NAMES = [
|
|
|
28
27
|
"tool:background",
|
|
29
28
|
"tool:background-completed"
|
|
30
29
|
];
|
|
31
|
-
const
|
|
30
|
+
const FORWARDED_SESSION_EVENT_NAMES = [
|
|
32
31
|
"llm:thinking",
|
|
33
32
|
"llm:chunk",
|
|
34
33
|
"llm:response",
|
|
@@ -37,7 +36,6 @@ const SESSION_EVENT_NAMES = [
|
|
|
37
36
|
"llm:tool-call-partial",
|
|
38
37
|
"llm:tool-result",
|
|
39
38
|
"llm:error",
|
|
40
|
-
"llm:switched",
|
|
41
39
|
"llm:unsupported-input",
|
|
42
40
|
"tool:running",
|
|
43
41
|
"context:compacting",
|
|
@@ -48,6 +46,11 @@ const SESSION_EVENT_NAMES = [
|
|
|
48
46
|
"message:removed",
|
|
49
47
|
"run:complete"
|
|
50
48
|
];
|
|
49
|
+
const SESSION_ONLY_EVENT_NAMES = ["llm:switched"];
|
|
50
|
+
const SESSION_EVENT_NAMES = [
|
|
51
|
+
...FORWARDED_SESSION_EVENT_NAMES,
|
|
52
|
+
...SESSION_ONLY_EVENT_NAMES
|
|
53
|
+
];
|
|
51
54
|
const EVENT_NAMES = [...AGENT_EVENT_NAMES, ...SESSION_EVENT_NAMES];
|
|
52
55
|
const STREAMING_EVENTS = [
|
|
53
56
|
// LLM events (session-scoped, forwarded to agent bus with sessionId)
|
|
@@ -107,16 +110,48 @@ const SessionEventNames = Object.freeze([
|
|
|
107
110
|
]);
|
|
108
111
|
const EventNames = Object.freeze([...EVENT_NAMES]);
|
|
109
112
|
class BaseTypedEventEmitter {
|
|
110
|
-
|
|
111
|
-
_emitter = new EventEmitter();
|
|
112
|
-
// Store listeners with their abort controllers for cleanup
|
|
113
|
-
// Maps AbortSignal -> Event Name -> Set of listener functions
|
|
113
|
+
_listeners = {};
|
|
114
114
|
_abortListeners = /* @__PURE__ */ new WeakMap();
|
|
115
|
+
getOrCreateListeners(event) {
|
|
116
|
+
let listeners = this._listeners[event];
|
|
117
|
+
if (listeners === void 0) {
|
|
118
|
+
listeners = /* @__PURE__ */ new Set();
|
|
119
|
+
this._listeners[event] = listeners;
|
|
120
|
+
}
|
|
121
|
+
return listeners;
|
|
122
|
+
}
|
|
123
|
+
registerAbortCleanup(signal, cleanup) {
|
|
124
|
+
let cleanups = this._abortListeners.get(signal);
|
|
125
|
+
if (cleanups === void 0) {
|
|
126
|
+
cleanups = /* @__PURE__ */ new Set();
|
|
127
|
+
this._abortListeners.set(signal, cleanups);
|
|
128
|
+
}
|
|
129
|
+
cleanups.add(cleanup);
|
|
130
|
+
signal.addEventListener("abort", cleanup, { once: true });
|
|
131
|
+
}
|
|
132
|
+
unregisterAbortCleanup(signal, cleanup) {
|
|
133
|
+
const cleanups = this._abortListeners.get(signal);
|
|
134
|
+
if (cleanups === void 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
cleanups.delete(cleanup);
|
|
138
|
+
signal.removeEventListener("abort", cleanup);
|
|
139
|
+
if (cleanups.size === 0) {
|
|
140
|
+
this._abortListeners.delete(signal);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
115
143
|
/**
|
|
116
144
|
* Emit an event with type-safe payload
|
|
117
145
|
*/
|
|
118
146
|
emit(event, ...args) {
|
|
119
|
-
|
|
147
|
+
const listeners = this._listeners[event];
|
|
148
|
+
if (listeners === void 0 || listeners.size === 0) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
for (const listener of [...listeners]) {
|
|
152
|
+
listener(...args);
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
120
155
|
}
|
|
121
156
|
/**
|
|
122
157
|
* Subscribe to an event with type-safe listener
|
|
@@ -125,34 +160,15 @@ class BaseTypedEventEmitter {
|
|
|
125
160
|
if (options?.signal?.aborted) {
|
|
126
161
|
return this;
|
|
127
162
|
}
|
|
128
|
-
this.
|
|
163
|
+
const listeners = this.getOrCreateListeners(event);
|
|
164
|
+
listeners.add(listener);
|
|
129
165
|
if (options?.signal) {
|
|
130
166
|
const signal = options.signal;
|
|
131
|
-
|
|
132
|
-
this._abortListeners.set(signal, /* @__PURE__ */ new Map());
|
|
133
|
-
}
|
|
134
|
-
const eventMap = this._abortListeners.get(signal);
|
|
135
|
-
if (!eventMap.has(event)) {
|
|
136
|
-
eventMap.set(event, /* @__PURE__ */ new Set());
|
|
137
|
-
}
|
|
138
|
-
eventMap.get(event).add(listener);
|
|
139
|
-
const abortHandler = () => {
|
|
167
|
+
const cleanup = () => {
|
|
140
168
|
this.off(event, listener);
|
|
141
|
-
|
|
142
|
-
if (eventMap2) {
|
|
143
|
-
const listenerSet = eventMap2.get(event);
|
|
144
|
-
if (listenerSet) {
|
|
145
|
-
listenerSet.delete(listener);
|
|
146
|
-
if (listenerSet.size === 0) {
|
|
147
|
-
eventMap2.delete(event);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (eventMap2.size === 0) {
|
|
151
|
-
this._abortListeners.delete(signal);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
169
|
+
this.unregisterAbortCleanup(signal, cleanup);
|
|
154
170
|
};
|
|
155
|
-
|
|
171
|
+
this.registerAbortCleanup(signal, cleanup);
|
|
156
172
|
}
|
|
157
173
|
return this;
|
|
158
174
|
}
|
|
@@ -163,52 +179,24 @@ class BaseTypedEventEmitter {
|
|
|
163
179
|
if (options?.signal?.aborted) {
|
|
164
180
|
return this;
|
|
165
181
|
}
|
|
182
|
+
let cleanupAbortListener;
|
|
166
183
|
const onceWrapper = (...args) => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
if (listenerSet) {
|
|
172
|
-
listenerSet.delete(onceWrapper);
|
|
173
|
-
if (listenerSet.size === 0) {
|
|
174
|
-
eventMap.delete(event);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (eventMap.size === 0) {
|
|
178
|
-
this._abortListeners.delete(options.signal);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
184
|
+
this.off(event, onceWrapper);
|
|
185
|
+
if (cleanupAbortListener !== void 0 && options?.signal) {
|
|
186
|
+
this.unregisterAbortCleanup(options.signal, cleanupAbortListener);
|
|
187
|
+
cleanupAbortListener = void 0;
|
|
181
188
|
}
|
|
182
189
|
listener(...args);
|
|
183
190
|
};
|
|
184
|
-
this.
|
|
191
|
+
this.getOrCreateListeners(event).add(onceWrapper);
|
|
185
192
|
if (options?.signal) {
|
|
186
193
|
const signal = options.signal;
|
|
187
|
-
|
|
188
|
-
this._abortListeners.set(signal, /* @__PURE__ */ new Map());
|
|
189
|
-
}
|
|
190
|
-
const eventMap = this._abortListeners.get(signal);
|
|
191
|
-
if (!eventMap.has(event)) {
|
|
192
|
-
eventMap.set(event, /* @__PURE__ */ new Set());
|
|
193
|
-
}
|
|
194
|
-
eventMap.get(event).add(onceWrapper);
|
|
195
|
-
const abortHandler = () => {
|
|
194
|
+
const abortCleanup = () => {
|
|
196
195
|
this.off(event, onceWrapper);
|
|
197
|
-
|
|
198
|
-
if (eventMap2) {
|
|
199
|
-
const listenerSet = eventMap2.get(event);
|
|
200
|
-
if (listenerSet) {
|
|
201
|
-
listenerSet.delete(onceWrapper);
|
|
202
|
-
if (listenerSet.size === 0) {
|
|
203
|
-
eventMap2.delete(event);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (eventMap2.size === 0) {
|
|
207
|
-
this._abortListeners.delete(signal);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
196
|
+
this.unregisterAbortCleanup(signal, abortCleanup);
|
|
210
197
|
};
|
|
211
|
-
|
|
198
|
+
cleanupAbortListener = abortCleanup;
|
|
199
|
+
this.registerAbortCleanup(signal, abortCleanup);
|
|
212
200
|
}
|
|
213
201
|
return this;
|
|
214
202
|
}
|
|
@@ -216,14 +204,21 @@ class BaseTypedEventEmitter {
|
|
|
216
204
|
* Unsubscribe from an event
|
|
217
205
|
*/
|
|
218
206
|
off(event, listener) {
|
|
219
|
-
this.
|
|
207
|
+
const listeners = this._listeners[event];
|
|
208
|
+
if (listeners === void 0) {
|
|
209
|
+
return this;
|
|
210
|
+
}
|
|
211
|
+
listeners.delete(listener);
|
|
212
|
+
if (listeners.size === 0) {
|
|
213
|
+
delete this._listeners[event];
|
|
214
|
+
}
|
|
220
215
|
return this;
|
|
221
216
|
}
|
|
222
217
|
/**
|
|
223
218
|
* Configure max listeners for this event bus to avoid noisy warnings when many subscribers exist.
|
|
224
219
|
*/
|
|
225
220
|
setMaxListeners(count) {
|
|
226
|
-
|
|
221
|
+
void count;
|
|
227
222
|
return this;
|
|
228
223
|
}
|
|
229
224
|
}
|
|
@@ -231,9 +226,143 @@ class AgentEventBus extends BaseTypedEventEmitter {
|
|
|
231
226
|
}
|
|
232
227
|
class SessionEventBus extends BaseTypedEventEmitter {
|
|
233
228
|
}
|
|
234
|
-
class TypedEventEmitter extends
|
|
229
|
+
class TypedEventEmitter extends AgentEventBus {
|
|
235
230
|
}
|
|
236
231
|
const eventBus = new TypedEventEmitter().setMaxListeners(200);
|
|
232
|
+
function withForwardedSessionContext(payload, sessionId, hostRuntime) {
|
|
233
|
+
if (payload.hostRuntime !== void 0 || hostRuntime === void 0) {
|
|
234
|
+
return {
|
|
235
|
+
...payload,
|
|
236
|
+
sessionId
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
...payload,
|
|
241
|
+
sessionId,
|
|
242
|
+
hostRuntime
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function forwardSessionEventsToAgentBus({
|
|
246
|
+
sessionEventBus,
|
|
247
|
+
agentEventBus,
|
|
248
|
+
sessionId,
|
|
249
|
+
hostRuntime
|
|
250
|
+
}) {
|
|
251
|
+
const cleanups = [];
|
|
252
|
+
const on = (event, listener) => {
|
|
253
|
+
sessionEventBus.on(event, listener);
|
|
254
|
+
cleanups.push(() => {
|
|
255
|
+
sessionEventBus.off(event, listener);
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
on("llm:thinking", (payload) => {
|
|
259
|
+
agentEventBus.emit(
|
|
260
|
+
"llm:thinking",
|
|
261
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
262
|
+
);
|
|
263
|
+
});
|
|
264
|
+
on("llm:chunk", (payload) => {
|
|
265
|
+
agentEventBus.emit(
|
|
266
|
+
"llm:chunk",
|
|
267
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
268
|
+
);
|
|
269
|
+
});
|
|
270
|
+
on("llm:response", (payload) => {
|
|
271
|
+
agentEventBus.emit(
|
|
272
|
+
"llm:response",
|
|
273
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
274
|
+
);
|
|
275
|
+
});
|
|
276
|
+
on("llm:rate-limit-status", (payload) => {
|
|
277
|
+
agentEventBus.emit(
|
|
278
|
+
"llm:rate-limit-status",
|
|
279
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
280
|
+
);
|
|
281
|
+
});
|
|
282
|
+
on("llm:tool-call", (payload) => {
|
|
283
|
+
agentEventBus.emit(
|
|
284
|
+
"llm:tool-call",
|
|
285
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
286
|
+
);
|
|
287
|
+
});
|
|
288
|
+
on("llm:tool-call-partial", (payload) => {
|
|
289
|
+
agentEventBus.emit(
|
|
290
|
+
"llm:tool-call-partial",
|
|
291
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
292
|
+
);
|
|
293
|
+
});
|
|
294
|
+
on("llm:tool-result", (payload) => {
|
|
295
|
+
agentEventBus.emit(
|
|
296
|
+
"llm:tool-result",
|
|
297
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
298
|
+
);
|
|
299
|
+
});
|
|
300
|
+
on("llm:error", (payload) => {
|
|
301
|
+
agentEventBus.emit(
|
|
302
|
+
"llm:error",
|
|
303
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
304
|
+
);
|
|
305
|
+
});
|
|
306
|
+
on("llm:unsupported-input", (payload) => {
|
|
307
|
+
agentEventBus.emit(
|
|
308
|
+
"llm:unsupported-input",
|
|
309
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
310
|
+
);
|
|
311
|
+
});
|
|
312
|
+
on("tool:running", (payload) => {
|
|
313
|
+
agentEventBus.emit(
|
|
314
|
+
"tool:running",
|
|
315
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
316
|
+
);
|
|
317
|
+
});
|
|
318
|
+
on("context:compacting", (payload) => {
|
|
319
|
+
agentEventBus.emit(
|
|
320
|
+
"context:compacting",
|
|
321
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
322
|
+
);
|
|
323
|
+
});
|
|
324
|
+
on("context:compacted", (payload) => {
|
|
325
|
+
agentEventBus.emit(
|
|
326
|
+
"context:compacted",
|
|
327
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
328
|
+
);
|
|
329
|
+
});
|
|
330
|
+
on("context:pruned", (payload) => {
|
|
331
|
+
agentEventBus.emit(
|
|
332
|
+
"context:pruned",
|
|
333
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
334
|
+
);
|
|
335
|
+
});
|
|
336
|
+
on("message:queued", (payload) => {
|
|
337
|
+
agentEventBus.emit(
|
|
338
|
+
"message:queued",
|
|
339
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
340
|
+
);
|
|
341
|
+
});
|
|
342
|
+
on("message:dequeued", (payload) => {
|
|
343
|
+
agentEventBus.emit(
|
|
344
|
+
"message:dequeued",
|
|
345
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
346
|
+
);
|
|
347
|
+
});
|
|
348
|
+
on("message:removed", (payload) => {
|
|
349
|
+
agentEventBus.emit(
|
|
350
|
+
"message:removed",
|
|
351
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
352
|
+
);
|
|
353
|
+
});
|
|
354
|
+
on("run:complete", (payload) => {
|
|
355
|
+
agentEventBus.emit(
|
|
356
|
+
"run:complete",
|
|
357
|
+
withForwardedSessionContext(payload, sessionId, hostRuntime)
|
|
358
|
+
);
|
|
359
|
+
});
|
|
360
|
+
return () => {
|
|
361
|
+
for (const cleanup of cleanups) {
|
|
362
|
+
cleanup();
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
237
366
|
export {
|
|
238
367
|
AGENT_EVENT_NAMES,
|
|
239
368
|
AgentEventBus,
|
|
@@ -241,11 +370,14 @@ export {
|
|
|
241
370
|
BaseTypedEventEmitter,
|
|
242
371
|
EVENT_NAMES,
|
|
243
372
|
EventNames,
|
|
373
|
+
FORWARDED_SESSION_EVENT_NAMES,
|
|
244
374
|
INTEGRATION_EVENTS,
|
|
245
375
|
SESSION_EVENT_NAMES,
|
|
376
|
+
SESSION_ONLY_EVENT_NAMES,
|
|
246
377
|
STREAMING_EVENTS,
|
|
247
378
|
SessionEventBus,
|
|
248
379
|
SessionEventNames,
|
|
249
380
|
TypedEventEmitter,
|
|
250
|
-
eventBus
|
|
381
|
+
eventBus,
|
|
382
|
+
forwardSessionEventsToAgentBus
|
|
251
383
|
};
|
package/dist/hooks/manager.cjs
CHANGED
|
@@ -131,11 +131,14 @@ class HookManager {
|
|
|
131
131
|
}
|
|
132
132
|
let currentPayload = { ...payload };
|
|
133
133
|
const asyncCtx = (0, import_async_context.getContext)();
|
|
134
|
-
const
|
|
134
|
+
const sessionId = options.runContext?.sessionId ?? options.sessionId;
|
|
135
|
+
const runtimeConfig = options.stateManager.getRuntimeConfig(sessionId);
|
|
136
|
+
const llmConfig = runtimeConfig.llm;
|
|
135
137
|
const context = {
|
|
136
|
-
sessionId:
|
|
138
|
+
sessionId: sessionId ?? void 0,
|
|
137
139
|
userId: asyncCtx?.userId ?? void 0,
|
|
138
140
|
tenantId: asyncCtx?.tenantId ?? void 0,
|
|
141
|
+
hostRuntime: options.runContext?.hostRuntime,
|
|
139
142
|
llmConfig,
|
|
140
143
|
logger: this.logger,
|
|
141
144
|
abortSignal: options.abortSignal ?? void 0,
|
package/dist/hooks/manager.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { MCPManager } from '../mcp/manager.js';
|
|
|
6
6
|
import type { ToolManager } from '../tools/tool-manager.js';
|
|
7
7
|
import type { AgentStateManager } from '../agent/state-manager.js';
|
|
8
8
|
import type { Logger } from '../logger/v2/types.js';
|
|
9
|
+
import type { AgentRunContext } from '../runtime/run-context.js';
|
|
9
10
|
/**
|
|
10
11
|
* Options for HookManager construction.
|
|
11
12
|
*/
|
|
@@ -22,6 +23,7 @@ export interface HookExecutionContextOptions {
|
|
|
22
23
|
mcpManager: MCPManager;
|
|
23
24
|
toolManager: ToolManager;
|
|
24
25
|
stateManager: AgentStateManager;
|
|
26
|
+
runContext?: AgentRunContext | undefined;
|
|
25
27
|
sessionId?: string;
|
|
26
28
|
abortSignal?: AbortSignal;
|
|
27
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/hooks/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAwB,IAAI,EAAc,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/hooks/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAwB,IAAI,EAAc,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,iBAAiB,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,qBAAqB,CAA0C;IACvE,OAAO,CAAC,kBAAkB,CAAwC;IAClE,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAS;IAEvB,wDAAwD;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAEnC,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM;IAOtE;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAkB7B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;;;;;;;;OASG;IACG,YAAY,CAAC,CAAC,SAAS,MAAM,EAC/B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,2BAA2B,GACrC,OAAO,CAAC,CAAC,CAAC;IAwKb;;;OAGG;YACW,kBAAkB;IA8BhC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B;;OAEG;IACH,QAAQ,IAAI;QACR,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;KACpD;IAaD;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,oBAAoB;CAsB/B"}
|
package/dist/hooks/manager.js
CHANGED
|
@@ -109,11 +109,14 @@ class HookManager {
|
|
|
109
109
|
}
|
|
110
110
|
let currentPayload = { ...payload };
|
|
111
111
|
const asyncCtx = getContext();
|
|
112
|
-
const
|
|
112
|
+
const sessionId = options.runContext?.sessionId ?? options.sessionId;
|
|
113
|
+
const runtimeConfig = options.stateManager.getRuntimeConfig(sessionId);
|
|
114
|
+
const llmConfig = runtimeConfig.llm;
|
|
113
115
|
const context = {
|
|
114
|
-
sessionId:
|
|
116
|
+
sessionId: sessionId ?? void 0,
|
|
115
117
|
userId: asyncCtx?.userId ?? void 0,
|
|
116
118
|
tenantId: asyncCtx?.tenantId ?? void 0,
|
|
119
|
+
hostRuntime: options.runContext?.hostRuntime,
|
|
117
120
|
llmConfig,
|
|
118
121
|
logger: this.logger,
|
|
119
122
|
abortSignal: options.abortSignal ?? void 0,
|
package/dist/hooks/types.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { ToolManager } from '../tools/tool-manager.js';
|
|
|
6
6
|
import type { AgentStateManager } from '../agent/state-manager.js';
|
|
7
7
|
import type { AgentEventBus } from '../events/index.js';
|
|
8
8
|
import type { StorageManager } from '../storage/index.js';
|
|
9
|
+
import type { HostRuntimeContext } from '../runtime/index.js';
|
|
9
10
|
/**
|
|
10
11
|
* Extension point names - fixed for MVP
|
|
11
12
|
* These are the 4 hook sites from PR #385 converted to generic hook extension points.
|
|
@@ -46,6 +47,8 @@ export interface HookExecutionContext {
|
|
|
46
47
|
userId?: string | undefined;
|
|
47
48
|
/** Tenant ID (set by application layer for multi-tenant deployments via AsyncLocalStorage) */
|
|
48
49
|
tenantId?: string | undefined;
|
|
50
|
+
/** Host-owned runtime IDs for orchestration and correlation */
|
|
51
|
+
hostRuntime?: HostRuntimeContext | undefined;
|
|
49
52
|
/** Current LLM configuration */
|
|
50
53
|
llmConfig: ValidatedLLMConfig;
|
|
51
54
|
/** Logger scoped to this hook execution */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export type { ContributorConfig, SystemPromptConfig } from './systemPrompt/schem
|
|
|
22
22
|
export type { SearchOptions, SearchResult, SessionSearchResult, SearchResponse, SessionSearchResponse, } from './search/types.js';
|
|
23
23
|
export type { AgentEventMap, SessionEventMap } from './events/index.js';
|
|
24
24
|
export type { ToolCallMetadata } from './tools/tool-call-metadata.js';
|
|
25
|
+
export type { HostRuntimeContext, HostRuntimeIds } from './runtime/host-runtime.js';
|
|
25
26
|
export type { ModelInfo, ProviderInfo } from './llm/registry/index.js';
|
|
26
27
|
export type { SupportedFileType } from './llm/types.js';
|
|
27
28
|
export type { ResourceMetadata } from './resources/types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1D,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGzE,YAAY,EACR,eAAe,EACf,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,EACd,WAAW,EACX,QAAQ,EACR,kBAAkB,GACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG/E,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,GAC9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,GAChC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,GACf,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGvF,YAAY,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1D,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGzE,YAAY,EACR,eAAe,EACf,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,EACd,WAAW,EACX,QAAQ,EACR,kBAAkB,GACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACH,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG/E,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,GAC9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,GAChC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,GACf,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGvF,YAAY,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpF,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EACH,uBAAuB,EACvB,yBAAyB,GAC5B,MAAM,iCAAiC,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -44,6 +44,7 @@ __reExport(index_exports, require("./memory/index.js"), module.exports);
|
|
|
44
44
|
__reExport(index_exports, require("./hooks/index.js"), module.exports);
|
|
45
45
|
__reExport(index_exports, require("./workspace/index.js"), module.exports);
|
|
46
46
|
__reExport(index_exports, require("./telemetry/index.js"), module.exports);
|
|
47
|
+
__reExport(index_exports, require("./runtime/index.js"), module.exports);
|
|
47
48
|
// Annotate the CommonJS export names for ESM import in node:
|
|
48
49
|
0 && (module.exports = {
|
|
49
50
|
getFileMediaKind,
|
|
@@ -67,5 +68,6 @@ __reExport(index_exports, require("./telemetry/index.js"), module.exports);
|
|
|
67
68
|
...require("./memory/index.js"),
|
|
68
69
|
...require("./hooks/index.js"),
|
|
69
70
|
...require("./workspace/index.js"),
|
|
70
|
-
...require("./telemetry/index.js")
|
|
71
|
+
...require("./telemetry/index.js"),
|
|
72
|
+
...require("./runtime/index.js")
|
|
71
73
|
});
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,cAAc,kBAAkB,CAAC;AAUjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,cAAc,kBAAkB,CAAC;AAUjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -90,7 +90,7 @@ var import_codex_base_url = require("../providers/codex-base-url.js");
|
|
|
90
90
|
const toolSupportCache = /* @__PURE__ */ new Map();
|
|
91
91
|
const LOCAL_PROVIDERS = ["ollama", "local"];
|
|
92
92
|
class TurnExecutor {
|
|
93
|
-
constructor(model, toolManager, contextManager, eventBus, resourceManager, sessionId, config, llmContext, logger, messageQueue, modelLimits, externalSignal, compactionStrategy = null) {
|
|
93
|
+
constructor(model, toolManager, contextManager, eventBus, resourceManager, sessionId, config, llmContext, logger, messageQueue, modelLimits, externalSignal, compactionStrategy = null, runContext) {
|
|
94
94
|
this.model = model;
|
|
95
95
|
this.toolManager = toolManager;
|
|
96
96
|
this.contextManager = contextManager;
|
|
@@ -102,6 +102,7 @@ class TurnExecutor {
|
|
|
102
102
|
this.messageQueue = messageQueue;
|
|
103
103
|
this.modelLimits = modelLimits;
|
|
104
104
|
this.externalSignal = externalSignal;
|
|
105
|
+
this.runContext = runContext;
|
|
105
106
|
this.logger = logger.createChild(import_types3.DextoLogComponent.EXECUTOR);
|
|
106
107
|
this.stepAbortController = new AbortController();
|
|
107
108
|
this.compactionStrategy = compactionStrategy;
|
|
@@ -154,7 +155,7 @@ class TurnExecutor {
|
|
|
154
155
|
let lastStepTokens = null;
|
|
155
156
|
let lastFinishReason = "unknown";
|
|
156
157
|
let lastText = "";
|
|
157
|
-
this.eventBus.emit("llm:thinking");
|
|
158
|
+
this.eventBus.emit("llm:thinking", {});
|
|
158
159
|
const supportsTools = await this.validateToolSupport();
|
|
159
160
|
if (!supportsTools) {
|
|
160
161
|
const modelKey = `${this.llmContext.provider}:${this.llmContext.model}`;
|
|
@@ -187,7 +188,7 @@ class TurnExecutor {
|
|
|
187
188
|
once: true
|
|
188
189
|
});
|
|
189
190
|
}
|
|
190
|
-
const coalesced = this.messageQueue.dequeueAll();
|
|
191
|
+
const coalesced = await this.messageQueue.dequeueAll();
|
|
191
192
|
if (coalesced) {
|
|
192
193
|
await this.injectQueuedMessages(coalesced);
|
|
193
194
|
}
|
|
@@ -320,7 +321,7 @@ class TurnExecutor {
|
|
|
320
321
|
);
|
|
321
322
|
}
|
|
322
323
|
if (result.finishReason !== "tool-calls") {
|
|
323
|
-
const queuedOnTerminate = this.messageQueue.dequeueAll();
|
|
324
|
+
const queuedOnTerminate = await this.messageQueue.dequeueAll();
|
|
324
325
|
if (queuedOnTerminate) {
|
|
325
326
|
this.logger.debug(
|
|
326
327
|
`Continuing: ${queuedOnTerminate.messages.length} queued message(s) to process`
|
|
@@ -531,8 +532,11 @@ class TurnExecutor {
|
|
|
531
532
|
name,
|
|
532
533
|
args,
|
|
533
534
|
options.toolCallId,
|
|
534
|
-
|
|
535
|
-
|
|
535
|
+
{
|
|
536
|
+
sessionId: this.sessionId,
|
|
537
|
+
abortSignal,
|
|
538
|
+
...this.runContext !== void 0 ? { runContext: this.runContext } : {}
|
|
539
|
+
}
|
|
536
540
|
);
|
|
537
541
|
const metadata = (() => {
|
|
538
542
|
const meta = {};
|
|
@@ -757,7 +761,11 @@ class TurnExecutor {
|
|
|
757
761
|
if (!this.stepAbortController.signal.aborted) {
|
|
758
762
|
this.stepAbortController.abort();
|
|
759
763
|
}
|
|
760
|
-
this.messageQueue.clear()
|
|
764
|
+
void this.messageQueue.clear().catch((error) => {
|
|
765
|
+
this.logger.warn(
|
|
766
|
+
`Failed to clear queued follow-up messages during cleanup: ${error instanceof Error ? error.message : String(error)}`
|
|
767
|
+
);
|
|
768
|
+
});
|
|
761
769
|
}
|
|
762
770
|
/**
|
|
763
771
|
* Check if context should be compacted based on estimated token count.
|
|
@@ -10,6 +10,7 @@ import { DynamicContributorContext } from '../../systemPrompt/types.js';
|
|
|
10
10
|
import type { MessageQueueService } from '../../session/message-queue.js';
|
|
11
11
|
import type { CompactionStrategy } from '../../context/compaction/types.js';
|
|
12
12
|
import type { ModelLimits } from '../../context/compaction/overflow.js';
|
|
13
|
+
import type { AgentRunContext } from '../../runtime/run-context.js';
|
|
13
14
|
/**
|
|
14
15
|
* TurnExecutor orchestrates the agent loop using `stopWhen: stepCountIs(1)`.
|
|
15
16
|
*
|
|
@@ -34,6 +35,7 @@ export declare class TurnExecutor {
|
|
|
34
35
|
private messageQueue;
|
|
35
36
|
private modelLimits?;
|
|
36
37
|
private externalSignal?;
|
|
38
|
+
private runContext?;
|
|
37
39
|
private logger;
|
|
38
40
|
/**
|
|
39
41
|
* Per-step abort controller. Created fresh for each iteration of the loop.
|
|
@@ -53,7 +55,7 @@ export declare class TurnExecutor {
|
|
|
53
55
|
baseURL?: string | undefined;
|
|
54
56
|
usageScopeId?: string | undefined;
|
|
55
57
|
reasoning?: LLMReasoningConfig | undefined;
|
|
56
|
-
}, llmContext: LLMContext, logger: Logger, messageQueue: MessageQueueService, modelLimits?: ModelLimits | undefined, externalSignal?: AbortSignal | undefined, compactionStrategy?: CompactionStrategy | null);
|
|
58
|
+
}, llmContext: LLMContext, logger: Logger, messageQueue: MessageQueueService, modelLimits?: ModelLimits | undefined, externalSignal?: AbortSignal | undefined, compactionStrategy?: CompactionStrategy | null, runContext?: AgentRunContext | undefined);
|
|
57
59
|
/**
|
|
58
60
|
* Get StreamProcessor config from TurnExecutor state.
|
|
59
61
|
* @param estimatedInputTokens Optional estimated input tokens for analytics
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAMb,KAAK,YAAY,EAEpB,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAER,kBAAkB,EAClB,UAAU,EAGb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAQ1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-executor.d.ts","sourceRoot":"","sources":["../../../src/llm/executor/turn-executor.ts"],"names":[],"mappings":"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"}
|