@warpgogol/forge 0.17.0 → 0.18.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/README.md +227 -31
- package/README.uk.md +471 -0
- package/dist/bin/cli.js +0 -0
- package/package.json +163 -60
package/README.md
CHANGED
|
@@ -1,20 +1,203 @@
|
|
|
1
1
|
# @warpgogol/forge
|
|
2
2
|
|
|
3
|
+
[Українська](README.uk.md) | English
|
|
4
|
+
|
|
3
5
|
Portable governance engine for AI-assisted project development. Provides skills, RFC/ADR workflows, naming conventions, spec vendoring, and a CLI — all framework-agnostic and dependency-free (only `yaml` + `zod`).
|
|
4
6
|
|
|
5
|
-
##
|
|
7
|
+
## What you can build with Forge
|
|
8
|
+
|
|
9
|
+
Forge supports four kinds of projects. You pick one when you start — everything else is automatic.
|
|
10
|
+
|
|
11
|
+
| Project type | What it is | Example ideas |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| **Website** | A public website or web app — pages, blog, portfolio, landing page, online store | Photography studio site, restaurant website, SaaS landing page |
|
|
14
|
+
| **Browser game** | An interactive game that runs in a web browser — 2D, arcade, puzzle, adventure | Catch falling stars, tile-matching puzzle, platformer |
|
|
15
|
+
| **Video** | A programmatic video composition — animated logo, intro, product showcase, motion design | Brand intro video, product demo, social media ad clip |
|
|
16
|
+
| **Governance / library** | A code library or governance-only project — no website, no game, no video, just structure and documentation | npm package, internal toolkit, documentation hub |
|
|
17
|
+
|
|
18
|
+
Each project type gets its own scaffold: the right folder structure, the right dependencies, the right tools. You don't need to know what any of those are — Forge sets them up for you.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Complete installation guide (from zero)
|
|
23
|
+
|
|
24
|
+
If you've never programmed before, this section takes you from a completely empty computer to a working Forge setup. Follow the steps for your operating system.
|
|
25
|
+
|
|
26
|
+
### What you need
|
|
27
|
+
|
|
28
|
+
You need two free programs:
|
|
29
|
+
|
|
30
|
+
- **Node.js** (version 22 or newer) — lets your computer run JavaScript tools.
|
|
31
|
+
- **pnpm** — the package manager Forge uses to install dependencies. It's built into Node.js and just needs to be switched on.
|
|
32
|
+
|
|
33
|
+
Both are free. You install Node.js first, then enable pnpm with a single command.
|
|
34
|
+
|
|
35
|
+
### Ubuntu
|
|
36
|
+
|
|
37
|
+
#### Step 1 — Install Node.js
|
|
38
|
+
|
|
39
|
+
1. Open the **Terminal** app (press `Ctrl + Alt + T`, or search for "Terminal" in your applications).
|
|
40
|
+
|
|
41
|
+
2. Download and install Node.js 22 (LTS) by pasting this command and pressing Enter:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
You'll be asked for your password — type it (you won't see the characters as you type, that's normal) and press Enter.
|
|
48
|
+
|
|
49
|
+
3. Verify it worked:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
node --version
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
You should see a version number like `v22.x.x`, not an error message.
|
|
56
|
+
|
|
57
|
+
#### Step 2 — Enable pnpm
|
|
58
|
+
|
|
59
|
+
Node.js includes a tool called **Corepack** that manages package managers. Enable pnpm with:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
corepack enable pnpm
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Verify:
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
pnpm --version
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
You should see a version number like `10.x.x`.
|
|
72
|
+
|
|
73
|
+
#### Step 3 — Install Forge globally
|
|
74
|
+
|
|
75
|
+
Installing Forge globally means the `forge` command is available everywhere on your computer, not just inside one project:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
pnpm add -g @warpgogol/forge
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Verify:
|
|
6
82
|
|
|
7
83
|
```sh
|
|
8
|
-
|
|
9
|
-
# or
|
|
10
|
-
pnpm add @warpgogol/forge
|
|
84
|
+
forge --version
|
|
11
85
|
```
|
|
12
86
|
|
|
87
|
+
You should see a version number. Forge is now installed and ready.
|
|
88
|
+
|
|
89
|
+
#### Step 4 — Install an AI-powered IDE
|
|
90
|
+
|
|
91
|
+
Forge works through conversation with an AI agent. You need an IDE that supports AI agents. We recommend **Windsurf** (tested with Forge):
|
|
92
|
+
|
|
93
|
+
1. Go to [windsurf.com](https://windsurf.com) and download the Linux version.
|
|
94
|
+
2. Open the downloaded file and follow the installer.
|
|
95
|
+
3. Launch Windsurf.
|
|
96
|
+
|
|
97
|
+
You can also use **Cursor** ([cursor.com](https://cursor.com)) or any IDE that supports AI agent skills.
|
|
98
|
+
|
|
99
|
+
### Windows
|
|
100
|
+
|
|
101
|
+
#### Step 1 — Install Node.js
|
|
102
|
+
|
|
103
|
+
1. Go to [nodejs.org](https://nodejs.org) in your web browser.
|
|
104
|
+
2. Download the **LTS version** (it will say "LTS" and "Recommended for Most Users"). It should be version 22.x or newer.
|
|
105
|
+
3. Run the downloaded installer (`.msi` file). Accept all default options by clicking **Next** through each screen, then **Install**. If Windows asks for permission, click **Yes**.
|
|
106
|
+
|
|
107
|
+
4. Verify it worked. Open **PowerShell** (search for "PowerShell" in the Start menu) and type:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
node --version
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
You should see a version number like `v22.x.x`, not an error message.
|
|
114
|
+
|
|
115
|
+
#### Step 2 — Enable pnpm
|
|
116
|
+
|
|
117
|
+
Node.js includes a tool called **Corepack** that manages package managers. Enable pnpm with:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
corepack enable pnpm
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Verify:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
pnpm --version
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
You should see a version number like `10.x.x`.
|
|
130
|
+
|
|
131
|
+
#### Step 3 — Install Forge globally
|
|
132
|
+
|
|
133
|
+
Installing Forge globally means the `forge` command is available everywhere on your computer, not just inside one project:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
pnpm add -g @warpgogol/forge
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Verify:
|
|
140
|
+
|
|
141
|
+
```sh
|
|
142
|
+
forge --version
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
You should see a version number. Forge is now installed and ready.
|
|
146
|
+
|
|
147
|
+
#### Step 4 — Install an AI-powered IDE
|
|
148
|
+
|
|
149
|
+
Forge works through conversation with an AI agent. You need an IDE that supports AI agents. We recommend **Windsurf** (tested with Forge):
|
|
150
|
+
|
|
151
|
+
1. Go to [windsurf.com](https://windsurf.com) and download the Windows version.
|
|
152
|
+
2. Run the downloaded installer and follow the setup wizard.
|
|
153
|
+
3. Launch Windsurf.
|
|
154
|
+
|
|
155
|
+
You can also use **Cursor** ([cursor.com](https://cursor.com)) or any IDE that supports AI agent skills.
|
|
156
|
+
|
|
157
|
+
### Optional — Install FFmpeg (only for video projects)
|
|
158
|
+
|
|
159
|
+
If you're planning to create **video** projects (the `editframe` profile), you need **FFmpeg** — a free tool for processing video and audio.
|
|
160
|
+
|
|
161
|
+
**Ubuntu:**
|
|
162
|
+
|
|
163
|
+
```sh
|
|
164
|
+
sudo apt-get install -y ffmpeg
|
|
165
|
+
ffmpeg -version
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Windows:**
|
|
169
|
+
|
|
170
|
+
1. Go to [ffmpeg.org/download.html](https://ffmpeg.org/download.html) in your browser.
|
|
171
|
+
2. Download a Windows build (look for "Windows builds" — the gyan.dev or BtbN builds are good choices).
|
|
172
|
+
3. Extract the downloaded `.zip` file to a folder, e.g. `C:\ffmpeg`.
|
|
173
|
+
4. Add FFmpeg to your system PATH:
|
|
174
|
+
- Open the Start menu, search for "Environment Variables", and click "Edit the system environment variables".
|
|
175
|
+
- Click **Environment Variables**.
|
|
176
|
+
- Under "System variables" (or "User variables"), find **Path**, select it, and click **Edit**.
|
|
177
|
+
- Click **New** and type `C:\ffmpeg\bin` (or wherever you extracted FFmpeg, in the `bin` subfolder).
|
|
178
|
+
- Click **OK** on all three windows.
|
|
179
|
+
5. Close and reopen PowerShell, then verify:
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
ffmpeg -version
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
You should see version information, not an error.
|
|
186
|
+
|
|
187
|
+
### Troubleshooting
|
|
188
|
+
|
|
189
|
+
- **"command not found" after installing Node.js** — Close and reopen your terminal (Ubuntu) or PowerShell (Windows). The system needs to reload the list of available commands.
|
|
190
|
+
- **"EACCES permission denied" on Ubuntu when installing Forge globally** — Run `sudo pnpm add -g @warpgogol/forge` instead.
|
|
191
|
+
- **"corepack: command not found"** — Your Node.js version is too old. Install Node.js 22+ using the steps above.
|
|
192
|
+
- **Windsurf can't find `forge`** — Close and reopen Windsurf after installing Forge. IDEs need to restart to pick up new global commands.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
13
196
|
## Quick start
|
|
14
197
|
|
|
15
198
|
### For creative operators — no terminal needed
|
|
16
199
|
|
|
17
|
-
You don't need to know what a terminal is. You don't need to type a single command. If you have an AI-powered IDE
|
|
200
|
+
You don't need to know what a terminal is. You don't need to type a single command. If you have an AI-powered IDE — like Windsurf or Cursor — Forge works entirely through conversation.
|
|
18
201
|
|
|
19
202
|
#### Start a new project from scratch
|
|
20
203
|
|
|
@@ -34,16 +217,22 @@ You don't need to know what a terminal is. You don't need to type a single comma
|
|
|
34
217
|
|
|
35
218
|
> I want to make a browser game where you catch falling stars.
|
|
36
219
|
|
|
220
|
+
Or:
|
|
221
|
+
|
|
222
|
+
> I want to create a TypeScript library for calculating astrology charts.
|
|
223
|
+
|
|
37
224
|
That's it. The AI agent will do everything else:
|
|
38
225
|
- Install Forge and all necessary tools
|
|
39
|
-
- Set up the project structure based on what you described (video, website, game, etc.)
|
|
226
|
+
- Set up the project structure based on what you described (video, website, game, library, etc.)
|
|
40
227
|
- Configure language preferences and project settings
|
|
41
|
-
- Start a live preview so you can see your work
|
|
228
|
+
- Start a live preview so you can see your work (for websites, games, and videos)
|
|
42
229
|
- Tell you the URL to open in your browser
|
|
43
230
|
|
|
44
|
-
4. **Watch the preview.**
|
|
231
|
+
4. **Watch the preview.** For websites, games, and videos, the AI agent will give you a localhost link. Click it — your project is already running. As you describe changes, the agent updates the project and the preview refreshes automatically.
|
|
232
|
+
|
|
233
|
+
For governance and library projects, there's no visual preview — the agent will set up the project structure and tell you when it's ready.
|
|
45
234
|
|
|
46
|
-
5. **Create together.** From here on, you just talk. Want a different color? Want to add a scene? Want to change the music? Just say it. The agent handles all the technical work.
|
|
235
|
+
5. **Create together.** From here on, you just talk. Want a different color? Want to add a scene? Want to change the music? Want to add a new function to your library? Just say it. The agent handles all the technical work.
|
|
47
236
|
|
|
48
237
|
#### Bring an existing project into Forge
|
|
49
238
|
|
|
@@ -56,11 +245,11 @@ If you already have a project somewhere else and want to move it into Forge:
|
|
|
56
245
|
> I want to bring my existing project into Forge. It's located at /path/to/my/project.
|
|
57
246
|
|
|
58
247
|
The agent will:
|
|
59
|
-
- Detect what kind of project it is (website, video, game, etc.)
|
|
248
|
+
- Detect what kind of project it is (website, video, game, library, etc.)
|
|
60
249
|
- Move all your files into the new Forge project — including hidden files like `.env`
|
|
61
250
|
- Optionally bring your git history
|
|
62
251
|
- Verify everything builds correctly
|
|
63
|
-
- Start a live preview
|
|
252
|
+
- Start a live preview (for visual project types)
|
|
64
253
|
|
|
65
254
|
#### What if something goes wrong?
|
|
66
255
|
|
|
@@ -74,15 +263,20 @@ Just tell the AI agent. It can check the project's health, fix issues, and expla
|
|
|
74
263
|
|
|
75
264
|
```sh
|
|
76
265
|
# Create a new project (scaffold + init + skills + AGENTS.md in one command)
|
|
77
|
-
|
|
266
|
+
forge create my-project
|
|
78
267
|
|
|
79
268
|
# With a specific stack profile
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
269
|
+
forge create my-site --profile astro-typescript-turborepo
|
|
270
|
+
forge create my-game --profile phaser-turborepo
|
|
271
|
+
forge create my-video --profile editframe
|
|
272
|
+
forge create my-library --profile forge-shell
|
|
83
273
|
|
|
84
|
-
|
|
85
|
-
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
If Forge is not installed globally, use `pnpm dlx` instead:
|
|
277
|
+
|
|
278
|
+
```sh
|
|
279
|
+
pnpm dlx @warpgogol/forge create my-project
|
|
86
280
|
```
|
|
87
281
|
|
|
88
282
|
#### Bring an existing project into Forge
|
|
@@ -91,7 +285,7 @@ There is no CLI command for transplant — it is an interactive, AI-guided proce
|
|
|
91
285
|
|
|
92
286
|
```sh
|
|
93
287
|
# 1. Create a new empty Forge project
|
|
94
|
-
|
|
288
|
+
forge create my-project
|
|
95
289
|
|
|
96
290
|
# 2. Open the project in Windsurf (tested with forge) or your preferred IDE
|
|
97
291
|
|
|
@@ -108,29 +302,31 @@ npx forge create my-project
|
|
|
108
302
|
|
|
109
303
|
```sh
|
|
110
304
|
# Check project health
|
|
111
|
-
|
|
305
|
+
forge doctor
|
|
112
306
|
|
|
113
307
|
# Validate RFCs
|
|
114
|
-
|
|
308
|
+
forge rfc.validate
|
|
115
309
|
|
|
116
310
|
# List available skills
|
|
117
|
-
|
|
311
|
+
forge skill.list
|
|
118
312
|
```
|
|
119
313
|
|
|
120
314
|
## Stack profiles
|
|
121
315
|
|
|
122
316
|
A stack profile defines the project scaffold: directory structure, dependencies, CI config, and first workspace. Choose a profile with `--profile` when creating a new project.
|
|
123
317
|
|
|
124
|
-
| Profile | Description | First workspace | Use case |
|
|
125
|
-
| --- | --- | --- | --- |
|
|
126
|
-
| `forge-shell` | Minimal Forge shell (default) | — | Governance-only projects, libraries, non-web projects |
|
|
127
|
-
| `astro-typescript-turborepo` | Astro + TypeScript + pnpm + Turborepo | `sites/my-site` | Websites, web apps, content-driven sites |
|
|
128
|
-
| `phaser-turborepo` | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Browser games, interactive experiences |
|
|
129
|
-
| `editframe` | Editframe React + Vite + TailwindCSS | `compositions/my-first-video` | Video compositions, brand videos, motion design |
|
|
318
|
+
| Profile | Project type | Description | First workspace | Use case |
|
|
319
|
+
| --- | --- | --- | --- | --- |
|
|
320
|
+
| `forge-shell` | Governance / library | Minimal Forge shell (default) | — | Governance-only projects, libraries, non-web projects |
|
|
321
|
+
| `astro-typescript-turborepo` | Website | Astro + TypeScript + pnpm + Turborepo | `sites/my-site` | Websites, web apps, content-driven sites |
|
|
322
|
+
| `phaser-turborepo` | Browser game | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Browser games, interactive experiences |
|
|
323
|
+
| `editframe` | Video | Editframe React + Vite + TailwindCSS | `compositions/my-first-video` | Video compositions, brand videos, motion design |
|
|
324
|
+
|
|
325
|
+
The `editframe` profile also supports an **HTML template** (instead of React) for users who prefer web components over JSX. Choose between the two during project setup.
|
|
130
326
|
|
|
131
327
|
```sh
|
|
132
328
|
# List available profiles (after install)
|
|
133
|
-
|
|
329
|
+
forge profile.validate
|
|
134
330
|
```
|
|
135
331
|
|
|
136
332
|
When you bring an existing project through the `/forge-bootstrap` transplant mode, Forge detects the matching profile automatically by checking for marker files (`astro.config.*`, `phaser.config.*`, `editframe.config.*`, etc.).
|
|
@@ -141,13 +337,13 @@ When a new version of `@warpgogol/forge` is published, consumers upgrade additiv
|
|
|
141
337
|
|
|
142
338
|
```sh
|
|
143
339
|
# 1. Install the latest version
|
|
144
|
-
|
|
340
|
+
pnpm add -g @warpgogol/forge@latest
|
|
145
341
|
|
|
146
342
|
# 2. Sync skills and binding defaults from the installed version
|
|
147
|
-
|
|
343
|
+
forge upgrade
|
|
148
344
|
|
|
149
345
|
# 3. Check project health
|
|
150
|
-
|
|
346
|
+
forge doctor
|
|
151
347
|
```
|
|
152
348
|
|
|
153
349
|
`forge upgrade` is additive — it never overwrites operator-set bindings, never deletes files, and is idempotent. It updates `forge.syncedVersion` in `forge.yaml` to track the last synced version. Use `--dry-run` to preview changes.
|
package/README.uk.md
ADDED
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
# @warpgogol/forge
|
|
2
|
+
|
|
3
|
+
Українська | [English](README.md)
|
|
4
|
+
|
|
5
|
+
Портативний рушій управління для розробки проєктів за допомогою ШІ. Надає навички, RFC/ADR робочі процеси, угоди про найменування, вендоринг специфікацій та CLI — все незалежне від фреймворку та без зайвих залежностей (тільки `yaml` + `zod`).
|
|
6
|
+
|
|
7
|
+
## Що можна створити за допомогою Forge
|
|
8
|
+
|
|
9
|
+
Forge підтримує чотири типи проєктів. Ви обираєте один на старті — все інше відбувається автоматично.
|
|
10
|
+
|
|
11
|
+
| Тип проєкту | Що це | Приклади |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| **Вебсайт** | Публічний сайт або вебзастосунок — сторінки, блог, портфоліо, лендінг, інтернет-магазин | Сайт фотостудії, сайт ресторану, лендінг SaaS |
|
|
14
|
+
| **Браузерна гра** | Інтерактивна гра, що працює в браузері — 2D, аркада, головоломка, пригода | Лови зірки, головоломка з плитками, платформер |
|
|
15
|
+
| **Відео** | Програмна відеокомпозиція — анімований логотип, інтро, презентація продукту, motion-дизайн | Брендове інтро, демо продукту, реклама для соцмереж |
|
|
16
|
+
| **Управління / бібліотека** | Бібліотека коду або проєкт лише з управлінською структурою — без сайту, без гри, без відео, лише структура та документація | npm-пакет, внутрішній інструмент, центр документації |
|
|
17
|
+
|
|
18
|
+
Кожен тип проєкту отримує власний каркас: правильну структуру папок, правильні залежності, правильні інструменти. Вам не потрібно знати, що це таке — Forge налаштує все за вас.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Повний посібник зі встановлення (з нуля)
|
|
23
|
+
|
|
24
|
+
Якщо ви ніколи раніше не програмували, цей розділ проведе вас від абсолютно порожнього комп'ютера до робочого налаштування Forge. Виконайте кроки для вашої операційної системи.
|
|
25
|
+
|
|
26
|
+
### Що вам потрібно
|
|
27
|
+
|
|
28
|
+
Потрібні дві безкоштовні програми:
|
|
29
|
+
|
|
30
|
+
- **Node.js** (версія 22 або новіша) — дозволяє вашому комп'ютеру запускати JavaScript-інструменти.
|
|
31
|
+
- **pnpm** — менеджер пакетів, який Forge використовує для встановлення залежностей. Він вбудований у Node.js і його лише треба увімкнути.
|
|
32
|
+
|
|
33
|
+
Обидві програми безкоштовні. Спочатку встановлюєте Node.js, потім вмикаєте pnpm однією командою.
|
|
34
|
+
|
|
35
|
+
### Ubuntu
|
|
36
|
+
|
|
37
|
+
#### Крок 1 — Встановлення Node.js
|
|
38
|
+
|
|
39
|
+
1. Відкрийте програму **Термінал** (натисніть `Ctrl + Alt + T` або знайдіть «Термінал» у ваших програмах).
|
|
40
|
+
|
|
41
|
+
2. Завантажте та встановіть Node.js 22 (LTS), вставивши цю команду та натиснувши Enter:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Вас попросять ввести пароль — введіть його (символи не відображатимуться під час введення, це нормально) і натисніть Enter.
|
|
48
|
+
|
|
49
|
+
3. Перевірте, чи все працює:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
node --version
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Ви маєте побачити номер версії, наприклад `v22.x.x`, а не повідомлення про помилку.
|
|
56
|
+
|
|
57
|
+
#### Крок 2 — Увімкнення pnpm
|
|
58
|
+
|
|
59
|
+
Node.js містить інструмент **Corepack**, який керує менеджерами пакетів. Увімкніть pnpm командою:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
corepack enable pnpm
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Перевірте:
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
pnpm --version
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Ви маєте побачити номер версії, наприклад `10.x.x`.
|
|
72
|
+
|
|
73
|
+
#### Крок 3 — Глобальне встановлення Forge
|
|
74
|
+
|
|
75
|
+
Глобальне встановлення означає, що команда `forge` доступна скрізь на вашому комп'ютері, а не лише в одному проєкті:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
pnpm add -g @warpgogol/forge
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Перевірте:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
forge --version
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Ви маєте побачити номер версії. Forge встановлено та готовий до роботи.
|
|
88
|
+
|
|
89
|
+
#### Крок 4 — Встановлення IDE зі штучним інтелектом
|
|
90
|
+
|
|
91
|
+
Forge працює через розмову з ШІ-агентом. Вам потрібне IDE, що підтримує ШІ-агентів. Рекомендуємо **Windsurf** (протестовано з Forge):
|
|
92
|
+
|
|
93
|
+
1. Перейдіть на [windsurf.com](https://windsurf.com) та завантажте версію для Linux.
|
|
94
|
+
2. Відкрийте завантажений файл і дотримуйтесь інструкцій установника.
|
|
95
|
+
3. Запустіть Windsurf.
|
|
96
|
+
|
|
97
|
+
Можете також використовувати **Cursor** ([cursor.com](https://cursor.com)) або будь-яке IDE, що підтримує навички ШІ-агентів.
|
|
98
|
+
|
|
99
|
+
### Windows
|
|
100
|
+
|
|
101
|
+
#### Крок 1 — Встановлення Node.js
|
|
102
|
+
|
|
103
|
+
1. Відкрийте [nodejs.org](https://nodejs.org) у вашому браузері.
|
|
104
|
+
2. Завантажте **LTS-версію** (на ній буде написано «LTS» та «Recommended for Most Users»). Версія має бути 22.x або новіша.
|
|
105
|
+
3. Запустіть завантажений установник (файл `.msi`). Прийміть усі стандартні параметри, натискаючи **Next** на кожному екрані, потім **Install**. Якщо Windows попросить дозвіл, натисніть **Yes**.
|
|
106
|
+
|
|
107
|
+
4. Перевірте, чи все працює. Відкрийте **PowerShell** (знайдіть «PowerShell» у меню Пуск) і введіть:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
node --version
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Ви маєте побачити номер версії, наприклад `v22.x.x`, а не повідомлення про помилку.
|
|
114
|
+
|
|
115
|
+
#### Крок 2 — Увімкнення pnpm
|
|
116
|
+
|
|
117
|
+
Node.js містить інструмент **Corepack**, який керує менеджерами пакетів. Увімкніть pnpm командою:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
corepack enable pnpm
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Перевірте:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
pnpm --version
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Ви маєте побачити номер версії, наприклад `10.x.x`.
|
|
130
|
+
|
|
131
|
+
#### Крок 3 — Глобальне встановлення Forge
|
|
132
|
+
|
|
133
|
+
Глобальне встановлення означає, що команда `forge` доступна скрізь на вашому комп'ютері, а не лише в одному проєкті:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
pnpm add -g @warpgogol/forge
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Перевірте:
|
|
140
|
+
|
|
141
|
+
```sh
|
|
142
|
+
forge --version
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Ви маєте побачити номер версії. Forge встановлено та готовий до роботи.
|
|
146
|
+
|
|
147
|
+
#### Крок 4 — Встановлення IDE зі штучним інтелектом
|
|
148
|
+
|
|
149
|
+
Forge працює через розмову з ШІ-агентом. Вам потрібне IDE, що підтримує ШІ-агентів. Рекомендуємо **Windsurf** (протестовано з Forge):
|
|
150
|
+
|
|
151
|
+
1. Перейдіть на [windsurf.com](https://windsurf.com) та завантажте версію для Windows.
|
|
152
|
+
2. Запустіть завантажений установник і дотримуйтесь майстра налаштування.
|
|
153
|
+
3. Запустіть Windsurf.
|
|
154
|
+
|
|
155
|
+
Можете також використовувати **Cursor** ([cursor.com](https://cursor.com)) або будь-яке IDE, що підтримує навички ШІ-агентів.
|
|
156
|
+
|
|
157
|
+
### Додатково — Встановлення FFmpeg (лише для відеопроєктів)
|
|
158
|
+
|
|
159
|
+
Якщо ви плануєте створювати **відеопроєкти** (профіль `editframe`), вам потрібен **FFmpeg** — безкоштовний інструмент для обробки відео та аудіо.
|
|
160
|
+
|
|
161
|
+
**Ubuntu:**
|
|
162
|
+
|
|
163
|
+
```sh
|
|
164
|
+
sudo apt-get install -y ffmpeg
|
|
165
|
+
ffmpeg -version
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Windows:**
|
|
169
|
+
|
|
170
|
+
1. Відкрийте [ffmpeg.org/download.html](https://ffmpeg.org/download.html) у браузері.
|
|
171
|
+
2. Завантажте збірку для Windows (шукайте «Windows builds» — збірки gyan.dev або BtbN — хороші варіанти).
|
|
172
|
+
3. Розпакуйте завантажений `.zip` файл у папку, наприклад `C:\ffmpeg`.
|
|
173
|
+
4. Додайте FFmpeg до системної змінної PATH:
|
|
174
|
+
- Відкрийте меню Пуск, знайдіть «Environment Variables» і натисніть «Edit the system environment variables».
|
|
175
|
+
- Натисніть **Environment Variables**.
|
|
176
|
+
- У розділі «System variables» (або «User variables») знайдіть **Path**, виберіть його та натисніть **Edit**.
|
|
177
|
+
- Натисніть **New** і введіть `C:\ffmpeg\bin` (або туди, куди ви розпакували FFmpeg, у підпапку `bin`).
|
|
178
|
+
- Натисніть **OK** у всіх трьох вікнах.
|
|
179
|
+
5. Закрийте та знову відкрийте PowerShell, потім перевірте:
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
ffmpeg -version
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Ви маєте побачити інформацію про версію, а не помилку.
|
|
186
|
+
|
|
187
|
+
### Усунення проблем
|
|
188
|
+
|
|
189
|
+
- **«command not found» після встановлення Node.js** — Закрийте та знову відкрийте термінал (Ubuntu) або PowerShell (Windows). Системі потрібно перезавантажити список доступних команд.
|
|
190
|
+
- **«EACCES permission denied» в Ubuntu під час глобального встановлення Forge** — Виконайте `sudo pnpm add -g @warpgogol/forge`.
|
|
191
|
+
- **«corepack: command not found»** — Ваша версія Node.js занадто стара. Встановіть Node.js 22+ за кроками вище.
|
|
192
|
+
- **Windsurf не бачить `forge`** — Закрийте та знову відкрийте Windsurf після встановлення Forge. IDE потрібно перезапустити, щоб підхопити нові глобальні команди.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Швидкий старт
|
|
197
|
+
|
|
198
|
+
### Для креативних операторів — термінал не потрібен
|
|
199
|
+
|
|
200
|
+
Вам не потрібно знати, що таке термінал. Вам не потрібно вводити жодної команди. Якщо у вас є IDE зі штучним інтелектом — наприклад Windsurf або Cursor — Forge працює виключно через розмову.
|
|
201
|
+
|
|
202
|
+
#### Створення нового проєкту з нуля
|
|
203
|
+
|
|
204
|
+
1. **Створіть порожню папку** на комп'ютері — де завгодно. Назвіть її як хочете назвати свій проєкт (малі літери та дефіси, наприклад `my-brand-video`).
|
|
205
|
+
|
|
206
|
+
2. **Відкрийте цю папку в вашому IDE.** Папка порожня — це саме те, що треба.
|
|
207
|
+
|
|
208
|
+
3. **Скажіть ШІ-агенту, що ви хочете створити.** Просто напишіть це в чаті своїми словами. Наприклад:
|
|
209
|
+
|
|
210
|
+
> Я хочу створити брендове відео для своєї кав'ярні. Воно має мати анімований логотип, коротке інтро та презентацію продукту.
|
|
211
|
+
|
|
212
|
+
Або:
|
|
213
|
+
|
|
214
|
+
> Я хочу зробити вебсайт для своєї фотостудії.
|
|
215
|
+
|
|
216
|
+
Або:
|
|
217
|
+
|
|
218
|
+
> Я хочу створити браузерну гру, де ловиш зірки, що падають.
|
|
219
|
+
|
|
220
|
+
Або:
|
|
221
|
+
|
|
222
|
+
> Я хочу створити TypeScript-бібліотеку для розрахунку астрологічних карт.
|
|
223
|
+
|
|
224
|
+
Це все. ШІ-агент зробить усе інше:
|
|
225
|
+
- Встановить Forge та всі необхідні інструменти
|
|
226
|
+
- Налаштує структуру проєкту залежно від того, що ви описали (відео, вебсайт, гра, бібліотека тощо)
|
|
227
|
+
- Налаштує мовні вподобання та параметри проєкту
|
|
228
|
+
- Запустить живий попередній перегляд, щоб ви бачили свою роботу (для вебсайтів, ігор та відео)
|
|
229
|
+
- Скаже вам URL для відкриття в браузері
|
|
230
|
+
|
|
231
|
+
4. **Дивіться попередній перегляд.** Для вебсайтів, ігор та відео ШІ-агент дасть вам посилання localhost. Натисніть його — ваш проєкт уже запущений. Коли ви описуєте зміни, агент оновлює проєкт, а попередній перегляд оновлюється автоматично.
|
|
232
|
+
|
|
233
|
+
Для проєктів управління та бібліотек візуального попереднього перегляду немає — агент налаштує структуру проєкту та скаже, коли все готово.
|
|
234
|
+
|
|
235
|
+
5. **Створюйте разом.** Далі ви просто розмовляєте. Хочете інший колір? Хочете додати сцену? Хочете змінити музику? Хочете додати нову функцію до бібліотеки? Просто скажіть. Агент виконає всю технічну роботу.
|
|
236
|
+
|
|
237
|
+
#### Перенесення наявного проєкту у Forge
|
|
238
|
+
|
|
239
|
+
Якщо ви вже маєте проєкт десь інше і хочете перенести його у Forge:
|
|
240
|
+
|
|
241
|
+
1. **Створіть порожню папку** та відкрийте її в вашому IDE.
|
|
242
|
+
|
|
243
|
+
2. **Скажіть ШІ-агенту:**
|
|
244
|
+
|
|
245
|
+
> Я хочу перенести свій наявний проєкт у Forge. Він знаходиться за шляхом /path/to/my/project.
|
|
246
|
+
|
|
247
|
+
Агент:
|
|
248
|
+
- Визначить, який це тип проєкту (вебсайт, відео, гра, бібліотека тощо)
|
|
249
|
+
- Перемістить усі ваші файли у новий проєкт Forge — включно з прихованими файлами на кшталт `.env`
|
|
250
|
+
- За бажанням перенесе вашу історію git
|
|
251
|
+
- Перевірить, чи все коректно збирається
|
|
252
|
+
- Запустить живий попередній перегляд (для візуальних типів проєктів)
|
|
253
|
+
|
|
254
|
+
#### Що робити, якщо щось пішло не так?
|
|
255
|
+
|
|
256
|
+
Просто скажіть ШІ-агенту. Він може перевірити стан проєкту, виправити проблеми та пояснити, що сталося — все простою мовою. Вам ніколи не потрібно відкривати термінал або вводити команди самостійно.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
### Для розробників — CLI-команди
|
|
261
|
+
|
|
262
|
+
#### Створення нового проєкту
|
|
263
|
+
|
|
264
|
+
```sh
|
|
265
|
+
# Створити новий проєкт (каркас + ініціалізація + навички + AGENTS.md однією командою)
|
|
266
|
+
forge create my-project
|
|
267
|
+
|
|
268
|
+
# З конкретним профілем стеку
|
|
269
|
+
forge create my-site --profile astro-typescript-turborepo
|
|
270
|
+
forge create my-game --profile phaser-turborepo
|
|
271
|
+
forge create my-video --profile editframe
|
|
272
|
+
forge create my-library --profile forge-shell
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Якщо Forge не встановлено глобально, використовуйте `pnpm dlx`:
|
|
277
|
+
|
|
278
|
+
```sh
|
|
279
|
+
pnpm dlx @warpgogol/forge create my-project
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### Перенесення наявного проєкту у Forge
|
|
283
|
+
|
|
284
|
+
CLI-команди для перенесення немає — це інтерактивний процес під керівництвом ШІ:
|
|
285
|
+
|
|
286
|
+
```sh
|
|
287
|
+
# 1. Створіть новий порожній проєкт Forge
|
|
288
|
+
forge create my-project
|
|
289
|
+
|
|
290
|
+
# 2. Відкрийте проєкт у Windsurf (протестовано з Forge) або вашому IDE
|
|
291
|
+
|
|
292
|
+
# 3. Запустіть навичку /forge-bootstrap і оберіть режим "transplant"
|
|
293
|
+
# Навичка:
|
|
294
|
+
# - Запитає шлях до вашого наявного коду
|
|
295
|
+
# - Автоматично визначить стек (Astro, Phaser, Editframe тощо)
|
|
296
|
+
# - Перенесе всі файли (включно з .env та git-ігнорованими)
|
|
297
|
+
# - За бажанням перенесе історію git
|
|
298
|
+
# - Перевірить збірку
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
#### Діагностика та перевірка
|
|
302
|
+
|
|
303
|
+
```sh
|
|
304
|
+
# Перевірити стан проєкту
|
|
305
|
+
forge doctor
|
|
306
|
+
|
|
307
|
+
# Валідувати RFC
|
|
308
|
+
forge rfc.validate
|
|
309
|
+
|
|
310
|
+
# Список доступних навичок
|
|
311
|
+
forge skill.list
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Профілі стеку
|
|
315
|
+
|
|
316
|
+
Профіль стеку визначає каркас проєкту: структуру директорій, залежності, конфігурацію CI та перший робочий простір. Оберіть профіль прапорцем `--profile` під час створення проєкту.
|
|
317
|
+
|
|
318
|
+
| Профіль | Тип проєкту | Опис | Перший робочий простір | Призначення |
|
|
319
|
+
| --- | --- | --- | --- | --- |
|
|
320
|
+
| `forge-shell` | Управління / бібліотека | Мінімальний каркас Forge (за замовчуванням) | — | Проєкти лише з управлінням, бібліотеки, невеб-проєкти |
|
|
321
|
+
| `astro-typescript-turborepo` | Вебсайт | Astro + TypeScript + pnpm + Turborepo | `sites/my-site` | Вебсайти, вебзастосунки, контентні сайти |
|
|
322
|
+
| `phaser-turborepo` | Браузерна гра | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Браузерні ігри, інтерактивні досвіди |
|
|
323
|
+
| `editframe` | Відео | Editframe React + Vite + TailwindCSS | `compositions/my-first-video` | Відеокомпозиції, брендові відео, motion-дизайн |
|
|
324
|
+
|
|
325
|
+
Профіль `editframe` також підтримує **HTML-шаблон** (замість React) для користувачів, які віддають перевагу веб-компонентам замість JSX. Оберіть між ними під час налаштування проєкту.
|
|
326
|
+
|
|
327
|
+
```sh
|
|
328
|
+
# Список доступних профілів (після встановлення)
|
|
329
|
+
forge profile.validate
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Коли ви переносите наявний проєкт через режим `/forge-bootstrap` transplant, Forge автоматично визначає відповідний профіль, перевіряючи файли-маркери (`astro.config.*`, `phaser.config.*`, `editframe.config.*` тощо).
|
|
333
|
+
|
|
334
|
+
## Процес оновлення
|
|
335
|
+
|
|
336
|
+
Коли публікується нова версія `@warpgogol/forge`, споживачі оновлюються адитивно:
|
|
337
|
+
|
|
338
|
+
```sh
|
|
339
|
+
# 1. Встановити останню версію
|
|
340
|
+
pnpm add -g @warpgogol/forge@latest
|
|
341
|
+
|
|
342
|
+
# 2. Синхронізувати навички та стандартні прив'язки з встановленої версії
|
|
343
|
+
forge upgrade
|
|
344
|
+
|
|
345
|
+
# 3. Перевірити стан проєкту
|
|
346
|
+
forge doctor
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
`forge upgrade` — адитивний: він ніколи не перезаписує прив'язки, встановлені оператором, ніколи не видаляє файли та є ідемпотентним. Він оновлює `forge.syncedVersion` у `forge.yaml`, щоб відстежувати останню синхронізовану версію. Використовуйте `--dry-run` для попереднього перегляду змін.
|
|
350
|
+
|
|
351
|
+
## Що дає Forge
|
|
352
|
+
|
|
353
|
+
- **44 навички** (fo-pipeline, grilling, preferences, написання навичок, Editframe відеокомпозиція) — розгортаються у `.agents/skills/` командою `forge create`
|
|
354
|
+
- **RFC робочий процес** — створення, валідація, список, граф, архівування, acceptance-зондування, журнали рішень, DNA-трасування
|
|
355
|
+
- **ADR робочий процес** — легковісні архітектурні записи рішень
|
|
356
|
+
- **Вендоринг специфікацій** — вендоринг зовнішніх пакетів специфікацій як незмінних знімків з маніфестами цілісності
|
|
357
|
+
- **Угоди про найменування** — linting kebab-case
|
|
358
|
+
- **Linting робочих процесів** — валідація frontmatter та посилань у `.agents/workflows/`
|
|
359
|
+
- **Каркаси стеків** — створення нового pnpm + Turborepo монорепозиторію з профілю
|
|
360
|
+
- **Контракт прив'язок** — декодування специфічних для проєкту команд/шляхів із навичок через `forge.yaml`
|
|
361
|
+
|
|
362
|
+
## Життєвий цикл
|
|
363
|
+
|
|
364
|
+
Типовий життєвий цикл проєкту Forge:
|
|
365
|
+
|
|
366
|
+
1. **Створення** — `forge create` ініціалізує новий проєкт з forge.yaml, навичками та директоріями документації
|
|
367
|
+
2. **IDE** — відкрийте проєкт у Windsurf (протестовано з Forge) або вашому IDE
|
|
368
|
+
3. **Bootstrap** — запустіть `/forge-bootstrap` для інтерактивного налаштування проєкту. Навичка підтримує два режими:
|
|
369
|
+
- **Greenfield** — створення нового проєкту з нуля: оберіть стек, заповніть прив'язки, ініціалізуйте git
|
|
370
|
+
- **Transplant** — перенесення наявного коду у Forge: визначення стеку, міграція коду (включно з git-ігнорованими файлами на кшталт `.env`), за бажанням перенесення історії git, перевірка збірки
|
|
371
|
+
4. **Оновлення** — коли публікується нова версія `@warpgogol/forge`, запустіть `forge upgrade` для адитивної синхронізації навичок та стандартних прив'язок
|
|
372
|
+
|
|
373
|
+
## forge.yaml
|
|
374
|
+
|
|
375
|
+
Єдине джерело істини для конфігурації проєкту. Створюється командою `forge create`:
|
|
376
|
+
|
|
377
|
+
```yaml
|
|
378
|
+
schema: forge/config@1
|
|
379
|
+
project:
|
|
380
|
+
name: my-project
|
|
381
|
+
stack: [typescript]
|
|
382
|
+
packageManager: pnpm
|
|
383
|
+
paths:
|
|
384
|
+
rfcsDir: docs/rfcs
|
|
385
|
+
adrsDir: docs/adrs
|
|
386
|
+
skillsDir: .agents/skills
|
|
387
|
+
bindings:
|
|
388
|
+
schema: forge/bindings@1
|
|
389
|
+
commands:
|
|
390
|
+
validateRfc: "forge rfc.validate {id} --json"
|
|
391
|
+
typecheck: "pnpm run build:check"
|
|
392
|
+
test: "pnpm test"
|
|
393
|
+
paths:
|
|
394
|
+
invariantsFile: docs/architecture-dna.md
|
|
395
|
+
terminology:
|
|
396
|
+
invariants: DNA
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
## Програмний API
|
|
400
|
+
|
|
401
|
+
```ts
|
|
402
|
+
import {
|
|
403
|
+
forgeCoreModule,
|
|
404
|
+
forgeRfcModule,
|
|
405
|
+
loadForgeConfig,
|
|
406
|
+
resolveBinding,
|
|
407
|
+
FORGE_SKILLS,
|
|
408
|
+
} from "@warpgogol/forge";
|
|
409
|
+
|
|
410
|
+
// Завантажити конфігурацію
|
|
411
|
+
const config = loadForgeConfig(process.cwd());
|
|
412
|
+
|
|
413
|
+
// Розв'язати прив'язку
|
|
414
|
+
const cmd = resolveBinding(config, "commands.validateRfc", { id: "RFC-0001" });
|
|
415
|
+
|
|
416
|
+
// Зареєструвати модулі у вашому реєстрі
|
|
417
|
+
const registry = /* ваш ForgeModuleRegistry */;
|
|
418
|
+
await forgeCoreModule.register(registry);
|
|
419
|
+
await forgeRfcModule.register(registry);
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
## Архітектура
|
|
423
|
+
|
|
424
|
+
| Директорія | Призначення |
|
|
425
|
+
| --- | --- |
|
|
426
|
+
| `src/` | Портативне ядро — типи, конфігурація, реєстр навичок, валідатори, онбординг. Нуль імпортів `@warpgogol/*`. |
|
|
427
|
+
| `os/` | Реєстрації ForgeModule. `compass` та `werkstatt` динамічно імпортують `@warpgogol/site-kernel-*` (м'яка деградація в автономному режимі). |
|
|
428
|
+
| `bin/` | Точка входу CLI (команда `forge`). |
|
|
429
|
+
| `skills/` | 44 визначення навичок (36 fo + 5 спільних + 3 мета) з frontmatter SKILL.md. |
|
|
430
|
+
| `scripts/` | Перевірка гігієни публікації (`publish-check.mjs`), запускається `prepublishOnly`. |
|
|
431
|
+
| `profiles/` | Профілі стеків для `forge.scaffold`. |
|
|
432
|
+
|
|
433
|
+
## Публікація в npm
|
|
434
|
+
|
|
435
|
+
Цей пакет публікується в реєстр npm як `@warpgogol/forge`. Нижче описано, як опублікувати нову версію.
|
|
436
|
+
|
|
437
|
+
### Передумови
|
|
438
|
+
|
|
439
|
+
- Обліковий запис npm з правами публікації в організації `@warpgogol`.
|
|
440
|
+
- Встановлені Node.js та pnpm локально.
|
|
441
|
+
|
|
442
|
+
### Створення токена доступу
|
|
443
|
+
|
|
444
|
+
1. Увійдіть на [npmjs.com](https://www.npmjs.com/).
|
|
445
|
+
2. Перейдіть до **Access Tokens** (аватар → Access Tokens).
|
|
446
|
+
3. Натисніть **Generate New Token** → оберіть **Classic Token** → тип **Publish**.
|
|
447
|
+
4. Скопіюйте згенерований токен — він показується лише один раз.
|
|
448
|
+
|
|
449
|
+
### Публікація нової версії
|
|
450
|
+
|
|
451
|
+
Виконайте такі команди з директорії `packages/forge`:
|
|
452
|
+
|
|
453
|
+
```sh
|
|
454
|
+
# 1. Автентифікація в npm (інтерактивно — запитає username, password, OTP)
|
|
455
|
+
npm login
|
|
456
|
+
|
|
457
|
+
# 2. Зберегти auth-токен для реєстру (використайте токен з попереднього кроку)
|
|
458
|
+
npm config set //registry.npmjs.org/:_authToken=<TOKEN>
|
|
459
|
+
|
|
460
|
+
# 3. Підняти patch-версію (оновлює package.json + створює git commit + tag)
|
|
461
|
+
npm version patch
|
|
462
|
+
|
|
463
|
+
# 4. Опублікувати пакет публічно
|
|
464
|
+
npm publish --access public
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
Після публікації перевірте нову версію на [npmjs.com/package/@warpgogol/forge](https://www.npmjs.com/package/@warpgogol/forge).
|
|
468
|
+
|
|
469
|
+
## Ліцензія
|
|
470
|
+
|
|
471
|
+
Apache-2.0
|
package/dist/bin/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -15,107 +15,107 @@
|
|
|
15
15
|
"framework"
|
|
16
16
|
],
|
|
17
17
|
"homepage": "https://warpgogol.com",
|
|
18
|
-
"main": "./
|
|
19
|
-
"types": "./
|
|
18
|
+
"main": "./src/index.ts",
|
|
19
|
+
"types": "./src/index.ts",
|
|
20
20
|
"bin": {
|
|
21
21
|
"forge": "./bin/cli.js"
|
|
22
22
|
},
|
|
23
23
|
"exports": {
|
|
24
24
|
".": {
|
|
25
|
-
"types": "./
|
|
26
|
-
"default": "./
|
|
25
|
+
"types": "./src/index.ts",
|
|
26
|
+
"default": "./src/index.ts"
|
|
27
27
|
},
|
|
28
28
|
"./types": {
|
|
29
|
-
"types": "./
|
|
30
|
-
"default": "./
|
|
29
|
+
"types": "./src/types.ts",
|
|
30
|
+
"default": "./src/types.ts"
|
|
31
31
|
},
|
|
32
32
|
"./utils": {
|
|
33
|
-
"types": "./
|
|
34
|
-
"default": "./
|
|
33
|
+
"types": "./src/utils/index.ts",
|
|
34
|
+
"default": "./src/utils/index.ts"
|
|
35
35
|
},
|
|
36
36
|
"./config": {
|
|
37
|
-
"types": "./
|
|
38
|
-
"default": "./
|
|
37
|
+
"types": "./src/config/forge-config.ts",
|
|
38
|
+
"default": "./src/config/forge-config.ts"
|
|
39
39
|
},
|
|
40
40
|
"./os/core": {
|
|
41
|
-
"types": "./
|
|
42
|
-
"default": "./
|
|
41
|
+
"types": "./os/core/core.module.ts",
|
|
42
|
+
"default": "./os/core/core.module.ts"
|
|
43
43
|
},
|
|
44
44
|
"./os/compass": {
|
|
45
|
-
"types": "./
|
|
46
|
-
"default": "./
|
|
45
|
+
"types": "./os/compass/index.ts",
|
|
46
|
+
"default": "./os/compass/index.ts"
|
|
47
47
|
},
|
|
48
48
|
"./os/naming": {
|
|
49
|
-
"types": "./
|
|
50
|
-
"default": "./
|
|
49
|
+
"types": "./os/naming/index.ts",
|
|
50
|
+
"default": "./os/naming/index.ts"
|
|
51
51
|
},
|
|
52
52
|
"./os/naming-module": {
|
|
53
|
-
"types": "./
|
|
54
|
-
"default": "./
|
|
53
|
+
"types": "./os/naming/naming.module.ts",
|
|
54
|
+
"default": "./os/naming/naming.module.ts"
|
|
55
55
|
},
|
|
56
56
|
"./os/rfc": {
|
|
57
|
-
"types": "./
|
|
58
|
-
"default": "./
|
|
57
|
+
"types": "./os/rfc/index.ts",
|
|
58
|
+
"default": "./os/rfc/index.ts"
|
|
59
59
|
},
|
|
60
60
|
"./os/rfc-module": {
|
|
61
|
-
"types": "./
|
|
62
|
-
"default": "./
|
|
61
|
+
"types": "./os/rfc/rfc.module.ts",
|
|
62
|
+
"default": "./os/rfc/rfc.module.ts"
|
|
63
63
|
},
|
|
64
64
|
"./os/werkstatt": {
|
|
65
|
-
"types": "./
|
|
66
|
-
"default": "./
|
|
65
|
+
"types": "./os/werkstatt/index.ts",
|
|
66
|
+
"default": "./os/werkstatt/index.ts"
|
|
67
67
|
},
|
|
68
68
|
"./os/workflow": {
|
|
69
|
-
"types": "./
|
|
70
|
-
"default": "./
|
|
69
|
+
"types": "./os/workflow/index.ts",
|
|
70
|
+
"default": "./os/workflow/index.ts"
|
|
71
71
|
},
|
|
72
72
|
"./os/workflow-module": {
|
|
73
|
-
"types": "./
|
|
74
|
-
"default": "./
|
|
73
|
+
"types": "./os/workflow/workflow.module.ts",
|
|
74
|
+
"default": "./os/workflow/workflow.module.ts"
|
|
75
75
|
},
|
|
76
76
|
"./os/spec-module": {
|
|
77
|
-
"types": "./
|
|
78
|
-
"default": "./
|
|
77
|
+
"types": "./os/spec/spec.module.ts",
|
|
78
|
+
"default": "./os/spec/spec.module.ts"
|
|
79
79
|
},
|
|
80
80
|
"./os/adr": {
|
|
81
|
-
"types": "./
|
|
82
|
-
"default": "./
|
|
81
|
+
"types": "./os/adr/index.ts",
|
|
82
|
+
"default": "./os/adr/index.ts"
|
|
83
83
|
},
|
|
84
84
|
"./os/adr-module": {
|
|
85
|
-
"types": "./
|
|
86
|
-
"default": "./
|
|
85
|
+
"types": "./os/adr/adr.module.ts",
|
|
86
|
+
"default": "./os/adr/adr.module.ts"
|
|
87
87
|
},
|
|
88
88
|
"./os/plan": {
|
|
89
|
-
"types": "./
|
|
90
|
-
"default": "./
|
|
89
|
+
"types": "./os/plan/index.ts",
|
|
90
|
+
"default": "./os/plan/index.ts"
|
|
91
91
|
},
|
|
92
92
|
"./os/plan-module": {
|
|
93
|
-
"types": "./
|
|
94
|
-
"default": "./
|
|
93
|
+
"types": "./os/plan/plan.module.ts",
|
|
94
|
+
"default": "./os/plan/plan.module.ts"
|
|
95
95
|
},
|
|
96
96
|
"./os/audit": {
|
|
97
|
-
"types": "./
|
|
98
|
-
"default": "./
|
|
97
|
+
"types": "./os/audit/index.ts",
|
|
98
|
+
"default": "./os/audit/index.ts"
|
|
99
99
|
},
|
|
100
100
|
"./os/audit-module": {
|
|
101
|
-
"types": "./
|
|
102
|
-
"default": "./
|
|
101
|
+
"types": "./os/audit/audit.module.ts",
|
|
102
|
+
"default": "./os/audit/audit.module.ts"
|
|
103
103
|
},
|
|
104
104
|
"./os/session": {
|
|
105
|
-
"types": "./
|
|
106
|
-
"default": "./
|
|
105
|
+
"types": "./os/session/index.ts",
|
|
106
|
+
"default": "./os/session/index.ts"
|
|
107
107
|
},
|
|
108
108
|
"./os/session-module": {
|
|
109
|
-
"types": "./
|
|
110
|
-
"default": "./
|
|
109
|
+
"types": "./os/session/session.module.ts",
|
|
110
|
+
"default": "./os/session/session.module.ts"
|
|
111
111
|
},
|
|
112
112
|
"./os/mission": {
|
|
113
|
-
"types": "./
|
|
114
|
-
"default": "./
|
|
113
|
+
"types": "./os/mission/index.ts",
|
|
114
|
+
"default": "./os/mission/index.ts"
|
|
115
115
|
},
|
|
116
116
|
"./os/mission-module": {
|
|
117
|
-
"types": "./
|
|
118
|
-
"default": "./
|
|
117
|
+
"types": "./os/mission/mission.module.ts",
|
|
118
|
+
"default": "./os/mission/mission.module.ts"
|
|
119
119
|
}
|
|
120
120
|
},
|
|
121
121
|
"files": [
|
|
@@ -127,8 +127,18 @@
|
|
|
127
127
|
"os/rfc/rfc-0000-template.md",
|
|
128
128
|
"AGENTS.md",
|
|
129
129
|
"README.md",
|
|
130
|
+
"README.uk.md",
|
|
130
131
|
"LICENSE"
|
|
131
132
|
],
|
|
133
|
+
"scripts": {
|
|
134
|
+
"build": "pnpm exec tsc -p tsconfig.json",
|
|
135
|
+
"build:check": "pnpm exec tsc -p tsconfig.json --noEmit",
|
|
136
|
+
"clean": "rm -rf dist",
|
|
137
|
+
"prepublishOnly": "pnpm run clean && pnpm run build && node scripts/publish-check.mjs && node scripts/strip-workspace-deps.mjs",
|
|
138
|
+
"postpublish": "git checkout -- ./package.json",
|
|
139
|
+
"test": "vitest run --passWithNoTests",
|
|
140
|
+
"test:watch": "vitest"
|
|
141
|
+
},
|
|
132
142
|
"dependencies": {
|
|
133
143
|
"@aws-sdk/client-s3": "^3.700.0",
|
|
134
144
|
"trash": "^10.1.1",
|
|
@@ -145,13 +155,106 @@
|
|
|
145
155
|
"node": ">=20.0.0"
|
|
146
156
|
},
|
|
147
157
|
"publishConfig": {
|
|
148
|
-
"access": "public"
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
"access": "public",
|
|
159
|
+
"main": "./dist/src/index.js",
|
|
160
|
+
"types": "./dist/src/index.d.ts",
|
|
161
|
+
"exports": {
|
|
162
|
+
".": {
|
|
163
|
+
"types": "./dist/src/index.d.ts",
|
|
164
|
+
"default": "./dist/src/index.js"
|
|
165
|
+
},
|
|
166
|
+
"./types": {
|
|
167
|
+
"types": "./dist/src/types.d.ts",
|
|
168
|
+
"default": "./dist/src/types.js"
|
|
169
|
+
},
|
|
170
|
+
"./utils": {
|
|
171
|
+
"types": "./dist/src/utils/index.d.ts",
|
|
172
|
+
"default": "./dist/src/utils/index.js"
|
|
173
|
+
},
|
|
174
|
+
"./config": {
|
|
175
|
+
"types": "./dist/src/config/forge-config.d.ts",
|
|
176
|
+
"default": "./dist/src/config/forge-config.js"
|
|
177
|
+
},
|
|
178
|
+
"./os/core": {
|
|
179
|
+
"types": "./dist/os/core/core.module.d.ts",
|
|
180
|
+
"default": "./dist/os/core/core.module.js"
|
|
181
|
+
},
|
|
182
|
+
"./os/compass": {
|
|
183
|
+
"types": "./dist/os/compass/index.d.ts",
|
|
184
|
+
"default": "./dist/os/compass/index.js"
|
|
185
|
+
},
|
|
186
|
+
"./os/naming": {
|
|
187
|
+
"types": "./dist/os/naming/index.d.ts",
|
|
188
|
+
"default": "./dist/os/naming/index.js"
|
|
189
|
+
},
|
|
190
|
+
"./os/naming-module": {
|
|
191
|
+
"types": "./dist/os/naming/naming.module.d.ts",
|
|
192
|
+
"default": "./dist/os/naming/naming.module.js"
|
|
193
|
+
},
|
|
194
|
+
"./os/rfc": {
|
|
195
|
+
"types": "./dist/os/rfc/index.d.ts",
|
|
196
|
+
"default": "./dist/os/rfc/index.js"
|
|
197
|
+
},
|
|
198
|
+
"./os/rfc-module": {
|
|
199
|
+
"types": "./dist/os/rfc/rfc.module.d.ts",
|
|
200
|
+
"default": "./dist/os/rfc/rfc.module.js"
|
|
201
|
+
},
|
|
202
|
+
"./os/werkstatt": {
|
|
203
|
+
"types": "./dist/os/werkstatt/index.d.ts",
|
|
204
|
+
"default": "./dist/os/werkstatt/index.js"
|
|
205
|
+
},
|
|
206
|
+
"./os/workflow": {
|
|
207
|
+
"types": "./dist/os/workflow/index.d.ts",
|
|
208
|
+
"default": "./dist/os/workflow/index.js"
|
|
209
|
+
},
|
|
210
|
+
"./os/workflow-module": {
|
|
211
|
+
"types": "./dist/os/workflow/workflow.module.d.ts",
|
|
212
|
+
"default": "./dist/os/workflow/workflow.module.js"
|
|
213
|
+
},
|
|
214
|
+
"./os/spec-module": {
|
|
215
|
+
"types": "./dist/os/spec/spec.module.d.ts",
|
|
216
|
+
"default": "./dist/os/spec/spec.module.js"
|
|
217
|
+
},
|
|
218
|
+
"./os/adr": {
|
|
219
|
+
"types": "./dist/os/adr/index.d.ts",
|
|
220
|
+
"default": "./dist/os/adr/index.js"
|
|
221
|
+
},
|
|
222
|
+
"./os/adr-module": {
|
|
223
|
+
"types": "./dist/os/adr/adr.module.d.ts",
|
|
224
|
+
"default": "./dist/os/adr/adr.module.js"
|
|
225
|
+
},
|
|
226
|
+
"./os/plan": {
|
|
227
|
+
"types": "./dist/os/plan/index.d.ts",
|
|
228
|
+
"default": "./dist/os/plan/index.js"
|
|
229
|
+
},
|
|
230
|
+
"./os/plan-module": {
|
|
231
|
+
"types": "./dist/os/plan/plan.module.d.ts",
|
|
232
|
+
"default": "./dist/os/plan/plan.module.js"
|
|
233
|
+
},
|
|
234
|
+
"./os/audit": {
|
|
235
|
+
"types": "./dist/os/audit/index.d.ts",
|
|
236
|
+
"default": "./dist/os/audit/index.js"
|
|
237
|
+
},
|
|
238
|
+
"./os/audit-module": {
|
|
239
|
+
"types": "./dist/os/audit/audit.module.d.ts",
|
|
240
|
+
"default": "./dist/os/audit/audit.module.js"
|
|
241
|
+
},
|
|
242
|
+
"./os/session": {
|
|
243
|
+
"types": "./dist/os/session/index.d.ts",
|
|
244
|
+
"default": "./dist/os/session/index.js"
|
|
245
|
+
},
|
|
246
|
+
"./os/session-module": {
|
|
247
|
+
"types": "./dist/os/session/session.module.d.ts",
|
|
248
|
+
"default": "./dist/os/session/session.module.js"
|
|
249
|
+
},
|
|
250
|
+
"./os/mission": {
|
|
251
|
+
"types": "./dist/os/mission/index.d.ts",
|
|
252
|
+
"default": "./dist/os/mission/index.js"
|
|
253
|
+
},
|
|
254
|
+
"./os/mission-module": {
|
|
255
|
+
"types": "./dist/os/mission/mission.module.d.ts",
|
|
256
|
+
"default": "./dist/os/mission/mission.module.js"
|
|
257
|
+
}
|
|
258
|
+
}
|
|
156
259
|
}
|
|
157
|
-
}
|
|
260
|
+
}
|