vibe-ship-it 1.1.0 → 1.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.
Files changed (3) hide show
  1. package/README.md +3 -7
  2. package/bin/init.js +67 -20
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -45,17 +45,13 @@ Works with **VS Code Copilot**, **Claude Code**, and **OpenAI Codex**.
45
45
 
46
46
  ### Option 0: Install with npm (easiest)
47
47
 
48
- ```bash
49
- npx vibe-ship-it
50
- ```
51
-
52
- Then run in your project:
53
-
54
48
  ```bash
55
49
  npx vibe-ship-it init
56
50
  ```
57
51
 
58
- Optional:
52
+ It'll ask which AI tool you use (VS Code Copilot, Claude Code, or OpenAI Codex) and install only what you need.
53
+
54
+ To remove:
59
55
 
60
56
  ```bash
61
57
  npx vibe-ship-it remove
package/bin/init.js CHANGED
@@ -10,28 +10,69 @@ const command = args[0] || 'help'
10
10
 
11
11
  if (command === 'init') {
12
12
  console.log('')
13
- console.log(' 🚀 just-ship-it')
14
- console.log(' Installing skill pack for designers...')
15
- console.log(' Works with VS Code Copilot, Claude Code, and OpenAI Codex')
13
+ console.log(' 🚀 vibe-ship-it')
14
+ console.log(' AI skill pack for designers')
15
+ console.log('')
16
+ console.log(' Which AI tool are you using?')
17
+ console.log('')
18
+ console.log(' 1. VS Code Copilot')
19
+ console.log(' 2. Claude Code')
20
+ console.log(' 3. OpenAI Codex')
21
+ console.log(' 4. All of the above (installs everything)')
16
22
  console.log('')
17
23
 
18
- // Rename _github → .github and _claude → .claude during copy
19
- const renameMap = {
20
- '_github': '.github',
21
- '_claude': '.claude',
22
- }
24
+ const readline = require('readline')
25
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
23
26
 
24
- copyDir(templateDir, targetDir, renameMap)
27
+ rl.question(' Pick a number (1-4, default: 4): ', (answer) => {
28
+ rl.close()
29
+ const choice = (answer || '4').trim()
25
30
 
26
- console.log(' ✅ Done! Installed:')
27
- console.log('')
28
- console.log(' 4 agents (assistant, checker, shipper, investigator)')
29
- console.log(' 12 skills (build-page, save-data, add-login, and more)')
30
- console.log(' 6 commands (/check, /ship, /wow, /stuck, /save, /explain)')
31
- console.log('')
32
- console.log(' Just open Copilot Chat or Claude Code and say what you want.')
33
- console.log(' Example: "I want to build a portfolio site"')
34
- console.log('')
31
+ // Determine what to skip based on choice
32
+ const skipPaths = new Set()
33
+ if (choice === '1') {
34
+ // VS Code Copilot only — skip Claude and Codex files
35
+ skipPaths.add('CLAUDE.md')
36
+ skipPaths.add('AGENTS.md')
37
+ skipPaths.add('_claude')
38
+ } else if (choice === '2') {
39
+ // Claude Code only — skip Copilot and Codex files
40
+ skipPaths.add('AGENTS.md')
41
+ skipPaths.add('_github')
42
+ } else if (choice === '3') {
43
+ // OpenAI Codex only — skip Copilot and Claude files
44
+ skipPaths.add('_github')
45
+ skipPaths.add('_claude')
46
+ skipPaths.add('CLAUDE.md')
47
+ }
48
+ // choice '4' or anything else = install everything
49
+
50
+ const renameMap = {
51
+ '_github': '.github',
52
+ '_claude': '.claude',
53
+ }
54
+
55
+ console.log('')
56
+ copyDir(templateDir, targetDir, renameMap, skipPaths)
57
+
58
+ const tools = { '1': 'VS Code Copilot', '2': 'Claude Code', '3': 'OpenAI Codex', '4': 'all tools' }
59
+ const toolName = tools[choice] || 'all tools'
60
+
61
+ console.log('')
62
+ console.log(` ✅ Done! Installed for ${toolName}:`)
63
+ console.log('')
64
+ if (choice !== '1' && choice !== '3') {
65
+ console.log(' 6 commands (/check, /ship, /wow, /stuck, /save, /explain)')
66
+ }
67
+ if (choice !== '2' && choice !== '3') {
68
+ console.log(' 4 agents (assistant, checker, shipper, investigator)')
69
+ }
70
+ console.log(' 12 skills (build-page, save-data, add-login, and more)')
71
+ console.log('')
72
+ console.log(' Just say what you want in plain English.')
73
+ console.log(' Example: "I want to build a portfolio site"')
74
+ console.log('')
75
+ })
35
76
  } else if (command === 'remove') {
36
77
  const dirs = [
37
78
  path.join(targetDir, '.github', 'agents'),
@@ -41,6 +82,7 @@ if (command === 'init') {
41
82
  const files = [
42
83
  path.join(targetDir, '.github', 'copilot-instructions.md'),
43
84
  path.join(targetDir, 'CLAUDE.md'),
85
+ path.join(targetDir, 'AGENTS.md'),
44
86
  ]
45
87
 
46
88
  dirs.forEach(dir => {
@@ -109,10 +151,15 @@ if (command === 'init') {
109
151
  console.log('')
110
152
  }
111
153
 
112
- function copyDir(src, dest, renameMap) {
154
+ function copyDir(src, dest, renameMap, skipPaths) {
113
155
  const entries = fs.readdirSync(src, { withFileTypes: true })
114
156
 
115
157
  for (const entry of entries) {
158
+ // Skip paths based on user's tool choice
159
+ if (skipPaths && skipPaths.has(entry.name)) {
160
+ continue
161
+ }
162
+
116
163
  const srcPath = path.join(src, entry.name)
117
164
  const destName = (renameMap && renameMap[entry.name]) || entry.name
118
165
  const destPath = path.join(dest, destName)
@@ -121,7 +168,7 @@ function copyDir(src, dest, renameMap) {
121
168
  if (!fs.existsSync(destPath)) {
122
169
  fs.mkdirSync(destPath, { recursive: true })
123
170
  }
124
- copyDir(srcPath, destPath, renameMap)
171
+ copyDir(srcPath, destPath, renameMap, skipPaths)
125
172
  } else {
126
173
  // Don't overwrite existing files
127
174
  if (fs.existsSync(destPath)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-ship-it",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "AI skill pack for designers who vibe-code. 4 agents, 12 skills — just say what you want in plain English.",
5
5
  "bin": {
6
6
  "vibe-ship-it": "./bin/init.js"