@fyow/copilot-everything 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/.github/agents/architect.agent.md +102 -0
- package/.github/agents/build-error-resolver.agent.md +119 -0
- package/.github/agents/code-reviewer.agent.md +92 -0
- package/.github/agents/doc-updater.agent.md +121 -0
- package/.github/agents/e2e-runner.agent.md +150 -0
- package/.github/agents/planner.agent.md +95 -0
- package/.github/agents/refactor-cleaner.agent.md +122 -0
- package/.github/agents/security-reviewer.agent.md +129 -0
- package/.github/agents/tdd-guide.agent.md +127 -0
- package/.github/copilot-instructions.md +68 -0
- package/.github/hooks/project-hooks.json +48 -0
- package/.github/instructions/coding-style.instructions.md +67 -0
- package/.github/instructions/git-workflow.instructions.md +60 -0
- package/.github/instructions/performance.instructions.md +52 -0
- package/.github/instructions/security.instructions.md +63 -0
- package/.github/instructions/testing.instructions.md +55 -0
- package/.github/skills/backend-patterns/SKILL.md +582 -0
- package/.github/skills/clickhouse-io/SKILL.md +429 -0
- package/.github/skills/coding-standards/SKILL.md +520 -0
- package/.github/skills/frontend-patterns/SKILL.md +631 -0
- package/.github/skills/project-guidelines-example/SKILL.md +350 -0
- package/.github/skills/security-review/SKILL.md +494 -0
- package/.github/skills/tdd-workflow/SKILL.md +409 -0
- package/.github/skills/verification-loop/SKILL.md +125 -0
- package/AGENTS.md +81 -0
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/copilot/config.json +5 -0
- package/copilot/mcp-config.json +42 -0
- package/package.json +47 -0
- package/src/cli.js +79 -0
- package/src/commands/init.js +212 -0
- package/src/index.js +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# copilot-everything
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/copilot-everything)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
**Everything you need for GitHub Copilot CLI** - agents, skills, instructions, and hooks configurations.
|
|
9
|
+
|
|
10
|
+
Production-ready configurations evolved from 10+ months of intensive daily use building real products.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Install globally
|
|
18
|
+
npm install -g copilot-everything
|
|
19
|
+
|
|
20
|
+
# Initialize in your project
|
|
21
|
+
cd your-project
|
|
22
|
+
copilot-everything init --ai copilot
|
|
23
|
+
|
|
24
|
+
# Start using with Copilot CLI
|
|
25
|
+
copilot
|
|
26
|
+
/agent planner
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## What's Included
|
|
32
|
+
|
|
33
|
+
### 🤖 Custom Agents (9)
|
|
34
|
+
|
|
35
|
+
| Agent | Purpose | Invoke |
|
|
36
|
+
|-------|---------|--------|
|
|
37
|
+
| planner | Implementation planning | /agent planner |
|
|
38
|
+
| architect | System design decisions | /agent architect |
|
|
39
|
+
| tdd-guide | Test-driven development | /agent tdd-guide |
|
|
40
|
+
| code-reviewer | Code quality review | /agent code-reviewer |
|
|
41
|
+
| security-reviewer | Security analysis | /agent security-reviewer |
|
|
42
|
+
| build-error-resolver | Fix build/type errors | /agent build-error-resolver |
|
|
43
|
+
| e2e-runner | Playwright E2E testing | /agent e2e-runner |
|
|
44
|
+
| refactor-cleaner | Dead code cleanup | /agent refactor-cleaner |
|
|
45
|
+
| doc-updater | Documentation sync | /agent doc-updater |
|
|
46
|
+
|
|
47
|
+
### 📚 Skills (8)
|
|
48
|
+
|
|
49
|
+
| Skill | Description |
|
|
50
|
+
|-------|-------------|
|
|
51
|
+
| backend-patterns | Backend architecture, API design, database patterns |
|
|
52
|
+
| clickhouse-io | ClickHouse analytics patterns and optimization |
|
|
53
|
+
| coding-standards | Universal coding standards and best practices |
|
|
54
|
+
| frontend-patterns | React, Next.js, state management patterns |
|
|
55
|
+
| project-guidelines-example | Example project-specific skill template |
|
|
56
|
+
| security-review | Security checklist and vulnerability patterns |
|
|
57
|
+
| tdd-workflow | Test-driven development workflow |
|
|
58
|
+
| verification-loop | Code verification and quality gates |
|
|
59
|
+
|
|
60
|
+
### 📝 Instructions (5)
|
|
61
|
+
|
|
62
|
+
Path-specific coding guidelines automatically applied:
|
|
63
|
+
|
|
64
|
+
- coding-style.instructions.md - For **/*.ts,**/*.tsx,**/*.js,**/*.jsx
|
|
65
|
+
- security.instructions.md - For code files
|
|
66
|
+
- testing.instructions.md - For test files
|
|
67
|
+
- git-workflow.instructions.md - For all files
|
|
68
|
+
- performance.instructions.md - For all files
|
|
69
|
+
|
|
70
|
+
### 🪝 Hooks
|
|
71
|
+
|
|
72
|
+
Pre-configured hooks for sessionStart, sessionEnd, preToolUse, postToolUse.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## CLI Usage
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
copilot-everything <command> [options]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Commands
|
|
83
|
+
|
|
84
|
+
| Command | Description |
|
|
85
|
+
|---------|-------------|
|
|
86
|
+
| init | Initialize Copilot configurations in current directory |
|
|
87
|
+
|
|
88
|
+
### Options
|
|
89
|
+
|
|
90
|
+
| Option | Description |
|
|
91
|
+
|--------|-------------|
|
|
92
|
+
| --ai type | Target AI platform: copilot (default), claude, or all |
|
|
93
|
+
| --force | Overwrite existing files |
|
|
94
|
+
| --skip-agents | Skip agent installation |
|
|
95
|
+
| --skip-skills | Skip skills installation |
|
|
96
|
+
| --skip-hooks | Skip hooks installation |
|
|
97
|
+
| -h, --help | Show help message |
|
|
98
|
+
| -v, --version | Show version number |
|
|
99
|
+
|
|
100
|
+
### Examples
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Initialize with Copilot CLI configs
|
|
104
|
+
copilot-everything init
|
|
105
|
+
|
|
106
|
+
# Initialize with force overwrite
|
|
107
|
+
copilot-everything init --force
|
|
108
|
+
|
|
109
|
+
# Skip certain components
|
|
110
|
+
copilot-everything init --skip-hooks --skip-skills
|
|
111
|
+
|
|
112
|
+
# Initialize for both Copilot and Claude
|
|
113
|
+
copilot-everything init --ai all
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Installed Structure
|
|
119
|
+
|
|
120
|
+
After running copilot-everything init, your project will have:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
your-project/
|
|
124
|
+
├── AGENTS.md # Top-level agent instructions
|
|
125
|
+
└── .github/
|
|
126
|
+
├── copilot-instructions.md # Repository-wide instructions
|
|
127
|
+
├── agents/
|
|
128
|
+
│ ├── planner.agent.md
|
|
129
|
+
│ ├── architect.agent.md
|
|
130
|
+
│ └── ... (9 agents)
|
|
131
|
+
├── instructions/
|
|
132
|
+
│ ├── coding-style.instructions.md
|
|
133
|
+
│ ├── security.instructions.md
|
|
134
|
+
│ └── ... (5 instructions)
|
|
135
|
+
├── skills/
|
|
136
|
+
│ ├── backend-patterns/SKILL.md
|
|
137
|
+
│ ├── coding-standards/SKILL.md
|
|
138
|
+
│ └── ... (8 skills)
|
|
139
|
+
└── hooks/
|
|
140
|
+
└── project-hooks.json
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Compatibility
|
|
146
|
+
|
|
147
|
+
- **GitHub Copilot CLI** ✅
|
|
148
|
+
- **Claude Code** ✅ (uses same .github/ structure)
|
|
149
|
+
- **VS Code Copilot** ✅
|
|
150
|
+
- **Node.js** >= 18.0.0
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Customization
|
|
155
|
+
|
|
156
|
+
After installation, customize the configs for your project:
|
|
157
|
+
|
|
158
|
+
1. **Edit copilot-instructions.md** - Add project-specific context
|
|
159
|
+
2. **Modify agents** - Adjust agent prompts for your workflow
|
|
160
|
+
3. **Add skills** - Create new skills in .github/skills/your-skill/SKILL.md
|
|
161
|
+
4. **Update instructions** - Add path-specific rules in .github/instructions/
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Migration from Claude Code
|
|
166
|
+
|
|
167
|
+
See [MIGRATION-GUIDE.md](docs/MIGRATION-GUIDE.md) for detailed migration instructions.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Contributing
|
|
172
|
+
|
|
173
|
+
Contributions welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) first.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Credits
|
|
184
|
+
|
|
185
|
+
Based on the "Everything Claude Code" configurations by [@affaanmustafa](https://github.com/affaan-m).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"servers": {
|
|
3
|
+
"github": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
6
|
+
"env": {
|
|
7
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"memory": {
|
|
11
|
+
"command": "npx",
|
|
12
|
+
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
|
13
|
+
},
|
|
14
|
+
"sequential-thinking": {
|
|
15
|
+
"command": "npx",
|
|
16
|
+
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
17
|
+
},
|
|
18
|
+
"firecrawl": {
|
|
19
|
+
"command": "npx",
|
|
20
|
+
"args": ["-y", "firecrawl-mcp"],
|
|
21
|
+
"env": {
|
|
22
|
+
"FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"supabase": {
|
|
26
|
+
"command": "npx",
|
|
27
|
+
"args": ["-y", "@supabase/mcp-server-supabase@latest", "--project-ref=${SUPABASE_PROJECT_REF}"]
|
|
28
|
+
},
|
|
29
|
+
"vercel": {
|
|
30
|
+
"type": "http",
|
|
31
|
+
"url": "https://mcp.vercel.com"
|
|
32
|
+
},
|
|
33
|
+
"railway": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@railway/mcp-server"]
|
|
36
|
+
},
|
|
37
|
+
"cloudflare-docs": {
|
|
38
|
+
"type": "http",
|
|
39
|
+
"url": "https://docs.mcp.cloudflare.com/mcp"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fyow/copilot-everything",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Everything you need for GitHub Copilot CLI - agents, skills, instructions, and hooks configurations",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"copilot-everything": "src/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"src/",
|
|
14
|
+
".github/",
|
|
15
|
+
"AGENTS.md",
|
|
16
|
+
"copilot/"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "node tests/run-all.js",
|
|
20
|
+
"lint": "echo 'No linter configured'"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"copilot",
|
|
24
|
+
"github-copilot",
|
|
25
|
+
"copilot-cli",
|
|
26
|
+
"ai",
|
|
27
|
+
"coding-agent",
|
|
28
|
+
"agents",
|
|
29
|
+
"skills",
|
|
30
|
+
"instructions",
|
|
31
|
+
"mcp",
|
|
32
|
+
"hooks"
|
|
33
|
+
],
|
|
34
|
+
"author": "fyow",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/fyow/copilot-everything.git"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/fyow/copilot-everything/issues"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/fyow/copilot-everything#readme",
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
}
|
|
47
|
+
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* copilot-everything CLI
|
|
5
|
+
* Install GitHub Copilot CLI configurations (agents, skills, instructions, hooks)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { init } = require('./commands/init');
|
|
9
|
+
const { version } = require('../package.json');
|
|
10
|
+
|
|
11
|
+
const args = process.argv.slice(2);
|
|
12
|
+
const command = args[0];
|
|
13
|
+
|
|
14
|
+
// Parse flags
|
|
15
|
+
const flags = {};
|
|
16
|
+
args.forEach((arg, index) => {
|
|
17
|
+
if (arg.startsWith('--')) {
|
|
18
|
+
const key = arg.slice(2);
|
|
19
|
+
const value = args[index + 1] && !args[index + 1].startsWith('-') ? args[index + 1] : true;
|
|
20
|
+
flags[key] = value;
|
|
21
|
+
} else if (arg.startsWith('-') && arg.length === 2) {
|
|
22
|
+
const key = arg.slice(1);
|
|
23
|
+
const value = args[index + 1] && !args[index + 1].startsWith('-') ? args[index + 1] : true;
|
|
24
|
+
flags[key] = value;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Help text
|
|
29
|
+
const helpText = `
|
|
30
|
+
copilot-everything v${version}
|
|
31
|
+
|
|
32
|
+
Everything you need for GitHub Copilot CLI - agents, skills, instructions, and hooks.
|
|
33
|
+
|
|
34
|
+
Usage:
|
|
35
|
+
copilot-everything <command> [options]
|
|
36
|
+
|
|
37
|
+
Commands:
|
|
38
|
+
init Initialize Copilot configurations in current directory
|
|
39
|
+
|
|
40
|
+
Options:
|
|
41
|
+
--ai <type> Target AI platform: copilot (default), claude, or all
|
|
42
|
+
--force Overwrite existing files
|
|
43
|
+
--skip-agents Skip agent installation
|
|
44
|
+
--skip-skills Skip skills installation
|
|
45
|
+
--skip-hooks Skip hooks installation
|
|
46
|
+
-h, --help Show this help message
|
|
47
|
+
-v, --version Show version number
|
|
48
|
+
|
|
49
|
+
Examples:
|
|
50
|
+
copilot-everything init
|
|
51
|
+
copilot-everything init --ai copilot
|
|
52
|
+
copilot-everything init --ai claude
|
|
53
|
+
copilot-everything init --ai all --force
|
|
54
|
+
|
|
55
|
+
Learn more: https://github.com/fyow/copilot-everything
|
|
56
|
+
`;
|
|
57
|
+
|
|
58
|
+
// Version
|
|
59
|
+
if (flags.v || flags.version) {
|
|
60
|
+
console.log(version);
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Help
|
|
65
|
+
if (flags.h || flags.help || !command) {
|
|
66
|
+
console.log(helpText);
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Execute command
|
|
71
|
+
switch (command) {
|
|
72
|
+
case 'init':
|
|
73
|
+
init(flags);
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
console.error(`Unknown command: ${command}`);
|
|
77
|
+
console.log(helpText);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* init command - Install Copilot configurations to current directory
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
// Get package root directory (where .github folder lives)
|
|
9
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..', '..');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Recursively copy directory
|
|
13
|
+
*/
|
|
14
|
+
function copyDir(src, dest, options = {}) {
|
|
15
|
+
const { force = false, dryRun = false } = options;
|
|
16
|
+
|
|
17
|
+
if (!fs.existsSync(src)) {
|
|
18
|
+
return { copied: 0, skipped: 0, errors: [] };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let result = { copied: 0, skipped: 0, errors: [] };
|
|
22
|
+
|
|
23
|
+
if (!dryRun && !fs.existsSync(dest)) {
|
|
24
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
28
|
+
|
|
29
|
+
for (const entry of entries) {
|
|
30
|
+
const srcPath = path.join(src, entry.name);
|
|
31
|
+
const destPath = path.join(dest, entry.name);
|
|
32
|
+
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
const subResult = copyDir(srcPath, destPath, options);
|
|
35
|
+
result.copied += subResult.copied;
|
|
36
|
+
result.skipped += subResult.skipped;
|
|
37
|
+
result.errors.push(...subResult.errors);
|
|
38
|
+
} else {
|
|
39
|
+
try {
|
|
40
|
+
if (fs.existsSync(destPath) && !force) {
|
|
41
|
+
result.skipped++;
|
|
42
|
+
} else {
|
|
43
|
+
if (!dryRun) {
|
|
44
|
+
fs.copyFileSync(srcPath, destPath);
|
|
45
|
+
}
|
|
46
|
+
result.copied++;
|
|
47
|
+
}
|
|
48
|
+
} catch (error) {
|
|
49
|
+
result.errors.push({ path: destPath, error: error.message });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Copy single file
|
|
59
|
+
*/
|
|
60
|
+
function copyFile(src, dest, options = {}) {
|
|
61
|
+
const { force = false, dryRun = false } = options;
|
|
62
|
+
|
|
63
|
+
if (!fs.existsSync(src)) {
|
|
64
|
+
return { copied: 0, skipped: 0, errors: [{ path: dest, error: 'Source not found' }] };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (fs.existsSync(dest) && !force) {
|
|
68
|
+
return { copied: 0, skipped: 1, errors: [] };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
if (!dryRun) {
|
|
73
|
+
const destDir = path.dirname(dest);
|
|
74
|
+
if (!fs.existsSync(destDir)) {
|
|
75
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
fs.copyFileSync(src, dest);
|
|
78
|
+
}
|
|
79
|
+
return { copied: 1, skipped: 0, errors: [] };
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return { copied: 0, skipped: 0, errors: [{ path: dest, error: error.message }] };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Main init function
|
|
87
|
+
*/
|
|
88
|
+
function init(flags = {}) {
|
|
89
|
+
const targetDir = process.cwd();
|
|
90
|
+
const aiType = flags.ai || 'copilot';
|
|
91
|
+
const force = flags.force || false;
|
|
92
|
+
const skipAgents = flags['skip-agents'] || false;
|
|
93
|
+
const skipSkills = flags['skip-skills'] || false;
|
|
94
|
+
const skipHooks = flags['skip-hooks'] || false;
|
|
95
|
+
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log('🚀 copilot-everything init');
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log(`📁 Target directory: ${targetDir}`);
|
|
100
|
+
console.log(`🤖 AI platform: ${aiType}`);
|
|
101
|
+
console.log(`⚡ Force overwrite: ${force ? 'yes' : 'no'}`);
|
|
102
|
+
console.log('');
|
|
103
|
+
|
|
104
|
+
const options = { force };
|
|
105
|
+
let totalCopied = 0;
|
|
106
|
+
let totalSkipped = 0;
|
|
107
|
+
let totalErrors = [];
|
|
108
|
+
|
|
109
|
+
// Determine what to install based on AI type
|
|
110
|
+
const installGithub = aiType === 'copilot' || aiType === 'all';
|
|
111
|
+
const installClaude = aiType === 'claude' || aiType === 'all';
|
|
112
|
+
|
|
113
|
+
// Install .github directory (for Copilot CLI)
|
|
114
|
+
if (installGithub) {
|
|
115
|
+
console.log('📦 Installing Copilot CLI configurations...');
|
|
116
|
+
|
|
117
|
+
// Copy .github directory structure
|
|
118
|
+
const githubSrc = path.join(PACKAGE_ROOT, '.github');
|
|
119
|
+
const githubDest = path.join(targetDir, '.github');
|
|
120
|
+
|
|
121
|
+
// Agents
|
|
122
|
+
if (!skipAgents) {
|
|
123
|
+
const agentsSrc = path.join(githubSrc, 'agents');
|
|
124
|
+
const agentsDest = path.join(githubDest, 'agents');
|
|
125
|
+
const result = copyDir(agentsSrc, agentsDest, options);
|
|
126
|
+
console.log(` ✅ Agents: ${result.copied} copied, ${result.skipped} skipped`);
|
|
127
|
+
totalCopied += result.copied;
|
|
128
|
+
totalSkipped += result.skipped;
|
|
129
|
+
totalErrors.push(...result.errors);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Skills
|
|
133
|
+
if (!skipSkills) {
|
|
134
|
+
const skillsSrc = path.join(githubSrc, 'skills');
|
|
135
|
+
const skillsDest = path.join(githubDest, 'skills');
|
|
136
|
+
const result = copyDir(skillsSrc, skillsDest, options);
|
|
137
|
+
console.log(` ✅ Skills: ${result.copied} copied, ${result.skipped} skipped`);
|
|
138
|
+
totalCopied += result.copied;
|
|
139
|
+
totalSkipped += result.skipped;
|
|
140
|
+
totalErrors.push(...result.errors);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Instructions
|
|
144
|
+
const instructionsSrc = path.join(githubSrc, 'instructions');
|
|
145
|
+
const instructionsDest = path.join(githubDest, 'instructions');
|
|
146
|
+
const instructionsResult = copyDir(instructionsSrc, instructionsDest, options);
|
|
147
|
+
console.log(` ✅ Instructions: ${instructionsResult.copied} copied, ${instructionsResult.skipped} skipped`);
|
|
148
|
+
totalCopied += instructionsResult.copied;
|
|
149
|
+
totalSkipped += instructionsResult.skipped;
|
|
150
|
+
totalErrors.push(...instructionsResult.errors);
|
|
151
|
+
|
|
152
|
+
// Hooks
|
|
153
|
+
if (!skipHooks) {
|
|
154
|
+
const hooksSrc = path.join(githubSrc, 'hooks');
|
|
155
|
+
const hooksDest = path.join(githubDest, 'hooks');
|
|
156
|
+
const result = copyDir(hooksSrc, hooksDest, options);
|
|
157
|
+
console.log(` ✅ Hooks: ${result.copied} copied, ${result.skipped} skipped`);
|
|
158
|
+
totalCopied += result.copied;
|
|
159
|
+
totalSkipped += result.skipped;
|
|
160
|
+
totalErrors.push(...result.errors);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// copilot-instructions.md
|
|
164
|
+
const copilotInstructionsSrc = path.join(githubSrc, 'copilot-instructions.md');
|
|
165
|
+
const copilotInstructionsDest = path.join(githubDest, 'copilot-instructions.md');
|
|
166
|
+
const copilotResult = copyFile(copilotInstructionsSrc, copilotInstructionsDest, options);
|
|
167
|
+
console.log(` ✅ copilot-instructions.md: ${copilotResult.copied} copied, ${copilotResult.skipped} skipped`);
|
|
168
|
+
totalCopied += copilotResult.copied;
|
|
169
|
+
totalSkipped += copilotResult.skipped;
|
|
170
|
+
totalErrors.push(...copilotResult.errors);
|
|
171
|
+
|
|
172
|
+
// AGENTS.md at root
|
|
173
|
+
const agentsMdSrc = path.join(PACKAGE_ROOT, 'AGENTS.md');
|
|
174
|
+
const agentsMdDest = path.join(targetDir, 'AGENTS.md');
|
|
175
|
+
const agentsMdResult = copyFile(agentsMdSrc, agentsMdDest, options);
|
|
176
|
+
console.log(` ✅ AGENTS.md: ${agentsMdResult.copied} copied, ${agentsMdResult.skipped} skipped`);
|
|
177
|
+
totalCopied += agentsMdResult.copied;
|
|
178
|
+
totalSkipped += agentsMdResult.skipped;
|
|
179
|
+
totalErrors.push(...agentsMdResult.errors);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Install Claude Code configurations (for backwards compatibility)
|
|
183
|
+
if (installClaude) {
|
|
184
|
+
console.log('📦 Installing Claude Code configurations...');
|
|
185
|
+
console.log(' ⚠️ Claude Code support uses the same .github structure');
|
|
186
|
+
console.log(' ⚠️ Claude Code also reads from .github/skills/ and .github/agents/');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Summary
|
|
190
|
+
console.log('');
|
|
191
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
192
|
+
console.log(`✨ Installation complete!`);
|
|
193
|
+
console.log(` 📁 Files copied: ${totalCopied}`);
|
|
194
|
+
console.log(` ⏭️ Files skipped: ${totalSkipped}`);
|
|
195
|
+
|
|
196
|
+
if (totalErrors.length > 0) {
|
|
197
|
+
console.log(` ❌ Errors: ${totalErrors.length}`);
|
|
198
|
+
totalErrors.forEach(e => console.log(` - ${e.path}: ${e.error}`));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
console.log('');
|
|
202
|
+
console.log('📖 Next steps:');
|
|
203
|
+
console.log(' 1. Review and customize .github/copilot-instructions.md');
|
|
204
|
+
console.log(' 2. Start Copilot CLI: copilot');
|
|
205
|
+
console.log(' 3. Use custom agents: /agent planner');
|
|
206
|
+
console.log(' 4. View all agents: /agent');
|
|
207
|
+
console.log('');
|
|
208
|
+
console.log('📚 Documentation: https://github.com/fyow/copilot-everything');
|
|
209
|
+
console.log('');
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
module.exports = { init };
|