@sema-agent/core 1.302.1 → 1.304.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/observer.d.ts.map +1 -1
- package/dist/agents/observer.js +1 -0
- package/dist/agents/observer.js.map +1 -1
- package/dist/agents/subagent.d.ts.map +1 -1
- package/dist/agents/subagent.js +3 -0
- package/dist/agents/subagent.js.map +1 -1
- package/dist/core/ask-question.d.ts.map +1 -1
- package/dist/core/ask-question.js +1 -0
- package/dist/core/ask-question.js.map +1 -1
- package/dist/core/auto-compaction.d.ts.map +1 -1
- package/dist/core/auto-compaction.js +4 -1
- package/dist/core/auto-compaction.js.map +1 -1
- package/dist/core/lsp.d.ts.map +1 -1
- package/dist/core/lsp.js +1 -0
- package/dist/core/lsp.js.map +1 -1
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +2 -0
- package/dist/core/memory.js.map +1 -1
- package/dist/core/present-plan-tool.d.ts.map +1 -1
- package/dist/core/present-plan-tool.js +2 -0
- package/dist/core/present-plan-tool.js.map +1 -1
- package/dist/core/runner/prepare-task.d.ts +18 -0
- package/dist/core/runner/prepare-task.d.ts.map +1 -1
- package/dist/core/runner/prepare-task.js +56 -70
- package/dist/core/runner/prepare-task.js.map +1 -1
- package/dist/core/runner/runtask.d.ts.map +1 -1
- package/dist/core/runner/runtask.js +2 -0
- package/dist/core/runner/runtask.js.map +1 -1
- package/dist/core/runner/synthetic-tools.d.ts.map +1 -1
- package/dist/core/runner/synthetic-tools.js +4 -0
- package/dist/core/runner/synthetic-tools.js.map +1 -1
- package/dist/core/runner/tool-disclosure.d.ts.map +1 -1
- package/dist/core/runner/tool-disclosure.js +1 -0
- package/dist/core/runner/tool-disclosure.js.map +1 -1
- package/dist/core/task-registry.d.ts.map +1 -1
- package/dist/core/task-registry.js +2 -0
- package/dist/core/task-registry.js.map +1 -1
- package/dist/core/tool-result-store.d.ts.map +1 -1
- package/dist/core/tool-result-store.js +1 -0
- package/dist/core/tool-result-store.js.map +1 -1
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js +11 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/core/trace.d.ts +18 -0
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js.map +1 -1
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/engine/harness/types.d.ts +9 -1
- package/dist/engine/harness/types.d.ts.map +1 -1
- package/dist/engine/harness/types.js.map +1 -1
- package/dist/engine/session/import-validate.d.ts.map +1 -1
- package/dist/engine/session/import-validate.js +19 -0
- package/dist/engine/session/import-validate.js.map +1 -1
- package/dist/engine/session/session.d.ts +14 -0
- package/dist/engine/session/session.d.ts.map +1 -1
- package/dist/engine/session/session.js +27 -0
- package/dist/engine/session/session.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestration/run-workflow-tool.d.ts.map +1 -1
- package/dist/orchestration/run-workflow-tool.js +1 -0
- package/dist/orchestration/run-workflow-tool.js.map +1 -1
- package/dist/prompt-assembly/assemble.d.ts +29 -0
- package/dist/prompt-assembly/assemble.d.ts.map +1 -0
- package/dist/prompt-assembly/assemble.js +115 -0
- package/dist/prompt-assembly/assemble.js.map +1 -0
- package/dist/prompt-assembly/composer.d.ts +4 -0
- package/dist/prompt-assembly/composer.d.ts.map +1 -0
- package/dist/prompt-assembly/composer.js +64 -0
- package/dist/prompt-assembly/composer.js.map +1 -0
- package/dist/prompt-assembly/epoch.d.ts +18 -0
- package/dist/prompt-assembly/epoch.d.ts.map +1 -0
- package/dist/prompt-assembly/epoch.js +0 -0
- package/dist/prompt-assembly/epoch.js.map +1 -0
- package/dist/prompt-assembly/packs/sema-default.d.ts +3 -0
- package/dist/prompt-assembly/packs/sema-default.d.ts.map +1 -0
- package/dist/prompt-assembly/packs/sema-default.js +132 -0
- package/dist/prompt-assembly/packs/sema-default.js.map +1 -0
- package/dist/prompt-assembly/tool-catalog.d.ts +34 -0
- package/dist/prompt-assembly/tool-catalog.d.ts.map +1 -0
- package/dist/prompt-assembly/tool-catalog.js +0 -0
- package/dist/prompt-assembly/tool-catalog.js.map +1 -0
- package/dist/prompt-assembly/types.d.ts +70 -0
- package/dist/prompt-assembly/types.d.ts.map +1 -0
- package/dist/prompt-assembly/types.js +2 -0
- package/dist/prompt-assembly/types.js.map +1 -0
- package/dist/prompts/default.d.ts +6 -0
- package/dist/prompts/default.d.ts.map +1 -1
- package/dist/prompts/default.js.map +1 -1
- package/dist/tools/fs/index.d.ts.map +1 -1
- package/dist/tools/fs/index.js +10 -0
- package/dist/tools/fs/index.js.map +1 -1
- package/dist/tools/fs/repo-map.d.ts.map +1 -1
- package/dist/tools/fs/repo-map.js +1 -0
- package/dist/tools/fs/repo-map.js.map +1 -1
- package/dist/tools/monitor.d.ts.map +1 -1
- package/dist/tools/monitor.js +1 -0
- package/dist/tools/monitor.js.map +1 -1
- package/dist/tools/scheduler-tools.d.ts.map +1 -1
- package/dist/tools/scheduler-tools.js +4 -0
- package/dist/tools/scheduler-tools.js.map +1 -1
- package/dist/tools/task-list.d.ts.map +1 -1
- package/dist/tools/task-list.js +4 -0
- package/dist/tools/task-list.js.map +1 -1
- package/dist/tools/todo.d.ts.map +1 -1
- package/dist/tools/todo.js +1 -0
- package/dist/tools/todo.js.map +1 -1
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +2 -0
- package/dist/tools/web.js.map +1 -1
- package/dist/tools/worktree.d.ts.map +1 -1
- package/dist/tools/worktree.js +2 -0
- package/dist/tools/worktree.js.map +1 -1
- package/package.json +1 -1
|
@@ -37,7 +37,11 @@ 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";
|
|
39
39
|
import {} from "./memory-consolidation.js";
|
|
40
|
-
import {
|
|
40
|
+
import { defaultPromptProvider, buildEnvironmentContext, buildGitSnapshot, formatLocalDate, isValidTimeZone, PROJECT_CONTEXT_FRAMING } from "../../prompts/default.js";
|
|
41
|
+
import { assemblePrompt } from "../../prompt-assembly/assemble.js";
|
|
42
|
+
import { projectToolManifest } from "../../prompt-assembly/tool-catalog.js";
|
|
43
|
+
import { resolveEpochAgainstBundled } from "../../prompt-assembly/epoch.js";
|
|
44
|
+
import { SEMA_DEFAULT_PACK } from "../../prompt-assembly/packs/sema-default.js";
|
|
41
45
|
import { clearStaleToolResults, dropEmptyFailureAssistants, editBudget } from "../context-edit.js";
|
|
42
46
|
import { capAggregateToolResults } from "../tool-result-budget.js";
|
|
43
47
|
import { capAggregateMediaBytes, AGGREGATE_MEDIA_BUDGET_BYTES } from "../media-byte-cap.js";
|
|
@@ -285,7 +289,19 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
285
289
|
e.code = "resume_at.before_target_not_user";
|
|
286
290
|
throw e;
|
|
287
291
|
}
|
|
288
|
-
|
|
292
|
+
let ancestorId = entry.parentId;
|
|
293
|
+
let sawConversationAbove = false;
|
|
294
|
+
while (ancestorId !== null) {
|
|
295
|
+
const ancestor = await session.getEntry(ancestorId);
|
|
296
|
+
if (!ancestor)
|
|
297
|
+
break;
|
|
298
|
+
if (ancestor.type === "message" || ancestor.type === "custom_message") {
|
|
299
|
+
sawConversationAbove = true;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
ancestorId = ancestor.parentId;
|
|
303
|
+
}
|
|
304
|
+
if (!sawConversationAbove) {
|
|
289
305
|
const e = new Error(`resumeAt entry "${spec.resumeAt}" is the session's first message; resumeAtMode "before" cannot rewind past the session root — start a NEW session instead`);
|
|
290
306
|
e.code = "resume_at.before_root_unsupported";
|
|
291
307
|
throw e;
|
|
@@ -310,6 +326,14 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
310
326
|
}
|
|
311
327
|
const sessionId = acquired.sessionId;
|
|
312
328
|
const hostTaskId = spec.taskId ?? sessionId;
|
|
329
|
+
{
|
|
330
|
+
const pinned = await session.getPromptEpoch();
|
|
331
|
+
const resolved = resolveEpochAgainstBundled(pinned, SEMA_DEFAULT_PACK);
|
|
332
|
+
if (resolved.migrated) {
|
|
333
|
+
const activatedBy = pinned === undefined && !spec.sessionId ? "session_start" : "legacy_migration";
|
|
334
|
+
await session.appendPromptEpoch({ ...resolved.descriptor, activatedBy });
|
|
335
|
+
}
|
|
336
|
+
}
|
|
313
337
|
if (compModel !== undefined) {
|
|
314
338
|
const compWindow = compModel.contextTokens ?? compModel.contextWindow;
|
|
315
339
|
const mainWindow = model.autoCompactTokens ?? model.contextTokens ?? model.contextWindow;
|
|
@@ -1265,7 +1289,8 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1265
1289
|
if (spec.sessionId) {
|
|
1266
1290
|
try {
|
|
1267
1291
|
const branch = await session.getBranch();
|
|
1268
|
-
|
|
1292
|
+
const hasConversation = branch.some((e) => e.type === "message" || e.type === "custom_message" || e.type === "compaction");
|
|
1293
|
+
if (!hasConversation)
|
|
1269
1294
|
projectMemoryPhase = "fresh";
|
|
1270
1295
|
else {
|
|
1271
1296
|
for (let i = branch.length - 1; i >= 0; i--) {
|
|
@@ -1458,76 +1483,37 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
|
|
|
1458
1483
|
}
|
|
1459
1484
|
}
|
|
1460
1485
|
}
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
promptBlocks = [...c.blocks];
|
|
1481
|
-
finishStable(c.text);
|
|
1482
|
-
}
|
|
1483
|
-
else if (provider.stableSystem) {
|
|
1484
|
-
const roleOut = provider.stableSystem(promptCtx);
|
|
1485
|
-
if (provider.replaceAll) {
|
|
1486
|
-
promptConstitution = "replaced";
|
|
1487
|
-
promptBlocks = [{ id: "provider.replace_all", text: roleOut }];
|
|
1488
|
-
finishStable(roleOut);
|
|
1489
|
-
}
|
|
1490
|
-
else if (roleOut.includes(CYBER_RISK) && roleOut.includes(URL_SAFETY) && roleOut.includes("# Harness")) {
|
|
1491
|
-
promptConstitution = "provider-assembled";
|
|
1492
|
-
promptBlocks = [{ id: "provider.assembled", text: roleOut }];
|
|
1493
|
-
deps.onError?.(new Error("prompt-constitution: this PromptProvider returns an already-assembled prompt (constitution anchor found). Core now appends the constitution structurally — return ONLY the role base from stableSystem (or set replaceAll:true to own the whole base). Passed through un-doubled."), { phase: "prompt-constitution", sessionId });
|
|
1494
|
-
finishStable(roleOut);
|
|
1495
|
-
}
|
|
1496
|
-
else {
|
|
1497
|
-
const c = composeConstitution(roleOut, promptCtx);
|
|
1498
|
-
promptBlocks = [...c.blocks];
|
|
1499
|
-
finishStable(c.text);
|
|
1500
|
-
}
|
|
1501
|
-
}
|
|
1502
|
-
else if (provider.system) {
|
|
1503
|
-
systemPrompt = provider.system({ ...promptCtx, memoryBlock });
|
|
1504
|
-
promptConstitution = "legacy";
|
|
1505
|
-
promptBlocks = [{ id: "provider.legacy", text: systemPrompt }];
|
|
1506
|
-
const memTrim = memoryBlock?.trim();
|
|
1507
|
-
if (memTrim && systemPrompt.includes(memTrim) && !systemPrompt.trimEnd().endsWith(memTrim)) {
|
|
1508
|
-
deps.onError?.(new Error("prompt-cache: the <user_memory> block is not at the END of the system prompt — the cacheable prefix changes every turn, so vLLM/Anthropic prefix caching will miss. Put memoryBlock LAST (STABLE→VARIABLE), or implement PromptProvider.stableSystem and let core place memory."), { phase: "prompt-cache", sessionId });
|
|
1509
|
-
}
|
|
1510
|
-
}
|
|
1511
|
-
else {
|
|
1512
|
-
const c = composeConstitution(userSystemPrompt ?? DEFAULT_SYSTEM_PROMPT, promptCtx);
|
|
1513
|
-
promptBlocks = [...c.blocks];
|
|
1514
|
-
finishStable(c.text);
|
|
1515
|
-
}
|
|
1516
|
-
if (model.promptGuidance && model.promptGuidance.length > 0) {
|
|
1517
|
-
const guidance = model.promptGuidance.join("\n\n");
|
|
1518
|
-
const baseRender = renderWithDate;
|
|
1519
|
-
if (baseRender) {
|
|
1520
|
-
renderWithDate = (date) => composeSystemPrompt(baseRender(date), guidance);
|
|
1521
|
-
systemPrompt = renderWithDate(envFacts.date);
|
|
1522
|
-
}
|
|
1523
|
-
else {
|
|
1524
|
-
systemPrompt = composeSystemPrompt(systemPrompt, guidance) ?? systemPrompt;
|
|
1486
|
+
const assembled = assemblePrompt({
|
|
1487
|
+
provider,
|
|
1488
|
+
isDefaultProvider: provider === defaultPromptProvider,
|
|
1489
|
+
userSystemPrompt,
|
|
1490
|
+
userAppendSystemPrompt,
|
|
1491
|
+
tools,
|
|
1492
|
+
facts: { supervisorEnabled: false, ...featureFlags },
|
|
1493
|
+
mcpInstructionsBlock,
|
|
1494
|
+
memoryBlock,
|
|
1495
|
+
buildEnvBlock: (date) => buildEnvironmentContext({ ...envFacts, date }) || undefined,
|
|
1496
|
+
date: envFacts.date,
|
|
1497
|
+
...(model.promptGuidance && model.promptGuidance.length > 0 ? { modelGuidance: model.promptGuidance.join("\n\n") } : {}),
|
|
1498
|
+
onWarn: (message, phase) => deps.onError?.(new Error(message), { phase, sessionId }),
|
|
1499
|
+
});
|
|
1500
|
+
let systemPrompt = assembled.systemPrompt;
|
|
1501
|
+
const renderWithDate = assembled.renderWithDate
|
|
1502
|
+
? (date) => {
|
|
1503
|
+
systemPrompt = assembled.renderWithDate(date);
|
|
1504
|
+
return systemPrompt;
|
|
1525
1505
|
}
|
|
1526
|
-
|
|
1527
|
-
|
|
1506
|
+
: undefined;
|
|
1507
|
+
const promptConstitution = assembled.constitution;
|
|
1508
|
+
const promptBlocks = assembled.legacyBlocks;
|
|
1509
|
+
const saltedHash = (text) => createHash("sha256").update(PROMPT_HASH_SALT).update(text).digest("hex").slice(0, 12);
|
|
1528
1510
|
const promptManifest = {
|
|
1529
1511
|
constitution: promptConstitution,
|
|
1530
|
-
blocks: promptBlocks.map((b) => ({ id: b.id, chars: b.text.length, hash:
|
|
1512
|
+
blocks: promptBlocks.map((b) => ({ id: b.id, chars: b.text.length, hash: saltedHash(b.text) })),
|
|
1513
|
+
...(assembled.sections
|
|
1514
|
+
? { sections: assembled.sections.map((s) => ({ id: s.id, slot: s.slot, carrier: s.carrier, cadence: s.cadence, cacheClass: s.cacheClass, chars: s.text.length, hash: saltedHash(s.text) })) }
|
|
1515
|
+
: {}),
|
|
1516
|
+
tools: projectToolManifest(tools, (t) => (t.name.startsWith("mcp__") ? "mcp" : "caller")),
|
|
1531
1517
|
};
|
|
1532
1518
|
const userToolNames = (spec.tools ?? []).map((t) => t.name);
|
|
1533
1519
|
const mcpToolNames = mcp.tools.map((t) => t.name);
|