ezai-marketplace 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/.claude-plugin/marketplace.json +90 -0
- package/README.md +70 -0
- package/bin/ezai.js +74 -0
- package/package.json +51 -0
- package/plugins/ezai-code-formatter/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-code-formatter/SKILL.md +65 -0
- package/plugins/ezai-code-formatter/evals/eval_set_code_formatter.json +23 -0
- package/plugins/ezai-code-formatter/references/index.md +36 -0
- package/plugins/ezai-code-formatter/references/javascript/style-layout.instructions.md +69 -0
- package/plugins/ezai-code-formatter/references/python/style-layout.instructions.md +70 -0
- package/plugins/ezai-docs-writer/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-docs-writer/SKILL.md +119 -0
- package/plugins/ezai-docs-writer/evals/eval_set_docs_writer.json +23 -0
- package/plugins/ezai-docs-writer/references/index.md +48 -0
- package/plugins/ezai-docs-writer/references/javascript/standards.md +112 -0
- package/plugins/ezai-docs-writer/references/python/plugins-deploy.md +109 -0
- package/plugins/ezai-docs-writer/references/python/quadrants-templates.md +316 -0
- package/plugins/ezai-docs-writer/references/python/standards.md +177 -0
- package/plugins/ezai-persona-senior-dev/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-persona-senior-dev/SKILL.md +74 -0
- package/plugins/ezai-persona-senior-dev/evals/eval_set_persona_senior_dev.json +23 -0
- package/plugins/ezai-project-architect/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-project-architect/SKILL.md +32 -0
- package/plugins/ezai-project-architect/evals/eval_set_project_architect.json +23 -0
- package/plugins/ezai-project-architect/references/index.md +30 -0
- package/plugins/ezai-project-architect/references/javascript/architecture.md +106 -0
- package/plugins/ezai-project-architect/references/python/architecture.md +100 -0
- package/plugins/ezai-project-config/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-project-config/SKILL.md +29 -0
- package/plugins/ezai-project-config/evals/eval_set_project_config.json +23 -0
- package/plugins/ezai-project-config/references/index.md +30 -0
- package/plugins/ezai-project-config/references/javascript/config.md +103 -0
- package/plugins/ezai-project-config/references/python/config.md +106 -0
- package/plugins/ezai-project-performance/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-project-performance/SKILL.md +29 -0
- package/plugins/ezai-project-performance/evals/eval_set_project_performance.json +23 -0
- package/plugins/ezai-project-performance/references/index.md +30 -0
- package/plugins/ezai-project-performance/references/javascript/performance.md +94 -0
- package/plugins/ezai-project-performance/references/python/performance.md +78 -0
- package/plugins/ezai-project-quality/.claude-plugin/plugin.json +10 -0
- package/plugins/ezai-project-quality/SKILL.md +29 -0
- package/plugins/ezai-project-quality/evals/eval_set_project_quality.json +23 -0
- package/plugins/ezai-project-quality/references/index.md +30 -0
- package/plugins/ezai-project-quality/references/javascript/quality.md +100 -0
- package/plugins/ezai-project-quality/references/python/quality.md +128 -0
- package/src/catalogue.js +29 -0
- package/src/commands/info.js +19 -0
- package/src/commands/install.js +177 -0
- package/src/commands/list.js +13 -0
- package/src/commands/search.js +16 -0
- package/src/commands/uninstall.js +97 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
|
|
3
|
+
"name": "ezai-marketplace",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "Curated marketplace of AI skills for senior developers (Python / JS/TS)",
|
|
6
|
+
"owner": {
|
|
7
|
+
"name": "ezai",
|
|
8
|
+
"email": "floriansalort@gmail.com"
|
|
9
|
+
},
|
|
10
|
+
"updatedAt": "2026-05-28",
|
|
11
|
+
"plugins": [
|
|
12
|
+
{
|
|
13
|
+
"name": "ezai-code-formatter",
|
|
14
|
+
"description": "Apply source file visual structure to match project conventions: section header comments, import ordering, spacing, and formatting — without touching logic.",
|
|
15
|
+
"source": "./plugins/ezai-code-formatter",
|
|
16
|
+
"category": "development",
|
|
17
|
+
"version": "1.0.0",
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "ezai",
|
|
20
|
+
"email": "floriansalort@gmail.com"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "ezai-docs-writer",
|
|
25
|
+
"description": "Produce documentation content for software projects: MkDocs pages, API references, changelogs, and technical writing in a consistent style.",
|
|
26
|
+
"source": "./plugins/ezai-docs-writer",
|
|
27
|
+
"category": "development",
|
|
28
|
+
"version": "1.0.0",
|
|
29
|
+
"author": {
|
|
30
|
+
"name": "ezai",
|
|
31
|
+
"email": "floriansalort@gmail.com"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "ezai-persona-senior-dev",
|
|
36
|
+
"description": "Elite Senior Developer persona for enterprise-grade Python and JavaScript/TypeScript projects. Apply for significant development tasks requiring senior-level judgment.",
|
|
37
|
+
"source": "./plugins/ezai-persona-senior-dev",
|
|
38
|
+
"category": "development",
|
|
39
|
+
"version": "1.0.0",
|
|
40
|
+
"author": {
|
|
41
|
+
"name": "ezai",
|
|
42
|
+
"email": "floriansalort@gmail.com"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "ezai-project-architect",
|
|
47
|
+
"description": "Architecture and design standards for Python and JS/TS projects: module structure, public API surface, and design patterns (Repository, Service, Factory).",
|
|
48
|
+
"source": "./plugins/ezai-project-architect",
|
|
49
|
+
"category": "development",
|
|
50
|
+
"version": "1.0.0",
|
|
51
|
+
"author": {
|
|
52
|
+
"name": "ezai",
|
|
53
|
+
"email": "floriansalort@gmail.com"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "ezai-project-config",
|
|
58
|
+
"description": "Toolchain setup, project configuration, and infrastructure standards for Python and JS/TS projects: pyproject.toml, package.json, linters, CI/CD.",
|
|
59
|
+
"source": "./plugins/ezai-project-config",
|
|
60
|
+
"category": "development",
|
|
61
|
+
"version": "1.0.0",
|
|
62
|
+
"author": {
|
|
63
|
+
"name": "ezai",
|
|
64
|
+
"email": "floriansalort@gmail.com"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "ezai-project-performance",
|
|
69
|
+
"description": "Concurrency, async patterns, and performance optimization for Python and JS/TS projects: async/await, threading vs multiprocessing, profiling, and caching strategies.",
|
|
70
|
+
"source": "./plugins/ezai-project-performance",
|
|
71
|
+
"category": "development",
|
|
72
|
+
"version": "1.0.0",
|
|
73
|
+
"author": {
|
|
74
|
+
"name": "ezai",
|
|
75
|
+
"email": "floriansalort@gmail.com"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "ezai-project-quality",
|
|
80
|
+
"description": "Testing, security, and input validation standards for Python and JS/TS projects: test architecture with pytest/Vitest, security patterns, and code quality enforcement.",
|
|
81
|
+
"source": "./plugins/ezai-project-quality",
|
|
82
|
+
"category": "development",
|
|
83
|
+
"version": "1.0.0",
|
|
84
|
+
"author": {
|
|
85
|
+
"name": "ezai",
|
|
86
|
+
"email": "floriansalort@gmail.com"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# ezai-marketplace
|
|
2
|
+
|
|
3
|
+
Marketplace curated de skills IA pour Claude Code.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Via npm (recommandé)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Sans installation globale
|
|
11
|
+
npx ezai-marketplace install skill-mon-plugin
|
|
12
|
+
|
|
13
|
+
# CLI global
|
|
14
|
+
npm install -g ezai-marketplace
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Via script (sans Node.js)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git clone https://github.com/Neuraaak/ezai-marketplace
|
|
21
|
+
cd ezai-marketplace
|
|
22
|
+
scripts\install.bat skill-mon-plugin
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Commandes
|
|
26
|
+
|
|
27
|
+
| Commande | Description |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `ezai list` | Lister tous les plugins disponibles |
|
|
30
|
+
| `ezai search <terme>` | Rechercher un plugin par nom ou catégorie |
|
|
31
|
+
| `ezai info <plugin>` | Afficher les détails d'un plugin |
|
|
32
|
+
| `ezai install <plugin>` | Installer un plugin dans `.agents/` |
|
|
33
|
+
|
|
34
|
+
### Options
|
|
35
|
+
|
|
36
|
+
- `--dest <chemin>` : Répertoire de destination (défaut : répertoire courant)
|
|
37
|
+
|
|
38
|
+
## Structure d'un plugin
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
plugins/skill-mon-plugin/
|
|
42
|
+
├── .claude-plugin/
|
|
43
|
+
│ └── plugin.json
|
|
44
|
+
└── skills/
|
|
45
|
+
└── <categorie>/
|
|
46
|
+
└── SKILL.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### plugin.json
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"name": "skill-mon-plugin",
|
|
54
|
+
"version": "1.0.0",
|
|
55
|
+
"description": "Description du skill",
|
|
56
|
+
"author": "ezai",
|
|
57
|
+
"category": "ma-categorie",
|
|
58
|
+
"skills": ["skills/ma-categorie/SKILL.md"]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Mettre à jour le catalogue
|
|
63
|
+
|
|
64
|
+
Après avoir ajouté un plugin dans `plugins/` :
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
node scripts/build-index.js
|
|
68
|
+
# ou
|
|
69
|
+
scripts\build-index.bat
|
|
70
|
+
```
|
package/bin/ezai.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { Command } = require('commander');
|
|
5
|
+
const catalogue = require('../src/catalogue');
|
|
6
|
+
const { runList } = require('../src/commands/list');
|
|
7
|
+
const { runSearch } = require('../src/commands/search');
|
|
8
|
+
const { runInfo } = require('../src/commands/info');
|
|
9
|
+
const { runInstall } = require('../src/commands/install');
|
|
10
|
+
const { runUninstall } = require('../src/commands/uninstall');
|
|
11
|
+
|
|
12
|
+
const program = new Command();
|
|
13
|
+
|
|
14
|
+
program.name('ezai').description('CLI du marketplace de skills IA ezai').version('1.0.0');
|
|
15
|
+
|
|
16
|
+
program
|
|
17
|
+
.command('list')
|
|
18
|
+
.description('Lister tous les plugins disponibles')
|
|
19
|
+
.action(() =>
|
|
20
|
+
runList(catalogue).catch((err) => {
|
|
21
|
+
console.error(err.message);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
})
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
program
|
|
27
|
+
.command('search <terme>')
|
|
28
|
+
.description('Rechercher un plugin par nom ou catégorie')
|
|
29
|
+
.action((terme) =>
|
|
30
|
+
runSearch(terme, catalogue).catch((err) => {
|
|
31
|
+
console.error(err.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
program
|
|
37
|
+
.command('info <plugin>')
|
|
38
|
+
.description("Afficher les détails d'un plugin")
|
|
39
|
+
.action((plugin) =>
|
|
40
|
+
runInfo(plugin, catalogue).catch((err) => {
|
|
41
|
+
console.error(err.message);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
})
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
program
|
|
47
|
+
.command('install [plugin]')
|
|
48
|
+
.description('Installer un plugin (ou tous si aucun nom fourni) dans .agents/')
|
|
49
|
+
.option('--dest <chemin>', 'Répertoire de destination (défaut : répertoire home)')
|
|
50
|
+
.option('--claude', 'Déployer les symlinks vers ~/.claude/skills/')
|
|
51
|
+
.option('--gemini', 'Déployer les symlinks vers ~/.gemini/skills/')
|
|
52
|
+
.option('--copilot', 'Déployer les symlinks vers ~/.copilot/skills/')
|
|
53
|
+
.action((plugin, options) =>
|
|
54
|
+
runInstall(plugin, options, catalogue).catch((err) => {
|
|
55
|
+
console.error(err.message);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
program
|
|
61
|
+
.command('uninstall [skill]')
|
|
62
|
+
.description('Désinstaller un skill (ou tous si aucun nom fourni)')
|
|
63
|
+
.option('--dest <chemin>', 'Répertoire de base (défaut : répertoire home)')
|
|
64
|
+
.option('--claude', 'Supprimer uniquement les symlinks ~/.claude/skills/')
|
|
65
|
+
.option('--gemini', 'Supprimer uniquement les symlinks ~/.gemini/skills/')
|
|
66
|
+
.option('--copilot', 'Supprimer uniquement les symlinks ~/.copilot/skills/')
|
|
67
|
+
.action((skill, options) =>
|
|
68
|
+
runUninstall(skill, options, catalogue).catch((err) => {
|
|
69
|
+
console.error(err.message);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
program.parse();
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ezai-marketplace",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI pour installer des skills IA depuis le marketplace ezai",
|
|
5
|
+
"files": [
|
|
6
|
+
"bin/",
|
|
7
|
+
"src/",
|
|
8
|
+
"plugins/",
|
|
9
|
+
".claude-plugin/"
|
|
10
|
+
],
|
|
11
|
+
"main": "src/catalogue.js",
|
|
12
|
+
"bin": {
|
|
13
|
+
"ezai": "./bin/ezai.js"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "jest",
|
|
17
|
+
"build-index": "node scripts/build-index.js",
|
|
18
|
+
"prepare": "simple-git-hooks"
|
|
19
|
+
},
|
|
20
|
+
"simple-git-hooks": {
|
|
21
|
+
"pre-commit": "node scripts/build-index.js && git add .claude-plugin/marketplace.json && npx lint-staged && npm test"
|
|
22
|
+
},
|
|
23
|
+
"lint-staged": {
|
|
24
|
+
"*.js": [
|
|
25
|
+
"prettier --write",
|
|
26
|
+
"eslint --fix"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"ai",
|
|
31
|
+
"skills",
|
|
32
|
+
"claude",
|
|
33
|
+
"marketplace"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"commander": "^12.0.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@eslint/js": "^10.0.1",
|
|
44
|
+
"eslint": "^10.4.0",
|
|
45
|
+
"eslint-config-prettier": "^10.1.8",
|
|
46
|
+
"jest": "^29.0.0",
|
|
47
|
+
"lint-staged": "^17.0.5",
|
|
48
|
+
"prettier": "^3.8.3",
|
|
49
|
+
"simple-git-hooks": "^2.13.1"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ezai-code-formatter",
|
|
3
|
+
"description": "Apply source file visual structure to match project conventions: section header comments, import ordering, spacing, and formatting — without touching logic.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "ezai",
|
|
7
|
+
"email": "floriansalort@gmail.com"
|
|
8
|
+
},
|
|
9
|
+
"category": "development"
|
|
10
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ezai-code-formatter
|
|
3
|
+
description:
|
|
4
|
+
"Apply this skill when a source file's visual structure needs to match
|
|
5
|
+
project conventions — not its logic. This means: adding section header comments (IMPORTS,
|
|
6
|
+
CONSTANTS, CLASSES, FUNCTIONS), inserting `# /////` or `# ---` separator lines, sorting
|
|
7
|
+
imports into Standard → third-party → local groups, or reorganizing class members
|
|
8
|
+
(constructor first, then public, then private methods).
|
|
9
|
+
|
|
10
|
+
Invoke when the user says a file \"doesn't look like the rest\", is \"missing section
|
|
11
|
+
markers\", needs imports \"reorganized by convention\", or wants a file \"formatted
|
|
12
|
+
according to our standards\". Supports Python, JS/TS, and any language with a
|
|
13
|
+
style-layout file in `references/`. Works for requests in any language (French/English/etc.).
|
|
14
|
+
|
|
15
|
+
Skip for: logic/bug fixes, linting tools (ruff, eslint, prettier), renaming."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
You are a Code Formatter specialized in structural and visual project standards (2026). You do not run external tools like ruff or eslint; your role is to ensure the **visual landmarks** and **organization** of the code match the Project's Constitution.
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
1. **Detect the language**
|
|
23
|
+
- Identify the target file's language from its extension (`.py`, `.ts`, `.js`, etc.).
|
|
24
|
+
- Read `references/index.md` to find the matching subdirectory and confirm it is supported.
|
|
25
|
+
|
|
26
|
+
2. **Load style standards**
|
|
27
|
+
- Load `references/<language>/style-layout.instructions.md` for the detected language.
|
|
28
|
+
- Use `<thinking>` tags to identify the specific markers and rules that apply (e.g., `# ///...`, `# ---...`).
|
|
29
|
+
|
|
30
|
+
3. **Apply structural edits**
|
|
31
|
+
- Add/adjust main section separators (IMPORTS, CONSTANTS, CLASSES, FUNCTIONS).
|
|
32
|
+
- Reorganize imports: Standard/built-in → third-party → local, sorted alphabetically within each group.
|
|
33
|
+
- Group class members: constructor first, then public methods, then private methods.
|
|
34
|
+
- Enforce subsection markers (dashes) for internal class structure.
|
|
35
|
+
|
|
36
|
+
4. **Cleanup**
|
|
37
|
+
- Remove "what" comments; keep "why" comments only.
|
|
38
|
+
- Ensure docstrings follow the language's canonical style (Google for Python, JSDoc for JS/TS).
|
|
39
|
+
|
|
40
|
+
## Constraints
|
|
41
|
+
|
|
42
|
+
- **No logic:** Never modify business logic, variable names, or function signatures.
|
|
43
|
+
- **No shell:** Do not invoke ruff, eslint, prettier, or any external formatter.
|
|
44
|
+
- **English:** All section headers and comments must be in English.
|
|
45
|
+
- **Tools:** Read, Write, Edit, Glob, Grep only.
|
|
46
|
+
|
|
47
|
+
## Output format
|
|
48
|
+
|
|
49
|
+
Start with a `<thinking>` block identifying:
|
|
50
|
+
|
|
51
|
+
- The detected language and subdirectory used
|
|
52
|
+
- Which style rules apply (separator style, import groups, docstring format)
|
|
53
|
+
|
|
54
|
+
Then provide a concise summary of structural changes made:
|
|
55
|
+
|
|
56
|
+
- Which sections were added or adjusted
|
|
57
|
+
- How imports were reorganized
|
|
58
|
+
- Which comments were removed or preserved
|
|
59
|
+
|
|
60
|
+
## Success criteria
|
|
61
|
+
|
|
62
|
+
- Section markers are symmetrical and visually authoritative.
|
|
63
|
+
- Imports are correctly grouped and alphabetically sorted within each group.
|
|
64
|
+
- Code organization matches the class structure defined in the language's style layout.
|
|
65
|
+
- Docstrings follow the canonical style for the detected language.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "code-formatter",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Formate ce module Python selon les standards du projet. Il manque les séparateurs de sections, les imports sont mal organisés, et il n'y a pas de __all__ :\n\nimport os\nfrom mylib import helper\nimport sys\nfrom pathlib import Path\n\nAPI_URL = 'https://api.example.com'\n\ndef fetch_data(url: str) -> dict:\n return {}\n\nclass DataClient:\n def __init__(self): pass",
|
|
7
|
+
"expected_output": "Module restructuré avec séparateurs de sections (# ── Imports ──, # ── Constants ──, etc.), imports organisés (stdlib → third-party → local), __all__ défini, spacing cohérent.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "Applique les standards de formatage visuels à ce fichier TypeScript. Les imports sont mélangés, il manque les séparateurs de sections et la cohérence des types :\n\nimport { Router } from 'express'\nimport type { User } from './types'\nimport fs from 'fs'\nimport { db } from '../db'\n\nconst MAX_RETRIES = 3\n\nexport async function getUser(id: string): Promise<User> {\n return db.users.findOne(id)\n}",
|
|
13
|
+
"expected_output": "Fichier restructuré : imports groupés (Node built-ins → external → internal → types), séparateurs de sections visuels, exports explicites en bas ou inline cohérents, espacement normalisé.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "Ce module Python a été récemment modifié. Identifie et applique uniquement les corrections de formatage nécessaires (pas de refactoring logique) :\n\nfrom typing import Optional,List\n\ndef process_items(items:List[str],limit:Optional[int]=None)->List[str]:\n \"\"\"Process items.\"\"\"\n result=[]\n for item in items:\n if limit and len(result)>=limit:break\n result.append(item.strip())\n return result",
|
|
19
|
+
"expected_output": "Espaces autour des : et , dans les annotations de type, espaces autour de = dans les defaults, indentation du corps de boucle, docstring complète si manquante. Aucun changement logique.",
|
|
20
|
+
"files": []
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Code Formatter References Index
|
|
2
|
+
|
|
3
|
+
Route to the correct language subdirectory based on the file extension.
|
|
4
|
+
|
|
5
|
+
## Supported languages
|
|
6
|
+
|
|
7
|
+
| Language | Extensions | Subdirectory | File |
|
|
8
|
+
| :----------------- | :---------------------- | :---------------- | :--- |
|
|
9
|
+
| Python | `.py` | `python/` | `style-layout.instructions.md` |
|
|
10
|
+
| JavaScript / TypeScript | `.js` `.ts` `.jsx` `.tsx` `.mjs` | `javascript/` | `style-layout.instructions.md` |
|
|
11
|
+
|
|
12
|
+
More languages can be added under their own subdirectory following the same pattern.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Python (`python/`)
|
|
17
|
+
|
|
18
|
+
Docstring style: Google. Separator: `# ///...` (main) + `# ---...` (sub).
|
|
19
|
+
|
|
20
|
+
- `python/style-layout.instructions.md` — section markers, import grouping, class structure, docstring format
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## JavaScript / TypeScript (`javascript/`)
|
|
25
|
+
|
|
26
|
+
Docstring style: JSDoc. Separator: `// ///...` (main) + `// ---...` (sub).
|
|
27
|
+
|
|
28
|
+
- `javascript/style-layout.instructions.md` — section markers, import grouping (node:, 3rd-party, local), JSDoc format
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Adding a new language
|
|
33
|
+
|
|
34
|
+
1. Create a `<language>/` subdirectory here.
|
|
35
|
+
2. Add a `style-layout.instructions.md` covering: section separators, import grouping, docstring/comment style.
|
|
36
|
+
3. Register the language in the table above.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# JS/TS Style & Layout Standards (UIA)
|
|
2
|
+
|
|
3
|
+
Visual structure, import organization, and documentation standards for JS/TS source files.
|
|
4
|
+
|
|
5
|
+
<rules>
|
|
6
|
+
- **SECTIONING:** Use `// ///////////////////////////////////////////////////////////////` for main sections.
|
|
7
|
+
- **DOCSTRINGS:** Use JSDoc (Google-style) for all public functions, classes, and types.
|
|
8
|
+
- **IMPORTS:** Group by: 1. standard (node:), 2. 3rd-party, 3. local. Sort alphabetically.
|
|
9
|
+
- **TYPES:** Use `import type` for TypeScript types to aid tree-shaking.
|
|
10
|
+
- **COMMENTS:** Explain "why", not "what". Always use English.
|
|
11
|
+
</rules>
|
|
12
|
+
|
|
13
|
+
## Main Section Separators
|
|
14
|
+
|
|
15
|
+
Use the forward slash separator for major code boundaries.
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
// ///////////////////////////////////////////////////////////////
|
|
19
|
+
// IMPORTS
|
|
20
|
+
// ///////////////////////////////////////////////////////////////
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Subsection Markers
|
|
24
|
+
|
|
25
|
+
Use dashes for internal organization within classes, functions, or modules.
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
// ------------------------------------------------
|
|
29
|
+
// PRIVATE METHODS
|
|
30
|
+
// ------------------------------------------------
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Import Organization Pattern
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
// ///////////////////////////////////////////////////////////////
|
|
37
|
+
// IMPORTS
|
|
38
|
+
// ///////////////////////////////////////////////////////////////
|
|
39
|
+
// Standard library (node:)
|
|
40
|
+
import { readFile } from "node:fs/promises";
|
|
41
|
+
import { join } from "node:path";
|
|
42
|
+
|
|
43
|
+
// Third-party
|
|
44
|
+
import express from "express";
|
|
45
|
+
import { z } from "zod";
|
|
46
|
+
|
|
47
|
+
// Local
|
|
48
|
+
import { CustomError } from "./exceptions.js";
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
<examples>
|
|
52
|
+
/**
|
|
53
|
+
* Calculates metrics for a dataset.
|
|
54
|
+
*
|
|
55
|
+
* @param {Array<number>} data - A list of numeric measurements.
|
|
56
|
+
* @returns {Record<string, number>} A mapping of metric names to values.
|
|
57
|
+
*/
|
|
58
|
+
function calculateMetrics(data: Array<number>): Record<string, number> {
|
|
59
|
+
// Implementation
|
|
60
|
+
}
|
|
61
|
+
</examples>
|
|
62
|
+
|
|
63
|
+
<success_criteria>
|
|
64
|
+
|
|
65
|
+
- Section markers used for navigation.
|
|
66
|
+
- Imports correctly grouped and sorted.
|
|
67
|
+
- JSDoc present for all public symbols.
|
|
68
|
+
|
|
69
|
+
</success_criteria>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Python Style & Layout Standards (UIA)
|
|
2
|
+
|
|
3
|
+
Visual structure, import organization, and documentation standards for Python source files.
|
|
4
|
+
|
|
5
|
+
<rules>
|
|
6
|
+
- **SECTIONING:** Use `# ///////////////////////////////////////////////////////////////` for main sections.
|
|
7
|
+
- **DOCSTRINGS:** Use Google-style docstrings exclusively.
|
|
8
|
+
- **IMPORTS:** Group by: 1. stdlib, 2. 3rd-party, 3. local. Sort alphabetically.
|
|
9
|
+
- **LANGUAGE:** Always use English for comments and docstrings.
|
|
10
|
+
- **COMMENTS:** Explain "why", not "what". Avoid noise.
|
|
11
|
+
</rules>
|
|
12
|
+
|
|
13
|
+
## Main Section Separators
|
|
14
|
+
|
|
15
|
+
Use the forward slash separator to create clear visual boundaries.
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
# ///////////////////////////////////////////////////////////////
|
|
19
|
+
# IMPORTS
|
|
20
|
+
# ///////////////////////////////////////////////////////////////
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Subsection Markers
|
|
24
|
+
|
|
25
|
+
Use dashes for internal organization within classes or functions.
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
# ------------------------------------------------
|
|
29
|
+
# PRIVATE METHODS
|
|
30
|
+
# ------------------------------------------------
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Import Organization Pattern
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
# ///////////////////////////////////////////////////////////////
|
|
37
|
+
# IMPORTS
|
|
38
|
+
# ///////////////////////////////////////////////////////////////
|
|
39
|
+
# Standard library
|
|
40
|
+
import os
|
|
41
|
+
from pathlib import Path
|
|
42
|
+
|
|
43
|
+
# Third-party
|
|
44
|
+
from rich.console import Console
|
|
45
|
+
|
|
46
|
+
# Local
|
|
47
|
+
from .exceptions import CustomError
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
<examples>
|
|
51
|
+
# Google-style docstring example
|
|
52
|
+
def calculate_metrics(data: list[float]) -> dict[str, float]:
|
|
53
|
+
"""Calculates statistical metrics for a dataset.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
data: A list of numeric measurements.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
dict: A mapping of metric names to values.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
</examples>
|
|
63
|
+
|
|
64
|
+
<success_criteria>
|
|
65
|
+
|
|
66
|
+
- Section markers used for navigation.
|
|
67
|
+
- Imports correctly grouped and sorted.
|
|
68
|
+
- Google docstrings present for all public symbols.
|
|
69
|
+
|
|
70
|
+
</success_criteria>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ezai-docs-writer",
|
|
3
|
+
"description": "Produce documentation content for software projects: MkDocs pages, API references, changelogs, and technical writing in a consistent style.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "ezai",
|
|
7
|
+
"email": "floriansalort@gmail.com"
|
|
8
|
+
},
|
|
9
|
+
"category": "development"
|
|
10
|
+
}
|