@sema-agent/core 7.8.0 → 7.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/CHANGELOG.md +52 -1
  2. package/dist/agents/subagent.d.ts +1 -1
  3. package/dist/core/ask-origin.d.ts +12 -1
  4. package/dist/core/ask-origin.js +5 -1
  5. package/dist/core/checkpoint-store.d.ts +34 -28
  6. package/dist/core/gate-lanes.js +49 -23
  7. package/dist/core/gate-outcome.d.ts +8 -4
  8. package/dist/core/gate-outcome.js +2 -1
  9. package/dist/core/hooks.d.ts +56 -31
  10. package/dist/core/permission-rule-consent.d.ts +29 -36
  11. package/dist/core/permission-rule-consent.js +110 -60
  12. package/dist/core/permission-rule-model.d.ts +254 -55
  13. package/dist/core/permission-rule-model.js +323 -43
  14. package/dist/core/permission-rule-org.d.ts +9 -8
  15. package/dist/core/permission-rule-org.js +6 -15
  16. package/dist/core/permission-rule-provider.d.ts +10 -6
  17. package/dist/core/permission-rule-provider.js +12 -8
  18. package/dist/core/permission-rule-session.d.ts +7 -6
  19. package/dist/core/permission-rule-session.js +29 -10
  20. package/dist/core/permission-rule-store.d.ts +40 -18
  21. package/dist/core/permission-rule-store.js +68 -42
  22. package/dist/core/permission-rule-sync.d.ts +9 -3
  23. package/dist/core/permission-rule-sync.js +29 -25
  24. package/dist/core/permission-rule-syntax.d.ts +30 -0
  25. package/dist/core/permission-rule-syntax.js +44 -0
  26. package/dist/core/permission-rules.d.ts +55 -33
  27. package/dist/core/permission-rules.js +65 -55
  28. package/dist/core/persisted-rule-arms.d.ts +56 -0
  29. package/dist/core/persisted-rule-arms.js +48 -0
  30. package/dist/core/runner/contracts.d.ts +21 -2
  31. package/dist/core/runner/permission-rule-lanes.d.ts +33 -26
  32. package/dist/core/runner/permission-rule-lanes.js +27 -21
  33. package/dist/core/runner/prepare-gate-stations.js +1 -1
  34. package/dist/core/runner/prepare-safety-scan.js +8 -2
  35. package/dist/core/runner/prepare-task.js +1 -1
  36. package/dist/core/runner/resume-admission.d.ts +53 -0
  37. package/dist/core/runner/resume-admission.js +83 -0
  38. package/dist/core/runner/resume-apply.d.ts +50 -0
  39. package/dist/core/runner/resume-apply.js +184 -0
  40. package/dist/core/runner/resume-checkpoint-screen.d.ts +18 -0
  41. package/dist/core/runner/resume-checkpoint-screen.js +108 -0
  42. package/dist/core/runner/resume-claim.d.ts +32 -0
  43. package/dist/core/runner/resume-claim.js +27 -0
  44. package/dist/core/runner/resume-internals-and-config.d.ts +33 -0
  45. package/dist/core/runner/resume-internals-and-config.js +50 -0
  46. package/dist/core/runner/resume-policy-outcome.d.ts +31 -0
  47. package/dist/core/runner/resume-policy-outcome.js +127 -0
  48. package/dist/core/runner/resume-preflight.d.ts +40 -0
  49. package/dist/core/runner/resume-preflight.js +122 -0
  50. package/dist/core/runner/resume-review-outcome.d.ts +30 -0
  51. package/dist/core/runner/resume-review-outcome.js +88 -0
  52. package/dist/core/runner/run-harness-handlers.js +1 -1
  53. package/dist/core/runner/runtask.d.ts +20 -0
  54. package/dist/core/runner/runtask.js +85 -734
  55. package/dist/core/runner/tool-end-body.d.ts +12 -5
  56. package/dist/core/runner/tool-end-body.js +5 -5
  57. package/dist/core/runner/tool-output-projection.d.ts +9 -6
  58. package/dist/core/runner/tool-output-projection.js +1 -18
  59. package/dist/core/runner/turn-attachments.d.ts +2 -2
  60. package/dist/core/store-contracts/permission-rule-sync-contract.js +29 -10
  61. package/dist/core/tool-roster.d.ts +9 -0
  62. package/dist/core/tool-roster.js +15 -5
  63. package/dist/index.d.ts +2 -2
  64. package/dist/index.js +2 -2
  65. package/dist/stores/file/checkpoint-store.js +1 -1
  66. package/dist/stores/file/permission-rule-store.d.ts +28 -23
  67. package/dist/stores/file/permission-rule-store.js +64 -16
  68. package/dist/tools/fs/bash-readonly-classifier.d.ts +1 -1
  69. package/dist/tools/fs/fs-pdf.d.ts +1 -1
  70. package/dist/tools/fs/notebook.d.ts +1 -1
  71. package/dist/tools/fs/safety.d.ts +1 -1
  72. package/package.json +1 -1
  73. package/test/export-surface.snapshot.json +43 -11
@@ -1,17 +1,18 @@
1
1
  import { closeSync, constants as FS, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { createHash, randomBytes } from "node:crypto";
4
+ import { isRuleBehavior, readRowBehavior } from "../../core/permission-rule-model.js";
4
5
  import { PERMISSION_RULE_WRITER, applySyncJoin, applyTombstones, assertDeleteDeltaCarriesNoAdd, assertRedemptionNotQuarantined, assertWriteDeltaScopeDurable, foldDelta, } from "../../core/permission-rule-store.js";
5
6
  import { canonicalize } from "../../core/canonical-json.js";
6
7
  import { BootLock } from "./fs-atomic.js";
7
8
  import { assertAdoptionBootGate } from "./adoption/marker.js";
8
9
  function isRuleFile(v) {
9
10
  const p = v;
10
- return typeof p === "object" && p !== null && p.schemaVersion === 3 && Array.isArray(p.rules) && Array.isArray(p.tombstones) && typeof p.rev === "number" && (p.quarantined === undefined || Array.isArray(p.quarantined));
11
+ return typeof p === "object" && p !== null && p.schemaVersion === 4 && Array.isArray(p.rules) && Array.isArray(p.tombstones) && typeof p.rev === "number" && (p.quarantined === undefined || Array.isArray(p.quarantined));
11
12
  }
12
- function isLegacyRuleFile(v) {
13
+ function isOlderRuleFile(v) {
13
14
  const p = v;
14
- return typeof p === "object" && p !== null && (p.schemaVersion === 1 || p.schemaVersion === 2) && Array.isArray(p.rules) && Array.isArray(p.tombstones) && typeof p.rev === "number";
15
+ return typeof p === "object" && p !== null && (p.schemaVersion === 1 || p.schemaVersion === 2 || p.schemaVersion === 3) && Array.isArray(p.rules) && Array.isArray(p.tombstones) && typeof p.rev === "number";
15
16
  }
16
17
  function isOrgStateFile(v) {
17
18
  const p = v;
@@ -24,7 +25,7 @@ function jsonForm(v) {
24
25
  return JSON.parse(JSON.stringify(v));
25
26
  }
26
27
  export const ORG_STATE_FILE = "org.json";
27
- export const SCHEMA3_MARKER_FILE = ".rule-schema-3";
28
+ export const SCHEMA_MARKER_FILE = ".rule-schema-4";
28
29
  export class OrgRevisionRefusal extends Error {
29
30
  }
30
31
  const LOCAL_OWNER_FILE = "local-owner.json";
@@ -158,8 +159,8 @@ class FileDurableRulePartition {
158
159
  }
159
160
  if (!isRuleFile(parsed)) {
160
161
  const sv = schemaVersionWord(parsed);
161
- const why = sv === 1 || sv === 2
162
- ? `${this.file} is a schema ${String(sv)} bucket that was not migrated to schema 3 (written by an older engine after this directory was migrated?); refusing the whole file and loading zero rules`
162
+ const why = sv === 1 || sv === 2 || sv === 3
163
+ ? `${this.file} is a schema ${String(sv)} bucket that was not migrated to schema 4 (written by an older engine after this directory was migrated?); refusing the whole file and loading zero rules`
163
164
  : `${this.file} does not carry a readable rule-file shape; refusing the whole file and loading zero rules`;
164
165
  this.disclose(why);
165
166
  return { unreadable: why };
@@ -170,6 +171,19 @@ class FileDurableRulePartition {
170
171
  this.disclose(why);
171
172
  return { unreadable: why };
172
173
  }
174
+ const rowKinds = [
175
+ ["rule", parsed.rules],
176
+ ["tombstone", parsed.tombstones],
177
+ ["quarantined", parsed.quarantined ?? []],
178
+ ];
179
+ for (const [kind, rows] of rowKinds) {
180
+ const bad = rows.findIndex((r) => !isRuleBehavior(r?.behavior));
181
+ if (bad !== -1) {
182
+ const why = `${this.file} carries a ${kind} row (#${bad}) whose behavior word is outside deny/ask/allow — a schema 4 row must name its behavior; refusing the whole file and loading zero rules`;
183
+ this.disclose(why);
184
+ return { unreadable: why };
185
+ }
186
+ }
173
187
  return { file: parsed };
174
188
  }
175
189
  disclose(message) {
@@ -218,7 +232,7 @@ class FileDurableRulePartition {
218
232
  throw new Error(`refusing to write the permission-rule store while it cannot be read: ${r.unreadable}`);
219
233
  }
220
234
  if ("absent" in r) {
221
- return { schemaVersion: 3, actor: `file-${randomBytes(6).toString("hex")}`, counter: 0, rev: 0, rules: [], tombstones: [] };
235
+ return { schemaVersion: 4, actor: `file-${randomBytes(6).toString("hex")}`, counter: 0, rev: 0, rules: [], tombstones: [] };
222
236
  }
223
237
  return {
224
238
  schemaVersion: r.file.schemaVersion,
@@ -324,7 +338,7 @@ export class FileDurableRulePartitionProvider {
324
338
  migrateLegacyBuckets() {
325
339
  if (!existsSync(this.dir))
326
340
  return;
327
- if (existsSync(join(this.dir, SCHEMA3_MARKER_FILE)))
341
+ if (existsSync(join(this.dir, SCHEMA_MARKER_FILE)))
328
342
  return;
329
343
  try {
330
344
  assertSafeDir(this.dir);
@@ -359,7 +373,7 @@ export class FileDurableRulePartitionProvider {
359
373
  legacy.push({ name, file: read });
360
374
  }
361
375
  if (legacy.length === 0) {
362
- this.writeSchema3Marker();
376
+ this.writeSchemaMarker();
363
377
  return;
364
378
  }
365
379
  const orgHome = this.fileOrgPersistence();
@@ -380,12 +394,18 @@ export class FileDurableRulePartitionProvider {
380
394
  }
381
395
  }
382
396
  }
383
- const next = { ...rest, schemaVersion: 3 };
397
+ const stamped = stampRowBehaviors(rest);
398
+ if (stamped === undefined) {
399
+ complete = false;
400
+ this.onError?.(`bucket ${name} left untouched: a row carries a behavior word outside deny/ask/allow, which no engine version wrote; the file is not migrated`);
401
+ continue;
402
+ }
403
+ const next = { ...stamped, schemaVersion: 4 };
384
404
  atomicPublish(this.dir, join(this.dir, name), JSON.stringify({ ...next, checksum: checksumOf(next) }, null, 2));
385
- this.onError?.(`migrated ${name} to rule-file schema 3${org !== undefined ? ` (its org block moved to ${ORG_STATE_FILE})` : ""}`);
405
+ this.onError?.(`migrated ${name} to rule-file schema 4${org !== undefined ? ` (its org block moved to ${ORG_STATE_FILE})` : ""}`);
386
406
  }
387
407
  if (complete)
388
- this.writeSchema3Marker();
408
+ this.writeSchemaMarker();
389
409
  }
390
410
  finally {
391
411
  if (!held) {
@@ -394,12 +414,12 @@ export class FileDurableRulePartitionProvider {
394
414
  }
395
415
  }
396
416
  }
397
- writeSchema3Marker() {
417
+ writeSchemaMarker() {
398
418
  try {
399
- atomicPublish(this.dir, join(this.dir, SCHEMA3_MARKER_FILE), JSON.stringify({ schemaVersion: 3 }));
419
+ atomicPublish(this.dir, join(this.dir, SCHEMA_MARKER_FILE), JSON.stringify({ schemaVersion: 4 }));
400
420
  }
401
421
  catch (err) {
402
- this.onError?.(`could not write ${SCHEMA3_MARKER_FILE}: ${err.message}; the legacy scan will run again next construction`);
422
+ this.onError?.(`could not write ${SCHEMA_MARKER_FILE}: ${err.message}; the legacy scan will run again next construction`);
403
423
  }
404
424
  }
405
425
  orgStatePersistence() {
@@ -449,6 +469,34 @@ export class FileDurableRulePartitionProvider {
449
469
  this.lock = undefined;
450
470
  }
451
471
  }
472
+ function stampRowBehaviors(body) {
473
+ const rules = [];
474
+ for (const r of body.rules) {
475
+ const behavior = readRowBehavior(r.behavior);
476
+ if (behavior === undefined)
477
+ return undefined;
478
+ rules.push({ ...r, behavior });
479
+ }
480
+ const tombstones = [];
481
+ for (const t of body.tombstones) {
482
+ const behavior = readRowBehavior(t.behavior);
483
+ if (behavior === undefined)
484
+ return undefined;
485
+ tombstones.push({ ...t, behavior });
486
+ }
487
+ let quarantined;
488
+ if (body.quarantined !== undefined) {
489
+ quarantined = [];
490
+ for (const q of body.quarantined) {
491
+ const behavior = readRowBehavior(q.behavior);
492
+ if (behavior === undefined)
493
+ return undefined;
494
+ quarantined.push({ ...q, behavior });
495
+ }
496
+ }
497
+ const { rules: _r, tombstones: _t, quarantined: _q, ...rest } = body;
498
+ return { ...rest, rules, tombstones, ...(quarantined !== undefined ? { quarantined } : {}) };
499
+ }
452
500
  function readLegacyBucket(file) {
453
501
  let raw;
454
502
  try {
@@ -467,7 +515,7 @@ function readLegacyBucket(file) {
467
515
  catch {
468
516
  return undefined;
469
517
  }
470
- if (!isLegacyRuleFile(parsed))
518
+ if (!isOlderRuleFile(parsed))
471
519
  return undefined;
472
520
  const { checksum, ...body } = parsed;
473
521
  return checksum === checksumOf(body) ? parsed : undefined;
@@ -80,7 +80,7 @@ export interface LeadingCommandNameOptions {
80
80
  * name instead of refusing it.
81
81
  *
82
82
  * OPT-IN, and used by ONE family of callers: the persisted permission-RULE lane
83
- * ({@link import("../../core/permission-rule-model.js").parseAllowRuleText} and its matcher), where
83
+ * ({@link import("../../core/permission-rule-model.js").parseRuleText} and its matcher), where
84
84
  * both sides of the comparison are literal text a person read on an approval card. The refusal this
85
85
  * option lifts exists for the argv[0]-NAME filters (the read-only allowlist, the coarse
86
86
  * command-name policy, the skill specifier): those compare a bare token against a name set, and a
@@ -29,7 +29,7 @@ type ReadPdfReturn = string | {
29
29
  * downsampler seam then applies the same pipeline as the Read image branch). poppler absent → HONEST
30
30
  * degradation with the working alternative, never a fake success.
31
31
  * Wire discipline: the base64 payload rides `details.file` only while ≤48K chars (same OMIT rule as the
32
- * image variant — a bigger card would be dropped whole by the structuredFrom 4×cap and blind the shell).
32
+ * image variant — a bigger card would be dropped whole by the card projector's 4×cap and blind the shell).
33
33
  * structured-card audit item B (2026-08-05): that budget management assumed `"document"` was on `CC_DETAIL_TYPES`, which
34
34
  * it was not — every `document` card, sized or not, was dropped at the gate, making the 48K rule dead
35
35
  * code and the pages/fallback-level disclosure invisible to a host. The word is registered now.
@@ -92,5 +92,5 @@ export interface NotebookRender {
92
92
  export declare function renderNotebookCells(cells: readonly NotebookCell[], imageBase64Budget: number): NotebookRender;
93
93
  /** Wire-card projection of a cell: base64 replaced by a length marker so the `details` card never
94
94
  * carries raw image bytes (they ride the model-facing content blocks; an oversized card would be
95
- * omitted whole by the structuredFrom 4×cap and blind the shell). */
95
+ * omitted whole by the card projector's 4×cap and blind the shell). */
96
96
  export declare function stripNotebookImageData(cell: NotebookCell): NotebookCell;
@@ -321,7 +321,7 @@ export declare function violationText(toolName: string, v: FsViolation): string;
321
321
  * every renderer of a {@link resolveKey} violation — `undefined` keeps the pre-existing detail-less
322
322
  * shape for all other violation codes, so nothing else changes byte-wise.
323
323
  *
324
- * RB-397-c (回溯复查批): `type` is the WIRE discriminator — `structuredFrom`'s `CC_DETAIL_TYPES` gate
324
+ * RB-397-c (回溯复查批): `type` is the WIRE discriminator — the leg's card projector (`createStructuredProjector`, design/388 L4)
325
325
  * (tool-output-projection.ts) keys on `details.type`, so without it the card never reached
326
326
  * `tool_end.structured` and the "count from fields" promise above held for in-process readers only.
327
327
  * `code` stays as-is for the existing RB-371 consumers — the new key is strictly additive.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.8.0",
3
+ "version": "7.9.0",
4
4
  "description": "Stateless, task-oriented AI agent core",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -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": 2190,
4
+ "count": 2206,
5
5
  "exports": {
6
6
  "A2ATaskState": "type",
7
7
  "A2ATaskStateReversal": "type",
@@ -154,6 +154,7 @@
154
154
  "CODE_REVIEW_PROMPT": "variable",
155
155
  "CODE_ROLE": "variable",
156
156
  "CODE_SYSTEM_PROMPT": "variable",
157
+ "COMMAND_RULE_TOOL": "variable",
157
158
  "COMPLIANCE_CAPABILITIES": "variable",
158
159
  "CONFIG_CATALOG_VERSION": "variable",
159
160
  "CONSOLIDATION_DEFAULTS": "variable",
@@ -806,11 +807,12 @@
806
807
  "ParkProbeFindingCode": "type",
807
808
  "ParkSelfCheckResult": "interface",
808
809
  "ParkedClaimTicket": "interface",
809
- "ParsedAllowRule": "interface",
810
810
  "ParsedEntryFile": "interface",
811
811
  "ParsedPermissionRule": "interface",
812
+ "ParsedRule": "interface",
812
813
  "ParsedScopeKey": "type",
813
814
  "PatchReport": "interface",
815
+ "PathRuleBases": "interface",
814
816
  "PausedCause": "type",
815
817
  "PeerAdmission": "interface",
816
818
  "PeerAdmissionConfig": "interface",
@@ -882,8 +884,8 @@
882
884
  "PermissionRuleSyncResult": "interface",
883
885
  "PermissionRuleSyncTransport": "type",
884
886
  "PermissionRuleWriter": "interface",
885
- "PersistedAllowRule": "interface",
886
887
  "PersistedOrgRuleState": "interface",
888
+ "PersistedRule": "interface",
887
889
  "PersistedRuleAnswer": "type",
888
890
  "PersistedRuleCoverage": "interface",
889
891
  "PersistedRuleHit": "interface",
@@ -891,6 +893,7 @@
891
893
  "PersistedRuleMatch": "type",
892
894
  "PersistedRuleTool": "type",
893
895
  "PersistedRuleUnreadable": "interface",
896
+ "PersistedRuleVerdict": "interface",
894
897
  "PlacedSessionRow": "type",
895
898
  "PlanParseRepairs": "interface",
896
899
  "PlatformLimitReason": "type",
@@ -947,6 +950,7 @@
947
950
  "READ_DENY_DEFAULT_TIERS": "variable",
948
951
  "READ_FACE_BUILTIN_DENY_TABLE": "variable",
949
952
  "READ_FACE_DEFAULT_DENY_ENTRIES": "variable",
953
+ "READ_RULE_TOOL": "variable",
950
954
  "REAL_APPROVAL_CHECKPOINT_VERSION": "variable",
951
955
  "REASONING_BUDGET_SHARE": "variable",
952
956
  "RECALL_CAVEAT": "variable",
@@ -964,6 +968,9 @@
964
968
  "ROOT_ADOPTION_FILE": "variable",
965
969
  "ROSTER_SOURCES": "variable",
966
970
  "ROUTE_ADJUDICATION_CONFORMANCE_CORPUS": "variable",
971
+ "RULE_BEHAVIORS": "variable",
972
+ "RULE_BEHAVIORS_BY_PRECEDENCE": "variable",
973
+ "RULE_BEHAVIOR_PRECEDENCE": "variable",
967
974
  "RULE_OFFERS_ABSENCE_BASELINE": "variable",
968
975
  "RULE_SYNC_DROP_CODES": "variable",
969
976
  "RUN_WORKFLOW_TOOL_NAME": "variable",
@@ -1061,6 +1068,7 @@
1061
1068
  "RuleApprovalKind": "type",
1062
1069
  "RuleApprovalRecord": "interface",
1063
1070
  "RuleApprovalRecordStore": "interface",
1071
+ "RuleBehavior": "type",
1064
1072
  "RuleCandidate": "interface",
1065
1073
  "RuleConsentDeps": "interface",
1066
1074
  "RuleDeleteDelta": "interface",
@@ -1228,7 +1236,7 @@
1228
1236
  "StopSource": "type",
1229
1237
  "StoreDurability": "type",
1230
1238
  "StoreFidelity": "type",
1231
- "StoredAllowRules": "interface",
1239
+ "StoredRules": "interface",
1232
1240
  "StoredSession": "class",
1233
1241
  "StoredSessionRules": "interface",
1234
1242
  "StoredStrategy": "interface",
@@ -1467,6 +1475,8 @@
1467
1475
  "addDotsOf": "function",
1468
1476
  "addWorktree": "function",
1469
1477
  "adjudicateModelRoute": "function",
1478
+ "adjudicatePersistedPathRules": "function",
1479
+ "adjudicatePersistedRules": "function",
1470
1480
  "admitMemoryScopes": "function",
1471
1481
  "adoptFilePermissionRuleStore": "function",
1472
1482
  "adoptLocalDataRoot": "function",
@@ -1751,7 +1761,6 @@
1751
1761
  "foldAutoModeArming": "function",
1752
1762
  "foldDelta": "function",
1753
1763
  "foldPermissionModeClass": "function",
1754
- "formatAllowRuleText": "function",
1755
1764
  "formatDiagnosticsBlock": "function",
1756
1765
  "formatDiagnosticsSummary": "function",
1757
1766
  "formatHookFeedback": "function",
@@ -1763,6 +1772,7 @@
1763
1772
  "formatPeerNoticeClock": "function",
1764
1773
  "formatProjScope": "function",
1765
1774
  "formatProjectMarker": "function",
1775
+ "formatRuleText": "function",
1766
1776
  "formatToolError": "function",
1767
1777
  "formatUserProjScope": "function",
1768
1778
  "formatUserScope": "function",
@@ -1813,6 +1823,7 @@
1813
1823
  "isQuestionUnavailable": "function",
1814
1824
  "isRemoteExecutionEnv": "function",
1815
1825
  "isRetryableRemoteErrorCode": "function",
1826
+ "isRuleBehavior": "function",
1816
1827
  "isRuleLive": "function",
1817
1828
  "isSecretEnvKey": "function",
1818
1829
  "isSelfOrchestrationActive": "function",
@@ -1910,7 +1921,6 @@
1910
1921
  "originEquals": "function",
1911
1922
  "oversizeJournalResult": "function",
1912
1923
  "parkedToolIdentity": "function",
1913
- "parseAllowRuleText": "function",
1914
1924
  "parseAutoModeResponse": "function",
1915
1925
  "parseCrossSessionEnvelope": "function",
1916
1926
  "parseEntryFile": "function",
@@ -1924,10 +1934,12 @@
1924
1934
  "parseResult": "function",
1925
1935
  "parseRetryAfter": "function",
1926
1936
  "parseRuleSyncResponse": "function",
1937
+ "parseRuleText": "function",
1927
1938
  "parseScopeKey": "function",
1928
1939
  "parseTeacherAdvice": "function",
1929
1940
  "parseWorkflowMeta": "function",
1930
1941
  "pathConfinableWriteToolNames": "function",
1942
+ "pathRuleReaches": "function",
1931
1943
  "pathTargetOf": "function",
1932
1944
  "pathTargetValue": "function",
1933
1945
  "pathTargetingToolNames": "function",
@@ -1981,6 +1993,7 @@
1981
1993
  "readPeerSessionRecord": "function",
1982
1994
  "readPendingSteerQueue": "function",
1983
1995
  "readRootAdoptionFile": "function",
1996
+ "readRowBehavior": "function",
1984
1997
  "readSessionCaptureOptOut": "function",
1985
1998
  "readUsageRecord": "function",
1986
1999
  "readV2HeaderHints": "function",
@@ -2068,8 +2081,10 @@
2068
2081
  "ruleFaceOfInstance": "function",
2069
2082
  "ruleFacesFromRoster": "function",
2070
2083
  "ruleOffersOfRecord": "function",
2084
+ "ruleReachesProgramRun": "function",
2071
2085
  "ruleSourceOf": "function",
2072
2086
  "ruleSyncVector": "function",
2087
+ "ruleToolGrammarOf": "function",
2073
2088
  "runCascade": "function",
2074
2089
  "runDeveloperTask": "function",
2075
2090
  "runExecGate": "function",
@@ -2088,6 +2103,7 @@
2088
2103
  "runWithVerification": "function",
2089
2104
  "runWorkflow": "function",
2090
2105
  "sameExecutionRecord": "function",
2106
+ "sameRuleIdentity": "function",
2091
2107
  "sameRuleOwner": "function",
2092
2108
  "sameScope": "function",
2093
2109
  "sanitizeAutoModeArmingRecipe": "function",
@@ -2346,6 +2362,7 @@
2346
2362
  "CODE_REVIEW_PROMPT": "advanced",
2347
2363
  "CODE_ROLE": "advanced",
2348
2364
  "CODE_SYSTEM_PROMPT": "advanced",
2365
+ "COMMAND_RULE_TOOL": "advanced",
2349
2366
  "COMPLIANCE_CAPABILITIES": "advanced",
2350
2367
  "CONFIG_CATALOG_VERSION": "advanced",
2351
2368
  "CONSOLIDATION_DEFAULTS": "advanced",
@@ -2998,11 +3015,12 @@
2998
3015
  "ParkProbeFindingCode": "advanced",
2999
3016
  "ParkSelfCheckResult": "advanced",
3000
3017
  "ParkedClaimTicket": "advanced",
3001
- "ParsedAllowRule": "advanced",
3002
3018
  "ParsedEntryFile": "advanced",
3003
3019
  "ParsedPermissionRule": "advanced",
3020
+ "ParsedRule": "advanced",
3004
3021
  "ParsedScopeKey": "advanced",
3005
3022
  "PatchReport": "stable",
3023
+ "PathRuleBases": "advanced",
3006
3024
  "PausedCause": "advanced",
3007
3025
  "PeerAdmission": "advanced",
3008
3026
  "PeerAdmissionConfig": "advanced",
@@ -3074,8 +3092,8 @@
3074
3092
  "PermissionRuleSyncResult": "advanced",
3075
3093
  "PermissionRuleSyncTransport": "advanced",
3076
3094
  "PermissionRuleWriter": "advanced",
3077
- "PersistedAllowRule": "advanced",
3078
3095
  "PersistedOrgRuleState": "stable",
3096
+ "PersistedRule": "advanced",
3079
3097
  "PersistedRuleAnswer": "advanced",
3080
3098
  "PersistedRuleCoverage": "advanced",
3081
3099
  "PersistedRuleHit": "advanced",
@@ -3083,6 +3101,7 @@
3083
3101
  "PersistedRuleMatch": "advanced",
3084
3102
  "PersistedRuleTool": "advanced",
3085
3103
  "PersistedRuleUnreadable": "advanced",
3104
+ "PersistedRuleVerdict": "advanced",
3086
3105
  "PlacedSessionRow": "advanced",
3087
3106
  "PlanParseRepairs": "advanced",
3088
3107
  "PlatformLimitReason": "advanced",
@@ -3139,6 +3158,7 @@
3139
3158
  "READ_DENY_DEFAULT_TIERS": "advanced",
3140
3159
  "READ_FACE_BUILTIN_DENY_TABLE": "advanced",
3141
3160
  "READ_FACE_DEFAULT_DENY_ENTRIES": "advanced",
3161
+ "READ_RULE_TOOL": "advanced",
3142
3162
  "REAL_APPROVAL_CHECKPOINT_VERSION": "advanced",
3143
3163
  "REASONING_BUDGET_SHARE": "advanced",
3144
3164
  "RECALL_CAVEAT": "advanced",
@@ -3156,6 +3176,9 @@
3156
3176
  "ROOT_ADOPTION_FILE": "advanced",
3157
3177
  "ROSTER_SOURCES": "advanced",
3158
3178
  "ROUTE_ADJUDICATION_CONFORMANCE_CORPUS": "advanced",
3179
+ "RULE_BEHAVIORS": "advanced",
3180
+ "RULE_BEHAVIORS_BY_PRECEDENCE": "advanced",
3181
+ "RULE_BEHAVIOR_PRECEDENCE": "advanced",
3159
3182
  "RULE_OFFERS_ABSENCE_BASELINE": "advanced",
3160
3183
  "RULE_SYNC_DROP_CODES": "advanced",
3161
3184
  "RUN_WORKFLOW_TOOL_NAME": "stable",
@@ -3253,6 +3276,7 @@
3253
3276
  "RuleApprovalKind": "advanced",
3254
3277
  "RuleApprovalRecord": "advanced",
3255
3278
  "RuleApprovalRecordStore": "advanced",
3279
+ "RuleBehavior": "advanced",
3256
3280
  "RuleCandidate": "advanced",
3257
3281
  "RuleConsentDeps": "advanced",
3258
3282
  "RuleDeleteDelta": "advanced",
@@ -3420,7 +3444,7 @@
3420
3444
  "StopSource": "advanced",
3421
3445
  "StoreDurability": "advanced",
3422
3446
  "StoreFidelity": "advanced",
3423
- "StoredAllowRules": "advanced",
3447
+ "StoredRules": "advanced",
3424
3448
  "StoredSession": "stable",
3425
3449
  "StoredSessionRules": "advanced",
3426
3450
  "StoredStrategy": "advanced",
@@ -3659,6 +3683,8 @@
3659
3683
  "addDotsOf": "advanced",
3660
3684
  "addWorktree": "advanced",
3661
3685
  "adjudicateModelRoute": "advanced",
3686
+ "adjudicatePersistedPathRules": "advanced",
3687
+ "adjudicatePersistedRules": "advanced",
3662
3688
  "admitMemoryScopes": "advanced",
3663
3689
  "adoptFilePermissionRuleStore": "advanced",
3664
3690
  "adoptLocalDataRoot": "advanced",
@@ -3943,7 +3969,6 @@
3943
3969
  "foldAutoModeArming": "advanced",
3944
3970
  "foldDelta": "advanced",
3945
3971
  "foldPermissionModeClass": "advanced",
3946
- "formatAllowRuleText": "advanced",
3947
3972
  "formatDiagnosticsBlock": "advanced",
3948
3973
  "formatDiagnosticsSummary": "advanced",
3949
3974
  "formatHookFeedback": "advanced",
@@ -3955,6 +3980,7 @@
3955
3980
  "formatPeerNoticeClock": "advanced",
3956
3981
  "formatProjScope": "stable",
3957
3982
  "formatProjectMarker": "stable",
3983
+ "formatRuleText": "advanced",
3958
3984
  "formatToolError": "advanced",
3959
3985
  "formatUserProjScope": "advanced",
3960
3986
  "formatUserScope": "stable",
@@ -4005,6 +4031,7 @@
4005
4031
  "isQuestionUnavailable": "advanced",
4006
4032
  "isRemoteExecutionEnv": "advanced",
4007
4033
  "isRetryableRemoteErrorCode": "advanced",
4034
+ "isRuleBehavior": "advanced",
4008
4035
  "isRuleLive": "advanced",
4009
4036
  "isSecretEnvKey": "advanced",
4010
4037
  "isSelfOrchestrationActive": "advanced",
@@ -4102,7 +4129,6 @@
4102
4129
  "originEquals": "stable",
4103
4130
  "oversizeJournalResult": "advanced",
4104
4131
  "parkedToolIdentity": "advanced",
4105
- "parseAllowRuleText": "advanced",
4106
4132
  "parseAutoModeResponse": "advanced",
4107
4133
  "parseCrossSessionEnvelope": "advanced",
4108
4134
  "parseEntryFile": "advanced",
@@ -4116,10 +4142,12 @@
4116
4142
  "parseResult": "advanced",
4117
4143
  "parseRetryAfter": "advanced",
4118
4144
  "parseRuleSyncResponse": "advanced",
4145
+ "parseRuleText": "advanced",
4119
4146
  "parseScopeKey": "advanced",
4120
4147
  "parseTeacherAdvice": "advanced",
4121
4148
  "parseWorkflowMeta": "advanced",
4122
4149
  "pathConfinableWriteToolNames": "advanced",
4150
+ "pathRuleReaches": "advanced",
4123
4151
  "pathTargetOf": "advanced",
4124
4152
  "pathTargetValue": "advanced",
4125
4153
  "pathTargetingToolNames": "advanced",
@@ -4173,6 +4201,7 @@
4173
4201
  "readPeerSessionRecord": "advanced",
4174
4202
  "readPendingSteerQueue": "advanced",
4175
4203
  "readRootAdoptionFile": "advanced",
4204
+ "readRowBehavior": "advanced",
4176
4205
  "readSessionCaptureOptOut": "advanced",
4177
4206
  "readUsageRecord": "advanced",
4178
4207
  "readV2HeaderHints": "advanced",
@@ -4260,8 +4289,10 @@
4260
4289
  "ruleFaceOfInstance": "advanced",
4261
4290
  "ruleFacesFromRoster": "advanced",
4262
4291
  "ruleOffersOfRecord": "advanced",
4292
+ "ruleReachesProgramRun": "advanced",
4263
4293
  "ruleSourceOf": "advanced",
4264
4294
  "ruleSyncVector": "advanced",
4295
+ "ruleToolGrammarOf": "advanced",
4265
4296
  "runCascade": "advanced",
4266
4297
  "runDeveloperTask": "advanced",
4267
4298
  "runExecGate": "advanced",
@@ -4280,6 +4311,7 @@
4280
4311
  "runWithVerification": "advanced",
4281
4312
  "runWorkflow": "stable",
4282
4313
  "sameExecutionRecord": "advanced",
4314
+ "sameRuleIdentity": "advanced",
4283
4315
  "sameRuleOwner": "advanced",
4284
4316
  "sameScope": "advanced",
4285
4317
  "sanitizeAutoModeArmingRecipe": "advanced",