skills-console 0.4.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/CHANGELOG.md +30 -0
- package/LICENSE +21 -0
- package/README.md +130 -0
- package/dist/adapters/filesystem/agent-registry.d.ts +5 -0
- package/dist/adapters/filesystem/agent-registry.js +236 -0
- package/dist/adapters/filesystem/agent-registry.js.map +1 -0
- package/dist/adapters/filesystem/frontmatter.d.ts +2 -0
- package/dist/adapters/filesystem/frontmatter.js +73 -0
- package/dist/adapters/filesystem/frontmatter.js.map +1 -0
- package/dist/adapters/filesystem/skill-scanner.d.ts +8 -0
- package/dist/adapters/filesystem/skill-scanner.js +157 -0
- package/dist/adapters/filesystem/skill-scanner.js.map +1 -0
- package/dist/adapters/filesystem/skills-lock.d.ts +2 -0
- package/dist/adapters/filesystem/skills-lock.js +44 -0
- package/dist/adapters/filesystem/skills-lock.js.map +1 -0
- package/dist/adapters/skills-cli/command-builder.d.ts +7 -0
- package/dist/adapters/skills-cli/command-builder.js +144 -0
- package/dist/adapters/skills-cli/command-builder.js.map +1 -0
- package/dist/adapters/skills-cli/executor.d.ts +20 -0
- package/dist/adapters/skills-cli/executor.js +51 -0
- package/dist/adapters/skills-cli/executor.js.map +1 -0
- package/dist/adapters/skills-cli/source-parser.d.ts +3 -0
- package/dist/adapters/skills-cli/source-parser.js +38 -0
- package/dist/adapters/skills-cli/source-parser.js.map +1 -0
- package/dist/adapters/skills-cli/types.d.ts +56 -0
- package/dist/adapters/skills-cli/types.js +2 -0
- package/dist/adapters/skills-cli/types.js.map +1 -0
- package/dist/application/backup-manager.d.ts +7 -0
- package/dist/application/backup-manager.js +164 -0
- package/dist/application/backup-manager.js.map +1 -0
- package/dist/application/build-inventory.d.ts +5 -0
- package/dist/application/build-inventory.js +103 -0
- package/dist/application/build-inventory.js.map +1 -0
- package/dist/application/doctor-fixes.d.ts +21 -0
- package/dist/application/doctor-fixes.js +103 -0
- package/dist/application/doctor-fixes.js.map +1 -0
- package/dist/application/history-store.d.ts +5 -0
- package/dist/application/history-store.js +42 -0
- package/dist/application/history-store.js.map +1 -0
- package/dist/application/profile-apply.d.ts +22 -0
- package/dist/application/profile-apply.js +69 -0
- package/dist/application/profile-apply.js.map +1 -0
- package/dist/application/profile-diff.d.ts +3 -0
- package/dist/application/profile-diff.js +105 -0
- package/dist/application/profile-diff.js.map +1 -0
- package/dist/application/profile-store.d.ts +9 -0
- package/dist/application/profile-store.js +109 -0
- package/dist/application/profile-store.js.map +1 -0
- package/dist/application/restore-operation.d.ts +8 -0
- package/dist/application/restore-operation.js +27 -0
- package/dist/application/restore-operation.js.map +1 -0
- package/dist/application/skill-operations.d.ts +32 -0
- package/dist/application/skill-operations.js +129 -0
- package/dist/application/skill-operations.js.map +1 -0
- package/dist/cli-commands.d.ts +8 -0
- package/dist/cli-commands.js +111 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/domain/operations.d.ts +50 -0
- package/dist/domain/operations.js +25 -0
- package/dist/domain/operations.js.map +1 -0
- package/dist/domain/profile.d.ts +43 -0
- package/dist/domain/profile.js +2 -0
- package/dist/domain/profile.js.map +1 -0
- package/dist/domain/types.d.ts +98 -0
- package/dist/domain/types.js +2 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/platform/data-paths.d.ts +3 -0
- package/dist/platform/data-paths.js +17 -0
- package/dist/platform/data-paths.js.map +1 -0
- package/dist/platform/environment.d.ts +6 -0
- package/dist/platform/environment.js +71 -0
- package/dist/platform/environment.js.map +1 -0
- package/dist/platform/redaction.d.ts +1 -0
- package/dist/platform/redaction.js +7 -0
- package/dist/platform/redaction.js.map +1 -0
- package/dist/ui/App.d.ts +2 -0
- package/dist/ui/App.js +330 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/DoctorFixWizard.d.ts +12 -0
- package/dist/ui/DoctorFixWizard.js +58 -0
- package/dist/ui/DoctorFixWizard.js.map +1 -0
- package/dist/ui/OperationWizard.d.ts +19 -0
- package/dist/ui/OperationWizard.js +301 -0
- package/dist/ui/OperationWizard.js.map +1 -0
- package/dist/ui/ProfileWizard.d.ts +15 -0
- package/dist/ui/ProfileWizard.js +68 -0
- package/dist/ui/ProfileWizard.js.map +1 -0
- package/dist/ui/RestoreWizard.d.ts +12 -0
- package/dist/ui/RestoreWizard.js +42 -0
- package/dist/ui/RestoreWizard.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/docs/ARCHITECTURE.md +145 -0
- package/docs/OPERATIONS.md +200 -0
- package/docs/PROFILES.md +83 -0
- package/examples/skills-profile.json +21 -0
- package/package.json +71 -0
package/dist/ui/App.js
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { Box, Spacer, Text, useApp, useInput, useStdout } from 'ink';
|
|
4
|
+
import { buildInventory } from '../application/build-inventory.js';
|
|
5
|
+
import { listHistoryRecords } from '../application/history-store.js';
|
|
6
|
+
import { OperationWizard } from './OperationWizard.js';
|
|
7
|
+
import { RestoreWizard } from './RestoreWizard.js';
|
|
8
|
+
import { SKILLS_CONSOLE_VERSION } from '../version.js';
|
|
9
|
+
import { DoctorFixWizard } from './DoctorFixWizard.js';
|
|
10
|
+
import { resolveDataRoot } from '../platform/data-paths.js';
|
|
11
|
+
import { defaultProfilePath, loadProfile, } from '../application/profile-store.js';
|
|
12
|
+
import { diffProfile } from '../application/profile-diff.js';
|
|
13
|
+
import { ProfileWizard } from './ProfileWizard.js';
|
|
14
|
+
const pages = [
|
|
15
|
+
{ id: 'dashboard', label: 'Dashboard' },
|
|
16
|
+
{ id: 'skills', label: 'Skills' },
|
|
17
|
+
{ id: 'agents', label: 'Agents' },
|
|
18
|
+
{ id: 'doctor', label: 'Doctor' },
|
|
19
|
+
{ id: 'profiles', label: 'Profiles' },
|
|
20
|
+
{ id: 'history', label: 'History' },
|
|
21
|
+
];
|
|
22
|
+
function compactPath(path, homeDir) {
|
|
23
|
+
return path === homeDir || path.startsWith(`${homeDir}/`)
|
|
24
|
+
? `~${path.slice(homeDir.length)}`
|
|
25
|
+
: path;
|
|
26
|
+
}
|
|
27
|
+
function truncate(value, maxLength) {
|
|
28
|
+
if (maxLength <= 1) {
|
|
29
|
+
return value.slice(0, maxLength);
|
|
30
|
+
}
|
|
31
|
+
return value.length > maxLength ? `${value.slice(0, maxLength - 1)}…` : value;
|
|
32
|
+
}
|
|
33
|
+
function statusSymbol(group) {
|
|
34
|
+
if (group.errorCount > 0) {
|
|
35
|
+
return { symbol: '×', color: 'red' };
|
|
36
|
+
}
|
|
37
|
+
if (group.warningCount > 0) {
|
|
38
|
+
return { symbol: '!', color: 'yellow' };
|
|
39
|
+
}
|
|
40
|
+
return { symbol: '✓', color: 'green' };
|
|
41
|
+
}
|
|
42
|
+
function severityColor(severity) {
|
|
43
|
+
return severity === 'error' ? 'red' : severity === 'warning' ? 'yellow' : 'blue';
|
|
44
|
+
}
|
|
45
|
+
function visibleWindow(items, cursor, size) {
|
|
46
|
+
const offset = Math.max(0, Math.min(cursor - Math.floor(size / 2), items.length - size));
|
|
47
|
+
return { items: items.slice(offset, offset + size), offset };
|
|
48
|
+
}
|
|
49
|
+
function Header({ activePage, inventory }) {
|
|
50
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "SKILLS CONSOLE" }), _jsxs(Text, { dimColor: true, children: [' ', inventory.environment.isWsl
|
|
51
|
+
? 'WSL'
|
|
52
|
+
: inventory.environment.platform.toUpperCase(), ' ', "\u00B7", ' ', truncate(compactPath(inventory.environment.projectRoot, inventory.environment.homeDir), 42)] }), _jsx(Spacer, {}), _jsx(Text, { color: inventory.stats.errorCount > 0 ? 'red' : 'green', children: inventory.stats.errorCount > 0 ? `${inventory.stats.errorCount} errors` : 'healthy' })] }), _jsx(Box, { paddingX: 1, gap: 2, children: pages.map((page) => (_jsxs(Text, { bold: activePage === page.id, ...(activePage === page.id ? { color: 'cyan' } : {}), inverse: activePage === page.id, children: [' ', page.label, ' '] }, page.id))) })] }));
|
|
53
|
+
}
|
|
54
|
+
function Stat({ label, value, color }) {
|
|
55
|
+
return (_jsxs(Box, { borderStyle: "round", paddingX: 1, minWidth: 18, children: [_jsx(Text, { dimColor: true, children: label }), _jsx(Spacer, {}), _jsx(Text, { bold: true, ...(color ? { color } : {}), children: value })] }));
|
|
56
|
+
}
|
|
57
|
+
function DashboardPage({ inventory, width }) {
|
|
58
|
+
const { stats, environment } = inventory;
|
|
59
|
+
const vertical = width < 90;
|
|
60
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { flexDirection: vertical ? 'column' : 'row', gap: vertical ? 0 : 1, children: [_jsx(Stat, { label: "Skills", value: stats.skillCount, color: "cyan" }), _jsx(Stat, { label: "Installations", value: stats.installationCount }), _jsx(Stat, { label: "Agents", value: stats.detectedAgentCount }), _jsx(Stat, { label: "Warnings", value: stats.warningCount, color: "yellow" }), _jsx(Stat, { label: "Errors", value: stats.errorCount, color: "red" })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: "Environment" }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Project " }), compactPath(environment.projectRoot, environment.homeDir)] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Runtime " }), environment.nodeVersion, " \u00B7 npx ", environment.npxAvailable ? 'available' : 'missing', " \u00B7", ' ', stats.scannedRootCount, " roots scanned"] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Scanned " }), new Date(inventory.scannedAt).toLocaleTimeString()] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: "Attention" }), inventory.diagnostics.length === 0 ? (_jsx(Text, { color: "green", children: "\u2713 No inventory problems detected." })) : (inventory.diagnostics.slice(0, 6).map((item) => (_jsxs(Text, { color: severityColor(item.severity), children: [item.severity === 'error' ? '×' : item.severity === 'warning' ? '!' : 'i', ' ', truncate(item.message, Math.max(30, width - 7))] }, item.id))))] })] }));
|
|
61
|
+
}
|
|
62
|
+
function SkillsPage({ inventory, skills, cursor, width, }) {
|
|
63
|
+
const selected = skills[cursor];
|
|
64
|
+
const listSize = 14;
|
|
65
|
+
const window = visibleWindow(skills, cursor, listSize);
|
|
66
|
+
const split = width >= 100;
|
|
67
|
+
const listWidth = split ? Math.floor(width * 0.43) : width - 4;
|
|
68
|
+
return (_jsxs(Box, { flexDirection: split ? 'row' : 'column', paddingX: 1, gap: 1, children: [_jsxs(Box, { flexDirection: "column", width: listWidth, children: [_jsxs(Text, { bold: true, children: ["Skills ", _jsxs(Text, { dimColor: true, children: ["(", skills.length, ")"] })] }), window.items.length === 0 ? (_jsx(Text, { dimColor: true, children: "No skills match the current search." })) : (window.items.map((group, localIndex) => {
|
|
69
|
+
const absoluteIndex = window.offset + localIndex;
|
|
70
|
+
const status = statusSymbol(group);
|
|
71
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { ...(absoluteIndex === cursor ? { color: 'cyan' } : {}), children: [absoluteIndex === cursor ? '›' : ' ', ' '] }), _jsxs(Text, { color: status.color, children: [status.symbol, " "] }), _jsx(Text, { bold: absoluteIndex === cursor, children: truncate(group.name, Math.max(12, listWidth - 20)).padEnd(Math.max(12, listWidth - 20)) }), _jsxs(Text, { dimColor: true, children: [String(group.installations.length).padStart(2), " \u00B7 ", String(group.agentIds.length).padStart(2), "a"] })] }, group.name));
|
|
72
|
+
})), skills.length > listSize && (_jsxs(Text, { dimColor: true, children: [cursor + 1, "/", skills.length, " \u00B7 use \u2191\u2193 to scroll"] }))] }), selected && (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, flexGrow: 1, marginTop: split ? 0 : 1, children: [_jsx(Text, { bold: true, color: "cyan", children: selected.name }), _jsx(Text, { wrap: "truncate-end", children: selected.description }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Agents " }), selected.agentIds.join(', ')] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Scopes " }), selected.scopes.join(', ')] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Copies " }), selected.installations.length] }), _jsxs(Text, { wrap: "truncate-middle", children: [_jsx(Text, { dimColor: true, children: "Source " }), selected.installations.find((item) => item.isEffective)?.source ?? 'unknown / unmanaged'] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: selected.installations.slice(0, 5).map((installation) => (_jsxs(Text, { wrap: "truncate-middle", children: [_jsxs(Text, { color: installation.isEffective ? 'green' : 'gray', children: [installation.isEffective ? '●' : '○', ' '] }), _jsxs(Text, { dimColor: true, children: [installation.scope.padEnd(7), " "] }), compactPath(installation.path, inventory.environment.homeDir), installation.rootKind === 'plugin-cache' ? _jsx(Text, { color: "yellow", children: " [managed]" }) : null] }, installation.id))) })] }))] }));
|
|
73
|
+
}
|
|
74
|
+
function AgentsPage({ agents, cursor, width }) {
|
|
75
|
+
const window = visibleWindow(agents, cursor, 14);
|
|
76
|
+
const selected = agents[cursor];
|
|
77
|
+
const split = width >= 100;
|
|
78
|
+
return (_jsxs(Box, { flexDirection: split ? 'row' : 'column', paddingX: 1, gap: 1, children: [_jsxs(Box, { flexDirection: "column", width: split ? 38 : width - 4, children: [_jsx(Text, { bold: true, children: "Known agents" }), window.items.map((agent, localIndex) => {
|
|
79
|
+
const absoluteIndex = window.offset + localIndex;
|
|
80
|
+
return (_jsxs(Text, { ...(absoluteIndex === cursor ? { color: 'cyan' } : {}), children: [absoluteIndex === cursor ? '›' : ' ', " ", agent.detected ? '●' : '○', ' ', agent.displayName.padEnd(20), " ", _jsxs(Text, { dimColor: true, children: [agent.roots.length, " roots"] })] }, agent.id));
|
|
81
|
+
})] }), selected && (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, flexGrow: 1, children: [_jsxs(Text, { bold: true, ...(selected.detected ? { color: 'green' } : {}), children: [selected.displayName, " \u00B7 ", selected.detected ? 'detected' : 'not detected'] }), selected.detectionReasons.map((reason) => (_jsx(Text, { dimColor: true, children: reason }, reason))), _jsx(Box, { flexDirection: "column", marginTop: 1, children: selected.roots.length === 0 ? (_jsx(Text, { dimColor: true, children: "No active skill roots." })) : (selected.roots.map((root) => (_jsxs(Text, { wrap: "truncate-middle", children: [root.exists ? (root.readable ? '✓' : '×') : '○', " ", root.scope.padEnd(7), ' ', compactPath(root.path, root.path.startsWith('/') ? root.path.split('/').slice(0, 3).join('/') : '')] }, root.id)))) })] }))] }));
|
|
82
|
+
}
|
|
83
|
+
function DoctorPage({ diagnostics, cursor, width }) {
|
|
84
|
+
const window = visibleWindow(diagnostics, cursor, 14);
|
|
85
|
+
const selected = diagnostics[cursor];
|
|
86
|
+
const split = width >= 100;
|
|
87
|
+
return (_jsxs(Box, { flexDirection: split ? 'row' : 'column', paddingX: 1, gap: 1, children: [_jsxs(Box, { flexDirection: "column", width: split ? Math.floor(width * 0.54) : width - 4, children: [_jsxs(Text, { bold: true, children: ["Diagnostics ", _jsxs(Text, { dimColor: true, children: ["(", diagnostics.length, ")"] })] }), diagnostics.length === 0 ? (_jsx(Text, { color: "green", children: "\u2713 No problems detected." })) : (window.items.map((item, localIndex) => {
|
|
88
|
+
const absoluteIndex = window.offset + localIndex;
|
|
89
|
+
return (_jsxs(Text, { ...(absoluteIndex === cursor ? { color: 'cyan' } : {}), children: [absoluteIndex === cursor ? '›' : ' ', ' ', _jsxs(Text, { color: severityColor(item.severity), children: [item.severity === 'error' ? '×' : item.severity === 'warning' ? '!' : 'i', ' '] }), truncate(item.message, Math.max(22, (split ? Math.floor(width * 0.54) : width) - 8))] }, item.id));
|
|
90
|
+
}))] }), selected && (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, flexGrow: 1, children: [_jsxs(Text, { bold: true, color: severityColor(selected.severity), children: [selected.severity.toUpperCase(), " \u00B7 ", selected.code] }), _jsx(Text, { children: selected.message }), selected.skillName && (_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Skill " }), selected.skillName] })), selected.path && (_jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { dimColor: true, children: "Path " }), selected.path] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Press f to check for a reversible automatic repair." }) })] }))] }));
|
|
91
|
+
}
|
|
92
|
+
function HistoryPage({ records, cursor, width }) {
|
|
93
|
+
const window = visibleWindow(records, cursor, 14);
|
|
94
|
+
const selected = records[cursor];
|
|
95
|
+
const split = width >= 100;
|
|
96
|
+
const statusColor = (status) => status === 'succeeded'
|
|
97
|
+
? 'green'
|
|
98
|
+
: status === 'failed'
|
|
99
|
+
? 'red'
|
|
100
|
+
: status === 'restored'
|
|
101
|
+
? 'blue'
|
|
102
|
+
: 'yellow';
|
|
103
|
+
return (_jsxs(Box, { flexDirection: split ? 'row' : 'column', paddingX: 1, gap: 1, children: [_jsxs(Box, { flexDirection: "column", width: split ? Math.floor(width * 0.52) : width - 4, children: [_jsxs(Text, { bold: true, children: ["Operations ", _jsxs(Text, { dimColor: true, children: ["(", records.length, ")"] })] }), records.length === 0 ? (_jsx(Text, { dimColor: true, children: "No mutating operations have been recorded." })) : (window.items.map((record, localIndex) => {
|
|
104
|
+
const absoluteIndex = window.offset + localIndex;
|
|
105
|
+
return (_jsxs(Text, { ...(absoluteIndex === cursor ? { color: 'cyan' } : {}), children: [absoluteIndex === cursor ? '›' : ' ', ' ', _jsx(Text, { color: statusColor(record.status), children: "\u25CF " }), record.kind.padEnd(8), " ", record.skillNames.join(', '), ' ', _jsx(Text, { dimColor: true, children: new Date(record.startedAt).toLocaleString() })] }, record.id));
|
|
106
|
+
}))] }), selected ? (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, flexGrow: 1, children: [_jsxs(Text, { bold: true, color: statusColor(selected.status), children: [selected.status.toUpperCase(), " \u00B7 ", selected.kind] }), _jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { dimColor: true, children: "Command " }), selected.command] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Scope " }), selected.scope ?? 'mixed'] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Exit " }), selected.exitCode ?? 'n/a'] }), _jsxs(Text, { wrap: "truncate-middle", children: [_jsx(Text, { dimColor: true, children: "Snapshot " }), selected.snapshotId] }), selected.status !== 'running' && selected.status !== 'restored' ? (_jsx(Text, { color: "yellow", children: "Press z to restore this operation." })) : null] })) : null] }));
|
|
107
|
+
}
|
|
108
|
+
function ProfilesPage({ state, cursor, width }) {
|
|
109
|
+
if (state.status === 'loading') {
|
|
110
|
+
return _jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "yellow", children: "Loading skills-profile.json\u2026" }) });
|
|
111
|
+
}
|
|
112
|
+
if (state.status === 'missing') {
|
|
113
|
+
return (_jsxs(Box, { paddingX: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "No project profile" }), _jsxs(Text, { wrap: "truncate-middle", children: [_jsx(Text, { dimColor: true, children: "Expected " }), state.path] }), _jsx(Text, { color: "magenta", children: "Press p to export the current project desired state." })] }));
|
|
114
|
+
}
|
|
115
|
+
if (state.status === 'error') {
|
|
116
|
+
return (_jsxs(Box, { paddingX: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "red", children: "Invalid project profile" }), _jsx(Text, { children: state.message })] }));
|
|
117
|
+
}
|
|
118
|
+
const { diff, profile } = state;
|
|
119
|
+
const window = visibleWindow(diff.entries, cursor, 14);
|
|
120
|
+
const selected = diff.entries[cursor];
|
|
121
|
+
const split = width >= 100;
|
|
122
|
+
const color = (status) => status === 'satisfied'
|
|
123
|
+
? 'green'
|
|
124
|
+
: status === 'extra' || status === 'source-unknown'
|
|
125
|
+
? 'yellow'
|
|
126
|
+
: 'red';
|
|
127
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "magenta", children: profile.name }), _jsxs(Text, { dimColor: true, children: [' ', "\u00B7 ok ", diff.summary.satisfied, " \u00B7 missing ", diff.summary.missing, " \u00B7 mismatch", ' ', diff.summary.sourceMismatch, " \u00B7 extra ", diff.summary.extra] }), _jsx(Spacer, {}), _jsx(Text, { color: diff.hasChanges ? 'yellow' : 'green', children: diff.hasChanges ? 'drift detected' : 'desired state satisfied' })] }), _jsxs(Box, { flexDirection: split ? 'row' : 'column', gap: 1, marginTop: 1, children: [_jsxs(Box, { flexDirection: "column", width: split ? Math.floor(width * 0.48) : width - 4, children: [window.items.length === 0 ? _jsx(Text, { dimColor: true, children: "Profile has no declarations or drift." }) : null, window.items.map((entry, localIndex) => {
|
|
128
|
+
const absoluteIndex = window.offset + localIndex;
|
|
129
|
+
return (_jsxs(Text, { ...(absoluteIndex === cursor ? { color: 'cyan' } : {}), children: [absoluteIndex === cursor ? '›' : ' ', " ", _jsx(Text, { color: color(entry.status), children: "\u25CF " }), entry.status.padEnd(16), " ", entry.skillName] }, entry.id));
|
|
130
|
+
})] }), selected ? (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, flexGrow: 1, children: [_jsx(Text, { bold: true, color: color(selected.status), children: selected.status.toUpperCase() }), _jsxs(Text, { children: [selected.skillName, " \u00B7 ", selected.scope] }), _jsx(Text, { wrap: "wrap", children: selected.message }), selected.expected?.source ? (_jsxs(Text, { wrap: "truncate-middle", children: [_jsx(Text, { dimColor: true, children: "Source " }), selected.expected.source] })) : null] })) : null] }), _jsx(Text, { color: "magenta", children: "Press p to preview and apply this profile." })] }));
|
|
131
|
+
}
|
|
132
|
+
function Footer({ state, searchMode, query, }) {
|
|
133
|
+
return (_jsxs(Box, { marginTop: 1, paddingX: 1, children: [searchMode ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "cyan", children: ["/ ", query] }), _jsx(Text, { inverse: true, children: " " }), _jsx(Text, { dimColor: true, children: " enter apply \u00B7 esc clear" })] })) : (_jsxs(Text, { children: [_jsx(Text, { inverse: true, children: " \u2190\u2192 " }), _jsx(Text, { dimColor: true, children: " page " }), _jsx(Text, { inverse: true, children: " \u2191\u2193 " }), _jsx(Text, { dimColor: true, children: " move " }), _jsx(Text, { inverse: true, children: " / " }), _jsx(Text, { dimColor: true, children: " search " }), _jsx(Text, { inverse: true, children: " r " }), _jsx(Text, { dimColor: true, children: " refresh " }), _jsx(Text, { inverse: true, children: " i " }), _jsx(Text, { dimColor: true, children: " install " }), _jsx(Text, { inverse: true, children: " u/d " }), _jsx(Text, { dimColor: true, children: " update/remove " }), _jsx(Text, { inverse: true, children: " z " }), _jsx(Text, { dimColor: true, children: " restore " }), _jsx(Text, { inverse: true, children: " f " }), _jsx(Text, { dimColor: true, children: " doctor fix " }), _jsx(Text, { inverse: true, children: " p " }), _jsx(Text, { dimColor: true, children: " profile " }), _jsx(Text, { inverse: true, children: " q " }), _jsx(Text, { dimColor: true, children: " quit" })] })), _jsx(Spacer, {}), state.status === 'loading' && _jsx(Text, { color: "yellow", children: "scanning\u2026" }), state.status === 'error' && _jsx(Text, { color: "red", children: "scan failed" }), state.status === 'ready' && _jsxs(Text, { dimColor: true, children: ["v", SKILLS_CONSOLE_VERSION] })] }));
|
|
134
|
+
}
|
|
135
|
+
export function App() {
|
|
136
|
+
const { exit } = useApp();
|
|
137
|
+
const { stdout } = useStdout();
|
|
138
|
+
const width = stdout.columns ?? 120;
|
|
139
|
+
const [activePageIndex, setActivePageIndex] = useState(0);
|
|
140
|
+
const [cursor, setCursor] = useState(0);
|
|
141
|
+
const [query, setQuery] = useState('');
|
|
142
|
+
const [searchMode, setSearchMode] = useState(false);
|
|
143
|
+
const [state, setState] = useState({ status: 'loading' });
|
|
144
|
+
const [wizard, setWizard] = useState();
|
|
145
|
+
const [historyRecords, setHistoryRecords] = useState([]);
|
|
146
|
+
const [restoreRecord, setRestoreRecord] = useState();
|
|
147
|
+
const [doctorDiagnostic, setDoctorDiagnostic] = useState();
|
|
148
|
+
const [profileState, setProfileState] = useState({
|
|
149
|
+
status: 'loading',
|
|
150
|
+
path: defaultProfilePath(process.cwd()),
|
|
151
|
+
});
|
|
152
|
+
const [profileWizard, setProfileWizard] = useState();
|
|
153
|
+
const activePage = pages[activePageIndex]?.id ?? 'dashboard';
|
|
154
|
+
const refresh = useCallback(async () => {
|
|
155
|
+
setState((previous) => ({
|
|
156
|
+
status: 'loading',
|
|
157
|
+
...(previous.inventory ? { inventory: previous.inventory } : {}),
|
|
158
|
+
}));
|
|
159
|
+
try {
|
|
160
|
+
const inventory = await buildInventory();
|
|
161
|
+
setState({ status: 'ready', inventory });
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
setState((previous) => ({
|
|
165
|
+
status: 'error',
|
|
166
|
+
...(previous.inventory ? { inventory: previous.inventory } : {}),
|
|
167
|
+
message: error instanceof Error ? error.message : 'Unknown inventory error.',
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
}, []);
|
|
171
|
+
useEffect(() => {
|
|
172
|
+
void refresh();
|
|
173
|
+
}, [refresh]);
|
|
174
|
+
const inventory = state.inventory;
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
if (!inventory) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
void listHistoryRecords(resolveDataRoot(inventory.environment.homeDir)).then(setHistoryRecords);
|
|
180
|
+
}, [inventory]);
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
if (!inventory) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const path = defaultProfilePath(inventory.environment.projectRoot);
|
|
186
|
+
setProfileState({ status: 'loading', path });
|
|
187
|
+
void loadProfile(path)
|
|
188
|
+
.then((profile) => setProfileState({ status: 'loaded', path, profile, diff: diffProfile(profile, inventory) }))
|
|
189
|
+
.catch((caught) => {
|
|
190
|
+
const error = caught;
|
|
191
|
+
setProfileState(error.code === 'ENOENT'
|
|
192
|
+
? { status: 'missing', path }
|
|
193
|
+
: { status: 'error', path, message: caught instanceof Error ? caught.message : 'Unable to load profile.' });
|
|
194
|
+
});
|
|
195
|
+
}, [inventory]);
|
|
196
|
+
const filteredSkills = useMemo(() => {
|
|
197
|
+
if (!inventory) {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
const normalized = query.trim().toLowerCase();
|
|
201
|
+
if (!normalized) {
|
|
202
|
+
return inventory.skills;
|
|
203
|
+
}
|
|
204
|
+
return inventory.skills.filter((skill) => skill.name.toLowerCase().includes(normalized) ||
|
|
205
|
+
skill.description.toLowerCase().includes(normalized));
|
|
206
|
+
}, [inventory, query]);
|
|
207
|
+
const itemCount = activePage === 'skills'
|
|
208
|
+
? filteredSkills.length
|
|
209
|
+
: activePage === 'agents'
|
|
210
|
+
? (inventory?.agents.length ?? 0)
|
|
211
|
+
: activePage === 'doctor'
|
|
212
|
+
? (inventory?.diagnostics.length ?? 0)
|
|
213
|
+
: activePage === 'history'
|
|
214
|
+
? historyRecords.length
|
|
215
|
+
: activePage === 'profiles' && profileState.status === 'loaded'
|
|
216
|
+
? profileState.diff.entries.length
|
|
217
|
+
: 0;
|
|
218
|
+
useEffect(() => {
|
|
219
|
+
setCursor((current) => Math.max(0, Math.min(current, Math.max(0, itemCount - 1))));
|
|
220
|
+
}, [itemCount]);
|
|
221
|
+
useInput((input, key) => {
|
|
222
|
+
if (searchMode) {
|
|
223
|
+
if (key.escape) {
|
|
224
|
+
setQuery('');
|
|
225
|
+
setSearchMode(false);
|
|
226
|
+
}
|
|
227
|
+
else if (key.return) {
|
|
228
|
+
setSearchMode(false);
|
|
229
|
+
}
|
|
230
|
+
else if (key.backspace || key.delete) {
|
|
231
|
+
setQuery((value) => value.slice(0, -1));
|
|
232
|
+
}
|
|
233
|
+
else if (input && !key.ctrl && !key.meta) {
|
|
234
|
+
setQuery((value) => `${value}${input}`);
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (input === 'q') {
|
|
239
|
+
exit();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (input === '/') {
|
|
243
|
+
setSearchMode(true);
|
|
244
|
+
if (activePage !== 'skills') {
|
|
245
|
+
setActivePageIndex(pages.findIndex((page) => page.id === 'skills'));
|
|
246
|
+
setCursor(0);
|
|
247
|
+
}
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (input === 'r') {
|
|
251
|
+
void refresh();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (input === 'i') {
|
|
255
|
+
setWizard({ kind: 'install' });
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if ((input === 'u' || input === 'd') && activePage === 'skills') {
|
|
259
|
+
const selectedSkill = filteredSkills[cursor];
|
|
260
|
+
if (selectedSkill) {
|
|
261
|
+
setWizard({ kind: input === 'u' ? 'update' : 'remove', skill: selectedSkill });
|
|
262
|
+
}
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (input === 'z' && activePage === 'history') {
|
|
266
|
+
const selectedRecord = historyRecords[cursor];
|
|
267
|
+
if (selectedRecord && selectedRecord.status !== 'running' && selectedRecord.status !== 'restored') {
|
|
268
|
+
setRestoreRecord(selectedRecord);
|
|
269
|
+
}
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (input === 'f' && activePage === 'doctor') {
|
|
273
|
+
const selectedDiagnostic = inventory?.diagnostics[cursor];
|
|
274
|
+
if (selectedDiagnostic) {
|
|
275
|
+
setDoctorDiagnostic(selectedDiagnostic);
|
|
276
|
+
}
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (input === 'p' && activePage === 'profiles') {
|
|
280
|
+
if (profileState.status === 'missing') {
|
|
281
|
+
setProfileWizard('export');
|
|
282
|
+
}
|
|
283
|
+
else if (profileState.status === 'loaded') {
|
|
284
|
+
setProfileWizard('apply');
|
|
285
|
+
}
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (key.rightArrow || input === 'l') {
|
|
289
|
+
setActivePageIndex((index) => (index + 1) % pages.length);
|
|
290
|
+
setCursor(0);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (key.leftArrow || input === 'h') {
|
|
294
|
+
setActivePageIndex((index) => (index - 1 + pages.length) % pages.length);
|
|
295
|
+
setCursor(0);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (key.downArrow || input === 'j') {
|
|
299
|
+
setCursor((current) => Math.min(Math.max(0, itemCount - 1), current + 1));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (key.upArrow || input === 'k') {
|
|
303
|
+
setCursor((current) => Math.max(0, current - 1));
|
|
304
|
+
}
|
|
305
|
+
}, { isActive: !wizard && !restoreRecord && !doctorDiagnostic && !profileWizard });
|
|
306
|
+
if (!inventory) {
|
|
307
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "SKILLS CONSOLE" }), state.status === 'error' ? (_jsxs(Text, { color: "red", children: ["Unable to scan skills: ", state.message] })) : (_jsx(Text, { color: "yellow", children: "Scanning local Agent Skills\u2026" })), _jsx(Text, { dimColor: true, children: "q quit" })] }));
|
|
308
|
+
}
|
|
309
|
+
if (wizard) {
|
|
310
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { activePage: activePage, inventory: inventory }), _jsx(Box, { marginTop: 1, children: _jsx(OperationWizard, { request: wizard, inventory: inventory, onClose: () => setWizard(undefined), onInventory: (updatedInventory) => setState({ status: 'ready', inventory: updatedInventory }) }) })] }));
|
|
311
|
+
}
|
|
312
|
+
if (restoreRecord) {
|
|
313
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { activePage: "history", inventory: inventory }), _jsx(Box, { marginTop: 1, children: _jsx(RestoreWizard, { record: restoreRecord, inventory: inventory, onClose: () => setRestoreRecord(undefined), onInventory: (updatedInventory) => setState({ status: 'ready', inventory: updatedInventory }), onRestored: (updatedRecord) => setHistoryRecords((records) => records.map((record) => (record.id === updatedRecord.id ? updatedRecord : record))) }) })] }));
|
|
314
|
+
}
|
|
315
|
+
if (doctorDiagnostic) {
|
|
316
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { activePage: "doctor", inventory: inventory }), _jsx(Box, { marginTop: 1, children: _jsx(DoctorFixWizard, { diagnostic: doctorDiagnostic, inventory: inventory, onClose: () => setDoctorDiagnostic(undefined), onInventory: (updatedInventory) => setState({ status: 'ready', inventory: updatedInventory }), onRecord: (record) => setHistoryRecords((records) => [record, ...records.filter((item) => item.id !== record.id)]) }) })] }));
|
|
317
|
+
}
|
|
318
|
+
if (profileWizard && (profileState.status === 'missing' || profileState.status === 'loaded')) {
|
|
319
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { activePage: "profiles", inventory: inventory }), _jsx(Box, { marginTop: 1, children: _jsx(ProfileWizard, { action: profileWizard, path: profileState.path, inventory: inventory, ...(profileState.status === 'loaded'
|
|
320
|
+
? { profile: profileState.profile, diff: profileState.diff }
|
|
321
|
+
: {}), onClose: () => setProfileWizard(undefined), onInventory: (updatedInventory) => setState({ status: 'ready', inventory: updatedInventory }), onProfile: (profile, profileDiff) => setProfileState({
|
|
322
|
+
status: 'loaded',
|
|
323
|
+
path: profileState.path,
|
|
324
|
+
profile,
|
|
325
|
+
diff: profileDiff,
|
|
326
|
+
}) }) })] }));
|
|
327
|
+
}
|
|
328
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { activePage: activePage, inventory: inventory }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [activePage === 'dashboard' && _jsx(DashboardPage, { inventory: inventory, width: width }), activePage === 'skills' && (_jsx(SkillsPage, { inventory: inventory, skills: filteredSkills, cursor: cursor, width: width })), activePage === 'agents' && (_jsx(AgentsPage, { agents: inventory.agents, cursor: cursor, width: width })), activePage === 'doctor' && (_jsx(DoctorPage, { diagnostics: inventory.diagnostics, cursor: cursor, width: width })), activePage === 'history' && (_jsx(HistoryPage, { records: historyRecords, cursor: cursor, width: width })), activePage === 'profiles' && (_jsx(ProfilesPage, { state: profileState, cursor: cursor, width: width }))] }), _jsx(Footer, { state: state, searchMode: searchMode, query: query })] }));
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACvE,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,KAAK,CAAC;AAEnE,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AAQnE,OAAO,EAAC,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,sBAAsB,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,WAAW,GACZ,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAejD,MAAM,KAAK,GAAuC;IAChD,EAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAC;IACrC,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;IAC/B,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;IAC/B,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;IAC/B,EAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC;IACnC,EAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAC;CAClC,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC;QACvD,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,SAAiB;IAChD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAChF,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,QAAgC;IACrD,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACnF,CAAC;AAED,SAAS,aAAa,CAAI,KAAU,EAAE,MAAc,EAAE,IAAY;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACzF,OAAO,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,MAAM,EAAC,CAAC;AAC7D,CAAC;AAED,SAAS,MAAM,CAAC,EAAC,UAAU,EAAE,SAAS,EAA6C;IACjF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aACrD,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,+BAEhB,EACP,MAAC,IAAI,IAAC,QAAQ,mBACX,IAAI,EACJ,SAAS,CAAC,WAAW,CAAC,KAAK;gCAC1B,CAAC,CAAC,KAAK;gCACP,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,EAC/C,IAAI,YAAG,IAAI,EACX,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,IACvF,EACP,KAAC,MAAM,KAAG,EACV,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,YAC1D,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,SAAS,CAAC,CAAC,CAAC,SAAS,GAC/E,IACH,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,YACrB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,MAAC,IAAI,IAEH,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,EAAE,KACxB,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC5D,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC,EAAE,aAE9B,GAAG,EACH,IAAI,CAAC,KAAK,EACV,GAAG,KAPC,IAAI,CAAC,EAAE,CAQP,CACR,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAoE;IACpG,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,aAChD,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,EAC7B,KAAC,MAAM,KAAG,EACV,KAAC,IAAI,IAAC,IAAI,WAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAClC,KAAK,GACD,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAC,SAAS,EAAE,KAAK,EAAwC;IAC9E,MAAM,EAAC,KAAK,EAAE,WAAW,EAAC,GAAG,SAAS,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,GAAG,EAAE,CAAC;IAE5B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,MAAC,GAAG,IAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aACpE,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAC,MAAM,GAAG,EAC7D,KAAC,IAAI,IAAC,KAAK,EAAC,eAAe,EAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,GAAI,EAC9D,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,GAAI,EACxD,KAAC,IAAI,IAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAC,QAAQ,GAAG,EACnE,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAC,KAAK,GAAG,IACxD,EAEN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,IAAI,IAAC,IAAI,kCAAmB,EAC7B,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,IACrD,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,WAAW,CAAC,WAAW,kBAAS,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,aAAI,GAAG,EACzF,KAAK,CAAC,gBAAgB,sBAClB,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,IAC9C,IACH,EAEN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,IAAI,IAAC,IAAI,gCAAiB,EAC1B,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uDAAyC,CAC7D,CAAC,CAAC,CAAC,CACF,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC9C,MAAC,IAAI,IAAe,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aACpD,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAC9E,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAFvC,IAAI,CAAC,EAAE,CAGX,CACR,CAAC,CACH,IACG,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,GAMN;IACC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAE/D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC/D,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,SAAS,aAC1C,MAAC,IAAI,IAAC,IAAI,8BACD,MAAC,IAAI,IAAC,QAAQ,wBAAG,MAAM,CAAC,MAAM,SAAS,IACzC,EACN,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3B,KAAC,IAAI,IAAC,QAAQ,0DAA2C,CAC1D,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;wBACrC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;wBACjD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBACnC,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,OAAK,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aACjE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IACrC,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,aAAG,MAAM,CAAC,MAAM,SAAS,EAClD,KAAC,IAAI,IAAC,IAAI,EAAE,aAAa,KAAK,MAAM,YACjC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC,GACnF,EACP,MAAC,IAAI,IAAC,QAAQ,mBACX,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SACxF,KAVC,KAAK,CAAC,IAAI,CAWd,CACP,CAAC;oBACJ,CAAC,CAAC,CACH,EACA,MAAM,CAAC,MAAM,GAAG,QAAQ,IAAI,CAC3B,MAAC,IAAI,IAAC,QAAQ,mBACX,MAAM,GAAG,CAAC,OAAG,MAAM,CAAC,MAAM,0CACtB,CACR,IACG,EAEL,QAAQ,IAAI,CACX,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAExB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YACpB,QAAQ,CAAC,IAAI,GACT,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,cAAc,YAAE,QAAQ,CAAC,WAAW,GAAQ,EACvD,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,+BAAgB,EAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IACxB,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,+BAAgB,EAC7B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IACtB,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,+BAAgB,EAC7B,QAAQ,CAAC,aAAa,CAAC,MAAM,IACzB,EACP,MAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,aAC1B,KAAC,IAAI,IAAC,QAAQ,+BAAgB,EAC7B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,qBAAqB,IACpF,EACP,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CACxD,MAAC,IAAI,IAAuB,IAAI,EAAC,iBAAiB,aAChD,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,aACrD,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IACrC,EACP,MAAC,IAAI,IAAC,QAAQ,mBAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACpD,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,2BAAkB,CAAC,CAAC,CAAC,IAAI,KANhF,YAAY,CAAC,EAAE,CAOnB,CACR,CAAC,GACE,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAuD;IAC/F,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAE3B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC/D,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aACvD,KAAC,IAAI,IAAC,IAAI,mCAAoB,EAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;wBACtC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;wBACjD,OAAO,CACL,MAAC,IAAI,OAAoB,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAChF,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EACtE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,OAAE,MAAC,IAAI,IAAC,QAAQ,mBAAE,KAAK,CAAC,KAAK,CAAC,MAAM,cAAc,KAFtE,KAAK,CAAC,EAAE,CAGZ,CACR,CAAC;oBACJ,CAAC,CAAC,IACE,EACL,QAAQ,IAAI,CACX,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACzF,MAAC,IAAI,IAAC,IAAI,WAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,OAAgB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAChE,QAAQ,CAAC,WAAW,cAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,IACpE,EACN,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACzC,KAAC,IAAI,IAAc,QAAQ,kBACxB,MAAM,IADE,MAAM,CAEV,CACR,CAAC,EACF,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7B,KAAC,IAAI,IAAC,QAAQ,6CAA8B,CAC7C,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,MAAC,IAAI,IAAe,IAAI,EAAC,iBAAiB,aACvC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAC3E,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAF3F,IAAI,CAAC,EAAE,CAGX,CACR,CAAC,CACH,GACG,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAA6D;IAC1G,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAE3B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC/D,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aAC7E,MAAC,IAAI,IAAC,IAAI,mCACI,MAAC,IAAI,IAAC,QAAQ,wBAAG,WAAW,CAAC,MAAM,SAAS,IACnD,EACN,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,6CAA+B,CACnD,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;wBACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;wBACjD,OAAO,CACL,MAAC,IAAI,OAAmB,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAC/E,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAC1C,MAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aACtC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAC1E,EACN,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAL5E,IAAI,CAAC,EAAE,CAMX,CACR,CAAC;oBACJ,CAAC,CAAC,CACH,IACG,EACL,QAAQ,IAAI,CACX,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACzF,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAC/C,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAK,QAAQ,CAAC,IAAI,IAC7C,EACP,KAAC,IAAI,cAAE,QAAQ,CAAC,OAAO,GAAQ,EAC9B,QAAQ,CAAC,SAAS,IAAI,CACrB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,8BAAe,EAC5B,QAAQ,CAAC,SAAS,IACd,CACR,EACA,QAAQ,CAAC,IAAI,IAAI,CAChB,MAAC,IAAI,IAAC,IAAI,EAAC,MAAM,aACf,KAAC,IAAI,IAAC,QAAQ,8BAAe,EAC5B,QAAQ,CAAC,IAAI,IACT,CACR,EACD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,oEAA2D,GAC3E,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAA8D;IACxG,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,MAAiC,EAAE,EAAE,CACxD,MAAM,KAAK,WAAW;QACpB,CAAC,CAAE,OAAiB;QACpB,CAAC,CAAC,MAAM,KAAK,QAAQ;YACnB,CAAC,CAAE,KAAe;YAClB,CAAC,CAAC,MAAM,KAAK,UAAU;gBACrB,CAAC,CAAE,MAAgB;gBACnB,CAAC,CAAE,QAAkB,CAAC;IAE9B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC/D,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aAC7E,MAAC,IAAI,IAAC,IAAI,kCACG,MAAC,IAAI,IAAC,QAAQ,wBAAG,OAAO,CAAC,MAAM,SAAS,IAC9C,EACN,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,IAAC,QAAQ,iEAAkD,CACjE,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;wBACtC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;wBACjD,OAAO,CACL,MAAC,IAAI,OAAqB,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aACjF,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAW,EACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAC1D,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,GAAQ,KAJ1D,MAAM,CAAC,EAAE,CAKb,CACR,CAAC;oBACJ,CAAC,CAAC,CACH,IACG,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACzF,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,aAC3C,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,cAAK,QAAQ,CAAC,IAAI,IAC3C,EACP,MAAC,IAAI,IAAC,IAAI,EAAC,MAAM,aACf,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,QAAQ,CAAC,OAAO,IACZ,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,QAAQ,CAAC,KAAK,IAAI,OAAO,IACrB,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,QAAQ,CAAC,QAAQ,IAAI,KAAK,IACtB,EACP,MAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,aAC1B,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC9B,QAAQ,CAAC,UAAU,IACf,EACN,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CACjE,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,mDAA0C,CAC/D,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAyD;IAClG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kDAAoC,GAAM,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACtC,KAAC,IAAI,IAAC,IAAI,yCAA0B,EACpC,MAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,aAAC,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAAC,KAAK,CAAC,IAAI,IAAQ,EAC/E,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,qEAA4D,IAC7E,CACP,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACtC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,KAAK,wCAA+B,EACrD,KAAC,IAAI,cAAE,KAAK,CAAC,OAAO,GAAQ,IACxB,CACP,CAAC;IACJ,CAAC;IACD,MAAM,EAAC,IAAI,EAAE,OAAO,EAAC,GAAG,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,MAAkC,EAAE,EAAE,CACnD,MAAM,KAAK,WAAW;QACpB,CAAC,CAAE,OAAiB;QACpB,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,gBAAgB;YACjD,CAAC,CAAE,QAAkB;YACrB,CAAC,CAAE,KAAe,CAAC;IACzB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,YAAE,OAAO,CAAC,IAAI,GAAQ,EAChD,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,gBAAO,IAAI,CAAC,OAAO,CAAC,SAAS,sBAAa,IAAI,CAAC,OAAO,CAAC,OAAO,sBAAa,GAAG,EACjF,IAAI,CAAC,OAAO,CAAC,cAAc,oBAAW,IAAI,CAAC,OAAO,CAAC,KAAK,IACpD,EACP,KAAC,MAAM,KAAG,EACV,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,YAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,GAC1D,IACH,EACN,MAAC,GAAG,IAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,aAChE,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,4DAA6C,CAAC,CAAC,CAAC,IAAI,EAC9F,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gCACtC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;gCACjD,OAAO,CACL,MAAC,IAAI,OAAoB,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAChF,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAE,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAW,EACjF,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAG,KAAK,CAAC,SAAS,KAFjC,KAAK,CAAC,EAAE,CAGZ,CACR,CAAC;4BACJ,CAAC,CAAC,IACE,EACL,QAAQ,CAAC,CAAC,CAAC,CACV,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACzF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,GAAQ,EAChF,MAAC,IAAI,eAAE,QAAQ,CAAC,SAAS,cAAK,QAAQ,CAAC,KAAK,IAAQ,EACpD,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,YAAE,QAAQ,CAAC,OAAO,GAAQ,EAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAC3B,MAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,aAAC,KAAC,IAAI,IAAC,QAAQ,8BAAe,EAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAQ,CAC5F,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,2DAAkD,IACnE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,EACd,KAAK,EACL,UAAU,EACV,KAAK,GAKN;IACC,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aAC3B,UAAU,CAAC,CAAC,CAAC,CACZ,8BACE,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,KAAK,IAAQ,EACnC,KAAC,IAAI,IAAC,OAAO,wBAAS,EACtB,KAAC,IAAI,IAAC,QAAQ,oDAAgC,IAC7C,CACJ,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,OAAO,qCAAY,EACzB,KAAC,IAAI,IAAC,QAAQ,6BAAc,EAC5B,KAAC,IAAI,IAAC,OAAO,qCAAY,EACzB,KAAC,IAAI,IAAC,QAAQ,6BAAc,EAC5B,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,+BAAgB,EAC9B,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC/B,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC/B,KAAC,IAAI,IAAC,OAAO,4BAAa,EAC1B,KAAC,IAAI,IAAC,QAAQ,sCAAuB,EACrC,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC/B,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,mCAAoB,EAClC,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,gCAAiB,EAC/B,KAAC,IAAI,IAAC,OAAO,0BAAW,EACxB,KAAC,IAAI,IAAC,QAAQ,4BAAa,IACtB,CACR,EACD,KAAC,MAAM,KAAG,EACT,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,+BAAiB,EACnE,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,4BAAmB,EAChE,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,MAAC,IAAI,IAAC,QAAQ,wBAAG,sBAAsB,IAAQ,IACxE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,EAAC,MAAM,EAAC,GAAG,SAAS,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;IACpC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiB,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAC;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiB,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,EAAmB,CAAC;IACtE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,EAAc,CAAC;IACvE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAiB;QAC/D,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;KACxC,CAAC,CAAC;IACH,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACzE,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,WAAW,CAAC;IAE7D,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,SAAS;YACjB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;YACzC,QAAQ,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACtB,MAAM,EAAE,OAAO;gBACf,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;aAC7E,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,KAAK,kBAAkB,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnE,eAAe,CAAC,EAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC3C,KAAK,WAAW,CAAC,IAAI,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,EAAC,CAAC,CAAC;aAC5G,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,MAA+B,CAAC;YAC9C,eAAe,CACb,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACrB,CAAC,CAAC,EAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC;gBAC3B,CAAC,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,EAAC,CAC3G,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAChB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAC5B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC7C,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACvD,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvB,MAAM,SAAS,GACb,UAAU,KAAK,QAAQ;QACrB,CAAC,CAAC,cAAc,CAAC,MAAM;QACvB,CAAC,CAAC,UAAU,KAAK,QAAQ;YACvB,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,CAAC,CAAC,UAAU,KAAK,QAAQ;gBACvB,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtC,CAAC,CAAC,UAAU,KAAK,SAAS;oBACxB,CAAC,CAAC,cAAc,CAAC,MAAM;oBACvB,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ;wBAC7D,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;wBACtC,CAAC,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACb,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtB,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3C,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5B,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACpE,SAAS,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,KAAK,OAAO,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,SAAS,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,aAAa,EAAE,CAAC;gBAClB,SAAS,CAAC,EAAC,IAAI,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClG,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACnC,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,kBAAkB,GAAG,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1D,IAAI,kBAAkB,EAAE,CAAC;gBACvB,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC/C,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACtC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5C,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACpC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1D,SAAS,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,SAAS,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACjC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,EAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAC,CAAC,CAAC;IAEjF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,+BAEhB,EACN,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAC1B,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wCAAyB,KAAK,CAAC,OAAO,IAAQ,CAChE,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kDAAoC,CACzD,EACD,KAAC,IAAI,IAAC,QAAQ,6BAAc,IACxB,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAI,EACxD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,eAAe,IACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EACnC,WAAW,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,CAAC,GAC3F,GACE,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAE,SAAS,GAAI,EACrD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,aAAa,IACZ,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAC1C,WAAW,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,CAAC,EAC3F,UAAU,EAAE,CAAC,aAAa,EAAE,EAAE,CAC5B,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACnF,GAEH,GACE,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,GAAI,EACpD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,eAAe,IACd,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAC7C,WAAW,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,CAAC,EAC3F,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CACnB,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAE9F,GACE,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC7F,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAE,SAAS,GAAI,EACtD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,aAAa,IACZ,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,YAAY,CAAC,IAAI,EACvB,SAAS,EAAE,SAAS,KAChB,CAAC,YAAY,CAAC,MAAM,KAAK,QAAQ;4BACnC,CAAC,CAAC,EAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAC;4BAC1D,CAAC,CAAC,EAAE,CAAC,EACP,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAC1C,WAAW,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,CAAC,EAC3F,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAClC,eAAe,CAAC;4BACd,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,OAAO;4BACP,IAAI,EAAE,WAAW;yBAClB,CAAC,GAEJ,GACE,IACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAI,EACxD,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACtC,UAAU,KAAK,WAAW,IAAI,KAAC,aAAa,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAI,EACnF,UAAU,KAAK,QAAQ,IAAI,CAC1B,KAAC,UAAU,IACT,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACZ,CACH,EACA,UAAU,KAAK,QAAQ,IAAI,CAC1B,KAAC,UAAU,IAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CACvE,EACA,UAAU,KAAK,QAAQ,IAAI,CAC1B,KAAC,UAAU,IAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CACjF,EACA,UAAU,KAAK,SAAS,IAAI,CAC3B,KAAC,WAAW,IAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CACvE,EACA,UAAU,KAAK,UAAU,IAAI,CAC5B,KAAC,YAAY,IAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAI,CACpE,IACG,EACN,KAAC,MAAM,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAI,IAC1D,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { OperationRecord } from '../domain/operations.js';
|
|
3
|
+
import type { Diagnostic, Inventory } from '../domain/types.js';
|
|
4
|
+
interface DoctorFixWizardProps {
|
|
5
|
+
diagnostic: Diagnostic;
|
|
6
|
+
inventory: Inventory;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onInventory: (inventory: Inventory) => void;
|
|
9
|
+
onRecord: (record: OperationRecord) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function DoctorFixWizard({ diagnostic, inventory, onClose, onInventory, onRecord, }: DoctorFixWizardProps): React.JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { buildDoctorFixPlan, executeDoctorFix, } from '../application/doctor-fixes.js';
|
|
5
|
+
import { resolveDataRoot } from '../platform/data-paths.js';
|
|
6
|
+
export function DoctorFixWizard({ diagnostic, inventory, onClose, onInventory, onRecord, }) {
|
|
7
|
+
const [state, setState] = useState('loading');
|
|
8
|
+
const [plan, setPlan] = useState();
|
|
9
|
+
const [message, setMessage] = useState('');
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
void buildDoctorFixPlan(diagnostic, inventory).then((resolved) => {
|
|
12
|
+
if (resolved) {
|
|
13
|
+
setPlan(resolved);
|
|
14
|
+
setState('confirm');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
setMessage('No deterministic, reversible automatic fix is available for this diagnostic.');
|
|
18
|
+
setState('unsupported');
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}, [diagnostic, inventory]);
|
|
22
|
+
const execute = async () => {
|
|
23
|
+
if (!plan) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setState('fixing');
|
|
27
|
+
try {
|
|
28
|
+
const result = await executeDoctorFix(plan, inventory, resolveDataRoot(inventory.environment.homeDir));
|
|
29
|
+
onInventory(result.inventory);
|
|
30
|
+
onRecord(result.record);
|
|
31
|
+
setMessage(result.message);
|
|
32
|
+
setState('done');
|
|
33
|
+
}
|
|
34
|
+
catch (caught) {
|
|
35
|
+
setMessage(caught instanceof Error ? caught.message : 'Doctor repair failed.');
|
|
36
|
+
setState('error');
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
useInput((input, key) => {
|
|
40
|
+
if (state === 'loading' || state === 'fixing') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (state === 'confirm') {
|
|
44
|
+
if (key.escape) {
|
|
45
|
+
onClose();
|
|
46
|
+
}
|
|
47
|
+
else if (input.toLowerCase() === 'y') {
|
|
48
|
+
void execute();
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (key.return || key.escape || input === 'q') {
|
|
53
|
+
onClose();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 1, children: _jsxs(Box, { borderStyle: "round", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "yellow", children: "Doctor repair" }), _jsx(Text, { children: diagnostic.message }), state === 'loading' ? _jsx(Text, { color: "yellow", children: "Checking repair safety\u2026" }) : null, state === 'confirm' && plan ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { children: plan.description }), _jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { dimColor: true, children: "From " }), plan.sourcePath] }), _jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { dimColor: true, children: "To " }), plan.targetPath] }), _jsx(Text, { color: "green", children: "A snapshot will be created first." }), _jsx(Text, { bold: true, children: "Press y to repair \u00B7 esc cancel" })] })) : null, state === 'fixing' ? _jsx(Text, { color: "yellow", children: "Creating snapshot, repairing, and verifying\u2026" }) : null, state === 'done' ? _jsx(Text, { color: "green", children: message }) : null, state === 'unsupported' ? _jsx(Text, { dimColor: true, children: message }) : null, state === 'error' ? _jsx(Text, { color: "red", children: message }) : null, ['done', 'unsupported', 'error'].includes(state) ? _jsx(Text, { dimColor: true, children: "enter close" }) : null] }) }));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=DoctorFixWizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DoctorFixWizard.js","sourceRoot":"","sources":["../../src/ui/DoctorFixWizard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Inventory, SkillGroup } from '../domain/types.js';
|
|
3
|
+
export type WizardRequest = {
|
|
4
|
+
kind: 'install';
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'update';
|
|
7
|
+
skill: SkillGroup;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'remove';
|
|
10
|
+
skill: SkillGroup;
|
|
11
|
+
};
|
|
12
|
+
interface OperationWizardProps {
|
|
13
|
+
request: WizardRequest;
|
|
14
|
+
inventory: Inventory;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
onInventory: (inventory: Inventory) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function OperationWizard({ request, inventory, onClose, onInventory, }: OperationWizardProps): React.JSX.Element;
|
|
19
|
+
export {};
|