@sema-agent/core 7.38.3 → 7.39.1

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 (96) hide show
  1. package/CHANGELOG.md +191 -6
  2. package/dist/core/ask-origin.d.ts +16 -7
  3. package/dist/core/ask-origin.js +4 -2
  4. package/dist/core/auto-mode-directive.d.ts +114 -19
  5. package/dist/core/auto-mode-directive.js +67 -19
  6. package/dist/core/checkpoint-store.d.ts +72 -41
  7. package/dist/core/checkpoint-store.js +28 -48
  8. package/dist/core/classifier-unavailable-arm.js +2 -2
  9. package/dist/core/decision-receipt.d.ts +2 -0
  10. package/dist/core/decision-receipt.js +1 -1
  11. package/dist/core/engine-notice.d.ts +41 -17
  12. package/dist/core/engine-notice.js +26 -14
  13. package/dist/core/gate-outcome.d.ts +80 -42
  14. package/dist/core/gate-outcome.js +21 -6
  15. package/dist/core/governance-codes.d.ts +1 -3
  16. package/dist/core/governance-codes.js +0 -3
  17. package/dist/core/hooks.d.ts +1 -1
  18. package/dist/core/hooks.js +2 -2
  19. package/dist/core/human-input-projection.d.ts +12 -0
  20. package/dist/core/human-input-projection.js +12 -0
  21. package/dist/core/memory-engine/engine.js +11 -11
  22. package/dist/core/memory-engine/layout.d.ts +21 -2
  23. package/dist/core/memory-engine/layout.js +17 -5
  24. package/dist/core/mode-policy.d.ts +26 -0
  25. package/dist/core/mode-policy.js +37 -1
  26. package/dist/core/output-style.d.ts +21 -0
  27. package/dist/core/output-style.js +29 -0
  28. package/dist/core/real-approval.d.ts +25 -0
  29. package/dist/core/real-approval.js +27 -0
  30. package/dist/core/reminder-disclosure.d.ts +2 -2
  31. package/dist/core/reminder-mint.d.ts +6 -9
  32. package/dist/core/reminder-mint.js +3 -14
  33. package/dist/core/retired-keys.d.ts +2 -1
  34. package/dist/core/retired-keys.js +3 -1
  35. package/dist/core/runner/assemble-result.d.ts +2 -0
  36. package/dist/core/runner/assemble-result.js +1 -1
  37. package/dist/core/runner/compaction-restate.d.ts +45 -4
  38. package/dist/core/runner/compaction-restate.js +89 -11
  39. package/dist/core/runner/contracts.d.ts +6 -6
  40. package/dist/core/runner/denial-limit-arms.js +4 -4
  41. package/dist/core/runner/inherited-ask-grants.d.ts +4 -2
  42. package/dist/core/runner/inherited-ask-grants.js +0 -3
  43. package/dist/core/runner/permission-rule-lanes.d.ts +18 -0
  44. package/dist/core/runner/permission-rule-lanes.js +35 -25
  45. package/dist/core/runner/prepare-context-lane.d.ts +1 -0
  46. package/dist/core/runner/prepare-context-lane.js +6 -0
  47. package/dist/core/runner/prepare-inherited-gate.js +2 -9
  48. package/dist/core/runner/prepare-task.js +10 -24
  49. package/dist/core/runner/prepare-wiring-manifest.js +2 -2
  50. package/dist/core/runner/prompt-block.d.ts +9 -0
  51. package/dist/core/runner/prompt-block.js +8 -0
  52. package/dist/core/runner/resume-admission.js +4 -1
  53. package/dist/core/runner/resume-apply.js +28 -18
  54. package/dist/core/runner/resume-policy-outcome.js +10 -4
  55. package/dist/core/runner/run-attachment-seats.js +1 -1
  56. package/dist/core/runner/run-identity-wiring.js +9 -2
  57. package/dist/core/runner/run-leg.js +42 -31
  58. package/dist/core/runner/run-settle-and-teardown.js +4 -3
  59. package/dist/core/runner/run-turn-boundary.js +4 -3
  60. package/dist/core/runner/runtask.d.ts +4 -2
  61. package/dist/core/runner/steer-admission.d.ts +9 -0
  62. package/dist/core/runner/steer-admission.js +8 -0
  63. package/dist/core/runner/stream-steer-verb.js +16 -11
  64. package/dist/core/runner/synthetic-tools.d.ts +4 -0
  65. package/dist/core/runner/tool-turn-repair-seat.js +1 -1
  66. package/dist/core/runner/turn-attachments.d.ts +16 -22
  67. package/dist/core/runner/turn-attachments.js +3 -20
  68. package/dist/core/runner-deps.d.ts +1 -1
  69. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +8 -0
  70. package/dist/core/store-contracts/checkpoint-store-contract.js +23 -0
  71. package/dist/core/task-event.d.ts +7 -2
  72. package/dist/core/task-spec.d.ts +29 -7
  73. package/dist/core/terminal-cause.d.ts +44 -3
  74. package/dist/core/terminal-cause.js +5 -0
  75. package/dist/core/tool-policy.d.ts +55 -29
  76. package/dist/core/tool-policy.js +42 -31
  77. package/dist/core/types.d.ts +1 -1
  78. package/dist/core/types.js +1 -1
  79. package/dist/core/wiring-manifest.d.ts +17 -3
  80. package/dist/core/wiring-manifest.js +8 -3
  81. package/dist/engine/harness/agent-harness.d.ts +10 -0
  82. package/dist/engine/harness/agent-harness.js +12 -1
  83. package/dist/engine/llm/tool-turns.d.ts +15 -2
  84. package/dist/engine/llm/tool-turns.js +2 -2
  85. package/dist/index.d.ts +4 -3
  86. package/dist/index.js +4 -3
  87. package/dist/prompt-assembly/event-registry.js +2 -1
  88. package/dist/tools/fs/index.d.ts +2 -1
  89. package/dist/tools/fs/read-deny-home.d.ts +3 -2
  90. package/dist/tools/fs/read-deny-home.js +6 -4
  91. package/dist/tools/fs/shell-read-check.d.ts +10 -3
  92. package/dist/tools/fs/shell-read-check.js +2 -2
  93. package/package.json +1 -1
  94. package/test/export-surface.snapshot.json +21 -1
  95. package/wire-changes/core@7.39.0.json +999 -0
  96. package/wire-changes/core@7.39.1.json +74 -0
@@ -42,7 +42,9 @@ export function resolveSubagentTranscriptTier(agentStoreWired, sessionStore) {
42
42
  e.code = "config.store_durability_invalid";
43
43
  throw e;
44
44
  }
45
- export function deriveAskEffective(form, parkEffective) {
45
+ export function deriveAskEffective(form, parkEffective, mode) {
46
+ if (mode === "dontAsk")
47
+ return "auto_deny";
46
48
  switch (form) {
47
49
  case "callback":
48
50
  return "human_reachable";
@@ -59,6 +61,9 @@ export function deriveAskEffective(form, parkEffective) {
59
61
  }
60
62
  }
61
63
  }
64
+ export function askSeatEffective(manifest) {
65
+ return deriveAskEffective(manifest.ask.form, manifest.parkLane.effective);
66
+ }
62
67
  export function askReachesPerson(ask) {
63
68
  const effective = ask.effective ?? "unresolved";
64
69
  switch (effective) {
@@ -148,7 +153,7 @@ export function deriveWiringManifest(facts) {
148
153
  ask: {
149
154
  form: facts.askForm,
150
155
  ...(facts.askProvenance !== undefined ? { provenance: facts.askProvenance } : {}),
151
- ...(facts.half === "effective" ? { effective: deriveAskEffective(facts.askForm, parkLane.effective) } : {}),
156
+ ...(facts.half === "effective" ? { effective: deriveAskEffective(facts.askForm, parkLane.effective, facts.permissionMode?.effective) } : {}),
152
157
  },
153
158
  question: {
154
159
  wired: questionChannel,
@@ -200,7 +205,7 @@ export function deriveWiringManifest(facts) {
200
205
  const { provenance: _askSeat, ...askForHash } = assembly.ask;
201
206
  const { provenance: _questionSeat, ...questionForHash } = assembly.question;
202
207
  manifest.configFingerprint = createHash("sha256")
203
- .update(canonicalize({ ...assembly, ask: askForHash, question: questionForHash }))
208
+ .update(canonicalize({ ...assembly, ask: { ...askForHash, effective: deriveAskEffective(facts.askForm, parkLane.effective) }, question: questionForHash }))
204
209
  .digest("hex")
205
210
  .slice(0, 16);
206
211
  }
@@ -194,6 +194,9 @@ export declare class AgentHarness<TSkill extends Skill = Skill, TPromptTemplate
194
194
  * with every request view that needed one (the transcript is never rewritten, so a broken turn is repaired, and
195
195
  * reported, on each request; the sink owns its dedup). Advisory: a throwing sink never breaks the request. */
196
196
  onToolTurnRepaired?: (repairs: readonly ToolTurnRepair[]) => void;
197
+ /** The assistant messages standing in the transcript when the current run began — what the request view reads as
198
+ * "before this run" (a message is the run's own unless it is in here). */
199
+ private runHistory?;
197
200
  /** backlog #259 — USER-authored queue remnants at agent_end: steers/follow-ups whose receipts said
198
201
  * "queued" but that no turn will ever drain (the run ended first). The engine-note sweep above
199
202
  * hands ENGINE payloads back for redelivery; user inputs have no redelivery semantics (a steer
@@ -212,6 +215,13 @@ export declare class AgentHarness<TSkill extends Skill = Skill, TPromptTemplate
212
215
  * Advisory (swallow-guarded at the call sites via the runner's own closure); never re-entered
213
216
  * for the same payload — consumption deletes the sidecar entry in the same step. */
214
217
  onEngineNoteConsumed?: (payload: unknown) => void;
218
+ /** backlog #1273 — runner-set sink fired ONCE per CALLER frame at the moment the frame is in the transcript (its
219
+ * `message_end` append — the next request carries it), with the opaque park record the frame rode in on
220
+ * ({@link UserMessageProvenance.parkRecord}). The consumption point of a caller input, deliberately NOT the drain:
221
+ * a drained frame can still be dropped before its turn starts (a halt latched or an abort landing after the drain)
222
+ * and goes back into the park / undrained account, so a drain-time report would announce an input the model never
223
+ * saw. Advisory (swallow-guarded); the record is released in the same step, so a delivered frame reports once. */
224
+ onUserInputConsumed?: (parkRecord: unknown) => void;
215
225
  /** #1036 — THE RECEIPT SINK: a frame reached the TRANSCRIPT, reported at the `message_end` append
216
226
  * that proves it, with its carrier and entry id. Advisory. */
217
227
  onFrameCommitted?: (carrier: CommittedFrameCarrier, entryId: string) => void;
@@ -212,12 +212,14 @@ export class AgentHarness {
212
212
  thinkingLevel;
213
213
  onUndrainedEngineNotes;
214
214
  onToolTurnRepaired;
215
+ runHistory;
215
216
  onUndrainedUserInputs;
216
217
  onEngineNoteConsumed;
218
+ onUserInputConsumed;
217
219
  onFrameCommitted;
218
220
  engineInjectionsHeld;
219
221
  holdToolTurnLaw(messages) {
220
- const view = ensureToolTurnInvariants(messages);
222
+ const view = ensureToolTurnInvariants(messages, this.runHistory);
221
223
  if (view.repairs.length > 0) {
222
224
  try {
223
225
  this.onToolTurnRepaired?.(view.repairs);
@@ -603,7 +605,15 @@ export class AgentHarness {
603
605
  if (!this.drainedPendingInjection.includes(message))
604
606
  return;
605
607
  this.unbookInFlight([message]);
608
+ const parkRecord = userInputParkRecords.get(message);
606
609
  userInputParkRecords.delete(message);
610
+ if (parkRecord !== undefined) {
611
+ try {
612
+ this.onUserInputConsumed?.(parkRecord);
613
+ }
614
+ catch {
615
+ }
616
+ }
607
617
  if (entryId !== undefined) {
608
618
  const payload = engineNotePayloads.get(message);
609
619
  if (payload !== undefined) {
@@ -878,6 +888,7 @@ export class AgentHarness {
878
888
  async executeTurn(turnState, text, options, abortController) {
879
889
  let activeTurnState = turnState;
880
890
  const userMessage = createUserMessage(text, options?.images, options);
891
+ this.runHistory = new WeakSet(turnState.messages.filter((m) => m.role === "assistant"));
881
892
  const beforeResult = await this.emitHook({
882
893
  type: "before_agent_start",
883
894
  prompt: text,
@@ -43,6 +43,13 @@
43
43
  * wording, whatever the tool. (The persisted reconcile refines with the run's tool effects — a read-only or
44
44
  * idempotent call's close says it may simply be re-issued — and, on a live abort, with the calls it saw start.)
45
45
  * Returns the SAME array when nothing needed restoring.
46
+ *
47
+ * RUN OWNERSHIP. The caller may hand over the assistant messages that stood in its transcript before its run began
48
+ * (`priorMessages`, by object). A `missing_result` repair on one of them is marked `beforeRun`: the call went
49
+ * unanswered before this run started, so closing it on the wire is a fact about the transcript the run inherited, not
50
+ * an event of the run. Membership is by message, never by position — a request projection that inserts, drops or
51
+ * replaces other messages cannot move it. The mark says that and nothing else: the repair, the synthesized result and
52
+ * the operator's account of them are the same with or without it. No `priorMessages` ⇒ no mark.
46
53
  */
47
54
  import type { AssertAllKeysHandled } from "../../core/ask-origin.js";
48
55
  import type { AssistantMessageDiagnostic } from "./diagnostics.js";
@@ -97,6 +104,9 @@ export interface ToolTurnRepair {
97
104
  * ids a later call of the message repeated; for `orphan_result` the ids of the results left out, once each, in
98
105
  * transcript order; otherwise the calls whose result was moved up, synthesized, or folded with a second one. */
99
106
  readonly toolCallIds: readonly string[];
107
+ /** `missing_result` only, and only when the caller handed over its run's prior messages
108
+ * ({@link ensureToolTurnInvariants}'s `priorMessages`): the message holding these calls is one of them. */
109
+ readonly beforeRun?: true;
100
110
  }
101
111
  export interface ToolTurnView {
102
112
  /** The request view — the input array itself when {@link repairs} is empty. */
@@ -105,5 +115,8 @@ export interface ToolTurnView {
105
115
  }
106
116
  /** The text standing between two results recorded for one call when the view folds them into one. */
107
117
  export declare const SECOND_RESULT_SEPARATOR = "[another result was recorded for this same call:]";
108
- /** Restore the tool-turn law on a provider-bound message list (see the module header). */
109
- export declare function ensureToolTurnInvariants(messages: Message[]): ToolTurnView;
118
+ /** Restore the tool-turn law on a provider-bound message list (see the module header). `priorMessages` = the calling
119
+ * run's inherited assistant messages (module header, RUN OWNERSHIP). */
120
+ export declare function ensureToolTurnInvariants(messages: Message[], priorMessages?: {
121
+ has(message: object): boolean;
122
+ }): ToolTurnView;
@@ -47,7 +47,7 @@ function callsOf(m) {
47
47
  return m.role === "assistant" && Array.isArray(m.content) ? m.content.filter((c) => c?.type === "toolCall") : [];
48
48
  }
49
49
  export const SECOND_RESULT_SEPARATOR = "[another result was recorded for this same call:]";
50
- export function ensureToolTurnInvariants(messages) {
50
+ export function ensureToolTurnInvariants(messages, priorMessages) {
51
51
  const anchor = [];
52
52
  messages.forEach((m, i) => anchor.push(m.role === "toolResult" && i > 0 ? anchor[i - 1] : i));
53
53
  const sites = new Map();
@@ -132,7 +132,7 @@ export function ensureToolTurnInvariants(messages) {
132
132
  if (late.length > 0)
133
133
  repairs.push({ form: "late_result", toolCallIds: inCallOrder(late) });
134
134
  if (missing.length > 0)
135
- repairs.push({ form: "missing_result", toolCallIds: missing.map((c) => c.id) });
135
+ repairs.push({ form: "missing_result", toolCallIds: missing.map((c) => c.id), ...(priorMessages?.has(m) === true ? { beforeRun: true } : {}) });
136
136
  if (duplicate.length > 0)
137
137
  repairs.push({ form: "duplicate_result", toolCallIds: inCallOrder(duplicate) });
138
138
  });
package/dist/index.d.ts CHANGED
@@ -66,7 +66,7 @@ export { ASK_UNRESOLVABLE_CAUSES } from "./core/ask-unresolvable-notice.js";
66
66
  export { USER_STEER_UNDRAINED_CAUSES, type UserSteerUndrainedCause } from "./core/engine-notice.js";
67
67
  export { TOOL_TURN_INCOMPLETE_CAUSES, type ToolTurnIncompleteCause } from "./internal/llm.js";
68
68
  export { DURABLE_MANDATE_SOURCES } from "./core/tool-policy.js";
69
- export { TERMINAL_CAUSE_IS_REPLAYABLE, type TerminalFailureDetail } from "./core/terminal-cause.js";
69
+ export { TERMINAL_CAUSE_IS_REPLAYABLE, type TerminalFailureDetail, type TerminalBlockedDetail, PROMPT_BLOCK_CAUSES, type PromptBlockCause, isPromptBlockCause } from "./core/terminal-cause.js";
70
70
  export { RESERVED_AGENT_NAMES } from "./agents/subagent.js";
71
71
  export { WORKFLOW_SIZE_GUIDELINE_AGENT_CAPS } from "./orchestration/workflow-size-guideline.js";
72
72
  export { ENGINE_AUTHORITY_ENVELOPE_TAGS } from "./core/untrusted-text.js";
@@ -191,14 +191,14 @@ export { createAllowDenyPolicy, createApprovalPolicy,
191
191
  * members that seat has no lane for (`"unavailable"`, a routing answer; `updatedInput`, an operator edit a
192
192
  * policy verdict cannot get re-adjudicated). Exported so a host can NAME it instead of deriving it through
193
193
  * `Parameters<typeof createApprovalPolicy>[0]["approve"]`. */
194
- type ApprovalSeatOutcome, COARSE_SHELL_TOOLS, createCoarseCommandNamePolicy, createTranscriptIntegrityPolicy, createUnverifiableDeletePolicy, findUnverifiableRecursiveDelete, combinePolicies, wrapToolPolicy, decisionText, resolveAsk, toolPolicyNameSets, toolPolicyPathDenyRules, type ToolPolicyNameSets, type NamedToolPolicy, type ToolPolicyProjection, type ToolPolicyProjectionComponent, type ConstraintChainEntry, checkToolPolicyProjection, constraintChainEntryOf, constraintChainDigest, type ToolPolicy, type ToolCallRequest, type PermissionResult, type DecisionReason, screenApproverAttribution, APPROVER_ATTRIBUTION_MAX_CHARS, type OnAsk, type AskOutcome, type ResolvedAsk, type AskRequest, type AskDelegationProvenance, type AskRuleEvidence, type AskEvidenceAbsence, ASK_EVIDENCE_ABSENCE_VALUES, } from "./core/tool-policy.js";
194
+ type ApprovalSeatOutcome, COARSE_SHELL_TOOLS, createCoarseCommandNamePolicy, createTranscriptIntegrityPolicy, createUnverifiableDeletePolicy, findUnverifiableRecursiveDelete, combinePolicies, receiveHookResult, isEngineRefusal, wrapToolPolicy, decisionText, resolveAsk, toolPolicyNameSets, toolPolicyPathDenyRules, type ToolPolicyNameSets, type NamedToolPolicy, type ToolPolicyProjection, type ToolPolicyProjectionComponent, type ConstraintChainEntry, checkToolPolicyProjection, constraintChainEntryOf, constraintChainDigest, type ToolPolicy, type ToolCallRequest, type PermissionResult, type DecisionReason, screenApproverAttribution, APPROVER_ATTRIBUTION_MAX_CHARS, type OnAsk, type AskOutcome, type ResolvedAsk, type AskRequest, type AskDelegationProvenance, type AskRuleEvidence, type AskEvidenceAbsence, ASK_EVIDENCE_ABSENCE_VALUES, } from "./core/tool-policy.js";
195
195
  export { type ReadRootGrantScreen } from "./core/read-root-grant-screen.js";
196
196
  export { type AskOrigin, ASK_ORIGINS, isAskOrigin, ORIGIN_IMPLIES_REAL_APPROVAL, PERSISTED_RULE_MANDATES, type PersistedRuleMandate, isPersistedRuleMandate, screenAskClassMembers } from "./core/ask-origin.js";
197
197
  export { PERMISSION_MODES, type PermissionMode, isPermissionMode, PERMISSION_MODE_RANK, clampPermissionMode, ASK_CLASSES, type AskClass, isAskClass, MODE_ARBITRATION, type ModeArbitrationRow, RELEASABLE_ASK_CLASSES, MODE_RELEASE_REASONS, type ModeReleaseReason, isModeReleaseReason, RRA_EXPLAINERS, classifyAsk, foldArbitrationRow, type AskClassification, type AskClassFacts, type ToolMarkSource, arbitrateByMode, type Arbitration, fileCommandOptionsSentence } from "./core/ask-origin.js";
198
198
  export { modePolicyOf, type ModePolicy, PERMISSION_MODE_FOLD_REASONS, type PermissionModeFoldReason, type PermissionModeReceipt, ACCEPT_EDITS_FILE_COMMANDS, modeAcceptsFileCommand } from "./core/mode-policy.js";
199
199
  export { readDenyClassifierRules, renderClassifierDenyRules, type DerivedDenyRule } from "./core/auto-mode-prompt.js";
200
200
  export { AUTO_MODE_DENY_SOURCES, isAutoModeDenySource, type AutoModeDenySource } from "./core/runtime-caps.js";
201
- export { SETTLEMENT_KINDS, type SettlementKind, isSettlementKind, type Settlement, SETTLEMENT_IS_REFUSAL, DENIED_BY_VALUES, type DeniedBy, isDeniedBy, DENIED_BY_MAY_VETO, CLASSIFIER_DENY_CAUSES, type ClassifierDenyCause, isClassifierDenyCause, DENIED_BY_MAY_CARRY_CAUSE, type GateDisposition, type GateOutcome, type ModeRelease, type ModeRefusal, screenGateOutcome } from "./core/gate-outcome.js";
201
+ export { SETTLEMENT_KINDS, type SettlementKind, isSettlementKind, type Settlement, SETTLEMENT_PARTIES, type SettlementParty, isSettlementParty, SETTLEMENT_IS_REFUSAL, DENIED_BY_VALUES, type DeniedBy, isDeniedBy, DENIED_BY_MAY_VETO, CLASSIFIER_DENY_CAUSES, type ClassifierDenyCause, isClassifierDenyCause, DENIED_BY_MAY_CARRY_CAUSE, type GateDisposition, type GateOutcome, type ModeRelease, type ModeRefusal, screenGateOutcome } from "./core/gate-outcome.js";
202
202
  export { type AskCarry } from "./core/hooks.js";
203
203
  export { SWAPPABLE_DEP_SEATS, SWAP_SEAT_NOTICE, isSwappableDepSeat, screenSwappableDeps, type SwappableDepSeat, type SwappableDeps } from "./core/swappable-deps.js";
204
204
  export { parseAutoModeResponse, createAutoModeDecider, AUTO_MODE_UNAVAILABLE_CAUSES, isAutoModeUnavailableCause, classifierUnavailableDenyMessage, classifierParseFailureDenyMessage, AUTO_MODE_PARSE_FAILURES, isAutoModeParseFailure, type AutoModeParseFailure, type AutoModeUnavailableCause, AUTO_MODE_CLASSIFIER_FALLBACKS, isAutoModeClassifierFallback, AUTO_MODE_FALLBACK_CAUSES, isAutoModeFallbackCause, type AutoModeClassifierFallback, type AutoModeFallbackCause, type AutoModeClassifierRound, type AutoModeLadderRung, type AutoModeVerdict, type AutoModeDecider, type AutoModeDeciderOptions, type AutoModeClassified, type AutoModeClassifyFn, type AutoModeClassifyInput, createAutoModeDenialTracker, denialLimitFallbackMessage, denialLimitSentence, unarmedWindow, type AutoModeDenialTracker, type AutoModeDenialLimitOptions, type DenialLimitCounts, type DenialLimitFallbackFace, type UnarmedDenialLimitFallback, type DenialLimitFallback, type DenialLimitVerdict, } from "./core/auto-mode.js";
@@ -264,6 +264,7 @@ export { buildTurnPromptSnapshot, loweringRecordFor, LOWERING_VERSION, PREFIX_IN
264
264
  export { CenterPromptSource, FilePromptArtifactStore, FilePromptSourceStateStore, MemoryPromptArtifactStore, MemoryPromptSourceStateStore, type PromptArtifactSource, type PromptArtifactStore, type PromptSourceState, type PromptSourceStateStore, } from "./prompt-assembly/artifact-store.js";
265
265
  export { stripEngineMetadata } from "./internal/llm.js";
266
266
  export { EVENT_PROMPT_REGISTRY, eventDefaultOn, type CompiledEventPrompt, type EventDedupe, type EventDefaultPolicy } from "./prompt-assembly/event-registry.js";
267
+ export { OUTPUT_STYLE_NAME_MAX } from "./core/output-style.js";
267
268
  export { contextUsageSections, type ContextUsageSection } from "./prompt-assembly/section-usage.js";
268
269
  export type { CompiledSection, ComposedPrompt, PackSectionDeclaration, PromptCacheClass, PromptCarrier, PromptMutability, PromptOwner, PromptPack, PromptRenderCadence, PromptRuntimeFacts, PromptSlot, PromptTrust, SectionRenderInputs, } from "./prompt-assembly/types.js";
269
270
  export { type ReasoningIntensity, type ReasoningResolution, type ResolvedReasoning, type ReasoningFormat, DEFAULT_EFFORT_LEVELS, REASONING_BUDGET_SHARE, isThinkingLevel, rankOf, resolveEffort, reasoningEffortLevelsOf, resolveBinary, reasoningBudgetShare, resolveReasoning, thinkingOffSpelled, declaredOffSpelling, type OffCapabilityModel, resolveReasoningProfile, type ReasoningTier, type ReasoningProfileFlags, } from "./brain/reasoning.js";
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ export { ASK_UNRESOLVABLE_CAUSES } from "./core/ask-unresolvable-notice.js";
52
52
  export { USER_STEER_UNDRAINED_CAUSES } from "./core/engine-notice.js";
53
53
  export { TOOL_TURN_INCOMPLETE_CAUSES } from "./internal/llm.js";
54
54
  export { DURABLE_MANDATE_SOURCES } from "./core/tool-policy.js";
55
- export { TERMINAL_CAUSE_IS_REPLAYABLE } from "./core/terminal-cause.js";
55
+ export { TERMINAL_CAUSE_IS_REPLAYABLE, PROMPT_BLOCK_CAUSES, isPromptBlockCause } from "./core/terminal-cause.js";
56
56
  export { RESERVED_AGENT_NAMES } from "./agents/subagent.js";
57
57
  export { WORKFLOW_SIZE_GUIDELINE_AGENT_CAPS } from "./orchestration/workflow-size-guideline.js";
58
58
  export { ENGINE_AUTHORITY_ENVELOPE_TAGS } from "./core/untrusted-text.js";
@@ -156,14 +156,14 @@ export { hasScheduler, isValidCronExpr, SchedulerError } from "./core/scheduler.
156
156
  export { createSchedulerTools, SCHEDULE_WAKEUP_TOOL_NAME, AUTONOMOUS_LOOP_SENTINEL, AUTONOMOUS_LOOP_DYNAMIC_SENTINEL, } from "./tools/scheduler-tools.js";
157
157
  export { resolveAutonomousLoopPrompt, AUTONOMOUS_LOOP_PREAMBLE, AUTONOMOUS_LOOP_PREAMBLE_PERSISTENT, } from "./tools/loop-tick.js";
158
158
  export { tightenTaskSpec, TaskSpecTightenError } from "./core/tighten-task-spec.js";
159
- export { createAllowDenyPolicy, createApprovalPolicy, COARSE_SHELL_TOOLS, createCoarseCommandNamePolicy, createTranscriptIntegrityPolicy, createUnverifiableDeletePolicy, findUnverifiableRecursiveDelete, combinePolicies, wrapToolPolicy, decisionText, resolveAsk, toolPolicyNameSets, toolPolicyPathDenyRules, checkToolPolicyProjection, constraintChainEntryOf, constraintChainDigest, screenApproverAttribution, APPROVER_ATTRIBUTION_MAX_CHARS, ASK_EVIDENCE_ABSENCE_VALUES, } from "./core/tool-policy.js";
159
+ export { createAllowDenyPolicy, createApprovalPolicy, COARSE_SHELL_TOOLS, createCoarseCommandNamePolicy, createTranscriptIntegrityPolicy, createUnverifiableDeletePolicy, findUnverifiableRecursiveDelete, combinePolicies, receiveHookResult, isEngineRefusal, wrapToolPolicy, decisionText, resolveAsk, toolPolicyNameSets, toolPolicyPathDenyRules, checkToolPolicyProjection, constraintChainEntryOf, constraintChainDigest, screenApproverAttribution, APPROVER_ATTRIBUTION_MAX_CHARS, ASK_EVIDENCE_ABSENCE_VALUES, } from "./core/tool-policy.js";
160
160
  export {} from "./core/read-root-grant-screen.js";
161
161
  export { ASK_ORIGINS, isAskOrigin, ORIGIN_IMPLIES_REAL_APPROVAL, PERSISTED_RULE_MANDATES, isPersistedRuleMandate, screenAskClassMembers } from "./core/ask-origin.js";
162
162
  export { PERMISSION_MODES, isPermissionMode, PERMISSION_MODE_RANK, clampPermissionMode, ASK_CLASSES, isAskClass, MODE_ARBITRATION, RELEASABLE_ASK_CLASSES, MODE_RELEASE_REASONS, isModeReleaseReason, RRA_EXPLAINERS, classifyAsk, foldArbitrationRow, arbitrateByMode, fileCommandOptionsSentence } from "./core/ask-origin.js";
163
163
  export { modePolicyOf, PERMISSION_MODE_FOLD_REASONS, ACCEPT_EDITS_FILE_COMMANDS, modeAcceptsFileCommand } from "./core/mode-policy.js";
164
164
  export { readDenyClassifierRules, renderClassifierDenyRules } from "./core/auto-mode-prompt.js";
165
165
  export { AUTO_MODE_DENY_SOURCES, isAutoModeDenySource } from "./core/runtime-caps.js";
166
- export { SETTLEMENT_KINDS, isSettlementKind, SETTLEMENT_IS_REFUSAL, DENIED_BY_VALUES, isDeniedBy, DENIED_BY_MAY_VETO, CLASSIFIER_DENY_CAUSES, isClassifierDenyCause, DENIED_BY_MAY_CARRY_CAUSE, screenGateOutcome } from "./core/gate-outcome.js";
166
+ export { SETTLEMENT_KINDS, isSettlementKind, SETTLEMENT_PARTIES, isSettlementParty, SETTLEMENT_IS_REFUSAL, DENIED_BY_VALUES, isDeniedBy, DENIED_BY_MAY_VETO, CLASSIFIER_DENY_CAUSES, isClassifierDenyCause, DENIED_BY_MAY_CARRY_CAUSE, screenGateOutcome } from "./core/gate-outcome.js";
167
167
  export {} from "./core/hooks.js";
168
168
  export { SWAPPABLE_DEP_SEATS, SWAP_SEAT_NOTICE, isSwappableDepSeat, screenSwappableDeps } from "./core/swappable-deps.js";
169
169
  export { parseAutoModeResponse, createAutoModeDecider, AUTO_MODE_UNAVAILABLE_CAUSES, isAutoModeUnavailableCause, classifierUnavailableDenyMessage, classifierParseFailureDenyMessage, AUTO_MODE_PARSE_FAILURES, isAutoModeParseFailure, AUTO_MODE_CLASSIFIER_FALLBACKS, isAutoModeClassifierFallback, AUTO_MODE_FALLBACK_CAUSES, isAutoModeFallbackCause, createAutoModeDenialTracker, denialLimitFallbackMessage, denialLimitSentence, unarmedWindow, } from "./core/auto-mode.js";
@@ -212,6 +212,7 @@ export { buildTurnPromptSnapshot, loweringRecordFor, LOWERING_VERSION, PREFIX_IN
212
212
  export { CenterPromptSource, FilePromptArtifactStore, FilePromptSourceStateStore, MemoryPromptArtifactStore, MemoryPromptSourceStateStore, } from "./prompt-assembly/artifact-store.js";
213
213
  export { stripEngineMetadata } from "./internal/llm.js";
214
214
  export { EVENT_PROMPT_REGISTRY, eventDefaultOn } from "./prompt-assembly/event-registry.js";
215
+ export { OUTPUT_STYLE_NAME_MAX } from "./core/output-style.js";
215
216
  export { contextUsageSections } from "./prompt-assembly/section-usage.js";
216
217
  export { DEFAULT_EFFORT_LEVELS, REASONING_BUDGET_SHARE, isThinkingLevel, rankOf, resolveEffort, reasoningEffortLevelsOf, resolveBinary, reasoningBudgetShare, resolveReasoning, thinkingOffSpelled, declaredOffSpelling, resolveReasoningProfile, } from "./brain/reasoning.js";
217
218
  export { DESIGN_REVIEW_PROMPTS, CODE_REVIEW_PROMPT, SCENARIO_REGISTRY, runScenario, } from "./scenarios/scenario-registry.js";
@@ -3,7 +3,7 @@ export const EVENT_PROMPT_REGISTRY = new Map([
3
3
  { kind: "task_reminder", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#TASK_REMINDER_BASE" },
4
4
  { kind: "tool_search_usage_reminder", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#renderToolSearchUsageReminder" },
5
5
  { kind: "changed_files", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#renderChangedFiles" },
6
- { kind: "plan_mode", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#PLAN_MODE_FULL_BODY" },
6
+ { kind: "output_style", carrier: "message.user-prefix", trust: "operator", dedupe: "repeat", defaultPolicy: "always", rendererRef: "../output-style.ts#renderOutputStyle" },
7
7
  { kind: "date_change", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "always", rendererRef: "turn-attachments.ts#renderDateChange" },
8
8
  { kind: "instructions_change", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", maxBytes: 512, defaultPolicy: "always", rendererRef: "turn-attachments.ts#collectInstructionsChange" },
9
9
  { kind: "workflow_size_guideline_change", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "always", rendererRef: "run-turn-boundary.ts#workflowSizeGuidelineChangeNotice" },
@@ -16,6 +16,7 @@ export const EVENT_PROMPT_REGISTRY = new Map([
16
16
  { kind: "mcp_instructions", carrier: "message.user-prefix", trust: "external", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#renderMcpInstructionsDelta" },
17
17
  { kind: "mcp_dropped_tools", carrier: "message.user-prefix", trust: "external", dedupe: "replace-by-key", defaultPolicy: "off", rendererRef: "turn-attachments.ts#renderMcpDroppedTools" },
18
18
  { kind: "git_status", carrier: "message.user-prefix", trust: "external", dedupe: "replace-by-key", defaultPolicy: "always", rendererRef: "git-status-frame.ts#renderGitStatusFrameBody" },
19
+ { kind: "permission_posture", carrier: "message.user-prefix", trust: "operator", dedupe: "replace-by-key", defaultPolicy: "always", rendererRef: "../auto-mode-directive.ts#POSTURE_TABLE" },
19
20
  { kind: "limit_approach_converge", carrier: "message.user-prefix", trust: "operator", dedupe: "once-per-run", defaultPolicy: "always", rendererRef: "run-turn-boundary.ts#limitApproachFrames" },
20
21
  { kind: "limit_approach_deliver", carrier: "message.user-prefix", trust: "operator", dedupe: "once-per-run", defaultPolicy: "always", rendererRef: "run-turn-boundary.ts#limitApproachFrames" },
21
22
  { kind: "final_verification", carrier: "message.user-prefix", trust: "operator", dedupe: "once-per-run", defaultPolicy: "always", rendererRef: "runtask.ts#final-verification" },
@@ -192,7 +192,8 @@ export interface HandsToolkitOptions {
192
192
  * not asked and no home is added (each listed home is anchored at its spelling and, where the environment answers one,
193
193
  * its canonical spelling), and the band's home views (a path spelled through a firmlink or a bind mount of a home,
194
194
  * judged at the home) read this list and the environment's declared home; an entry that is not the declared home is probed once,
195
- * under a short bound of its own, and a probe of it that fails costs that entry alone. */
195
+ * under a short bound of its own, and a probe of it that fails costs that entry alone. The public shell judgment takes the
196
+ * same list as {@link import("./shell-read-check.js").ShellReadJudgeInput.readDenyHomes}. */
196
197
  readDenyHomes?: readonly string[];
197
198
  /** Where each home-anchored row's literal head leads beyond the home's spellings
198
199
  * ({@link import("./read-deny-home.js").readDenyHomeLinksOf}, keyed by the row's pattern) — the Runner passes the
@@ -100,8 +100,9 @@ export declare function placementViewsOf(homes: readonly string[]): HomeViewSour
100
100
  * time: no latch). */
101
101
  export declare function sayPlacementLost(): void;
102
102
  /** The home views over a home list fixed now — a mount that places nothing itself (a toolkit handed its placement, or
103
- * one whose table has no home-anchored row) and the public shell judgment: the declared home, and every entry of
104
- * `homes` that is not the declared home as an auxiliary home, read once, at once. */
103
+ * one whose table has no home-anchored row) and the public shell judgment (the `readDenyHomes` its boundary's rows were
104
+ * compiled under): the declared home, and every entry of `homes` that is not the declared home as an auxiliary home,
105
+ * read once, at once. */
105
106
  export declare function homeViewsAt(env: HomeViewEnv, homes: readonly string[]): HomeViewSource;
106
107
  /** The home views of one judgment, off the judge it judges with: the views of the judge's placement. A judge that
107
108
  * carries none (one built outside a mount) reads the declared home alone. */
@@ -312,10 +312,12 @@ export function sayPlacementLost() {
312
312
  catch {
313
313
  }
314
314
  }
315
- export function homeViewsAt(env, homes) {
315
+ function readAuxiliaryHomes(env, homes, opts, signal) {
316
316
  const declared = declaredHomeOf(env);
317
- const auxiliary = [...new Set(homes.filter((h) => isAbsolutePathForm(h) && !isDeclared(declared, h)))];
318
- return homeViewSourceOver(env, auxiliary.map((home) => readAuxiliaryHome(env, home, {})));
317
+ return [...new Set(homes.filter((h) => isAbsolutePathForm(h) && !isDeclared(declared, h)))].map((home) => readAuxiliaryHome(env, home, opts, signal));
318
+ }
319
+ export function homeViewsAt(env, homes) {
320
+ return homeViewSourceOver(env, readAuxiliaryHomes(env, homes, {}));
319
321
  }
320
322
  export function homeViewsOf(env, judge, signal) {
321
323
  return (judge?.homeViews ?? homeViewsAt(env, [])).views(signal);
@@ -338,7 +340,7 @@ export async function placeReadDenyAtHome(env, compile, homes, signal) {
338
340
  return heldAnywhere(false);
339
341
  declaredAt = [...new Set([...own, ...ownSpellings.spellings])];
340
342
  }
341
- const auxiliary = listed.homes.filter((h) => !isDeclared(declared, h)).map((home) => readAuxiliaryHome(env, home, { entries }, signal));
343
+ const auxiliary = readAuxiliaryHomes(env, listed.homes, { entries }, signal);
342
344
  const [heads, readings] = await Promise.all([readDenyHomeLinksOf(env, entries, declaredAt, signal), Promise.all(auxiliary)]);
343
345
  const at = [...new Set([...declaredAt, ...readings.flatMap((r) => r.place)])];
344
346
  const linked = new Map();
@@ -163,6 +163,12 @@ export interface ShellReadJudgeInput {
163
163
  readonly readers?: ReadonlySet<string>;
164
164
  /** The face named in a refusal sentence. Defaults to `Bash`. */
165
165
  readonly tool?: string;
166
+ /** The home list the boundary's deny rows were compiled under (`HandsToolkitOptions.readDenyHomes`'s seat, same list, same
167
+ * meaning: absolute home paths, anything else rejects naming `readDenyHomes`). Present ⇒ the judgment's home views are
168
+ * that table's — the environment's declared home is always among them, every other entry is read once under a short
169
+ * bound of its own — and the account database is not asked and no home is added; `[]` leaves the declared home alone.
170
+ * Absent ⇒ the judgment is its own placement: the declared home and the account's home, asked once for this call. */
171
+ readonly readDenyHomes?: readonly string[];
166
172
  /** Handed to the ENVIRONMENT's own primitives (`canonicalPath`, `listDir`) while the reads are
167
173
  * established; whether an abort stops one is the adapter's answer, and a walk short enough to finish
168
174
  * first finishes. It is NOT a deadline and it does not reach `boundary.alsoInside`, whose signature
@@ -196,9 +202,10 @@ export interface ShellReadJudgment {
196
202
  * pattern on its spelling alone, so the two diverge in both directions.
197
203
  *
198
204
  * A read target is also judged at its HOME VIEW (a path spelled through a firmlink or a bind mount of a home, respelled
199
- * at the home): this judgment is its own placement — the views read the environment's declared home and the account
200
- * home the account database answers once, for this call (`readDenyHomesOf`'s homes); the account home's probes wait at
201
- * most a short bound of their own.
205
+ * at the home). The views read the home list the boundary's rows were compiled under when the input names it
206
+ * ({@link ShellReadJudgeInput.readDenyHomes}); without it this judgment is its own placement — the environment's declared
207
+ * home and the account home the account database answers once, for this call (`readDenyHomesOf`'s homes). Every home
208
+ * beside the declared one waits at most a short bound of its own.
202
209
  *
203
210
  * It carries NO deadline. Bounding an environment-facing wait and substituting a fail-closed verdict is the
204
211
  * gate FOLD's policy on the gate's one deadline seat; the station has never held one on either entry, and a
@@ -1,7 +1,7 @@
1
1
  import { errorResult } from "../../core/tools.js";
2
2
  import { BASH_READONLY_CONFINEMENT_NOTE } from "./fs-shared.js";
3
3
  import { isAbsoluteForFamily, normalizeAbsPathLexically, pathFamilyOf, violationDetails, withinAnyRoot } from "./safety.js";
4
- import { fitMiddle, READ_DENY_SENTENCE_PART_MAX, readDenySentence } from "./read-deny.js";
4
+ import { checkedReadDenyHomes, fitMiddle, READ_DENY_SENTENCE_PART_MAX, readDenySentence } from "./read-deny.js";
5
5
  import { NOT_AUTO_ALLOWED, programPositionRefusalSentence, readProgramPosition } from "./bash-program-position.js";
6
6
  import { bashClassifyDefaultAllow } from "./bash-readonly-classifier.js";
7
7
  import { planShellReads } from "./shell-read-plan.js";
@@ -327,7 +327,7 @@ async function runShellReadStation(tool, command, declared, seat, readers, estab
327
327
  }
328
328
  export async function judgeShellRead(input) {
329
329
  const readers = input.readers ?? new Set(bashClassifyDefaultAllow());
330
- const run = await runShellReadStation(input.tool ?? "Bash", input.command, input.boundary, input.seat, readers, createShellReadEstablisher(input.env, input.boundary.roots, { homeViews: homeViewsAt(input.env, declaredReadDenyHomes(input.env)) }), input.env, input.signal);
330
+ const run = await runShellReadStation(input.tool ?? "Bash", input.command, input.boundary, input.seat, readers, createShellReadEstablisher(input.env, input.boundary.roots, { homeViews: homeViewsAt(input.env, input.readDenyHomes === undefined ? declaredReadDenyHomes(input.env) : checkedReadDenyHomes(input.readDenyHomes)) }), input.env, input.signal);
331
331
  const offer = normalizeReadRootCandidate(run.verdict.readRootCandidate);
332
332
  return {
333
333
  plan: run.plan,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.38.3",
3
+ "version": "7.39.1",
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": 2548,
4
+ "count": 2558,
5
5
  "exports": {
6
6
  "A2ATaskState": "type",
7
7
  "A2ATaskStateReversal": "type",
@@ -860,6 +860,7 @@
860
860
  "ORG_UNAVAILABLE_DECISION_REASON": "variable",
861
861
  "ORIGIN_IMPLIES_REAL_APPROVAL": "variable",
862
862
  "OUTPUT_EFFICIENCY": "variable",
863
+ "OUTPUT_STYLE_NAME_MAX": "variable",
863
864
  "OffCapabilityModel": "interface",
864
865
  "OnAsk": "type",
865
866
  "OnElicit": "type",
@@ -943,6 +944,7 @@
943
944
  "PROJECT_ID_HINTS_FILE": "variable",
944
945
  "PROJECT_ID_REGEX": "variable",
945
946
  "PROJECT_MARKER_PATH": "variable",
947
+ "PROMPT_BLOCK_CAUSES": "variable",
946
948
  "PROTOCOL_TABLE": "variable",
947
949
  "PROVIDER_ECHO_SHAPE": "variable",
948
950
  "PackSectionDeclaration": "interface",
@@ -1075,6 +1077,7 @@
1075
1077
  "PromptArtifactSource": "interface",
1076
1078
  "PromptArtifactStore": "interface",
1077
1079
  "PromptBlock": "interface",
1080
+ "PromptBlockCause": "type",
1078
1081
  "PromptCacheClass": "type",
1079
1082
  "PromptCacheReport": "interface",
1080
1083
  "PromptCarrier": "type",
@@ -1316,6 +1319,7 @@
1316
1319
  "SESSION_LOG_DIGEST_SCHEME": "variable",
1317
1320
  "SETTLEMENT_IS_REFUSAL": "variable",
1318
1321
  "SETTLEMENT_KINDS": "variable",
1322
+ "SETTLEMENT_PARTIES": "variable",
1319
1323
  "SHARED_MEMORY_LIST_PAGE_SIZE": "variable",
1320
1324
  "SHARED_MEMORY_READ_CAP_BYTES": "variable",
1321
1325
  "SHELL_READ_DECISION": "variable",
@@ -1398,6 +1402,7 @@
1398
1402
  "SessionWriteOptions": "interface",
1399
1403
  "Settlement": "type",
1400
1404
  "SettlementKind": "type",
1405
+ "SettlementParty": "type",
1401
1406
  "SharedAbortScope": "class",
1402
1407
  "SharedMemoryDocumentEntry": "interface",
1403
1408
  "SharedMemoryFixture": "interface",
@@ -1538,6 +1543,7 @@
1538
1543
  "TeamResult": "interface",
1539
1544
  "TeamRole": "type",
1540
1545
  "TeamTurn": "interface",
1546
+ "TerminalBlockedDetail": "interface",
1541
1547
  "TerminalCause": "type",
1542
1548
  "TerminalClaimIntent": "type",
1543
1549
  "TerminalClaimOutcome": "type",
@@ -2098,6 +2104,7 @@
2098
2104
  "isDeclaredWrite": "function",
2099
2105
  "isDelegatedAgentTerminal": "function",
2100
2106
  "isDeniedBy": "function",
2107
+ "isEngineRefusal": "variable",
2101
2108
  "isFreshPeerRow": "function",
2102
2109
  "isFullyReadable": "function",
2103
2110
  "isGateKind": "function",
@@ -2117,6 +2124,7 @@
2117
2124
  "isPersistedRuleMandate": "function",
2118
2125
  "isPersonalScope": "function",
2119
2126
  "isProcessLive": "function",
2127
+ "isPromptBlockCause": "function",
2120
2128
  "isProtectedWrite": "function",
2121
2129
  "isProviderEchoShape": "function",
2122
2130
  "isQuestionUnavailable": "function",
@@ -2128,6 +2136,7 @@
2128
2136
  "isSelfOrchestrationActive": "function",
2129
2137
  "isSessionConflict": "function",
2130
2138
  "isSettlementKind": "function",
2139
+ "isSettlementParty": "function",
2131
2140
  "isSuspendable": "function",
2132
2141
  "isSwappableDepSeat": "function",
2133
2142
  "isSystemInjectionPriority": "function",
@@ -2326,6 +2335,7 @@
2326
2335
  "reasoningEffortLevelsOf": "function",
2327
2336
  "rebuildAutoModeDecider": "function",
2328
2337
  "rebuildStrictControlPlaneLedger": "function",
2338
+ "receiveHookResult": "function",
2329
2339
  "reconcileInterruptedSession": "function",
2330
2340
  "reconcileMemoryEntries": "function",
2331
2341
  "reconcileParkedAgents": "function",
@@ -3410,6 +3420,7 @@
3410
3420
  "ORG_UNAVAILABLE_DECISION_REASON": "advanced",
3411
3421
  "ORIGIN_IMPLIES_REAL_APPROVAL": "advanced",
3412
3422
  "OUTPUT_EFFICIENCY": "advanced",
3423
+ "OUTPUT_STYLE_NAME_MAX": "advanced",
3413
3424
  "OffCapabilityModel": "advanced",
3414
3425
  "OnAsk": "advanced",
3415
3426
  "OnElicit": "advanced",
@@ -3493,6 +3504,7 @@
3493
3504
  "PROJECT_ID_HINTS_FILE": "advanced",
3494
3505
  "PROJECT_ID_REGEX": "advanced",
3495
3506
  "PROJECT_MARKER_PATH": "advanced",
3507
+ "PROMPT_BLOCK_CAUSES": "advanced",
3496
3508
  "PROTOCOL_TABLE": "advanced",
3497
3509
  "PROVIDER_ECHO_SHAPE": "advanced",
3498
3510
  "PackSectionDeclaration": "advanced",
@@ -3625,6 +3637,7 @@
3625
3637
  "PromptArtifactSource": "advanced",
3626
3638
  "PromptArtifactStore": "advanced",
3627
3639
  "PromptBlock": "advanced",
3640
+ "PromptBlockCause": "advanced",
3628
3641
  "PromptCacheClass": "advanced",
3629
3642
  "PromptCacheReport": "advanced",
3630
3643
  "PromptCarrier": "advanced",
@@ -3866,6 +3879,7 @@
3866
3879
  "SESSION_LOG_DIGEST_SCHEME": "internal",
3867
3880
  "SETTLEMENT_IS_REFUSAL": "advanced",
3868
3881
  "SETTLEMENT_KINDS": "advanced",
3882
+ "SETTLEMENT_PARTIES": "advanced",
3869
3883
  "SHARED_MEMORY_LIST_PAGE_SIZE": "advanced",
3870
3884
  "SHARED_MEMORY_READ_CAP_BYTES": "advanced",
3871
3885
  "SHELL_READ_DECISION": "advanced",
@@ -3948,6 +3962,7 @@
3948
3962
  "SessionWriteOptions": "stable",
3949
3963
  "Settlement": "advanced",
3950
3964
  "SettlementKind": "stable",
3965
+ "SettlementParty": "advanced",
3951
3966
  "SharedAbortScope": "advanced",
3952
3967
  "SharedMemoryDocumentEntry": "advanced",
3953
3968
  "SharedMemoryFixture": "advanced",
@@ -4088,6 +4103,7 @@
4088
4103
  "TeamResult": "advanced",
4089
4104
  "TeamRole": "advanced",
4090
4105
  "TeamTurn": "advanced",
4106
+ "TerminalBlockedDetail": "advanced",
4091
4107
  "TerminalCause": "advanced",
4092
4108
  "TerminalClaimIntent": "advanced",
4093
4109
  "TerminalClaimOutcome": "advanced",
@@ -4648,6 +4664,7 @@
4648
4664
  "isDeclaredWrite": "advanced",
4649
4665
  "isDelegatedAgentTerminal": "advanced",
4650
4666
  "isDeniedBy": "advanced",
4667
+ "isEngineRefusal": "advanced",
4651
4668
  "isFreshPeerRow": "advanced",
4652
4669
  "isFullyReadable": "advanced",
4653
4670
  "isGateKind": "advanced",
@@ -4667,6 +4684,7 @@
4667
4684
  "isPersistedRuleMandate": "advanced",
4668
4685
  "isPersonalScope": "advanced",
4669
4686
  "isProcessLive": "advanced",
4687
+ "isPromptBlockCause": "advanced",
4670
4688
  "isProtectedWrite": "advanced",
4671
4689
  "isProviderEchoShape": "advanced",
4672
4690
  "isQuestionUnavailable": "advanced",
@@ -4678,6 +4696,7 @@
4678
4696
  "isSelfOrchestrationActive": "advanced",
4679
4697
  "isSessionConflict": "stable",
4680
4698
  "isSettlementKind": "advanced",
4699
+ "isSettlementParty": "advanced",
4681
4700
  "isSuspendable": "advanced",
4682
4701
  "isSwappableDepSeat": "advanced",
4683
4702
  "isSystemInjectionPriority": "advanced",
@@ -4876,6 +4895,7 @@
4876
4895
  "reasoningEffortLevelsOf": "advanced",
4877
4896
  "rebuildAutoModeDecider": "advanced",
4878
4897
  "rebuildStrictControlPlaneLedger": "advanced",
4898
+ "receiveHookResult": "advanced",
4879
4899
  "reconcileInterruptedSession": "advanced",
4880
4900
  "reconcileMemoryEntries": "advanced",
4881
4901
  "reconcileParkedAgents": "advanced",