@ai-matrx/records 0.86.2 → 0.87.2

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.
@@ -150,6 +150,19 @@ interface Column {
150
150
  choices?: string[];
151
151
  /** For a link column: what it may point at (a custom table's id, or entity tokens). */
152
152
  linksTo?: string[];
153
+ /**
154
+ * For a link column: the alias, in the SAME port, that serves the table it points at — so a form can list
155
+ * the linked rows to pick from. Absent when no source of this Applet serves that table.
156
+ */
157
+ linksToSource?: string;
158
+ /**
159
+ * The store's own answer to "does this column hold more than one value" (`custom.field.multi`). A choice
160
+ * column's type is `list` whether it takes one word or many — only this tells them apart (Status, one
161
+ * value, drew as four switches and the store refused the list it sent: social planner, 2026-10-08).
162
+ */
163
+ multi?: boolean;
164
+ /** The column a row is named by (the table's `title_field`) — what a link to the row reads as. */
165
+ title?: boolean;
153
166
  readOnly: boolean;
154
167
  }
155
168
  /** §0. One row, keyed by `Column.key`. Underscore keys are the runtime's own. */
@@ -150,6 +150,19 @@ interface Column {
150
150
  choices?: string[];
151
151
  /** For a link column: what it may point at (a custom table's id, or entity tokens). */
152
152
  linksTo?: string[];
153
+ /**
154
+ * For a link column: the alias, in the SAME port, that serves the table it points at — so a form can list
155
+ * the linked rows to pick from. Absent when no source of this Applet serves that table.
156
+ */
157
+ linksToSource?: string;
158
+ /**
159
+ * The store's own answer to "does this column hold more than one value" (`custom.field.multi`). A choice
160
+ * column's type is `list` whether it takes one word or many — only this tells them apart (Status, one
161
+ * value, drew as four switches and the store refused the list it sent: social planner, 2026-10-08).
162
+ */
163
+ multi?: boolean;
164
+ /** The column a row is named by (the table's `title_field`) — what a link to the row reads as. */
165
+ title?: boolean;
153
166
  readOnly: boolean;
154
167
  }
155
168
  /** §0. One row, keyed by `Column.key`. Underscore keys are the runtime's own. */
package/dist/index.cjs CHANGED
@@ -2386,9 +2386,10 @@ function sourceArchivedOf(value) {
2386
2386
  }
2387
2387
 
2388
2388
  // src/ops.ts
2389
+ var import_global_slot = require("@ai-matrx/kit/global-slot");
2389
2390
  var REMEMBER_MS = 3e4;
2390
2391
  var REMEMBER_MAX = 500;
2391
- var ours = /* @__PURE__ */ new Map();
2392
+ var ours = (0, import_global_slot.globalSlot)("ai-matrx.records.op-ledger", () => /* @__PURE__ */ new Map());
2392
2393
  function trim(now) {
2393
2394
  for (const [id, at] of ours) {
2394
2395
  if (now - at <= REMEMBER_MS) break;