@sema-agent/core 5.13.0 → 5.14.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 +296 -0
- package/dist/agents/send-message-tool.js +1 -0
- package/dist/agents/subagent.d.ts +4 -0
- package/dist/agents/subagent.js +133 -41
- package/dist/brain/anthropic.js +33 -10
- package/dist/brain/context-overflow.d.ts +20 -0
- package/dist/brain/context-overflow.js +58 -0
- package/dist/brain/open-responses.js +24 -10
- package/dist/brain/openai.js +29 -11
- package/dist/brain/request-params.d.ts +2 -0
- package/dist/brain/request-params.js +16 -0
- package/dist/brain/stream-engine.d.ts +9 -1
- package/dist/brain/stream-engine.js +256 -27
- package/dist/brain/timeout.d.ts +1 -0
- package/dist/brain/timeout.js +1 -0
- package/dist/core/a2a.d.ts +2 -2
- package/dist/core/a2a.js +3 -3
- package/dist/core/ask-question.d.ts +47 -2
- package/dist/core/ask-question.js +209 -28
- package/dist/core/background-agent-store.d.ts +2 -0
- package/dist/core/checkpoint-store.d.ts +41 -17
- package/dist/core/checkpoint-store.js +114 -3
- package/dist/core/hooks.d.ts +24 -2
- package/dist/core/hooks.js +97 -10
- package/dist/core/human-input-projection.d.ts +12 -0
- package/dist/core/human-input-projection.js +27 -0
- package/dist/core/mcp.d.ts +7 -2
- package/dist/core/mcp.js +7 -7
- package/dist/core/memory-admission.d.ts +4 -0
- package/dist/core/memory-admission.js +3 -0
- package/dist/core/runner/assemble-result.d.ts +1 -0
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/prepare-task.d.ts +16 -6
- package/dist/core/runner/prepare-task.js +301 -24
- package/dist/core/runner/runtask.d.ts +3 -6
- package/dist/core/runner/runtask.js +186 -36
- package/dist/core/runner/tool-output-projection.js +1 -0
- package/dist/core/session-store.d.ts +3 -0
- package/dist/core/session-store.js +4 -0
- package/dist/core/session.d.ts +1 -0
- package/dist/core/store-contracts/background-agent-store-contract.js +19 -0
- package/dist/core/store-contracts/checkpoint-store-contract.js +62 -3
- package/dist/core/task-notification.d.ts +2 -0
- package/dist/core/task-notification.js +5 -3
- package/dist/core/task-registry-agent.d.ts +1 -0
- package/dist/core/task-registry-agent.js +6 -0
- package/dist/core/task-registry.d.ts +1 -0
- package/dist/core/task-registry.js +4 -1
- package/dist/core/tool-policy.d.ts +5 -0
- package/dist/core/tool-policy.js +2 -1
- package/dist/core/types.d.ts +32 -1
- package/dist/core/wiring-manifest.d.ts +97 -0
- package/dist/core/wiring-manifest.js +186 -0
- package/dist/engine/compaction/compaction.js +2 -2
- package/dist/engine/harness/agent-harness.d.ts +2 -1
- package/dist/engine/harness/agent-harness.js +8 -1
- package/dist/engine/harness/types.d.ts +3 -1
- package/dist/engine/llm/types.d.ts +7 -0
- package/dist/engine/llm/types.js +8 -1
- package/dist/engine/session/import-validate.d.ts +6 -1
- package/dist/engine/session/import-validate.js +29 -6
- package/dist/engine/session/memory-repo.d.ts +3 -1
- package/dist/engine/session/memory-repo.js +2 -2
- package/dist/index.d.ts +7 -4
- package/dist/index.js +7 -4
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/run-workflow-tool.d.ts +4 -0
- package/dist/orchestration/run-workflow-tool.js +3 -0
- package/dist/orchestration/workflow-types.d.ts +8 -0
- package/dist/orchestration/workflow-types.js +14 -0
- package/dist/orchestration/workflow.d.ts +4 -0
- package/dist/orchestration/workflow.js +134 -5
- package/dist/prompts/default.js +1 -1
- package/dist/stores/file/checkpoint-store.d.ts +3 -5
- package/dist/stores/file/checkpoint-store.js +31 -2
- package/dist/stores/file/index.js +1 -1
- package/dist/stores/file/session-store.d.ts +3 -1
- package/dist/stores/file/session-store.js +2 -2
- package/dist/stores/file/shared-ledger.js +8 -1
- package/dist/tools/fs/bash-readonly-classifier.d.ts +3 -0
- package/dist/tools/fs/bash-readonly-classifier.js +94 -0
- package/dist/tools/fs/fs-bash.js +31 -12
- package/dist/tools/fs/safety.js +34 -10
- package/package.json +1 -1
package/dist/core/hooks.js
CHANGED
|
@@ -14,6 +14,67 @@ export function cloneObserverInput(input) {
|
|
|
14
14
|
return input;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
const reflectApply = Reflect.apply;
|
|
18
|
+
const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
19
|
+
const getPrototypeOf = Object.getPrototypeOf;
|
|
20
|
+
const objectPrototype = Object.prototype;
|
|
21
|
+
function findEnvSlot(env, key) {
|
|
22
|
+
for (let o = env; o !== null && o !== objectPrototype; o = getPrototypeOf(o)) {
|
|
23
|
+
const desc = getOwnPropertyDescriptor(o, key);
|
|
24
|
+
if (desc !== undefined)
|
|
25
|
+
return { holder: o, desc };
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
function readEnvPrimitive(env, key) {
|
|
30
|
+
const slot = findEnvSlot(env, key);
|
|
31
|
+
if (slot === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
return slot.desc.get !== undefined ? reflectApply(slot.desc.get, env, []) : slot.desc.value;
|
|
34
|
+
}
|
|
35
|
+
function createCwdReader(env) {
|
|
36
|
+
const slot = findEnvSlot(env, "cwd");
|
|
37
|
+
if (slot === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
const getter = slot.desc.get;
|
|
40
|
+
const initial = getter !== undefined ? reflectApply(getter, env, []) : slot.desc.value;
|
|
41
|
+
if (typeof initial !== "string")
|
|
42
|
+
return undefined;
|
|
43
|
+
let last = initial;
|
|
44
|
+
return () => {
|
|
45
|
+
const desc = getOwnPropertyDescriptor(slot.holder, "cwd");
|
|
46
|
+
const value = desc === undefined
|
|
47
|
+
? undefined
|
|
48
|
+
: desc.get !== undefined
|
|
49
|
+
? desc.get === getter
|
|
50
|
+
? reflectApply(desc.get, env, [])
|
|
51
|
+
: undefined
|
|
52
|
+
: desc.value;
|
|
53
|
+
if (typeof value === "string")
|
|
54
|
+
last = value;
|
|
55
|
+
return last;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function createHookEnvCapabilities(env) {
|
|
59
|
+
const face = Object.create(null);
|
|
60
|
+
const canonicalPath = readEnvPrimitive(env, "canonicalPath");
|
|
61
|
+
const exists = readEnvPrimitive(env, "exists");
|
|
62
|
+
const readLink = readEnvPrimitive(env, "readLink");
|
|
63
|
+
const cwd = createCwdReader(env);
|
|
64
|
+
if (typeof canonicalPath === "function") {
|
|
65
|
+
face.canonicalPath = (path, abortSignal) => reflectApply(canonicalPath, env, [path, abortSignal]);
|
|
66
|
+
}
|
|
67
|
+
if (typeof exists === "function") {
|
|
68
|
+
face.exists = (path, abortSignal) => reflectApply(exists, env, [path, abortSignal]);
|
|
69
|
+
}
|
|
70
|
+
if (typeof readLink === "function") {
|
|
71
|
+
face.readLink = (path, abortSignal) => reflectApply(readLink, env, [path, abortSignal]);
|
|
72
|
+
}
|
|
73
|
+
if (cwd !== undefined) {
|
|
74
|
+
face.cwd = cwd;
|
|
75
|
+
}
|
|
76
|
+
return Object.freeze(face);
|
|
77
|
+
}
|
|
17
78
|
export function formatHookFeedback(text) {
|
|
18
79
|
return `<system-reminder>\n${text}\n</system-reminder>`;
|
|
19
80
|
}
|
|
@@ -61,6 +122,7 @@ function withProbeTimeout(p, ms, signal) {
|
|
|
61
122
|
export async function runToolGate(input) {
|
|
62
123
|
const { event, preToolUse, adjudicate, resolveAsk, suspendAsk } = input;
|
|
63
124
|
const { toolCallId, toolName } = event;
|
|
125
|
+
const hookCtx = () => ({ toolCallId, toolName, ...(input.hookEnv !== undefined ? { env: input.hookEnv } : {}) });
|
|
64
126
|
let currentInput = event.input;
|
|
65
127
|
const preToolContext = [];
|
|
66
128
|
let hookAsk;
|
|
@@ -68,7 +130,7 @@ export async function runToolGate(input) {
|
|
|
68
130
|
if (preToolUse) {
|
|
69
131
|
let r;
|
|
70
132
|
try {
|
|
71
|
-
r = screenPreToolUseResult(await preToolUse(toolName, currentInput,
|
|
133
|
+
r = screenPreToolUseResult(await preToolUse(toolName, currentInput, hookCtx()));
|
|
72
134
|
}
|
|
73
135
|
catch (err) {
|
|
74
136
|
const reason = preToolUseCrashReason(`this call to "${toolName}"`, err);
|
|
@@ -147,7 +209,10 @@ export async function runToolGate(input) {
|
|
|
147
209
|
currentInput = policyRewrite;
|
|
148
210
|
req.args = policyRewrite;
|
|
149
211
|
}
|
|
150
|
-
if (input.autoMode &&
|
|
212
|
+
if (input.autoMode &&
|
|
213
|
+
decision.action === "ask" &&
|
|
214
|
+
req.toolName !== ASK_USER_QUESTION_TOOL_NAME &&
|
|
215
|
+
input.isMarkedUnresolvable?.(input.event.toolCallId) !== true) {
|
|
151
216
|
const verdict = await input.autoMode.decider
|
|
152
217
|
.decide({ req, askMessage: decisionText(decision) }, input.abortSignal)
|
|
153
218
|
.catch(() => ({ kind: "unavailable", cause: "error" }));
|
|
@@ -180,13 +245,35 @@ export async function runToolGate(input) {
|
|
|
180
245
|
}
|
|
181
246
|
}
|
|
182
247
|
if (decision.action === "ask" && req.toolName === ASK_USER_QUESTION_TOOL_NAME) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
248
|
+
const outcome = input.resolveContentAsk !== undefined ? await input.resolveContentAsk(req) : { kind: "unavailable", parkDeclined: false };
|
|
249
|
+
if (outcome.kind === "answered") {
|
|
250
|
+
decision = { action: "allow", updatedInput: outcome.presentedInput };
|
|
251
|
+
}
|
|
252
|
+
else if (outcome.kind === "unavailable") {
|
|
253
|
+
if (outcome.presentedInput !== undefined) {
|
|
254
|
+
currentInput = outcome.presentedInput;
|
|
255
|
+
req.args = outcome.presentedInput;
|
|
256
|
+
}
|
|
257
|
+
if (suspendAsk && outcome.parkDeclined) {
|
|
258
|
+
const suspended = await suspendAsk(req, currentInput, safety, true);
|
|
259
|
+
if (suspended) {
|
|
260
|
+
return { suspend: suspended, preToolContext };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
decision = {
|
|
264
|
+
action: "deny",
|
|
265
|
+
message: "AskUserQuestion could not be parked for a durable human answer on this path (no checkpoint " +
|
|
266
|
+
"facility, or the suspend failed) and a synchronous permission approver cannot carry an answer — " +
|
|
267
|
+
"the question was NOT shown to anyone. Proceed with your best judgment and state the assumption " +
|
|
268
|
+
"you made.",
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
if (outcome.presentedInput !== undefined)
|
|
273
|
+
decision = { action: "allow", updatedInput: outcome.presentedInput };
|
|
274
|
+
else
|
|
275
|
+
decision = { action: "allow" };
|
|
276
|
+
}
|
|
190
277
|
}
|
|
191
278
|
if (decision.action === "ask") {
|
|
192
279
|
const resolved = await resolveAsk(decision, req);
|
|
@@ -212,7 +299,7 @@ export async function runToolGate(input) {
|
|
|
212
299
|
if (preToolUse) {
|
|
213
300
|
let hr;
|
|
214
301
|
try {
|
|
215
|
-
hr = screenPreToolUseResult(await preToolUse(toolName, editArgs,
|
|
302
|
+
hr = screenPreToolUseResult(await preToolUse(toolName, editArgs, hookCtx()));
|
|
216
303
|
}
|
|
217
304
|
catch (err) {
|
|
218
305
|
traceHookCrash(input, err, notifier);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ActorAssertion } from "../internal/llm.js";
|
|
2
|
+
import type { HumanInputEvent, HumanInputSource, TaskEventIdentity } from "./types.js";
|
|
3
|
+
export type { HumanInputSource, HumanInputDelivery, HumanInputEvent } from "./types.js";
|
|
4
|
+
export interface HumanInputFrame {
|
|
5
|
+
text: string;
|
|
6
|
+
actor?: ActorAssertion;
|
|
7
|
+
source: HumanInputSource;
|
|
8
|
+
}
|
|
9
|
+
export declare function projectHumanInput(frame: HumanInputFrame): string;
|
|
10
|
+
export declare function buildHumanInputEvent(input: Omit<HumanInputEvent, "type" | "inputId" | keyof TaskEventIdentity> & {
|
|
11
|
+
inputId?: string;
|
|
12
|
+
}): HumanInputEvent;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { snapshotActorAssertion } from "../internal/llm.js";
|
|
2
|
+
import { uuidv7 } from "../internal/harness.js";
|
|
3
|
+
import { inlineUntrusted } from "./untrusted-text.js";
|
|
4
|
+
import { attrEscape, EXTERNAL_SOURCE_MAX } from "./task-notification.js";
|
|
5
|
+
export function projectHumanInput(frame) {
|
|
6
|
+
if (frame.actor === undefined || frame.source === "system")
|
|
7
|
+
return frame.text;
|
|
8
|
+
if (frame.text.trim().length === 0)
|
|
9
|
+
return frame.text;
|
|
10
|
+
const label = attrEscape(inlineUntrusted(frame.actor.id, EXTERNAL_SOURCE_MAX));
|
|
11
|
+
const mark = frame.actor.hostAsserted ? "" : " (unverified)";
|
|
12
|
+
return `[from "${label}"${mark}]\n${frame.text}`;
|
|
13
|
+
}
|
|
14
|
+
export function buildHumanInputEvent(input) {
|
|
15
|
+
return {
|
|
16
|
+
type: "human_input",
|
|
17
|
+
inputId: input.inputId ?? uuidv7(),
|
|
18
|
+
sessionSeq: input.sessionSeq,
|
|
19
|
+
carrier: input.carrier,
|
|
20
|
+
source: input.source,
|
|
21
|
+
delivery: input.delivery,
|
|
22
|
+
...(input.issuer !== undefined ? { issuer: input.issuer } : {}),
|
|
23
|
+
...(input.actor !== undefined ? { actor: snapshotActorAssertion(input.actor) } : {}),
|
|
24
|
+
...(input.principal !== undefined ? { principal: input.principal } : {}),
|
|
25
|
+
...(input.entryId !== undefined ? { entryId: input.entryId } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
package/dist/core/mcp.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { type McpImageResizer } from "./image-downsample.js";
|
|
|
5
5
|
import type { McpServerSpec, OnElicit, ToolEffect } from "./types.js";
|
|
6
6
|
export interface McpToolAxis {
|
|
7
7
|
name: string;
|
|
8
|
-
irreversibility?: "always";
|
|
9
|
-
egress?:
|
|
8
|
+
irreversibility?: "always" | "never";
|
|
9
|
+
egress?: boolean;
|
|
10
10
|
effect?: ToolEffect;
|
|
11
11
|
}
|
|
12
12
|
export interface McpDroppedTool {
|
|
@@ -114,6 +114,11 @@ export type McpSchemaNormalizeResult = {
|
|
|
114
114
|
export declare function normalizeMcpToolSchema(schema: unknown): McpSchemaNormalizeResult;
|
|
115
115
|
export declare function mcpToolSchemaProblem(schema: unknown): string | undefined;
|
|
116
116
|
export declare function materializeMcpTools(specs: McpServerSpec[], principal?: string, onElicit?: OnElicit, imageResizer?: McpImageResizer): Promise<MaterializedMcp>;
|
|
117
|
+
export declare function applyCallerAxisOverride(name: string, hint: McpToolAxis | undefined, override: {
|
|
118
|
+
effect?: ToolEffect;
|
|
119
|
+
egress?: boolean;
|
|
120
|
+
irreversibility?: "always" | "never";
|
|
121
|
+
} | undefined): McpToolAxis | undefined;
|
|
117
122
|
export declare function classifyDirReadInvalidParams(message: string): "not_found" | "not_directory";
|
|
118
123
|
export declare function parseCallToolResultLenient(data: unknown): {
|
|
119
124
|
success: true;
|
package/dist/core/mcp.js
CHANGED
|
@@ -720,7 +720,7 @@ function mcpAxisFor(namespacedName, annotations) {
|
|
|
720
720
|
}
|
|
721
721
|
return any ? axis : undefined;
|
|
722
722
|
}
|
|
723
|
-
function applyCallerAxisOverride(name, hint, override) {
|
|
723
|
+
export function applyCallerAxisOverride(name, hint, override) {
|
|
724
724
|
if (!override)
|
|
725
725
|
return hint;
|
|
726
726
|
let effect = hint?.effect;
|
|
@@ -729,16 +729,16 @@ function applyCallerAxisOverride(name, hint, override) {
|
|
|
729
729
|
if (override.effect !== undefined)
|
|
730
730
|
effect = override.effect;
|
|
731
731
|
if (override.egress !== undefined)
|
|
732
|
-
egress = override.egress
|
|
732
|
+
egress = override.egress;
|
|
733
733
|
if (override.irreversibility !== undefined)
|
|
734
|
-
irrev = override.irreversibility
|
|
734
|
+
irrev = override.irreversibility;
|
|
735
735
|
const axis = { name };
|
|
736
736
|
if (effect !== undefined)
|
|
737
737
|
axis.effect = effect;
|
|
738
|
-
if (egress)
|
|
739
|
-
axis.egress =
|
|
740
|
-
if (irrev)
|
|
741
|
-
axis.irreversibility =
|
|
738
|
+
if (egress !== undefined)
|
|
739
|
+
axis.egress = egress;
|
|
740
|
+
if (irrev !== undefined)
|
|
741
|
+
axis.irreversibility = irrev;
|
|
742
742
|
return axis.effect !== undefined || axis.egress !== undefined || axis.irreversibility !== undefined ? axis : undefined;
|
|
743
743
|
}
|
|
744
744
|
const LIST_MCP_RESOURCES = "ListMcpResourcesTool";
|
|
@@ -44,4 +44,8 @@ export interface OwnOrgAdmissionVerdict {
|
|
|
44
44
|
scopes: readonly string[];
|
|
45
45
|
writeScope: string | null;
|
|
46
46
|
}
|
|
47
|
+
export declare function readDurableOrgAdmission(row: {
|
|
48
|
+
admittedOrgScopes?: readonly string[];
|
|
49
|
+
admittedOrgWriteScope?: string | null;
|
|
50
|
+
}): OwnOrgAdmissionVerdict;
|
|
47
51
|
export declare function admitMemoryScopes(input: MemoryAdmissionInput): Promise<MemoryAdmissionOutcome>;
|
|
@@ -7,6 +7,9 @@ function codedError(code, message) {
|
|
|
7
7
|
export function foldAdmissionFreeze(input) {
|
|
8
8
|
return input.delegated ? (input.inherited ?? []) : input.inherited;
|
|
9
9
|
}
|
|
10
|
+
export function readDurableOrgAdmission(row) {
|
|
11
|
+
return { scopes: row.admittedOrgScopes ?? [], writeScope: row.admittedOrgWriteScope ?? null };
|
|
12
|
+
}
|
|
10
13
|
const ORG_SHAPE = /^org:/;
|
|
11
14
|
function orgScopesOf(spec) {
|
|
12
15
|
if (spec.scopeContract !== "v2")
|
|
@@ -58,6 +58,7 @@ export interface ResultFlags {
|
|
|
58
58
|
model?: string;
|
|
59
59
|
unpricedSpend?: boolean;
|
|
60
60
|
rewindNotes?: TaskResult["rewindNotes"];
|
|
61
|
+
strandedHumanAnswers?: TaskResult["strandedHumanAnswers"];
|
|
61
62
|
remoteEnvFailures?: TaskResult["remoteEnvFailures"];
|
|
62
63
|
retryAfterMs?: number;
|
|
63
64
|
abortedForTimeout: boolean;
|
|
@@ -159,5 +159,5 @@ export function assembleResult(spec, sessionId, final, stats, flags) {
|
|
|
159
159
|
void _internalCompaction;
|
|
160
160
|
if (flags.unpricedSpend)
|
|
161
161
|
delete publicStats.costMicroUsd;
|
|
162
|
-
return { taskId, sessionId, status, ...(flags.model !== undefined ? { model: flags.model } : {}), result: result.trim(), salvagedOutput, blockedReason, errorMessage, errorCode, ...(retryAfterMs !== undefined ? { retryAfterMs } : {}), checkpointToken, checkpointGate, ...(workspaceRestoreMode !== undefined ? { workspaceRestoreMode } : {}), ...(flags.rewindNotes !== undefined && flags.rewindNotes.length > 0 ? { rewindNotes: flags.rewindNotes } : {}), ...(flags.remoteEnvFailures !== undefined && flags.remoteEnvFailures.length > 0 ? { remoteEnvFailures: flags.remoteEnvFailures } : {}), stats: publicStats };
|
|
162
|
+
return { taskId, sessionId, status, ...(flags.model !== undefined ? { model: flags.model } : {}), result: result.trim(), salvagedOutput, blockedReason, errorMessage, errorCode, ...(retryAfterMs !== undefined ? { retryAfterMs } : {}), checkpointToken, checkpointGate, ...(workspaceRestoreMode !== undefined ? { workspaceRestoreMode } : {}), ...(flags.rewindNotes !== undefined && flags.rewindNotes.length > 0 ? { rewindNotes: flags.rewindNotes } : {}), ...(flags.remoteEnvFailures !== undefined && flags.remoteEnvFailures.length > 0 ? { remoteEnvFailures: flags.remoteEnvFailures } : {}), ...(flags.strandedHumanAnswers !== undefined && flags.strandedHumanAnswers.length > 0 ? { strandedHumanAnswers: flags.strandedHumanAnswers } : {}), stats: publicStats };
|
|
163
163
|
}
|
|
@@ -20,7 +20,8 @@ import type { TaskNotificationPayload } from "../task-notification.js";
|
|
|
20
20
|
import { type CwdRef } from "../../tools/fs/index.js";
|
|
21
21
|
import { type WorkflowSizeGuideline } from "../../orchestration/workflow-size-guideline.js";
|
|
22
22
|
import type { Runner } from "./runtask.js";
|
|
23
|
-
import { type CheckpointGate, type CheckpointState, type
|
|
23
|
+
import { type CheckpointGate, type CheckpointState, type CheckpointToken, type ResourceLedger, type PlatformLimitReason, type ResourceLimitReason } from "../checkpoint-store.js";
|
|
24
|
+
import { type WiringManifest } from "../wiring-manifest.js";
|
|
24
25
|
import type { ActiveWorktreeSession, AgentMessage, AgentTool, ExecutionEnv } from "../../internal/harness.js";
|
|
25
26
|
import type { NestedUsageAccum, RunnerDeps, TaskEvent, TaskLimits, TaskResult, TaskSpec, ToolActivity, ToolEffect } from "../types.js";
|
|
26
27
|
import type { RepairBundle } from "../../agents/repair-loop.js";
|
|
@@ -44,11 +45,7 @@ export declare function checkpointScopeOf(spec: {
|
|
|
44
45
|
};
|
|
45
46
|
principal?: string;
|
|
46
47
|
}): string;
|
|
47
|
-
export
|
|
48
|
-
checkpointStore?: CheckpointStore | null;
|
|
49
|
-
}, deps: {
|
|
50
|
-
checkpointStore?: CheckpointStore;
|
|
51
|
-
}): CheckpointStore | undefined;
|
|
48
|
+
export { resolveCheckpointStore } from "../checkpoint-store.js";
|
|
52
49
|
export interface Prepared {
|
|
53
50
|
harness: AgentHarness;
|
|
54
51
|
session: StoredSession;
|
|
@@ -81,11 +78,16 @@ export interface Prepared {
|
|
|
81
78
|
denyNarrowingPolicy?: ToolPolicy;
|
|
82
79
|
basePolicyForResumeEdit?: ToolPolicy;
|
|
83
80
|
releaseSignal: () => void;
|
|
81
|
+
settleContentAskBindings: () => ReadonlyArray<{
|
|
82
|
+
deliveryId: string;
|
|
83
|
+
toolCallId: string;
|
|
84
|
+
}>;
|
|
84
85
|
cacheBreakDetector?: CacheBreakDetector;
|
|
85
86
|
cacheFingerprint?: {
|
|
86
87
|
systemPrompt: string;
|
|
87
88
|
tools: ToolFingerprintInput[];
|
|
88
89
|
};
|
|
90
|
+
wiringManifest: WiringManifest;
|
|
89
91
|
promptManifest: {
|
|
90
92
|
constitution: "core" | "replaced" | "provider-assembled";
|
|
91
93
|
blocks: Array<{
|
|
@@ -294,6 +296,8 @@ export interface PrepareResume {
|
|
|
294
296
|
}>;
|
|
295
297
|
};
|
|
296
298
|
workspaceHandle?: import("../remote-env.js").WorkspaceHandle;
|
|
299
|
+
redeemedContentAskCallId?: string;
|
|
300
|
+
redeemedContentAskQuestionsHash?: string;
|
|
297
301
|
executesApprovedAction?: boolean;
|
|
298
302
|
}
|
|
299
303
|
export interface InheritedGate {
|
|
@@ -325,8 +329,13 @@ export declare function resolveModelPromptTraits(model: {
|
|
|
325
329
|
};
|
|
326
330
|
export interface RunInternals {
|
|
327
331
|
repairBundle?: RepairBundle;
|
|
332
|
+
questionFaceStripped?: true;
|
|
333
|
+
parentInteractionPosture?: "interactive" | "headless";
|
|
328
334
|
afterCheckpointResolve?: () => Promise<void>;
|
|
329
335
|
inheritedGate?: InheritedGate;
|
|
336
|
+
ownOrgAdmissionRef?: {
|
|
337
|
+
current: import("../memory-admission.js").OwnOrgAdmissionVerdict | undefined;
|
|
338
|
+
};
|
|
330
339
|
workflowDepth?: number;
|
|
331
340
|
insideFork?: boolean;
|
|
332
341
|
isDelegatedChild?: boolean;
|
|
@@ -338,6 +347,7 @@ export interface RunInternals {
|
|
|
338
347
|
explicitAgentName?: string;
|
|
339
348
|
parentTaskId?: string;
|
|
340
349
|
parentSessionId?: string;
|
|
350
|
+
delegationTaskType?: import("../types.js").DelegationTaskType;
|
|
341
351
|
rootSessionId?: string;
|
|
342
352
|
registryScope?: string;
|
|
343
353
|
parentCenterArtifactDigest?: string;
|