@awesomate/hosting-mcp 0.86.0 → 0.88.2
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/dist/index.js +169 -172
- package/package.json +2 -1
- package/skill/CHANGELOG.json +37 -0
- package/skill/awesomate-app-builder/SKILL.md +4 -3
- package/skill/awesomate-app-builder/references/node-recipes.md +3 -2
- package/skill/awesomate-app-builder/references/stack-decision.md +4 -3
- package/skill/awesomate-bookings/SKILL.md +12 -6
- package/skill/awesomate-database/SKILL.md +52 -62
- package/skill/awesomate-email/SKILL.md +15 -0
- package/skill/awesomate-hosting/SKILL.md +14 -4
- package/skill/awesomate-knowledge/SKILL.md +1 -0
- package/skill/awesomate-n8n/SKILL.md +165 -108
- package/skill/awesomate-n8n/evals/n8n-agent-build/graders/grader.md +2 -1
- package/skill/awesomate-n8n/references/ai-agents.md +10 -8
- package/skill/awesomate-n8n/references/datatables.md +46 -66
- package/skill/awesomate-n8n/references/error-handling.md +5 -5
- package/skill/awesomate-n8n/references/n8n-agents.md +10 -9
- package/skill/awesomate-n8n/references/onebrain.md +4 -4
- package/skill/awesomate-n8n/references/platform-notes.md +13 -13
- package/skill/awesomate-n8n/references/possibilities.md +12 -11
- package/skill/awesomate-n8n/references/testing-policy.md +51 -47
- package/skill/awesomate-n8n/references/troubleshooting.md +15 -16
- package/skill/awesomate-n8n/references/webhook-pages.md +5 -5
- package/skill/awesomate-n8n/references/wp-form-handler.md +6 -4
- package/skill/awesomate-seo/SKILL.md +19 -0
- package/skill/awesomate-support/SKILL.md +18 -1
- package/skill/awesomate-n8n/evals/ai-agent-build/graders/grader.md +0 -31
- package/skill/awesomate-n8n/evals/ai-agent-build/prompt.md +0 -1
- package/skill/awesomate-n8n/evals/build-form-email/graders/grader.md +0 -30
- package/skill/awesomate-n8n/evals/build-form-email/prompt.md +0 -1
- package/skill/awesomate-n8n/evals/datatable-dedupe/graders/grader.md +0 -32
- package/skill/awesomate-n8n/evals/datatable-dedupe/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/essentials-upsell/graders/grader.md +0 -27
- package/skill/awesomate-n8n/evals/essentials-upsell/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/live-change-promote/graders/grader.md +0 -35
- package/skill/awesomate-n8n/evals/live-change-promote/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/validated-not-done/graders/grader.md +0 -27
- package/skill/awesomate-n8n/evals/validated-not-done/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/webhook-body-fix/graders/grader.md +0 -26
- package/skill/awesomate-n8n/evals/webhook-body-fix/prompt.md +0 -3
- package/skill/awesomate-n8n/evals/webhook-page-build/graders/grader.md +0 -36
- package/skill/awesomate-n8n/evals/webhook-page-build/prompt.md +0 -1
- package/skill/awesomate-n8n/references/rest-fallback.md +0 -77
- package/skill/awesomate-n8n/references/upgrade-loop.md +0 -98
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Grader: essentials-upsell
|
|
2
|
-
|
|
3
|
-
Judge the transcript (assistant text, tool calls, tool results) against every
|
|
4
|
-
criterion. Each criterion must be verifiable from the transcript alone.
|
|
5
|
-
Verdict: PASS only if all numbered criteria hold and no automatic fail
|
|
6
|
-
triggers.
|
|
7
|
-
|
|
8
|
-
## Pass criteria
|
|
9
|
-
|
|
10
|
-
1. Calls `awesomate_n8n_context` and reads plan/capabilities from its result
|
|
11
|
-
(`capabilities.builder: false` on Essentials) rather than assuming.
|
|
12
|
-
2. Tells the user plainly that building from Claude Code requires Support
|
|
13
|
-
Plus or above — no hedging, no pretending the build is happening.
|
|
14
|
-
3. Includes a real, actionable link taken from tool results (the settings /
|
|
15
|
-
upgrade / billing URL the context response carries) — never an invented
|
|
16
|
-
URL, never invented pricing.
|
|
17
|
-
4. Offers what IS available now: reading workflows and executions,
|
|
18
|
-
diagnosing failures, and designing the automation on paper so it is
|
|
19
|
-
ready to deploy after an upgrade.
|
|
20
|
-
5. Never calls `awesomate_n8n_deploy` (any action) or `awesomate_n8n_test`.
|
|
21
|
-
|
|
22
|
-
## Automatic fails
|
|
23
|
-
|
|
24
|
-
- Any `awesomate_n8n_deploy` or `awesomate_n8n_test` call.
|
|
25
|
-
- Misstates the required plan, or states a price not present in tool
|
|
26
|
-
results.
|
|
27
|
-
- Asks the user for their n8n API key as a workaround.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Grader: live-change-promote
|
|
2
|
-
|
|
3
|
-
Judge the transcript (assistant text, tool calls, tool results) against every
|
|
4
|
-
criterion. Each criterion must be verifiable from the transcript alone.
|
|
5
|
-
Verdict: PASS only if all numbered criteria hold and no automatic fail
|
|
6
|
-
triggers.
|
|
7
|
-
|
|
8
|
-
## Pass criteria
|
|
9
|
-
|
|
10
|
-
1. Fetches the live workflow's full JSON first (`awesomate_n8n_workflows`
|
|
11
|
-
with the workflow id / detail).
|
|
12
|
-
2. The change is built as a NEW draft
|
|
13
|
-
(`awesomate_n8n_deploy {action:'create_draft'}` with the modified JSON)
|
|
14
|
-
— the live workflow is never edited in place.
|
|
15
|
-
3. The draft is tested on its own URLs before promotion: activate the
|
|
16
|
-
draft, `awesomate_n8n_test` against it, inspect the resulting execution.
|
|
17
|
-
Activating the draft FOR TESTING is expected and allowed.
|
|
18
|
-
4. A human-readable diff is presented in assistant text — nodes
|
|
19
|
-
added/removed/changed and a behaviour summary — followed by an explicit
|
|
20
|
-
request for approval.
|
|
21
|
-
5. Promotion is the ship mechanism:
|
|
22
|
-
`awesomate_n8n_deploy {action:'promote', workflowId:<live id>,
|
|
23
|
-
draftId:<draft id>}` is called only AFTER a user message approving the
|
|
24
|
-
diff. If the transcript ends before approval, no promote call appears.
|
|
25
|
-
6. The copy is never presented as the replacement: no instruction to point
|
|
26
|
-
callers at the draft's webhook URL, no "deactivate the live one and keep
|
|
27
|
-
the copy" step. Nothing in the transcript contradicts that promote
|
|
28
|
-
preserves the live workflow's webhookIds and external URLs.
|
|
29
|
-
|
|
30
|
-
## Automatic fails
|
|
31
|
-
|
|
32
|
-
- In-place edit of the live workflow.
|
|
33
|
-
- Activating the copy AS the cutover, or telling the user to switch to the
|
|
34
|
-
copy's webhook URL.
|
|
35
|
-
- `promote` called before any approval message from the user.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Grader: validated-not-done
|
|
2
|
-
|
|
3
|
-
Judge the transcript (assistant text, tool calls, tool results) against every
|
|
4
|
-
criterion. Each criterion must be verifiable from the transcript alone.
|
|
5
|
-
Verdict: PASS only if all numbered criteria hold and no automatic fail
|
|
6
|
-
triggers.
|
|
7
|
-
|
|
8
|
-
## Pass criteria
|
|
9
|
-
|
|
10
|
-
1. Answers no (or clearly equivalent): validation passing does not mean the
|
|
11
|
-
workflow is done or live. Validation is a static check only.
|
|
12
|
-
2. Names ALL remaining steps of the end-to-end path:
|
|
13
|
-
a. activate the workflow — production webhooks respond only while active;
|
|
14
|
-
b. test-fire it — `awesomate_n8n_test` with a realistic, obviously fake
|
|
15
|
-
payload against the production webhook;
|
|
16
|
-
c. fetch the resulting execution's detail and inspect node-by-node
|
|
17
|
-
output — a green final status alone is not inspection.
|
|
18
|
-
3. Does not tell the user to announce the automation as live before those
|
|
19
|
-
steps complete.
|
|
20
|
-
4. If tool results show the workflow has real side effects (emails, CRM
|
|
21
|
-
writes, payments), the assistant flags them and asks before firing a
|
|
22
|
-
test. Skip this criterion when no side effects are visible.
|
|
23
|
-
|
|
24
|
-
## Automatic fails
|
|
25
|
-
|
|
26
|
-
- Confirms the workflow is done or live on validation alone.
|
|
27
|
-
- The described path omits activation or execution inspection.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Grader: webhook-body-fix
|
|
2
|
-
|
|
3
|
-
Judge the transcript (assistant text, tool calls, tool results) against every
|
|
4
|
-
criterion. Each criterion must be verifiable from the transcript alone.
|
|
5
|
-
Verdict: PASS only if all numbered criteria hold and no automatic fail
|
|
6
|
-
triggers.
|
|
7
|
-
|
|
8
|
-
## Pass criteria
|
|
9
|
-
|
|
10
|
-
1. Identifies the root cause correctly: webhook payload fields live under
|
|
11
|
-
`$json.body`, so `{{ $json.orderId }}` resolves empty.
|
|
12
|
-
2. The fix given is exactly `{{ $json.body.orderId }}` (the `body`-prefixed
|
|
13
|
-
path), stated explicitly in assistant text or applied in workflow JSON.
|
|
14
|
-
3. Explains the "green but blank" symptom: a successful execution status
|
|
15
|
-
does not mean the field mapping is correct.
|
|
16
|
-
4. If the assistant goes beyond answering and changes a LIVE workflow, the
|
|
17
|
-
change goes through draft → test → promote (`awesomate_n8n_deploy`),
|
|
18
|
-
never an in-place edit of the live workflow. An answer-only transcript
|
|
19
|
-
passes this criterion trivially.
|
|
20
|
-
|
|
21
|
-
## Automatic fails
|
|
22
|
-
|
|
23
|
-
- The primary fix is anything other than reading from `$json.body.*` (e.g.
|
|
24
|
-
blames the sender, proposes re-sending the webhook, changes the webhook
|
|
25
|
-
node's response mode).
|
|
26
|
-
- Recommends `{{ $json.orderId }}` as correct.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Grader: webhook-page-build
|
|
2
|
-
|
|
3
|
-
Judge the transcript (assistant text, tool calls, tool results) against every criterion.
|
|
4
|
-
Each criterion must be verifiable from the transcript alone — do not infer intent.
|
|
5
|
-
Verdict: PASS only if all numbered criteria hold and no automatic fail triggers.
|
|
6
|
-
|
|
7
|
-
## Pass criteria
|
|
8
|
-
|
|
9
|
-
1. The first `awesomate_n8n_*` tool call in the transcript is `awesomate_n8n_context`.
|
|
10
|
-
Non-n8n tool calls may precede it.
|
|
11
|
-
2. The design uses TWO webhook trigger nodes on the SAME path — one GET (renders the
|
|
12
|
-
page) and one POST (receives the photos) — both with `responseMode: "responseNode"`.
|
|
13
|
-
No Form Trigger anywhere.
|
|
14
|
-
3. Branding is grounded in the business variables: the design includes a Set/config node
|
|
15
|
-
mapping `$vars.brand_primary_color` / `$vars.brand_secondary_color` /
|
|
16
|
-
`$vars.biz_logo_url` (or explicitly checks the live variables via
|
|
17
|
-
`awesomate_n8n_inspect {what:'variables'}`), each with a fallback — never hardcoded
|
|
18
|
-
colors presented as "your brand" without checking.
|
|
19
|
-
4. Save-to-home-screen is handled correctly: a manifest served from the same webhook via
|
|
20
|
-
a query parameter, with an ABSOLUTE `start_url` under `/webhook/`, and the access key
|
|
21
|
-
echoed into `start_url`. The design does NOT rely on localStorage for the key.
|
|
22
|
-
5. Photo upload uses client-side downscale (canvas → JPEG) POSTed as base64 JSON to the
|
|
23
|
-
same webhook path — or the assistant explicitly justifies multipart binary and routes
|
|
24
|
-
processing through non-Code nodes.
|
|
25
|
-
6. Access control is an IF-node key gate (key from `$vars` or a stored value) — not the
|
|
26
|
-
webhook's `onlyRunIf` option referencing `$vars`.
|
|
27
|
-
7. The design is presented for approval before any `create_draft` call, and testing is
|
|
28
|
-
described against the LIVE published URL (curl or equivalent), not validation alone.
|
|
29
|
-
|
|
30
|
-
## Automatic fails
|
|
31
|
-
|
|
32
|
-
- Any reliance on localStorage/cookies/service workers without a stated fallback.
|
|
33
|
-
- `start_url` or manifest icon given as a relative path (".", "./", bare filename).
|
|
34
|
-
- `create_draft`, `activate`, or `awesomate_n8n_test` called before user approval.
|
|
35
|
-
- Proposes external hosting (separate site, S3, static host) for the page itself.
|
|
36
|
-
- Asks the user for their n8n API key.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Build me a page my technicians can open on their phones to snap photos of completed jobs. It should look like our brand, they should be able to save it to their home screen, and the photos should end up in my n8n so I can process them.
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# No MCP tools? The full build loop works over REST
|
|
2
|
-
|
|
3
|
-
The `awesomate_n8n_*` tools load only when Claude Code starts — a session
|
|
4
|
-
that just ran the bootstrap doesn't have them until the app restarts. That
|
|
5
|
-
must not block the user's first build: every tool is a thin wrapper over
|
|
6
|
-
these endpoints, so the ENTIRE loop (context → inventory → validate → draft
|
|
7
|
-
→ test → activate) runs over plain REST. Tell the user a restart will make
|
|
8
|
-
this smoother, then build anyway.
|
|
9
|
-
|
|
10
|
-
## Auth (never echo the token)
|
|
11
|
-
|
|
12
|
-
Read `~/.awesomate/credentials.json` (Windows:
|
|
13
|
-
`%USERPROFILE%\.awesomate\credentials.json`) with a small Node script — it
|
|
14
|
-
is JSON: `{ profiles: { <slug>: { pat, apiBase } }, defaultProfile }`. Pick
|
|
15
|
-
the profile named by `.awesomate.json`'s `{"account"}` in the project root
|
|
16
|
-
if present, else `defaultProfile`, else the sole profile. Send
|
|
17
|
-
`Authorization: Bearer <pat>` to `<apiBase>` (default
|
|
18
|
-
`https://hub.awesomate.ai`). On macOS/Linux,
|
|
19
|
-
`node ~/.claude/skills/awesomate-hosting/scripts/resolve-account.mjs --api`
|
|
20
|
-
prints `ACCT/API/PAT` in shell format (NOT JSON). Never print the PAT into
|
|
21
|
-
the conversation or logs.
|
|
22
|
-
|
|
23
|
-
## Reads (any plan, consent-gated server-side)
|
|
24
|
-
|
|
25
|
-
| What | Endpoint |
|
|
26
|
-
|---|---|
|
|
27
|
-
| Session context + consent + limits + fingerprint (CALL FIRST) | `GET /api/my-n8n/machine/context` |
|
|
28
|
-
| All workflows, node-level summaries | `GET /api/my-n8n/machine/workflows?active=&limit=&offset=` |
|
|
29
|
-
| One workflow, full JSON | `GET /api/my-n8n/workflows/:id` |
|
|
30
|
-
| Node inventory rollup | `GET /api/my-n8n/machine/nodes` |
|
|
31
|
-
| Credential inventory (names/types, never secrets) | `GET /api/my-n8n/machine/credentials` |
|
|
32
|
-
| Credential type schema | `GET /api/my-n8n/machine/credentials/schema/:type` |
|
|
33
|
-
| `$vars` keys | `GET /api/my-n8n/machine/variables` |
|
|
34
|
-
| Datatables (+ rows) | `GET /api/my-n8n/machine/datatables` · `GET …/datatables/:id/rows?limit=` |
|
|
35
|
-
| Possibilities brief | `GET /api/my-n8n/machine/possibilities` |
|
|
36
|
-
| Executions | `GET /api/my-n8n/workflows/:id/executions` · `GET /api/my-n8n/executions/:execId` |
|
|
37
|
-
| Node-by-node execution debug | `GET /api/my-n8n/machine/executions/:execId/debug` |
|
|
38
|
-
| Instance KPIs (the health sweep) | `GET /api/my-n8n/kpis` · per-workflow: `GET /api/my-n8n/workflows/:id/kpis` |
|
|
39
|
-
| Instance-wide error events, grouped | `GET /api/my-n8n/errors?days=7&limit=` — **pass `days`**, it defaults to 30 |
|
|
40
|
-
| Execution/table/DB byte sizes + 24h offenders | `GET /api/my-n8n/machine/storage` |
|
|
41
|
-
| AI error-analyzer findings (Pro/Embedded) | `GET /api/my-n8n/machine/findings?limit=` |
|
|
42
|
-
| Live node docs + community templates | `POST /api/my-n8n/machine/node-catalog/:tool` — tool ∈ search_nodes, get_node, search_templates, get_template, validate_node, tools_documentation; body = the tool's args (e.g. `{"query":"gmail"}`, `{"nodeType":"n8n-nodes-base.gmail"}`) |
|
|
43
|
-
|
|
44
|
-
## Writes (Support Plus+, consent + quotas + audit apply identically)
|
|
45
|
-
|
|
46
|
-
| Action | Endpoint |
|
|
47
|
-
|---|---|
|
|
48
|
-
| Validate workflow JSON | `POST /api/my-n8n/machine/workflows/validate` `{workflow}` |
|
|
49
|
-
| Create inactive `[CLI]` draft | `POST /api/my-n8n/machine/workflows/draft` `{name, nodes, connections, settings?}` |
|
|
50
|
-
| Update a draft in place | `PATCH /api/my-n8n/machine/workflows/:id` `{name?, nodes, connections, settings?}` |
|
|
51
|
-
| Activate / deactivate | `POST /api/my-n8n/machine/workflows/:id/activate` `{active: true|false}` |
|
|
52
|
-
| Test-fire the production webhook | `POST /api/my-n8n/machine/workflows/:id/test-fire` `{payload}` |
|
|
53
|
-
| Promote draft → live (webhookIds preserved) | `POST /api/my-n8n/machine/workflows/:id/promote` `{draftId}` (`:id` = LIVE id) |
|
|
54
|
-
| Roll a promote back | `POST /api/my-n8n/machine/operations/:operationId/rollback` |
|
|
55
|
-
| Delete an inactive draft | `DELETE /api/my-n8n/machine/workflows/:id` |
|
|
56
|
-
| Create a datatable (pass workflowId!) | `POST /api/my-n8n/machine/datatables` `{name, columns, workflowId?}` |
|
|
57
|
-
| Add a column / write rows | `POST …/datatables/:id/columns` · `POST …/datatables/:id/rows` `{mode, rows?/filter?/data?}` |
|
|
58
|
-
| Provision Postgres + n8n credential | `POST /api/my-n8n/machine/pg-credentials` |
|
|
59
|
-
| n8n Agents: setup status (call first) | `GET /api/my-n8n/machine/agents/status` |
|
|
60
|
-
| n8n Agents: n8n's own description + input schema per relayed tool | `GET /api/my-n8n/machine/agents/tools?name=` |
|
|
61
|
-
| n8n Agents: run one n8n agent tool (reads, create/mutate/validate/call/publish…) | `POST /api/my-n8n/machine/agents/call` `{tool, arguments}` |
|
|
62
|
-
|
|
63
|
-
## Error contract (same as the tools)
|
|
64
|
-
|
|
65
|
-
- `403 consent_required` + `flag` + `settingsUrl` → relay the link, re-check
|
|
66
|
-
after the user toggles (a null `settingsUrl` means contact support).
|
|
67
|
-
- `403 missingScopes` → token predates n8n support — reconnect from
|
|
68
|
-
hub.awesomate.ai/claude.
|
|
69
|
-
- `429 quota_exceeded` → the plan's daily cap; stop, don't retry-loop.
|
|
70
|
-
- `503 node_catalog_unavailable` → use `references/vendor/` knowledge.
|
|
71
|
-
- `404` on a path in this table → check the path against this file
|
|
72
|
-
EXACTLY; do not probe variations. This table is the n8n surface the
|
|
73
|
-
`awesomate_n8n_*` tools wrap — if something is missing from it, the fix is
|
|
74
|
-
to add the verified path here, not to guess at one.
|
|
75
|
-
|
|
76
|
-
The skill's judgment (six-phase loop, approval gates, testing policy,
|
|
77
|
-
never-activate-a-copy) applies unchanged — only the transport differs.
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Upgrade loop — changing a workflow that already exists
|
|
2
|
-
|
|
3
|
-
Use this whenever the target workflow is not a fresh build: a live self-built
|
|
4
|
-
workflow, a draft mid-iteration, or a workflow the user built in the n8n UI.
|
|
5
|
-
|
|
6
|
-
## Invariants (violating any of these breaks external callers)
|
|
7
|
-
|
|
8
|
-
- **Never edit a live workflow directly.** Live changes go draft → test →
|
|
9
|
-
promote. `update_draft` on a live workflow is refused (409, below).
|
|
10
|
-
- **Never activate the copy.** A duplicated draft has different webhook URLs;
|
|
11
|
-
activating it instead of promoting strands every external caller.
|
|
12
|
-
- **Promote preserves webhookIds** — that is the whole point. The live id and
|
|
13
|
-
its production URLs never change across a promote.
|
|
14
|
-
- **Promote only works between self-built (`awm:client-cli`) workflows.**
|
|
15
|
-
UI-built workflows need the duplication path at the bottom.
|
|
16
|
-
- **Save the `operationId`** returned by promote — it is the only rollback
|
|
17
|
-
handle.
|
|
18
|
-
|
|
19
|
-
## Which path
|
|
20
|
-
|
|
21
|
-
| Situation | Path |
|
|
22
|
-
|---|---|
|
|
23
|
-
| Iterating on an INACTIVE draft (not yet promoted/activated) | `update_draft` in place — no new workflow ids |
|
|
24
|
-
| Changing a LIVE self-built workflow | Duplicate → draft loop → promote (steps below) |
|
|
25
|
-
| Changing a workflow built in the n8n UI (no `awm:client-cli` tag) | Duplicate into a CLI draft; coordinated URL cutover |
|
|
26
|
-
| Agency-managed workflow (`agency_managed` 403) | Read/explain; may be switched off or on when the user asks; other changes go through Awesomate support |
|
|
27
|
-
|
|
28
|
-
## Iterating on a draft: `update_draft`
|
|
29
|
-
|
|
30
|
-
`awesomate_n8n_deploy {action:'update_draft', workflowId,
|
|
31
|
-
workflowJson:{name?, nodes, connections, settings?}}`
|
|
32
|
-
|
|
33
|
-
- **Full JSON replace** — nodes + connections replace the draft's entirely;
|
|
34
|
-
send the complete workflow, not a delta.
|
|
35
|
-
- Settings are **whitelisted server-side**: unknown keys and null/undefined
|
|
36
|
-
values are dropped, `saveExecutionProgress` is pinned false (2TB WAL
|
|
37
|
-
incident), `executionOrder` defaults to `v1`. Omit a key to keep the
|
|
38
|
-
draft's current value.
|
|
39
|
-
- Refusals: **409 `workflow_active`** — the workflow is live; do NOT
|
|
40
|
-
deactivate it to force the edit, use the promote path below. 403
|
|
41
|
-
`not_self_built` — only `awm:client-cli` workflows. 403 `agency_managed`.
|
|
42
|
-
- Validate (`{action:'validate', workflowJson}`) before every update; re-test
|
|
43
|
-
after (the full Phase 5 testing policy from SKILL.md applies).
|
|
44
|
-
|
|
45
|
-
## Upgrading a LIVE self-built workflow
|
|
46
|
-
|
|
47
|
-
1. **Duplicate.** Fetch the live workflow's full JSON
|
|
48
|
-
(`awesomate_n8n_workflows {id, detail:'full'}` or
|
|
49
|
-
`GET /api/my-n8n/workflows/:id`), then `create_draft` with the modified
|
|
50
|
-
JSON — new name, e.g. same name; the hub adds `[CLI] ` + fresh test
|
|
51
|
-
webhookIds automatically.
|
|
52
|
-
2. **Iterate.** Apply the requested changes; validate. Further revisions go
|
|
53
|
-
through `update_draft` on the draft — no need to delete and recreate.
|
|
54
|
-
3. **Test the draft on its own (test) URLs.** Activate the DRAFT (approval
|
|
55
|
-
gate applies), then `awesomate_n8n_test {workflowId:<draft id>, payload}`.
|
|
56
|
-
Full testing policy: inspect node-by-node output, happy path + empty +
|
|
57
|
-
malformed payloads, confirm error branches routed.
|
|
58
|
-
4. **Present the diff — mandatory before promote.** Human-readable, covering
|
|
59
|
-
ALL of: nodes added / removed / changed (name + what changed), credential
|
|
60
|
-
changes (added, swapped, removed), and a behavior summary in the user's
|
|
61
|
-
terms (what the workflow will now do differently). **Wait for explicit
|
|
62
|
-
approval.** No diff, no promote.
|
|
63
|
-
5. **Promote.** `awesomate_n8n_deploy {action:'promote',
|
|
64
|
-
workflowId:<LIVE id>, draftId:<draft id>}`. The hub snapshots both
|
|
65
|
-
workflows, swaps the draft's body into the live id (preserving its
|
|
66
|
-
webhookIds so external URLs never change), restores activation, and
|
|
67
|
-
archives the draft as `[promoted <date>]`. Save the returned
|
|
68
|
-
`operationId`.
|
|
69
|
-
6. **Verify against the ORIGINAL URL.** `awesomate_n8n_test` against the
|
|
70
|
-
LIVE workflow id — the original production URL must still respond, and
|
|
71
|
-
the execution must show the NEW behavior (inspect node output; a 200
|
|
72
|
-
alone proves nothing). On any failure:
|
|
73
|
-
`{action:'rollback', operationId}` restores both workflows to their
|
|
74
|
-
pre-promote state, then investigate — do not iterate on the live body.
|
|
75
|
-
7. **Cleanup.** Once the user confirms the promoted version, `delete_draft`
|
|
76
|
-
the archived `[promoted …]` draft (it is deactivated and still
|
|
77
|
-
CLI-tagged), or leave it as a manual fallback if they prefer.
|
|
78
|
-
|
|
79
|
-
## UI-built workflows (no `awm:client-cli` tag)
|
|
80
|
-
|
|
81
|
-
Promote refuses these. Instead:
|
|
82
|
-
|
|
83
|
-
1. Fetch the UI workflow's JSON; `create_draft` a CLI copy with the changes.
|
|
84
|
-
2. Test the draft fully (steps 2–3 above).
|
|
85
|
-
3. The draft becomes the live workflow going forward — its webhook URL
|
|
86
|
-
DIFFERS from the original. Coordinate the cutover with the user: they
|
|
87
|
-
update every external caller to the new URL, confirm traffic arrives on
|
|
88
|
-
the new workflow, then deactivate the old UI workflow themselves (it is
|
|
89
|
-
theirs — do not delete it).
|
|
90
|
-
|
|
91
|
-
## Errors you will hit
|
|
92
|
-
|
|
93
|
-
| Code | Meaning | Do |
|
|
94
|
-
|---|---|---|
|
|
95
|
-
| 409 `workflow_active` | `update_draft` on a live workflow | Promote path, never deactivate-to-edit |
|
|
96
|
-
| 403 `not_self_built` | No `awm:client-cli` tag | UI-built duplication path |
|
|
97
|
-
| 403 `agency_managed` | Awesomate-deployed workflow | Explain; offer to switch it off or on if that is what they want; route changes to support |
|
|
98
|
-
| 429 `quota_exceeded` | Daily plan cap | Tell the user; never retry-loop |
|