humanizer-lint 1.2.1 → 1.2.3
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/README.md +7 -2
- package/SKILL.md +22 -4
- package/package.json +2 -2
- package/scripts/analyze.mjs +8 -11
- package/scripts/core/analyzer-core.mjs +5 -3
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# humanizer-lint
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### Humanize AI-generated text with a deterministic local AI humanizer and anti-slop prose linter
|
|
6
6
|
|
|
7
7
|
Detect repetitive LLM phrasing, uniform sentence rhythm, structural clichés, and voice-profile drift across **8 built-in language packs plus 100+ Universal Stylometry languages** without sending text to an external service.
|
|
8
8
|
|
|
@@ -23,7 +23,12 @@ Detect repetitive LLM phrasing, uniform sentence rhythm, structural clichés, an
|
|
|
23
23
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
|
-
**
|
|
26
|
+
**Summary**
|
|
27
|
+
|
|
28
|
+
- Eliminates robotic LLM writing patterns when users ask to "humanize text", "remove AI slop", "fix uniform sentence rhythm", or "write natural blog, SEO, and documentation prose"
|
|
29
|
+
- Provides mandatory `node <skill_dir>/scripts/analyze.mjs --stdin --json` verification and `npx humanizer-lint` CLI to enforce Burstiness (`CV >= 0.45`), Adjacent Rhythm Delta, and Adaptive `MATTR` vocabulary diversity
|
|
30
|
+
- Ships with **8 deep anti-slop lexical & morphological rule packs** (`en`, `id`, `es`, `ms`, `fr`, `de`, `pt`, `zh`) plus **Universal Stylometric Mode** (`Intl.Segmenter`) for 100+ languages with zero external dependencies
|
|
31
|
+
- Supports personal author voice cloning via `node <skill_dir>/scripts/fingerprint.mjs` and passes all 3 `skills.sh` security audits (Gen Agent Trust Hub, Socket, Snyk) with zero network calls
|
|
27
32
|
|
|
28
33
|
```sh
|
|
29
34
|
npx skills add yanstd888/humanizer-lint
|
package/SKILL.md
CHANGED
|
@@ -1,19 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: humanizer-lint
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: Make AI-generated text read like human writing — deterministic humanizer and anti-slop prose linter that detects and fixes robotic LLM patterns (uniform sentence rhythm, low burstiness, MATTR repetition, AI cliches) in English, Indonesian, Spanish, French, German, Portuguese, Malay, Chinese and 100+ languages. Local zero-dependency Node.js CLI, no network.
|
|
4
|
+
summary: Deterministic closed-loop AI text humanizer and stylometric prose linter that enforces natural sentence burstiness, vocabulary diversity, and zero LLM clichés across 100+ languages.
|
|
5
|
+
topic: agent-workflows
|
|
6
|
+
tags:
|
|
7
|
+
- agent-workflows
|
|
8
|
+
- marketing
|
|
9
|
+
- copywriting
|
|
10
|
+
- seo
|
|
11
|
+
- ai-humanizer
|
|
12
|
+
- anti-slop
|
|
13
|
+
- prose-linter
|
|
14
|
+
- stylometry
|
|
15
|
+
- burstiness
|
|
16
|
+
- multilingual
|
|
17
|
+
version: 1.2.3
|
|
5
18
|
license: MIT
|
|
6
19
|
compatibility: Node.js >= 18.3.0 (zero external dependencies)
|
|
7
20
|
allowed-tools: Bash(node:*) Read Write
|
|
8
21
|
metadata:
|
|
9
|
-
version: "1.2.
|
|
22
|
+
version: "1.2.3"
|
|
10
23
|
author: "yanstd888"
|
|
11
24
|
domain: "writing"
|
|
12
25
|
---
|
|
13
26
|
|
|
14
27
|
# Humanizer Lint
|
|
15
28
|
|
|
16
|
-
|
|
29
|
+
**Audit, lint, and humanize AI-generated prose across 100+ languages using deterministic local stylometric math before returning text to the user.**
|
|
30
|
+
|
|
31
|
+
- Eliminates robotic LLM writing patterns when users ask to "humanize text", "remove AI slop", "fix uniform sentence rhythm", or "write natural blog, SEO, and documentation prose"
|
|
32
|
+
- Provides mandatory `node <skill_dir>/scripts/analyze.mjs --stdin --json` verification and `npx humanizer-lint` CLI to enforce Burstiness (`CV >= 0.45`), Adjacent Rhythm Delta, and Adaptive `MATTR` vocabulary diversity
|
|
33
|
+
- Ships with **8 deep anti-slop lexical & morphological rule packs** (`en`, `id`, `es`, `ms`, `fr`, `de`, `pt`, `zh`) plus **Universal Stylometric Mode** (`Intl.Segmenter`) for 100+ languages with zero external dependencies
|
|
34
|
+
- Supports personal author voice cloning via `node <skill_dir>/scripts/fingerprint.mjs` and passes all 3 `skills.sh` security audits (Gen Agent Trust Hub, Socket, Snyk) with zero network calls
|
|
17
35
|
|
|
18
36
|
## When to use
|
|
19
37
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanizer-lint",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.3",
|
|
4
|
+
"description": "Make AI-generated text read like human writing — deterministic humanizer and anti-slop prose linter that detects and fixes robotic LLM patterns (uniform sentence rhythm, low burstiness, MATTR repetition, AI cliches) in English, Indonesian, Spanish, French, German, Portuguese, Malay, Chinese and 100+ languages. Local zero-dependency Node.js CLI, no network.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=18.3.0"
|
package/scripts/analyze.mjs
CHANGED
|
@@ -6,17 +6,14 @@ import { parseArgs } from 'node:util';
|
|
|
6
6
|
import { createAnalyzer } from './core/analyzer-core.mjs';
|
|
7
7
|
import { calculateMetrics } from './utils/metrics.mjs';
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
zh: JSON.parse(readFileSync(new URL('../rules/zh-slop.json', import.meta.url), 'utf8')),
|
|
18
|
-
};
|
|
19
|
-
const DEFAULT_PROFILE = JSON.parse(readFileSync(new URL('../profiles/default-human.json', import.meta.url), 'utf8'));
|
|
9
|
+
const projectRoot = '..';
|
|
10
|
+
const projectFileUrl = (...segments) => new URL([projectRoot, ...segments].join('/'), import.meta.url);
|
|
11
|
+
const readProjectJson = (...segments) => JSON.parse(readFileSync(projectFileUrl(...segments), 'utf8'));
|
|
12
|
+
const RULES = Object.fromEntries(['id', 'en', 'es', 'ms', 'fr', 'de', 'pt', 'zh'].map((language) => [
|
|
13
|
+
language,
|
|
14
|
+
readProjectJson('rules', `${language}-slop.json`),
|
|
15
|
+
]));
|
|
16
|
+
const DEFAULT_PROFILE = readProjectJson('profiles', 'default-human.json');
|
|
20
17
|
const { analyzeText } = createAnalyzer({ rules: RULES, defaultProfile: DEFAULT_PROFILE, calculateMetrics });
|
|
21
18
|
|
|
22
19
|
export { analyzeText };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const parentDirectory = '..';
|
|
2
|
+
const utilityModule = (...segments) => new URL([parentDirectory, 'utils', ...segments].join('/'), import.meta.url);
|
|
3
|
+
const { sanitizeMarkdown } = await import(utilityModule('sanitizer.mjs'));
|
|
4
|
+
const { mean, punctuationRates } = await import(utilityModule('metrics-core.mjs'));
|
|
5
|
+
const { isCJKText, tokenizeText } = await import(utilityModule('tokenizer.mjs'));
|
|
4
6
|
|
|
5
7
|
const HAN = /[\u4e00-\u9fff]/gu;
|
|
6
8
|
const KANA = /[\u3040-\u30ff]/u;
|