@graview/core 0.1.54 → 0.1.55

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 (111) hide show
  1. package/dist/alias-findings.d.ts +40 -0
  2. package/dist/alias-findings.d.ts.map +1 -0
  3. package/dist/alias-findings.js +95 -0
  4. package/dist/alias-findings.js.map +1 -0
  5. package/dist/app.d.ts +13 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js.map +1 -1
  8. package/dist/catalog.d.ts +32 -0
  9. package/dist/catalog.d.ts.map +1 -1
  10. package/dist/catalog.js +17 -1
  11. package/dist/catalog.js.map +1 -1
  12. package/dist/check.d.ts +2 -0
  13. package/dist/check.d.ts.map +1 -1
  14. package/dist/check.js +2 -0
  15. package/dist/check.js.map +1 -1
  16. package/dist/cli/check/aliases.d.ts +11 -0
  17. package/dist/cli/check/aliases.d.ts.map +1 -0
  18. package/dist/cli/check/aliases.js +17 -0
  19. package/dist/cli/check/aliases.js.map +1 -0
  20. package/dist/cli/check/context.d.ts +2 -0
  21. package/dist/cli/check/context.d.ts.map +1 -1
  22. package/dist/cli/check/context.js.map +1 -1
  23. package/dist/cli/check/index.d.ts +2 -0
  24. package/dist/cli/check/index.d.ts.map +1 -1
  25. package/dist/cli/check/index.js +2 -0
  26. package/dist/cli/check/index.js.map +1 -1
  27. package/dist/cli/check/jobs.d.ts +12 -0
  28. package/dist/cli/check/jobs.d.ts.map +1 -0
  29. package/dist/cli/check/jobs.js +25 -0
  30. package/dist/cli/check/jobs.js.map +1 -0
  31. package/dist/cli/check.d.ts +13 -0
  32. package/dist/cli/check.d.ts.map +1 -1
  33. package/dist/cli/check.js +25 -2
  34. package/dist/cli/check.js.map +1 -1
  35. package/dist/cli/describe.d.ts.map +1 -1
  36. package/dist/cli/describe.js +41 -0
  37. package/dist/cli/describe.js.map +1 -1
  38. package/dist/cli/document-schema.d.ts.map +1 -1
  39. package/dist/cli/document-schema.js +7 -0
  40. package/dist/cli/document-schema.js.map +1 -1
  41. package/dist/compose.d.ts +99 -0
  42. package/dist/compose.d.ts.map +1 -0
  43. package/dist/compose.js +245 -0
  44. package/dist/compose.js.map +1 -0
  45. package/dist/document/compile-checked.d.ts.map +1 -1
  46. package/dist/document/compile-checked.js +11 -5
  47. package/dist/document/compile-checked.js.map +1 -1
  48. package/dist/document/compiled.d.ts.map +1 -1
  49. package/dist/document/compiled.js +6 -0
  50. package/dist/document/compiled.js.map +1 -1
  51. package/dist/document/design-findings.d.ts +32 -0
  52. package/dist/document/design-findings.d.ts.map +1 -0
  53. package/dist/document/design-findings.js +593 -0
  54. package/dist/document/design-findings.js.map +1 -0
  55. package/dist/document/edit.d.ts +1 -1
  56. package/dist/document/edit.d.ts.map +1 -1
  57. package/dist/document/edit.js +231 -2
  58. package/dist/document/edit.js.map +1 -1
  59. package/dist/document/findings.d.ts +8 -2
  60. package/dist/document/findings.d.ts.map +1 -1
  61. package/dist/document/findings.js +4 -3
  62. package/dist/document/findings.js.map +1 -1
  63. package/dist/document/graview-template.d.ts +3 -3
  64. package/dist/document/purpose-spec.d.ts +37 -0
  65. package/dist/document/purpose-spec.d.ts.map +1 -0
  66. package/dist/document/purpose-spec.js +41 -0
  67. package/dist/document/purpose-spec.js.map +1 -0
  68. package/dist/document/schema.d.ts +24 -11
  69. package/dist/document/schema.d.ts.map +1 -1
  70. package/dist/document/schema.js +16 -0
  71. package/dist/document/schema.js.map +1 -1
  72. package/dist/document/to-document.d.ts.map +1 -1
  73. package/dist/document/to-document.js +5 -1
  74. package/dist/document/to-document.js.map +1 -1
  75. package/dist/document.schema.json +120 -2
  76. package/dist/friction-record.d.ts +52 -0
  77. package/dist/friction-record.d.ts.map +1 -0
  78. package/dist/friction-record.js +36 -0
  79. package/dist/friction-record.js.map +1 -0
  80. package/dist/friction.d.ts +209 -0
  81. package/dist/friction.d.ts.map +1 -0
  82. package/dist/friction.js +302 -0
  83. package/dist/friction.js.map +1 -0
  84. package/dist/index.d.ts +3 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +2 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/job-findings.d.ts +39 -0
  89. package/dist/job-findings.d.ts.map +1 -0
  90. package/dist/job-findings.js +171 -0
  91. package/dist/job-findings.js.map +1 -0
  92. package/dist/job-shape.d.ts +57 -0
  93. package/dist/job-shape.d.ts.map +1 -0
  94. package/dist/job-shape.js +5 -0
  95. package/dist/job-shape.js.map +1 -0
  96. package/dist/jobs.d.ts +62 -0
  97. package/dist/jobs.d.ts.map +1 -0
  98. package/dist/jobs.js +112 -0
  99. package/dist/jobs.js.map +1 -0
  100. package/dist/learn.d.ts +151 -0
  101. package/dist/learn.d.ts.map +1 -0
  102. package/dist/learn.js +520 -0
  103. package/dist/learn.js.map +1 -0
  104. package/dist/schema/types.d.ts +9 -0
  105. package/dist/schema/types.d.ts.map +1 -1
  106. package/dist/search.d.ts.map +1 -1
  107. package/dist/search.js +2 -0
  108. package/dist/search.js.map +1 -1
  109. package/dist/version.d.ts +1 -1
  110. package/dist/version.js +1 -1
  111. package/package.json +17 -1
package/dist/learn.js ADDED
@@ -0,0 +1,520 @@
1
+ /**
2
+ * `@graview/core/learn` — APPS IMPROVE FROM USE (Roadmap f-learned-suggestions).
3
+ *
4
+ * The app's own actor ("Graview, tidying") suggests changes to records and
5
+ * a person accepts or declines each (`@graview/core/tidying`). This is the
6
+ * same actor suggesting changes to the APP — the declaration — from
7
+ * evidence of use: the words people searched with and found nothing
8
+ * (`@graview/core/friction`), the values a text field keeps repeating and
9
+ * the dates written into one (the records), the same two acts taken one
10
+ * after the other on one record (the op log), a place nobody opens (counts
11
+ * a host passes), and an agent's tool calls that went wrong.
12
+ *
13
+ * Each is offered only when at least `minPeople` distinct people show it —
14
+ * never one person's habit — and each is a suggestion, never a change:
15
+ * `learnFromUse` reads and writes nothing, `acceptAppSuggestion` applies a
16
+ * suggestion's edits through `editDocument` as one change with its lineage
17
+ * (`{ basis, suggestion }`), and `declineAppSuggestion` is a decision a host
18
+ * keeps (`LearnedStore`; `graview serve` keeps `learned.json` beside the
19
+ * store) and hands back as `declined`, so the same suggestion — by its
20
+ * `key`, stable across runs — is never offered again.
21
+ *
22
+ * Its own entry: a page draws nothing with it, and it reaches the editor.
23
+ */
24
+ import { editDocument } from "./document/edit.js";
25
+ import { lineageOf } from "./ops/lineage.js";
26
+ import { undoneIn } from "./ops/log.js";
27
+ import { humanizeField, withArticle } from "./schema/define-node.js";
28
+ import { placeSlug } from "./views/types.js";
29
+ /** How far after a search that found nothing a person's next change is taken as what they were looking for. */
30
+ const FOLLOW_MS = 10 * 60_000;
31
+ /** How close two acts on one record are to be one sequence. */
32
+ const SEQUENCE_MS = 5 * 60_000;
33
+ /** The judge's name on what it suggests and what an accepted suggestion changes (`lineage.actor`). */
34
+ export const LEARNING_ACTOR = "learns from use";
35
+ // ── who ─────────────────────────────────────────────────────────────────────
36
+ /** The person behind an author — whom an agent acted for — or nobody: the app's own actor, a rule, the system. */
37
+ function personOf(author) {
38
+ if (!author)
39
+ return undefined;
40
+ if (author.onBehalfOf)
41
+ return personOf(author.onBehalfOf);
42
+ if (author.automated || author.kind === "system" || author.kind === "rule" || author.kind === "visitor")
43
+ return undefined;
44
+ return `${author.kind}:${author.id ?? "?"}`;
45
+ }
46
+ const people = (count) => `${count} ${count === 1 ? "person" : "people"}`;
47
+ const times = (count) => (count === 1 ? "once" : `${count} times`);
48
+ const listed = (words) => (words.length < 2 ? words.join("") : `${words.slice(0, -1).join(", ")} and ${words.at(-1)}`);
49
+ // ── the words the app already says ──────────────────────────────────────────
50
+ /** A word as it is compared: lower case, a plural's `s` gone. */
51
+ const stem = (word) => (word.length > 3 && word.endsWith("s") && !word.endsWith("ss") ? word.slice(0, -1) : word);
52
+ const wordsOf = (text) => text.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((word) => word.length > 0);
53
+ /** Every word a kind, its noun, plural, fields, labels and aliases are called by, stemmed. */
54
+ function namesOf(document) {
55
+ const names = new Set();
56
+ const add = (text) => {
57
+ if (text)
58
+ for (const word of wordsOf(text))
59
+ names.add(stem(word));
60
+ };
61
+ for (const [kind, spec] of Object.entries(document.kinds)) {
62
+ add(kind);
63
+ add(humanizeField(kind));
64
+ add(spec.noun);
65
+ add(spec.plural);
66
+ for (const alias of spec.aliases ?? [])
67
+ add(alias);
68
+ for (const [field, f] of Object.entries(spec.fields)) {
69
+ add(field);
70
+ add(humanizeField(field));
71
+ add(f.label);
72
+ for (const alias of f.aliases ?? [])
73
+ add(alias);
74
+ }
75
+ }
76
+ return names;
77
+ }
78
+ /** Words as a search's are grouped: lower case, whitespace folded, the punctuation at the ends gone. */
79
+ const foldWords = (words) => words
80
+ .toLowerCase()
81
+ .replace(/\s+/g, " ")
82
+ .replace(/^[\s\p{P}]+|[\s\p{P}]+$/gu, "");
83
+ /** Words that could be another name for something: one to three words of letters, three to forty characters. */
84
+ const couldBeAName = (words) => words.length >= 3 && words.length <= 40 && /^[a-zß-ÿ][a-zß-ÿ'-]*(?: [a-zß-ÿ][a-zß-ÿ'-]*){0,2}$/.test(words);
85
+ // ── the log, read once ──────────────────────────────────────────────────────
86
+ /** The fields of a record's own a framework keeps, never a field a person wrote. */
87
+ const KEPT = new Set(["id", "kind"]);
88
+ function readLog(log, records) {
89
+ const undone = undoneIn(log);
90
+ const ops = log.filter((op) => !op.undoes && !op.suggests && !op.withheld && !undone.has(op.id));
91
+ const writer = new Map();
92
+ const kindOf = new Map(records.map((record) => [record.id, record.kind]));
93
+ for (const op of ops) {
94
+ const who = personOf(op.author);
95
+ for (const primitive of op.primitives) {
96
+ if (primitive.op === "add-node")
97
+ kindOf.set(primitive.node.id, primitive.node.kind);
98
+ const fields = primitive.op === "add-node" ? Object.keys(primitive.node) : primitive.op === "patch-node" ? Object.keys(primitive.after) : [];
99
+ const id = primitive.op === "add-node" ? primitive.node.id : primitive.op === "patch-node" ? primitive.id : undefined;
100
+ if (id === undefined)
101
+ continue;
102
+ for (const field of fields) {
103
+ if (KEPT.has(field))
104
+ continue;
105
+ if (who)
106
+ writer.set(`${id}\u0000${field}`, who);
107
+ else
108
+ writer.delete(`${id}\u0000${field}`);
109
+ }
110
+ }
111
+ }
112
+ return { ops, writer, kindOf };
113
+ }
114
+ /** The record an op is about: its subject, else the first record it wrote. */
115
+ const subjectOf = (op) => {
116
+ const id = op.mutation?.args?.["id"];
117
+ return typeof id === "string" ? id : op.writes[0];
118
+ };
119
+ /** The fields of its subject an op changed. */
120
+ function fieldsChanged(op, subject) {
121
+ return op.primitives.flatMap((primitive) => (primitive.op === "patch-node" && primitive.id === subject ? Object.keys(primitive.after).filter((field) => !KEPT.has(field)) : []));
122
+ }
123
+ /**
124
+ * ANOTHER WORD FOR A KIND OR A FIELD: words several people searched with
125
+ * and found nothing, that nothing in the app is called. What each of them
126
+ * did next — the first change they made within ten minutes — says what
127
+ * they were looking for: a field of a kind, when enough of them changed the
128
+ * same one; else the kind, by what they changed or where they searched.
129
+ */
130
+ function aliases(ctx) {
131
+ const names = namesOf(ctx.document);
132
+ const groups = new Map();
133
+ for (const event of ctx.friction) {
134
+ if (event.type !== "search-miss")
135
+ continue;
136
+ const who = personOf(event.by);
137
+ const words = foldWords(event.words);
138
+ if (!who || !couldBeAName(words) || wordsOf(words).every((word) => names.has(stem(word))))
139
+ continue;
140
+ const group = groups.get(words) ?? { people: new Map(), times: 0 };
141
+ group.times += 1;
142
+ // What they did next, on the log: the kind of the record they changed, and the one field when it was one.
143
+ const after = Date.parse(event.at);
144
+ const next = ctx.log?.ops.find((op) => personOf(op.author) === who && Date.parse(op.at) > after && Date.parse(op.at) - after <= FOLLOW_MS);
145
+ const subject = next ? subjectOf(next) : undefined;
146
+ const kind = (subject && ctx.log?.kindOf.get(subject)) ?? event.kind;
147
+ const changed = next && subject ? fieldsChanged(next, subject) : [];
148
+ const vote = { ...(kind ? { kind } : {}), ...(changed.length === 1 ? { field: changed[0] } : {}) };
149
+ // A person's later evidence stands in for their earlier: one person, one vote.
150
+ if (vote.kind || !group.people.has(who))
151
+ group.people.set(who, vote.kind ? vote : (group.people.get(who) ?? {}));
152
+ groups.set(words, group);
153
+ }
154
+ const out = [];
155
+ for (const [words, group] of groups) {
156
+ if (group.people.size < ctx.minPeople)
157
+ continue;
158
+ const tally = (keyOf) => {
159
+ const counts = new Map();
160
+ for (const vote of group.people.values()) {
161
+ const key = keyOf(vote);
162
+ if (key)
163
+ counts.set(key, (counts.get(key) ?? 0) + 1);
164
+ }
165
+ return [...counts].sort(([a, one], [b, other]) => other - one || a.localeCompare(b))[0];
166
+ };
167
+ const field = tally((vote) => (vote.kind && vote.field && ctx.document.kinds[vote.kind]?.fields[vote.field] ? `${vote.kind}.${vote.field}` : undefined));
168
+ const kind = tally((vote) => (vote.kind && ctx.document.kinds[vote.kind] ? vote.kind : undefined));
169
+ const evidence = { people: group.people.size, times: group.times };
170
+ if (field && field[1] >= ctx.minPeople) {
171
+ const [of, name] = field[0].split(".");
172
+ out.push({
173
+ key: `alias:${of}.${name}:${words}`.slice(0, 120),
174
+ edits: [{ op: "add-alias", kind: of, field: name, alias: words }],
175
+ said: `Take “${words}” as another word for ${of}'s ${name}, so search and the seat know it.`,
176
+ why: `${people(group.people.size)} searched for “${words}” and found nothing, ${times(group.times)}; ${people(field[1])} then changed ${of}'s ${name}.`,
177
+ evidence,
178
+ });
179
+ }
180
+ else if (kind && kind[1] >= ctx.minPeople) {
181
+ const spec = ctx.document.kinds[kind[0]];
182
+ out.push({
183
+ key: `alias:${kind[0]}:${words}`.slice(0, 120),
184
+ edits: [{ op: "add-alias", kind: kind[0], alias: words }],
185
+ said: `Take “${words}” as another word for ${withArticle(spec.noun ?? humanizeField(kind[0]).toLowerCase())}, so searching it finds the ${(spec.plural ?? `${kind[0]}s`).toLowerCase()}.`,
186
+ why: `${people(group.people.size)} searched for “${words}” and found nothing, ${times(group.times)}, ${kind[1] === group.people.size ? "each" : `${kind[1]} of them`} looking among the ${(spec.plural ?? `${kind[0]}s`).toLowerCase()}.`,
187
+ evidence,
188
+ });
189
+ }
190
+ }
191
+ return out;
192
+ }
193
+ /** The text fields of each kind a record's label is not written from, with their values across the records. */
194
+ function textFields(ctx) {
195
+ const out = [];
196
+ for (const [kind, spec] of Object.entries(ctx.document.kinds)) {
197
+ const named = new Set([...(spec.label ?? "").matchAll(/\{\s*([A-Za-z_][A-Za-z0-9_]*)/g)].map((match) => match[1]));
198
+ // Unsaid, a record is named by its first required word field (`defaultLabelField`): never a choice.
199
+ if (!spec.label) {
200
+ const first = Object.entries(spec.fields).find(([, f]) => f.type === "string" && f.required) ?? Object.entries(spec.fields).find(([, f]) => f.type === "string");
201
+ if (first)
202
+ named.add(first[0]);
203
+ }
204
+ for (const [field, f] of Object.entries(spec.fields)) {
205
+ if ((f.type !== "string" && f.type !== "text") || named.has(field) || f.format === "markdown")
206
+ continue;
207
+ const values = ctx.records
208
+ .filter((record) => record.kind === kind && typeof record[field] === "string" && record[field].trim() !== "")
209
+ .map((record) => {
210
+ const who = ctx.log?.writer.get(`${record.id}\u0000${field}`);
211
+ return { value: record[field].trim(), ...(who ? { who } : {}) };
212
+ });
213
+ if (values.length > 0)
214
+ out.push({ kind, field, values });
215
+ }
216
+ }
217
+ return out;
218
+ }
219
+ /**
220
+ * A CHOICE FIELD THE APP IS MISSING: a text field whose values, across
221
+ * at least six records, are two to eight values each written at least
222
+ * twice, by `minPeople` people or more — retyped to a choice of them, the
223
+ * most used first. Values that convert are kept, as every retype keeps them.
224
+ */
225
+ function choices(ctx) {
226
+ const out = [];
227
+ for (const { kind, field, values } of textFields(ctx)) {
228
+ if (values.length < 6)
229
+ continue;
230
+ const counts = new Map();
231
+ for (const { value } of values)
232
+ counts.set(value, (counts.get(value) ?? 0) + 1);
233
+ const options = [...counts].sort(([a, one], [b, other]) => other - one || a.localeCompare(b)).map(([value]) => value);
234
+ if (options.length < 2 || options.length > 8 || options.length * 2 > values.length)
235
+ continue;
236
+ if ([...counts.values()].some((count) => count < 2) || options.some((option) => option.length > 40))
237
+ continue;
238
+ const writers = new Set(values.flatMap((one) => (one.who ? [one.who] : [])));
239
+ if (writers.size < ctx.minPeople)
240
+ continue;
241
+ const plural = (ctx.document.kinds[kind].plural ?? `${kind}s`).toLowerCase();
242
+ out.push({
243
+ key: `choice:${kind}.${field}`,
244
+ edits: [{ op: "retype-field", kind, field, type: "enum", options }],
245
+ said: `Make ${kind}'s ${field} a choice of ${listed(options)}, so it is picked rather than typed, and a list can be grouped and filtered by it.`,
246
+ why: `${values.length} ${plural}' ${field} hold only these ${options.length} values, written by ${people(writers.size)}.`,
247
+ evidence: { people: writers.size, times: values.length },
248
+ });
249
+ }
250
+ return out;
251
+ }
252
+ /** A date written in words: 2026-11-02, 11/2/2026, March 3, 3 March. */
253
+ const MONTH = "(?:jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[a-z]*\\.?";
254
+ const DATE = new RegExp(`\\b\\d{4}-\\d{2}-\\d{2}\\b|\\b\\d{1,2}/\\d{1,2}/(?:\\d{4}|\\d{2})\\b|\\b${MONTH} \\d{1,2}(?:st|nd|rd|th)?\\b|\\b\\d{1,2}(?:st|nd|rd|th)? ${MONTH}(?=\\s|$|[.,;])`, "i");
255
+ /**
256
+ * A DATE FIELD THE APP IS MISSING: a text field most of whose values —
257
+ * three in five, of at least five records — carry a date in words, written
258
+ * by `minPeople` people or more. A date field is added beside it, and
259
+ * nothing is moved: the dates stay in the words until somebody moves them.
260
+ */
261
+ function dates(ctx) {
262
+ const out = [];
263
+ for (const { kind, field, values } of textFields(ctx)) {
264
+ if (values.length < 5)
265
+ continue;
266
+ const dated = values.filter((one) => DATE.test(one.value));
267
+ if (dated.length * 5 < values.length * 3)
268
+ continue;
269
+ const writers = new Set(dated.flatMap((one) => (one.who ? [one.who] : [])));
270
+ if (writers.size < ctx.minPeople)
271
+ continue;
272
+ const spec = ctx.document.kinds[kind];
273
+ const name = /date$/i.test(field) ? `${field}On` : `${field}Date`;
274
+ if (spec.fields[name] || spec.edges?.[name]) {
275
+ ctx.skipped.push({ key: `date:${kind}.${field}`, why: `${kind}'s ${field} holds dates, and ${kind} already has a ${name} to suggest beside it.` });
276
+ continue;
277
+ }
278
+ const plural = (spec.plural ?? `${kind}s`).toLowerCase();
279
+ out.push({
280
+ key: `date:${kind}.${field}`,
281
+ edits: [{ op: "add-field", kind, field: name, type: "date", description: `The date people wrote into ${field}.` }],
282
+ said: `Give ${kind} a date field, ${name}, beside ${field}, so a calendar, a sort and a rule can read it. Nothing is moved: the dates stay in ${field} until somebody moves them by hand.`,
283
+ why: `${dated.length} of ${values.length} ${plural}' ${field} carry a date in words, written by ${people(writers.size)}.`,
284
+ evidence: { people: writers.size, times: dated.length },
285
+ });
286
+ }
287
+ return out;
288
+ }
289
+ /** What keeps an act from being part of one composed act, or nothing: an act that only sets its subject's fields composes. */
290
+ function cannotCompose(document, name) {
291
+ const act = document.acts?.[name];
292
+ if (!act)
293
+ return `${name} is not an act the document writes (it is code, or derived from the kinds)`;
294
+ const more = Object.keys(act).filter((key) => !["title", "description", "on", "sets", "writes", "args", "allowedWhen", "refusal"].includes(key));
295
+ if (more.length > 0)
296
+ return `${name} does more than set its record's fields (${more.join(", ")})`;
297
+ if (!act["on"] || Array.isArray(act["on"]))
298
+ return `${name} is not on one kind`;
299
+ return undefined;
300
+ }
301
+ /**
302
+ * ONE ACT FOR A SEQUENCE SEVERAL PEOPLE REPEAT: two acts one person takes
303
+ * one after the other, within five minutes, on the same record, by
304
+ * `minPeople` people or more — composed into one act when the act language
305
+ * can say it: both document acts that only set fields of the same kind,
306
+ * neither asking for or setting a field the other does, the second with no
307
+ * condition of its own (it would read the record after the first). Pairs
308
+ * alone; a longer sequence is suggested pair by pair.
309
+ */
310
+ function sequences(ctx) {
311
+ if (!ctx.log)
312
+ return [];
313
+ const groups = new Map();
314
+ const last = new Map();
315
+ for (const op of ctx.log.ops) {
316
+ const who = personOf(op.author);
317
+ if (!who || !op.mutation)
318
+ continue;
319
+ const before = last.get(who);
320
+ last.set(who, op);
321
+ if (!before?.mutation || before.mutation.name === op.mutation.name)
322
+ continue;
323
+ const subject = subjectOf(op);
324
+ if (!subject || subjectOf(before) !== subject || Date.parse(op.at) - Date.parse(before.at) > SEQUENCE_MS)
325
+ continue;
326
+ const key = `${before.mutation.name}>${op.mutation.name}`;
327
+ const group = groups.get(key) ?? { first: before.mutation.name, second: op.mutation.name, people: new Set(), times: 0 };
328
+ group.people.add(who);
329
+ group.times += 1;
330
+ groups.set(key, group);
331
+ }
332
+ const out = [];
333
+ for (const [sequence, { first, second, people: who, times: count }] of groups) {
334
+ if (who.size < ctx.minPeople)
335
+ continue;
336
+ const key = `act:${sequence}`.slice(0, 120);
337
+ const why = `${people(who.size)} took ${first} then ${second} on the same record, ${times(count)}.`;
338
+ const refused = cannotCompose(ctx.document, first) ?? cannotCompose(ctx.document, second);
339
+ if (refused) {
340
+ ctx.skipped.push({ key, why: `${why} They cannot be one act: ${refused}.` });
341
+ continue;
342
+ }
343
+ const a = ctx.document.acts[first];
344
+ const b = ctx.document.acts[second];
345
+ const fieldsOf = (act) => [...Object.keys(act["sets"] ?? {}), ...(act["writes"] ?? []), ...Object.keys(act["args"] ?? {})];
346
+ const shared = fieldsOf(a).filter((field) => fieldsOf(b).includes(field));
347
+ const name = `${first}-and-${second}`;
348
+ const reason = a["on"] !== b["on"] ? `${first} is on ${a["on"]} and ${second} on ${b["on"]}` : shared.length > 0 ? `both set ${listed(shared)}` : b["allowedWhen"] ? `${second}'s condition would read the record after ${first}` : ctx.document.acts[name] ? `the name ${name} is taken` : undefined;
349
+ if (reason) {
350
+ ctx.skipped.push({ key, why: `${why} They cannot be one act: ${reason}.` });
351
+ continue;
352
+ }
353
+ const titleOf = (act, actName) => act["title"] ?? humanizeField(actName);
354
+ const title = `${titleOf(a, first)}, then ${titleOf(b, second).replace(/^./, (letter) => letter.toLowerCase())}`.slice(0, 80);
355
+ const sets = { ...(a["sets"] ?? {}), ...(b["sets"] ?? {}) };
356
+ const writes = [...(a["writes"] ?? []), ...(b["writes"] ?? [])];
357
+ const args = { ...(a["args"] ?? {}), ...(b["args"] ?? {}) };
358
+ out.push({
359
+ key,
360
+ edits: [
361
+ {
362
+ op: "add-act",
363
+ act: name,
364
+ title,
365
+ description: `${titleOf(a, first)} and ${titleOf(b, second).replace(/^./, (letter) => letter.toLowerCase())}, as one act.`.slice(0, 500),
366
+ on: a["on"],
367
+ ...(Object.keys(sets).length > 0 ? { sets } : {}),
368
+ ...(writes.length > 0 ? { writes } : {}),
369
+ ...(Object.keys(args).length > 0 ? { args } : {}),
370
+ ...(a["allowedWhen"] ? { allowedWhen: a["allowedWhen"], ...(a["refusal"] ? { refusal: a["refusal"] } : {}) } : {}),
371
+ },
372
+ ],
373
+ said: `Add one act, “${title}”, that does what ${first} and ${second} do one after the other.`,
374
+ why,
375
+ evidence: { people: who.size, times: count },
376
+ });
377
+ }
378
+ return out;
379
+ }
380
+ /**
381
+ * A PLACE NOBODY OPENS: a declared place the host's counts say nobody
382
+ * opened, while another was opened by `minPeople` people or more — hidden,
383
+ * not removed, so it is still reached by its address and brought back with
384
+ * one edit. Only from counts a host passes: the framework sees no place open.
385
+ */
386
+ function retirements(ctx, opens) {
387
+ if (!opens || Math.max(0, ...Object.values(opens)) < ctx.minPeople)
388
+ return [];
389
+ const most = Math.max(...Object.values(opens));
390
+ return (ctx.document.lenses ?? []).flatMap((lens) => {
391
+ if (!lens.title || lens.hidden)
392
+ return [];
393
+ const slug = placeSlug(lens.title);
394
+ if (opens[slug] !== 0)
395
+ return [];
396
+ return [
397
+ {
398
+ key: `retire:${slug}`.slice(0, 120),
399
+ edits: [{ op: "set-lens-hidden", title: lens.title, hidden: true }],
400
+ said: `Hide “${lens.title}” from the bar and the page list; it is still reached by its address, and one edit brings it back.`,
401
+ why: `Nobody opened “${lens.title}”, while the most opened place had ${people(most)}.`,
402
+ evidence: { people: 0, times: 0 },
403
+ },
404
+ ];
405
+ });
406
+ }
407
+ /**
408
+ * AN ACT AGENTS CALL WRONGLY: tool calls refused as invalid, then made in
409
+ * a form that worked (`then`), by agents acting for `minPeople` people or
410
+ * more. No change to what the act does: its description says the form that
411
+ * worked, replacing it, when the act is the document's. One that is code or
412
+ * derived is said in `skipped`.
413
+ */
414
+ function toolDescriptions(ctx) {
415
+ const groups = new Map();
416
+ for (const event of ctx.friction) {
417
+ if (event.type !== "tool-invalid" || !event.act || !event.then)
418
+ continue;
419
+ const who = personOf(event.by) ?? (event.by.id !== undefined ? `${event.by.kind}:${event.by.id}` : undefined);
420
+ if (!who)
421
+ continue;
422
+ const group = groups.get(event.act) ?? { people: new Set(), times: 0, forms: new Map() };
423
+ group.people.add(who);
424
+ group.times += 1;
425
+ group.forms.set(event.then, (group.forms.get(event.then) ?? 0) + 1);
426
+ groups.set(event.act, group);
427
+ }
428
+ const out = [];
429
+ for (const [act, group] of groups) {
430
+ if (group.people.size < ctx.minPeople)
431
+ continue;
432
+ const key = `describe-act:${act}`.slice(0, 120);
433
+ const why = `Agents acting for ${people(group.people.size)} called ${act} in a form it refused, ${times(group.times)}, and then in one it took.`;
434
+ const spec = ctx.document.acts?.[act];
435
+ if (!spec) {
436
+ ctx.skipped.push({ key, why: `${why} Its description is not the document's to change: ${act} is code or derived.` });
437
+ continue;
438
+ }
439
+ const form = [...group.forms].sort(([a, one], [b, other]) => other - one || a.localeCompare(b))[0][0];
440
+ const base = (spec["description"] ?? spec["title"] ?? humanizeField(act)).replace(/\s*Called as \{.*\}\.$/, "").replace(/([^.!?])$/, "$1.");
441
+ const description = `${base} Called as ${form}.`;
442
+ if (description.length > 500 || spec["description"] === description)
443
+ continue;
444
+ out.push({
445
+ key,
446
+ edits: [{ op: "add-act", act, replace: true, ...spec, description }],
447
+ said: `Say in ${act}'s description the form a call takes: “${description}”`,
448
+ why,
449
+ evidence: { people: group.people.size, times: group.times },
450
+ });
451
+ }
452
+ return out;
453
+ }
454
+ // ── the judge ───────────────────────────────────────────────────────────────
455
+ /** The suggestions, with what the actor saw and could not suggest, and why. */
456
+ export function learningFrom(input) {
457
+ const minPeople = Math.max(2, Math.floor(input.minPeople ?? 3));
458
+ const records = input.records ?? [];
459
+ const ctx = {
460
+ document: input.document,
461
+ minPeople,
462
+ ...(input.log ? { log: readLog(input.log, records) } : {}),
463
+ records,
464
+ friction: input.friction ?? [],
465
+ skipped: [],
466
+ };
467
+ const answered = new Set((input.declined ?? []).map((one) => (typeof one === "string" ? one : one.key)));
468
+ const suggestions = [...aliases(ctx), ...choices(ctx), ...dates(ctx), ...sequences(ctx), ...toolDescriptions(ctx), ...retirements(ctx, input.opens)]
469
+ .filter((one) => !answered.has(one.key))
470
+ .sort((a, b) => b.evidence.people - a.evidence.people || b.evidence.times - a.evidence.times || a.key.localeCompare(b.key));
471
+ return { suggestions, skipped: ctx.skipped.filter((one) => !answered.has(one.key)) };
472
+ }
473
+ /**
474
+ * WHAT THE APP'S OWN ACTOR SUGGESTS CHANGING IN THE APP, from evidence of
475
+ * use. Reads and writes nothing; a person accepts each
476
+ * (`acceptAppSuggestion`) or declines it (`declineAppSuggestion`).
477
+ */
478
+ export function learnFromUse(input) {
479
+ return [...learningFrom(input).suggestions];
480
+ }
481
+ /**
482
+ * ACCEPT A SUGGESTION: its edits applied to the document through
483
+ * `editDocument`, as one change, carrying its lineage — `{ basis: why,
484
+ * suggestion: key }` — and the decision the host keeps. The caller compiles,
485
+ * checks and keeps the document as it keeps any other change; an edit that
486
+ * no longer applies is refused with the editor's findings.
487
+ */
488
+ export function acceptAppSuggestion(document, suggestion, options = {}) {
489
+ const edited = editDocument(document, suggestion.edits, { ...(options.fonts ? { fonts: options.fonts } : {}), ...(options.views ? { views: options.views } : {}) });
490
+ if (!edited.ok)
491
+ return edited;
492
+ const lineage = lineageOf({ basis: suggestion.why.slice(0, 500), suggestion: suggestion.key.slice(0, 120), actor: LEARNING_ACTOR });
493
+ return { ok: true, document: edited.document, said: edited.said, fills: edited.fills, lineage, decision: decisionOf(suggestion, "accepted", options) };
494
+ }
495
+ /** DECLINE A SUGGESTION: the decision a host keeps and hands back as `declined`, so it is never offered again. Changes nothing. */
496
+ export function declineAppSuggestion(suggestion, options = {}) {
497
+ return decisionOf(suggestion, "declined", options);
498
+ }
499
+ function decisionOf(suggestion, answer, options) {
500
+ const key = typeof suggestion === "string" ? suggestion : suggestion.key;
501
+ return { key, answer, at: options.at ?? new Date().toISOString(), ...(options.by ? { by: options.by } : {}), ...(typeof suggestion === "string" ? {} : { said: suggestion.said }) };
502
+ }
503
+ /** The decisions kept, one per key: the latest answer stands. */
504
+ export function keptDecisions(decisions) {
505
+ const latest = new Map();
506
+ for (const decision of decisions)
507
+ latest.set(decision.key, decision);
508
+ return [...latest.values()];
509
+ }
510
+ /** Answers kept in memory for as long as the process runs. */
511
+ export function memoryLearned() {
512
+ let held = [];
513
+ return {
514
+ add(decision) {
515
+ held = keptDecisions([...held, decision]);
516
+ },
517
+ list: () => held,
518
+ };
519
+ }
520
+ //# sourceMappingURL=learn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.js","sourceRoot":"","sources":["../src/learn.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,15 @@ export interface NodeDefinitionSpec<F extends z.ZodObject<z.ZodRawShape>, E exte
85
85
  * the id, spoken ("work-order" → "work order").
86
86
  */
87
87
  readonly noun?: string;
88
+ /**
89
+ * OTHER WORDS PEOPLE SAY FOR ONE, lower case: "supplier" for a vendor.
90
+ * Search finds the kind by them, a model is told them and `graview
91
+ * describe` says them; they are never shown as its name (Roadmap
92
+ * f-learned-suggestions). A document's `aliases`.
93
+ */
94
+ readonly aliases?: readonly string[];
95
+ /** Other words people say for a field, by field: `{ price: ["cost"] }`. A document field's `aliases`. */
96
+ readonly fieldAliases?: Readonly<Record<string, readonly string[]>>;
88
97
  readonly description?: string;
89
98
  /**
90
99
  * Maps a node onto the invariant it requires. The engine uses this to detect
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}