td-ai-tools 1.3.4 → 1.3.6
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/package.json +1 -1
- package/skills/forge-cli/SKILL.md +30 -16
- package/skills/forge-cli/references/api-v2-certificates-and-security.md +28 -0
- package/skills/forge-cli/references/api-v2-databases-and-backups.md +35 -0
- package/skills/forge-cli/references/api-v2-overview.md +102 -0
- package/skills/forge-cli/references/api-v2-php-services-recipes.md +64 -0
- package/skills/forge-cli/references/api-v2-processes-and-scheduler.md +67 -0
- package/skills/forge-cli/references/api-v2-sites.md +84 -0
- package/skills/forge-cli/references/command-reference-v2.md +145 -0
- package/skills/shopify-lint/SKILL.md +1 -1
- package/skills/shopify-lint/theme-check-theory/.theme-check.example.yml +4 -0
- package/skills/shopify-lint/theme-check-theory/README.md +43 -2
- package/skills/shopify-lint/theme-check-theory/configs/recommended.yml +4 -0
- package/skills/shopify-lint/theme-check-theory/src/checks/hardcoded-text.test.ts +6 -10
- package/skills/shopify-lint/theme-check-theory/src/checks/hardcoded-text.ts +0 -11
- package/skills/shopify-lint/theme-check-theory/src/checks/required-liquid-doc.test.ts +46 -0
- package/skills/shopify-lint/theme-check-theory/src/checks/required-liquid-doc.ts +111 -0
- package/skills/shopify-lint/theme-check-theory/src/index.test.ts +2 -0
- package/skills/shopify-lint/theme-check-theory/src/index.ts +3 -0
- package/skills/forge-cli/references/api-databases-and-backups.md +0 -48
- package/skills/forge-cli/references/api-overview.md +0 -90
- package/skills/forge-cli/references/api-php-services-recipes.md +0 -88
- package/skills/forge-cli/references/api-sites.md +0 -135
- package/skills/forge-cli/references/api-ssl-and-security.md +0 -41
- package/skills/forge-cli/references/api-workers-and-scheduler.md +0 -77
- package/skills/forge-cli/references/command-reference.md +0 -176
package/package.json
CHANGED
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: forge-cli
|
|
3
|
-
|
|
4
|
-
description: Manage Laravel Forge servers, sites, and provisioned resources from the terminal with the Laravel Forge CLI, falling back to the Forge HTTP API (Statamic-relevant endpoints documented here) for anything the CLI does not cover. Use when the user wants to inspect Forge state, switch active servers, deploy sites, update environment variables, view logs, run remote commands, use Tinker, manage services like PHP, Nginx, daemons, and databases, or perform Statamic site setup tasks the CLI lacks a verb for (site/SSL/git/worker/scheduler/backup/recipe/composer-auth management).
|
|
3
|
+
description: Manage Laravel Forge organizations, servers, sites, and provisioned resources with Forge CLI 2.x, falling back to the organization-scoped Forge HTTP API v2 for operations the CLI does not cover. Use for deploys, environment files, logs, remote commands, Tinker, PHP, Nginx, databases, background processes, sites, SSL, scheduled jobs, backups, recipes, or Composer credentials.
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
# Laravel Forge CLI
|
|
8
7
|
|
|
9
8
|
## Core Workflow
|
|
10
9
|
|
|
11
|
-
1.
|
|
12
|
-
2. Check the active server before making changes:
|
|
10
|
+
1. Confirm the installed package and inspect the available commands:
|
|
13
11
|
|
|
14
12
|
```bash
|
|
13
|
+
forge --version
|
|
14
|
+
composer global show laravel/forge-cli
|
|
15
|
+
forge list --raw
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
2. Check the active organization and server before making changes:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
forge organization:current
|
|
22
|
+
forge organization:list
|
|
23
|
+
forge organization:switch organization-slug
|
|
15
24
|
forge server:current
|
|
16
25
|
forge server:list
|
|
17
26
|
forge server:switch staging
|
|
18
27
|
```
|
|
19
28
|
|
|
29
|
+
Switching organizations clears the active server. Select the server again after an organization switch.
|
|
30
|
+
|
|
20
31
|
3. If the task needs SSH access, verify connectivity first:
|
|
21
32
|
|
|
22
33
|
```bash
|
|
@@ -36,7 +47,7 @@ forge site:list
|
|
|
36
47
|
forge deploy
|
|
37
48
|
forge deploy example.com
|
|
38
49
|
forge deploy:logs
|
|
39
|
-
forge deploy:logs
|
|
50
|
+
forge deploy:logs example.com
|
|
40
51
|
```
|
|
41
52
|
|
|
42
53
|
### Environment Variables
|
|
@@ -70,31 +81,34 @@ forge database:shell my-database-name --user=my-user
|
|
|
70
81
|
forge php:status 8.5
|
|
71
82
|
forge php:restart 8.5
|
|
72
83
|
forge nginx:logs access
|
|
73
|
-
forge
|
|
84
|
+
forge background-process:list
|
|
85
|
+
forge background-process:restart 12345
|
|
74
86
|
```
|
|
75
87
|
|
|
88
|
+
`daemon:*` remains a legacy alias in CLI 2.x. Prefer `background-process:*`.
|
|
89
|
+
|
|
76
90
|
## Decision Guide
|
|
77
91
|
|
|
78
|
-
- Need
|
|
92
|
+
- Need context first: use `organization:*`, then `server:*`.
|
|
79
93
|
- Need site-level work: use `site:list`, `deploy`, `env:*`, `site:logs`, `command`, or `tinker`.
|
|
80
94
|
- Need service health or maintenance: use `{resource}:status`, `{resource}:logs`, `{resource}:restart`, or `{resource}:shell`.
|
|
81
95
|
- Need a secure shell on the box: confirm `ssh:test`, then use `forge ssh`.
|
|
82
|
-
- Need something the CLI does not expose (creating sites, issuing SSL,
|
|
96
|
+
- Need something the CLI does not expose (creating sites, issuing SSL, background-process creation, the Laravel scheduler, backups, recipes, Composer auth for Statamic Pro, etc.): use the Forge HTTP API v2 references below.
|
|
83
97
|
|
|
84
98
|
## When the CLI Is Not Enough
|
|
85
99
|
|
|
86
|
-
The CLI is intentionally narrow. For Statamic site tasks it does not cover, call the Forge HTTP API directly. Authentication, IDs, and
|
|
100
|
+
The CLI is intentionally narrow. For Statamic site tasks it does not cover, call the Forge HTTP API directly. Authentication, organization scope, IDs, pagination, and v1-to-v2 migration rules are documented in [references/api-v2-overview.md](references/api-v2-overview.md); start there.
|
|
87
101
|
|
|
88
102
|
Picking the right reference:
|
|
89
103
|
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
104
|
+
- Sites, domains, deployment scripts and history, commands, logs, webhooks, deploy keys → [references/api-v2-sites.md](references/api-v2-sites.md).
|
|
105
|
+
- Background processes, scheduled jobs, Laravel Scheduler, maintenance mode, and the removal of queue workers in v2 → [references/api-v2-processes-and-scheduler.md](references/api-v2-processes-and-scheduler.md).
|
|
106
|
+
- Database schemas, database users, backups, and restores → [references/api-v2-databases-and-backups.md](references/api-v2-databases-and-backups.md).
|
|
107
|
+
- Domain certificates and HTTP basic-auth security rules → [references/api-v2-certificates-and-security.md](references/api-v2-certificates-and-security.md).
|
|
108
|
+
- PHP versions, service actions, recipes, and Composer credentials → [references/api-v2-php-services-recipes.md](references/api-v2-php-services-recipes.md).
|
|
95
109
|
|
|
96
|
-
|
|
110
|
+
The v2 route tables are not complete request-schema documentation. Before a mutating request, confirm the body in the [official API v2 documentation](https://laravel.com/forge/docs/api-reference/introduction) or the current `laravel/forge-sdk` 4.x source. Never substitute a remembered API v1 payload.
|
|
97
111
|
|
|
98
112
|
## Reference
|
|
99
113
|
|
|
100
|
-
Read [references/command-reference.md](references/command-reference.md)
|
|
114
|
+
Read [references/command-reference-v2.md](references/command-reference-v2.md) for the supported CLI 2.x command families and active-context behavior.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Forge API v2 — Certificates and Security Rules
|
|
2
|
+
|
|
3
|
+
Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
|
|
4
|
+
|
|
5
|
+
## Domain Certificates
|
|
6
|
+
|
|
7
|
+
API v2 manages certificates beneath a specific site domain. Resolve the domain ID first; do not pass a hostname where `{domainId}` is expected.
|
|
8
|
+
|
|
9
|
+
| Operation | Method | Path |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| List domains | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
|
|
12
|
+
| List / create certificates | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates` |
|
|
13
|
+
| Get active certificate | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/active` |
|
|
14
|
+
| Get / delete certificate | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/{certificateId}` |
|
|
15
|
+
| Perform certificate action | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/{certificateId}/actions` |
|
|
16
|
+
|
|
17
|
+
Certificate creation and action payloads differ by certificate type and operation. Check the current v2 schema for Let's Encrypt, imported certificates, DNS validation, installation, and activation. The API v1 endpoints such as `/certificates/letsencrypt`, `/install`, and `/activate` must not be reused.
|
|
18
|
+
|
|
19
|
+
Before replacing or deleting an active production certificate, verify the domain, certificate ID, renewal state, and rollback path.
|
|
20
|
+
|
|
21
|
+
## Security Rules (HTTP Basic Auth)
|
|
22
|
+
|
|
23
|
+
| Operation | Method | Path |
|
|
24
|
+
| --- | --- | --- |
|
|
25
|
+
| List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/security-rules` |
|
|
26
|
+
| Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/security-rules/{ruleId}` |
|
|
27
|
+
|
|
28
|
+
Security-rule payloads contain sensitive credentials. Never print passwords or commit them. A path-specific rule can protect a staging site or `/cp`, but confirm its routing effect and remove unintended double authentication before launch.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Forge API v2 — Databases and Backups
|
|
2
|
+
|
|
3
|
+
Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug. Many Statamic sites are flat-file and do not require a database. Database backups also do not cover Statamic content, assets, or other files on disk.
|
|
4
|
+
|
|
5
|
+
## Database Schemas
|
|
6
|
+
|
|
7
|
+
| Operation | Method | Path |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| List / create | GET / POST | `/orgs/{org}/servers/{serverId}/database/schemas` |
|
|
10
|
+
| Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/database/schemas/{databaseId}` |
|
|
11
|
+
| Synchronize | POST | `/orgs/{org}/servers/{serverId}/database/schemas/synchronizations` |
|
|
12
|
+
|
|
13
|
+
API v2 calls databases schemas. There is no update-schema endpoint in the current SDK.
|
|
14
|
+
|
|
15
|
+
## Database Users
|
|
16
|
+
|
|
17
|
+
| Operation | Method | Path |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| List / create | GET / POST | `/orgs/{org}/servers/{serverId}/database/users` |
|
|
20
|
+
| Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/database/users/{userId}` |
|
|
21
|
+
| Update database password | PUT | `/orgs/{org}/servers/{serverId}/database/password` |
|
|
22
|
+
|
|
23
|
+
Confirm whether an update replaces the full database-access set before changing a user. Never expose database passwords in command output or logs.
|
|
24
|
+
|
|
25
|
+
## Backup Configurations and Instances
|
|
26
|
+
|
|
27
|
+
| Operation | Method | Path |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| List / create configurations | GET / POST | `/orgs/{org}/servers/{serverId}/database/backups` |
|
|
30
|
+
| Get / update / delete configuration | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}` |
|
|
31
|
+
| List instances / run now | GET / POST | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances` |
|
|
32
|
+
| Get / delete instance | GET / DELETE | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances/{backupId}` |
|
|
33
|
+
| Restore instance | POST | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances/{backupId}/restores` |
|
|
34
|
+
|
|
35
|
+
Backup configuration payloads vary by storage provider. Verify the provider-specific schema before creation. Treat restores and deletions as destructive: resolve IDs with GET requests and confirm the target database first.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Forge HTTP API v2 Overview
|
|
2
|
+
|
|
3
|
+
Use the HTTP API when Forge CLI 2.x does not expose the required resource mutation. These references cover the API v2 routes most relevant to Statamic and Laravel operations.
|
|
4
|
+
|
|
5
|
+
## Authentication and Transport
|
|
6
|
+
|
|
7
|
+
- Base URL: `https://forge.laravel.com/api`
|
|
8
|
+
- Authentication: `Authorization: Bearer <FORGE_API_TOKEN>`
|
|
9
|
+
- Headers: `Accept: application/json` and `Content-Type: application/json`
|
|
10
|
+
- Do not append `/v1`; that is the deprecated legacy API.
|
|
11
|
+
- Do not print, log, or commit API tokens.
|
|
12
|
+
|
|
13
|
+
Use a token supplied by the user or already available in the process environment. Do not read stored CLI credentials from disk merely to discover a token.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
curl -sS "https://forge.laravel.com/api/orgs" \
|
|
17
|
+
-H "Authorization: Bearer $FORGE_API_TOKEN" \
|
|
18
|
+
-H "Accept: application/json"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Organization Scope
|
|
22
|
+
|
|
23
|
+
Most API v2 resources are scoped to an organization slug:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
/orgs/{organizationSlug}/servers/{serverId}/...
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Resolve context before composing a request:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
forge organization:current
|
|
33
|
+
forge organization:list
|
|
34
|
+
forge server:current
|
|
35
|
+
forge server:list
|
|
36
|
+
forge site:list
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Useful discovery routes:
|
|
40
|
+
|
|
41
|
+
| Operation | Method | Path |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| List organizations | GET | `/orgs` |
|
|
44
|
+
| Get organization | GET | `/orgs/{organizationSlug}` |
|
|
45
|
+
| List servers | GET | `/orgs/{organizationSlug}/servers` |
|
|
46
|
+
| Get server | GET | `/orgs/{organizationSlug}/servers/{serverId}` |
|
|
47
|
+
| List sites on a server | GET | `/orgs/{organizationSlug}/servers/{serverId}/sites` |
|
|
48
|
+
| Get a site within an organization | GET | `/orgs/{organizationSlug}/sites/{siteId}` |
|
|
49
|
+
|
|
50
|
+
## API v1 to v2 Migration Rules
|
|
51
|
+
|
|
52
|
+
- Base URL changed from `/api/v1` to `/api`.
|
|
53
|
+
- Most paths gained `/orgs/{organizationSlug}`.
|
|
54
|
+
- Collection responses use a `data` envelope and cursor pagination.
|
|
55
|
+
- Daemons are now background processes; jobs are now scheduled jobs.
|
|
56
|
+
- Domains are first-class site resources and certificates are domain-scoped.
|
|
57
|
+
- Databases are under `/database/schemas`; database users are under `/database/users`.
|
|
58
|
+
- Service mutations use `/services/{service}/actions`.
|
|
59
|
+
- Queue-worker endpoints and Git repository management were removed from API v2.
|
|
60
|
+
- Many mutations return `202 Accepted` with no resource body. Follow with a GET after the asynchronous operation finishes.
|
|
61
|
+
|
|
62
|
+
Never translate only the host or prefix of an API v1 example. Verify the entire v2 path and payload.
|
|
63
|
+
|
|
64
|
+
## Pagination and Responses
|
|
65
|
+
|
|
66
|
+
List responses are cursor-paginated. Follow the response links or cursor instead of assuming one page contains every resource. Raw responses generally wrap resources in `data`; content and log endpoints typically put text under `data.attributes` rather than returning bare text.
|
|
67
|
+
|
|
68
|
+
Common status codes:
|
|
69
|
+
|
|
70
|
+
| Code | Meaning |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| 200 / 201 | Successful read or creation |
|
|
73
|
+
| 202 | Accepted asynchronous mutation; poll or follow with GET |
|
|
74
|
+
| 204 | Successful response with no body |
|
|
75
|
+
| 401 / 403 | Missing, invalid, or insufficiently scoped token |
|
|
76
|
+
| 404 | Wrong organization slug or resource ID, or unavailable endpoint |
|
|
77
|
+
| 422 | Validation failure; inspect the response body before retrying |
|
|
78
|
+
| 429 | Rate limited; back off and retry |
|
|
79
|
+
|
|
80
|
+
## Safe Request Pattern
|
|
81
|
+
|
|
82
|
+
Prefer explicit variables and inspect with GET before a mutation:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
FORGE_API_BASE="https://forge.laravel.com/api"
|
|
86
|
+
ORGANIZATION_SLUG="example-org"
|
|
87
|
+
SERVER_ID="123"
|
|
88
|
+
SITE_ID="456"
|
|
89
|
+
|
|
90
|
+
curl -sS \
|
|
91
|
+
-H "Authorization: Bearer $FORGE_API_TOKEN" \
|
|
92
|
+
-H "Accept: application/json" \
|
|
93
|
+
"$FORGE_API_BASE/orgs/$ORGANIZATION_SLUG/servers/$SERVER_ID/sites/$SITE_ID"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For writes, add `Content-Type: application/json` and a payload verified against the current v2 docs. Confirm exact IDs with a read-only request first, and get explicit approval before destructive deletions not already requested.
|
|
97
|
+
|
|
98
|
+
## Sources
|
|
99
|
+
|
|
100
|
+
- [Forge API v2 introduction](https://laravel.com/forge/docs/api-reference/introduction)
|
|
101
|
+
- [Forge SDK](https://laravel.com/forge/docs/sdk)
|
|
102
|
+
- [Forge CLI](https://laravel.com/forge/docs/cli)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Forge API v2 — PHP, Services, Recipes, and Composer Credentials
|
|
2
|
+
|
|
3
|
+
Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
|
|
4
|
+
|
|
5
|
+
## PHP Versions and Configuration
|
|
6
|
+
|
|
7
|
+
| Operation | Method | Path |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| List / install versions | GET / POST | `/orgs/{org}/servers/{serverId}/php/versions` |
|
|
10
|
+
| Get / update / delete version | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}` |
|
|
11
|
+
| Get / set CLI version | GET / PUT | `/orgs/{org}/servers/{serverId}/php/cli-version` |
|
|
12
|
+
| Get / set default site version | GET / PUT | `/orgs/{org}/servers/{serverId}/php/site-version` |
|
|
13
|
+
| Get / update FPM config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/fpm` |
|
|
14
|
+
| Get / update CLI config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/cli` |
|
|
15
|
+
| Get / update pool config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/pool` |
|
|
16
|
+
| Get OPCache state | GET | `/orgs/{org}/servers/{serverId}/php/opcache` |
|
|
17
|
+
| Enable / configure OPCache | POST | `/orgs/{org}/servers/{serverId}/php/opcache` |
|
|
18
|
+
| Disable OPCache | DELETE | `/orgs/{org}/servers/{serverId}/php/opcache` |
|
|
19
|
+
|
|
20
|
+
`{phpVersionId}` is the v2 resource ID, not a remembered v1 `php84` path segment. Installation payloads still identify a requested version, but verify the supported value and the project’s PHP requirement before changing production.
|
|
21
|
+
|
|
22
|
+
## Service Actions
|
|
23
|
+
|
|
24
|
+
Service operations use a shared action route:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
POST /orgs/{org}/servers/{serverId}/services/{service}/actions
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Supported SDK service names are `nginx`, `mysql`, `postgres`, `redis`, `php`, and `supervisor`. A restart payload is:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{"action":"restart"}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Use the CLI for supported restarts:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
forge nginx:restart
|
|
40
|
+
forge database:restart
|
|
41
|
+
forge php:restart 8.5
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Do not reuse API v1 paths such as `/nginx/reboot`, `/mysql/stop`, or `/services/restart`.
|
|
45
|
+
|
|
46
|
+
## Recipes
|
|
47
|
+
|
|
48
|
+
| Operation | Method | Path |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| List / create | GET / POST | `/orgs/{org}/recipes` |
|
|
51
|
+
| Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/recipes/{recipeId}` |
|
|
52
|
+
| List runs / run recipe | GET / POST | `/orgs/{org}/recipes/{recipeId}/runs` |
|
|
53
|
+
| Get run | GET | `/orgs/{org}/recipes/{recipeId}/runs/{runId}` |
|
|
54
|
+
|
|
55
|
+
Recipes can run privileged scripts. Inspect the complete script, target servers, and execution user before starting a run.
|
|
56
|
+
|
|
57
|
+
## Composer Credentials
|
|
58
|
+
|
|
59
|
+
| Operation | Method | Path |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/composer/credentials` |
|
|
62
|
+
| Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/composer/credentials/{repository}` |
|
|
63
|
+
|
|
64
|
+
Use this for `composer.statamic.com` and other private repositories. Treat usernames, tokens, passwords, and license keys as secrets; do not print them in logs or include them in documentation examples.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Forge API v2 — Background Processes and Scheduling
|
|
2
|
+
|
|
3
|
+
Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
|
|
4
|
+
|
|
5
|
+
## Queue Workers Were Removed from API v2
|
|
6
|
+
|
|
7
|
+
The old `/sites/{siteId}/workers` API is not available in v2. Do not call it or try to translate it by adding organization scope.
|
|
8
|
+
|
|
9
|
+
For a long-running Laravel or Statamic queue consumer, create a server background process whose command changes into the site directory and runs the appropriate `queue:work` command. Confirm the exact command, site user, working directory, and process count with the project before creating it. If the Forge dashboard offers a higher-level queue-worker workflow, prefer that for worker-specific settings.
|
|
10
|
+
|
|
11
|
+
## Background Processes
|
|
12
|
+
|
|
13
|
+
API v2 renamed daemons to background processes.
|
|
14
|
+
|
|
15
|
+
| Operation | Method | Path | Notes |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| List | GET | `/orgs/{org}/servers/{serverId}/background-processes` | Cursor-paginated |
|
|
18
|
+
| Create | POST | `/orgs/{org}/servers/{serverId}/background-processes` | Verify current body schema |
|
|
19
|
+
| Get | GET | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | — |
|
|
20
|
+
| Update | PUT | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | Often returns 202 |
|
|
21
|
+
| Restart/action | POST | `/orgs/{org}/servers/{serverId}/background-processes/{processId}/actions` | For restart: `{"action":"restart"}` |
|
|
22
|
+
| Read log | GET | `/orgs/{org}/servers/{serverId}/background-processes/{processId}/log` | Content is in `data.attributes.content` |
|
|
23
|
+
| Delete | DELETE | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | Destructive |
|
|
24
|
+
|
|
25
|
+
CLI 2.x provides read and restart operations:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
forge background-process:list
|
|
29
|
+
forge background-process:status 12345
|
|
30
|
+
forge background-process:logs 12345
|
|
31
|
+
forge background-process:restart 12345
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The `daemon:*` aliases remain for compatibility, but skill instructions and new automation should use `background-process:*`.
|
|
35
|
+
|
|
36
|
+
## Scheduled Jobs
|
|
37
|
+
|
|
38
|
+
Forge v2 supports server-scoped and site-scoped jobs.
|
|
39
|
+
|
|
40
|
+
| Scope | Operation | Method | Path |
|
|
41
|
+
| --- | --- | --- | --- |
|
|
42
|
+
| Server | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/scheduled-jobs` |
|
|
43
|
+
| Server | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/scheduled-jobs/{jobId}` |
|
|
44
|
+
| Server | Output | GET | `/orgs/{org}/servers/{serverId}/scheduled-jobs/{jobId}/output` |
|
|
45
|
+
| Site | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs` |
|
|
46
|
+
| Site | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs/{jobId}` |
|
|
47
|
+
| Site | Output | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs/{jobId}/output` |
|
|
48
|
+
|
|
49
|
+
For Statamic or Laravel applications, prefer the Scheduler integration when the application already defines its schedule. Use individual scheduled jobs only for independent cron commands.
|
|
50
|
+
|
|
51
|
+
## Laravel Scheduler Integration
|
|
52
|
+
|
|
53
|
+
| Operation | Method | Path |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| Status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
|
|
56
|
+
| Enable | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
|
|
57
|
+
| Disable | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
|
|
58
|
+
|
|
59
|
+
## Laravel Maintenance Mode
|
|
60
|
+
|
|
61
|
+
| Operation | Method | Path |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| Status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
|
|
64
|
+
| Enable | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
|
|
65
|
+
| Disable | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
|
|
66
|
+
|
|
67
|
+
Confirm enable payload options against the current v2 schema; do not reuse the old v1 maintenance payload without verification.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Forge API v2 — Sites, Domains, Deployments, Commands, and Logs
|
|
2
|
+
|
|
3
|
+
Paths are relative to `https://forge.laravel.com/api`. Replace `{org}` with the organization slug. Confirm request bodies in the current API documentation before writing; API v1 payloads are not assumed compatible.
|
|
4
|
+
|
|
5
|
+
## Sites and Domains
|
|
6
|
+
|
|
7
|
+
| Operation | Method | Path |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| List all organization sites | GET | `/orgs/{org}/sites` |
|
|
10
|
+
| Get organization site | GET | `/orgs/{org}/sites/{siteId}` |
|
|
11
|
+
| List server sites | GET | `/orgs/{org}/servers/{serverId}/sites` |
|
|
12
|
+
| Create site | POST | `/orgs/{org}/servers/{serverId}/sites` |
|
|
13
|
+
| Update site | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}` |
|
|
14
|
+
| Delete site | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}` |
|
|
15
|
+
| List domains | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
|
|
16
|
+
| Create domain | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
|
|
17
|
+
| Get domain | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
|
|
18
|
+
| Update domain | PATCH | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
|
|
19
|
+
| Delete domain | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
|
|
20
|
+
|
|
21
|
+
API v2 removed the old aliases endpoint. Manage each hostname through the domains collection. Git repository install, update, and delete operations were also removed from API v2; connect or change source control in the Forge dashboard.
|
|
22
|
+
|
|
23
|
+
## Environment and Nginx
|
|
24
|
+
|
|
25
|
+
| Operation | Method | Path | Payload / response note |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| Get environment | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/environment` | Content is in `data.attributes.content` |
|
|
28
|
+
| Update environment | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/environment` | `environment`: full file content |
|
|
29
|
+
| Get site Nginx | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/nginx` | Content is in `data.attributes.content` |
|
|
30
|
+
| Update site Nginx | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/nginx` | `config`: full configuration |
|
|
31
|
+
| Get domain Nginx | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/nginx` | Domain-specific configuration |
|
|
32
|
+
| Update domain Nginx | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/nginx` | `config`: full configuration |
|
|
33
|
+
|
|
34
|
+
Prefer `forge env:pull` and `forge env:push` for interactive environment work. Always fetch the current Nginx configuration before replacing it.
|
|
35
|
+
|
|
36
|
+
## Deployments and Deploy Keys
|
|
37
|
+
|
|
38
|
+
| Operation | Method | Path |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| List deployments | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments` |
|
|
41
|
+
| Start deployment | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments` |
|
|
42
|
+
| Get deployment | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/{deploymentId}` |
|
|
43
|
+
| Get deployment log | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/{deploymentId}/log` |
|
|
44
|
+
| Get deployment status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/status` |
|
|
45
|
+
| Disable quick deploy | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/status` |
|
|
46
|
+
| Get deployment script | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/script` |
|
|
47
|
+
| Update deployment script | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/script` |
|
|
48
|
+
| Get deploy hook | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/deploy-hook` |
|
|
49
|
+
| Update deploy hook | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/deploy-hook` |
|
|
50
|
+
| Enable push-to-deploy | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/push-to-deploy` |
|
|
51
|
+
| Disable push-to-deploy | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/push-to-deploy` |
|
|
52
|
+
| Get / create deploy key | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deploy-key` |
|
|
53
|
+
| Delete deploy key | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deploy-key` |
|
|
54
|
+
|
|
55
|
+
Use `forge deploy` and `forge deploy:logs` for normal deployment operations. API v2 has no equivalent for the old reset-deployment-state endpoint.
|
|
56
|
+
|
|
57
|
+
## Site Commands
|
|
58
|
+
|
|
59
|
+
| Operation | Method | Path |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| List / run | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands` |
|
|
62
|
+
| Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands/{commandId}` |
|
|
63
|
+
| Get output | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands/{commandId}/output` |
|
|
64
|
+
|
|
65
|
+
Prefer `forge command example.com --command="..."` unless scripting through HTTP.
|
|
66
|
+
|
|
67
|
+
## Site Logs
|
|
68
|
+
|
|
69
|
+
| Log | Read | Clear |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| Nginx access | `GET .../sites/{siteId}/logs/nginx-access` | `DELETE .../sites/{siteId}/logs/nginx-access` |
|
|
72
|
+
| Nginx error | `GET .../sites/{siteId}/logs/nginx-error` | `DELETE .../sites/{siteId}/logs/nginx-error` |
|
|
73
|
+
| Application | `GET .../sites/{siteId}/logs/application` | `DELETE .../sites/{siteId}/logs/application` |
|
|
74
|
+
|
|
75
|
+
Each abbreviated path begins `/orgs/{org}/servers/{serverId}`. Prefer `forge site:logs --follow` for a live application-log tail.
|
|
76
|
+
|
|
77
|
+
## Deployment Webhooks
|
|
78
|
+
|
|
79
|
+
| Operation | Method | Path |
|
|
80
|
+
| --- | --- | --- |
|
|
81
|
+
| List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/webhooks` |
|
|
82
|
+
| Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/webhooks/{webhookId}` |
|
|
83
|
+
|
|
84
|
+
The API v1 deployment-failure-email endpoint is not available in v2.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Forge CLI 2.x Command Reference
|
|
2
|
+
|
|
3
|
+
This reference covers the currently supported Forge CLI 2.x command families.
|
|
4
|
+
|
|
5
|
+
## Installation and Verification
|
|
6
|
+
|
|
7
|
+
Requirements:
|
|
8
|
+
|
|
9
|
+
- PHP 8.2 or newer
|
|
10
|
+
- Composer available globally
|
|
11
|
+
|
|
12
|
+
Install or upgrade within major version 2:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
composer global require "laravel/forge-cli:^2.0" --with-all-dependencies
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Verify both the executable and Composer package metadata:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
forge --version
|
|
22
|
+
composer global show laravel/forge-cli
|
|
23
|
+
forge list --raw
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If `forge --version` disagrees with Composer metadata, confirm `command -v forge` points to the Composer global binary. Package metadata is the reliable installed-package version; a release may contain a stale display string.
|
|
27
|
+
|
|
28
|
+
Authenticate:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
forge login
|
|
32
|
+
forge login --token="your-api-token"
|
|
33
|
+
forge logout
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
For CI, set `FORGE_API_TOKEN` in the CI secret store. Never echo the token.
|
|
37
|
+
|
|
38
|
+
## Active Organization and Server
|
|
39
|
+
|
|
40
|
+
CLI 2.x commands run in an active organization and usually an active server:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
forge organization:current
|
|
44
|
+
forge organization:list
|
|
45
|
+
forge organization:switch
|
|
46
|
+
forge organization:switch organization-slug
|
|
47
|
+
|
|
48
|
+
forge server:current
|
|
49
|
+
forge server:list
|
|
50
|
+
forge server:switch
|
|
51
|
+
forge server:switch production
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Aliases `org:current`, `org:list`, and `org:switch` are available. Switching organizations resets the active server, so choose the server again afterward.
|
|
55
|
+
|
|
56
|
+
## SSH
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
forge ssh:test
|
|
60
|
+
forge ssh:configure
|
|
61
|
+
forge ssh:configure --key=/path/to/public-key.pub --name=laptop-key
|
|
62
|
+
forge ssh
|
|
63
|
+
forge ssh server-name
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Sites
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
forge site:list
|
|
70
|
+
forge open
|
|
71
|
+
forge open example.com
|
|
72
|
+
forge deploy
|
|
73
|
+
forge deploy example.com
|
|
74
|
+
forge deploy:logs
|
|
75
|
+
forge deploy:logs example.com
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The optional `deploy:logs` argument is a site name, not a deployment ID.
|
|
79
|
+
|
|
80
|
+
Environment files:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
forge env:pull
|
|
84
|
+
forge env:pull example.com
|
|
85
|
+
forge env:pull example.com .env
|
|
86
|
+
forge env:push
|
|
87
|
+
forge env:push example.com
|
|
88
|
+
forge env:push example.com .env
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Application logs and remote commands:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
forge site:logs
|
|
95
|
+
forge site:logs --follow
|
|
96
|
+
forge site:logs example.com --follow
|
|
97
|
+
forge command
|
|
98
|
+
forge command example.com --command="php artisan about"
|
|
99
|
+
forge tinker
|
|
100
|
+
forge tinker example.com
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
If configuration is cached or a long-running process consumes environment values, deploy and restart that process after pushing `.env` changes.
|
|
104
|
+
|
|
105
|
+
## Background Processes
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
forge background-process:list
|
|
109
|
+
forge background-process:status
|
|
110
|
+
forge background-process:status 12345
|
|
111
|
+
forge background-process:logs
|
|
112
|
+
forge background-process:logs 12345 --follow
|
|
113
|
+
forge background-process:restart
|
|
114
|
+
forge background-process:restart 12345
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
CLI 2.x retains `daemon:list`, `daemon:status`, `daemon:logs`, and `daemon:restart` as aliases. Prefer `background-process:*` in new instructions.
|
|
118
|
+
|
|
119
|
+
## Database, Nginx, and PHP
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
forge database:status
|
|
123
|
+
forge database:logs
|
|
124
|
+
forge database:restart
|
|
125
|
+
forge database:shell
|
|
126
|
+
forge database:shell database-name --user=database-user
|
|
127
|
+
|
|
128
|
+
forge nginx:status
|
|
129
|
+
forge nginx:logs
|
|
130
|
+
forge nginx:logs access
|
|
131
|
+
forge nginx:restart
|
|
132
|
+
|
|
133
|
+
forge php:status
|
|
134
|
+
forge php:status 8.5
|
|
135
|
+
forge php:logs
|
|
136
|
+
forge php:logs 8.5
|
|
137
|
+
forge php:restart
|
|
138
|
+
forge php:restart 8.5
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Use read-only status and log commands before restarts when diagnosing. Confirm organization and server context before any state-changing command.
|
|
142
|
+
|
|
143
|
+
## Source
|
|
144
|
+
|
|
145
|
+
[Official Laravel Forge CLI documentation](https://laravel.com/forge/docs/cli)
|
|
@@ -40,7 +40,7 @@ python3 .agents/skills/shopify-lint/scripts/shopify_lint.py --path .
|
|
|
40
40
|
|
|
41
41
|
The script identifies files changed since the current branch's merge-base, adds staged, unstaged, and untracked files, then runs three linters over that set and merges their results into one report:
|
|
42
42
|
|
|
43
|
-
- **Theme Check** — `shopify theme check --output json`. The root `.theme-check.yml` directly requires the bundled `theme-check-theory` package from this skill directory. `DisallowedScriptOrStyleTag` reports inline executable `<script>` and all `<style>` tags in modified Liquid files while allowing external-source and JSON-data scripts. `HardcodedText` reports rendered hard-coded copy, except content inside Liquid `stylesheet`, `javascript`, and `schema` tags,
|
|
43
|
+
- **Theme Check** — `shopify theme check --output json`. The root `.theme-check.yml` directly requires the bundled `theme-check-theory` package from this skill directory. `DisallowedScriptOrStyleTag` reports inline executable `<script>` and all `<style>` tags in modified Liquid files while allowing external-source and JSON-data scripts. `HardcodedText` reports rendered hard-coded copy, except content inside Liquid `stylesheet`, `javascript`, and `schema` tags, except text beginning with `--`, which is a CSS custom property name rather than copy, and except string arguments passed to `{% render %}` and `{% include %}`, which are as often class names or size tokens as copy. The generated `.theme-check.yml` also pins the upstream `StaticStylesheetAndJavascriptTags` to `error`, so Liquid written inside a `{% stylesheet %}` or `{% javascript %}` block always fails the lint.
|
|
44
44
|
- **JavaScript** — ESLint's recommended rules plus the bundled `eslint-plugin-theory`, over modified `.js` and `.mjs` files *and* the JavaScript inside `{% javascript %}` blocks of modified `.liquid` files.
|
|
45
45
|
- **CSS** — `stylelint-config-standard` through the bundled `stylelint-config-theory`, over modified `.css` files *and* the CSS inside `{% stylesheet %}` blocks of modified `.liquid` files.
|
|
46
46
|
|