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,224 @@
1
+ /**
2
+ * `ainize chain up|down|status|fund|setup` — local AIN blockchain (docker) for the `ain` ledger mode.
3
+ *
4
+ * The local chain is the 1-node genesis network shipped with ainblockchain/ain-blockchain; the genesis
5
+ * validator key below is public test material from that repository (blockchain-configs/base/genesis_accounts.json).
6
+ */
7
+ import { execFile } from 'node:child_process';
8
+ import { createRequire } from 'node:module';
9
+ import { promisify } from 'node:util';
10
+ import { AinLedger, applyEnv } from '@ainize/core';
11
+ import { NodeClient } from '../client.js';
12
+ import { CliError, PROG } from '../context.js';
13
+ import { c, emit, kv, ok, warn } from '../output.js';
14
+ import { requireConfig } from './init.js';
15
+ const execFileP = promisify(execFile);
16
+ const require = createRequire(import.meta.url);
17
+ export const CHAIN_CONTAINER = 'ainize-ain';
18
+ export const CHAIN_IMAGE = 'ainblockchain/ain-blockchain:latest';
19
+ export const CHAIN_PORT = 8081;
20
+ export const GENESIS = { address: '0x00ADEc28B6a845a085e03591bE7550dd68673C1C', privateKey: 'b22c95ffc4a5c096f7d7d0487ba963ce6ac945bdc91c79b64ce209de289bec96' };
21
+ export const CHAIN_ENV = {
22
+ BLOCKCHAIN_CONFIGS_DIR: 'blockchain-configs/1-node', ACCOUNT_INJECTION_OPTION: 'private_key', PRIVATE_KEY: GENESIS.privateKey,
23
+ PORT: String(CHAIN_PORT), P2P_PORT: '5001', EVENT_HANDLER_PORT: '5101', STAKE: '10000000', HOSTING_ENV: 'local', SYNC_MODE: 'full',
24
+ ENABLE_GAS_FEE_WORKAROUND: 'true', ENABLE_TX_SIG_VERIF_WORKAROUND: 'true', ENABLE_EXPRESS_RATE_LIMIT: 'false', ENABLE_REST_FUNCTION_CALL: 'true',
25
+ ENABLE_STATUS_REPORT_TO_TRACKER: 'false', CONSOLE_LOG: 'false', TX_POOL_SIZE_LIMIT_PER_ACCOUNT: '1000', ENABLE_EVENT_HANDLER: 'true',
26
+ };
27
+ async function docker(args, timeoutMs = 60_000) {
28
+ try {
29
+ const { stdout } = await execFileP('docker', args, { timeout: timeoutMs, maxBuffer: 10 * 1024 * 1024 });
30
+ return stdout.trim();
31
+ }
32
+ catch (e) {
33
+ const err = e;
34
+ if (err.code === 'ENOENT')
35
+ throw new CliError('docker is not installed or not on PATH');
36
+ throw new CliError(`docker ${args[0]} failed: ${(err.stderr || err.message).trim()}`);
37
+ }
38
+ }
39
+ export async function chainHealth(provider = `http://localhost:${CHAIN_PORT}`) {
40
+ try {
41
+ const r = await fetch(`${provider}/node_status`, { signal: AbortSignal.timeout(3000) });
42
+ if (!r.ok)
43
+ return { reachable: false, provider };
44
+ const j = (await r.json());
45
+ let blockNumber;
46
+ try {
47
+ const Ain = require('@ainblockchain/ain-js').default;
48
+ const ain = new Ain(provider, null, 0);
49
+ blockNumber = Number(await ain.getLastBlockNumber());
50
+ }
51
+ catch {
52
+ blockNumber = undefined;
53
+ }
54
+ return { reachable: true, health: j.result?.health, state: j.result?.state, address: j.result?.address, blockNumber, provider };
55
+ }
56
+ catch {
57
+ return { reachable: false, provider };
58
+ }
59
+ }
60
+ async function containerState(name) {
61
+ const out = await docker(['ps', '-a', '--filter', `name=^/${name}$`, '--format', '{{.Names}}|{{.State}}']);
62
+ const line = out.split('\n').find((l) => l.startsWith(`${name}|`));
63
+ if (!line)
64
+ return 'missing';
65
+ return line.endsWith('|running') ? 'running' : 'stopped';
66
+ }
67
+ export async function chainUp(ctx, a = {}) {
68
+ const pre = await chainHealth();
69
+ if (pre.reachable && pre.state === 'SERVING') {
70
+ ok(ctx, `a local AIN chain is already SERVING on :${CHAIN_PORT} (validator ${pre.address}, block ${pre.blockNumber ?? '?'}) — nothing to do`);
71
+ return pre;
72
+ }
73
+ const state = await containerState(CHAIN_CONTAINER);
74
+ if (state === 'running')
75
+ warn(ctx, `${CHAIN_CONTAINER} is running but not serving yet — waiting`);
76
+ else if (state === 'stopped') {
77
+ await docker(['start', CHAIN_CONTAINER]);
78
+ ok(ctx, `started existing container ${CHAIN_CONTAINER}`);
79
+ }
80
+ else {
81
+ const args = ['run', '-d', '--name', CHAIN_CONTAINER, '--network', 'host'];
82
+ for (const [k, v] of Object.entries(CHAIN_ENV))
83
+ args.push('-e', `${k}=${v}`);
84
+ args.push(CHAIN_IMAGE);
85
+ const id = await docker(args, 10 * 60_000);
86
+ ok(ctx, `container ${CHAIN_CONTAINER} created (${id.slice(0, 12)}) — booting the 1-node chain`);
87
+ }
88
+ const deadline = Date.now() + (a.wait ?? 90) * 1000;
89
+ let h = await chainHealth();
90
+ while (!(h.reachable && h.state === 'SERVING') && Date.now() < deadline) {
91
+ await new Promise((r) => setTimeout(r, 2000));
92
+ h = await chainHealth();
93
+ }
94
+ if (!(h.reachable && h.state === 'SERVING'))
95
+ throw new CliError(`chain did not reach SERVING within ${a.wait ?? 90}s (state: ${h.state ?? 'unreachable'}) — check \`docker logs ${CHAIN_CONTAINER}\``);
96
+ emit(ctx, h, (x) => c.ok('✓ ') + `local AIN chain SERVING at ${x.provider} block ${x.blockNumber ?? '?'} validator ${x.address}\n` + c.dim(' next: \`${PROG} init --ledger ain\` (or \`${PROG} config set ledger.kind ain\`), \`${PROG} chain setup\`, \`${PROG} start\`'));
97
+ return h;
98
+ }
99
+ export async function chainDown(ctx) {
100
+ const state = await containerState(CHAIN_CONTAINER);
101
+ if (state === 'missing') {
102
+ ok(ctx, `no ${CHAIN_CONTAINER} container`);
103
+ return;
104
+ }
105
+ await docker(['rm', '-f', CHAIN_CONTAINER]);
106
+ ok(ctx, `removed container ${CHAIN_CONTAINER} (chain data discarded)`);
107
+ }
108
+ /** Is this provider URL the local chain `ainize chain up` runs — this host, this port? (item 142) */
109
+ export function isLocalChainUrl(provider) {
110
+ try {
111
+ const u = new URL(provider);
112
+ const port = Number(u.port || (u.protocol === 'https:' ? 443 : 80));
113
+ return ['localhost', '127.0.0.1', '::1', '0.0.0.0'].includes(u.hostname) && port === CHAIN_PORT;
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ }
119
+ /**
120
+ * `chain status` reported the health of the CONFIGURED provider beside the container state of the hard-coded
121
+ * `ainize-ain` name, so a node pointed at another chain was told `container ainize-ain: running` next to
122
+ * `reachable no` — two confident signals about two different chains (item 142). The container is only this
123
+ * provider's when the provider IS the local chain.
124
+ */
125
+ export async function chainStatus(ctx, provider) {
126
+ const cfg = ctx.cfg;
127
+ const url = provider ?? cfg?.ledger.ain?.providerUrl ?? `http://localhost:${CHAIN_PORT}`;
128
+ const local = isLocalChainUrl(url);
129
+ const [h, container] = await Promise.all([
130
+ chainHealth(url),
131
+ local ? containerState(CHAIN_CONTAINER).catch(() => 'missing') : Promise.resolve(null),
132
+ ]);
133
+ const out = { ...h, container, local };
134
+ emit(ctx, out, (x) => [
135
+ kv([
136
+ ['provider', x.provider],
137
+ ['reachable', x.reachable ? c.ok('yes') : c.err('no')], ['state', x.state ?? '-'], ['health', x.health === undefined ? '-' : x.health ? c.ok('true') : c.err('false')],
138
+ ['validator', x.address ?? '-'], ['last block', x.blockNumber ?? '-'],
139
+ ['container', x.container === null ? c.dim(`n/a — ${x.provider} is not this machine's \`${PROG} chain up\` chain (:${CHAIN_PORT})`) : `${CHAIN_CONTAINER}: ${x.container}`],
140
+ ]),
141
+ ...(x.reachable ? [] : [chainUnreachableHint(x.provider, local)]),
142
+ ].join('\n'));
143
+ return out;
144
+ }
145
+ /** What to do about a provider that does not answer, naming the key the URL came from (item 142). */
146
+ function chainUnreachableHint(provider, local) {
147
+ return c.dim(local
148
+ ? `the local chain is not running — \`${PROG} chain up\` starts it (docker), then \`${PROG} chain setup\``
149
+ : `nothing answered ${provider} (from ledger.ain.providerUrl) — check the URL with \`${PROG} config set ledger.ain.providerUrl <url>\`, or run the local chain instead with \`${PROG} chain up\``);
150
+ }
151
+ /**
152
+ * The error a driver throws when the provider is not there says `connect ECONNREFUSED 127.0.0.1:9099` and names
153
+ * neither the config key the URL came from nor the command that starts one (item 142).
154
+ */
155
+ function wrapProviderError(provider, e) {
156
+ const msg = e.message ?? String(e);
157
+ if (e instanceof CliError && !/ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|fetch failed|ETIMEDOUT|socket hang up/i.test(msg))
158
+ return e;
159
+ if (!/ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|fetch failed|ETIMEDOUT|socket hang up/i.test(msg))
160
+ return e;
161
+ return new CliError(`cannot reach the AIN provider ${provider} (from ledger.ain.providerUrl): ${msg}\n ${chainUnreachableHint(provider, isLocalChainUrl(provider))}`);
162
+ }
163
+ function assertLocal(provider) {
164
+ let host = '';
165
+ try {
166
+ host = new URL(provider).hostname;
167
+ }
168
+ catch {
169
+ throw new CliError(`invalid provider URL ${provider}`);
170
+ }
171
+ if (!['localhost', '127.0.0.1', '::1', '0.0.0.0'].includes(host))
172
+ throw new CliError(`refusing to use the genesis key against a non-local chain (${provider})`);
173
+ }
174
+ export async function chainFund(ctx, address, amount = 1000, provider) {
175
+ const url = provider ?? ctx.cfg?.ledger.ain?.providerUrl ?? `http://localhost:${CHAIN_PORT}`;
176
+ assertLocal(url);
177
+ if (!/^0x[0-9a-fA-F]{40}$/.test(address))
178
+ throw new CliError('address must be a 0x-prefixed 20-byte hex address');
179
+ const Ain = require('@ainblockchain/ain-js').default;
180
+ const ain = new Ain(url, null, 0);
181
+ ain.wallet.addAndSetDefaultAccount(GENESIS.privateKey);
182
+ const res = await ain.wallet.transfer({ to: address, value: amount, nonce: -1 });
183
+ if (res?.result?.code && res.result.code !== 0)
184
+ throw new CliError(`transfer rejected: ${res.result.message ?? res.result.code}`);
185
+ await new Promise((r) => setTimeout(r, 1500));
186
+ const balance = await ain.wallet.getBalance(address);
187
+ emit(ctx, { tx_hash: res.tx_hash, balance }, (x) => c.ok('✓ ') + `funded ${address} with ${amount} AIN tx ${x.tx_hash} balance now ${x.balance} AIN`);
188
+ return { tx_hash: res.tx_hash, balance };
189
+ }
190
+ /** Register the knowledge app + market rules (ain-js knowledge.setupApp + our /apps/knowledge/market rules). */
191
+ export async function chainSetup(ctx, a = {}) {
192
+ const cfg = applyEnv(requireConfig(ctx));
193
+ if (cfg.ledger.kind !== 'ain')
194
+ throw new CliError(`node is not configured for the AIN ledger — \`${PROG} config set ledger.kind ain\` (and restart)`);
195
+ const provider = cfg.ledger.ain.providerUrl;
196
+ const client = new NodeClient(ctx);
197
+ // fund the node identity on a local chain first (setupApp needs gas-less but non-empty accounts registered)
198
+ try {
199
+ assertLocal(provider);
200
+ const Ain = require('@ainblockchain/ain-js').default;
201
+ const ain = new Ain(provider, null, 0);
202
+ const bal = Number(await ain.wallet.getBalance(cfg.identity.address));
203
+ if (bal <= 0 || a.fund) {
204
+ await chainFund({ ...ctx, quiet: true }, cfg.identity.address, a.fund ?? 1000, provider);
205
+ ok(ctx, `funded node identity ${cfg.identity.address} (${a.fund ?? 1000} AIN)`);
206
+ }
207
+ }
208
+ catch (e) {
209
+ if (e instanceof CliError && e.message.startsWith('refusing'))
210
+ warn(ctx, 'non-local chain: make sure the node identity holds AIN before setup');
211
+ else
212
+ throw wrapProviderError(provider, e);
213
+ }
214
+ if (await client.alive()) {
215
+ const r = await client.post('/api/chain/setup', {}, { timeoutMs: 120_000 }).catch((e) => { throw wrapProviderError(provider, e); });
216
+ emit(ctx, r, (x) => c.ok('✓ ') + (x.created ? `knowledge app created on-chain (tx ${x.tx}); market rules set; admin ${x.admin}` : `knowledge app already exists (admin ${x.admin ?? 'unknown'}) — rules refreshed if we are admin`));
217
+ return r;
218
+ }
219
+ const ledger = new AinLedger({ providerUrl: provider, eventHandlerUrl: cfg.ledger.ain.eventHandlerUrl, chainId: cfg.ledger.ain.chainId }, cfg.identity);
220
+ const r = await ledger.setupApp().catch(async (e) => { await ledger.close().catch(() => undefined); throw wrapProviderError(provider, e); });
221
+ emit(ctx, r, (x) => c.ok('✓ ') + (x.created ? `knowledge app created on-chain (tx ${x.tx}); market rules set; admin ${x.admin}` : `knowledge app already exists (admin ${x.admin ?? 'unknown'})`));
222
+ return r;
223
+ }
224
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/commands/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ import type { CatalogEntry, RuntimeStatus } from '@ainize/core';
2
+ import { type CliContext } from '../context.js';
3
+ export type ChatMode = 'base' | 'patched' | 'compare';
4
+ export interface ChatMessage {
5
+ role: 'system' | 'user' | 'assistant';
6
+ content: string;
7
+ }
8
+ export interface ChatArgs {
9
+ mode?: ChatMode;
10
+ thinking?: boolean;
11
+ maxTokens?: number;
12
+ system?: string;
13
+ }
14
+ export interface ChatAnswer {
15
+ content: string;
16
+ reasoning?: string | null;
17
+ usage?: Record<string, unknown>;
18
+ latency_ms: number;
19
+ model: string;
20
+ /** D1 — the model got stuck repeating itself (answer cut here) or ran out of budget. */
21
+ truncated?: 'repetition' | 'length' | null;
22
+ shown_chars?: number;
23
+ raw_chars?: number;
24
+ raw_content?: string;
25
+ }
26
+ export interface ChatApplied {
27
+ patch_id: string;
28
+ applied_ms: number | null;
29
+ was_applied: boolean;
30
+ }
31
+ export interface ChatResponse {
32
+ patch_id: string;
33
+ /** every knowledge loaded for this answer, in load order (nodes before teach mode omit it) */
34
+ patch_ids?: string[];
35
+ mode: ChatMode | string;
36
+ base: ChatAnswer | null;
37
+ patched: ChatAnswer | null;
38
+ /** sum over all loaded knowledges */
39
+ applied_ms: number | null;
40
+ was_applied: boolean;
41
+ model: string | null;
42
+ /** OR over benchmark_hits */
43
+ benchmark_hit?: boolean | null;
44
+ applied?: ChatApplied[];
45
+ benchmark_hits?: Record<string, boolean | null>;
46
+ remaining_quota: number | null;
47
+ /** how many messages each column was sent, and whether the two conversations differed */
48
+ history?: {
49
+ base: number;
50
+ patched: number;
51
+ split: boolean;
52
+ };
53
+ }
54
+ /** A knowledge this node's model could run but cannot load, and why (item 297). */
55
+ export interface ElsewhereRow {
56
+ patch_id: string;
57
+ name: string;
58
+ author: string;
59
+ author_name: string | null;
60
+ price: string;
61
+ currency: string;
62
+ status: string;
63
+ rows: number;
64
+ queries: number;
65
+ reason: 'not_held' | 'not_licensed' | 'verify_only';
66
+ buyable: boolean;
67
+ requests: number;
68
+ gateway_url: string | null;
69
+ }
70
+ export interface ChatPatchesResponse {
71
+ items: CatalogEntry[];
72
+ runtime: RuntimeStatus;
73
+ lock: {
74
+ owner: string;
75
+ label: string;
76
+ since: number;
77
+ } | null;
78
+ /** knowledge the operator keeps loaded for everyone (part of every "before" answer) */
79
+ applied?: string[];
80
+ /** bodies a recent live test found on the shared model that this node never loaded (item 211) */
81
+ dirty?: string[];
82
+ /** knowledge this node could run but does not hold, or holds only because it verified it (item 297) */
83
+ elsewhere?: ElsewhereRow[];
84
+ overlaps?: {
85
+ a: string;
86
+ b: string;
87
+ rows: number;
88
+ }[];
89
+ /** whether the caller is this node's operator (drafts are listed only for them — item 108) */
90
+ operator?: boolean;
91
+ }
92
+ /** Up to 3 knowledges per live test (server limit). */
93
+ export declare const MAX_CHAT_PATCHES = 3;
94
+ /** `a,b,c` / repeated values → unique trimmed ids (1..3). */
95
+ export declare function parsePatchIds(input: string | string[] | undefined): string[];
96
+ /** `ainize chat --list` → GET /api/chat/patches, plus the operator's own drafts (item 108). */
97
+ export declare function chatPatches(ctx: CliContext): Promise<ChatPatchesResponse>;
98
+ /** One request → POST /api/chat. One id sends `patch_id` (works on every node); several send `patch_ids` (teach-mode nodes). */
99
+ export declare function chatOnce(ctx: CliContext, patchIds: string | string[], messages: ChatMessage[], a?: ChatArgs, split?: {
100
+ base: ChatMessage[];
101
+ patched: ChatMessage[];
102
+ }): Promise<ChatResponse>;
103
+ /** One question of a knowledge's published benchmark, as the anchor carries it. */
104
+ export interface BenchSample {
105
+ prompt: string;
106
+ expect: string;
107
+ }
108
+ /** What was scored for one knowledge on this turn: the sample the question matched, and the first sample as a hint. */
109
+ export interface BenchMatch {
110
+ matched: BenchSample | null;
111
+ first: BenchSample | null;
112
+ }
113
+ /**
114
+ * Which published sample a question is scored against. This is the node's rule (`matchBenchmarkSample` in
115
+ * packages/node/src/market.ts, mirrored again in the web's chat/util.ts): trimmed equality first — so a sample sent
116
+ * verbatim, trailing space and all, scores against itself — then containment, and only for questions long enough
117
+ * that "코드" cannot match a ticker nobody asked about.
118
+ */
119
+ export declare function matchBenchmarkSample(samples: BenchSample[] | undefined, userText: string): BenchSample | null;
120
+ /** The published benchmark samples of each knowledge in a live test (one public GET each; a failure just means no hint). */
121
+ export declare function benchmarksFor(ctx: CliContext, ids: string[]): Promise<Map<string, BenchSample[]>>;
122
+ /** What each loaded knowledge was scored on for this question. */
123
+ export declare function benchMatches(samples: Map<string, BenchSample[]>, question: string, ids: string[]): Record<string, BenchMatch>;
124
+ /**
125
+ * Pretty-print a chat response: both answers, latency / applied ms and the correct-answer marker.
126
+ * `bench` (item 106) is what each knowledge publishes as its benchmark, so the verdict can name the expected value.
127
+ */
128
+ export declare function renderChat(r: ChatResponse, a?: ChatArgs, bench?: Record<string, BenchMatch>): string;
129
+ export declare function initialMessages(a: ChatArgs): ChatMessage[];
130
+ /** One-shot: `ainize chat <patchId>[,<id2>] <prompt>` */
131
+ export declare function chat(ctx: CliContext, patchIds: string | string[], prompt: string, a?: ChatArgs): Promise<ChatResponse>;
132
+ /**
133
+ * The answer that continues the conversation: the patched (ainized) one when present, else the base one.
134
+ * The REPL keeps a transcript per column instead (see chatRepl) — this stays for one-shot callers and scripts.
135
+ */
136
+ export declare function assistantTurn(r: ChatResponse): string | null;
137
+ /**
138
+ * The REPL keeps ONE transcript per column. Replaying the patched answer to the un-patched model would tell it that
139
+ * it already produced the knowledge's answer, and from the second turn the "before" column just repeats it — the
140
+ * comparison would disprove itself. `transcript` stays as the patched (continuing) conversation for callers that
141
+ * read it; `baseTranscript` is what the base column is replayed.
142
+ */
143
+ export interface ReplState {
144
+ transcript: ChatMessage[];
145
+ baseTranscript: ChatMessage[];
146
+ turns: number;
147
+ mode: ChatMode;
148
+ }
149
+ /**
150
+ * Interactive REPL: reads lines from stdin, keeps one transcript per column (system + user + that column's own
151
+ * answer), `/quit` to exit. Slash commands: /mode base|patched|compare, /reset, /help.
152
+ */
153
+ export declare function chatRepl(ctx: CliContext, patchIds: string | string[], a?: ChatArgs, io?: {
154
+ input?: NodeJS.ReadableStream;
155
+ output?: NodeJS.WritableStream;
156
+ }): Promise<ReplState>;
157
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}