js-agents-entropy-scan
2
总安装量
1
周安装量
#67255
全站排名
安装命令
npx skills add https://github.com/mksteady/mkskills --skill js-agents-entropy-scan
Agent 安装分布
amp
1
cline
1
opencode
1
cursor
1
kimi-cli
1
codex
1
Skill 文档
JS Agents 代ç éçµæ«æ
é对纯 JS + JSDoc å¾®å æ ¸æ¶æç代ç è´¨éæ«æå·¥å ·ã
ä½¿ç¨æ¹å¼
/js-agents-entropy-scan # æ§è¡å®æ´æ«æ
/js-agents-entropy-scan --fix # æ«æå¹¶ä¿®å¤
/js-agents-entropy-scan --check 1,3 # ä»
æ§è¡æå®æ£æ¥é¡¹
æ£æ¥é¡¹
| # | æ£æ¥é¡¹ | é£é© | 说æ |
|---|---|---|---|
| 1 | JSDoc è¦çç | ä¸ | 导åºå½æ°/类缺å°ç±»å注解 |
| 2 | TODO/FIXME æ¸ ç | ä½ | æªå®æçææ¯åºå¡æ è®° |
| 3 | Console æ®ç | ä¸ | ç产代ç ä¸çè°è¯è¾åº |
| 4 | é误å¤çè§è | é« | catch ååæ²¡é误æéæ°æåºæ¶ä¸¢å¤±ä¸ä¸æ |
| 5 | 导åºä¸è´æ§ | ä¸ | index.js æªå¯¼åºæ¨¡åå å ¬å¼ API |
| 6 | æ»ä»£ç æ£æµ | ä½ | æªä½¿ç¨çå¯¼åºæå é¨å½æ° |
| 7 | 弿¥é误å¤ç | é« | async 彿°ç¼ºå° try-catch ææªå¤ç rejection |
| 8 | 模å循ç¯ä¾èµ | é« | 模åé´å¾ªç¯ import 导è´è¿è¡æ¶é®é¢ |
æ«æå½ä»¤
1. JSDoc è¦çç
# æ¾åºç¼ºå° JSDoc ç导åºå½æ°
rg "^export (async )?function \w+\(" js/agents --glob '*.js' -B2 | \
grep -v "@param\|@returns\|@typedef"
ä¿®å¤çç¥ï¼ä¸ºå¯¼åºå½æ°æ·»å @paramã@returns 注解ã
2. TODO/FIXME æ¸ ç
rg "TODO|FIXME|HACK|XXX" js/agents --glob '*.js' -n
ä¿®å¤çç¥ï¼è¯ä¼°æ¯ä¸ªæ è®°ï¼å®ææå建 Issue 追踪ã
3. Console æ®ç
# æé¤ cli/ãexamples/ãtest æä»¶
rg "console\.(log|warn|error|debug)" js/agents --glob '*.js' \
--glob '!cli/*' --glob '!**/examples/*' --glob '!*test*.js' -n
ä¿®å¤çç¥ï¼
- æ¿æ¢ä¸º
createLogger() - æä½¿ç¨
if (DEBUG)æ¡ä»¶å 裹
4. é误å¤çè§è
# æ£æ¥ç©º catch å
rg "catch\s*\([^)]*\)\s*\{\s*\}" js/agents --glob '*.js' -n
# æ£æ¥ catch åç´æ¥ throw errï¼ä¸¢å¤±å æ ï¼
rg "catch.*\{[^}]*throw\s+\w+\s*;?\s*\}" js/agents --glob '*.js' -U -n
ä¿®å¤çç¥ï¼
- 空 catchï¼æ·»å æ¥å¿æéæ°æåº
- ç´æ¥ throwï¼ä½¿ç¨
throw new Error('context', { cause: err })
5. 导åºä¸è´æ§
# æ£æ¥ index.js æ¯å¦å¯¼åºäºç®å½ä¸çæææ¨¡å
for dir in js/agents/*/; do
if [ -f "${dir}index.js" ]; then
echo "=== $dir ==="
# ååºç®å½ä¸ç .js æä»¶
ls "${dir}"*.js 2>/dev/null | grep -v index.js | while read f; do
base=$(basename "$f" .js)
if ! grep -q "from.*['\"]\./${base}" "${dir}index.js"; then
echo "Missing export: $base"
fi
done
fi
done
6. æ»ä»£ç æ£æµ
# æ¥æ¾æªè¢«å¼ç¨ç导åº
for f in $(rg -l "^export " js/agents --glob '*.js'); do
exports=$(rg "^export (const|function|class) (\w+)" "$f" -or '$2')
for exp in $exports; do
# æç´¢å
¶ä»æä»¶æ¯å¦å¼ç¨
count=$(rg "import.*\b${exp}\b|from.*${exp}" js/agents --glob '*.js' -c 2>/dev/null | wc -l)
if [ "$count" -eq 0 ]; then
echo "Unused export: $exp in $f"
fi
done
done
7. 弿¥é误å¤ç
# æ¥æ¾æ²¡æ try-catch ç async 彿°ï¼ç®åæ£æµï¼
rg "async function \w+\([^)]*\)\s*\{" js/agents --glob '*.js' -A10 | \
grep -B10 "async function" | grep -v "try\s*{"
8. 模å循ç¯ä¾èµ
ä½¿ç¨ madge ææå¨åæï¼
# ç®åæ£æµï¼æ¥æ¾ç¸äº import çæä»¶å¯¹
rg "^import.*from ['\"]\./" js/agents --glob '*.js' -n | \
awk -F: '{print $1, $2}' | sort | uniq -d
æ§è¡æµç¨
- æ«æé¶æ®µï¼ä¾æ¬¡æ§è¡ 8 é¡¹æ£æ¥ï¼æ¶éé®é¢æ¸ å
- æ¥åé¶æ®µï¼çæç»æåæ¥åï¼æé£é©å级
- ç¡®è®¤é¶æ®µï¼è¯¢é®ç¨æ·æ¯å¦ä¿®å¤
- ä¿®å¤é¶æ®µï¼æä¼å 级èªå¨ä¿®å¤
- éªè¯é¶æ®µï¼è¿è¡
npm testç¡®ä¿æ åå½
æ¥åæ ¼å¼
ð JS Agents 代ç éçµæ«ææ¥å
æ«æèå´ï¼js/agents/**/*.js
æä»¶æ°éï¼393 个
æ«ææ¶é´ï¼2025-01-12 14:30
ââââââââââââââââââââââââââââââââââââââââ
ãæ±æ»ã
æ£æ¥é¡¹ | åç° | é£é©
-------------------|------|------
JSDoc è¦çç | 45 | ä¸
TODO/FIXME æ¸
ç | 52 | ä½
Console æ®ç | 12 | ä¸
é误å¤çè§è | 8 | é«
导åºä¸è´æ§ | 5 | ä¸
æ»ä»£ç æ£æµ | 3 | ä½
弿¥é误å¤ç | 15 | é«
模å循ç¯ä¾èµ | 2 | é«
æ»è®¡ï¼142 夿æ¯åºå¡
ââââââââââââââââââââââââââââââââââââââââ
ãè¯¦ç»æ¸
åã
ð´ é«ä¼å
级ï¼25 å¤ï¼
1. é误å¤çè§èï¼8 å¤ï¼
- js/agents/vfs/vfs.storage.js:45 - 空 catch å
- js/agents/llm/rate-limit.js:78 - catch åç´æ¥ throw
2. 弿¥é误å¤çï¼15 å¤ï¼
- js/agents/mcp/mcp-client.js:120 - async 彿°æ try-catch
...
3. 模å循ç¯ä¾èµï¼2 å¤ï¼
- js/agents/core/kernel.js â js/agents/core/plugin.js
...
[æ´å¤è¯¦æ
...]
ââââââââââââââââââââââââââââââââââââââââ
æ¯å¦éè¦ä¿®å¤ï¼
1. å
¨é¨ä¿®å¤
2. ä»
ä¿®å¤é«ä¼å
级
3. èªå®ä¹éæ©
4. ä¸ä¿®å¤
ä¿®å¤çº¦æ
- ä¿®å¤åå¿
é¡»éè¿
npm test - JSDoc ä¿®å¤ä¿å®ï¼ä» æ·»å ææ¾çç±»åæ³¨è§£
- Console æ¿æ¢ä¸ºé¡¹ç®å
ç
createLogger() - é误å¤ç使ç¨
{ cause }ä¿çåå§é误 - ä¸å é¤å¯è½è¢«å¨æå¼ç¨ç导åº
项ç®ç¹å®è§è
æ¥å¿è§è
// â é误
console.log('debug:', data);
// â
æ£ç¡®
import { createLogger } from '../shared/utils/logger.js';
const logger = createLogger('module-name');
logger.debug('message', { data });
é误å¤çè§è
// â é误
try { ... } catch (e) { throw e; }
// â
æ£ç¡®
try { ... } catch (e) {
throw new Error(`Context: ${e.message}`, { cause: e });
}
JSDoc è§è
// â
导åºå½æ°å¿
é¡»æç±»å注解
/**
* @param {string} name
* @param {Record<string, unknown>} [options]
* @returns {Promise<Result>}
*/
export async function doSomething(name, options = {}) { ... }