@sema-agent/core 1.286.0 → 1.287.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/dist/agents/subagent.d.ts +17 -0
- package/dist/agents/subagent.d.ts.map +1 -1
- package/dist/agents/subagent.js +81 -4
- package/dist/agents/subagent.js.map +1 -1
- package/dist/core/auto-compaction.d.ts +5 -0
- package/dist/core/auto-compaction.d.ts.map +1 -1
- package/dist/core/auto-compaction.js +19 -2
- package/dist/core/auto-compaction.js.map +1 -1
- package/dist/core/file-snapshot-store.d.ts +1 -0
- package/dist/core/file-snapshot-store.d.ts.map +1 -1
- package/dist/core/file-snapshot-store.js +8 -2
- package/dist/core/file-snapshot-store.js.map +1 -1
- package/dist/core/runner/runtask.d.ts.map +1 -1
- package/dist/core/runner/runtask.js +36 -8
- package/dist/core/runner/runtask.js.map +1 -1
- package/dist/core/trace.d.ts +10 -0
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js.map +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/engine/compaction/compaction.d.ts +2 -2
- package/dist/engine/compaction/compaction.d.ts.map +1 -1
- package/dist/engine/compaction/compaction.js +13 -6
- package/dist/engine/compaction/compaction.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/fs/index.d.ts.map +1 -1
- package/dist/tools/fs/index.js +14 -4
- package/dist/tools/fs/index.js.map +1 -1
- package/dist/tools/fs/search.d.ts.map +1 -1
- package/dist/tools/fs/search.js +3 -2
- package/dist/tools/fs/search.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,9 @@ export type { SubagentStep, SubagentEditedFile } from "./subagent-steps.js";
|
|
|
8
8
|
export declare function inheritedManifestScopeFor(snapshot: readonly unknown[] | undefined): RunInternals["inheritedManifestScope"];
|
|
9
9
|
export declare const DEFAULT_SUBAGENT_TOOL_NAME = "Agent";
|
|
10
10
|
export declare const LEGACY_SUBAGENT_TOOL_NAME = "Task";
|
|
11
|
+
export declare const EXTRA_TOOLS_MAX_FACTORY_CALLS_PER_TREE = 64;
|
|
12
|
+
export declare const EXTRA_TOOLS_FAILED_NOTE = "note: extraTools evaluation failed \u2014 the injected tool set was skipped for this spawn.";
|
|
13
|
+
export declare const EXTRA_TOOLS_BUDGET_NOTE = "note: extraTools evaluation was skipped \u2014 this spawn tree exhausted its factory-call budget (64); no dynamic tools were injected for this spawn.";
|
|
11
14
|
export interface SubagentToolStats {
|
|
12
15
|
readCount: number;
|
|
13
16
|
searchCount: number;
|
|
@@ -127,6 +130,20 @@ export interface SubagentToolOptions {
|
|
|
127
130
|
observedAgent?: string;
|
|
128
131
|
observerAgent?: string;
|
|
129
132
|
}) => void;
|
|
133
|
+
extraTools?: (ctx: SubagentSpawnContext) => ToolSpec[] | Promise<ToolSpec[]>;
|
|
134
|
+
onExtraToolsError?: (err: unknown, info: {
|
|
135
|
+
toolCallId: string;
|
|
136
|
+
agentType?: string;
|
|
137
|
+
depth: number;
|
|
138
|
+
}) => void;
|
|
139
|
+
}
|
|
140
|
+
export interface SubagentSpawnContext {
|
|
141
|
+
toolCallId: string;
|
|
142
|
+
parentTaskId?: string;
|
|
143
|
+
parentSessionId?: string;
|
|
144
|
+
principal?: string;
|
|
145
|
+
agentType?: string;
|
|
146
|
+
depth: number;
|
|
130
147
|
}
|
|
131
148
|
export declare const SUBAGENT_SYSTEM_NOTE: string;
|
|
132
149
|
export declare const FORK_DIRECTIVE_FRAME = "<fork-boilerplate>\nYou are a worker fork. The transcript above is the parent's history \u2014 inherited reference, not your situation. You are NOT a continuation of that agent. Execute ONE directive, then stop.\n\nHard rules:\n- Do NOT spawn subagents with the Agent tool. The \"default to forking\" guidance is for the parent; you ARE the fork, execute directly.\n- One shot: report once and stop. No follow-up questions, no proposed next steps, no waiting for the user.\n\nGuidelines (your directive may override any of these):\n- Stay in scope. Other forks may be handling adjacent work; if you spot something outside your directive, note it in a sentence and move on.\n- Open with one line restating your task, so the parent can spot scope drift at a glance.\n- Be concise \u2014 as short as the answer allows, no shorter. Plain text, no preamble, no meta-commentary.\n- If you committed changes, list the paths and commit hashes in your report.\n</fork-boilerplate>\n\nYour directive: ";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/agents/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/agents/subagent.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/subagent.js
CHANGED
|
@@ -5,6 +5,7 @@ import { defineTool } from "../core/tools.js";
|
|
|
5
5
|
import { TOOL_SEARCH_NAME } from "../core/runner/tool-disclosure.js";
|
|
6
6
|
import { OFFLOAD_TOOL_NAME } from "../core/tool-result-store.js";
|
|
7
7
|
import { resolveToolSubset, toolNameAllowed } from "./tool-filter.js";
|
|
8
|
+
import { canonicalToolName } from "../core/tool-name-aliases.js";
|
|
8
9
|
import { builtinAgentDefinitions } from "./builtin-agents.js";
|
|
9
10
|
import { SUBAGENT_PROMPT } from "../prompts/default.js";
|
|
10
11
|
import { hasSessionFork } from "../core/session.js";
|
|
@@ -40,6 +41,9 @@ export function inheritedManifestScopeFor(snapshot) {
|
|
|
40
41
|
}
|
|
41
42
|
export const DEFAULT_SUBAGENT_TOOL_NAME = "Agent";
|
|
42
43
|
export const LEGACY_SUBAGENT_TOOL_NAME = "Task";
|
|
44
|
+
export const EXTRA_TOOLS_MAX_FACTORY_CALLS_PER_TREE = 64;
|
|
45
|
+
export const EXTRA_TOOLS_FAILED_NOTE = "note: extraTools evaluation failed — the injected tool set was skipped for this spawn.";
|
|
46
|
+
export const EXTRA_TOOLS_BUDGET_NOTE = `note: extraTools evaluation was skipped — this spawn tree exhausted its factory-call budget (${EXTRA_TOOLS_MAX_FACTORY_CALLS_PER_TREE}); no dynamic tools were injected for this spawn.`;
|
|
43
47
|
function countArgLines(v) {
|
|
44
48
|
return typeof v === "string" && v.length > 0 ? v.split("\n").length : 0;
|
|
45
49
|
}
|
|
@@ -662,7 +666,7 @@ export function agentWhenToUseText(def, lean = true) {
|
|
|
662
666
|
const leanText = lean ? def.whenToUseLean : undefined;
|
|
663
667
|
return (leanText || def.whenToUse) || undefined;
|
|
664
668
|
}
|
|
665
|
-
function makeSubagentTool(opts, depth, excluded) {
|
|
669
|
+
function makeSubagentTool(opts, depth, excluded, extraToolsBudget) {
|
|
666
670
|
const maxDepth = opts.maxDepth ?? 5;
|
|
667
671
|
const toolName = opts.name ?? DEFAULT_SUBAGENT_TOOL_NAME;
|
|
668
672
|
const deploymentNames = new Set((opts.agents ?? []).map((a) => a.name));
|
|
@@ -839,9 +843,78 @@ function makeSubagentTool(opts, depth, excluded) {
|
|
|
839
843
|
return `worktree: ${worktreeDir} (cleanup check failed: ${e instanceof Error ? e.message : String(e)})`;
|
|
840
844
|
}
|
|
841
845
|
};
|
|
846
|
+
let injectedTools = [];
|
|
847
|
+
let extraToolsNote;
|
|
848
|
+
const treeBudget = extraToolsBudget ?? { used: 0 };
|
|
849
|
+
const reportExtraToolsError = (err) => {
|
|
850
|
+
try {
|
|
851
|
+
opts.onExtraToolsError?.(err, {
|
|
852
|
+
toolCallId: ctx.toolCallId,
|
|
853
|
+
...(def !== undefined ? { agentType: def.name } : wantsFork ? { agentType: FORK_SUBAGENT_TYPE } : {}),
|
|
854
|
+
depth,
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
catch {
|
|
858
|
+
}
|
|
859
|
+
};
|
|
860
|
+
if (opts.extraTools !== undefined) {
|
|
861
|
+
if (treeBudget.used >= EXTRA_TOOLS_MAX_FACTORY_CALLS_PER_TREE) {
|
|
862
|
+
extraToolsNote = EXTRA_TOOLS_BUDGET_NOTE;
|
|
863
|
+
reportExtraToolsError(new Error(`extraTools factory-call budget exhausted for this spawn tree (${EXTRA_TOOLS_MAX_FACTORY_CALLS_PER_TREE})`));
|
|
864
|
+
}
|
|
865
|
+
else {
|
|
866
|
+
treeBudget.used++;
|
|
867
|
+
try {
|
|
868
|
+
injectedTools = (await opts.extraTools({
|
|
869
|
+
toolCallId: ctx.toolCallId,
|
|
870
|
+
...(ctx.taskId !== undefined ? { parentTaskId: ctx.taskId } : {}),
|
|
871
|
+
...(ctx.sessionId !== undefined ? { parentSessionId: ctx.sessionId } : {}),
|
|
872
|
+
...(ctx.principal !== undefined ? { principal: ctx.principal } : {}),
|
|
873
|
+
...(def !== undefined ? { agentType: def.name } : wantsFork ? { agentType: FORK_SUBAGENT_TYPE } : {}),
|
|
874
|
+
depth,
|
|
875
|
+
})) ?? [];
|
|
876
|
+
}
|
|
877
|
+
catch (e) {
|
|
878
|
+
injectedTools = [];
|
|
879
|
+
extraToolsNote = EXTRA_TOOLS_FAILED_NOTE;
|
|
880
|
+
reportExtraToolsError(e);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
if (ctx.signal?.aborted) {
|
|
884
|
+
const wt = await finishWorktree();
|
|
885
|
+
return {
|
|
886
|
+
content: `Sub-agent not started: the parent task was aborted while extraTools was being evaluated.${wt ? `\n${wt}` : ""}`,
|
|
887
|
+
details: { error: "aborted" },
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
let childPool = opts.tools ?? [];
|
|
892
|
+
if (injectedTools.length > 0) {
|
|
893
|
+
const taken = new Set();
|
|
894
|
+
const reserve = (t) => {
|
|
895
|
+
taken.add(canonicalToolName(t.name));
|
|
896
|
+
for (const alias of t.aliases ?? [])
|
|
897
|
+
taken.add(canonicalToolName(alias));
|
|
898
|
+
};
|
|
899
|
+
for (const t of opts.tools ?? [])
|
|
900
|
+
reserve(t);
|
|
901
|
+
taken.add(canonicalToolName(toolName));
|
|
902
|
+
if (!opts.name)
|
|
903
|
+
taken.add(canonicalToolName(LEGACY_SUBAGENT_TOOL_NAME));
|
|
904
|
+
const merged = [...(opts.tools ?? [])];
|
|
905
|
+
for (const t of injectedTools) {
|
|
906
|
+
const names = [canonicalToolName(t.name), ...(t.aliases ?? []).map((alias) => canonicalToolName(alias))];
|
|
907
|
+
if (names.some((n) => taken.has(n)))
|
|
908
|
+
continue;
|
|
909
|
+
for (const n of names)
|
|
910
|
+
taken.add(n);
|
|
911
|
+
merged.push(t);
|
|
912
|
+
}
|
|
913
|
+
childPool = merged;
|
|
914
|
+
}
|
|
842
915
|
const childTools = def
|
|
843
|
-
? resolveToolSubset(
|
|
844
|
-
: resolveToolSubset(
|
|
916
|
+
? resolveToolSubset(childPool, def.allowTools, def.denyTools)
|
|
917
|
+
: resolveToolSubset(childPool, opts.allowTools, opts.denyTools);
|
|
845
918
|
const childModel = wantsFork
|
|
846
919
|
? ctx.model ?? opts.model
|
|
847
920
|
: perCallModel ?? (def ? (def.model ?? ctx.model ?? opts.model) : opts.model);
|
|
@@ -855,7 +928,7 @@ function makeSubagentTool(opts, depth, excluded) {
|
|
|
855
928
|
const nextExcluded = def ? new Set([...excluded, def.name]) : excluded;
|
|
856
929
|
const defAllowsDelegation = def === undefined || toolNameAllowed(opts.name ?? DEFAULT_SUBAGENT_TOOL_NAME, def.allowTools, def.denyTools);
|
|
857
930
|
if (depth + 1 < maxDepth && defAllowsDelegation) {
|
|
858
|
-
childTools.push(makeSubagentTool(opts, depth + 1, nextExcluded));
|
|
931
|
+
childTools.push(makeSubagentTool(opts, depth + 1, nextExcluded, treeBudget));
|
|
859
932
|
}
|
|
860
933
|
const inheritedManifestScope = inheritedManifestScopeFor(ctx.activeSkillScope?.());
|
|
861
934
|
const childAgentName = (typeof a.description === "string" && a.description.trim() ? a.description.trim() : undefined) ?? def?.name;
|
|
@@ -1357,6 +1430,7 @@ task_id: ${taskId}
|
|
|
1357
1430
|
`The forked agent inherits your full current context and works on its prompt in the background. You will be notified automatically when it completes.
|
|
1358
1431
|
` +
|
|
1359
1432
|
(modelNote ? `${modelNote}\n` : "") +
|
|
1433
|
+
(extraToolsNote ? `${extraToolsNote}\n` : "") +
|
|
1360
1434
|
(worktreeDir !== undefined
|
|
1361
1435
|
? `worktree: ${worktreeDir} (the agent works in its own detached worktree; auto-removed when it settles unchanged, kept when it made changes)
|
|
1362
1436
|
`
|
|
@@ -1407,6 +1481,7 @@ task_id: ${taskId}
|
|
|
1407
1481
|
`[Sub-agent report · ${FORK_SUBAGENT_TYPE}${a.description ? ` · ${String(a.description)}` : ""}] (forked session …${forkedId.slice(-8)})`,
|
|
1408
1482
|
`status: ${forkChild.status}`,
|
|
1409
1483
|
modelNote ?? "",
|
|
1484
|
+
extraToolsNote ?? "",
|
|
1410
1485
|
bgIgnoredNote ?? "",
|
|
1411
1486
|
wtLine ?? "",
|
|
1412
1487
|
forkChild.blockedReason ? `blocked_reason: ${inlineUntrusted(forkChild.blockedReason, REPORT_FIELD_MAX)}` : "",
|
|
@@ -1670,6 +1745,7 @@ task_id: ${taskId}
|
|
|
1670
1745
|
`The agent is working in the background. You will be notified automatically when it completes.
|
|
1671
1746
|
` +
|
|
1672
1747
|
(modelNote ? `${modelNote}\n` : "") +
|
|
1748
|
+
(extraToolsNote ? `${extraToolsNote}\n` : "") +
|
|
1673
1749
|
(worktreeDir !== undefined
|
|
1674
1750
|
? `worktree: ${worktreeDir} (the agent works in its own detached worktree; auto-removed when it settles unchanged, kept when it made changes)
|
|
1675
1751
|
`
|
|
@@ -1766,6 +1842,7 @@ task_id: ${taskId}
|
|
|
1766
1842
|
`[Sub-agent report${def ? ` · ${def.name}` : ""}${a.description ? ` · ${String(a.description)}` : ""}]`,
|
|
1767
1843
|
`status: ${child.status}`,
|
|
1768
1844
|
modelNote ?? "",
|
|
1845
|
+
extraToolsNote ?? "",
|
|
1769
1846
|
worktreeLine ?? "",
|
|
1770
1847
|
child.blockedReason ? `blocked_reason: ${inlineUntrusted(child.blockedReason, REPORT_FIELD_MAX)}` : "",
|
|
1771
1848
|
child.errorMessage ? `error: ${inlineUntrusted(child.errorMessage, REPORT_FIELD_MAX)}` : "",
|