@studiometa/forge-cli 0.0.1 → 0.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 (197) hide show
  1. package/README.md +252 -0
  2. package/dist/audit.d.ts +3 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +3567 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/backups/command.d.ts +2 -0
  9. package/dist/commands/backups/command.d.ts.map +1 -0
  10. package/dist/commands/backups/handlers.d.ts +6 -0
  11. package/dist/commands/backups/handlers.d.ts.map +1 -0
  12. package/dist/commands/backups/help.d.ts +2 -0
  13. package/dist/commands/backups/help.d.ts.map +1 -0
  14. package/dist/commands/backups/index.d.ts +3 -0
  15. package/dist/commands/backups/index.d.ts.map +1 -0
  16. package/dist/commands/certificates/command.d.ts +2 -0
  17. package/dist/commands/certificates/command.d.ts.map +1 -0
  18. package/dist/commands/certificates/handlers.d.ts +5 -0
  19. package/dist/commands/certificates/handlers.d.ts.map +1 -0
  20. package/dist/commands/certificates/help.d.ts +2 -0
  21. package/dist/commands/certificates/help.d.ts.map +1 -0
  22. package/dist/commands/certificates/index.d.ts +3 -0
  23. package/dist/commands/certificates/index.d.ts.map +1 -0
  24. package/dist/commands/commands/command.d.ts +2 -0
  25. package/dist/commands/commands/command.d.ts.map +1 -0
  26. package/dist/commands/commands/handlers.d.ts +5 -0
  27. package/dist/commands/commands/handlers.d.ts.map +1 -0
  28. package/dist/commands/commands/help.d.ts +2 -0
  29. package/dist/commands/commands/help.d.ts.map +1 -0
  30. package/dist/commands/commands/index.d.ts +3 -0
  31. package/dist/commands/commands/index.d.ts.map +1 -0
  32. package/dist/commands/completion.d.ts +6 -0
  33. package/dist/commands/completion.d.ts.map +1 -0
  34. package/dist/commands/config.d.ts +6 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/daemons/command.d.ts +2 -0
  37. package/dist/commands/daemons/command.d.ts.map +1 -0
  38. package/dist/commands/daemons/handlers.d.ts +5 -0
  39. package/dist/commands/daemons/handlers.d.ts.map +1 -0
  40. package/dist/commands/daemons/help.d.ts +2 -0
  41. package/dist/commands/daemons/help.d.ts.map +1 -0
  42. package/dist/commands/daemons/index.d.ts +3 -0
  43. package/dist/commands/daemons/index.d.ts.map +1 -0
  44. package/dist/commands/database-users/command.d.ts +2 -0
  45. package/dist/commands/database-users/command.d.ts.map +1 -0
  46. package/dist/commands/database-users/handlers.d.ts +6 -0
  47. package/dist/commands/database-users/handlers.d.ts.map +1 -0
  48. package/dist/commands/database-users/help.d.ts +2 -0
  49. package/dist/commands/database-users/help.d.ts.map +1 -0
  50. package/dist/commands/database-users/index.d.ts +3 -0
  51. package/dist/commands/database-users/index.d.ts.map +1 -0
  52. package/dist/commands/databases/command.d.ts +2 -0
  53. package/dist/commands/databases/command.d.ts.map +1 -0
  54. package/dist/commands/databases/handlers.d.ts +4 -0
  55. package/dist/commands/databases/handlers.d.ts.map +1 -0
  56. package/dist/commands/databases/help.d.ts +2 -0
  57. package/dist/commands/databases/help.d.ts.map +1 -0
  58. package/dist/commands/databases/index.d.ts +3 -0
  59. package/dist/commands/databases/index.d.ts.map +1 -0
  60. package/dist/commands/deployments/command.d.ts +2 -0
  61. package/dist/commands/deployments/command.d.ts.map +1 -0
  62. package/dist/commands/deployments/handlers.d.ts +4 -0
  63. package/dist/commands/deployments/handlers.d.ts.map +1 -0
  64. package/dist/commands/deployments/help.d.ts +2 -0
  65. package/dist/commands/deployments/help.d.ts.map +1 -0
  66. package/dist/commands/deployments/index.d.ts +3 -0
  67. package/dist/commands/deployments/index.d.ts.map +1 -0
  68. package/dist/commands/env/command.d.ts +2 -0
  69. package/dist/commands/env/command.d.ts.map +1 -0
  70. package/dist/commands/env/handlers.d.ts +4 -0
  71. package/dist/commands/env/handlers.d.ts.map +1 -0
  72. package/dist/commands/env/help.d.ts +2 -0
  73. package/dist/commands/env/help.d.ts.map +1 -0
  74. package/dist/commands/env/index.d.ts +3 -0
  75. package/dist/commands/env/index.d.ts.map +1 -0
  76. package/dist/commands/firewall-rules/command.d.ts +2 -0
  77. package/dist/commands/firewall-rules/command.d.ts.map +1 -0
  78. package/dist/commands/firewall-rules/handlers.d.ts +4 -0
  79. package/dist/commands/firewall-rules/handlers.d.ts.map +1 -0
  80. package/dist/commands/firewall-rules/help.d.ts +2 -0
  81. package/dist/commands/firewall-rules/help.d.ts.map +1 -0
  82. package/dist/commands/firewall-rules/index.d.ts +3 -0
  83. package/dist/commands/firewall-rules/index.d.ts.map +1 -0
  84. package/dist/commands/monitors/command.d.ts +2 -0
  85. package/dist/commands/monitors/command.d.ts.map +1 -0
  86. package/dist/commands/monitors/handlers.d.ts +6 -0
  87. package/dist/commands/monitors/handlers.d.ts.map +1 -0
  88. package/dist/commands/monitors/help.d.ts +2 -0
  89. package/dist/commands/monitors/help.d.ts.map +1 -0
  90. package/dist/commands/monitors/index.d.ts +3 -0
  91. package/dist/commands/monitors/index.d.ts.map +1 -0
  92. package/dist/commands/nginx/command.d.ts +2 -0
  93. package/dist/commands/nginx/command.d.ts.map +1 -0
  94. package/dist/commands/nginx/handlers.d.ts +4 -0
  95. package/dist/commands/nginx/handlers.d.ts.map +1 -0
  96. package/dist/commands/nginx/help.d.ts +2 -0
  97. package/dist/commands/nginx/help.d.ts.map +1 -0
  98. package/dist/commands/nginx/index.d.ts +3 -0
  99. package/dist/commands/nginx/index.d.ts.map +1 -0
  100. package/dist/commands/nginx-templates/command.d.ts +2 -0
  101. package/dist/commands/nginx-templates/command.d.ts.map +1 -0
  102. package/dist/commands/nginx-templates/handlers.d.ts +7 -0
  103. package/dist/commands/nginx-templates/handlers.d.ts.map +1 -0
  104. package/dist/commands/nginx-templates/help.d.ts +2 -0
  105. package/dist/commands/nginx-templates/help.d.ts.map +1 -0
  106. package/dist/commands/nginx-templates/index.d.ts +3 -0
  107. package/dist/commands/nginx-templates/index.d.ts.map +1 -0
  108. package/dist/commands/recipes/command.d.ts +2 -0
  109. package/dist/commands/recipes/command.d.ts.map +1 -0
  110. package/dist/commands/recipes/handlers.d.ts +5 -0
  111. package/dist/commands/recipes/handlers.d.ts.map +1 -0
  112. package/dist/commands/recipes/help.d.ts +2 -0
  113. package/dist/commands/recipes/help.d.ts.map +1 -0
  114. package/dist/commands/recipes/index.d.ts +3 -0
  115. package/dist/commands/recipes/index.d.ts.map +1 -0
  116. package/dist/commands/redirect-rules/command.d.ts +2 -0
  117. package/dist/commands/redirect-rules/command.d.ts.map +1 -0
  118. package/dist/commands/redirect-rules/handlers.d.ts +6 -0
  119. package/dist/commands/redirect-rules/handlers.d.ts.map +1 -0
  120. package/dist/commands/redirect-rules/help.d.ts +2 -0
  121. package/dist/commands/redirect-rules/help.d.ts.map +1 -0
  122. package/dist/commands/redirect-rules/index.d.ts +3 -0
  123. package/dist/commands/redirect-rules/index.d.ts.map +1 -0
  124. package/dist/commands/scheduled-jobs/command.d.ts +2 -0
  125. package/dist/commands/scheduled-jobs/command.d.ts.map +1 -0
  126. package/dist/commands/scheduled-jobs/handlers.d.ts +6 -0
  127. package/dist/commands/scheduled-jobs/handlers.d.ts.map +1 -0
  128. package/dist/commands/scheduled-jobs/help.d.ts +2 -0
  129. package/dist/commands/scheduled-jobs/help.d.ts.map +1 -0
  130. package/dist/commands/scheduled-jobs/index.d.ts +3 -0
  131. package/dist/commands/scheduled-jobs/index.d.ts.map +1 -0
  132. package/dist/commands/security-rules/command.d.ts +2 -0
  133. package/dist/commands/security-rules/command.d.ts.map +1 -0
  134. package/dist/commands/security-rules/handlers.d.ts +6 -0
  135. package/dist/commands/security-rules/handlers.d.ts.map +1 -0
  136. package/dist/commands/security-rules/help.d.ts +2 -0
  137. package/dist/commands/security-rules/help.d.ts.map +1 -0
  138. package/dist/commands/security-rules/index.d.ts +3 -0
  139. package/dist/commands/security-rules/index.d.ts.map +1 -0
  140. package/dist/commands/servers/command.d.ts +2 -0
  141. package/dist/commands/servers/command.d.ts.map +1 -0
  142. package/dist/commands/servers/handlers.d.ts +18 -0
  143. package/dist/commands/servers/handlers.d.ts.map +1 -0
  144. package/dist/commands/servers/help.d.ts +2 -0
  145. package/dist/commands/servers/help.d.ts.map +1 -0
  146. package/dist/commands/servers/index.d.ts +3 -0
  147. package/dist/commands/servers/index.d.ts.map +1 -0
  148. package/dist/commands/sites/command.d.ts +2 -0
  149. package/dist/commands/sites/command.d.ts.map +1 -0
  150. package/dist/commands/sites/handlers.d.ts +4 -0
  151. package/dist/commands/sites/handlers.d.ts.map +1 -0
  152. package/dist/commands/sites/help.d.ts +2 -0
  153. package/dist/commands/sites/help.d.ts.map +1 -0
  154. package/dist/commands/sites/index.d.ts +3 -0
  155. package/dist/commands/sites/index.d.ts.map +1 -0
  156. package/dist/commands/ssh-keys/command.d.ts +2 -0
  157. package/dist/commands/ssh-keys/command.d.ts.map +1 -0
  158. package/dist/commands/ssh-keys/handlers.d.ts +4 -0
  159. package/dist/commands/ssh-keys/handlers.d.ts.map +1 -0
  160. package/dist/commands/ssh-keys/help.d.ts +2 -0
  161. package/dist/commands/ssh-keys/help.d.ts.map +1 -0
  162. package/dist/commands/ssh-keys/index.d.ts +3 -0
  163. package/dist/commands/ssh-keys/index.d.ts.map +1 -0
  164. package/dist/commands/user/command.d.ts +2 -0
  165. package/dist/commands/user/command.d.ts.map +1 -0
  166. package/dist/commands/user/handlers.d.ts +3 -0
  167. package/dist/commands/user/handlers.d.ts.map +1 -0
  168. package/dist/commands/user/help.d.ts +2 -0
  169. package/dist/commands/user/help.d.ts.map +1 -0
  170. package/dist/commands/user/index.d.ts +3 -0
  171. package/dist/commands/user/index.d.ts.map +1 -0
  172. package/dist/config.d.ts +18 -0
  173. package/dist/config.d.ts.map +1 -0
  174. package/dist/context.d.ts +50 -0
  175. package/dist/context.d.ts.map +1 -0
  176. package/dist/error-handler-BahHMt6t.js +396 -0
  177. package/dist/error-handler-BahHMt6t.js.map +1 -0
  178. package/dist/error-handler.d.ts +39 -0
  179. package/dist/error-handler.d.ts.map +1 -0
  180. package/dist/errors.d.ts +45 -0
  181. package/dist/errors.d.ts.map +1 -0
  182. package/dist/index.d.ts +8 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +2 -0
  185. package/dist/output.d.ts +47 -0
  186. package/dist/output.d.ts.map +1 -0
  187. package/dist/types.d.ts +7 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/utils/args.d.ts +14 -0
  190. package/dist/utils/args.d.ts.map +1 -0
  191. package/dist/utils/colors.d.ts +17 -0
  192. package/dist/utils/colors.d.ts.map +1 -0
  193. package/dist/utils/command-router.d.ts +52 -0
  194. package/dist/utils/command-router.d.ts.map +1 -0
  195. package/dist/utils/resolve.d.ts +25 -0
  196. package/dist/utils/resolve.d.ts.map +1 -0
  197. package/package.json +41 -1
package/README.md ADDED
@@ -0,0 +1,252 @@
1
+ # @studiometa/forge-cli
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@studiometa/forge-cli?style=flat&colorB=3e63dd&colorA=414853)](https://www.npmjs.com/package/@studiometa/forge-cli)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat&colorB=3e63dd&colorA=414853)](https://opensource.org/licenses/MIT)
5
+
6
+ CLI tool for managing Laravel Forge servers, sites, and deployments. Optimized for both AI agents and human users.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install -g @studiometa/forge-cli
12
+
13
+ # Or use directly with npx
14
+ npx @studiometa/forge-cli --help
15
+ ```
16
+
17
+ ## Configuration
18
+
19
+ Credentials can be provided in three ways (highest priority first):
20
+
21
+ 1. **CLI argument**: `--token <token>`
22
+ 2. **Environment variable**: `FORGE_API_TOKEN`
23
+ 3. **Config file** (XDG-compliant):
24
+
25
+ ```bash
26
+ forge-cli config set YOUR_FORGE_TOKEN
27
+ forge-cli config get
28
+ forge-cli config delete
29
+ ```
30
+
31
+ | Platform | Config path |
32
+ | -------- | ------------------------------------------------------- |
33
+ | Linux | `~/.config/forge-tools/config.json` |
34
+ | macOS | `~/Library/Application Support/forge-tools/config.json` |
35
+ | Windows | `%APPDATA%/forge-tools/config.json` |
36
+
37
+ ## Commands
38
+
39
+ ```
40
+ forge-cli <command> [subcommand] [options]
41
+ ```
42
+
43
+ | Command | Alias | Description |
44
+ | ----------------- | ------- | ---------------------------------------------------- |
45
+ | `config` | | Manage CLI configuration (`set`, `get`, `delete`) |
46
+ | `servers` | `s` | List, get, reboot servers |
47
+ | `sites` | | List, get sites on a server |
48
+ | `deployments` | `d` | List deployments, trigger deploys |
49
+ | `databases` | `db` | List, get databases on a server |
50
+ | `database-users` | | List, get, create, delete database users on a server |
51
+ | `daemons` | | List, get, restart daemons on a server |
52
+ | `backups` | | List, get, create, delete backup configs on a server |
53
+ | `commands` | | List, get, create commands on a server |
54
+ | `scheduled-jobs` | | List, get, create, delete scheduled jobs on a server |
55
+ | `monitors` | | List, get, create, delete monitors on a server |
56
+ | `env` | | Get, update environment variables for a site |
57
+ | `nginx` | | Get, update Nginx configuration for a site |
58
+ | `nginx-templates` | | List, get, create, update, delete Nginx templates |
59
+ | `certificates` | `certs` | List, get, activate SSL certificates for a site |
60
+ | `firewall-rules` | `fw` | List, get firewall rules on a server |
61
+ | `ssh-keys` | | List, get SSH keys on a server |
62
+ | `security-rules` | | List, get, create, delete security rules for a site |
63
+ | `redirect-rules` | | List, get, create, delete redirect rules for a site |
64
+ | `recipes` | | List, get, run recipes |
65
+ | `user` | | Get the authenticated user's profile |
66
+ | `completion` | | Install shell completion (bash, zsh, fish) |
67
+
68
+ Run `forge-cli <command> --help` for detailed usage of each command.
69
+
70
+ ## Quick Start
71
+
72
+ ```bash
73
+ # Save your API token
74
+ forge-cli config set YOUR_FORGE_TOKEN
75
+
76
+ # List all servers
77
+ forge-cli servers list
78
+
79
+ # List sites on a server
80
+ forge-cli sites list --server 123
81
+
82
+ # Deploy a site
83
+ forge-cli deployments deploy --server 123 --site 456
84
+
85
+ # Get environment variables
86
+ forge-cli env get --server 123 --site 456
87
+ ```
88
+
89
+ ## Output Formats
90
+
91
+ All list/get commands support `--format`:
92
+
93
+ | Format | Flag | Description |
94
+ | ------ | ---------------- | ------------------------------------ |
95
+ | Human | `--format human` | Colored, readable output (default) |
96
+ | JSON | `--format json` | Structured JSON for programmatic use |
97
+ | Table | `--format table` | ASCII table |
98
+
99
+ ```bash
100
+ forge-cli servers list --format json
101
+ forge-cli sites list --server 123 --format table
102
+ ```
103
+
104
+ ## Command Reference
105
+
106
+ ### `config` — Manage configuration
107
+
108
+ ```bash
109
+ forge-cli config set <token> # Save API token to config file
110
+ forge-cli config get # Show current token (masked)
111
+ forge-cli config delete # Delete stored token
112
+ ```
113
+
114
+ ### `servers` (`s`) — Manage servers
115
+
116
+ ```bash
117
+ forge-cli servers list # List all servers
118
+ forge-cli servers get <id> # Get server details
119
+ forge-cli servers reboot <id> # Reboot a server
120
+ ```
121
+
122
+ ### `sites` — Manage sites
123
+
124
+ ```bash
125
+ forge-cli sites list --server <id> # List sites on a server
126
+ forge-cli sites get <site_id> --server <id> # Get site details
127
+ ```
128
+
129
+ ### `deployments` (`d`) — Manage deployments
130
+
131
+ ```bash
132
+ forge-cli deployments list --server <id> --site <id> # List deployments
133
+ forge-cli deployments deploy --server <id> --site <id> # Trigger a deployment
134
+ ```
135
+
136
+ The `deploy` command waits for deployment to complete, showing live progress. On completion it prints the deployment log and elapsed time.
137
+
138
+ ### `databases` (`db`) — Manage databases
139
+
140
+ ```bash
141
+ forge-cli databases list --server <id> # List databases
142
+ forge-cli databases get <db_id> --server <id> # Get database details
143
+ ```
144
+
145
+ ### `daemons` — Manage background processes
146
+
147
+ ```bash
148
+ forge-cli daemons list --server <id> # List daemons
149
+ forge-cli daemons get <daemon_id> --server <id> # Get daemon details
150
+ forge-cli daemons restart <daemon_id> --server <id> # Restart a daemon
151
+ ```
152
+
153
+ ### `env` — Manage environment variables
154
+
155
+ ```bash
156
+ forge-cli env get --server <id> --site <id> # Get .env content
157
+ forge-cli env update --server <id> --site <id> --content "KEY=value" # Update .env
158
+ ```
159
+
160
+ ### `nginx` — Manage Nginx configuration
161
+
162
+ ```bash
163
+ forge-cli nginx get --server <id> --site <id> # Get Nginx config
164
+ forge-cli nginx update --server <id> --site <id> --content "server { ... }" # Update Nginx config
165
+ ```
166
+
167
+ ### `certificates` (`certs`) — Manage SSL certificates
168
+
169
+ ```bash
170
+ forge-cli certificates list --server <id> --site <id> # List certificates
171
+ forge-cli certificates get <cert_id> --server <id> --site <id> # Get certificate details
172
+ forge-cli certificates activate <cert_id> --server <id> --site <id> # Activate a certificate
173
+ ```
174
+
175
+ ### `firewall-rules` (`fw`) — Manage firewall rules
176
+
177
+ ```bash
178
+ forge-cli firewall-rules list --server <id> # List firewall rules
179
+ forge-cli firewall-rules get <rule_id> --server <id> # Get rule details
180
+ ```
181
+
182
+ ### `ssh-keys` — Manage SSH keys
183
+
184
+ ```bash
185
+ forge-cli ssh-keys list --server <id> # List SSH keys
186
+ forge-cli ssh-keys get <key_id> --server <id> # Get SSH key details
187
+ ```
188
+
189
+ ### `recipes` — Manage recipes
190
+
191
+ ```bash
192
+ forge-cli recipes list # List all recipes
193
+ forge-cli recipes get <id> # Get recipe details
194
+ forge-cli recipes run <id> --servers 123,456 # Run recipe on servers
195
+ ```
196
+
197
+ ### `completion` — Shell completion
198
+
199
+ ```bash
200
+ forge-cli completion bash # Install Bash completion
201
+ forge-cli completion zsh # Install Zsh completion
202
+ forge-cli completion fish # Install Fish completion
203
+ forge-cli completion bash --print # Print script without installing
204
+ ```
205
+
206
+ ## Audit Logging
207
+
208
+ All write operations (`deploy`, `create`, `delete`, `reboot`, `restart`, `update`, `run`, `activate`) are automatically logged to `~/.config/forge-tools/audit.log`. Override the path with the `FORGE_AUDIT_LOG` environment variable. Sensitive fields (tokens, passwords) are redacted.
209
+
210
+ ## Global Options
211
+
212
+ | Option | Alias | Description |
213
+ | ----------------- | ----- | ----------------------------------------------- |
214
+ | `--token <token>` | | Forge API token (overrides config and env) |
215
+ | `--server <id>` | | Server ID (required for server-scoped commands) |
216
+ | `--site <id>` | | Site ID (required for site-scoped commands) |
217
+ | `--format <fmt>` | `-f` | Output format: `json`, `human`, `table` |
218
+ | `--no-color` | | Disable colored output |
219
+ | `--help` | `-h` | Show help |
220
+ | `--version` | `-v` | Show version |
221
+
222
+ ## AI Agent Integration
223
+
224
+ The CLI is designed for programmatic use by AI agents:
225
+
226
+ - Structured JSON output with `--format json`
227
+ - Consistent error messages with non-zero exit codes
228
+ - Fully non-interactive and scriptable
229
+
230
+ ```bash
231
+ # Get all servers as JSON
232
+ forge-cli servers list --format json
233
+
234
+ # Deploy and capture output
235
+ forge-cli deployments deploy --server 123 --site 456 --format json
236
+ ```
237
+
238
+ ## Requirements
239
+
240
+ - **Node.js 24+**
241
+ - **Laravel Forge account** with API token
242
+
243
+ ## Getting Your API Token
244
+
245
+ 1. Log into [Laravel Forge](https://forge.laravel.com)
246
+ 2. Go to **Account → API Tokens**
247
+ 3. Create a new token with the scopes you need
248
+ 4. Copy the token (it's only shown once)
249
+
250
+ ## License
251
+
252
+ MIT © [Studio Meta](https://www.studiometa.fr)
@@ -0,0 +1,3 @@
1
+ import type { AuditLogger } from "@studiometa/forge-core";
2
+ export declare function getCliAuditLogger(): AuditLogger;
3
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,wBAAgB,iBAAiB,IAAI,WAAW,CAG/C"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}