@mindstudio-ai/remy 0.1.241 → 0.1.243
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/headless.js +36 -8
- package/dist/index.js +36 -8
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -3035,7 +3035,7 @@ function startStatusWatcher(config) {
|
|
|
3035
3035
|
if (!data.label) {
|
|
3036
3036
|
return;
|
|
3037
3037
|
}
|
|
3038
|
-
if (pauseCount > 0) {
|
|
3038
|
+
if (pauseCount > 0 || stopped || signal?.aborted) {
|
|
3039
3039
|
return;
|
|
3040
3040
|
}
|
|
3041
3041
|
onStatus(data.label);
|
|
@@ -3314,6 +3314,7 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3314
3314
|
let currentToolNames = "";
|
|
3315
3315
|
let lastUsage;
|
|
3316
3316
|
let lastProviderMetadata;
|
|
3317
|
+
let lastModelId;
|
|
3317
3318
|
const statusWatcher = startStatusWatcher({
|
|
3318
3319
|
apiConfig,
|
|
3319
3320
|
getContext: () => {
|
|
@@ -3427,6 +3428,7 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3427
3428
|
llmCalls: 1
|
|
3428
3429
|
};
|
|
3429
3430
|
lastProviderMetadata = event.providerMetadata;
|
|
3431
|
+
lastModelId = event.modelId;
|
|
3430
3432
|
recordUsage({
|
|
3431
3433
|
ts: Date.now(),
|
|
3432
3434
|
requestId,
|
|
@@ -3465,7 +3467,8 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3465
3467
|
role: "assistant",
|
|
3466
3468
|
content: contentBlocks,
|
|
3467
3469
|
...lastUsage ? { usage: lastUsage } : {},
|
|
3468
|
-
...lastProviderMetadata ? { providerMetadata: lastProviderMetadata } : {}
|
|
3470
|
+
...lastProviderMetadata ? { providerMetadata: lastProviderMetadata } : {},
|
|
3471
|
+
model: lastModelId ?? model
|
|
3469
3472
|
});
|
|
3470
3473
|
const toolCalls = contentBlocks.filter(
|
|
3471
3474
|
(b) => b.type === "tool"
|
|
@@ -7059,6 +7062,7 @@ async function runTurn(params) {
|
|
|
7059
7062
|
apiConfig,
|
|
7060
7063
|
system,
|
|
7061
7064
|
model,
|
|
7065
|
+
buildModel,
|
|
7062
7066
|
onboardingState,
|
|
7063
7067
|
signal,
|
|
7064
7068
|
onEvent,
|
|
@@ -7070,15 +7074,24 @@ async function runTurn(params) {
|
|
|
7070
7074
|
} = params;
|
|
7071
7075
|
const tools2 = getToolDefinitions(onboardingState);
|
|
7072
7076
|
const excludeToolsFromClearing = tools2.filter((t) => !CLEARABLE_TOOLS.has(t.name)).map((t) => t.name);
|
|
7077
|
+
const buildModelOverride = buildModel ? filterModelPicks({ parent: buildModel }).parent : void 0;
|
|
7078
|
+
const baseline = resolveModel("parent", state.models, model);
|
|
7079
|
+
const parentModel = buildModelOverride ?? baseline;
|
|
7080
|
+
const modelOverride = buildModelOverride && buildModelOverride !== baseline ? { from: baseline } : void 0;
|
|
7073
7081
|
log13.info("Turn started", {
|
|
7074
7082
|
requestId,
|
|
7075
7083
|
model,
|
|
7084
|
+
buildModel: buildModelOverride,
|
|
7076
7085
|
toolCount: tools2.length,
|
|
7077
7086
|
...attachments && attachments.length > 0 && {
|
|
7078
7087
|
attachmentCount: attachments.length
|
|
7079
7088
|
}
|
|
7080
7089
|
});
|
|
7081
|
-
onEvent({
|
|
7090
|
+
onEvent({
|
|
7091
|
+
type: "turn_started",
|
|
7092
|
+
model: parentModel,
|
|
7093
|
+
...modelOverride && { modelOverride }
|
|
7094
|
+
});
|
|
7082
7095
|
const hasText = userMessage.trim().length > 0;
|
|
7083
7096
|
const hasAttachments = attachments && attachments.length > 0;
|
|
7084
7097
|
if (!hasText && !hasAttachments) {
|
|
@@ -7145,6 +7158,7 @@ async function runTurn(params) {
|
|
|
7145
7158
|
const toolInputAccumulators = /* @__PURE__ */ new Map();
|
|
7146
7159
|
let stopReason = "end_turn";
|
|
7147
7160
|
let turnProviderMetadata;
|
|
7161
|
+
let turnModelId;
|
|
7148
7162
|
let subAgentText = "";
|
|
7149
7163
|
let currentToolNames = "";
|
|
7150
7164
|
const statusWatcher = isFirstMessage ? { stop() {
|
|
@@ -7226,7 +7240,6 @@ async function runTurn(params) {
|
|
|
7226
7240
|
onEvent({ type: "tool_input_delta", id, name, result: content });
|
|
7227
7241
|
}
|
|
7228
7242
|
}
|
|
7229
|
-
const parentModel = resolveModel("parent", state.models, model);
|
|
7230
7243
|
try {
|
|
7231
7244
|
for await (const event of streamChatWithRetry(
|
|
7232
7245
|
{
|
|
@@ -7346,6 +7359,7 @@ async function runTurn(params) {
|
|
|
7346
7359
|
case "done":
|
|
7347
7360
|
stopReason = event.stopReason;
|
|
7348
7361
|
turnProviderMetadata = event.providerMetadata;
|
|
7362
|
+
turnModelId = event.modelId;
|
|
7349
7363
|
turnLlmCalls++;
|
|
7350
7364
|
lastCallInputTokens = event.usage.inputTokens;
|
|
7351
7365
|
lastCallCacheCreation = event.usage.cacheCreationTokens ?? 0;
|
|
@@ -7406,7 +7420,9 @@ async function runTurn(params) {
|
|
|
7406
7420
|
},
|
|
7407
7421
|
...turnProviderMetadata && {
|
|
7408
7422
|
providerMetadata: turnProviderMetadata
|
|
7409
|
-
}
|
|
7423
|
+
},
|
|
7424
|
+
model: turnModelId ?? parentModel,
|
|
7425
|
+
...modelOverride && { modelOverride }
|
|
7410
7426
|
});
|
|
7411
7427
|
}
|
|
7412
7428
|
onEvent({ type: "turn_cancelled" });
|
|
@@ -7424,7 +7440,9 @@ async function runTurn(params) {
|
|
|
7424
7440
|
cacheReadTokens: turnCacheRead || void 0,
|
|
7425
7441
|
llmCalls: turnLlmCalls
|
|
7426
7442
|
},
|
|
7427
|
-
...turnProviderMetadata && { providerMetadata: turnProviderMetadata }
|
|
7443
|
+
...turnProviderMetadata && { providerMetadata: turnProviderMetadata },
|
|
7444
|
+
model: turnModelId ?? parentModel,
|
|
7445
|
+
...modelOverride && { modelOverride }
|
|
7428
7446
|
});
|
|
7429
7447
|
}
|
|
7430
7448
|
const toolCalls = getToolCalls(contentBlocks);
|
|
@@ -8219,7 +8237,14 @@ var HeadlessSession = class {
|
|
|
8219
8237
|
const rid = this.currentRequestId;
|
|
8220
8238
|
switch (e.type) {
|
|
8221
8239
|
case "turn_started":
|
|
8222
|
-
this.emit(
|
|
8240
|
+
this.emit(
|
|
8241
|
+
"turn_started",
|
|
8242
|
+
{
|
|
8243
|
+
...e.model && { model: e.model },
|
|
8244
|
+
...e.modelOverride && { modelOverride: e.modelOverride }
|
|
8245
|
+
},
|
|
8246
|
+
rid
|
|
8247
|
+
);
|
|
8223
8248
|
return;
|
|
8224
8249
|
case "user_message":
|
|
8225
8250
|
this.emit(
|
|
@@ -8423,7 +8448,9 @@ var HeadlessSession = class {
|
|
|
8423
8448
|
userMessage = resolved.message;
|
|
8424
8449
|
}
|
|
8425
8450
|
const isHidden = !!parsed.hidden;
|
|
8426
|
-
|
|
8451
|
+
const rawText = parsed.text ?? "";
|
|
8452
|
+
applyPlanFileSideEffect(rawText);
|
|
8453
|
+
const buildModel = hasSentinel(rawText, "approvePlan") ? parsed.buildModel : void 0;
|
|
8427
8454
|
const onboardingState = parsed.onboardingState ?? "onboardingFinished";
|
|
8428
8455
|
this.currentOnboardingState = onboardingState;
|
|
8429
8456
|
const system = buildSystemPrompt(
|
|
@@ -8452,6 +8479,7 @@ var HeadlessSession = class {
|
|
|
8452
8479
|
apiConfig: this.config,
|
|
8453
8480
|
system,
|
|
8454
8481
|
model: this.opts.model,
|
|
8482
|
+
buildModel,
|
|
8455
8483
|
onboardingState,
|
|
8456
8484
|
requestId,
|
|
8457
8485
|
signal: this.currentAbort.signal,
|
package/dist/index.js
CHANGED
|
@@ -3774,7 +3774,7 @@ function startStatusWatcher(config) {
|
|
|
3774
3774
|
if (!data.label) {
|
|
3775
3775
|
return;
|
|
3776
3776
|
}
|
|
3777
|
-
if (pauseCount > 0) {
|
|
3777
|
+
if (pauseCount > 0 || stopped || signal?.aborted) {
|
|
3778
3778
|
return;
|
|
3779
3779
|
}
|
|
3780
3780
|
onStatus(data.label);
|
|
@@ -3884,6 +3884,7 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3884
3884
|
let currentToolNames = "";
|
|
3885
3885
|
let lastUsage;
|
|
3886
3886
|
let lastProviderMetadata;
|
|
3887
|
+
let lastModelId;
|
|
3887
3888
|
const statusWatcher = startStatusWatcher({
|
|
3888
3889
|
apiConfig,
|
|
3889
3890
|
getContext: () => {
|
|
@@ -3997,6 +3998,7 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
3997
3998
|
llmCalls: 1
|
|
3998
3999
|
};
|
|
3999
4000
|
lastProviderMetadata = event.providerMetadata;
|
|
4001
|
+
lastModelId = event.modelId;
|
|
4000
4002
|
recordUsage({
|
|
4001
4003
|
ts: Date.now(),
|
|
4002
4004
|
requestId,
|
|
@@ -4035,7 +4037,8 @@ ${partial}` : "[INTERRUPTED] Agent was interrupted before producing output.",
|
|
|
4035
4037
|
role: "assistant",
|
|
4036
4038
|
content: contentBlocks,
|
|
4037
4039
|
...lastUsage ? { usage: lastUsage } : {},
|
|
4038
|
-
...lastProviderMetadata ? { providerMetadata: lastProviderMetadata } : {}
|
|
4040
|
+
...lastProviderMetadata ? { providerMetadata: lastProviderMetadata } : {},
|
|
4041
|
+
model: lastModelId ?? model
|
|
4039
4042
|
});
|
|
4040
4043
|
const toolCalls = contentBlocks.filter(
|
|
4041
4044
|
(b) => b.type === "tool"
|
|
@@ -7502,6 +7505,7 @@ async function runTurn(params) {
|
|
|
7502
7505
|
apiConfig,
|
|
7503
7506
|
system,
|
|
7504
7507
|
model,
|
|
7508
|
+
buildModel,
|
|
7505
7509
|
onboardingState,
|
|
7506
7510
|
signal,
|
|
7507
7511
|
onEvent,
|
|
@@ -7513,15 +7517,24 @@ async function runTurn(params) {
|
|
|
7513
7517
|
} = params;
|
|
7514
7518
|
const tools2 = getToolDefinitions(onboardingState);
|
|
7515
7519
|
const excludeToolsFromClearing = tools2.filter((t) => !CLEARABLE_TOOLS.has(t.name)).map((t) => t.name);
|
|
7520
|
+
const buildModelOverride = buildModel ? filterModelPicks({ parent: buildModel }).parent : void 0;
|
|
7521
|
+
const baseline = resolveModel("parent", state.models, model);
|
|
7522
|
+
const parentModel = buildModelOverride ?? baseline;
|
|
7523
|
+
const modelOverride = buildModelOverride && buildModelOverride !== baseline ? { from: baseline } : void 0;
|
|
7516
7524
|
log12.info("Turn started", {
|
|
7517
7525
|
requestId,
|
|
7518
7526
|
model,
|
|
7527
|
+
buildModel: buildModelOverride,
|
|
7519
7528
|
toolCount: tools2.length,
|
|
7520
7529
|
...attachments && attachments.length > 0 && {
|
|
7521
7530
|
attachmentCount: attachments.length
|
|
7522
7531
|
}
|
|
7523
7532
|
});
|
|
7524
|
-
onEvent({
|
|
7533
|
+
onEvent({
|
|
7534
|
+
type: "turn_started",
|
|
7535
|
+
model: parentModel,
|
|
7536
|
+
...modelOverride && { modelOverride }
|
|
7537
|
+
});
|
|
7525
7538
|
const hasText = userMessage.trim().length > 0;
|
|
7526
7539
|
const hasAttachments = attachments && attachments.length > 0;
|
|
7527
7540
|
if (!hasText && !hasAttachments) {
|
|
@@ -7588,6 +7601,7 @@ async function runTurn(params) {
|
|
|
7588
7601
|
const toolInputAccumulators = /* @__PURE__ */ new Map();
|
|
7589
7602
|
let stopReason = "end_turn";
|
|
7590
7603
|
let turnProviderMetadata;
|
|
7604
|
+
let turnModelId;
|
|
7591
7605
|
let subAgentText = "";
|
|
7592
7606
|
let currentToolNames = "";
|
|
7593
7607
|
const statusWatcher = isFirstMessage ? { stop() {
|
|
@@ -7669,7 +7683,6 @@ async function runTurn(params) {
|
|
|
7669
7683
|
onEvent({ type: "tool_input_delta", id, name, result: content });
|
|
7670
7684
|
}
|
|
7671
7685
|
}
|
|
7672
|
-
const parentModel = resolveModel("parent", state.models, model);
|
|
7673
7686
|
try {
|
|
7674
7687
|
for await (const event of streamChatWithRetry(
|
|
7675
7688
|
{
|
|
@@ -7789,6 +7802,7 @@ async function runTurn(params) {
|
|
|
7789
7802
|
case "done":
|
|
7790
7803
|
stopReason = event.stopReason;
|
|
7791
7804
|
turnProviderMetadata = event.providerMetadata;
|
|
7805
|
+
turnModelId = event.modelId;
|
|
7792
7806
|
turnLlmCalls++;
|
|
7793
7807
|
lastCallInputTokens = event.usage.inputTokens;
|
|
7794
7808
|
lastCallCacheCreation = event.usage.cacheCreationTokens ?? 0;
|
|
@@ -7849,7 +7863,9 @@ async function runTurn(params) {
|
|
|
7849
7863
|
},
|
|
7850
7864
|
...turnProviderMetadata && {
|
|
7851
7865
|
providerMetadata: turnProviderMetadata
|
|
7852
|
-
}
|
|
7866
|
+
},
|
|
7867
|
+
model: turnModelId ?? parentModel,
|
|
7868
|
+
...modelOverride && { modelOverride }
|
|
7853
7869
|
});
|
|
7854
7870
|
}
|
|
7855
7871
|
onEvent({ type: "turn_cancelled" });
|
|
@@ -7867,7 +7883,9 @@ async function runTurn(params) {
|
|
|
7867
7883
|
cacheReadTokens: turnCacheRead || void 0,
|
|
7868
7884
|
llmCalls: turnLlmCalls
|
|
7869
7885
|
},
|
|
7870
|
-
...turnProviderMetadata && { providerMetadata: turnProviderMetadata }
|
|
7886
|
+
...turnProviderMetadata && { providerMetadata: turnProviderMetadata },
|
|
7887
|
+
model: turnModelId ?? parentModel,
|
|
7888
|
+
...modelOverride && { modelOverride }
|
|
7871
7889
|
});
|
|
7872
7890
|
}
|
|
7873
7891
|
const toolCalls = getToolCalls(contentBlocks);
|
|
@@ -9108,7 +9126,14 @@ var init_headless = __esm({
|
|
|
9108
9126
|
const rid = this.currentRequestId;
|
|
9109
9127
|
switch (e.type) {
|
|
9110
9128
|
case "turn_started":
|
|
9111
|
-
this.emit(
|
|
9129
|
+
this.emit(
|
|
9130
|
+
"turn_started",
|
|
9131
|
+
{
|
|
9132
|
+
...e.model && { model: e.model },
|
|
9133
|
+
...e.modelOverride && { modelOverride: e.modelOverride }
|
|
9134
|
+
},
|
|
9135
|
+
rid
|
|
9136
|
+
);
|
|
9112
9137
|
return;
|
|
9113
9138
|
case "user_message":
|
|
9114
9139
|
this.emit(
|
|
@@ -9312,7 +9337,9 @@ var init_headless = __esm({
|
|
|
9312
9337
|
userMessage = resolved.message;
|
|
9313
9338
|
}
|
|
9314
9339
|
const isHidden = !!parsed.hidden;
|
|
9315
|
-
|
|
9340
|
+
const rawText = parsed.text ?? "";
|
|
9341
|
+
applyPlanFileSideEffect(rawText);
|
|
9342
|
+
const buildModel = hasSentinel(rawText, "approvePlan") ? parsed.buildModel : void 0;
|
|
9316
9343
|
const onboardingState = parsed.onboardingState ?? "onboardingFinished";
|
|
9317
9344
|
this.currentOnboardingState = onboardingState;
|
|
9318
9345
|
const system = buildSystemPrompt(
|
|
@@ -9341,6 +9368,7 @@ var init_headless = __esm({
|
|
|
9341
9368
|
apiConfig: this.config,
|
|
9342
9369
|
system,
|
|
9343
9370
|
model: this.opts.model,
|
|
9371
|
+
buildModel,
|
|
9344
9372
|
onboardingState,
|
|
9345
9373
|
requestId,
|
|
9346
9374
|
signal: this.currentAbort.signal,
|