From ff6bcd6d3a7aebd953cb3d1c33ff4e93ceccb086 Mon Sep 17 00:00:00 2001 From: vincentism Date: Fri, 7 Aug 2026 11:57:28 +0800 Subject: [PATCH 01/15] feat: modify to support backend --- CLAUDE.md | 1 + SKILL.md | 18 ++ codex/makers-env-adaption.md | 29 ++- codex/makers-recipes.md | 51 ++++++ codex/makers-storage.md | 12 +- cursor/rules/makers-env-adaption.mdc | 29 ++- cursor/rules/makers-recipes.mdc | 51 ++++++ cursor/rules/makers-storage.mdc | 12 +- skills/makers-env-adaption/SKILL.md | 29 ++- skills/makers-recipes/SKILL.md | 51 ++++++ .../references/youth-site-scenarios.md | 89 +++++++++ skills/makers-storage/SKILL.md | 12 +- skills/makers-storage/references/blob.md | 169 ++++++++++++++++-- 13 files changed, 497 insertions(+), 56 deletions(-) create mode 100644 skills/makers-recipes/references/youth-site-scenarios.md diff --git a/CLAUDE.md b/CLAUDE.md index aa2e78a..3c887b4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,6 +10,7 @@ When you need EdgeOne Makers platform development guidance, read the matching Sk | Edge Functions (V8 lightweight functions) | skills/makers-edge-functions/SKILL.md | | Cloud Functions (Node.js / Go / Python APIs) | skills/makers-cloud-functions/SKILL.md | | KV + Blob Storage | skills/makers-storage/SKILL.md | +| Persist dynamic data for a site (messages, uploads, votes, save-state) — **no database; use Blob** | skills/makers-storage/SKILL.md | | Middleware (auth, rewrites, routing) | skills/makers-middleware/SKILL.md | | CLI command reference | skills/makers-cli/SKILL.md | | Project structure / scaffolding | skills/makers-recipes/SKILL.md | diff --git a/SKILL.md b/SKILL.md index a4ca7f5..f476396 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,3 +1,20 @@ +--- +name: edgeone-makers-tools +description: >- + EdgeOne Makers platform development router — the single entry point for building, + storing data, and deploying on Tencent EdgeOne Makers. Trigger whenever the user + develops, scaffolds, or deploys anything on EdgeOne Makers / EdgeOne Pages: AI agents + (DeepAgents, LangGraph, CrewAI, OpenAI/Claude SDK), Cloud Functions (Node/Go/Python), + Edge Functions (V8), KV + Blob storage, middleware, CLI usage, project scaffolding, + and — importantly — persisting dynamic site data (messages, uploads, votes, save-state) + where there is NO managed database, so Blob is used as the backend. Also trigger on + "deploy to EdgeOne", "上线", "发布", "部署到 EdgeOne". This SKILL is a routing table; + read only the sub-skill relevant to the current task, never all of them at once. +metadata: + author: edgeone + version: "1.0.4" +--- + # EdgeOne Makers Skills When you need EdgeOne Makers platform development guidance, read the matching Skill based on the task: @@ -9,6 +26,7 @@ When you need EdgeOne Makers platform development guidance, read the matching Sk | Edge Functions (V8 lightweight functions) | skills/makers-edge-functions/SKILL.md | | Cloud Functions (Node.js / Go / Python APIs) | skills/makers-cloud-functions/SKILL.md | | KV + Blob Storage | skills/makers-storage/SKILL.md | +| Persist dynamic data for a site (messages, uploads, votes, save-state) — **no database; use Blob** | skills/makers-storage/SKILL.md | | Middleware (auth, rewrites, routing) | skills/makers-middleware/SKILL.md | | CLI command reference | skills/makers-cli/SKILL.md | | Project structure / scaffolding | skills/makers-recipes/SKILL.md | diff --git a/codex/makers-env-adaption.md b/codex/makers-env-adaption.md index 4c6fcc3..67e9ef2 100644 --- a/codex/makers-env-adaption.md +++ b/codex/makers-env-adaption.md @@ -10,7 +10,7 @@ description: >- NEVER python -m http.server / npx serve), dev server requirements. metadata: author: edgeone - version: "1.1.0" + version: "1.1.1" --- # Runtime Environment Adaptation Guide @@ -38,7 +38,8 @@ preview │ ┌─ dev server running? ─ Yes ── | Preview local dev server | `present_files("http://127.0.0.1:8088/")` | ❌ Passing `/path/to/index.html` (IDE opens it via file://) | | Preview a deployed project | `present_files(deploy_url)` with `?eo_token=...` | ❌ Passing a local `dist/index.html` path | | Start dev server | `edgeone makers dev --name

--skip-env-sync` | ❌ `python -m http.server` / `npx serve` | -| Verify dev server is up | `present_files(http://...)` or the user's system terminal | ❌ Bash `curl localhost` (sandbox network isolation) | +| Verify dev server is up (agent-side API check) | `curl --noproxy '*' http://127.0.0.1:8088/api/...` ✅ works (same sandbox) | ❌ `curl localhost:8088` / plain `curl` (proxy + IPv6 → 404/000) | +| Verify dev server is up (user-facing) | `present_files(http://127.0.0.1:8088/)` (platform tunnel) | ❌ Telling user to open `127.0.0.1:8088` — their browser can't reach the sandbox | **Core iron rule**: inside a Makers project, **any HTML / URL preview MUST go through the HTTP protocol**. `file://` looks convenient, but fetch / SSE / Blob / KV all break under it. @@ -104,17 +105,19 @@ edgeone whoami # exit 0 = logged in, exit 1 = not logged in (does not hang) --- -### 3. Network isolation +### 3. Network isolation (dev server reachability from Bash) -**The Bash tool's network is isolated from the host** — inside WorkBuddy's Bash, `curl localhost:` cannot reach the host's dev server. +The Bash tool and `edgeone makers dev` run **in the same sandbox (same machine)**, so the loopback dev server IS reachable from Bash. The earlier claim that "Bash curl is isolated and returns 404" is wrong — the failures are caused by the **proxy** (§5) and the **IPv6 localhost** (§4), not by network isolation. | Verification method | Availability | Notes | |---------|--------|------| -| Built-in browser preview (`present_files`) | ✅ Available | Uses the host network, reliable | +| Built-in browser preview (`present_files`) | ✅ Available | Uses the platform tunnel; the ONLY way the **user's** browser can see the sandbox dev server | | User's system terminal | ✅ Available | `curl http://127.0.0.1:8088/` | -| Bash tool curl | ❌ Unavailable | Routed inside the sandbox, returns 404 | +| Bash tool curl (agent-side API checks) | ✅ Available **only with `--noproxy '*'` + `127.0.0.1`** | Plain `curl localhost:8088` fails: (a) `localhost`→`::1` (§4), (b) proxy hijacks the request (§5) | -**Do NOT** use Bash curl to judge whether the dev server started successfully. Use `present_files` or verify by deploying. +**Practical rule**: +- Use `curl --noproxy '*' http://127.0.0.1:8088/...` from Bash to **agent-side verify** API endpoints during testing — this works (it was used to validate a full create→upload→like flow). +- Do NOT rely on Bash curl to show the page to the user. The user's browser cannot reach `127.0.0.1:8088` inside the sandbox; for a user-facing preview, pass the dev URL to `present_files` (platform tunnel) or deploy and share the live URL. --- @@ -172,7 +175,15 @@ A `setLocalData EPERM` does not affect the running service; it only affects the |------|---------|------| | `npm install` | **Foreground sync** | Usually 10-30s; running it in the background would leave later commands missing dependencies | | `edgeone makers dev` | **Background async** (`run_in_background`) | Long-running process, must not block the conversation | -| `edgeone makers deploy` | **Foreground sync** | 1-3 minutes; the result is the core deliverable and must be shown immediately | +| `edgeone makers deploy` | **Background async** (`run_in_background`) | Cold deploys (build → upload → Process → live) routinely take **2–10+ minutes**. The foreground wall-clock budget (~100s) SIGKILLs the CLI mid-deploy (exit 137) even while it keeps printing progress — you lose the final URL line. Run it in the background and wait for the completion notification. | + +#### 7.2 Deploy in background — why, and what the kill really means + +- **Foreground kill = wall-clock budget, not a hang.** A foreground Bash command in this sandbox has a fixed ~100s wall-clock budget; at the limit the whole process tree gets SIGKILL (`exit 137 = 128 + 9`), regardless of whether it keeps printing. During a deploy the CLI prints `Deployment in progress... elapsed: ~XXs` every ~10s — those heartbeat lines do NOT reset or extend the budget. So "still printing → killed at ~100s" is expected, not a stall. +- **Killing the CLI does NOT usually fail the deploy.** The deployment itself runs server-side. A foreground CLI killed at `Created deployment` / `Process` has very likely continued on the server and gone live (confirmed in practice: a deploy killed at ~100s was later verified live, took ~674s end-to-end). Re-running `deploy` (same `-n `) reuses the project and returns the URL. +- **Always use `run_in_background: true` for deploy** so the CLI survives past the foreground budget and emits the final `--json` line with the live URL. Do not poll the task across turns — rely on the `` completion event. (Cross-turn `TaskOutput` may report the handle as "not found"; the process still finished.) +- **`--json` still prints progress heartbeats** to stdout/stderr, not a single clean JSON line. Parse the **last** line for the result object; treat the progress lines as noise. (This is a CLI cleanliness issue, unrelated to the kill behavior — do not assume "no output = process ended"; the sandbox judges liveness by OS process state, not by stdout bytes.) +- **Clean up background processes** after use: a `edgeone makers dev` left running keeps holding port 8088 and may collide with the next dev/deploy. Stop it with `TaskStop` or kill it when the session moves on. ### 7.1 Preview & Dev Server full flow (MUST use HTTP, file:// forbidden) @@ -185,7 +196,7 @@ After finishing development, **start the dev server and preview directly** — d 3. **Pass `http://127.0.0.1:8088/` to `present_files`** (note it is `127.0.0.1`, **not** `localhost` — see §4) 4. Tell the user: "The project's local preview is running, please check it out. If everything looks good, I can deploy it live for you directly." -Only after the user confirms, run `edgeone makers deploy -n --json` (**foreground sync**, see §7). +Only after the user confirms, run `edgeone makers deploy -n --json` (**background async**, see §7 and §7.2 — it exceeds the foreground wall-clock budget). #### ⛔ file:// preview is strictly forbidden diff --git a/codex/makers-recipes.md b/codex/makers-recipes.md index 25da228..02b1006 100644 --- a/codex/makers-recipes.md +++ b/codex/makers-recipes.md @@ -14,6 +14,8 @@ metadata: > ⚠️ **`.env.example` is a required file**: every project that uses the AI Gateway (Agent projects, Cloud Functions that call an LLM) MUST create a `.env.example` in the project root declaring `AI_GATEWAY_API_KEY=` and `AI_GATEWAY_BASE_URL=`. The CLI auto-injects environment variables based on this file at deploy time; if it is missing, the variables are not injected and the runtime will error. +> 📝 **Write HTML last**: writing an `index.html` instantly triggers the IDE live preview. If its `style.css` / `script.js` don't exist yet, the user sees an unstyled, broken skeleton. So write CSS and JS **first**, then write `index.html` **last** — that way the very first preview is the finished page. Also write each `index.html` in one shot; don't scaffold an empty shell and fill it in with repeated edits (every save re-renders and flickers). For a tiny single-page tool, just inline the CSS and JS into one `index.html` — one file, no intermediate state. + Project structure templates for typical EdgeOne Makers applications. ## Full-stack app — Node.js (static + API) @@ -36,6 +38,55 @@ const res = await fetch('/api/users'); const users = await res.json(); ``` +> 💾 **Where does the data live?** This platform has **no database**. The API skeletons above return empty data — to actually persist records, uploads, votes, or per-user state, back them with **Blob**. See the recipe below and [makers-storage → Blob as your backend](../makers-storage/references/blob.md). + +## Dynamic site with Blob persistence (guestbook / gallery / voting / save-state) + +The default shape for any generated site that needs a real backend but no relational data. Frontend → Cloud Function → Blob. No DB, no console setup. + +``` +my-app/ +├── index.html # Frontend (form + list) +├── script.js +├── cloud-functions/ +│ └── api/ +│ └── messages.js # GET lists entries, POST appends one +├── package.json # depends on @edgeone/pages-blob +``` + +**cloud-functions/api/messages.js** — one file per record (Pattern 1): +```javascript +import { getStore } from "@edgeone/pages-blob"; + +export async function onRequest({ request }) { + const store = getStore("guestbook"); + + if (request.method === "POST") { + const { name, text } = await request.json(); + const id = `${Date.now()}-${Math.round(Math.random() * 1e6)}`; + await store.setJSON(`entries/${id}.json`, { id, name, text, ts: Date.now() }); + return Response.json({ ok: true, id }); + } + + const { blobs } = await store.list({ prefix: "entries/" }); + const items = await Promise.all(blobs.map((b) => store.get(b.key, { type: "json" }))); + items.sort((a, b) => b.ts - a.ts); + return Response.json({ items }); +} +``` + +**index.html** frontend calls it like any API: +```javascript +await fetch('/api/messages', { // post + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name, text }), +}); +const { items } = await fetch('/api/messages').then((r) => r.json()); // list +``` + +Swap the key scheme for other shapes: `users/.json` for save-state, `counts/

--skip-env-sync` | ❌ `python -m http.server` / `npx serve` | -| Verify dev server is up | `present_files(http://...)` or the user's system terminal | ❌ Bash `curl localhost` (sandbox network isolation) | +| Verify dev server is up (agent-side API check) | `curl --noproxy '*' http://127.0.0.1:8088/api/...` ✅ works (same sandbox) | ❌ `curl localhost:8088` / plain `curl` (proxy + IPv6 → 404/000) | +| Verify dev server is up (user-facing) | `present_files(http://127.0.0.1:8088/)` (platform tunnel) | ❌ Telling user to open `127.0.0.1:8088` — their browser can't reach the sandbox | **Core iron rule**: inside a Makers project, **any HTML / URL preview MUST go through the HTTP protocol**. `file://` looks convenient, but fetch / SSE / Blob / KV all break under it. @@ -104,17 +105,19 @@ edgeone whoami # exit 0 = logged in, exit 1 = not logged in (does not hang) --- -### 3. Network isolation +### 3. Network isolation (dev server reachability from Bash) -**The Bash tool's network is isolated from the host** — inside WorkBuddy's Bash, `curl localhost:` cannot reach the host's dev server. +The Bash tool and `edgeone makers dev` run **in the same sandbox (same machine)**, so the loopback dev server IS reachable from Bash. The earlier claim that "Bash curl is isolated and returns 404" is wrong — the failures are caused by the **proxy** (§5) and the **IPv6 localhost** (§4), not by network isolation. | Verification method | Availability | Notes | |---------|--------|------| -| Built-in browser preview (`present_files`) | ✅ Available | Uses the host network, reliable | +| Built-in browser preview (`present_files`) | ✅ Available | Uses the platform tunnel; the ONLY way the **user's** browser can see the sandbox dev server | | User's system terminal | ✅ Available | `curl http://127.0.0.1:8088/` | -| Bash tool curl | ❌ Unavailable | Routed inside the sandbox, returns 404 | +| Bash tool curl (agent-side API checks) | ✅ Available **only with `--noproxy '*'` + `127.0.0.1`** | Plain `curl localhost:8088` fails: (a) `localhost`→`::1` (§4), (b) proxy hijacks the request (§5) | -**Do NOT** use Bash curl to judge whether the dev server started successfully. Use `present_files` or verify by deploying. +**Practical rule**: +- Use `curl --noproxy '*' http://127.0.0.1:8088/...` from Bash to **agent-side verify** API endpoints during testing — this works (it was used to validate a full create→upload→like flow). +- Do NOT rely on Bash curl to show the page to the user. The user's browser cannot reach `127.0.0.1:8088` inside the sandbox; for a user-facing preview, pass the dev URL to `present_files` (platform tunnel) or deploy and share the live URL. --- @@ -172,7 +175,15 @@ A `setLocalData EPERM` does not affect the running service; it only affects the |------|---------|------| | `npm install` | **Foreground sync** | Usually 10-30s; running it in the background would leave later commands missing dependencies | | `edgeone makers dev` | **Background async** (`run_in_background`) | Long-running process, must not block the conversation | -| `edgeone makers deploy` | **Foreground sync** | 1-3 minutes; the result is the core deliverable and must be shown immediately | +| `edgeone makers deploy` | **Background async** (`run_in_background`) | Cold deploys (build → upload → Process → live) routinely take **2–10+ minutes**. The foreground wall-clock budget (~100s) SIGKILLs the CLI mid-deploy (exit 137) even while it keeps printing progress — you lose the final URL line. Run it in the background and wait for the completion notification. | + +#### 7.2 Deploy in background — why, and what the kill really means + +- **Foreground kill = wall-clock budget, not a hang.** A foreground Bash command in this sandbox has a fixed ~100s wall-clock budget; at the limit the whole process tree gets SIGKILL (`exit 137 = 128 + 9`), regardless of whether it keeps printing. During a deploy the CLI prints `Deployment in progress... elapsed: ~XXs` every ~10s — those heartbeat lines do NOT reset or extend the budget. So "still printing → killed at ~100s" is expected, not a stall. +- **Killing the CLI does NOT usually fail the deploy.** The deployment itself runs server-side. A foreground CLI killed at `Created deployment` / `Process` has very likely continued on the server and gone live (confirmed in practice: a deploy killed at ~100s was later verified live, took ~674s end-to-end). Re-running `deploy` (same `-n `) reuses the project and returns the URL. +- **Always use `run_in_background: true` for deploy** so the CLI survives past the foreground budget and emits the final `--json` line with the live URL. Do not poll the task across turns — rely on the `` completion event. (Cross-turn `TaskOutput` may report the handle as "not found"; the process still finished.) +- **`--json` still prints progress heartbeats** to stdout/stderr, not a single clean JSON line. Parse the **last** line for the result object; treat the progress lines as noise. (This is a CLI cleanliness issue, unrelated to the kill behavior — do not assume "no output = process ended"; the sandbox judges liveness by OS process state, not by stdout bytes.) +- **Clean up background processes** after use: a `edgeone makers dev` left running keeps holding port 8088 and may collide with the next dev/deploy. Stop it with `TaskStop` or kill it when the session moves on. ### 7.1 Preview & Dev Server full flow (MUST use HTTP, file:// forbidden) @@ -185,7 +196,7 @@ After finishing development, **start the dev server and preview directly** — d 3. **Pass `http://127.0.0.1:8088/` to `present_files`** (note it is `127.0.0.1`, **not** `localhost` — see §4) 4. Tell the user: "The project's local preview is running, please check it out. If everything looks good, I can deploy it live for you directly." -Only after the user confirms, run `edgeone makers deploy -n --json` (**foreground sync**, see §7). +Only after the user confirms, run `edgeone makers deploy -n --json` (**background async**, see §7 and §7.2 — it exceeds the foreground wall-clock budget). #### ⛔ file:// preview is strictly forbidden diff --git a/cursor/rules/makers-recipes.mdc b/cursor/rules/makers-recipes.mdc index 25da228..02b1006 100644 --- a/cursor/rules/makers-recipes.mdc +++ b/cursor/rules/makers-recipes.mdc @@ -14,6 +14,8 @@ metadata: > ⚠️ **`.env.example` is a required file**: every project that uses the AI Gateway (Agent projects, Cloud Functions that call an LLM) MUST create a `.env.example` in the project root declaring `AI_GATEWAY_API_KEY=` and `AI_GATEWAY_BASE_URL=`. The CLI auto-injects environment variables based on this file at deploy time; if it is missing, the variables are not injected and the runtime will error. +> 📝 **Write HTML last**: writing an `index.html` instantly triggers the IDE live preview. If its `style.css` / `script.js` don't exist yet, the user sees an unstyled, broken skeleton. So write CSS and JS **first**, then write `index.html` **last** — that way the very first preview is the finished page. Also write each `index.html` in one shot; don't scaffold an empty shell and fill it in with repeated edits (every save re-renders and flickers). For a tiny single-page tool, just inline the CSS and JS into one `index.html` — one file, no intermediate state. + Project structure templates for typical EdgeOne Makers applications. ## Full-stack app — Node.js (static + API) @@ -36,6 +38,55 @@ const res = await fetch('/api/users'); const users = await res.json(); ``` +> 💾 **Where does the data live?** This platform has **no database**. The API skeletons above return empty data — to actually persist records, uploads, votes, or per-user state, back them with **Blob**. See the recipe below and [makers-storage → Blob as your backend](../makers-storage/references/blob.md). + +## Dynamic site with Blob persistence (guestbook / gallery / voting / save-state) + +The default shape for any generated site that needs a real backend but no relational data. Frontend → Cloud Function → Blob. No DB, no console setup. + +``` +my-app/ +├── index.html # Frontend (form + list) +├── script.js +├── cloud-functions/ +│ └── api/ +│ └── messages.js # GET lists entries, POST appends one +├── package.json # depends on @edgeone/pages-blob +``` + +**cloud-functions/api/messages.js** — one file per record (Pattern 1): +```javascript +import { getStore } from "@edgeone/pages-blob"; + +export async function onRequest({ request }) { + const store = getStore("guestbook"); + + if (request.method === "POST") { + const { name, text } = await request.json(); + const id = `${Date.now()}-${Math.round(Math.random() * 1e6)}`; + await store.setJSON(`entries/${id}.json`, { id, name, text, ts: Date.now() }); + return Response.json({ ok: true, id }); + } + + const { blobs } = await store.list({ prefix: "entries/" }); + const items = await Promise.all(blobs.map((b) => store.get(b.key, { type: "json" }))); + items.sort((a, b) => b.ts - a.ts); + return Response.json({ items }); +} +``` + +**index.html** frontend calls it like any API: +```javascript +await fetch('/api/messages', { // post + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name, text }), +}); +const { items } = await fetch('/api/messages').then((r) => r.json()); // list +``` + +Swap the key scheme for other shapes: `users/.json` for save-state, `counts/

--skip-env-sync` | ❌ `python -m http.server` / `npx serve` | -| Verify dev server is up | `present_files(http://...)` or the user's system terminal | ❌ Bash `curl localhost` (sandbox network isolation) | +| Verify dev server is up (agent-side API check) | `curl --noproxy '*' http://127.0.0.1:8088/api/...` ✅ works (same sandbox) | ❌ `curl localhost:8088` / plain `curl` (proxy + IPv6 → 404/000) | +| Verify dev server is up (user-facing) | `present_files(http://127.0.0.1:8088/)` (platform tunnel) | ❌ Telling user to open `127.0.0.1:8088` — their browser can't reach the sandbox | **Core iron rule**: inside a Makers project, **any HTML / URL preview MUST go through the HTTP protocol**. `file://` looks convenient, but fetch / SSE / Blob / KV all break under it. @@ -104,17 +105,19 @@ edgeone whoami # exit 0 = logged in, exit 1 = not logged in (does not hang) --- -### 3. Network isolation +### 3. Network isolation (dev server reachability from Bash) -**The Bash tool's network is isolated from the host** — inside WorkBuddy's Bash, `curl localhost:` cannot reach the host's dev server. +The Bash tool and `edgeone makers dev` run **in the same sandbox (same machine)**, so the loopback dev server IS reachable from Bash. The earlier claim that "Bash curl is isolated and returns 404" is wrong — the failures are caused by the **proxy** (§5) and the **IPv6 localhost** (§4), not by network isolation. | Verification method | Availability | Notes | |---------|--------|------| -| Built-in browser preview (`present_files`) | ✅ Available | Uses the host network, reliable | +| Built-in browser preview (`present_files`) | ✅ Available | Uses the platform tunnel; the ONLY way the **user's** browser can see the sandbox dev server | | User's system terminal | ✅ Available | `curl http://127.0.0.1:8088/` | -| Bash tool curl | ❌ Unavailable | Routed inside the sandbox, returns 404 | +| Bash tool curl (agent-side API checks) | ✅ Available **only with `--noproxy '*'` + `127.0.0.1`** | Plain `curl localhost:8088` fails: (a) `localhost`→`::1` (§4), (b) proxy hijacks the request (§5) | -**Do NOT** use Bash curl to judge whether the dev server started successfully. Use `present_files` or verify by deploying. +**Practical rule**: +- Use `curl --noproxy '*' http://127.0.0.1:8088/...` from Bash to **agent-side verify** API endpoints during testing — this works (it was used to validate a full create→upload→like flow). +- Do NOT rely on Bash curl to show the page to the user. The user's browser cannot reach `127.0.0.1:8088` inside the sandbox; for a user-facing preview, pass the dev URL to `present_files` (platform tunnel) or deploy and share the live URL. --- @@ -172,7 +175,15 @@ A `setLocalData EPERM` does not affect the running service; it only affects the |------|---------|------| | `npm install` | **Foreground sync** | Usually 10-30s; running it in the background would leave later commands missing dependencies | | `edgeone makers dev` | **Background async** (`run_in_background`) | Long-running process, must not block the conversation | -| `edgeone makers deploy` | **Foreground sync** | 1-3 minutes; the result is the core deliverable and must be shown immediately | +| `edgeone makers deploy` | **Background async** (`run_in_background`) | Cold deploys (build → upload → Process → live) routinely take **2–10+ minutes**. The foreground wall-clock budget (~100s) SIGKILLs the CLI mid-deploy (exit 137) even while it keeps printing progress — you lose the final URL line. Run it in the background and wait for the completion notification. | + +#### 7.2 Deploy in background — why, and what the kill really means + +- **Foreground kill = wall-clock budget, not a hang.** A foreground Bash command in this sandbox has a fixed ~100s wall-clock budget; at the limit the whole process tree gets SIGKILL (`exit 137 = 128 + 9`), regardless of whether it keeps printing. During a deploy the CLI prints `Deployment in progress... elapsed: ~XXs` every ~10s — those heartbeat lines do NOT reset or extend the budget. So "still printing → killed at ~100s" is expected, not a stall. +- **Killing the CLI does NOT usually fail the deploy.** The deployment itself runs server-side. A foreground CLI killed at `Created deployment` / `Process` has very likely continued on the server and gone live (confirmed in practice: a deploy killed at ~100s was later verified live, took ~674s end-to-end). Re-running `deploy` (same `-n `) reuses the project and returns the URL. +- **Always use `run_in_background: true` for deploy** so the CLI survives past the foreground budget and emits the final `--json` line with the live URL. Do not poll the task across turns — rely on the `` completion event. (Cross-turn `TaskOutput` may report the handle as "not found"; the process still finished.) +- **`--json` still prints progress heartbeats** to stdout/stderr, not a single clean JSON line. Parse the **last** line for the result object; treat the progress lines as noise. (This is a CLI cleanliness issue, unrelated to the kill behavior — do not assume "no output = process ended"; the sandbox judges liveness by OS process state, not by stdout bytes.) +- **Clean up background processes** after use: a `edgeone makers dev` left running keeps holding port 8088 and may collide with the next dev/deploy. Stop it with `TaskStop` or kill it when the session moves on. ### 7.1 Preview & Dev Server full flow (MUST use HTTP, file:// forbidden) @@ -185,7 +196,7 @@ After finishing development, **start the dev server and preview directly** — d 3. **Pass `http://127.0.0.1:8088/` to `present_files`** (note it is `127.0.0.1`, **not** `localhost` — see §4) 4. Tell the user: "The project's local preview is running, please check it out. If everything looks good, I can deploy it live for you directly." -Only after the user confirms, run `edgeone makers deploy -n --json` (**foreground sync**, see §7). +Only after the user confirms, run `edgeone makers deploy -n --json` (**background async**, see §7 and §7.2 — it exceeds the foreground wall-clock budget). #### ⛔ file:// preview is strictly forbidden diff --git a/skills/makers-recipes/SKILL.md b/skills/makers-recipes/SKILL.md index 25da228..02b1006 100644 --- a/skills/makers-recipes/SKILL.md +++ b/skills/makers-recipes/SKILL.md @@ -14,6 +14,8 @@ metadata: > ⚠️ **`.env.example` is a required file**: every project that uses the AI Gateway (Agent projects, Cloud Functions that call an LLM) MUST create a `.env.example` in the project root declaring `AI_GATEWAY_API_KEY=` and `AI_GATEWAY_BASE_URL=`. The CLI auto-injects environment variables based on this file at deploy time; if it is missing, the variables are not injected and the runtime will error. +> 📝 **Write HTML last**: writing an `index.html` instantly triggers the IDE live preview. If its `style.css` / `script.js` don't exist yet, the user sees an unstyled, broken skeleton. So write CSS and JS **first**, then write `index.html` **last** — that way the very first preview is the finished page. Also write each `index.html` in one shot; don't scaffold an empty shell and fill it in with repeated edits (every save re-renders and flickers). For a tiny single-page tool, just inline the CSS and JS into one `index.html` — one file, no intermediate state. + Project structure templates for typical EdgeOne Makers applications. ## Full-stack app — Node.js (static + API) @@ -36,6 +38,55 @@ const res = await fetch('/api/users'); const users = await res.json(); ``` +> 💾 **Where does the data live?** This platform has **no database**. The API skeletons above return empty data — to actually persist records, uploads, votes, or per-user state, back them with **Blob**. See the recipe below and [makers-storage → Blob as your backend](../makers-storage/references/blob.md). + +## Dynamic site with Blob persistence (guestbook / gallery / voting / save-state) + +The default shape for any generated site that needs a real backend but no relational data. Frontend → Cloud Function → Blob. No DB, no console setup. + +``` +my-app/ +├── index.html # Frontend (form + list) +├── script.js +├── cloud-functions/ +│ └── api/ +│ └── messages.js # GET lists entries, POST appends one +├── package.json # depends on @edgeone/pages-blob +``` + +**cloud-functions/api/messages.js** — one file per record (Pattern 1): +```javascript +import { getStore } from "@edgeone/pages-blob"; + +export async function onRequest({ request }) { + const store = getStore("guestbook"); + + if (request.method === "POST") { + const { name, text } = await request.json(); + const id = `${Date.now()}-${Math.round(Math.random() * 1e6)}`; + await store.setJSON(`entries/${id}.json`, { id, name, text, ts: Date.now() }); + return Response.json({ ok: true, id }); + } + + const { blobs } = await store.list({ prefix: "entries/" }); + const items = await Promise.all(blobs.map((b) => store.get(b.key, { type: "json" }))); + items.sort((a, b) => b.ts - a.ts); + return Response.json({ items }); +} +``` + +**index.html** frontend calls it like any API: +```javascript +await fetch('/api/messages', { // post + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name, text }), +}); +const { items } = await fetch('/api/messages').then((r) => r.json()); // list +``` + +Swap the key scheme for other shapes: `users/.json` for save-state, `counts/

` overlay with buttons wired via JS). Do NOT rely on the browser's built-in `alert` / `confirm` / `prompt` — the code looks correct in code review, works when the user opens the deployed URL in their own browser, and is silently broken in the WorkBuddy preview during dev/verification. diff --git a/cursor/rules/makers-env-adaption.mdc b/cursor/rules/makers-env-adaption.mdc index 43851ea..495ae8a 100644 --- a/cursor/rules/makers-env-adaption.mdc +++ b/cursor/rules/makers-env-adaption.mdc @@ -291,3 +291,11 @@ If the project named by `--name` does not exist remotely, the `link` command cre | @edgeone/pages-blob | >= 0.0.14 | Older versions have known bugs | Use `create-next-app@latest` rather than manually pinning an older version. + +--- + +### 13. Native browser dialogs (`alert` / `confirm` / `prompt`) don't work in WorkBuddy's built-in browser + +WorkBuddy's right-side preview panel does NOT render `window.alert()` / `window.confirm()` / `window.prompt()`. The call returns immediately without user interaction, so any handler gated on `if (confirm("Delete?"))` silently no-ops (a delete button appears to do nothing). The same page works fine in the user's real Chrome / Safari. + +**Rule**: for any confirmation, prompt, or notification in the page, use an **in-page custom modal** (a `
` overlay with buttons wired via JS). Do NOT rely on the browser's built-in `alert` / `confirm` / `prompt` — the code looks correct in code review, works when the user opens the deployed URL in their own browser, and is silently broken in the WorkBuddy preview during dev/verification. diff --git a/skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md b/skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md index 43851ea..495ae8a 100644 --- a/skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md @@ -291,3 +291,11 @@ If the project named by `--name` does not exist remotely, the `link` command cre | @edgeone/pages-blob | >= 0.0.14 | Older versions have known bugs | Use `create-next-app@latest` rather than manually pinning an older version. + +--- + +### 13. Native browser dialogs (`alert` / `confirm` / `prompt`) don't work in WorkBuddy's built-in browser + +WorkBuddy's right-side preview panel does NOT render `window.alert()` / `window.confirm()` / `window.prompt()`. The call returns immediately without user interaction, so any handler gated on `if (confirm("Delete?"))` silently no-ops (a delete button appears to do nothing). The same page works fine in the user's real Chrome / Safari. + +**Rule**: for any confirmation, prompt, or notification in the page, use an **in-page custom modal** (a `
` overlay with buttons wired via JS). Do NOT rely on the browser's built-in `alert` / `confirm` / `prompt` — the code looks correct in code review, works when the user opens the deployed URL in their own browser, and is silently broken in the WorkBuddy preview during dev/verification. From d36a9e1d0ad95e667994937f49d8601182d7d097 Mon Sep 17 00:00:00 2001 From: vincentism Date: Wed, 12 Aug 2026 16:32:28 +0800 Subject: [PATCH 14/15] docs(makers-deploy): mandatory post-deploy self-check for URL visibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Real session with a weaker model (DeepSeek V4): the deep-think block literally said "Deploy successful! Let me now present this to the user" and contained URL: https://...edgeone.cool?..., but the visible reply body was just "部署成功!" with everything else folded into 查看所有变更 summary. The model believed writing the URL in its reasoning satisfied the presentation requirement. Rule 4 already specified placement (top of visible body + present_files side panel) but did not require the agent to verify placement before ending the turn. Add a mandatory self-check step: read back what the user will actually see (not the reasoning content), verify both channels carry the URL, and if either is missing, send an additional short follow-up message with the URL block and re-call present_files. Reject "I already mentioned it in my reasoning" as a valid excuse. Co-Authored-By: Claude Opus 4.7 (1M context) --- codex/makers-deploy.md | 2 ++ cursor/rules/makers-deploy.mdc | 2 ++ skills/edgeone-makers-tools/references/makers-deploy/SKILL.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/codex/makers-deploy.md b/codex/makers-deploy.md index cffe540..dc2dff9 100644 --- a/codex/makers-deploy.md +++ b/codex/makers-deploy.md @@ -44,6 +44,8 @@ Deploy any project to **EdgeOne Makers**. 🌐 Live URL: https://my-project-abc123.edgeone.cool? ``` Then append any other notes (console URL, caveats, etc.). + + **Self-check before ending the turn (MANDATORY)** — read back what the user will actually SEE (NOT your thinking / reasoning content). Two questions: (a) Is the complete `.edgeone.cool` URL present at the top of the visible reply, in a code block or heading? (b) Was `present_files` called with that URL? If either answer is no, send an **additional short message** containing ONLY the `🌐 Live URL: ` block and call `present_files`. Do not end the turn until both channels carry the URL. "I already mentioned it in my reasoning" is NOT a substitute for placing it in the visible body. 5. **Ask the user to choose China or Global site** before browser login. Never assume. (Token login via `edgeone login --token` auto-detects site, no need to ask.) 6. **Prefer Browser Login; fall back to Token only after browser login is confirmed to fail** (see Login section for the ~60s fallback threshold and the Agent-in-IDE clarification — WorkBuddy is NOT headless). Token-first only when the user explicitly requests it. 7. **After token login, ask if the user wants to save the token locally** for future use. diff --git a/cursor/rules/makers-deploy.mdc b/cursor/rules/makers-deploy.mdc index cffe540..dc2dff9 100644 --- a/cursor/rules/makers-deploy.mdc +++ b/cursor/rules/makers-deploy.mdc @@ -44,6 +44,8 @@ Deploy any project to **EdgeOne Makers**. 🌐 Live URL: https://my-project-abc123.edgeone.cool? ``` Then append any other notes (console URL, caveats, etc.). + + **Self-check before ending the turn (MANDATORY)** — read back what the user will actually SEE (NOT your thinking / reasoning content). Two questions: (a) Is the complete `.edgeone.cool` URL present at the top of the visible reply, in a code block or heading? (b) Was `present_files` called with that URL? If either answer is no, send an **additional short message** containing ONLY the `🌐 Live URL: ` block and call `present_files`. Do not end the turn until both channels carry the URL. "I already mentioned it in my reasoning" is NOT a substitute for placing it in the visible body. 5. **Ask the user to choose China or Global site** before browser login. Never assume. (Token login via `edgeone login --token` auto-detects site, no need to ask.) 6. **Prefer Browser Login; fall back to Token only after browser login is confirmed to fail** (see Login section for the ~60s fallback threshold and the Agent-in-IDE clarification — WorkBuddy is NOT headless). Token-first only when the user explicitly requests it. 7. **After token login, ask if the user wants to save the token locally** for future use. diff --git a/skills/edgeone-makers-tools/references/makers-deploy/SKILL.md b/skills/edgeone-makers-tools/references/makers-deploy/SKILL.md index cffe540..dc2dff9 100644 --- a/skills/edgeone-makers-tools/references/makers-deploy/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-deploy/SKILL.md @@ -44,6 +44,8 @@ Deploy any project to **EdgeOne Makers**. 🌐 Live URL: https://my-project-abc123.edgeone.cool? ``` Then append any other notes (console URL, caveats, etc.). + + **Self-check before ending the turn (MANDATORY)** — read back what the user will actually SEE (NOT your thinking / reasoning content). Two questions: (a) Is the complete `.edgeone.cool` URL present at the top of the visible reply, in a code block or heading? (b) Was `present_files` called with that URL? If either answer is no, send an **additional short message** containing ONLY the `🌐 Live URL: ` block and call `present_files`. Do not end the turn until both channels carry the URL. "I already mentioned it in my reasoning" is NOT a substitute for placing it in the visible body. 5. **Ask the user to choose China or Global site** before browser login. Never assume. (Token login via `edgeone login --token` auto-detects site, no need to ask.) 6. **Prefer Browser Login; fall back to Token only after browser login is confirmed to fail** (see Login section for the ~60s fallback threshold and the Agent-in-IDE clarification — WorkBuddy is NOT headless). Token-first only when the user explicitly requests it. 7. **After token login, ask if the user wants to save the token locally** for future use. From 5428c2b41ff72e300c8c0e0137928a15ad968a66 Mon Sep 17 00:00:00 2001 From: vincentism Date: Wed, 12 Aug 2026 17:23:02 +0800 Subject: [PATCH 15/15] =?UTF-8?q?release:=20v2.0.0=20=E2=80=94=20fix=20=5F?= =?UTF-8?q?meta.json=20paths,=20broken=20links,=20name=20prefixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pre-release audit uncovered four blockers/consistency issues carried over from the earlier 8-skills → 1-skill consolidation. Address all four: 1. _meta.json listed 39 legacy paths under skills/makers-*/, none of which still exist. SkillHub installs would receive a broken package. Regenerate the files list from the current tree (46 entries, including the makers-migration/references/* additions). 2. Three markdown links pointed to a same-directory "kv-storage.md" that never existed post-restructure. The actual file is makers-storage/references/kv.md. Repoint both makers-edge-functions references and the makers-recipes reference to ../makers-storage/references/kv.md. 3. Three SKILL frontmatter names (makers-cli, makers-cloud-functions, makers-migration) lacked the edgeone- prefix that the other seven already use. Align them so name-based routing / validation is consistent. 4. Version numbers were split: manifests carried 1.0.0 while _meta.json and top-level SKILL.md carried 1.0.4. Bump every carrier to 2.0.0 (major bump reflects the breaking layout change from 8 sibling skills to a single router). Regenerated codex/*.md and cursor/rules/*.mdc mirrors to reflect the renamed frontmatter names in the affected SKILLs. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 2 +- .codebuddy-plugin/manifest.json | 2 +- .codebuddy-plugin/marketplace.json | 2 +- .cursor-plugin/plugin.json | 2 +- _meta.json | 86 ++++++++++--------- codex/makers-cli.md | 2 +- codex/makers-cloud-functions.md | 2 +- codex/makers-edge-functions.md | 4 +- codex/makers-migration.md | 2 +- codex/makers-recipes.md | 2 +- cursor/rules/makers-cli.mdc | 2 +- cursor/rules/makers-cloud-functions.mdc | 2 +- cursor/rules/makers-edge-functions.mdc | 4 +- cursor/rules/makers-migration.mdc | 2 +- cursor/rules/makers-recipes.mdc | 2 +- skills/edgeone-makers-tools/SKILL.md | 2 +- .../references/makers-cli/SKILL.md | 2 +- .../makers-cloud-functions/SKILL.md | 2 +- .../references/makers-edge-functions/SKILL.md | 4 +- .../references/makers-migration/SKILL.md | 2 +- .../references/makers-recipes/SKILL.md | 2 +- 22 files changed, 71 insertions(+), 63 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index d89207d..1a56f40 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "edgeone-makers-tools", "source": "./", "description": "EdgeOne Makers platform development skills — AI Agents, Cloud Functions, Edge Functions, Storage, Middleware, and Deployment.", - "version": "1.0.0", + "version": "2.0.0", "author": { "name": "EdgeOne" }, diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 67296b5..d98eb53 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "edgeone-makers-tools", "description": "EdgeOne Makers platform development skills — AI Agents, Cloud Functions, Edge Functions, Storage, Middleware, and Deployment.", - "version": "1.0.0", + "version": "2.0.0", "author": { "name": "EdgeOne" } diff --git a/.codebuddy-plugin/manifest.json b/.codebuddy-plugin/manifest.json index f0af460..6c93e1c 100644 --- a/.codebuddy-plugin/manifest.json +++ b/.codebuddy-plugin/manifest.json @@ -1,7 +1,7 @@ { "name": "edgeone-makers-tools", "description": "EdgeOne Makers platform development skills — AI Agents, Cloud Functions, Edge Functions, Storage, Middleware, and Deployment.", - "version": "1.0.0", + "version": "2.0.0", "author": "EdgeOne", "skills": [ "skills/edgeone-makers-tools" diff --git a/.codebuddy-plugin/marketplace.json b/.codebuddy-plugin/marketplace.json index 0ce019d..5440d7f 100644 --- a/.codebuddy-plugin/marketplace.json +++ b/.codebuddy-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "edgeone-makers-tools", "source": "./", "description": "EdgeOne Makers platform development skills — AI Agents, Cloud Functions, Edge Functions, Storage, Middleware, and Deployment.", - "version": "1.0.0", + "version": "2.0.0", "author": { "name": "EdgeOne" }, diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 67296b5..d98eb53 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "edgeone-makers-tools", "description": "EdgeOne Makers platform development skills — AI Agents, Cloud Functions, Edge Functions, Storage, Middleware, and Deployment.", - "version": "1.0.0", + "version": "2.0.0", "author": { "name": "EdgeOne" } diff --git a/_meta.json b/_meta.json index 2bd2717..d28c7b0 100644 --- a/_meta.json +++ b/_meta.json @@ -2,45 +2,53 @@ "ownerId": "442102", "publishedAt": 1781766512723, "slug": "edgeone-makers-tools", - "version": "1.0.4", + "version": "2.0.0", "files": [ - "SKILL.md", "CLAUDE.md", - "skills/makers-agents/SKILL.md", - "skills/makers-agents/references/capabilities/sandbox.md", - "skills/makers-agents/references/capabilities/store.md", - "skills/makers-agents/references/capabilities/tools.md", - "skills/makers-agents/references/framework-native-patterns.md", - "skills/makers-agents/references/node-frameworks/claude-sdk.md", - "skills/makers-agents/references/node-frameworks/deepagents.md", - "skills/makers-agents/references/node-frameworks/langgraph.md", - "skills/makers-agents/references/node-frameworks/openai-agents.md", - "skills/makers-agents/references/platform/cloud-functions.md", - "skills/makers-agents/references/platform/conversation-id.md", - "skills/makers-agents/references/platform/env-and-model.md", - "skills/makers-agents/references/platform/node-entry.md", - "skills/makers-agents/references/platform/python-entry.md", - "skills/makers-agents/references/platform/sse-protocol.md", - "skills/makers-agents/references/python-frameworks/claude-sdk.md", - "skills/makers-agents/references/python-frameworks/crewai.md", - "skills/makers-agents/references/python-frameworks/deepagents.md", - "skills/makers-agents/references/python-frameworks/langgraph.md", - "skills/makers-agents/references/python-frameworks/openai-agents.md", - "skills/makers-agents/references/review-checklist.md", - "skills/makers-cli/SKILL.md", - "skills/makers-cloud-functions/SKILL.md", - "skills/makers-cloud-functions/references/go-functions.md", - "skills/makers-cloud-functions/references/node-functions.md", - "skills/makers-cloud-functions/references/python-functions.md", - "skills/makers-cloud-functions/references/troubleshooting.md", - "skills/makers-deploy/SKILL.md", - "skills/makers-deploy/references/command-reference.md", - "skills/makers-edge-functions/SKILL.md", - "skills/makers-env-adaption/SKILL.md", - "skills/makers-middleware/SKILL.md", - "skills/makers-recipes/SKILL.md", - "skills/makers-storage/SKILL.md", - "skills/makers-storage/references/blob.md", - "skills/makers-storage/references/kv.md" + "skills/edgeone-makers-tools/SKILL.md", + "skills/edgeone-makers-tools/references/makers-agents/SKILL.md", + "skills/edgeone-makers-tools/references/makers-agents/references/capabilities/sandbox.md", + "skills/edgeone-makers-tools/references/makers-agents/references/capabilities/store.md", + "skills/edgeone-makers-tools/references/makers-agents/references/capabilities/tools.md", + "skills/edgeone-makers-tools/references/makers-agents/references/framework-native-patterns.md", + "skills/edgeone-makers-tools/references/makers-agents/references/node-frameworks/claude-sdk.md", + "skills/edgeone-makers-tools/references/makers-agents/references/node-frameworks/deepagents.md", + "skills/edgeone-makers-tools/references/makers-agents/references/node-frameworks/langgraph.md", + "skills/edgeone-makers-tools/references/makers-agents/references/node-frameworks/openai-agents.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/cloud-functions.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/conversation-id.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/env-and-model.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/node-entry.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/python-entry.md", + "skills/edgeone-makers-tools/references/makers-agents/references/platform/sse-protocol.md", + "skills/edgeone-makers-tools/references/makers-agents/references/python-frameworks/claude-sdk.md", + "skills/edgeone-makers-tools/references/makers-agents/references/python-frameworks/crewai.md", + "skills/edgeone-makers-tools/references/makers-agents/references/python-frameworks/deepagents.md", + "skills/edgeone-makers-tools/references/makers-agents/references/python-frameworks/langgraph.md", + "skills/edgeone-makers-tools/references/makers-agents/references/python-frameworks/openai-agents.md", + "skills/edgeone-makers-tools/references/makers-agents/references/review-checklist.md", + "skills/edgeone-makers-tools/references/makers-cli/SKILL.md", + "skills/edgeone-makers-tools/references/makers-cloud-functions/SKILL.md", + "skills/edgeone-makers-tools/references/makers-cloud-functions/references/go-functions.md", + "skills/edgeone-makers-tools/references/makers-cloud-functions/references/node-functions.md", + "skills/edgeone-makers-tools/references/makers-cloud-functions/references/python-functions.md", + "skills/edgeone-makers-tools/references/makers-cloud-functions/references/troubleshooting.md", + "skills/edgeone-makers-tools/references/makers-deploy/SKILL.md", + "skills/edgeone-makers-tools/references/makers-deploy/references/command-reference.md", + "skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md", + "skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md", + "skills/edgeone-makers-tools/references/makers-middleware/SKILL.md", + "skills/edgeone-makers-tools/references/makers-migration/SKILL.md", + "skills/edgeone-makers-tools/references/makers-migration/references/api-route-to-makers.md", + "skills/edgeone-makers-tools/references/makers-migration/references/claude-agent-sdk-to-makers.md", + "skills/edgeone-makers-tools/references/makers-migration/references/crewai-to-makers.md", + "skills/edgeone-makers-tools/references/makers-migration/references/deepagents-to-makers.md", + "skills/edgeone-makers-tools/references/makers-migration/references/langgraph-to-makers.md", + "skills/edgeone-makers-tools/references/makers-migration/references/openai-agents-to-makers.md", + "skills/edgeone-makers-tools/references/makers-recipes/SKILL.md", + "skills/edgeone-makers-tools/references/makers-recipes/references/youth-site-scenarios.md", + "skills/edgeone-makers-tools/references/makers-storage/SKILL.md", + "skills/edgeone-makers-tools/references/makers-storage/references/blob.md", + "skills/edgeone-makers-tools/references/makers-storage/references/kv.md" ] -} \ No newline at end of file +} diff --git a/codex/makers-cli.md b/codex/makers-cli.md index ea6e420..90437ca 100644 --- a/codex/makers-cli.md +++ b/codex/makers-cli.md @@ -1,5 +1,5 @@ --- -name: makers-cli +name: edgeone-makers-cli description: >- EdgeOne Makers CLI command reference. Use when running edgeone CLI commands for dev, build, deploy, env management. diff --git a/codex/makers-cloud-functions.md b/codex/makers-cloud-functions.md index 26fac3d..7b8ce09 100644 --- a/codex/makers-cloud-functions.md +++ b/codex/makers-cloud-functions.md @@ -1,5 +1,5 @@ --- -name: makers-cloud-functions +name: edgeone-makers-cloud-functions description: >- EdgeOne Makers Cloud Functions — Node.js, Go, and Python runtimes. Use when building server-side APIs, Express/Koa patterns, or backend logic. diff --git a/codex/makers-edge-functions.md b/codex/makers-edge-functions.md index 516336e..b7d0502 100644 --- a/codex/makers-edge-functions.md +++ b/codex/makers-edge-functions.md @@ -110,7 +110,7 @@ export function onRequest(context) { > Cross-reference: if your code uses `context.store` or KV APIs, also read `../makers-storage/SKILL.md`. -⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [kv-storage.md](kv-storage.md) for full setup instructions (same directory). +⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) for full setup instructions. The KV namespace is a **global variable** (name is set when binding in the console) — it is **NOT** on `context.env`. @@ -134,7 +134,7 @@ export async function onRequest(context) { } ``` -For full KV Storage API reference and usage guide, see: [kv-storage.md](kv-storage.md) (same directory). +For full KV Storage API reference and usage guide, see: [../makers-storage/references/kv.md](../makers-storage/references/kv.md). ## Supported Runtime APIs diff --git a/codex/makers-migration.md b/codex/makers-migration.md index 09dd4a1..afe05be 100644 --- a/codex/makers-migration.md +++ b/codex/makers-migration.md @@ -1,5 +1,5 @@ --- -name: makers-migration +name: edgeone-makers-migration description: >- Migrate existing AI agent projects (LangChain, LangGraph, OpenAI Agents SDK, Claude Agent SDK, CrewAI) to EdgeOne Makers platform conventions. diff --git a/codex/makers-recipes.md b/codex/makers-recipes.md index d8b819c..32c89c4 100644 --- a/codex/makers-recipes.md +++ b/codex/makers-recipes.md @@ -196,7 +196,7 @@ my-app/ ## Edge API + KV counter -⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [kv-storage.md](kv-storage.md) (same directory) +⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) ``` my-app/ diff --git a/cursor/rules/makers-cli.mdc b/cursor/rules/makers-cli.mdc index ea6e420..90437ca 100644 --- a/cursor/rules/makers-cli.mdc +++ b/cursor/rules/makers-cli.mdc @@ -1,5 +1,5 @@ --- -name: makers-cli +name: edgeone-makers-cli description: >- EdgeOne Makers CLI command reference. Use when running edgeone CLI commands for dev, build, deploy, env management. diff --git a/cursor/rules/makers-cloud-functions.mdc b/cursor/rules/makers-cloud-functions.mdc index 26fac3d..7b8ce09 100644 --- a/cursor/rules/makers-cloud-functions.mdc +++ b/cursor/rules/makers-cloud-functions.mdc @@ -1,5 +1,5 @@ --- -name: makers-cloud-functions +name: edgeone-makers-cloud-functions description: >- EdgeOne Makers Cloud Functions — Node.js, Go, and Python runtimes. Use when building server-side APIs, Express/Koa patterns, or backend logic. diff --git a/cursor/rules/makers-edge-functions.mdc b/cursor/rules/makers-edge-functions.mdc index 516336e..b7d0502 100644 --- a/cursor/rules/makers-edge-functions.mdc +++ b/cursor/rules/makers-edge-functions.mdc @@ -110,7 +110,7 @@ export function onRequest(context) { > Cross-reference: if your code uses `context.store` or KV APIs, also read `../makers-storage/SKILL.md`. -⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [kv-storage.md](kv-storage.md) for full setup instructions (same directory). +⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) for full setup instructions. The KV namespace is a **global variable** (name is set when binding in the console) — it is **NOT** on `context.env`. @@ -134,7 +134,7 @@ export async function onRequest(context) { } ``` -For full KV Storage API reference and usage guide, see: [kv-storage.md](kv-storage.md) (same directory). +For full KV Storage API reference and usage guide, see: [../makers-storage/references/kv.md](../makers-storage/references/kv.md). ## Supported Runtime APIs diff --git a/cursor/rules/makers-migration.mdc b/cursor/rules/makers-migration.mdc index 09dd4a1..afe05be 100644 --- a/cursor/rules/makers-migration.mdc +++ b/cursor/rules/makers-migration.mdc @@ -1,5 +1,5 @@ --- -name: makers-migration +name: edgeone-makers-migration description: >- Migrate existing AI agent projects (LangChain, LangGraph, OpenAI Agents SDK, Claude Agent SDK, CrewAI) to EdgeOne Makers platform conventions. diff --git a/cursor/rules/makers-recipes.mdc b/cursor/rules/makers-recipes.mdc index d8b819c..32c89c4 100644 --- a/cursor/rules/makers-recipes.mdc +++ b/cursor/rules/makers-recipes.mdc @@ -196,7 +196,7 @@ my-app/ ## Edge API + KV counter -⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [kv-storage.md](kv-storage.md) (same directory) +⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) ``` my-app/ diff --git a/skills/edgeone-makers-tools/SKILL.md b/skills/edgeone-makers-tools/SKILL.md index dc394ec..e909fd0 100644 --- a/skills/edgeone-makers-tools/SKILL.md +++ b/skills/edgeone-makers-tools/SKILL.md @@ -12,7 +12,7 @@ description: >- read only the sub-skill relevant to the current task, never all of them at once. metadata: author: edgeone - version: "1.0.4" + version: "2.0.0" --- # EdgeOne Makers Skills diff --git a/skills/edgeone-makers-tools/references/makers-cli/SKILL.md b/skills/edgeone-makers-tools/references/makers-cli/SKILL.md index ea6e420..90437ca 100644 --- a/skills/edgeone-makers-tools/references/makers-cli/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-cli/SKILL.md @@ -1,5 +1,5 @@ --- -name: makers-cli +name: edgeone-makers-cli description: >- EdgeOne Makers CLI command reference. Use when running edgeone CLI commands for dev, build, deploy, env management. diff --git a/skills/edgeone-makers-tools/references/makers-cloud-functions/SKILL.md b/skills/edgeone-makers-tools/references/makers-cloud-functions/SKILL.md index 26fac3d..7b8ce09 100644 --- a/skills/edgeone-makers-tools/references/makers-cloud-functions/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-cloud-functions/SKILL.md @@ -1,5 +1,5 @@ --- -name: makers-cloud-functions +name: edgeone-makers-cloud-functions description: >- EdgeOne Makers Cloud Functions — Node.js, Go, and Python runtimes. Use when building server-side APIs, Express/Koa patterns, or backend logic. diff --git a/skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md b/skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md index 516336e..b7d0502 100644 --- a/skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md @@ -110,7 +110,7 @@ export function onRequest(context) { > Cross-reference: if your code uses `context.store` or KV APIs, also read `../makers-storage/SKILL.md`. -⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [kv-storage.md](kv-storage.md) for full setup instructions (same directory). +⚠️ **Prerequisites**: You must enable KV Storage in the EdgeOne Makers console, create a namespace, and bind it to your project before using KV. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) for full setup instructions. The KV namespace is a **global variable** (name is set when binding in the console) — it is **NOT** on `context.env`. @@ -134,7 +134,7 @@ export async function onRequest(context) { } ``` -For full KV Storage API reference and usage guide, see: [kv-storage.md](kv-storage.md) (same directory). +For full KV Storage API reference and usage guide, see: [../makers-storage/references/kv.md](../makers-storage/references/kv.md). ## Supported Runtime APIs diff --git a/skills/edgeone-makers-tools/references/makers-migration/SKILL.md b/skills/edgeone-makers-tools/references/makers-migration/SKILL.md index 09dd4a1..afe05be 100644 --- a/skills/edgeone-makers-tools/references/makers-migration/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-migration/SKILL.md @@ -1,5 +1,5 @@ --- -name: makers-migration +name: edgeone-makers-migration description: >- Migrate existing AI agent projects (LangChain, LangGraph, OpenAI Agents SDK, Claude Agent SDK, CrewAI) to EdgeOne Makers platform conventions. diff --git a/skills/edgeone-makers-tools/references/makers-recipes/SKILL.md b/skills/edgeone-makers-tools/references/makers-recipes/SKILL.md index d8b819c..32c89c4 100644 --- a/skills/edgeone-makers-tools/references/makers-recipes/SKILL.md +++ b/skills/edgeone-makers-tools/references/makers-recipes/SKILL.md @@ -196,7 +196,7 @@ my-app/ ## Edge API + KV counter -⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [kv-storage.md](kv-storage.md) (same directory) +⚠️ **Prerequisites**: You must enable KV Storage in the console and bind a namespace first. See [../makers-storage/references/kv.md](../makers-storage/references/kv.md) ``` my-app/