@lovinka/deployik-mcp 0.3.0 → 0.3.1

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/README.md CHANGED
@@ -68,10 +68,10 @@ Get a token at **Account → Access tokens** in Deployik. The token is shown onc
68
68
 
69
69
  ## What it does
70
70
 
71
- - **~32 thin tools** — one per Deployik HTTP endpoint (projects, deployments, env vars, secrets, domains, auto-build, password protection, volumes, analytics, email, workspaces, tokens, GitHub).
71
+ - **~37 thin tools** — one per Deployik HTTP endpoint (projects, deployments, env vars, secrets, domains, auto-build, password protection, volumes, analytics, email, dashboard groups, tokens, GitHub).
72
72
  - **12 workflow tools** — `setup_project_from_repo`, `deploy_project`, `set_secret`, `tail_latest_logs`, `debug_failed_deployment`, `get_project_health`, `init_in_repo`, `whats_my_url`, `whats_broken`, `redeploy`, and more.
73
73
  - **Bundled knowledge** — Deployik's how-to recipes ship as MCP prompts (`deployik_recipe_*`), plus three tools: `list_recipes`, `get_recipe(topic)`, and **`find_help(question)`** which routes free-form English ("where do I set the Stripe key for the live site?") to the right recipe automatically.
74
- - **Repo binding** — first call inside a git repo with a unique-match `origin` auto-writes `.deployik.json` (committed, just project + workspace + schema URL) and gitignores the private `.deployik/` directory. Self-healing `.gitignore`.
74
+ - **Repo binding** — first call inside a git repo with a unique-match `origin` auto-writes `.deployik.json` (committed, just project + dashboard group + schema URL) and gitignores the private `.deployik/` directory. Self-healing `.gitignore`.
75
75
  - **Tiered safety** — destructive operations require `confirm: true`; production-touching operations also require `confirm_name: <project>`. Every destructive call is logged to `.deployik/audit.log`.
76
76
  - **Loose English** — `prod` / `live` / `staging` / `dev` / `both` / `everywhere` all normalize to the right scope automatically.
77
77
 
@@ -99,7 +99,7 @@ Project ↔ repo state is split into two layers — **public** (commit it) and
99
99
  │ Deployik project this folder deploys to.
100
100
  └── .deployik/ PRIVATE. Auto-added to .gitignore (and re-added on every
101
101
  MCP call if a teammate clobbers the .gitignore line).
102
- ├── cache.json Project + workspace list (1h TTL).
102
+ ├── cache.json Project + dashboard group list (1h TTL).
103
103
  ├── token Optional token fallback (mode 0600) — only used if
104
104
  DEPLOYIK_TOKEN env var is unset.
105
105
  └── audit.log Append-only ledger of destructive calls (secret values
@@ -17,7 +17,7 @@ export function hintForStatus(status, endpoint) {
17
17
  return "Token is missing, expired, or revoked. Set DEPLOYIK_TOKEN to a fresh `dpk_…` token from Account → Access tokens.";
18
18
  }
19
19
  if (status === 403) {
20
- return "Token is valid but the owner cannot access this resource. Check the project's workspace membership.";
20
+ return "Token is valid but the owner cannot access this resource. Check the project's dashboard group membership.";
21
21
  }
22
22
  if (status === 404) {
23
23
  if (endpoint.includes("/projects/")) {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,IAAI,CAAU;IACd,IAAI,CAAU;IAEvB,YAAY,IAAyF;QACnG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qGAAqG,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,2JAA2J,CAAC;QACrK,CAAC;QACD,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,IAAI,CAAU;IACd,IAAI,CAAU;IAEvB,YAAY,IAAyF;QACnG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,2GAA2G,CAAC;IACrH,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,2JAA2J,CAAC;QACrK,CAAC;QACD,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -7,11 +7,11 @@ export const RECIPE_FILES = [
7
7
  },
8
8
  {
9
9
  file: "api-actions.md",
10
- content: "# Deployik — API actions\n\nAction mode for the goals in [click-paths.md](click-paths.md). Each entry has the endpoint, payload shape, safety tier, and the exact `helpers/deployik` invocation.\n\n## Helper script\n\nAlways invoke the API via `./helpers/deployik` (relative to this skill's directory) — never paste tokens into raw curl. The wrapper:\n\n- Reads `~/.config/deployik/config` (`DEPLOYIK_BASE_URL`, `DEPLOYIK_TOKEN`)\n- Sends `Authorization: Bearer $DEPLOYIK_TOKEN`\n- Prints `HTTP <status>` to stderr, body to stdout\n- Exits non-zero on HTTP error\n- Pretty-prints JSON if `jq` is installed\n\nUsage:\n\n```\ndeployik api <METHOD> <path> [json-body]\n```\n\nIf `~/.config/deployik/config` is missing, stop and direct the user to create a token (Sidebar → **Access tokens** → **Create token**) before retrying.\n\n## Safety tiers\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently — read-only |\n| `POST/PUT/PATCH` non-production | Print payload, ask \"Do this?\" — wait for affirmative reply |\n| `POST/PUT/PATCH` production env | Flag `**PRODUCTION**`, ask explicit yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) |\n\n## Resolving project id\n\nMost endpoints need `{id}` (a ULID). When the user names a project, run:\n\n```\ndeployik api GET /api/projects\n```\n\n…and find the row whose `name` matches. Use its `id`.\n\n---\n\n## create-project\n\n**Goal:** [click-paths.md#create-project](click-paths.md#create-project)\n\n**Endpoint:** `POST /api/projects`\n**Tier:** Mutation — confirm before executing.\n\n**Body shape:**\n\n```json\n{\n \"name\": \"my-app\",\n \"github_repo\": \"my-repo\",\n \"github_owner\": \"my-org\",\n \"branch\": \"main\",\n \"framework\": \"nextjs\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"\",\n \"output_directory\": \".next\",\n \"build_command\": \"bun run build\",\n \"install_command\": \"bun install\",\n \"node_version\": \"22\",\n \"organization_id\": \"(optional — defaults to personal workspace)\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"my-app\",\"github_repo\":\"my-repo\",\"github_owner\":\"my-org\",\"branch\":\"main\",\"framework\":\"nextjs\",\"package_manager\":\"auto\",\"output_directory\":\".next\",\"build_command\":\"bun run build\",\"install_command\":\"bun install\",\"node_version\":\"22\"}'\n```\n\n**Behavior:** creates the project, auto-domain, GitHub webhook (best-effort), and triggers an initial preview deployment.\n\n---\n\n## custom-domain\n\n**Goal:** [click-paths.md#custom-domain](click-paths.md#custom-domain)\n\n**Endpoints:**\n- `POST /api/projects/{id}/domains` — adds the row\n- `POST /api/projects/{id}/domains/{did}/verify` — runs DNS check + cert provisioning (returns 202; final result streams over WebSocket but the synchronous response confirms acceptance)\n- `PATCH /api/projects/{id}/domains/{did}` `{is_primary: true}` — optional, mark as primary\n\n**Tier:** Mutation — confirm before each step.\n\n**Body shape (POST):**\n\n```json\n{ \"domain\": \"example.com\", \"environment\": \"production\" }\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects/{id}/domains '{\"domain\":\"example.com\",\"environment\":\"production\"}'\ndeployik api POST /api/projects/{id}/domains/{did}/verify\n```\n\n**Critical reminder for the user:** the DNS A-record at the registrar must point to the VPS IP **before** Verify, otherwise it fails. Tell them the click-paths recipe explains where to add it.\n\n---\n\n## env-vars\n\n**Goal:** [click-paths.md#env-vars](click-paths.md#env-vars)\n\n**Endpoints:**\n- `POST /api/projects/{id}/env` — single upsert (env var)\n- `POST /api/projects/{id}/secrets` — single upsert (secret)\n- `DELETE /api/projects/{id}/env/{key}?environment=preview|production|shared` — destructive\n- `PUT /api/projects/{id}/env` — bulk replace (don't use unless the user says \"replace all\")\n\n**Tier:** Mutation — confirm. **Production environment writes get extra production-flag confirmation.**\n\n**Body shape (single upsert):**\n\n```json\n{ \"key\": \"STRIPE_PUBLIC\", \"value\": \"pk_test_xxx\", \"environment\": \"preview\" }\n```\n\n**Environment values:** `shared` (applies to both), `preview`, or `production`. If the user says \"preview\", use `preview`; if \"production\" or \"live\", use `production`. If unsure, ask.\n\n**Invocations:**\n\n```\ndeployik api POST /api/projects/{id}/env '{\"key\":\"STRIPE_PUBLIC\",\"value\":\"pk_test_xxx\",\"environment\":\"preview\"}'\ndeployik api POST /api/projects/{id}/secrets '{\"key\":\"DATABASE_URL\",\"value\":\"postgres://...\",\"environment\":\"production\"}'\ndeployik api DELETE /api/projects/{id}/env/STRIPE_PUBLIC?environment=preview\n```\n\n**Constraint:** secrets refuse `NEXT_PUBLIC_*` keys (they need to be in the variables store to bake into the build). Surface that error verbatim if the API returns it.\n\n**Heads-up:** changing a variable does NOT redeploy. After applying, ask the user if they want you to trigger a redeploy via the [#rollback](#rollback) endpoint with the latest commit sha.\n\n---\n\n## auto-deploy\n\n**Goal:** [click-paths.md#auto-deploy](click-paths.md#auto-deploy)\n\n**Endpoint:** `PUT /api/projects/{id}/auto-build`\n**Tier:** Mutation — confirm.\n\n**Body shape:**\n\n```json\n{\n \"enabled\": true,\n \"production_branch\": \"main\",\n \"preview_branches\": \"*\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api PUT /api/projects/{id}/auto-build '{\"enabled\":true,\"production_branch\":\"main\",\"preview_branches\":\"*\"}'\n```\n\n**Side effect:** Deployik creates a webhook on the GitHub repo. If the user hasn't granted the `admin:repo_hook` scope to the OAuth app, this errors — ask them to sign out and back in in the dashboard, then retry.\n\nTo disable: `deployik api DELETE /api/projects/{id}/auto-build` (deletes config + webhook). Treat as destructive — typed confirmation.\n\n---\n\n## password-protection\n\n**Goal:** [click-paths.md#password-protection](click-paths.md#password-protection)\n\n**Endpoints:**\n- `PUT /api/projects/{id}/protection` — enable/disable per environment\n- `POST /api/projects/{id}/protection/regenerate` — new password (destructive — require typed confirmation, the old password stops working at this point)\n\n**Tier:** PUT = mutation/confirm. Regenerate = destructive/typed-confirm.\n\n**Body shapes:**\n\n```json\n{ \"environment\": \"preview\", \"enabled\": true }\n{ \"environment\": \"production\", \"enabled\": false }\n```\n\n**Invocations:**\n\n```\ndeployik api PUT /api/projects/{id}/protection '{\"environment\":\"preview\",\"enabled\":true}'\ndeployik api POST /api/projects/{id}/protection/regenerate '{\"environment\":\"preview\"}'\n```\n\n**Response on enable / regenerate:** the JSON includes the plaintext password under `password`. Surface it to the user with a warning: this is the only time the API will return it.\n\n---\n\n## contact-form-email\n\n**Goal:** [click-paths.md#contact-form-email](click-paths.md#contact-form-email)\n\n**Endpoints:**\n- `GET /api/projects/{id}/email` — fetch current settings + the **AI install prompt** (auto-generated server-side from the project's framework, package manager, root directory, and reCAPTCHA site key)\n- `PUT /api/projects/{id}/email` — save SMTP host/port/security/user, From address + name, contact recipients, reCAPTCHA site key, score threshold; the SMTP password and reCAPTCHA secret are persisted as encrypted secrets\n- `POST /api/projects/{id}/email/test-smtp` — send a test email through the saved SMTP credentials\n\n**Tier:** PUT = mutation/confirm. test-smtp = mutation/confirm (it actually sends an email — usually fine, but flag it explicitly because the user might be configuring against a live mailbox). GET = read silent.\n\n**Body shape (PUT):**\n\n```json\n{\n \"provider\": \"webglobe\",\n \"smtp_host\": \"smtp.webglobe.cz\",\n \"smtp_port\": 587,\n \"smtp_security\": \"starttls\",\n \"smtp_user\": \"noreply@example.com\",\n \"smtp_password\": \"<paste, only sent on save>\",\n \"email_from\": \"noreply@example.com\",\n \"email_from_name\": \"My Site\",\n \"contact_email_to\": \"owner@example.com\",\n \"recaptcha_site_key\": \"6Lc...public\",\n \"recaptcha_secret\": \"6Lc...secret\",\n \"recaptcha_mode\": \"v3\",\n \"recaptcha_score_threshold\": 0.5\n}\n```\n\n**Provider values:** `webglobe` (defaults derived from the project's primary production domain) or `smtp` (custom — user supplies all fields). Use `webglobe` unless the user says otherwise.\n\n**Security values:** `starttls` (port 587), `tls` (port 465), `none` (only for explicit testing — never recommend it).\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/email\ndeployik api PUT /api/projects/{id}/email '{\"provider\":\"webglobe\",\"smtp_host\":\"smtp.webglobe.cz\",\"smtp_port\":587,\"smtp_security\":\"starttls\",\"smtp_user\":\"noreply@example.com\",\"smtp_password\":\"<...>\",\"email_from\":\"noreply@example.com\",\"email_from_name\":\"My Site\",\"contact_email_to\":\"owner@example.com\",\"recaptcha_site_key\":\"<site>\",\"recaptcha_secret\":\"<secret>\",\"recaptcha_mode\":\"v3\",\"recaptcha_score_threshold\":0.5}'\ndeployik api POST /api/projects/{id}/email/test-smtp\n```\n\n**Response from GET:** includes the field `ai_install_prompt` (or similar — confirm the exact key by reading the response). This is a fully-formed prompt the user can paste into any AI coding assistant to install the contact-form code into their site. **When the user asks for the AI prompt, surface this string verbatim** — do not paraphrase or shorten it.\n\n**Workflow when guiding action mode for this recipe:**\n1. Ask the user for the four SMTP values from the Webglobe portal and the two reCAPTCHA keys from Google. Offer to walk them through Parts 1 and 2 of the click-paths recipe if they don't have them yet.\n2. Print the PUT payload (with **password and secret masked** as `***` in the preview) and ask \"Do this?\"\n3. On confirm, send the PUT.\n4. Ask if they want to verify by sending a test email; if yes, run POST `/email/test-smtp`.\n5. If the test succeeds, fetch GET `/email` and surface the AI install prompt for Part 4 of the recipe.\n6. If the test fails, surface the error from `payload.settings.last_test_error` verbatim and offer to walk through troubleshooting.\n\n**Sensitive values:** `smtp_password` and `recaptcha_secret` are the only truly sensitive fields. Treat them like passwords. If the user pastes them in chat, complete the action then suggest rotating them.\n\n---\n\n## attach-postgres\n\n**Goal:** [click-paths.md#attach-postgres](click-paths.md#attach-postgres)\n\n**Endpoints:**\n- `GET /api/projects/{id}/services` — list services attached to the project\n- `POST /api/projects/{id}/services` — attach a service (v1: postgres)\n- `DELETE /api/projects/{id}/services/{env}` — **destructive** — detach + drop volume\n- `GET /api/projects/{id}/services/{env}/credentials` — reveal password + DSN + SSH tunnel command (audited)\n- `POST /api/projects/{id}/services/{env}/regenerate-password` — rotate password (container keeps old password until next deploy/restart)\n- `POST /api/projects/{id}/services/{env}/restart` — recreate container, preserve data\n- `POST /api/projects/{id}/services/{env}/reset` — **destructive** — wipe volume, requires `{\"confirm\":\"<project>-<env>\"}` body\n\n**Tier:**\n- `GET` list — silent.\n- `POST` attach — mutation, confirm.\n- `POST` restart, regenerate-password — mutation, confirm. **Production gets the production flag.**\n- `DELETE` detach and `POST` reset — typed-string confirm matching `<project>-<env>` even in preview. Do **not** run these as a shortcut for \"start fresh\" — there is no undo.\n\n**Body shapes:**\n\n```json\n// Attach\n{ \"environment\": \"preview\", \"type\": \"postgres\" }\n\n// Reset (server requires the typed string)\n{ \"confirm\": \"<project_name>-<environment>\" }\n```\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/services\ndeployik api POST /api/projects/{id}/services '{\"environment\":\"preview\",\"type\":\"postgres\"}'\ndeployik api GET /api/projects/{id}/services/preview/credentials\ndeployik api POST /api/projects/{id}/services/preview/restart\ndeployik api POST /api/projects/{id}/services/preview/regenerate-password\ndeployik api POST /api/projects/{id}/services/production/reset '{\"confirm\":\"my-app-production\"}'\ndeployik api DELETE /api/projects/{id}/services/preview\n```\n\n**After attach — don't forget the deploy:** attach is just a row in the database. The container only starts on the next deployment for that environment (the pipeline's `EnsureServices` hook). Tell the user to trigger one: `deployik api POST /api/projects/{id}/deployments '{\"environment\":\"preview\"}'`.\n\n**Project rename is blocked while attached.** `PATCH /api/projects/{id}` with a new `name` will 409 if any service row exists for the project. Detach first.\n\n---\n\n## rollback\n\n**Goal:** [click-paths.md#rollback](click-paths.md#rollback)\n\n**Endpoints:**\n- `GET /api/projects/{id}/deployments?environment=production&status=live` — find the previous good deployment\n- `POST /api/projects/{id}/deployments` — trigger a redeploy of a specific commit\n\n**Tier:** Mutation — confirm. **Production redeploys flagged as production.**\n\n**Body shape (POST):**\n\n```json\n{ \"environment\": \"production\", \"branch\": \"main\", \"commit_sha\": \"abc1234\" }\n```\n\nIf the user wants to roll back to \"the previous good one\", list deployments first and pick the most recent `live` row before the regression. Show its commit sha and message in the confirmation prompt.\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/deployments?environment=production&status=live&limit=5\ndeployik api POST /api/projects/{id}/deployments '{\"environment\":\"production\",\"branch\":\"main\",\"commit_sha\":\"abc1234\"}'\n```\n\n---\n\n## Errors\n\nWhen the API returns a non-2xx status:\n\n- Print the HTTP status and the JSON body (the helper does this automatically — let the user see it).\n- **Don't retry silently.** Most errors are user-meaningful (e.g. `403` from auto-build = missing OAuth scope, `409` from domain add = duplicate, `400` from secret = `NEXT_PUBLIC_` not allowed).\n- Suggest the next step based on the error message rather than guessing or hand-rolling a fix.\n",
10
+ content: "# Deployik — API actions\n\nAction mode for the goals in [click-paths.md](click-paths.md). Each entry has the endpoint, payload shape, safety tier, and the exact `helpers/deployik` invocation.\n\n## Helper script\n\nAlways invoke the API via `./helpers/deployik` (relative to this skill's directory) — never paste tokens into raw curl. The wrapper:\n\n- Reads `~/.config/deployik/config` (`DEPLOYIK_BASE_URL`, `DEPLOYIK_TOKEN`)\n- Sends `Authorization: Bearer $DEPLOYIK_TOKEN`\n- Prints `HTTP <status>` to stderr, body to stdout\n- Exits non-zero on HTTP error\n- Pretty-prints JSON if `jq` is installed\n\nUsage:\n\n```\ndeployik api <METHOD> <path> [json-body]\n```\n\nIf `~/.config/deployik/config` is missing, stop and direct the user to create a token (Sidebar → **Access tokens** → **Create token**) before retrying.\n\n## Safety tiers\n\n| Verb / target | Rule |\n|---------------|------|\n| `GET *` | Execute silently — read-only |\n| `POST/PUT/PATCH` non-production | Print payload, ask \"Do this?\" — wait for affirmative reply |\n| `POST/PUT/PATCH` production env | Flag `**PRODUCTION**`, ask explicit yes/no |\n| `DELETE *` and `POST .../regenerate` | Require typed string confirmation matching the target name (e.g. `yes delete example.com`) |\n\n## Resolving project id\n\nMost endpoints need `{id}` (a ULID). When the user names a project, run:\n\n```\ndeployik api GET /api/projects\n```\n\n…and find the row whose `name` matches. Use its `id`.\n\n---\n\n## create-project\n\n**Goal:** [click-paths.md#create-project](click-paths.md#create-project)\n\n**Endpoint:** `POST /api/projects`\n**Tier:** Mutation — confirm before executing.\n\n**Body shape:**\n\n```json\n{\n \"name\": \"my-app\",\n \"github_repo\": \"my-repo\",\n \"github_owner\": \"my-org\",\n \"branch\": \"main\",\n \"framework\": \"nextjs\",\n \"package_manager\": \"auto\",\n \"root_directory\": \"\",\n \"output_directory\": \".next\",\n \"build_command\": \"bun run build\",\n \"install_command\": \"bun install\",\n \"node_version\": \"22\",\n \"group_id\": \"(optional — dashboard group id; defaults to your personal group)\",\n \"organization_id\": \"(deprecated alias for group_id)\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects '{\"name\":\"my-app\",\"github_repo\":\"my-repo\",\"github_owner\":\"my-org\",\"branch\":\"main\",\"framework\":\"nextjs\",\"package_manager\":\"auto\",\"output_directory\":\".next\",\"build_command\":\"bun run build\",\"install_command\":\"bun install\",\"node_version\":\"22\"}'\n```\n\n**Behavior:** creates the project, auto-domain, GitHub webhook (best-effort), and triggers an initial preview deployment.\n\n**Groups:** the Projects dashboard uses dashboard groups. Call `GET /api/groups`\nto list available group ids. To create into a specific dashboard tab, pass that\ngroup's id as `group_id` (the API still accepts the legacy field name\n`organization_id` for backward compatibility).\n\n---\n\n## custom-domain\n\n**Goal:** [click-paths.md#custom-domain](click-paths.md#custom-domain)\n\n**Endpoints:**\n- `POST /api/projects/{id}/domains` — adds the row\n- `POST /api/projects/{id}/domains/{did}/verify` — runs DNS check + cert provisioning (returns 202; final result streams over WebSocket but the synchronous response confirms acceptance)\n- `PATCH /api/projects/{id}/domains/{did}` `{is_primary: true}` — optional, mark as primary\n\n**Tier:** Mutation — confirm before each step.\n\n**Body shape (POST):**\n\n```json\n{ \"domain\": \"example.com\", \"environment\": \"production\" }\n```\n\n**Invocation:**\n\n```\ndeployik api POST /api/projects/{id}/domains '{\"domain\":\"example.com\",\"environment\":\"production\"}'\ndeployik api POST /api/projects/{id}/domains/{did}/verify\n```\n\n**Critical reminder for the user:** the DNS A-record at the registrar must point to the VPS IP **before** Verify, otherwise it fails. Tell them the click-paths recipe explains where to add it.\n\n---\n\n## env-vars\n\n**Goal:** [click-paths.md#env-vars](click-paths.md#env-vars)\n\n**Endpoints:**\n- `POST /api/projects/{id}/env` — single upsert (env var)\n- `POST /api/projects/{id}/secrets` — single upsert (secret)\n- `DELETE /api/projects/{id}/env/{key}?environment=preview|production|shared` — destructive\n- `PUT /api/projects/{id}/env` — bulk replace (don't use unless the user says \"replace all\")\n\n**Tier:** Mutation — confirm. **Production environment writes get extra production-flag confirmation.**\n\n**Body shape (single upsert):**\n\n```json\n{ \"key\": \"STRIPE_PUBLIC\", \"value\": \"pk_test_xxx\", \"environment\": \"preview\" }\n```\n\n**Environment values:** `shared` (applies to both), `preview`, or `production`. If the user says \"preview\", use `preview`; if \"production\" or \"live\", use `production`. If unsure, ask.\n\n**Invocations:**\n\n```\ndeployik api POST /api/projects/{id}/env '{\"key\":\"STRIPE_PUBLIC\",\"value\":\"pk_test_xxx\",\"environment\":\"preview\"}'\ndeployik api POST /api/projects/{id}/secrets '{\"key\":\"DATABASE_URL\",\"value\":\"postgres://...\",\"environment\":\"production\"}'\ndeployik api DELETE /api/projects/{id}/env/STRIPE_PUBLIC?environment=preview\n```\n\n**Constraint:** secrets refuse `NEXT_PUBLIC_*` keys (they need to be in the variables store to bake into the build). Surface that error verbatim if the API returns it.\n\n**Heads-up:** changing a variable does NOT redeploy. After applying, ask the user if they want you to trigger a redeploy via the [#rollback](#rollback) endpoint with the latest commit sha.\n\n---\n\n## auto-deploy\n\n**Goal:** [click-paths.md#auto-deploy](click-paths.md#auto-deploy)\n\n**Endpoint:** `PUT /api/projects/{id}/auto-build`\n**Tier:** Mutation — confirm.\n\n**Body shape:**\n\n```json\n{\n \"enabled\": true,\n \"production_branch\": \"main\",\n \"preview_branches\": \"*\"\n}\n```\n\n**Invocation:**\n\n```\ndeployik api PUT /api/projects/{id}/auto-build '{\"enabled\":true,\"production_branch\":\"main\",\"preview_branches\":\"*\"}'\n```\n\n**Side effect:** Deployik creates a webhook on the GitHub repo. If the user hasn't granted the `admin:repo_hook` scope to the OAuth app, this errors — ask them to sign out and back in in the dashboard, then retry.\n\nTo disable: `deployik api DELETE /api/projects/{id}/auto-build` (deletes config + webhook). Treat as destructive — typed confirmation.\n\n---\n\n## password-protection\n\n**Goal:** [click-paths.md#password-protection](click-paths.md#password-protection)\n\n**Endpoints:**\n- `PUT /api/projects/{id}/protection` — enable/disable per environment\n- `POST /api/projects/{id}/protection/regenerate` — new password (destructive — require typed confirmation, the old password stops working at this point)\n\n**Tier:** PUT = mutation/confirm. Regenerate = destructive/typed-confirm.\n\n**Body shapes:**\n\n```json\n{ \"environment\": \"preview\", \"enabled\": true }\n{ \"environment\": \"production\", \"enabled\": false }\n```\n\n**Invocations:**\n\n```\ndeployik api PUT /api/projects/{id}/protection '{\"environment\":\"preview\",\"enabled\":true}'\ndeployik api POST /api/projects/{id}/protection/regenerate '{\"environment\":\"preview\"}'\n```\n\n**Response on enable / regenerate:** the JSON includes the plaintext password under `password`. Surface it to the user with a warning: this is the only time the API will return it.\n\n---\n\n## contact-form-email\n\n**Goal:** [click-paths.md#contact-form-email](click-paths.md#contact-form-email)\n\n**Endpoints:**\n- `GET /api/projects/{id}/email` — fetch current settings + the **AI install prompt** (auto-generated server-side from the project's framework, package manager, root directory, and reCAPTCHA site key)\n- `PUT /api/projects/{id}/email` — save SMTP host/port/security/user, From address + name, contact recipients, reCAPTCHA site key, score threshold; the SMTP password and reCAPTCHA secret are persisted as encrypted secrets\n- `POST /api/projects/{id}/email/test-smtp` — send a test email through the saved SMTP credentials\n\n**Tier:** PUT = mutation/confirm. test-smtp = mutation/confirm (it actually sends an email — usually fine, but flag it explicitly because the user might be configuring against a live mailbox). GET = read silent.\n\n**Body shape (PUT):**\n\n```json\n{\n \"provider\": \"webglobe\",\n \"smtp_host\": \"smtp.webglobe.cz\",\n \"smtp_port\": 587,\n \"smtp_security\": \"starttls\",\n \"smtp_user\": \"noreply@example.com\",\n \"smtp_password\": \"<paste, only sent on save>\",\n \"email_from\": \"noreply@example.com\",\n \"email_from_name\": \"My Site\",\n \"contact_email_to\": \"owner@example.com\",\n \"recaptcha_site_key\": \"6Lc...public\",\n \"recaptcha_secret\": \"6Lc...secret\",\n \"recaptcha_mode\": \"v3\",\n \"recaptcha_score_threshold\": 0.5\n}\n```\n\n**Provider values:** `webglobe` (defaults derived from the project's primary production domain) or `smtp` (custom — user supplies all fields). Use `webglobe` unless the user says otherwise.\n\n**Security values:** `starttls` (port 587), `tls` (port 465), `none` (only for explicit testing — never recommend it).\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/email\ndeployik api PUT /api/projects/{id}/email '{\"provider\":\"webglobe\",\"smtp_host\":\"smtp.webglobe.cz\",\"smtp_port\":587,\"smtp_security\":\"starttls\",\"smtp_user\":\"noreply@example.com\",\"smtp_password\":\"<...>\",\"email_from\":\"noreply@example.com\",\"email_from_name\":\"My Site\",\"contact_email_to\":\"owner@example.com\",\"recaptcha_site_key\":\"<site>\",\"recaptcha_secret\":\"<secret>\",\"recaptcha_mode\":\"v3\",\"recaptcha_score_threshold\":0.5}'\ndeployik api POST /api/projects/{id}/email/test-smtp\n```\n\n**Response from GET:** includes the field `ai_install_prompt` (or similar — confirm the exact key by reading the response). This is a fully-formed prompt the user can paste into any AI coding assistant to install the contact-form code into their site. **When the user asks for the AI prompt, surface this string verbatim** — do not paraphrase or shorten it.\n\n**Workflow when guiding action mode for this recipe:**\n1. Ask the user for the four SMTP values from the Webglobe portal and the two reCAPTCHA keys from Google. Offer to walk them through Parts 1 and 2 of the click-paths recipe if they don't have them yet.\n2. Print the PUT payload (with **password and secret masked** as `***` in the preview) and ask \"Do this?\"\n3. On confirm, send the PUT.\n4. Ask if they want to verify by sending a test email; if yes, run POST `/email/test-smtp`.\n5. If the test succeeds, fetch GET `/email` and surface the AI install prompt for Part 4 of the recipe.\n6. If the test fails, surface the error from `payload.settings.last_test_error` verbatim and offer to walk through troubleshooting.\n\n**Sensitive values:** `smtp_password` and `recaptcha_secret` are the only truly sensitive fields. Treat them like passwords. If the user pastes them in chat, complete the action then suggest rotating them.\n\n---\n\n## attach-postgres\n\n**Goal:** [click-paths.md#attach-postgres](click-paths.md#attach-postgres)\n\n**Endpoints:**\n- `GET /api/projects/{id}/services` — list services attached to the project\n- `POST /api/projects/{id}/services` — attach a service (v1: postgres)\n- `DELETE /api/projects/{id}/services/{env}` — **destructive** — detach + drop volume\n- `GET /api/projects/{id}/services/{env}/credentials` — reveal password + DSN + SSH tunnel command (audited)\n- `POST /api/projects/{id}/services/{env}/regenerate-password` — rotate password (container keeps old password until next deploy/restart)\n- `POST /api/projects/{id}/services/{env}/restart` — recreate container, preserve data\n- `POST /api/projects/{id}/services/{env}/reset` — **destructive** — wipe volume, requires `{\"confirm\":\"<project>-<env>\"}` body\n\n**Tier:**\n- `GET` list — silent.\n- `POST` attach — mutation, confirm.\n- `POST` restart, regenerate-password — mutation, confirm. **Production gets the production flag.**\n- `DELETE` detach and `POST` reset — typed-string confirm matching `<project>-<env>` even in preview. Do **not** run these as a shortcut for \"start fresh\" — there is no undo.\n\n**Body shapes:**\n\n```json\n// Attach\n{ \"environment\": \"preview\", \"type\": \"postgres\" }\n\n// Reset (server requires the typed string)\n{ \"confirm\": \"<project_name>-<environment>\" }\n```\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/services\ndeployik api POST /api/projects/{id}/services '{\"environment\":\"preview\",\"type\":\"postgres\"}'\ndeployik api GET /api/projects/{id}/services/preview/credentials\ndeployik api POST /api/projects/{id}/services/preview/restart\ndeployik api POST /api/projects/{id}/services/preview/regenerate-password\ndeployik api POST /api/projects/{id}/services/production/reset '{\"confirm\":\"my-app-production\"}'\ndeployik api DELETE /api/projects/{id}/services/preview\n```\n\n**After attach — don't forget the deploy:** attach is just a row in the database. The container only starts on the next deployment for that environment (the pipeline's `EnsureServices` hook). Tell the user to trigger one: `deployik api POST /api/projects/{id}/deployments '{\"environment\":\"preview\"}'`.\n\n**Project rename is blocked while attached.** `PATCH /api/projects/{id}` with a new `name` will 409 if any service row exists for the project. Detach first.\n\n---\n\n## rollback\n\n**Goal:** [click-paths.md#rollback](click-paths.md#rollback)\n\n**Endpoints:**\n- `GET /api/projects/{id}/deployments?environment=production&status=live` — find the previous good deployment\n- `POST /api/projects/{id}/deployments` — trigger a redeploy of a specific commit\n\n**Tier:** Mutation — confirm. **Production redeploys flagged as production.**\n\n**Body shape (POST):**\n\n```json\n{ \"environment\": \"production\", \"branch\": \"main\", \"commit_sha\": \"abc1234\" }\n```\n\nIf the user wants to roll back to \"the previous good one\", list deployments first and pick the most recent `live` row before the regression. Show its commit sha and message in the confirmation prompt.\n\n**Invocations:**\n\n```\ndeployik api GET /api/projects/{id}/deployments?environment=production&status=live&limit=5\ndeployik api POST /api/projects/{id}/deployments '{\"environment\":\"production\",\"branch\":\"main\",\"commit_sha\":\"abc1234\"}'\n```\n\n---\n\n## Errors\n\nWhen the API returns a non-2xx status:\n\n- Print the HTTP status and the JSON body (the helper does this automatically — let the user see it).\n- **Don't retry silently.** Most errors are user-meaningful (e.g. `403` from auto-build = missing OAuth scope, `409` from domain add = duplicate, `400` from secret = `NEXT_PUBLIC_` not allowed).\n- Suggest the next step based on the error message rather than guessing or hand-rolling a fix.\n",
11
11
  },
12
12
  {
13
13
  file: "click-paths.md",
14
- content: "# Deployik — Where to click\n\nEight recipes for the most common things a user wants to do in the Deployik dashboard. If the user's goal isn't in the table, ask them warmly to rephrase, or check whether their goal is actually outside Deployik's scope.\n\nEvery recipe ends with a friendly \"stuck on a step?\" line. If the user uses it, ask which step and walk through that single step in fine detail (one click, one screenshot description, or one clarifying question at a time) before continuing.\n\n## What do you want to do?\n\n| Goal | Recipe |\n|------|--------|\n| I want to put my GitHub repo online | [#create-project](#create-project) |\n| I want to use my own domain (example.com) | [#custom-domain](#custom-domain) |\n| I want to set environment variables / API keys | [#env-vars](#env-vars) |\n| I want it to redeploy when I push to GitHub | [#auto-deploy](#auto-deploy) |\n| I want a password before people see the site | [#password-protection](#password-protection) |\n| I want my contact form to actually send emails (with spam protection) | [#contact-form-email](#contact-form-email) |\n| I want a Postgres database for my app | [#attach-postgres](#attach-postgres) |\n| I want to roll back to a previous version | [#rollback](#rollback) |\n\n---\n\n## create-project\n\n**Goal:** Connect a GitHub repository to Deployik and deploy it for the first time.\n\n**Route:** `/new`\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**Steps:**\n1. Click **+ New project** on the dashboard. The page lists every GitHub repo Deployik can see for your account.\n2. Search or scroll for the repo. Click **Import** on the row.\n3. *If Deployik detects a monorepo (multiple apps in subfolders):* a step appears asking which app to deploy. Click the one you want. Framework, root directory, and build command pre-fill.\n4. *If single-app:* this step is skipped automatically.\n5. On the configuration screen:\n - **Project name** — used as the preview subdomain. Lowercase letters, digits, and hyphens only.\n - **Branch** — usually `main` or `master`.\n - **Framework** — auto-detected. If wrong, change it; install/build/output reset to that framework's defaults.\n - **Workspace** — leave on Personal unless you've been added to a shared org.\n6. Click **Create project**. Deployik creates the auto-domain `{project-name}.preview.lovinka.com`, sets up the GitHub webhook for auto-deploy, and starts the first preview deployment.\n7. The page navigates to the project Overview. The **Preview** strip shows the deployment progressing through queued → building → live.\n\n**Gotcha:** the GitHub OAuth scope must include `admin:repo_hook` for the webhook step to work. If you signed in before that scope was added, sign out and back in.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#create-project](api-actions.md#create-project)\n\n---\n\n## custom-domain\n\n**Goal:** Point your own domain (e.g. `example.com`) at a Deployik project.\n\n**Route:** `/projects/$id/settings/domains`\n**Sidebar:** Project → **Settings** (expand) → **Domains**\n\n**Steps:**\n1. Click **Domains** under the project's Settings section.\n2. Find the **Add domain** form near the top. Enter the domain (apex like `example.com` or subdomain like `app.example.com`).\n3. Pick the environment — **Preview** for staging, **Production** for live.\n4. Click **Add**. The row appears with status `pending` and `dns_verified: no`.\n5. **Outside Deployik** — go to your domain's DNS provider:\n - **Cloudflare:** DNS → **Records** → **Add record** → Type `A`, Name (apex = `@`, subdomain = the prefix), IPv4 = the VPS IP shown in Deployik's expandable **DNS Setup Guide** on the same page, Proxy status: **DNS only** (gray cloud, not orange — Cloudflare's proxy interferes with Let's Encrypt). Save.\n - **Namecheap:** Domain List → **Manage** → **Advanced DNS** → **Add new record** → Type `A Record`, Host (`@` or subdomain), Value = VPS IP, TTL Automatic. Save.\n - **GoDaddy:** Domain → **DNS** → **Add** → Type `A`, Name (`@` or subdomain), Value = VPS IP. Save.\n - **Other registrar:** add an `A` record pointing at the VPS IP from the DNS Setup Guide. The exact UI varies — the record type and value matter, the UI doesn't.\n6. Wait 1–5 minutes for DNS to propagate. You can check with `dig +short A example.com` or `nslookup example.com` from your terminal — when it returns the VPS IP, you're ready.\n7. Back in Deployik, on the same Domains page, click the **Verify** button on the domain's row. A live log streams: DNS check → Let's Encrypt cert request → nginx reload. Wait for \"Provisioning complete\".\n8. Once `ssl_status: active`, the **Open** button on the row works. Production primary domain also drives the **Open** link on the project Overview.\n\n**Gotcha:** if Verify fails with \"DNS does not match\", DNS hasn't propagated yet — wait another minute and try again. Don't change anything in Deployik in the meantime.\n\n**Set as primary:** to make this domain the one Deployik treats as canonical for its environment, click the row's three-dot menu → **Set as primary**. A star badge appears.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can especially help with the registrar's DNS panel — just tell me which provider you use and I'll talk you through the exact clicks.\n\n**API equivalent:** [api-actions.md#custom-domain](api-actions.md#custom-domain)\n\n---\n\n## env-vars\n\n**Goal:** Set environment variables (for build-time `NEXT_PUBLIC_*`) or secrets (runtime-only) for the deployed app.\n\n**Route:** `/projects/$id/settings/env`\n**Sidebar:** Project → **Settings** (expand) → **Environments**\n\n**Steps:**\n1. Click **Environments** under the project's Settings section.\n2. Two tabs at the top: **Variables** (visible at build time, can include `NEXT_PUBLIC_*`) and **Secrets** (runtime only, never in build).\n3. Each row picks a **Scope** — *Shared* (applies to both preview and production), *Preview* only, or *Production* only.\n4. Click **Add variable** (or **Add secret** on that tab). Type the key (e.g. `STRIPE_PUBLIC` or `DATABASE_URL`), the value, pick the scope. Click **Save**.\n5. To bulk-paste from a `.env` file: click **Import .env**, paste the file's contents, pick the scope. Each non-empty line becomes one variable.\n6. Existing values are masked as `****abcd` (last 4 chars). To change a value, click the row's edit (pencil) icon, paste the new value, save.\n\n**Gotcha:** changing a variable does NOT redeploy automatically. You'll see a \"Variables changed since last deploy\" badge on the project Overview. Click **Redeploy** there to apply the new values.\n\n**Build-time vs runtime:** `NEXT_PUBLIC_*` keys are baked into the static bundle at build time, so changing one requires a rebuild. Secrets are always runtime-only — Deployik refuses to save a secret with a `NEXT_PUBLIC_` prefix.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also add a variable for you via the API — just tell me the key, value, and which environment.\n\n**API equivalent:** [api-actions.md#env-vars](api-actions.md#env-vars)\n\n---\n\n## auto-deploy\n\n**Goal:** Make Deployik redeploy automatically when you push to GitHub.\n\n**Route:** `/projects/$id/settings`\n**Sidebar:** Project → **Settings** (expand) → **Build** (the default Settings page)\n\n**Steps:**\n1. Click **Settings** in the project sidebar (it lands on Build by default).\n2. Scroll to the **Auto-deploy** section.\n3. Toggle **Enable auto-deploy**. The first time you turn it on, Deployik creates a webhook on the GitHub repo using your OAuth token — this requires the `admin:repo_hook` scope. If the toggle errors, sign out and back in (GitHub re-prompts for the scope).\n4. **Production branch** — the branch whose pushes trigger production deployments. Defaults to the project's main branch (e.g. `main`).\n5. **Preview branches** — comma-separated list of branch names or branch patterns. `*` matches every other branch. Leave as `*` unless you want to restrict preview builds to specific branches.\n6. Click **Save**. The status indicator turns green and shows the GitHub webhook ID.\n7. Push a commit to the production branch. Within seconds, a new deployment with `trigger_source: webhook` appears in the Deployments list, and Deployik streams the build log.\n\n**Gotcha:** if a push doesn't trigger a build, check **GitHub repo → Settings → Webhooks**. The Deployik webhook should show recent deliveries with `200 OK` responses. Re-deliver a failed one from there to debug.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#auto-deploy](api-actions.md#auto-deploy)\n\n---\n\n## password-protection\n\n**Goal:** Hide the deployed site (preview, production, or both) behind a password before showing it to clients or doing QA.\n\n**Route:** `/projects/$id/settings/protection`\n**Sidebar:** Project → **Settings** (expand) → **Protection**\n\n**Steps:**\n1. Click **Protection** under the project's Settings section.\n2. Two cards: **Preview** and **Production**. Each has a toggle and (when enabled) a password reveal button.\n3. Toggle **Enable password protection** on the environment you want.\n4. Deployik generates a 16-character random password, encrypts and stores it, regenerates the nginx config to add `auth_request` blocks, and shows you the password once. Click the eye icon to reveal it. Copy it now.\n5. Click **Regenerate password** to mint a new one (invalidates the old). The new password is shown the same way.\n6. Visit the deployed site in an incognito window to confirm: the Czech-language auth page (`Heslo`) appears. Enter the password — you're in for 24 hours.\n\n**Gotcha:** changing the password does not log out anyone who's already on the site. The signed `deployik_site_auth` cookie they hold remains valid for its 24-hour lifetime. To force everyone off, change the cookie's `JWT_SECRET` on the Deployik server (operator action).\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#password-protection](api-actions.md#password-protection)\n\n---\n\n## contact-form-email\n\n**Goal:** Make the contact form on your deployed site actually deliver emails to your inbox, with spam protection so bots don't flood you.\n\n**Route:** `/projects/$id/integrations/email`\n**Sidebar:** Project → **Integrations** (expand) → **Email**\n\n**What this gives you:** when someone submits the contact form on your site, a real email lands in your inbox. Bots are filtered out using Google's invisible spam check (reCAPTCHA v3 — your visitors never see a \"click the traffic lights\" puzzle).\n\nThis recipe has three parts. Two of them happen outside Deployik — I'll tell you when we're leaving and when we're coming back.\n\n### Part 1 — Get your SMTP credentials from Webglobe (outside Deployik)\n\nSMTP is just the technical name for \"email sending\" — your hosting provider gives you a username and password your site uses to send mail through their servers.\n\n1. Open a new browser tab, go to your **Webglobe customer portal** (the place where you manage your hosting). Sign in.\n2. Find the section called **Mail** or **E-mail accounts**. Pick the address you want emails to come *from* (e.g. `noreply@yourdomain.com`). Create it if it doesn't exist yet.\n3. On that mailbox, look for **SMTP** or **Outgoing mail** settings. Write down four things:\n - **SMTP host** (looks like `smtp.webglobe.cz` or similar — exact name varies)\n - **SMTP port** (usually `587` for STARTTLS or `465` for TLS)\n - **Security** (`STARTTLS` for port 587, `TLS` for port 465)\n - **Username** (often the full email address, e.g. `noreply@yourdomain.com`)\n - **Password** (the mailbox password — keep it safe, you'll paste it into Deployik in Part 3)\n\nIf you can't find any of these, ask me — I'll help you locate them based on what you see in the portal.\n\n### Part 2 — Get reCAPTCHA v3 keys from Google (outside Deployik)\n\nThis is the spam protection. Google gives you two keys: a **site key** that goes on the public form, and a **secret key** the server uses to verify the form was submitted by a human.\n\n1. In a new tab, open `https://www.google.com/recaptcha/admin/create`. Sign in with your Google account.\n2. Fill the form:\n - **Label:** anything memorable, e.g. `myproject contact form`\n - **reCAPTCHA type:** pick **reCAPTCHA v3** (very important — v2 won't work).\n - **Domains:** add your production hostname (e.g. `example.com`). If you have a `www.example.com` variant, add it too. You can add `localhost` for testing.\n - Accept the terms, click **Submit**.\n3. The next page shows two keys:\n - **Site key** — public, goes in Deployik. Copy it.\n - **Secret key** — private, goes in your secrets store. Copy it too (and treat it like a password).\n\n### Part 3 — Wire it up in Deployik\n\nWe're back in Deployik now.\n\n1. In the project sidebar, expand **Integrations** and click **Email**.\n2. Fill in the SMTP fields with what you wrote down in Part 1:\n - **SMTP host**, **Port**, **Security** (STARTTLS / TLS), **Username**.\n - For **Password**, click the field and paste the mailbox password.\n3. Fill in the email fields:\n - **From address** — the mailbox address (e.g. `noreply@yourdomain.com`).\n - **From name** — the human name shown to recipients (e.g. `My Site`).\n - **Contact recipients** — who receives the form submissions. Comma-separated if more than one.\n4. Paste the reCAPTCHA **site key** from Part 2 into the **reCAPTCHA site key** field.\n5. **Score threshold** — leave at the default (`0.5`) unless you know you want to change it. Higher = stricter (more bots blocked, but more humans rejected too).\n6. Click **Save**. Deployik writes the SMTP host/port/from-address as **shared variables** and the SMTP password and reCAPTCHA secret as **secrets** — so the deployed site can read them at runtime.\n7. Click **Send test email**. Check the inbox of one of your **Contact recipients**. If it arrives, you're done with Part 3.\n\n### Part 4 — Add the contact form code to your site\n\nThe Email page has an **AI install prompt** section. It generates a copy-pasteable prompt with your project's exact framework, environment variables, and reCAPTCHA site key already filled in.\n\n1. On the Email page, scroll to **AI install prompt** (or **Install with AI**).\n2. Click **Copy prompt**.\n3. Paste the prompt into your AI coding assistant (Cursor, Claude Code, etc.) inside your project's repo. The assistant will write the contact form route, the reCAPTCHA hook, and the server handler that calls Deployik's SMTP credentials.\n4. Commit, push. If auto-deploy is on, the new version is live in a couple of minutes.\n5. Visit your live site, fill out the form, submit. The email should land in the inbox you configured.\n\n**Gotcha:** if the test email succeeds but real form submissions don't arrive, the most common cause is that the contact form code isn't reading the reCAPTCHA secret from environment variables on the server. The AI install prompt sets this up correctly — if it doesn't work, paste the error your form shows you and I'll diagnose.\n\n**Gotcha:** the **SMTP password** and the **reCAPTCHA secret** are the only two truly sensitive values here. Both are stored as secrets (encrypted at rest) — never paste them into a chat with me unless you're willing to rotate them after.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also do Part 3 for you via the API once you have the values from Parts 1 and 2 — just ask.\n\n**API equivalent:** [api-actions.md#contact-form-email](api-actions.md#contact-form-email)\n\n---\n\n## attach-postgres\n\n**Goal:** Get a real Postgres database for your app, per environment (preview / production), with credentials wired into the runtime automatically.\n\n**Route:** `/projects/$id/services`\n**Sidebar:** Project → **Services**\n\n**What this gives you:**\n- A dedicated Postgres container (a \"sidecar\") that runs next to your app, one per environment.\n- Standard environment variables (`DATABASE_URL` + discrete `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` / `PGPASSWORD`) injected into the deployed app automatically — your code just reads them.\n- A 16xxx loopback port on the VPS so you can connect from your laptop via an SSH tunnel for migrations / inspection.\n- The database **persists across deploys** — the volume isn't touched by a new deployment.\n\n**Steps:**\n\n1. *(Optional, brand-new project only)* On the **New project** page, scroll to **Attach Postgres database**. Toggle it on for preview / production. Skip the rest of this recipe — it's done.\n2. *(Existing project)* Click **Services** in the project sidebar.\n3. Two cards: **Preview** and **Production**. Each starts as **Not attached** with an **Attach Postgres** button.\n4. Click **Attach Postgres** on the environment you want. Deployik records the row, generates a strong random password, and assigns a unique 16xxx host port. The card flips to **Attached · pending** — the container itself isn't running yet.\n5. Trigger any deploy for that environment (push a commit, or click **Redeploy** on Overview). The build pipeline's `EnsureServices` hook starts the postgres container, waits for it to be healthy, then starts your app with the env vars injected. The card shows **running** once it's up.\n6. On the Services card, click **Show credentials** to reveal the password and the **SSH tunnel command**. Copy the SSH command, run it on your laptop — it forwards `127.0.0.1:15432` on your machine to the postgres in the VPS. Connect with `psql postgres://...@127.0.0.1:15432/...` or any client.\n7. To restart the container without touching data, click **Restart**. To rotate the password, click **Regenerate password** — the new password is shown once; the running container keeps the old password until the next deploy/restart, so trigger a redeploy right after.\n\n**Gotcha — Reset wipes everything:** the **Reset** button drops the volume and starts an empty database. Use it only for preview when you want a clean slate. On production it requires you to type `<project>-production` to confirm. There is no undo.\n\n**Gotcha — project rename is blocked:** while a service is attached, the project name is frozen (renaming would orphan the volume). Detach first, rename, re-attach (and re-import data) if you really need a new name.\n\n**Gotcha — detach deletes data:** clicking **Detach** stops the container AND removes the named volume. There is no undo. Take a `pg_dump` first if you want to keep the data.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also attach Postgres for you via the API and tail the container logs to confirm it came up clean — just ask.\n\n**API equivalent:** [api-actions.md#attach-postgres](api-actions.md#attach-postgres)\n\n---\n\n## rollback\n\n**Goal:** Revert to a previous successful deployment when the latest one is broken.\n\n**Route:** `/projects/$id/deployments`\n**Sidebar:** Project → **Deployments**\n\n**Steps:**\n1. Click **Deployments** in the project sidebar.\n2. The list shows every deployment with status, branch, commit message, who triggered it, and a thumbnail screenshot.\n3. Find the most recent **live**-status row from before the regression. Click the row to open the deployment detail page.\n4. On the detail page, in the top-right, click **Redeploy this commit**. (If you don't see that button, scroll to the build log header — it's there.)\n5. A confirmation modal appears. Click **Redeploy**. A new deployment row appears in the list with the same `commit_sha` but a new `id`, new build, and `triggered_by_username: you`.\n6. When status reaches **live**, the swap completes — the previous broken container is stopped and the rolled-back container takes over. Visitors see the older code immediately.\n\n**Gotcha:** rollback re-runs the build from source. If the regression is a config/env-var issue (not a code change), changing the env var and triggering a new build is faster — see [#env-vars](#env-vars). If it's a runtime dependency that broke between commits, rollback is the right move.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also list your recent deployments and pick the right \"last good\" one for you — just say the word.\n\n**API equivalent:** [api-actions.md#rollback](api-actions.md#rollback)\n",
14
+ content: "# Deployik — Where to click\n\nEight recipes for the most common things a user wants to do in the Deployik dashboard. If the user's goal isn't in the table, ask them warmly to rephrase, or check whether their goal is actually outside Deployik's scope.\n\nEvery recipe ends with a friendly \"stuck on a step?\" line. If the user uses it, ask which step and walk through that single step in fine detail (one click, one screenshot description, or one clarifying question at a time) before continuing.\n\n## What do you want to do?\n\n| Goal | Recipe |\n|------|--------|\n| I want to put my GitHub repo online | [#create-project](#create-project) |\n| I want to use my own domain (example.com) | [#custom-domain](#custom-domain) |\n| I want to set environment variables / API keys | [#env-vars](#env-vars) |\n| I want it to redeploy when I push to GitHub | [#auto-deploy](#auto-deploy) |\n| I want a password before people see the site | [#password-protection](#password-protection) |\n| I want my contact form to actually send emails (with spam protection) | [#contact-form-email](#contact-form-email) |\n| I want a Postgres database for my app | [#attach-postgres](#attach-postgres) |\n| I want to roll back to a previous version | [#rollback](#rollback) |\n\n---\n\n## create-project\n\n**Goal:** Connect a GitHub repository to Deployik and deploy it for the first time.\n\n**Route:** `/new`\n**Sidebar:** (top-right of the Projects page) → **+ New project**\n\n**Steps:**\n1. Click **+ New project** on the dashboard. The page lists every GitHub repo Deployik can see for your account.\n2. Search or scroll for the repo. Click **Import** on the row.\n3. *If Deployik detects a monorepo (multiple apps in subfolders):* a step appears asking which app to deploy. Click the one you want. Framework, root directory, and build command pre-fill.\n4. *If single-app:* this step is skipped automatically.\n5. On the configuration screen:\n - **Project name** — used as the preview subdomain. Lowercase letters, digits, and hyphens only.\n - **Branch** — usually `main` or `master`.\n - **Framework** — auto-detected. If wrong, change it; install/build/output reset to that framework's defaults.\n - **Group** — choose the dashboard group/tab this project should live in.\n6. Click **Create project**. Deployik creates the auto-domain `{project-name}.preview.lovinka.com`, sets up the GitHub webhook for auto-deploy, and starts the first preview deployment.\n7. The page navigates to the project Overview. The **Preview** strip shows the deployment progressing through queued → building → live.\n\n**Gotcha:** the GitHub OAuth scope must include `admin:repo_hook` for the webhook step to work. If you signed in before that scope was added, sign out and back in.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#create-project](api-actions.md#create-project)\n\n---\n\n## custom-domain\n\n**Goal:** Point your own domain (e.g. `example.com`) at a Deployik project.\n\n**Route:** `/projects/$id/settings/domains`\n**Sidebar:** Project → **Settings** (expand) → **Domains**\n\n**Steps:**\n1. Click **Domains** under the project's Settings section.\n2. Find the **Add domain** form near the top. Enter the domain (apex like `example.com` or subdomain like `app.example.com`).\n3. Pick the environment — **Preview** for staging, **Production** for live.\n4. Click **Add**. The row appears with status `pending` and `dns_verified: no`.\n5. **Outside Deployik** — go to your domain's DNS provider:\n - **Cloudflare:** DNS → **Records** → **Add record** → Type `A`, Name (apex = `@`, subdomain = the prefix), IPv4 = the VPS IP shown in Deployik's expandable **DNS Setup Guide** on the same page, Proxy status: **DNS only** (gray cloud, not orange — Cloudflare's proxy interferes with Let's Encrypt). Save.\n - **Namecheap:** Domain List → **Manage** → **Advanced DNS** → **Add new record** → Type `A Record`, Host (`@` or subdomain), Value = VPS IP, TTL Automatic. Save.\n - **GoDaddy:** Domain → **DNS** → **Add** → Type `A`, Name (`@` or subdomain), Value = VPS IP. Save.\n - **Other registrar:** add an `A` record pointing at the VPS IP from the DNS Setup Guide. The exact UI varies — the record type and value matter, the UI doesn't.\n6. Wait 1–5 minutes for DNS to propagate. You can check with `dig +short A example.com` or `nslookup example.com` from your terminal — when it returns the VPS IP, you're ready.\n7. Back in Deployik, on the same Domains page, click the **Verify** button on the domain's row. A live log streams: DNS check → Let's Encrypt cert request → nginx reload. Wait for \"Provisioning complete\".\n8. Once `ssl_status: active`, the **Open** button on the row works. Production primary domain also drives the **Open** link on the project Overview.\n\n**Gotcha:** if Verify fails with \"DNS does not match\", DNS hasn't propagated yet — wait another minute and try again. Don't change anything in Deployik in the meantime.\n\n**Set as primary:** to make this domain the one Deployik treats as canonical for its environment, click the row's three-dot menu → **Set as primary**. A star badge appears.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can especially help with the registrar's DNS panel — just tell me which provider you use and I'll talk you through the exact clicks.\n\n**API equivalent:** [api-actions.md#custom-domain](api-actions.md#custom-domain)\n\n---\n\n## env-vars\n\n**Goal:** Set environment variables (for build-time `NEXT_PUBLIC_*`) or secrets (runtime-only) for the deployed app.\n\n**Route:** `/projects/$id/settings/env`\n**Sidebar:** Project → **Settings** (expand) → **Environments**\n\n**Steps:**\n1. Click **Environments** under the project's Settings section.\n2. Two tabs at the top: **Variables** (visible at build time, can include `NEXT_PUBLIC_*`) and **Secrets** (runtime only, never in build).\n3. Each row picks a **Scope** — *Shared* (applies to both preview and production), *Preview* only, or *Production* only.\n4. Click **Add variable** (or **Add secret** on that tab). Type the key (e.g. `STRIPE_PUBLIC` or `DATABASE_URL`), the value, pick the scope. Click **Save**.\n5. To bulk-paste from a `.env` file: click **Import .env**, paste the file's contents, pick the scope. Each non-empty line becomes one variable.\n6. Existing values are masked as `****abcd` (last 4 chars). To change a value, click the row's edit (pencil) icon, paste the new value, save.\n\n**Gotcha:** changing a variable does NOT redeploy automatically. You'll see a \"Variables changed since last deploy\" badge on the project Overview. Click **Redeploy** there to apply the new values.\n\n**Build-time vs runtime:** `NEXT_PUBLIC_*` keys are baked into the static bundle at build time, so changing one requires a rebuild. Secrets are always runtime-only — Deployik refuses to save a secret with a `NEXT_PUBLIC_` prefix.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also add a variable for you via the API — just tell me the key, value, and which environment.\n\n**API equivalent:** [api-actions.md#env-vars](api-actions.md#env-vars)\n\n---\n\n## auto-deploy\n\n**Goal:** Make Deployik redeploy automatically when you push to GitHub.\n\n**Route:** `/projects/$id/settings`\n**Sidebar:** Project → **Settings** (expand) → **Build** (the default Settings page)\n\n**Steps:**\n1. Click **Settings** in the project sidebar (it lands on Build by default).\n2. Scroll to the **Auto-deploy** section.\n3. Toggle **Enable auto-deploy**. The first time you turn it on, Deployik creates a webhook on the GitHub repo using your OAuth token — this requires the `admin:repo_hook` scope. If the toggle errors, sign out and back in (GitHub re-prompts for the scope).\n4. **Production branch** — the branch whose pushes trigger production deployments. Defaults to the project's main branch (e.g. `main`).\n5. **Preview branches** — comma-separated list of branch names or branch patterns. `*` matches every other branch. Leave as `*` unless you want to restrict preview builds to specific branches.\n6. Click **Save**. The status indicator turns green and shows the GitHub webhook ID.\n7. Push a commit to the production branch. Within seconds, a new deployment with `trigger_source: webhook` appears in the Deployments list, and Deployik streams the build log.\n\n**Gotcha:** if a push doesn't trigger a build, check **GitHub repo → Settings → Webhooks**. The Deployik webhook should show recent deliveries with `200 OK` responses. Re-deliver a failed one from there to debug.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#auto-deploy](api-actions.md#auto-deploy)\n\n---\n\n## password-protection\n\n**Goal:** Hide the deployed site (preview, production, or both) behind a password before showing it to clients or doing QA.\n\n**Route:** `/projects/$id/settings/protection`\n**Sidebar:** Project → **Settings** (expand) → **Protection**\n\n**Steps:**\n1. Click **Protection** under the project's Settings section.\n2. Two cards: **Preview** and **Production**. Each has a toggle and (when enabled) a password reveal button.\n3. Toggle **Enable password protection** on the environment you want.\n4. Deployik generates a 16-character random password, encrypts and stores it, regenerates the nginx config to add `auth_request` blocks, and shows you the password once. Click the eye icon to reveal it. Copy it now.\n5. Click **Regenerate password** to mint a new one (invalidates the old). The new password is shown the same way.\n6. Visit the deployed site in an incognito window to confirm: the Czech-language auth page (`Heslo`) appears. Enter the password — you're in for 24 hours.\n\n**Gotcha:** changing the password does not log out anyone who's already on the site. The signed `deployik_site_auth` cookie they hold remains valid for its 24-hour lifetime. To force everyone off, change the cookie's `JWT_SECRET` on the Deployik server (operator action).\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.**\n\n**API equivalent:** [api-actions.md#password-protection](api-actions.md#password-protection)\n\n---\n\n## contact-form-email\n\n**Goal:** Make the contact form on your deployed site actually deliver emails to your inbox, with spam protection so bots don't flood you.\n\n**Route:** `/projects/$id/integrations/email`\n**Sidebar:** Project → **Integrations** (expand) → **Email**\n\n**What this gives you:** when someone submits the contact form on your site, a real email lands in your inbox. Bots are filtered out using Google's invisible spam check (reCAPTCHA v3 — your visitors never see a \"click the traffic lights\" puzzle).\n\nThis recipe has three parts. Two of them happen outside Deployik — I'll tell you when we're leaving and when we're coming back.\n\n### Part 1 — Get your SMTP credentials from Webglobe (outside Deployik)\n\nSMTP is just the technical name for \"email sending\" — your hosting provider gives you a username and password your site uses to send mail through their servers.\n\n1. Open a new browser tab, go to your **Webglobe customer portal** (the place where you manage your hosting). Sign in.\n2. Find the section called **Mail** or **E-mail accounts**. Pick the address you want emails to come *from* (e.g. `noreply@yourdomain.com`). Create it if it doesn't exist yet.\n3. On that mailbox, look for **SMTP** or **Outgoing mail** settings. Write down four things:\n - **SMTP host** (looks like `smtp.webglobe.cz` or similar — exact name varies)\n - **SMTP port** (usually `587` for STARTTLS or `465` for TLS)\n - **Security** (`STARTTLS` for port 587, `TLS` for port 465)\n - **Username** (often the full email address, e.g. `noreply@yourdomain.com`)\n - **Password** (the mailbox password — keep it safe, you'll paste it into Deployik in Part 3)\n\nIf you can't find any of these, ask me — I'll help you locate them based on what you see in the portal.\n\n### Part 2 — Get reCAPTCHA v3 keys from Google (outside Deployik)\n\nThis is the spam protection. Google gives you two keys: a **site key** that goes on the public form, and a **secret key** the server uses to verify the form was submitted by a human.\n\n1. In a new tab, open `https://www.google.com/recaptcha/admin/create`. Sign in with your Google account.\n2. Fill the form:\n - **Label:** anything memorable, e.g. `myproject contact form`\n - **reCAPTCHA type:** pick **reCAPTCHA v3** (very important — v2 won't work).\n - **Domains:** add your production hostname (e.g. `example.com`). If you have a `www.example.com` variant, add it too. You can add `localhost` for testing.\n - Accept the terms, click **Submit**.\n3. The next page shows two keys:\n - **Site key** — public, goes in Deployik. Copy it.\n - **Secret key** — private, goes in your secrets store. Copy it too (and treat it like a password).\n\n### Part 3 — Wire it up in Deployik\n\nWe're back in Deployik now.\n\n1. In the project sidebar, expand **Integrations** and click **Email**.\n2. Fill in the SMTP fields with what you wrote down in Part 1:\n - **SMTP host**, **Port**, **Security** (STARTTLS / TLS), **Username**.\n - For **Password**, click the field and paste the mailbox password.\n3. Fill in the email fields:\n - **From address** — the mailbox address (e.g. `noreply@yourdomain.com`).\n - **From name** — the human name shown to recipients (e.g. `My Site`).\n - **Contact recipients** — who receives the form submissions. Comma-separated if more than one.\n4. Paste the reCAPTCHA **site key** from Part 2 into the **reCAPTCHA site key** field.\n5. **Score threshold** — leave at the default (`0.5`) unless you know you want to change it. Higher = stricter (more bots blocked, but more humans rejected too).\n6. Click **Save**. Deployik writes the SMTP host/port/from-address as **shared variables** and the SMTP password and reCAPTCHA secret as **secrets** — so the deployed site can read them at runtime.\n7. Click **Send test email**. Check the inbox of one of your **Contact recipients**. If it arrives, you're done with Part 3.\n\n### Part 4 — Add the contact form code to your site\n\nThe Email page has an **AI install prompt** section. It generates a copy-pasteable prompt with your project's exact framework, environment variables, and reCAPTCHA site key already filled in.\n\n1. On the Email page, scroll to **AI install prompt** (or **Install with AI**).\n2. Click **Copy prompt**.\n3. Paste the prompt into your AI coding assistant (Cursor, Claude Code, etc.) inside your project's repo. The assistant will write the contact form route, the reCAPTCHA hook, and the server handler that calls Deployik's SMTP credentials.\n4. Commit, push. If auto-deploy is on, the new version is live in a couple of minutes.\n5. Visit your live site, fill out the form, submit. The email should land in the inbox you configured.\n\n**Gotcha:** if the test email succeeds but real form submissions don't arrive, the most common cause is that the contact form code isn't reading the reCAPTCHA secret from environment variables on the server. The AI install prompt sets this up correctly — if it doesn't work, paste the error your form shows you and I'll diagnose.\n\n**Gotcha:** the **SMTP password** and the **reCAPTCHA secret** are the only two truly sensitive values here. Both are stored as secrets (encrypted at rest) — never paste them into a chat with me unless you're willing to rotate them after.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also do Part 3 for you via the API once you have the values from Parts 1 and 2 — just ask.\n\n**API equivalent:** [api-actions.md#contact-form-email](api-actions.md#contact-form-email)\n\n---\n\n## attach-postgres\n\n**Goal:** Get a real Postgres database for your app, per environment (preview / production), with credentials wired into the runtime automatically.\n\n**Route:** `/projects/$id/services`\n**Sidebar:** Project → **Services**\n\n**What this gives you:**\n- A dedicated Postgres container (a \"sidecar\") that runs next to your app, one per environment.\n- Standard environment variables (`DATABASE_URL` + discrete `PGHOST` / `PGPORT` / `PGDATABASE` / `PGUSER` / `PGPASSWORD`) injected into the deployed app automatically — your code just reads them.\n- A 16xxx loopback port on the VPS so you can connect from your laptop via an SSH tunnel for migrations / inspection.\n- The database **persists across deploys** — the volume isn't touched by a new deployment.\n\n**Steps:**\n\n1. *(Optional, brand-new project only)* On the **New project** page, scroll to **Attach Postgres database**. Toggle it on for preview / production. Skip the rest of this recipe — it's done.\n2. *(Existing project)* Click **Services** in the project sidebar.\n3. Two cards: **Preview** and **Production**. Each starts as **Not attached** with an **Attach Postgres** button.\n4. Click **Attach Postgres** on the environment you want. Deployik records the row, generates a strong random password, and assigns a unique 16xxx host port. The card flips to **Attached · pending** — the container itself isn't running yet.\n5. Trigger any deploy for that environment (push a commit, or click **Redeploy** on Overview). The build pipeline's `EnsureServices` hook starts the postgres container, waits for it to be healthy, then starts your app with the env vars injected. The card shows **running** once it's up.\n6. On the Services card, click **Show credentials** to reveal the password and the **SSH tunnel command**. Copy the SSH command, run it on your laptop — it forwards `127.0.0.1:15432` on your machine to the postgres in the VPS. Connect with `psql postgres://...@127.0.0.1:15432/...` or any client.\n7. To restart the container without touching data, click **Restart**. To rotate the password, click **Regenerate password** — the new password is shown once; the running container keeps the old password until the next deploy/restart, so trigger a redeploy right after.\n\n**Gotcha — Reset wipes everything:** the **Reset** button drops the volume and starts an empty database. Use it only for preview when you want a clean slate. On production it requires you to type `<project>-production` to confirm. There is no undo.\n\n**Gotcha — project rename is blocked:** while a service is attached, the project name is frozen (renaming would orphan the volume). Detach first, rename, re-attach (and re-import data) if you really need a new name.\n\n**Gotcha — detach deletes data:** clicking **Detach** stops the container AND removes the named volume. There is no undo. Take a `pg_dump` first if you want to keep the data.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also attach Postgres for you via the API and tail the container logs to confirm it came up clean — just ask.\n\n**API equivalent:** [api-actions.md#attach-postgres](api-actions.md#attach-postgres)\n\n---\n\n## rollback\n\n**Goal:** Revert to a previous successful deployment when the latest one is broken.\n\n**Route:** `/projects/$id/deployments`\n**Sidebar:** Project → **Deployments**\n\n**Steps:**\n1. Click **Deployments** in the project sidebar.\n2. The list shows every deployment with status, branch, commit message, who triggered it, and a thumbnail screenshot.\n3. Find the most recent **live**-status row from before the regression. Click the row to open the deployment detail page.\n4. On the detail page, in the top-right, click **Redeploy this commit**. (If you don't see that button, scroll to the build log header — it's there.)\n5. A confirmation modal appears. Click **Redeploy**. A new deployment row appears in the list with the same `commit_sha` but a new `id`, new build, and `triggered_by_username: you`.\n6. When status reaches **live**, the swap completes — the previous broken container is stopped and the rolled-back container takes over. Visitors see the older code immediately.\n\n**Gotcha:** rollback re-runs the build from source. If the regression is a config/env-var issue (not a code change), changing the env var and triggering a new build is faster — see [#env-vars](#env-vars). If it's a runtime dependency that broke between commits, rollback is the right move.\n\n**Stuck on any of these steps? Tell me which one and I'll walk through it with you.** I can also list your recent deployments and pick the right \"last good\" one for you — just say the word.\n\n**API equivalent:** [api-actions.md#rollback](api-actions.md#rollback)\n",
15
15
  },
16
16
  ];
17
17
  //# sourceMappingURL=recipes.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.generated.js","sourceRoot":"","sources":["../../src/knowledge/recipes.generated.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+CAA+C;AAO/C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,myIAAmyI;KAC7yI;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,kpcAAkpc;KAC5pc;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,yuoBAAyuoB;KACnvoB;CACF,CAAC"}
1
+ {"version":3,"file":"recipes.generated.js","sourceRoot":"","sources":["../../src/knowledge/recipes.generated.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+CAA+C;AAO/C,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,myIAAmyI;KAC7yI;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,y/cAAy/c;KACngd;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,quoBAAquoB;KAC/uoB;CACF,CAAC"}
@@ -13,7 +13,7 @@ export function renderDryRun(dryRun) {
13
13
  export function renderProjectSummary(project) {
14
14
  const lines = [
15
15
  `Project: ${project.name} (id: ${project.id})`,
16
- ` Workspace: ${project.organization_name ?? project.organization_id}`,
16
+ ` Group: ${project.organization_name ?? project.organization_id}`,
17
17
  ` Repo: ${project.github_owner}/${project.github_repo} @ ${project.branch}`,
18
18
  ` Framework: ${project.framework} (${project.package_manager}, node ${project.node_version})`,
19
19
  ` Status: ${project.status}`,
@@ -0,0 +1,43 @@
1
+ export function findGroupBySelector(groups, selector) {
2
+ const normalized = selector.trim().toLowerCase();
3
+ if (!normalized)
4
+ return undefined;
5
+ return groups.find((group) => group.id === selector ||
6
+ group.slug.toLowerCase() === normalized ||
7
+ group.name.toLowerCase() === normalized);
8
+ }
9
+ export async function fetchGroups(client) {
10
+ return client.request("/groups");
11
+ }
12
+ export async function resolveGroup(client, selector) {
13
+ const value = selector.group_id ??
14
+ selector.group ??
15
+ selector.organization_id ??
16
+ selector.workspace;
17
+ if (!value)
18
+ return undefined;
19
+ const groups = await fetchGroups(client);
20
+ const group = findGroupBySelector(groups, value);
21
+ if (!group) {
22
+ throw new Error(`No dashboard group matching '${value}' is visible to this token. Call list_groups to see available groups.`);
23
+ }
24
+ return group;
25
+ }
26
+ export async function resolveGroupId(client, selector) {
27
+ const direct = selector.group_id ?? selector.organization_id;
28
+ if (direct)
29
+ return direct;
30
+ const group = await resolveGroup(client, selector);
31
+ return group?.id;
32
+ }
33
+ export function renderGroupsList(groups) {
34
+ if (groups.length === 0)
35
+ return "(no dashboard groups visible to this token)";
36
+ return groups
37
+ .map((group) => {
38
+ const kind = group.is_default ? "default" : "custom";
39
+ return ` • ${group.slug.padEnd(24)} ${kind} role=${group.membership_role} projects=${group.project_count} id=${group.id}`;
40
+ })
41
+ .join("\n");
42
+ }
43
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/lib/groups.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,QAAgB;IAEhB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,EAAE,KAAK,QAAQ;QACrB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;QACvC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAC1C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,OAAO,MAAM,CAAC,OAAO,CAAU,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,QAAuB;IAEvB,MAAM,KAAK,GACT,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,eAAe;QACxB,QAAQ,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,uEAAuE,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB,EACtB,QAAuB;IAEvB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC;IAC7D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,KAAK,EAAE,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,6CAA6C,CAAC;IAC9E,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrD,OAAO,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,UAAU,KAAK,CAAC,eAAe,cAAc,KAAK,CAAC,aAAa,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;IACjI,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -2,11 +2,14 @@ export function checkSafety(ctx, args) {
2
2
  if (ctx.tier === "read" || ctx.tier === "mutating") {
3
3
  return { proceed: true };
4
4
  }
5
+ const requiresName = ctx.tier === "destructive_production" || !!ctx.expectedName;
5
6
  const required = { confirm: true };
6
7
  if (ctx.tier === "destructive_production") {
7
8
  if (!ctx.expectedName) {
8
9
  throw new Error(`safety: destructive_production tier requires expectedName for tool ${ctx.toolName}`);
9
10
  }
11
+ }
12
+ if (requiresName && ctx.expectedName) {
10
13
  required.confirm_name = ctx.expectedName;
11
14
  }
12
15
  if (args.confirm !== true) {
@@ -20,7 +23,7 @@ export function checkSafety(ctx, args) {
20
23
  },
21
24
  };
22
25
  }
23
- if (ctx.tier === "destructive_production") {
26
+ if (requiresName) {
24
27
  if (args.confirm_name !== ctx.expectedName) {
25
28
  return {
26
29
  proceed: false,
@@ -1 +1 @@
1
- {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/lib/safety.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,WAAW,CAAC,GAAkB,EAAE,IAAgB;IAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sEAAsE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,QAAQ;aACnB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,GAAG,CAAC,QAAQ;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,QAAQ,EAAE,QAAQ;iBACnB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/lib/safety.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,WAAW,CAAC,GAAkB,EAAE,IAAgB;IAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,KAAK,wBAAwB,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;IACjF,MAAM,QAAQ,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sEAAsE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,IAAI,YAAY,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrC,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,QAAQ;aACnB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,GAAG,CAAC,QAAQ;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,QAAQ,EAAE,QAAQ;iBACnB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { readBinding, writeBinding } from "../config/binding.js";
3
3
  import { readCache, writeCache, isCacheFresh } from "../config/cache.js";
4
+ import { fetchGroups } from "../lib/groups.js";
4
5
  export class ResolveError extends Error {
5
6
  hint;
6
7
  constructor(message, hint) {
@@ -19,10 +20,11 @@ export async function resolveProject(ctx, input = {}) {
19
20
  const projects = await fetchProjects(ctx);
20
21
  // 2. explicit slug
21
22
  if (input.project) {
22
- const match = matchProjectByName(projects, input.project, input.workspace);
23
+ const groupSelector = input.group_id ?? input.group ?? input.workspace;
24
+ const match = matchProjectByName(projects, input.project, groupSelector);
23
25
  if (match)
24
26
  return { project: match, source: "slug" };
25
- throw new ResolveError(`No project named '${input.project}' is visible to this token${input.workspace ? ` in workspace '${input.workspace}'` : ""}.`, "Call `list_projects` to see what this token can reach.");
27
+ throw new ResolveError(`No project named '${input.project}' is visible to this token${groupSelector ? ` in group '${groupSelector}'` : ""}.`, "Call `list_projects` to see what this token can reach.");
26
28
  }
27
29
  // 3. binding file (public .deployik.json or legacy .deployik/binding.json)
28
30
  const binding = readBinding(ctx.stateDir, ctx.cwd);
@@ -70,34 +72,36 @@ export async function fetchProjects(ctx) {
70
72
  return projects;
71
73
  }
72
74
  export async function refreshCache(ctx, projects) {
73
- // workspaces fetched lazily — only when cache is stale or missing
74
- let workspaces = [];
75
+ // groups fetched lazily — only when cache is stale or missing
76
+ let groups = [];
75
77
  const existing = readCache(ctx.stateDir);
76
78
  if (!existing || !isCacheFresh(existing)) {
77
79
  try {
78
- workspaces = await ctx.client.request(`/organizations`);
80
+ groups = await fetchGroups(ctx.client);
79
81
  }
80
82
  catch {
81
- workspaces = existing?.workspaces.map((w) => ({
83
+ groups = existing?.workspaces.map((w) => ({
82
84
  id: w.id,
83
85
  slug: w.slug,
84
86
  name: w.name,
85
- is_personal: false,
87
+ is_default: false,
86
88
  membership_role: "member",
87
89
  project_count: 0,
90
+ display_order: 0,
88
91
  created_at: "",
89
92
  updated_at: "",
90
93
  })) ?? [];
91
94
  }
92
95
  }
93
96
  else {
94
- workspaces = existing.workspaces.map((w) => ({
97
+ groups = existing.workspaces.map((w) => ({
95
98
  id: w.id,
96
99
  slug: w.slug,
97
100
  name: w.name,
98
- is_personal: false,
101
+ is_default: false,
99
102
  membership_role: "member",
100
103
  project_count: 0,
104
+ display_order: 0,
101
105
  created_at: "",
102
106
  updated_at: "",
103
107
  }));
@@ -111,23 +115,32 @@ export async function refreshCache(ctx, projects) {
111
115
  }));
112
116
  writeCache(ctx.stateDir, {
113
117
  projects: cached,
114
- workspaces: workspaces.map((w) => ({ id: w.id, slug: w.slug, name: w.name })),
118
+ workspaces: groups.map((w) => ({ id: w.id, slug: w.slug, name: w.name })),
115
119
  platform: existing?.platform,
116
120
  });
117
121
  }
118
- function matchProjectByName(projects, slug, workspace) {
122
+ function matchProjectByName(projects, slug, groupSelector) {
119
123
  const slugLower = slug.toLowerCase();
120
124
  const matches = projects.filter((p) => p.name.toLowerCase() === slugLower);
121
125
  if (matches.length === 0)
122
126
  return undefined;
123
127
  if (matches.length === 1)
124
128
  return matches[0];
125
- if (!workspace)
129
+ if (!groupSelector)
126
130
  return matches[0];
127
- const ws = workspace.toLowerCase();
128
- const refined = matches.find((p) => (p.organization_name ?? "").toLowerCase() === ws || p.organization_id === workspace);
131
+ const group = groupSelector.toLowerCase();
132
+ const refined = matches.find((p) => p.organization_id === groupSelector ||
133
+ (p.organization_name ?? "").toLowerCase() === group ||
134
+ slugifyGroupName(p.organization_name ?? "") === group);
129
135
  return refined ?? matches[0];
130
136
  }
137
+ function slugifyGroupName(name) {
138
+ return name
139
+ .trim()
140
+ .toLowerCase()
141
+ .replace(/[^a-z0-9]+/g, "-")
142
+ .replace(/^-+|-+$/g, "");
143
+ }
131
144
  function readGitRemote(cwd) {
132
145
  try {
133
146
  const url = execSync("git remote get-url origin", { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/resolve/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/resolve/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "./_helpers.js";
3
+ import { checkSafety } from "../lib/safety.js";
4
+ import { renderDryRun } from "../lib/format.js";
5
+ import { fetchGroups, renderGroupsList, resolveGroup, resolveGroupId, } from "../lib/groups.js";
6
+ import { fetchProjects } from "../resolve/project.js";
7
+ export function registerGroupTools(server, ctx) {
8
+ registerTool(server, ctx, {
9
+ name: "list_groups",
10
+ description: "List dashboard groups this token can access. Use these ids with create_project.group_id or move_projects_to_group.",
11
+ annotations: { readOnlyHint: true, title: "List groups" },
12
+ handler: async () => {
13
+ const groups = await fetchGroups(ctx.client);
14
+ return { text: renderGroupsList(groups), data: groups };
15
+ },
16
+ });
17
+ registerTool(server, ctx, {
18
+ name: "create_group",
19
+ description: "Create a dashboard group. Optionally move existing projects into it by id or project slug.",
20
+ inputSchema: {
21
+ name: z.string(),
22
+ project_ids: z.array(z.string()).default([]),
23
+ projects: z
24
+ .array(z.string())
25
+ .default([])
26
+ .describe("Project slugs to move into the new group."),
27
+ },
28
+ annotations: { title: "Create dashboard group" },
29
+ handler: async (args) => {
30
+ const projectIds = await resolveProjectIds(ctx, args.project_ids ?? [], args.projects ?? []);
31
+ const group = await ctx.client.request("/groups", {
32
+ method: "POST",
33
+ body: { name: args.name, project_ids: projectIds },
34
+ });
35
+ return {
36
+ text: `Created dashboard group '${group.name}' (id: ${group.id}).${projectIds.length ? ` Moved ${projectIds.length} project(s).` : ""}`,
37
+ data: group,
38
+ };
39
+ },
40
+ });
41
+ registerTool(server, ctx, {
42
+ name: "update_group",
43
+ description: "Rename a dashboard group.",
44
+ inputSchema: {
45
+ group_id: z.string().optional(),
46
+ group: z.string().optional().describe("Dashboard group name, slug, or id."),
47
+ name: z.string(),
48
+ },
49
+ annotations: { title: "Rename dashboard group" },
50
+ handler: async (args) => {
51
+ const groupId = await resolveGroupId(ctx.client, args);
52
+ if (!groupId)
53
+ throw new Error("Pass group_id or group.");
54
+ const group = await ctx.client.request(`/groups/${encodeURIComponent(groupId)}`, {
55
+ method: "PATCH",
56
+ body: { name: args.name },
57
+ });
58
+ return { text: `Renamed dashboard group to '${group.name}'.`, data: group };
59
+ },
60
+ });
61
+ registerTool(server, ctx, {
62
+ name: "move_projects_to_group",
63
+ description: "Move existing projects into a dashboard group. Pass project_ids or project slugs.",
64
+ inputSchema: {
65
+ group_id: z.string().optional(),
66
+ group: z
67
+ .string()
68
+ .optional()
69
+ .describe("Destination dashboard group name, slug, or id."),
70
+ project_ids: z.array(z.string()).default([]),
71
+ projects: z.array(z.string()).default([]).describe("Project slugs to move."),
72
+ },
73
+ annotations: { title: "Move projects to group" },
74
+ handler: async (args) => {
75
+ const groupId = await resolveGroupId(ctx.client, args);
76
+ if (!groupId)
77
+ throw new Error("Pass group_id or group.");
78
+ const projectIds = await resolveProjectIds(ctx, args.project_ids ?? [], args.projects ?? []);
79
+ const group = await ctx.client.request(`/groups/${encodeURIComponent(groupId)}/projects`, {
80
+ method: "PUT",
81
+ body: { project_ids: projectIds },
82
+ });
83
+ return {
84
+ text: `Moved ${projectIds.length} project(s) into '${group.name}'.`,
85
+ data: group,
86
+ };
87
+ },
88
+ });
89
+ registerTool(server, ctx, {
90
+ name: "delete_group",
91
+ description: "Delete a dashboard group. Projects are moved to the owner's default personal group. Requires confirm:true and confirm_name matching the group name.",
92
+ inputSchema: {
93
+ group_id: z.string().optional(),
94
+ group: z.string().optional().describe("Dashboard group name, slug, or id."),
95
+ confirm: z.boolean().optional(),
96
+ confirm_name: z.string().optional(),
97
+ },
98
+ annotations: { destructiveHint: true, title: "Delete dashboard group" },
99
+ audit: true,
100
+ handler: async (args) => {
101
+ const group = await resolveGroup(ctx.client, args);
102
+ if (!group)
103
+ throw new Error("Pass group_id or group.");
104
+ const safety = checkSafety({
105
+ toolName: "delete_group",
106
+ tier: "destructive",
107
+ expectedName: group.name,
108
+ impact: {
109
+ group: group.name,
110
+ id: group.id,
111
+ note: "Deletes the dashboard group and moves its projects to the owner's default personal group.",
112
+ },
113
+ }, { confirm: args.confirm, confirm_name: args.confirm_name });
114
+ if (!safety.proceed)
115
+ return { text: renderDryRun(safety.dryRun) };
116
+ await ctx.client.request(`/groups/${encodeURIComponent(group.id)}`, {
117
+ method: "DELETE",
118
+ });
119
+ return { text: `Deleted dashboard group '${group.name}'.` };
120
+ },
121
+ });
122
+ }
123
+ async function resolveProjectIds(ctx, explicitIds, slugs) {
124
+ const ids = new Set(explicitIds.filter(Boolean));
125
+ if (slugs.length === 0)
126
+ return [...ids];
127
+ const projects = await fetchProjects(ctx);
128
+ for (const slug of slugs) {
129
+ const project = findProjectBySlug(projects, slug);
130
+ if (!project) {
131
+ throw new Error(`No project named '${slug}' is visible to this token. Call list_projects to see available projects.`);
132
+ }
133
+ ids.add(project.id);
134
+ }
135
+ return [...ids];
136
+ }
137
+ function findProjectBySlug(projects, slug) {
138
+ const normalized = slug.trim().toLowerCase();
139
+ return projects.find((project) => project.id === slug || project.name.toLowerCase() === normalized);
140
+ }
141
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/tools/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAgB;IACpE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,oHAAoH;QACtH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE;QACzD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,4FAA4F;QAC9F,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,2CAA2C,CAAC;SACzD;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;QAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CACxC,GAAG,EACH,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,IAAI,CAAC,QAAQ,IAAI,EAAE,CACpB,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAQ,SAAS,EAAE;gBACvD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;aACnD,CAAC,CAAC;YACH,OAAO;gBACL,IAAI,EAAE,4BAA4B,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,KAC5D,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC,EAClE,EAAE;gBACF,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;QAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CACpC,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,EACxC;gBACE,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;aAC1B,CACF,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,+BAA+B,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC9E,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,mFAAmF;QACrF,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SAC7E;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;QAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CACxC,GAAG,EACH,IAAI,CAAC,WAAW,IAAI,EAAE,EACtB,IAAI,CAAC,QAAQ,IAAI,EAAE,CACpB,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CACpC,WAAW,kBAAkB,CAAC,OAAO,CAAC,WAAW,EACjD;gBACE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;aAClC,CACF,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,SAAS,UAAU,CAAC,MAAM,qBAAqB,KAAK,CAAC,IAAI,IAAI;gBACnE,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,qJAAqJ;QACvJ,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC3E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC;QACD,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACvE,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,WAAW,CACxB;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,aAAa;gBACnB,YAAY,EAAE,KAAK,CAAC,IAAI;gBACxB,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,2FAA2F;iBAClG;aACF,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAC3D,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClE,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,4BAA4B,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9D,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,GAAgB,EAChB,WAAqB,EACrB,KAAe;IAEf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,2EAA2E,CACrG,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAmB,EAAE,IAAY;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAC9E,CAAC;AACJ,CAAC"}
@@ -8,6 +8,7 @@ import { registerProtectionTools } from "./protection.js";
8
8
  import { registerVolumeTools } from "./volumes.js";
9
9
  import { registerServiceTools } from "./services.js";
10
10
  import { registerGithubTools } from "./github.js";
11
+ import { registerGroupTools } from "./groups.js";
11
12
  import { registerWorkspaceTools } from "./workspaces.js";
12
13
  import { registerAnalyticsTools } from "./analytics.js";
13
14
  import { registerEmailTools } from "./email.js";
@@ -25,6 +26,7 @@ export function registerAllTools(server, ctx) {
25
26
  registerVolumeTools(server, ctx);
26
27
  registerServiceTools(server, ctx);
27
28
  registerGithubTools(server, ctx);
29
+ registerGroupTools(server, ctx);
28
30
  registerWorkspaceTools(server, ctx);
29
31
  registerAnalyticsTools(server, ctx);
30
32
  registerEmailTools(server, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAgB;IAClE,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAgB;IAClE,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -3,17 +3,57 @@ import { registerTool } from "./_helpers.js";
3
3
  import { resolveProject, fetchProjects } from "../resolve/project.js";
4
4
  import { checkSafety } from "../lib/safety.js";
5
5
  import { renderDryRun, renderProjectSummary } from "../lib/format.js";
6
+ import { resolveGroupId } from "../lib/groups.js";
7
+ export function buildCreateProjectPayload(args, resolvedGroupId) {
8
+ const payload = {
9
+ name: args.name,
10
+ github_owner: args.github_owner,
11
+ github_repo: args.github_repo,
12
+ branch: args.branch,
13
+ framework: args.framework,
14
+ package_manager: args.package_manager,
15
+ root_directory: args.root_directory,
16
+ output_directory: args.output_directory,
17
+ build_command: args.build_command,
18
+ install_command: args.install_command,
19
+ node_version: args.node_version,
20
+ port: args.port,
21
+ auto_build_enabled: args.auto_build_enabled,
22
+ auto_production_enabled: args.auto_production_enabled,
23
+ };
24
+ const groupId = resolvedGroupId ?? args.group_id ?? args.organization_id;
25
+ if (groupId)
26
+ payload.organization_id = groupId;
27
+ if (args.resource_tier)
28
+ payload.resource_tier = args.resource_tier;
29
+ if (args.start_command)
30
+ payload.start_command = args.start_command;
31
+ if (args.health_path)
32
+ payload.health_path = args.health_path;
33
+ return payload;
34
+ }
6
35
  export function registerProjectTools(server, ctx) {
7
36
  registerTool(server, ctx, {
8
37
  name: "list_projects",
9
- description: "List Deployik projects this token can access. Optionally filter by workspace.",
38
+ description: "List Deployik projects this token can access. Optionally filter by dashboard group.",
10
39
  inputSchema: {
11
- workspace: z.string().optional().describe("Workspace slug or organization id to filter by."),
40
+ group_id: z.string().optional().describe("Dashboard group id to filter by."),
41
+ group: z.string().optional().describe("Dashboard group name, slug, or id to filter by."),
42
+ workspace: z.string().optional().describe("Deprecated alias for group name, slug, or id."),
12
43
  },
13
44
  annotations: { readOnlyHint: true, title: "List projects" },
14
45
  handler: async (args) => {
15
- const projects = await fetchProjects(ctx);
16
- const filtered = args.workspace
46
+ const groupId = await resolveGroupId(ctx.client, {
47
+ group_id: args.group_id,
48
+ group: args.group,
49
+ workspace: args.workspace,
50
+ });
51
+ const projects = groupId
52
+ ? await ctx.client.request("/projects", {
53
+ query: { organization_id: groupId },
54
+ })
55
+ : await fetchProjects(ctx);
56
+ const filtered = args.workspace && !groupId
17
57
  ? projects.filter((p) => (p.organization_name ?? "").toLowerCase() === args.workspace.toLowerCase() ||
18
58
  p.organization_id === args.workspace)
19
59
  : projects;
@@ -27,10 +67,14 @@ export function registerProjectTools(server, ctx) {
27
67
  data: filtered.map((p) => ({
28
68
  id: p.id,
29
69
  name: p.name,
70
+ group: p.organization_name ?? p.organization_id,
30
71
  workspace: p.organization_name ?? p.organization_id,
31
72
  repo: `${p.github_owner}/${p.github_repo}`,
32
73
  branch: p.branch,
33
74
  status: p.status,
75
+ latest_deployment_status: p.latest_deployment_status,
76
+ latest_deployment_environment: p.latest_deployment_environment,
77
+ latest_deployment_created_at: p.latest_deployment_created_at,
34
78
  })),
35
79
  };
36
80
  },
@@ -41,6 +85,8 @@ export function registerProjectTools(server, ctx) {
41
85
  inputSchema: {
42
86
  project_id: z.string().optional(),
43
87
  project: z.string().optional().describe("Project slug, e.g. 'my-app'."),
88
+ group_id: z.string().optional(),
89
+ group: z.string().optional().describe("Dashboard group name, slug, or id."),
44
90
  workspace: z.string().optional(),
45
91
  },
46
92
  annotations: { readOnlyHint: true },
@@ -65,33 +111,23 @@ export function registerProjectTools(server, ctx) {
65
111
  install_command: z.string().default(""),
66
112
  node_version: z.string().default("22"),
67
113
  port: z.number().int().min(1).max(65535).default(3000),
68
- organization_id: z.string().optional(),
114
+ group_id: z.string().optional().describe("Dashboard group id. Preferred over organization_id."),
115
+ group: z.string().optional().describe("Dashboard group name, slug, or id."),
116
+ organization_id: z.string().optional().describe("Backward-compatible alias for group_id."),
69
117
  auto_build_enabled: z.boolean().default(true),
70
118
  auto_production_enabled: z.boolean().default(false),
71
119
  resource_tier: z.enum(["nano", "small", "medium", "large"]).optional(),
120
+ start_command: z.string().optional(),
121
+ health_path: z.string().optional(),
72
122
  },
73
123
  annotations: { title: "Create project" },
74
124
  handler: async (args) => {
75
- const payload = {
76
- name: args.name,
77
- github_owner: args.github_owner,
78
- github_repo: args.github_repo,
79
- branch: args.branch,
80
- framework: args.framework,
81
- package_manager: args.package_manager,
82
- root_directory: args.root_directory,
83
- output_directory: args.output_directory,
84
- build_command: args.build_command,
85
- install_command: args.install_command,
86
- node_version: args.node_version,
87
- port: args.port,
88
- auto_build_enabled: args.auto_build_enabled,
89
- auto_production_enabled: args.auto_production_enabled,
90
- };
91
- if (args.organization_id)
92
- payload.organization_id = args.organization_id;
93
- if (args.resource_tier)
94
- payload.resource_tier = args.resource_tier;
125
+ const groupId = await resolveGroupId(ctx.client, {
126
+ group_id: args.group_id,
127
+ group: args.group,
128
+ organization_id: args.organization_id,
129
+ });
130
+ const payload = buildCreateProjectPayload(args, groupId);
95
131
  const project = await ctx.client.request(`/projects`, { method: "POST", body: payload });
96
132
  return { text: `Created project '${project.name}' (id: ${project.id}).\n\n${renderProjectSummary(project)}`, data: project };
97
133
  },
@@ -117,6 +153,8 @@ export function registerProjectTools(server, ctx) {
117
153
  host_network_access: z.boolean().optional(),
118
154
  data_volume_enabled: z.boolean().optional(),
119
155
  data_mount_path: z.string().optional(),
156
+ start_command: z.string().optional(),
157
+ health_path: z.string().optional(),
120
158
  resource_tier: z.enum(["nano", "small", "medium", "large"]).optional(),
121
159
  })
122
160
  .describe("Fields to update. Server validates."),
@@ -151,6 +189,7 @@ export function registerProjectTools(server, ctx) {
151
189
  project: project.name,
152
190
  id: project.id,
153
191
  workspace: project.organization_name ?? project.organization_id,
192
+ group: project.organization_name ?? project.organization_id,
154
193
  note: "Will stop all containers, remove nginx configs, drop domains. Soft-deleted in DB (status='deleted').",
155
194
  },
156
195
  }, { confirm: args.confirm, confirm_name: args.confirm_name });
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import { renderDryRun, renderProjectSummary, renderDeploymentSummary, renderDoma
7
7
  import { formatLogs } from "../lib/logs.js";
8
8
  import { writeBinding, ensureGitignore, readBinding } from "../config/binding.js";
9
9
  import { requireEnvironment, requireScope } from "../lib/normalize.js";
10
+ import { resolveGroupId } from "../lib/groups.js";
11
+ import { buildCreateProjectPayload } from "./projects.js";
10
12
  // Accept any string so we can normalize 'prod'/'live'/'staging' charitably.
11
13
  const ENV = z.string().describe("'preview' (test) or 'production' (live). Also accepts: prod, live, staging, dev, test.");
12
14
  const VAR_SCOPE = z.string().describe("'shared' (both envs), 'preview' (test only), or 'production' (live only). Also accepts: both, all, prod, live, staging.");
@@ -14,7 +16,7 @@ const TERMINAL_STATUSES = new Set(["live", "failed", "replaced", "rolled_back"])
14
16
  export function registerWorkflowTools(server, ctx) {
15
17
  registerTool(server, ctx, {
16
18
  name: "init_in_repo",
17
- description: "Bootstrap this repo: write `.deployik/binding.json` (project + workspace), append `.deployik/` to .gitignore, and validate the token via whoami. Run this once per repo.",
19
+ description: "Bootstrap this repo: write `.deployik.json` (project + dashboard group), append `.deployik/` to .gitignore, and validate the token via whoami. Run this once per repo.",
18
20
  inputSchema: {
19
21
  project: z.string().optional(),
20
22
  project_id: z.string().optional(),
@@ -33,7 +35,7 @@ export function registerWorkflowTools(server, ctx) {
33
35
  writeBinding(ctx.stateDir, ctx.cwd, binding);
34
36
  const gitignoreUpdated = ensureGitignore(ctx.cwd);
35
37
  const lines = [
36
- `Bound this repo to Deployik project '${project.name}' (workspace: ${binding.workspace}).`,
38
+ `Bound this repo to Deployik project '${project.name}' (group: ${binding.workspace}).`,
37
39
  `Authenticated as ${user.username} (${user.role}).`,
38
40
  `Resolution source: ${source}.`,
39
41
  `Wrote .deployik.json (commit this — it tells teammates which project deploys here).`,
@@ -54,9 +56,14 @@ export function registerWorkflowTools(server, ctx) {
54
56
  framework: z.enum(["nextjs", "vite", "astro", "static"]).optional(),
55
57
  package_manager: z.enum(["auto", "bun", "pnpm", "npm", "yarn"]).optional(),
56
58
  root_directory: z.string().optional().describe("If the repo is a monorepo, the app subdirectory."),
57
- organization_id: z.string().optional(),
59
+ group_id: z.string().optional().describe("Dashboard group id. Preferred over organization_id."),
60
+ group: z.string().optional().describe("Dashboard group name, slug, or id."),
61
+ organization_id: z.string().optional().describe("Backward-compatible alias for group_id."),
58
62
  auto_build_enabled: z.boolean().default(true),
59
63
  auto_production_enabled: z.boolean().default(false),
64
+ resource_tier: z.enum(["nano", "small", "medium", "large"]).optional(),
65
+ start_command: z.string().optional(),
66
+ health_path: z.string().optional(),
60
67
  },
61
68
  handler: async (args) => {
62
69
  const inspection = await ctx.client.request(`/github/repos/${encodeURIComponent(args.owner)}/${encodeURIComponent(args.repo)}/inspect`, { query: { branch: args.branch } });
@@ -67,7 +74,12 @@ export function registerWorkflowTools(server, ctx) {
67
74
  else if (inspection.apps.length > 0) {
68
75
  detectedApp = inspection.apps[0];
69
76
  }
70
- const payload = {
77
+ const groupId = await resolveGroupId(ctx.client, {
78
+ group_id: args.group_id,
79
+ group: args.group,
80
+ organization_id: args.organization_id,
81
+ });
82
+ const payload = buildCreateProjectPayload({
71
83
  name: args.name,
72
84
  github_owner: args.owner,
73
85
  github_repo: args.repo,
@@ -82,9 +94,10 @@ export function registerWorkflowTools(server, ctx) {
82
94
  port: 3000,
83
95
  auto_build_enabled: args.auto_build_enabled,
84
96
  auto_production_enabled: args.auto_production_enabled,
85
- };
86
- if (args.organization_id)
87
- payload.organization_id = args.organization_id;
97
+ resource_tier: args.resource_tier,
98
+ start_command: args.start_command,
99
+ health_path: args.health_path,
100
+ }, groupId);
88
101
  const project = await ctx.client.request(`/projects`, { method: "POST", body: payload });
89
102
  return {
90
103
  text: [
@@ -334,7 +347,7 @@ export function registerWorkflowTools(server, ctx) {
334
347
  });
335
348
  registerTool(server, ctx, {
336
349
  name: "show_binding",
337
- description: "Print the current .deployik binding (project + workspace) for this repo, if any. Useful to confirm resolution before running other tools.",
350
+ description: "Print the current .deployik binding (project + dashboard group) for this repo, if any. Useful to confirm resolution before running other tools.",
338
351
  annotations: { readOnlyHint: true },
339
352
  handler: async () => {
340
353
  const binding = readBinding(ctx.stateDir);
@@ -346,7 +359,8 @@ export function registerWorkflowTools(server, ctx) {
346
359
  const lines = [
347
360
  `Binding (${ctx.stateDir}):`,
348
361
  ` project: ${binding.project}`,
349
- ` workspace: ${binding.workspace ?? "(unset)"}`,
362
+ ` group: ${binding.workspace ?? "(unset)"}`,
363
+ ` workspace: ${binding.workspace ?? "(unset)"} (legacy key)`,
350
364
  ` defaultEnvironment: ${binding.defaultEnvironment ?? "(unset)"}`,
351
365
  ];
352
366
  if (project)
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/tools/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAY1D,4EAA4E;AAC5E,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wFAAwF,CAAC,CAAC;AAC1H,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yHAAyH,CAAC,CAAC;AAEjK,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAEjF,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,GAAgB;IACvE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,wKAAwK;QAC1K,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;SACjJ;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAO,UAAU,CAAC,CAAC;YACxD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/G,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,SAAS,EAAE,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,eAAe;gBAC/D,kBAAkB;aACV,CAAC;YACX,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG;gBACZ,wCAAwC,OAAO,CAAC,IAAI,aAAa,OAAO,CAAC,SAAS,IAAI;gBACtF,oBAAoB,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI;gBACnD,sBAAsB,MAAM,GAAG;gBAC/B,qFAAqF;gBACrF,gBAAgB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qEAAqE;gBAC9H,sBAAsB,GAAG,CAAC,QAAQ,wCAAwC;aAC3E,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC;QAClF,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,kMAAkM;QACpM,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;YACnE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC1E,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YAClG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC3E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC1F,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7C,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACnD,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;YACtE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CACzC,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAC1F,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CACnC,CAAC;YAEF,IAAI,WAAkD,CAAC;YACvD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5E,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,eAAe,EAAE,IAAI,CAAC,eAAe;aACtC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,yBAAyB,CACvC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,YAAY,EAAE,IAAI,CAAC,KAAK;gBACxB,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE,SAAS,IAAI,QAAQ;gBAC/D,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM;gBAC7E,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,WAAW,EAAE,IAAI,IAAI,EAAE;gBAC9D,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,IAAI,EAAE;gBACrD,aAAa,EAAE,WAAW,EAAE,uBAAuB,IAAI,EAAE;gBACzD,eAAe,EAAE,EAAE;gBACnB,YAAY,EAAE,IAAI;gBAClB,IAAI,EAAE,IAAI;gBACV,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;gBACrD,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,EACD,OAAO,CACR,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAU,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAElG,OAAO;gBACL,IAAI,EAAE;oBACJ,oBAAoB,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,EAAE,IAAI;oBACxD,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,sCAAsC,OAAO,CAAC,cAAc,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,kBAAkB;oBACrH,cAAc,OAAO,CAAC,SAAS,uBAAuB,OAAO,CAAC,eAAe,EAAE;oBAC/E,eAAe,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,sBAAsB,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG;oBAC7I,6FAA6F;iBAC9F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;aAC9B,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,mYAAmY;QACrY,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACrE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACnC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAChC;QACD,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,WAAW,CACxB;oBACE,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE,wBAAwB;oBAC9B,YAAY,EAAE,OAAO,CAAC,IAAI;oBAC1B,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;iBACjI,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAC3D,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,CAAC;YACD,MAAM,IAAI,GAA4B,EAAE,WAAW,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC5C,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,aAAa,WAAW,aAAa,uBAAuB,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAChH,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,UAAU,CAAC,EAAE,EAAE,CAAC,EAC5F,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CACvE,CAAC;YAEF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC,CAAC;YAClH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,cAAc,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,uBAAuB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACxF,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,oWAAoW;QACtW,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;YACzG,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACvD;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,IAAI,EAAE,sIAAsI;oBAC5I,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,CAAC,EAAE,UAAU,EAAE;gBAC1D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;aACxD,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC,GAAG,QAAQ,WAAW,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;QACtF,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,mSAAmS;QACrS,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YACzG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,CAAC,EAAE,MAAM,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;aACxD,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,QAAQ,WAAW,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;QAC/E,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,oHAAoH;QACjI,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;SACtE;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAC5B,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,EACjG,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CACjD,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;oBACf,CAAC,CAAC,cAAc,IAAI,CAAC,aAAa,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,MAAM,CAAC,SAAS,QAAQ,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACzI,CAAC,CAAC,qCAAqC,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,MAAM,CAAC,SAAS,KAAK;gBAC5F,IAAI,EAAE,MAAM,CAAC,KAAK;aACnB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,4OAA4O;QAC9O,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;SACtE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAC1C,aAAa,OAAO,CAAC,EAAE,cAAc,EACrC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CACrC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,IAAI,EAAE,OAAO,WAAW,wBAAwB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;YAC7E,CAAC;YAED,IAAI,OAAO,GAAG,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC,CAAC;YAEjH,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClB,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;oBACpG,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACjG,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;wBAAE,MAAM;gBACnD,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,MAAM,GAAG,cAAc,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,aAAa,KAAK,OAAO,CAAC,WAAW,MAAM,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YACvK,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5H,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO;gBACL,IAAI,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,IAAI,GAAG,YAAY,GAAG,MAAM,EAAE;gBAC5D,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE;aAC5L,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,6GAA6G;QAC1H,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;SAC1B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YACrH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC,CAAC;YACtH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG;gBACf,uBAAuB,CAAC,UAAU,CAAC;gBACnC,EAAE;gBACF,aAAa,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,UAAU;gBACtE,SAAS,CAAC,IAAI;aACf,CAAC;YACF,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,2BAA2B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,iCAAiC,aAAa,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC;QACjG,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,qHAAqH;QAClI,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC/B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpF,GAAG,CAAC,MAAM,CAAC,OAAO,CAAW,aAAa,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC;gBAC3F,GAAG,CAAC,MAAM,CAAC,OAAO,CAAe,aAAa,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAkB,CAAC;gBACnG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAmB,aAAa,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAuB,CAAA,CAAC;gBACnK,GAAG,CAAC,MAAM,CAAC,OAAO,CAA+C,aAAa,OAAO,CAAC,EAAE,cAAc,EAAE;oBACtG,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;iBAC5C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,OAAO,CAA+C,aAAa,OAAO,CAAC,EAAE,cAAc,EAAE;oBACtG,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;iBAC/C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAChD,CAAC,CAAC;YACH,MAAM,KAAK,GAAG;gBACZ,oBAAoB,CAAC,OAAO,CAAC;gBAC7B,EAAE;gBACF,sBAAsB,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACzI,sBAAsB,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAClJ,EAAE;gBACF,UAAU;gBACV,iBAAiB,CAAC,OAAO,CAAC;gBAC1B,EAAE;gBACF,UAAU;gBACV,iBAAiB,CAAC,OAAO,CAAC;gBAC1B,EAAE;gBACF,aAAa;gBACb,gBAAgB,CAAC,UAAU,CAAC;aAC7B,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,EAAE;oBACJ,OAAO;oBACP,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;oBAC1G,OAAO;oBACP,OAAO;oBACP,UAAU;iBACX;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,iJAAiJ;QAC9J,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,IAAI,EAAE,6EAA6E,EAAE,CAAC;YACjG,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG;gBACZ,YAAY,GAAG,CAAC,QAAQ,IAAI;gBAC5B,0BAA0B,OAAO,CAAC,OAAO,EAAE;gBAC3C,0BAA0B,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE;gBAC1D,0BAA0B,OAAO,CAAC,SAAS,IAAI,SAAS,eAAe;gBACvE,0BAA0B,OAAO,CAAC,kBAAkB,IAAI,SAAS,EAAE;aACpE,CAAC;YACF,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QAChE,CAAC;KACF,CAAC,CAAC;IAEH,oEAAoE;IACpE,iDAAiD;IACjD,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,wEAAwE;IACxE,uDAAuD;IACvD,oEAAoE;IAEpE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,qIAAqI;QACvI,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC/B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAW,aAAa,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YACtF,MAAM,UAAU,GAA6B,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YAC7E,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE,CACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC;gBAC7E,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC9B,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAa,CAAC,aAAa,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAU,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,GAAG,eAAe,CAAC,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,cAAc,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrI,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,OAAO,IAAI,GAAG,CAAC,CAAC;gBAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;gBACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxG,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QACjK,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,iRAAiR;QACnR,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE;SAC5B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtF,IAAI,iBAA4B,CAAC;YACjC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpD,iBAAiB,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC;YAGD,MAAM,QAAQ,GAAgB,EAAE,CAAC;YACjC,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM;qBAC1B,OAAO,CAA+C,aAAa,OAAO,CAAC,EAAE,cAAc,EAAE;oBAC5F,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;iBAC9D,CAAC;qBACD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,GAAG;oBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,IAAI,EAAE,8BAA8B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;YAC/G,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC,CAAC;YACtH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,kBAAkB,MAAM,CAAC,GAAG,CAAC,WAAW,iBAAiB,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7I,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvH,OAAO;gBACL,IAAI,EAAE,GAAG,MAAM,iBAAiB,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,UAAU,OAAO,SAAS,CAAC,IAAI,GAAG,OAAO,EAAE;gBAChH,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;aACnH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,oOAAoO;QACtO,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YACnC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACrE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC;QACD,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,WAAW,CACxB;oBACE,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,wBAAwB;oBAC9B,YAAY,EAAE,OAAO,CAAC,IAAI;oBAC1B,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;iBACvE,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAC3D,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,cAAc,EAAE;gBACtF,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,WAAW,EAAE;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,OAAO,CAAC,IAAI,KAAK,WAAW,OAAO,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACrI,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAE,EAAE,CAAC,EACrF,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CACvE,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAW,aAAa,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;gBAClH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;gBACzI,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzG,OAAO;oBACL,IAAI,EAAE;wBACJ,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,kBAAkB;wBACnD,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;wBACxB,uBAAuB,CAAC,MAAM,CAAC;qBAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5B,IAAI,EAAE,MAAM;iBACb,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC,CAAC;YAClH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO;gBACL,IAAI,EAAE,iBAAiB,OAAO,CAAC,IAAI,KAAK,WAAW,eAAe,MAAM,CAAC,MAAM,OAAO,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,SAAS,CAAC,IAAI,EAAE;gBACvJ,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,sSAAsS;QACxS,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;SAC9D;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1G,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,KAAK;wBAChB,CAAC,CAAC,uBAAuB,MAAM,CAAC,KAAK,GAAG;wBACxC,CAAC,CAAC,wBAAwB,IAAI,CAAC,WAAW,0CAA0C;iBACvF,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,wCAAwC,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,mBAAmB,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1M,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO;gBACL,IAAI,EAAE,GAAG,MAAM,OAAO,QAAQ,GAAG,MAAM,EAAE;gBACzC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;aACrH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,yYAAyY;QAC3Y,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;YACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7D,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SAC3C;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,OAAO,CAAC,EAAE,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAErH,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;gBAClC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,gBAAgB,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgB,CAAC;gBAC1G,CAAC,CAAC,EAAE,CAAC;YAEP,sEAAsE;YACtE,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBACnD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAgB,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE;gBAC7F,CAAC,CAAC,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjK,mFAAmF;YACnF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxF,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;YAC1D,MAAM,MAAM,GAAG;gBACb,cAAc,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBACtH,GAAG,UAAU,CAAC,WAAW,MAAM,UAAU,CAAC,MAAM,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;aACjG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5H,MAAM,MAAM,GAAG,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnI,OAAO;gBACL,IAAI,EAAE,GAAG,MAAM,OAAO,SAAS,CAAC,IAAI,GAAG,YAAY,GAAG,MAAM,EAAE;gBAC9D,IAAI,EAAE;oBACJ,aAAa,EAAE,UAAU,CAAC,EAAE;oBAC5B,WAAW;oBACX,YAAY,EAAE,OAAO,CAAC,MAAM;oBAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;oBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS;oBAChD,YAAY,EAAE,SAAS,CAAC,YAAY;iBACrC;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAgB,EAChB,SAAiB,EACjB,YAAoB,EACpB,UAAkB,EAClB,QAAgB,EAChB,eAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,YAAY,OAAO,CAAC,CAAC;IACrE,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE;YACrD,gBAAgB,EAAE,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAA+B,CAAC;QACpC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAI,CAAC;gBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QAErD,8EAA8E;QAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAa,aAAa,SAAS,gBAAgB,YAAY,EAAE,CAAC,CAAC;gBACvG,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;oBACzB,gEAAgE;oBAChE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAqC,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAmB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,sDAAsD;YAChE,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,OAAO;YAClD,MAAM,GAAG,GAAG,MAAiC,CAAC;YAC9C,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,eAAe;gBAAE,OAAO,CAAC,gBAAgB;YAC7E,MAAM,GAAG,GAAa;gBACpB,EAAE,EAAE,CAAC;gBACL,aAAa,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;gBACvF,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3D,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACrD,SAAS,EAAE,EAAE;aACd,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC7B,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM,EAAE,CAAC;gBACT,OAAO;YACT,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAgB,EAChB,SAAiB,EACjB,WAAmB,EACnB,UAAkB,EAClB,QAAgB;IAEhB,uEAAuE;IACvE,kFAAkF;IAClF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,SAAS,aAAa,WAAW,OAAO,CAAC,CAAC;IACvF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE;YACrD,gBAAgB,EAAE,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC;gBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QAErD,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAqC,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAmB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxD,0EAA0E;YAC1E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;oBAC7B,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,EAAE,CAAC;oBACT,OAAO;gBACT,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,15 +1,13 @@
1
1
  import { registerTool } from "./_helpers.js";
2
+ import { fetchGroups, renderGroupsList } from "../lib/groups.js";
2
3
  export function registerWorkspaceTools(server, ctx) {
3
4
  registerTool(server, ctx, {
4
5
  name: "list_workspaces",
5
- description: "List workspaces (organizations) the token owner can see.",
6
+ description: "Deprecated alias for list_groups. Lists dashboard groups the token owner can see.",
6
7
  annotations: { readOnlyHint: true },
7
8
  handler: async () => {
8
- const orgs = await ctx.client.request(`/organizations`);
9
- const text = orgs
10
- .map((o) => ` • ${o.slug.padEnd(24)} ${o.is_personal ? "personal" : "shared"} role=${o.membership_role} projects=${o.project_count}`)
11
- .join("\n");
12
- return { text, data: orgs };
9
+ const groups = await fetchGroups(ctx.client);
10
+ return { text: renderGroupsList(groups), data: groups };
13
11
  },
14
12
  });
15
13
  registerTool(server, ctx, {
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/tools/workspaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAG/D,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,GAAgB;IACxE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAiB,gBAAgB,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,IAAI;iBACd,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,eAAe,cAAc,CAAC,CAAC,aAAa,EAAE,CAC/H;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAe,WAAW,CAAC,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,8CAA8C,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oGAAoG;QACjH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAO,UAAU,CAAC,CAAC;YACxD,OAAO;gBACL,IAAI,EAAE,oBAAoB,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC,EAAE,EAAE;gBAC1G,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAiB,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACzB,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAC7F,OAAO,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,MAAM,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7E,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/tools/workspaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,GAAgB;IACxE,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,mFAAmF;QACrF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAe,WAAW,CAAC,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,8CAA8C,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oGAAoG;QACjH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAO,UAAU,CAAC,CAAC;YACxD,OAAO;gBACL,IAAI,EAAE,oBAAoB,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC,EAAE,EAAE;gBAC1G,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAiB,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACzB,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAC7F,OAAO,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,MAAM,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7E,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED by scripts/copy-recipes.mjs from ../package.json. Do not edit by hand.
2
- export const VERSION = "0.3.0";
2
+ export const VERSION = "0.3.1";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovinka/deployik-mcp",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "MCP server for Deployik — drive projects, deployments, secrets, and domains from any MCP-aware AI.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",