ainize 0.1.0

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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/dist/bin.d.ts +10 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +711 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/client.d.ts +38 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +164 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/commands/auth.d.ts +30 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +216 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/branch.d.ts +326 -0
  16. package/dist/commands/branch.d.ts.map +1 -0
  17. package/dist/commands/branch.js +467 -0
  18. package/dist/commands/branch.js.map +1 -0
  19. package/dist/commands/chain.d.ts +43 -0
  20. package/dist/commands/chain.d.ts.map +1 -0
  21. package/dist/commands/chain.js +224 -0
  22. package/dist/commands/chain.js.map +1 -0
  23. package/dist/commands/chat.d.ts +157 -0
  24. package/dist/commands/chat.d.ts.map +1 -0
  25. package/dist/commands/chat.js +395 -0
  26. package/dist/commands/chat.js.map +1 -0
  27. package/dist/commands/dataset.d.ts +51 -0
  28. package/dist/commands/dataset.d.ts.map +1 -0
  29. package/dist/commands/dataset.js +157 -0
  30. package/dist/commands/dataset.js.map +1 -0
  31. package/dist/commands/drive.d.ts +32 -0
  32. package/dist/commands/drive.d.ts.map +1 -0
  33. package/dist/commands/drive.js +68 -0
  34. package/dist/commands/drive.js.map +1 -0
  35. package/dist/commands/huggingface-dataset.d.ts +63 -0
  36. package/dist/commands/huggingface-dataset.d.ts.map +1 -0
  37. package/dist/commands/huggingface-dataset.js +254 -0
  38. package/dist/commands/huggingface-dataset.js.map +1 -0
  39. package/dist/commands/init.d.ts +107 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +538 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/ledger.d.ts +43 -0
  44. package/dist/commands/ledger.d.ts.map +1 -0
  45. package/dist/commands/ledger.js +125 -0
  46. package/dist/commands/ledger.js.map +1 -0
  47. package/dist/commands/node.d.ts +250 -0
  48. package/dist/commands/node.d.ts.map +1 -0
  49. package/dist/commands/node.js +651 -0
  50. package/dist/commands/node.js.map +1 -0
  51. package/dist/commands/patch.d.ts +852 -0
  52. package/dist/commands/patch.d.ts.map +1 -0
  53. package/dist/commands/patch.js +1527 -0
  54. package/dist/commands/patch.js.map +1 -0
  55. package/dist/commands/peers.d.ts +86 -0
  56. package/dist/commands/peers.d.ts.map +1 -0
  57. package/dist/commands/peers.js +143 -0
  58. package/dist/commands/peers.js.map +1 -0
  59. package/dist/commands/teach-dataset.d.ts +381 -0
  60. package/dist/commands/teach-dataset.d.ts.map +1 -0
  61. package/dist/commands/teach-dataset.js +780 -0
  62. package/dist/commands/teach-dataset.js.map +1 -0
  63. package/dist/commands/teach.d.ts +351 -0
  64. package/dist/commands/teach.d.ts.map +1 -0
  65. package/dist/commands/teach.js +435 -0
  66. package/dist/commands/teach.js.map +1 -0
  67. package/dist/context.d.ts +55 -0
  68. package/dist/context.d.ts.map +1 -0
  69. package/dist/context.js +102 -0
  70. package/dist/context.js.map +1 -0
  71. package/dist/ens.d.ts +50 -0
  72. package/dist/ens.d.ts.map +1 -0
  73. package/dist/ens.js +155 -0
  74. package/dist/ens.js.map +1 -0
  75. package/dist/help.d.ts +57 -0
  76. package/dist/help.d.ts.map +1 -0
  77. package/dist/help.js +227 -0
  78. package/dist/help.js.map +1 -0
  79. package/dist/index.d.ts +15 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +15 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/output.d.ts +104 -0
  84. package/dist/output.d.ts.map +1 -0
  85. package/dist/output.js +383 -0
  86. package/dist/output.js.map +1 -0
  87. package/dist/pid.d.ts +5 -0
  88. package/dist/pid.d.ts.map +1 -0
  89. package/dist/pid.js +25 -0
  90. package/dist/pid.js.map +1 -0
  91. package/dist/quiet.d.ts +2 -0
  92. package/dist/quiet.d.ts.map +1 -0
  93. package/dist/quiet.js +12 -0
  94. package/dist/quiet.js.map +1 -0
  95. package/package.json +55 -0
@@ -0,0 +1,395 @@
1
+ /**
2
+ * `ainize chat` — live-test a knowledge patch (ChatMode): ask the serving model the same question *before*
3
+ * and *after* the patch is loaded, and see whether the answer became the benchmark's expected one.
4
+ *
5
+ * ainize chat --list patches whose bodies are on this node → testable
6
+ * ainize chat pixelplus-087600 "Pixelplus ticker code? Digits only." one-shot compare (base vs patched)
7
+ * ainize chat pixelplus-087600 interactive REPL (one transcript per column, /quit to exit)
8
+ * ainize chat --patch krx-all-2761,pixelplus-087600 "…" load up to 3 knowledges together (list order; the last wins on overlap)
9
+ */
10
+ import { createInterface } from 'node:readline';
11
+ import { verificationCount } from '@ainize/core';
12
+ import { NodeClient } from '../client.js';
13
+ import { CliError, PROG } from '../context.js';
14
+ import { c, emit, fitLine, info, statusColor, table } from '../output.js';
15
+ /** LISTED first, then what is still being verified, then drafts, then retired versions (item 107). */
16
+ const LIST_ORDER = { LISTED: 0, ANNOUNCED: 1, VERIFYING: 1, CHALLENGED: 2, DRAFT: 3, SUPERSEDED: 4, RETIRED: 5, REJECTED: 6 };
17
+ /**
18
+ * The operator's own DRAFT knowledge whose body is on this node (item 108).
19
+ *
20
+ * `GET /api/chat/patches` answers with what the PUBLIC picker may test, and the node drops every DRAFT from that
21
+ * list — while `POST /api/chat` loads one happily. So the publisher's "hold it back, try it, then announce" loop had
22
+ * no discoverable path: the list that calls itself authoritative hid exactly what `--no-announce` exists for. The
23
+ * drafts are read here from the two operator routes that already hold the facts (own anchors, held bodies), and a
24
+ * draft trained for another model is left out for the same reason the node leaves one out of the public list.
25
+ */
26
+ async function ownDrafts(ctx, model) {
27
+ const client = new NodeClient(ctx);
28
+ const [mine, blobs] = await Promise.all([
29
+ client.get('/api/me/patches').catch(() => null),
30
+ client.get('/api/me/blobs').catch(() => null),
31
+ ]);
32
+ if (!mine || !blobs)
33
+ return [];
34
+ const held = new Set(blobs.items.map((b) => b.sha256));
35
+ return mine.items.filter((e) => e.status === 'DRAFT' && held.has(e.anchor.patch_sha256)
36
+ && (!model || e.anchor.model.id_M.startsWith(model)));
37
+ }
38
+ /**
39
+ * Why nothing can be tested here (item 108). "no testable patch on this node" was one sentence for three different
40
+ * situations, and one of them told the operator to buy a knowledge whose file is already in their own blob store.
41
+ */
42
+ function emptyPicker(x) {
43
+ const rt = x.runtime;
44
+ const held = (x.elsewhere ?? []).filter((e) => e.reason !== 'not_held');
45
+ if (!rt.available)
46
+ return `nothing can be tested until this node's model server answers${rt.error ? ` (${rt.error})` : ''} — a live test needs a serving node (\`--node <url>\` of one).`;
47
+ if (held.length) {
48
+ return `${held.length} knowledge file(s) are on this node but none of them can be tested: `
49
+ + held.map((e) => `${e.patch_id} (${e.reason === 'verify_only' ? 'held because this node verified it — verifying is not a licence' : 'never bought'})`).join('; ')
50
+ + `\n${PROG} patch buy <id> records the licence and makes it testable`;
51
+ }
52
+ if ((x.elsewhere ?? []).length)
53
+ return `no knowledge file on this node yet — the ${x.elsewhere.length} listed below are sold by other nodes (\`${PROG} patch buy <id>\`), or publish your own with \`${PROG} publish <file.npz>\`.`;
54
+ return `no knowledge on this node yet${rt.model ? ` for ${rt.model}` : ''} — publish one with \`${PROG} publish <file.npz> …\`, or buy one from a peer (\`${PROG} patch ls\`).`;
55
+ }
56
+ /** Up to 3 knowledges per live test (server limit). */
57
+ export const MAX_CHAT_PATCHES = 3;
58
+ /** `a,b,c` / repeated values → unique trimmed ids (1..3). */
59
+ export function parsePatchIds(input) {
60
+ const raw = Array.isArray(input) ? input : input ? [input] : [];
61
+ const ids = [...new Set(raw.flatMap((s) => String(s).split(/[,\s+]+/)).map((s) => s.trim()).filter(Boolean))];
62
+ if (ids.length === 0)
63
+ throw new CliError(`patch id required — \`${PROG} chat --list\` shows what this node can test`);
64
+ if (ids.length > MAX_CHAT_PATCHES)
65
+ throw new CliError(`at most ${MAX_CHAT_PATCHES} knowledges can be loaded together (got ${ids.length})`);
66
+ return ids;
67
+ }
68
+ const CHAT_TIMEOUT_MS = 15 * 60_000; // apply + two generations on a busy runtime
69
+ /** `ainize chat --list` → GET /api/chat/patches, plus the operator's own drafts (item 108). */
70
+ export async function chatPatches(ctx) {
71
+ const d = await new NodeClient(ctx).get('/api/chat/patches');
72
+ const drafts = d.operator ? await ownDrafts(ctx, d.runtime.model ?? null) : [];
73
+ emit(ctx, { ...d, drafts }, (x) => {
74
+ const rt = x.runtime;
75
+ const head = rt.available
76
+ ? `${c.ok('runtime ready')} model ${c.bold(rt.model ?? '?')} ${rt.hook ? 'live-apply hook on' : c.warn('no live-apply hook')}${rt.applied.length ? ` applied: ${rt.applied.join(', ')}` : ''}`
77
+ : c.warn(`runtime unavailable${rt.error ? ` — ${rt.error}` : ''}`) + c.dim(' (chat needs a serving node; pass --node <url> of one)');
78
+ const lock = x.lock ? c.dim(`runtime busy: ${x.lock.label} by ${x.lock.owner} since ${new Date(x.lock.since).toLocaleTimeString()}`) : '';
79
+ const pinned = x.applied?.length ? c.warn(`always loaded on this node (part of every "before" answer): ${x.applied.join(', ')}`) : '';
80
+ // Item 211 — a body on the shared model that this node never loaded: the next live test unloads it and does not put it back.
81
+ const dirty = x.dirty?.length ? c.warn(`left on the shared model by something else (this node did not load it): ${x.dirty.join(', ')} — a live test unloads it first and does not put it back`) : '';
82
+ // Item 216 — an overlap between two bodies that are NOT loaded decides nothing about the answers this node
83
+ // gives. The loaded pairs are printed with what they mean; the rest are counted and left alone.
84
+ const loadedIds = new Set(x.applied ?? []);
85
+ const livePairs = (x.overlaps ?? []).filter((o) => loadedIds.has(o.a) && loadedIds.has(o.b));
86
+ const restPairs = (x.overlaps?.length ?? 0) - livePairs.length;
87
+ const overlaps = livePairs.length
88
+ ? c.warn('loaded together and overlapping: ') + livePairs.map((o) => `${o.a} ∩ ${o.b} = ${o.rows.toLocaleString('en-US')} entries (the one loaded later wins on them)`).join('; ')
89
+ + (restPairs ? c.dim(` (+${restPairs} more overlapping pair(s) among held bodies that are not loaded)`) : '')
90
+ : restPairs ? c.dim(`${restPairs} pair(s) of held bodies overlap; none of them are loaded together, so nothing is being overridden right now`) : '';
91
+ // Item 297 — what this node's model could run but cannot load: it used to be missing from this list entirely.
92
+ const why = {
93
+ not_held: 'not on this node',
94
+ verify_only: 'held only because this node verified it — verifying is not a licence',
95
+ not_licensed: 'body here, never bought',
96
+ };
97
+ const elsewhere = x.elsewhere?.length
98
+ ? [c.head('not on this node (buy it to test or teach on it)'), table(x.elsewhere, [
99
+ { key: 'id', title: 'ID', get: (e) => c.id(e.patch_id) },
100
+ { key: 'name', title: 'NAME', get: (e) => e.name },
101
+ { key: 'price', title: 'PRICE', get: (e) => `${e.price} ${e.currency}`, align: 'right' },
102
+ { key: 'from', title: 'SELLER', get: (e) => e.author_name ?? e.author.slice(0, 10) + '…' },
103
+ { key: 'why', title: 'WHY', get: (e) => c.dim(why[e.reason] ?? e.reason) },
104
+ { key: 'ask', title: 'ASKED FOR', get: (e) => (e.requests ? `${e.requests}×` : c.dim('-')), align: 'right' },
105
+ ]), c.dim(`${PROG} patch buy <ID> then ${PROG} chat <ID> "<question>"`)].join('\n')
106
+ : '';
107
+ /*
108
+ * Item 107 — four rows of `2/2 ✓` in green, one of them the knowledge on sale and three of them training runs
109
+ * it retired months ago. The status is on every one of these objects and was simply not printed, so a buyer
110
+ * spent one of twenty free tries an hour on a version nobody sells any more and was never told a newer one
111
+ * exists. Retired rows stay (a point-in-time version is legitimately testable) and are dimmed, sorted last, and
112
+ * footnoted with what replaced them; a green tick is never printed unqualified on a retired row.
113
+ */
114
+ const rows = [
115
+ ...x.items.map((e) => ({ e, draft: false })),
116
+ ...(drafts.map((e) => ({ e, draft: true }))),
117
+ ].sort((p, q) => (LIST_ORDER[p.e.status] ?? 9) - (LIST_ORDER[q.e.status] ?? 9) || q.e.anchor.created_at - p.e.anchor.created_at);
118
+ const retired = (r) => r.e.status === 'SUPERSEDED' || r.e.status === 'RETIRED';
119
+ const dimIf = (r, s) => (retired(r) ? c.dim(s) : s);
120
+ const superseded = rows.filter((r) => r.e.superseded_by.length);
121
+ const sameModel = new Set(rows.map((r) => r.e.anchor.model.id_M)).size <= 1;
122
+ // Item 115 — the widest thing on this screen was never the table but the prose around it (the overlaps line
123
+ // measured 293 display columns). Tables fit themselves; these are wrapped to the same budget.
124
+ return [...[head, lock, pinned, dirty, overlaps].map((l) => (l ? fitLine(l) : l)), table(rows, [
125
+ { key: 'id', title: 'ID', get: (r) => (retired(r) ? c.dim(r.e.anchor.id) : c.id(r.e.anchor.id)) },
126
+ { key: 'name', title: 'NAME', get: (r) => dimIf(r, r.e.anchor.name) },
127
+ { key: 'status', title: 'STATUS', get: (r) => statusColor(r.e.status) + (r.draft ? c.dim(' (yours)') : '') },
128
+ ...(sameModel ? [] : [{ key: 'model', title: 'MODEL', get: (r) => r.e.anchor.model.id_M }]),
129
+ { key: 'facts', title: 'FACTS', get: (r) => String(r.e.anchor.benchmark.queries), align: 'right' },
130
+ { key: 'rows', title: 'MEMORY ROWS', get: (r) => r.e.anchor.rows.toLocaleString('en-US'), align: 'right' },
131
+ { key: 'att', title: 'VERIFIED', get: (r) => {
132
+ if (r.draft)
133
+ return c.dim('not announced');
134
+ const v = verificationCount(r.e);
135
+ const s = v.extra ? `${v.fraction}+${v.extra}` : v.fraction;
136
+ return r.e.quorum_ok ? (retired(r) ? c.dim(s + ' ✓') : c.ok(s + ' ✓')) : c.warn(s);
137
+ }, align: 'right' },
138
+ { key: 'sample', title: 'TRY', get: (r) => { const s = r.e.anchor.benchmark.samples?.[0]; return s ? dimIf(r, `${JSON.stringify(s.prompt.trim())} → ${s.expect}`) : c.dim('-'); } },
139
+ ], emptyPicker(x)),
140
+ ...superseded.map((r) => c.dim(fitLine(` ${r.e.anchor.id} → superseded by ${r.e.superseded_by.join(', ')} (a newer version of the same subject — test that one unless you need this exact version)`, 4))),
141
+ drafts.length ? c.dim(fitLine(` ${drafts.length} DRAFT row(s) are your own knowledge, not announced: only this node can test them (\`${PROG} patch announce <id>\` publishes one).`, 4)) : '',
142
+ rows.length ? '\n' + c.dim(fitLine(`${PROG} chat <ID> "<question>" or ${PROG} chat <ID> for an interactive session (${PROG} chat --patch a,b loads up to ${MAX_CHAT_PATCHES} together)`)) : '',
143
+ elsewhere ? '\n' + elsewhere : ''].filter(Boolean).join('\n');
144
+ });
145
+ return d;
146
+ }
147
+ /** One request → POST /api/chat. One id sends `patch_id` (works on every node); several send `patch_ids` (teach-mode nodes). */
148
+ export async function chatOnce(ctx, patchIds, messages, a = {}, split) {
149
+ if (!messages.some((m) => m.role === 'user' && m.content.trim()))
150
+ throw new CliError('prompt is empty');
151
+ const ids = parsePatchIds(patchIds);
152
+ const target = ids.length === 1 ? { patch_id: ids[0] } : { patch_ids: ids };
153
+ // Compare mode past the first turn: each column replays its OWN earlier answers (see ReplState below).
154
+ const histories = split ? { messages_base: split.base, messages_patched: split.patched } : {};
155
+ const body = { ...target, mode: a.mode ?? 'compare', messages, ...histories, max_tokens: a.maxTokens ?? 200, thinking: !!a.thinking };
156
+ return new NodeClient(ctx).post('/api/chat', body, { timeoutMs: CHAT_TIMEOUT_MS });
157
+ }
158
+ /** Shortest question that may be matched to a sample by containment — the node's own floor (market.ts BENCH_MATCH_MIN). */
159
+ const BENCH_MATCH_MIN = 8;
160
+ /**
161
+ * Which published sample a question is scored against. This is the node's rule (`matchBenchmarkSample` in
162
+ * packages/node/src/market.ts, mirrored again in the web's chat/util.ts): trimmed equality first — so a sample sent
163
+ * verbatim, trailing space and all, scores against itself — then containment, and only for questions long enough
164
+ * that "코드" cannot match a ticker nobody asked about.
165
+ */
166
+ export function matchBenchmarkSample(samples, userText) {
167
+ const u = (userText ?? '').trim();
168
+ if (!u || !samples?.length)
169
+ return null;
170
+ const exact = samples.find((x) => x.prompt.trim() === u);
171
+ if (exact)
172
+ return exact;
173
+ if (u.length < BENCH_MATCH_MIN)
174
+ return null;
175
+ return samples.find((x) => u.includes(x.prompt.trim()) || x.prompt.trim().includes(u)) ?? null;
176
+ }
177
+ /** The published benchmark samples of each knowledge in a live test (one public GET each; a failure just means no hint). */
178
+ export async function benchmarksFor(ctx, ids) {
179
+ const client = new NodeClient(ctx);
180
+ const out = new Map();
181
+ await Promise.all(ids.map(async (id) => {
182
+ const d = await client.get(`/api/patches/${encodeURIComponent(id)}`).catch(() => null);
183
+ const s = d?.anchor?.benchmark?.samples;
184
+ if (s?.length)
185
+ out.set(id, s);
186
+ }));
187
+ return out;
188
+ }
189
+ /** What each loaded knowledge was scored on for this question. */
190
+ export function benchMatches(samples, question, ids) {
191
+ const out = {};
192
+ for (const id of ids) {
193
+ const list = samples.get(id);
194
+ if (!list?.length)
195
+ continue;
196
+ out[id] = { matched: matchBenchmarkSample(list, question), first: list[0] ?? null };
197
+ }
198
+ return out;
199
+ }
200
+ const shortAnswer = (s) => {
201
+ const t = (s ?? '').replace(/\s+/g, ' ').trim();
202
+ return t ? JSON.stringify(t.length > 40 ? t.slice(0, 40) + '…' : t) : '(nothing)';
203
+ };
204
+ /**
205
+ * The verdict, with the value it was measured against (item 106).
206
+ *
207
+ * `correct ✓` on its own asks the reader to take a tick on faith, and `wrong ✗` on its own cannot tell a knowledge
208
+ * that failed from a question that missed the trained phrasing — the commonest cause on prompts that end in a
209
+ * significant trailing space. The expected value is in the anchor the CLI already has, so it is printed beside the
210
+ * verdict; when nothing was scored, the phrasing that WOULD be scored is printed instead.
211
+ */
212
+ const marker = (hit, m, answer) => {
213
+ if (hit === true)
214
+ return c.ok('correct ✓ (benchmark)') + (m?.matched ? c.dim(` — the benchmark expects ${JSON.stringify(m.matched.expect)}`) : '');
215
+ if (hit === false) {
216
+ return c.err('wrong ✗ (benchmark)')
217
+ + (m?.matched ? ` — expected ${c.ok(JSON.stringify(m.matched.expect))}, the model answered ${c.err(shortAnswer(answer))}` : '');
218
+ }
219
+ return c.dim('(no benchmark sample for this question)')
220
+ + (m?.first ? c.dim(` — this knowledge is scored on ${JSON.stringify(m.first.prompt)} → ${m.first.expect}; ask that phrasing to be scored`) : '');
221
+ };
222
+ function answerBlock(label, ans, extra, showThinking) {
223
+ if (!ans)
224
+ return '';
225
+ const meta = [`${ans.latency_ms} ms`, ...extra].join(' · ');
226
+ const lines = [`${c.head(label)} ${c.dim(meta)}`];
227
+ if (showThinking && ans.reasoning)
228
+ lines.push(c.dim(ans.reasoning.trim().split('\n').map((l) => ' ┆ ' + l).join('\n')));
229
+ lines.push(ans.content.trim() ? ans.content.trim().split('\n').map((l) => ' ' + l).join('\n') : c.dim(' (empty answer)'));
230
+ // D1: say why the answer stops where it does — a silent cut reads as a wrong answer.
231
+ if (ans.truncated === 'repetition')
232
+ lines.push(c.dim(` — the model started repeating itself, so the answer is cut here (showing ${ans.shown_chars} of ${ans.raw_chars} characters; usually the question is outside what this knowledge covers)`));
233
+ else if (ans.truncated === 'length')
234
+ lines.push(c.dim(' — the answer stopped at the length limit before it was finished'));
235
+ return lines.join('\n');
236
+ }
237
+ /**
238
+ * Pretty-print a chat response: both answers, latency / applied ms and the correct-answer marker.
239
+ * `bench` (item 106) is what each knowledge publishes as its benchmark, so the verdict can name the expected value.
240
+ */
241
+ export function renderChat(r, a = {}, bench = {}) {
242
+ const showThinking = !!a.thinking;
243
+ const out = [];
244
+ out.push(answerBlock('before (base model)', r.base, [], showThinking));
245
+ const ids = r.patch_ids?.length ? r.patch_ids : [r.patch_id];
246
+ const perPatch = r.applied?.length ? r.applied : [{ patch_id: r.patch_id, applied_ms: r.applied_ms, was_applied: r.was_applied }];
247
+ const loadNote = (x) => (x.applied_ms !== null ? `loaded in ${x.applied_ms} ms` : x.was_applied ? 'already loaded' : '');
248
+ const patchedExtra = ids.length === 1
249
+ ? [loadNote(perPatch[0])].filter(Boolean)
250
+ : [perPatch.map((x, i) => `${i + 1}. ${x.patch_id}${loadNote(x) ? ` (${loadNote(x)})` : ''}`).join(' → ')];
251
+ out.push(answerBlock(`after (${ids.length === 1 ? ids[0] : `${ids.length} knowledges`} loaded)`, r.patched, patchedExtra, showThinking));
252
+ const foot = [];
253
+ const said = r.patched?.raw_content ?? r.patched?.content ?? null;
254
+ if (r.patched) {
255
+ if (ids.length > 1 && r.benchmark_hits)
256
+ foot.push(...ids.map((id) => `${c.id(id)}: ${marker(r.benchmark_hits?.[id], bench[id], said)}`));
257
+ else
258
+ foot.push(marker(r.benchmark_hit, bench[ids[0]], said));
259
+ }
260
+ if (r.model)
261
+ foot.push(c.dim(`model ${r.model}`));
262
+ if (r.remaining_quota !== null && r.remaining_quota !== undefined)
263
+ foot.push(c.dim(`free live tests left this hour: ${r.remaining_quota}`));
264
+ out.push(foot.join(' '));
265
+ return out.filter(Boolean).join('\n\n');
266
+ }
267
+ export function initialMessages(a) {
268
+ return a.system ? [{ role: 'system', content: a.system }] : [];
269
+ }
270
+ /** One-shot: `ainize chat <patchId>[,<id2>] <prompt>` */
271
+ export async function chat(ctx, patchIds, prompt, a = {}) {
272
+ const ids = parsePatchIds(patchIds);
273
+ // Item 106: the expected value is on the anchor, not in the chat response — read it while the model answers and
274
+ // print it with the verdict. `--json` gets it too, as `benchmark_samples`, so a script can report what a ✗ meant.
275
+ const benchP = benchmarksFor(ctx, ids);
276
+ const r = await chatOnce(ctx, ids, [...initialMessages(a), { role: 'user', content: prompt }], a);
277
+ const bench = benchMatches(await benchP, prompt, ids);
278
+ emit(ctx, { ...r, benchmark_samples: bench }, (x) => renderChat(x, a, bench));
279
+ return r;
280
+ }
281
+ /**
282
+ * The answer that continues the conversation: the patched (ainized) one when present, else the base one.
283
+ * The REPL keeps a transcript per column instead (see chatRepl) — this stays for one-shot callers and scripts.
284
+ */
285
+ export function assistantTurn(r) {
286
+ return r.patched?.content ?? r.base?.content ?? null;
287
+ }
288
+ /**
289
+ * Interactive REPL: reads lines from stdin, keeps one transcript per column (system + user + that column's own
290
+ * answer), `/quit` to exit. Slash commands: /mode base|patched|compare, /reset, /help.
291
+ */
292
+ export async function chatRepl(ctx, patchIds, a = {}, io = {}) {
293
+ const ids = parsePatchIds(patchIds);
294
+ const state = { transcript: initialMessages(a), baseTranscript: initialMessages(a), turns: 0, mode: a.mode ?? 'compare' };
295
+ const input = io.input ?? process.stdin;
296
+ const output = io.output ?? process.stdout;
297
+ const tty = !!input.isTTY;
298
+ const rl = createInterface({ input, output: tty ? output : undefined, prompt: c.bold('you> '), terminal: tty });
299
+ const say = (s) => { if (!ctx.quiet && !ctx.json)
300
+ output.write(s + '\n'); };
301
+ /** The knowledges' published benchmarks — fetched on the first question, not on `/quit` (item 106). */
302
+ let samples = null;
303
+ say(c.dim(`live test of ${ids.map((x) => c.id(x)).join(' + ')} · mode ${state.mode} · /quit to exit, /help for commands`));
304
+ if (state.mode === 'compare')
305
+ say(c.dim('follow-ups: each column replays only its own earlier answers — the base model is never shown the patched one'));
306
+ const handle = async (line) => {
307
+ const text = line.trim();
308
+ if (!text)
309
+ return true;
310
+ if (text.startsWith('/')) {
311
+ const [cmd, ...rest] = text.slice(1).split(/\s+/);
312
+ switch (cmd) {
313
+ case 'quit':
314
+ case 'exit':
315
+ case 'q': return false;
316
+ case 'reset':
317
+ state.transcript = initialMessages(a);
318
+ state.baseTranscript = initialMessages(a);
319
+ say(c.dim('transcript cleared'));
320
+ return true;
321
+ case 'mode': {
322
+ const m = rest[0];
323
+ if (m === 'base' || m === 'patched' || m === 'compare') {
324
+ state.mode = m;
325
+ say(c.dim(`mode → ${m}`));
326
+ }
327
+ else
328
+ say(c.warn('usage: /mode base|patched|compare'));
329
+ return true;
330
+ }
331
+ case 'help':
332
+ default:
333
+ say([`/mode base|patched|compare (now: ${state.mode})`, '/reset forget the transcript', '/quit exit'].join('\n'));
334
+ return true;
335
+ }
336
+ }
337
+ const ask = { role: 'user', content: text };
338
+ const messages = [...state.transcript, ask];
339
+ const baseMessages = [...state.baseTranscript, ask];
340
+ try {
341
+ const r = await chatOnce(ctx, ids, state.mode === 'base' ? baseMessages : messages, { ...a, mode: state.mode }, state.mode === 'compare' ? { base: baseMessages, patched: messages } : undefined);
342
+ state.turns++;
343
+ // Each column keeps only the turns IT answered: a question asked in `patched` mode never happened for the
344
+ // base model, and its answer must not be replayed as if the base model had produced it.
345
+ const grow = (prev, answer) => (answer?.trim() ? [...prev, ask, { role: 'assistant', content: answer }].slice(-24) : prev);
346
+ state.transcript = grow(state.transcript, r.patched?.content);
347
+ state.baseTranscript = grow(state.baseTranscript, r.base?.content);
348
+ // Item 106 — the published benchmark, read once per session and matched against the question just asked.
349
+ samples ??= await benchmarksFor(ctx, ids);
350
+ const bench = benchMatches(samples, text, ids);
351
+ if (ctx.json)
352
+ output.write(JSON.stringify({ ...r, benchmark_samples: bench }) + '\n');
353
+ else if (!ctx.quiet)
354
+ say(renderChat(r, a, bench) + '\n');
355
+ }
356
+ catch (e) {
357
+ const err = e;
358
+ if (err instanceof CliError && err.exitCode === 2)
359
+ throw err; // node gone — stop the loop
360
+ say(c.err('error: ') + (err.message ?? String(e)));
361
+ }
362
+ return true;
363
+ };
364
+ // Serialise line handling so a fast paste does not fire overlapping requests.
365
+ let chain = Promise.resolve(true);
366
+ let alive = true;
367
+ await new Promise((resolve) => {
368
+ rl.on('line', (line) => {
369
+ if (!alive)
370
+ return;
371
+ rl.pause();
372
+ chain = chain.then(async (cont) => {
373
+ if (!cont)
374
+ return false;
375
+ const next = await handle(line).catch((e) => { say(c.err('error: ') + e.message); return false; });
376
+ if (!next) {
377
+ alive = false;
378
+ rl.close();
379
+ return false;
380
+ }
381
+ rl.resume();
382
+ if (tty)
383
+ rl.prompt();
384
+ return true;
385
+ });
386
+ });
387
+ rl.on('close', () => { alive = false; chain.then(() => resolve(), () => resolve()); });
388
+ if (tty)
389
+ rl.prompt();
390
+ });
391
+ if (!ctx.json)
392
+ info(ctx, c.dim(`bye — ${state.turns} turn(s)`));
393
+ return state;
394
+ }
395
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAqD1E,sGAAsG;AACtG,MAAM,UAAU,GAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEtJ;;;;;;;;GAQG;AACH,KAAK,UAAU,SAAS,CAAC,GAAe,EAAE,KAAoB;IAC5D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtC,MAAM,CAAC,GAAG,CAA4B,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAkC,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAC/E,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;WAClF,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAsB;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,+DAA+D,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,gEAAgE,CAAC;IAC1L,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,IAAI,CAAC,MAAM,sEAAsE;cACvF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;cAChK,KAAK,IAAI,6DAA6D,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM;QAAE,OAAO,4CAA4C,CAAC,CAAC,SAAU,CAAC,MAAM,4CAA4C,IAAI,kDAAkD,IAAI,wBAAwB,CAAC;IACrO,OAAO,gCAAgC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,IAAI,sDAAsD,IAAI,eAAe,CAAC;AAClL,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,KAAoC;IAChE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9G,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,yBAAyB,IAAI,8CAA8C,CAAC,CAAC;IACtH,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB;QAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,gBAAgB,2CAA2C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3I,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC,CAAG,4CAA4C;AAEnF,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAe;IAC/C,MAAM,CAAC,GAAG,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAsB,mBAAmB,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;QACrB,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS;YACvB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACjM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACxI,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1I,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtI,6HAA6H;QAC7H,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrM,2GAA2G;QAC3G,gGAAgG;QAChG,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM;YAC/B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;kBAC9K,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,SAAS,kEAAkE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChH,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,6GAA6G,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtJ,8GAA8G;QAC9G,MAAM,GAAG,GAA2B;YAClC,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,sEAAsE;YACnF,YAAY,EAAE,yBAAyB;SACxC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM;YACnC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kDAAkD,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE;oBAChF,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;oBACxD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;oBAClD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;oBACxF,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE;oBAC1F,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;oBAC1E,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;iBAC7G,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,4BAA4B,IAAI,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvF,CAAC,CAAC,EAAE,CAAC;QACP;;;;;;WAMG;QACH,MAAM,IAAI,GAAoB;YAC5B,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC7C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjI,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;QAC9F,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC5E,4GAA4G;QAC5G,8FAA8F;QAC9F,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE;gBAC7F,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;gBACjG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACrE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC5G,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1G,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAgB,EAAE;gBAC3G,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAgB,EAAE;gBACnH,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;wBAC1C,IAAI,CAAC,CAAC,KAAK;4BAAE,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAC3C,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC5D,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrF,CAAC,EAAE,KAAK,EAAE,OAAgB,EAAE;gBAC5B,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;aACpL,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YAClB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,2FAA2F,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1M,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,wFAAwF,IAAI,wCAAwC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9L,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,kCAAkC,IAAI,8CAA8C,IAAI,iCAAiC,gBAAgB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACtM,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,gIAAgI;AAChI,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAe,EAAE,QAA2B,EAAE,QAAuB,EAAE,IAAc,EAAE,EAAE,KAAuD;IAC7K,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACxG,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC5E,uGAAuG;IACvG,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtI,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAe,WAAW,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AACnG,CAAC;AAQD,2HAA2H;AAC3H,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAkC,EAAE,QAAgB;IACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,CAAC,MAAM,GAAG,eAAe;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACjG,CAAC;AAED,4HAA4H;AAC5H,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe,EAAE,GAAa;IAChE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAA2D,gBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACjJ,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;QACxC,IAAI,CAAC,EAAE,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,OAAmC,EAAE,QAAgB,EAAE,GAAa;IAC/F,MAAM,GAAG,GAA+B,EAAE,CAAC;IAC3C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,MAAM;YAAE,SAAS;QAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAA4B,EAAU,EAAE;IAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACpF,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,GAAG,CAAC,GAA+B,EAAE,CAAc,EAAE,MAAsB,EAAU,EAAE;IACjG,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnJ,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC;cAC/B,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,yCAAyC,CAAC;UACnD,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtJ,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,KAAa,EAAE,GAAsB,EAAE,KAAe,EAAE,YAAqB;IAChG,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,YAAY,IAAI,GAAG,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5H,qFAAqF;IACrF,IAAI,GAAG,CAAC,SAAS,KAAK,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,8EAA8E,GAAG,CAAC,WAAW,OAAO,GAAG,CAAC,SAAS,0EAA0E,CAAC,CAAC,CAAC;SAC9O,IAAI,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;IAC5H,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,CAAe,EAAE,IAAc,EAAE,EAAE,QAAoC,EAAE;IAClG,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClI,MAAM,QAAQ,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtI,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC;QACnC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7G,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,aAAa,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IACzI,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;YACpI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC5I,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAW;IACzC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAe,EAAE,QAA2B,EAAE,MAAc,EAAE,IAAc,EAAE;IACvG,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,gHAAgH;IAChH,kHAAkH;IAClH,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAe;IAC3C,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;AACvD,CAAC;AAUD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAe,EAAE,QAA2B,EAAE,IAAc,EAAE,EAAE,KAAwE,EAAE;IACvK,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,KAAK,GAAc,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;IACrI,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IACxC,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,CAAE,KAA2B,CAAC,KAAK,CAAC;IACjD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,uGAAuG;IACvG,IAAI,OAAO,GAAsC,IAAI,CAAC;IACtD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,sCAAsC,CAAC,CAAC,CAAC;IAC3H,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,8GAA8G,CAAC,CAAC,CAAC;IAEzJ,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC;gBAAC,KAAK,MAAM,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;gBACjD,KAAK,OAAO;oBAAE,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAC;gBAC9I,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAyB,CAAC;oBAC1C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;wBAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;;wBAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;oBAC7J,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,MAAM,CAAC;gBAAC;oBACX,GAAG,CAAC,CAAC,qCAAqC,KAAK,CAAC,IAAI,GAAG,EAAE,gCAAgC,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxH,OAAO,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAC5G,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACpF,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,0GAA0G;YAC1G,wFAAwF;YACxF,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAE,MAAiC,EAAiB,EAAE,CACrF,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnE,yGAAyG;YACzG,OAAO,KAAK,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,GAAG,CAAC,IAAI;gBAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;iBACjF,IAAI,CAAC,GAAG,CAAC,KAAK;gBAAE,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAa,CAAC;YAC1B,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC,CAAG,4BAA4B;YAC5F,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,8EAA8E;IAC9E,IAAI,KAAK,GAAqB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAI,CAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9G,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAC,KAAK,GAAG,KAAK,CAAC;oBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;oBAAC,OAAO,KAAK,CAAC;gBAAC,CAAC;gBACvD,EAAE,CAAC,MAAM,EAAE,CAAC;gBAAC,IAAI,GAAG;oBAAE,EAAE,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,GAAG;YAAE,EAAE,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type CliContext } from '../context.js';
2
+ import type { KeyOpts } from './teach.js';
3
+ /** `GET /api/patches/:id/dataset` (design §12.3). `preview` is the first 20 questions; `held` is this node's copy. */
4
+ export interface PublishedDataset {
5
+ sha256: string;
6
+ rows: number;
7
+ access: 'public' | 'derivative' | 'private';
8
+ license: string | null;
9
+ parents: {
10
+ patch_id: string;
11
+ sha256: string;
12
+ rows: number;
13
+ }[];
14
+ held: boolean;
15
+ include_notes: boolean;
16
+ benchmark_samples: number | null;
17
+ merkle_root: string | null;
18
+ preview?: {
19
+ prompt: string;
20
+ answer: string;
21
+ alt_prompt?: string;
22
+ note?: string;
23
+ }[];
24
+ }
25
+ export interface DatasetGetOpts extends KeyOpts {
26
+ out?: string;
27
+ manifest?: boolean;
28
+ includeNotes?: boolean;
29
+ }
30
+ export interface PublishedDatasetResult {
31
+ node: string;
32
+ patch_id: string;
33
+ name?: string;
34
+ dataset: PublishedDataset;
35
+ manifest?: Record<string, unknown>;
36
+ saved?: {
37
+ path: string;
38
+ bytes: number;
39
+ sha256: string;
40
+ verified: boolean;
41
+ notes_removed: number;
42
+ via: 'node' | 'derive';
43
+ };
44
+ }
45
+ /**
46
+ * The training set of a published knowledge. With `-o` the bytes are written: the public path is a plain download,
47
+ * a `derivative` set goes through a signed derive intent and `/p2p/dataset/<sha>` with the token it returns.
48
+ */
49
+ export declare function datasetGetPublished(ctx: CliContext, target: string, opts?: DatasetGetOpts): Promise<PublishedDatasetResult>;
50
+ export declare function renderPublishedDataset(r: PublishedDatasetResult): string;
51
+ //# sourceMappingURL=dataset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/commands/dataset.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C,sHAAsH;AACtH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpF;AACD,MAAM,WAAW,cAAe,SAAQ,OAAO;IAAG,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE;AAC5G,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAC;CAC3H;AAYD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CASrI;AA0DD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,sBAAsB,GAAG,MAAM,CA6BxE"}