@sema-agent/core 1.300.0 → 1.302.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.map +1 -1
- package/dist/agents/subagent.js +124 -50
- package/dist/agents/subagent.js.map +1 -1
- package/dist/core/auto-mode-prompt.d.ts.map +1 -1
- package/dist/core/auto-mode-prompt.js +25 -2
- package/dist/core/auto-mode-prompt.js.map +1 -1
- package/dist/core/checkpoint-store.d.ts +5 -0
- package/dist/core/checkpoint-store.d.ts.map +1 -1
- package/dist/core/checkpoint-store.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +2 -2
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +17 -3
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/file-backend.d.ts.map +1 -1
- package/dist/core/memory-engine/file-backend.js +34 -1
- package/dist/core/memory-engine/file-backend.js.map +1 -1
- package/dist/core/memory-engine/frontmatter.d.ts.map +1 -1
- package/dist/core/memory-engine/frontmatter.js +62 -1
- package/dist/core/memory-engine/frontmatter.js.map +1 -1
- package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -1
- package/dist/core/memory-engine/memory-backend-contract.js +45 -0
- package/dist/core/memory-engine/memory-backend-contract.js.map +1 -1
- package/dist/core/memory-engine/sync-client.d.ts.map +1 -1
- package/dist/core/memory-engine/sync-client.js +23 -0
- package/dist/core/memory-engine/sync-client.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +8 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/runner/prepare-task.d.ts +16 -1
- package/dist/core/runner/prepare-task.d.ts.map +1 -1
- package/dist/core/runner/prepare-task.js +109 -9
- package/dist/core/runner/prepare-task.js.map +1 -1
- package/dist/core/runner/prompt-suggestions.d.ts.map +1 -1
- package/dist/core/runner/prompt-suggestions.js +14 -2
- package/dist/core/runner/prompt-suggestions.js.map +1 -1
- package/dist/core/runner/runtask.d.ts.map +1 -1
- package/dist/core/runner/runtask.js +190 -58
- package/dist/core/runner/runtask.js.map +1 -1
- package/dist/core/runner/synthetic-tools.d.ts +11 -1
- package/dist/core/runner/synthetic-tools.d.ts.map +1 -1
- package/dist/core/runner/synthetic-tools.js +47 -28
- package/dist/core/runner/synthetic-tools.js.map +1 -1
- package/dist/core/runner/turn-attachments.d.ts +32 -3
- package/dist/core/runner/turn-attachments.d.ts.map +1 -1
- package/dist/core/runner/turn-attachments.js +146 -7
- package/dist/core/runner/turn-attachments.js.map +1 -1
- package/dist/core/scheduler.d.ts +5 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/task-registry.d.ts +31 -2
- package/dist/core/task-registry.d.ts.map +1 -1
- package/dist/core/task-registry.js +35 -6
- package/dist/core/task-registry.js.map +1 -1
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js.map +1 -1
- package/dist/core/types.d.ts +17 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/untrusted-text.d.ts +23 -0
- package/dist/core/untrusted-text.d.ts.map +1 -1
- package/dist/core/untrusted-text.js +69 -0
- package/dist/core/untrusted-text.js.map +1 -1
- package/dist/engine/compaction/utils.d.ts.map +1 -1
- package/dist/engine/compaction/utils.js +20 -1
- package/dist/engine/compaction/utils.js.map +1 -1
- package/dist/engine/harness/agent-harness.d.ts +11 -4
- package/dist/engine/harness/agent-harness.d.ts.map +1 -1
- package/dist/engine/harness/agent-harness.js +23 -6
- package/dist/engine/harness/agent-harness.js.map +1 -1
- package/dist/engine/harness/messages.d.ts.map +1 -1
- package/dist/engine/harness/messages.js +1 -0
- package/dist/engine/harness/messages.js.map +1 -1
- package/dist/engine/harness/types.d.ts.map +1 -1
- package/dist/engine/harness/types.js.map +1 -1
- package/dist/engine/llm/types.d.ts +7 -0
- package/dist/engine/llm/types.d.ts.map +1 -1
- package/dist/engine/loop/agent-loop.js +7 -0
- package/dist/engine/loop/agent-loop.js.map +1 -1
- package/dist/engine/loop/types.d.ts +1 -0
- package/dist/engine/loop/types.d.ts.map +1 -1
- package/dist/engine/session/import-validate.d.ts.map +1 -1
- package/dist/engine/session/import-validate.js +31 -0
- package/dist/engine/session/import-validate.js.map +1 -1
- package/dist/prompts/default.d.ts.map +1 -1
- package/dist/prompts/default.js.map +1 -1
- package/dist/tools/scheduler-tools.d.ts.map +1 -1
- package/dist/tools/scheduler-tools.js +71 -16
- package/dist/tools/scheduler-tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,7 +32,7 @@ import { defineTool } from "../tools.js";
|
|
|
32
32
|
import { canonicalToolName } from "../tool-name-aliases.js";
|
|
33
33
|
import { pathToUri } from "../lsp-protocol.js";
|
|
34
34
|
import { DEFAULT_TOOL_RESULT_THRESHOLD_CHARS, firstPartyOffloadPolicy, InMemoryToolResultStore, RunnerSharedToolResultStore, ScopedToolResultStore, isVolatileOffloadStore, OFFLOAD_TOOL_NAME, makeReadToolResultTool, withToolResultOffload, } from "../tool-result-store.js";
|
|
35
|
-
import { OUTPUT_TOOL_NAME, REPORT_FINDINGS_TOOL_NAME, SKILL_CONTENT_MAX_CHARS, SKILL_TOOL_NAME,
|
|
35
|
+
import { OUTPUT_TOOL_NAME, REPORT_FINDINGS_TOOL_NAME, SKILL_CONTENT_MAX_CHARS, SKILL_TOOL_NAME, makeOutputTool, makeReportBlockedTool, makeReportFindingsTool, makeSkillTool, normalizeSkills } from "./synthetic-tools.js";
|
|
36
36
|
import { compileOutputSchema } from "./strict-output-schema.js";
|
|
37
37
|
import { TOOL_SEARCH_NAME, buildDeferredRegistry, classifyDeferred, extractDiscoveredToolNames, makePlaceholderTool, makeToolSearchTool, } from "./tool-disclosure.js";
|
|
38
38
|
import { composeMemoryBlock, normalizeMemorySpec } from "../memory.js";
|
|
@@ -382,6 +382,12 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
382
382
|
}
|
|
383
383
|
let ownedEnv;
|
|
384
384
|
let mcp;
|
|
385
|
+
if (internals?.requestedCwd !== undefined && deps.executionEnvFactory === undefined) {
|
|
386
|
+
await forgetOnThrow();
|
|
387
|
+
const e = new Error(`Agent cwd "${internals.requestedCwd}" cannot take effect: this deployment has no executionEnvFactory (a static execution environment cannot be re-rooted per agent). Drop the cwd parameter or deploy a factory.`);
|
|
388
|
+
e.code = "config.cwd_unsupported";
|
|
389
|
+
throw e;
|
|
390
|
+
}
|
|
385
391
|
try {
|
|
386
392
|
ownedEnv = deps.executionEnvFactory
|
|
387
393
|
? await deps.executionEnvFactory({
|
|
@@ -397,8 +403,39 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
397
403
|
throw factoryErr;
|
|
398
404
|
}
|
|
399
405
|
const executionEnv = ownedEnv ?? deps.executionEnv ?? new StubExecutionEnv();
|
|
406
|
+
if (internals?.requestedCwd !== undefined) {
|
|
407
|
+
const canon = async (p) => {
|
|
408
|
+
const r = await executionEnv.canonicalPath(p);
|
|
409
|
+
return r.ok ? r.value : p;
|
|
410
|
+
};
|
|
411
|
+
const want = await canon(internals.requestedCwd);
|
|
412
|
+
const rejectCwd = async (message, code) => {
|
|
413
|
+
await forgetOnThrow();
|
|
414
|
+
try {
|
|
415
|
+
if (ownedEnv && hasDestroy(ownedEnv))
|
|
416
|
+
await ownedEnv.destroy();
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
}
|
|
420
|
+
const e = new Error(message);
|
|
421
|
+
e.code = code;
|
|
422
|
+
throw e;
|
|
423
|
+
};
|
|
424
|
+
if (deps.rootPath !== undefined) {
|
|
425
|
+
const root = await canon(deps.rootPath);
|
|
426
|
+
const sep = root.includes("\\") && !root.includes("/") ? "\\" : "/";
|
|
427
|
+
const rootPrefix = root.endsWith(sep) ? root : root + sep;
|
|
428
|
+
if (want !== root && !want.startsWith(rootPrefix)) {
|
|
429
|
+
await rejectCwd(`Agent cwd "${internals.requestedCwd}" is outside this deployment's declared root "${deps.rootPath}" — the cwd must be located within the deployment root.`, "config.cwd_outside_root");
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
const got = await canon(executionEnv.cwd);
|
|
433
|
+
if (want !== got) {
|
|
434
|
+
await rejectCwd(`Agent cwd "${internals.requestedCwd}" was not honored by the execution environment (it rooted at "${executionEnv.cwd}") — failing loud instead of running the agent in the wrong tree.`, "config.cwd_not_honored");
|
|
435
|
+
}
|
|
436
|
+
}
|
|
400
437
|
const handsEnabled = ownedEnv !== undefined || deps.executionEnv !== undefined;
|
|
401
|
-
const taskRootPath = internals?.isolation === "worktree" || !deps.rootPath ? executionEnv.cwd : deps.rootPath;
|
|
438
|
+
const taskRootPath = internals?.isolation === "worktree" || internals?.requestedCwd !== undefined || !deps.rootPath ? executionEnv.cwd : deps.rootPath;
|
|
402
439
|
const abortController = new AbortController();
|
|
403
440
|
if (spec.signal?.aborted)
|
|
404
441
|
abortController.abort();
|
|
@@ -1222,7 +1259,29 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1222
1259
|
if (injection.block.trim())
|
|
1223
1260
|
memoryBlock = injection.block;
|
|
1224
1261
|
}
|
|
1262
|
+
let instructionSources;
|
|
1225
1263
|
if (deps.loadProjectMemory) {
|
|
1264
|
+
let projectMemoryPhase = spec.sessionId ? "resume" : "fresh";
|
|
1265
|
+
if (spec.sessionId) {
|
|
1266
|
+
try {
|
|
1267
|
+
const branch = await session.getBranch();
|
|
1268
|
+
if (branch.length === 0)
|
|
1269
|
+
projectMemoryPhase = "fresh";
|
|
1270
|
+
else {
|
|
1271
|
+
for (let i = branch.length - 1; i >= 0; i--) {
|
|
1272
|
+
const e = branch[i];
|
|
1273
|
+
if (e.type === "compaction") {
|
|
1274
|
+
projectMemoryPhase = "post-compact";
|
|
1275
|
+
break;
|
|
1276
|
+
}
|
|
1277
|
+
if (e.type === "message" && e.message.role === "user")
|
|
1278
|
+
break;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
catch {
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1226
1285
|
let loaded = null;
|
|
1227
1286
|
try {
|
|
1228
1287
|
loaded = await Promise.resolve(deps.loadProjectMemory({
|
|
@@ -1230,6 +1289,8 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1230
1289
|
handsEnabled,
|
|
1231
1290
|
isSubagent: internals?.parentTaskId !== undefined,
|
|
1232
1291
|
...(internals?.agentName ? { agentName: internals.agentName } : {}),
|
|
1292
|
+
sessionId,
|
|
1293
|
+
phase: projectMemoryPhase,
|
|
1233
1294
|
}));
|
|
1234
1295
|
}
|
|
1235
1296
|
catch (err) {
|
|
@@ -1237,6 +1298,9 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1237
1298
|
}
|
|
1238
1299
|
const projectMem = loaded !== null && typeof loaded === "object" ? loaded.content : loaded;
|
|
1239
1300
|
const seededFiles = loaded !== null && typeof loaded === "object" ? loaded.seededFiles : undefined;
|
|
1301
|
+
const declaredSources = loaded !== null && typeof loaded === "object" ? loaded.instructionSources : undefined;
|
|
1302
|
+
if (declaredSources !== undefined && declaredSources.length > 0)
|
|
1303
|
+
instructionSources = declaredSources;
|
|
1240
1304
|
if (seededFiles?.length && seedContextFiles) {
|
|
1241
1305
|
try {
|
|
1242
1306
|
await seedContextFiles(seededFiles);
|
|
@@ -1269,7 +1333,19 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1269
1333
|
}
|
|
1270
1334
|
tools.push(makeSkillTool(skillSpecs, skillScope));
|
|
1271
1335
|
}
|
|
1272
|
-
const
|
|
1336
|
+
const skillsListing = skillSpecs.length > 0
|
|
1337
|
+
? {
|
|
1338
|
+
entries: skillSpecs.map((s) => ({
|
|
1339
|
+
name: s.name,
|
|
1340
|
+
description: s.description,
|
|
1341
|
+
...(s.files !== undefined ? { files: s.files.map((f) => ({ path: f.path })) } : {}),
|
|
1342
|
+
})),
|
|
1343
|
+
seedAnnounced: resume !== undefined,
|
|
1344
|
+
}
|
|
1345
|
+
:
|
|
1346
|
+
(resume?.seed.announcedListings?.skills?.length ?? 0) > 0
|
|
1347
|
+
? { entries: [], seedAnnounced: true }
|
|
1348
|
+
: undefined;
|
|
1273
1349
|
const provider = spec.promptProvider ?? deps.promptProvider ?? defaultPromptProvider;
|
|
1274
1350
|
const promptPolicyEnabled = Boolean(spec.toolPolicy ?? deps.toolPolicy);
|
|
1275
1351
|
const promptHooks = spec.hooks ?? deps.hooks;
|
|
@@ -1388,9 +1464,7 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1388
1464
|
let promptConstitution = "core";
|
|
1389
1465
|
let promptBlocks = [];
|
|
1390
1466
|
const finishStable = (stableCore) => {
|
|
1391
|
-
const stable = composeSystemPrompt(
|
|
1392
|
-
if (skillsBlock?.trim())
|
|
1393
|
-
promptBlocks.push({ id: "skills.block", text: skillsBlock });
|
|
1467
|
+
const stable = composeSystemPrompt(stableCore, mcpInstructionsBlock);
|
|
1394
1468
|
if (mcpInstructionsBlock?.trim())
|
|
1395
1469
|
promptBlocks.push({ id: "mcp.instructions", text: mcpInstructionsBlock });
|
|
1396
1470
|
renderWithDate = (date) => composeSystemPrompt(composeSystemPrompt(stable, buildEnvironmentContext({ ...envFacts, date }) || undefined), memoryBlock);
|
|
@@ -1534,8 +1608,27 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1534
1608
|
}
|
|
1535
1609
|
const agentListingSpec = (spec.tools ?? []).find((t) => t.agentListing !== undefined && t.agentListing.length > 0);
|
|
1536
1610
|
const agentListing = agentListingSpec
|
|
1537
|
-
? {
|
|
1538
|
-
|
|
1611
|
+
? {
|
|
1612
|
+
entries: agentListingSpec.agentListing,
|
|
1613
|
+
toolName: agentListingSpec.name,
|
|
1614
|
+
seedAnnounced: resume !== undefined,
|
|
1615
|
+
...(agentListingSpec.agentModels !== undefined ? { models: agentListingSpec.agentModels } : {}),
|
|
1616
|
+
}
|
|
1617
|
+
:
|
|
1618
|
+
(resume?.seed.announcedListings?.agents?.length ?? 0) > 0
|
|
1619
|
+
? {
|
|
1620
|
+
entries: [],
|
|
1621
|
+
toolName: (spec.tools ?? []).find((t) => t.agentListing !== undefined)?.name ?? "Agent",
|
|
1622
|
+
seedAnnounced: true,
|
|
1623
|
+
}
|
|
1624
|
+
: undefined;
|
|
1625
|
+
if (spec.attachments?.agentListing === false && agentListing !== undefined && agentListing.entries.length > 0) {
|
|
1626
|
+
deps.onError?.(new Error(`attachments.agentListing is explicitly false but the "${agentListing.toolName}" delegation tool mounts a ${agentListing.entries.length}-type roster — the model will never see the agent-type listing its tool description points to.`), { phase: "config", sessionId });
|
|
1627
|
+
}
|
|
1628
|
+
if (spec.attachments?.skillsListing === false && skillsListing !== undefined && skillsListing.entries.length > 0) {
|
|
1629
|
+
deps.onError?.(new Error(`attachments.skillsListing is explicitly false but ${skillsListing.entries.length} skill(s) are mounted — the model will never see the skills listing the ${SKILL_TOOL_NAME} tool description points to.`), { phase: "config", sessionId });
|
|
1630
|
+
}
|
|
1631
|
+
const announcedListingsRef = {};
|
|
1539
1632
|
const dateChange = renderWithDate
|
|
1540
1633
|
? { legDate: envFacts.date, today: () => formatLocalDate(new Date(), tzValid ? userTz : undefined) }
|
|
1541
1634
|
: undefined;
|
|
@@ -2001,6 +2094,13 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
2001
2094
|
}
|
|
2002
2095
|
: undefined;
|
|
2003
2096
|
})(),
|
|
2097
|
+
announcedListings: announcedListingsRef.agents !== undefined || announcedListingsRef.skills !== undefined || announcedListingsRef.models !== undefined
|
|
2098
|
+
? {
|
|
2099
|
+
...(announcedListingsRef.agents !== undefined ? { agents: [...announcedListingsRef.agents] } : {}),
|
|
2100
|
+
...(announcedListingsRef.skills !== undefined ? { skills: [...announcedListingsRef.skills] } : {}),
|
|
2101
|
+
...(announcedListingsRef.models !== undefined ? { models: [...announcedListingsRef.models] } : {}),
|
|
2102
|
+
}
|
|
2103
|
+
: undefined,
|
|
2004
2104
|
});
|
|
2005
2105
|
const commitSuspendSaga = async (token, cp, remoteEnv, remoteHandle) => {
|
|
2006
2106
|
if (!checkpointStore)
|
|
@@ -2546,7 +2646,7 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
2546
2646
|
.list({ owner: hostTaskId, scope: taskScope, sessionId })
|
|
2547
2647
|
.filter((t) => t.status === "pending" || t.status === "running")
|
|
2548
2648
|
.map((t) => ({ id: t.task_id, ...(t.description !== undefined ? { description: t.description } : {}), status: t.status }));
|
|
2549
|
-
return { harness, session, sessionId, taskRootPath, model, thinking, compModel, mcp, blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, nestedStats, cwdRef: handsCwdRef, denyNarrowingPolicy, releaseSignal, cacheBreakDetector, cacheFingerprint, promptManifest, activeTools, ownedEnv, suspendRef, reviewRef, reviewRequestRef, suspendLoopRef, suspendForResource, ...(callCapRef ? { callCapRef } : {}), ...(cutKills ? { cutKills } : {}), ...(callCapRef ? { callIssuedAtRef } : {}), suspendForReview, resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolEffects, promptOverheadTokens, readTaskFile, recentlyReadFiles, compactionReuseRef, trimPressureRef, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit } } : {}), planModeRef, ...(dateChange ? { dateChange } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), listBackgroundTasks };
|
|
2649
|
+
return { harness, session, sessionId, taskRootPath, model, thinking, compModel, mcp, blockedRef, outputRef, abortController, conflictRef, blockedToolCalls, nestedStats, cwdRef: handsCwdRef, denyNarrowingPolicy, releaseSignal, cacheBreakDetector, cacheFingerprint, promptManifest, activeTools, ownedEnv, suspendRef, reviewRef, reviewRequestRef, suspendLoopRef, suspendForResource, ...(callCapRef ? { callCapRef } : {}), ...(cutKills ? { cutKills } : {}), ...(callCapRef ? { callIssuedAtRef } : {}), suspendForReview, resourceLedger: priorLedger, liveSpendRef, humanReviewRef, now, tools, toolEffects, promptOverheadTokens, readTaskFile, recentlyReadFiles, compactionReuseRef, trimPressureRef, ...(memoryEngineSession ? { memoryEngineSession } : {}), ...(subagentRetain ? { subagentRetain } : {}), ...(lspDiagnostics && nudgeLspOnEdit ? { lspDiagnostics: { registry: lspDiagnostics, nudge: nudgeLspOnEdit } } : {}), planModeRef, ...(dateChange ? { dateChange } : {}), ...(instructionSources ? { instructionSources } : {}), ...(detectExternalChanges ? { detectExternalChanges } : {}), ...(toolsDeltaRef ? { toolsDeltaRef } : {}), ...(agentListing ? { agentListing } : {}), ...(skillsListing ? { skillsListing } : {}), announcedListingsRef, listBackgroundTasks };
|
|
2550
2650
|
}
|
|
2551
2651
|
catch (prepareErr) {
|
|
2552
2652
|
if (mcp) {
|