@fiale-plus/repo-arch 0.2.0 → 0.3.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/dist/flow.js ADDED
@@ -0,0 +1,488 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { mineHistory } from './git-history.js';
6
+ import { classifyHistory } from './signals.js';
7
+ import { generateCards } from './cards.js';
8
+ import { getStatusOverrideMap, listReviewState } from './review.js';
9
+ import { buildIndex } from './embedder.js';
10
+ import { generateDataset, prepareTrain } from './training.js';
11
+ import { runEval } from './eval.js';
12
+ import { loadRepoArchConfig } from './config.js';
13
+ function getToolVersion() {
14
+ const packageJsonPath = fileURLToPath(new URL('../package.json', import.meta.url));
15
+ const parsed = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
16
+ return parsed.version ?? 'unknown';
17
+ }
18
+ function hashJson(value) {
19
+ return crypto.createHash('sha256').update(JSON.stringify(value)).digest('hex');
20
+ }
21
+ function now() {
22
+ return new Date().toISOString();
23
+ }
24
+ function ensureDirFor(filePath) {
25
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
26
+ }
27
+ function ensureDir(filePath) {
28
+ fs.mkdirSync(filePath, { recursive: true });
29
+ }
30
+ function writeJson(filePath, data) {
31
+ ensureDirFor(filePath);
32
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', 'utf8');
33
+ }
34
+ function writeJsonl(filePath, lines) {
35
+ ensureDirFor(filePath);
36
+ const jsonl = lines.map(line => JSON.stringify(line)).join('\n') + (lines.length ? '\n' : '');
37
+ fs.writeFileSync(filePath, jsonl, 'utf8');
38
+ }
39
+ function countCardStatuses(cards) {
40
+ let accepted = 0;
41
+ let pending = 0;
42
+ let rejected = 0;
43
+ for (const card of cards) {
44
+ if (card.status === 'accepted')
45
+ accepted += 1;
46
+ else if (card.status === 'rejected')
47
+ rejected += 1;
48
+ else
49
+ pending += 1;
50
+ }
51
+ return { accepted, pending, rejected };
52
+ }
53
+ function createRunId(headSha) {
54
+ return `${now().replace(/[:.]/g, '-')}-${headSha.slice(0, 12)}`;
55
+ }
56
+ function resolveRunDir(config, options = {}) {
57
+ if (options.outPath) {
58
+ return path.isAbsolute(options.outPath) ? options.outPath : path.resolve(config.repoRoot, options.outPath);
59
+ }
60
+ return path.join(config.flow.runsDir, options.runId ?? createRunId(''));
61
+ }
62
+ function writeLatestPointer(runsDir, runId, runDir) {
63
+ const latestPath = path.join(runsDir, 'latest.json');
64
+ ensureDir(runsDir);
65
+ writeJson(latestPath, {
66
+ schemaVersion: 1,
67
+ runId,
68
+ runDir,
69
+ updatedAt: now(),
70
+ });
71
+ }
72
+ function resolveLatestRunDir(runsDir) {
73
+ const latestPath = path.join(runsDir, 'latest.json');
74
+ if (fs.existsSync(latestPath)) {
75
+ try {
76
+ const parsed = JSON.parse(fs.readFileSync(latestPath, 'utf8'));
77
+ if (parsed.runDir && fs.existsSync(parsed.runDir))
78
+ return parsed.runDir;
79
+ }
80
+ catch {
81
+ // fall through
82
+ }
83
+ }
84
+ if (!fs.existsSync(runsDir))
85
+ return null;
86
+ const entries = fs
87
+ .readdirSync(runsDir, { withFileTypes: true })
88
+ .filter(entry => entry.isDirectory() && entry.name !== 'latest')
89
+ .map(entry => path.join(runsDir, entry.name))
90
+ .filter(entry => fs.existsSync(path.join(entry, 'manifest.json')))
91
+ .sort();
92
+ return entries.length > 0 ? entries[entries.length - 1] : null;
93
+ }
94
+ function formatPercent(value) {
95
+ if (typeof value !== 'number')
96
+ return 'n/a';
97
+ return `${(value * 100).toFixed(1)}%`;
98
+ }
99
+ export function buildFlowManifest(params) {
100
+ const statusCounts = countCardStatuses(params.cards);
101
+ const evalKeyword = params.evalReport?.strategies.find(strategy => strategy.strategy === 'keyword')?.hitRate;
102
+ const evalEmbedding = params.evalReport?.strategies.find(strategy => strategy.strategy === 'embedding')?.hitRate;
103
+ const bestStrategy = params.evalReport?.bestStrategy;
104
+ return {
105
+ schemaVersion: 1,
106
+ tool: {
107
+ name: 'repo-arch',
108
+ version: getToolVersion(),
109
+ },
110
+ run: {
111
+ id: params.runId,
112
+ repoRoot: params.config.repoRoot,
113
+ headSha: params.history.headSha,
114
+ configPath: params.config.configPath,
115
+ configHash: hashJson(params.config.raw),
116
+ startedAt: params.startedAt,
117
+ finishedAt: params.finishedAt,
118
+ full: params.full,
119
+ },
120
+ config: {
121
+ runsDir: params.config.flow.runsDir,
122
+ cards: params.config.cards,
123
+ index: params.config.index,
124
+ training: params.config.training,
125
+ },
126
+ stages: params.stages,
127
+ artifacts: {
128
+ history: 'history.jsonl',
129
+ classified: 'classified.jsonl',
130
+ cards: 'cards.jsonl',
131
+ dataset: 'dataset.jsonl',
132
+ trainingDir: path.relative(params.runDir, path.join(params.runDir, 'training')),
133
+ trainPlan: 'training/train-plan.json',
134
+ manifest: 'manifest.json',
135
+ latest: path.relative(params.runDir, path.join(path.dirname(params.runDir), 'latest.json')),
136
+ ...(params.evalReport ? { eval: 'eval.json' } : {}),
137
+ ...(params.evalReport ? { index: 'index.json' } : {}),
138
+ },
139
+ summary: {
140
+ commits: params.history.count,
141
+ cards: params.cards.length,
142
+ acceptedCards: statusCounts.accepted,
143
+ pendingCards: statusCounts.pending,
144
+ rejectedCards: statusCounts.rejected,
145
+ examples: params.dataset.examples.length,
146
+ keywordHitRate: evalKeyword,
147
+ embeddingHitRate: evalEmbedding,
148
+ bestStrategy,
149
+ valLoss: undefined,
150
+ },
151
+ };
152
+ }
153
+ function makeStage(name, status, startedAt, extras = {}) {
154
+ return {
155
+ name,
156
+ status,
157
+ startedAt,
158
+ finishedAt: now(),
159
+ ...extras,
160
+ };
161
+ }
162
+ export async function runFlow(options = {}) {
163
+ const config = loadRepoArchConfig({ repoPath: options.repoPath, configPath: options.configPath });
164
+ const history = mineHistory({ repoPath: config.repoRoot });
165
+ const runId = createRunId(history.headSha);
166
+ const runDir = resolveRunDir(config, { outPath: options.outPath, runId });
167
+ const startedAt = now();
168
+ const stages = [];
169
+ const artifacts = {};
170
+ ensureDir(runDir);
171
+ ensureDir(path.join(runDir, 'training'));
172
+ let classified = [];
173
+ let cards = [];
174
+ let dataset;
175
+ let trainPlan;
176
+ let evalReport;
177
+ const full = options.full ?? false;
178
+ const includeRejected = options.includeRejected ?? config.training.includeRejected;
179
+ const cardMinConfidence = options.minConfidence ?? config.cards.minConfidence;
180
+ const cardMaxCards = options.maxCards ?? config.cards.maxCards;
181
+ const trainingModel = options.model ?? config.training.model;
182
+ const trainingIters = options.iters ?? config.training.iters;
183
+ const trainingLearningRate = options.learningRate ?? config.training.learningRate;
184
+ try {
185
+ const historyOut = path.join(runDir, 'history.jsonl');
186
+ fs.writeFileSync(historyOut, history.jsonl, 'utf8');
187
+ stages.push(makeStage('history', 'ok', startedAt, {
188
+ artifact: 'history.jsonl',
189
+ details: { commits: history.count, cacheHit: history.cacheHit },
190
+ }));
191
+ artifacts.history = 'history.jsonl';
192
+ const classifyStartedAt = now();
193
+ classified = classifyHistory(history.records);
194
+ const classifiedOut = path.join(runDir, 'classified.jsonl');
195
+ writeJsonl(classifiedOut, classified);
196
+ stages.push(makeStage('classify', 'ok', classifyStartedAt, {
197
+ artifact: 'classified.jsonl',
198
+ details: { commits: classified.length },
199
+ }));
200
+ artifacts.classified = 'classified.jsonl';
201
+ const cardsStartedAt = now();
202
+ cards = generateCards(classified, {
203
+ minConfidence: cardMinConfidence,
204
+ maxCards: cardMaxCards,
205
+ }, getStatusOverrideMap(config.repoRoot));
206
+ const cardsOut = path.join(runDir, 'cards.jsonl');
207
+ writeJsonl(cardsOut, cards);
208
+ const statusCounts = countCardStatuses(cards);
209
+ stages.push(makeStage('cards', 'ok', cardsStartedAt, {
210
+ artifact: 'cards.jsonl',
211
+ details: {
212
+ cards: cards.length,
213
+ accepted: statusCounts.accepted,
214
+ pending: statusCounts.pending,
215
+ rejected: statusCounts.rejected,
216
+ },
217
+ }));
218
+ artifacts.cards = 'cards.jsonl';
219
+ writeJson(path.join(runDir, 'review.json'), {
220
+ schemaVersion: 1,
221
+ cards: statusCounts,
222
+ reviewState: listReviewState(config.repoRoot),
223
+ });
224
+ artifacts.review = 'review.json';
225
+ const datasetStartedAt = now();
226
+ dataset = generateDataset({ repoPath: config.repoRoot, includeRejected });
227
+ const datasetOut = path.join(runDir, 'dataset.jsonl');
228
+ fs.writeFileSync(datasetOut, dataset.examples.map(example => JSON.stringify(example)).join('\n') + (dataset.examples.length ? '\n' : ''), 'utf8');
229
+ writeJson(path.join(runDir, 'dataset.json'), {
230
+ schemaVersion: 1,
231
+ repoRoot: dataset.repoRoot,
232
+ headSha: dataset.headSha,
233
+ totalCards: dataset.totalCards,
234
+ acceptedCards: dataset.acceptedCards,
235
+ counts: dataset.counts,
236
+ examples: dataset.examples.length,
237
+ });
238
+ stages.push(makeStage('dataset', 'ok', datasetStartedAt, {
239
+ artifact: 'dataset.jsonl',
240
+ details: {
241
+ examples: dataset.examples.length,
242
+ qa: dataset.counts.qa,
243
+ reviewWarning: dataset.counts['review-warning'],
244
+ riskClassification: dataset.counts['risk-classification'],
245
+ negative: dataset.counts.negative,
246
+ },
247
+ }));
248
+ artifacts.dataset = 'dataset.jsonl';
249
+ const trainPlanStartedAt = now();
250
+ trainPlan = prepareTrain({
251
+ repoPath: config.repoRoot,
252
+ outPath: path.join(runDir, 'training'),
253
+ model: trainingModel,
254
+ iters: trainingIters,
255
+ learningRate: trainingLearningRate,
256
+ adapterName: `repo-arch-${history.headSha.slice(0, 7)}`,
257
+ });
258
+ writeJson(path.join(runDir, 'training', 'train-plan.json'), {
259
+ schemaVersion: 1,
260
+ ...trainPlan,
261
+ note: 'Use repo-arch train cycle to continue training or train run for a one-shot run.',
262
+ });
263
+ stages.push(makeStage('train-plan', 'ok', trainPlanStartedAt, {
264
+ artifact: path.join('training', 'train-plan.json'),
265
+ details: {
266
+ examples: trainPlan.examples,
267
+ model: trainPlan.model,
268
+ },
269
+ }));
270
+ artifacts.trainPlan = path.join('training', 'train-plan.json');
271
+ artifacts.trainingDir = 'training';
272
+ if (full) {
273
+ const indexStartedAt = now();
274
+ if (cards.length > 0) {
275
+ const entries = cards.map(card => ({
276
+ id: card.id,
277
+ text: `${card.title}. ${card.suggestion} ${card.supportingCommits.map(commit => commit.subject).join('. ')}`,
278
+ source: 'card',
279
+ metadata: {
280
+ type: card.type,
281
+ confidence: String(card.confidence),
282
+ status: card.status,
283
+ },
284
+ }));
285
+ const index = await buildIndex(entries, { repoPath: config.repoRoot, model: config.index.model });
286
+ writeJson(path.join(runDir, 'index.json'), {
287
+ schemaVersion: 1,
288
+ model: index.model,
289
+ dim: index.dim,
290
+ headSha: index.headSha,
291
+ entries: index.entries.length,
292
+ createdAt: index.createdAt,
293
+ });
294
+ stages.push(makeStage('index', 'ok', indexStartedAt, {
295
+ artifact: 'index.json',
296
+ details: {
297
+ entries: index.entries.length,
298
+ model: index.model,
299
+ },
300
+ }));
301
+ artifacts.index = 'index.json';
302
+ }
303
+ else {
304
+ stages.push(makeStage('index', 'skipped', indexStartedAt, {
305
+ details: { reason: 'no cards to index' },
306
+ }));
307
+ }
308
+ const evalStartedAt = now();
309
+ evalReport = await runEval({ repoPath: config.repoRoot });
310
+ writeJson(path.join(runDir, 'eval.json'), evalReport);
311
+ const keyword = evalReport.strategies.find(strategy => strategy.strategy === 'keyword')?.hitRate;
312
+ const embedding = evalReport.strategies.find(strategy => strategy.strategy === 'embedding')?.hitRate;
313
+ stages.push(makeStage('eval', 'ok', evalStartedAt, {
314
+ artifact: 'eval.json',
315
+ details: {
316
+ queries: evalReport.queries,
317
+ keyword: typeof keyword === 'number' ? keyword : null,
318
+ embedding: typeof embedding === 'number' ? embedding : null,
319
+ bestStrategy: evalReport.bestStrategy,
320
+ },
321
+ }));
322
+ artifacts.eval = 'eval.json';
323
+ }
324
+ else {
325
+ const indexStartedAt = now();
326
+ stages.push(makeStage('index', 'skipped', indexStartedAt, {
327
+ details: { reason: 'use repo-arch flow run full to build embeddings' },
328
+ }));
329
+ const evalStartedAt = now();
330
+ stages.push(makeStage('eval', 'skipped', evalStartedAt, {
331
+ details: { reason: 'use repo-arch flow run full to run evaluation' },
332
+ }));
333
+ }
334
+ const finishedAt = now();
335
+ const manifest = buildFlowManifest({
336
+ config,
337
+ runId,
338
+ startedAt,
339
+ finishedAt,
340
+ full,
341
+ stages,
342
+ cards,
343
+ dataset: dataset,
344
+ trainPlan: trainPlan,
345
+ evalReport,
346
+ history,
347
+ runDir,
348
+ });
349
+ writeJson(path.join(runDir, 'manifest.json'), manifest);
350
+ writeLatestPointer(config.flow.runsDir, runId, runDir);
351
+ return {
352
+ runDir,
353
+ manifestPath: path.join(runDir, 'manifest.json'),
354
+ manifest,
355
+ config,
356
+ history,
357
+ cards,
358
+ dataset: dataset,
359
+ trainPlan: trainPlan,
360
+ evalReport,
361
+ };
362
+ }
363
+ catch (error) {
364
+ const finishedAt = now();
365
+ const failedManifest = buildFlowManifest({
366
+ config,
367
+ runId,
368
+ startedAt,
369
+ finishedAt,
370
+ full,
371
+ stages,
372
+ cards,
373
+ dataset: dataset ?? {
374
+ repoRoot: config.repoRoot,
375
+ headSha: history.headSha.slice(0, 12),
376
+ totalCards: cards.length,
377
+ acceptedCards: countCardStatuses(cards).accepted,
378
+ examples: [],
379
+ counts: { qa: 0, 'review-warning': 0, 'risk-classification': 0, negative: 0 },
380
+ },
381
+ trainPlan: trainPlan ?? {
382
+ dataDir: path.join(runDir, 'training'),
383
+ trainFile: path.join(runDir, 'training', 'train.jsonl'),
384
+ validFile: path.join(runDir, 'training', 'valid.jsonl'),
385
+ model: config.training.model,
386
+ iters: config.training.iters,
387
+ learningRate: config.training.learningRate,
388
+ adapterPath: path.join(config.repoRoot, '.repo-arch', 'adapters', `repo-arch-${history.headSha.slice(0, 7)}`),
389
+ command: '',
390
+ examples: 0,
391
+ },
392
+ evalReport,
393
+ history,
394
+ runDir,
395
+ });
396
+ writeJson(path.join(runDir, 'manifest.json'), failedManifest);
397
+ writeLatestPointer(config.flow.runsDir, runId, runDir);
398
+ throw error;
399
+ }
400
+ }
401
+ export function inspectFlow(options = {}) {
402
+ const config = loadRepoArchConfig({ repoPath: options.repoPath, configPath: options.configPath });
403
+ const runDir = resolveRunDirForInspect(config, options.runId);
404
+ if (!runDir) {
405
+ throw new Error('No repo-arch run found. Use repo-arch flow run first.');
406
+ }
407
+ const manifestPath = path.join(runDir, 'manifest.json');
408
+ if (!fs.existsSync(manifestPath)) {
409
+ throw new Error(`Missing manifest: ${manifestPath}`);
410
+ }
411
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
412
+ return { runDir, manifestPath, manifest };
413
+ }
414
+ function resolveRunDirForInspect(config, runId) {
415
+ if (!runId || runId === 'latest') {
416
+ return resolveLatestRunDir(config.flow.runsDir);
417
+ }
418
+ if (path.isAbsolute(runId) || runId.includes(path.sep)) {
419
+ if (!fs.existsSync(runId))
420
+ return null;
421
+ const stat = fs.statSync(runId);
422
+ return stat.isDirectory() ? runId : path.dirname(runId);
423
+ }
424
+ const candidate = path.join(config.flow.runsDir, runId);
425
+ return fs.existsSync(candidate) ? candidate : null;
426
+ }
427
+ export function formatFlowRun(result) {
428
+ const { manifest } = result;
429
+ const cards = manifest.summary.cards;
430
+ const accepted = manifest.summary.acceptedCards;
431
+ const pending = manifest.summary.pendingCards;
432
+ const rejected = manifest.summary.rejectedCards;
433
+ const lines = [];
434
+ lines.push(`\n Repo-Arch flow run for ${manifest.run.repoRoot}`);
435
+ lines.push(` ${manifest.run.id} | ${manifest.run.headSha.slice(0, 12)} | ${manifest.run.full ? 'full' : 'prepare'}\n`);
436
+ lines.push(` Config: ${manifest.run.configPath ?? '(defaults)'}`);
437
+ lines.push(` Run dir: ${result.runDir}\n`);
438
+ lines.push(` history ${manifest.summary.commits} commits`);
439
+ lines.push(` cards ${cards} cards (${accepted} accepted, ${pending} pending, ${rejected} rejected)`);
440
+ lines.push(` dataset ${manifest.summary.examples} examples`);
441
+ lines.push(` train-plan ${result.trainPlan.examples} examples -> ${result.trainPlan.trainFile}`);
442
+ if (manifest.summary.keywordHitRate !== undefined || manifest.summary.embeddingHitRate !== undefined) {
443
+ lines.push(` eval keyword ${formatPercent(manifest.summary.keywordHitRate)} | embedding ${formatPercent(manifest.summary.embeddingHitRate)}`);
444
+ }
445
+ lines.push(`\n Next:`);
446
+ lines.push(` repo-arch flow inspect`);
447
+ lines.push(` repo-arch review list`);
448
+ lines.push(` repo-arch train cycle`);
449
+ lines.push('');
450
+ return lines.join('\n');
451
+ }
452
+ export function formatFlowInspect(result) {
453
+ const { manifest } = result;
454
+ const lines = [];
455
+ lines.push(`\n Repo-Arch run: ${manifest.run.id}`);
456
+ lines.push(` Repo: ${manifest.run.repoRoot}`);
457
+ lines.push(` Head: ${manifest.run.headSha}`);
458
+ lines.push(` Config: ${manifest.run.configPath ?? '(defaults)'}`);
459
+ lines.push(` Status: ${manifest.stages.some(stage => stage.status === 'failed') ? 'failed' : 'ok'}\n`);
460
+ for (const stage of manifest.stages) {
461
+ const status = stage.status === 'ok' ? '✓' : stage.status === 'skipped' ? '→' : '✗';
462
+ const artifact = stage.artifact ? ` → ${stage.artifact}` : '';
463
+ const details = stage.details ? ` (${Object.entries(stage.details).map(([k, v]) => `${k}=${v}`).join(', ')})` : '';
464
+ lines.push(` ${status} ${stage.name}${artifact}${details}`);
465
+ }
466
+ lines.push(`\n Summary:`);
467
+ lines.push(` commits: ${manifest.summary.commits}`);
468
+ lines.push(` cards: ${manifest.summary.cards} (accepted ${manifest.summary.acceptedCards}, pending ${manifest.summary.pendingCards}, rejected ${manifest.summary.rejectedCards})`);
469
+ lines.push(` examples: ${manifest.summary.examples}`);
470
+ if (manifest.summary.keywordHitRate !== undefined || manifest.summary.embeddingHitRate !== undefined) {
471
+ lines.push(` eval: keyword ${formatPercent(manifest.summary.keywordHitRate)} | embedding ${formatPercent(manifest.summary.embeddingHitRate)}`);
472
+ }
473
+ if (manifest.summary.bestStrategy) {
474
+ lines.push(` bestStrategy: ${manifest.summary.bestStrategy}`);
475
+ }
476
+ if (manifest.summary.valLoss !== undefined) {
477
+ lines.push(` valLoss: ${manifest.summary.valLoss}`);
478
+ }
479
+ lines.push(`\n Next:`);
480
+ if (manifest.stages.find(stage => stage.name === 'index' && stage.status === 'skipped')) {
481
+ lines.push(' repo-arch flow run full');
482
+ }
483
+ lines.push(' repo-arch train cycle');
484
+ lines.push(' repo-arch review list');
485
+ lines.push('');
486
+ return lines.join('\n');
487
+ }
488
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAA0B,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAsC,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,OAAO,EAAmB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAA+B,MAAM,aAAa,CAAC;AAmF9E,SAAS,cAAc;IACrB,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAyB,CAAC;IAC5F,OAAO,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,GAAG;IACV,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,IAAa;IAChD,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,KAAgB;IACpD,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9F,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,QAAQ,IAAI,CAAC,CAAC;aACzC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,QAAQ,IAAI,CAAC,CAAC;;YAC9C,OAAO,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,MAA8B,EAAE,UAAgD,EAAE;IACvG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,CAAC;IACnB,SAAS,CAAC,UAAU,EAAE;QACpB,aAAa,EAAE,CAAC;QAChB,KAAK;QACL,MAAM;QACN,SAAS,EAAE,GAAG,EAAE;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAwB,CAAC;YACtF,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,EAAE;SACf,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC/D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;SACjE,IAAI,EAAE,CAAC;IAEV,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAajC;IACC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7G,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,OAAO,CAAC;IACjH,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC;IAErD,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE;YACJ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,cAAc,EAAE;SAC1B;QACD,GAAG,EAAE;YACH,EAAE,EAAE,MAAM,CAAC,KAAK;YAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;YAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;QACD,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;YACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;YAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;YAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;SACjC;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE;YACT,OAAO,EAAE,eAAe;YACxB,UAAU,EAAE,kBAAkB;YAC9B,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC/E,SAAS,EAAE,0BAA0B;YACrC,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YAC3F,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD;QACD,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC1B,aAAa,EAAE,YAAY,CAAC,QAAQ;YACpC,YAAY,EAAE,YAAY,CAAC,OAAO;YAClC,aAAa,EAAE,YAAY,CAAC,QAAQ;YACpC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;YACxC,cAAc,EAAE,WAAW;YAC3B,gBAAgB,EAAE,aAAa;YAC/B,YAAY;YACZ,OAAO,EAAE,SAAS;SACnB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,MAAuB,EAAE,SAAiB,EAAE,SAAmC,EAAE;IAChH,OAAO;QACL,IAAI;QACJ,MAAM;QACN,SAAS;QACT,UAAU,EAAE,GAAG,EAAE;QACjB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA0B,EAAE;IACxD,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;IACxB,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,SAAS,CAAC,MAAM,CAAC,CAAC;IAClB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzC,IAAI,UAAU,GAAuC,EAAE,CAAC;IACxD,IAAI,KAAK,GAAkB,EAAE,CAAC;IAC9B,IAAI,OAAkC,CAAC;IACvC,IAAI,SAAgC,CAAC;IACrC,IAAI,UAAkC,CAAC;IAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACnC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnF,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IAElF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YAChD,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;SAChE,CAAC,CAAC,CAAC;QACJ,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC;QAEpC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC;QAChC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC5D,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACzD,QAAQ,EAAE,kBAAkB;YAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE;SACxC,CAAC,CAAC,CAAC;QACJ,SAAS,CAAC,UAAU,GAAG,kBAAkB,CAAC;QAE1C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;QAC7B,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE;YAChC,aAAa,EAAE,iBAAiB;YAChC,QAAQ,EAAE,YAAY;SACvB,EAAE,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAClD,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5B,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;YACnD,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,QAAQ,EAAE,YAAY,CAAC,QAAQ;aAChC;SACF,CAAC,CAAC,CAAC;QACJ,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC;QAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YAC1C,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC9C,CAAC,CAAC;QACH,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC;QAEjC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC;QAC/B,OAAO,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAClJ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE;YAC3C,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACvD,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBACjC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC/C,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;gBACzD,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;aAClC;SACF,CAAC,CAAC,CAAC;QACJ,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC;QAEpC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC;QACjC,SAAS,GAAG,YAAY,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;YACtC,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,oBAAoB;YAClC,WAAW,EAAE,aAAa,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;SACxD,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE;YAC1D,aAAa,EAAE,CAAC;YAChB,GAAG,SAAS;YACZ,IAAI,EAAE,iFAAiF;SACxF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC5D,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC;YAClD,OAAO,EAAE;gBACP,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB;SACF,CAAC,CAAC,CAAC;QACJ,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC/D,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC;QAEnC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5G,MAAM,EAAE,MAAe;oBACvB,QAAQ,EAAE;wBACR,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;wBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;qBACpB;iBACF,CAAC,CAAC,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;oBACzC,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;oBAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;oBACnD,QAAQ,EAAE,YAAY;oBACtB,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;wBAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB;iBACF,CAAC,CAAC,CAAC;gBACJ,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE;oBACxD,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;iBACzC,CAAC,CAAC,CAAC;YACN,CAAC;YAED,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC;YAC5B,UAAU,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC;YACjG,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,OAAO,CAAC;YACrG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;gBACjD,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE;oBACP,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBACrD,SAAS,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;oBAC3D,YAAY,EAAE,UAAU,CAAC,YAAY;iBACtC;aACF,CAAC,CAAC,CAAC;YACJ,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE;gBACxD,OAAO,EAAE,EAAE,MAAM,EAAE,iDAAiD,EAAE;aACvE,CAAC,CAAC,CAAC;YACJ,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE;gBACtD,OAAO,EAAE,EAAE,MAAM,EAAE,+CAA+C,EAAE;aACrE,CAAC,CAAC,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACjC,MAAM;YACN,KAAK;YACL,SAAS;YACT,UAAU;YACV,IAAI;YACJ,MAAM;YACN,KAAK;YACL,OAAO,EAAE,OAAQ;YACjB,SAAS,EAAE,SAAU;YACrB,UAAU;YACV,OAAO;YACP,MAAM;SACP,CAAC,CAAC;QAEH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxD,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvD,OAAO;YACL,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;YAChD,QAAQ;YACR,MAAM;YACN,OAAO;YACP,KAAK;YACL,OAAO,EAAE,OAAQ;YACjB,SAAS,EAAE,SAAU;YACrB,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,iBAAiB,CAAC;YACvC,MAAM;YACN,KAAK;YACL,SAAS;YACT,UAAU;YACV,IAAI;YACJ,MAAM;YACN,KAAK;YACL,OAAO,EAAE,OAAO,IAAI;gBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrC,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,QAAQ;gBAChD,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;aAC9E;YACD,SAAS,EAAE,SAAS,IAAI;gBACtB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;gBACtC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;gBACvD,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;gBACvD,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY;gBAC1C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7G,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,CAAC;aACZ;YACD,UAAU;YACV,OAAO;YACP,MAAM;SACP,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC;QAC9D,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAsE,EAAE;IAClG,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAiB,CAAC;IACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA8B,EAAE,KAAc;IAC7E,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;IAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,GAAG,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,OAAO,CAAC,OAAO,UAAU,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,WAAW,QAAQ,cAAc,OAAO,aAAa,QAAQ,YAAY,CAAC,CAAC;IAC7G,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,OAAO,CAAC,QAAQ,WAAW,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,QAAQ,gBAAgB,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpG,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrG,KAAK,CAAC,IAAI,CAAC,0BAA0B,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACzJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,GAAG,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAExG,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,OAAO,CAAC,KAAK,cAAc,QAAQ,CAAC,OAAO,CAAC,aAAa,aAAa,QAAQ,CAAC,OAAO,CAAC,YAAY,cAAc,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;IACpL,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrG,KAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAClJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;QACxF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { type FlowInspectResult } from './flow.js';
2
+ import { type TrainPlan } from './training.js';
3
+ export type TrainCycleSession = {
4
+ schemaVersion: 1;
5
+ sessionId: string;
6
+ runId: string;
7
+ runDir: string;
8
+ flowManifestPath: string;
9
+ createdAt: string;
10
+ updatedAt: string;
11
+ status: 'idle' | 'running' | 'ok' | 'failed';
12
+ model: string;
13
+ iters: number;
14
+ learningRate: number;
15
+ adapterPath: string;
16
+ resumeAdapterFile: string | null;
17
+ latestCheckpoint: string | null;
18
+ command: string;
19
+ trainPlan: string;
20
+ };
21
+ export type TrainCycleOptions = {
22
+ repoPath?: string;
23
+ configPath?: string;
24
+ runRef?: string;
25
+ model?: string;
26
+ iters?: number;
27
+ learningRate?: number;
28
+ };
29
+ export type TrainCycleResult = {
30
+ flow: FlowInspectResult;
31
+ plan: TrainPlan;
32
+ session: TrainCycleSession;
33
+ sessionPath: string;
34
+ cyclesPath: string;
35
+ resumeAdapterFile: string | null;
36
+ };
37
+ export declare function loadTrainSession(runDir: string): TrainCycleSession | null;
38
+ export declare function listTrainSessions(repoPath?: string, configPath?: string): TrainCycleSession[];
39
+ export declare function formatTrainCycleResult(result: TrainCycleResult): string;
40
+ export declare function formatTrainStatus(session: TrainCycleSession | null, flow?: FlowInspectResult): string;
41
+ export declare function formatTrainList(sessions: TrainCycleSession[]): string;
42
+ export declare function runTrainCycle(options?: TrainCycleOptions, mode?: 'cycle' | 'resume'): TrainCycleResult;