llmist 3.1.0 → 4.0.0
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/{chunk-LFI4WQVV.js → chunk-Q6NQRMYD.js} +2 -2
- package/dist/chunk-Q6NQRMYD.js.map +1 -0
- package/dist/{chunk-JCFPJMRQ.js → chunk-RHR2M6T6.js} +138 -35
- package/dist/chunk-RHR2M6T6.js.map +1 -0
- package/dist/cli.cjs +231 -78
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +96 -46
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +137 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +2 -2
- package/dist/{mock-stream-CTLm00_q.d.cts → mock-stream-BvNYtrlG.d.cts} +83 -23
- package/dist/{mock-stream-CTLm00_q.d.ts → mock-stream-BvNYtrlG.d.ts} +83 -23
- package/dist/testing/index.cjs +137 -34
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +2 -2
- package/dist/testing/index.d.ts +2 -2
- package/dist/testing/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-JCFPJMRQ.js.map +0 -1
- package/dist/chunk-LFI4WQVV.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -3562,7 +3562,7 @@ var init_executor = __esm({
|
|
|
3562
3562
|
init_exceptions();
|
|
3563
3563
|
init_parser();
|
|
3564
3564
|
GadgetExecutor = class {
|
|
3565
|
-
constructor(registry, requestHumanInput, logger, defaultGadgetTimeoutMs, errorFormatterOptions, client, mediaStore, agentConfig, subagentConfig,
|
|
3565
|
+
constructor(registry, requestHumanInput, logger, defaultGadgetTimeoutMs, errorFormatterOptions, client, mediaStore, agentConfig, subagentConfig, onSubagentEvent) {
|
|
3566
3566
|
this.registry = registry;
|
|
3567
3567
|
this.requestHumanInput = requestHumanInput;
|
|
3568
3568
|
this.defaultGadgetTimeoutMs = defaultGadgetTimeoutMs;
|
|
@@ -3570,7 +3570,7 @@ var init_executor = __esm({
|
|
|
3570
3570
|
this.mediaStore = mediaStore;
|
|
3571
3571
|
this.agentConfig = agentConfig;
|
|
3572
3572
|
this.subagentConfig = subagentConfig;
|
|
3573
|
-
this.
|
|
3573
|
+
this.onSubagentEvent = onSubagentEvent;
|
|
3574
3574
|
this.logger = logger ?? createLogger({ name: "llmist:executor" });
|
|
3575
3575
|
this.errorFormatter = new GadgetExecutionErrorFormatter(errorFormatterOptions);
|
|
3576
3576
|
this.argPrefix = errorFormatterOptions?.argPrefix ?? GADGET_ARG_PREFIX;
|
|
@@ -3718,7 +3718,7 @@ var init_executor = __esm({
|
|
|
3718
3718
|
agentConfig: this.agentConfig,
|
|
3719
3719
|
subagentConfig: this.subagentConfig,
|
|
3720
3720
|
invocationId: call.invocationId,
|
|
3721
|
-
|
|
3721
|
+
onSubagentEvent: this.onSubagentEvent
|
|
3722
3722
|
};
|
|
3723
3723
|
let rawResult;
|
|
3724
3724
|
if (timeoutMs && timeoutMs > 0) {
|
|
@@ -3958,7 +3958,7 @@ var init_stream_processor = __esm({
|
|
|
3958
3958
|
options.mediaStore,
|
|
3959
3959
|
options.agentConfig,
|
|
3960
3960
|
options.subagentConfig,
|
|
3961
|
-
options.
|
|
3961
|
+
options.onSubagentEvent
|
|
3962
3962
|
);
|
|
3963
3963
|
}
|
|
3964
3964
|
/**
|
|
@@ -4917,8 +4917,12 @@ var init_agent = __esm({
|
|
|
4917
4917
|
// Subagent configuration
|
|
4918
4918
|
agentContextConfig;
|
|
4919
4919
|
subagentConfig;
|
|
4920
|
-
//
|
|
4921
|
-
|
|
4920
|
+
// Subagent event callback for subagent gadgets
|
|
4921
|
+
userSubagentEventCallback;
|
|
4922
|
+
// Internal queue for yielding subagent events in run()
|
|
4923
|
+
pendingSubagentEvents = [];
|
|
4924
|
+
// Combined callback that queues events AND calls user callback
|
|
4925
|
+
onSubagentEvent;
|
|
4922
4926
|
/**
|
|
4923
4927
|
* Creates a new Agent instance.
|
|
4924
4928
|
* @internal This constructor is private. Use LLMist.createAgent() or AgentBuilder instead.
|
|
@@ -4996,7 +5000,71 @@ var init_agent = __esm({
|
|
|
4996
5000
|
temperature: this.temperature
|
|
4997
5001
|
};
|
|
4998
5002
|
this.subagentConfig = options.subagentConfig;
|
|
4999
|
-
this.
|
|
5003
|
+
this.userSubagentEventCallback = options.onSubagentEvent;
|
|
5004
|
+
this.onSubagentEvent = (event) => {
|
|
5005
|
+
this.pendingSubagentEvents.push(event);
|
|
5006
|
+
this.userSubagentEventCallback?.(event);
|
|
5007
|
+
const subagentContext = {
|
|
5008
|
+
parentGadgetInvocationId: event.gadgetInvocationId,
|
|
5009
|
+
depth: event.depth
|
|
5010
|
+
};
|
|
5011
|
+
if (event.type === "llm_call_start") {
|
|
5012
|
+
const info = event.event;
|
|
5013
|
+
void this.hooks?.observers?.onLLMCallStart?.({
|
|
5014
|
+
iteration: info.iteration,
|
|
5015
|
+
options: { model: info.model, messages: [] },
|
|
5016
|
+
logger: this.logger,
|
|
5017
|
+
subagentContext
|
|
5018
|
+
});
|
|
5019
|
+
} else if (event.type === "llm_call_end") {
|
|
5020
|
+
const info = event.event;
|
|
5021
|
+
void this.hooks?.observers?.onLLMCallComplete?.({
|
|
5022
|
+
iteration: info.iteration,
|
|
5023
|
+
options: { model: info.model, messages: [] },
|
|
5024
|
+
finishReason: info.finishReason ?? null,
|
|
5025
|
+
usage: info.outputTokens ? {
|
|
5026
|
+
inputTokens: info.inputTokens ?? 0,
|
|
5027
|
+
outputTokens: info.outputTokens,
|
|
5028
|
+
totalTokens: (info.inputTokens ?? 0) + info.outputTokens
|
|
5029
|
+
} : void 0,
|
|
5030
|
+
rawResponse: "",
|
|
5031
|
+
finalMessage: "",
|
|
5032
|
+
logger: this.logger,
|
|
5033
|
+
subagentContext
|
|
5034
|
+
});
|
|
5035
|
+
} else if (event.type === "gadget_call") {
|
|
5036
|
+
const gadgetEvent = event.event;
|
|
5037
|
+
void this.hooks?.observers?.onGadgetExecutionStart?.({
|
|
5038
|
+
iteration: 0,
|
|
5039
|
+
gadgetName: gadgetEvent.call.gadgetName,
|
|
5040
|
+
invocationId: gadgetEvent.call.invocationId,
|
|
5041
|
+
parameters: gadgetEvent.call.parameters ?? {},
|
|
5042
|
+
logger: this.logger,
|
|
5043
|
+
subagentContext
|
|
5044
|
+
});
|
|
5045
|
+
} else if (event.type === "gadget_result") {
|
|
5046
|
+
const resultEvent = event.event;
|
|
5047
|
+
void this.hooks?.observers?.onGadgetExecutionComplete?.({
|
|
5048
|
+
iteration: 0,
|
|
5049
|
+
gadgetName: resultEvent.result.gadgetName ?? "unknown",
|
|
5050
|
+
invocationId: resultEvent.result.invocationId,
|
|
5051
|
+
parameters: {},
|
|
5052
|
+
executionTimeMs: resultEvent.result.executionTimeMs ?? 0,
|
|
5053
|
+
logger: this.logger,
|
|
5054
|
+
subagentContext
|
|
5055
|
+
});
|
|
5056
|
+
}
|
|
5057
|
+
};
|
|
5058
|
+
}
|
|
5059
|
+
/**
|
|
5060
|
+
* Flush pending subagent events as StreamEvents.
|
|
5061
|
+
* Called from run() to yield queued subagent events from subagent gadgets.
|
|
5062
|
+
*/
|
|
5063
|
+
*flushPendingSubagentEvents() {
|
|
5064
|
+
while (this.pendingSubagentEvents.length > 0) {
|
|
5065
|
+
const event = this.pendingSubagentEvents.shift();
|
|
5066
|
+
yield { type: "subagent_event", subagentEvent: event };
|
|
5067
|
+
}
|
|
5000
5068
|
}
|
|
5001
5069
|
/**
|
|
5002
5070
|
* Get the gadget registry for this agent.
|
|
@@ -5228,7 +5296,7 @@ var init_agent = __esm({
|
|
|
5228
5296
|
mediaStore: this.mediaStore,
|
|
5229
5297
|
agentConfig: this.agentContextConfig,
|
|
5230
5298
|
subagentConfig: this.subagentConfig,
|
|
5231
|
-
|
|
5299
|
+
onSubagentEvent: this.onSubagentEvent
|
|
5232
5300
|
});
|
|
5233
5301
|
let streamMetadata = null;
|
|
5234
5302
|
let gadgetCallCount = 0;
|
|
@@ -5246,6 +5314,7 @@ var init_agent = __esm({
|
|
|
5246
5314
|
gadgetResults.push(event);
|
|
5247
5315
|
}
|
|
5248
5316
|
yield event;
|
|
5317
|
+
yield* this.flushPendingSubagentEvents();
|
|
5249
5318
|
}
|
|
5250
5319
|
if (!streamMetadata) {
|
|
5251
5320
|
throw new Error("Stream processing completed without metadata event");
|
|
@@ -8822,7 +8891,7 @@ var init_builder = __esm({
|
|
|
8822
8891
|
signal;
|
|
8823
8892
|
trailingMessage;
|
|
8824
8893
|
subagentConfig;
|
|
8825
|
-
|
|
8894
|
+
subagentEventCallback;
|
|
8826
8895
|
parentContext;
|
|
8827
8896
|
constructor(client) {
|
|
8828
8897
|
this.client = client;
|
|
@@ -9321,38 +9390,38 @@ var init_builder = __esm({
|
|
|
9321
9390
|
return this;
|
|
9322
9391
|
}
|
|
9323
9392
|
/**
|
|
9324
|
-
* Set the callback for
|
|
9393
|
+
* Set the callback for subagent events.
|
|
9325
9394
|
*
|
|
9326
|
-
* Subagent gadgets (like BrowseWeb) can use ExecutionContext.
|
|
9395
|
+
* Subagent gadgets (like BrowseWeb) can use ExecutionContext.onSubagentEvent
|
|
9327
9396
|
* to report their internal LLM calls and gadget executions in real-time.
|
|
9328
9397
|
* This callback receives those events, enabling hierarchical progress display.
|
|
9329
9398
|
*
|
|
9330
|
-
* @param callback - Function to handle
|
|
9399
|
+
* @param callback - Function to handle subagent events
|
|
9331
9400
|
* @returns This builder for chaining
|
|
9332
9401
|
*
|
|
9333
9402
|
* @example
|
|
9334
9403
|
* ```typescript
|
|
9335
|
-
* .
|
|
9404
|
+
* .withSubagentEventCallback((event) => {
|
|
9336
9405
|
* if (event.type === "llm_call_start") {
|
|
9337
|
-
* console.log(`
|
|
9406
|
+
* console.log(` Subagent LLM #${event.event.iteration} starting...`);
|
|
9338
9407
|
* } else if (event.type === "gadget_call") {
|
|
9339
9408
|
* console.log(` ⏵ ${event.event.call.gadgetName}...`);
|
|
9340
9409
|
* }
|
|
9341
9410
|
* })
|
|
9342
9411
|
* ```
|
|
9343
9412
|
*/
|
|
9344
|
-
|
|
9345
|
-
this.
|
|
9413
|
+
withSubagentEventCallback(callback) {
|
|
9414
|
+
this.subagentEventCallback = callback;
|
|
9346
9415
|
return this;
|
|
9347
9416
|
}
|
|
9348
9417
|
/**
|
|
9349
|
-
* Enable automatic
|
|
9418
|
+
* Enable automatic subagent event forwarding to parent agent.
|
|
9350
9419
|
*
|
|
9351
9420
|
* When building a subagent inside a gadget, call this method to automatically
|
|
9352
9421
|
* forward all LLM calls and gadget events to the parent agent. This enables
|
|
9353
9422
|
* hierarchical progress display without any manual event handling.
|
|
9354
9423
|
*
|
|
9355
|
-
* The method extracts `invocationId` and `
|
|
9424
|
+
* The method extracts `invocationId` and `onSubagentEvent` from the execution
|
|
9356
9425
|
* context and sets up automatic forwarding via hooks and event wrapping.
|
|
9357
9426
|
*
|
|
9358
9427
|
* @param ctx - ExecutionContext passed to the gadget's execute() method
|
|
@@ -9379,10 +9448,10 @@ var init_builder = __esm({
|
|
|
9379
9448
|
* ```
|
|
9380
9449
|
*/
|
|
9381
9450
|
withParentContext(ctx, depth = 1) {
|
|
9382
|
-
if (ctx.
|
|
9451
|
+
if (ctx.onSubagentEvent && ctx.invocationId) {
|
|
9383
9452
|
this.parentContext = {
|
|
9384
9453
|
invocationId: ctx.invocationId,
|
|
9385
|
-
|
|
9454
|
+
onSubagentEvent: ctx.onSubagentEvent,
|
|
9386
9455
|
depth
|
|
9387
9456
|
};
|
|
9388
9457
|
}
|
|
@@ -9457,20 +9526,22 @@ ${endPrefix}`
|
|
|
9457
9526
|
/**
|
|
9458
9527
|
* Compose the final hooks, including:
|
|
9459
9528
|
* - Trailing message injection (if configured)
|
|
9460
|
-
* -
|
|
9529
|
+
* - Subagent event forwarding for LLM calls (if parentContext is set)
|
|
9461
9530
|
*/
|
|
9462
9531
|
composeHooks() {
|
|
9463
9532
|
let hooks = this.hooks;
|
|
9464
9533
|
if (this.parentContext) {
|
|
9465
|
-
const { invocationId,
|
|
9534
|
+
const { invocationId, onSubagentEvent, depth } = this.parentContext;
|
|
9466
9535
|
const existingOnLLMCallStart = hooks?.observers?.onLLMCallStart;
|
|
9467
9536
|
const existingOnLLMCallComplete = hooks?.observers?.onLLMCallComplete;
|
|
9537
|
+
const existingOnGadgetExecutionStart = hooks?.observers?.onGadgetExecutionStart;
|
|
9538
|
+
const existingOnGadgetExecutionComplete = hooks?.observers?.onGadgetExecutionComplete;
|
|
9468
9539
|
hooks = {
|
|
9469
9540
|
...hooks,
|
|
9470
9541
|
observers: {
|
|
9471
9542
|
...hooks?.observers,
|
|
9472
9543
|
onLLMCallStart: async (context) => {
|
|
9473
|
-
|
|
9544
|
+
onSubagentEvent({
|
|
9474
9545
|
type: "llm_call_start",
|
|
9475
9546
|
gadgetInvocationId: invocationId,
|
|
9476
9547
|
depth,
|
|
@@ -9484,7 +9555,7 @@ ${endPrefix}`
|
|
|
9484
9555
|
}
|
|
9485
9556
|
},
|
|
9486
9557
|
onLLMCallComplete: async (context) => {
|
|
9487
|
-
|
|
9558
|
+
onSubagentEvent({
|
|
9488
9559
|
type: "llm_call_end",
|
|
9489
9560
|
gadgetInvocationId: invocationId,
|
|
9490
9561
|
depth,
|
|
@@ -9498,6 +9569,38 @@ ${endPrefix}`
|
|
|
9498
9569
|
if (existingOnLLMCallComplete) {
|
|
9499
9570
|
await existingOnLLMCallComplete(context);
|
|
9500
9571
|
}
|
|
9572
|
+
},
|
|
9573
|
+
onGadgetExecutionStart: async (context) => {
|
|
9574
|
+
onSubagentEvent({
|
|
9575
|
+
type: "gadget_call",
|
|
9576
|
+
gadgetInvocationId: invocationId,
|
|
9577
|
+
depth,
|
|
9578
|
+
event: {
|
|
9579
|
+
call: {
|
|
9580
|
+
invocationId: context.invocationId,
|
|
9581
|
+
gadgetName: context.gadgetName,
|
|
9582
|
+
parameters: context.parameters
|
|
9583
|
+
}
|
|
9584
|
+
}
|
|
9585
|
+
});
|
|
9586
|
+
if (existingOnGadgetExecutionStart) {
|
|
9587
|
+
await existingOnGadgetExecutionStart(context);
|
|
9588
|
+
}
|
|
9589
|
+
},
|
|
9590
|
+
onGadgetExecutionComplete: async (context) => {
|
|
9591
|
+
onSubagentEvent({
|
|
9592
|
+
type: "gadget_result",
|
|
9593
|
+
gadgetInvocationId: invocationId,
|
|
9594
|
+
depth,
|
|
9595
|
+
event: {
|
|
9596
|
+
result: {
|
|
9597
|
+
invocationId: context.invocationId
|
|
9598
|
+
}
|
|
9599
|
+
}
|
|
9600
|
+
});
|
|
9601
|
+
if (existingOnGadgetExecutionComplete) {
|
|
9602
|
+
await existingOnGadgetExecutionComplete(context);
|
|
9603
|
+
}
|
|
9501
9604
|
}
|
|
9502
9605
|
}
|
|
9503
9606
|
};
|
|
@@ -9584,11 +9687,11 @@ ${endPrefix}`
|
|
|
9584
9687
|
this.client = new LLMistClass();
|
|
9585
9688
|
}
|
|
9586
9689
|
const registry = GadgetRegistry.from(this.gadgets);
|
|
9587
|
-
let
|
|
9690
|
+
let onSubagentEvent = this.subagentEventCallback;
|
|
9588
9691
|
if (this.parentContext) {
|
|
9589
|
-
const { invocationId,
|
|
9590
|
-
const existingCallback = this.
|
|
9591
|
-
|
|
9692
|
+
const { invocationId, onSubagentEvent: parentCallback, depth } = this.parentContext;
|
|
9693
|
+
const existingCallback = this.subagentEventCallback;
|
|
9694
|
+
onSubagentEvent = (event) => {
|
|
9592
9695
|
parentCallback({
|
|
9593
9696
|
...event,
|
|
9594
9697
|
gadgetInvocationId: invocationId,
|
|
@@ -9623,7 +9726,7 @@ ${endPrefix}`
|
|
|
9623
9726
|
compactionConfig: this.compactionConfig,
|
|
9624
9727
|
signal: this.signal,
|
|
9625
9728
|
subagentConfig: this.subagentConfig,
|
|
9626
|
-
|
|
9729
|
+
onSubagentEvent
|
|
9627
9730
|
};
|
|
9628
9731
|
}
|
|
9629
9732
|
ask(userPrompt) {
|
|
@@ -9780,11 +9883,11 @@ ${endPrefix}`
|
|
|
9780
9883
|
this.client = new LLMistClass();
|
|
9781
9884
|
}
|
|
9782
9885
|
const registry = GadgetRegistry.from(this.gadgets);
|
|
9783
|
-
let
|
|
9886
|
+
let onSubagentEvent = this.subagentEventCallback;
|
|
9784
9887
|
if (this.parentContext) {
|
|
9785
|
-
const { invocationId,
|
|
9786
|
-
const existingCallback = this.
|
|
9787
|
-
|
|
9888
|
+
const { invocationId, onSubagentEvent: parentCallback, depth } = this.parentContext;
|
|
9889
|
+
const existingCallback = this.subagentEventCallback;
|
|
9890
|
+
onSubagentEvent = (event) => {
|
|
9788
9891
|
parentCallback({
|
|
9789
9892
|
...event,
|
|
9790
9893
|
gadgetInvocationId: invocationId,
|
|
@@ -9819,7 +9922,7 @@ ${endPrefix}`
|
|
|
9819
9922
|
compactionConfig: this.compactionConfig,
|
|
9820
9923
|
signal: this.signal,
|
|
9821
9924
|
subagentConfig: this.subagentConfig,
|
|
9822
|
-
|
|
9925
|
+
onSubagentEvent
|
|
9823
9926
|
};
|
|
9824
9927
|
return new Agent(AGENT_INTERNAL_KEY, options);
|
|
9825
9928
|
}
|