@sema-agent/core 1.300.0 → 1.302.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 +17 -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 +34 -1
  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 +8 -0
  27. package/dist/core/memory-engine/types.d.ts.map +1 -1
  28. package/dist/core/runner/prepare-task.d.ts +16 -1
  29. package/dist/core/runner/prepare-task.d.ts.map +1 -1
  30. package/dist/core/runner/prepare-task.js +109 -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 +190 -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 +32 -3
  43. package/dist/core/runner/turn-attachments.d.ts.map +1 -1
  44. package/dist/core/runner/turn-attachments.js +146 -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 +17 -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, collectInstructionsChange, commitAgentListing, commitInstructionsChange, 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,8 +818,15 @@ 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;
826
+ const instrProbe = this.deps.probeInstructionSources;
827
+ const instrState = instrProbe !== undefined && prepared.instructionSources !== undefined && prepared.instructionSources.length > 0
828
+ ? { lastAnnouncedHash: new Map(prepared.instructionSources.map((s) => [s.path, s.contentHash])) }
829
+ : undefined;
821
830
  let cadenceTurns = 0;
822
831
  let lastTurnHadToolCalls = false;
823
832
  if (attachState !== undefined && attachmentsCfg?.backgroundTasks === true) {
@@ -836,33 +845,61 @@ export class Runner {
836
845
  catch {
837
846
  }
838
847
  }
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");
848
+ if (attachState !== undefined &&
849
+ ((agentListingOn && prepared.agentListing?.seedAnnounced === true) ||
850
+ (skillsListingOn && prepared.skillsListing?.seedAnnounced === true))) {
851
+ const cpListings = resume?.cp.state.announcedListings;
852
+ const textOf = (m) => {
853
+ const c = m.content;
854
+ if (typeof c === "string")
855
+ return c;
856
+ if (Array.isArray(c)) {
857
+ return c
858
+ .map((b) => (b !== null && typeof b === "object" && b.type === "text" ? String(b.text ?? "") : ""))
859
+ .join("\n");
860
+ }
861
+ return "";
862
+ };
863
+ let branchTexts = null;
864
+ const branchIncludes = async (headers) => {
865
+ try {
866
+ if (branchTexts === null) {
867
+ const branch = await prepared.session.getBranch();
868
+ branchTexts = branch.flatMap((e) => (e.type === "message" ? [textOf(e.message)] : []));
851
869
  }
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) {
870
+ return branchTexts.some((text) => headers.some((h) => text.includes(h)));
871
+ }
872
+ catch {
873
+ return false;
874
+ }
875
+ };
876
+ if (agentListingOn && prepared.agentListing?.seedAnnounced === true) {
877
+ const listing = prepared.agentListing;
878
+ if (cpListings?.agents !== undefined) {
879
+ const descOf = new Map(listing.entries.map((e) => [e.name, e.description]));
880
+ attachState.announcedAgentTypes = new Map(cpListings.agents.map((n) => [n, descOf.get(n) ?? ""]));
881
+ prepared.announcedListingsRef.agents = [...cpListings.agents];
882
+ if (cpListings.models !== undefined) {
883
+ attachState.announcedModels = [...cpListings.models];
884
+ prepared.announcedListingsRef.models = [...cpListings.models];
885
+ }
886
+ }
887
+ else if (await branchIncludes([agentListingInitialHeader(listing.toolName), agentListingDeltaHeader(listing.toolName)])) {
862
888
  attachState.announcedAgentTypes = new Map(listing.entries.map((e) => [e.name, e.description]));
889
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
863
890
  }
864
891
  }
865
- catch {
892
+ if (skillsListingOn && prepared.skillsListing?.seedAnnounced === true) {
893
+ const listing = prepared.skillsListing;
894
+ if (cpListings?.skills !== undefined) {
895
+ const descOf = new Map(listing.entries.map((e) => [e.name, e.description]));
896
+ attachState.announcedSkills = new Map(cpListings.skills.map((n) => [n, descOf.get(n) ?? ""]));
897
+ prepared.announcedListingsRef.skills = [...cpListings.skills];
898
+ }
899
+ else if (await branchIncludes([SKILLS_LISTING_PROBE_HEADER, SKILLS_LISTING_DELTA_HEADER])) {
900
+ attachState.announcedSkills = new Map(listing.entries.map((e) => [e.name, e.description]));
901
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
902
+ }
866
903
  }
867
904
  }
868
905
  if (spec.finalVerification === true && resume !== undefined) {
@@ -1185,7 +1222,7 @@ export class Runner {
1185
1222
  prepared.callCapRef.finalizeMode = true;
1186
1223
  if (!finalizeInjected) {
1187
1224
  const finalizeText = buildFinalizeText();
1188
- void prepared.harness.steer(finalizeText).catch(() => { });
1225
+ void prepared.harness.steer(finalizeText, { engineMinted: true }).catch(() => { });
1189
1226
  finalizeInjected = true;
1190
1227
  nudgeIdx = nudgeSchedule.length;
1191
1228
  queue.push({ type: "steering_injected", source: "finalize", preview: finalizeText.slice(0, 220), ...ident() });
@@ -1514,6 +1551,7 @@ export class Runner {
1514
1551
  return [
1515
1552
  {
1516
1553
  role: "user",
1554
+ engineMinted: true,
1517
1555
  content: "<system-reminder>[final verification] Your tool calls in this run worked with raw bytes, structural parsing, " +
1518
1556
  "or checksum/digest computation — the deliverable very likely embeds verifiable structure (structural fields, an " +
1519
1557
  "embedded checksum-family value, reference data it must match, or a replayable deterministic path). You MUST " +
@@ -1530,6 +1568,7 @@ export class Runner {
1530
1568
  return [
1531
1569
  {
1532
1570
  role: "user",
1571
+ engineMinted: true,
1533
1572
  content: "<system-reminder>[final verification] Before finishing: re-verify the FINAL deliverable through its REAL entry point, " +
1534
1573
  "exactly as the acceptance criteria would exercise it — execute the binary/function/endpoint directly and read the ACTUAL " +
1535
1574
  "output and exit code. Do NOT rely on earlier self-tests, shell redirections, or assumptions (a program that prints to " +
@@ -1576,6 +1615,7 @@ export class Runner {
1576
1615
  if (result?.additionalContext) {
1577
1616
  messages.push({
1578
1617
  role: "user",
1618
+ engineMinted: true,
1579
1619
  content: formatHookFeedback(`Stop hook additional context: ${result.additionalContext}`),
1580
1620
  timestamp: Date.now(),
1581
1621
  });
@@ -1591,7 +1631,12 @@ export class Runner {
1591
1631
  `Check ctx.stopHookActive in the hook and return success while it's true.`), { phase: "hook", sessionId: prepared.sessionId });
1592
1632
  return [];
1593
1633
  }
1594
- messages.push({ role: "user", content: formatHookFeedback(`Stop hook stopped continuation: ${result.block}`), timestamp: Date.now() });
1634
+ messages.push({
1635
+ role: "user",
1636
+ engineMinted: true,
1637
+ content: formatHookFeedback(`Stop hook stopped continuation: ${result.block}`),
1638
+ timestamp: Date.now(),
1639
+ });
1595
1640
  return messages;
1596
1641
  });
1597
1642
  }
@@ -1719,7 +1764,7 @@ export class Runner {
1719
1764
  prepared.callCapRef.finalizeMode = true;
1720
1765
  nudgeIdx = nudgeSchedule.length;
1721
1766
  const finalizeText = buildFinalizeText();
1722
- void prepared.harness.steer(finalizeText).catch(() => { });
1767
+ void prepared.harness.steer(finalizeText, { engineMinted: true }).catch(() => { });
1723
1768
  boundarySteered = true;
1724
1769
  queue.push({ type: "steering_injected", source: "finalize", preview: finalizeText.slice(0, 220), ...ident() });
1725
1770
  }
@@ -1729,7 +1774,7 @@ export class Runner {
1729
1774
  due = nudgeSchedule[nudgeIdx++];
1730
1775
  }
1731
1776
  if (due) {
1732
- void prepared.harness.steer(due.text).catch(() => { });
1777
+ void prepared.harness.steer(due.text, { engineMinted: true }).catch(() => { });
1733
1778
  nudgesSent += 1;
1734
1779
  boundarySteered = true;
1735
1780
  queue.push({ type: "steering_injected", source: "deadline_nudge", preview: due.text.slice(0, 220), ...ident() });
@@ -1780,23 +1825,23 @@ export class Runner {
1780
1825
  if (files.length > 0) {
1781
1826
  queue.push({ type: "diagnostics", files, isNew: true, ...ident() });
1782
1827
  const block = formatDiagnosticsBlock(files);
1783
- void prepared.harness.steer(block).catch(() => undefined);
1828
+ void prepared.harness.steer(block, { provenance: "engine-note" }).catch(() => undefined);
1784
1829
  boundarySteered = true;
1785
1830
  }
1786
1831
  }
1787
1832
  let boundaryAttachmentBytes = 0;
1788
1833
  let attachmentsPayload;
1789
- if ((dateState !== undefined || (attachState !== undefined && attachmentsCfg !== undefined)) &&
1834
+ if ((dateState !== undefined || instrState !== undefined || attachState !== undefined) &&
1790
1835
  !boundarySteered &&
1791
1836
  !finalizeInjected &&
1792
1837
  finalVerifyInjections === 0 &&
1793
1838
  !prepared.abortController.signal.aborted) {
1794
1839
  const due = [];
1795
- if (attachState !== undefined && attachmentsCfg !== undefined) {
1796
- const changedFilesOn = Boolean(attachmentsCfg.changedFiles);
1840
+ if (attachState !== undefined) {
1841
+ const changedFilesOn = Boolean(attachmentsCfg?.changedFiles);
1797
1842
  let changed;
1798
1843
  if (changedFilesOn && prepared.detectExternalChanges !== undefined) {
1799
- const maxFiles = typeof attachmentsCfg.changedFiles === "object"
1844
+ const maxFiles = typeof attachmentsCfg?.changedFiles === "object"
1800
1845
  ? (attachmentsCfg.changedFiles.maxFiles ?? CHANGED_FILES_MAX)
1801
1846
  : CHANGED_FILES_MAX;
1802
1847
  const SCAN_CEILING_MS = 2_000;
@@ -1811,18 +1856,17 @@ export class Runner {
1811
1856
  attachState.surfacedMtime.delete(p);
1812
1857
  changed = scan.changed;
1813
1858
  }
1814
- const backgroundTasksOn = attachmentsCfg.backgroundTasks === true;
1859
+ const backgroundTasksOn = attachmentsCfg?.backgroundTasks === true;
1815
1860
  const bgTasks = backgroundTasksOn && attachState.postCompactPending ? prepared.listBackgroundTasks() : undefined;
1816
- const toolsDeltaOn = attachmentsCfg.toolsDelta === true;
1861
+ const toolsDeltaOn = attachmentsCfg?.toolsDelta === true;
1817
1862
  const pendingTools = toolsDeltaOn && prepared.toolsDeltaRef !== undefined && prepared.toolsDeltaRef.pending.length > 0
1818
1863
  ? [...prepared.toolsDeltaRef.pending]
1819
1864
  : undefined;
1820
- const agentListingOn = attachmentsCfg.agentListing === true;
1821
- const mcpInstructionsOn = attachmentsCfg.mcpInstructions === true;
1865
+ const mcpInstructionsOn = attachmentsCfg?.mcpInstructions === true;
1822
1866
  const mcpDelta = prepared.mcp.instructionsDelta;
1823
1867
  const mcpAdds = mcpInstructionsOn && mcpDelta.pendingAdds.length > 0 ? [...mcpDelta.pendingAdds] : undefined;
1824
1868
  const mcpRemovals = mcpInstructionsOn && mcpDelta.pendingRemovals.length > 0 ? [...mcpDelta.pendingRemovals] : undefined;
1825
- const budgetUsdOn = attachmentsCfg.budgetUsd === true && maxCostMicroUsd !== undefined && lastTurnHadToolCalls;
1869
+ const budgetUsdOn = attachmentsCfg?.budgetUsd === true && maxCostMicroUsd !== undefined && lastTurnHadToolCalls;
1826
1870
  due.push(...collectDueAttachments(attachState, {
1827
1871
  turn: stats.turns,
1828
1872
  cadenceTurn: cadenceTurns,
@@ -1830,14 +1874,15 @@ export class Runner {
1830
1874
  taskListMounted: taskToolsMounted,
1831
1875
  planActive: prepared.planModeRef.active,
1832
1876
  config: {
1833
- todoReminder: attachmentsCfg.todoReminder === true,
1834
- ...(attachmentsCfg.todoReminderMode !== undefined ? { todoReminderMode: attachmentsCfg.todoReminderMode } : {}),
1877
+ todoReminder: attachmentsCfg?.todoReminder === true,
1878
+ ...(attachmentsCfg?.todoReminderMode !== undefined ? { todoReminderMode: attachmentsCfg.todoReminderMode } : {}),
1835
1879
  changedFiles: changedFilesOn,
1836
- planModeReminder: attachmentsCfg.planModeReminder === true,
1880
+ planModeReminder: attachmentsCfg?.planModeReminder === true,
1837
1881
  budgetUsd: budgetUsdOn,
1838
1882
  backgroundTasks: backgroundTasksOn,
1839
1883
  toolsDelta: toolsDeltaOn,
1840
1884
  agentListing: agentListingOn,
1885
+ skillsListing: skillsListingOn,
1841
1886
  mcpInstructions: mcpInstructionsOn,
1842
1887
  },
1843
1888
  ...(changed !== undefined ? { changedFiles: changed } : {}),
@@ -1847,8 +1892,13 @@ export class Runner {
1847
1892
  ...(bgTasks !== undefined ? { backgroundTasks: bgTasks } : {}),
1848
1893
  ...(pendingTools !== undefined ? { newTools: pendingTools } : {}),
1849
1894
  ...(agentListingOn && prepared.agentListing !== undefined
1850
- ? { agentListing: prepared.agentListing.entries, agentToolName: prepared.agentListing.toolName }
1895
+ ? {
1896
+ agentListing: prepared.agentListing.entries,
1897
+ agentToolName: prepared.agentListing.toolName,
1898
+ ...(prepared.agentListing.models !== undefined ? { agentModels: prepared.agentListing.models } : {}),
1899
+ }
1851
1900
  : {}),
1901
+ ...(skillsListingOn && prepared.skillsListing !== undefined ? { skillsListing: prepared.skillsListing.entries } : {}),
1852
1902
  ...(mcpAdds !== undefined || mcpRemovals !== undefined
1853
1903
  ? { mcpInstructions: { added: mcpAdds ?? [], removed: mcpRemovals ?? [] } }
1854
1904
  : {}),
@@ -1865,9 +1915,20 @@ export class Runner {
1865
1915
  }
1866
1916
  if (agentListingOn && prepared.agentListing !== undefined && due.some((a) => a.source === "agent_listing")) {
1867
1917
  const listing = prepared.agentListing;
1868
- const intactBody = renderAgentListingDelta(attachState, listing.entries, listing.toolName);
1918
+ const intactBody = renderAgentListingDelta(attachState, listing.entries, listing.toolName, listing.models);
1869
1919
  if (intactBody !== undefined && due.some((a) => a.source === "agent_listing" && a.body === intactBody)) {
1870
- commitAgentListing(attachState, listing.entries);
1920
+ commitAgentListing(attachState, listing.entries, listing.models);
1921
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
1922
+ if (listing.models !== undefined)
1923
+ prepared.announcedListingsRef.models = [...listing.models];
1924
+ }
1925
+ }
1926
+ if (skillsListingOn && prepared.skillsListing !== undefined && due.some((a) => a.source === "skills_listing")) {
1927
+ const listing = prepared.skillsListing;
1928
+ const intactBody = renderSkillsListingDelta(attachState, listing.entries);
1929
+ if (intactBody !== undefined && due.some((a) => a.source === "skills_listing" && a.body === intactBody)) {
1930
+ commitSkillsListing(attachState, listing.entries);
1931
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
1871
1932
  }
1872
1933
  }
1873
1934
  }
@@ -1879,6 +1940,27 @@ export class Runner {
1879
1940
  dateState.announcedDate = today;
1880
1941
  }
1881
1942
  }
1943
+ if (instrState !== undefined && instrProbe !== undefined && lastTurnHadToolCalls) {
1944
+ let probed = null;
1945
+ try {
1946
+ const PROBE_CEILING_MS = 2_000;
1947
+ probed = await Promise.race([
1948
+ instrProbe(prepared.instructionSources),
1949
+ new Promise((resolve) => {
1950
+ const t = setTimeout(() => resolve(null), PROBE_CEILING_MS);
1951
+ t.unref?.();
1952
+ }),
1953
+ ]);
1954
+ }
1955
+ catch {
1956
+ probed = null;
1957
+ }
1958
+ const cand = collectInstructionsChange(instrState, probed);
1959
+ if (cand !== undefined) {
1960
+ due.splice(due.length > 0 && due[0].source === "date_change" ? 1 : 0, 0, cand.attachment);
1961
+ commitInstructionsChange(instrState, cand.announced);
1962
+ }
1963
+ }
1882
1964
  if (due.length > 0) {
1883
1965
  attachmentsPayload = due.map((a) => `<system-reminder>\n${sanitizeUntrustedText(a.body)}\n</system-reminder>`).join("\n");
1884
1966
  for (const a of due)
@@ -1919,7 +2001,7 @@ export class Runner {
1919
2001
  }
1920
2002
  if (attachmentsPayload !== undefined || batchContextBlock !== undefined) {
1921
2003
  const payload = attachmentsPayload !== undefined && batchContextBlock !== undefined ? `${attachmentsPayload}\n${batchContextBlock}` : (attachmentsPayload ?? batchContextBlock);
1922
- void prepared.harness.steer(payload).catch(() => { });
2004
+ void prepared.harness.steer(payload, { engineMinted: true }).catch(() => { });
1923
2005
  }
1924
2006
  const forceManual = manualCompactRef.requested;
1925
2007
  if ((!withinTaskCompaction && !forceManual) ||
@@ -2177,14 +2259,18 @@ export class Runner {
2177
2259
  continuation += "\n\n" + formatHookFeedback(renderOrphanedBackgroundTasks(orphans));
2178
2260
  }
2179
2261
  }
2262
+ const engineSegments = continuation.length > 0 ? [{ start: 0, end: continuation.length }] : [];
2180
2263
  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
- }
2264
+ if (steer === undefined)
2265
+ continue;
2266
+ const start = continuation.length;
2267
+ continuation +=
2268
+ "\n\n" +
2269
+ (steer.trusted ? formatHookFeedback(steer.text) : delimitUntrusted("supervisor steering message", steer.text));
2270
+ if (steer.trusted)
2271
+ engineSegments.push({ start, end: continuation.length });
2186
2272
  }
2187
- final = await withBrainSinks(() => prepared.harness.prompt(continuation));
2273
+ final = await withBrainSinks(() => prepared.harness.prompt(continuation, { engineSegments }));
2188
2274
  }
2189
2275
  }
2190
2276
  else {
@@ -2201,6 +2287,43 @@ export class Runner {
2201
2287
  effectiveObjective = `${formatHookFeedback(decision.additionalContext)}\n\n${spec.objective}`;
2202
2288
  }
2203
2289
  }
2290
+ const firstFrames = [];
2291
+ if (attachState !== undefined) {
2292
+ const attach = attachState;
2293
+ if (agentListingOn && prepared.agentListing !== undefined) {
2294
+ const listing = prepared.agentListing;
2295
+ const body = renderAgentListingDelta(attach, listing.entries, listing.toolName, listing.models);
2296
+ if (body !== undefined) {
2297
+ firstFrames.push({
2298
+ source: "agent_listing",
2299
+ body,
2300
+ commit: () => {
2301
+ commitAgentListing(attach, listing.entries, listing.models);
2302
+ prepared.announcedListingsRef.agents = listing.entries.map((e) => e.name);
2303
+ if (listing.models !== undefined)
2304
+ prepared.announcedListingsRef.models = [...listing.models];
2305
+ },
2306
+ });
2307
+ }
2308
+ }
2309
+ if (skillsListingOn && prepared.skillsListing !== undefined) {
2310
+ const listing = prepared.skillsListing;
2311
+ const body = renderSkillsListingDelta(attach, listing.entries);
2312
+ if (body !== undefined) {
2313
+ firstFrames.push({
2314
+ source: "skills_listing",
2315
+ body,
2316
+ commit: () => {
2317
+ commitSkillsListing(attach, listing.entries);
2318
+ prepared.announcedListingsRef.skills = listing.entries.map((e) => e.name);
2319
+ },
2320
+ });
2321
+ }
2322
+ }
2323
+ if (firstFrames.length > 0) {
2324
+ effectiveObjective = `${firstFrames.map((f) => `<system-reminder>\n${sanitizeUntrustedText(f.body)}\n</system-reminder>`).join("\n")}\n${effectiveObjective}`;
2325
+ }
2326
+ }
2204
2327
  const precallMicroUsd = maxCostMicroUsd === undefined
2205
2328
  ? 0
2206
2329
  : computeCostMicroUsd({
@@ -2220,7 +2343,16 @@ export class Runner {
2220
2343
  const images = spec.images
2221
2344
  ? await Promise.all(spec.images.map((img) => toImageContent(img, this.deps.allowImageUrl)))
2222
2345
  : undefined;
2223
- final = await withBrainSinks(() => prepared.harness.prompt(effectiveObjective, images && images.length > 0 ? { images } : undefined));
2346
+ for (const f of firstFrames) {
2347
+ f.commit();
2348
+ queue.push({ type: "steering_injected", source: f.source, preview: f.body.slice(0, 220), ...ident() });
2349
+ }
2350
+ attachmentsInjected += firstFrames.length;
2351
+ const enginePrefixChars = effectiveObjective.length - spec.objective.length;
2352
+ final = await withBrainSinks(() => prepared.harness.prompt(effectiveObjective, {
2353
+ ...(images && images.length > 0 ? { images } : {}),
2354
+ ...(enginePrefixChars > 0 ? { enginePrefixChars } : {}),
2355
+ }));
2224
2356
  }
2225
2357
  }
2226
2358
  abortedLive = prepared.abortController.signal.aborted;
@@ -3012,7 +3144,7 @@ export class Runner {
3012
3144
  dr.surfacedIds.add(id);
3013
3145
  for (const k of outcome.surfacedKeys)
3014
3146
  dr.surfacedKeys.add(k);
3015
- await prepared.harness.steer(outcome.block);
3147
+ await prepared.harness.steer(outcome.block, { provenance: "engine-note" });
3016
3148
  }
3017
3149
  catch {
3018
3150
  }