jun-claude-code 0.0.1
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/CLAUDE.md +169 -0
- package/.claude/agents/architect.md +163 -0
- package/.claude/agents/code-reviewer.md +116 -0
- package/.claude/agents/code-writer.md +141 -0
- package/.claude/agents/context-collector.md +86 -0
- package/.claude/agents/context-manager.md +183 -0
- package/.claude/agents/designer.md +189 -0
- package/.claude/agents/explore.md +127 -0
- package/.claude/agents/git-manager.md +244 -0
- package/.claude/agents/impact-analyzer.md +153 -0
- package/.claude/agents/qa-tester.md +199 -0
- package/.claude/agents/task-planner.md +160 -0
- package/.claude/hooks/skill-forced.sh +176 -0
- package/.claude/hooks/workflow-enforced.sh +165 -0
- package/.claude/settings.json +18 -0
- package/.claude/skills/Backend/SKILL.md +147 -0
- package/.claude/skills/Coding/SKILL.md +184 -0
- package/.claude/skills/Documentation/SKILL.md +290 -0
- package/.claude/skills/Git/SKILL.md +45 -0
- package/.claude/skills/Git/git.md +323 -0
- package/.claude/skills/Git/pr-apply.md +87 -0
- package/.claude/skills/Git/pr-review.md +69 -0
- package/.claude/skills/React/SKILL.md +159 -0
- package/.claude/skills/React/react-hook-form.md +222 -0
- package/.claude/skills/React/tailwind-styled.md +165 -0
- package/.claude/skills/React/tanstack-router.md +184 -0
- package/README.md +94 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +30 -0
- package/dist/copy.d.ts +8 -0
- package/dist/copy.js +173 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/package.json +35 -0
package/dist/copy.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.copyClaudeFiles = copyClaudeFiles;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
/**
|
|
45
|
+
* Prompt user for confirmation using readline
|
|
46
|
+
*/
|
|
47
|
+
function askConfirmation(question) {
|
|
48
|
+
const rl = readline.createInterface({
|
|
49
|
+
input: process.stdin,
|
|
50
|
+
output: process.stdout,
|
|
51
|
+
});
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
rl.question(question, (answer) => {
|
|
54
|
+
rl.close();
|
|
55
|
+
const normalized = answer.toLowerCase().trim();
|
|
56
|
+
resolve(normalized === 'y' || normalized === 'yes');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get all files recursively from a directory
|
|
62
|
+
*/
|
|
63
|
+
function getAllFiles(dirPath, basePath = dirPath) {
|
|
64
|
+
const files = [];
|
|
65
|
+
if (!fs.existsSync(dirPath)) {
|
|
66
|
+
return files;
|
|
67
|
+
}
|
|
68
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
69
|
+
for (const entry of entries) {
|
|
70
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
71
|
+
if (entry.isDirectory()) {
|
|
72
|
+
files.push(...getAllFiles(fullPath, basePath));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
files.push(path.relative(basePath, fullPath));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return files;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Ensure directory exists
|
|
82
|
+
*/
|
|
83
|
+
function ensureDir(dirPath) {
|
|
84
|
+
if (!fs.existsSync(dirPath)) {
|
|
85
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Copy a single file
|
|
90
|
+
*/
|
|
91
|
+
function copyFile(src, dest) {
|
|
92
|
+
ensureDir(path.dirname(dest));
|
|
93
|
+
fs.copyFileSync(src, dest);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the source .claude directory path (from package installation)
|
|
97
|
+
*/
|
|
98
|
+
function getSourceClaudeDir() {
|
|
99
|
+
// When installed as npm package, __dirname is in dist/
|
|
100
|
+
// .claude folder is at package root (sibling to dist/)
|
|
101
|
+
return path.resolve(__dirname, '..', '.claude');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the destination .claude directory path (user's home)
|
|
105
|
+
*/
|
|
106
|
+
function getDestClaudeDir() {
|
|
107
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
108
|
+
if (!homeDir) {
|
|
109
|
+
throw new Error('Could not determine home directory');
|
|
110
|
+
}
|
|
111
|
+
return path.join(homeDir, '.claude');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Copy .claude files to user's home directory
|
|
115
|
+
*/
|
|
116
|
+
async function copyClaudeFiles(options = {}) {
|
|
117
|
+
const { dryRun = false, force = false } = options;
|
|
118
|
+
const sourceDir = getSourceClaudeDir();
|
|
119
|
+
const destDir = getDestClaudeDir();
|
|
120
|
+
console.log(chalk_1.default.blue('Source:'), sourceDir);
|
|
121
|
+
console.log(chalk_1.default.blue('Destination:'), destDir);
|
|
122
|
+
console.log();
|
|
123
|
+
// Check if source exists
|
|
124
|
+
if (!fs.existsSync(sourceDir)) {
|
|
125
|
+
console.error(chalk_1.default.red('Error:'), 'Source .claude directory not found');
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
// Get all files to copy
|
|
129
|
+
const files = getAllFiles(sourceDir);
|
|
130
|
+
if (files.length === 0) {
|
|
131
|
+
console.log(chalk_1.default.yellow('No files found in .claude directory'));
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
console.log(chalk_1.default.cyan(`Found ${files.length} files to copy:`));
|
|
135
|
+
console.log();
|
|
136
|
+
// Dry run mode - just show what would be copied
|
|
137
|
+
if (dryRun) {
|
|
138
|
+
console.log(chalk_1.default.yellow('[DRY RUN] Files that would be copied:'));
|
|
139
|
+
console.log();
|
|
140
|
+
for (const file of files) {
|
|
141
|
+
const destPath = path.join(destDir, file);
|
|
142
|
+
const exists = fs.existsSync(destPath);
|
|
143
|
+
const status = exists ? chalk_1.default.yellow('[overwrite]') : chalk_1.default.green('[new]');
|
|
144
|
+
console.log(` ${status} ${file}`);
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
console.log(chalk_1.default.yellow('No files were copied (dry run mode)'));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Copy files
|
|
151
|
+
let copiedCount = 0;
|
|
152
|
+
let skippedCount = 0;
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
const sourcePath = path.join(sourceDir, file);
|
|
155
|
+
const destPath = path.join(destDir, file);
|
|
156
|
+
const exists = fs.existsSync(destPath);
|
|
157
|
+
if (exists && !force) {
|
|
158
|
+
// Ask for confirmation
|
|
159
|
+
const shouldOverwrite = await askConfirmation(chalk_1.default.yellow(`File exists: ${file}. Overwrite? (y/N): `));
|
|
160
|
+
if (!shouldOverwrite) {
|
|
161
|
+
console.log(chalk_1.default.gray(` Skipped: ${file}`));
|
|
162
|
+
skippedCount++;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
copyFile(sourcePath, destPath);
|
|
167
|
+
const status = exists ? chalk_1.default.yellow('[overwritten]') : chalk_1.default.green('[created]');
|
|
168
|
+
console.log(` ${status} ${file}`);
|
|
169
|
+
copiedCount++;
|
|
170
|
+
}
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(chalk_1.default.green(`Done! Copied ${copiedCount} files, skipped ${skippedCount} files.`));
|
|
173
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { copyClaudeFiles, CopyOptions } from './copy';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyClaudeFiles = void 0;
|
|
4
|
+
var copy_1 = require("./copy");
|
|
5
|
+
Object.defineProperty(exports, "copyClaudeFiles", { enumerable: true, get: function () { return copy_1.copyClaudeFiles; } });
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jun-claude-code",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Claude Code configuration template - copy .claude settings to your project",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": "dist/cli.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
".claude"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"prepublishOnly": "yarn build"
|
|
14
|
+
},
|
|
15
|
+
"packageManager": "yarn@3.8.7",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"chalk": "^4.1.2",
|
|
18
|
+
"commander": "^11.1.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^20.10.0",
|
|
22
|
+
"typescript": "^5.5.3"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"claude",
|
|
26
|
+
"claude-code",
|
|
27
|
+
"cli",
|
|
28
|
+
"config",
|
|
29
|
+
"template"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
34
|
+
}
|
|
35
|
+
}
|