@the-bearded-bear/claude-craft 8.1.0 → 8.2.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/Dev/i18n/base/Common/hooks/templates/settings-hooks.json +1 -1
- package/Dev/i18n/de/Common/commands/getting-started.md +348 -0
- package/Dev/i18n/de/Common/templates/settings.json.template +32 -39
- package/Dev/i18n/en/Common/commands/getting-started.md +348 -0
- package/Dev/i18n/en/Common/templates/settings.json.template +10 -80
- package/Dev/i18n/es/Common/commands/getting-started.md +348 -0
- package/Dev/i18n/es/Common/templates/settings.json.template +32 -39
- package/Dev/i18n/fr/Common/commands/getting-started.md +348 -0
- package/Dev/i18n/fr/Common/templates/settings.json.template +32 -39
- package/Dev/i18n/pt/Common/commands/getting-started.md +348 -0
- package/Dev/i18n/pt/Common/templates/settings.json.template +32 -39
- package/Dev/scripts/check-prerequisites.sh +4 -3
- package/Dev/scripts/install-common-rules.sh +10 -2
- package/Dev/scripts/lib/install-tech-common.sh +3 -0
- package/Dev/scripts/lib/shell-ui.sh +2 -0
- package/Dev/scripts/tcl-common.sh +2 -0
- package/Infra/install-ansible-rules.sh +2 -0
- package/Infra/install-coolify-rules.sh +2 -0
- package/Infra/install-docker-rules.sh +2 -0
- package/Infra/install-frankenphp-rules.sh +2 -0
- package/Infra/install-hcloud-rules.sh +2 -0
- package/Infra/install-kubernetes-rules.sh +2 -0
- package/Infra/install-opentofu-rules.sh +2 -0
- package/Infra/install-pgbouncer-rules.sh +2 -0
- package/README.md +12 -3
- package/Tools/AgentTeams/lib/ralph-teams-adapter.sh +45 -8
- package/Tools/MultiAccount/claude-accounts.sh +7 -5
- package/Tools/PluginExport/export-plugin.sh +2 -0
- package/Tools/ProjectConfig/claude-projects.sh +2 -0
- package/Tools/RTK/install-rtk.sh +55 -2
- package/Tools/Ralph/lib/parallel-manager.sh +21 -3
- package/Tools/Recette/lib/browser-executor.sh +2 -0
- package/Tools/Recette/lib/chrome-check.sh +2 -0
- package/Tools/Recette/lib/plan-generator.sh +2 -0
- package/Tools/Recette/lib/regression-detector.sh +2 -0
- package/Tools/Recette/lib/report-generator.sh +2 -0
- package/Tools/Recette/lib/session.sh +2 -0
- package/Tools/Recette/lib/test-generator.sh +2 -0
- package/Tools/StatusLine/statusline.sh +3 -1
- package/Tools/lib/tools-ui.sh +2 -0
- package/cli/kanban/client/src/views/KanbanView.svelte +229 -1
- package/cli/lib/banner.js +2 -1
- package/cli/lib/check.js +10 -9
- package/cli/lib/symbols.js +88 -0
- package/package.json +11 -8
package/cli/lib/check.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import fs from 'fs';
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import c from './colors.js';
|
|
9
|
+
import { success, warning, error } from './symbols.js';
|
|
9
10
|
import { detectProject } from './detect-project.js';
|
|
10
11
|
import { countFiles, listDirs } from './fs-utils.js';
|
|
11
12
|
|
|
@@ -22,10 +23,10 @@ function runCheck(targetPath) {
|
|
|
22
23
|
|
|
23
24
|
// 1. .claude/ directory
|
|
24
25
|
if (fs.existsSync(claudeDir)) {
|
|
25
|
-
console.log(` ${
|
|
26
|
+
console.log(` ${success('.claude/ directory exists')}`);
|
|
26
27
|
} else {
|
|
27
|
-
console.log(` ${
|
|
28
|
-
console.log(`\n${
|
|
28
|
+
console.log(` ${error('.claude/ directory not found')}`);
|
|
29
|
+
console.log(`\n${error('No claude-craft installation detected.')}`);
|
|
29
30
|
console.log(`Run: npx @the-bearded-bear/claude-craft install ${targetPath}\n`);
|
|
30
31
|
process.exitCode = 1;
|
|
31
32
|
return;
|
|
@@ -34,9 +35,9 @@ function runCheck(targetPath) {
|
|
|
34
35
|
// 2. CLAUDE.md
|
|
35
36
|
const claudeMd = path.join(claudeDir, 'CLAUDE.md');
|
|
36
37
|
if (fs.existsSync(claudeMd)) {
|
|
37
|
-
console.log(` ${
|
|
38
|
+
console.log(` ${success('.claude/CLAUDE.md exists')}`);
|
|
38
39
|
} else {
|
|
39
|
-
console.log(` ${
|
|
40
|
+
console.log(` ${warning('.claude/CLAUDE.md not found')}`);
|
|
40
41
|
warnings++;
|
|
41
42
|
}
|
|
42
43
|
|
|
@@ -49,10 +50,10 @@ function runCheck(targetPath) {
|
|
|
49
50
|
totalCommands += countFiles(path.join(commandsDir, ns), '.md');
|
|
50
51
|
}
|
|
51
52
|
console.log(
|
|
52
|
-
` ${
|
|
53
|
+
` ${success(`commands/ — ${totalCommands} commands in ${namespaces.length} namespace(s): ${c.cyan}${namespaces.join(', ')}${c.reset}`)}`
|
|
53
54
|
);
|
|
54
55
|
} else {
|
|
55
|
-
console.log(` ${
|
|
56
|
+
console.log(` ${warning('commands/ — no namespaces found')}`);
|
|
56
57
|
warnings++;
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -105,9 +106,9 @@ function runCheck(targetPath) {
|
|
|
105
106
|
// Summary
|
|
106
107
|
console.log('');
|
|
107
108
|
if (warnings === 0) {
|
|
108
|
-
console.log(`${
|
|
109
|
+
console.log(`${success('Installation looks good!')}\n`);
|
|
109
110
|
} else {
|
|
110
|
-
console.log(`${
|
|
111
|
+
console.log(`${warning(`${warnings} warning(s) — some components may be missing.`)}\n`);
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessible CLI symbols and color utilities.
|
|
3
|
+
* Provides standard symbols for success/error/warning/info with NO_COLOR support.
|
|
4
|
+
*
|
|
5
|
+
* Follows no-color.org standard: respects NO_COLOR env var and TTY detection.
|
|
6
|
+
* Symbols are ALWAYS shown even when colors are disabled, ensuring accessibility.
|
|
7
|
+
*
|
|
8
|
+
* @module cli/lib/symbols
|
|
9
|
+
* @see https://no-color.org/
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import c from './colors.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Standard symbols for CLI output.
|
|
16
|
+
* These are ALWAYS visible, regardless of color support.
|
|
17
|
+
* @type {Object<string, string>}
|
|
18
|
+
*/
|
|
19
|
+
export const symbols = {
|
|
20
|
+
success: '✓',
|
|
21
|
+
error: '✗',
|
|
22
|
+
warning: '⚠',
|
|
23
|
+
info: 'ℹ',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Determine if color output should be used.
|
|
28
|
+
* Respects NO_COLOR environment variable and TTY detection.
|
|
29
|
+
*
|
|
30
|
+
* @returns {boolean} True if colors should be used
|
|
31
|
+
*/
|
|
32
|
+
export function useColor() {
|
|
33
|
+
// NO_COLOR takes precedence (no-color.org standard)
|
|
34
|
+
if (process.env.NO_COLOR !== undefined) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Check if output is a TTY
|
|
39
|
+
if (!process.stdout.isTTY) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Format a success message with symbol and optional color.
|
|
48
|
+
* @param {string} message - Message to format
|
|
49
|
+
* @returns {string} Formatted message
|
|
50
|
+
*/
|
|
51
|
+
export function success(message) {
|
|
52
|
+
const color = useColor();
|
|
53
|
+
const prefix = color ? `${c.green}${symbols.success}${c.reset}` : symbols.success;
|
|
54
|
+
return `${prefix} ${message}`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Format an error message with symbol and optional color.
|
|
59
|
+
* @param {string} message - Message to format
|
|
60
|
+
* @returns {string} Formatted message
|
|
61
|
+
*/
|
|
62
|
+
export function error(message) {
|
|
63
|
+
const color = useColor();
|
|
64
|
+
const prefix = color ? `${c.red}${symbols.error}${c.reset}` : symbols.error;
|
|
65
|
+
return `${prefix} ${message}`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Format a warning message with symbol and optional color.
|
|
70
|
+
* @param {string} message - Message to format
|
|
71
|
+
* @returns {string} Formatted message
|
|
72
|
+
*/
|
|
73
|
+
export function warning(message) {
|
|
74
|
+
const color = useColor();
|
|
75
|
+
const prefix = color ? `${c.yellow}${symbols.warning}${c.reset}` : symbols.warning;
|
|
76
|
+
return `${prefix} ${message}`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Format an info message with symbol and optional color.
|
|
81
|
+
* @param {string} message - Message to format
|
|
82
|
+
* @returns {string} Formatted message
|
|
83
|
+
*/
|
|
84
|
+
export function info(message) {
|
|
85
|
+
const color = useColor();
|
|
86
|
+
const prefix = color ? `${c.cyan}${symbols.info}${c.reset}` : symbols.info;
|
|
87
|
+
return `${prefix} ${message}`;
|
|
88
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the-bearded-bear/claude-craft",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"description": "A comprehensive framework for AI-assisted development with Claude Code. Install standardized rules, agents, and commands for your projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "cli/index.js",
|
|
@@ -26,7 +26,10 @@
|
|
|
26
26
|
"vale:check": "vale docs/ .claude/CLAUDE.md README.md CHANGELOG.md",
|
|
27
27
|
"vale:sync": "vale sync",
|
|
28
28
|
"commitlint": "commitlint --edit",
|
|
29
|
-
"prepublishOnly": "node -e \"import{readFileSync}from'node:fs';const p=JSON.parse(readFileSync('./package.json','utf8'));if(!/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/i.test(p.version)){console.error('Invalid version format');process.exit(1)}\""
|
|
29
|
+
"prepublishOnly": "node -e \"import{readFileSync}from'node:fs';const p=JSON.parse(readFileSync('./package.json','utf8'));if(!/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/i.test(p.version)){console.error('Invalid version format');process.exit(1)}\"",
|
|
30
|
+
"mutation": "stryker run",
|
|
31
|
+
"mutation:ci": "stryker run --reporters progress,json",
|
|
32
|
+
"test:e2e:tools": "cd tests/e2e/tools && docker compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from e2e-runner"
|
|
30
33
|
},
|
|
31
34
|
"keywords": [
|
|
32
35
|
"claude",
|
|
@@ -56,17 +59,17 @@
|
|
|
56
59
|
"node": ">=20.0.0"
|
|
57
60
|
},
|
|
58
61
|
"devDependencies": {
|
|
59
|
-
"@commitlint/cli": "
|
|
60
|
-
"@commitlint/config-conventional": "
|
|
62
|
+
"@commitlint/cli": "20.0.0",
|
|
63
|
+
"@commitlint/config-conventional": "20.0.0",
|
|
61
64
|
"@eslint/js": "^10.0.0",
|
|
62
65
|
"@sveltejs/vite-plugin-svelte": "^5.1.1",
|
|
63
|
-
"@vitest/coverage-v8": "
|
|
64
|
-
"eslint": "
|
|
66
|
+
"@vitest/coverage-v8": "4.0.0",
|
|
67
|
+
"eslint": "10.0.0",
|
|
65
68
|
"eslint-config-prettier": "^10.0.0",
|
|
66
|
-
"prettier": "
|
|
69
|
+
"prettier": "3.4.0",
|
|
67
70
|
"svelte": "^5.55.4",
|
|
68
71
|
"vite": "^6.4.2",
|
|
69
|
-
"vitest": "
|
|
72
|
+
"vitest": "4.0.0"
|
|
70
73
|
},
|
|
71
74
|
"files": [
|
|
72
75
|
"bundles/",
|