@f12r/f12r 1.0.0 → 1.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/AI_CONTEXT.md ADDED
@@ -0,0 +1,186 @@
1
+ # AI Context For f12r
2
+
3
+ This file is meant to help a future AI agent understand the `f12r` project quickly.
4
+
5
+ ## Project Identity
6
+
7
+ - Project name: `f12r`
8
+ - CLI command: `f12r`
9
+ - Source repository: `https://github.com/FahimMuntashir/f12r`
10
+ - npm package: `@f12r/f12r`
11
+ - Homebrew tap repository: `https://github.com/FahimMuntashir/homebrew-f12r`
12
+ - Homebrew install command: `brew install FahimMuntashir/f12r/f12r`
13
+
14
+ ## Project Purpose
15
+
16
+ `f12r` is a macOS-focused Node.js CLI that helps developers set up and manage a development environment.
17
+
18
+ Main commands:
19
+
20
+ - `f12r doctor`
21
+ - `f12r setup`
22
+ - `f12r uninstall`
23
+
24
+ Bonus command behavior:
25
+
26
+ - `f12r setup --all`
27
+
28
+ ## Tech Stack
29
+
30
+ - Node.js
31
+ - CommonJS modules
32
+ - `commander`
33
+ - `inquirer`
34
+ - `chalk`
35
+ - `ora`
36
+ - `execa`
37
+
38
+ ## Current Source Structure
39
+
40
+ - [index.js](/Users/innospace/Desktop/f12r/index.js): CLI entrypoint and command registration
41
+ - [commands/doctor.js](/Users/innospace/Desktop/f12r/commands/doctor.js): doctor command
42
+ - [commands/setup.js](/Users/innospace/Desktop/f12r/commands/setup.js): setup command
43
+ - [commands/uninstall.js](/Users/innospace/Desktop/f12r/commands/uninstall.js): uninstall command
44
+ - [utils/checker.js](/Users/innospace/Desktop/f12r/utils/checker.js): command detection and version checks
45
+ - [utils/installer.js](/Users/innospace/Desktop/f12r/utils/installer.js): Homebrew/npm install helpers and VS Code extension installs
46
+ - [utils/logger.js](/Users/innospace/Desktop/f12r/utils/logger.js): colored log wrappers
47
+ - [utils/prompts.js](/Users/innospace/Desktop/f12r/utils/prompts.js): Inquirer prompt helpers
48
+ - [package.json](/Users/innospace/Desktop/f12r/package.json): package metadata and CLI bin declaration
49
+
50
+ ## Important Functional Behavior
51
+
52
+ ### `doctor`
53
+
54
+ Checks:
55
+
56
+ - Homebrew
57
+ - Git
58
+ - Node.js
59
+ - npm
60
+ - Docker
61
+ - VS Code
62
+
63
+ Shows installed/not installed and version when available.
64
+
65
+ ### `setup`
66
+
67
+ - ensures Homebrew exists
68
+ - checks installed tools
69
+ - skips tools already installed
70
+ - prompts to install missing tools unless `--all` is used
71
+ - optionally installs VS Code extensions:
72
+ - `esbenp.prettier-vscode`
73
+ - `dbaeumer.vscode-eslint`
74
+ - `GitHub.copilot`
75
+
76
+ ### `uninstall`
77
+
78
+ - shows supported removable tools
79
+ - uses Homebrew uninstall
80
+ - prompts before uninstalling
81
+
82
+ ## Publishing History And Constraints
83
+
84
+ ### npm naming
85
+
86
+ The unscoped name `f12r` was rejected by npm because it was too similar to an existing package.
87
+
88
+ The working package name is:
89
+
90
+ ```json
91
+ "name": "@f12r/f12r"
92
+ ```
93
+
94
+ ### CLI command name
95
+
96
+ Even though the npm package is scoped, the user-facing command remains:
97
+
98
+ ```json
99
+ "bin": {
100
+ "f12r": "index.js"
101
+ }
102
+ ```
103
+
104
+ ### Homebrew
105
+
106
+ Homebrew installation currently works through a custom tap, not `homebrew/core`.
107
+
108
+ Supported public install command:
109
+
110
+ ```bash
111
+ brew install FahimMuntashir/f12r/f12r
112
+ ```
113
+
114
+ Not supported yet:
115
+
116
+ ```bash
117
+ brew install f12r
118
+ ```
119
+
120
+ ## Homebrew Formula Details
121
+
122
+ Tap local path on the maintainer machine:
123
+
124
+ ```bash
125
+ /opt/homebrew/Library/Taps/fahimmuntashir/homebrew-f12r
126
+ ```
127
+
128
+ Formula path:
129
+
130
+ ```bash
131
+ /opt/homebrew/Library/Taps/fahimmuntashir/homebrew-f12r/Formula/f12r.rb
132
+ ```
133
+
134
+ Current formula strategy:
135
+
136
+ - `depends_on "node"`
137
+ - installs from npm tarball URL
138
+ - uses `system "npm", "install", *std_npm_args`
139
+ - wraps the `f12r` executable with `write_env_script`
140
+
141
+ ## Important Operational Notes
142
+
143
+ ### If a maintainer wants to release a new version
144
+
145
+ Use [RELEASE_GUIDE.md](/Users/innospace/Desktop/f12r/RELEASE_GUIDE.md).
146
+
147
+ High-level flow:
148
+
149
+ 1. change code
150
+ 2. bump version
151
+ 3. push git changes and tags
152
+ 4. publish npm package
153
+ 5. update Homebrew formula URL and SHA
154
+ 6. test brew install
155
+ 7. push the tap repo
156
+
157
+ ### If `brew untap` breaks the shell
158
+
159
+ This happened before because the shell was inside the tap directory when untapping it.
160
+
161
+ Always move elsewhere first:
162
+
163
+ ```bash
164
+ cd ~
165
+ brew untap FahimMuntashir/f12r
166
+ ```
167
+
168
+ ### If npm tokens are exposed
169
+
170
+ Revoke them immediately from npm account settings.
171
+
172
+ ## Recommended Future Improvements
173
+
174
+ - add automated tests
175
+ - add a proper README with examples and screenshots or terminal demos
176
+ - add GitHub Actions for lint/test on the source repo
177
+ - optionally support more tools
178
+ - optionally detect missing VS Code `code` shell command more explicitly
179
+
180
+ ## Best Files To Read First For Any Future Agent
181
+
182
+ 1. [package.json](/Users/innospace/Desktop/f12r/package.json)
183
+ 2. [index.js](/Users/innospace/Desktop/f12r/index.js)
184
+ 3. [utils/checker.js](/Users/innospace/Desktop/f12r/utils/checker.js)
185
+ 4. [utils/installer.js](/Users/innospace/Desktop/f12r/utils/installer.js)
186
+ 5. [RELEASE_GUIDE.md](/Users/innospace/Desktop/f12r/RELEASE_GUIDE.md)
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # f12r
2
+
3
+ `f12r` is a macOS CLI for checking, installing, and uninstalling common developer tools.
4
+
5
+ It helps developers:
6
+
7
+ - inspect their machine with `f12r doctor`
8
+ - install missing tools with `f12r setup`
9
+ - install everything non-interactively with `f12r setup --all`
10
+ - remove supported tools with `f12r uninstall`
11
+
12
+ ## Features
13
+
14
+ - checks for Homebrew, Git, Node.js, npm, Docker, and VS Code
15
+ - shows friendly colored output
16
+ - installs missing tools with Homebrew
17
+ - installs selected VS Code extensions
18
+ - supports interactive and `--all` setup flows
19
+ - works as a global CLI command: `f12r`
20
+
21
+ ## Install
22
+
23
+ ### Homebrew
24
+
25
+ ```bash
26
+ brew install FahimMuntashir/f12r/f12r
27
+ ```
28
+
29
+ ### npm
30
+
31
+ ```bash
32
+ npm install -g @f12r/f12r
33
+ ```
34
+
35
+ ## Quick Start
36
+
37
+ ```bash
38
+ f12r --help
39
+ f12r doctor
40
+ f12r setup
41
+ ```
42
+
43
+ ## Commands
44
+
45
+ ### `f12r doctor`
46
+
47
+ Checks whether these tools are installed:
48
+
49
+ - Homebrew
50
+ - Git
51
+ - Node.js
52
+ - npm
53
+ - Docker
54
+ - VS Code
55
+
56
+ It also shows version info when available.
57
+
58
+ ### `f12r setup`
59
+
60
+ - detects missing tools
61
+ - installs Homebrew automatically if needed
62
+ - asks before installing each missing tool
63
+ - can install these VS Code extensions:
64
+ - `esbenp.prettier-vscode`
65
+ - `dbaeumer.vscode-eslint`
66
+ - `GitHub.copilot`
67
+
68
+ ### `f12r setup --all`
69
+
70
+ Installs all missing supported tools without per-tool prompts.
71
+
72
+ ### `f12r uninstall`
73
+
74
+ Lets the user choose a supported tool to remove with Homebrew.
75
+
76
+ ## Local Development
77
+
78
+ ```bash
79
+ npm install
80
+ node index.js --help
81
+ node index.js doctor
82
+ node index.js setup
83
+ node index.js uninstall
84
+ ```
85
+
86
+ To link it globally on your machine:
87
+
88
+ ```bash
89
+ npm link
90
+ ```
91
+
92
+ ## Tech Stack
93
+
94
+ - Node.js
95
+ - CommonJS
96
+ - commander
97
+ - inquirer
98
+ - chalk
99
+ - ora
100
+ - execa
101
+
102
+ ## Project Links
103
+
104
+ - GitHub source: `https://github.com/FahimMuntashir/f12r`
105
+ - Homebrew tap: `https://github.com/FahimMuntashir/homebrew-f12r`
106
+ - npm package: `@f12r/f12r`
107
+
108
+ ## Maintainer Notes
109
+
110
+ If you are updating or republishing this project later, use:
111
+
112
+ - `RELEASE_GUIDE.md` for the full release workflow
113
+ - `AI_CONTEXT.md` for future AI-agent handoff context
@@ -0,0 +1,289 @@
1
+ # f12r Release Guide
2
+
3
+ This file is a beginner-friendly guide for publishing and updating `f12r`.
4
+
5
+ ## Quick Summary
6
+
7
+ The project has 3 public pieces:
8
+
9
+ 1. Source code repository
10
+ 2. npm package
11
+ 3. Homebrew formula
12
+
13
+ Current public setup:
14
+
15
+ - GitHub source repo: `https://github.com/FahimMuntashir/f12r`
16
+ - Homebrew tap repo: `https://github.com/FahimMuntashir/homebrew-f12r`
17
+ - npm package name: `@f12r/f12r`
18
+ - Homebrew install command: `brew install FahimMuntashir/f12r/f12r`
19
+
20
+ ## One-Time Setup That Is Already Done
21
+
22
+ These are already completed for this project:
23
+
24
+ - GitHub repo created
25
+ - npm account connected
26
+ - npm package published
27
+ - Homebrew tap created
28
+ - Homebrew formula added
29
+ - Global `brew install FahimMuntashir/f12r/f12r` tested successfully
30
+
31
+ ## How Users Install f12r
32
+
33
+ ### Option 1: Homebrew
34
+
35
+ ```bash
36
+ brew install FahimMuntashir/f12r/f12r
37
+ ```
38
+
39
+ ### Option 2: npm
40
+
41
+ ```bash
42
+ npm install -g @f12r/f12r
43
+ ```
44
+
45
+ ## Very Important Safety Notes
46
+
47
+ ### 1. If you ever paste an npm token somewhere public
48
+
49
+ Revoke it immediately in npm account settings and create a new token.
50
+
51
+ ### 2. Do not rename the CLI command
52
+
53
+ The npm package name is scoped as `@f12r/f12r`, but the actual command should stay:
54
+
55
+ ```bash
56
+ f12r
57
+ ```
58
+
59
+ ### 3. `brew install f12r` is not available yet
60
+
61
+ The public install command for now is:
62
+
63
+ ```bash
64
+ brew install FahimMuntashir/f12r/f12r
65
+ ```
66
+
67
+ `brew install f12r` only becomes possible if Homebrew later accepts the package into `homebrew/core`.
68
+
69
+ ## Normal Release Flow For A New Version
70
+
71
+ Example: releasing `1.0.1`
72
+
73
+ ### Step 1. Make your code changes
74
+
75
+ Update the source code in this repo and test locally:
76
+
77
+ ```bash
78
+ npm install
79
+ node index.js doctor
80
+ node index.js --help
81
+ ```
82
+
83
+ If needed:
84
+
85
+ ```bash
86
+ node index.js setup
87
+ node index.js uninstall
88
+ ```
89
+
90
+ ### Step 2. Bump the version
91
+
92
+ For a patch release:
93
+
94
+ ```bash
95
+ npm version patch
96
+ ```
97
+
98
+ For a minor release:
99
+
100
+ ```bash
101
+ npm version minor
102
+ ```
103
+
104
+ For a major release:
105
+
106
+ ```bash
107
+ npm version major
108
+ ```
109
+
110
+ This updates `package.json`, updates `package-lock.json`, and creates a git tag.
111
+
112
+ ### Step 3. Push source code to GitHub
113
+
114
+ ```bash
115
+ git push
116
+ git push --tags
117
+ ```
118
+
119
+ ### Step 4. Publish the new npm version
120
+
121
+ ```bash
122
+ npm publish --access=public
123
+ ```
124
+
125
+ Then verify:
126
+
127
+ ```bash
128
+ npm view @f12r/f12r version
129
+ ```
130
+
131
+ If npm has a short delay, wait a few minutes and try again.
132
+
133
+ ### Step 5. Update the Homebrew formula
134
+
135
+ The formula lives in the tap repo, not in this source repo.
136
+
137
+ Formula path:
138
+
139
+ ```bash
140
+ /opt/homebrew/Library/Taps/fahimmuntashir/homebrew-f12r/Formula/f12r.rb
141
+ ```
142
+
143
+ Update:
144
+
145
+ - `url`
146
+ - `sha256`
147
+
148
+ The URL format will be:
149
+
150
+ ```bash
151
+ https://registry.npmjs.org/@f12r/f12r/-/f12r-VERSION.tgz
152
+ ```
153
+
154
+ Example:
155
+
156
+ ```bash
157
+ https://registry.npmjs.org/@f12r/f12r/-/f12r-1.0.1.tgz
158
+ ```
159
+
160
+ ### Step 6. Get the new SHA256
161
+
162
+ Run:
163
+
164
+ ```bash
165
+ curl -L https://registry.npmjs.org/@f12r/f12r/-/f12r-1.0.1.tgz | shasum -a 256
166
+ ```
167
+
168
+ Copy the SHA256 output into the formula.
169
+
170
+ ### Step 7. Test the Homebrew formula
171
+
172
+ First move to a safe existing directory:
173
+
174
+ ```bash
175
+ cd ~
176
+ ```
177
+
178
+ Then run:
179
+
180
+ ```bash
181
+ brew audit --strict FahimMuntashir/f12r/f12r
182
+ brew reinstall --build-from-source FahimMuntashir/f12r/f12r
183
+ f12r --version
184
+ f12r doctor
185
+ ```
186
+
187
+ If `brew reinstall` gives trouble, use:
188
+
189
+ ```bash
190
+ brew uninstall f12r
191
+ brew install FahimMuntashir/f12r/f12r
192
+ ```
193
+
194
+ ### Step 8. Push the updated formula
195
+
196
+ ```bash
197
+ cd /opt/homebrew/Library/Taps/fahimmuntashir/homebrew-f12r
198
+ git status
199
+ git add Formula/f12r.rb
200
+ git commit -m "Update f12r to 1.0.1"
201
+ git push
202
+ ```
203
+
204
+ After this, Homebrew users can install the new version.
205
+
206
+ ## First-Time Homebrew Formula Reference
207
+
208
+ Current working formula:
209
+
210
+ ```rb
211
+ class F12r < Formula
212
+ desc "CLI to set up and manage a macOS development environment"
213
+ homepage "https://github.com/FahimMuntashir/f12r"
214
+ url "https://registry.npmjs.org/@f12r/f12r/-/f12r-1.0.0.tgz"
215
+ sha256 "aa8232c019f1d368f775f973bd743494f7747de6a6db074d6cbe5762a0e660b9"
216
+ license "MIT"
217
+
218
+ depends_on "node"
219
+
220
+ def install
221
+ system "npm", "install", *std_npm_args
222
+ (bin/"f12r").write_env_script libexec/"bin/f12r", PATH: "#{Formula["node"].opt_bin}:$PATH"
223
+ end
224
+
225
+ test do
226
+ assert_match "f12r", shell_output("#{bin}/f12r --help")
227
+ end
228
+ end
229
+ ```
230
+
231
+ ## Common Problems
232
+
233
+ ### Problem: npm says package name is too similar to another package
234
+
235
+ Use the scoped npm package name:
236
+
237
+ ```json
238
+ "name": "@f12r/f12r"
239
+ ```
240
+
241
+ ### Problem: `npm view @f12r/f12r version` returns 404 right after publish
242
+
243
+ Wait a few minutes and try again. npm can take a short time to update.
244
+
245
+ ### Problem: `brew untap` breaks the current terminal directory
246
+
247
+ This happens if you are standing inside the tap folder while untapping it.
248
+
249
+ Wrong:
250
+
251
+ ```bash
252
+ cd /opt/homebrew/Library/Taps/fahimmuntashir/homebrew-f12r
253
+ brew untap FahimMuntashir/f12r
254
+ ```
255
+
256
+ Correct:
257
+
258
+ ```bash
259
+ cd ~
260
+ brew untap FahimMuntashir/f12r
261
+ ```
262
+
263
+ ### Problem: Homebrew install works locally but not for others
264
+
265
+ Check these:
266
+
267
+ - the tap repo was pushed to GitHub
268
+ - the formula file was committed and pushed
269
+ - the npm tarball URL in the formula is correct
270
+ - the SHA256 matches the published tarball
271
+
272
+ ### Problem: `brew install f12r` does not work
273
+
274
+ That is expected for now.
275
+
276
+ Use:
277
+
278
+ ```bash
279
+ brew install FahimMuntashir/f12r/f12r
280
+ ```
281
+
282
+ ## What To Tell Future AI Agents
283
+
284
+ If you use another AI later, share:
285
+
286
+ - [AI_CONTEXT.md](/Users/innospace/Desktop/f12r/AI_CONTEXT.md)
287
+ - [RELEASE_GUIDE.md](/Users/innospace/Desktop/f12r/RELEASE_GUIDE.md)
288
+
289
+ That will give the AI the correct project and publishing context quickly.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@f12r/f12r",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A macOS developer environment setup and management CLI.",
5
5
  "main": "index.js",
6
6
  "bin": {