@ai-matrx/agents 0.59.238 → 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,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.59.239
4
+
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
+ Check the package's gitHead on npm against this version's gitHead: `git diff <previous gitHead> <this gitHead> -- apps/shared/matrx-agents/src`.
7
+
3
8
  ## 0.59.238
4
9
 
5
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`.
@@ -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.238",
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,8 +509,8 @@
509
509
  "sideEffects": false,
510
510
  "dependencies": {
511
511
  "@ai-matrx/alchemy": "latest",
512
- "@ai-matrx/api": "latest",
513
512
  "@ai-matrx/associations": "latest",
513
+ "@ai-matrx/api": "latest",
514
514
  "@ai-matrx/content-ir": "latest",
515
515
  "@ai-matrx/data": "latest",
516
516
  "@ai-matrx/design-system": "latest",
@@ -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": "9df14659778c1a3b93c2c09bddcdc93b145ca736"
564
+ "gitHead": "6acfc6b938bd3174a9d71a2368c8f2f7c5ceb976"
565
565
  }