@sema-agent/core 7.49.5 → 7.50.1
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 +157 -0
- package/dist/agents/observer.js +3 -10
- package/dist/agents/subagent-steps.d.ts +6 -14
- package/dist/agents/subagent-steps.js +3 -17
- package/dist/brain/stream-shared.d.ts +1 -1
- package/dist/core/allow-entry.d.ts +1 -1
- package/dist/core/allow-entry.js +1 -1
- package/dist/core/ask-origin.d.ts +15 -11
- package/dist/core/ask-origin.js +6 -14
- package/dist/core/auto-mode-prompt.js +6 -2
- package/dist/core/checkpoint-store.d.ts +6 -4
- package/dist/core/checkpoint-store.js +1 -1
- package/dist/core/context-edit.d.ts +2 -2
- package/dist/core/decision-receipt.d.ts +2 -2
- package/dist/core/decision-receipt.js +30 -11
- package/dist/core/delegation-frames.d.ts +66 -18
- package/dist/core/delegation-frames.js +22 -0
- package/dist/core/engine-notice.d.ts +7 -5
- package/dist/core/frame-settlement.d.ts +6 -1
- package/dist/core/gate-fold.js +34 -19
- package/dist/core/gate-lanes.js +15 -13
- package/dist/core/gate-outcome.d.ts +2 -2
- package/dist/core/governance-codes.js +2 -0
- package/dist/core/hooks.d.ts +28 -20
- package/dist/core/human-input-projection.js +2 -0
- package/dist/core/lsp-diagnostics.d.ts +3 -0
- package/dist/core/lsp-diagnostics.js +6 -0
- package/dist/core/lsp-session.d.ts +39 -17
- package/dist/core/lsp-session.js +118 -58
- package/dist/core/lsp.d.ts +83 -3
- package/dist/core/lsp.js +146 -16
- package/dist/core/mcp.js +2 -1
- package/dist/core/media-byte-cap.d.ts +14 -0
- package/dist/core/media-byte-cap.js +15 -3
- package/dist/core/memory-engine/consolidation-driver.d.ts +23 -1
- package/dist/core/memory-engine/consolidation-driver.js +54 -6
- package/dist/core/memory-engine/consolidation-write-gate.d.ts +46 -0
- package/dist/core/memory-engine/consolidation-write-gate.js +82 -0
- package/dist/core/memory-engine/consolidation.d.ts +17 -0
- package/dist/core/memory-engine/consolidation.js +1 -0
- package/dist/core/memory-engine/distiller.d.ts +8 -2
- package/dist/core/memory-engine/distiller.js +8 -6
- package/dist/core/memory-engine/engine.d.ts +37 -4
- package/dist/core/memory-engine/engine.js +127 -38
- package/dist/core/memory-engine/file-backend.d.ts +8 -3
- package/dist/core/memory-engine/file-backend.js +44 -16
- package/dist/core/memory-engine/index.d.ts +2 -2
- package/dist/core/memory-engine/index.js +1 -1
- package/dist/core/memory-engine/landing-admission.d.ts +65 -0
- package/dist/core/memory-engine/landing-admission.js +68 -0
- package/dist/core/memory-engine/types.d.ts +23 -0
- package/dist/core/mode-policy.d.ts +3 -2
- package/dist/core/mode-policy.js +2 -0
- package/dist/core/permission-rule-model.d.ts +19 -13
- package/dist/core/permission-rule-model.js +7 -4
- package/dist/core/permission-rule-provider.d.ts +11 -0
- package/dist/core/permission-rules.d.ts +1 -1
- package/dist/core/permission-rules.js +5 -2
- package/dist/core/persisted-rule-arms.d.ts +15 -7
- package/dist/core/persisted-rule-arms.js +13 -6
- package/dist/core/reminder-mint.d.ts +5 -0
- package/dist/core/reminder-mint.js +1 -0
- package/dist/core/retired-keys.d.ts +8 -0
- package/dist/core/retired-keys.js +4 -0
- package/dist/core/rule-lane-reads.d.ts +4 -4
- package/dist/core/rule-lane-reads.js +10 -1
- package/dist/core/runner/construction-doors.d.ts +10 -4
- package/dist/core/runner/construction-doors.js +25 -2
- package/dist/core/runner/contracts.d.ts +20 -3
- package/dist/core/runner/env-capability-census.js +1 -1
- package/dist/core/runner/gate-exit.js +2 -1
- package/dist/core/runner/memory-consolidation-driver.d.ts +6 -4
- package/dist/core/runner/memory-consolidation-driver.js +5 -2
- package/dist/core/runner/memory-consolidation-write-judge.d.ts +17 -0
- package/dist/core/runner/memory-consolidation-write-judge.js +14 -0
- package/dist/core/runner/permission-rule-lanes.d.ts +16 -22
- package/dist/core/runner/permission-rule-lanes.js +13 -43
- package/dist/core/runner/person-path-rows.d.ts +244 -0
- package/dist/core/runner/person-path-rows.js +387 -0
- package/dist/core/runner/policy-throw.d.ts +34 -0
- package/dist/core/runner/policy-throw.js +25 -0
- package/dist/core/runner/prepare-acquire-reconcile.js +8 -1
- package/dist/core/runner/prepare-artifact.d.ts +5 -3
- package/dist/core/runner/prepare-artifact.js +2 -8
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -1
- package/dist/core/runner/prepare-ask-lane.js +14 -16
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -3
- package/dist/core/runner/prepare-caps-and-workflow.js +1 -1
- package/dist/core/runner/prepare-context-lane.js +2 -2
- package/dist/core/runner/prepare-gate-stations.d.ts +3 -3
- package/dist/core/runner/prepare-gate-stations.js +1 -1
- package/dist/core/runner/prepare-hands-readface.d.ts +19 -10
- package/dist/core/runner/prepare-hands-readface.js +57 -43
- package/dist/core/runner/prepare-lsp.d.ts +15 -13
- package/dist/core/runner/prepare-lsp.js +11 -11
- package/dist/core/runner/prepare-policy-chain.d.ts +8 -4
- package/dist/core/runner/prepare-policy-chain.js +11 -10
- package/dist/core/runner/prepare-run-refs.js +1 -1
- package/dist/core/runner/prepare-task.js +24 -16
- package/dist/core/runner/prepare-turn-wiring.d.ts +13 -6
- package/dist/core/runner/prepare-turn-wiring.js +19 -8
- package/dist/core/runner/read-root-grant.d.ts +1 -25
- package/dist/core/runner/read-root-grant.js +1 -17
- package/dist/core/runner/retired-runner-deps.d.ts +2 -2
- package/dist/core/runner/run-brain-sinks.d.ts +1 -5
- package/dist/core/runner/run-brain-sinks.js +2 -4
- package/dist/core/runner/run-harness-handlers.js +5 -4
- package/dist/core/runner/run-identity-wiring.d.ts +4 -4
- package/dist/core/runner/run-identity-wiring.js +10 -1
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +22 -9
- package/dist/core/runner/run-settle-and-teardown.d.ts +0 -4
- package/dist/core/runner/run-settle-and-teardown.js +7 -4
- package/dist/core/runner/run-terminal-adoption.d.ts +1 -1
- package/dist/core/runner/run-terminal-adoption.js +1 -1
- package/dist/core/runner/run-turn-boundary.js +2 -2
- package/dist/core/runner/runtask.js +8 -8
- package/dist/core/runner/session-file-state-replay.d.ts +14 -4
- package/dist/core/runner/session-file-state-replay.js +8 -0
- package/dist/core/runner/stream-steer-verb.js +3 -0
- package/dist/core/runner/tool-end-body.d.ts +5 -4
- package/dist/core/runner/tool-end-body.js +4 -4
- package/dist/core/runner/tool-output-projection.d.ts +6 -4
- package/dist/core/runner/tool-output-projection.js +66 -47
- package/dist/core/runner-deps.d.ts +6 -3
- package/dist/core/shared-memory/types.d.ts +2 -2
- package/dist/core/shell-read-silence.d.ts +23 -0
- package/dist/core/shell-read-silence.js +18 -0
- package/dist/core/synthetic-read-verdict.d.ts +80 -21
- package/dist/core/synthetic-read-verdict.js +89 -18
- package/dist/core/task-event.d.ts +113 -25
- package/dist/core/task-spec.d.ts +44 -0
- package/dist/core/task-tool-shape.d.ts +1 -1
- package/dist/core/tool-catalog-entries.js +16 -2
- package/dist/core/tool-policy.d.ts +25 -15
- package/dist/core/tool-policy.js +9 -13
- package/dist/core/trace.d.ts +3 -2
- package/dist/core/types.d.ts +3 -3
- package/dist/core/types.js +1 -1
- package/dist/core/untrusted-text.d.ts +2 -2
- package/dist/core/user-attachment.d.ts +164 -0
- package/dist/core/user-attachment.js +437 -0
- package/dist/engine/compaction/compaction.js +10 -3
- package/dist/engine/compaction/utils.js +6 -0
- package/dist/engine/execution-env/node-execution-env.d.ts +19 -1
- package/dist/engine/execution-env/node-execution-env.js +125 -0
- package/dist/engine/harness/agent-harness.d.ts +12 -2
- package/dist/engine/harness/agent-harness.js +15 -3
- package/dist/engine/harness/types.d.ts +21 -0
- package/dist/engine/llm/content-block-render.d.ts +15 -0
- package/dist/engine/llm/content-block-render.js +10 -0
- package/dist/engine/llm/index.d.ts +1 -0
- package/dist/engine/llm/index.js +1 -0
- package/dist/engine/llm/types.d.ts +80 -4
- package/dist/engine/llm/types.js +43 -1
- package/dist/engine/session/import-validate.js +2 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +2 -1
- 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/workflow.d.ts +4 -5
- package/dist/orchestration/workflow.js +2 -2
- package/dist/prompts/default.d.ts +1 -1
- package/dist/tools/artifact/artifact-tool.js +1 -1
- package/dist/tools/fs/bash-readonly-classifier.d.ts +1 -1
- package/dist/tools/fs/dir-entries.d.ts +4 -10
- package/dist/tools/fs/dir-entries.js +4 -11
- package/dist/tools/fs/file-read-check.js +3 -3
- package/dist/tools/fs/fs-pdf.js +2 -4
- package/dist/tools/fs/fs-read.d.ts +47 -4
- package/dist/tools/fs/fs-read.js +63 -19
- package/dist/tools/fs/fs-search-tools.d.ts +3 -3
- package/dist/tools/fs/fs-search-tools.js +7 -2
- package/dist/tools/fs/fs-write.d.ts +1 -1
- package/dist/tools/fs/fs-write.js +7 -6
- package/dist/tools/fs/index.d.ts +7 -1
- package/dist/tools/fs/index.js +56 -34
- package/dist/tools/fs/read-deny-home.d.ts +19 -1
- package/dist/tools/fs/read-deny-home.js +32 -22
- package/dist/tools/fs/read-deny.d.ts +14 -0
- package/dist/tools/fs/read-deny.js +8 -0
- package/dist/tools/fs/repo-map.d.ts +3 -2
- package/dist/tools/fs/repo-map.js +11 -3
- package/dist/tools/fs/safety.d.ts +41 -2
- package/dist/tools/fs/safety.js +12 -3
- package/dist/tools/fs/shell-read-check.d.ts +12 -3
- package/dist/tools/fs/shell-read-check.js +44 -24
- package/dist/tools/fs/shell-read-device.d.ts +1 -1
- package/dist/tools/fs/shell-read-face.d.ts +15 -0
- package/dist/tools/fs/shell-read-face.js +5 -0
- package/dist/tools/fs/shell-read-judge.d.ts +9 -4
- package/dist/tools/fs/shell-read-judge.js +1 -1
- package/dist/tools/loop-tick.d.ts +2 -2
- package/package.json +3 -1
- package/test/export-surface.snapshot.json +39 -1
- package/wire-changes/core@7.50.0.json +1699 -0
- package/wire-changes/core@7.50.1.json +65 -0
- package/dist/core/runner/persisted-path-rows.d.ts +0 -88
- package/dist/core/runner/persisted-path-rows.js +0 -108
|
@@ -9,6 +9,7 @@ import { planShellReads } from "./shell-read-plan.js";
|
|
|
9
9
|
import { createShellReadEstablisher, establishShellReadsLexically } from "./shell-read-establish.js";
|
|
10
10
|
import { declaredReadDenyHomes, homeViewsAt } from "./read-deny-home.js";
|
|
11
11
|
import { anyOptionWord, programArgs } from "./shell-read-write-targets.js";
|
|
12
|
+
import { shellReadFaceWords } from "./shell-read-face.js";
|
|
12
13
|
import { passesUnasked } from "./shell-read-device.js";
|
|
13
14
|
import { programRow, selectedOptions } from "./program-read-model.js";
|
|
14
15
|
import { allFindings, anyFaceGuards, decideShellRead, denyRowAtOrBelow, foldShellReadFindings, judgeEstablishedPlan, readRootGrantCandidateOf, stationGuards, writeFaceGuards, } from "./shell-read-judge.js";
|
|
@@ -199,31 +200,36 @@ const CAUSE_SPELLING_MAX = 64;
|
|
|
199
200
|
function fitCause(cause) {
|
|
200
201
|
return cause.replace(/^"([^"]*)"/, (_m, spelling) => `"${fitMiddle(spelling, CAUSE_SPELLING_MAX)}"`);
|
|
201
202
|
}
|
|
203
|
+
function faceOf(fold) {
|
|
204
|
+
return fold.witness?.read.candidate.face === "write" ? "write" : undefined;
|
|
205
|
+
}
|
|
202
206
|
function findingAccount(fold, boundary) {
|
|
203
207
|
const w = fold.witness;
|
|
204
|
-
const
|
|
208
|
+
const face = faceOf(fold);
|
|
209
|
+
const { verb } = shellReadFaceWords(face);
|
|
210
|
+
const writes = w !== undefined && face === "write";
|
|
205
211
|
const roots = writes ? (boundary.writeRoots ?? []) : boundary.roots;
|
|
206
212
|
const allowed = fitMiddle(roots.length > 0 ? roots.join(", ") : "(none)", ACCOUNT_PART_MAX);
|
|
207
213
|
switch (fold.finding) {
|
|
208
214
|
case "outside_roots":
|
|
209
|
-
return `${
|
|
215
|
+
return `${verb} outside the allowed directories for this session: "${fitMiddle(w?.read.target ?? "?", ACCOUNT_PART_MAX)}" is not under ${allowed} ${NOT_AUTO_ALLOWED}`;
|
|
210
216
|
case "unestablishable":
|
|
211
217
|
case "unanswered":
|
|
212
218
|
if (writes && boundary.writeRoots === undefined)
|
|
213
|
-
return `this command
|
|
219
|
+
return `this command ${verb} "${fitMiddle(w.read.target ?? w.read.candidate.spelled, ACCOUNT_PART_MAX)}", and this session declares no directories it may write ${NOT_AUTO_ALLOWED}`;
|
|
214
220
|
if (writes)
|
|
215
|
-
return `where this command
|
|
221
|
+
return `where this command ${verb} could not be established${w.read.cause !== undefined ? `: ${fitCause(w.read.cause)}` : ""}, so it cannot be confirmed to write only inside the allowed directories for this session (${allowed}) ${NOT_AUTO_ALLOWED}`;
|
|
216
222
|
if (w?.read.cause !== undefined)
|
|
217
|
-
return `where this command
|
|
223
|
+
return `where this command ${verb} could not be established: ${fitCause(w.read.cause)}, so it cannot be confirmed ${boundary.face === "open" ? "not to read a path the deny list names" : `to read only inside the allowed directories for this session (${allowed})`} ${NOT_AUTO_ALLOWED}`;
|
|
218
224
|
if (fold.cause !== undefined)
|
|
219
|
-
return `where this command
|
|
225
|
+
return `where this command ${verb} could not be established: ${fitCause(fold.cause)}, so it cannot be confirmed ${boundary.face === "open" ? "not to read a path the deny list names" : `to read only inside the allowed directories for this session (${allowed})`} ${NOT_AUTO_ALLOWED}`;
|
|
220
226
|
if (fold.declined?.baseMove !== undefined)
|
|
221
227
|
return `"${fitMiddle(fold.declined.text.trim(), ACCOUNT_PART_MAX)}" moves the working directory somewhere this command's text does not settle ${NOT_AUTO_ALLOWED}`;
|
|
222
228
|
if (fold.declined?.unreadProgramText !== undefined)
|
|
223
|
-
return `"${fitMiddle(fold.declined.text.trim(), ACCOUNT_PART_MAX)}": ${fold.declined.unreadProgramText}, so where it
|
|
229
|
+
return `"${fitMiddle(fold.declined.text.trim(), ACCOUNT_PART_MAX)}": ${fold.declined.unreadProgramText}, so where it ${verb} cannot be established ${NOT_AUTO_ALLOWED}`;
|
|
224
230
|
if (fold.declined !== undefined)
|
|
225
231
|
return `"${fitMiddle(fold.declined.text.trim(), ACCOUNT_PART_MAX)}" runs its argument as shell text this station does not parse ${NOT_AUTO_ALLOWED}`;
|
|
226
|
-
return `the command's text could not be read as shell, so where it
|
|
232
|
+
return `the command's text could not be read as shell, so where it ${verb} cannot be established ${NOT_AUTO_ALLOWED}`;
|
|
227
233
|
case "declined":
|
|
228
234
|
return fold.declined !== undefined ? declineSentence(fold.declined) : `the station could not read which program runs ${NOT_AUTO_ALLOWED}`;
|
|
229
235
|
case "identity_changed":
|
|
@@ -285,16 +291,19 @@ function verdictOf(tool, seat, fold, judged, boundary) {
|
|
|
285
291
|
return { disposition, finding: fold.finding };
|
|
286
292
|
const paths = outsidePathsOf(judged);
|
|
287
293
|
const unestablished = fold.unestablished === true ? { unestablished: true } : {};
|
|
288
|
-
const
|
|
294
|
+
const face = faceOf(fold);
|
|
295
|
+
const writes = face !== undefined ? { face } : {};
|
|
296
|
+
const by = fold.finding === "unanswered" ? { environmentSilent: true } : {};
|
|
289
297
|
if (disposition === "refuse") {
|
|
290
298
|
const r = refusalOf(tool, fold, boundary, paths);
|
|
291
|
-
return { disposition, finding: fold.finding, ...writes, sentence: r.sentence, ...(r.details !== undefined ? { details: r.details } : {}) };
|
|
299
|
+
return { disposition, finding: fold.finding, ...by, ...writes, sentence: r.sentence, ...(r.details !== undefined ? { details: r.details } : {}) };
|
|
292
300
|
}
|
|
293
301
|
const grant = fold.finding === "outside_roots" ? readRootGrantCandidateOf(judged, boundary) : undefined;
|
|
294
302
|
const containment = fold.finding === "outside_roots" || fold.finding === "unestablishable" || fold.finding === "unanswered";
|
|
295
303
|
return {
|
|
296
304
|
disposition,
|
|
297
305
|
finding: fold.finding,
|
|
306
|
+
...by,
|
|
298
307
|
...writes,
|
|
299
308
|
...unestablished,
|
|
300
309
|
sentence: findingAccount(fold, boundary),
|
|
@@ -404,6 +413,16 @@ export function createShellReadStation(opts) {
|
|
|
404
413
|
admissions.set(toolCallId, a);
|
|
405
414
|
};
|
|
406
415
|
const memberOf = (call) => readStationMemberOf(call, opts.tools)?.name;
|
|
416
|
+
const unansweredOver = (toolName, seat, cause, boundary, silence) => {
|
|
417
|
+
if (boundary === undefined || (boundary !== "unread" && !(anyFaceGuards(boundary) || boundary.writeTargetJudge !== undefined)))
|
|
418
|
+
return { disposition: "vouch", finding: "none" };
|
|
419
|
+
const disposition = decideShellRead("unanswered", seat);
|
|
420
|
+
const account = `${cause}, so where this command reads could not be established ${NOT_AUTO_ALLOWED}`;
|
|
421
|
+
const details = unestablishedDetails();
|
|
422
|
+
if (disposition === "refuse")
|
|
423
|
+
return { disposition, finding: "unanswered", ...silence, sentence: `Error (${toolName}): ${account}. ${BASH_READONLY_CONFINEMENT_NOTE}`, details };
|
|
424
|
+
return { disposition, finding: "unanswered", ...silence, sentence: account, details };
|
|
425
|
+
};
|
|
407
426
|
const check = {
|
|
408
427
|
judge(call, args, cwd, signal, callOpts) {
|
|
409
428
|
const member = memberOf(call);
|
|
@@ -412,7 +431,7 @@ export function createShellReadStation(opts) {
|
|
|
412
431
|
const command = shellCommandOf(args);
|
|
413
432
|
if (command === undefined)
|
|
414
433
|
return null;
|
|
415
|
-
const boundary = opts.boundaryOf(member, cwd);
|
|
434
|
+
const boundary = opts.boundaryOf(member, cwd, callOpts.toolCallId);
|
|
416
435
|
if (boundary === undefined)
|
|
417
436
|
return null;
|
|
418
437
|
const seat = callOpts.seat ?? opts.seatOf(member);
|
|
@@ -420,22 +439,23 @@ export function createShellReadStation(opts) {
|
|
|
420
439
|
const run = await runShellReadStation(call.toolName, command, boundary, seat, readers, establisherFor(boundary.roots), opts.env, signal);
|
|
421
440
|
if (run.verdict.disposition !== "refuse" && callOpts.toolCallId !== undefined)
|
|
422
441
|
remember(callOpts.toolCallId, { toolName: member, boundary: run.boundary, established: run.established, command });
|
|
423
|
-
|
|
442
|
+
if (boundary.unreadPartitions !== true)
|
|
443
|
+
return run.verdict;
|
|
444
|
+
return run.verdict.disposition === "vouch" ? unansweredOver(call.toolName, seat, "the rules this check stands on could not all be read", boundary, { rowsUnread: true }) : { ...run.verdict, rowsUnread: true };
|
|
424
445
|
})();
|
|
425
446
|
},
|
|
426
447
|
unanswered(call, cause) {
|
|
427
|
-
const
|
|
428
|
-
const
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
return { disposition, finding: "unanswered", sentence: account, details };
|
|
448
|
+
const member = memberOf(call) ?? call.toolName;
|
|
449
|
+
const boundary = (() => {
|
|
450
|
+
try {
|
|
451
|
+
return opts.boundaryOf(member, undefined, undefined);
|
|
452
|
+
}
|
|
453
|
+
catch {
|
|
454
|
+
return "unread";
|
|
455
|
+
}
|
|
456
|
+
})();
|
|
457
|
+
const rowsUnread = boundary === "unread" || boundary?.unreadPartitions === true ? { rowsUnread: true } : {};
|
|
458
|
+
return unansweredOver(call.toolName, opts.seatOf(member), cause, boundary, { environmentSilent: true, ...rowsUnread });
|
|
439
459
|
},
|
|
440
460
|
};
|
|
441
461
|
const admit = async (toolName, toolCallId, command, signal) => {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* operand, the content a program writes through an operand, a `git diff` operand) and the shape tier's two readings of "does
|
|
6
6
|
* this redirection write" (the read-only reader, the classify faces' data-free redirections).
|
|
7
7
|
*
|
|
8
|
-
* The table is the reference implementation's own device predicate (CC 2.1.296 `wwe
|
|
8
|
+
* The table is the reference implementation's own device predicate (CC 2.1.296 `wwe` (cli296.js:249645) @18511591): the null
|
|
9
9
|
* device, the three standard streams, the terminal, any `/dev/fd/<digits>`, and `/proc/self/fd/{0,1,2}`. A word is such a
|
|
10
10
|
* spelling AS WRITTEN (quotes removed, nothing folded: `/dev/./null` is a path, not the null device).
|
|
11
11
|
*
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words a shell-read finding is said in, by the FACE it is about — the ONE choice of verb the read station's account
|
|
3
|
+
* (what the approval card discloses and the refusal states) and the gate's approval card sentence both take, so one finding
|
|
4
|
+
* is never "writes" on one surface and "reads" on the other. A finding whose witness is a write target
|
|
5
|
+
* (`ShellReadVerdict.face === "write"`) is said as a write; every other finding — a read's, the text's own structure —
|
|
6
|
+
* as a read. A leaf: the station and the gate both import it, and it imports nothing.
|
|
7
|
+
*/
|
|
8
|
+
export interface ShellReadFaceWords {
|
|
9
|
+
/** The claim's verb: `this command writes …`, `tool "Bash" reads …`. */
|
|
10
|
+
readonly verb: "writes" | "reads";
|
|
11
|
+
/** Its object's participle: `… could not establish what is written / read`. */
|
|
12
|
+
readonly participle: "written" | "read";
|
|
13
|
+
}
|
|
14
|
+
/** The words of a finding on `face` (absent ⇒ a read's). */
|
|
15
|
+
export declare function shellReadFaceWords(face: "write" | undefined): ShellReadFaceWords;
|
|
@@ -74,7 +74,7 @@ export declare function dispositionOfCell(cell: ShellReadCell, narrowedReadFace:
|
|
|
74
74
|
* ask is MANDATED and no automatic lane answers; on the OPEN face (where the station asks only because a deny list has
|
|
75
75
|
* rows), and for a written target alone (a narrowed WRITE face fences what is written; it is no request to be asked about
|
|
76
76
|
* every word the floor cannot place), it is the ORDINARY ask — the reference implementation's plain permission ask (CC
|
|
77
|
-
* 2.1.296 `sR
|
|
77
|
+
* 2.1.296 `sR` (cli296.js:242691) @13116941, reason `other`), which a whole-tool allow (`N9` (cli296.js:249675) @18717070), bypass (`$pn` (cli296.js:249675) @18716980)
|
|
78
78
|
* and the auto-mode classifier release and a prefix allow does not.
|
|
79
79
|
* · `declined` — the one deliberate fail-open of this table: the scan could not read the program bash
|
|
80
80
|
* will run, or the operands arrive on a stream. On the full shell it is an ORDINARY ask — an answerer
|
|
@@ -159,6 +159,10 @@ export interface ShellReadCellContext {
|
|
|
159
159
|
*/
|
|
160
160
|
export interface ShellReadBoundary extends BashReadonlyRootBoundary {
|
|
161
161
|
readonly alsoInside?: (canonicalTarget: string) => Promise<boolean>;
|
|
162
|
+
/** A partition of the rules the deny seats are compiled from could not be read: a guard of unknown reach. The station
|
|
163
|
+
* guards ({@link stationGuards}) and vouches for nothing against this boundary — what it would vouch for is answered as
|
|
164
|
+
* a judgment it could not make. */
|
|
165
|
+
readonly unreadPartitions?: true;
|
|
162
166
|
/** The deny table's WRITE face (`compileWriteDeny`, read-deny.ts): judges a command's write targets (candidates marked
|
|
163
167
|
* `face: "write"`) and returns the matched row's rule, or null. PRESENT-IFF there is something to judge. */
|
|
164
168
|
readonly writeDenyMatch?: (resolvedPath: string) => string | null;
|
|
@@ -303,12 +307,13 @@ export interface JudgedPlan {
|
|
|
303
307
|
}
|
|
304
308
|
/**
|
|
305
309
|
* Does the station GUARD anything for this boundary — a closed face (roots: containment is what it guards; an absent
|
|
306
|
-
* face reads as roots, as {@link containmentOf} does), or a deny table with rows (`denyMatch` is present exactly then)
|
|
310
|
+
* face reads as roots, as {@link containmentOf} does), or a deny table with rows (`denyMatch` is present exactly then),
|
|
311
|
+
* or rows it could not read (`unreadPartitions`: a guard of unknown reach)?
|
|
307
312
|
* Where it guards nothing (an open face, no deny row), a read it could not establish has nothing to be confirmed
|
|
308
313
|
* against: no finding. The deny judgment itself is untouched (with no row there is nothing to hit). The READ face's
|
|
309
314
|
* question only: a write target folds by {@link writeFaceGuards}.
|
|
310
315
|
*/
|
|
311
|
-
export declare function stationGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch">): boolean;
|
|
316
|
+
export declare function stationGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch" | "unreadPartitions">): boolean;
|
|
312
317
|
/**
|
|
313
318
|
* Does the station guard anything on the WRITE face — the same shape for the write seats: the write face in force runs
|
|
314
319
|
* the roots-containment step ({@link skipsRootsContainment}, the structured write tools' reading; absent ⇒ roots), or
|
|
@@ -319,7 +324,7 @@ export declare function writeFaceGuards(boundary: Pick<ShellReadBoundary, "write
|
|
|
319
324
|
/** Does the station guard anything on EITHER face? What a finding about the text's own structure folds by — a text the
|
|
320
325
|
* lexer could not read, a program it cannot name, program text it does not read, a working directory it lost, a text the
|
|
321
326
|
* shell re-enters — since what such a text reads AND what it writes are both unknown. */
|
|
322
|
-
export declare function anyFaceGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch" | "writeFace" | "writeDenyMatch">): boolean;
|
|
327
|
+
export declare function anyFaceGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch" | "unreadPartitions" | "writeFace" | "writeDenyMatch">): boolean;
|
|
323
328
|
/** The command-level fold and the finding that produced it. `witness` is absent for `none`; for `declined`
|
|
324
329
|
* the segment that declined stands in for a candidate. */
|
|
325
330
|
export interface ShellReadFold {
|
|
@@ -104,7 +104,7 @@ function judgeWrite(read, boundary) {
|
|
|
104
104
|
return { read, kind: containment === "outside" && !skipsRootsContainment(boundary.writeFace) ? "outside_roots" : "none", containment };
|
|
105
105
|
}
|
|
106
106
|
export function stationGuards(boundary) {
|
|
107
|
-
return boundary.face !== "open" || boundary.denyMatch !== undefined;
|
|
107
|
+
return boundary.face !== "open" || boundary.denyMatch !== undefined || boundary.unreadPartitions === true;
|
|
108
108
|
}
|
|
109
109
|
export function writeFaceGuards(boundary) {
|
|
110
110
|
return !skipsRootsContainment(boundary.writeFace) || boundary.writeDenyMatch !== undefined;
|
|
@@ -19,9 +19,9 @@ export interface AutonomousLoopPromptOptions {
|
|
|
19
19
|
*/
|
|
20
20
|
pushNotification?: boolean;
|
|
21
21
|
}
|
|
22
|
-
/** CC `FFi` (:205310) — first-tick preamble, DEFAULT variant (steward framing). Verbatim. */
|
|
22
|
+
/** CC 2.1.209 `FFi` (:205310) — first-tick preamble, DEFAULT variant (steward framing). Verbatim through 2.1.259; the reference dropped this preamble from 2.1.278 on. */
|
|
23
23
|
export declare const AUTONOMOUS_LOOP_PREAMBLE = "# Autonomous loop check\n\nYou're being invoked on a timer while the user is away or occupied. The point is to keep work moving forward without the user driving every step \u2014 finishing things they started, maintaining PRs they're building, catching problems before they come back to find them. You're a steward, not an initiator. The user set you loose on their work, and the value you provide comes from reliably advancing things they've already set in motion, not from finding new things to do.\n\nThe key tension to navigate: the user trusts you enough to run autonomously, but that trust is easily lost. Acting on what the conversation already established is safe and valuable. Inventing new work or making irreversible changes without clear authorization erodes trust fast. When you're unsure whether something falls into \"continuing established work\" or \"inventing new work,\" lean toward the former only when the transcript provides clear evidence the user wanted it done. If you find yourself reaching for justifications about why a push is probably fine, that's a signal to wait.\n\n## What to act on\n\nThe current conversation is your highest-signal source \u2014 re-read the transcript above, since everything there is something the user was actively engaged with. The strongest signal is an in-progress PR you've been building together: review comments to address and resolve, failing CI checks to diagnose (and re-enqueue if they're flakes), merge conflicts to fix. The goal is to get the PR into a state where it's ready to merge pending only human review \u2014 the user shouldn't come back to find a PR blocked on things you could have handled. After that, look for unfinished implementation where the last exchange left something half-done, and explicit \"I'll also...\" or \"next I'll...\" commitments the conversation made and didn't honor. Weaker but still real: dangling questions you could now answer, verification steps that were skipped, edge cases that were mentioned but not handled, and natural continuations that don't require new decisions.\n\nIf you find anything in this category, act on it \u2014 actually do the work, don't describe what could be done. Run the tests, don't say \"you could run the tests.\" The whole point of autonomous operation is that work gets done while the user is away.\n\nWhen the conversation transcript has nothing left, the current branch's pull/merge request on the user's SCM is the next-best place to look. This is maintenance work \u2014 valuable, but lower priority than continuing the user's active work. Find the PR/MR for the current branch via the SCM's CLI, then check three things: CI status, unresolved review threads, and whether the branch has fallen behind the base. For failing CI, pull the failing job's logs and diagnose before acting \u2014 flaky-shaped failures (timeout, runner died, transient network) can be re-enqueued; real failures need a reproduction and a minimal fix. For unresolved review threads, fetch the comment, address the feedback, push, and resolve the thread via, for example, the GitHub GraphQL `resolveReviewThread` mutation (or the equivalent for whichever SCM the project uses). Before pushing anything, check whether someone else has pushed to the branch while you were working \u2014 if so, rebase (don't merge) to keep history clean.\n\nWhen CI is green, threads are clear, and there's idle time, sweeping the branch for issues is a good use of that time \u2014 bug-hunt or simplification passes catch problems before reviewers do, saving everyone a round-trip.\n\nIf everything is genuinely quiet \u2014 no conversation work, no PR maintenance \u2014 say so in one sentence and stop. No summary of what you checked, no list of what you might do later. The user will see your message in the transcript when they come back; three consecutive \"nothing to do\" results means you should scale back to a quick CI check and stop, not narrate.\n\n## Repeated invocations\n\nIf you see earlier autonomous checks in this conversation, adjust your scope accordingly. If a previous check left a question the user hasn't answered, the cost of acting depends on reversibility: for reversible actions (local edits, running tests), make your best call and proceed; for irreversible ones (pushing, deleting, sending), keep waiting \u2014 the cost of acting wrongly on something irreversible is much higher than the cost of waiting one more cycle. If three or more consecutive checks have found nothing actionable, things are quiet \u2014 do one quick CI/threads check and stop in a single line. Repeated \"nothing to do\" messages clutter the transcript and waste the user's attention when they come back to review.\n\nRead and analyze freely \u2014 understanding the state of things has no blast radius. Make edits and run tests when you're confident they continue established work. Commit and push only when you're clearly continuing something the user authorized, or when the work pattern makes the intent obvious \u2014 like fixing CI on a PR you've been building together.\n";
|
|
24
|
-
/** CC `w6c` (:205335) — first-tick preamble, PERSISTENT variant. Verbatim. */
|
|
24
|
+
/** CC 2.1.209 `w6c` (:205335) — first-tick preamble, PERSISTENT variant. Verbatim through 2.1.259; dropped from 2.1.278 on. */
|
|
25
25
|
export declare const AUTONOMOUS_LOOP_PREAMBLE_PERSISTENT = "# Autonomous loop check\n\nYou're being invoked on a timer while the user is away or occupied. The point is to keep work moving forward without the user driving every step \u2014 finishing things they started, maintaining PRs they're building, catching problems before they come back to find them, and following through on the *spirit* of the task they gave you, not just its literal scope. The user set you loose on their work, and the value you provide comes from reliably advancing things they've already set in motion.\n\nThe key tension to navigate: the user trusts you enough to run autonomously, but that trust is easily lost. Acting on what the conversation already established is safe and valuable. For irreversible actions (push, delete, send), require clear authorization in the transcript or use a reversible alternative (a draft, a local commit, a queued message). For reversible actions (edits, tests, drafts, exploration), bias toward acting \u2014 the cost of an unneeded local edit is near zero, and the cost of a stalled loop is high. When you're unsure whether something falls into \"continuing established work\" or \"inventing new work,\" lean toward continuing whenever the transcript gives you any reasonable thread to pull on.\n\n## What to act on\n\nThe current conversation is your highest-signal source \u2014 re-read the transcript above, since everything there is something the user was actively engaged with. The strongest signal is an in-progress PR you've been building together: review comments to address and resolve, failing CI checks to diagnose (and re-enqueue if they're flakes), merge conflicts to fix. The goal is to get the PR into a state where it's ready to merge pending only human review \u2014 the user shouldn't come back to find a PR blocked on things you could have handled. After that, look for unfinished implementation where the last exchange left something half-done, and explicit \"I'll also...\" or \"next I'll...\" commitments the conversation made and didn't honor. Weaker but still real: dangling questions you could now answer, verification steps that were skipped, edge cases that were mentioned but not handled, and natural continuations that don't require new decisions.\n\nIf you find anything in this category, act on it \u2014 actually do the work, don't describe what could be done. Run the tests, don't say \"you could run the tests.\" The whole point of autonomous operation is that work gets done while the user is away.\n\nWhen the conversation transcript has nothing left, the current branch's pull/merge request on the user's SCM is the next-best place to look. This is maintenance work \u2014 valuable, but lower priority than continuing the user's active work. Find the PR/MR for the current branch via the SCM's CLI, then check three things: CI status, unresolved review threads, and whether the branch has fallen behind the base. For failing CI, pull the failing job's logs and diagnose before acting \u2014 flaky-shaped failures (timeout, runner died, transient network) can be re-enqueued; real failures need a reproduction and a minimal fix. For unresolved review threads, fetch the comment, address the feedback, push, and resolve the thread via, for example, the GitHub GraphQL `resolveReviewThread` mutation (or the equivalent for whichever SCM the project uses). Before pushing anything, check whether someone else has pushed to the branch while you were working \u2014 if so, rebase (don't merge) to keep history clean.\n\nWhen CI is green, threads are clear, and there's idle time, sweeping the branch for issues is a good use of that time \u2014 bug-hunt or simplification passes catch problems before reviewers do, saving everyone a round-trip.\n\nIf everything is genuinely quiet \u2014 no conversation work, no PR maintenance \u2014 say so in one sentence and keep the loop alive. Before stopping, broaden once: re-read the original task framing, check whether earlier ticks deferred anything (\"I'll wait for X\"), and look at sibling PRs/branches the user owns. Persistence is the point of autonomous mode. Only stop if the original task is provably complete or the user said to stop. (Pacing \u2014 how long to wait before the next tick \u2014 is handled by the per-mode reminder appended to this preamble; don't try to manage delay from here.)\n\n## Repeated invocations\n\nIf you see earlier autonomous checks in this conversation, adjust your scope accordingly. If a previous check left a question the user hasn't answered, the cost of acting depends on reversibility: for reversible actions (local edits, running tests), make your best call and proceed; for irreversible ones (pushing, deleting, sending), keep waiting \u2014 the cost of acting wrongly on something irreversible is much higher than the cost of waiting one more cycle. If three or more consecutive checks have found nothing actionable, broaden scope once before considering stopping \u2014 re-read the original task, check sibling work, look for verification or polish steps that were skipped. A loop that quits the moment work goes quiet is less useful than one that waits.\n\nRead and analyze freely \u2014 understanding the state of things has no blast radius. Make edits and run tests when you're confident they continue established work. Commit and push only when you're clearly continuing something the user authorized, or when the work pattern makes the intent obvious \u2014 like fixing CI on a PR you've been building together.\n";
|
|
26
26
|
/**
|
|
27
27
|
* Resolve a fire-time prompt: if it is one of the two autonomous-loop sentinels, return the tick
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/core",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.50.1",
|
|
4
4
|
"description": "Stateless, task-oriented AI agent core",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -72,6 +72,8 @@
|
|
|
72
72
|
"handoff:diff": "node scripts/dist-handoff-diff.mjs",
|
|
73
73
|
"post-ship": "node scripts/post-ship.mjs",
|
|
74
74
|
"gate:debts:rc": "node scripts/verify-debts.mjs --rc-gate",
|
|
75
|
+
"gate:anchor-claims": "node scripts/verify-anchor-claims.mjs",
|
|
76
|
+
"gate:anchor-claims:rc": "node scripts/verify-anchor-claims.mjs --require-corpus",
|
|
75
77
|
"gate:rulings": "node scripts/rulings-gate.mjs --require-comms",
|
|
76
78
|
"gate:error-surface": "node scripts/verify-error-surface.mjs",
|
|
77
79
|
"gate:criteria": "node scripts/criteria-lint.mjs",
|
|
@@ -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 BREAKING change: name every removed entry in the CHANGELOG's BREAKING lines (what was removed / who is hurt / what to read instead) and update this fixture in the SAME commit. 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": 2628,
|
|
5
5
|
"exports": {
|
|
6
6
|
"A2ATaskState": "type",
|
|
7
7
|
"A2ATaskStateReversal": "type",
|
|
@@ -216,6 +216,7 @@
|
|
|
216
216
|
"BeforeWriteHook": "type",
|
|
217
217
|
"BeforeWriteRequest": "interface",
|
|
218
218
|
"BeforeWriteResult": "type",
|
|
219
|
+
"BoundFileObject": "interface",
|
|
219
220
|
"BoundPathRule": "interface",
|
|
220
221
|
"BoundSkillGrants": "interface",
|
|
221
222
|
"Brain": "interface",
|
|
@@ -252,6 +253,7 @@
|
|
|
252
253
|
"CONSOLIDATION_DRIVER_RUNS_FILE": "variable",
|
|
253
254
|
"CONSOLIDATION_RUN_STOP_REASONS": "variable",
|
|
254
255
|
"CONSOLIDATION_SYSTEM_PROMPT": "variable",
|
|
256
|
+
"CONSOLIDATION_WRITE_REFUSED_CODE": "variable",
|
|
255
257
|
"CONTRACT_KIT_ENGINE_VERSION": "variable",
|
|
256
258
|
"COORDINATOR_ROLE_PROMPT": "variable",
|
|
257
259
|
"CORRUPT_BODY_FORMS": "variable",
|
|
@@ -358,6 +360,9 @@
|
|
|
358
360
|
"ConsolidationRunReceipt": "interface",
|
|
359
361
|
"ConsolidationRunStopReason": "type",
|
|
360
362
|
"ConsolidationStats": "interface",
|
|
363
|
+
"ConsolidationWriteGate": "type",
|
|
364
|
+
"ConsolidationWriteJudge": "type",
|
|
365
|
+
"ConsolidationWriteTarget": "interface",
|
|
361
366
|
"ConstraintChainEntry": "type",
|
|
362
367
|
"ContainmentFace": "type",
|
|
363
368
|
"ContainmentFaceInputs": "interface",
|
|
@@ -591,6 +596,7 @@
|
|
|
591
596
|
"Hooks": "interface",
|
|
592
597
|
"HostDecider": "type",
|
|
593
598
|
"HostDecisionFacts": "interface",
|
|
599
|
+
"HumanInputAttachment": "interface",
|
|
594
600
|
"HumanInputDelivery": "type",
|
|
595
601
|
"HumanInputEvent": "type",
|
|
596
602
|
"HumanInputFrame": "interface",
|
|
@@ -1660,6 +1666,12 @@
|
|
|
1660
1666
|
"UNCOVERED_SEGMENT_REASON_BASELINE": "variable",
|
|
1661
1667
|
"URL_SAFETY": "variable",
|
|
1662
1668
|
"USAGE_WINDOW_REAP_MARGIN_MS": "variable",
|
|
1669
|
+
"USER_ATTACHMENTS_MAX": "variable",
|
|
1670
|
+
"USER_ATTACHMENT_KINDS": "variable",
|
|
1671
|
+
"USER_ATTACHMENT_LABEL_MAX": "variable",
|
|
1672
|
+
"USER_ATTACHMENT_OUTCOMES": "variable",
|
|
1673
|
+
"USER_ATTACHMENT_SEAT": "variable",
|
|
1674
|
+
"USER_ATTACHMENT_SUPPLIES": "variable",
|
|
1663
1675
|
"USER_INPUT_UNDRAINED_CAUSES": "variable",
|
|
1664
1676
|
"USER_INPUT_UNDRAINED_FAMILIES": "variable",
|
|
1665
1677
|
"UnarmedDenialLimitFallback": "interface",
|
|
@@ -1674,9 +1686,16 @@
|
|
|
1674
1686
|
"UsageWindowReading": "interface",
|
|
1675
1687
|
"UsageWindowRecord": "interface",
|
|
1676
1688
|
"UsageWindowStore": "interface",
|
|
1689
|
+
"UserAttachment": "type",
|
|
1690
|
+
"UserAttachmentDeclaration": "interface",
|
|
1691
|
+
"UserAttachmentKind": "type",
|
|
1692
|
+
"UserAttachmentObservation": "interface",
|
|
1693
|
+
"UserAttachmentOutcome": "type",
|
|
1694
|
+
"UserAttachmentSupply": "type",
|
|
1677
1695
|
"UserInputLane": "type",
|
|
1678
1696
|
"UserInputUndrainedCause": "type",
|
|
1679
1697
|
"UserMessage": "interface",
|
|
1698
|
+
"UserMessageAttachment": "interface",
|
|
1680
1699
|
"UserPromptSubmitContext": "interface",
|
|
1681
1700
|
"UserPromptSubmitResult": "interface",
|
|
1682
1701
|
"UtilityGate": "type",
|
|
@@ -2827,6 +2846,7 @@
|
|
|
2827
2846
|
"BeforeWriteHook": "stable",
|
|
2828
2847
|
"BeforeWriteRequest": "advanced",
|
|
2829
2848
|
"BeforeWriteResult": "advanced",
|
|
2849
|
+
"BoundFileObject": "internal",
|
|
2830
2850
|
"BoundPathRule": "advanced",
|
|
2831
2851
|
"BoundSkillGrants": "advanced",
|
|
2832
2852
|
"Brain": "stable",
|
|
@@ -2863,6 +2883,7 @@
|
|
|
2863
2883
|
"CONSOLIDATION_DRIVER_RUNS_FILE": "advanced",
|
|
2864
2884
|
"CONSOLIDATION_RUN_STOP_REASONS": "advanced",
|
|
2865
2885
|
"CONSOLIDATION_SYSTEM_PROMPT": "internal",
|
|
2886
|
+
"CONSOLIDATION_WRITE_REFUSED_CODE": "advanced",
|
|
2866
2887
|
"CONTRACT_KIT_ENGINE_VERSION": "advanced",
|
|
2867
2888
|
"COORDINATOR_ROLE_PROMPT": "advanced",
|
|
2868
2889
|
"CORRUPT_BODY_FORMS": "advanced",
|
|
@@ -2969,6 +2990,9 @@
|
|
|
2969
2990
|
"ConsolidationRunReceipt": "advanced",
|
|
2970
2991
|
"ConsolidationRunStopReason": "advanced",
|
|
2971
2992
|
"ConsolidationStats": "internal",
|
|
2993
|
+
"ConsolidationWriteGate": "advanced",
|
|
2994
|
+
"ConsolidationWriteJudge": "advanced",
|
|
2995
|
+
"ConsolidationWriteTarget": "advanced",
|
|
2972
2996
|
"ConstraintChainEntry": "advanced",
|
|
2973
2997
|
"ContainmentFace": "stable",
|
|
2974
2998
|
"ContainmentFaceInputs": "advanced",
|
|
@@ -3202,6 +3226,7 @@
|
|
|
3202
3226
|
"Hooks": "advanced",
|
|
3203
3227
|
"HostDecider": "advanced",
|
|
3204
3228
|
"HostDecisionFacts": "advanced",
|
|
3229
|
+
"HumanInputAttachment": "advanced",
|
|
3205
3230
|
"HumanInputDelivery": "advanced",
|
|
3206
3231
|
"HumanInputEvent": "advanced",
|
|
3207
3232
|
"HumanInputFrame": "advanced",
|
|
@@ -4271,6 +4296,12 @@
|
|
|
4271
4296
|
"UNCOVERED_SEGMENT_REASON_BASELINE": "advanced",
|
|
4272
4297
|
"URL_SAFETY": "advanced",
|
|
4273
4298
|
"USAGE_WINDOW_REAP_MARGIN_MS": "internal",
|
|
4299
|
+
"USER_ATTACHMENTS_MAX": "advanced",
|
|
4300
|
+
"USER_ATTACHMENT_KINDS": "advanced",
|
|
4301
|
+
"USER_ATTACHMENT_LABEL_MAX": "advanced",
|
|
4302
|
+
"USER_ATTACHMENT_OUTCOMES": "advanced",
|
|
4303
|
+
"USER_ATTACHMENT_SEAT": "advanced",
|
|
4304
|
+
"USER_ATTACHMENT_SUPPLIES": "advanced",
|
|
4274
4305
|
"USER_INPUT_UNDRAINED_CAUSES": "advanced",
|
|
4275
4306
|
"USER_INPUT_UNDRAINED_FAMILIES": "advanced",
|
|
4276
4307
|
"UnarmedDenialLimitFallback": "advanced",
|
|
@@ -4285,9 +4316,16 @@
|
|
|
4285
4316
|
"UsageWindowReading": "advanced",
|
|
4286
4317
|
"UsageWindowRecord": "advanced",
|
|
4287
4318
|
"UsageWindowStore": "advanced",
|
|
4319
|
+
"UserAttachment": "advanced",
|
|
4320
|
+
"UserAttachmentDeclaration": "advanced",
|
|
4321
|
+
"UserAttachmentKind": "advanced",
|
|
4322
|
+
"UserAttachmentObservation": "advanced",
|
|
4323
|
+
"UserAttachmentOutcome": "advanced",
|
|
4324
|
+
"UserAttachmentSupply": "advanced",
|
|
4288
4325
|
"UserInputLane": "advanced",
|
|
4289
4326
|
"UserInputUndrainedCause": "advanced",
|
|
4290
4327
|
"UserMessage": "advanced",
|
|
4328
|
+
"UserMessageAttachment": "advanced",
|
|
4291
4329
|
"UserPromptSubmitContext": "advanced",
|
|
4292
4330
|
"UserPromptSubmitResult": "advanced",
|
|
4293
4331
|
"UtilityGate": "advanced",
|