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.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/bin.d.ts +10 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +711 -0
- package/dist/bin.js.map +1 -0
- package/dist/client.d.ts +38 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +164 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/auth.d.ts +30 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +216 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/branch.d.ts +326 -0
- package/dist/commands/branch.d.ts.map +1 -0
- package/dist/commands/branch.js +467 -0
- package/dist/commands/branch.js.map +1 -0
- package/dist/commands/chain.d.ts +43 -0
- package/dist/commands/chain.d.ts.map +1 -0
- package/dist/commands/chain.js +224 -0
- package/dist/commands/chain.js.map +1 -0
- package/dist/commands/chat.d.ts +157 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +395 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/dataset.d.ts +51 -0
- package/dist/commands/dataset.d.ts.map +1 -0
- package/dist/commands/dataset.js +157 -0
- package/dist/commands/dataset.js.map +1 -0
- package/dist/commands/drive.d.ts +32 -0
- package/dist/commands/drive.d.ts.map +1 -0
- package/dist/commands/drive.js +68 -0
- package/dist/commands/drive.js.map +1 -0
- package/dist/commands/huggingface-dataset.d.ts +63 -0
- package/dist/commands/huggingface-dataset.d.ts.map +1 -0
- package/dist/commands/huggingface-dataset.js +254 -0
- package/dist/commands/huggingface-dataset.js.map +1 -0
- package/dist/commands/init.d.ts +107 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +538 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/ledger.d.ts +43 -0
- package/dist/commands/ledger.d.ts.map +1 -0
- package/dist/commands/ledger.js +125 -0
- package/dist/commands/ledger.js.map +1 -0
- package/dist/commands/node.d.ts +250 -0
- package/dist/commands/node.d.ts.map +1 -0
- package/dist/commands/node.js +651 -0
- package/dist/commands/node.js.map +1 -0
- package/dist/commands/patch.d.ts +852 -0
- package/dist/commands/patch.d.ts.map +1 -0
- package/dist/commands/patch.js +1527 -0
- package/dist/commands/patch.js.map +1 -0
- package/dist/commands/peers.d.ts +86 -0
- package/dist/commands/peers.d.ts.map +1 -0
- package/dist/commands/peers.js +143 -0
- package/dist/commands/peers.js.map +1 -0
- package/dist/commands/teach-dataset.d.ts +381 -0
- package/dist/commands/teach-dataset.d.ts.map +1 -0
- package/dist/commands/teach-dataset.js +780 -0
- package/dist/commands/teach-dataset.js.map +1 -0
- package/dist/commands/teach.d.ts +351 -0
- package/dist/commands/teach.d.ts.map +1 -0
- package/dist/commands/teach.js +435 -0
- package/dist/commands/teach.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +102 -0
- package/dist/context.js.map +1 -0
- package/dist/ens.d.ts +50 -0
- package/dist/ens.d.ts.map +1 -0
- package/dist/ens.js +155 -0
- package/dist/ens.js.map +1 -0
- package/dist/help.d.ts +57 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +227 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +104 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +383 -0
- package/dist/output.js.map +1 -0
- package/dist/pid.d.ts +5 -0
- package/dist/pid.d.ts.map +1 -0
- package/dist/pid.js +25 -0
- package/dist/pid.js.map +1 -0
- package/dist/quiet.d.ts +2 -0
- package/dist/quiet.d.ts.map +1 -0
- package/dist/quiet.js +12 -0
- package/dist/quiet.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ainize teach status <target>` — read-only view of teach mode from the terminal (spec §6.4 / §14 PR-8).
|
|
3
|
+
*
|
|
4
|
+
* `target` is whatever the visitor has in hand:
|
|
5
|
+
* - a node URL → the node's teaching policy (accepting lessons? publish mode, trainer state, queue, limits)
|
|
6
|
+
* - a lesson URL (`…/chat?lesson=<id>`, `…/api/teach/jobs/<id>`) or a bare job id → that lesson's status
|
|
7
|
+
* - a teacher page (`…/teacher/<address>`) or a bare 0x address → the data provider's lessons and earnings
|
|
8
|
+
* With the teaching key (`--key-file` = the browser's backup JSON, `--key` = hex, or AINIZE_TEACH_KEY) the lesson view is
|
|
9
|
+
* the owner's full body (facts, before/after answers, checks); without it the node returns status only.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { identityFromPrivateKey, signMessage } from '@ainize/core';
|
|
14
|
+
import { teachAuthHeaderFor } from '@ainize/core';
|
|
15
|
+
import { NodeClient } from '../client.js';
|
|
16
|
+
import { CliError, PROG } from '../context.js';
|
|
17
|
+
import { c, emit, fmtBytes, fmtTime, kv, shortAddr, shortHash, table } from '../output.js';
|
|
18
|
+
const PRIV_RE = /^(0x)?[0-9a-fA-F]{64}$/;
|
|
19
|
+
const ADDR_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
20
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
21
|
+
/** Parse a backup file body, pasted JSON or a bare private key (mirrors `parseTeacherKeyBackup` in the web app). */
|
|
22
|
+
export function parseTeacherKey(text) {
|
|
23
|
+
const s = text.trim();
|
|
24
|
+
let priv;
|
|
25
|
+
let name;
|
|
26
|
+
let payout;
|
|
27
|
+
if (PRIV_RE.test(s))
|
|
28
|
+
priv = s;
|
|
29
|
+
else {
|
|
30
|
+
let j;
|
|
31
|
+
try {
|
|
32
|
+
j = JSON.parse(s);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new CliError('teaching key must be a 64-hex private key or the backup JSON the browser downloaded');
|
|
36
|
+
}
|
|
37
|
+
if (typeof j.privateKey !== 'string' || !PRIV_RE.test(j.privateKey))
|
|
38
|
+
throw new CliError('backup has no valid private key');
|
|
39
|
+
priv = j.privateKey;
|
|
40
|
+
name = typeof j.name === 'string' && j.name.trim() ? j.name.trim().slice(0, 40) : undefined;
|
|
41
|
+
payout = typeof j.payout_address === 'string' && ADDR_RE.test(j.payout_address) ? j.payout_address : undefined;
|
|
42
|
+
}
|
|
43
|
+
const hex = priv.replace(/^0x/, '').toLowerCase();
|
|
44
|
+
const id = identityFromPrivateKey(hex);
|
|
45
|
+
return { privateKey: hex, address: id.address, ...(name ? { name } : {}), ...(payout ? { payout_address: payout } : {}) };
|
|
46
|
+
}
|
|
47
|
+
/** Where the CLI keeps its own teaching key when none was passed — the same JSON the browser downloads as a backup. */
|
|
48
|
+
export const TEACH_KEY_FILE = 'teaching-key.json';
|
|
49
|
+
/**
|
|
50
|
+
* The key to sign with: `--key-file` / `--key` / `AINIZE_TEACH_KEY`, else `<home>/teaching-key.json` when it exists.
|
|
51
|
+
* Read-only — nothing is created here, so a read-only command never mints an identity (`ensureTeacherKey` does).
|
|
52
|
+
*/
|
|
53
|
+
export function loadTeacherKeyFor(ctx, o = {}) {
|
|
54
|
+
const explicit = loadTeacherKey(o);
|
|
55
|
+
if (explicit)
|
|
56
|
+
return explicit;
|
|
57
|
+
const p = join(ctx.home, TEACH_KEY_FILE);
|
|
58
|
+
return existsSync(p) ? parseTeacherKey(readFileSync(p, 'utf8')) : null;
|
|
59
|
+
}
|
|
60
|
+
/** Resolve the teaching key from --key / --key-file / AINIZE_TEACH_KEY (a hex key or a path to the backup). Null when none was given. */
|
|
61
|
+
export function loadTeacherKey(o = {}) {
|
|
62
|
+
if (o.keyFile) {
|
|
63
|
+
if (!existsSync(o.keyFile))
|
|
64
|
+
throw new CliError(`key file not found: ${o.keyFile}`);
|
|
65
|
+
return parseTeacherKey(readFileSync(o.keyFile, 'utf8'));
|
|
66
|
+
}
|
|
67
|
+
const raw = o.key ?? process.env.AINIZE_TEACH_KEY;
|
|
68
|
+
if (!raw)
|
|
69
|
+
return null;
|
|
70
|
+
if (!PRIV_RE.test(raw.trim()) && existsSync(raw))
|
|
71
|
+
return parseTeacherKey(readFileSync(raw, 'utf8'));
|
|
72
|
+
return parseTeacherKey(raw);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Legacy `x-ainize-auth: <address>:<ts>:<sig over "teach:<ts>">`. Still accepted by nodes (single-use per route) but not
|
|
76
|
+
* bound to node / method / path / body — prefer `signedTeachHeader` (v2), which is what every command here sends.
|
|
77
|
+
* @deprecated use signedTeachHeader
|
|
78
|
+
*/
|
|
79
|
+
export function teachAuthHeader(key, purpose = 'teach', ts = Date.now()) {
|
|
80
|
+
return `${key.address}:${ts}:${signMessage(`${purpose}:${ts}`, key.privateKey)}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Request-bound v2 header (node `teach-auth.ts`): sig over "teach:<nodeAddress>:<METHOD>:<path+query>:<ts>[:<sha256(body)>]".
|
|
84
|
+
* `body` must be the exact JSON string that is sent. Single-use: build one per request.
|
|
85
|
+
*/
|
|
86
|
+
export function signedTeachHeader(key, nodeAddress, method, path, body) {
|
|
87
|
+
return teachAuthHeaderFor(key, { node: nodeAddress, method, path, body: body ?? null });
|
|
88
|
+
}
|
|
89
|
+
/** The node's identity address (what the v2 signature is bound to) — `GET /api/auth/me` is public. */
|
|
90
|
+
export async function nodeAddressOf(client) {
|
|
91
|
+
const me = await client.get('/api/auth/me', { auth: false });
|
|
92
|
+
if (!me?.address)
|
|
93
|
+
throw new CliError('node did not report its address (/api/auth/me)');
|
|
94
|
+
return me.address;
|
|
95
|
+
}
|
|
96
|
+
/** Turn what the user pasted into (node URL, what to look at). Bare ids/addresses use the context node. */
|
|
97
|
+
export function parseTeachTarget(target, defaultNode) {
|
|
98
|
+
const t = (target ?? '').trim();
|
|
99
|
+
if (!t)
|
|
100
|
+
return { kind: 'node', nodeUrl: defaultNode };
|
|
101
|
+
if (UUID_RE.test(t))
|
|
102
|
+
return { kind: 'job', nodeUrl: defaultNode, id: t.toLowerCase() };
|
|
103
|
+
if (ADDR_RE.test(t))
|
|
104
|
+
return { kind: 'teacher', nodeUrl: defaultNode, address: t };
|
|
105
|
+
let u;
|
|
106
|
+
try {
|
|
107
|
+
u = new URL(/^https?:\/\//i.test(t) ? t : `http://${t}`);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
throw new CliError(`not a node URL, lesson URL, job id or 0x address: ${t}`);
|
|
111
|
+
}
|
|
112
|
+
const nodeUrl = `${u.protocol}//${u.host}`;
|
|
113
|
+
const lesson = u.searchParams.get('lesson');
|
|
114
|
+
if (lesson && UUID_RE.test(lesson))
|
|
115
|
+
return { kind: 'job', nodeUrl, id: lesson.toLowerCase() };
|
|
116
|
+
const m = u.pathname.match(/^\/(?:api\/)?teach\/jobs\/([0-9a-f-]{36})(?:\/|$)/i);
|
|
117
|
+
if (m)
|
|
118
|
+
return { kind: 'job', nodeUrl, id: m[1].toLowerCase() };
|
|
119
|
+
const tm = u.pathname.match(/^\/(?:api\/)?teacher\/(0x[0-9a-fA-F]{40})(?:\/|$)/);
|
|
120
|
+
if (tm)
|
|
121
|
+
return { kind: 'teacher', nodeUrl, address: tm[1] };
|
|
122
|
+
return { kind: 'node', nodeUrl };
|
|
123
|
+
}
|
|
124
|
+
const STATUS_COPY = {
|
|
125
|
+
QUEUED: 'waiting for the trainer', PREFLIGHT: 'checking the model still gets it wrong', LOADING: 'warming up', TRAINING: 'training',
|
|
126
|
+
EXPORTED: 'trained — waiting for the side-effect check', CHECKING: 'checking side effects on the live model', READY: 'ready — try it, keep it private or publish it',
|
|
127
|
+
NEEDS_MORE: 'did not stick well enough — improve and retry', FAILED: 'failed', CANCELLED: 'cancelled', EXPIRED: 'expired (unsaved lesson removed)',
|
|
128
|
+
PENDING_REVIEW: 'published — waiting for the operator\'s review', REJECTED: 'declined by the operator', ANNOUNCED: 'published (verifiers are attesting)',
|
|
129
|
+
};
|
|
130
|
+
const statusColor = (s) => (['READY', 'ANNOUNCED'].includes(s) ? c.ok(s) : ['FAILED', 'REJECTED', 'EXPIRED', 'CANCELLED', 'NEEDS_MORE'].includes(s) ? c.err(s) : c.warn(s));
|
|
131
|
+
const fmtDur = (s) => (s === null || s === undefined ? '-' : s < 90 ? `${Math.round(s)} s` : `${Math.round(s / 60)} min`);
|
|
132
|
+
const pct = (x) => `${Math.round(x * 100)} %`;
|
|
133
|
+
export async function teachStatus(ctx, target, opts = {}) {
|
|
134
|
+
const t = parseTeachTarget(target, ctx.nodeUrl);
|
|
135
|
+
const key = loadTeacherKeyFor(ctx, opts);
|
|
136
|
+
const client = new NodeClient({ ...ctx, nodeUrl: t.nodeUrl });
|
|
137
|
+
const nodeAddress = key ? await nodeAddressOf(client) : null;
|
|
138
|
+
const signed = (path) => (key && nodeAddress ? { 'x-ainize-auth': signedTeachHeader(key, nodeAddress, 'GET', path) } : undefined);
|
|
139
|
+
let out;
|
|
140
|
+
if (t.kind === 'node') {
|
|
141
|
+
const raw = await client.get('/api/info', { auth: false });
|
|
142
|
+
const info = { name: raw.node?.name ?? raw.name, accepts_contributions: raw.accepts_contributions, contributor_share: raw.contributor_share, model: raw.model };
|
|
143
|
+
const policy = await client.get('/api/teach/policy', { auth: false });
|
|
144
|
+
out = { kind: 'node', node: t.nodeUrl, info, policy };
|
|
145
|
+
if (key && policy.enabled) {
|
|
146
|
+
try {
|
|
147
|
+
out.mine = (await client.get('/api/teach/jobs', { headers: signed('/api/teach/jobs'), auth: false })).items;
|
|
148
|
+
}
|
|
149
|
+
catch { /* banned / disabled — the policy line already says so */ }
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (t.kind === 'job') {
|
|
153
|
+
const path = `/api/teach/jobs/${encodeURIComponent(t.id)}`;
|
|
154
|
+
const r = await client.get(path, { headers: signed(path), auth: false });
|
|
155
|
+
out = { kind: 'job', node: t.nodeUrl, job: r.job, owner: Array.isArray(r.job.facts) };
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const profile = await client.get(`/api/teacher/${t.address}`, { auth: false });
|
|
159
|
+
out = { kind: 'teacher', node: t.nodeUrl, profile };
|
|
160
|
+
}
|
|
161
|
+
emit(ctx, out, renderTeachStatus);
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* What a lesson is waiting for, in one phrase (item 245). The node knows; `--wait` printed the status and not this,
|
|
166
|
+
* so a 3 a.m. bake against a model server that was off looked identical to one that was simply slow.
|
|
167
|
+
*/
|
|
168
|
+
export function blockedText(blocked) {
|
|
169
|
+
if (blocked === 'slot')
|
|
170
|
+
return 'the trainer GPUs (another job or training run holds them)';
|
|
171
|
+
if (blocked === 'lock')
|
|
172
|
+
return 'the shared model server (busy with another test)';
|
|
173
|
+
if (blocked === 'runtime')
|
|
174
|
+
return 'the model server (it is off right now)';
|
|
175
|
+
return blocked;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The id a lesson produced, and what that id IS (item 184).
|
|
179
|
+
*
|
|
180
|
+
* The column was titled `PUBLISHED AS` and printed the PRIVATE draft id of a lesson that had published nothing —
|
|
181
|
+
* and `patch get <that id>` answers `patch not found`, because a draft is invisible to everyone but the operator.
|
|
182
|
+
* So the column says which of the two it is, and never calls a private draft "published".
|
|
183
|
+
*/
|
|
184
|
+
export function knowledgeCell(j) {
|
|
185
|
+
if (j.patch_id) {
|
|
186
|
+
const what = j.publish_status === 'listed' ? c.ok('(listed)') : j.publish_status === 'announced' ? c.warn('(verifying)') : c.dim(`(${j.publish_status ?? 'published'})`);
|
|
187
|
+
return `${j.patch_id} ${what}`;
|
|
188
|
+
}
|
|
189
|
+
if (j.draft_id) {
|
|
190
|
+
const what = j.publish_status === 'pending_review' ? '(private · sent for review)' : j.publish_status === 'rejected' ? '(private · the operator declined it)' : '(private)';
|
|
191
|
+
return `${c.dim(j.draft_id)} ${c.warn(what)}`;
|
|
192
|
+
}
|
|
193
|
+
return c.dim('-');
|
|
194
|
+
}
|
|
195
|
+
/** The sentence under a lesson table that has private drafts in it: their ids do not resolve anywhere else. */
|
|
196
|
+
export function privateDraftNote(rows) {
|
|
197
|
+
return rows.some((j) => !j.patch_id && j.draft_id)
|
|
198
|
+
? c.dim(`(private) = a draft on this node only: it is not on the record, and \`${PROG} patch get <id>\` cannot see it. `
|
|
199
|
+
+ `${PROG} teach status <lesson-id> shows it; ${PROG} teach publish <lesson-id> publishes it.`)
|
|
200
|
+
: '';
|
|
201
|
+
}
|
|
202
|
+
export function renderTeachStatus(r) {
|
|
203
|
+
if (r.kind === 'node') {
|
|
204
|
+
const p = r.policy;
|
|
205
|
+
const lines = [
|
|
206
|
+
c.bold(`Teaching on ${r.info.name ?? r.node}`) + ' ' + (p.enabled ? c.ok('accepting lessons') : c.err('not accepting lessons')) + c.dim(` ${r.node}`),
|
|
207
|
+
kv([
|
|
208
|
+
['trainer', `${p.trainer === 'ready' ? c.ok('ready') : p.trainer === 'busy' ? c.warn('busy') : c.err('paused')}${p.paused_reason ? ` — ${p.paused_reason}` : ''} · backend ${p.backend}${p.backend === 'stub' ? c.dim(' (no GPU training on this node)') : ''}`],
|
|
209
|
+
['publish', p.publish === 'auto' ? 'auto — published lessons are announced at once' : p.publish === 'review' ? 'review — the operator approves each lesson first' : 'never — lessons stay private (try / keep / download only)'],
|
|
210
|
+
['queue', `${p.queue.depth} / ${p.queue.max} lessons${p.queue.queued_rows !== undefined ? ` · ${p.queue.queued_rows} / ${p.queue.queued_rows_max} questions waiting` : ''}${p.queue.position_eta_s !== null && p.queue.position_eta_s !== undefined ? ` · next lesson ≈ ${fmtDur(p.queue.position_eta_s)}` : ''}`],
|
|
211
|
+
['typical lesson', p.timing.simulated ? c.dim('not timed — this node simulates training (backend stub), so no duration here would be real')
|
|
212
|
+
: p.timing.p50_s === null ? c.dim(`no measurement yet (${p.timing.samples} of 3 lessons measured)`)
|
|
213
|
+
: `${fmtDur(p.timing.p50_s)} (p50) · ${fmtDur(p.timing.p90_s)} (p90) · ${p.timing.samples} measured${p.timing.s_per_row_p50 ? ` · ≈ ${p.timing.s_per_row_p50.toFixed(2)} s per question per pass` : ''}`],
|
|
214
|
+
['limits', `${p.limits.rows_per_job ?? p.limits.facts_per_job} questions per lesson${p.limits.rows_per_job_source ? c.dim(` (${p.limits.rows_per_job_source})`) : ''} · ${p.limits.jobs_per_key_per_day} lessons per key and ${p.limits.jobs_per_ip_per_day} per IP a day · prompt ≤ ${p.limits.prompt_max} / answer ≤ ${p.limits.answer_max} chars`],
|
|
215
|
+
...(p.limits.dataset_max_rows !== undefined
|
|
216
|
+
? [['datasets', `up to ${p.limits.dataset_max_rows.toLocaleString('en-US')} questions per file · files ≤ ${fmtBytes(p.limits.dataset_max_bytes)} · ${(p.limits.formats ?? []).join(' ')} · ${p.limits.datasets_per_key_per_day} uploads and ${p.limits.rows_per_key_per_day?.toLocaleString('en-US')} trained questions per key a day · kept ${p.limits.dataset_ttl_days} days`]]
|
|
217
|
+
: []),
|
|
218
|
+
...(p.effort?.length ? [['effort', p.effort.map((e) => `${e.id} (${e.max_steps} passes)`).join(' · ')]] : []),
|
|
219
|
+
['data-provider share', `${pct(p.shares.contributor)} of the node's share of each sale (lineage pool ${pct(p.shares.lineage)})`],
|
|
220
|
+
// item 298: publishing here is only worth doing if something can attest it — self-attestation never counts
|
|
221
|
+
...(p.verification ? [['verifiers reachable', p.verification.verifiers >= p.verification.quorum
|
|
222
|
+
? c.ok(`${p.verification.verifiers} of ${p.verification.quorum} needed`) + c.dim(` (${p.verification.reachable} of ${p.verification.peers} peers answered)`)
|
|
223
|
+
: c.err(`${p.verification.verifiers} of ${p.verification.quorum} needed`) + ` — a lesson published here goes on the record but cannot be sold until verifier nodes appear${p.verification.self_verifier ? c.dim(' (this node verifies, but its own attestation does not count towards quorum)') : ''}`]] : []),
|
|
224
|
+
// item 299: a price on a local-ledger node is credit this node mints, and no wallet can spend it
|
|
225
|
+
...(p.ledger ? [['settles in', p.ledger.kind === 'local' ? c.warn(`${p.ledger.currency} on this node's own ledger`) + ' — development play money, not withdrawable' : `${p.ledger.currency} transfers on the AIN chain`]] : []),
|
|
226
|
+
['model', p.model.id_M ?? c.dim('model server off')], ['always loaded', p.applied.length ? p.applied.join(', ') : c.dim('nothing pinned')],
|
|
227
|
+
['unsaved lessons kept', `${p.draft_ttl_days} days`],
|
|
228
|
+
]),
|
|
229
|
+
];
|
|
230
|
+
if (r.mine) {
|
|
231
|
+
lines.push('', c.head('your lessons on this node'), table(r.mine, [
|
|
232
|
+
{ key: 'id', title: 'LESSON', get: (j) => c.id(j.id) }, { key: 'n', title: 'NAME', get: (j) => j.name ?? j.facts?.[0]?.prompt.slice(0, 40) ?? '-' },
|
|
233
|
+
{ key: 's', title: 'STATUS', get: (j) => statusColor(j.status) }, { key: 'p', title: 'KNOWLEDGE', get: knowledgeCell },
|
|
234
|
+
{ key: 't', title: 'UPDATED', get: (j) => fmtTime(j.updated_at) },
|
|
235
|
+
], 'none yet'));
|
|
236
|
+
const note = privateDraftNote(r.mine);
|
|
237
|
+
if (note)
|
|
238
|
+
lines.push(note);
|
|
239
|
+
}
|
|
240
|
+
lines.push('', c.dim([
|
|
241
|
+
`teach from a file: ${PROG} teach dataset ./questions.csv --train (or ${r.node}/teach/upload)`,
|
|
242
|
+
`teach in chat: ${r.node}/chat?teach=1`,
|
|
243
|
+
].join('\n')));
|
|
244
|
+
return lines.join('\n');
|
|
245
|
+
}
|
|
246
|
+
if (r.kind === 'job') {
|
|
247
|
+
const j = r.job;
|
|
248
|
+
const lines = [c.bold(j.name ?? `Lesson ${j.id}`) + ' ' + statusColor(j.status) + c.dim(` — ${STATUS_COPY[j.status] ?? ''}`)];
|
|
249
|
+
const pairs = [['lesson', j.id], ['node', r.node]];
|
|
250
|
+
if (j.position !== undefined)
|
|
251
|
+
pairs.push(['queue position', `${j.position} ahead${j.eta_s ? ` · ≈ ${fmtDur(j.eta_s)}` : ''}`]);
|
|
252
|
+
if (j.blocked)
|
|
253
|
+
pairs.push(['waiting for', blockedText(j.blocked) + (j.blocked_by
|
|
254
|
+
? ` — held by ${j.blocked_by.label} for ${fmtDur(Math.round((Date.now() - j.blocked_by.since) / 1000))}; this lesson has waited ${fmtDur(j.blocked_by.waited_s)}`
|
|
255
|
+
+ (j.blocked_by.grace_left_s > 0 ? `, and is saved unchecked in ${fmtDur(j.blocked_by.grace_left_s)} if the model stays busy` : ', and the wait is over')
|
|
256
|
+
: '')]);
|
|
257
|
+
if (!r.owner) {
|
|
258
|
+
lines.push(kv(pairs), c.dim('status only — pass your teaching key (--key-file <backup.json>) to see the lesson body'));
|
|
259
|
+
return lines.join('\n');
|
|
260
|
+
}
|
|
261
|
+
if (j.contributor)
|
|
262
|
+
pairs.push(['taught by', `${j.contributor.name ?? ''} ${shortAddr(j.contributor.address, 6)}`.trim()]);
|
|
263
|
+
if (j.context_patch_ids?.length)
|
|
264
|
+
pairs.push(['taught with', `${j.context_patch_ids.join(', ')}${j.builds_on_context ? ' (builds on them)' : ''}`]);
|
|
265
|
+
// design §13: one line that says what this lesson is built on and what it did to it
|
|
266
|
+
if (j.bases?.length) {
|
|
267
|
+
const direct = j.bases[j.bases.length - 1];
|
|
268
|
+
const name = direct.name ?? direct.patch_id;
|
|
269
|
+
const pc = j.checks?.parent_check?.find((x) => x.patch_id === direct.patch_id);
|
|
270
|
+
const bits = [
|
|
271
|
+
`${name}${j.export ? ` (${j.export === 'delta' ? 'add-on — buyers need it too' : 'stand-alone build'})` : ''}`,
|
|
272
|
+
`adds ${(j.facts?.length ?? 0) - (j.changed_rows ?? 0)}`,
|
|
273
|
+
...(j.changed_rows ? [`changes ${j.changed_rows} of its answers`] : []),
|
|
274
|
+
...(j.inherited_rows ? [`keeps ${j.inherited_rows} of its questions`] : []),
|
|
275
|
+
...(pc && pc.total ? [`${name} still answers ${pc.hit}/${pc.total} with the lesson on top`] : []),
|
|
276
|
+
...(j.checks?.reversibility_ok === true ? ['reversible: yes'] : j.checks?.reversibility_ok === false ? [c.err('reversible: no')] : []),
|
|
277
|
+
];
|
|
278
|
+
pairs.push(['built on', bits.join(' · ')]);
|
|
279
|
+
if (j.bases.length > 1)
|
|
280
|
+
pairs.push([' loaded under it', j.bases.slice(0, -1).map((b) => b.patch_id).join(' → ')]);
|
|
281
|
+
const stale = j.bases.filter((b) => b.status && !['LISTED', 'ANNOUNCED', 'VERIFYING'].includes(b.status));
|
|
282
|
+
if (stale.length)
|
|
283
|
+
pairs.push([' not published yet', `${stale.map((b) => `${b.patch_id} (${b.status})`).join(', ')} — publish it first, or this lesson cannot be published on top of it`]);
|
|
284
|
+
}
|
|
285
|
+
if (j.dataset) {
|
|
286
|
+
const d = j.dataset;
|
|
287
|
+
const what = d.id === null
|
|
288
|
+
? `${d.rows} questions kept with the lesson ${c.dim('(taught before datasets existed — one is written on the first download or re-train)')}`
|
|
289
|
+
: `${d.name ?? d.id} · trained ${d.trained_rows} of ${d.rows} questions${d.revision ? ` · revision ${d.revision}` : ''}${d.sha256 ? ` · ${shortHash(d.sha256, 12)}` : ''}${d.deleted ? c.err(' · deleted by its owner') : ''}`;
|
|
290
|
+
pairs.push(['dataset', what]);
|
|
291
|
+
if (d.id && !d.deleted)
|
|
292
|
+
pairs.push([' its questions', c.dim(`${PROG} teach dataset get ${d.id} -o questions.jsonl`)]);
|
|
293
|
+
if (d.sampled)
|
|
294
|
+
pairs.push([' checked', `${d.sampled.checked} of ${d.sampled.of} questions were re-asked on the live model (a sample — not the whole dataset)`]);
|
|
295
|
+
}
|
|
296
|
+
if (j.training) {
|
|
297
|
+
const t = j.training;
|
|
298
|
+
pairs.push(['effort', `${t.effort} · ${t.max_steps} passes, evaluated every ${t.eval_every}${t.use_alt ? ' · another wording trained too' : ''}${t.check_side_effects === false ? c.warn(' · side-effect check OFF') : ''}`]);
|
|
299
|
+
}
|
|
300
|
+
if (j.progress) {
|
|
301
|
+
const g = j.progress;
|
|
302
|
+
pairs.push(['progress', `${g.phase ? `${g.phase}: ` : ''}step ${g.step}/${g.max_steps} · ${g.hits}/${g.total} sentences right${g.eval_sample ? ` (a sample of ${g.eval_sample.n} of ${g.eval_sample.of} questions)` : ''}${g.loss !== undefined ? ` · loss ${g.loss.toFixed(3)}` : ''}${g.elapsed_s ? ` · ${fmtDur(g.elapsed_s)} so far` : ''}`]);
|
|
303
|
+
}
|
|
304
|
+
if (j.result)
|
|
305
|
+
pairs.push(['knowledge file', `${j.result.rows.toLocaleString('en-US')} rows · ${fmtBytes(j.result.size_bytes)} · sha256 ${shortHash(j.result.sha256, 16)}`]);
|
|
306
|
+
if (j.checks) {
|
|
307
|
+
const k = j.checks;
|
|
308
|
+
/*
|
|
309
|
+
* Item 239 — `checks.ok` is the SIDE-EFFECT check (locality && parent_regression), and it is computed
|
|
310
|
+
* independently of whether the lesson stuck. A bake that taught 0 of 18 sentences printed a green
|
|
311
|
+
* `checks passed` above a line reading `taught 0/18`, so the label now says which check it is, and whether the
|
|
312
|
+
* LESSON worked is stated first, in its own line, with the status that decided it.
|
|
313
|
+
*/
|
|
314
|
+
if (k.executed) {
|
|
315
|
+
/*
|
|
316
|
+
* Item 180 — one lesson had two denominators. "taught 0/2 trained sentences" counts PROBES (the head of the
|
|
317
|
+
* sample is asked twice), "1 of 2 questions" counts questions, and nobody could reconcile them. Questions is
|
|
318
|
+
* the unit every screen and every command names, so it is the one stated here; the probe count keeps its own
|
|
319
|
+
* line below. And the questions that never made it into the lesson are named, not silently missing.
|
|
320
|
+
*/
|
|
321
|
+
const q = k.taught.questions;
|
|
322
|
+
const ratio = q ? `${q.hits} of ${q.total} questions` : `${k.taught.hits}/${k.taught.total} trained sentences`;
|
|
323
|
+
const dropped = j.preflight?.dropped ?? [];
|
|
324
|
+
const droppedNote = dropped.length ? c.dim(` (${dropped.length} of ${j.preflight?.of ?? '?'} never trained — see below)`) : '';
|
|
325
|
+
pairs.push(['lesson', (j.status === 'READY'
|
|
326
|
+
? c.ok(`learned — ${ratio} answer right in the live model`)
|
|
327
|
+
: c.err(`did not stick — ${ratio} answer right (${j.status})`)) + droppedNote]);
|
|
328
|
+
}
|
|
329
|
+
pairs.push(['side-effect check', !k.executed ? c.warn('not measured (model server was off) — ask the node to check again') : k.ok ? c.ok('passed') + c.dim(' — it did not change unrelated answers') : c.err('failed')]);
|
|
330
|
+
if (k.executed) {
|
|
331
|
+
pairs.push([' taught', `${k.taught.hits}/${k.taught.total} trained sentences answer right${k.taught.sampled ? ` (a sample of ${k.taught.sampled.checked} of ${k.taught.sampled.of} questions)` : ''}${k.heldout?.total ? ` · other phrasings ${k.heldout.hits}/${k.heldout.total}` : ''}`]);
|
|
332
|
+
pairs.push([' side effects', `${k.locality.same}/${k.locality.total} unrelated answers unchanged ${k.locality.ok ? c.ok('✓') : c.err('✗')}`]);
|
|
333
|
+
/*
|
|
334
|
+
* Item 182 — this line was printed only when `total > 0`, and the stub sets it to 0, so on every demo node
|
|
335
|
+
* the base was never named and "checks passed" appeared with the base-regression check silently skipped.
|
|
336
|
+
* The line is printed whenever the lesson HAS a base; when nothing was measured it says so.
|
|
337
|
+
*/
|
|
338
|
+
if (k.parent_regression.total)
|
|
339
|
+
pairs.push([' parents', `${k.parent_regression.hit}/${k.parent_regression.total} still right ${k.parent_regression.ok ? c.ok('✓') : c.err('✗')}`]);
|
|
340
|
+
else if (j.bases?.length || j.context_patch_ids?.length) {
|
|
341
|
+
const names = (j.bases ?? []).map((b) => b.name ?? b.patch_id).join(', ') || (j.context_patch_ids ?? []).join(', ');
|
|
342
|
+
pairs.push([' parents', c.warn(`not measured on this node — nothing checked whether ${names} still answers its own questions${k.simulated ? ' (this node simulates its checks)' : ''}`)]);
|
|
343
|
+
}
|
|
344
|
+
if (k.reverted_and_reapplied)
|
|
345
|
+
pairs.push([' note', 'the model server restarted during the check; the lesson was re-applied']);
|
|
346
|
+
}
|
|
347
|
+
if (k.simulated && !k.note)
|
|
348
|
+
pairs.push([' note', c.warn('simulated — this node has no model server, so nothing was measured on a live model')]);
|
|
349
|
+
if (k.skipped)
|
|
350
|
+
pairs.push([' note', c.warn('you turned the side-effect check off — publishing stays blocked until it is measured (`teach status` again after a recheck)')]);
|
|
351
|
+
if (k.note)
|
|
352
|
+
pairs.push([' note', k.note]);
|
|
353
|
+
}
|
|
354
|
+
if (j.draft_id)
|
|
355
|
+
pairs.push(['private draft', j.draft_id]);
|
|
356
|
+
if (j.patch_id)
|
|
357
|
+
pairs.push(['published as', `${j.patch_id} (${j.publish_status})`]);
|
|
358
|
+
if (j.reject_reason)
|
|
359
|
+
pairs.push(['declined because', j.reject_reason]);
|
|
360
|
+
if (j.error)
|
|
361
|
+
pairs.push(['error', c.err(j.error)]);
|
|
362
|
+
if (j.parent_job)
|
|
363
|
+
pairs.push(['retry of', j.parent_job]);
|
|
364
|
+
pairs.push(['created', fmtTime(j.created_at)]);
|
|
365
|
+
if (j.finished_at)
|
|
366
|
+
pairs.push(['finished', fmtTime(j.finished_at)]);
|
|
367
|
+
if (j.expires_at && !j.patch_id)
|
|
368
|
+
pairs.push(['kept until', fmtTime(j.expires_at)]);
|
|
369
|
+
lines.push(kv(pairs));
|
|
370
|
+
if (j.facts?.length) {
|
|
371
|
+
lines.push('', c.head('corrections'), table(j.facts, [
|
|
372
|
+
{ key: 'q', title: 'QUESTION', get: (f) => f.prompt.slice(0, 48) }, { key: 'a', title: 'RIGHT ANSWER', get: (f) => f.answer.slice(0, 24) },
|
|
373
|
+
{ key: 'b', title: 'BEFORE', get: (f) => (f.base_answer ?? '-').replace(/\s+/g, ' ').slice(0, 28) }, { key: 'af', title: 'AFTER', get: (f) => (f.after_answer ?? '-').replace(/\s+/g, ' ').slice(0, 28) },
|
|
374
|
+
{ key: 'h', title: 'HIT', get: (f) => (f.hit === undefined ? c.dim('-') : f.hit ? c.ok('✓') : c.err('✗')) },
|
|
375
|
+
]));
|
|
376
|
+
}
|
|
377
|
+
/*
|
|
378
|
+
* Items 180 / 181 — the questions that never made it into the lesson.
|
|
379
|
+
*
|
|
380
|
+
* `overlapsListing` and the pre-flight drop a row whose question is already answered, and the job stored only
|
|
381
|
+
* counts: `preflight: {checked 2, of 2, known 0, overlaps 1}`. "trained 1 of 2 questions" was the whole
|
|
382
|
+
* explanation, and the publisher could not tell WHICH row vanished without diffing files. Worse, the pre-flight
|
|
383
|
+
* had ASKED the model each of them and had its answer — that is how it decided — and threw it away, so the first
|
|
384
|
+
* step of every derivative ("what does the base already cover?") meant re-asking each question by hand in chat.
|
|
385
|
+
*/
|
|
386
|
+
const dropped = j.preflight?.dropped ?? [];
|
|
387
|
+
if (dropped.length) {
|
|
388
|
+
const why = (d) => d.reason === 'already_known' ? c.dim('the model already answers this')
|
|
389
|
+
: d.reason === 'in_base' ? c.dim(`already in ${d.listing_name ?? d.listing_id ?? 'the base'}`)
|
|
390
|
+
: c.warn(`already sold here as ${d.listing_name ?? d.listing_id ?? 'another knowledge'}`);
|
|
391
|
+
lines.push('', c.head(`not trained — ${dropped.length} of ${j.preflight?.of ?? dropped.length} question(s)`), table(dropped, [
|
|
392
|
+
{ key: 'l', title: 'LINE', get: (d) => String(d.index + 1), align: 'right' },
|
|
393
|
+
{ key: 'q', title: 'QUESTION', get: (d) => d.prompt.replace(/\s+/g, ' ').slice(0, 48) },
|
|
394
|
+
{ key: 'b', title: 'ANSWER ALREADY THERE', get: (d) => (d.base_answer ?? '-').replace(/\s+/g, ' ').slice(0, 34) },
|
|
395
|
+
{ key: 'w', title: 'WHY', get: why },
|
|
396
|
+
]));
|
|
397
|
+
lines.push(c.dim('these questions were left out before training. Change the answer you want and train them again, or take them out of the file.'));
|
|
398
|
+
}
|
|
399
|
+
if (j.patch_id)
|
|
400
|
+
lines.push('', c.dim(`knowledge page: ${r.node}/patch/${j.patch_id} · ainize patch get ${j.patch_id}`));
|
|
401
|
+
else if (j.status === 'READY')
|
|
402
|
+
lines.push('', c.dim([
|
|
403
|
+
`publish it from here: ${PROG} teach publish ${j.id} --name "<name>" --price <n> --consent-permanent --consent-rights`,
|
|
404
|
+
`or in the browser: ${r.node}/teach/lesson/${j.id} (try it, keep it private, publish it)`,
|
|
405
|
+
...(j.dataset?.id && !j.dataset.deleted ? [`train the same questions harder: ${PROG} teach train ${j.dataset.id} --effort thorough`] : []),
|
|
406
|
+
].join('\n')));
|
|
407
|
+
return lines.join('\n');
|
|
408
|
+
}
|
|
409
|
+
const p = r.profile;
|
|
410
|
+
const e = p.earnings;
|
|
411
|
+
const cur = e.currency ? ` ${e.currency}` : '';
|
|
412
|
+
const v = p.verification;
|
|
413
|
+
const lines = [
|
|
414
|
+
c.bold(`Data provider ${p.name ?? ''}`.trim()) + ' ' + c.dim(p.address) + (p.hidden ? c.dim(' (name hidden by the operator)') : ''),
|
|
415
|
+
kv([['node', r.node], ['lessons', String(p.lessons.length)], ['earned', `${e.owed}${cur}${e.sales !== undefined ? ` from ${e.sales} sales` : ''}`],
|
|
416
|
+
// item 299: on a local ledger "paid out" is a line in this node's own book — say so where the number is
|
|
417
|
+
['paid out', `${e.paid}${cur}${p.ledger?.kind === 'local' ? c.dim(' — credited on this node only, not withdrawable') : ''}`],
|
|
418
|
+
['pending', `${e.pending}${cur}`], ...(e.failed && e.failed !== '0' ? [['transfer failed', `${e.failed}${cur} (still owed by the seller)`]] : [])]),
|
|
419
|
+
'', c.head('lessons'), table(p.lessons, [
|
|
420
|
+
{ key: 'id', title: 'KNOWLEDGE', get: (l) => c.id(l.id) }, { key: 'n', title: 'NAME', get: (l) => l.name.slice(0, 40) },
|
|
421
|
+
{ key: 's', title: 'STATUS', get: (l) => statusColor(l.status) },
|
|
422
|
+
// item 298: "not yet" said nothing about how long, or whether anyone can ever look
|
|
423
|
+
{ key: 'v', title: 'VERIFIED', get: (l) => (l.verified ? c.ok('yes')
|
|
424
|
+
: l.attestations !== undefined ? c.dim(`${l.attestations}/${l.quorum ?? v?.quorum ?? 2}${l.created_at ? ` · waiting ${fmtDur((Date.now() - l.created_at) / 1000)}` : ''}`)
|
|
425
|
+
: c.dim('not yet')) },
|
|
426
|
+
{ key: 'd', title: 'SOLD', get: (l) => String(l.downloads), align: 'right' }, { key: 'r', title: 'REVENUE', get: (l) => `${l.revenue}${cur}`, align: 'right' },
|
|
427
|
+
], 'no lessons yet'),
|
|
428
|
+
];
|
|
429
|
+
if (v && v.verifiers < v.quorum) {
|
|
430
|
+
lines.push('', c.warn('! ') + `${r.node} has ${v.verifiers} verifier peer(s) and needs ${v.quorum}: knowledge published here stays on the record but cannot go on sale until verifier nodes appear.`);
|
|
431
|
+
}
|
|
432
|
+
lines.push('', c.dim(`public page: ${r.node}/teacher/${p.address}`));
|
|
433
|
+
return lines.join('\n');
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=teach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teach.js","sourceRoot":"","sources":["../../src/commands/teach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type NodeConfig } from '@ainize/core';
|
|
2
|
+
export interface CliState {
|
|
3
|
+
token?: string;
|
|
4
|
+
nodeUrl?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Name the binary was invoked as. There is one: `ainize` (AI + -ize, "ainize your knowledge", like the 2019
|
|
8
|
+
* `ainize` CLI that ainized GitHub repos). The historical `ngram` alias was withdrawn when the packages moved
|
|
9
|
+
* to the `@ainize` scope — item 110 counted fourteen hints that told you to run a name the product no longer
|
|
10
|
+
* uses, starting with the first line `ainize init` prints.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PROG_NAMES: readonly ["ainize"];
|
|
13
|
+
export type ProgName = (typeof PROG_NAMES)[number];
|
|
14
|
+
export declare function progName(argv1?: string | undefined): ProgName;
|
|
15
|
+
export declare const PROG: ProgName;
|
|
16
|
+
/**
|
|
17
|
+
* Where `nodeUrl` came from. `default` means nobody chose it: there is no config in this home and no `--node`,
|
|
18
|
+
* so the URL is the built-in `http://localhost:3402` — a node that, if it answers at all, belongs to someone else.
|
|
19
|
+
* Commands that talk to a node refuse on `default` rather than report a stranger's node as yours (item 101).
|
|
20
|
+
*/
|
|
21
|
+
export type NodeUrlSource = 'flag' | 'env' | 'state' | 'config' | 'default';
|
|
22
|
+
export interface CliContext {
|
|
23
|
+
home: string;
|
|
24
|
+
nodeUrl: string;
|
|
25
|
+
nodeSource: NodeUrlSource;
|
|
26
|
+
/** Why `nodeUrl` cannot be used: config.json's `port` is not a port number. Commands that need a node refuse with it. */
|
|
27
|
+
nodeUrlProblem: string | null;
|
|
28
|
+
token: string | null;
|
|
29
|
+
json: boolean;
|
|
30
|
+
quiet: boolean;
|
|
31
|
+
cfg: NodeConfig | null;
|
|
32
|
+
}
|
|
33
|
+
export declare class CliError extends Error {
|
|
34
|
+
exitCode: number;
|
|
35
|
+
/** The node's JSON error body, when there was one — e.g. the per-line report a refused dataset upload carries. */
|
|
36
|
+
details?: unknown;
|
|
37
|
+
constructor(message: string, exitCode?: number, details?: unknown);
|
|
38
|
+
}
|
|
39
|
+
export declare function statePath(home: string): string;
|
|
40
|
+
export declare function readState(home: string): CliState;
|
|
41
|
+
export declare function writeState(home: string, state: CliState): void;
|
|
42
|
+
export declare function resolveHome(explicit?: string): string;
|
|
43
|
+
/** Build a context from global flags. Node URL precedence: --node > AINIZE_NODE_URL > cli.json > AINIZE_PORT > config port > default. */
|
|
44
|
+
export declare function buildContext(opts?: {
|
|
45
|
+
home?: string;
|
|
46
|
+
node?: string;
|
|
47
|
+
json?: boolean;
|
|
48
|
+
quiet?: boolean;
|
|
49
|
+
}): CliContext;
|
|
50
|
+
/**
|
|
51
|
+
* Refuse to send a request nobody aimed: with no config in this home and no `--node`, every read command used to
|
|
52
|
+
* report whatever answered port 3402 — a colleague's node, or the demo cluster — as yours (item 101).
|
|
53
|
+
*/
|
|
54
|
+
export declare function requireNodeTarget(ctx: CliContext): void;
|
|
55
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,WAAW,QAAQ;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAAE;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,UAAU,qBAAsB,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,wBAAgB,QAAQ,CAAC,KAAK,GAAE,MAAM,GAAG,SAA2B,GAAG,QAAQ,CAG9E;AACD,eAAO,MAAM,IAAI,EAAE,QAAqB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,CAAC;IAC1B,yHAAyH;IACzH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;CACxB;AAED,qBAAa,QAAS,SAAQ,KAAK;IAGG,QAAQ;IAF5C,kHAAkH;IAClH,OAAO,CAAC,EAAE,OAAO,CAAC;gBACN,OAAO,EAAE,MAAM,EAAS,QAAQ,SAAI,EAAE,OAAO,CAAC,EAAE,OAAO;CACpE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAmC;AAElF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAIhD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAG9D;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAKD,yIAAyI;AACzI,wBAAgB,YAAY,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,UAAU,CAiCrH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAOvD"}
|