@sema-agent/core 7.37.0 → 7.38.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 (136) hide show
  1. package/CHANGELOG.md +170 -0
  2. package/dist/agents/observer.js +1 -1
  3. package/dist/agents/peer-notices.js +4 -4
  4. package/dist/agents/subagent.js +1 -1
  5. package/dist/agents/team-role.js +2 -2
  6. package/dist/brain/anthropic.js +13 -19
  7. package/dist/brain/errors.d.ts +26 -0
  8. package/dist/brain/errors.js +34 -0
  9. package/dist/brain/input-too-long.d.ts +0 -31
  10. package/dist/brain/input-too-long.js +1 -18
  11. package/dist/brain/open-responses.js +12 -18
  12. package/dist/brain/openai.js +13 -19
  13. package/dist/brain/status-sink.d.ts +1 -1
  14. package/dist/brain/stream-engine.js +10 -2
  15. package/dist/brain/stream-shared.d.ts +29 -0
  16. package/dist/brain/stream-shared.js +15 -0
  17. package/dist/brain/tool-call-id.d.ts +29 -8
  18. package/dist/brain/tool-call-id.js +36 -6
  19. package/dist/core/a2a-task-state.js +2 -2
  20. package/dist/core/artifact-host.js +6 -6
  21. package/dist/core/ask-origin.js +6 -6
  22. package/dist/core/ask-unresolvable-notice.js +1 -1
  23. package/dist/core/auto-mode.js +4 -4
  24. package/dist/core/background-agent-store.js +2 -2
  25. package/dist/core/checkpoint-execution-record.js +1 -1
  26. package/dist/core/checkpoint-store.d.ts +2 -2
  27. package/dist/core/checkpoint-store.js +2 -2
  28. package/dist/core/child-clamp-seats.js +3 -3
  29. package/dist/core/compliance.js +1 -1
  30. package/dist/core/context-edit.js +1 -1
  31. package/dist/core/context-guard.d.ts +0 -19
  32. package/dist/core/context-guard.js +0 -38
  33. package/dist/core/decision-receipt.d.ts +27 -1
  34. package/dist/core/decision-receipt.js +176 -1
  35. package/dist/core/engine-notice.d.ts +67 -7
  36. package/dist/core/engine-notice.js +2 -1
  37. package/dist/core/gate-fold.js +3 -2
  38. package/dist/core/gate-outcome.js +4 -4
  39. package/dist/core/governance-codes.d.ts +221 -13
  40. package/dist/core/governance-codes.js +106 -4
  41. package/dist/core/hook-seats.js +2 -2
  42. package/dist/core/hooks.d.ts +21 -2
  43. package/dist/core/hooks.js +4 -1
  44. package/dist/core/mailbox-store.js +3 -3
  45. package/dist/core/mcp-failure.js +4 -4
  46. package/dist/core/mcp-injection-drop.js +1 -1
  47. package/dist/core/memory-engine/consolidation.js +1 -1
  48. package/dist/core/memory-engine/delegation-settlement.d.ts +8 -0
  49. package/dist/core/memory-engine/delegation-settlement.js +7 -0
  50. package/dist/core/memory-engine/engine.d.ts +12 -2
  51. package/dist/core/memory-engine/engine.js +10 -6
  52. package/dist/core/memory-engine/export-bundle.js +1 -1
  53. package/dist/core/memory-engine/layout.d.ts +6 -6
  54. package/dist/core/memory-engine/layout.js +6 -8
  55. package/dist/core/memory-engine/session-write-home.d.ts +30 -0
  56. package/dist/core/memory-engine/session-write-home.js +34 -0
  57. package/dist/core/memory-engine/tools.js +1 -1
  58. package/dist/core/memory-engine/types.js +1 -1
  59. package/dist/core/memory.js +1 -1
  60. package/dist/core/mode-policy.d.ts +10 -1
  61. package/dist/core/mode-policy.js +15 -7
  62. package/dist/core/model-seat.js +1 -1
  63. package/dist/core/permission-rule-model.js +3 -3
  64. package/dist/core/permission-rule-store.js +2 -2
  65. package/dist/core/read-only-shell-table.js +8 -8
  66. package/dist/core/retention.js +2 -2
  67. package/dist/core/runner/assemble-result.js +15 -5
  68. package/dist/core/runner/classifier-ladder.js +1 -1
  69. package/dist/core/runner/denial-limit-arms.d.ts +2 -0
  70. package/dist/core/runner/denial-limit-arms.js +6 -2
  71. package/dist/core/runner/inherited-ask-grants.d.ts +6 -5
  72. package/dist/core/runner/inherited-ask-grants.js +3 -2
  73. package/dist/core/runner/prepare-context-lane.d.ts +19 -15
  74. package/dist/core/runner/prepare-context-lane.js +11 -15
  75. package/dist/core/runner/prepare-gate-stations.js +5 -5
  76. package/dist/core/runner/prepare-inherited-gate.js +1 -1
  77. package/dist/core/runner/prepare-policy-chain.js +10 -10
  78. package/dist/core/runner/run-harness-handlers.js +3 -0
  79. package/dist/core/runner/run-leg.js +2 -2
  80. package/dist/core/runner/run-stop-and-final-verify.js +1 -0
  81. package/dist/core/runner/run-turn-boundary.js +1 -1
  82. package/dist/core/runner/session-mode-seats.d.ts +11 -3
  83. package/dist/core/runner/session-mode-seats.js +6 -0
  84. package/dist/core/runner/session-rule-policy.js +2 -3
  85. package/dist/core/runner/stream-steer-verb.js +1 -1
  86. package/dist/core/runner/tool-call-id-fold-seat.js +16 -9
  87. package/dist/core/runner/tool-turn-repair-seat.d.ts +18 -0
  88. package/dist/core/runner/tool-turn-repair-seat.js +63 -0
  89. package/dist/core/runner/turn-attachments.js +1 -1
  90. package/dist/core/runtime-caps.js +1 -1
  91. package/dist/core/safety-axis-vocab.d.ts +5 -0
  92. package/dist/core/safety-axis-vocab.js +5 -0
  93. package/dist/core/session-reconcile.d.ts +44 -7
  94. package/dist/core/session-reconcile.js +51 -20
  95. package/dist/core/shared-memory/types.js +1 -1
  96. package/dist/core/side-query.d.ts +6 -1
  97. package/dist/core/side-query.js +4 -2
  98. package/dist/core/store-contracts/read-back-shape-contract.js +1 -1
  99. package/dist/core/swappable-deps.js +1 -1
  100. package/dist/core/task-notification.js +4 -4
  101. package/dist/core/task-registry-shared.js +1 -1
  102. package/dist/core/terminal-cause.d.ts +19 -0
  103. package/dist/core/tool-face.js +6 -6
  104. package/dist/core/tool-policy.d.ts +17 -11
  105. package/dist/core/tool-policy.js +38 -72
  106. package/dist/core/tool-roster.js +1 -1
  107. package/dist/core/tool-search-setting.js +1 -1
  108. package/dist/core/trace.d.ts +5 -4
  109. package/dist/core/types.d.ts +2 -2
  110. package/dist/core/types.js +1 -1
  111. package/dist/core/wiring-manifest.js +2 -2
  112. package/dist/core/write-protect.js +1 -1
  113. package/dist/engine/harness/agent-harness.d.ts +7 -0
  114. package/dist/engine/harness/agent-harness.js +24 -8
  115. package/dist/engine/llm/index.d.ts +1 -0
  116. package/dist/engine/llm/index.js +1 -0
  117. package/dist/engine/llm/tool-turns.d.ts +109 -0
  118. package/dist/engine/llm/tool-turns.js +145 -0
  119. package/dist/engine/llm/types.d.ts +11 -0
  120. package/dist/index.d.ts +5 -3
  121. package/dist/index.js +4 -2
  122. package/dist/internal/llm.d.ts +2 -2
  123. package/dist/internal/llm.js +1 -1
  124. package/dist/orchestration/workflow-governance.js +2 -2
  125. package/dist/orchestration/workflow-types.js +2 -2
  126. package/dist/shell/lex.js +7 -7
  127. package/dist/tools/fs/bash-program-position.js +2 -2
  128. package/dist/tools/fs/read-deny.js +2 -2
  129. package/dist/tools/fs/safety.js +1 -1
  130. package/dist/tools/fs/shell-read-judge.js +2 -2
  131. package/dist/tools/fs/shell-read-plan.js +2 -2
  132. package/dist/tools/fs/shell-read-write-targets.js +1 -1
  133. package/package.json +1 -1
  134. package/test/export-surface.snapshot.json +17 -1
  135. package/wire-changes/core@7.37.1.json +122 -0
  136. package/wire-changes/core@7.38.0.json +664 -0
@@ -89,7 +89,7 @@ function launcherOptionStep(row, tok) {
89
89
  return 1;
90
90
  return undefined;
91
91
  }
92
- export const PROGRAM_POSITION_REFUSAL_KINDS = ["option_at_program_position", "control_syntax_at_program_position"];
92
+ export const PROGRAM_POSITION_REFUSAL_KINDS = Object.freeze(["option_at_program_position", "control_syntax_at_program_position"]);
93
93
  export function readProgramPosition(words) {
94
94
  const folded = words.map((w) => w.folded);
95
95
  const controlWords = [];
@@ -172,7 +172,7 @@ export function argvReentryUnjudged(pos, acceptedTargets) {
172
172
  const runs = pos.program?.basename ?? (pos.runsDefaultProgram ? ARGV_REENTRY_DEFAULT_PROGRAM : undefined);
173
173
  return runs === undefined || !acceptedTargets.has(runs);
174
174
  }
175
- export const SHELL_SCAN_DECLINES = ["unreadable_program_position", "stream_fed_operands"];
175
+ export const SHELL_SCAN_DECLINES = Object.freeze(["unreadable_program_position", "stream_fed_operands"]);
176
176
  export function programPositionRunsShell(pos, shellProgram) {
177
177
  if (pos.refusal !== undefined)
178
178
  return pos.refusal.kind === "control_syntax_at_program_position" && pos.refusal.runsShell === true;
@@ -11,7 +11,7 @@ export function readDenyRunHead(run) {
11
11
  const wild = segments.findIndex((seg) => seg.includes("*"));
12
12
  return wild === -1 ? segments.length : wild;
13
13
  }
14
- export const DENY_FACES = ["read", "write"];
14
+ export const DENY_FACES = Object.freeze(["read", "write"]);
15
15
  export async function withRuleRowsWhereTheyLead(rows, leadsTo) {
16
16
  const leads = new Map();
17
17
  const partsOf = (head) => {
@@ -144,7 +144,7 @@ export function elideMiddle(s, budget) {
144
144
  const head = Math.ceil(keep / 2);
145
145
  return `${sliceHeadSafe(s, head)}\u2026${sliceTailSafe(s, keep - head)}`;
146
146
  }
147
- export const READ_DENY_BUILTIN_TIERS = ["credentials", "shell-history", "browser", "wallet", "agent-config"];
147
+ export const READ_DENY_BUILTIN_TIERS = Object.freeze(["credentials", "shell-history", "browser", "wallet", "agent-config"]);
148
148
  export const READ_FACE_BUILTIN_DENY_TABLE = [
149
149
  { pattern: ".ssh", tier: "credentials" },
150
150
  { pattern: "id_rsa*", tier: "credentials" },
@@ -312,7 +312,7 @@ export function isUncSpelling(p) {
312
312
  export function isAbsoluteForFamily(family, p) {
313
313
  return family === "win" ? /^[A-Za-z]:[\\/]/.test(p) || isUncSpelling(p) : p.startsWith("/");
314
314
  }
315
- export const WIN32_NAMESPACE_REFUSALS = ["device_namespace", "unmappable_namespace", "unc_on_posix_tree", "drive_relative"];
315
+ export const WIN32_NAMESPACE_REFUSALS = Object.freeze(["device_namespace", "unmappable_namespace", "unc_on_posix_tree", "drive_relative"]);
316
316
  export const WIN32_NAMESPACE_REFUSAL_TEXT = {
317
317
  device_namespace: "is a Win32 device-namespace path (\\\\.\\ names a raw device object, not a file)",
318
318
  unmappable_namespace: "is a Win32 extended-length namespace path with no DOS-path equivalent (only \\\\?\\<drive>: and \\\\?\\UNC\\ forms name files)",
@@ -1,8 +1,8 @@
1
1
  import { hasWin32AliasedComponent, normalizeAbsPathLexically, withinAnyRoot } from "./safety.js";
2
2
  import { globInWord } from "./bash-readonly-classifier.js";
3
3
  import { readOfText } from "./shell-read-word.js";
4
- export const SHELL_READ_FINDINGS = ["deny_hit", "outside_roots", "unestablishable", "declined", "identity_changed", "none"];
5
- export const SHELL_READ_SEATS = ["full_shell", "readonly", "rejudge"];
4
+ export const SHELL_READ_FINDINGS = Object.freeze(["deny_hit", "outside_roots", "unestablishable", "declined", "identity_changed", "none"]);
5
+ export const SHELL_READ_SEATS = Object.freeze(["full_shell", "readonly", "rejudge"]);
6
6
  export const SHELL_READ_FINDING_RANK = {
7
7
  identity_changed: 6,
8
8
  deny_hit: 5,
@@ -4,7 +4,7 @@ import { LAUNCHER_TABLE, SHELL_BLOCK_WORDS, programBasename, programPositionRuns
4
4
  import { ASSIGNMENT_VALUE_NOT_PATHS, DECLARATION_BUILTINS, INERT_BUILTINS, INTERPRETER_INLINE_PROGRAMS, NO_PATH_OPERAND_COMMANDS, NO_PATH_OPERAND_EVALUATORS, POLL_LOOP_MAX_BEATS, RECURSIVE_READ_FORMS, SHELL_REENTRY_PROGRAM_RE, UNMODELLED_BASE_MOVERS, argvProgramOf, homeMayBeRebound, attachedOptionPayloads, resolveOperandLexically, inlineProgramClause, interpreterKey, isPathShapedToken, messageSlotWords, readVerbOptionSlot, sedScriptSlotFiles, segmentSelectsRecursiveRead, slotValueCandidates, suppliesFirstOperandSlot, verbFirstOperandSlot, verbOptionsArePositionIndependent, } from "./bash-readonly-classifier.js";
5
5
  import { isAbsolutePathForm } from "./safety.js";
6
6
  import { codeBodies, reentryText } from "./shell-reentry-text.js";
7
- export const READ_CANDIDATE_PROVENANCES = [
7
+ export const READ_CANDIDATE_PROVENANCES = Object.freeze([
8
8
  "operand",
9
9
  "option_value",
10
10
  "stdin_redirect",
@@ -15,7 +15,7 @@ export const READ_CANDIDATE_PROVENANCES = [
15
15
  "cd_target",
16
16
  "program_path",
17
17
  "script_slot_file",
18
- ];
18
+ ]);
19
19
  const NESTING_MAX = 4;
20
20
  const BASE_CANDIDATE_MAX = 256;
21
21
  export function planShellReads(command, decl, depth = 0, homeRebound = false, arithmetic = false) {
@@ -1,5 +1,5 @@
1
1
  import { denyFloorShadowsOf } from "./shell-read-judge.js";
2
- export const SHELL_WRITE_COMMANDS = ["mkdir", "touch", "rm", "rmdir", "mv", "cp", "tee", "sed"];
2
+ export const SHELL_WRITE_COMMANDS = Object.freeze(["mkdir", "touch", "rm", "rmdir", "mv", "cp", "tee", "sed"]);
3
3
  const WRITE_COMMAND_SET = new Set(SHELL_WRITE_COMMANDS);
4
4
  export function spellsOption(word, long, short) {
5
5
  if (word.startsWith("--")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.37.0",
3
+ "version": "7.38.0",
4
4
  "description": "Stateless, task-oriented AI agent core",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_comment": "design/87 L3 — frozen public export surface of src/index.ts (name -> kind). DO NOT edit by hand to silence a red test. A removed/changed entry = a SemVer-BREAKING change; bump MAJOR and update this fixture in the SAME commit (design/87 §4.2 / §5.2). Regenerate via REGEN in test/export-surface.test.ts.",
3
3
  "_tierComment": "#435 v1 — machine-readable layering of the public surface: stable = demonstrated by README.md / src/examples; internal = an `Internal`-marked name or a runner/engine deep-subtree declaration (the model seam src/engine/llm is excluded — it is the BYOM contract, not an engine internal); advanced = a supported export the front door does not walk you through. THIS IS AN INITIAL HEURISTIC, derived mechanically and expected to be refined ticket by ticket: no human reviewed these 1700+ entries one by one, and nothing here claims otherwise. Known bias: a short or English-word export name (ok, err, Result, Usage) can match ordinary prose in README.md and land `stable` on a coincidence. Every export MUST carry a tier — a new export with no row fails the gate in export-surface.test.ts.",
4
- "count": 2540,
4
+ "count": 2548,
5
5
  "exports": {
6
6
  "A2ATaskState": "type",
7
7
  "A2ATaskStateReversal": "type",
@@ -835,6 +835,7 @@
835
835
  "MonitorTimers": "interface",
836
836
  "MonitorToolOptions": "interface",
837
837
  "NOTICE_AUDIENCE": "variable",
838
+ "NOTICE_MINTER": "variable",
838
839
  "NOTIFICATION_INJECTION_OUTCOMES": "variable",
839
840
  "NO_PERSISTENT_MEMORY_NOTICE": "variable",
840
841
  "NamedToolPolicy": "type",
@@ -847,6 +848,7 @@
847
848
  "NormalizedReadDenyEntry": "interface",
848
849
  "NotePatch": "interface",
849
850
  "NoticeAudience": "type",
851
+ "NoticeMinter": "type",
850
852
  "NotificationInjectionOutcome": "type",
851
853
  "OFFLOAD_TOOL_NAME": "variable",
852
854
  "ORCHESTRATION_AWARENESS": "variable",
@@ -1503,6 +1505,7 @@
1503
1505
  "TOOL_SEARCH_DEFAULT_THRESHOLD_PERCENT": "variable",
1504
1506
  "TOOL_SEARCH_INVALID_CODE": "variable",
1505
1507
  "TOOL_SEARCH_POLICIES": "variable",
1508
+ "TOOL_TURN_INCOMPLETE_CAUSES": "variable",
1506
1509
  "TOOL_WIRE_NAME_MAX_CHARS": "variable",
1507
1510
  "TSchema": "interface",
1508
1511
  "TaskAccess": "interface",
@@ -1538,6 +1541,7 @@
1538
1541
  "TerminalCause": "type",
1539
1542
  "TerminalClaimIntent": "type",
1540
1543
  "TerminalClaimOutcome": "type",
1544
+ "TerminalFailureDetail": "interface",
1541
1545
  "TextContent": "interface",
1542
1546
  "ThinkingContent": "interface",
1543
1547
  "ThinkingLevel": "type",
@@ -1596,6 +1600,7 @@
1596
1600
  "ToolSearchPolicy": "type",
1597
1601
  "ToolSearchSetting": "type",
1598
1602
  "ToolSpec": "interface",
1603
+ "ToolTurnIncompleteCause": "type",
1599
1604
  "TraceEvent": "type",
1600
1605
  "TracerHook": "type",
1601
1606
  "TrackEditRequest": "interface",
@@ -1611,6 +1616,7 @@
1611
1616
  "UNCOVERED_SEGMENT_REASON_BASELINE": "variable",
1612
1617
  "URL_SAFETY": "variable",
1613
1618
  "USAGE_WINDOW_REAP_MARGIN_MS": "variable",
1619
+ "USER_STEER_UNDRAINED_CAUSES": "variable",
1614
1620
  "UnarmedDenialLimitFallback": "interface",
1615
1621
  "UncoveredSegmentDetail": "interface",
1616
1622
  "UnifiedTaskOutput": "interface",
@@ -1626,6 +1632,7 @@
1626
1632
  "UserMessage": "interface",
1627
1633
  "UserPromptSubmitContext": "interface",
1628
1634
  "UserPromptSubmitResult": "interface",
1635
+ "UserSteerUndrainedCause": "type",
1629
1636
  "UtilityGate": "type",
1630
1637
  "V2HeaderHints": "interface",
1631
1638
  "VERIFICATION_PROMPT": "variable",
@@ -2446,6 +2453,7 @@
2446
2453
  "scopeCoversCwd": "function",
2447
2454
  "scopeDirName": "function",
2448
2455
  "screenApproverAttribution": "function",
2456
+ "screenAskClassMembers": "function",
2449
2457
  "screenGateOutcome": "function",
2450
2458
  "screenInboundEntries": "function",
2451
2459
  "screenRuleSyncState": "function",
@@ -3377,6 +3385,7 @@
3377
3385
  "MonitorTimers": "advanced",
3378
3386
  "MonitorToolOptions": "advanced",
3379
3387
  "NOTICE_AUDIENCE": "advanced",
3388
+ "NOTICE_MINTER": "advanced",
3380
3389
  "NOTIFICATION_INJECTION_OUTCOMES": "advanced",
3381
3390
  "NO_PERSISTENT_MEMORY_NOTICE": "advanced",
3382
3391
  "NamedToolPolicy": "advanced",
@@ -3389,6 +3398,7 @@
3389
3398
  "NormalizedReadDenyEntry": "stable",
3390
3399
  "NotePatch": "stable",
3391
3400
  "NoticeAudience": "advanced",
3401
+ "NoticeMinter": "advanced",
3392
3402
  "NotificationInjectionOutcome": "advanced",
3393
3403
  "OFFLOAD_TOOL_NAME": "advanced",
3394
3404
  "ORCHESTRATION_AWARENESS": "advanced",
@@ -4045,6 +4055,7 @@
4045
4055
  "TOOL_SEARCH_DEFAULT_THRESHOLD_PERCENT": "advanced",
4046
4056
  "TOOL_SEARCH_INVALID_CODE": "advanced",
4047
4057
  "TOOL_SEARCH_POLICIES": "advanced",
4058
+ "TOOL_TURN_INCOMPLETE_CAUSES": "advanced",
4048
4059
  "TOOL_WIRE_NAME_MAX_CHARS": "advanced",
4049
4060
  "TSchema": "advanced",
4050
4061
  "TaskAccess": "advanced",
@@ -4080,6 +4091,7 @@
4080
4091
  "TerminalCause": "advanced",
4081
4092
  "TerminalClaimIntent": "advanced",
4082
4093
  "TerminalClaimOutcome": "advanced",
4094
+ "TerminalFailureDetail": "advanced",
4083
4095
  "TextContent": "advanced",
4084
4096
  "ThinkingContent": "advanced",
4085
4097
  "ThinkingLevel": "internal",
@@ -4138,6 +4150,7 @@
4138
4150
  "ToolSearchPolicy": "advanced",
4139
4151
  "ToolSearchSetting": "advanced",
4140
4152
  "ToolSpec": "stable",
4153
+ "ToolTurnIncompleteCause": "advanced",
4141
4154
  "TraceEvent": "advanced",
4142
4155
  "TracerHook": "advanced",
4143
4156
  "TrackEditRequest": "advanced",
@@ -4153,6 +4166,7 @@
4153
4166
  "UNCOVERED_SEGMENT_REASON_BASELINE": "advanced",
4154
4167
  "URL_SAFETY": "advanced",
4155
4168
  "USAGE_WINDOW_REAP_MARGIN_MS": "internal",
4169
+ "USER_STEER_UNDRAINED_CAUSES": "advanced",
4156
4170
  "UnarmedDenialLimitFallback": "advanced",
4157
4171
  "UncoveredSegmentDetail": "advanced",
4158
4172
  "UnifiedTaskOutput": "advanced",
@@ -4168,6 +4182,7 @@
4168
4182
  "UserMessage": "advanced",
4169
4183
  "UserPromptSubmitContext": "advanced",
4170
4184
  "UserPromptSubmitResult": "advanced",
4185
+ "UserSteerUndrainedCause": "advanced",
4171
4186
  "UtilityGate": "advanced",
4172
4187
  "V2HeaderHints": "advanced",
4173
4188
  "VERIFICATION_PROMPT": "advanced",
@@ -4988,6 +5003,7 @@
4988
5003
  "scopeCoversCwd": "advanced",
4989
5004
  "scopeDirName": "advanced",
4990
5005
  "screenApproverAttribution": "advanced",
5006
+ "screenAskClassMembers": "advanced",
4991
5007
  "screenGateOutcome": "advanced",
4992
5008
  "screenInboundEntries": "advanced",
4993
5009
  "screenRuleSyncState": "advanced",
@@ -0,0 +1,122 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.37.1",
4
+ "from": "979f761e382593d192c6c5b3170cb82cc676677c",
5
+ "to": "072c5d4502bddacb7b28e2e3f47653ad28c008a5",
6
+ "added": [],
7
+ "removed": [],
8
+ "changed": [],
9
+ "narrowed": [],
10
+ "closedSetMembers": [
11
+ {
12
+ "set": "ENGINE_NOTICE_CODES",
13
+ "at": [
14
+ "src/core/governance-codes.ts:344"
15
+ ],
16
+ "newSet": false,
17
+ "added": [
18
+ "context.tool_turn_repaired"
19
+ ],
20
+ "removed": [],
21
+ "breaking": false,
22
+ "criteriaCovered": true
23
+ },
24
+ {
25
+ "set": "TOOL_TURN_REPAIR_FORMS",
26
+ "at": [
27
+ "src/engine/llm/tool-turns.ts:43"
28
+ ],
29
+ "newSet": true,
30
+ "added": [
31
+ "duplicate_result",
32
+ "late_result",
33
+ "missing_result",
34
+ "trailing_text"
35
+ ],
36
+ "removed": [],
37
+ "breaking": false,
38
+ "criteriaCovered": false
39
+ },
40
+ {
41
+ "set": "ToolTurnRepairForm",
42
+ "at": [
43
+ "src/engine/llm/tool-turns.ts:44"
44
+ ],
45
+ "newSet": true,
46
+ "added": [
47
+ "duplicate_result",
48
+ "late_result",
49
+ "missing_result",
50
+ "trailing_text"
51
+ ],
52
+ "removed": [],
53
+ "breaking": false,
54
+ "criteriaCovered": false
55
+ }
56
+ ],
57
+ "closedSetsUnreadable": [],
58
+ "typeKeys": [],
59
+ "typeKeysUnreadableArms": [],
60
+ "typeKeysFlattenedCount": 219,
61
+ "declarationMoves": [],
62
+ "mintMoves": [],
63
+ "criteriaObserves": [
64
+ {
65
+ "kind": "engineNoticeCode",
66
+ "name": "context.tool_turn_repaired",
67
+ "assertions": [
68
+ "G1.b",
69
+ "G3.a",
70
+ "G3.b",
71
+ "G3.c"
72
+ ]
73
+ },
74
+ {
75
+ "kind": "typeMember",
76
+ "name": "AssistantMessage.content",
77
+ "assertions": [
78
+ "G1.a",
79
+ "G1.c",
80
+ "G2.a",
81
+ "G2.b"
82
+ ]
83
+ },
84
+ {
85
+ "kind": "typeMember",
86
+ "name": "AssistantMessage.errorMessage",
87
+ "assertions": [
88
+ "G2.c",
89
+ "G4.a",
90
+ "G4.b"
91
+ ]
92
+ },
93
+ {
94
+ "kind": "typeMember",
95
+ "name": "AssistantMessage.stopReason",
96
+ "assertions": [
97
+ "G2.c"
98
+ ]
99
+ },
100
+ {
101
+ "kind": "typeMember",
102
+ "name": "EngineNotice.detail",
103
+ "assertions": [
104
+ "G1.b"
105
+ ]
106
+ }
107
+ ],
108
+ "consumersHint": {
109
+ "cli": [
110
+ "ENGINE_NOTICE_CODES"
111
+ ],
112
+ "server": [
113
+ "ENGINE_NOTICE_CODES"
114
+ ],
115
+ "sdk": [
116
+ "ENGINE_NOTICE_CODES"
117
+ ],
118
+ "note": "scanned cli@6b6025f7 server@65b2df99 sdk@a90a03a — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
119
+ },
120
+ "breakingCount": 0,
121
+ "breakingItems": []
122
+ }