winter-super-cli 2026.6.20 → 2026.6.22
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/memories/readme.md +35 -0
- package/package.json +6 -1
- package/resources/local/agents.md/AGENTS.md +43 -0
- package/resources/local/agents.md/LICENSE +21 -0
- package/resources/local/agents.md/README.md +49 -0
- package/resources/local/agents.md/components/AboutSection.tsx +37 -0
- package/resources/local/agents.md/components/CodeExample.tsx +207 -0
- package/resources/local/agents.md/components/CompatibilitySection.tsx +378 -0
- package/resources/local/agents.md/components/ExampleListSection.tsx +188 -0
- package/resources/local/agents.md/components/ExamplesSection.tsx +22 -0
- package/resources/local/agents.md/components/FAQSection.tsx +113 -0
- package/resources/local/agents.md/components/Footer.tsx +17 -0
- package/resources/local/agents.md/components/Hero.tsx +230 -0
- package/resources/local/agents.md/components/HowToUseSection.tsx +66 -0
- package/resources/local/agents.md/components/Section.tsx +44 -0
- package/resources/local/agents.md/components/ThreeCanvas.tsx +240 -0
- package/resources/local/agents.md/components/WhySection.tsx +64 -0
- package/resources/local/agents.md/components/icons/ClipboardIcon.tsx +27 -0
- package/resources/local/agents.md/components/icons/CopyIcon.tsx +15 -0
- package/resources/local/agents.md/components/icons/GitHubIcon.tsx +24 -0
- package/resources/local/agents.md/components/icons/LinkIcon.tsx +27 -0
- package/resources/local/agents.md/components/icons/UserIcon.tsx +27 -0
- package/resources/local/agents.md/next.config.ts +8 -0
- package/resources/local/agents.md/package.json +27 -0
- package/resources/local/agents.md/pages/_app.tsx +24 -0
- package/resources/local/agents.md/pages/_document.tsx +24 -0
- package/resources/local/agents.md/pages/index.tsx +160 -0
- package/resources/local/agents.md/pnpm-lock.yaml +2782 -0
- package/resources/local/agents.md/postcss.config.mjs +5 -0
- package/resources/local/agents.md/public/favicon-dark.png +0 -0
- package/resources/local/agents.md/public/favicon-light.png +0 -0
- package/resources/local/agents.md/public/favicon.ico +0 -0
- package/resources/local/agents.md/public/logos/aider.svg +16 -0
- package/resources/local/agents.md/public/logos/amp.svg +5 -0
- package/resources/local/agents.md/public/logos/augment.svg +9 -0
- package/resources/local/agents.md/public/logos/codex.svg +3 -0
- package/resources/local/agents.md/public/logos/copilot.svg +1 -0
- package/resources/local/agents.md/public/logos/cursor.svg +15 -0
- package/resources/local/agents.md/public/logos/devin-dark.svg +1 -0
- package/resources/local/agents.md/public/logos/devin-light.svg +1 -0
- package/resources/local/agents.md/public/logos/factory.svg +3 -0
- package/resources/local/agents.md/public/logos/gemini.svg +27 -0
- package/resources/local/agents.md/public/logos/goose.svg +12 -0
- package/resources/local/agents.md/public/logos/jules.svg +3 -0
- package/resources/local/agents.md/public/logos/junie.svg +5 -0
- package/resources/local/agents.md/public/logos/kilo-code.svg +43 -0
- package/resources/local/agents.md/public/logos/ona-dark.svg +3 -0
- package/resources/local/agents.md/public/logos/ona-light.svg +3 -0
- package/resources/local/agents.md/public/logos/opencode.svg +40 -0
- package/resources/local/agents.md/public/logos/phoenix.svg +44 -0
- package/resources/local/agents.md/public/logos/roocode.svg +3 -0
- package/resources/local/agents.md/public/logos/semgrep.svg +7 -0
- package/resources/local/agents.md/public/logos/uipath.svg +6 -0
- package/resources/local/agents.md/public/logos/vscode-dark.svg +19 -0
- package/resources/local/agents.md/public/logos/vscode-light.svg +12 -0
- package/resources/local/agents.md/public/logos/warp.svg +7 -0
- package/resources/local/agents.md/public/logos/windsurf-dark.svg +3 -0
- package/resources/local/agents.md/public/logos/windsurf-light.svg +3 -0
- package/resources/local/agents.md/public/logos/zed.svg +3 -0
- package/resources/local/agents.md/public/og.png +0 -0
- package/resources/local/agents.md/styles/globals.css +415 -0
- package/resources/local/agents.md/tsconfig.json +34 -0
- package/resources/local/awesome-design-md/README.md +197 -0
- package/resources/local/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
- package/resources/local/awesome-design-md/design-md/airbnb/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
- package/resources/local/awesome-design-md/design-md/airtable/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/apple/DESIGN.md +562 -0
- package/resources/local/awesome-design-md/design-md/apple/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/binance/DESIGN.md +634 -0
- package/resources/local/awesome-design-md/design-md/binance/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/bmw/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
- package/resources/local/awesome-design-md/design-md/bmw-m/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
- package/resources/local/awesome-design-md/design-md/bugatti/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cal/DESIGN.md +542 -0
- package/resources/local/awesome-design-md/design-md/cal/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/claude/DESIGN.md +589 -0
- package/resources/local/awesome-design-md/design-md/claude/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/clay/DESIGN.md +541 -0
- package/resources/local/awesome-design-md/design-md/clay/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/clickhouse/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
- package/resources/local/awesome-design-md/design-md/cohere/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
- package/resources/local/awesome-design-md/design-md/coinbase/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/composio/DESIGN.md +506 -0
- package/resources/local/awesome-design-md/design-md/composio/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
- package/resources/local/awesome-design-md/design-md/cursor/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
- package/resources/local/awesome-design-md/design-md/elevenlabs/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/expo/DESIGN.md +526 -0
- package/resources/local/awesome-design-md/design-md/expo/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
- package/resources/local/awesome-design-md/design-md/ferrari/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/figma/DESIGN.md +578 -0
- package/resources/local/awesome-design-md/design-md/figma/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/framer/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/framer/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
- package/resources/local/awesome-design-md/design-md/hashicorp/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
- package/resources/local/awesome-design-md/design-md/ibm/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
- package/resources/local/awesome-design-md/design-md/intercom/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
- package/resources/local/awesome-design-md/design-md/kraken/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
- package/resources/local/awesome-design-md/design-md/lamborghini/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
- package/resources/local/awesome-design-md/design-md/linear.app/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
- package/resources/local/awesome-design-md/design-md/lovable/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
- package/resources/local/awesome-design-md/design-md/mastercard/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/meta/DESIGN.md +683 -0
- package/resources/local/awesome-design-md/design-md/meta/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
- package/resources/local/awesome-design-md/design-md/minimax/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
- package/resources/local/awesome-design-md/design-md/mintlify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/miro/DESIGN.md +825 -0
- package/resources/local/awesome-design-md/design-md/miro/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
- package/resources/local/awesome-design-md/design-md/mistral.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
- package/resources/local/awesome-design-md/design-md/mongodb/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/nike/DESIGN.md +575 -0
- package/resources/local/awesome-design-md/design-md/nike/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/notion/DESIGN.md +821 -0
- package/resources/local/awesome-design-md/design-md/notion/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
- package/resources/local/awesome-design-md/design-md/nvidia/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
- package/resources/local/awesome-design-md/design-md/ollama/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
- package/resources/local/awesome-design-md/design-md/opencode.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
- package/resources/local/awesome-design-md/design-md/pinterest/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
- package/resources/local/awesome-design-md/design-md/playstation/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
- package/resources/local/awesome-design-md/design-md/posthog/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
- package/resources/local/awesome-design-md/design-md/raycast/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/renault/DESIGN.md +589 -0
- package/resources/local/awesome-design-md/design-md/renault/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
- package/resources/local/awesome-design-md/design-md/replicate/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/resend/DESIGN.md +585 -0
- package/resources/local/awesome-design-md/design-md/resend/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
- package/resources/local/awesome-design-md/design-md/revolut/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
- package/resources/local/awesome-design-md/design-md/runwayml/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
- package/resources/local/awesome-design-md/design-md/sanity/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/sentry/DESIGN.md +262 -0
- package/resources/local/awesome-design-md/design-md/sentry/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/shopify/DESIGN.md +350 -0
- package/resources/local/awesome-design-md/design-md/shopify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/spacex/DESIGN.md +194 -0
- package/resources/local/awesome-design-md/design-md/spacex/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
- package/resources/local/awesome-design-md/design-md/spotify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
- package/resources/local/awesome-design-md/design-md/starbucks/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/stripe/DESIGN.md +322 -0
- package/resources/local/awesome-design-md/design-md/stripe/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/supabase/DESIGN.md +255 -0
- package/resources/local/awesome-design-md/design-md/supabase/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/superhuman/DESIGN.md +252 -0
- package/resources/local/awesome-design-md/design-md/superhuman/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
- package/resources/local/awesome-design-md/design-md/tesla/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
- package/resources/local/awesome-design-md/design-md/theverge/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/together.ai/DESIGN.md +263 -0
- package/resources/local/awesome-design-md/design-md/together.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/uber/DESIGN.md +295 -0
- package/resources/local/awesome-design-md/design-md/uber/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/vercel/DESIGN.md +310 -0
- package/resources/local/awesome-design-md/design-md/vercel/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/vodafone/DESIGN.md +423 -0
- package/resources/local/awesome-design-md/design-md/vodafone/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/voltagent/DESIGN.md +323 -0
- package/resources/local/awesome-design-md/design-md/voltagent/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/warp/DESIGN.md +253 -0
- package/resources/local/awesome-design-md/design-md/warp/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/webflow/DESIGN.md +92 -0
- package/resources/local/awesome-design-md/design-md/webflow/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/wired/DESIGN.md +278 -0
- package/resources/local/awesome-design-md/design-md/wired/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/wise/DESIGN.md +173 -0
- package/resources/local/awesome-design-md/design-md/wise/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/x.ai/DESIGN.md +257 -0
- package/resources/local/awesome-design-md/design-md/x.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/zapier/DESIGN.md +328 -0
- package/resources/local/awesome-design-md/design-md/zapier/README.md +5 -0
- package/resources/local/awesome-design-md/design-md-cli.js +167 -0
- package/resources/local/karpathy-tools/CLAUDE.md +65 -0
- package/resources/local/karpathy-tools/karpathy-md.js +140 -0
- package/scripts/audit-pack.js +21 -0
- package/skills/coding.md +87 -0
- package/skills/debug.md +63 -0
- package/skills/test.md +64 -0
- package/src/cli/tool-call-adapter.js +24 -2
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* design-md-cli.js - Interactive CLI for awesome-design-md
|
|
3
|
+
* Usage: node design-md-cli.js <command> [args]
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const readline = require('readline');
|
|
9
|
+
|
|
10
|
+
const DESIGN_MD_DIR = path.join(__dirname, 'design-md');
|
|
11
|
+
|
|
12
|
+
// Colors for terminal output
|
|
13
|
+
const colors = {
|
|
14
|
+
reset: '\x1b[0m',
|
|
15
|
+
green: '\x1b[32m',
|
|
16
|
+
yellow: '\x1b[33m',
|
|
17
|
+
blue: '\x1b[34m',
|
|
18
|
+
cyan: '\x1b[36m',
|
|
19
|
+
dim: '\x1b[2m',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function log(text, color = 'reset') {
|
|
23
|
+
console.log(`${colors[color]}${text}${colors.reset}`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function readDesignFile(brand) {
|
|
27
|
+
const dir = path.join(DESIGN_MD_DIR, brand);
|
|
28
|
+
if (fs.existsSync(path.join(dir, 'DESIGN.md'))) {
|
|
29
|
+
return { file: 'DESIGN.md', content: fs.readFileSync(path.join(dir, 'DESIGN.md'), 'utf8') };
|
|
30
|
+
}
|
|
31
|
+
if (fs.existsSync(path.join(dir, 'README.md'))) {
|
|
32
|
+
return { file: 'README.md', content: fs.readFileSync(path.join(dir, 'README.md'), 'utf8') };
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function search(query) {
|
|
38
|
+
const brands = fs.readdirSync(DESIGN_MD_DIR).filter(f =>
|
|
39
|
+
fs.statSync(path.join(DESIGN_MD_DIR, f)).isDirectory()
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const matches = brands.filter(b => b.toLowerCase().includes(query.toLowerCase()));
|
|
43
|
+
|
|
44
|
+
if (matches.length === 0) {
|
|
45
|
+
log(`❌ No matches for "${query}"`, 'yellow');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
log(`\n🔍 Results for "${query}" (${matches.length}):\n`, 'cyan');
|
|
50
|
+
matches.forEach((brand, i) => {
|
|
51
|
+
const data = readDesignFile(brand);
|
|
52
|
+
const size = data ? Math.round(data.content.length / 1024) : 0;
|
|
53
|
+
log(` ${i + 1}. ${brand} ${colors.dim}(~${size}KB)${colors.reset}`);
|
|
54
|
+
});
|
|
55
|
+
console.log();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function addToProject(brand) {
|
|
59
|
+
const data = readDesignFile(brand);
|
|
60
|
+
|
|
61
|
+
if (!data) {
|
|
62
|
+
log(`❌ Brand "${brand}" not found`, 'yellow');
|
|
63
|
+
log('Run: node design-md-cli.js list', 'dim');
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const targetPath = path.join(process.cwd(), data.file);
|
|
68
|
+
|
|
69
|
+
if (fs.existsSync(targetPath)) {
|
|
70
|
+
log(`⚠️ ${data.file} already exists`, 'yellow');
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
fs.writeFileSync(targetPath, data.content);
|
|
75
|
+
log(`✅ Added ${data.file} for ${brand}`, 'green');
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function preview(brand) {
|
|
80
|
+
const data = readDesignFile(brand);
|
|
81
|
+
|
|
82
|
+
if (!data) {
|
|
83
|
+
log(`❌ Brand "${brand}" not found`, 'yellow');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
console.log('\n' + '='.repeat(60));
|
|
88
|
+
log(`📋 ${brand} - ${data.file}`, 'cyan');
|
|
89
|
+
console.log('='.repeat(60) + '\n');
|
|
90
|
+
|
|
91
|
+
// Show first 50 lines
|
|
92
|
+
const lines = data.content.split('\n').slice(0, 50);
|
|
93
|
+
console.log(lines.join('\n'));
|
|
94
|
+
console.log(colors.dim + '\n... (truncated)' + colors.reset);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function list() {
|
|
98
|
+
const brands = fs.readdirSync(DESIGN_MD_DIR).filter(f =>
|
|
99
|
+
fs.statSync(path.join(DESIGN_MD_DIR, f)).isDirectory()
|
|
100
|
+
).sort();
|
|
101
|
+
|
|
102
|
+
log(`\n📦 Available brands: ${brands.length}\n`, 'cyan');
|
|
103
|
+
|
|
104
|
+
// Group by first letter
|
|
105
|
+
const grouped = {};
|
|
106
|
+
brands.forEach(b => {
|
|
107
|
+
const letter = b[0].toUpperCase();
|
|
108
|
+
if (!grouped[letter]) grouped[letter] = [];
|
|
109
|
+
grouped[letter].push(b);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
Object.keys(grouped).sort().forEach(letter => {
|
|
113
|
+
console.log(`\n${colors.yellow}[${letter}]${colors.reset}`);
|
|
114
|
+
grouped[letter].forEach(b => {
|
|
115
|
+
const data = readDesignFile(b);
|
|
116
|
+
const size = data ? Math.round(data.content.length / 1024) : 0;
|
|
117
|
+
console.log(` ${b.padEnd(15)} ${colors.dim}${size}KB${colors.reset}`);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
console.log();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Main CLI
|
|
124
|
+
const cmd = process.argv[2];
|
|
125
|
+
const arg = process.argv[3];
|
|
126
|
+
|
|
127
|
+
switch (cmd) {
|
|
128
|
+
case 'search':
|
|
129
|
+
case 'find':
|
|
130
|
+
search(arg || '');
|
|
131
|
+
break;
|
|
132
|
+
|
|
133
|
+
case 'add':
|
|
134
|
+
addToProject(arg);
|
|
135
|
+
break;
|
|
136
|
+
|
|
137
|
+
case 'preview':
|
|
138
|
+
case 'view':
|
|
139
|
+
preview(arg);
|
|
140
|
+
break;
|
|
141
|
+
|
|
142
|
+
case 'list':
|
|
143
|
+
list();
|
|
144
|
+
break;
|
|
145
|
+
|
|
146
|
+
case 'init':
|
|
147
|
+
fs.mkdirSync('.design-systems', { recursive: true });
|
|
148
|
+
log('✅ Created .design-systems/', 'green');
|
|
149
|
+
break;
|
|
150
|
+
|
|
151
|
+
default:
|
|
152
|
+
console.log(`
|
|
153
|
+
${colors.cyan}design-md CLI${colors.reset} - Search and add DESIGN.md files
|
|
154
|
+
|
|
155
|
+
${colors.yellow}Commands:${colors.reset}
|
|
156
|
+
search <name> Search for a brand
|
|
157
|
+
add <brand> Add design file to project
|
|
158
|
+
preview <brand> Preview design file
|
|
159
|
+
list List all brands
|
|
160
|
+
init Create .design-systems/ dir
|
|
161
|
+
|
|
162
|
+
${colors.yellow}Examples:${colors.reset}
|
|
163
|
+
node design-md-cli.js search stripe
|
|
164
|
+
node design-md-cli.js add vercel
|
|
165
|
+
node design-md-cli.js preview figma
|
|
166
|
+
`);
|
|
167
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
|
|
4
|
+
|
|
5
|
+
**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
|
|
6
|
+
|
|
7
|
+
## 1. Think Before Coding
|
|
8
|
+
|
|
9
|
+
**Don't assume. Don't hide confusion. Surface tradeoffs.**
|
|
10
|
+
|
|
11
|
+
Before implementing:
|
|
12
|
+
- State your assumptions explicitly. If uncertain, ask.
|
|
13
|
+
- If multiple interpretations exist, present them - don't pick silently.
|
|
14
|
+
- If a simpler approach exists, say so. Push back when warranted.
|
|
15
|
+
- If something is unclear, stop. Name what's confusing. Ask.
|
|
16
|
+
|
|
17
|
+
## 2. Simplicity First
|
|
18
|
+
|
|
19
|
+
**Minimum code that solves the problem. Nothing speculative.**
|
|
20
|
+
|
|
21
|
+
- No features beyond what was asked.
|
|
22
|
+
- No abstractions for single-use code.
|
|
23
|
+
- No "flexibility" or "configurability" that wasn't requested.
|
|
24
|
+
- No error handling for impossible scenarios.
|
|
25
|
+
- If you write 200 lines and it could be 50, rewrite it.
|
|
26
|
+
|
|
27
|
+
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
|
|
28
|
+
|
|
29
|
+
## 3. Surgical Changes
|
|
30
|
+
|
|
31
|
+
**Touch only what you must. Clean up only your own mess.**
|
|
32
|
+
|
|
33
|
+
When editing existing code:
|
|
34
|
+
- Don't "improve" adjacent code, comments, or formatting.
|
|
35
|
+
- Don't refactor things that aren't broken.
|
|
36
|
+
- Match existing style, even if you'd do it differently.
|
|
37
|
+
- If you notice unrelated dead code, mention it - don't delete it.
|
|
38
|
+
|
|
39
|
+
When your changes create orphans:
|
|
40
|
+
- Remove imports/variables/functions that YOUR changes made unused.
|
|
41
|
+
- Don't remove pre-existing dead code unless asked.
|
|
42
|
+
|
|
43
|
+
The test: Every changed line should trace directly to the user's request.
|
|
44
|
+
|
|
45
|
+
## 4. Goal-Driven Execution
|
|
46
|
+
|
|
47
|
+
**Define success criteria. Loop until verified.**
|
|
48
|
+
|
|
49
|
+
Transform tasks into verifiable goals:
|
|
50
|
+
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
51
|
+
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
52
|
+
- "Refactor X" → "Ensure tests pass before and after"
|
|
53
|
+
|
|
54
|
+
For multi-step tasks, state a brief plan:
|
|
55
|
+
```
|
|
56
|
+
1. [Step] → verify: [check]
|
|
57
|
+
2. [Step] → verify: [check]
|
|
58
|
+
3. [Step] → verify: [check]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* karpathy-md.js - Apply Karpathy-style coding guidelines to projects
|
|
3
|
+
* Usage: node karpathy-md.js <command> [args]
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
// Colors
|
|
10
|
+
const C = {
|
|
11
|
+
reset: '\x1b[0m',
|
|
12
|
+
green: '\x1b[32m',
|
|
13
|
+
yellow: '\x1b[33m',
|
|
14
|
+
blue: '\x1b[34m',
|
|
15
|
+
cyan: '\x1b[36m',
|
|
16
|
+
dim: '\x1b[2m',
|
|
17
|
+
red: '\x1b[31m',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const log = (text, color = 'reset') => console.log(`${C[color]}${text}${C.reset}`);
|
|
21
|
+
|
|
22
|
+
// Source templates
|
|
23
|
+
const TEMPLATES_DIR = path.join(process.env.HOME || '', 'andrej-karpathy-skills');
|
|
24
|
+
const TOOLS_DIR = path.join(process.env.HOME || '', 'karpathy-tools');
|
|
25
|
+
|
|
26
|
+
// Check if template exists
|
|
27
|
+
function hasTemplate(name) {
|
|
28
|
+
return fs.existsSync(path.join(TEMPLATES_DIR, name));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Commands
|
|
32
|
+
const cmd = process.argv[2];
|
|
33
|
+
const arg = process.argv[3];
|
|
34
|
+
|
|
35
|
+
switch (cmd) {
|
|
36
|
+
case 'init':
|
|
37
|
+
case 'add': {
|
|
38
|
+
const target = path.join(process.cwd(), 'CLAUDE.md');
|
|
39
|
+
const source = path.join(TEMPLATES_DIR, 'CLAUDE.md');
|
|
40
|
+
|
|
41
|
+
if (fs.existsSync(target)) {
|
|
42
|
+
log(`⚠️ CLAUDE.md already exists`, 'yellow');
|
|
43
|
+
log('Options: karpathy-md merge (to append)', 'dim');
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!fs.existsSync(source)) {
|
|
48
|
+
log(`❌ Source template not found`, 'red');
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fs.copyFileSync(source, target);
|
|
53
|
+
log(`✅ Added CLAUDE.md with Karpathy guidelines`, 'green');
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
case 'merge':
|
|
58
|
+
case 'append': {
|
|
59
|
+
const target = path.join(process.cwd(), 'CLAUDE.md');
|
|
60
|
+
const source = path.join(TEMPLATES_DIR, 'CLAUDE.md');
|
|
61
|
+
|
|
62
|
+
if (!fs.existsSync(target)) {
|
|
63
|
+
log(`❌ No CLAUDE.md found in current directory`, 'yellow');
|
|
64
|
+
log('Run: karpathy-md init', 'dim');
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (!fs.existsSync(source)) {
|
|
69
|
+
log(`❌ Source template not found`, 'red');
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const existing = fs.readFileSync(target, 'utf8');
|
|
74
|
+
const toAppend = fs.readFileSync(source, 'utf8');
|
|
75
|
+
|
|
76
|
+
// Append under header
|
|
77
|
+
fs.writeFileSync(target, existing + '\n\n---\n\n' + toAppend);
|
|
78
|
+
log(`✅ Merged Karpathy guidelines into existing CLAUDE.md`, 'green');
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
case 'view':
|
|
83
|
+
case 'show':
|
|
84
|
+
if (hasTemplate('CLAUDE.md')) {
|
|
85
|
+
console.log(fs.readFileSync(path.join(TEMPLATES_DIR, 'CLAUDE.md'), 'utf8'));
|
|
86
|
+
} else {
|
|
87
|
+
log(`❌ Template not found`, 'red');
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
|
|
91
|
+
case 'examples':
|
|
92
|
+
if (hasTemplate('EXAMPLES.md')) {
|
|
93
|
+
console.log(fs.readFileSync(path.join(TEMPLATES_DIR, 'EXAMPLES.md'), 'utf8'));
|
|
94
|
+
} else {
|
|
95
|
+
log(`❌ Examples file not found`, 'red');
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
|
|
99
|
+
case 'rules':
|
|
100
|
+
log(`\n📋 The 4 Karpathy Rules:\n`, 'cyan');
|
|
101
|
+
console.log(`
|
|
102
|
+
${C.yellow}1. Think Before Coding${C.reset}
|
|
103
|
+
• State assumptions explicitly
|
|
104
|
+
• Ask when uncertain - don't guess
|
|
105
|
+
• Present multiple interpretations
|
|
106
|
+
|
|
107
|
+
${C.yellow}2. Simplicity First${C.reset}
|
|
108
|
+
• No speculative features
|
|
109
|
+
• No over-engineering
|
|
110
|
+
• If 200 lines could be 50, rewrite
|
|
111
|
+
|
|
112
|
+
${C.yellow}3. Surgical Changes${C.reset}
|
|
113
|
+
• Touch only what's needed
|
|
114
|
+
• Don't "improve" unrelated code
|
|
115
|
+
• Match existing style
|
|
116
|
+
|
|
117
|
+
${C.yellow}4. Goal-Driven Execution${C.reset}
|
|
118
|
+
• Define success criteria first
|
|
119
|
+
• Write tests to verify
|
|
120
|
+
• Loop until goals are met
|
|
121
|
+
`);
|
|
122
|
+
break;
|
|
123
|
+
|
|
124
|
+
default:
|
|
125
|
+
console.log(`
|
|
126
|
+
${C.cyan}karpathy-md${C.reset} - Apply Karpathy-style coding guidelines
|
|
127
|
+
|
|
128
|
+
${C.yellow}Commands:${C.reset}
|
|
129
|
+
init Add CLAUDE.md to current project
|
|
130
|
+
merge Append guidelines to existing CLAUDE.md
|
|
131
|
+
view Show the guidelines
|
|
132
|
+
examples Show practical examples
|
|
133
|
+
rules Show the 4 rules summary
|
|
134
|
+
|
|
135
|
+
${C.yellow}Examples:${C.reset}
|
|
136
|
+
cd my-project && karpathy-md init
|
|
137
|
+
karpathy-md view
|
|
138
|
+
karpathy-md rules
|
|
139
|
+
`);
|
|
140
|
+
}
|
package/scripts/audit-pack.js
CHANGED
|
@@ -34,6 +34,19 @@ const violations = files
|
|
|
34
34
|
blockedPatterns.some(pattern => pattern.test(filePath))
|
|
35
35
|
));
|
|
36
36
|
|
|
37
|
+
const requiredPrefixes = [
|
|
38
|
+
'resources/local/agents.md/',
|
|
39
|
+
'resources/local/awesome-design-md/',
|
|
40
|
+
'resources/local/karpathy-tools/',
|
|
41
|
+
'resources/local/page-agent/',
|
|
42
|
+
'resources/local/ecc/',
|
|
43
|
+
'skills/',
|
|
44
|
+
'memories/',
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const missingRequired = requiredPrefixes
|
|
48
|
+
.filter(prefix => !files.some(file => file.path.startsWith(prefix)));
|
|
49
|
+
|
|
37
50
|
if (violations.length > 0) {
|
|
38
51
|
console.error('Package audit failed. Blocked files would be published:');
|
|
39
52
|
for (const filePath of violations.slice(0, 50)) {
|
|
@@ -45,4 +58,12 @@ if (violations.length > 0) {
|
|
|
45
58
|
process.exit(1);
|
|
46
59
|
}
|
|
47
60
|
|
|
61
|
+
if (missingRequired.length > 0) {
|
|
62
|
+
console.error('Package audit failed. Required packaged paths are missing:');
|
|
63
|
+
for (const prefix of missingRequired) {
|
|
64
|
+
console.error(`- ${prefix}`);
|
|
65
|
+
}
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
|
|
48
69
|
console.log(`Package audit passed: ${files.length} files, ${(pack.size / 1024 / 1024).toFixed(2)} MB tgz, ${(pack.unpackedSize / 1024 / 1024).toFixed(2)} MB unpacked.`);
|
package/skills/coding.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# ❄️ Coding Skill
|
|
2
|
+
|
|
3
|
+
Expert-level coding assistance with automatic tool usage.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use this skill when the user asks to:
|
|
8
|
+
- Write code, create files
|
|
9
|
+
- Fix bugs
|
|
10
|
+
- Refactor code
|
|
11
|
+
- Understand existing code
|
|
12
|
+
- Review code
|
|
13
|
+
- Add features
|
|
14
|
+
|
|
15
|
+
## How to Use
|
|
16
|
+
|
|
17
|
+
### Step 1: Understand the Task
|
|
18
|
+
1. Read relevant project files to understand context
|
|
19
|
+
2. Check for CLAUDE.md, WINTER.md, or other guidelines
|
|
20
|
+
3. Identify the scope of changes needed
|
|
21
|
+
|
|
22
|
+
### Step 2: Plan Changes
|
|
23
|
+
For simple tasks:
|
|
24
|
+
- Just do it
|
|
25
|
+
|
|
26
|
+
For complex tasks:
|
|
27
|
+
```
|
|
28
|
+
1. [Action] → verify: [check]
|
|
29
|
+
2. [Action] → verify: [check]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 3: Execute
|
|
33
|
+
- Read files before modifying
|
|
34
|
+
- Use Write for new files
|
|
35
|
+
- Use Edit for existing files (surgical changes)
|
|
36
|
+
- Use Bash for running commands, git, tests
|
|
37
|
+
- Use Glob/Grep to find relevant files
|
|
38
|
+
|
|
39
|
+
### Step 4: Verify
|
|
40
|
+
- Run tests if available
|
|
41
|
+
- Check the changes work
|
|
42
|
+
- Report what was done
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Write New File
|
|
47
|
+
```
|
|
48
|
+
User: Create a REST API for users
|
|
49
|
+
→ Write users.js with Express routes
|
|
50
|
+
→ Test with curl
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Fix Bug
|
|
54
|
+
```
|
|
55
|
+
User: Fix the login bug
|
|
56
|
+
→ Read auth.js to understand the issue
|
|
57
|
+
→ Edit the buggy line
|
|
58
|
+
→ Test the fix
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Understand Code
|
|
62
|
+
```
|
|
63
|
+
User: How does this module work?
|
|
64
|
+
→ Read the module files
|
|
65
|
+
→ Summarize functionality
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Key Principles
|
|
69
|
+
|
|
70
|
+
1. **Don't assume** - Read code to understand before modifying
|
|
71
|
+
2. **Be surgical** - Only change what's needed
|
|
72
|
+
3. **Verify** - Test your changes work
|
|
73
|
+
4. **Be proactive** - Call tools automatically, don't wait to be asked
|
|
74
|
+
|
|
75
|
+
## Anti-Patterns
|
|
76
|
+
|
|
77
|
+
❌ "Here's the code you need:" (describe without writing)
|
|
78
|
+
✅ Write the file directly
|
|
79
|
+
|
|
80
|
+
❌ "I think you should..." (assume without reading)
|
|
81
|
+
✅ Read the relevant files first
|
|
82
|
+
|
|
83
|
+
❌ Change 500 lines for a 5-line fix
|
|
84
|
+
✅ Surgical edit only
|
|
85
|
+
|
|
86
|
+
❌ "Try this and let me know if it works"
|
|
87
|
+
✅ Run tests, verify, report results
|
package/skills/debug.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ❄️ Debug Skill
|
|
2
|
+
|
|
3
|
+
Systematic debugging with automatic tool usage.
|
|
4
|
+
|
|
5
|
+
## Debugging Process
|
|
6
|
+
|
|
7
|
+
### 1. Reproduce
|
|
8
|
+
- Run the code to see the error
|
|
9
|
+
- Note the exact error message
|
|
10
|
+
- Identify when it happens
|
|
11
|
+
|
|
12
|
+
### 2. Understand
|
|
13
|
+
- Read the relevant code
|
|
14
|
+
- Trace the execution flow
|
|
15
|
+
- Identify the root cause
|
|
16
|
+
|
|
17
|
+
### 3. Fix
|
|
18
|
+
- Make surgical changes
|
|
19
|
+
- Don't over-engineer the fix
|
|
20
|
+
|
|
21
|
+
### 4. Verify
|
|
22
|
+
- Run the code again
|
|
23
|
+
- Confirm the bug is fixed
|
|
24
|
+
- Check for regressions
|
|
25
|
+
|
|
26
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
### Bug: TypeError: Cannot read property 'x' of undefined
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
1. Reproduce → Run code, see error
|
|
32
|
+
2. Read file with error
|
|
33
|
+
3. Edit: Add null check or fix data source
|
|
34
|
+
4. Verify → Run again
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Bug: API returns 500
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
1. Reproduce → Call API, see 500
|
|
41
|
+
2. Read server logs (Bash: cat logs)
|
|
42
|
+
3. Read handler code
|
|
43
|
+
4. Fix the issue
|
|
44
|
+
5. Verify → Call API again
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Key Commands
|
|
48
|
+
|
|
49
|
+
- `Read` - Read source files
|
|
50
|
+
- `Bash` - Run commands, check logs
|
|
51
|
+
- `Edit` - Fix the bug
|
|
52
|
+
- `Grep` - Find related code
|
|
53
|
+
|
|
54
|
+
## Anti-Patterns
|
|
55
|
+
|
|
56
|
+
❌ Blind guessing
|
|
57
|
+
✅ Reproduce first, then fix
|
|
58
|
+
|
|
59
|
+
❌ Over-engineered fixes
|
|
60
|
+
✅ Surgical changes
|
|
61
|
+
|
|
62
|
+
❌ "It might be..." without evidence
|
|
63
|
+
✅ Read code, trace execution
|
package/skills/test.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# ❄️ Test Skill
|
|
2
|
+
|
|
3
|
+
Test generation and execution.
|
|
4
|
+
|
|
5
|
+
## Test Types
|
|
6
|
+
|
|
7
|
+
### Unit Tests
|
|
8
|
+
- Test individual functions
|
|
9
|
+
- Mock dependencies
|
|
10
|
+
- Fast to run
|
|
11
|
+
|
|
12
|
+
### Integration Tests
|
|
13
|
+
- Test API endpoints
|
|
14
|
+
- Test database operations
|
|
15
|
+
- Slower but comprehensive
|
|
16
|
+
|
|
17
|
+
### E2E Tests
|
|
18
|
+
- Test full user flows
|
|
19
|
+
- Use browser automation
|
|
20
|
+
- Slowest but most realistic
|
|
21
|
+
|
|
22
|
+
## Process
|
|
23
|
+
|
|
24
|
+
### 1. Identify What to Test
|
|
25
|
+
- Find the code to test
|
|
26
|
+
- Identify edge cases
|
|
27
|
+
- Check existing tests
|
|
28
|
+
|
|
29
|
+
### 2. Write Tests
|
|
30
|
+
- Use appropriate framework (Vitest, Jest, etc.)
|
|
31
|
+
- Follow project conventions
|
|
32
|
+
- Cover happy path AND edge cases
|
|
33
|
+
|
|
34
|
+
### 3. Run Tests
|
|
35
|
+
```bash
|
|
36
|
+
npm test
|
|
37
|
+
# or
|
|
38
|
+
npm run test:watch
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 4. Verify
|
|
42
|
+
- All tests pass
|
|
43
|
+
- Coverage improved
|
|
44
|
+
- No regressions
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
|
|
48
|
+
### Add Tests for Function
|
|
49
|
+
```
|
|
50
|
+
User: Add tests for calculateTotal
|
|
51
|
+
→ Read calculateTotal function
|
|
52
|
+
→ Write tests for:
|
|
53
|
+
- Normal case
|
|
54
|
+
- Empty array
|
|
55
|
+
- Negative values
|
|
56
|
+
→ Run tests
|
|
57
|
+
→ Report coverage
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Key Commands
|
|
61
|
+
|
|
62
|
+
- `Read` - Read source and existing tests
|
|
63
|
+
- `Write` - Create test files
|
|
64
|
+
- `Bash` - Run test commands
|
|
@@ -39,8 +39,14 @@ export function extractInlineToolCalls(content, idFactory = index => `inline-${D
|
|
|
39
39
|
};
|
|
40
40
|
const pushParsedToolObject = (parsed) => {
|
|
41
41
|
const { name, args } = extractToolPayload(parsed, parseToolArguments);
|
|
42
|
-
if (
|
|
43
|
-
|
|
42
|
+
if (name && typeof name === 'string') {
|
|
43
|
+
pushToolCall(name, args, 'object');
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const inferred = inferSafeToolFromBareArguments(parsed);
|
|
48
|
+
if (!inferred) return false;
|
|
49
|
+
pushToolCall(inferred.name, inferred.args, 'bare-arguments');
|
|
44
50
|
return true;
|
|
45
51
|
};
|
|
46
52
|
|
|
@@ -304,6 +310,22 @@ function extractToolPayload(payload, parseArguments) {
|
|
|
304
310
|
};
|
|
305
311
|
}
|
|
306
312
|
|
|
313
|
+
export function inferSafeToolFromBareArguments(value) {
|
|
314
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) return null;
|
|
315
|
+
|
|
316
|
+
const keys = Object.keys(value);
|
|
317
|
+
if (keys.length === 0) return null;
|
|
318
|
+
|
|
319
|
+
const hasGenericPayloadKeys = keys.some(key => /^(arguments?|args?|input|parameters?|params?|tool[_-]?input|function[_-]?arguments?)$/i.test(key));
|
|
320
|
+
if (!hasGenericPayloadKeys) return null;
|
|
321
|
+
|
|
322
|
+
const name = value.name || value.tool || value.tool_name || value.function_name || null;
|
|
323
|
+
if (typeof name !== 'string' || !name.trim()) return null;
|
|
324
|
+
|
|
325
|
+
const args = value.arguments ?? value.args ?? value.input ?? value.parameters ?? value.params ?? value.tool_input ?? value.function_arguments ?? {};
|
|
326
|
+
return { name, args };
|
|
327
|
+
}
|
|
328
|
+
|
|
307
329
|
export function formatToolCallsForMessage(toolCalls) {
|
|
308
330
|
return toolCalls.map((tc) => ({
|
|
309
331
|
id: tc.id,
|