skillshield 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +400 -0
- package/dist/channels/discord.d.ts +18 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +275 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/index.d.ts +67 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +127 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/slack.d.ts +20 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +296 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/telegram.d.ts +20 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +223 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +25 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +187 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/cli/commands/badge.d.ts +11 -0
- package/dist/cli/commands/badge.d.ts.map +1 -0
- package/dist/cli/commands/badge.js +98 -0
- package/dist/cli/commands/badge.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +140 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/deploy.d.ts +3 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deploy.js +56 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +99 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +3 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +90 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +76 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +160 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +3 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +133 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +56 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +70 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config.d.ts +167 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +398 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/parser.d.ts +34 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +462 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/runtime.d.ts +68 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +560 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/types.d.ts +525 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +44 -0
- package/dist/core/types.js.map +1 -0
- package/dist/guard/index.d.ts +57 -0
- package/dist/guard/index.d.ts.map +1 -0
- package/dist/guard/index.js +238 -0
- package/dist/guard/index.js.map +1 -0
- package/dist/guard/patterns.d.ts +21 -0
- package/dist/guard/patterns.d.ts.map +1 -0
- package/dist/guard/patterns.js +797 -0
- package/dist/guard/patterns.js.map +1 -0
- package/dist/hub/index.d.ts +44 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +144 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/registry.d.ts +52 -0
- package/dist/hub/registry.d.ts.map +1 -0
- package/dist/hub/registry.js +192 -0
- package/dist/hub/registry.js.map +1 -0
- package/dist/i18n/index.d.ts +19 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +92 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +110 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +123 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/es.d.ts +110 -0
- package/dist/i18n/locales/es.d.ts.map +1 -0
- package/dist/i18n/locales/es.js +123 -0
- package/dist/i18n/locales/es.js.map +1 -0
- package/dist/i18n/locales/pt.d.ts +110 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -0
- package/dist/i18n/locales/pt.js +123 -0
- package/dist/i18n/locales/pt.js.map +1 -0
- package/dist/i18n/locales/zh.d.ts +110 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -0
- package/dist/i18n/locales/zh.js +123 -0
- package/dist/i18n/locales/zh.js.map +1 -0
- package/dist/index.d.ts +168 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +275 -0
- package/dist/index.js.map +1 -0
- package/dist/router/index.d.ts +89 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +292 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/providers.d.ts +48 -0
- package/dist/router/providers.d.ts.map +1 -0
- package/dist/router/providers.js +733 -0
- package/dist/router/providers.js.map +1 -0
- package/dist/runtime/executor.d.ts +96 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +389 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/sandbox/index.d.ts +52 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +248 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/security/skillguard.d.ts +25 -0
- package/dist/security/skillguard.d.ts.map +1 -0
- package/dist/security/skillguard.js +137 -0
- package/dist/security/skillguard.js.map +1 -0
- package/dist/tools/index.d.ts +55 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +276 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/web-engine.d.ts +158 -0
- package/dist/tools/web-engine.d.ts.map +1 -0
- package/dist/tools/web-engine.js +802 -0
- package/dist/tools/web-engine.js.map +1 -0
- package/dist/tools/web-tools.d.ts +173 -0
- package/dist/tools/web-tools.d.ts.map +1 -0
- package/dist/tools/web-tools.js +251 -0
- package/dist/tools/web-tools.js.map +1 -0
- package/dist/utils/errors.d.ts +44 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +130 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +28 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +121 -0
- package/dist/utils/logger.js.map +1 -0
- package/examples/basic-usage.ts +276 -0
- package/examples/code-reviewer.skill.md +83 -0
- package/examples/creative-writer.skill.md +80 -0
- package/examples/data-analyzer.skill.md +61 -0
- package/examples/hello-world.skill.md +36 -0
- package/examples/sample-skill.md +156 -0
- package/examples/summarizer.skill.md +62 -0
- package/examples/translator.skill.md +45 -0
- package/package.json +110 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { BaseChannelAdapter } from './index.js';
|
|
2
|
+
import { ChannelError } from '../utils/errors.js';
|
|
3
|
+
import { nanoid } from 'nanoid';
|
|
4
|
+
export class WhatsAppAdapter extends BaseChannelAdapter {
|
|
5
|
+
constructor(sessionName = 'skillkit-default') {
|
|
6
|
+
super();
|
|
7
|
+
this.name = 'whatsapp';
|
|
8
|
+
this.sessions = new Map();
|
|
9
|
+
this.baiileysClient = null;
|
|
10
|
+
this.sessionName = sessionName;
|
|
11
|
+
}
|
|
12
|
+
async connect() {
|
|
13
|
+
try {
|
|
14
|
+
// Try to load Baileys dynamically
|
|
15
|
+
let baileys;
|
|
16
|
+
try {
|
|
17
|
+
baileys = await import('@whiskeysockets/baileys');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new ChannelError('Baileys not installed. Install with: npm install Baileys', { adapter: 'whatsapp' });
|
|
21
|
+
}
|
|
22
|
+
const { default: makeWASocket, useMultiFileAuthState, DisconnectReason } = baileys;
|
|
23
|
+
// Initialize authentication
|
|
24
|
+
const { state, saveCreds } = await useMultiFileAuthState(this.sessionName);
|
|
25
|
+
// Create socket
|
|
26
|
+
this.baiileysClient = makeWASocket({
|
|
27
|
+
auth: state,
|
|
28
|
+
printQRInTerminal: true,
|
|
29
|
+
syncFullHistory: false,
|
|
30
|
+
});
|
|
31
|
+
// Handle QR code
|
|
32
|
+
this.baiileysClient.ev.on('connection.update', (update) => {
|
|
33
|
+
const { connection, lastDisconnect, qr } = update;
|
|
34
|
+
if (qr) {
|
|
35
|
+
this.qrCode = qr;
|
|
36
|
+
this.logger.info('Scan QR code with WhatsApp to authenticate');
|
|
37
|
+
}
|
|
38
|
+
if (connection === 'close') {
|
|
39
|
+
const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut;
|
|
40
|
+
if (shouldReconnect) {
|
|
41
|
+
this.logger.info('Reconnecting...');
|
|
42
|
+
this.connect().catch(() => { });
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.logger.info('WhatsApp disconnected');
|
|
46
|
+
this.connected = false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (connection === 'open') {
|
|
50
|
+
this.connected = true;
|
|
51
|
+
this.logger.info('WhatsApp connected');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// Handle incoming messages
|
|
55
|
+
this.baiileysClient.ev.on('messages.upsert', async (m) => {
|
|
56
|
+
const msg = m.messages[0];
|
|
57
|
+
if (!msg.message || msg.key.fromMe)
|
|
58
|
+
return;
|
|
59
|
+
const chatId = msg.key.remoteJid || '';
|
|
60
|
+
const sender = msg.key.participant || chatId;
|
|
61
|
+
let content = '';
|
|
62
|
+
if (msg.message.conversation) {
|
|
63
|
+
content = msg.message.conversation;
|
|
64
|
+
}
|
|
65
|
+
else if (msg.message.extendedTextMessage) {
|
|
66
|
+
content = msg.message.extendedTextMessage.text;
|
|
67
|
+
}
|
|
68
|
+
else if (msg.message.imageMessage) {
|
|
69
|
+
content = msg.message.imageMessage.caption || '[Image]';
|
|
70
|
+
}
|
|
71
|
+
else if (msg.message.documentMessage) {
|
|
72
|
+
content = `[Document: ${msg.message.documentMessage.fileName}]`;
|
|
73
|
+
}
|
|
74
|
+
const message = {
|
|
75
|
+
id: msg.key.id || this.generateMessageId(),
|
|
76
|
+
content,
|
|
77
|
+
sender,
|
|
78
|
+
timestamp: new Date(parseInt(msg.messageTimestamp) * 1000),
|
|
79
|
+
metadata: {
|
|
80
|
+
chatId,
|
|
81
|
+
messageKey: msg.key,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
// Handle attachments
|
|
85
|
+
if (msg.message.imageMessage) {
|
|
86
|
+
message.attachments = [
|
|
87
|
+
{
|
|
88
|
+
type: 'image',
|
|
89
|
+
url: msg.message.imageMessage.url,
|
|
90
|
+
name: 'image.jpg',
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
else if (msg.message.documentMessage) {
|
|
95
|
+
message.attachments = [
|
|
96
|
+
{
|
|
97
|
+
type: 'document',
|
|
98
|
+
url: msg.message.documentMessage.url,
|
|
99
|
+
name: msg.message.documentMessage.fileName,
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
await this.handleMessage(message);
|
|
104
|
+
});
|
|
105
|
+
// Save credentials when updated
|
|
106
|
+
this.baiileysClient.ev.on('creds.update', saveCreds);
|
|
107
|
+
// Mark as connected after setup
|
|
108
|
+
this.connected = true;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
throw new ChannelError(`Failed to connect WhatsApp: ${String(error)}`, { error });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async disconnect() {
|
|
115
|
+
try {
|
|
116
|
+
if (this.baiileysClient) {
|
|
117
|
+
await this.baiileysClient.logout();
|
|
118
|
+
this.baiileysClient = null;
|
|
119
|
+
}
|
|
120
|
+
this.connected = false;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
throw new ChannelError(`Failed to disconnect WhatsApp: ${String(error)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async sendMessage(message) {
|
|
127
|
+
if (!this.baiileysClient) {
|
|
128
|
+
throw new ChannelError('WhatsApp not connected');
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
let content = message.content;
|
|
132
|
+
// Handle code formatting
|
|
133
|
+
if (message.formatting?.code) {
|
|
134
|
+
content = `\`\`\`\n${content}\n\`\`\``;
|
|
135
|
+
}
|
|
136
|
+
// Send text message
|
|
137
|
+
await this.baiileysClient.sendMessage(message.metadata?.chatId || '', {
|
|
138
|
+
text: content,
|
|
139
|
+
});
|
|
140
|
+
// Send attachments if any
|
|
141
|
+
if (message.attachments) {
|
|
142
|
+
for (const attachment of message.attachments) {
|
|
143
|
+
if (attachment.type === 'image' && attachment.data) {
|
|
144
|
+
await this.baiileysClient.sendMessage(message.metadata?.chatId || '', {
|
|
145
|
+
image: attachment.data,
|
|
146
|
+
caption: attachment.name,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
else if (attachment.type === 'document' && attachment.data) {
|
|
150
|
+
await this.baiileysClient.sendMessage(message.metadata?.chatId || '', {
|
|
151
|
+
document: attachment.data,
|
|
152
|
+
fileName: attachment.name,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw new ChannelError(`Failed to send WhatsApp message: ${String(error)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async createSession() {
|
|
163
|
+
const sessionId = nanoid();
|
|
164
|
+
const session = {
|
|
165
|
+
sessionId,
|
|
166
|
+
isAuthenticated: false,
|
|
167
|
+
};
|
|
168
|
+
this.sessions.set(sessionId, session);
|
|
169
|
+
return sessionId;
|
|
170
|
+
}
|
|
171
|
+
async deleteSession(sessionId) {
|
|
172
|
+
this.sessions.delete(sessionId);
|
|
173
|
+
}
|
|
174
|
+
getSession(sessionId) {
|
|
175
|
+
return this.sessions.get(sessionId);
|
|
176
|
+
}
|
|
177
|
+
getAllSessions() {
|
|
178
|
+
return Array.from(this.sessions.values());
|
|
179
|
+
}
|
|
180
|
+
getQRCode() {
|
|
181
|
+
return this.qrCode;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export function createWhatsAppAdapter(sessionName) {
|
|
185
|
+
return new WhatsAppAdapter(sessionName);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../src/channels/whatsapp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a shields.io security badge for a scanned SKILL.md file.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* skillkit badge my-skill.skill.md
|
|
7
|
+
* skillkit badge my-skill.skill.md --style flat-square
|
|
8
|
+
* skillkit badge my-skill.skill.md --output README.md
|
|
9
|
+
*/
|
|
10
|
+
export declare function badge(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,QAwErC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { scanSkill } from '../../runtime/executor.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate a shields.io security badge for a scanned SKILL.md file.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* skillkit badge my-skill.skill.md
|
|
11
|
+
* skillkit badge my-skill.skill.md --style flat-square
|
|
12
|
+
* skillkit badge my-skill.skill.md --output README.md
|
|
13
|
+
*/
|
|
14
|
+
export function badge(program) {
|
|
15
|
+
program
|
|
16
|
+
.command('badge <path>')
|
|
17
|
+
.description(chalk.cyan('Generate a SkillKit security badge for your skill'))
|
|
18
|
+
.option('--style <style>', 'Shield style: flat, flat-square, plastic, for-the-badge, social', 'for-the-badge')
|
|
19
|
+
.option('-o, --output <file>', 'Append badge to a file (e.g., README.md)')
|
|
20
|
+
.option('--markdown', 'Output as Markdown (default)', true)
|
|
21
|
+
.option('--html', 'Output as HTML img tag')
|
|
22
|
+
.action(async (path, options) => {
|
|
23
|
+
try {
|
|
24
|
+
const fullPath = resolve(process.cwd(), path);
|
|
25
|
+
const spinner = ora('Scanning skill for badge generation...').start();
|
|
26
|
+
const result = await scanSkill(fullPath);
|
|
27
|
+
spinner.stop();
|
|
28
|
+
const score = Math.round(result.score);
|
|
29
|
+
const { label, color, status } = getBadgeParams(score, result.threats.length);
|
|
30
|
+
// Build shields.io URL
|
|
31
|
+
const badgeUrl = buildBadgeUrl(score, label, color, status, options.style || 'for-the-badge');
|
|
32
|
+
const badgeLink = `https://github.com/artefactforge/skillshield`;
|
|
33
|
+
// Generate output formats
|
|
34
|
+
const markdown = `[](${badgeLink})`;
|
|
35
|
+
const html = `<a href="${badgeLink}"><img src="${badgeUrl}" alt="SkillKit ${status}" /></a>`;
|
|
36
|
+
// Display results
|
|
37
|
+
console.log(chalk.bold.cyan('\n🛡️ SkillKit Security Badge\n'));
|
|
38
|
+
console.log(` Score: ${score}/100 | Status: ${status} | Threats: ${result.threats.length}`);
|
|
39
|
+
console.log();
|
|
40
|
+
if (options.html) {
|
|
41
|
+
console.log(chalk.bold('HTML:'));
|
|
42
|
+
console.log(chalk.green(` ${html}`));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(chalk.bold('Markdown:'));
|
|
46
|
+
console.log(chalk.green(` ${markdown}`));
|
|
47
|
+
}
|
|
48
|
+
console.log();
|
|
49
|
+
console.log(chalk.gray(' Add this badge to your README.md or SKILL.md to show your skill is verified.'));
|
|
50
|
+
console.log();
|
|
51
|
+
// Append to file if --output specified
|
|
52
|
+
if (options.output) {
|
|
53
|
+
const outputPath = resolve(process.cwd(), options.output);
|
|
54
|
+
try {
|
|
55
|
+
const existing = await fs.readFile(outputPath, 'utf-8').catch(() => '');
|
|
56
|
+
const badgeText = options.html ? html : markdown;
|
|
57
|
+
if (existing.includes('SkillKit')) {
|
|
58
|
+
console.log(chalk.yellow(` ⚠ Badge already exists in ${options.output}. Skipping.`));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const newContent = badgeText + '\n\n' + existing;
|
|
62
|
+
await fs.writeFile(outputPath, newContent, 'utf-8');
|
|
63
|
+
console.log(chalk.green(` ✓ Badge added to ${options.output}`));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error(chalk.red(` ✗ Failed to write to ${options.output}`));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Exit with appropriate code
|
|
71
|
+
if (score < 50) {
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(chalk.red('Badge generation failed:'), error);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function getBadgeParams(score, threatCount) {
|
|
82
|
+
if (score >= 90 && threatCount === 0) {
|
|
83
|
+
return { label: 'SkillKit Verified', color: '00C853', status: 'SAFE' };
|
|
84
|
+
}
|
|
85
|
+
if (score >= 80) {
|
|
86
|
+
return { label: 'SkillKit Scanned', color: '4CAF50', status: 'APPROVED' };
|
|
87
|
+
}
|
|
88
|
+
if (score >= 50) {
|
|
89
|
+
return { label: 'SkillKit Review', color: 'FF9800', status: 'REVIEW REQUIRED' };
|
|
90
|
+
}
|
|
91
|
+
return { label: 'SkillKit Blocked', color: 'F44336', status: 'BLOCKED' };
|
|
92
|
+
}
|
|
93
|
+
function buildBadgeUrl(score, label, color, status, style) {
|
|
94
|
+
const encodedLabel = encodeURIComponent(label);
|
|
95
|
+
const encodedStatus = encodeURIComponent(`${score}/100 · ${status}`);
|
|
96
|
+
return `https://img.shields.io/badge/${encodedLabel}-${encodedStatus}-${color}?style=${style}&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xMiAyMnMtOC00LTgtMTBWNWwxMi0yIDEyIDJ2N2MwIDYtOCAxMC04IDEwWiIvPjxwYXRoIGQ9Im05IDEyIDIgMiA0LTQiLz48L3N2Zz4=`;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,QAyHtC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { resolve } from 'path';
|
|
6
|
+
import { t } from '../../i18n/index.js';
|
|
7
|
+
export function config(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('config [action] [key] [value]')
|
|
10
|
+
.description(chalk.cyan('Manage SkillKit configuration'))
|
|
11
|
+
.option('--json', 'Output as JSON')
|
|
12
|
+
.option('--global', 'Edit global config')
|
|
13
|
+
.action(async (action, key, value, options) => {
|
|
14
|
+
try {
|
|
15
|
+
const configDir = options.global
|
|
16
|
+
? resolve(homedir(), '.skillkit')
|
|
17
|
+
: resolve(process.cwd(), '.skillkit');
|
|
18
|
+
const configPath = resolve(configDir, 'config.json');
|
|
19
|
+
// Ensure config exists
|
|
20
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
21
|
+
let config = {};
|
|
22
|
+
try {
|
|
23
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
24
|
+
config = JSON.parse(content);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Config doesn't exist yet, will be created
|
|
28
|
+
}
|
|
29
|
+
if (!action) {
|
|
30
|
+
// Show current config
|
|
31
|
+
console.log(chalk.cyan.bold('\n⚙️ Configuration\n'));
|
|
32
|
+
console.log(chalk.gray(`Path: ${configPath}\n`));
|
|
33
|
+
console.log(JSON.stringify(config, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (action === 'set') {
|
|
37
|
+
// Set a value
|
|
38
|
+
if (!key || !value) {
|
|
39
|
+
console.error(chalk.red('Usage: skillkit config set <key> <value>'));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
config[key] = value;
|
|
43
|
+
await saveConfig(configPath, config);
|
|
44
|
+
console.log(chalk.green(`✓ ${t('config.saved')}: ${key} = ${value}`));
|
|
45
|
+
}
|
|
46
|
+
else if (action === 'get') {
|
|
47
|
+
// Get a value
|
|
48
|
+
if (!key) {
|
|
49
|
+
console.error(chalk.red('Usage: skillkit config get <key>'));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const val = config[key];
|
|
53
|
+
if (val === undefined) {
|
|
54
|
+
console.log(chalk.yellow(`Key not found: ${key}`));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(`${key} = ${val}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (action === 'delete') {
|
|
61
|
+
// Delete a key
|
|
62
|
+
if (!key) {
|
|
63
|
+
console.error(chalk.red('Usage: skillkit config delete <key>'));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
delete config[key];
|
|
67
|
+
await saveConfig(configPath, config);
|
|
68
|
+
console.log(chalk.green(`✓ ${t('config.deleted')}: ${key}`));
|
|
69
|
+
}
|
|
70
|
+
else if (action === 'reset') {
|
|
71
|
+
// Reset to defaults
|
|
72
|
+
const confirm = await inquirer.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'confirm',
|
|
75
|
+
name: 'confirmed',
|
|
76
|
+
message: t('config.resetConfirm'),
|
|
77
|
+
default: false,
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
if (confirm.confirmed) {
|
|
81
|
+
config = getDefaultConfig();
|
|
82
|
+
await saveConfig(configPath, config);
|
|
83
|
+
console.log(chalk.green(t('config.resetSuccess')));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (action === 'edit') {
|
|
87
|
+
// Interactive edit
|
|
88
|
+
const questions = [
|
|
89
|
+
{
|
|
90
|
+
type: 'list',
|
|
91
|
+
name: 'language',
|
|
92
|
+
message: t('config.language'),
|
|
93
|
+
choices: ['en', 'es', 'zh', 'pt'],
|
|
94
|
+
default: config.language || 'en',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'list',
|
|
98
|
+
name: 'provider',
|
|
99
|
+
message: t('config.provider'),
|
|
100
|
+
choices: ['anthropic', 'openai', 'groq'],
|
|
101
|
+
default: config.provider || 'anthropic',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
type: 'input',
|
|
105
|
+
name: 'model',
|
|
106
|
+
message: t('config.model'),
|
|
107
|
+
default: config.model || 'claude-3-5-sonnet',
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
const answers = await inquirer.prompt(questions);
|
|
111
|
+
Object.assign(config, answers);
|
|
112
|
+
await saveConfig(configPath, config);
|
|
113
|
+
console.log(chalk.green(t('config.saved')));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.error(chalk.red(`Unknown action: ${action}`));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
if (options.json) {
|
|
120
|
+
console.log(JSON.stringify({ config }, null, 2));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(chalk.red(t('error.configFailed')), error);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function getDefaultConfig() {
|
|
130
|
+
return {
|
|
131
|
+
language: 'en',
|
|
132
|
+
provider: 'anthropic',
|
|
133
|
+
model: 'claude-3-5-sonnet',
|
|
134
|
+
registryUrl: 'https://clawhub.ai',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
async function saveConfig(path, config) {
|
|
138
|
+
await fs.writeFile(path, JSON.stringify(config, null, 2));
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,QAyDtC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { t } from '../../i18n/index.js';
|
|
4
|
+
import { scanSkill } from '../../runtime/executor.js';
|
|
5
|
+
export function deploy(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('deploy <skillPath>')
|
|
8
|
+
.description(chalk.cyan('Deploy a skill to ClawHub'))
|
|
9
|
+
.option('--registry <url>', 'Custom registry URL')
|
|
10
|
+
.option('--public', 'Make skill publicly discoverable')
|
|
11
|
+
.option('--json', 'Output as JSON')
|
|
12
|
+
.action(async (skillPath, options) => {
|
|
13
|
+
try {
|
|
14
|
+
console.log(chalk.cyan.bold('\n🚀 Deploy to ClawHub\n'));
|
|
15
|
+
// Security scan
|
|
16
|
+
const scanSpinner = ora(t('deploy.scanning')).start();
|
|
17
|
+
try {
|
|
18
|
+
const result = await scanSkill(skillPath);
|
|
19
|
+
scanSpinner.succeed();
|
|
20
|
+
if (result.score < 50) {
|
|
21
|
+
console.log(chalk.red('\n✗ Skill security score too low to deploy'));
|
|
22
|
+
console.log(chalk.yellow(` Current score: ${Math.round(result.score)}%`));
|
|
23
|
+
console.log(chalk.yellow(' Required: 50%+'));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
if (result.score < 80) {
|
|
27
|
+
console.log(chalk.yellow(`\n⚠️ Security warnings found (Score: ${Math.round(result.score)}%)`));
|
|
28
|
+
console.log(chalk.dim(' Skill can be deployed but users will see warnings\n'));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
scanSpinner.fail(chalk.red(t('error.deployFailed')));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Placeholder for actual deployment logic
|
|
36
|
+
const deploySpinner = ora(t('deploy.uploading')).start();
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
38
|
+
deploySpinner.succeed(chalk.green(t('deploy.success')));
|
|
39
|
+
console.log(chalk.cyan.bold('\n✓ Skill Deployed!\n'));
|
|
40
|
+
console.log(chalk.gray(' View on ClawHub: https://clawhub.ai/skills/your-skill'));
|
|
41
|
+
console.log(chalk.gray(' Share with others: skillkit install your-skill\n'));
|
|
42
|
+
if (options.json) {
|
|
43
|
+
console.log(JSON.stringify({
|
|
44
|
+
success: true,
|
|
45
|
+
skillPath,
|
|
46
|
+
url: 'https://clawhub.ai/skills/your-skill',
|
|
47
|
+
}, null, 2));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(chalk.red(t('error.deployFailed')), error);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,QAmGpC"}
|