@skillmark/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-entry-point.d.ts +3 -0
- package/dist/cli-entry-point.d.ts.map +1 -0
- package/dist/cli-entry-point.js +207 -0
- package/dist/cli-entry-point.js.map +1 -0
- package/dist/commands/auth-setup-and-token-storage-command.d.ts +21 -0
- package/dist/commands/auth-setup-and-token-storage-command.d.ts.map +1 -0
- package/dist/commands/auth-setup-and-token-storage-command.js +166 -0
- package/dist/commands/auth-setup-and-token-storage-command.js.map +1 -0
- package/dist/commands/publish-results-command.d.ts +21 -0
- package/dist/commands/publish-results-command.d.ts.map +1 -0
- package/dist/commands/publish-results-command.js +256 -0
- package/dist/commands/publish-results-command.js.map +1 -0
- package/dist/commands/run-benchmark-command.d.ts +6 -0
- package/dist/commands/run-benchmark-command.d.ts.map +1 -0
- package/dist/commands/run-benchmark-command.js +331 -0
- package/dist/commands/run-benchmark-command.js.map +1 -0
- package/dist/commands/view-leaderboard-command.d.ts +8 -0
- package/dist/commands/view-leaderboard-command.d.ts.map +1 -0
- package/dist/commands/view-leaderboard-command.js +169 -0
- package/dist/commands/view-leaderboard-command.js.map +1 -0
- package/dist/config/api-key-config-reader.d.ts +14 -0
- package/dist/config/api-key-config-reader.d.ts.map +1 -0
- package/dist/config/api-key-config-reader.js +107 -0
- package/dist/config/api-key-config-reader.js.map +1 -0
- package/dist/config/api-key-config-reader.test.d.ts +2 -0
- package/dist/config/api-key-config-reader.test.d.ts.map +1 -0
- package/dist/config/api-key-config-reader.test.js +21 -0
- package/dist/config/api-key-config-reader.test.js.map +1 -0
- package/dist/engine/claude-cli-executor.d.ts +33 -0
- package/dist/engine/claude-cli-executor.d.ts.map +1 -0
- package/dist/engine/claude-cli-executor.js +251 -0
- package/dist/engine/claude-cli-executor.js.map +1 -0
- package/dist/engine/concept-accuracy-scorer.d.ts +24 -0
- package/dist/engine/concept-accuracy-scorer.d.ts.map +1 -0
- package/dist/engine/concept-accuracy-scorer.js +186 -0
- package/dist/engine/concept-accuracy-scorer.js.map +1 -0
- package/dist/engine/concept-accuracy-scorer.test.d.ts +2 -0
- package/dist/engine/concept-accuracy-scorer.test.d.ts.map +1 -0
- package/dist/engine/concept-accuracy-scorer.test.js +230 -0
- package/dist/engine/concept-accuracy-scorer.test.js.map +1 -0
- package/dist/engine/enhanced-test-prompt-builder.d.ts +30 -0
- package/dist/engine/enhanced-test-prompt-builder.d.ts.map +1 -0
- package/dist/engine/enhanced-test-prompt-builder.js +134 -0
- package/dist/engine/enhanced-test-prompt-builder.js.map +1 -0
- package/dist/engine/markdown-test-definition-parser.d.ts +18 -0
- package/dist/engine/markdown-test-definition-parser.d.ts.map +1 -0
- package/dist/engine/markdown-test-definition-parser.js +525 -0
- package/dist/engine/markdown-test-definition-parser.js.map +1 -0
- package/dist/engine/markdown-test-definition-parser.test.d.ts +2 -0
- package/dist/engine/markdown-test-definition-parser.test.d.ts.map +1 -0
- package/dist/engine/markdown-test-definition-parser.test.js +265 -0
- package/dist/engine/markdown-test-definition-parser.test.js.map +1 -0
- package/dist/engine/retry-with-degrade-utils.d.ts +58 -0
- package/dist/engine/retry-with-degrade-utils.d.ts.map +1 -0
- package/dist/engine/retry-with-degrade-utils.js +86 -0
- package/dist/engine/retry-with-degrade-utils.js.map +1 -0
- package/dist/engine/skill-content-collector.d.ts +53 -0
- package/dist/engine/skill-content-collector.d.ts.map +1 -0
- package/dist/engine/skill-content-collector.js +157 -0
- package/dist/engine/skill-content-collector.js.map +1 -0
- package/dist/engine/skill-creator-invoker.d.ts +36 -0
- package/dist/engine/skill-creator-invoker.d.ts.map +1 -0
- package/dist/engine/skill-creator-invoker.js +222 -0
- package/dist/engine/skill-creator-invoker.js.map +1 -0
- package/dist/engine/transcript-jsonl-parser.d.ts +28 -0
- package/dist/engine/transcript-jsonl-parser.d.ts.map +1 -0
- package/dist/engine/transcript-jsonl-parser.js +175 -0
- package/dist/engine/transcript-jsonl-parser.js.map +1 -0
- package/dist/sources/git-repository-skill-source-handler.d.ts +18 -0
- package/dist/sources/git-repository-skill-source-handler.d.ts.map +1 -0
- package/dist/sources/git-repository-skill-source-handler.js +119 -0
- package/dist/sources/git-repository-skill-source-handler.js.map +1 -0
- package/dist/sources/local-skill-source-handler.d.ts +21 -0
- package/dist/sources/local-skill-source-handler.d.ts.map +1 -0
- package/dist/sources/local-skill-source-handler.js +138 -0
- package/dist/sources/local-skill-source-handler.js.map +1 -0
- package/dist/sources/local-skill-source-handler.test.d.ts +2 -0
- package/dist/sources/local-skill-source-handler.test.d.ts.map +1 -0
- package/dist/sources/local-skill-source-handler.test.js +55 -0
- package/dist/sources/local-skill-source-handler.test.js.map +1 -0
- package/dist/sources/skillsh-registry-source-handler.d.ts +18 -0
- package/dist/sources/skillsh-registry-source-handler.d.ts.map +1 -0
- package/dist/sources/skillsh-registry-source-handler.js +130 -0
- package/dist/sources/skillsh-registry-source-handler.js.map +1 -0
- package/dist/sources/unified-skill-source-resolver.d.ts +20 -0
- package/dist/sources/unified-skill-source-resolver.d.ts.map +1 -0
- package/dist/sources/unified-skill-source-resolver.js +64 -0
- package/dist/sources/unified-skill-source-resolver.js.map +1 -0
- package/dist/sources/unified-skill-source-resolver.test.d.ts +2 -0
- package/dist/sources/unified-skill-source-resolver.test.d.ts.map +1 -0
- package/dist/sources/unified-skill-source-resolver.test.js +84 -0
- package/dist/sources/unified-skill-source-resolver.test.js.map +1 -0
- package/dist/types/benchmark-types.d.ts +142 -0
- package/dist/types/benchmark-types.d.ts.map +1 -0
- package/dist/types/benchmark-types.js +5 -0
- package/dist/types/benchmark-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-entry-point.d.ts","sourceRoot":"","sources":["../src/cli-entry-point.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Skillmark CLI - Agent skill benchmarking tool
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* run <skill> - Run benchmark against a skill
|
|
7
|
+
* publish <result> - Upload results to leaderboard
|
|
8
|
+
* leaderboard - View skill rankings
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { runBenchmark } from './commands/run-benchmark-command.js';
|
|
13
|
+
import { publishResults, publishResultsWithAutoKey } from './commands/publish-results-command.js';
|
|
14
|
+
import { viewLeaderboard } from './commands/view-leaderboard-command.js';
|
|
15
|
+
import { readApiKeyConfig, getConfigSourceDescription } from './config/api-key-config-reader.js';
|
|
16
|
+
import { runAuth, showAuthStatus } from './commands/auth-setup-and-token-storage-command.js';
|
|
17
|
+
const VERSION = '0.1.0';
|
|
18
|
+
const program = new Command();
|
|
19
|
+
program
|
|
20
|
+
.name('skillmark')
|
|
21
|
+
.description('Agent skill benchmarking platform with CLI and public leaderboards')
|
|
22
|
+
.version(VERSION);
|
|
23
|
+
// Run benchmark command
|
|
24
|
+
program
|
|
25
|
+
.command('run')
|
|
26
|
+
.description('Run benchmark against a skill')
|
|
27
|
+
.argument('<skill-source>', 'Skill source (local path, git URL, or skill.sh reference)')
|
|
28
|
+
.option('-t, --tests <path>', 'Path to test suite directory (default: <skill>/tests)')
|
|
29
|
+
.option('-m, --model <model>', 'Model to use (haiku|sonnet|opus)', 'opus')
|
|
30
|
+
.option('-r, --runs <n>', 'Number of iterations', '3')
|
|
31
|
+
.option('-o, --output <dir>', 'Output directory', './skillmark-results')
|
|
32
|
+
.option('-p, --publish', 'Auto-publish results after benchmark completes')
|
|
33
|
+
.option('-k, --api-key <key>', 'API key for publishing (or use config/env)')
|
|
34
|
+
.option('-e, --endpoint <url>', 'API endpoint URL for publishing')
|
|
35
|
+
.option('-v, --verbose', 'Show detailed progress for each test step')
|
|
36
|
+
.action(async (skillSource, options) => {
|
|
37
|
+
try {
|
|
38
|
+
// Validate model
|
|
39
|
+
const model = options.model.toLowerCase();
|
|
40
|
+
if (!['haiku', 'sonnet', 'opus'].includes(model)) {
|
|
41
|
+
console.error(chalk.red(`Invalid model: ${options.model}`));
|
|
42
|
+
console.error('Valid models: haiku, sonnet, opus');
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
// Parse runs
|
|
46
|
+
const runs = parseInt(options.runs, 10);
|
|
47
|
+
if (isNaN(runs) || runs < 1) {
|
|
48
|
+
console.error(chalk.red(`Invalid runs value: ${options.runs}`));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
// Run benchmark
|
|
52
|
+
const result = await runBenchmark(skillSource, {
|
|
53
|
+
tests: options.tests,
|
|
54
|
+
model: model,
|
|
55
|
+
runs,
|
|
56
|
+
output: options.output,
|
|
57
|
+
verbose: options.verbose,
|
|
58
|
+
});
|
|
59
|
+
// Auto-publish if requested
|
|
60
|
+
if (options.publish) {
|
|
61
|
+
console.log(chalk.blue('\n📤 Publishing results...\n'));
|
|
62
|
+
// Get API key from option or config
|
|
63
|
+
let apiKey = options.apiKey;
|
|
64
|
+
let keySource = 'command line';
|
|
65
|
+
if (!apiKey) {
|
|
66
|
+
const config = await readApiKeyConfig();
|
|
67
|
+
if (config) {
|
|
68
|
+
apiKey = config.apiKey;
|
|
69
|
+
keySource = getConfigSourceDescription(config.source);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!apiKey) {
|
|
73
|
+
console.error(chalk.red('No API key found.'));
|
|
74
|
+
console.error(chalk.gray('Provide via --api-key, SKILLMARK_API_KEY env, or ~/.skillmarkrc'));
|
|
75
|
+
console.error(chalk.gray('\nGet your API key at: https://skillmark.sh/login'));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
console.log(chalk.gray(`Using API key from ${keySource}`));
|
|
79
|
+
await publishResultsWithAutoKey(result, {
|
|
80
|
+
apiKey,
|
|
81
|
+
endpoint: options.endpoint,
|
|
82
|
+
testsPath: options.tests,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error(chalk.red(`\nError: ${error instanceof Error ? error.message : error}`));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// Publish results command
|
|
92
|
+
program
|
|
93
|
+
.command('publish')
|
|
94
|
+
.description('Upload benchmark results to leaderboard')
|
|
95
|
+
.argument('<result-file>', 'Path to result.json file')
|
|
96
|
+
.option('-k, --api-key <key>', 'Your skillmark API key (or use config/env)')
|
|
97
|
+
.option('-e, --endpoint <url>', 'API endpoint URL')
|
|
98
|
+
.action(async (resultFile, options) => {
|
|
99
|
+
try {
|
|
100
|
+
// Get API key from option or config
|
|
101
|
+
let apiKey = options.apiKey;
|
|
102
|
+
if (!apiKey) {
|
|
103
|
+
const config = await readApiKeyConfig();
|
|
104
|
+
if (config) {
|
|
105
|
+
apiKey = config.apiKey;
|
|
106
|
+
console.log(chalk.gray(`Using API key from ${getConfigSourceDescription(config.source)}`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!apiKey) {
|
|
110
|
+
console.error(chalk.red('No API key found.'));
|
|
111
|
+
console.error(chalk.gray('Provide via --api-key, SKILLMARK_API_KEY env, or ~/.skillmarkrc'));
|
|
112
|
+
console.error(chalk.gray('\nGet your API key at: https://skillmark.sh/login'));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
await publishResults(resultFile, {
|
|
116
|
+
apiKey,
|
|
117
|
+
endpoint: options.endpoint,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error(chalk.red(`\nError: ${error instanceof Error ? error.message : error}`));
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
// Auth command - setup Claude CLI OAuth token (required for running benchmarks)
|
|
126
|
+
program
|
|
127
|
+
.command('auth')
|
|
128
|
+
.description('Setup Claude CLI authentication (required for running benchmarks)')
|
|
129
|
+
.option('-s, --status', 'Check authentication status')
|
|
130
|
+
.action(async (options) => {
|
|
131
|
+
try {
|
|
132
|
+
if (options.status) {
|
|
133
|
+
await showAuthStatus();
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await runAuth();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error(chalk.red(`Error: ${error instanceof Error ? error.message : error}`));
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
// Login command - save Skillmark API key (for publishing results)
|
|
145
|
+
program
|
|
146
|
+
.command('login')
|
|
147
|
+
.description('Save Skillmark API key to ~/.skillmarkrc (for publishing)')
|
|
148
|
+
.argument('<api-key>', 'Your Skillmark API key (get it at https://skillmark.sh/login)')
|
|
149
|
+
.action(async (apiKey) => {
|
|
150
|
+
const { writeFile } = await import('node:fs/promises');
|
|
151
|
+
const { join } = await import('node:path');
|
|
152
|
+
const { homedir } = await import('node:os');
|
|
153
|
+
try {
|
|
154
|
+
const rcPath = join(homedir(), '.skillmarkrc');
|
|
155
|
+
await writeFile(rcPath, `api_key=${apiKey}\n`, 'utf-8');
|
|
156
|
+
console.log(chalk.green('✓ API key saved to ~/.skillmarkrc'));
|
|
157
|
+
console.log(chalk.gray('\nYou can now use: skillmark run <skill> --publish'));
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
console.error(chalk.red(`Error saving API key: ${error instanceof Error ? error.message : error}`));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// Leaderboard command
|
|
165
|
+
program
|
|
166
|
+
.command('leaderboard')
|
|
167
|
+
.description('View skill rankings')
|
|
168
|
+
.argument('[skill-name]', 'Optional skill name to view details')
|
|
169
|
+
.option('-l, --limit <n>', 'Number of entries to show', '20')
|
|
170
|
+
.option('-e, --endpoint <url>', 'API endpoint URL')
|
|
171
|
+
.action(async (skillName, options) => {
|
|
172
|
+
try {
|
|
173
|
+
await viewLeaderboard(skillName, {
|
|
174
|
+
endpoint: options.endpoint,
|
|
175
|
+
limit: parseInt(options.limit, 10),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
console.error(chalk.red(`\nError: ${error instanceof Error ? error.message : error}`));
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
// ASCII logo
|
|
184
|
+
const LOGO = `
|
|
185
|
+
${chalk.gray('███████╗██╗ ██╗██╗██╗ ██╗ ███╗ ███╗ █████╗ ██████╗ ██╗ ██╗')}
|
|
186
|
+
${chalk.gray('██╔════╝██║ ██╔╝██║██║ ██║ ████╗ ████║██╔══██╗██╔══██╗██║ ██╔╝')}
|
|
187
|
+
${chalk.white('███████╗█████╔╝ ██║██║ ██║ ██╔████╔██║███████║██████╔╝█████╔╝')}
|
|
188
|
+
${chalk.gray('╚════██║██╔═██╗ ██║██║ ██║ ██║╚██╔╝██║██╔══██║██╔══██╗██╔═██╗')}
|
|
189
|
+
${chalk.gray('███████║██║ ██╗██║███████╗███████╗██║ ╚═╝ ██║██║ ██║██║ ██║██║ ██╗')}
|
|
190
|
+
${chalk.gray('╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝')}
|
|
191
|
+
`;
|
|
192
|
+
// Show logo and help if no command
|
|
193
|
+
if (!process.argv.slice(2).length) {
|
|
194
|
+
console.log(LOGO);
|
|
195
|
+
console.log(chalk.gray(' Agent Skill Benchmarking Platform\n'));
|
|
196
|
+
console.log(' ' + chalk.gray('Examples:'));
|
|
197
|
+
console.log(' ' + chalk.cyan('skillmark run') + ' ~/.claude/skills/my-skill');
|
|
198
|
+
console.log(' ' + chalk.cyan('skillmark run') + ' ./skill --model opus --publish');
|
|
199
|
+
console.log(' ' + chalk.cyan('skillmark publish') + ' ./result.json');
|
|
200
|
+
console.log(' ' + chalk.cyan('skillmark leaderboard'));
|
|
201
|
+
console.log('');
|
|
202
|
+
program.outputHelp();
|
|
203
|
+
process.exit(0);
|
|
204
|
+
}
|
|
205
|
+
// Parse and execute
|
|
206
|
+
program.parse();
|
|
207
|
+
//# sourceMappingURL=cli-entry-point.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-entry-point.js","sourceRoot":"","sources":["../src/cli-entry-point.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface SkillmarkConfig {
|
|
2
|
+
claudeOAuthToken?: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Load skillmark config
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadConfig(): Promise<SkillmarkConfig>;
|
|
8
|
+
/**
|
|
9
|
+
* Get stored OAuth token
|
|
10
|
+
*/
|
|
11
|
+
export declare function getStoredToken(): Promise<string | undefined>;
|
|
12
|
+
/**
|
|
13
|
+
* Run the auth setup flow
|
|
14
|
+
*/
|
|
15
|
+
export declare function runAuth(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Show auth status
|
|
18
|
+
*/
|
|
19
|
+
export declare function showAuthStatus(): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=auth-setup-and-token-storage-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-setup-and-token-storage-command.d.ts","sourceRoot":"","sources":["../../src/commands/auth-setup-and-token-storage-command.ts"],"names":[],"mappings":"AAaA,UAAU,eAAe;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAO3D;AAUD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQlE;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmC7C;AAgFD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBpD"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth command - setup Claude CLI authentication for skillmark
|
|
3
|
+
*/
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
6
|
+
import { homedir } from 'node:os';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
/** Config file location */
|
|
10
|
+
const CONFIG_DIR = join(homedir(), '.skillmark');
|
|
11
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
12
|
+
/**
|
|
13
|
+
* Load skillmark config
|
|
14
|
+
*/
|
|
15
|
+
export async function loadConfig() {
|
|
16
|
+
try {
|
|
17
|
+
const content = await readFile(CONFIG_FILE, 'utf-8');
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Save skillmark config
|
|
26
|
+
*/
|
|
27
|
+
async function saveConfig(config) {
|
|
28
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
29
|
+
await writeFile(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get stored OAuth token
|
|
33
|
+
*/
|
|
34
|
+
export async function getStoredToken() {
|
|
35
|
+
// Check env var first
|
|
36
|
+
if (process.env.CLAUDE_CODE_OAUTH_TOKEN) {
|
|
37
|
+
return process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
38
|
+
}
|
|
39
|
+
// Check config file
|
|
40
|
+
const config = await loadConfig();
|
|
41
|
+
return config.claudeOAuthToken;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run the auth setup flow
|
|
45
|
+
*/
|
|
46
|
+
export async function runAuth() {
|
|
47
|
+
console.log(chalk.blue('Setting up Claude CLI authentication for skillmark...\n'));
|
|
48
|
+
// Check if already authenticated
|
|
49
|
+
const existingToken = await getStoredToken();
|
|
50
|
+
if (existingToken) {
|
|
51
|
+
const isValid = await testToken(existingToken);
|
|
52
|
+
if (isValid) {
|
|
53
|
+
console.log(chalk.green('✓ Already authenticated'));
|
|
54
|
+
console.log(chalk.gray(` Token stored in: ${CONFIG_FILE}`));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.yellow('Existing token invalid, re-authenticating...\n'));
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk.gray('This will open your browser for authentication.\n'));
|
|
60
|
+
// Run claude setup-token and capture output
|
|
61
|
+
const token = await runSetupToken();
|
|
62
|
+
if (!token) {
|
|
63
|
+
console.log(chalk.red('\n✗ Authentication failed'));
|
|
64
|
+
console.log(chalk.gray(' You can manually run: claude setup-token'));
|
|
65
|
+
console.log(chalk.gray(' Then set: export CLAUDE_CODE_OAUTH_TOKEN=<token>'));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
// Save token to config
|
|
69
|
+
const config = await loadConfig();
|
|
70
|
+
config.claudeOAuthToken = token;
|
|
71
|
+
await saveConfig(config);
|
|
72
|
+
console.log(chalk.green('\n✓ Authentication successful'));
|
|
73
|
+
console.log(chalk.gray(` Token saved to: ${CONFIG_FILE}`));
|
|
74
|
+
console.log(chalk.gray(' You can now run: skillmark run <skill>'));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Run claude setup-token and capture the generated token
|
|
78
|
+
*/
|
|
79
|
+
async function runSetupToken() {
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
// Run setup-token with inherited stdio so user can interact
|
|
82
|
+
const proc = spawn('claude', ['setup-token'], {
|
|
83
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
84
|
+
});
|
|
85
|
+
let stdout = '';
|
|
86
|
+
proc.stdout?.on('data', (data) => {
|
|
87
|
+
const text = data.toString();
|
|
88
|
+
stdout += text;
|
|
89
|
+
// Print to console so user sees the output
|
|
90
|
+
process.stdout.write(text);
|
|
91
|
+
});
|
|
92
|
+
proc.on('close', (code) => {
|
|
93
|
+
if (code !== 0) {
|
|
94
|
+
resolve(null);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Extract token from output
|
|
98
|
+
// Token may span multiple lines due to terminal wrapping
|
|
99
|
+
// Remove all whitespace/newlines from output before matching
|
|
100
|
+
const cleanedOutput = stdout.replace(/[\s\n\r]+/g, ' ');
|
|
101
|
+
const tokenMatch = cleanedOutput.match(/sk-ant-oat01-[A-Za-z0-9_-]+/);
|
|
102
|
+
if (tokenMatch) {
|
|
103
|
+
resolve(tokenMatch[0]);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
resolve(null);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
proc.on('error', () => {
|
|
110
|
+
resolve(null);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Test if a token is valid
|
|
116
|
+
*/
|
|
117
|
+
async function testToken(token) {
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const proc = spawn('claude', ['-p', 'Say OK', '--output-format', 'json', '--model', 'haiku'], {
|
|
120
|
+
env: { ...process.env, CLAUDE_CODE_OAUTH_TOKEN: token },
|
|
121
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
122
|
+
});
|
|
123
|
+
let stdout = '';
|
|
124
|
+
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
125
|
+
const timeout = setTimeout(() => {
|
|
126
|
+
proc.kill();
|
|
127
|
+
resolve(false);
|
|
128
|
+
}, 30000);
|
|
129
|
+
proc.on('close', () => {
|
|
130
|
+
clearTimeout(timeout);
|
|
131
|
+
try {
|
|
132
|
+
const result = JSON.parse(stdout);
|
|
133
|
+
resolve(!result.is_error);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
resolve(false);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
proc.on('error', () => {
|
|
140
|
+
clearTimeout(timeout);
|
|
141
|
+
resolve(false);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Show auth status
|
|
147
|
+
*/
|
|
148
|
+
export async function showAuthStatus() {
|
|
149
|
+
const token = await getStoredToken();
|
|
150
|
+
if (!token) {
|
|
151
|
+
console.log(chalk.yellow('Not authenticated'));
|
|
152
|
+
console.log(chalk.gray(' Run: skillmark auth'));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const isValid = await testToken(token);
|
|
156
|
+
if (isValid) {
|
|
157
|
+
console.log(chalk.green('✓ Authenticated'));
|
|
158
|
+
const source = process.env.CLAUDE_CODE_OAUTH_TOKEN ? 'env var' : CONFIG_FILE;
|
|
159
|
+
console.log(chalk.gray(` Token source: ${source}`));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(chalk.red('✗ Token invalid or expired'));
|
|
163
|
+
console.log(chalk.gray(' Run: skillmark auth'));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=auth-setup-and-token-storage-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-setup-and-token-storage-command.js","sourceRoot":"","sources":["../../src/commands/auth-setup-and-token-storage-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BenchmarkResult, PublishOptions } from '../types/index.js';
|
|
2
|
+
/** Extended publish options for auto-publish */
|
|
3
|
+
export interface AutoPublishOptions {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
endpoint?: string;
|
|
6
|
+
testsPath?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Execute the publish command
|
|
10
|
+
*/
|
|
11
|
+
export declare function publishResults(resultPath: string, options: PublishOptions): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Publish results with auto-key (from run command with --publish flag)
|
|
14
|
+
* Includes test files and skill.sh link detection
|
|
15
|
+
*/
|
|
16
|
+
export declare function publishResultsWithAutoKey(result: BenchmarkResult, options: AutoPublishOptions): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Verify API key is valid
|
|
19
|
+
*/
|
|
20
|
+
export declare function verifyApiKey(apiKey: string, endpoint?: string): Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=publish-results-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-results-command.d.ts","sourceRoot":"","sources":["../../src/commands/publish-results-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWzE,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAgFD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAwGD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAyB,GAClC,OAAO,CAAC,OAAO,CAAC,CAYlB"}
|