-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathCommands.tsx
More file actions
167 lines (160 loc) · 5.98 KB
/
Commands.tsx
File metadata and controls
167 lines (160 loc) · 5.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import React, { useState } from 'react';
interface CommandGroup {
name: string;
commands: Array<{ cmd: string; desc: string }>;
}
const COMMAND_GROUPS: CommandGroup[] = [
{
name: 'Start',
commands: [
{ cmd: '', desc: 'Launch interactive TUI' },
{ cmd: 'install <repo>', desc: 'Install from GitHub' },
{ cmd: 'add <repo>', desc: 'Alias for install' },
{ cmd: 'recommend', desc: 'Smart suggestions' },
{ cmd: 'tree', desc: 'Browse skill taxonomy' },
{ cmd: 'marketplace', desc: 'Browse skills' },
],
},
{
name: 'Manage',
commands: [
{ cmd: 'list', desc: 'View installed skills' },
{ cmd: 'sync', desc: 'Deploy to all agents' },
{ cmd: 'translate --to <agent>', desc: 'Convert formats' },
{ cmd: 'update', desc: 'Update all skills' },
{ cmd: 'remove <skill>', desc: 'Remove a skill' },
{ cmd: 'status', desc: 'Show skill status' },
],
},
{
name: 'Mesh',
commands: [
{ cmd: 'mesh init', desc: 'Initialize network' },
{ cmd: 'mesh discover', desc: 'Find hosts on LAN' },
{ cmd: 'mesh add <host>', desc: 'Add a host' },
{ cmd: 'mesh security init', desc: 'Setup encryption' },
{ cmd: 'mesh peer trust', desc: 'Trust a peer' },
{ cmd: 'mesh health', desc: 'Check host health' },
],
},
{
name: 'Message',
commands: [
{ cmd: 'message send', desc: 'Send to agent' },
{ cmd: 'message inbox', desc: 'View inbox' },
{ cmd: 'message read <id>', desc: 'Read message' },
{ cmd: 'message reply <id>', desc: 'Reply to message' },
{ cmd: 'message archive', desc: 'Archive messages' },
{ cmd: 'message sent', desc: 'View sent' },
],
},
{
name: 'Memory',
commands: [
{ cmd: 'memory status', desc: 'View memory status' },
{ cmd: 'memory search <q>', desc: 'Search learnings' },
{ cmd: 'memory compress', desc: 'Compress observations' },
{ cmd: 'memory export', desc: 'Export as skill' },
{ cmd: 'memory reinforce', desc: 'Boost memory' },
{ cmd: 'memory --global', desc: 'Global memory' },
],
},
{
name: 'Team',
commands: [
{ cmd: 'manifest init', desc: 'Create .skills file' },
{ cmd: 'team init', desc: 'Initialize team' },
{ cmd: 'team share', desc: 'Share via Git' },
{ cmd: 'publish', desc: 'Submit to marketplace' },
{ cmd: 'cicd init', desc: 'CI/CD templates' },
{ cmd: 'team sync', desc: 'Sync team skills' },
],
},
{
name: 'Server',
commands: [
{ cmd: 'serve', desc: 'Start REST API' },
{ cmd: 'serve --port 8080', desc: 'Custom port' },
{ cmd: 'serve --host localhost', desc: 'Bind host' },
{ cmd: 'serve --cors "*"', desc: 'Set CORS origin' },
{ cmd: 'serve --cache-ttl 3600000', desc: 'Cache TTL' },
],
},
{
name: 'Security',
commands: [
{ cmd: 'scan <path>', desc: 'Security scan' },
{ cmd: 'scan --format sarif', desc: 'SARIF output' },
{ cmd: 'scan --fail-on high', desc: 'CI gate' },
{ cmd: 'install --no-scan', desc: 'Skip scan' },
{ cmd: 'audit log', desc: 'View audit logs' },
{ cmd: 'validate', desc: 'Validate format' },
],
},
{
name: 'Advanced',
commands: [
{ cmd: 'primer', desc: 'Generate CLAUDE.md' },
{ cmd: 'agent translate', desc: 'Batch convert' },
{ cmd: 'command generate', desc: 'Create /commands' },
{ cmd: 'context init', desc: 'Project context' },
{ cmd: 'workflow run', desc: 'Run workflow' },
{ cmd: 'test', desc: 'Test skills' },
],
},
];
export function Commands(): React.ReactElement {
const [activeGroup, setActiveGroup] = useState(0);
const group = COMMAND_GROUPS[activeGroup];
return (
<section className="py-12 border-b border-zinc-800">
<div className="mx-auto max-w-5xl px-4 sm:px-6 lg:px-8">
<div className="text-center mb-8">
<h2 className="text-xl font-bold text-white mb-2 font-mono">50+ Commands</h2>
<p className="text-zinc-500 font-mono text-sm">
Everything you need from the terminal.
</p>
</div>
<div className="flex justify-center gap-1.5 sm:gap-2 mb-4 sm:mb-6 flex-wrap">
{COMMAND_GROUPS.map((g, i) => {
const isActive = i === activeGroup;
const buttonClass = isActive
? 'border-white text-white bg-zinc-900'
: 'border-zinc-800 text-zinc-500 hover:border-zinc-600 hover:text-zinc-300';
return (
<button
key={g.name}
onClick={() => setActiveGroup(i)}
className={`px-2 sm:px-3 py-1 sm:py-1.5 text-[10px] sm:text-xs font-mono border transition-colors ${buttonClass}`}
>
{g.name}
</button>
);
})}
</div>
<div className="border border-zinc-800 bg-black/50 p-3 sm:p-4 font-mono text-[10px] sm:text-xs">
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-1 sm:gap-2">
{group.commands.map((c) => (
<div
key={c.cmd || 'tui'}
className="flex items-center gap-2 p-2 hover:bg-zinc-900/50 transition-colors rounded group"
>
<span className="text-zinc-700 group-hover:text-zinc-500">$</span>
<code className="text-white text-[10px] sm:text-xs whitespace-nowrap">
{c.cmd ? `skillkit ${c.cmd}` : 'npx skillkit@latest'}
</code>
<span className="text-zinc-700 ml-auto hidden sm:inline">→</span>
<span className="text-zinc-500 text-[9px] sm:text-[11px] hidden sm:inline">{c.desc}</span>
</div>
))}
</div>
</div>
<div className="mt-3 sm:mt-4 text-center">
<span className="text-zinc-600 text-[10px] sm:text-xs font-mono">
Run <span className="text-zinc-400">skillkit --help</span> for all commands
</span>
</div>
</div>
</section>
);
}