@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 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({ type: "turn_started" });
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("turn_started", {}, rid);
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
- applyPlanFileSideEffect(parsed.text ?? "");
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({ type: "turn_started" });
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("turn_started", {}, rid);
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
- applyPlanFileSideEffect(parsed.text ?? "");
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/remy",
3
- "version": "0.1.241",
3
+ "version": "0.1.243",
4
4
  "description": "Remy coding agent",
5
5
  "repository": {
6
6
  "type": "git",