@areca-cms/skills 0.4.0 → 0.5.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/CHANGELOG.md +7 -0
- package/README.md +2 -1
- package/dist/cli.js +3 -1
- package/dist/skills.d.ts +8 -3
- package/dist/skills.js +19 -12
- package/package.json +1 -1
- package/skills/areca-mcp/SKILL.md +19 -5
- package/skills/areca-mcp/references/languages.md +86 -0
- package/skills/areca-mcp/references/tools.md +21 -12
- package/skills/areca-quickstart/SKILL.md +245 -0
- package/skills/areca-quickstart/references/connect.md +123 -0
- package/skills/areca-quickstart/references/first-release.md +181 -0
- package/skills/areca-quickstart/references/frameworks.md +533 -0
- package/skills/areca-quickstart/references/interview.md +169 -0
- package/skills/areca-quickstart/references/recipes.md +243 -0
- package/skills/areca-sdk/SKILL.md +15 -10
- package/skills/areca-sdk/references/api.md +17 -9
- package/skills/areca-sdk/references/languages.md +177 -0
- package/skills/areca-sdk/references/production.md +1 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Connect the CMS
|
|
2
|
+
|
|
3
|
+
This file covers four things: the MCP connection, creating the site in the CMS, tokens, and demo mode. Use the `areca-mcp` skill for the full connection list and the tool reference.
|
|
4
|
+
|
|
5
|
+
## The connector URL
|
|
6
|
+
|
|
7
|
+
Every site has its own MCP endpoint:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
<cms-url>/api/mcp/<site-slug>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For example `https://cms.example.com/api/mcp/acme-site`. The site's **Connect AI** page in the CMS shows the exact URL. Use that page when you are unsure. The server name in the app is `areca-<site-slug>`.
|
|
14
|
+
|
|
15
|
+
The URL contains no secret. It is safe to commit in a project MCP file.
|
|
16
|
+
|
|
17
|
+
## Sign-in options
|
|
18
|
+
|
|
19
|
+
- **OAuth (preferred):** add only the URL. On first use, the app opens a browser. The user signs in to Areca, picks what the AI may do, and approves. No key is stored in a file.
|
|
20
|
+
- **Personal key:** the user creates it in the CMS under Connect AI › Advanced: personal keys › Create AI key. It is shown once. It starts with `areca_mcp_`. Use it only when the app cannot do OAuth. The user adds it to `.env.local` or to the app's own secret store. Never paste it into chat.
|
|
21
|
+
|
|
22
|
+
## Connect a coding agent
|
|
23
|
+
|
|
24
|
+
| App | Command or file |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| Claude Code | `claude mcp add --transport http areca-<slug> <url>`, then run `/mcp` and choose Authenticate. |
|
|
27
|
+
| Claude Code (project file) | `.mcp.json`: `{"mcpServers":{"areca-<slug>":{"type":"http","url":"<url>"}}}` |
|
|
28
|
+
| Cursor | `.cursor/mcp.json`: `{"mcpServers":{"areca-<slug>":{"url":"<url>"}}}` |
|
|
29
|
+
| VS Code / GitHub Copilot | `.vscode/mcp.json`: `{"servers":{"areca-<slug>":{"type":"http","url":"<url>"}}}` |
|
|
30
|
+
| Codex | `.codex/config.toml` with `[mcp_servers.areca-<slug>]` and `url = "<url>"`, then `codex mcp login areca-<slug>` |
|
|
31
|
+
| Other apps | The app's remote or HTTP MCP server setting, with the URL. The Connect AI page has the steps for each app. |
|
|
32
|
+
|
|
33
|
+
Rules for file-based config:
|
|
34
|
+
|
|
35
|
+
- Merge into the existing file. Keep the other servers.
|
|
36
|
+
- Do not replace a file the user already has without asking.
|
|
37
|
+
- Commit only the URL-based config. Never commit a key.
|
|
38
|
+
|
|
39
|
+
## Install the Areca skills too (optional)
|
|
40
|
+
|
|
41
|
+
This command writes the Areca skills and the connector into the coding agents the user picks:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx @areca-cms/skills add --mcp-url <url>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
It asks which agents to use. With `-y` it also needs `--agent`. Offer it only if the user wants the skills in the same step.
|
|
48
|
+
|
|
49
|
+
## Check the role
|
|
50
|
+
|
|
51
|
+
Call `get_site_info`. Read `you.role` and `cannotDo`.
|
|
52
|
+
|
|
53
|
+
| Role | What you can do |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| Editor | Read, create and edit drafts. |
|
|
56
|
+
| Owner | Also mark ready, archive and delete. |
|
|
57
|
+
| Owner with "Allow going live" | Also go live and schedule. |
|
|
58
|
+
| Agency admin | Also change the schema (`upsert_collection`, `upsert_global`) and languages (`set_site_languages`). Also change the publishing mode. |
|
|
59
|
+
|
|
60
|
+
- Schema changes need an agency admin. If the user is not one, use code-first.
|
|
61
|
+
- Going live needs "Allow going live" on the connection, or an owner who presses Go live in the CMS.
|
|
62
|
+
- Agency admins need two-factor authentication on. A `403 mfa_required` means it is not on. The user must turn it on in the account settings.
|
|
63
|
+
|
|
64
|
+
## Reload after connecting
|
|
65
|
+
|
|
66
|
+
After the connector is added, the agent session may not see the tools yet.
|
|
67
|
+
|
|
68
|
+
- In Claude Code, run `/mcp` and choose Authenticate, then check that the server is connected.
|
|
69
|
+
- In other apps, reload the window or restart the session.
|
|
70
|
+
- Then call `get_site_info` again. If the tools still do not appear, check the URL and the sign-in, and read the troubleshooting table below.
|
|
71
|
+
|
|
72
|
+
## Create the site in the CMS
|
|
73
|
+
|
|
74
|
+
Creating a site and its tokens happens in the CMS, by a person with agency access. The agent cannot do it over MCP. Walk the user through these steps. Do not guess a key or a token.
|
|
75
|
+
|
|
76
|
+
1. In the CMS, open **Agency**. Create the client if it does not exist: **New client**, a name, and the suggested slug.
|
|
77
|
+
2. Open the client. On the **Sites** tab, select **New site**.
|
|
78
|
+
3. Enter the **Site name**. Keep the suggested **Site key**. It must match `siteKey` in `areca.config.ts`. Write it down.
|
|
79
|
+
4. Enter the **Production URL**. It is required. Use `http://localhost:<dev port>` for now (for example `http://localhost:3001`). It enables preview links.
|
|
80
|
+
5. Select **Create site**.
|
|
81
|
+
6. The next screen shows the site token. **It is shown once.** Copy it and store it in a password manager. Then select **I've saved it**.
|
|
82
|
+
7. The schema-write token is only needed for code-first. Get it in the site's **Settings › Developer**, under **Schema-write token**, with **Rotate schema token**. Copy it when it is shown, the same way.
|
|
83
|
+
|
|
84
|
+
If the user lost a token, rotate it in the site's **Settings › Developer** tab. Rotating a token stops the old one at once. Any build that still uses it fails until its `.env.local` is updated.
|
|
85
|
+
|
|
86
|
+
## Where each token goes
|
|
87
|
+
|
|
88
|
+
| Token | Where | Used by |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| Site token | `.env.local` as `ARECA_SITE_TOKEN=` | `areca init`, `areca pull`, `areca manifest pull`, the content reads |
|
|
91
|
+
| Schema-write token | `.env.local` as `ARECA_SCHEMA_TOKEN=` | `areca manifest push` only (code-first) |
|
|
92
|
+
| MCP personal key | `.env.local` as `ARECA_MCP_KEY=` (only if the app needs it) | the MCP client |
|
|
93
|
+
|
|
94
|
+
Rules:
|
|
95
|
+
|
|
96
|
+
- The user pastes tokens into `.env.local`, or runs `areca init` in their terminal, which asks for the token with hidden input.
|
|
97
|
+
- Check a value by its length. Never print it.
|
|
98
|
+
- Never put a token in a `VITE_`, `NEXT_PUBLIC_` or `PUBLIC_` variable.
|
|
99
|
+
- Keep `.env.local` out of Git. `areca init` adds it to `.gitignore`. Check it.
|
|
100
|
+
|
|
101
|
+
## Demo mode and production mode
|
|
102
|
+
|
|
103
|
+
Each site has a publishing mode. New sites start in production.
|
|
104
|
+
|
|
105
|
+
- **Demo** ("Demo — no production deployment"): going live creates a demo release. `areca pull` can fetch it. Visitors never see it. No server is needed. Use it for the first release.
|
|
106
|
+
- **Production**: going live builds and deploys the website. It needs a Dokploy deployment target, an application ID and a health check URL. See the `areca-sdk` skill, `references/production.md`.
|
|
107
|
+
|
|
108
|
+
Set the mode in the CMS under **Settings › Deployment › Mode**. An agency admin can also ask the agent to set it. Ask the user before you change the mode.
|
|
109
|
+
|
|
110
|
+
- A site that has ever gone live in production cannot switch to demo. Change the mode in Settings › Deployment instead, or use another site for the demo.
|
|
111
|
+
|
|
112
|
+
## Troubleshooting the connection
|
|
113
|
+
|
|
114
|
+
| Symptom | What to do |
|
|
115
|
+
| --- | --- |
|
|
116
|
+
| 401, "Sign in to connect" | Run the app's sign-in step (for example `/mcp` in Claude Code, or `codex mcp login`). |
|
|
117
|
+
| 401, "Key is for a different site" | Use the connector URL of the key's site. |
|
|
118
|
+
| 401, "This app is no longer connected" | The user removed it in Connect AI. Add the connector again. |
|
|
119
|
+
| 403, `mfa_required` | An agency admin must turn on two-factor authentication. |
|
|
120
|
+
| 404, "Site not found" | The site slug in the URL is wrong. Check it on the Connect AI page. |
|
|
121
|
+
| Schema tools missing | The role is not agency admin. Use code-first. |
|
|
122
|
+
| Go-live tools missing | Reconnect with "Allow going live" ticked (owners only), or ask an owner to press Go live. |
|
|
123
|
+
| `429` | Wait for the `Retry-After` time. The limit is 120 requests per minute per credential. |
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# First release
|
|
2
|
+
|
|
3
|
+
The first release gives the project something to pull. `areca pull` fails with "No publication exists" until a release is live, and `areca.gen.ts` is only written by a successful pull. So the release comes before the first build check.
|
|
4
|
+
|
|
5
|
+
Plan:
|
|
6
|
+
|
|
7
|
+
1. Check the publishing mode.
|
|
8
|
+
2. Create sample entries.
|
|
9
|
+
3. Fill the sections.
|
|
10
|
+
4. Mark everything ready.
|
|
11
|
+
5. Ask, then go live.
|
|
12
|
+
6. Wait for the build to finish.
|
|
13
|
+
7. Pull.
|
|
14
|
+
8. Verify.
|
|
15
|
+
9. Decide what to do with the samples.
|
|
16
|
+
|
|
17
|
+
Steps 2 to 6 use MCP tools. Without MCP, see [Code-first](#code-first-without-mcp).
|
|
18
|
+
|
|
19
|
+
## 1. Check the publishing mode
|
|
20
|
+
|
|
21
|
+
Call `get_site_info`. Read `site.publishingMode` and `site.deploymentConfigured`. To learn whether the site was ever live, call `list_publications`: any publication with status `live`, or with `publishingMode: "production"` and a `deployedAt` date, means it has gone live.
|
|
22
|
+
|
|
23
|
+
Older CMS versions do not report `deploymentConfigured` and do not list `set_publishing_mode`. Then treat the deployment as not configured, and ask the user to change the mode in the UI (below).
|
|
24
|
+
|
|
25
|
+
- **Demo:** continue.
|
|
26
|
+
- **Production, never live:** explain the choice. Demo means the release is pulled by `areca pull` and never shown to visitors. Production means the site builds and deploys. For the first release, use demo.
|
|
27
|
+
- Agency admin, and `set_publishing_mode` is in your tool list: ask the user for a yes, then call it with `mode: "demo"`.
|
|
28
|
+
- Anyone else: ask the user to change it in **Settings › Deployment › Mode** (Demo, no production deployment), then wait.
|
|
29
|
+
- **Production, already live:** stop. Do not go live. A live production site must not get sample content. Ask the user whether to use a separate demo site. Read [connect.md](connect.md) for demo mode.
|
|
30
|
+
|
|
31
|
+
## 2. Create sample entries
|
|
32
|
+
|
|
33
|
+
Get the schema for each collection before you write (`get_collection_schema`). Create in dependency order: referenced entries first. For example, authors before posts, departments before vacancies.
|
|
34
|
+
|
|
35
|
+
For each collection:
|
|
36
|
+
|
|
37
|
+
- The title starts with `[Sample]`, for example `[Sample] Our first post`. If the collection has no title field, put the prefix on its main text field instead (for example the `name` of categories).
|
|
38
|
+
- Pass the slug inside `fields`, as the `example` in `get_collection_schema` does: `fields: { slug: "sample-our-first-post", ... }`. It is lowercase with dashes.
|
|
39
|
+
- Fill every required field with realistic content. Keep it short, but complete.
|
|
40
|
+
- Use the company name and details from the interview where they fit.
|
|
41
|
+
- Fill the full SEO object. Follow the rules in the `areca-mcp` skill (title 50 to 60 characters, description 140 to 160, focus keyphrase, a 2 to 3 sentence summary, 3 to 5 key takeaways, FAQ only when the body answers questions).
|
|
42
|
+
- Images: do not guess image links. Use an image only when the user gives you a direct link, through `upload_asset_from_url` with alt text. Otherwise leave image fields empty.
|
|
43
|
+
- Rich text is Markdown, not HTML.
|
|
44
|
+
|
|
45
|
+
On a multilingual site:
|
|
46
|
+
|
|
47
|
+
- Write the main language with `create_entry` (no `locale`).
|
|
48
|
+
- Write each other language with one `update_entry` per language, with `locale` set. Fill the required fields in every required language.
|
|
49
|
+
- Check `translations` with `get_entry` before you mark it ready.
|
|
50
|
+
|
|
51
|
+
Then check the result with `list_entries` (status `draft`) and `get_entry` for one sample.
|
|
52
|
+
|
|
53
|
+
## 3. Fill the sections
|
|
54
|
+
|
|
55
|
+
For each section in the plan:
|
|
56
|
+
|
|
57
|
+
1. `get_global` with the section key. Note the `id` and the `fields`.
|
|
58
|
+
2. `update_global` with every required field. Use the company details from the interview for `companyInfo`. For other copy, write short placeholder text, and say so to the user.
|
|
59
|
+
3. For `seo: true` sections, fill `seo` with the same rules as entries.
|
|
60
|
+
4. If the section needs a page preview, check that `previewPath` is set.
|
|
61
|
+
|
|
62
|
+
## 4. Mark everything ready
|
|
63
|
+
|
|
64
|
+
`mark_ready` approves each entry and section for the next release. It does not change the live site yet. It needs an owner or an agency admin.
|
|
65
|
+
|
|
66
|
+
Mark ready every sample entry and every section that has its required fields. Report any refusal. A refusal that names languages means a language is still missing: fill it, then try again.
|
|
67
|
+
|
|
68
|
+
## 5. Ask, then go live
|
|
69
|
+
|
|
70
|
+
Before you call `go_live`, ask the user:
|
|
71
|
+
|
|
72
|
+
> "Go live now in demo mode? This publishes N entries and M sections to the demo release. Visitors do not see it. Shall I continue?"
|
|
73
|
+
|
|
74
|
+
Only continue on a clear yes. `go_live` needs "Allow going live" on the connection, or an owner or agency admin. If the connection lacks it, ask the user to press **Go live** in the CMS, and wait for them.
|
|
75
|
+
|
|
76
|
+
When you have the yes, call `go_live` with a short note, for example "Quickstart first release". It returns `publicationId` and `jobId`.
|
|
77
|
+
|
|
78
|
+
## 6. Wait for the build
|
|
79
|
+
|
|
80
|
+
Poll `get_build_job` with the `jobId`. Wait about 10 seconds between calls.
|
|
81
|
+
|
|
82
|
+
- Active statuses: `queued`, `building`, `validating`, `deploying`. Keep polling.
|
|
83
|
+
- Final statuses: `succeeded`, `failed`, `cancelled`. Stop.
|
|
84
|
+
|
|
85
|
+
Stop after about 5 minutes. Then ask the user to look at the release in the CMS.
|
|
86
|
+
|
|
87
|
+
On `failed`, read `error` and show it to the user. Common causes are a required section that is not ready, or a schema problem. Fix the cause with the user's yes, then start again from step 4.
|
|
88
|
+
|
|
89
|
+
Also call `get_release_status` once at the end. Check that `pendingChanges` is empty.
|
|
90
|
+
|
|
91
|
+
## 7. Pull
|
|
92
|
+
|
|
93
|
+
Run the pull directly. The schema is already in `areca.config.ts` from step 4b, so there is no need for `manifest pull` here:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
<pm> exec areca pull --out src/generated/content
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Expect output like:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
Pulled publication <id> (<hash>): posts=3, authors=2, ...
|
|
103
|
+
Types: src/generated/content/areca.gen.ts
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- The `Types:` line means `areca.gen.ts` now exists. Tell the user to commit it.
|
|
107
|
+
- A `Warning:` line about an older publication means it was built before the schema was embedded. Ask the user to go live again.
|
|
108
|
+
- Without a terminal, `manifest pull` stops only when the pull would remove something: a collection, section, field, language, or the main language. It names the removal and asks for `--yes`. Then tell the user the removal you expect (from the plan), and ask for a yes. Use `--yes` only after that yes. Or ask the user to run `<pm> exec areca manifest pull` in their terminal, where it prints the diff and asks. Additions and changes apply without a question.
|
|
109
|
+
- A config without the header (see step 8.0) stops once even when nothing is removed. This is the one-time upgrade. Use `--yes` only after the user says yes.
|
|
110
|
+
|
|
111
|
+
## 8. Verify
|
|
112
|
+
|
|
113
|
+
Run these checks in order. Stop at the first failure and report it.
|
|
114
|
+
|
|
115
|
+
0. The one-command flow. Run `<pm> run content:sync </dev/null` once. It runs `areca manifest pull`, then `areca pull`. Expect `./areca.config.ts is already up to date` and then the pull output. Without a terminal, the manifest pull never waits for a key. If something would be removed, it stops with an error that names the removal. Then show the user the `-` lines of the diff and ask before you add `--yes`.
|
|
116
|
+
- A config written by `areca manifest pull` has the header ``// Generated by `areca manifest pull`.``. Only removals ask for a yes.
|
|
117
|
+
- A config from an older SDK has no header. The first run stops once with `already defines N collection(s). Re-run with --yes to overwrite it.`. Ask the user for a yes, then run `<pm> exec areca manifest pull --yes` once. After that the file has the header.
|
|
118
|
+
|
|
119
|
+
1. Typecheck. The first time, this is after the pull: `areca.gen.ts` is written by the pull. For TanStack, generate the route tree first (`<pm> run generate-routes`, or `<pm> exec tsr generate`). Then use the project's script, or `<pm> exec tsc --noEmit`. Expect no errors in the new files.
|
|
120
|
+
2. Build. `<pm> run build`. Expect success. If the build reads content, it must find the pulled files.
|
|
121
|
+
3. Dev server. Start it with `<pm> run dev` in the background. Use the port from step 0.
|
|
122
|
+
4. Pages. For each list route (for example `/blog` and `/vacancies`, and their Dutch versions `/nl/blog` and `/nl/vacatures`), check that it returns `200`. For each sample entry, request its page and check the status:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:<port>/blog/sample-our-first-post
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Expect `200`. Check that the sample title appears in the HTML:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
curl -s http://localhost:<port>/blog/sample-our-first-post | grep -c "Our first post"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Do this for one page of each list and each detail route. Use the real route from the plan.
|
|
135
|
+
5. Home and about pages: `200`, and the hero or heading text from the sections.
|
|
136
|
+
6. Health route (only if it was added): `curl -s http://localhost:<port>/api/health` should show `"ok":true` and a `publicationId`.
|
|
137
|
+
7. Preview (only if it was added): open the URL that `get_preview_url` returns for a sample entry. It needs the production URL in the CMS to be the local dev URL. Expect the page to show a draft banner or the draft text.
|
|
138
|
+
8. Stop the dev server when you are done, unless the user wants it running.
|
|
139
|
+
|
|
140
|
+
Report the results in a short list: what passed, what did not, and the URLs you checked.
|
|
141
|
+
|
|
142
|
+
## 9. The samples
|
|
143
|
+
|
|
144
|
+
Ask the user:
|
|
145
|
+
|
|
146
|
+
> "Keep the sample entries as examples for your editors, or archive them?"
|
|
147
|
+
|
|
148
|
+
- **Keep:** leave them. Tell the user to edit or delete them in the CMS when the real content is ready.
|
|
149
|
+
- **Archive:** call `archive_entry` only after a yes. It needs an owner. Archived entries leave the live site at the next go live.
|
|
150
|
+
- Do not delete anything. Delete is not part of this skill.
|
|
151
|
+
|
|
152
|
+
## Code-first (without MCP)
|
|
153
|
+
|
|
154
|
+
Without MCP, the agent cannot create entries or mark them ready. The user does that in the CMS:
|
|
155
|
+
|
|
156
|
+
1. Ask the user to open the site in the CMS and create one sample entry per collection (the title, or the main text field, starts with `[Sample]`).
|
|
157
|
+
2. Ask the user to fill in the required sections (site content) in the CMS.
|
|
158
|
+
3. Ask the user to mark the entries ready, and then to go live in demo mode from the **Go-live panel**.
|
|
159
|
+
4. When the user says it is done, run `<pm> run content:pull`, then do the checks in step 8.
|
|
160
|
+
|
|
161
|
+
If the schema was written in code, `areca pull` works after the release.
|
|
162
|
+
|
|
163
|
+
## Troubleshooting
|
|
164
|
+
|
|
165
|
+
| Symptom | Cause and fix |
|
|
166
|
+
| --- | --- |
|
|
167
|
+
| `No publication exists for this site. Publish content in the CMS before running areca pull.` | No release is live. Finish steps 4 to 6, then pull. |
|
|
168
|
+
| `401` on pull, manifest pull or push | The token is wrong, rotated, or the wrong kind. The pull and the manifest pull use the site token. The push needs the schema token. Check the length with the step 0 check. Rotate in **Settings › Developer** if needed, then update `.env.local`. Restart the dev server after a change, because env files load at start. |
|
|
169
|
+
| `403` with `mfa_required` | The agency admin must turn on two-factor authentication. Schema and language tools are blocked until then. |
|
|
170
|
+
| Go live is refused because a required section is not ready | Fill the required fields with `update_global`, then `mark_ready` the section. |
|
|
171
|
+
| `Removing <key.field> deletes content` or `FieldDropsRequiredError` | Nothing was pushed. Show the list to the user. Only confirm with their explicit yes, using `--confirm-drop <key.field>`. |
|
|
172
|
+
| `Publication does not match its schema` | An entry breaks the schema. The message names the entry and field. Fix the entry, go live again, then pull. Nothing was written. |
|
|
173
|
+
| `No content file for collection "<key>"` | Run the pull. Check the key: a `blog-posts` key is read as `blogPosts` in code. |
|
|
174
|
+
| `Expected publication X, received Y` | `ARECA_SNAPSHOT_ID` is set in the environment. Unset it for local work. It is for pinned builds only. |
|
|
175
|
+
| `Failed to load TypeScript config … Use Node.js 22.18 or newer, or retry with tsx` | Upgrade Node, or run the command through `tsx`: `<pm> exec tsx ./node_modules/@areca-cms/site-sdk/dist/cli.js pull`. |
|
|
176
|
+
| Build fails with a missing module under `src/paraglide` | The Paraglide compile did not run before the pull. Run the compile first, as in [frameworks.md](frameworks.md). |
|
|
177
|
+
| `areca manifest pull` says "Remove … Re-run with --yes to confirm" | The pull would remove a collection, section, field, or language. It is not a terminal, so it cannot ask. Show the user the diff (run it in their terminal), then confirm. Use `--yes` only after the yes. |
|
|
178
|
+
| `areca manifest pull` says it "already defines N collection(s). Re-run with --yes" | The config was not written by `manifest pull` (no header) and it has collections. N counts the site content sections too. Show the user the diff, then confirm as above. After the one-time `--yes`, the header is there and only removals ask. |
|
|
179
|
+
| Preview link shows "expired" or "invalid" | Preview links last about an hour. Create a new link with `get_preview_url`. |
|
|
180
|
+
| `Something went wrong on the Areca server (ref …)` | Nothing is confirmed saved. Retry once, then report the ref to the user. |
|
|
181
|
+
| Pages show no content after the pull | The dev server started before the pull. Restart it. Check that `src/generated/content/manifest.json` has a `publicationId`. |
|