@sema-agent/core 5.45.0 → 5.46.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.
- package/CHANGELOG.md +56 -0
- package/dist/agents/subagent.js +1 -1
- package/dist/core/checkpoint-store.d.ts +12 -0
- package/dist/core/hooks.d.ts +9 -2
- package/dist/core/hooks.js +6 -5
- package/dist/core/memory-engine/content-origin.d.ts +3 -1
- package/dist/core/memory-engine/engine.d.ts +50 -3
- package/dist/core/memory-engine/engine.js +194 -32
- package/dist/core/memory-engine/export-bundle.d.ts +10 -1
- package/dist/core/memory-engine/export-bundle.js +21 -0
- package/dist/core/memory-engine/file-backend.d.ts +33 -4
- package/dist/core/memory-engine/file-backend.js +165 -39
- package/dist/core/memory-engine/frontmatter.d.ts +42 -1
- package/dist/core/memory-engine/frontmatter.js +141 -1
- package/dist/core/memory-engine/header-hints.d.ts +17 -0
- package/dist/core/memory-engine/header-hints.js +6 -0
- package/dist/core/memory-engine/index.d.ts +4 -3
- package/dist/core/memory-engine/index.js +3 -2
- package/dist/core/memory-engine/layout.d.ts +25 -2
- package/dist/core/memory-engine/layout.js +25 -12
- package/dist/core/memory-engine/memory-backend-contract.js +65 -0
- package/dist/core/memory-engine/sync-client.d.ts +1 -1
- package/dist/core/memory-engine/sync-client.js +33 -1
- package/dist/core/memory-engine/tools.d.ts +7 -0
- package/dist/core/memory-engine/tools.js +3 -0
- package/dist/core/memory-engine/types.d.ts +75 -1
- package/dist/core/memory-engine/types.js +1 -1
- package/dist/core/reminder-mint.d.ts +70 -0
- package/dist/core/reminder-mint.js +25 -0
- package/dist/core/runner/git-status-frame.d.ts +3 -14
- package/dist/core/runner/git-status-frame.js +39 -14
- package/dist/core/runner/prepare-config-doors.d.ts +4 -0
- package/dist/core/runner/prepare-config-doors.js +15 -0
- package/dist/core/runner/prepare-hands-readface.d.ts +5 -11
- package/dist/core/runner/prepare-hands-readface.js +26 -0
- package/dist/core/runner/prepare-memory.d.ts +11 -0
- package/dist/core/runner/prepare-memory.js +12 -10
- package/dist/core/runner/prepare-task.d.ts +22 -1
- package/dist/core/runner/prepare-task.js +48 -13
- package/dist/core/runner/runtask.js +62 -55
- package/dist/core/side-query.d.ts +11 -1
- package/dist/core/side-query.js +3 -0
- package/dist/core/types.d.ts +47 -7
- package/dist/engine/harness/types.d.ts +46 -1
- package/dist/engine/harness/types.js +11 -0
- package/dist/engine/session/import-validate.js +6 -1
- package/dist/engine/session/session.d.ts +20 -0
- package/dist/engine/session/session.js +26 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/orchestration/run-workflow-tool.d.ts +16 -0
- package/dist/orchestration/run-workflow-tool.js +23 -3
- package/dist/orchestration/workflow-governance.d.ts +8 -1
- package/dist/prompt-assembly/epoch.js +2 -0
- package/dist/prompt-assembly/types.d.ts +6 -0
- package/dist/prompts/default.d.ts +13 -1
- package/dist/prompts/default.js +5 -1
- package/dist/tools/fs/fs-bash.d.ts +4 -0
- package/dist/tools/fs/fs-bash.js +1 -1
- package/dist/tools/fs/fs-read.d.ts +1 -1
- package/dist/tools/fs/fs-read.js +8 -7
- package/dist/tools/fs/fs-shared.d.ts +10 -4
- package/dist/tools/fs/fs-shared.js +6 -3
- package/dist/tools/fs/gh-rate-limit.d.ts +4 -1
- package/dist/tools/fs/gh-rate-limit.js +3 -2
- package/dist/tools/fs/index.d.ts +10 -2
- package/dist/tools/fs/index.js +2 -1
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +12 -1
|
@@ -26,6 +26,7 @@ import { findAdmittingRule, suggestRulesForCommand } from "../permission-rule-mo
|
|
|
26
26
|
import { ActiveSkillScope, createActiveSkillScopePolicy } from "./active-skill-scope.js";
|
|
27
27
|
import { CHANGED_FILES_MTIME_EPS_MS, fenceMcpServerInstructions, renderAgentListingDelta } from "./turn-attachments.js";
|
|
28
28
|
import { inlineUntrusted } from "../untrusted-text.js";
|
|
29
|
+
import { isValidReminderMark, mintReminderMark, reminderMarkDeclaration } from "../reminder-mint.js";
|
|
29
30
|
import { policyAskClassOf } from "../ask-class.js";
|
|
30
31
|
import { emitTrace } from "../trace.js";
|
|
31
32
|
import { createSessionRulePolicy, PATH_CONFINABLE_WRITE_TOOLS } from "./session-rule-policy.js";
|
|
@@ -333,7 +334,7 @@ function cwdConflictsRestoreError(requestedCwd) {
|
|
|
333
334
|
export async function prepareTask(spec, deps, sessions, resume, internals, runnerSelf) {
|
|
334
335
|
const doors = prepareConfigDoors({ spec, deps, sessions, resume, internals });
|
|
335
336
|
spec = doors.spec;
|
|
336
|
-
const { toolFaceSnapshot, promptProfile, lockedPreflight, resolvedInteractionPosture, resolvedRole, model, thinking, compModel, fableMitigations, memoryDelegationEvidence, usageWindows, brainCallGuardrailRef, brainCallGuardrailMs } = doors;
|
|
337
|
+
const { toolFaceSnapshot, promptProfile, lockedPreflight, resolvedInteractionPosture, resolvedRole, model, thinking, compModel, fableMitigations, memoryDelegationEvidence, memoryProvenance, usageWindows, brainCallGuardrailRef, brainCallGuardrailMs } = doors;
|
|
337
338
|
announceToolModelGate(deps.onNotice, model.id, doors.modelGate);
|
|
338
339
|
const { toolEffects, egressTools, irreversibleTools, irreversibilityTier, axisExplicitNegatives, reversibilityProbes, ownToolNames } = prepareSafetyScan({ spec, deps });
|
|
339
340
|
let shellGatedBash = false;
|
|
@@ -351,6 +352,30 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
351
352
|
const taskScope = internals?.registryScope ?? spec.principal ?? "default";
|
|
352
353
|
internals?.peerSelfRef?.addAxis("s", sessionId);
|
|
353
354
|
internals?.peerSelfRef?.addAxis("t", hostTaskId);
|
|
355
|
+
const sessionReminderMark = await (async () => {
|
|
356
|
+
try {
|
|
357
|
+
return await session.getReminderMark();
|
|
358
|
+
}
|
|
359
|
+
catch (err) {
|
|
360
|
+
deps.onError?.(err instanceof Error ? err : new Error(String(err)), { phase: "config", sessionId });
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
})();
|
|
364
|
+
const reminderMark = isValidReminderMark(resume?.seed.reminderMark)
|
|
365
|
+
? resume.seed.reminderMark
|
|
366
|
+
: isValidReminderMark(internals?.reminderMark)
|
|
367
|
+
? internals.reminderMark
|
|
368
|
+
: isValidReminderMark(sessionReminderMark)
|
|
369
|
+
? sessionReminderMark
|
|
370
|
+
: mintReminderMark();
|
|
371
|
+
if (reminderMark !== sessionReminderMark) {
|
|
372
|
+
try {
|
|
373
|
+
await session.appendReminderMark(reminderMark);
|
|
374
|
+
}
|
|
375
|
+
catch (err) {
|
|
376
|
+
deps.onError?.(err instanceof Error ? err : new Error(String(err)), { phase: "config", sessionId });
|
|
377
|
+
}
|
|
378
|
+
}
|
|
354
379
|
const offloadScope = spec.principal ?? "default";
|
|
355
380
|
if (internals?.registryScope !== undefined && internals.registryScope !== offloadScope) {
|
|
356
381
|
deps.onError?.(new Error(`offload/tool-result namespace note: this run mounts in registry domain "${internals.registryScope}" but its offloaded tool results live under the TRUST identity "${offloadScope}" (principal${spec.principal === undefined ? " absent → default" : ""}). Before 2.13.0 the registry domain named this namespace too; if a deployment used registryScope as its ref-tenancy boundary, that boundary is now the principal — pass one, or read refs under "${offloadScope}".`), { phase: "config", sessionId });
|
|
@@ -797,6 +822,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
797
822
|
...(spec.memoryPersistenceCapable !== undefined ? { memoryPersistenceCapable: spec.memoryPersistenceCapable } : {}),
|
|
798
823
|
getApiKeyAndHeaders: spec.getApiKeyAndHeaders,
|
|
799
824
|
parentCwd: taskRootFinal,
|
|
825
|
+
reminderMark,
|
|
800
826
|
...(centerAdoption !== undefined ? { centerArtifactDigest: centerAdoption.artifact.artifactDigest } : {}),
|
|
801
827
|
...(centerAdoption?.sourceRevision !== undefined ? { centerSourceRevision: centerAdoption.sourceRevision } : {}),
|
|
802
828
|
activeSkillScope: () => skillScope.active(),
|
|
@@ -983,6 +1009,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
983
1009
|
sourceTaskId: hostTaskId,
|
|
984
1010
|
parentModel: () => harnessRef.current?.getModel(),
|
|
985
1011
|
...(spec.getApiKeyAndHeaders !== undefined ? { parentGetApiKeyAndHeaders: spec.getApiKeyAndHeaders } : {}),
|
|
1012
|
+
...(frozenOnAsk !== undefined ? { parentOnAsk: frozenOnAsk } : {}),
|
|
986
1013
|
principal: spec.principal,
|
|
987
1014
|
oneShot: spec.oneShot,
|
|
988
1015
|
...(resolvedInteractionPosture !== undefined ? { parentInteractionPosture: resolvedInteractionPosture } : {}),
|
|
@@ -1198,7 +1225,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1198
1225
|
foldProtocolAxes(a2a.toolAxes, "A2A");
|
|
1199
1226
|
const callIssuedAtRef = {};
|
|
1200
1227
|
const memoryWriteGateRef = {};
|
|
1201
|
-
const handsReadFaceInput = { handsEnabled, executionEnv, taskRootFinal, rebaseRestoredPath, resume, session, sessionId, hostTaskId, taskScope, fullShellReachable, effectiveShellGate, toolFaceSnapshot, model, spec, deps, internals, memoryWriteGateRef, firstPartyOffload, tools, egressTools, irreversibilityTier, irreversibleTools, reversibilityProbes };
|
|
1228
|
+
const handsReadFaceInput = { handsEnabled, executionEnv, taskRootFinal, rebaseRestoredPath, resume, session, sessionId, hostTaskId, taskScope, fullShellReachable, effectiveShellGate, toolFaceSnapshot, model, spec, deps, internals, memoryWriteGateRef, firstPartyOffload, tools, egressTools, irreversibilityTier, irreversibleTools, reversibilityProbes, reminderMark };
|
|
1202
1229
|
const handsReadFace = handsEnabled ? await prepareHandsMount(handsReadFaceInput) : resolveHandsLessReadFace(handsReadFaceInput);
|
|
1203
1230
|
const { readFileStateForCheckpoint, seedContextFiles, handsCwdRef, workspaceStateSettle, wsSnapshot, rebaseWsPath, backgroundTaskToolsActive, additionalRootsCanonical, additionalReadRootsCanonical, attachmentRootCanonical, readDenyMatcher } = handsReadFace;
|
|
1204
1231
|
resolvedReadFace = handsReadFace.resolvedReadFace;
|
|
@@ -1439,9 +1466,11 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1439
1466
|
sessionId,
|
|
1440
1467
|
taskRootPath: taskRootFinal,
|
|
1441
1468
|
memoryWriteGateRef,
|
|
1469
|
+
reminderMark,
|
|
1442
1470
|
writeToolsMounted: tools.some((t) => t.name === "Write") &&
|
|
1443
1471
|
!(toolFaceSnapshot.exclude?.includes("Write") ?? false) &&
|
|
1444
1472
|
!(handsEnabled && isRemoteExecutionEnv(executionEnv) && spec.memoryPersistenceCapable !== true),
|
|
1473
|
+
memoryProvenance,
|
|
1445
1474
|
memoryPersistenceDeclared: spec.memoryPersistenceCapable,
|
|
1446
1475
|
rosterCanPersist: spec.memoryPersistenceCapable ??
|
|
1447
1476
|
tools.some((t) => {
|
|
@@ -1644,6 +1673,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1644
1673
|
policyEnabled: promptPolicyEnabled,
|
|
1645
1674
|
hooksEnabled: promptHooksEnabled,
|
|
1646
1675
|
isolationEnabled: isIsolated(executionEnv),
|
|
1676
|
+
reminderMark,
|
|
1647
1677
|
readFaceOpen: resolvedReadFace === "open",
|
|
1648
1678
|
orchestrationEnabled: selfOrchestrationActive,
|
|
1649
1679
|
orchestrationDeferred: selfOrchestrationActive && (toolFaceSnapshot.defer?.includes("Workflow") ?? false),
|
|
@@ -1904,9 +1934,9 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1904
1934
|
continue;
|
|
1905
1935
|
}
|
|
1906
1936
|
const inner = t.execute.bind(t);
|
|
1907
|
-
const mark = (reason) => {
|
|
1937
|
+
const mark = (reason, cause) => {
|
|
1908
1938
|
try {
|
|
1909
|
-
pollution?.markPolluted(reason);
|
|
1939
|
+
pollution?.markPolluted(reason, cause);
|
|
1910
1940
|
}
|
|
1911
1941
|
catch {
|
|
1912
1942
|
}
|
|
@@ -1915,7 +1945,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1915
1945
|
...t,
|
|
1916
1946
|
execute: async (toolCallId, params, signal, onUpdate) => {
|
|
1917
1947
|
if (pollutes) {
|
|
1918
|
-
mark(`tool "${t.name}" (${origin} content class) was invoked in this session
|
|
1948
|
+
mark(`tool "${t.name}" (${origin} content class) was invoked in this session`, "observed");
|
|
1919
1949
|
recordExternal();
|
|
1920
1950
|
}
|
|
1921
1951
|
if (!isDelegation)
|
|
@@ -1931,7 +1961,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1931
1961
|
const att = readCardAttestation(result?.details);
|
|
1932
1962
|
if (att === "external") {
|
|
1933
1963
|
mark(`tool "${t.name}" returned the output of a delegated agent that invoked an external-content-class tool at runtime` +
|
|
1934
|
-
(typeof requested === "string" ? ` (subagent_type "${requested}")` : ""));
|
|
1964
|
+
(typeof requested === "string" ? ` (subagent_type "${requested}")` : ""), "observed");
|
|
1935
1965
|
recordExternal();
|
|
1936
1966
|
}
|
|
1937
1967
|
else if (att !== "clean") {
|
|
@@ -1939,7 +1969,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
1939
1969
|
const staticFaceReason = `tool "${t.name}" returned the output of a delegated agent whose tool face can reach external content` +
|
|
1940
1970
|
(typeof requested === "string" ? ` (subagent_type "${requested}")` : " (no subagent_type named — classified fail-closed)");
|
|
1941
1971
|
if (!delegationEvidenceAttestedOnly) {
|
|
1942
|
-
mark(staticFaceReason);
|
|
1972
|
+
mark(staticFaceReason, "static");
|
|
1943
1973
|
}
|
|
1944
1974
|
else if (pollution !== undefined && !staticMarkWaiverAnnounced) {
|
|
1945
1975
|
staticMarkWaiverAnnounced = true;
|
|
@@ -2043,6 +2073,9 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
2043
2073
|
centerAdoption = undefined;
|
|
2044
2074
|
}
|
|
2045
2075
|
let systemPrompt = assembled.systemPrompt;
|
|
2076
|
+
if (!systemPrompt.includes(reminderMarkDeclaration(reminderMark))) {
|
|
2077
|
+
deps.onError?.(new Error("reminder-mark declaration missing from the assembled system prompt: this run's PromptProvider owns the prompt and did not render the mark declaration, so engine <system-reminder> tags carry a mark the model is never told about (the impersonation defense is inactive for this deployment). Render `reminderMarkDeclaration(ctx.reminderMark)` (exported; the value rides StablePromptContext.reminderMark) in the provider, or accept the disclosure."), { phase: "config", sessionId });
|
|
2078
|
+
}
|
|
2046
2079
|
const renderWithDate = assembled.renderWithDate
|
|
2047
2080
|
? (date) => {
|
|
2048
2081
|
systemPrompt = assembled.renderWithDate(date);
|
|
@@ -3406,6 +3439,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
3406
3439
|
consolidationNotes: undefined,
|
|
3407
3440
|
readFileState: readFileStateForCheckpoint ? [...readFileStateForCheckpoint.entries()] : undefined,
|
|
3408
3441
|
readFace: faceCheckpointSection(),
|
|
3442
|
+
reminderMark,
|
|
3409
3443
|
repairBundle: repairBundleForCheckpoint(parkedSpendMicroUsd),
|
|
3410
3444
|
workspaceHandle,
|
|
3411
3445
|
handsCwd: handsCwdRef?.current,
|
|
@@ -4069,7 +4103,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4069
4103
|
if (notifyPermissionDenied) {
|
|
4070
4104
|
await notifyPermissionDenied({ toolName: e.toolName, input: cloneObserverInput(e.input), toolCallId: e.toolCallId, reason: complianceDeny, source: "safety", identity: hookIdentity });
|
|
4071
4105
|
}
|
|
4072
|
-
return { block: true, reason: formatHookFeedback(complianceDeny), preToolContext: [] };
|
|
4106
|
+
return { block: true, reason: formatHookFeedback(complianceDeny, reminderMark), preToolContext: [] };
|
|
4073
4107
|
}
|
|
4074
4108
|
}
|
|
4075
4109
|
if (planModeRef.active && (toolEffects.get(e.toolName) ?? "write") !== "read") {
|
|
@@ -4082,7 +4116,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4082
4116
|
}
|
|
4083
4117
|
return {
|
|
4084
4118
|
block: true,
|
|
4085
|
-
reason: formatHookFeedback(planDenyReason),
|
|
4119
|
+
reason: formatHookFeedback(planDenyReason, reminderMark),
|
|
4086
4120
|
preToolContext: [],
|
|
4087
4121
|
};
|
|
4088
4122
|
}
|
|
@@ -4092,6 +4126,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4092
4126
|
onNotifyError: (f) => emitTrace(deps.tracer, () => ({ kind: "observer.notify_failed", version: 1, taskId: spec.taskId ?? sessionId, site: f.site, message: f.error.message, ts: Date.now() })),
|
|
4093
4127
|
event: e,
|
|
4094
4128
|
identity: hookIdentity,
|
|
4129
|
+
reminderMark,
|
|
4095
4130
|
preToolUse: ownGatePreToolUse,
|
|
4096
4131
|
...(hookEnvFace !== undefined ? { hookEnv: hookEnvFace } : {}),
|
|
4097
4132
|
adjudicate,
|
|
@@ -4208,7 +4243,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4208
4243
|
details: clonedDetails,
|
|
4209
4244
|
}, { toolCallId: e.toolCallId, toolName: e.toolName, ...(hookEnvFace !== undefined ? { env: hookEnvFace } : {}), identity: hookIdentity });
|
|
4210
4245
|
if (patch?.additionalContext) {
|
|
4211
|
-
content = [...content, { type: "text", text: formatHookFeedback(patch.additionalContext) }];
|
|
4246
|
+
content = [...content, { type: "text", text: formatHookFeedback(patch.additionalContext, reminderMark) }];
|
|
4212
4247
|
changed = true;
|
|
4213
4248
|
}
|
|
4214
4249
|
}
|
|
@@ -4220,14 +4255,14 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4220
4255
|
changed = true;
|
|
4221
4256
|
}
|
|
4222
4257
|
if (patch?.additionalContext) {
|
|
4223
|
-
content = [...content, { type: "text", text: formatHookFeedback(patch.additionalContext) }];
|
|
4258
|
+
content = [...content, { type: "text", text: formatHookFeedback(patch.additionalContext, reminderMark) }];
|
|
4224
4259
|
changed = true;
|
|
4225
4260
|
}
|
|
4226
4261
|
}
|
|
4227
4262
|
const pre = preToolContexts.get(e.toolCallId);
|
|
4228
4263
|
if (pre) {
|
|
4229
4264
|
preToolContexts.delete(e.toolCallId);
|
|
4230
|
-
content = [...content, ...pre.map((t) => ({ type: "text", text: formatHookFeedback(t) }))];
|
|
4265
|
+
content = [...content, ...pre.map((t) => ({ type: "text", text: formatHookFeedback(t, reminderMark) }))];
|
|
4231
4266
|
changed = true;
|
|
4232
4267
|
}
|
|
4233
4268
|
return changed ? { content } : undefined;
|
|
@@ -4501,7 +4536,7 @@ export async function prepareTask(spec, deps, sessions, resume, internals, runne
|
|
|
4501
4536
|
const effectiveReadFaceObserved = carrierReadFace();
|
|
4502
4537
|
const effectiveReadDenyObserved = readDenyAdditionsNormalized.length > 0 ? readDenyAdditionsNormalized.map((e) => ({ ...e })) : undefined;
|
|
4503
4538
|
const preparedHolder = {};
|
|
4504
|
-
const buildPrepared = () => ({ harness, session, sessionId, taskRootPath: taskRootFinal, model, thinking, compModel, mcp: mcp, ...(a2a !== undefined && a2a.tools.length > 0 ? { a2a } : {}), blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, approvalSettlement, nestedStats, ...(rewindNotes.length > 0 ? { rewindNotes } : {}), ...(effectiveReadFaceObserved !== undefined ? { effectiveReadFace: effectiveReadFaceObserved } : {}), ...(effectiveReadDenyObserved !== undefined ? { effectiveReadDenyPatterns: effectiveReadDenyObserved } : {}), effectiveMemoryScopes: memoryEffectiveScopes, cwdRef: handsCwdRef, ...(worktreeSessionRef !== undefined ? { worktreeSessionRef } : {}), ...(workspaceStateSettle !== undefined ? { workspaceStateSettle } : {}), denyNarrowingPolicy, ...(basePolicyForResumeEdit !== undefined ? { basePolicyForResumeEdit } : {}), ...(permissionRuleOrgLane !== undefined ? { permissionRuleOrg: permissionRuleOrgLane } : {}), releaseSignal, settleContentAskBindings, cacheBreakDetector, cacheFingerprint, wiringManifest, promptManifest, epochDeclaredSections, activeTools, ...(deferred.size > 0 ? { deferredToolNames: deferred } : {}), toolMaterializeStatic, deferDirectCall, ...(staticFaceForRef.current !== undefined ? { staticFaceFor: staticFaceForRef.current } : {}), ownedEnv, suspendRef, suspendProgressRef, reviewRef, remoteEnvFailures, reviewRequestRef, suspendLoopRef, suspendForResource, ...(suspendForPlatformLimit !== undefined ? { suspendForPlatformLimit } : {}), ...(envLifetimeSuspendAt !== undefined ? { envLifetimeSuspendAt } : {}), ...(usageGovernance !== undefined ? { usageGovernance } : {}), callIssuedAtRef, brainCallGuardrailRef, suspendForReview, resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolEffects, wakeRecovered, promptOverheadTokens, lastBrainContext, readTaskFile, recentlyReadFiles, normalizeAttachmentPath, isDedupStubResult, ...(onCompactionApplied ? { onCompactionApplied } : {}), compactionReuseRef, trimPressureRef, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit, runIdent: lspRunIdent } } : {}), planModeRef, ...(dateChange ? { dateChange } : {}), ...(instructionSources ? { instructionSources } : {}), ...(workflowSizeGuideline ? { workflowSizeGuideline } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), ...(skillsListing ? { skillsListing } : {}), announcedListingsRef, gitStatusRef, listBackgroundTasks, hookIdentity, ...(turnSnapshotRef.current !== undefined ? { turnSnapshot: turnSnapshotRef.current } : {}), ...(centerCompactionCandidate !== undefined ? { centerCompactionCandidate } : {}) });
|
|
4539
|
+
const buildPrepared = () => ({ harness, session, sessionId, reminderMark, taskRootPath: taskRootFinal, model, thinking, compModel, mcp: mcp, ...(a2a !== undefined && a2a.tools.length > 0 ? { a2a } : {}), blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, approvalSettlement, nestedStats, ...(rewindNotes.length > 0 ? { rewindNotes } : {}), ...(effectiveReadFaceObserved !== undefined ? { effectiveReadFace: effectiveReadFaceObserved } : {}), ...(effectiveReadDenyObserved !== undefined ? { effectiveReadDenyPatterns: effectiveReadDenyObserved } : {}), effectiveMemoryScopes: memoryEffectiveScopes, cwdRef: handsCwdRef, ...(worktreeSessionRef !== undefined ? { worktreeSessionRef } : {}), ...(workspaceStateSettle !== undefined ? { workspaceStateSettle } : {}), denyNarrowingPolicy, ...(basePolicyForResumeEdit !== undefined ? { basePolicyForResumeEdit } : {}), ...(permissionRuleOrgLane !== undefined ? { permissionRuleOrg: permissionRuleOrgLane } : {}), releaseSignal, settleContentAskBindings, cacheBreakDetector, cacheFingerprint, wiringManifest, promptManifest, epochDeclaredSections, activeTools, ...(deferred.size > 0 ? { deferredToolNames: deferred } : {}), toolMaterializeStatic, deferDirectCall, ...(staticFaceForRef.current !== undefined ? { staticFaceFor: staticFaceForRef.current } : {}), ownedEnv, suspendRef, suspendProgressRef, reviewRef, remoteEnvFailures, reviewRequestRef, suspendLoopRef, suspendForResource, ...(suspendForPlatformLimit !== undefined ? { suspendForPlatformLimit } : {}), ...(envLifetimeSuspendAt !== undefined ? { envLifetimeSuspendAt } : {}), ...(usageGovernance !== undefined ? { usageGovernance } : {}), callIssuedAtRef, brainCallGuardrailRef, suspendForReview, resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolEffects, wakeRecovered, promptOverheadTokens, lastBrainContext, readTaskFile, recentlyReadFiles, normalizeAttachmentPath, isDedupStubResult, ...(onCompactionApplied ? { onCompactionApplied } : {}), compactionReuseRef, trimPressureRef, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit, runIdent: lspRunIdent } } : {}), planModeRef, ...(dateChange ? { dateChange } : {}), ...(instructionSources ? { instructionSources } : {}), ...(workflowSizeGuideline ? { workflowSizeGuideline } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), ...(skillsListing ? { skillsListing } : {}), announcedListingsRef, gitStatusRef, listBackgroundTasks, hookIdentity, ...(turnSnapshotRef.current !== undefined ? { turnSnapshot: turnSnapshotRef.current } : {}), ...(centerCompactionCandidate !== undefined ? { centerCompactionCandidate } : {}) });
|
|
4505
4540
|
const prepared = buildPrepared();
|
|
4506
4541
|
preparedHolder.current = prepared;
|
|
4507
4542
|
return prepared;
|