@ai-matrx/agents 0.28.1 → 0.29.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 (54) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/content-transfer/index.cjs +1 -0
  3. package/dist/content-transfer/index.cjs.map +1 -1
  4. package/dist/content-transfer/index.d.cts +2 -1
  5. package/dist/content-transfer/index.d.ts +2 -1
  6. package/dist/content-transfer/index.js +1 -0
  7. package/dist/content-transfer/index.js.map +1 -1
  8. package/dist/content-transfer/react/index.cjs +1 -0
  9. package/dist/content-transfer/react/index.cjs.map +1 -1
  10. package/dist/content-transfer/react/index.js +1 -0
  11. package/dist/content-transfer/react/index.js.map +1 -1
  12. package/dist/context/index.cjs +29 -5
  13. package/dist/context/index.cjs.map +1 -1
  14. package/dist/context/index.d.cts +65 -13
  15. package/dist/context/index.d.ts +65 -13
  16. package/dist/context/index.js +29 -5
  17. package/dist/context/index.js.map +1 -1
  18. package/dist/context/react/index.cjs +262 -78
  19. package/dist/context/react/index.cjs.map +1 -1
  20. package/dist/context/react/index.d.cts +100 -21
  21. package/dist/context/react/index.d.ts +100 -21
  22. package/dist/context/react/index.js +261 -77
  23. package/dist/context/react/index.js.map +1 -1
  24. package/dist/index.d.cts +2 -1
  25. package/dist/index.d.ts +2 -1
  26. package/dist/mandates/index.cjs +3 -2
  27. package/dist/mandates/index.cjs.map +1 -1
  28. package/dist/mandates/index.d.cts +6 -5
  29. package/dist/mandates/index.d.ts +6 -5
  30. package/dist/mandates/index.js +3 -2
  31. package/dist/mandates/index.js.map +1 -1
  32. package/dist/matrx/index.d.cts +4 -2
  33. package/dist/matrx/index.d.ts +4 -2
  34. package/dist/{operations-Dp4ut-ac.d.ts → operations-C3iHFcnt.d.ts} +2 -94
  35. package/dist/{operations--f5ko9Su.d.cts → operations-C9QvBH_2.d.cts} +2 -94
  36. package/dist/portable/index.cjs +164 -0
  37. package/dist/portable/index.cjs.map +1 -0
  38. package/dist/portable/index.d.cts +74 -0
  39. package/dist/portable/index.d.ts +74 -0
  40. package/dist/portable/index.js +141 -0
  41. package/dist/portable/index.js.map +1 -0
  42. package/dist/portable/mcp.cjs +512 -0
  43. package/dist/portable/mcp.cjs.map +1 -0
  44. package/dist/portable/mcp.d.cts +81 -0
  45. package/dist/portable/mcp.d.ts +81 -0
  46. package/dist/portable/mcp.js +492 -0
  47. package/dist/portable/mcp.js.map +1 -0
  48. package/dist/transport-CxD0fL8p.d.cts +94 -0
  49. package/dist/transport-CxD0fL8p.d.ts +94 -0
  50. package/dist/types.generated-BydVlqDC.d.cts +49 -0
  51. package/dist/types.generated-BydVlqDC.d.ts +49 -0
  52. package/mandates/snapshots/keys.0.29.0.json +652 -0
  53. package/mandates/snapshots/keys.0.29.1.json +653 -0
  54. package/package.json +22 -2
@@ -50,14 +50,51 @@ interface ContextRuleResult {
50
50
  };
51
51
  clamped: boolean;
52
52
  }
53
- /** Text the model actually read for one value (receipt `delivered` / `on_request`). */
54
- interface ContextDeliveredText {
55
- /** Cut at the receipt's cap; `chars` is the whole length. */
53
+ /**
54
+ * What the model read for one value or block, by SIZE and HASH only — never
55
+ * the text (RULES.md §5b: a server-shaped value is fetched on demand, never
56
+ * pushed). The text comes from the viewer (`ContextViewLoader`).
57
+ */
58
+ interface ContextDeliveredRef {
59
+ /** Code-point length of the whole text the model read. */
60
+ chars: number;
61
+ /** SHA-256 hex of that text (UTF-8). */
62
+ sha256: string;
63
+ }
64
+ /** What to view: a value's `delivered` element, its `on_request` text, or a `block`. */
65
+ type ContextViewKind = "delivered" | "on_request" | "block";
66
+ interface ContextViewTarget {
67
+ kind: ContextViewKind;
68
+ /** The value's key, or the block's id. */
69
+ key: string;
70
+ }
71
+ /**
72
+ * The exact text the model received (a sent turn: `GET /ai/context/delivered`)
73
+ * or will receive (the next turn: `POST /ai/context/preview` with `view`).
74
+ */
75
+ interface ContextViewedText {
76
+ kind: ContextViewKind;
77
+ key: string;
56
78
  text: string;
57
79
  chars: number;
58
- truncated: boolean;
59
- /** SHA-256 hex of the whole text (UTF-8). */
60
80
  sha256: string;
81
+ source: "preview" | "wire" | "conversation_prompt" | "turn_record";
82
+ }
83
+ /** The host's door to the viewer API — called only when a person opens a value. */
84
+ type ContextViewLoader = (target: ContextViewTarget) => Promise<ContextViewedText>;
85
+ /**
86
+ * One block of server text the model received this turn that is not a single
87
+ * value — the turn's `<active_context>`, earlier-turn context, the sandbox
88
+ * briefing, skills, memory, the organization catalog… (receipt `blocks`,
89
+ * RULES.md §5). `delivered` is its exact text, cut at the receipt's cap.
90
+ */
91
+ interface ContextReceiptBlock {
92
+ /** Stable id: the per-turn slot it rode in, or the system-prompt addition's name. */
93
+ id: string;
94
+ /** The id in words (`humanizeContextKey`). */
95
+ label: string;
96
+ /** Size and hash; the text comes from the viewer (`kind: "block"`). */
97
+ delivered: ContextDeliveredRef;
61
98
  }
62
99
  type ContextRowOrigin = "page" | "attached" | "system";
63
100
  /** Why the server kept a value from the model on this turn (receipt `blocked_by`). */
@@ -80,9 +117,11 @@ interface ResolvedContextRow extends Omit<ContextRuleResult, "delivery"> {
80
117
  * Display-only, from a receipt: what the model read for this value. When set,
81
118
  * a detail view shows THIS — never `value`, the client's pre-send copy.
82
119
  */
83
- delivered?: ContextDeliveredText;
84
- /** Display-only, from a receipt: what the `context` tool returns for it. */
85
- onRequest?: ContextDeliveredText;
120
+ delivered?: ContextDeliveredRef;
121
+ /** Display-only, from a receipt: what the `context` tool returns for it (size + hash). */
122
+ onRequest?: ContextDeliveredRef;
123
+ /** Display-only, from a receipt: blocks the model received as part of this value. */
124
+ deliveredBlocks?: ContextReceiptBlock[];
86
125
  key: string;
87
126
  label: string;
88
127
  surfaceKey: string;
@@ -134,8 +173,13 @@ interface ContextRulesTableProps {
134
173
  declare function ContextRulesTable({ rows, cap, readOnly, mismatches, onChange, onOpenRow, density, selectedKey, className, }: ContextRulesTableProps): react.JSX.Element;
135
174
 
136
175
  interface ContextRulesChipProps {
137
- /** The page's name — "Notes", "Invoice 1042". */
138
- label: string;
176
+ /**
177
+ * The group's own name — "Notes", "Invoice 1042". Empty or omitted: the chip
178
+ * shows NO text (icon + count only). Never pass a generic word such as
179
+ * "Context" here — when there is no real name, there is no label (Arman,
180
+ * 2026-10-01).
181
+ */
182
+ label?: string | null | undefined;
139
183
  rows: readonly ResolvedContextRow[];
140
184
  cap: number;
141
185
  /** Page context on/off. Omit when there is no page: the master switch is hidden. */
@@ -167,7 +211,7 @@ declare function summarizeContextRows(rows: readonly ResolvedContextRow[]): {
167
211
  charsLabel: string;
168
212
  };
169
213
  /**
170
- * The composer's context chip and the surface it opens: a header (label,
214
+ * The composer's value-group chip — far right of the composer's one row — and the surface it opens: a header (label,
171
215
  * "N · chars" summary, page master switch, reset-all, full view) over the
172
216
  * compact rules table. Popover on desktop, bottom sheet on mobile.
173
217
  */
@@ -177,6 +221,10 @@ interface ContextRulesPanelBodyProps {
177
221
  rows: readonly ResolvedContextRow[];
178
222
  cap: number;
179
223
  mismatches?: readonly ContextReceiptMismatch[];
224
+ /** The latest receipt's `blocks`: listed read-only under "Also sent". */
225
+ blocks?: readonly ContextReceiptBlock[];
226
+ /** The viewer door (RULES.md §5b): fetches a value's or block's exact text when it opens. */
227
+ loadView?: ContextViewLoader;
180
228
  readOnly?: boolean | undefined;
181
229
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
182
230
  /** Host content under the built-in controls (a value preview, source link…). */
@@ -192,7 +240,7 @@ interface ContextRulesPanelBodyProps {
192
240
  * the left, the open row's controls, layer breakdown and host detail on the
193
241
  * right. On mobile: list, then detail with Back.
194
242
  */
195
- declare function ContextRulesPanelBody({ rows, cap, mismatches, readOnly, onChange, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): react.JSX.Element;
243
+ declare function ContextRulesPanelBody({ rows, cap, mismatches, blocks, loadView, readOnly, onChange, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): react.JSX.Element;
196
244
 
197
245
  interface InlineMaxInputProps {
198
246
  /** The person's own limit, or null when inherited. */
@@ -218,16 +266,47 @@ interface InlineMaxInputProps {
218
266
  declare function InlineMaxInput({ value, inherited, cap, onCommit, disabled, label, comfortable, placeholder, }: InlineMaxInputProps): react.JSX.Element;
219
267
 
220
268
  /**
221
- * What the model READ for one value — the receipt's `delivered` (its own
222
- * element in the rendered context block) and, for an on-request value, what
223
- * the `context` tool returns (`on_request`). Verbatim; never the client's copy.
224
- * With no receipt yet: a server-authoritative value (RULES.md §5a) says the
225
- * server fills it — never the client's guess; anything else renders nothing
226
- * (the host may then show the value the page will send, labelled so). §5.
269
+ * What the model READ for one value — fetched from the viewer when the detail
270
+ * opens, never pushed (RULES.md §5b): its own element (`delivered`), the blocks
271
+ * it rode with (`deliveredBlocks` — the Organization's catalog), and for an
272
+ * on-request value what the `context` tool returns (`onRequest`). Verbatim;
273
+ * never the client's copy. With no receipt yet: a server-authoritative value
274
+ * says the server fills it; anything else renders nothing (the host may show
275
+ * the value the page will send, labelled so).
227
276
  */
228
- declare function ContextDeliveredValue({ row, className, }: {
229
- row: Pick<ResolvedContextRow, "key" | "delivered" | "onRequest">;
277
+ declare function ContextDeliveredValue({ row, load, className, }: {
278
+ row: Pick<ResolvedContextRow, "key" | "delivered" | "onRequest" | "deliveredBlocks">;
279
+ /** The host's viewer door; without one, sizes show and the text reads "—". */
280
+ load?: ContextViewLoader | undefined;
230
281
  className?: string;
231
282
  }): react.JSX.Element | null;
283
+ /** One viewed text: its title and size, then the exact text, fetched on mount. */
284
+ declare function DeliveredSection({ title, target, ref_, load, }: {
285
+ title: string;
286
+ target: ContextViewTarget;
287
+ ref_: ContextDeliveredRef;
288
+ load?: ContextViewLoader | undefined;
289
+ }): react.JSX.Element;
290
+
291
+ interface ContextReceiptBlocksProps {
292
+ blocks: readonly ContextReceiptBlock[];
293
+ /** The open block (master/detail). */
294
+ selectedId?: string | null;
295
+ onOpenBlock?: (id: string) => void;
296
+ density?: ContextRulesDensity;
297
+ className?: string;
298
+ }
299
+ /**
300
+ * "Also sent" — every block of server text the model received that is not a
301
+ * single value (receipt `blocks`, RULES.md §5): read-only rows, label + chars,
302
+ * aligned to the context table's Chars column. Renders nothing when empty.
303
+ */
304
+ declare function ContextReceiptBlocks({ blocks, selectedId, onOpenBlock, density, className, }: ContextReceiptBlocksProps): react.JSX.Element | null;
305
+ /** One block's detail: its name, its size, and exactly what the agent received (on demand). */
306
+ declare function ContextReceiptBlockDetail({ block, load, className, }: {
307
+ block: ContextReceiptBlock;
308
+ load?: ContextViewLoader | undefined;
309
+ className?: string;
310
+ }): react.JSX.Element;
232
311
 
233
- export { ContextDeliveredValue, ContextRulesChip, type ContextRulesChipProps, type ContextRulesDensity, ContextRulesPanelBody, type ContextRulesPanelBodyProps, ContextRulesTable, type ContextRulesTableProps, InlineMaxInput, type InlineMaxInputProps, summarizeContextRows };
312
+ export { ContextDeliveredValue, ContextReceiptBlockDetail, ContextReceiptBlocks, type ContextReceiptBlocksProps, ContextRulesChip, type ContextRulesChipProps, type ContextRulesDensity, ContextRulesPanelBody, type ContextRulesPanelBodyProps, ContextRulesTable, type ContextRulesTableProps, DeliveredSection, InlineMaxInput, type InlineMaxInputProps, summarizeContextRows };
@@ -50,14 +50,51 @@ interface ContextRuleResult {
50
50
  };
51
51
  clamped: boolean;
52
52
  }
53
- /** Text the model actually read for one value (receipt `delivered` / `on_request`). */
54
- interface ContextDeliveredText {
55
- /** Cut at the receipt's cap; `chars` is the whole length. */
53
+ /**
54
+ * What the model read for one value or block, by SIZE and HASH only — never
55
+ * the text (RULES.md §5b: a server-shaped value is fetched on demand, never
56
+ * pushed). The text comes from the viewer (`ContextViewLoader`).
57
+ */
58
+ interface ContextDeliveredRef {
59
+ /** Code-point length of the whole text the model read. */
60
+ chars: number;
61
+ /** SHA-256 hex of that text (UTF-8). */
62
+ sha256: string;
63
+ }
64
+ /** What to view: a value's `delivered` element, its `on_request` text, or a `block`. */
65
+ type ContextViewKind = "delivered" | "on_request" | "block";
66
+ interface ContextViewTarget {
67
+ kind: ContextViewKind;
68
+ /** The value's key, or the block's id. */
69
+ key: string;
70
+ }
71
+ /**
72
+ * The exact text the model received (a sent turn: `GET /ai/context/delivered`)
73
+ * or will receive (the next turn: `POST /ai/context/preview` with `view`).
74
+ */
75
+ interface ContextViewedText {
76
+ kind: ContextViewKind;
77
+ key: string;
56
78
  text: string;
57
79
  chars: number;
58
- truncated: boolean;
59
- /** SHA-256 hex of the whole text (UTF-8). */
60
80
  sha256: string;
81
+ source: "preview" | "wire" | "conversation_prompt" | "turn_record";
82
+ }
83
+ /** The host's door to the viewer API — called only when a person opens a value. */
84
+ type ContextViewLoader = (target: ContextViewTarget) => Promise<ContextViewedText>;
85
+ /**
86
+ * One block of server text the model received this turn that is not a single
87
+ * value — the turn's `<active_context>`, earlier-turn context, the sandbox
88
+ * briefing, skills, memory, the organization catalog… (receipt `blocks`,
89
+ * RULES.md §5). `delivered` is its exact text, cut at the receipt's cap.
90
+ */
91
+ interface ContextReceiptBlock {
92
+ /** Stable id: the per-turn slot it rode in, or the system-prompt addition's name. */
93
+ id: string;
94
+ /** The id in words (`humanizeContextKey`). */
95
+ label: string;
96
+ /** Size and hash; the text comes from the viewer (`kind: "block"`). */
97
+ delivered: ContextDeliveredRef;
61
98
  }
62
99
  type ContextRowOrigin = "page" | "attached" | "system";
63
100
  /** Why the server kept a value from the model on this turn (receipt `blocked_by`). */
@@ -80,9 +117,11 @@ interface ResolvedContextRow extends Omit<ContextRuleResult, "delivery"> {
80
117
  * Display-only, from a receipt: what the model read for this value. When set,
81
118
  * a detail view shows THIS — never `value`, the client's pre-send copy.
82
119
  */
83
- delivered?: ContextDeliveredText;
84
- /** Display-only, from a receipt: what the `context` tool returns for it. */
85
- onRequest?: ContextDeliveredText;
120
+ delivered?: ContextDeliveredRef;
121
+ /** Display-only, from a receipt: what the `context` tool returns for it (size + hash). */
122
+ onRequest?: ContextDeliveredRef;
123
+ /** Display-only, from a receipt: blocks the model received as part of this value. */
124
+ deliveredBlocks?: ContextReceiptBlock[];
86
125
  key: string;
87
126
  label: string;
88
127
  surfaceKey: string;
@@ -134,8 +173,13 @@ interface ContextRulesTableProps {
134
173
  declare function ContextRulesTable({ rows, cap, readOnly, mismatches, onChange, onOpenRow, density, selectedKey, className, }: ContextRulesTableProps): react.JSX.Element;
135
174
 
136
175
  interface ContextRulesChipProps {
137
- /** The page's name — "Notes", "Invoice 1042". */
138
- label: string;
176
+ /**
177
+ * The group's own name — "Notes", "Invoice 1042". Empty or omitted: the chip
178
+ * shows NO text (icon + count only). Never pass a generic word such as
179
+ * "Context" here — when there is no real name, there is no label (Arman,
180
+ * 2026-10-01).
181
+ */
182
+ label?: string | null | undefined;
139
183
  rows: readonly ResolvedContextRow[];
140
184
  cap: number;
141
185
  /** Page context on/off. Omit when there is no page: the master switch is hidden. */
@@ -167,7 +211,7 @@ declare function summarizeContextRows(rows: readonly ResolvedContextRow[]): {
167
211
  charsLabel: string;
168
212
  };
169
213
  /**
170
- * The composer's context chip and the surface it opens: a header (label,
214
+ * The composer's value-group chip — far right of the composer's one row — and the surface it opens: a header (label,
171
215
  * "N · chars" summary, page master switch, reset-all, full view) over the
172
216
  * compact rules table. Popover on desktop, bottom sheet on mobile.
173
217
  */
@@ -177,6 +221,10 @@ interface ContextRulesPanelBodyProps {
177
221
  rows: readonly ResolvedContextRow[];
178
222
  cap: number;
179
223
  mismatches?: readonly ContextReceiptMismatch[];
224
+ /** The latest receipt's `blocks`: listed read-only under "Also sent". */
225
+ blocks?: readonly ContextReceiptBlock[];
226
+ /** The viewer door (RULES.md §5b): fetches a value's or block's exact text when it opens. */
227
+ loadView?: ContextViewLoader;
180
228
  readOnly?: boolean | undefined;
181
229
  onChange: (key: string, surfaceKey: string, next: SavedContextRule | null) => void;
182
230
  /** Host content under the built-in controls (a value preview, source link…). */
@@ -192,7 +240,7 @@ interface ContextRulesPanelBodyProps {
192
240
  * the left, the open row's controls, layer breakdown and host detail on the
193
241
  * right. On mobile: list, then detail with Back.
194
242
  */
195
- declare function ContextRulesPanelBody({ rows, cap, mismatches, readOnly, onChange, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): react.JSX.Element;
243
+ declare function ContextRulesPanelBody({ rows, cap, mismatches, blocks, loadView, readOnly, onChange, renderDetail, isMobile, selectedKey: selectedProp, onSelectedKeyChange, className, }: ContextRulesPanelBodyProps): react.JSX.Element;
196
244
 
197
245
  interface InlineMaxInputProps {
198
246
  /** The person's own limit, or null when inherited. */
@@ -218,16 +266,47 @@ interface InlineMaxInputProps {
218
266
  declare function InlineMaxInput({ value, inherited, cap, onCommit, disabled, label, comfortable, placeholder, }: InlineMaxInputProps): react.JSX.Element;
219
267
 
220
268
  /**
221
- * What the model READ for one value — the receipt's `delivered` (its own
222
- * element in the rendered context block) and, for an on-request value, what
223
- * the `context` tool returns (`on_request`). Verbatim; never the client's copy.
224
- * With no receipt yet: a server-authoritative value (RULES.md §5a) says the
225
- * server fills it — never the client's guess; anything else renders nothing
226
- * (the host may then show the value the page will send, labelled so). §5.
269
+ * What the model READ for one value — fetched from the viewer when the detail
270
+ * opens, never pushed (RULES.md §5b): its own element (`delivered`), the blocks
271
+ * it rode with (`deliveredBlocks` — the Organization's catalog), and for an
272
+ * on-request value what the `context` tool returns (`onRequest`). Verbatim;
273
+ * never the client's copy. With no receipt yet: a server-authoritative value
274
+ * says the server fills it; anything else renders nothing (the host may show
275
+ * the value the page will send, labelled so).
227
276
  */
228
- declare function ContextDeliveredValue({ row, className, }: {
229
- row: Pick<ResolvedContextRow, "key" | "delivered" | "onRequest">;
277
+ declare function ContextDeliveredValue({ row, load, className, }: {
278
+ row: Pick<ResolvedContextRow, "key" | "delivered" | "onRequest" | "deliveredBlocks">;
279
+ /** The host's viewer door; without one, sizes show and the text reads "—". */
280
+ load?: ContextViewLoader | undefined;
230
281
  className?: string;
231
282
  }): react.JSX.Element | null;
283
+ /** One viewed text: its title and size, then the exact text, fetched on mount. */
284
+ declare function DeliveredSection({ title, target, ref_, load, }: {
285
+ title: string;
286
+ target: ContextViewTarget;
287
+ ref_: ContextDeliveredRef;
288
+ load?: ContextViewLoader | undefined;
289
+ }): react.JSX.Element;
290
+
291
+ interface ContextReceiptBlocksProps {
292
+ blocks: readonly ContextReceiptBlock[];
293
+ /** The open block (master/detail). */
294
+ selectedId?: string | null;
295
+ onOpenBlock?: (id: string) => void;
296
+ density?: ContextRulesDensity;
297
+ className?: string;
298
+ }
299
+ /**
300
+ * "Also sent" — every block of server text the model received that is not a
301
+ * single value (receipt `blocks`, RULES.md §5): read-only rows, label + chars,
302
+ * aligned to the context table's Chars column. Renders nothing when empty.
303
+ */
304
+ declare function ContextReceiptBlocks({ blocks, selectedId, onOpenBlock, density, className, }: ContextReceiptBlocksProps): react.JSX.Element | null;
305
+ /** One block's detail: its name, its size, and exactly what the agent received (on demand). */
306
+ declare function ContextReceiptBlockDetail({ block, load, className, }: {
307
+ block: ContextReceiptBlock;
308
+ load?: ContextViewLoader | undefined;
309
+ className?: string;
310
+ }): react.JSX.Element;
232
311
 
233
- export { ContextDeliveredValue, ContextRulesChip, type ContextRulesChipProps, type ContextRulesDensity, ContextRulesPanelBody, type ContextRulesPanelBodyProps, ContextRulesTable, type ContextRulesTableProps, InlineMaxInput, type InlineMaxInputProps, summarizeContextRows };
312
+ export { ContextDeliveredValue, ContextReceiptBlockDetail, ContextReceiptBlocks, type ContextReceiptBlocksProps, ContextRulesChip, type ContextRulesChipProps, type ContextRulesDensity, ContextRulesPanelBody, type ContextRulesPanelBodyProps, ContextRulesTable, type ContextRulesTableProps, DeliveredSection, InlineMaxInput, type InlineMaxInputProps, summarizeContextRows };