@sema-agent/core 7.6.0 → 7.6.2
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 +37 -0
- package/dist/agents/agent-transcript-tool.d.ts +2 -2
- package/dist/agents/cascade.d.ts +2 -3
- package/dist/agents/repair-loop.d.ts +2 -2
- package/dist/agents/retain-ledger.d.ts +2 -3
- package/dist/agents/send-message-tool.d.ts +2 -2
- package/dist/agents/session-util.d.ts +2 -2
- package/dist/agents/subagent.d.ts +3 -4
- package/dist/agents/teacher.d.ts +2 -2
- package/dist/agents/team.d.ts +2 -2
- package/dist/agents/verify.d.ts +5 -6
- package/dist/core/agent-definition.d.ts +172 -0
- package/dist/core/agent-definition.js +1 -0
- package/dist/core/checkpoint-store.d.ts +8 -4
- package/dist/core/delegation-frames.d.ts +298 -0
- package/dist/core/delegation-frames.js +21 -0
- package/dist/core/engine-notice.d.ts +555 -0
- package/dist/core/engine-notice.js +55 -0
- package/dist/core/gate-fold.d.ts +12 -0
- package/dist/core/gate-fold.js +158 -0
- package/dist/core/gate-lanes.d.ts +93 -0
- package/dist/core/gate-lanes.js +626 -0
- package/dist/core/hands-band.d.ts +134 -0
- package/dist/core/hands-band.js +1 -0
- package/dist/core/hooks.d.ts +20 -101
- package/dist/core/hooks.js +53 -854
- package/dist/core/mcp-failure.d.ts +43 -5
- package/dist/core/mcp-failure.js +31 -14
- package/dist/core/mcp-server-spec.d.ts +217 -0
- package/dist/core/mcp-server-spec.js +1 -0
- package/dist/core/model-seat.d.ts +99 -0
- package/dist/core/model-seat.js +1 -0
- package/dist/core/reminder-mint.d.ts +10 -0
- package/dist/core/reminder-mint.js +3 -0
- package/dist/core/runner/contracts.d.ts +382 -6
- package/dist/core/runner/gate-exit.d.ts +177 -9
- package/dist/core/runner/gate-exit.js +70 -1
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +2 -7
- package/dist/core/runner/prepare-delegation-surface.d.ts +2 -7
- package/dist/core/runner/prepare-run-refs.d.ts +12 -0
- package/dist/core/runner/prepare-run-refs.js +5 -0
- package/dist/core/runner/prepare-task.d.ts +2 -2
- package/dist/core/runner/runtask.d.ts +4 -71
- package/dist/core/runner/runtask.js +18 -6
- package/dist/core/runner-deps.d.ts +1416 -0
- package/dist/core/runner-deps.js +1 -0
- package/dist/core/runtime-caps.d.ts +164 -0
- package/dist/core/runtime-caps.js +1 -0
- package/dist/core/task-event.d.ts +910 -0
- package/dist/core/task-event.js +1 -0
- package/dist/core/task-limits.d.ts +110 -0
- package/dist/core/task-limits.js +1 -0
- package/dist/core/task-result.d.ts +809 -0
- package/dist/core/task-result.js +1 -0
- package/dist/core/task-spec.d.ts +1370 -0
- package/dist/core/task-spec.js +1 -0
- package/dist/core/task-stream.d.ts +382 -0
- package/dist/core/task-stream.js +1 -0
- package/dist/core/tool-spec.d.ts +1174 -0
- package/dist/core/tool-spec.js +1 -0
- package/dist/core/types.d.ts +26 -7691
- package/dist/core/types.js +2 -76
- package/dist/core/warm-resume.d.ts +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/orchestration/goal.d.ts +2 -2
- package/dist/orchestration/run-spec.d.ts +2 -2
- package/dist/orchestration/run-workflow-tool.d.ts +3 -3
- package/dist/orchestration/workflow.d.ts +4 -4
- package/dist/scenarios/scenario-registry.d.ts +3 -3
- package/dist/scenarios/teacher-quickstart.d.ts +2 -2
- package/dist/server/http.d.ts +2 -2
- package/dist/stores/file/fs-atomic.d.ts +88 -12
- package/dist/stores/file/fs-atomic.js +184 -55
- package/dist/stores/file/index.d.ts +1 -0
- package/dist/stores/file/index.js +1 -0
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +9 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { closeSync, constants as FS, existsSync, fstatSync, linkSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, renameSync, truncateSync, unlinkSync, writeFileSync, writeSync, fsyncSync, } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
2
|
+
import { homedir, hostname, uptime } from "node:os";
|
|
3
|
+
import { hrtime } from "node:process";
|
|
3
4
|
import { basename, dirname, join, resolve as resolvePath } from "node:path";
|
|
4
5
|
import { createHash, randomBytes } from "node:crypto";
|
|
6
|
+
import { execFileSync } from "node:child_process";
|
|
5
7
|
const SAFE_COMPONENT = /^[A-Za-z0-9_.-]+$/;
|
|
6
8
|
export function sanitizePathComponent(raw) {
|
|
7
9
|
if (raw === "" || raw === "." || raw === ".." || !SAFE_COMPONENT.test(raw)) {
|
|
@@ -270,6 +272,64 @@ export class FileStoreLockError extends Error {
|
|
|
270
272
|
const MAX_RECLAIM_DEPTH = 8;
|
|
271
273
|
const MAX_ACQUIRE_ATTEMPTS = 4;
|
|
272
274
|
const abandonedLocks = new Set();
|
|
275
|
+
const LOCK_RECORD_VERSION = 2;
|
|
276
|
+
function serializeLockRecord() {
|
|
277
|
+
const fp = processFingerprint();
|
|
278
|
+
return JSON.stringify({
|
|
279
|
+
v: LOCK_RECORD_VERSION,
|
|
280
|
+
pid: fp.pid,
|
|
281
|
+
startedAtMs: fp.startedAtMs,
|
|
282
|
+
startedSinceBootMs: fp.startedSinceBootMs,
|
|
283
|
+
host: fp.host,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function parseLockRecord(raw) {
|
|
287
|
+
if (/^[1-9][0-9]*$/.test(raw)) {
|
|
288
|
+
const barePid = Number.parseInt(raw, 10);
|
|
289
|
+
return Number.isSafeInteger(barePid) && barePid > 0
|
|
290
|
+
? { pid: barePid, startedAtMs: null, startedSinceBootMs: null, host: null }
|
|
291
|
+
: null;
|
|
292
|
+
}
|
|
293
|
+
if (!raw.startsWith("{"))
|
|
294
|
+
return null;
|
|
295
|
+
let parsed;
|
|
296
|
+
try {
|
|
297
|
+
parsed = JSON.parse(raw);
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
303
|
+
return null;
|
|
304
|
+
const rec = parsed;
|
|
305
|
+
if (typeof rec.pid !== "number" || !Number.isSafeInteger(rec.pid) || rec.pid <= 0)
|
|
306
|
+
return null;
|
|
307
|
+
const known = rec.v === LOCK_RECORD_VERSION;
|
|
308
|
+
const measure = (raw) => (known && typeof raw === "number" && Number.isFinite(raw) ? raw : null);
|
|
309
|
+
return {
|
|
310
|
+
pid: rec.pid,
|
|
311
|
+
startedAtMs: measure(rec.startedAtMs),
|
|
312
|
+
startedSinceBootMs: measure(rec.startedSinceBootMs),
|
|
313
|
+
host: known && typeof rec.host === "string" && rec.host !== "" ? rec.host : null,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
function readLockRecord(lockPath) {
|
|
317
|
+
let raw;
|
|
318
|
+
try {
|
|
319
|
+
raw = readFileSync(lockPath, "utf8").trim();
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
return err.code === "ENOENT" ? { state: "absent" } : { state: "unreadable" };
|
|
323
|
+
}
|
|
324
|
+
const owner = parseLockRecord(raw);
|
|
325
|
+
return owner === null ? { state: "unreadable" } : { state: "owner", ...owner };
|
|
326
|
+
}
|
|
327
|
+
function sameOwner(a, b) {
|
|
328
|
+
return (a.pid === b.pid &&
|
|
329
|
+
a.startedAtMs === b.startedAtMs &&
|
|
330
|
+
a.startedSinceBootMs === b.startedSinceBootMs &&
|
|
331
|
+
a.host === b.host);
|
|
332
|
+
}
|
|
273
333
|
export class BootLock {
|
|
274
334
|
lockPath;
|
|
275
335
|
held = false;
|
|
@@ -302,7 +362,7 @@ export class BootLock {
|
|
|
302
362
|
this.pruneOwnAbandoned();
|
|
303
363
|
return;
|
|
304
364
|
}
|
|
305
|
-
if (
|
|
365
|
+
if (isProcessLive(owner)) {
|
|
306
366
|
throw new FileStoreLockError("store.dir_in_use", `file store: another instance (pid ${owner.pid}) owns this data dir (${dirnameOf(this.lockPath)})`, this.lockPath, owner.pid);
|
|
307
367
|
}
|
|
308
368
|
if (depth >= MAX_RECLAIM_DEPTH) {
|
|
@@ -322,7 +382,7 @@ export class BootLock {
|
|
|
322
382
|
}
|
|
323
383
|
try {
|
|
324
384
|
const under = this.inspectLock();
|
|
325
|
-
if (under.state === "owner" && under
|
|
385
|
+
if (under.state === "owner" && sameOwner(under, owner)) {
|
|
326
386
|
try {
|
|
327
387
|
unlinkSync(this.lockPath);
|
|
328
388
|
}
|
|
@@ -368,23 +428,13 @@ export class BootLock {
|
|
|
368
428
|
this.publishOrLoseRace();
|
|
369
429
|
}
|
|
370
430
|
writeLock() {
|
|
371
|
-
writeThenLink(this.lockPath,
|
|
431
|
+
writeThenLink(this.lockPath, serializeLockRecord());
|
|
372
432
|
}
|
|
373
433
|
get abandonKey() {
|
|
374
434
|
return resolvePath(this.lockPath);
|
|
375
435
|
}
|
|
376
436
|
inspectLock() {
|
|
377
|
-
|
|
378
|
-
try {
|
|
379
|
-
raw = readFileSync(this.lockPath, "utf8").trim();
|
|
380
|
-
}
|
|
381
|
-
catch (err) {
|
|
382
|
-
return err.code === "ENOENT" ? { state: "absent" } : { state: "unreadable" };
|
|
383
|
-
}
|
|
384
|
-
if (!/^[1-9][0-9]*$/.test(raw))
|
|
385
|
-
return { state: "unreadable" };
|
|
386
|
-
const pid = Number.parseInt(raw, 10);
|
|
387
|
-
return Number.isInteger(pid) && pid > 0 ? { state: "owner", pid } : { state: "unreadable" };
|
|
437
|
+
return readLockRecord(this.lockPath);
|
|
388
438
|
}
|
|
389
439
|
release() {
|
|
390
440
|
if (!this.held) {
|
|
@@ -500,49 +550,18 @@ export function acquireStoreDirLock(dir, opts) {
|
|
|
500
550
|
export function createFileConsolidationLock(lockDir) {
|
|
501
551
|
return (scope) => {
|
|
502
552
|
ensureDir(lockDir);
|
|
503
|
-
const
|
|
504
|
-
const tryWrite = () => {
|
|
505
|
-
try {
|
|
506
|
-
writeThenLink(lockPath, String(process.pid));
|
|
507
|
-
return true;
|
|
508
|
-
}
|
|
509
|
-
catch (err) {
|
|
510
|
-
if (err.code !== "EEXIST")
|
|
511
|
-
throw err;
|
|
512
|
-
return false;
|
|
513
|
-
}
|
|
514
|
-
};
|
|
515
|
-
const readPid = () => {
|
|
516
|
-
try {
|
|
517
|
-
const raw = readFileSync(lockPath, "utf8").trim();
|
|
518
|
-
if (!/^[1-9][0-9]*$/.test(raw))
|
|
519
|
-
return undefined;
|
|
520
|
-
const pid = Number.parseInt(raw, 10);
|
|
521
|
-
return Number.isInteger(pid) && pid > 0 ? pid : undefined;
|
|
522
|
-
}
|
|
523
|
-
catch {
|
|
524
|
-
return undefined;
|
|
525
|
-
}
|
|
526
|
-
};
|
|
527
|
-
const release = () => {
|
|
528
|
-
try {
|
|
529
|
-
if (readPid() === process.pid)
|
|
530
|
-
unlinkSync(lockPath);
|
|
531
|
-
}
|
|
532
|
-
catch {
|
|
533
|
-
}
|
|
534
|
-
};
|
|
535
|
-
if (tryWrite())
|
|
536
|
-
return release;
|
|
537
|
-
const ownerPid = readPid();
|
|
538
|
-
if (ownerPid === undefined || isProcessRunning(ownerPid))
|
|
539
|
-
return undefined;
|
|
553
|
+
const lock = new BootLock(join(lockDir, `${sanitizeScope(scope)}.consolidate.lock`));
|
|
540
554
|
try {
|
|
541
|
-
|
|
555
|
+
lock.acquire();
|
|
542
556
|
}
|
|
543
|
-
catch {
|
|
557
|
+
catch (err) {
|
|
558
|
+
if (err instanceof FileStoreLockError)
|
|
559
|
+
return undefined;
|
|
560
|
+
throw err;
|
|
544
561
|
}
|
|
545
|
-
return
|
|
562
|
+
return () => {
|
|
563
|
+
lock.release();
|
|
564
|
+
};
|
|
546
565
|
};
|
|
547
566
|
}
|
|
548
567
|
function isProcessRunning(pid) {
|
|
@@ -554,3 +573,113 @@ function isProcessRunning(pid) {
|
|
|
554
573
|
return err.code === "EPERM";
|
|
555
574
|
}
|
|
556
575
|
}
|
|
576
|
+
const START_TIME_TOLERANCE_MS = 2_000;
|
|
577
|
+
const START_TIME_PROBE_TIMEOUT_MS = 2_000;
|
|
578
|
+
const START_TIME_PROBE_PRECISION_MS = 250;
|
|
579
|
+
const ETIME_PATTERN = /^(?:(\d+)-)?(?:(\d+):)?(\d+):(\d+)$/;
|
|
580
|
+
let cachedHostname;
|
|
581
|
+
let selfFingerprint;
|
|
582
|
+
let startTimeProbeUnavailable = false;
|
|
583
|
+
function thisHost() {
|
|
584
|
+
return (cachedHostname ??= hostname());
|
|
585
|
+
}
|
|
586
|
+
function announceStartTimeDegrade(reason) {
|
|
587
|
+
if (startTimeProbeUnavailable)
|
|
588
|
+
return;
|
|
589
|
+
startTimeProbeUnavailable = true;
|
|
590
|
+
console.warn(`[sema] file store: this host cannot report process start times (${reason}), so a directory lock's owner ` +
|
|
591
|
+
`is judged by PID ALONE. A lock left behind by a crashed owner whose pid the OS has since handed to an ` +
|
|
592
|
+
`unrelated process then reads as a LIVE owner, and that directory stays refused until the lock file is ` +
|
|
593
|
+
`removed by hand.`);
|
|
594
|
+
}
|
|
595
|
+
const START_TIME_PROBE_ATTEMPTS = 3;
|
|
596
|
+
function probeStartTimes(pid) {
|
|
597
|
+
for (let attempt = 0; attempt < START_TIME_PROBE_ATTEMPTS; attempt++) {
|
|
598
|
+
const reading = probeStartTimesOnce(pid);
|
|
599
|
+
if (reading !== "imprecise")
|
|
600
|
+
return reading;
|
|
601
|
+
}
|
|
602
|
+
return null;
|
|
603
|
+
}
|
|
604
|
+
function probeStartTimesOnce(pid) {
|
|
605
|
+
if (startTimeProbeUnavailable)
|
|
606
|
+
return null;
|
|
607
|
+
const knownToExist = pid === process.pid;
|
|
608
|
+
if (process.platform === "win32") {
|
|
609
|
+
announceStartTimeDegrade("no ps(1) on win32");
|
|
610
|
+
return null;
|
|
611
|
+
}
|
|
612
|
+
const monotonicBefore = hrtime.bigint();
|
|
613
|
+
const wallBefore = Date.now();
|
|
614
|
+
const uptimeBefore = Math.round(uptime() * 1000);
|
|
615
|
+
let raw;
|
|
616
|
+
try {
|
|
617
|
+
raw = execFileSync("ps", ["-p", String(pid), "-o", "etime="], {
|
|
618
|
+
encoding: "utf8",
|
|
619
|
+
timeout: START_TIME_PROBE_TIMEOUT_MS,
|
|
620
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
621
|
+
env: { ...process.env, LC_ALL: "C", LANG: "C" },
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
catch (err) {
|
|
625
|
+
if (typeof err.status === "number") {
|
|
626
|
+
if (knownToExist)
|
|
627
|
+
announceStartTimeDegrade("ps refused a query about this very process");
|
|
628
|
+
return null;
|
|
629
|
+
}
|
|
630
|
+
announceStartTimeDegrade(`ps failed (${err.code ?? "unknown"})`);
|
|
631
|
+
return null;
|
|
632
|
+
}
|
|
633
|
+
const latency = Number(hrtime.bigint() - monotonicBefore) / 1e6;
|
|
634
|
+
const wallDelta = Date.now() - wallBefore;
|
|
635
|
+
const trimmed = raw.trim();
|
|
636
|
+
const parts = ETIME_PATTERN.exec(trimmed);
|
|
637
|
+
if (parts === null) {
|
|
638
|
+
if (trimmed !== "" || knownToExist)
|
|
639
|
+
announceStartTimeDegrade("ps produced no elapsed time");
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
if (latency > START_TIME_PROBE_PRECISION_MS)
|
|
643
|
+
return "imprecise";
|
|
644
|
+
if (Math.abs(wallDelta - latency) > START_TIME_PROBE_PRECISION_MS)
|
|
645
|
+
return "imprecise";
|
|
646
|
+
const elapsedMs = (Number(parts[1] ?? "0") * 86_400 + Number(parts[2] ?? "0") * 3_600 + Number(parts[3] ?? "0") * 60 + Number(parts[4] ?? "0")) *
|
|
647
|
+
1000;
|
|
648
|
+
return {
|
|
649
|
+
startedAtMs: Math.round((wallBefore - elapsedMs) / 1000) * 1000,
|
|
650
|
+
startedSinceBootMs: Math.round((uptimeBefore - elapsedMs) / 1000) * 1000,
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
export function processFingerprint(pid) {
|
|
654
|
+
const host = thisHost();
|
|
655
|
+
const of = (id, probed) => ({
|
|
656
|
+
pid: id,
|
|
657
|
+
startedAtMs: probed?.startedAtMs ?? null,
|
|
658
|
+
startedSinceBootMs: probed?.startedSinceBootMs ?? null,
|
|
659
|
+
host,
|
|
660
|
+
});
|
|
661
|
+
if (pid === undefined || pid === process.pid) {
|
|
662
|
+
if (selfFingerprint === undefined || selfFingerprint.startedAtMs === null) {
|
|
663
|
+
const answer = of(process.pid, probeStartTimes(process.pid));
|
|
664
|
+
if (answer.startedAtMs === null)
|
|
665
|
+
return answer;
|
|
666
|
+
selfFingerprint = answer;
|
|
667
|
+
}
|
|
668
|
+
return selfFingerprint;
|
|
669
|
+
}
|
|
670
|
+
if (processFingerprint().startedAtMs === null)
|
|
671
|
+
return of(pid, null);
|
|
672
|
+
return of(pid, probeStartTimes(pid));
|
|
673
|
+
}
|
|
674
|
+
export function isProcessLive(record) {
|
|
675
|
+
if (!isProcessRunning(record.pid))
|
|
676
|
+
return false;
|
|
677
|
+
if (record.host !== undefined && record.host !== null && record.host !== thisHost())
|
|
678
|
+
return true;
|
|
679
|
+
const observed = processFingerprint(record.pid);
|
|
680
|
+
const falsified = (was, now) => was !== undefined && was !== null && now !== null && now - was > START_TIME_TOLERANCE_MS;
|
|
681
|
+
const bootIsOver = (was) => was !== undefined && was !== null && was - Math.round(uptime() * 1000) > START_TIME_TOLERANCE_MS;
|
|
682
|
+
const wallSaysGone = falsified(record.startedAtMs, observed.startedAtMs);
|
|
683
|
+
const uptimeSaysGone = falsified(record.startedSinceBootMs, observed.startedSinceBootMs) || bootIsOver(record.startedSinceBootMs);
|
|
684
|
+
return !(wallSaysGone && uptimeSaysGone);
|
|
685
|
+
}
|
|
@@ -25,6 +25,7 @@ export { FileStrategyStore, type FileStrategyStoreOptions } from "./strategy-sto
|
|
|
25
25
|
export { resolveDataRoot, sanitizeScope, sanitizePathComponent, createFileConsolidationLock } from "./fs-atomic.js";
|
|
26
26
|
export { FileStoreLockError, type FileStoreLockErrorCode } from "./fs-atomic.js";
|
|
27
27
|
export { atomicWriteFile, writeThenLink, ensureDir, readJsonlRecords, AppendLog } from "./fs-atomic.js";
|
|
28
|
+
export { processFingerprint, isProcessLive, type ProcessFingerprint } from "./fs-atomic.js";
|
|
28
29
|
export { AdoptionError, assertAdoptionBootGate, readRootAdoptionFile, writeRootAdoptionFile, ROOT_ADOPTION_FILE, type AdoptionErrorCode, type AdoptionSource, type AdoptionReport, type AdoptionReceipt, type AdoptionLegReport, type AffectedDeploymentConfig, type RootAdoptionFile, } from "./adoption/marker.js";
|
|
29
30
|
export { adoptLocalDataRoot, ackAdoptionConfig, witnessAdoptionConfig, listAdoptionQuarantine, readAdoptionStatus, type AdoptionStatus, type AdoptLocalDataRootOptions, type AdoptLocalDataRootResult, type AdoptionCarriageLeg, type AdoptionCarriageLegContext, type AdoptionConfigWitnessReceipt, } from "./adoption/adopt.js";
|
|
30
31
|
/**
|
|
@@ -27,6 +27,7 @@ export { FileStrategyStore } from "./strategy-store.js";
|
|
|
27
27
|
export { resolveDataRoot, sanitizeScope, sanitizePathComponent, createFileConsolidationLock } from "./fs-atomic.js";
|
|
28
28
|
export { FileStoreLockError } from "./fs-atomic.js";
|
|
29
29
|
export { atomicWriteFile, writeThenLink, ensureDir, readJsonlRecords, AppendLog } from "./fs-atomic.js";
|
|
30
|
+
export { processFingerprint, isProcessLive } from "./fs-atomic.js";
|
|
30
31
|
export { AdoptionError, assertAdoptionBootGate, readRootAdoptionFile, writeRootAdoptionFile, ROOT_ADOPTION_FILE, } from "./adoption/marker.js";
|
|
31
32
|
export { adoptLocalDataRoot, ackAdoptionConfig, witnessAdoptionConfig, listAdoptionQuarantine, readAdoptionStatus, } from "./adoption/adopt.js";
|
|
32
33
|
export class FileStorageBackend {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "design/87 L3 — frozen public export surface of src/index.ts (name -> kind). DO NOT edit by hand to silence a red test. A removed/changed entry = a SemVer-BREAKING change; bump MAJOR and update this fixture in the SAME commit (design/87 §4.2 / §5.2). Regenerate via REGEN in test/export-surface.test.ts.",
|
|
3
3
|
"_tierComment": "#435 v1 — machine-readable layering of the public surface: stable = demonstrated by README.md / src/examples; internal = an `Internal`-marked name or a runner/engine deep-subtree declaration (the model seam src/engine/llm is excluded — it is the BYOM contract, not an engine internal); advanced = a supported export the front door does not walk you through. THIS IS AN INITIAL HEURISTIC, derived mechanically and expected to be refined ticket by ticket: no human reviewed these 1700+ entries one by one, and nothing here claims otherwise. Known bias: a short or English-word export name (ok, err, Result, Usage) can match ordinary prose in README.md and land `stable` on a coincidence. Every export MUST carry a tier — a new export with no row fails the gate in export-surface.test.ts.",
|
|
4
|
-
"count":
|
|
4
|
+
"count": 2102,
|
|
5
5
|
"exports": {
|
|
6
6
|
"A2ATaskState": "type",
|
|
7
7
|
"A2ATaskStateReversal": "type",
|
|
@@ -893,6 +893,7 @@
|
|
|
893
893
|
"PrefixInputClass": "type",
|
|
894
894
|
"ProbeCause": "interface",
|
|
895
895
|
"ProbeCauseOperands": "interface",
|
|
896
|
+
"ProcessFingerprint": "interface",
|
|
896
897
|
"ProjectMemoryLoad": "interface",
|
|
897
898
|
"PromotedRecord": "interface",
|
|
898
899
|
"PromptArtifactSource": "interface",
|
|
@@ -1079,6 +1080,7 @@
|
|
|
1079
1080
|
"RunWorkflowToolDeps": "interface",
|
|
1080
1081
|
"Runner": "class",
|
|
1081
1082
|
"RunnerDeps": "interface",
|
|
1083
|
+
"RunnerSelfSeat": "interface",
|
|
1082
1084
|
"RuntimeCaps": "interface",
|
|
1083
1085
|
"SAFETY_AXIS_VOCABULARY": "variable",
|
|
1084
1086
|
"SAFETY_MERGE_CONFORMANCE_CORPUS": "variable",
|
|
@@ -1736,6 +1738,7 @@
|
|
|
1736
1738
|
"isPeerSessionProcessAlive": "function",
|
|
1737
1739
|
"isPermissionModeClass": "function",
|
|
1738
1740
|
"isPersonalScope": "function",
|
|
1741
|
+
"isProcessLive": "function",
|
|
1739
1742
|
"isQuestionUnavailable": "function",
|
|
1740
1743
|
"isRemoteExecutionEnv": "function",
|
|
1741
1744
|
"isRetryableRemoteErrorCode": "function",
|
|
@@ -1878,6 +1881,7 @@
|
|
|
1878
1881
|
"prepareStarterBatch": "function",
|
|
1879
1882
|
"probeParkRoundTrip": "function",
|
|
1880
1883
|
"probeSearchBackend": "function",
|
|
1884
|
+
"processFingerprint": "function",
|
|
1881
1885
|
"projectHumanInput": "function",
|
|
1882
1886
|
"projectToolManifest": "function",
|
|
1883
1887
|
"projectionsToWriteBack": "function",
|
|
@@ -2993,6 +2997,7 @@
|
|
|
2993
2997
|
"PrefixInputClass": "advanced",
|
|
2994
2998
|
"ProbeCause": "advanced",
|
|
2995
2999
|
"ProbeCauseOperands": "advanced",
|
|
3000
|
+
"ProcessFingerprint": "advanced",
|
|
2996
3001
|
"ProjectMemoryLoad": "advanced",
|
|
2997
3002
|
"PromotedRecord": "advanced",
|
|
2998
3003
|
"PromptArtifactSource": "advanced",
|
|
@@ -3179,6 +3184,7 @@
|
|
|
3179
3184
|
"RunWorkflowToolDeps": "advanced",
|
|
3180
3185
|
"Runner": "stable",
|
|
3181
3186
|
"RunnerDeps": "stable",
|
|
3187
|
+
"RunnerSelfSeat": "internal",
|
|
3182
3188
|
"RuntimeCaps": "stable",
|
|
3183
3189
|
"SAFETY_AXIS_VOCABULARY": "advanced",
|
|
3184
3190
|
"SAFETY_MERGE_CONFORMANCE_CORPUS": "advanced",
|
|
@@ -3836,6 +3842,7 @@
|
|
|
3836
3842
|
"isPeerSessionProcessAlive": "advanced",
|
|
3837
3843
|
"isPermissionModeClass": "advanced",
|
|
3838
3844
|
"isPersonalScope": "advanced",
|
|
3845
|
+
"isProcessLive": "advanced",
|
|
3839
3846
|
"isQuestionUnavailable": "advanced",
|
|
3840
3847
|
"isRemoteExecutionEnv": "advanced",
|
|
3841
3848
|
"isRetryableRemoteErrorCode": "advanced",
|
|
@@ -3978,6 +3985,7 @@
|
|
|
3978
3985
|
"prepareStarterBatch": "advanced",
|
|
3979
3986
|
"probeParkRoundTrip": "stable",
|
|
3980
3987
|
"probeSearchBackend": "advanced",
|
|
3988
|
+
"processFingerprint": "advanced",
|
|
3981
3989
|
"projectHumanInput": "advanced",
|
|
3982
3990
|
"projectToolManifest": "advanced",
|
|
3983
3991
|
"projectionsToWriteBack": "advanced",
|