@ai-matrx/agents 0.59.237 → 0.59.239

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 CHANGED
@@ -1,10 +1,19 @@
1
1
  # Changelog
2
2
 
3
- ## 0.59.237
3
+ ## 0.59.239
4
4
 
5
5
  UNVERIFIED: this release has no Unreleased entry and the source comparison could not be made (the caller supplied no source comparison). Whether source changed is unknown; consumer action is unknown.
6
6
  Check the package's gitHead on npm against this version's gitHead: `git diff <previous gitHead> <this gitHead> -- apps/shared/matrx-agents/src`.
7
7
 
8
+ ## 0.59.238
9
+
10
+ - **The context views never warn the person (Arman, 2026-10-22).** `ContextRulesChip` loses `mismatchCount` / `mismatches` (no amber face, no warning glyph, no "N · M" count); `ContextRulesTable` and `ContextRulesPanelBody` lose `mismatches` (no row marker, no "expected X, got Y" banner); `describeMismatches` is deleted. `compareReceipt` is unchanged — the host still files the silent `context_truth_mismatch`. A self-check row keeps its tooltip from `row.blockedBy`. Guard: `context/react/a-context-view-never-warns-the-person.test.tsx`. Consumer action: stop passing `mismatchCount` / `mismatches`.
11
+
12
+ ## 0.59.237
13
+
14
+ Automatic changed-only republish (docs/metadata drift since the last published version; verified: `git diff 2db38eea90 f16d942650 -- apps/shared/matrx-agents/src`
15
+ has no shipped-source changes outside tests, fixtures and docs). No consumer action required.
16
+
8
17
  ## 0.59.236
9
18
 
10
19
  Automatic changed-only republish (docs/metadata drift since the last published version; verified: `git diff 2aaf4949f7 2db38eea90 -- apps/shared/matrx-agents/src`
@@ -158,9 +158,6 @@ var RotateCcwIcon = sized(import_icons.RotateCcwIcon);
158
158
  var ArrowDownToLineIcon = sized(import_icons.ArrowDownToLineIcon);
159
159
  var MinusIcon = sized(import_icons.MinusIcon);
160
160
 
161
- // context/react/ContextRulesTable.tsx
162
- var import_icons6 = require("@ai-matrx/design-system/icons");
163
-
164
161
  // context/react/hierarchy.ts
165
162
  var AI_MATRX_LEVEL = { id: "ai_matrx", path: ["AI Matrx"], order: 900 };
166
163
  var ATTACHED_LEVEL = { id: "attached", path: ["Attached"], order: 500 };
@@ -308,35 +305,6 @@ function withLimit(row, limit) {
308
305
  function rowId(row) {
309
306
  return `${row.surfaceKey}::${row.key}`;
310
307
  }
311
- function show(field, v) {
312
- if (v === null || v === void 0) return "none";
313
- if (typeof v === "boolean") return v ? "On" : "Off";
314
- if (typeof v === "number") return formatLimit(v);
315
- if (field === "delivery" || field === "missing") {
316
- return DELIVERY_LABEL[v] ?? String(v);
317
- }
318
- if (typeof v === "object") {
319
- const r = v;
320
- const parts = [];
321
- if (r.include !== void 0) parts.push(r.include ? "On" : "Off");
322
- if (r.max_inline_chars !== void 0) parts.push(formatLimit(r.max_inline_chars));
323
- return parts.join(", ") || "none";
324
- }
325
- return String(v);
326
- }
327
- var FIELD_LABEL = {
328
- include: "Include",
329
- max_inline_chars: "Inline max",
330
- delivery: "Delivery",
331
- user_rule: "Your rule",
332
- missing: "Not sent"
333
- };
334
- function describeMismatches(list) {
335
- const text = list.map(
336
- (m) => m.reason === "self_check" ? SELF_CHECK_TOOLTIP : m.field === "missing" ? "Missing from the server's receipt" : `${FIELD_LABEL[m.field]}: expected ${show(m.field, m.expected)}, got ${show(m.field, m.actual)}`
337
- ).join(" \xB7 ");
338
- return text.length > 140 ? `${text.slice(0, 139)}\u2026` : text;
339
- }
340
308
  function onRequestReason(row) {
341
309
  if (row.chars === null) return "Size unknown \u2014 the agent reads it on request";
342
310
  if (row.max_inline_chars === 0) return "Never inline \u2014 the agent reads it on request";
@@ -505,7 +473,6 @@ function ContextRulesTable({
505
473
  rows,
506
474
  cap,
507
475
  readOnly,
508
- mismatches,
509
476
  onChange,
510
477
  onOpenRow,
511
478
  density = "compact",
@@ -537,7 +504,6 @@ function ContextRulesTable({
537
504
  depth: headed ? depth : 0,
538
505
  readOnly,
539
506
  selected: selectedKey === row.key,
540
- mismatches: mismatches?.filter((m) => m.key === row.key) ?? [],
541
507
  onChange,
542
508
  onOpenRow,
543
509
  comfortable,
@@ -694,13 +660,12 @@ function ContextRuleRow({
694
660
  comfortable,
695
661
  readOnly,
696
662
  selected,
697
- mismatches,
698
663
  onChange,
699
664
  onOpenRow,
700
665
  lead,
701
666
  trail
702
667
  }) {
703
- const selfChecked = row.blockedBy === "self_check" || mismatches.some((m) => m.reason === "self_check");
668
+ const selfChecked = row.blockedBy === "self_check";
704
669
  const decided = selfChecked ? SELF_CHECK_TOOLTIP : row.serverResolved ? SERVER_RESOLVED_TOOLTIP : `Include: ${LAYER_LABEL[row.decided_by.include]} \xB7 Limit: ${LAYER_LABEL[row.decided_by.max_inline_chars]}`;
705
670
  const labelNode = onOpenRow ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
706
671
  "button",
@@ -719,7 +684,6 @@ function ContextRuleRow({
719
684
  "data-server-resolved": row.serverResolved ? "true" : void 0,
720
685
  "data-self-check": selfChecked ? "true" : void 0,
721
686
  "data-included": row.include ? "true" : "false",
722
- "data-mismatch": mismatches.length > 0 ? "true" : void 0,
723
687
  "aria-selected": selected || void 0,
724
688
  className: (0, import_design_system3.cn)(
725
689
  grid,
@@ -738,18 +702,6 @@ function ContextRuleRow({
738
702
  !row.include && "opacity-50"
739
703
  ),
740
704
  children: [
741
- mismatches.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_design_system3.Tooltip, { children: [
742
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
743
- "span",
744
- {
745
- role: "img",
746
- "aria-label": "Mismatch",
747
- className: "inline-flex shrink-0 text-warning",
748
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons6.AlertTriangleIcon, { className: "h-3.5 w-3.5" })
749
- }
750
- ) }),
751
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.TooltipContent, { children: describeMismatches(mismatches) })
752
- ] }) : null,
753
705
  lead ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "inline-flex shrink-0 items-center", children: lead }) : null,
754
706
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_design_system3.Tooltip, { children: [
755
707
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system3.TooltipTrigger, { asChild: true, children: labelNode }),
@@ -854,7 +806,7 @@ function InlineMaxButton({
854
806
  var React3 = __toESM(require("react"), 1);
855
807
  var import_controls = require("@ai-matrx/design-system/controls");
856
808
  var import_design_system4 = require("@ai-matrx/design-system");
857
- var import_icons8 = require("@ai-matrx/design-system/icons");
809
+ var import_icons7 = require("@ai-matrx/design-system/icons");
858
810
  var import_jsx_runtime4 = require("react/jsx-runtime");
859
811
  var BLIND_TOOLTIP = "This model can't read these values";
860
812
  var BLIND_LABEL = "Not read";
@@ -892,9 +844,7 @@ function ContextRulesChip({
892
844
  onChange,
893
845
  onResetAll,
894
846
  onOpenFullView,
895
- mismatchCount = 0,
896
847
  modelReadsContext = true,
897
- mismatches,
898
848
  onOpenRow,
899
849
  isMobile,
900
850
  readOnly,
@@ -915,7 +865,6 @@ function ContextRulesChip({
915
865
  const faceName = name ? `${name} \xB7 ${count} included` : `${count} included`;
916
866
  const anyOverride = rows.some(hasOverride);
917
867
  const blind = !modelReadsContext;
918
- const warn = mismatchCount > 0 && !blind;
919
868
  const comfortable = !!isMobile;
920
869
  const headerName = hierarchy ? "" : name;
921
870
  const canMaster = !readOnly && on !== void 0 && onToggleAll !== void 0;
@@ -927,14 +876,12 @@ function ContextRulesChip({
927
876
  variant,
928
877
  "aria-label": faceName,
929
878
  ...name ? { title: name } : {},
930
- ...warn ? { "data-mismatch": "true" } : {},
931
879
  ...blind ? { "data-blind": "true" } : {},
932
880
  ...pressed !== void 0 ? { pressed } : {},
933
- ...warn ? { tone: "warning", glyphTone: "warning", iconEnd: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons8.AlertTriangleIcon, {}) } : {},
934
- icon: eyeOpen ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EyeIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons8.EyeOffIcon, {}),
881
+ icon: eyeOpen ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EyeIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons7.EyeOffIcon, {}),
935
882
  ...isMobile ? { onClick: () => setOpen(true) } : {},
936
883
  className: (0, import_design_system4.cn)("min-w-0", className),
937
- children: `${name ? `${name} \xB7 ` : ""}${count}${warn ? ` \xB7 ${mismatchCount}` : ""}`
884
+ children: `${name ? `${name} \xB7 ` : ""}${count}`
938
885
  }
939
886
  );
940
887
  const faceTip = blind ? BLIND_TOOLTIP : name ? null : faceName;
@@ -958,7 +905,7 @@ function ContextRulesChip({
958
905
  comfortable ? "h-12" : "h-10"
959
906
  ),
960
907
  children: [
961
- eyeOpen ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EyeIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons8.EyeOffIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
908
+ eyeOpen ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EyeIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons7.EyeOffIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
962
909
  headerName ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "min-w-0 truncate text-sm font-medium", children: headerName }) : null,
963
910
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: `${count} \xB7 ${charsLabel} chars` }),
964
911
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "ml-auto flex shrink-0 items-center gap-0.5", children: [
@@ -983,7 +930,7 @@ function ContextRulesChip({
983
930
  setOpen(false);
984
931
  onOpenFullView();
985
932
  },
986
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons8.PanelRightIcon, { className: "h-3.5 w-3.5" })
933
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons7.PanelRightIcon, { className: "h-3.5 w-3.5" })
987
934
  }
988
935
  )
989
936
  ] })
@@ -1000,7 +947,6 @@ function ContextRulesChip({
1000
947
  onChange,
1001
948
  hierarchy,
1002
949
  onSetInclude,
1003
- ...mismatches ? { mismatches } : {},
1004
950
  ...onOpenRow ? { onOpenRow } : {}
1005
951
  }
1006
952
  ) })
@@ -1029,7 +975,7 @@ function ContextRulesChip({
1029
975
  // context/react/ContextRulesPanelBody.tsx
1030
976
  var React5 = __toESM(require("react"), 1);
1031
977
  var import_design_system7 = require("@ai-matrx/design-system");
1032
- var import_icons9 = require("@ai-matrx/design-system/icons");
978
+ var import_icons8 = require("@ai-matrx/design-system/icons");
1033
979
 
1034
980
  // context/react/ContextDeliveredValue.tsx
1035
981
  var React4 = __toESM(require("react"), 1);
@@ -1312,7 +1258,6 @@ function RowDetail({
1312
1258
  row,
1313
1259
  cap,
1314
1260
  readOnly,
1315
- mismatches,
1316
1261
  onChange,
1317
1262
  renderDetail,
1318
1263
  comfortable,
@@ -1323,10 +1268,6 @@ function RowDetail({
1323
1268
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "min-w-0 truncate text-sm font-medium", children: row.label }),
1324
1269
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: `${formatChars(row.chars)} chars \xB7 ${DELIVERY_LABEL[row.delivery]}` })
1325
1270
  ] }),
1326
- mismatches.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-start gap-1.5 rounded-md border border-warning/40 bg-warning/10 px-2 py-1.5 text-xs text-warning", children: [
1327
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons9.AlertTriangleIcon, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }),
1328
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: describeMismatches(mismatches) })
1329
- ] }) : null,
1330
1271
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-2 text-xs", children: [
1331
1272
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-muted-foreground", children: "Include" }),
1332
1273
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: (0, import_design_system7.cn)("flex items-center", comfortable ? "h-11" : "h-7"), children: readOnly ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FrozenInclude, { name: row.label, checked: row.include }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -1361,7 +1302,6 @@ function RowDetail({
1361
1302
  function ContextRulesPanelBody({
1362
1303
  rows,
1363
1304
  cap,
1364
- mismatches,
1365
1305
  blocks,
1366
1306
  loadView,
1367
1307
  readOnly,
@@ -1398,7 +1338,7 @@ function ContextRulesPanelBody({
1398
1338
  const selected = !openedBlock && selectedKey ? rows.find((r) => r.key === selectedKey) ?? null : null;
1399
1339
  const comfortable = !!isMobile;
1400
1340
  const search = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "relative shrink-0 border-b border-border p-2", children: [
1401
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons9.SearchIcon, { className: "pointer-events-none absolute left-4 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
1341
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons8.SearchIcon, { className: "pointer-events-none absolute left-4 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
1402
1342
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1403
1343
  import_design_system7.Input,
1404
1344
  {
@@ -1423,8 +1363,7 @@ function ContextRulesPanelBody({
1423
1363
  onChange,
1424
1364
  hierarchy,
1425
1365
  onSetInclude,
1426
- onOpenRow: (key) => select(key),
1427
- ...mismatches ? { mismatches } : {}
1366
+ onOpenRow: (key) => select(key)
1428
1367
  }
1429
1368
  ),
1430
1369
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -1443,7 +1382,6 @@ function ContextRulesPanelBody({
1443
1382
  row: selected,
1444
1383
  cap,
1445
1384
  readOnly,
1446
- mismatches: mismatches?.filter((m) => m.key === selected.key) ?? [],
1447
1385
  onChange,
1448
1386
  renderDetail,
1449
1387
  comfortable,
@@ -1485,7 +1423,7 @@ function ContextRulesPanelBody({
1485
1423
  comfortable ? "h-11 text-sm" : "h-7 text-xs"
1486
1424
  ),
1487
1425
  children: [
1488
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons9.ChevronLeftIcon, { className: comfortable ? "h-4 w-4" : "h-3.5 w-3.5" }),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons8.ChevronLeftIcon, { className: comfortable ? "h-4 w-4" : "h-3.5 w-3.5" }),
1489
1427
  "Back"
1490
1428
  ]
1491
1429
  }
@@ -166,18 +166,6 @@ interface ResolvedContextRow extends Omit<ContextRuleResult, "delivery"> {
166
166
  /** The non-person layers the rule was resolved from. Absent = default only. */
167
167
  layers?: ContextRuleLayers;
168
168
  }
169
- interface ContextReceiptMismatch {
170
- key: string;
171
- field: "include" | "max_inline_chars" | "delivery" | "user_rule" | "missing";
172
- expected: unknown;
173
- actual: unknown;
174
- /**
175
- * `"self_check"`: a real difference from what was shown — the server's
176
- * safety check stripped the value before the model call. Say "removed by
177
- * the server's safety check", not "the screen was wrong".
178
- */
179
- reason?: "self_check";
180
- }
181
169
 
182
170
  /**
183
171
  * THE HIERARCHY of the context rules table — where each value sits, and the
@@ -273,8 +261,6 @@ interface ContextRulesTableProps {
273
261
  rows: readonly ResolvedContextRow[];
274
262
  cap: number;
275
263
  readOnly?: boolean | undefined;
276
- /** From `compareReceipt` — rows with a mismatch get an amber marker. */
277
- mismatches?: readonly ContextReceiptMismatch[];
278
264
  /** `next === null` resets the person's rule for that key. */
279
265
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
280
266
  onOpenRow?: (key: string) => void;
@@ -308,7 +294,7 @@ interface ContextRulesTableProps {
308
294
  * page's own groups — each heading full width with its switch. Presentational
309
295
  * and state-agnostic — every edit goes out through `onChange`.
310
296
  */
311
- declare function ContextRulesTable({ rows, cap, readOnly, mismatches, onChange, onOpenRow, density, selectedKey, hierarchy, onSetInclude, renderRowLead, renderRowTrail, className, }: ContextRulesTableProps): React.JSX.Element;
297
+ declare function ContextRulesTable({ rows, cap, readOnly, onChange, onOpenRow, density, selectedKey, hierarchy, onSetInclude, renderRowLead, renderRowTrail, className, }: ContextRulesTableProps): React.JSX.Element;
312
298
 
313
299
  /**
314
300
  * The header's "N · chars" total. A row whose size is not known yet (an
@@ -342,13 +328,11 @@ interface ContextRulesChipProps {
342
328
  /** Levels and groups with a switch each (see `ContextRulesTable`). */
343
329
  hierarchy?: ContextHierarchy | null | undefined;
344
330
  onSetInclude?: ((changes: ContextRuleChange[]) => void) | undefined;
345
- /** False: this turn's model cannot read context — muted face, no amber. */
331
+ /** False: this turn's model cannot read context — muted face. */
346
332
  modelReadsContext?: boolean | undefined;
347
333
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
348
334
  onResetAll: () => void;
349
335
  onOpenFullView: () => void;
350
- mismatchCount?: number;
351
- mismatches?: readonly ContextReceiptMismatch[];
352
336
  onOpenRow?: (key: string) => void;
353
337
  /** Bottom sheet instead of a popover. */
354
338
  isMobile?: boolean;
@@ -371,12 +355,11 @@ interface ContextRulesChipProps {
371
355
  * "N · chars" summary, page master switch, reset-all, full view) over the
372
356
  * compact rules table. Popover on desktop, bottom sheet on mobile.
373
357
  */
374
- declare function ContextRulesChip({ label, rows, cap, on, onToggleAll, hierarchy, onSetInclude, onChange, onResetAll, onOpenFullView, mismatchCount, modelReadsContext, mismatches, onOpenRow, isMobile, readOnly, open: openProp, onOpenChange, pressed, className, variant, }: ContextRulesChipProps): React.JSX.Element;
358
+ declare function ContextRulesChip({ label, rows, cap, on, onToggleAll, hierarchy, onSetInclude, onChange, onResetAll, onOpenFullView, modelReadsContext, onOpenRow, isMobile, readOnly, open: openProp, onOpenChange, pressed, className, variant, }: ContextRulesChipProps): React.JSX.Element;
375
359
 
376
360
  interface ContextRulesPanelBodyProps {
377
361
  rows: readonly ResolvedContextRow[];
378
362
  cap: number;
379
- mismatches?: readonly ContextReceiptMismatch[];
380
363
  /** The latest receipt's `blocks`: listed read-only under "Also sent". */
381
364
  blocks?: readonly ContextReceiptBlock[];
382
365
  /** The viewer door (RULES.md §5b): fetches a value's or block's exact text when it opens. */
@@ -400,7 +383,7 @@ interface ContextRulesPanelBodyProps {
400
383
  * list is the whole panel. Open and wide (≥ 40rem): list beside detail. Open
401
384
  * and narrow (or `isMobile`): the detail alone, with Back to the list.
402
385
  */
403
- declare function ContextRulesPanelBody({ rows, cap, mismatches, blocks, loadView, readOnly, onChange, hierarchy, onSetInclude, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): React.JSX.Element;
386
+ declare function ContextRulesPanelBody({ rows, cap, blocks, loadView, readOnly, onChange, hierarchy, onSetInclude, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): React.JSX.Element;
404
387
 
405
388
  interface InlineMaxInputProps {
406
389
  /** The person's own limit, or null when inherited. */
@@ -166,18 +166,6 @@ interface ResolvedContextRow extends Omit<ContextRuleResult, "delivery"> {
166
166
  /** The non-person layers the rule was resolved from. Absent = default only. */
167
167
  layers?: ContextRuleLayers;
168
168
  }
169
- interface ContextReceiptMismatch {
170
- key: string;
171
- field: "include" | "max_inline_chars" | "delivery" | "user_rule" | "missing";
172
- expected: unknown;
173
- actual: unknown;
174
- /**
175
- * `"self_check"`: a real difference from what was shown — the server's
176
- * safety check stripped the value before the model call. Say "removed by
177
- * the server's safety check", not "the screen was wrong".
178
- */
179
- reason?: "self_check";
180
- }
181
169
 
182
170
  /**
183
171
  * THE HIERARCHY of the context rules table — where each value sits, and the
@@ -273,8 +261,6 @@ interface ContextRulesTableProps {
273
261
  rows: readonly ResolvedContextRow[];
274
262
  cap: number;
275
263
  readOnly?: boolean | undefined;
276
- /** From `compareReceipt` — rows with a mismatch get an amber marker. */
277
- mismatches?: readonly ContextReceiptMismatch[];
278
264
  /** `next === null` resets the person's rule for that key. */
279
265
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
280
266
  onOpenRow?: (key: string) => void;
@@ -308,7 +294,7 @@ interface ContextRulesTableProps {
308
294
  * page's own groups — each heading full width with its switch. Presentational
309
295
  * and state-agnostic — every edit goes out through `onChange`.
310
296
  */
311
- declare function ContextRulesTable({ rows, cap, readOnly, mismatches, onChange, onOpenRow, density, selectedKey, hierarchy, onSetInclude, renderRowLead, renderRowTrail, className, }: ContextRulesTableProps): React.JSX.Element;
297
+ declare function ContextRulesTable({ rows, cap, readOnly, onChange, onOpenRow, density, selectedKey, hierarchy, onSetInclude, renderRowLead, renderRowTrail, className, }: ContextRulesTableProps): React.JSX.Element;
312
298
 
313
299
  /**
314
300
  * The header's "N · chars" total. A row whose size is not known yet (an
@@ -342,13 +328,11 @@ interface ContextRulesChipProps {
342
328
  /** Levels and groups with a switch each (see `ContextRulesTable`). */
343
329
  hierarchy?: ContextHierarchy | null | undefined;
344
330
  onSetInclude?: ((changes: ContextRuleChange[]) => void) | undefined;
345
- /** False: this turn's model cannot read context — muted face, no amber. */
331
+ /** False: this turn's model cannot read context — muted face. */
346
332
  modelReadsContext?: boolean | undefined;
347
333
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
348
334
  onResetAll: () => void;
349
335
  onOpenFullView: () => void;
350
- mismatchCount?: number;
351
- mismatches?: readonly ContextReceiptMismatch[];
352
336
  onOpenRow?: (key: string) => void;
353
337
  /** Bottom sheet instead of a popover. */
354
338
  isMobile?: boolean;
@@ -371,12 +355,11 @@ interface ContextRulesChipProps {
371
355
  * "N · chars" summary, page master switch, reset-all, full view) over the
372
356
  * compact rules table. Popover on desktop, bottom sheet on mobile.
373
357
  */
374
- declare function ContextRulesChip({ label, rows, cap, on, onToggleAll, hierarchy, onSetInclude, onChange, onResetAll, onOpenFullView, mismatchCount, modelReadsContext, mismatches, onOpenRow, isMobile, readOnly, open: openProp, onOpenChange, pressed, className, variant, }: ContextRulesChipProps): React.JSX.Element;
358
+ declare function ContextRulesChip({ label, rows, cap, on, onToggleAll, hierarchy, onSetInclude, onChange, onResetAll, onOpenFullView, modelReadsContext, onOpenRow, isMobile, readOnly, open: openProp, onOpenChange, pressed, className, variant, }: ContextRulesChipProps): React.JSX.Element;
375
359
 
376
360
  interface ContextRulesPanelBodyProps {
377
361
  rows: readonly ResolvedContextRow[];
378
362
  cap: number;
379
- mismatches?: readonly ContextReceiptMismatch[];
380
363
  /** The latest receipt's `blocks`: listed read-only under "Also sent". */
381
364
  blocks?: readonly ContextReceiptBlock[];
382
365
  /** The viewer door (RULES.md §5b): fetches a value's or block's exact text when it opens. */
@@ -400,7 +383,7 @@ interface ContextRulesPanelBodyProps {
400
383
  * list is the whole panel. Open and wide (≥ 40rem): list beside detail. Open
401
384
  * and narrow (or `isMobile`): the detail alone, with Back to the list.
402
385
  */
403
- declare function ContextRulesPanelBody({ rows, cap, mismatches, blocks, loadView, readOnly, onChange, hierarchy, onSetInclude, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): React.JSX.Element;
386
+ declare function ContextRulesPanelBody({ rows, cap, blocks, loadView, readOnly, onChange, hierarchy, onSetInclude, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): React.JSX.Element;
404
387
 
405
388
  interface InlineMaxInputProps {
406
389
  /** The person's own limit, or null when inherited. */
@@ -122,9 +122,6 @@ var RotateCcwIcon = sized(GRotateCcwIcon);
122
122
  var ArrowDownToLineIcon = sized(GArrowDownToLineIcon);
123
123
  var MinusIcon = sized(GMinusIcon);
124
124
 
125
- // context/react/ContextRulesTable.tsx
126
- import { AlertTriangleIcon } from "@ai-matrx/design-system/icons";
127
-
128
125
  // context/react/hierarchy.ts
129
126
  var AI_MATRX_LEVEL = { id: "ai_matrx", path: ["AI Matrx"], order: 900 };
130
127
  var ATTACHED_LEVEL = { id: "attached", path: ["Attached"], order: 500 };
@@ -278,35 +275,6 @@ function withLimit(row, limit) {
278
275
  function rowId(row) {
279
276
  return `${row.surfaceKey}::${row.key}`;
280
277
  }
281
- function show(field, v) {
282
- if (v === null || v === void 0) return "none";
283
- if (typeof v === "boolean") return v ? "On" : "Off";
284
- if (typeof v === "number") return formatLimit(v);
285
- if (field === "delivery" || field === "missing") {
286
- return DELIVERY_LABEL[v] ?? String(v);
287
- }
288
- if (typeof v === "object") {
289
- const r = v;
290
- const parts = [];
291
- if (r.include !== void 0) parts.push(r.include ? "On" : "Off");
292
- if (r.max_inline_chars !== void 0) parts.push(formatLimit(r.max_inline_chars));
293
- return parts.join(", ") || "none";
294
- }
295
- return String(v);
296
- }
297
- var FIELD_LABEL = {
298
- include: "Include",
299
- max_inline_chars: "Inline max",
300
- delivery: "Delivery",
301
- user_rule: "Your rule",
302
- missing: "Not sent"
303
- };
304
- function describeMismatches(list) {
305
- const text = list.map(
306
- (m) => m.reason === "self_check" ? SELF_CHECK_TOOLTIP : m.field === "missing" ? "Missing from the server's receipt" : `${FIELD_LABEL[m.field]}: expected ${show(m.field, m.expected)}, got ${show(m.field, m.actual)}`
307
- ).join(" \xB7 ");
308
- return text.length > 140 ? `${text.slice(0, 139)}\u2026` : text;
309
- }
310
278
  function onRequestReason(row) {
311
279
  if (row.chars === null) return "Size unknown \u2014 the agent reads it on request";
312
280
  if (row.max_inline_chars === 0) return "Never inline \u2014 the agent reads it on request";
@@ -475,7 +443,6 @@ function ContextRulesTable({
475
443
  rows,
476
444
  cap,
477
445
  readOnly,
478
- mismatches,
479
446
  onChange,
480
447
  onOpenRow,
481
448
  density = "compact",
@@ -507,7 +474,6 @@ function ContextRulesTable({
507
474
  depth: headed ? depth : 0,
508
475
  readOnly,
509
476
  selected: selectedKey === row.key,
510
- mismatches: mismatches?.filter((m) => m.key === row.key) ?? [],
511
477
  onChange,
512
478
  onOpenRow,
513
479
  comfortable,
@@ -664,13 +630,12 @@ function ContextRuleRow({
664
630
  comfortable,
665
631
  readOnly,
666
632
  selected,
667
- mismatches,
668
633
  onChange,
669
634
  onOpenRow,
670
635
  lead,
671
636
  trail
672
637
  }) {
673
- const selfChecked = row.blockedBy === "self_check" || mismatches.some((m) => m.reason === "self_check");
638
+ const selfChecked = row.blockedBy === "self_check";
674
639
  const decided = selfChecked ? SELF_CHECK_TOOLTIP : row.serverResolved ? SERVER_RESOLVED_TOOLTIP : `Include: ${LAYER_LABEL[row.decided_by.include]} \xB7 Limit: ${LAYER_LABEL[row.decided_by.max_inline_chars]}`;
675
640
  const labelNode = onOpenRow ? /* @__PURE__ */ jsx3(
676
641
  "button",
@@ -689,7 +654,6 @@ function ContextRuleRow({
689
654
  "data-server-resolved": row.serverResolved ? "true" : void 0,
690
655
  "data-self-check": selfChecked ? "true" : void 0,
691
656
  "data-included": row.include ? "true" : "false",
692
- "data-mismatch": mismatches.length > 0 ? "true" : void 0,
693
657
  "aria-selected": selected || void 0,
694
658
  className: cn3(
695
659
  grid,
@@ -708,18 +672,6 @@ function ContextRuleRow({
708
672
  !row.include && "opacity-50"
709
673
  ),
710
674
  children: [
711
- mismatches.length > 0 ? /* @__PURE__ */ jsxs3(Tooltip3, { children: [
712
- /* @__PURE__ */ jsx3(TooltipTrigger3, { asChild: true, children: /* @__PURE__ */ jsx3(
713
- "span",
714
- {
715
- role: "img",
716
- "aria-label": "Mismatch",
717
- className: "inline-flex shrink-0 text-warning",
718
- children: /* @__PURE__ */ jsx3(AlertTriangleIcon, { className: "h-3.5 w-3.5" })
719
- }
720
- ) }),
721
- /* @__PURE__ */ jsx3(TooltipContent3, { children: describeMismatches(mismatches) })
722
- ] }) : null,
723
675
  lead ? /* @__PURE__ */ jsx3("span", { className: "inline-flex shrink-0 items-center", children: lead }) : null,
724
676
  /* @__PURE__ */ jsxs3(Tooltip3, { children: [
725
677
  /* @__PURE__ */ jsx3(TooltipTrigger3, { asChild: true, children: labelNode }),
@@ -835,7 +787,7 @@ import {
835
787
  TooltipTrigger as TooltipTrigger4,
836
788
  cn as cn4
837
789
  } from "@ai-matrx/design-system";
838
- import { AlertTriangleIcon as AlertTriangleIcon2, EyeOffIcon, PanelRightIcon } from "@ai-matrx/design-system/icons";
790
+ import { EyeOffIcon, PanelRightIcon } from "@ai-matrx/design-system/icons";
839
791
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
840
792
  var BLIND_TOOLTIP = "This model can't read these values";
841
793
  var BLIND_LABEL = "Not read";
@@ -873,9 +825,7 @@ function ContextRulesChip({
873
825
  onChange,
874
826
  onResetAll,
875
827
  onOpenFullView,
876
- mismatchCount = 0,
877
828
  modelReadsContext = true,
878
- mismatches,
879
829
  onOpenRow,
880
830
  isMobile,
881
831
  readOnly,
@@ -896,7 +846,6 @@ function ContextRulesChip({
896
846
  const faceName = name ? `${name} \xB7 ${count} included` : `${count} included`;
897
847
  const anyOverride = rows.some(hasOverride);
898
848
  const blind = !modelReadsContext;
899
- const warn = mismatchCount > 0 && !blind;
900
849
  const comfortable = !!isMobile;
901
850
  const headerName = hierarchy ? "" : name;
902
851
  const canMaster = !readOnly && on !== void 0 && onToggleAll !== void 0;
@@ -908,14 +857,12 @@ function ContextRulesChip({
908
857
  variant,
909
858
  "aria-label": faceName,
910
859
  ...name ? { title: name } : {},
911
- ...warn ? { "data-mismatch": "true" } : {},
912
860
  ...blind ? { "data-blind": "true" } : {},
913
861
  ...pressed !== void 0 ? { pressed } : {},
914
- ...warn ? { tone: "warning", glyphTone: "warning", iconEnd: /* @__PURE__ */ jsx4(AlertTriangleIcon2, {}) } : {},
915
862
  icon: eyeOpen ? /* @__PURE__ */ jsx4(EyeIcon, {}) : /* @__PURE__ */ jsx4(EyeOffIcon, {}),
916
863
  ...isMobile ? { onClick: () => setOpen(true) } : {},
917
864
  className: cn4("min-w-0", className),
918
- children: `${name ? `${name} \xB7 ` : ""}${count}${warn ? ` \xB7 ${mismatchCount}` : ""}`
865
+ children: `${name ? `${name} \xB7 ` : ""}${count}`
919
866
  }
920
867
  );
921
868
  const faceTip = blind ? BLIND_TOOLTIP : name ? null : faceName;
@@ -981,7 +928,6 @@ function ContextRulesChip({
981
928
  onChange,
982
929
  hierarchy,
983
930
  onSetInclude,
984
- ...mismatches ? { mismatches } : {},
985
931
  ...onOpenRow ? { onOpenRow } : {}
986
932
  }
987
933
  ) })
@@ -1015,7 +961,7 @@ import {
1015
961
  TooltipProvider as TooltipProvider4,
1016
962
  cn as cn7
1017
963
  } from "@ai-matrx/design-system";
1018
- import { AlertTriangleIcon as AlertTriangleIcon3, ChevronLeftIcon, SearchIcon } from "@ai-matrx/design-system/icons";
964
+ import { ChevronLeftIcon, SearchIcon } from "@ai-matrx/design-system/icons";
1019
965
 
1020
966
  // context/react/ContextDeliveredValue.tsx
1021
967
  import * as React4 from "react";
@@ -1298,7 +1244,6 @@ function RowDetail({
1298
1244
  row,
1299
1245
  cap,
1300
1246
  readOnly,
1301
- mismatches,
1302
1247
  onChange,
1303
1248
  renderDetail,
1304
1249
  comfortable,
@@ -1309,10 +1254,6 @@ function RowDetail({
1309
1254
  /* @__PURE__ */ jsx7("h3", { className: "min-w-0 truncate text-sm font-medium", children: row.label }),
1310
1255
  /* @__PURE__ */ jsx7("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: `${formatChars(row.chars)} chars \xB7 ${DELIVERY_LABEL[row.delivery]}` })
1311
1256
  ] }),
1312
- mismatches.length > 0 ? /* @__PURE__ */ jsxs7("div", { className: "flex items-start gap-1.5 rounded-md border border-warning/40 bg-warning/10 px-2 py-1.5 text-xs text-warning", children: [
1313
- /* @__PURE__ */ jsx7(AlertTriangleIcon3, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }),
1314
- /* @__PURE__ */ jsx7("span", { children: describeMismatches(mismatches) })
1315
- ] }) : null,
1316
1257
  /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-2 text-xs", children: [
1317
1258
  /* @__PURE__ */ jsx7("span", { className: "text-muted-foreground", children: "Include" }),
1318
1259
  /* @__PURE__ */ jsx7("div", { className: cn7("flex items-center", comfortable ? "h-11" : "h-7"), children: readOnly ? /* @__PURE__ */ jsx7(FrozenInclude, { name: row.label, checked: row.include }) : /* @__PURE__ */ jsx7(
@@ -1347,7 +1288,6 @@ function RowDetail({
1347
1288
  function ContextRulesPanelBody({
1348
1289
  rows,
1349
1290
  cap,
1350
- mismatches,
1351
1291
  blocks,
1352
1292
  loadView,
1353
1293
  readOnly,
@@ -1409,8 +1349,7 @@ function ContextRulesPanelBody({
1409
1349
  onChange,
1410
1350
  hierarchy,
1411
1351
  onSetInclude,
1412
- onOpenRow: (key) => select(key),
1413
- ...mismatches ? { mismatches } : {}
1352
+ onOpenRow: (key) => select(key)
1414
1353
  }
1415
1354
  ),
1416
1355
  /* @__PURE__ */ jsx7(
@@ -1429,7 +1368,6 @@ function ContextRulesPanelBody({
1429
1368
  row: selected,
1430
1369
  cap,
1431
1370
  readOnly,
1432
- mismatches: mismatches?.filter((m) => m.key === selected.key) ?? [],
1433
1371
  onChange,
1434
1372
  renderDetail,
1435
1373
  comfortable,
@@ -1591,11 +1591,16 @@ function normalizeAdmin(row, offerings) {
1591
1591
  };
1592
1592
  }
1593
1593
  var rows = (data) => Array.isArray(data) ? data : [];
1594
+ function aiRpc(client, fn) {
1595
+ const scope = client.schema("ai");
1596
+ if (!scope.rpc) throw new Error(`The model catalog client's schema("ai") has no rpc(), so ${fn} cannot be called.`);
1597
+ return scope.rpc(fn);
1598
+ }
1594
1599
  async function readCatalog(client, variant) {
1595
1600
  if (variant === "admin") {
1596
1601
  const [rpcRes, offeringsRes] = await Promise.all([
1597
1602
  client.rpc("admin_model_catalog"),
1598
- client.rpc("admin_model_offerings")
1603
+ aiRpc(client, "admin_model_offerings")
1599
1604
  ]);
1600
1605
  if (rpcRes.error) throw rpcRes.error;
1601
1606
  if (offeringsRes.error) throw offeringsRes.error;
@@ -756,7 +756,7 @@ declare const selectModelIdentityLookupStatus: (s: ModelRecordsState, modelId: s
756
756
  * - "user" → `ai.model_public` (anon + authenticated; masked, points pricing), filtered to
757
757
  * ROUTABLE models via `ai.model_offering`, which also supplies each model's serving
758
758
  * TIERS (`served_via` — the endpoint's public Matrx brand, never the real vendor).
759
- * - "admin" → `public.admin_model_catalog()` + `public.admin_model_offerings()` (SECURITY
759
+ * - "admin" → `public.admin_model_catalog()` + `ai.admin_model_offerings()` (SECURITY
760
760
  * DEFINER, gated by `is_super_admin()`): raw $ pricing, real vendors, every
761
761
  * offering. NEVER read `ai.model_admin` / `ai.offering` directly from a client.
762
762
  *
@@ -787,6 +787,8 @@ interface ModelCatalogClient {
787
787
  rpc(fn: string, args?: Record<string, unknown>): PromiseLike<ModelCatalogPgResult>;
788
788
  schema(name: string): {
789
789
  from(table: string): ModelCatalogQuery;
790
+ /** Present on every supabase-js schema scope; optional only so read-only fixtures stay valid. */
791
+ rpc?(fn: string, args?: Record<string, unknown>): PromiseLike<ModelCatalogPgResult>;
790
792
  };
791
793
  }
792
794
  type ModelCatalogErrorSink = (event: {
@@ -756,7 +756,7 @@ declare const selectModelIdentityLookupStatus: (s: ModelRecordsState, modelId: s
756
756
  * - "user" → `ai.model_public` (anon + authenticated; masked, points pricing), filtered to
757
757
  * ROUTABLE models via `ai.model_offering`, which also supplies each model's serving
758
758
  * TIERS (`served_via` — the endpoint's public Matrx brand, never the real vendor).
759
- * - "admin" → `public.admin_model_catalog()` + `public.admin_model_offerings()` (SECURITY
759
+ * - "admin" → `public.admin_model_catalog()` + `ai.admin_model_offerings()` (SECURITY
760
760
  * DEFINER, gated by `is_super_admin()`): raw $ pricing, real vendors, every
761
761
  * offering. NEVER read `ai.model_admin` / `ai.offering` directly from a client.
762
762
  *
@@ -787,6 +787,8 @@ interface ModelCatalogClient {
787
787
  rpc(fn: string, args?: Record<string, unknown>): PromiseLike<ModelCatalogPgResult>;
788
788
  schema(name: string): {
789
789
  from(table: string): ModelCatalogQuery;
790
+ /** Present on every supabase-js schema scope; optional only so read-only fixtures stay valid. */
791
+ rpc?(fn: string, args?: Record<string, unknown>): PromiseLike<ModelCatalogPgResult>;
790
792
  };
791
793
  }
792
794
  type ModelCatalogErrorSink = (event: {
@@ -1432,11 +1432,16 @@ function normalizeAdmin(row, offerings) {
1432
1432
  };
1433
1433
  }
1434
1434
  var rows = (data) => Array.isArray(data) ? data : [];
1435
+ function aiRpc(client, fn) {
1436
+ const scope = client.schema("ai");
1437
+ if (!scope.rpc) throw new Error(`The model catalog client's schema("ai") has no rpc(), so ${fn} cannot be called.`);
1438
+ return scope.rpc(fn);
1439
+ }
1435
1440
  async function readCatalog(client, variant) {
1436
1441
  if (variant === "admin") {
1437
1442
  const [rpcRes, offeringsRes] = await Promise.all([
1438
1443
  client.rpc("admin_model_catalog"),
1439
- client.rpc("admin_model_offerings")
1444
+ aiRpc(client, "admin_model_offerings")
1440
1445
  ]);
1441
1446
  if (rpcRes.error) throw rpcRes.error;
1442
1447
  if (offeringsRes.error) throw offeringsRes.error;
@@ -372,7 +372,7 @@ interface ModelRecords {
372
372
  * - "user" → `ai.model_public` (anon + authenticated; masked, points pricing), filtered to
373
373
  * ROUTABLE models via `ai.model_offering`, which also supplies each model's serving
374
374
  * TIERS (`served_via` — the endpoint's public Matrx brand, never the real vendor).
375
- * - "admin" → `public.admin_model_catalog()` + `public.admin_model_offerings()` (SECURITY
375
+ * - "admin" → `public.admin_model_catalog()` + `ai.admin_model_offerings()` (SECURITY
376
376
  * DEFINER, gated by `is_super_admin()`): raw $ pricing, real vendors, every
377
377
  * offering. NEVER read `ai.model_admin` / `ai.offering` directly from a client.
378
378
  *
@@ -372,7 +372,7 @@ interface ModelRecords {
372
372
  * - "user" → `ai.model_public` (anon + authenticated; masked, points pricing), filtered to
373
373
  * ROUTABLE models via `ai.model_offering`, which also supplies each model's serving
374
374
  * TIERS (`served_via` — the endpoint's public Matrx brand, never the real vendor).
375
- * - "admin" → `public.admin_model_catalog()` + `public.admin_model_offerings()` (SECURITY
375
+ * - "admin" → `public.admin_model_catalog()` + `ai.admin_model_offerings()` (SECURITY
376
376
  * DEFINER, gated by `is_super_admin()`): raw $ pricing, real vendors, every
377
377
  * offering. NEVER read `ai.model_admin` / `ai.offering` directly from a client.
378
378
  *
@@ -244,7 +244,7 @@ async function readAgentCurrentVersion(client, agentId) {
244
244
  return typeof v === "number" && Number.isInteger(v) ? v : null;
245
245
  }
246
246
  async function declareContractBreak(client, query) {
247
- const { error } = await client.rpc("agx_declare_contract_break", {
247
+ const { error } = await client.schema("agent").rpc("agx_declare_contract_break", {
248
248
  p_agent_id: query.agentId,
249
249
  p_version_number: query.version,
250
250
  p_kind: query.kind ?? void 0
@@ -135,6 +135,7 @@ type Answer = PromiseLike<{
135
135
  interface VersionsClient {
136
136
  rpc(fn: string, args: Record<string, unknown>): Answer;
137
137
  schema(name: "agent"): {
138
+ rpc(fn: string, args: Record<string, unknown>): Answer;
138
139
  from(table: "definition_version" | "definition"): {
139
140
  select(columns: string): {
140
141
  eq(column: string, value: string): {
@@ -135,6 +135,7 @@ type Answer = PromiseLike<{
135
135
  interface VersionsClient {
136
136
  rpc(fn: string, args: Record<string, unknown>): Answer;
137
137
  schema(name: "agent"): {
138
+ rpc(fn: string, args: Record<string, unknown>): Answer;
138
139
  from(table: "definition_version" | "definition"): {
139
140
  select(columns: string): {
140
141
  eq(column: string, value: string): {
@@ -201,7 +201,7 @@ async function readAgentCurrentVersion(client, agentId) {
201
201
  return typeof v === "number" && Number.isInteger(v) ? v : null;
202
202
  }
203
203
  async function declareContractBreak(client, query) {
204
- const { error } = await client.rpc("agx_declare_contract_break", {
204
+ const { error } = await client.schema("agent").rpc("agx_declare_contract_break", {
205
205
  p_agent_id: query.agentId,
206
206
  p_version_number: query.version,
207
207
  p_kind: query.kind ?? void 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-matrx/agents",
3
- "version": "0.59.237",
3
+ "version": "0.59.239",
4
4
  "description": "Portable AI Matrx agent stream protocol, event projection, and safe result-presentation primitives.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -509,14 +509,14 @@
509
509
  "sideEffects": false,
510
510
  "dependencies": {
511
511
  "@ai-matrx/alchemy": "latest",
512
+ "@ai-matrx/associations": "latest",
512
513
  "@ai-matrx/api": "latest",
513
514
  "@ai-matrx/content-ir": "latest",
514
- "@ai-matrx/diff": "latest",
515
515
  "@ai-matrx/data": "latest",
516
- "@ai-matrx/associations": "latest",
516
+ "@ai-matrx/design-system": "latest",
517
+ "@ai-matrx/diff": "latest",
517
518
  "@ai-matrx/icons": "latest",
518
- "@ai-matrx/kit": "latest",
519
- "@ai-matrx/design-system": "latest"
519
+ "@ai-matrx/kit": "latest"
520
520
  },
521
521
  "peerDependencies": {
522
522
  "react": ">=18.0.0",
@@ -561,5 +561,5 @@
561
561
  "verify:tarball": "node ./scripts/verify-tarball.mjs",
562
562
  "typegen:self-test": "node scripts/typegen/drop-guard.self-test.mjs && node scripts/typegen/check-api-types-fresh.mjs --self-test"
563
563
  },
564
- "gitHead": "f16d9426504f816b9571fd6a3987d0d20ed5d5bc"
564
+ "gitHead": "6acfc6b938bd3174a9d71a2368c8f2f7c5ceb976"
565
565
  }