@sema-agent/core 7.19.0 → 7.20.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.
Files changed (114) hide show
  1. package/CHANGELOG.md +199 -2
  2. package/dist/agents/subagent.js +12 -20
  3. package/dist/agents/teacher.js +2 -5
  4. package/dist/agents/verify.js +21 -10
  5. package/dist/brain/anthropic.js +3 -1
  6. package/dist/brain/open-responses.js +4 -2
  7. package/dist/brain/openai.js +3 -1
  8. package/dist/brain/stream-engine.d.ts +4 -0
  9. package/dist/brain/stream-engine.js +4 -0
  10. package/dist/core/auto-mode.d.ts +37 -18
  11. package/dist/core/auto-mode.js +1 -1
  12. package/dist/core/child-clamp-seats.d.ts +79 -0
  13. package/dist/core/child-clamp-seats.js +29 -0
  14. package/dist/core/engine-notice.d.ts +76 -49
  15. package/dist/core/fs-write-gate-policy.d.ts +17 -9
  16. package/dist/core/fs-write-gate-policy.js +51 -4
  17. package/dist/core/gate-bounded-await.d.ts +38 -0
  18. package/dist/core/gate-bounded-await.js +53 -0
  19. package/dist/core/gate-fold.js +16 -48
  20. package/dist/core/gate-lanes.js +11 -3
  21. package/dist/core/gate-outcome.d.ts +9 -6
  22. package/dist/core/governance-codes.d.ts +16 -1
  23. package/dist/core/governance-codes.js +14 -0
  24. package/dist/core/hooks.d.ts +8 -8
  25. package/dist/core/memory-engine/engine.d.ts +14 -9
  26. package/dist/core/memory-engine/engine.js +21 -8
  27. package/dist/core/memory-engine/layout.d.ts +31 -0
  28. package/dist/core/memory-engine/layout.js +68 -3
  29. package/dist/core/memory-engine/tools.js +6 -0
  30. package/dist/core/memory-engine/types.d.ts +24 -0
  31. package/dist/core/memory.d.ts +19 -0
  32. package/dist/core/memory.js +12 -0
  33. package/dist/core/remote-env.d.ts +32 -0
  34. package/dist/core/remote-env.js +4 -1
  35. package/dist/core/runner/advertised-writable-dirs.d.ts +59 -1
  36. package/dist/core/runner/advertised-writable-dirs.js +51 -3
  37. package/dist/core/runner/announce-once-ledger.d.ts +15 -0
  38. package/dist/core/runner/announce-once-ledger.js +8 -0
  39. package/dist/core/runner/classifier-ladder.d.ts +5 -0
  40. package/dist/core/runner/classifier-ladder.js +13 -2
  41. package/dist/core/runner/contracts.d.ts +44 -1
  42. package/dist/core/runner/denial-limit-arms.d.ts +14 -1
  43. package/dist/core/runner/denial-limit-arms.js +5 -4
  44. package/dist/core/runner/env-capability-census.d.ts +30 -0
  45. package/dist/core/runner/env-capability-census.js +38 -0
  46. package/dist/core/runner/forward-sink.d.ts +32 -0
  47. package/dist/core/runner/forward-sink.js +41 -0
  48. package/dist/core/runner/gate-exit.d.ts +4 -0
  49. package/dist/core/runner/gate-exit.js +4 -1
  50. package/dist/core/runner/git-status-frame.d.ts +0 -9
  51. package/dist/core/runner/listing-fold.d.ts +57 -0
  52. package/dist/core/runner/listing-fold.js +75 -0
  53. package/dist/core/runner/prepare-execution-env.d.ts +1 -1
  54. package/dist/core/runner/prepare-execution-env.js +2 -0
  55. package/dist/core/runner/prepare-gate-stations.d.ts +6 -0
  56. package/dist/core/runner/prepare-gate-stations.js +1 -3
  57. package/dist/core/runner/prepare-hands-readface.d.ts +4 -0
  58. package/dist/core/runner/prepare-hands-readface.js +3 -5
  59. package/dist/core/runner/prepare-listings.d.ts +3 -0
  60. package/dist/core/runner/prepare-listings.js +4 -2
  61. package/dist/core/runner/prepare-memory.js +7 -1
  62. package/dist/core/runner/prepare-policy-chain.js +5 -5
  63. package/dist/core/runner/prepare-prompt-inputs.d.ts +2 -2
  64. package/dist/core/runner/prepare-run-refs.d.ts +4 -2
  65. package/dist/core/runner/prepare-run-refs.js +5 -4
  66. package/dist/core/runner/prepare-task.js +8 -6
  67. package/dist/core/runner/prepare-wiring-manifest.d.ts +8 -1
  68. package/dist/core/runner/prepare-wiring-manifest.js +5 -2
  69. package/dist/core/runner/run-clock-and-content.js +3 -7
  70. package/dist/core/runner/run-harness-handlers.js +10 -10
  71. package/dist/core/runner/run-leg.js +28 -19
  72. package/dist/core/runner/run-settle-and-teardown.js +2 -5
  73. package/dist/core/runner/run-turn-boundary.js +44 -33
  74. package/dist/core/runner/runtask.js +2 -1
  75. package/dist/core/runner/synthetic-tools.d.ts +13 -39
  76. package/dist/core/runner/synthetic-tools.js +15 -59
  77. package/dist/core/runner/task-root-canonical.d.ts +45 -0
  78. package/dist/core/runner/task-root-canonical.js +18 -0
  79. package/dist/core/runner/turn-attachments.d.ts +125 -49
  80. package/dist/core/runner/turn-attachments.js +124 -66
  81. package/dist/core/runner/write-protection-station.d.ts +59 -0
  82. package/dist/core/runner/write-protection-station.js +32 -0
  83. package/dist/core/safe-notify.d.ts +5 -0
  84. package/dist/core/safe-notify.js +24 -2
  85. package/dist/core/sensitive-path-policy.d.ts +53 -27
  86. package/dist/core/sensitive-path-policy.js +16 -26
  87. package/dist/core/skill-listing-budget.d.ts +34 -40
  88. package/dist/core/skill-listing-budget.js +25 -26
  89. package/dist/core/skills-directory.js +17 -10
  90. package/dist/core/task-registry.js +2 -1
  91. package/dist/core/task-spec.d.ts +8 -7
  92. package/dist/core/tool-policy.d.ts +12 -1
  93. package/dist/core/tool-policy.js +39 -25
  94. package/dist/core/wiring-manifest.d.ts +31 -0
  95. package/dist/core/wiring-manifest.js +1 -0
  96. package/dist/core/write-protect.d.ts +124 -18
  97. package/dist/core/write-protect.js +91 -34
  98. package/dist/index.d.ts +6 -5
  99. package/dist/index.js +6 -5
  100. package/dist/orchestration/workflow-primitives.js +10 -20
  101. package/dist/stores/file/memory-store.d.ts +5 -2
  102. package/dist/stores/file/memory-store.js +8 -4
  103. package/dist/tools/fs/bash-readonly-classifier.d.ts +13 -2
  104. package/dist/tools/fs/bash-readonly-classifier.js +318 -36
  105. package/dist/tools/fs/fs-bash.d.ts +1 -1
  106. package/dist/tools/fs/fs-bash.js +12 -25
  107. package/dist/tools/fs/fs-shared.d.ts +22 -0
  108. package/dist/tools/fs/fs-shared.js +30 -0
  109. package/dist/tools/fs/index.d.ts +1 -1
  110. package/dist/tools/fs/index.js +1 -1
  111. package/package.json +2 -1
  112. package/test/export-surface.snapshot.json +25 -3
  113. package/wire-changes/core@7.20.0.json +568 -0
  114. package/wire-changes/core@7.20.1.json +183 -0
@@ -9,11 +9,11 @@ import { hasBackgroundShell } from "../../core/background-shell.js";
9
9
  import { delimitUntrusted } from "../../core/untrusted-text.js";
10
10
  import { MCP_IMAGE_MAX_BASE64 } from "../../core/mcp.js";
11
11
  import { imageMagicMatches, normalizeAbsPathLexically, withinAnyRoot } from "./safety.js";
12
- import { boundaryIsTheSandbox, hasDestroy, isIsolated } from "../../core/remote-env.js";
12
+ import { boundaryIsTheSandbox, canonicalPathIsAuthoritative, hasDestroy, isIsolated } from "../../core/remote-env.js";
13
13
  import { ghRateLimitHint } from "./gh-rate-limit.js";
14
- import { resolveBashTimeoutCaps, bashTimeoutCapsSec, bashTimeoutArgRefusal, bashTimeoutParamDescription, envErrorDetail, bashMaxOutputChars, clipShellOutput, writeShellOverflowFile, createShellOverflowSpoolFence, shellRecoveryHint, CWD_SENTINEL, BASH_READONLY_CONFINEMENT_NOTE, } from "./fs-shared.js";
14
+ import { resolveBashTimeoutCaps, bashTimeoutCapsSec, bashTimeoutArgRefusal, bashTimeoutParamDescription, envErrorDetail, bashMaxOutputChars, clipShellOutput, writeShellOverflowFile, createShellOverflowSpoolFence, shellRecoveryHint, CWD_SENTINEL, stripCwdSentinel, BASH_READONLY_CONFINEMENT_NOTE, } from "./fs-shared.js";
15
15
  import { PROBE_CAUSE_PATH_MAX, inlineUntrusted } from "../../core/untrusted-text.js";
16
- import { BASH_CLASSIFY_DEFAULT_ALLOW, BASH_READONLY_DEFAULT_ALLOW, coarseReadonlyCheck, classifyBoundedReadonlyPollLoopDetailed, classifyCompoundReadonlyDetailed, classifyOutOfRootReadGate, refusedCommandMayRead, classifySimpleCommandReadBoundary, NOT_AUTO_ALLOWED, } from "./bash-readonly-classifier.js";
16
+ import { bashClassifyDefaultAllow, BASH_READONLY_DEFAULT_ALLOW, coarseReadonlyCheck, classifyBoundedReadonlyPollLoopDetailed, classifyCompoundReadonlyDetailed, classifyOutOfRootReadGate, refusedCommandMayRead, classifySimpleCommandReadBoundary, NOT_AUTO_ALLOWED, } from "./bash-readonly-classifier.js";
17
17
  import { toolFace } from "../../core/tool-catalog-entries.js";
18
18
  const RECURSIVE_CAUSE_MAX_PATHS = 3;
19
19
  const RECURSIVE_READ_CAUSE_CODE = "shell.recursive_read_unbounded";
@@ -25,7 +25,7 @@ function operandFamily(paths) {
25
25
  };
26
26
  }
27
27
  export function bashReversibilityProbe(allow, boundary) {
28
- const allowSet = new Set(allow ?? BASH_CLASSIFY_DEFAULT_ALLOW);
28
+ const allowSet = new Set(allow ?? bashClassifyDefaultAllow());
29
29
  return (args) => {
30
30
  const command = shellCommandOf(args);
31
31
  if (command === undefined)
@@ -109,7 +109,7 @@ function recursiveReadCause(detailed) {
109
109
  };
110
110
  }
111
111
  export function bashReadBoundaryProbe(boundary) {
112
- const allowSet = new Set(BASH_CLASSIFY_DEFAULT_ALLOW);
112
+ const allowSet = new Set(bashClassifyDefaultAllow());
113
113
  return (args) => {
114
114
  const command = shellCommandOf(args);
115
115
  if (command === undefined)
@@ -402,23 +402,6 @@ function createEpilogueFilter(marker) {
402
402
  return out + buf;
403
403
  };
404
404
  }
405
- function readCwdEpilogue(stderr, marker) {
406
- let out = "";
407
- let rest = stderr;
408
- let cwd;
409
- for (;;) {
410
- const open = rest.indexOf(marker);
411
- if (open === -1)
412
- break;
413
- const close = rest.indexOf(marker, open + marker.length);
414
- if (close === -1)
415
- break;
416
- out += rest.slice(0, open);
417
- cwd = rest.slice(open + marker.length, close);
418
- rest = rest.slice(close + marker.length);
419
- }
420
- return { stderr: out + rest, cwd };
421
- }
422
405
  function describeSafely(sink, body) {
423
406
  if (sink === undefined)
424
407
  return;
@@ -582,7 +565,7 @@ async function runShell(env, cwd, toolName, command, timeoutSec, caps, signal, c
582
565
  let { stderr } = res.value;
583
566
  const { stdout, exitCode } = res.value;
584
567
  if (cwdRef) {
585
- const epilogue = readCwdEpilogue(stderr, cwdMarker);
568
+ const epilogue = stripCwdSentinel(stderr, cwdMarker);
586
569
  stderr = epilogue.stderr;
587
570
  if (epilogue.cwd !== undefined) {
588
571
  const captured = epilogue.cwd.trim();
@@ -736,7 +719,7 @@ export function createBashTool(env, rootCanonical, coAuthor = false, cwdRef = {
736
719
  const bgRetained = hasBackgroundShell(env) && env.backgroundCapabilities.retainBackgroundProcesses === true;
737
720
  const bgSessionScoped = taskOpts.sessionId !== undefined && taskOpts.taskRegistry !== undefined;
738
721
  const bgEnvIsolatedOwned = hasDestroy(env) && isIsolated(env);
739
- const recheckReaders = new Set(BASH_CLASSIFY_DEFAULT_ALLOW);
722
+ const recheckReaders = new Set(bashClassifyDefaultAllow());
740
723
  let canonicalForRoots;
741
724
  const canonicalBoundaryFor = (roots) => {
742
725
  const key = roots.join("\u0000");
@@ -1070,6 +1053,7 @@ function pathSegmentsFrom(p, from) {
1070
1053
  }
1071
1054
  function createCanonicalReadBoundary(env, readRoots) {
1072
1055
  const lexicalOnly = boundaryIsTheSandbox(env);
1056
+ const resolverIsAuthoritative = canonicalPathIsAuthoritative(env);
1073
1057
  let rootsOnce;
1074
1058
  const canonicalRoots = async (signal) => {
1075
1059
  rootsOnce ??= (async () => {
@@ -1229,8 +1213,11 @@ function createCanonicalReadBoundary(env, readRoots) {
1229
1213
  let unresolvable;
1230
1214
  const judge = async (p) => {
1231
1215
  const real = await resolve(p, signal);
1232
- if (real === undefined)
1216
+ if (real === undefined) {
1217
+ if (resolverIsAuthoritative)
1218
+ unresolvable ??= `"${p}" cannot be resolved to verify where it reads`;
1233
1219
  return;
1220
+ }
1234
1221
  if (!real.exact && real.missing !== true) {
1235
1222
  unresolvable ??= `"${p}" cannot be resolved to verify where it reads`;
1236
1223
  return;
@@ -361,6 +361,28 @@ export declare function shellRecoveryHint(path: string, readOnly: boolean | unde
361
361
  * (NOT NotebookEdit — CC ships it without the trailer). */
362
362
  export declare const FILE_STATE_TRAILER = " (file state is current in your context \u2014 no need to Read it back)";
363
363
  export declare const CWD_SENTINEL = "__cc_cwd_9f2c1b__";
364
+ /**
365
+ * Take the engine's own cwd epilogue out of a finished stderr, and report the working directory the
366
+ * command left behind (the payload of the LAST span).
367
+ *
368
+ * EVERY span, and the LAST one — not the first, and not just one. A command that turns on shell tracing
369
+ * produces more than one (the shell echoes the epilogue's own source, marker and all, before running
370
+ * it), and under a one-pair rule the FIRST pair was that echo, whose payload is the unexpanded
371
+ * `' "$(pwd)" '`; a `cd` that plainly worked was then dropped while the real record stayed in the stderr
372
+ * a person reads. An opener with no close is NOT ours to eat — the command's own text is left exactly
373
+ * as it arrived.
374
+ *
375
+ * TWO CALLERS, ONE RULE, which is why the marker is optional. The foreground result path KNOWS the
376
+ * marker it minted and passes it (exact, unambiguous). A backgrounded command's spool is assembled by a
377
+ * different lane entirely — the shell row outlives the run that launched it and never had the marker —
378
+ * so it passes none and the marker is recovered per span from the sentinel plus its hex suffix. Before
379
+ * this was shared, only the foreground path stripped, and the completion notification handed a person
380
+ * the raw internal marker with the directory inside it.
381
+ */
382
+ export declare function stripCwdSentinel(stderr: string, marker?: string): {
383
+ stderr: string;
384
+ cwd: string | undefined;
385
+ };
364
386
  /** Convert a model-supplied millisecond timeout to our internal seconds, clamped. Exported for the
365
387
  * cc-parity unit (model sees ms, internal stays seconds — no ×1000 error).
366
388
  * ⚠️ This returns the EFFECTIVE budget, not the request — capping at a call site destroys the
@@ -247,6 +247,36 @@ export function shellRecoveryHint(path, readOnly) {
247
247
  }
248
248
  export const FILE_STATE_TRAILER = " (file state is current in your context — no need to Read it back)";
249
249
  export const CWD_SENTINEL = "__cc_cwd_9f2c1b__";
250
+ const CWD_SENTINEL_SUFFIX_CHARS = 16;
251
+ function cwdMarkerAt(text, open) {
252
+ const after = open + CWD_SENTINEL.length;
253
+ const suffix = /^[0-9a-f]{16}/.exec(text.slice(after, after + CWD_SENTINEL_SUFFIX_CHARS));
254
+ return suffix === null ? undefined : CWD_SENTINEL + suffix[0];
255
+ }
256
+ export function stripCwdSentinel(stderr, marker) {
257
+ let out = "";
258
+ let rest = stderr;
259
+ let cwd;
260
+ let from = 0;
261
+ for (;;) {
262
+ const open = rest.indexOf(marker ?? CWD_SENTINEL, from);
263
+ if (open === -1)
264
+ break;
265
+ const span = marker ?? cwdMarkerAt(rest, open);
266
+ if (span === undefined) {
267
+ from = open + CWD_SENTINEL.length;
268
+ continue;
269
+ }
270
+ const close = rest.indexOf(span, open + span.length);
271
+ if (close === -1)
272
+ break;
273
+ out += rest.slice(0, open);
274
+ cwd = rest.slice(open + span.length, close);
275
+ rest = rest.slice(close + span.length);
276
+ from = 0;
277
+ }
278
+ return { stderr: out + rest, cwd };
279
+ }
250
280
  export function msTimeoutToSec(timeoutMs, caps = resolveBashTimeoutCaps()) {
251
281
  const { defaultSec, maxSec } = bashTimeoutCapsSec(caps);
252
282
  if (timeoutMs === undefined || !Number.isFinite(timeoutMs))
@@ -12,7 +12,7 @@ export * from "./bash-readonly-classifier.js";
12
12
  export * from "./fs-bash.js";
13
13
  export * from "./read-deny.js";
14
14
  import { type BashReadonlyRootBoundary } from "./bash-readonly-classifier.js";
15
- export { BASH_CLASSIFY_DEFAULT_ALLOW } from "./bash-readonly-classifier.js";
15
+ export { BASH_CLASSIFY_EXTRA_ALLOW, bashClassifyDefaultAllow } from "./bash-readonly-classifier.js";
16
16
  import { type ReadDenyEntry } from "./read-deny.js";
17
17
  import { type ContainmentFace } from "./containment-face.js";
18
18
  export * from "./containment-face.js";
@@ -12,7 +12,7 @@ export * from "./bash-readonly-classifier.js";
12
12
  export * from "./fs-bash.js";
13
13
  export * from "./read-deny.js";
14
14
  import { BASH_READONLY_DEFAULT_ALLOW, } from "./bash-readonly-classifier.js";
15
- export { BASH_CLASSIFY_DEFAULT_ALLOW } from "./bash-readonly-classifier.js";
15
+ export { BASH_CLASSIFY_EXTRA_ALLOW, bashClassifyDefaultAllow } from "./bash-readonly-classifier.js";
16
16
  import { compileReadDeny } from "./read-deny.js";
17
17
  import { deploymentFaceClampNotice, resolveContainmentFace } from "./containment-face.js";
18
18
  export * from "./containment-face.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.19.0",
3
+ "version": "7.20.1",
4
4
  "description": "Stateless, task-oriented AI agent core",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -84,6 +84,7 @@
84
84
  "gate:tool-names": "node scripts/verify-tool-name-tables.mjs",
85
85
  "gate:tool-docs": "node scripts/gen-tool-spec-fields.mjs --check",
86
86
  "gate:backlog-ledger": "node scripts/verify-backlog-ledger.mjs",
87
+ "gate:child-clamp-seats": "node scripts/verify-child-clamp-seats.mjs",
87
88
  "gate:docs-tool-names": "node scripts/verify-docs-tool-names.mjs",
88
89
  "gate:comment-ratio": "vitest run test/comment-ratio-ratchet.test.ts",
89
90
  "gate:negative-controls": "vitest run test/gate-negative-controls.test.ts",
@@ -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": 2378,
4
+ "count": 2389,
5
5
  "exports": {
6
6
  "A2ATaskState": "type",
7
7
  "A2ATaskStateReversal": "type",
@@ -270,6 +270,7 @@
270
270
  "CheckpointToken": "type",
271
271
  "CircuitBreakerOptions": "interface",
272
272
  "ClassifierDenyCause": "type",
273
+ "ClassifierSeat": "type",
273
274
  "CleanArmLeakFinding": "interface",
274
275
  "CleanArmLeakVerdict": "interface",
275
276
  "CleanMemoryIndexRow": "interface",
@@ -748,6 +749,7 @@
748
749
  "MemoryNoteRecord": "interface",
749
750
  "MemoryNoteType": "type",
750
751
  "MemoryOriginCause": "type",
752
+ "MemoryProjectionError": "class",
751
753
  "MemoryPromptArtifactStore": "class",
752
754
  "MemoryPromptSourceStateStore": "class",
753
755
  "MemoryReadDetails": "type",
@@ -1051,7 +1053,6 @@
1051
1053
  "REAL_APPROVAL_CHECKPOINT_VERSION": "variable",
1052
1054
  "REASONING_BUDGET_SHARE": "variable",
1053
1055
  "RECALL_CAVEAT": "variable",
1054
- "RECOMMENDED_SENSITIVE_ASK_PATTERNS": "variable",
1055
1056
  "RECOMMENDED_SENSITIVE_PATTERNS": "variable",
1056
1057
  "REMOTE_HARVEST_PER_FILE_BYTES": "variable",
1057
1058
  "REMOTE_MASS_DELETION_FUSE_RATIO": "variable",
@@ -1539,7 +1540,9 @@
1539
1540
  "WORKFLOW_SUBAGENT_PROMPT": "variable",
1540
1541
  "WORKFLOW_SUBAGENT_PROMPT_SCHEMA": "variable",
1541
1542
  "WORKTREE_PARENT": "variable",
1543
+ "WRITE_EXEMPT_DIR_COVERS_ROOT_CODE": "variable",
1542
1544
  "WRITE_PROTECTED_DEFAULT_TABLE": "variable",
1545
+ "WRITE_PROTECTION_TARGET_VIEWS": "variable",
1543
1546
  "WebFetchConfig": "interface",
1544
1547
  "WebSearchConfig": "interface",
1545
1548
  "Win32NamespaceRefusal": "type",
@@ -1601,7 +1604,13 @@
1601
1604
  "WriteProtectedHit": "interface",
1602
1605
  "WriteProtectedKind": "type",
1603
1606
  "WriteProtectedRow": "interface",
1607
+ "WriteProtectionCheck": "type",
1608
+ "WriteProtectionCompileOptions": "interface",
1609
+ "WriteProtectionJudgeContext": "interface",
1604
1610
  "WriteProtectionMatcher": "interface",
1611
+ "WriteProtectionMount": "interface",
1612
+ "WriteProtectionTargetView": "type",
1613
+ "WriteProtectionVerdict": "type",
1605
1614
  "WriteReceipt": "interface",
1606
1615
  "XARGS_READ_ONLY_TARGETS": "variable",
1607
1616
  "ackAdoptionConfig": "function",
@@ -1682,6 +1691,7 @@
1682
1691
  "callKeyOrdinal": "function",
1683
1692
  "canAccessAgentRecord": "function",
1684
1693
  "canAccessWorkflowRun": "function",
1694
+ "canonicalPathIsAuthoritative": "function",
1685
1695
  "canonicalPeerDisplayName": "function",
1686
1696
  "canonicalWorkflowName": "function",
1687
1697
  "capAggregateMediaBytes": "function",
@@ -1704,6 +1714,7 @@
1704
1714
  "clampHopChain": "function",
1705
1715
  "classifierMayAnswer": "function",
1706
1716
  "classifierParseFailureDenyMessage": "function",
1717
+ "classifierSeatModel": "function",
1707
1718
  "classifierUnavailableDenyMessage": "function",
1708
1719
  "classifyCompoundReadonly": "function",
1709
1720
  "classifyCompoundReadonlyDetailed": "function",
@@ -2650,6 +2661,7 @@
2650
2661
  "CheckpointToken": "stable",
2651
2662
  "CircuitBreakerOptions": "advanced",
2652
2663
  "ClassifierDenyCause": "advanced",
2664
+ "ClassifierSeat": "internal",
2653
2665
  "CleanArmLeakFinding": "advanced",
2654
2666
  "CleanArmLeakVerdict": "advanced",
2655
2667
  "CleanMemoryIndexRow": "advanced",
@@ -3128,6 +3140,7 @@
3128
3140
  "MemoryNoteRecord": "stable",
3129
3141
  "MemoryNoteType": "advanced",
3130
3142
  "MemoryOriginCause": "advanced",
3143
+ "MemoryProjectionError": "advanced",
3131
3144
  "MemoryPromptArtifactStore": "advanced",
3132
3145
  "MemoryPromptSourceStateStore": "advanced",
3133
3146
  "MemoryReadDetails": "advanced",
@@ -3431,7 +3444,6 @@
3431
3444
  "REAL_APPROVAL_CHECKPOINT_VERSION": "advanced",
3432
3445
  "REASONING_BUDGET_SHARE": "advanced",
3433
3446
  "RECALL_CAVEAT": "advanced",
3434
- "RECOMMENDED_SENSITIVE_ASK_PATTERNS": "advanced",
3435
3447
  "RECOMMENDED_SENSITIVE_PATTERNS": "advanced",
3436
3448
  "REMOTE_HARVEST_PER_FILE_BYTES": "advanced",
3437
3449
  "REMOTE_MASS_DELETION_FUSE_RATIO": "advanced",
@@ -3919,7 +3931,9 @@
3919
3931
  "WORKFLOW_SUBAGENT_PROMPT": "advanced",
3920
3932
  "WORKFLOW_SUBAGENT_PROMPT_SCHEMA": "advanced",
3921
3933
  "WORKTREE_PARENT": "advanced",
3934
+ "WRITE_EXEMPT_DIR_COVERS_ROOT_CODE": "advanced",
3922
3935
  "WRITE_PROTECTED_DEFAULT_TABLE": "advanced",
3936
+ "WRITE_PROTECTION_TARGET_VIEWS": "advanced",
3923
3937
  "WebFetchConfig": "advanced",
3924
3938
  "WebSearchConfig": "advanced",
3925
3939
  "Win32NamespaceRefusal": "advanced",
@@ -3981,7 +3995,13 @@
3981
3995
  "WriteProtectedHit": "advanced",
3982
3996
  "WriteProtectedKind": "advanced",
3983
3997
  "WriteProtectedRow": "advanced",
3998
+ "WriteProtectionCheck": "advanced",
3999
+ "WriteProtectionCompileOptions": "advanced",
4000
+ "WriteProtectionJudgeContext": "advanced",
3984
4001
  "WriteProtectionMatcher": "advanced",
4002
+ "WriteProtectionMount": "advanced",
4003
+ "WriteProtectionTargetView": "advanced",
4004
+ "WriteProtectionVerdict": "advanced",
3985
4005
  "WriteReceipt": "internal",
3986
4006
  "XARGS_READ_ONLY_TARGETS": "advanced",
3987
4007
  "ackAdoptionConfig": "advanced",
@@ -4062,6 +4082,7 @@
4062
4082
  "callKeyOrdinal": "advanced",
4063
4083
  "canAccessAgentRecord": "advanced",
4064
4084
  "canAccessWorkflowRun": "advanced",
4085
+ "canonicalPathIsAuthoritative": "advanced",
4065
4086
  "canonicalPeerDisplayName": "advanced",
4066
4087
  "canonicalWorkflowName": "advanced",
4067
4088
  "capAggregateMediaBytes": "advanced",
@@ -4084,6 +4105,7 @@
4084
4105
  "clampHopChain": "advanced",
4085
4106
  "classifierMayAnswer": "advanced",
4086
4107
  "classifierParseFailureDenyMessage": "advanced",
4108
+ "classifierSeatModel": "internal",
4087
4109
  "classifierUnavailableDenyMessage": "advanced",
4088
4110
  "classifyCompoundReadonly": "advanced",
4089
4111
  "classifyCompoundReadonlyDetailed": "advanced",