@sema-agent/core 1.300.0 → 1.301.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.
Files changed (87) hide show
  1. package/dist/agents/subagent.d.ts.map +1 -1
  2. package/dist/agents/subagent.js +124 -50
  3. package/dist/agents/subagent.js.map +1 -1
  4. package/dist/core/auto-mode-prompt.d.ts.map +1 -1
  5. package/dist/core/auto-mode-prompt.js +25 -2
  6. package/dist/core/auto-mode-prompt.js.map +1 -1
  7. package/dist/core/checkpoint-store.d.ts +5 -0
  8. package/dist/core/checkpoint-store.d.ts.map +1 -1
  9. package/dist/core/checkpoint-store.js.map +1 -1
  10. package/dist/core/memory-engine/engine.d.ts +2 -2
  11. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  12. package/dist/core/memory-engine/engine.js +3 -3
  13. package/dist/core/memory-engine/engine.js.map +1 -1
  14. package/dist/core/memory-engine/file-backend.d.ts.map +1 -1
  15. package/dist/core/memory-engine/file-backend.js +17 -0
  16. package/dist/core/memory-engine/file-backend.js.map +1 -1
  17. package/dist/core/memory-engine/frontmatter.d.ts.map +1 -1
  18. package/dist/core/memory-engine/frontmatter.js +62 -1
  19. package/dist/core/memory-engine/frontmatter.js.map +1 -1
  20. package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -1
  21. package/dist/core/memory-engine/memory-backend-contract.js +45 -0
  22. package/dist/core/memory-engine/memory-backend-contract.js.map +1 -1
  23. package/dist/core/memory-engine/sync-client.d.ts.map +1 -1
  24. package/dist/core/memory-engine/sync-client.js +23 -0
  25. package/dist/core/memory-engine/sync-client.js.map +1 -1
  26. package/dist/core/memory-engine/types.d.ts +7 -0
  27. package/dist/core/memory-engine/types.d.ts.map +1 -1
  28. package/dist/core/runner/prepare-task.d.ts +12 -1
  29. package/dist/core/runner/prepare-task.d.ts.map +1 -1
  30. package/dist/core/runner/prepare-task.js +82 -9
  31. package/dist/core/runner/prepare-task.js.map +1 -1
  32. package/dist/core/runner/prompt-suggestions.d.ts.map +1 -1
  33. package/dist/core/runner/prompt-suggestions.js +14 -2
  34. package/dist/core/runner/prompt-suggestions.js.map +1 -1
  35. package/dist/core/runner/runtask.d.ts.map +1 -1
  36. package/dist/core/runner/runtask.js +165 -58
  37. package/dist/core/runner/runtask.js.map +1 -1
  38. package/dist/core/runner/synthetic-tools.d.ts +11 -1
  39. package/dist/core/runner/synthetic-tools.d.ts.map +1 -1
  40. package/dist/core/runner/synthetic-tools.js +47 -28
  41. package/dist/core/runner/synthetic-tools.js.map +1 -1
  42. package/dist/core/runner/turn-attachments.d.ts +14 -3
  43. package/dist/core/runner/turn-attachments.d.ts.map +1 -1
  44. package/dist/core/runner/turn-attachments.js +59 -7
  45. package/dist/core/runner/turn-attachments.js.map +1 -1
  46. package/dist/core/scheduler.d.ts +5 -0
  47. package/dist/core/scheduler.d.ts.map +1 -1
  48. package/dist/core/scheduler.js.map +1 -1
  49. package/dist/core/task-registry.d.ts +31 -2
  50. package/dist/core/task-registry.d.ts.map +1 -1
  51. package/dist/core/task-registry.js +35 -6
  52. package/dist/core/task-registry.js.map +1 -1
  53. package/dist/core/trace.d.ts.map +1 -1
  54. package/dist/core/trace.js.map +1 -1
  55. package/dist/core/types.d.ts +8 -2
  56. package/dist/core/types.d.ts.map +1 -1
  57. package/dist/core/untrusted-text.d.ts +23 -0
  58. package/dist/core/untrusted-text.d.ts.map +1 -1
  59. package/dist/core/untrusted-text.js +69 -0
  60. package/dist/core/untrusted-text.js.map +1 -1
  61. package/dist/engine/compaction/utils.d.ts.map +1 -1
  62. package/dist/engine/compaction/utils.js +20 -1
  63. package/dist/engine/compaction/utils.js.map +1 -1
  64. package/dist/engine/harness/agent-harness.d.ts +11 -4
  65. package/dist/engine/harness/agent-harness.d.ts.map +1 -1
  66. package/dist/engine/harness/agent-harness.js +23 -6
  67. package/dist/engine/harness/agent-harness.js.map +1 -1
  68. package/dist/engine/harness/messages.d.ts.map +1 -1
  69. package/dist/engine/harness/messages.js +1 -0
  70. package/dist/engine/harness/messages.js.map +1 -1
  71. package/dist/engine/harness/types.d.ts.map +1 -1
  72. package/dist/engine/harness/types.js.map +1 -1
  73. package/dist/engine/llm/types.d.ts +7 -0
  74. package/dist/engine/llm/types.d.ts.map +1 -1
  75. package/dist/engine/loop/agent-loop.js +7 -0
  76. package/dist/engine/loop/agent-loop.js.map +1 -1
  77. package/dist/engine/loop/types.d.ts +1 -0
  78. package/dist/engine/loop/types.d.ts.map +1 -1
  79. package/dist/engine/session/import-validate.d.ts.map +1 -1
  80. package/dist/engine/session/import-validate.js +31 -0
  81. package/dist/engine/session/import-validate.js.map +1 -1
  82. package/dist/prompts/default.d.ts.map +1 -1
  83. package/dist/prompts/default.js.map +1 -1
  84. package/dist/tools/scheduler-tools.d.ts.map +1 -1
  85. package/dist/tools/scheduler-tools.js +71 -16
  86. package/dist/tools/scheduler-tools.js.map +1 -1
  87. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { brainToRuntime } from "../runtime.js";
2
2
  import { cacheFamilyOf, usageCostMicroUsd } from "./usage-accounting.js";
3
+ import { cutEnginePrefix, cutEngineSegments, flattenableUserText } from "../untrusted-text.js";
3
4
  const SUGGESTION_MAX_CHARS = 200;
4
5
  const SUGGEST_SYSTEM_PROMPT = `You suggest plausible NEXT prompts a user might send to continue this conversation.
5
6
 
@@ -13,8 +14,19 @@ function renderTranscript(messages) {
13
14
  for (const m of messages) {
14
15
  const role = m.role;
15
16
  if (role === "user") {
16
- const content = m.content;
17
- const text = typeof content === "string" ? content : extractText(content);
17
+ const um = m;
18
+ if (um.engineMinted === true || um.provenance === "engine-note")
19
+ continue;
20
+ const content = um.content;
21
+ const flat = flattenableUserText(content);
22
+ let text;
23
+ if (flat === undefined) {
24
+ text = typeof content === "string" ? content : extractText(content);
25
+ }
26
+ else {
27
+ const bySegments = cutEngineSegments(flat, um.engineSegments);
28
+ text = bySegments.malformed ? flat : bySegments.cut ? bySegments.text : cutEnginePrefix(flat, um.enginePrefixChars).text;
29
+ }
18
30
  if (text.trim())
19
31
  lines.push(`USER: ${text.trim()}`);
20
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-suggestions.js","sourceRoot":"","sources":["../../../src/core/runner/prompt-suggestions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-suggestions.js","sourceRoot":"","sources":["../../../src/core/runner/prompt-suggestions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtask.d.ts","sourceRoot":"","sources":["../../../src/core/runner/runtask.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,10 @@ import { advanceCursorAfterInline } from "../consolidate-scope.js";
20
20
  import { PushQueue } from "../push-queue.js";
21
21
  import { TtlSessionStore } from "../session-store.js";
22
22
  import { toImageContent } from "./image.js";
23
- import { OUTPUT_TOOL_NAME, resolveOutputRetries } from "./synthetic-tools.js";
23
+ import { OUTPUT_TOOL_NAME, SKILLS_LISTING_PROBE_HEADER, resolveOutputRetries } from "./synthetic-tools.js";
24
24
  import { cacheFamilyOf, usageCostMicroUsd } from "./usage-accounting.js";
25
25
  import { assembleResult, errorCodeOf } from "./assemble-result.js";
26
- import { ATTACHMENT_BYTE_CAP, CHANGED_FILES_MAX, advanceCadenceClock, agentListingDeltaHeader, agentListingInitialHeader, collectDateChange, collectDueAttachments, commitAgentListing, createAttachmentState, rebaseCadenceWindows, reduceToolEnd, renderAgentListingDelta, renderMcpInstructionsDelta, renderOrphanedBackgroundTasks, renderToolsDelta, stampWriteAnchor } from "./turn-attachments.js";
26
+ import { ATTACHMENT_BYTE_CAP, CHANGED_FILES_MAX, SKILLS_LISTING_DELTA_HEADER, advanceCadenceClock, agentListingDeltaHeader, agentListingInitialHeader, collectDateChange, collectDueAttachments, commitAgentListing, commitSkillsListing, createAttachmentState, rebaseCadenceWindows, reduceToolEnd, renderAgentListingDelta, renderMcpInstructionsDelta, renderOrphanedBackgroundTasks, renderSkillsListingDelta, renderToolsDelta, stampWriteAnchor } from "./turn-attachments.js";
27
27
  import { prepareTask } from "./prepare-task.js";
28
28
  import { hasVerifiableStructureSignal } from "./grounding-signal.js";
29
29
  import { hasDestroy, isIsolated } from "../remote-env.js";
@@ -515,7 +515,7 @@ export class Runner {
515
515
  }
516
516
  const payload = options?.trusted ? formatHookFeedback(text) : text;
517
517
  try {
518
- await h.harness.steer(payload);
518
+ await h.harness.steer(payload, { provenance: "engine-note" });
519
519
  }
520
520
  catch (e) {
521
521
  if (e instanceof Error && e.code === "invalid_state") {
@@ -648,7 +648,9 @@ export class Runner {
648
648
  queue.push({ type: "task_notification", notification: item.payload, ...notificationIdent() });
649
649
  if (notificationHarness) {
650
650
  const xml = renderTaskNotificationXml(item.payload);
651
- const deliver = item.priority === "later" ? notificationHarness.followUp(xml) : notificationHarness.steer(xml);
651
+ const deliver = item.priority === "later"
652
+ ? notificationHarness.followUp(xml, { provenance: "engine-note" })
653
+ : notificationHarness.steer(xml, { provenance: "engine-note" });
652
654
  void deliver.catch(() => {
653
655
  if (notificationSessionId !== undefined)
654
656
  this.pendingSessionNotifications.pend(notificationSessionId, item.payload);
@@ -694,7 +696,7 @@ export class Runner {
694
696
  for (const payload of discloseDroppedPending(pendingIdle)) {
695
697
  deliveredAtTurnOpen.add(taskNotificationDedupKey(payload));
696
698
  queue.push({ type: "task_notification", notification: payload });
697
- void prepared.harness.nextTurn(renderTaskNotificationXml(payload)).catch(() => {
699
+ void prepared.harness.nextTurn(renderTaskNotificationXml(payload), { provenance: "engine-note" }).catch(() => {
698
700
  this.pendingSessionNotifications.pend(prepared.sessionId, payload);
699
701
  });
700
702
  }
@@ -816,7 +818,10 @@ export class Runner {
816
818
  let groundingSignalPreR9 = false;
817
819
  let groundingSignalPostR9 = false;
818
820
  const attachmentsCfg = spec.attachments;
819
- const attachState = attachmentsCfg !== undefined ? createAttachmentState() : undefined;
821
+ const agentListingOn = attachmentsCfg?.agentListing !== false;
822
+ const skillsListingOn = attachmentsCfg?.skillsListing !== false;
823
+ const listingsLive = (agentListingOn && prepared.agentListing !== undefined) || (skillsListingOn && prepared.skillsListing !== undefined);
824
+ const attachState = attachmentsCfg !== undefined || listingsLive ? createAttachmentState() : undefined;
820
825
  const dateState = prepared.dateChange !== undefined ? { announcedDate: prepared.dateChange.legDate } : undefined;
821
826
  let cadenceTurns = 0;
822
827
  let lastTurnHadToolCalls = false;
@@ -836,33 +841,61 @@ export class Runner {
836
841
  catch {
837
842
  }
838
843
  }
839
- if (attachState !== undefined && attachmentsCfg?.agentListing === true && prepared.agentListing?.seedAnnounced === true) {
840
- const listing = prepared.agentListing;
841
- try {
842
- const headers = [agentListingInitialHeader(listing.toolName), agentListingDeltaHeader(listing.toolName)];
843
- const textOf = (m) => {
844
- const c = m.content;
845
- if (typeof c === "string")
846
- return c;
847
- if (Array.isArray(c)) {
848
- return c
849
- .map((b) => (b !== null && typeof b === "object" && b.type === "text" ? String(b.text ?? "") : ""))
850
- .join("\n");
844
+ if (attachState !== undefined &&
845
+ ((agentListingOn && prepared.agentListing?.seedAnnounced === true) ||
846
+ (skillsListingOn && prepared.skillsListing?.seedAnnounced === true))) {
847
+ const cpListings = resume?.cp.state.announcedListings;
848
+ const textOf = (m) => {
849
+ const c = m.content;
850
+ if (typeof c === "string")
851
+ return c;
852
+ if (Array.isArray(c)) {
853
+ return c
854
+ .map((b) => (b !== null && typeof b === "object" && b.type === "text" ? String(b.text ?? "") : ""))
855
+ .join("\n");
856
+ }
857
+ return "";
858
+ };
859
+ let branchTexts = null;
860
+ const branchIncludes = async (headers) => {
861
+ try {
862
+ if (branchTexts === null) {
863
+ const branch = await prepared.session.getBranch();
864
+ branchTexts = branch.flatMap((e) => (e.type === "message" ? [textOf(e.message)] : []));
851
865
  }
852
- return "";
853
- };
854
- const branch = await prepared.session.getBranch();
855
- const delivered = branch.some((e) => {
856
- if (e.type !== "message")
857
- return false;
858
- const text = textOf(e.message);
859
- return headers.some((h) => text.includes(h));
860
- });
861
- if (delivered) {
866
+ return branchTexts.some((text) => headers.some((h) => text.includes(h)));
867
+ }
868
+ catch {
869
+ return false;
870
+ }
871
+ };
872
+ if (agentListingOn && prepared.agentListing?.seedAnnounced === true) {
873
+ const listing = prepared.agentListing;
874
+ if (cpListings?.agents !== undefined) {
875
+ const descOf = new Map(listing.entries.map((e) => [e.name, e.description]));
876
+ attachState.announcedAgentTypes = new Map(cpListings.agents.map((n) => [n, descOf.get(n) ?? ""]));
877
+ prepared.announcedListingsRef.agents = [...cpListings.agents];
878
+ if (cpListings.models !== undefined) {
879
+ attachState.announcedModels = [...cpListings.models];
880
+ prepared.announcedListingsRef.models = [...cpListings.models];
881
+ }
882
+ }
883
+ else if (await branchIncludes([agentListingInitialHeader(listing.toolName), agentListingDeltaHeader(listing.toolName)])) {
862
884
  attachState.announcedAgentTypes = new Map(listing.entries.map((e) => [e.name, e.description]));
885
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
863
886
  }
864
887
  }
865
- catch {
888
+ if (skillsListingOn && prepared.skillsListing?.seedAnnounced === true) {
889
+ const listing = prepared.skillsListing;
890
+ if (cpListings?.skills !== undefined) {
891
+ const descOf = new Map(listing.entries.map((e) => [e.name, e.description]));
892
+ attachState.announcedSkills = new Map(cpListings.skills.map((n) => [n, descOf.get(n) ?? ""]));
893
+ prepared.announcedListingsRef.skills = [...cpListings.skills];
894
+ }
895
+ else if (await branchIncludes([SKILLS_LISTING_PROBE_HEADER, SKILLS_LISTING_DELTA_HEADER])) {
896
+ attachState.announcedSkills = new Map(listing.entries.map((e) => [e.name, e.description]));
897
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
898
+ }
866
899
  }
867
900
  }
868
901
  if (spec.finalVerification === true && resume !== undefined) {
@@ -1185,7 +1218,7 @@ export class Runner {
1185
1218
  prepared.callCapRef.finalizeMode = true;
1186
1219
  if (!finalizeInjected) {
1187
1220
  const finalizeText = buildFinalizeText();
1188
- void prepared.harness.steer(finalizeText).catch(() => { });
1221
+ void prepared.harness.steer(finalizeText, { engineMinted: true }).catch(() => { });
1189
1222
  finalizeInjected = true;
1190
1223
  nudgeIdx = nudgeSchedule.length;
1191
1224
  queue.push({ type: "steering_injected", source: "finalize", preview: finalizeText.slice(0, 220), ...ident() });
@@ -1514,6 +1547,7 @@ export class Runner {
1514
1547
  return [
1515
1548
  {
1516
1549
  role: "user",
1550
+ engineMinted: true,
1517
1551
  content: "<system-reminder>[final verification] Your tool calls in this run worked with raw bytes, structural parsing, " +
1518
1552
  "or checksum/digest computation — the deliverable very likely embeds verifiable structure (structural fields, an " +
1519
1553
  "embedded checksum-family value, reference data it must match, or a replayable deterministic path). You MUST " +
@@ -1530,6 +1564,7 @@ export class Runner {
1530
1564
  return [
1531
1565
  {
1532
1566
  role: "user",
1567
+ engineMinted: true,
1533
1568
  content: "<system-reminder>[final verification] Before finishing: re-verify the FINAL deliverable through its REAL entry point, " +
1534
1569
  "exactly as the acceptance criteria would exercise it — execute the binary/function/endpoint directly and read the ACTUAL " +
1535
1570
  "output and exit code. Do NOT rely on earlier self-tests, shell redirections, or assumptions (a program that prints to " +
@@ -1576,6 +1611,7 @@ export class Runner {
1576
1611
  if (result?.additionalContext) {
1577
1612
  messages.push({
1578
1613
  role: "user",
1614
+ engineMinted: true,
1579
1615
  content: formatHookFeedback(`Stop hook additional context: ${result.additionalContext}`),
1580
1616
  timestamp: Date.now(),
1581
1617
  });
@@ -1591,7 +1627,12 @@ export class Runner {
1591
1627
  `Check ctx.stopHookActive in the hook and return success while it's true.`), { phase: "hook", sessionId: prepared.sessionId });
1592
1628
  return [];
1593
1629
  }
1594
- messages.push({ role: "user", content: formatHookFeedback(`Stop hook stopped continuation: ${result.block}`), timestamp: Date.now() });
1630
+ messages.push({
1631
+ role: "user",
1632
+ engineMinted: true,
1633
+ content: formatHookFeedback(`Stop hook stopped continuation: ${result.block}`),
1634
+ timestamp: Date.now(),
1635
+ });
1595
1636
  return messages;
1596
1637
  });
1597
1638
  }
@@ -1719,7 +1760,7 @@ export class Runner {
1719
1760
  prepared.callCapRef.finalizeMode = true;
1720
1761
  nudgeIdx = nudgeSchedule.length;
1721
1762
  const finalizeText = buildFinalizeText();
1722
- void prepared.harness.steer(finalizeText).catch(() => { });
1763
+ void prepared.harness.steer(finalizeText, { engineMinted: true }).catch(() => { });
1723
1764
  boundarySteered = true;
1724
1765
  queue.push({ type: "steering_injected", source: "finalize", preview: finalizeText.slice(0, 220), ...ident() });
1725
1766
  }
@@ -1729,7 +1770,7 @@ export class Runner {
1729
1770
  due = nudgeSchedule[nudgeIdx++];
1730
1771
  }
1731
1772
  if (due) {
1732
- void prepared.harness.steer(due.text).catch(() => { });
1773
+ void prepared.harness.steer(due.text, { engineMinted: true }).catch(() => { });
1733
1774
  nudgesSent += 1;
1734
1775
  boundarySteered = true;
1735
1776
  queue.push({ type: "steering_injected", source: "deadline_nudge", preview: due.text.slice(0, 220), ...ident() });
@@ -1780,23 +1821,23 @@ export class Runner {
1780
1821
  if (files.length > 0) {
1781
1822
  queue.push({ type: "diagnostics", files, isNew: true, ...ident() });
1782
1823
  const block = formatDiagnosticsBlock(files);
1783
- void prepared.harness.steer(block).catch(() => undefined);
1824
+ void prepared.harness.steer(block, { provenance: "engine-note" }).catch(() => undefined);
1784
1825
  boundarySteered = true;
1785
1826
  }
1786
1827
  }
1787
1828
  let boundaryAttachmentBytes = 0;
1788
1829
  let attachmentsPayload;
1789
- if ((dateState !== undefined || (attachState !== undefined && attachmentsCfg !== undefined)) &&
1830
+ if ((dateState !== undefined || attachState !== undefined) &&
1790
1831
  !boundarySteered &&
1791
1832
  !finalizeInjected &&
1792
1833
  finalVerifyInjections === 0 &&
1793
1834
  !prepared.abortController.signal.aborted) {
1794
1835
  const due = [];
1795
- if (attachState !== undefined && attachmentsCfg !== undefined) {
1796
- const changedFilesOn = Boolean(attachmentsCfg.changedFiles);
1836
+ if (attachState !== undefined) {
1837
+ const changedFilesOn = Boolean(attachmentsCfg?.changedFiles);
1797
1838
  let changed;
1798
1839
  if (changedFilesOn && prepared.detectExternalChanges !== undefined) {
1799
- const maxFiles = typeof attachmentsCfg.changedFiles === "object"
1840
+ const maxFiles = typeof attachmentsCfg?.changedFiles === "object"
1800
1841
  ? (attachmentsCfg.changedFiles.maxFiles ?? CHANGED_FILES_MAX)
1801
1842
  : CHANGED_FILES_MAX;
1802
1843
  const SCAN_CEILING_MS = 2_000;
@@ -1811,18 +1852,17 @@ export class Runner {
1811
1852
  attachState.surfacedMtime.delete(p);
1812
1853
  changed = scan.changed;
1813
1854
  }
1814
- const backgroundTasksOn = attachmentsCfg.backgroundTasks === true;
1855
+ const backgroundTasksOn = attachmentsCfg?.backgroundTasks === true;
1815
1856
  const bgTasks = backgroundTasksOn && attachState.postCompactPending ? prepared.listBackgroundTasks() : undefined;
1816
- const toolsDeltaOn = attachmentsCfg.toolsDelta === true;
1857
+ const toolsDeltaOn = attachmentsCfg?.toolsDelta === true;
1817
1858
  const pendingTools = toolsDeltaOn && prepared.toolsDeltaRef !== undefined && prepared.toolsDeltaRef.pending.length > 0
1818
1859
  ? [...prepared.toolsDeltaRef.pending]
1819
1860
  : undefined;
1820
- const agentListingOn = attachmentsCfg.agentListing === true;
1821
- const mcpInstructionsOn = attachmentsCfg.mcpInstructions === true;
1861
+ const mcpInstructionsOn = attachmentsCfg?.mcpInstructions === true;
1822
1862
  const mcpDelta = prepared.mcp.instructionsDelta;
1823
1863
  const mcpAdds = mcpInstructionsOn && mcpDelta.pendingAdds.length > 0 ? [...mcpDelta.pendingAdds] : undefined;
1824
1864
  const mcpRemovals = mcpInstructionsOn && mcpDelta.pendingRemovals.length > 0 ? [...mcpDelta.pendingRemovals] : undefined;
1825
- const budgetUsdOn = attachmentsCfg.budgetUsd === true && maxCostMicroUsd !== undefined && lastTurnHadToolCalls;
1865
+ const budgetUsdOn = attachmentsCfg?.budgetUsd === true && maxCostMicroUsd !== undefined && lastTurnHadToolCalls;
1826
1866
  due.push(...collectDueAttachments(attachState, {
1827
1867
  turn: stats.turns,
1828
1868
  cadenceTurn: cadenceTurns,
@@ -1830,14 +1870,15 @@ export class Runner {
1830
1870
  taskListMounted: taskToolsMounted,
1831
1871
  planActive: prepared.planModeRef.active,
1832
1872
  config: {
1833
- todoReminder: attachmentsCfg.todoReminder === true,
1834
- ...(attachmentsCfg.todoReminderMode !== undefined ? { todoReminderMode: attachmentsCfg.todoReminderMode } : {}),
1873
+ todoReminder: attachmentsCfg?.todoReminder === true,
1874
+ ...(attachmentsCfg?.todoReminderMode !== undefined ? { todoReminderMode: attachmentsCfg.todoReminderMode } : {}),
1835
1875
  changedFiles: changedFilesOn,
1836
- planModeReminder: attachmentsCfg.planModeReminder === true,
1876
+ planModeReminder: attachmentsCfg?.planModeReminder === true,
1837
1877
  budgetUsd: budgetUsdOn,
1838
1878
  backgroundTasks: backgroundTasksOn,
1839
1879
  toolsDelta: toolsDeltaOn,
1840
1880
  agentListing: agentListingOn,
1881
+ skillsListing: skillsListingOn,
1841
1882
  mcpInstructions: mcpInstructionsOn,
1842
1883
  },
1843
1884
  ...(changed !== undefined ? { changedFiles: changed } : {}),
@@ -1847,8 +1888,13 @@ export class Runner {
1847
1888
  ...(bgTasks !== undefined ? { backgroundTasks: bgTasks } : {}),
1848
1889
  ...(pendingTools !== undefined ? { newTools: pendingTools } : {}),
1849
1890
  ...(agentListingOn && prepared.agentListing !== undefined
1850
- ? { agentListing: prepared.agentListing.entries, agentToolName: prepared.agentListing.toolName }
1891
+ ? {
1892
+ agentListing: prepared.agentListing.entries,
1893
+ agentToolName: prepared.agentListing.toolName,
1894
+ ...(prepared.agentListing.models !== undefined ? { agentModels: prepared.agentListing.models } : {}),
1895
+ }
1851
1896
  : {}),
1897
+ ...(skillsListingOn && prepared.skillsListing !== undefined ? { skillsListing: prepared.skillsListing.entries } : {}),
1852
1898
  ...(mcpAdds !== undefined || mcpRemovals !== undefined
1853
1899
  ? { mcpInstructions: { added: mcpAdds ?? [], removed: mcpRemovals ?? [] } }
1854
1900
  : {}),
@@ -1865,9 +1911,20 @@ export class Runner {
1865
1911
  }
1866
1912
  if (agentListingOn && prepared.agentListing !== undefined && due.some((a) => a.source === "agent_listing")) {
1867
1913
  const listing = prepared.agentListing;
1868
- const intactBody = renderAgentListingDelta(attachState, listing.entries, listing.toolName);
1914
+ const intactBody = renderAgentListingDelta(attachState, listing.entries, listing.toolName, listing.models);
1869
1915
  if (intactBody !== undefined && due.some((a) => a.source === "agent_listing" && a.body === intactBody)) {
1870
- commitAgentListing(attachState, listing.entries);
1916
+ commitAgentListing(attachState, listing.entries, listing.models);
1917
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
1918
+ if (listing.models !== undefined)
1919
+ prepared.announcedListingsRef.models = [...listing.models];
1920
+ }
1921
+ }
1922
+ if (skillsListingOn && prepared.skillsListing !== undefined && due.some((a) => a.source === "skills_listing")) {
1923
+ const listing = prepared.skillsListing;
1924
+ const intactBody = renderSkillsListingDelta(attachState, listing.entries);
1925
+ if (intactBody !== undefined && due.some((a) => a.source === "skills_listing" && a.body === intactBody)) {
1926
+ commitSkillsListing(attachState, listing.entries);
1927
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
1871
1928
  }
1872
1929
  }
1873
1930
  }
@@ -1919,7 +1976,7 @@ export class Runner {
1919
1976
  }
1920
1977
  if (attachmentsPayload !== undefined || batchContextBlock !== undefined) {
1921
1978
  const payload = attachmentsPayload !== undefined && batchContextBlock !== undefined ? `${attachmentsPayload}\n${batchContextBlock}` : (attachmentsPayload ?? batchContextBlock);
1922
- void prepared.harness.steer(payload).catch(() => { });
1979
+ void prepared.harness.steer(payload, { engineMinted: true }).catch(() => { });
1923
1980
  }
1924
1981
  const forceManual = manualCompactRef.requested;
1925
1982
  if ((!withinTaskCompaction && !forceManual) ||
@@ -2177,14 +2234,18 @@ export class Runner {
2177
2234
  continuation += "\n\n" + formatHookFeedback(renderOrphanedBackgroundTasks(orphans));
2178
2235
  }
2179
2236
  }
2237
+ const engineSegments = continuation.length > 0 ? [{ start: 0, end: continuation.length }] : [];
2180
2238
  for (const steer of [resume.cp.state.pendingSteer, resume.wakeMessage]) {
2181
- if (steer) {
2182
- continuation +=
2183
- "\n\n" +
2184
- (steer.trusted ? formatHookFeedback(steer.text) : delimitUntrusted("supervisor steering message", steer.text));
2185
- }
2239
+ if (steer === undefined)
2240
+ continue;
2241
+ const start = continuation.length;
2242
+ continuation +=
2243
+ "\n\n" +
2244
+ (steer.trusted ? formatHookFeedback(steer.text) : delimitUntrusted("supervisor steering message", steer.text));
2245
+ if (steer.trusted)
2246
+ engineSegments.push({ start, end: continuation.length });
2186
2247
  }
2187
- final = await withBrainSinks(() => prepared.harness.prompt(continuation));
2248
+ final = await withBrainSinks(() => prepared.harness.prompt(continuation, { engineSegments }));
2188
2249
  }
2189
2250
  }
2190
2251
  else {
@@ -2201,6 +2262,43 @@ export class Runner {
2201
2262
  effectiveObjective = `${formatHookFeedback(decision.additionalContext)}\n\n${spec.objective}`;
2202
2263
  }
2203
2264
  }
2265
+ const firstFrames = [];
2266
+ if (attachState !== undefined) {
2267
+ const attach = attachState;
2268
+ if (agentListingOn && prepared.agentListing !== undefined) {
2269
+ const listing = prepared.agentListing;
2270
+ const body = renderAgentListingDelta(attach, listing.entries, listing.toolName, listing.models);
2271
+ if (body !== undefined) {
2272
+ firstFrames.push({
2273
+ source: "agent_listing",
2274
+ body,
2275
+ commit: () => {
2276
+ commitAgentListing(attach, listing.entries, listing.models);
2277
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
2278
+ if (listing.models !== undefined)
2279
+ prepared.announcedListingsRef.models = [...listing.models];
2280
+ },
2281
+ });
2282
+ }
2283
+ }
2284
+ if (skillsListingOn && prepared.skillsListing !== undefined) {
2285
+ const listing = prepared.skillsListing;
2286
+ const body = renderSkillsListingDelta(attach, listing.entries);
2287
+ if (body !== undefined) {
2288
+ firstFrames.push({
2289
+ source: "skills_listing",
2290
+ body,
2291
+ commit: () => {
2292
+ commitSkillsListing(attach, listing.entries);
2293
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
2294
+ },
2295
+ });
2296
+ }
2297
+ }
2298
+ if (firstFrames.length > 0) {
2299
+ effectiveObjective = `${firstFrames.map((f) => `<system-reminder>\n${sanitizeUntrustedText(f.body)}\n</system-reminder>`).join("\n")}\n${effectiveObjective}`;
2300
+ }
2301
+ }
2204
2302
  const precallMicroUsd = maxCostMicroUsd === undefined
2205
2303
  ? 0
2206
2304
  : computeCostMicroUsd({
@@ -2220,7 +2318,16 @@ export class Runner {
2220
2318
  const images = spec.images
2221
2319
  ? await Promise.all(spec.images.map((img) => toImageContent(img, this.deps.allowImageUrl)))
2222
2320
  : undefined;
2223
- final = await withBrainSinks(() => prepared.harness.prompt(effectiveObjective, images && images.length > 0 ? { images } : undefined));
2321
+ for (const f of firstFrames) {
2322
+ f.commit();
2323
+ queue.push({ type: "steering_injected", source: f.source, preview: f.body.slice(0, 220), ...ident() });
2324
+ }
2325
+ attachmentsInjected += firstFrames.length;
2326
+ const enginePrefixChars = effectiveObjective.length - spec.objective.length;
2327
+ final = await withBrainSinks(() => prepared.harness.prompt(effectiveObjective, {
2328
+ ...(images && images.length > 0 ? { images } : {}),
2329
+ ...(enginePrefixChars > 0 ? { enginePrefixChars } : {}),
2330
+ }));
2224
2331
  }
2225
2332
  }
2226
2333
  abortedLive = prepared.abortController.signal.aborted;
@@ -3012,7 +3119,7 @@ export class Runner {
3012
3119
  dr.surfacedIds.add(id);
3013
3120
  for (const k of outcome.surfacedKeys)
3014
3121
  dr.surfacedKeys.add(k);
3015
- await prepared.harness.steer(outcome.block);
3122
+ await prepared.harness.steer(outcome.block, { provenance: "engine-note" });
3016
3123
  }
3017
3124
  catch {
3018
3125
  }