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.
Files changed (101) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +130 -0
  4. package/dist/adapters/filesystem/agent-registry.d.ts +5 -0
  5. package/dist/adapters/filesystem/agent-registry.js +236 -0
  6. package/dist/adapters/filesystem/agent-registry.js.map +1 -0
  7. package/dist/adapters/filesystem/frontmatter.d.ts +2 -0
  8. package/dist/adapters/filesystem/frontmatter.js +73 -0
  9. package/dist/adapters/filesystem/frontmatter.js.map +1 -0
  10. package/dist/adapters/filesystem/skill-scanner.d.ts +8 -0
  11. package/dist/adapters/filesystem/skill-scanner.js +157 -0
  12. package/dist/adapters/filesystem/skill-scanner.js.map +1 -0
  13. package/dist/adapters/filesystem/skills-lock.d.ts +2 -0
  14. package/dist/adapters/filesystem/skills-lock.js +44 -0
  15. package/dist/adapters/filesystem/skills-lock.js.map +1 -0
  16. package/dist/adapters/skills-cli/command-builder.d.ts +7 -0
  17. package/dist/adapters/skills-cli/command-builder.js +144 -0
  18. package/dist/adapters/skills-cli/command-builder.js.map +1 -0
  19. package/dist/adapters/skills-cli/executor.d.ts +20 -0
  20. package/dist/adapters/skills-cli/executor.js +51 -0
  21. package/dist/adapters/skills-cli/executor.js.map +1 -0
  22. package/dist/adapters/skills-cli/source-parser.d.ts +3 -0
  23. package/dist/adapters/skills-cli/source-parser.js +38 -0
  24. package/dist/adapters/skills-cli/source-parser.js.map +1 -0
  25. package/dist/adapters/skills-cli/types.d.ts +56 -0
  26. package/dist/adapters/skills-cli/types.js +2 -0
  27. package/dist/adapters/skills-cli/types.js.map +1 -0
  28. package/dist/application/backup-manager.d.ts +7 -0
  29. package/dist/application/backup-manager.js +164 -0
  30. package/dist/application/backup-manager.js.map +1 -0
  31. package/dist/application/build-inventory.d.ts +5 -0
  32. package/dist/application/build-inventory.js +103 -0
  33. package/dist/application/build-inventory.js.map +1 -0
  34. package/dist/application/doctor-fixes.d.ts +21 -0
  35. package/dist/application/doctor-fixes.js +103 -0
  36. package/dist/application/doctor-fixes.js.map +1 -0
  37. package/dist/application/history-store.d.ts +5 -0
  38. package/dist/application/history-store.js +42 -0
  39. package/dist/application/history-store.js.map +1 -0
  40. package/dist/application/profile-apply.d.ts +22 -0
  41. package/dist/application/profile-apply.js +69 -0
  42. package/dist/application/profile-apply.js.map +1 -0
  43. package/dist/application/profile-diff.d.ts +3 -0
  44. package/dist/application/profile-diff.js +105 -0
  45. package/dist/application/profile-diff.js.map +1 -0
  46. package/dist/application/profile-store.d.ts +9 -0
  47. package/dist/application/profile-store.js +109 -0
  48. package/dist/application/profile-store.js.map +1 -0
  49. package/dist/application/restore-operation.d.ts +8 -0
  50. package/dist/application/restore-operation.js +27 -0
  51. package/dist/application/restore-operation.js.map +1 -0
  52. package/dist/application/skill-operations.d.ts +32 -0
  53. package/dist/application/skill-operations.js +129 -0
  54. package/dist/application/skill-operations.js.map +1 -0
  55. package/dist/cli-commands.d.ts +8 -0
  56. package/dist/cli-commands.js +111 -0
  57. package/dist/cli-commands.js.map +1 -0
  58. package/dist/cli.d.ts +2 -0
  59. package/dist/cli.js +15 -0
  60. package/dist/cli.js.map +1 -0
  61. package/dist/domain/operations.d.ts +50 -0
  62. package/dist/domain/operations.js +25 -0
  63. package/dist/domain/operations.js.map +1 -0
  64. package/dist/domain/profile.d.ts +43 -0
  65. package/dist/domain/profile.js +2 -0
  66. package/dist/domain/profile.js.map +1 -0
  67. package/dist/domain/types.d.ts +98 -0
  68. package/dist/domain/types.js +2 -0
  69. package/dist/domain/types.js.map +1 -0
  70. package/dist/platform/data-paths.d.ts +3 -0
  71. package/dist/platform/data-paths.js +17 -0
  72. package/dist/platform/data-paths.js.map +1 -0
  73. package/dist/platform/environment.d.ts +6 -0
  74. package/dist/platform/environment.js +71 -0
  75. package/dist/platform/environment.js.map +1 -0
  76. package/dist/platform/redaction.d.ts +1 -0
  77. package/dist/platform/redaction.js +7 -0
  78. package/dist/platform/redaction.js.map +1 -0
  79. package/dist/ui/App.d.ts +2 -0
  80. package/dist/ui/App.js +330 -0
  81. package/dist/ui/App.js.map +1 -0
  82. package/dist/ui/DoctorFixWizard.d.ts +12 -0
  83. package/dist/ui/DoctorFixWizard.js +58 -0
  84. package/dist/ui/DoctorFixWizard.js.map +1 -0
  85. package/dist/ui/OperationWizard.d.ts +19 -0
  86. package/dist/ui/OperationWizard.js +301 -0
  87. package/dist/ui/OperationWizard.js.map +1 -0
  88. package/dist/ui/ProfileWizard.d.ts +15 -0
  89. package/dist/ui/ProfileWizard.js +68 -0
  90. package/dist/ui/ProfileWizard.js.map +1 -0
  91. package/dist/ui/RestoreWizard.d.ts +12 -0
  92. package/dist/ui/RestoreWizard.js +42 -0
  93. package/dist/ui/RestoreWizard.js.map +1 -0
  94. package/dist/version.d.ts +1 -0
  95. package/dist/version.js +2 -0
  96. package/dist/version.js.map +1 -0
  97. package/docs/ARCHITECTURE.md +145 -0
  98. package/docs/OPERATIONS.md +200 -0
  99. package/docs/PROFILES.md +83 -0
  100. package/examples/skills-profile.json +21 -0
  101. 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":"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"}
@@ -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 {};