[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-activate-site":3,"mdc-s4leco-key":37,"related-repo-microsoft-activate-site":3058,"related-org-microsoft-activate-site":3151},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":32,"sourceUrl":35,"mdContent":36},"activate-site","provision and activate Power Pages sites","Activates and provisions a Power Pages website in a Power Platform environment via the Power Platform REST API. Use when the user wants to activate, provision, turn on, or enable a Power Pages website or portal.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,17],{"name":13,"slug":14,"type":15},"Power Pages","power-pages","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Deployment","deployment",564,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","2026-04-06T18:34:34.732549",null,114,[26,27,28,29,30,14,31],"claude-code-plugin","claude-code-skills","code-apps","github-copilot-plugin","power-apps","power-platform",{"repoUrl":21,"stars":20,"forks":24,"topics":33,"description":34},[26,27,28,29,30,14,31],"A plugin marketplace for Claude Code\u002FGitHub Copilot that provides Power Platform development plugins, including reusable skills, agents, and commands for building and deploying solutions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fpower-pages\u002Fskills\u002Factivate-site","---\nname: activate-site\ndescription: >-\n  Activates and provisions a Power Pages website in a Power Platform environment\n  via the Power Platform REST API. Use when the user wants to activate, provision,\n  turn on, or enable a Power Pages website or portal.\nuser-invocable: true\nallowed-tools: Read, Bash, Glob, Grep, AskUserQuestion, TaskCreate, TaskUpdate, TaskList\nmodel: sonnet\n---\n\n> **Plugin check**: Run `node \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-version.js\"` — if it outputs a message, show it to the user before proceeding.\n\n# Activate Power Pages Site\n\nProvision a new Power Pages website in a Power Platform environment via the Power Platform REST API.\n\n> **Prerequisite:** This skill expects an existing Power Pages code site created via `\u002Fcreate-site`. Run that skill first if the site does not exist yet.\n\n## Core Principles\n\n- **Cloud-aware URL resolution** — Never hardcode API base URLs or site URL domains. Always derive them from the Cloud value returned by `pac auth who`.\n- **Token handling** — Scripts acquire and refresh Azure CLI tokens internally. The agent only needs to verify the user is logged in to Azure CLI.\n- **Confirm before mutating** — Always present the full activation parameters to the user and get explicit approval before POSTing to the websites API.\n\n**Initial request:** $ARGUMENTS\n\n## Workflow\n\n1. **Phase 1: Verify Prerequisites** — PAC CLI auth + Azure CLI login + activation status check\n2. **Phase 2: Gather Parameters** — Site name, subdomain, website record ID\n3. **Phase 3: Confirm** — Present all parameters to user for approval\n4. **Phase 4: Activate & Poll** — Run activation script (POST + poll provisioning status)\n5. **Phase 5: Present Summary** — Show site URL, suggest next steps\n\n---\n\n## Phase 1: Verify Prerequisites\n\n**Goal:** Ensure PAC CLI is installed and authenticated, and verify the user is logged in to Azure CLI (scripts handle token acquisition internally).\n\n### Actions\n\n#### 1.1 Verify PAC CLI\n\nRun `pac help` to check if the PAC CLI is installed and available on the system PATH.\n\n```bash\npac help\n```\n\n**If the command fails** (command not found \u002F not recognized):\n\n1. Tell the user: \"PAC CLI is not installed. You can install it by running:\"\n\n   ```bash\n   dotnet tool install --global Microsoft.PowerApps.CLI.Tool\n   ```\n\n2. If `dotnet` is also not available, direct the user to \u003Chttps:\u002F\u002Faka.ms\u002FPowerPlatformCLI> for full installation instructions.\n3. After installation, verify by running `pac help` again.\n\n#### 1.2 Check Authentication\n\nRun `pac auth who` to check current authentication status.\n\n```bash\npac auth who\n```\n\n**If authenticated**: Extract these values from the output:\n\n- **Environment ID** — the GUID after `Environment ID:`\n- **Organization ID** — the GUID after `Organization ID:` (this is the Dataverse org ID)\n- **Cloud** — the value after `Cloud:` (e.g., `Public`, `UsGov`, `UsGovHigh`, `UsGovDod`, `China`)\n\n**If not authenticated**: Follow the same authentication flow as `deploy-site` — ask the user for their environment URL and run `pac auth create --environment \"\u003CURL>\"`.\n\n#### 1.3 Verify Azure CLI Login\n\nVerify the user is logged in to Azure CLI (the activation scripts acquire tokens internally):\n\n```bash\naz account show\n```\n\n**If `az` is not installed or not logged in**: Instruct the user to install Azure CLI and run `az login --allow-no-subscriptions` (this form works whether or not the user has an Azure subscription — the activation flow only needs an AAD token).\n\n#### 1.4 Check If Already Activated\n\nBefore gathering parameters, check whether the site is already activated by running the shared activation status script:\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-activation-status.js\" --projectRoot \"\u003CPROJECT_ROOT>\"\n```\n\nWhere `\u003CPROJECT_ROOT>` is the directory containing `powerpages.config.json` or `.powerpages-site` folder.\nEvaluate the JSON result:\n\n- **If `activated` is `true`**: Inform the user their site is already activated at `websiteUrl`. Suggest next steps (Phase 5.3) and stop — do NOT proceed to Phase 2.\n- **If `activated` is `false`**: Proceed to Phase 2.\n- **If `error` is present**: Proceed to Phase 2 (do not block the activation flow).\n\n### Output\n\n- PAC CLI installed and authenticated\n- Environment ID, Organization ID, and Cloud value extracted\n- Azure CLI login confirmed\n- Activation status checked (already activated → stop early, not activated → continue)\n\n---\n\n## Phase 2: Gather Parameters\n\n**Goal:** Determine the site name, generate or accept a subdomain, and look up the website record ID needed for the activation API call.\n\n### Actions\n\n#### 2.1 Read Site Name\n\nLook for `powerpages.config.json` in the current directory or one level of subdirectories using `Glob`:\n\n```text\n**\u002Fpowerpages.config.json\n```\n\nRead the file and extract the `siteName` field. If not found, ask the user for the site name using `AskUserQuestion`.\n\n#### 2.2 Generate Subdomain Suggestion\n\n> **CRITICAL — This step is MANDATORY. You MUST ask the user about the subdomain before proceeding. Do NOT skip this step or auto-select a subdomain without user input.**\n\nRun the subdomain generator script to create a random suggestion:\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fskills\u002Factivate-site\u002Fscripts\u002Fgenerate-subdomain.js\"\n```\n\nThis outputs a string like `site-a3f2b1`. Resolve the correct site URL domain from the **Cloud** value obtained in Phase 1.2:\n\n| Cloud | Site URL Domain |\n|---|---|\n| `Public` | `powerappsportals.com` |\n| `UsGov` | `powerappsportals.us` |\n| `UsGovHigh` | `high.powerappsportals.us` |\n| `UsGovDod` | `appsplatform.us` |\n| `China` | `powerappsportals.cn` |\n\n\u003C!-- gate: activate-site:2.2.subdomain | category=plan | cancel-leaves=nothing -->\n> 🚦 **Gate (plan · activate-site:2.2.subdomain):** Confirm or override the generated subdomain. Subdomain is part of the resulting site URL; Cancel exits before any provisioning call.\n\nPresent the generated subdomain to the user and ask them to accept or enter their own using `AskUserQuestion`:\n\n| Question | Header | Options |\n|----------|--------|---------|\n| Your site subdomain will be: **`\u003Csuggestion>`** (full URL: `https:\u002F\u002F\u003Csuggestion>.\u003CsiteUrlDomain>`). Would you like to use this subdomain or enter your own? | Subdomain | Use `\u003Csuggestion>` (Recommended), Enter a custom subdomain |\n\n**If custom**: The user provides their own subdomain via \"Other\" free text input. Validate it is lowercase, alphanumeric with hyphens only, and 3-50 characters.\n\n#### 2.3 Get Website Record ID\n\nRun `pac pages list` to get the website record ID:\n\n```bash\npac pages list\n```\n\nParse the output to find the website record that matches the site name. Extract the `Website Record ID` (GUID). If `pac pages list` returns no results or the command is not available, set `websiteRecordId` to `$null` — the API will create a new website record.\n\n### Output\n\n- Site name determined (from config file or user input)\n- Subdomain chosen (generated or custom)\n- Website record ID resolved (GUID or null)\n\n---\n\n## Phase 3: Confirm\n\n**Goal:** Present all activation parameters to the user and get explicit approval before making the API call.\n\n### Actions\n\n\u003C!-- gate: activate-site:3.confirm | category=final | cancel-leaves=nothing -->\n> 🚦 **Gate (final · activate-site:3.confirm):** Last-call before the activation API call. All activation parameters echoed back; Cancel exits cleanly before provisioning. **Fires fresh on every skill invocation.** When `plan-alm` orchestrates multi-stage activation (Staging + Production), it invokes `activate-site` **once per stage** — each invocation hits this gate fresh with its own `siteName`, `subdomain`, and target env. The Staging activation consent does NOT cover Production. Each stage's site URL is a separate go-live decision (different audiences, different timing).\n\nPresent all activation parameters to the user using `AskUserQuestion`:\n\n| Question | Header | Options |\n|----------|--------|---------|\n| Ready to activate your Power Pages site with these settings:\\n\\n- **Site name**: `\u003CsiteName>`\\n- **Subdomain**: `\u003Csubdomain>.powerappsportals.com`\\n- **Environment ID**: `\u003CenvironmentId>`\\n\\nProceed with activation? | Activate | Yes, activate the site (Recommended), No, cancel |\n\n**If \"No\"**: Stop the skill and inform the user they can re-run it later.\n\n**If \"Yes\"**: Proceed to Phase 4.\n\n### Output\n\n- User has explicitly approved the activation parameters\n\n---\n\n## Phase 4: Activate & Poll\n\n**Goal:** POST to the Power Platform websites API to start provisioning, poll until completion, and report the result.\n\n### Actions\n\n#### 4.1 Run Activation Script\n\nRun the shared activation script, passing all parameters gathered in Phases 1–2:\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fskills\u002Factivate-site\u002Fscripts\u002Factivate-site.js\" --siteName \"\u003CsiteName>\" --subdomain \"\u003Csubdomain>\" --organizationId \"\u003CorganizationId>\" --environmentId \"\u003CenvironmentId>\" --cloud \"\u003Ccloud>\" --websiteRecordId \"\u003CwebsiteRecordId>\"\n```\n\nOmit `--websiteRecordId` if it is null\u002Fempty.\n\nThe script acquires an Azure CLI token, POSTs to the websites API, extracts the `Operation-Location` header, and polls every 10 seconds for up to 5 minutes (refreshing the token periodically). It outputs a JSON result to stdout.\n\n> **Note:** This script may run for up to 5 minutes while polling. Use a Bash timeout of at least 360 seconds (6 minutes).\n\n#### 4.2 Handle Results\n\nEvaluate the JSON output:\n\n| `status` value | `statusCode` \u002F `errorCode` | Action |\n|---|---|---|\n| **`Succeeded`** | — | Provisioning complete. The result includes `siteUrl`. Proceed to Phase 5. |\n| **`Failed`** | `400` + `SubdomainConflict` (or error message mentions subdomain) | Subdomain already taken. Loop back to Phase 2 action 2.2 for a new subdomain, then re-run the script. |\n| **`Failed`** | `401` | Token expired. Ask the user to run `az login --allow-no-subscriptions` and retry. |\n| **`Failed`** | `403` | Insufficient permissions. Inform user they need the \"Power Pages site creator\" or \"System Administrator\" role. |\n| **`Failed`** | `409` | Website already exists. Inform user and suggest using `\u002Fdeploy-site` instead. |\n| **`Failed`** | `429` or `5xx` | Throttling or server error. Wait 5 seconds and re-run the script once. |\n| **`Failed`** | other | Present the error to the user and help troubleshoot. |\n| **`Running`** | — | Provisioning still in progress after 5 minutes. Inform the user it may take up to 15 minutes and suggest checking the Power Platform admin center. |\n| `error` field | — | Prerequisite failure (missing args, no token). Present the error and help troubleshoot. |\n\n### Output\n\n- Provisioning status resolved (Succeeded with `siteUrl`, Failed with error details, or Running with timeout advisory)\n\n---\n\n## Phase 5: Present Summary\n\n**Goal:** Show the user the final site URL and suggest next steps.\n\n### Actions\n\n#### 5.1 Show Results\n\nPresent the activation summary using the `siteUrl` from the script output:\n\n```\nPower Pages site activated successfully!\n\n  Site Name:  \u003CsiteName>\n  Site URL:   \u003CsiteUrl>\n  Environment: \u003CenvironmentName> (\u003CenvironmentId>)\n  Status:     Provisioned\n```\n\nThe script already resolves the correct cloud-specific site URL domain, so use the `siteUrl` value directly.\n\n#### 5.1b Write `docs\u002Falm\u002Flast-activate.json` Marker\n\nFor consumers like the rendered ALM plan (Manual path's per-target Activate steps), write a structured marker that captures the post-activation state. Ensure the `docs\u002Falm\u002F` directory exists first:\n\n```bash\nnode -e \"require('fs').mkdirSync('docs\u002Falm',{recursive:true})\"\n# Determine the stage label this activation was for. The upstream ALM context\n# (e.g. the user running this after import-solution) supplies it as \"Staging\"\u002F\n# \"Production\"; standalone invocations may leave it null — refreshActivateSite\n# falls back to env-URL matching against planData.stages[].envUrl.\nnode -e \"require('fs').writeFileSync('docs\u002Falm\u002Flast-activate.json', JSON.stringify({\n  stageName: \u003CstageNameOrNull>,\n  siteName: '\u003CsiteName>',\n  siteUrl: '\u003CsiteUrl>',\n  websiteRecordId: '\u003CwebsiteRecordId>',\n  environmentUrl: '\u003CenvUrl>',\n  environmentId: '\u003CenvironmentId>',\n  activatedAt: new Date().toISOString(),\n  status: 'Activated',\n  cloud: '\u003Ccloud>',\n}, null, 2))\"\n```\n\nWhen the activation was an **already-activated** detection (Phase 1.4), still write the marker — the rendered plan should reflect \"this stage is live at https:\u002F\u002F...\" regardless of whether activation was performed this run or pre-existing. Set `status: 'AlreadyActivated'` and use the existing `siteUrl` from Phase 1.4's check.\n\n#### 5.2 Record Skill Usage\n\n> Reference: `${PLUGIN_ROOT}\u002Freferences\u002Fskill-tracking-reference.md`\n\nFollow the skill tracking instructions in the reference to record this skill's usage. Use `--skillName \"ActivateSite\"`.\n\n#### 5.2b Refresh the ALM plan (if one exists)\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fscripts\u002Flib\u002Frefresh-alm-plan-data.js\" \\\n  --projectRoot \".\" \\\n  --phase activate-site \\\n  --stageName \"{stageNameOrEmpty}\" \\\n  --render\n```\n\n`{stageNameOrEmpty}` is the Manual-path target stage label (e.g. `Staging`, `Production`) the agent was activating — stated by the user, or inferred from the target env. Pass an empty string when unknown; `refreshActivateSite` falls back to URL-matching `docs\u002Falm\u002Flast-activate.json`'s `environmentUrl` against `planData.stages[].envUrl`, so standalone invocations still get captured.\n\nThe helper reads `docs\u002Falm\u002Flast-activate.json`, writes a per-target entry into `planData.activations[stageName]` (siteUrl, status, activatedAt), and re-renders `docs\u002Falm-plan.html` so the matching `Activate site in {stageName}` checklist step shows an `ACTIVATED` badge with the live site URL inline. When `docs\u002F.alm-plan-data.json` is absent (standalone, not part of an ALM plan), the helper returns `ok:false` as a soft no-op.\n\n**Point the user at the next step (user-driven sequencing).** The helper's stdout JSON includes `nextStep: { name, skill: string | null } | null`. When non-null, branch on `skill`: when `skill` is non-null, tell the user *\"Plan updated. Next in your plan: **{nextStep.name}** → run `{nextStep.skill}` when you're ready.\"*; when `skill` is `null` (an internal step such as Finalize, no user command), name the step only — *\"Plan updated. Next in your plan: **{nextStep.name}**.\"* — and never print `run null`. When `null` or the helper returned `ok:false`, say nothing about a next step. **Never auto-invoke the next skill** — the user drives execution.\n\n#### 5.3 Suggest Next Steps\n\nAfter the summary, suggest:\n\n- Test the site: `\u002Ftest-site` — Verify the site loads correctly and API calls are working\n- Set up ALM: `\u002Fpower-pages:plan-alm` — Set up ALM to promote this site to staging or production (creates a solution, configures a deployment pipeline or export\u002Fimport strategy)\n- Set up the data model: `\u002Fsetup-datamodel`\n- Add sample data: `\u002Fadd-sample-data`\n- View the site in the browser at the provisioned URL (note: it may take a few minutes for DNS to propagate)\n\n### Output\n\n- Activation summary presented with site URL\n- Next steps suggested to the user\n\n---\n\n## Important Notes\n\n### Progress Tracking\n\nUse `TaskCreate` at the start to track progress through each phase:\n\n| Task | Description |\n|------|-------------|\n| Phase 1 | Verify Prerequisites — PAC CLI auth, Cloud detection, Azure CLI login, activation status check |\n| Phase 2 | Gather Parameters — site name, subdomain, website record ID |\n| Phase 3 | Confirm — user approval of activation parameters |\n| Phase 4 | Activate & Poll — run activation script, handle result |\n| Phase 5 | Present Summary — show site URL and next steps |\n\nMark each task complete with `TaskUpdate` as you finish each phase.\n\n### Key Decision Points\n\n- **Phase 1.2**: If not authenticated, must authenticate before proceeding — cannot skip.\n- **Phase 1.4**: If site is already activated, stop early — do NOT proceed to Phase 2.\n- **Phase 2.2**: User may accept the generated subdomain or provide a custom one — validate custom input.\n- **Phase 3**: User must explicitly approve activation. If declined, stop the skill entirely.\n- **Phase 4.2**: On 400 (subdomain taken), loop back to Phase 2 action 2.2 and re-run the script — do not abort.\n- **Phase 4.2**: On 409 (site already exists), redirect user to `\u002Fdeploy-site` instead.\n- **Phase 4.2**: On timeout (still Running after 5 minutes), do not treat as failure — advise user to check admin center.\n\n**Begin with Phase 1: Verify Prerequisites**\n",{"data":38,"body":42},{"name":4,"description":6,"user-invocable":39,"allowed-tools":40,"model":41},true,"Read, Bash, Glob, Grep, AskUserQuestion, TaskCreate, TaskUpdate, TaskList","sonnet",{"type":43,"children":44},"root",[45,72,79,84,105,112,155,165,171,225,229,234,244,251,258,271,300,310,387,393,404,428,438,529,554,560,565,590,614,620,625,687,715,787,793,816,819,824,833,838,844,864,874,894,900,911,916,951,970,1097,1112,1123,1194,1204,1210,1222,1246,1282,1287,1305,1308,1313,1322,1327,1384,1395,1477,1487,1497,1502,1510,1513,1518,1527,1532,1538,1543,1684,1697,1710,1723,1729,1734,2055,2060,2075,2078,2083,2092,2097,2103,2115,2124,2136,2150,2163,2347,2374,2380,2394,2406,2412,2526,2582,2642,2750,2756,2761,2817,2822,2835,2838,2844,2850,2862,2949,2962,2968,3044,3052],{"type":46,"tag":47,"props":48,"children":49},"element","blockquote",{},[50],{"type":46,"tag":51,"props":52,"children":53},"p",{},[54,61,63,70],{"type":46,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":59,"value":60},"text","Plugin check",{"type":59,"value":62},": Run ",{"type":46,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":59,"value":69},"node \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-version.js\"",{"type":59,"value":71}," — if it outputs a message, show it to the user before proceeding.",{"type":46,"tag":73,"props":74,"children":76},"h1",{"id":75},"activate-power-pages-site",[77],{"type":59,"value":78},"Activate Power Pages Site",{"type":46,"tag":51,"props":80,"children":81},{},[82],{"type":59,"value":83},"Provision a new Power Pages website in a Power Platform environment via the Power Platform REST API.",{"type":46,"tag":47,"props":85,"children":86},{},[87],{"type":46,"tag":51,"props":88,"children":89},{},[90,95,97,103],{"type":46,"tag":55,"props":91,"children":92},{},[93],{"type":59,"value":94},"Prerequisite:",{"type":59,"value":96}," This skill expects an existing Power Pages code site created via ",{"type":46,"tag":64,"props":98,"children":100},{"className":99},[],[101],{"type":59,"value":102},"\u002Fcreate-site",{"type":59,"value":104},". Run that skill first if the site does not exist yet.",{"type":46,"tag":106,"props":107,"children":109},"h2",{"id":108},"core-principles",[110],{"type":59,"value":111},"Core Principles",{"type":46,"tag":113,"props":114,"children":115},"ul",{},[116,135,145],{"type":46,"tag":117,"props":118,"children":119},"li",{},[120,125,127,133],{"type":46,"tag":55,"props":121,"children":122},{},[123],{"type":59,"value":124},"Cloud-aware URL resolution",{"type":59,"value":126}," — Never hardcode API base URLs or site URL domains. Always derive them from the Cloud value returned by ",{"type":46,"tag":64,"props":128,"children":130},{"className":129},[],[131],{"type":59,"value":132},"pac auth who",{"type":59,"value":134},".",{"type":46,"tag":117,"props":136,"children":137},{},[138,143],{"type":46,"tag":55,"props":139,"children":140},{},[141],{"type":59,"value":142},"Token handling",{"type":59,"value":144}," — Scripts acquire and refresh Azure CLI tokens internally. The agent only needs to verify the user is logged in to Azure CLI.",{"type":46,"tag":117,"props":146,"children":147},{},[148,153],{"type":46,"tag":55,"props":149,"children":150},{},[151],{"type":59,"value":152},"Confirm before mutating",{"type":59,"value":154}," — Always present the full activation parameters to the user and get explicit approval before POSTing to the websites API.",{"type":46,"tag":51,"props":156,"children":157},{},[158,163],{"type":46,"tag":55,"props":159,"children":160},{},[161],{"type":59,"value":162},"Initial request:",{"type":59,"value":164}," $ARGUMENTS",{"type":46,"tag":106,"props":166,"children":168},{"id":167},"workflow",[169],{"type":59,"value":170},"Workflow",{"type":46,"tag":172,"props":173,"children":174},"ol",{},[175,185,195,205,215],{"type":46,"tag":117,"props":176,"children":177},{},[178,183],{"type":46,"tag":55,"props":179,"children":180},{},[181],{"type":59,"value":182},"Phase 1: Verify Prerequisites",{"type":59,"value":184}," — PAC CLI auth + Azure CLI login + activation status check",{"type":46,"tag":117,"props":186,"children":187},{},[188,193],{"type":46,"tag":55,"props":189,"children":190},{},[191],{"type":59,"value":192},"Phase 2: Gather Parameters",{"type":59,"value":194}," — Site name, subdomain, website record ID",{"type":46,"tag":117,"props":196,"children":197},{},[198,203],{"type":46,"tag":55,"props":199,"children":200},{},[201],{"type":59,"value":202},"Phase 3: Confirm",{"type":59,"value":204}," — Present all parameters to user for approval",{"type":46,"tag":117,"props":206,"children":207},{},[208,213],{"type":46,"tag":55,"props":209,"children":210},{},[211],{"type":59,"value":212},"Phase 4: Activate & Poll",{"type":59,"value":214}," — Run activation script (POST + poll provisioning status)",{"type":46,"tag":117,"props":216,"children":217},{},[218,223],{"type":46,"tag":55,"props":219,"children":220},{},[221],{"type":59,"value":222},"Phase 5: Present Summary",{"type":59,"value":224}," — Show site URL, suggest next steps",{"type":46,"tag":226,"props":227,"children":228},"hr",{},[],{"type":46,"tag":106,"props":230,"children":232},{"id":231},"phase-1-verify-prerequisites",[233],{"type":59,"value":182},{"type":46,"tag":51,"props":235,"children":236},{},[237,242],{"type":46,"tag":55,"props":238,"children":239},{},[240],{"type":59,"value":241},"Goal:",{"type":59,"value":243}," Ensure PAC CLI is installed and authenticated, and verify the user is logged in to Azure CLI (scripts handle token acquisition internally).",{"type":46,"tag":245,"props":246,"children":248},"h3",{"id":247},"actions",[249],{"type":59,"value":250},"Actions",{"type":46,"tag":252,"props":253,"children":255},"h4",{"id":254},"_11-verify-pac-cli",[256],{"type":59,"value":257},"1.1 Verify PAC CLI",{"type":46,"tag":51,"props":259,"children":260},{},[261,263,269],{"type":59,"value":262},"Run ",{"type":46,"tag":64,"props":264,"children":266},{"className":265},[],[267],{"type":59,"value":268},"pac help",{"type":59,"value":270}," to check if the PAC CLI is installed and available on the system PATH.",{"type":46,"tag":272,"props":273,"children":278},"pre",{"className":274,"code":275,"language":276,"meta":277,"style":277},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pac help\n","bash","",[279],{"type":46,"tag":64,"props":280,"children":281},{"__ignoreMap":277},[282],{"type":46,"tag":283,"props":284,"children":287},"span",{"class":285,"line":286},"line",1,[288,294],{"type":46,"tag":283,"props":289,"children":291},{"style":290},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[292],{"type":59,"value":293},"pac",{"type":46,"tag":283,"props":295,"children":297},{"style":296},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[298],{"type":59,"value":299}," help\n",{"type":46,"tag":51,"props":301,"children":302},{},[303,308],{"type":46,"tag":55,"props":304,"children":305},{},[306],{"type":59,"value":307},"If the command fails",{"type":59,"value":309}," (command not found \u002F not recognized):",{"type":46,"tag":172,"props":311,"children":312},{},[313,353,375],{"type":46,"tag":117,"props":314,"children":315},{},[316,318],{"type":59,"value":317},"Tell the user: \"PAC CLI is not installed. You can install it by running:\"",{"type":46,"tag":272,"props":319,"children":321},{"className":274,"code":320,"language":276,"meta":277,"style":277},"dotnet tool install --global Microsoft.PowerApps.CLI.Tool\n",[322],{"type":46,"tag":64,"props":323,"children":324},{"__ignoreMap":277},[325],{"type":46,"tag":283,"props":326,"children":327},{"class":285,"line":286},[328,333,338,343,348],{"type":46,"tag":283,"props":329,"children":330},{"style":290},[331],{"type":59,"value":332},"dotnet",{"type":46,"tag":283,"props":334,"children":335},{"style":296},[336],{"type":59,"value":337}," tool",{"type":46,"tag":283,"props":339,"children":340},{"style":296},[341],{"type":59,"value":342}," install",{"type":46,"tag":283,"props":344,"children":345},{"style":296},[346],{"type":59,"value":347}," --global",{"type":46,"tag":283,"props":349,"children":350},{"style":296},[351],{"type":59,"value":352}," Microsoft.PowerApps.CLI.Tool\n",{"type":46,"tag":117,"props":354,"children":355},{},[356,358,363,365,373],{"type":59,"value":357},"If ",{"type":46,"tag":64,"props":359,"children":361},{"className":360},[],[362],{"type":59,"value":332},{"type":59,"value":364}," is also not available, direct the user to ",{"type":46,"tag":366,"props":367,"children":371},"a",{"href":368,"rel":369},"https:\u002F\u002Faka.ms\u002FPowerPlatformCLI",[370],"nofollow",[372],{"type":59,"value":368},{"type":59,"value":374}," for full installation instructions.",{"type":46,"tag":117,"props":376,"children":377},{},[378,380,385],{"type":59,"value":379},"After installation, verify by running ",{"type":46,"tag":64,"props":381,"children":383},{"className":382},[],[384],{"type":59,"value":268},{"type":59,"value":386}," again.",{"type":46,"tag":252,"props":388,"children":390},{"id":389},"_12-check-authentication",[391],{"type":59,"value":392},"1.2 Check Authentication",{"type":46,"tag":51,"props":394,"children":395},{},[396,397,402],{"type":59,"value":262},{"type":46,"tag":64,"props":398,"children":400},{"className":399},[],[401],{"type":59,"value":132},{"type":59,"value":403}," to check current authentication status.",{"type":46,"tag":272,"props":405,"children":407},{"className":274,"code":406,"language":276,"meta":277,"style":277},"pac auth who\n",[408],{"type":46,"tag":64,"props":409,"children":410},{"__ignoreMap":277},[411],{"type":46,"tag":283,"props":412,"children":413},{"class":285,"line":286},[414,418,423],{"type":46,"tag":283,"props":415,"children":416},{"style":290},[417],{"type":59,"value":293},{"type":46,"tag":283,"props":419,"children":420},{"style":296},[421],{"type":59,"value":422}," auth",{"type":46,"tag":283,"props":424,"children":425},{"style":296},[426],{"type":59,"value":427}," who\n",{"type":46,"tag":51,"props":429,"children":430},{},[431,436],{"type":46,"tag":55,"props":432,"children":433},{},[434],{"type":59,"value":435},"If authenticated",{"type":59,"value":437},": Extract these values from the output:",{"type":46,"tag":113,"props":439,"children":440},{},[441,457,474],{"type":46,"tag":117,"props":442,"children":443},{},[444,449,451],{"type":46,"tag":55,"props":445,"children":446},{},[447],{"type":59,"value":448},"Environment ID",{"type":59,"value":450}," — the GUID after ",{"type":46,"tag":64,"props":452,"children":454},{"className":453},[],[455],{"type":59,"value":456},"Environment ID:",{"type":46,"tag":117,"props":458,"children":459},{},[460,465,466,472],{"type":46,"tag":55,"props":461,"children":462},{},[463],{"type":59,"value":464},"Organization ID",{"type":59,"value":450},{"type":46,"tag":64,"props":467,"children":469},{"className":468},[],[470],{"type":59,"value":471},"Organization ID:",{"type":59,"value":473}," (this is the Dataverse org ID)",{"type":46,"tag":117,"props":475,"children":476},{},[477,482,484,490,492,498,500,506,507,513,514,520,521,527],{"type":46,"tag":55,"props":478,"children":479},{},[480],{"type":59,"value":481},"Cloud",{"type":59,"value":483}," — the value after ",{"type":46,"tag":64,"props":485,"children":487},{"className":486},[],[488],{"type":59,"value":489},"Cloud:",{"type":59,"value":491}," (e.g., ",{"type":46,"tag":64,"props":493,"children":495},{"className":494},[],[496],{"type":59,"value":497},"Public",{"type":59,"value":499},", ",{"type":46,"tag":64,"props":501,"children":503},{"className":502},[],[504],{"type":59,"value":505},"UsGov",{"type":59,"value":499},{"type":46,"tag":64,"props":508,"children":510},{"className":509},[],[511],{"type":59,"value":512},"UsGovHigh",{"type":59,"value":499},{"type":46,"tag":64,"props":515,"children":517},{"className":516},[],[518],{"type":59,"value":519},"UsGovDod",{"type":59,"value":499},{"type":46,"tag":64,"props":522,"children":524},{"className":523},[],[525],{"type":59,"value":526},"China",{"type":59,"value":528},")",{"type":46,"tag":51,"props":530,"children":531},{},[532,537,539,545,547,553],{"type":46,"tag":55,"props":533,"children":534},{},[535],{"type":59,"value":536},"If not authenticated",{"type":59,"value":538},": Follow the same authentication flow as ",{"type":46,"tag":64,"props":540,"children":542},{"className":541},[],[543],{"type":59,"value":544},"deploy-site",{"type":59,"value":546}," — ask the user for their environment URL and run ",{"type":46,"tag":64,"props":548,"children":550},{"className":549},[],[551],{"type":59,"value":552},"pac auth create --environment \"\u003CURL>\"",{"type":59,"value":134},{"type":46,"tag":252,"props":555,"children":557},{"id":556},"_13-verify-azure-cli-login",[558],{"type":59,"value":559},"1.3 Verify Azure CLI Login",{"type":46,"tag":51,"props":561,"children":562},{},[563],{"type":59,"value":564},"Verify the user is logged in to Azure CLI (the activation scripts acquire tokens internally):",{"type":46,"tag":272,"props":566,"children":568},{"className":274,"code":567,"language":276,"meta":277,"style":277},"az account show\n",[569],{"type":46,"tag":64,"props":570,"children":571},{"__ignoreMap":277},[572],{"type":46,"tag":283,"props":573,"children":574},{"class":285,"line":286},[575,580,585],{"type":46,"tag":283,"props":576,"children":577},{"style":290},[578],{"type":59,"value":579},"az",{"type":46,"tag":283,"props":581,"children":582},{"style":296},[583],{"type":59,"value":584}," account",{"type":46,"tag":283,"props":586,"children":587},{"style":296},[588],{"type":59,"value":589}," show\n",{"type":46,"tag":51,"props":591,"children":592},{},[593,604,606,612],{"type":46,"tag":55,"props":594,"children":595},{},[596,597,602],{"type":59,"value":357},{"type":46,"tag":64,"props":598,"children":600},{"className":599},[],[601],{"type":59,"value":579},{"type":59,"value":603}," is not installed or not logged in",{"type":59,"value":605},": Instruct the user to install Azure CLI and run ",{"type":46,"tag":64,"props":607,"children":609},{"className":608},[],[610],{"type":59,"value":611},"az login --allow-no-subscriptions",{"type":59,"value":613}," (this form works whether or not the user has an Azure subscription — the activation flow only needs an AAD token).",{"type":46,"tag":252,"props":615,"children":617},{"id":616},"_14-check-if-already-activated",[618],{"type":59,"value":619},"1.4 Check If Already Activated",{"type":46,"tag":51,"props":621,"children":622},{},[623],{"type":59,"value":624},"Before gathering parameters, check whether the site is already activated by running the shared activation status script:",{"type":46,"tag":272,"props":626,"children":628},{"className":274,"code":627,"language":276,"meta":277,"style":277},"node \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-activation-status.js\" --projectRoot \"\u003CPROJECT_ROOT>\"\n",[629],{"type":46,"tag":64,"props":630,"children":631},{"__ignoreMap":277},[632],{"type":46,"tag":283,"props":633,"children":634},{"class":285,"line":286},[635,640,646,652,657,662,667,672,677,682],{"type":46,"tag":283,"props":636,"children":637},{"style":290},[638],{"type":59,"value":639},"node",{"type":46,"tag":283,"props":641,"children":643},{"style":642},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[644],{"type":59,"value":645}," \"${",{"type":46,"tag":283,"props":647,"children":649},{"style":648},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[650],{"type":59,"value":651},"PLUGIN_ROOT",{"type":46,"tag":283,"props":653,"children":654},{"style":642},[655],{"type":59,"value":656},"}",{"type":46,"tag":283,"props":658,"children":659},{"style":296},[660],{"type":59,"value":661},"\u002Fscripts\u002Fcheck-activation-status.js",{"type":46,"tag":283,"props":663,"children":664},{"style":642},[665],{"type":59,"value":666},"\"",{"type":46,"tag":283,"props":668,"children":669},{"style":296},[670],{"type":59,"value":671}," --projectRoot",{"type":46,"tag":283,"props":673,"children":674},{"style":642},[675],{"type":59,"value":676}," \"",{"type":46,"tag":283,"props":678,"children":679},{"style":296},[680],{"type":59,"value":681},"\u003CPROJECT_ROOT>",{"type":46,"tag":283,"props":683,"children":684},{"style":642},[685],{"type":59,"value":686},"\"\n",{"type":46,"tag":51,"props":688,"children":689},{},[690,692,697,699,705,707,713],{"type":59,"value":691},"Where ",{"type":46,"tag":64,"props":693,"children":695},{"className":694},[],[696],{"type":59,"value":681},{"type":59,"value":698}," is the directory containing ",{"type":46,"tag":64,"props":700,"children":702},{"className":701},[],[703],{"type":59,"value":704},"powerpages.config.json",{"type":59,"value":706}," or ",{"type":46,"tag":64,"props":708,"children":710},{"className":709},[],[711],{"type":59,"value":712},".powerpages-site",{"type":59,"value":714}," folder.\nEvaluate the JSON result:",{"type":46,"tag":113,"props":716,"children":717},{},[718,749,770],{"type":46,"tag":117,"props":719,"children":720},{},[721,739,741,747],{"type":46,"tag":55,"props":722,"children":723},{},[724,725,731,733],{"type":59,"value":357},{"type":46,"tag":64,"props":726,"children":728},{"className":727},[],[729],{"type":59,"value":730},"activated",{"type":59,"value":732}," is ",{"type":46,"tag":64,"props":734,"children":736},{"className":735},[],[737],{"type":59,"value":738},"true",{"type":59,"value":740},": Inform the user their site is already activated at ",{"type":46,"tag":64,"props":742,"children":744},{"className":743},[],[745],{"type":59,"value":746},"websiteUrl",{"type":59,"value":748},". Suggest next steps (Phase 5.3) and stop — do NOT proceed to Phase 2.",{"type":46,"tag":117,"props":750,"children":751},{},[752,768],{"type":46,"tag":55,"props":753,"children":754},{},[755,756,761,762],{"type":59,"value":357},{"type":46,"tag":64,"props":757,"children":759},{"className":758},[],[760],{"type":59,"value":730},{"type":59,"value":732},{"type":46,"tag":64,"props":763,"children":765},{"className":764},[],[766],{"type":59,"value":767},"false",{"type":59,"value":769},": Proceed to Phase 2.",{"type":46,"tag":117,"props":771,"children":772},{},[773,785],{"type":46,"tag":55,"props":774,"children":775},{},[776,777,783],{"type":59,"value":357},{"type":46,"tag":64,"props":778,"children":780},{"className":779},[],[781],{"type":59,"value":782},"error",{"type":59,"value":784}," is present",{"type":59,"value":786},": Proceed to Phase 2 (do not block the activation flow).",{"type":46,"tag":245,"props":788,"children":790},{"id":789},"output",[791],{"type":59,"value":792},"Output",{"type":46,"tag":113,"props":794,"children":795},{},[796,801,806,811],{"type":46,"tag":117,"props":797,"children":798},{},[799],{"type":59,"value":800},"PAC CLI installed and authenticated",{"type":46,"tag":117,"props":802,"children":803},{},[804],{"type":59,"value":805},"Environment ID, Organization ID, and Cloud value extracted",{"type":46,"tag":117,"props":807,"children":808},{},[809],{"type":59,"value":810},"Azure CLI login confirmed",{"type":46,"tag":117,"props":812,"children":813},{},[814],{"type":59,"value":815},"Activation status checked (already activated → stop early, not activated → continue)",{"type":46,"tag":226,"props":817,"children":818},{},[],{"type":46,"tag":106,"props":820,"children":822},{"id":821},"phase-2-gather-parameters",[823],{"type":59,"value":192},{"type":46,"tag":51,"props":825,"children":826},{},[827,831],{"type":46,"tag":55,"props":828,"children":829},{},[830],{"type":59,"value":241},{"type":59,"value":832}," Determine the site name, generate or accept a subdomain, and look up the website record ID needed for the activation API call.",{"type":46,"tag":245,"props":834,"children":836},{"id":835},"actions-1",[837],{"type":59,"value":250},{"type":46,"tag":252,"props":839,"children":841},{"id":840},"_21-read-site-name",[842],{"type":59,"value":843},"2.1 Read Site Name",{"type":46,"tag":51,"props":845,"children":846},{},[847,849,854,856,862],{"type":59,"value":848},"Look for ",{"type":46,"tag":64,"props":850,"children":852},{"className":851},[],[853],{"type":59,"value":704},{"type":59,"value":855}," in the current directory or one level of subdirectories using ",{"type":46,"tag":64,"props":857,"children":859},{"className":858},[],[860],{"type":59,"value":861},"Glob",{"type":59,"value":863},":",{"type":46,"tag":272,"props":865,"children":869},{"className":866,"code":868,"language":59,"meta":277},[867],"language-text","**\u002Fpowerpages.config.json\n",[870],{"type":46,"tag":64,"props":871,"children":872},{"__ignoreMap":277},[873],{"type":59,"value":868},{"type":46,"tag":51,"props":875,"children":876},{},[877,879,885,887,893],{"type":59,"value":878},"Read the file and extract the ",{"type":46,"tag":64,"props":880,"children":882},{"className":881},[],[883],{"type":59,"value":884},"siteName",{"type":59,"value":886}," field. If not found, ask the user for the site name using ",{"type":46,"tag":64,"props":888,"children":890},{"className":889},[],[891],{"type":59,"value":892},"AskUserQuestion",{"type":59,"value":134},{"type":46,"tag":252,"props":895,"children":897},{"id":896},"_22-generate-subdomain-suggestion",[898],{"type":59,"value":899},"2.2 Generate Subdomain Suggestion",{"type":46,"tag":47,"props":901,"children":902},{},[903],{"type":46,"tag":51,"props":904,"children":905},{},[906],{"type":46,"tag":55,"props":907,"children":908},{},[909],{"type":59,"value":910},"CRITICAL — This step is MANDATORY. You MUST ask the user about the subdomain before proceeding. Do NOT skip this step or auto-select a subdomain without user input.",{"type":46,"tag":51,"props":912,"children":913},{},[914],{"type":59,"value":915},"Run the subdomain generator script to create a random suggestion:",{"type":46,"tag":272,"props":917,"children":919},{"className":274,"code":918,"language":276,"meta":277,"style":277},"node \"${PLUGIN_ROOT}\u002Fskills\u002Factivate-site\u002Fscripts\u002Fgenerate-subdomain.js\"\n",[920],{"type":46,"tag":64,"props":921,"children":922},{"__ignoreMap":277},[923],{"type":46,"tag":283,"props":924,"children":925},{"class":285,"line":286},[926,930,934,938,942,947],{"type":46,"tag":283,"props":927,"children":928},{"style":290},[929],{"type":59,"value":639},{"type":46,"tag":283,"props":931,"children":932},{"style":642},[933],{"type":59,"value":645},{"type":46,"tag":283,"props":935,"children":936},{"style":648},[937],{"type":59,"value":651},{"type":46,"tag":283,"props":939,"children":940},{"style":642},[941],{"type":59,"value":656},{"type":46,"tag":283,"props":943,"children":944},{"style":296},[945],{"type":59,"value":946},"\u002Fskills\u002Factivate-site\u002Fscripts\u002Fgenerate-subdomain.js",{"type":46,"tag":283,"props":948,"children":949},{"style":642},[950],{"type":59,"value":686},{"type":46,"tag":51,"props":952,"children":953},{},[954,956,962,964,968],{"type":59,"value":955},"This outputs a string like ",{"type":46,"tag":64,"props":957,"children":959},{"className":958},[],[960],{"type":59,"value":961},"site-a3f2b1",{"type":59,"value":963},". Resolve the correct site URL domain from the ",{"type":46,"tag":55,"props":965,"children":966},{},[967],{"type":59,"value":481},{"type":59,"value":969}," value obtained in Phase 1.2:",{"type":46,"tag":971,"props":972,"children":973},"table",{},[974,992],{"type":46,"tag":975,"props":976,"children":977},"thead",{},[978],{"type":46,"tag":979,"props":980,"children":981},"tr",{},[982,987],{"type":46,"tag":983,"props":984,"children":985},"th",{},[986],{"type":59,"value":481},{"type":46,"tag":983,"props":988,"children":989},{},[990],{"type":59,"value":991},"Site URL Domain",{"type":46,"tag":993,"props":994,"children":995},"tbody",{},[996,1017,1037,1057,1077],{"type":46,"tag":979,"props":997,"children":998},{},[999,1008],{"type":46,"tag":1000,"props":1001,"children":1002},"td",{},[1003],{"type":46,"tag":64,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":59,"value":497},{"type":46,"tag":1000,"props":1009,"children":1010},{},[1011],{"type":46,"tag":64,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":59,"value":1016},"powerappsportals.com",{"type":46,"tag":979,"props":1018,"children":1019},{},[1020,1028],{"type":46,"tag":1000,"props":1021,"children":1022},{},[1023],{"type":46,"tag":64,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":59,"value":505},{"type":46,"tag":1000,"props":1029,"children":1030},{},[1031],{"type":46,"tag":64,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":59,"value":1036},"powerappsportals.us",{"type":46,"tag":979,"props":1038,"children":1039},{},[1040,1048],{"type":46,"tag":1000,"props":1041,"children":1042},{},[1043],{"type":46,"tag":64,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":59,"value":512},{"type":46,"tag":1000,"props":1049,"children":1050},{},[1051],{"type":46,"tag":64,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":59,"value":1056},"high.powerappsportals.us",{"type":46,"tag":979,"props":1058,"children":1059},{},[1060,1068],{"type":46,"tag":1000,"props":1061,"children":1062},{},[1063],{"type":46,"tag":64,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":59,"value":519},{"type":46,"tag":1000,"props":1069,"children":1070},{},[1071],{"type":46,"tag":64,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":59,"value":1076},"appsplatform.us",{"type":46,"tag":979,"props":1078,"children":1079},{},[1080,1088],{"type":46,"tag":1000,"props":1081,"children":1082},{},[1083],{"type":46,"tag":64,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":59,"value":526},{"type":46,"tag":1000,"props":1089,"children":1090},{},[1091],{"type":46,"tag":64,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":59,"value":1096},"powerappsportals.cn",{"type":46,"tag":47,"props":1098,"children":1099},{},[1100],{"type":46,"tag":51,"props":1101,"children":1102},{},[1103,1105,1110],{"type":59,"value":1104},"🚦 ",{"type":46,"tag":55,"props":1106,"children":1107},{},[1108],{"type":59,"value":1109},"Gate (plan · activate-site:2.2.subdomain):",{"type":59,"value":1111}," Confirm or override the generated subdomain. Subdomain is part of the resulting site URL; Cancel exits before any provisioning call.",{"type":46,"tag":51,"props":1113,"children":1114},{},[1115,1117,1122],{"type":59,"value":1116},"Present the generated subdomain to the user and ask them to accept or enter their own using ",{"type":46,"tag":64,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":59,"value":892},{"type":59,"value":863},{"type":46,"tag":971,"props":1124,"children":1125},{},[1126,1147],{"type":46,"tag":975,"props":1127,"children":1128},{},[1129],{"type":46,"tag":979,"props":1130,"children":1131},{},[1132,1137,1142],{"type":46,"tag":983,"props":1133,"children":1134},{},[1135],{"type":59,"value":1136},"Question",{"type":46,"tag":983,"props":1138,"children":1139},{},[1140],{"type":59,"value":1141},"Header",{"type":46,"tag":983,"props":1143,"children":1144},{},[1145],{"type":59,"value":1146},"Options",{"type":46,"tag":993,"props":1148,"children":1149},{},[1150],{"type":46,"tag":979,"props":1151,"children":1152},{},[1153,1177,1182],{"type":46,"tag":1000,"props":1154,"children":1155},{},[1156,1158,1167,1169,1175],{"type":59,"value":1157},"Your site subdomain will be: ",{"type":46,"tag":55,"props":1159,"children":1160},{},[1161],{"type":46,"tag":64,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":59,"value":1166},"\u003Csuggestion>",{"type":59,"value":1168}," (full URL: ",{"type":46,"tag":64,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":59,"value":1174},"https:\u002F\u002F\u003Csuggestion>.\u003CsiteUrlDomain>",{"type":59,"value":1176},"). Would you like to use this subdomain or enter your own?",{"type":46,"tag":1000,"props":1178,"children":1179},{},[1180],{"type":59,"value":1181},"Subdomain",{"type":46,"tag":1000,"props":1183,"children":1184},{},[1185,1187,1192],{"type":59,"value":1186},"Use ",{"type":46,"tag":64,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":59,"value":1166},{"type":59,"value":1193}," (Recommended), Enter a custom subdomain",{"type":46,"tag":51,"props":1195,"children":1196},{},[1197,1202],{"type":46,"tag":55,"props":1198,"children":1199},{},[1200],{"type":59,"value":1201},"If custom",{"type":59,"value":1203},": The user provides their own subdomain via \"Other\" free text input. Validate it is lowercase, alphanumeric with hyphens only, and 3-50 characters.",{"type":46,"tag":252,"props":1205,"children":1207},{"id":1206},"_23-get-website-record-id",[1208],{"type":59,"value":1209},"2.3 Get Website Record ID",{"type":46,"tag":51,"props":1211,"children":1212},{},[1213,1214,1220],{"type":59,"value":262},{"type":46,"tag":64,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":59,"value":1219},"pac pages list",{"type":59,"value":1221}," to get the website record ID:",{"type":46,"tag":272,"props":1223,"children":1225},{"className":274,"code":1224,"language":276,"meta":277,"style":277},"pac pages list\n",[1226],{"type":46,"tag":64,"props":1227,"children":1228},{"__ignoreMap":277},[1229],{"type":46,"tag":283,"props":1230,"children":1231},{"class":285,"line":286},[1232,1236,1241],{"type":46,"tag":283,"props":1233,"children":1234},{"style":290},[1235],{"type":59,"value":293},{"type":46,"tag":283,"props":1237,"children":1238},{"style":296},[1239],{"type":59,"value":1240}," pages",{"type":46,"tag":283,"props":1242,"children":1243},{"style":296},[1244],{"type":59,"value":1245}," list\n",{"type":46,"tag":51,"props":1247,"children":1248},{},[1249,1251,1257,1259,1264,1266,1272,1274,1280],{"type":59,"value":1250},"Parse the output to find the website record that matches the site name. Extract the ",{"type":46,"tag":64,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":59,"value":1256},"Website Record ID",{"type":59,"value":1258}," (GUID). If ",{"type":46,"tag":64,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":59,"value":1219},{"type":59,"value":1265}," returns no results or the command is not available, set ",{"type":46,"tag":64,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":59,"value":1271},"websiteRecordId",{"type":59,"value":1273}," to ",{"type":46,"tag":64,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":59,"value":1279},"$null",{"type":59,"value":1281}," — the API will create a new website record.",{"type":46,"tag":245,"props":1283,"children":1285},{"id":1284},"output-1",[1286],{"type":59,"value":792},{"type":46,"tag":113,"props":1288,"children":1289},{},[1290,1295,1300],{"type":46,"tag":117,"props":1291,"children":1292},{},[1293],{"type":59,"value":1294},"Site name determined (from config file or user input)",{"type":46,"tag":117,"props":1296,"children":1297},{},[1298],{"type":59,"value":1299},"Subdomain chosen (generated or custom)",{"type":46,"tag":117,"props":1301,"children":1302},{},[1303],{"type":59,"value":1304},"Website record ID resolved (GUID or null)",{"type":46,"tag":226,"props":1306,"children":1307},{},[],{"type":46,"tag":106,"props":1309,"children":1311},{"id":1310},"phase-3-confirm",[1312],{"type":59,"value":202},{"type":46,"tag":51,"props":1314,"children":1315},{},[1316,1320],{"type":46,"tag":55,"props":1317,"children":1318},{},[1319],{"type":59,"value":241},{"type":59,"value":1321}," Present all activation parameters to the user and get explicit approval before making the API call.",{"type":46,"tag":245,"props":1323,"children":1325},{"id":1324},"actions-2",[1326],{"type":59,"value":250},{"type":46,"tag":47,"props":1328,"children":1329},{},[1330],{"type":46,"tag":51,"props":1331,"children":1332},{},[1333,1334,1339,1341,1346,1348,1354,1356,1361,1363,1368,1370,1375,1376,1382],{"type":59,"value":1104},{"type":46,"tag":55,"props":1335,"children":1336},{},[1337],{"type":59,"value":1338},"Gate (final · activate-site:3.confirm):",{"type":59,"value":1340}," Last-call before the activation API call. All activation parameters echoed back; Cancel exits cleanly before provisioning. ",{"type":46,"tag":55,"props":1342,"children":1343},{},[1344],{"type":59,"value":1345},"Fires fresh on every skill invocation.",{"type":59,"value":1347}," When ",{"type":46,"tag":64,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":59,"value":1353},"plan-alm",{"type":59,"value":1355}," orchestrates multi-stage activation (Staging + Production), it invokes ",{"type":46,"tag":64,"props":1357,"children":1359},{"className":1358},[],[1360],{"type":59,"value":4},{"type":59,"value":1362}," ",{"type":46,"tag":55,"props":1364,"children":1365},{},[1366],{"type":59,"value":1367},"once per stage",{"type":59,"value":1369}," — each invocation hits this gate fresh with its own ",{"type":46,"tag":64,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":59,"value":884},{"type":59,"value":499},{"type":46,"tag":64,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":59,"value":1381},"subdomain",{"type":59,"value":1383},", and target env. The Staging activation consent does NOT cover Production. Each stage's site URL is a separate go-live decision (different audiences, different timing).",{"type":46,"tag":51,"props":1385,"children":1386},{},[1387,1389,1394],{"type":59,"value":1388},"Present all activation parameters to the user using ",{"type":46,"tag":64,"props":1390,"children":1392},{"className":1391},[],[1393],{"type":59,"value":892},{"type":59,"value":863},{"type":46,"tag":971,"props":1396,"children":1397},{},[1398,1416],{"type":46,"tag":975,"props":1399,"children":1400},{},[1401],{"type":46,"tag":979,"props":1402,"children":1403},{},[1404,1408,1412],{"type":46,"tag":983,"props":1405,"children":1406},{},[1407],{"type":59,"value":1136},{"type":46,"tag":983,"props":1409,"children":1410},{},[1411],{"type":59,"value":1141},{"type":46,"tag":983,"props":1413,"children":1414},{},[1415],{"type":59,"value":1146},{"type":46,"tag":993,"props":1417,"children":1418},{},[1419],{"type":46,"tag":979,"props":1420,"children":1421},{},[1422,1467,1472],{"type":46,"tag":1000,"props":1423,"children":1424},{},[1425,1427,1432,1434,1440,1442,1446,1447,1453,1454,1458,1459,1465],{"type":59,"value":1426},"Ready to activate your Power Pages site with these settings:\\n\\n- ",{"type":46,"tag":55,"props":1428,"children":1429},{},[1430],{"type":59,"value":1431},"Site name",{"type":59,"value":1433},": ",{"type":46,"tag":64,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":59,"value":1439},"\u003CsiteName>",{"type":59,"value":1441},"\\n- ",{"type":46,"tag":55,"props":1443,"children":1444},{},[1445],{"type":59,"value":1181},{"type":59,"value":1433},{"type":46,"tag":64,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":59,"value":1452},"\u003Csubdomain>.powerappsportals.com",{"type":59,"value":1441},{"type":46,"tag":55,"props":1455,"children":1456},{},[1457],{"type":59,"value":448},{"type":59,"value":1433},{"type":46,"tag":64,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":59,"value":1464},"\u003CenvironmentId>",{"type":59,"value":1466},"\\n\\nProceed with activation?",{"type":46,"tag":1000,"props":1468,"children":1469},{},[1470],{"type":59,"value":1471},"Activate",{"type":46,"tag":1000,"props":1473,"children":1474},{},[1475],{"type":59,"value":1476},"Yes, activate the site (Recommended), No, cancel",{"type":46,"tag":51,"props":1478,"children":1479},{},[1480,1485],{"type":46,"tag":55,"props":1481,"children":1482},{},[1483],{"type":59,"value":1484},"If \"No\"",{"type":59,"value":1486},": Stop the skill and inform the user they can re-run it later.",{"type":46,"tag":51,"props":1488,"children":1489},{},[1490,1495],{"type":46,"tag":55,"props":1491,"children":1492},{},[1493],{"type":59,"value":1494},"If \"Yes\"",{"type":59,"value":1496},": Proceed to Phase 4.",{"type":46,"tag":245,"props":1498,"children":1500},{"id":1499},"output-2",[1501],{"type":59,"value":792},{"type":46,"tag":113,"props":1503,"children":1504},{},[1505],{"type":46,"tag":117,"props":1506,"children":1507},{},[1508],{"type":59,"value":1509},"User has explicitly approved the activation parameters",{"type":46,"tag":226,"props":1511,"children":1512},{},[],{"type":46,"tag":106,"props":1514,"children":1516},{"id":1515},"phase-4-activate-poll",[1517],{"type":59,"value":212},{"type":46,"tag":51,"props":1519,"children":1520},{},[1521,1525],{"type":46,"tag":55,"props":1522,"children":1523},{},[1524],{"type":59,"value":241},{"type":59,"value":1526}," POST to the Power Platform websites API to start provisioning, poll until completion, and report the result.",{"type":46,"tag":245,"props":1528,"children":1530},{"id":1529},"actions-3",[1531],{"type":59,"value":250},{"type":46,"tag":252,"props":1533,"children":1535},{"id":1534},"_41-run-activation-script",[1536],{"type":59,"value":1537},"4.1 Run Activation Script",{"type":46,"tag":51,"props":1539,"children":1540},{},[1541],{"type":59,"value":1542},"Run the shared activation script, passing all parameters gathered in Phases 1–2:",{"type":46,"tag":272,"props":1544,"children":1546},{"className":274,"code":1545,"language":276,"meta":277,"style":277},"node \"${PLUGIN_ROOT}\u002Fskills\u002Factivate-site\u002Fscripts\u002Factivate-site.js\" --siteName \"\u003CsiteName>\" --subdomain \"\u003Csubdomain>\" --organizationId \"\u003CorganizationId>\" --environmentId \"\u003CenvironmentId>\" --cloud \"\u003Ccloud>\" --websiteRecordId \"\u003CwebsiteRecordId>\"\n",[1547],{"type":46,"tag":64,"props":1548,"children":1549},{"__ignoreMap":277},[1550],{"type":46,"tag":283,"props":1551,"children":1552},{"class":285,"line":286},[1553,1557,1561,1565,1569,1574,1578,1583,1587,1591,1595,1600,1604,1609,1613,1618,1622,1627,1631,1636,1640,1644,1648,1653,1657,1662,1666,1671,1675,1680],{"type":46,"tag":283,"props":1554,"children":1555},{"style":290},[1556],{"type":59,"value":639},{"type":46,"tag":283,"props":1558,"children":1559},{"style":642},[1560],{"type":59,"value":645},{"type":46,"tag":283,"props":1562,"children":1563},{"style":648},[1564],{"type":59,"value":651},{"type":46,"tag":283,"props":1566,"children":1567},{"style":642},[1568],{"type":59,"value":656},{"type":46,"tag":283,"props":1570,"children":1571},{"style":296},[1572],{"type":59,"value":1573},"\u002Fskills\u002Factivate-site\u002Fscripts\u002Factivate-site.js",{"type":46,"tag":283,"props":1575,"children":1576},{"style":642},[1577],{"type":59,"value":666},{"type":46,"tag":283,"props":1579,"children":1580},{"style":296},[1581],{"type":59,"value":1582}," --siteName",{"type":46,"tag":283,"props":1584,"children":1585},{"style":642},[1586],{"type":59,"value":676},{"type":46,"tag":283,"props":1588,"children":1589},{"style":296},[1590],{"type":59,"value":1439},{"type":46,"tag":283,"props":1592,"children":1593},{"style":642},[1594],{"type":59,"value":666},{"type":46,"tag":283,"props":1596,"children":1597},{"style":296},[1598],{"type":59,"value":1599}," --subdomain",{"type":46,"tag":283,"props":1601,"children":1602},{"style":642},[1603],{"type":59,"value":676},{"type":46,"tag":283,"props":1605,"children":1606},{"style":296},[1607],{"type":59,"value":1608},"\u003Csubdomain>",{"type":46,"tag":283,"props":1610,"children":1611},{"style":642},[1612],{"type":59,"value":666},{"type":46,"tag":283,"props":1614,"children":1615},{"style":296},[1616],{"type":59,"value":1617}," --organizationId",{"type":46,"tag":283,"props":1619,"children":1620},{"style":642},[1621],{"type":59,"value":676},{"type":46,"tag":283,"props":1623,"children":1624},{"style":296},[1625],{"type":59,"value":1626},"\u003CorganizationId>",{"type":46,"tag":283,"props":1628,"children":1629},{"style":642},[1630],{"type":59,"value":666},{"type":46,"tag":283,"props":1632,"children":1633},{"style":296},[1634],{"type":59,"value":1635}," --environmentId",{"type":46,"tag":283,"props":1637,"children":1638},{"style":642},[1639],{"type":59,"value":676},{"type":46,"tag":283,"props":1641,"children":1642},{"style":296},[1643],{"type":59,"value":1464},{"type":46,"tag":283,"props":1645,"children":1646},{"style":642},[1647],{"type":59,"value":666},{"type":46,"tag":283,"props":1649,"children":1650},{"style":296},[1651],{"type":59,"value":1652}," --cloud",{"type":46,"tag":283,"props":1654,"children":1655},{"style":642},[1656],{"type":59,"value":676},{"type":46,"tag":283,"props":1658,"children":1659},{"style":296},[1660],{"type":59,"value":1661},"\u003Ccloud>",{"type":46,"tag":283,"props":1663,"children":1664},{"style":642},[1665],{"type":59,"value":666},{"type":46,"tag":283,"props":1667,"children":1668},{"style":296},[1669],{"type":59,"value":1670}," --websiteRecordId",{"type":46,"tag":283,"props":1672,"children":1673},{"style":642},[1674],{"type":59,"value":676},{"type":46,"tag":283,"props":1676,"children":1677},{"style":296},[1678],{"type":59,"value":1679},"\u003CwebsiteRecordId>",{"type":46,"tag":283,"props":1681,"children":1682},{"style":642},[1683],{"type":59,"value":686},{"type":46,"tag":51,"props":1685,"children":1686},{},[1687,1689,1695],{"type":59,"value":1688},"Omit ",{"type":46,"tag":64,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":59,"value":1694},"--websiteRecordId",{"type":59,"value":1696}," if it is null\u002Fempty.",{"type":46,"tag":51,"props":1698,"children":1699},{},[1700,1702,1708],{"type":59,"value":1701},"The script acquires an Azure CLI token, POSTs to the websites API, extracts the ",{"type":46,"tag":64,"props":1703,"children":1705},{"className":1704},[],[1706],{"type":59,"value":1707},"Operation-Location",{"type":59,"value":1709}," header, and polls every 10 seconds for up to 5 minutes (refreshing the token periodically). It outputs a JSON result to stdout.",{"type":46,"tag":47,"props":1711,"children":1712},{},[1713],{"type":46,"tag":51,"props":1714,"children":1715},{},[1716,1721],{"type":46,"tag":55,"props":1717,"children":1718},{},[1719],{"type":59,"value":1720},"Note:",{"type":59,"value":1722}," This script may run for up to 5 minutes while polling. Use a Bash timeout of at least 360 seconds (6 minutes).",{"type":46,"tag":252,"props":1724,"children":1726},{"id":1725},"_42-handle-results",[1727],{"type":59,"value":1728},"4.2 Handle Results",{"type":46,"tag":51,"props":1730,"children":1731},{},[1732],{"type":59,"value":1733},"Evaluate the JSON output:",{"type":46,"tag":971,"props":1735,"children":1736},{},[1737,1776],{"type":46,"tag":975,"props":1738,"children":1739},{},[1740],{"type":46,"tag":979,"props":1741,"children":1742},{},[1743,1754,1771],{"type":46,"tag":983,"props":1744,"children":1745},{},[1746,1752],{"type":46,"tag":64,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":59,"value":1751},"status",{"type":59,"value":1753}," value",{"type":46,"tag":983,"props":1755,"children":1756},{},[1757,1763,1765],{"type":46,"tag":64,"props":1758,"children":1760},{"className":1759},[],[1761],{"type":59,"value":1762},"statusCode",{"type":59,"value":1764}," \u002F ",{"type":46,"tag":64,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":59,"value":1770},"errorCode",{"type":46,"tag":983,"props":1772,"children":1773},{},[1774],{"type":59,"value":1775},"Action",{"type":46,"tag":993,"props":1777,"children":1778},{},[1779,1812,1851,1886,1914,1950,1985,2009,2033],{"type":46,"tag":979,"props":1780,"children":1781},{},[1782,1794,1799],{"type":46,"tag":1000,"props":1783,"children":1784},{},[1785],{"type":46,"tag":55,"props":1786,"children":1787},{},[1788],{"type":46,"tag":64,"props":1789,"children":1791},{"className":1790},[],[1792],{"type":59,"value":1793},"Succeeded",{"type":46,"tag":1000,"props":1795,"children":1796},{},[1797],{"type":59,"value":1798},"—",{"type":46,"tag":1000,"props":1800,"children":1801},{},[1802,1804,1810],{"type":59,"value":1803},"Provisioning complete. The result includes ",{"type":46,"tag":64,"props":1805,"children":1807},{"className":1806},[],[1808],{"type":59,"value":1809},"siteUrl",{"type":59,"value":1811},". Proceed to Phase 5.",{"type":46,"tag":979,"props":1813,"children":1814},{},[1815,1827,1846],{"type":46,"tag":1000,"props":1816,"children":1817},{},[1818],{"type":46,"tag":55,"props":1819,"children":1820},{},[1821],{"type":46,"tag":64,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":59,"value":1826},"Failed",{"type":46,"tag":1000,"props":1828,"children":1829},{},[1830,1836,1838,1844],{"type":46,"tag":64,"props":1831,"children":1833},{"className":1832},[],[1834],{"type":59,"value":1835},"400",{"type":59,"value":1837}," + ",{"type":46,"tag":64,"props":1839,"children":1841},{"className":1840},[],[1842],{"type":59,"value":1843},"SubdomainConflict",{"type":59,"value":1845}," (or error message mentions subdomain)",{"type":46,"tag":1000,"props":1847,"children":1848},{},[1849],{"type":59,"value":1850},"Subdomain already taken. Loop back to Phase 2 action 2.2 for a new subdomain, then re-run the script.",{"type":46,"tag":979,"props":1852,"children":1853},{},[1854,1865,1874],{"type":46,"tag":1000,"props":1855,"children":1856},{},[1857],{"type":46,"tag":55,"props":1858,"children":1859},{},[1860],{"type":46,"tag":64,"props":1861,"children":1863},{"className":1862},[],[1864],{"type":59,"value":1826},{"type":46,"tag":1000,"props":1866,"children":1867},{},[1868],{"type":46,"tag":64,"props":1869,"children":1871},{"className":1870},[],[1872],{"type":59,"value":1873},"401",{"type":46,"tag":1000,"props":1875,"children":1876},{},[1877,1879,1884],{"type":59,"value":1878},"Token expired. Ask the user to run ",{"type":46,"tag":64,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":59,"value":611},{"type":59,"value":1885}," and retry.",{"type":46,"tag":979,"props":1887,"children":1888},{},[1889,1900,1909],{"type":46,"tag":1000,"props":1890,"children":1891},{},[1892],{"type":46,"tag":55,"props":1893,"children":1894},{},[1895],{"type":46,"tag":64,"props":1896,"children":1898},{"className":1897},[],[1899],{"type":59,"value":1826},{"type":46,"tag":1000,"props":1901,"children":1902},{},[1903],{"type":46,"tag":64,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":59,"value":1908},"403",{"type":46,"tag":1000,"props":1910,"children":1911},{},[1912],{"type":59,"value":1913},"Insufficient permissions. Inform user they need the \"Power Pages site creator\" or \"System Administrator\" role.",{"type":46,"tag":979,"props":1915,"children":1916},{},[1917,1928,1937],{"type":46,"tag":1000,"props":1918,"children":1919},{},[1920],{"type":46,"tag":55,"props":1921,"children":1922},{},[1923],{"type":46,"tag":64,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":59,"value":1826},{"type":46,"tag":1000,"props":1929,"children":1930},{},[1931],{"type":46,"tag":64,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":59,"value":1936},"409",{"type":46,"tag":1000,"props":1938,"children":1939},{},[1940,1942,1948],{"type":59,"value":1941},"Website already exists. Inform user and suggest using ",{"type":46,"tag":64,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":59,"value":1947},"\u002Fdeploy-site",{"type":59,"value":1949}," instead.",{"type":46,"tag":979,"props":1951,"children":1952},{},[1953,1964,1980],{"type":46,"tag":1000,"props":1954,"children":1955},{},[1956],{"type":46,"tag":55,"props":1957,"children":1958},{},[1959],{"type":46,"tag":64,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":59,"value":1826},{"type":46,"tag":1000,"props":1965,"children":1966},{},[1967,1973,1974],{"type":46,"tag":64,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":59,"value":1972},"429",{"type":59,"value":706},{"type":46,"tag":64,"props":1975,"children":1977},{"className":1976},[],[1978],{"type":59,"value":1979},"5xx",{"type":46,"tag":1000,"props":1981,"children":1982},{},[1983],{"type":59,"value":1984},"Throttling or server error. Wait 5 seconds and re-run the script once.",{"type":46,"tag":979,"props":1986,"children":1987},{},[1988,1999,2004],{"type":46,"tag":1000,"props":1989,"children":1990},{},[1991],{"type":46,"tag":55,"props":1992,"children":1993},{},[1994],{"type":46,"tag":64,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":59,"value":1826},{"type":46,"tag":1000,"props":2000,"children":2001},{},[2002],{"type":59,"value":2003},"other",{"type":46,"tag":1000,"props":2005,"children":2006},{},[2007],{"type":59,"value":2008},"Present the error to the user and help troubleshoot.",{"type":46,"tag":979,"props":2010,"children":2011},{},[2012,2024,2028],{"type":46,"tag":1000,"props":2013,"children":2014},{},[2015],{"type":46,"tag":55,"props":2016,"children":2017},{},[2018],{"type":46,"tag":64,"props":2019,"children":2021},{"className":2020},[],[2022],{"type":59,"value":2023},"Running",{"type":46,"tag":1000,"props":2025,"children":2026},{},[2027],{"type":59,"value":1798},{"type":46,"tag":1000,"props":2029,"children":2030},{},[2031],{"type":59,"value":2032},"Provisioning still in progress after 5 minutes. Inform the user it may take up to 15 minutes and suggest checking the Power Platform admin center.",{"type":46,"tag":979,"props":2034,"children":2035},{},[2036,2046,2050],{"type":46,"tag":1000,"props":2037,"children":2038},{},[2039,2044],{"type":46,"tag":64,"props":2040,"children":2042},{"className":2041},[],[2043],{"type":59,"value":782},{"type":59,"value":2045}," field",{"type":46,"tag":1000,"props":2047,"children":2048},{},[2049],{"type":59,"value":1798},{"type":46,"tag":1000,"props":2051,"children":2052},{},[2053],{"type":59,"value":2054},"Prerequisite failure (missing args, no token). Present the error and help troubleshoot.",{"type":46,"tag":245,"props":2056,"children":2058},{"id":2057},"output-3",[2059],{"type":59,"value":792},{"type":46,"tag":113,"props":2061,"children":2062},{},[2063],{"type":46,"tag":117,"props":2064,"children":2065},{},[2066,2068,2073],{"type":59,"value":2067},"Provisioning status resolved (Succeeded with ",{"type":46,"tag":64,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":59,"value":1809},{"type":59,"value":2074},", Failed with error details, or Running with timeout advisory)",{"type":46,"tag":226,"props":2076,"children":2077},{},[],{"type":46,"tag":106,"props":2079,"children":2081},{"id":2080},"phase-5-present-summary",[2082],{"type":59,"value":222},{"type":46,"tag":51,"props":2084,"children":2085},{},[2086,2090],{"type":46,"tag":55,"props":2087,"children":2088},{},[2089],{"type":59,"value":241},{"type":59,"value":2091}," Show the user the final site URL and suggest next steps.",{"type":46,"tag":245,"props":2093,"children":2095},{"id":2094},"actions-4",[2096],{"type":59,"value":250},{"type":46,"tag":252,"props":2098,"children":2100},{"id":2099},"_51-show-results",[2101],{"type":59,"value":2102},"5.1 Show Results",{"type":46,"tag":51,"props":2104,"children":2105},{},[2106,2108,2113],{"type":59,"value":2107},"Present the activation summary using the ",{"type":46,"tag":64,"props":2109,"children":2111},{"className":2110},[],[2112],{"type":59,"value":1809},{"type":59,"value":2114}," from the script output:",{"type":46,"tag":272,"props":2116,"children":2119},{"className":2117,"code":2118,"language":59},[867],"Power Pages site activated successfully!\n\n  Site Name:  \u003CsiteName>\n  Site URL:   \u003CsiteUrl>\n  Environment: \u003CenvironmentName> (\u003CenvironmentId>)\n  Status:     Provisioned\n",[2120],{"type":46,"tag":64,"props":2121,"children":2122},{"__ignoreMap":277},[2123],{"type":59,"value":2118},{"type":46,"tag":51,"props":2125,"children":2126},{},[2127,2129,2134],{"type":59,"value":2128},"The script already resolves the correct cloud-specific site URL domain, so use the ",{"type":46,"tag":64,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":59,"value":1809},{"type":59,"value":2135}," value directly.",{"type":46,"tag":252,"props":2137,"children":2139},{"id":2138},"_51b-write-docsalmlast-activatejson-marker",[2140,2142,2148],{"type":59,"value":2141},"5.1b Write ",{"type":46,"tag":64,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":59,"value":2147},"docs\u002Falm\u002Flast-activate.json",{"type":59,"value":2149}," Marker",{"type":46,"tag":51,"props":2151,"children":2152},{},[2153,2155,2161],{"type":59,"value":2154},"For consumers like the rendered ALM plan (Manual path's per-target Activate steps), write a structured marker that captures the post-activation state. Ensure the ",{"type":46,"tag":64,"props":2156,"children":2158},{"className":2157},[],[2159],{"type":59,"value":2160},"docs\u002Falm\u002F",{"type":59,"value":2162}," directory exists first:",{"type":46,"tag":272,"props":2164,"children":2166},{"className":274,"code":2165,"language":276,"meta":277,"style":277},"node -e \"require('fs').mkdirSync('docs\u002Falm',{recursive:true})\"\n# Determine the stage label this activation was for. The upstream ALM context\n# (e.g. the user running this after import-solution) supplies it as \"Staging\"\u002F\n# \"Production\"; standalone invocations may leave it null — refreshActivateSite\n# falls back to env-URL matching against planData.stages[].envUrl.\nnode -e \"require('fs').writeFileSync('docs\u002Falm\u002Flast-activate.json', JSON.stringify({\n  stageName: \u003CstageNameOrNull>,\n  siteName: '\u003CsiteName>',\n  siteUrl: '\u003CsiteUrl>',\n  websiteRecordId: '\u003CwebsiteRecordId>',\n  environmentUrl: '\u003CenvUrl>',\n  environmentId: '\u003CenvironmentId>',\n  activatedAt: new Date().toISOString(),\n  status: 'Activated',\n  cloud: '\u003Ccloud>',\n}, null, 2))\"\n",[2167],{"type":46,"tag":64,"props":2168,"children":2169},{"__ignoreMap":277},[2170,2195,2205,2214,2223,2232,2253,2262,2271,2280,2289,2298,2307,2316,2325,2334],{"type":46,"tag":283,"props":2171,"children":2172},{"class":285,"line":286},[2173,2177,2182,2186,2191],{"type":46,"tag":283,"props":2174,"children":2175},{"style":290},[2176],{"type":59,"value":639},{"type":46,"tag":283,"props":2178,"children":2179},{"style":296},[2180],{"type":59,"value":2181}," -e",{"type":46,"tag":283,"props":2183,"children":2184},{"style":642},[2185],{"type":59,"value":676},{"type":46,"tag":283,"props":2187,"children":2188},{"style":296},[2189],{"type":59,"value":2190},"require('fs').mkdirSync('docs\u002Falm',{recursive:true})",{"type":46,"tag":283,"props":2192,"children":2193},{"style":642},[2194],{"type":59,"value":686},{"type":46,"tag":283,"props":2196,"children":2198},{"class":285,"line":2197},2,[2199],{"type":46,"tag":283,"props":2200,"children":2202},{"style":2201},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[2203],{"type":59,"value":2204},"# Determine the stage label this activation was for. The upstream ALM context\n",{"type":46,"tag":283,"props":2206,"children":2208},{"class":285,"line":2207},3,[2209],{"type":46,"tag":283,"props":2210,"children":2211},{"style":2201},[2212],{"type":59,"value":2213},"# (e.g. the user running this after import-solution) supplies it as \"Staging\"\u002F\n",{"type":46,"tag":283,"props":2215,"children":2217},{"class":285,"line":2216},4,[2218],{"type":46,"tag":283,"props":2219,"children":2220},{"style":2201},[2221],{"type":59,"value":2222},"# \"Production\"; standalone invocations may leave it null — refreshActivateSite\n",{"type":46,"tag":283,"props":2224,"children":2226},{"class":285,"line":2225},5,[2227],{"type":46,"tag":283,"props":2228,"children":2229},{"style":2201},[2230],{"type":59,"value":2231},"# falls back to env-URL matching against planData.stages[].envUrl.\n",{"type":46,"tag":283,"props":2233,"children":2235},{"class":285,"line":2234},6,[2236,2240,2244,2248],{"type":46,"tag":283,"props":2237,"children":2238},{"style":290},[2239],{"type":59,"value":639},{"type":46,"tag":283,"props":2241,"children":2242},{"style":296},[2243],{"type":59,"value":2181},{"type":46,"tag":283,"props":2245,"children":2246},{"style":642},[2247],{"type":59,"value":676},{"type":46,"tag":283,"props":2249,"children":2250},{"style":296},[2251],{"type":59,"value":2252},"require('fs').writeFileSync('docs\u002Falm\u002Flast-activate.json', JSON.stringify({\n",{"type":46,"tag":283,"props":2254,"children":2256},{"class":285,"line":2255},7,[2257],{"type":46,"tag":283,"props":2258,"children":2259},{"style":296},[2260],{"type":59,"value":2261},"  stageName: \u003CstageNameOrNull>,\n",{"type":46,"tag":283,"props":2263,"children":2265},{"class":285,"line":2264},8,[2266],{"type":46,"tag":283,"props":2267,"children":2268},{"style":296},[2269],{"type":59,"value":2270},"  siteName: '\u003CsiteName>',\n",{"type":46,"tag":283,"props":2272,"children":2274},{"class":285,"line":2273},9,[2275],{"type":46,"tag":283,"props":2276,"children":2277},{"style":296},[2278],{"type":59,"value":2279},"  siteUrl: '\u003CsiteUrl>',\n",{"type":46,"tag":283,"props":2281,"children":2283},{"class":285,"line":2282},10,[2284],{"type":46,"tag":283,"props":2285,"children":2286},{"style":296},[2287],{"type":59,"value":2288},"  websiteRecordId: '\u003CwebsiteRecordId>',\n",{"type":46,"tag":283,"props":2290,"children":2292},{"class":285,"line":2291},11,[2293],{"type":46,"tag":283,"props":2294,"children":2295},{"style":296},[2296],{"type":59,"value":2297},"  environmentUrl: '\u003CenvUrl>',\n",{"type":46,"tag":283,"props":2299,"children":2301},{"class":285,"line":2300},12,[2302],{"type":46,"tag":283,"props":2303,"children":2304},{"style":296},[2305],{"type":59,"value":2306},"  environmentId: '\u003CenvironmentId>',\n",{"type":46,"tag":283,"props":2308,"children":2310},{"class":285,"line":2309},13,[2311],{"type":46,"tag":283,"props":2312,"children":2313},{"style":296},[2314],{"type":59,"value":2315},"  activatedAt: new Date().toISOString(),\n",{"type":46,"tag":283,"props":2317,"children":2319},{"class":285,"line":2318},14,[2320],{"type":46,"tag":283,"props":2321,"children":2322},{"style":296},[2323],{"type":59,"value":2324},"  status: 'Activated',\n",{"type":46,"tag":283,"props":2326,"children":2328},{"class":285,"line":2327},15,[2329],{"type":46,"tag":283,"props":2330,"children":2331},{"style":296},[2332],{"type":59,"value":2333},"  cloud: '\u003Ccloud>',\n",{"type":46,"tag":283,"props":2335,"children":2337},{"class":285,"line":2336},16,[2338,2343],{"type":46,"tag":283,"props":2339,"children":2340},{"style":296},[2341],{"type":59,"value":2342},"}, null, 2))",{"type":46,"tag":283,"props":2344,"children":2345},{"style":642},[2346],{"type":59,"value":686},{"type":46,"tag":51,"props":2348,"children":2349},{},[2350,2352,2357,2359,2365,2367,2372],{"type":59,"value":2351},"When the activation was an ",{"type":46,"tag":55,"props":2353,"children":2354},{},[2355],{"type":59,"value":2356},"already-activated",{"type":59,"value":2358}," detection (Phase 1.4), still write the marker — the rendered plan should reflect \"this stage is live at https:\u002F\u002F...\" regardless of whether activation was performed this run or pre-existing. Set ",{"type":46,"tag":64,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":59,"value":2364},"status: 'AlreadyActivated'",{"type":59,"value":2366}," and use the existing ",{"type":46,"tag":64,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":59,"value":1809},{"type":59,"value":2373}," from Phase 1.4's check.",{"type":46,"tag":252,"props":2375,"children":2377},{"id":2376},"_52-record-skill-usage",[2378],{"type":59,"value":2379},"5.2 Record Skill Usage",{"type":46,"tag":47,"props":2381,"children":2382},{},[2383],{"type":46,"tag":51,"props":2384,"children":2385},{},[2386,2388],{"type":59,"value":2387},"Reference: ",{"type":46,"tag":64,"props":2389,"children":2391},{"className":2390},[],[2392],{"type":59,"value":2393},"${PLUGIN_ROOT}\u002Freferences\u002Fskill-tracking-reference.md",{"type":46,"tag":51,"props":2395,"children":2396},{},[2397,2399,2405],{"type":59,"value":2398},"Follow the skill tracking instructions in the reference to record this skill's usage. Use ",{"type":46,"tag":64,"props":2400,"children":2402},{"className":2401},[],[2403],{"type":59,"value":2404},"--skillName \"ActivateSite\"",{"type":59,"value":134},{"type":46,"tag":252,"props":2407,"children":2409},{"id":2408},"_52b-refresh-the-alm-plan-if-one-exists",[2410],{"type":59,"value":2411},"5.2b Refresh the ALM plan (if one exists)",{"type":46,"tag":272,"props":2413,"children":2415},{"className":274,"code":2414,"language":276,"meta":277,"style":277},"node \"${PLUGIN_ROOT}\u002Fscripts\u002Flib\u002Frefresh-alm-plan-data.js\" \\\n  --projectRoot \".\" \\\n  --phase activate-site \\\n  --stageName \"{stageNameOrEmpty}\" \\\n  --render\n",[2416],{"type":46,"tag":64,"props":2417,"children":2418},{"__ignoreMap":277},[2419,2452,2476,2493,2518],{"type":46,"tag":283,"props":2420,"children":2421},{"class":285,"line":286},[2422,2426,2430,2434,2438,2443,2447],{"type":46,"tag":283,"props":2423,"children":2424},{"style":290},[2425],{"type":59,"value":639},{"type":46,"tag":283,"props":2427,"children":2428},{"style":642},[2429],{"type":59,"value":645},{"type":46,"tag":283,"props":2431,"children":2432},{"style":648},[2433],{"type":59,"value":651},{"type":46,"tag":283,"props":2435,"children":2436},{"style":642},[2437],{"type":59,"value":656},{"type":46,"tag":283,"props":2439,"children":2440},{"style":296},[2441],{"type":59,"value":2442},"\u002Fscripts\u002Flib\u002Frefresh-alm-plan-data.js",{"type":46,"tag":283,"props":2444,"children":2445},{"style":642},[2446],{"type":59,"value":666},{"type":46,"tag":283,"props":2448,"children":2449},{"style":648},[2450],{"type":59,"value":2451}," \\\n",{"type":46,"tag":283,"props":2453,"children":2454},{"class":285,"line":2197},[2455,2460,2464,2468,2472],{"type":46,"tag":283,"props":2456,"children":2457},{"style":296},[2458],{"type":59,"value":2459},"  --projectRoot",{"type":46,"tag":283,"props":2461,"children":2462},{"style":642},[2463],{"type":59,"value":676},{"type":46,"tag":283,"props":2465,"children":2466},{"style":296},[2467],{"type":59,"value":134},{"type":46,"tag":283,"props":2469,"children":2470},{"style":642},[2471],{"type":59,"value":666},{"type":46,"tag":283,"props":2473,"children":2474},{"style":648},[2475],{"type":59,"value":2451},{"type":46,"tag":283,"props":2477,"children":2478},{"class":285,"line":2207},[2479,2484,2489],{"type":46,"tag":283,"props":2480,"children":2481},{"style":296},[2482],{"type":59,"value":2483},"  --phase",{"type":46,"tag":283,"props":2485,"children":2486},{"style":296},[2487],{"type":59,"value":2488}," activate-site",{"type":46,"tag":283,"props":2490,"children":2491},{"style":648},[2492],{"type":59,"value":2451},{"type":46,"tag":283,"props":2494,"children":2495},{"class":285,"line":2216},[2496,2501,2505,2510,2514],{"type":46,"tag":283,"props":2497,"children":2498},{"style":296},[2499],{"type":59,"value":2500},"  --stageName",{"type":46,"tag":283,"props":2502,"children":2503},{"style":642},[2504],{"type":59,"value":676},{"type":46,"tag":283,"props":2506,"children":2507},{"style":296},[2508],{"type":59,"value":2509},"{stageNameOrEmpty}",{"type":46,"tag":283,"props":2511,"children":2512},{"style":642},[2513],{"type":59,"value":666},{"type":46,"tag":283,"props":2515,"children":2516},{"style":648},[2517],{"type":59,"value":2451},{"type":46,"tag":283,"props":2519,"children":2520},{"class":285,"line":2225},[2521],{"type":46,"tag":283,"props":2522,"children":2523},{"style":296},[2524],{"type":59,"value":2525},"  --render\n",{"type":46,"tag":51,"props":2527,"children":2528},{},[2529,2534,2536,2542,2543,2549,2551,2557,2559,2564,2566,2572,2574,2580],{"type":46,"tag":64,"props":2530,"children":2532},{"className":2531},[],[2533],{"type":59,"value":2509},{"type":59,"value":2535}," is the Manual-path target stage label (e.g. ",{"type":46,"tag":64,"props":2537,"children":2539},{"className":2538},[],[2540],{"type":59,"value":2541},"Staging",{"type":59,"value":499},{"type":46,"tag":64,"props":2544,"children":2546},{"className":2545},[],[2547],{"type":59,"value":2548},"Production",{"type":59,"value":2550},") the agent was activating — stated by the user, or inferred from the target env. Pass an empty string when unknown; ",{"type":46,"tag":64,"props":2552,"children":2554},{"className":2553},[],[2555],{"type":59,"value":2556},"refreshActivateSite",{"type":59,"value":2558}," falls back to URL-matching ",{"type":46,"tag":64,"props":2560,"children":2562},{"className":2561},[],[2563],{"type":59,"value":2147},{"type":59,"value":2565},"'s ",{"type":46,"tag":64,"props":2567,"children":2569},{"className":2568},[],[2570],{"type":59,"value":2571},"environmentUrl",{"type":59,"value":2573}," against ",{"type":46,"tag":64,"props":2575,"children":2577},{"className":2576},[],[2578],{"type":59,"value":2579},"planData.stages[].envUrl",{"type":59,"value":2581},", so standalone invocations still get captured.",{"type":46,"tag":51,"props":2583,"children":2584},{},[2585,2587,2592,2594,2600,2602,2608,2610,2616,2618,2624,2626,2632,2634,2640],{"type":59,"value":2586},"The helper reads ",{"type":46,"tag":64,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":59,"value":2147},{"type":59,"value":2593},", writes a per-target entry into ",{"type":46,"tag":64,"props":2595,"children":2597},{"className":2596},[],[2598],{"type":59,"value":2599},"planData.activations[stageName]",{"type":59,"value":2601}," (siteUrl, status, activatedAt), and re-renders ",{"type":46,"tag":64,"props":2603,"children":2605},{"className":2604},[],[2606],{"type":59,"value":2607},"docs\u002Falm-plan.html",{"type":59,"value":2609}," so the matching ",{"type":46,"tag":64,"props":2611,"children":2613},{"className":2612},[],[2614],{"type":59,"value":2615},"Activate site in {stageName}",{"type":59,"value":2617}," checklist step shows an ",{"type":46,"tag":64,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":59,"value":2623},"ACTIVATED",{"type":59,"value":2625}," badge with the live site URL inline. When ",{"type":46,"tag":64,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":59,"value":2631},"docs\u002F.alm-plan-data.json",{"type":59,"value":2633}," is absent (standalone, not part of an ALM plan), the helper returns ",{"type":46,"tag":64,"props":2635,"children":2637},{"className":2636},[],[2638],{"type":59,"value":2639},"ok:false",{"type":59,"value":2641}," as a soft no-op.",{"type":46,"tag":51,"props":2643,"children":2644},{},[2645,2650,2652,2658,2660,2666,2668,2673,2675,2694,2696,2701,2702,2708,2710,2719,2721,2727,2729,2734,2736,2741,2743,2748],{"type":46,"tag":55,"props":2646,"children":2647},{},[2648],{"type":59,"value":2649},"Point the user at the next step (user-driven sequencing).",{"type":59,"value":2651}," The helper's stdout JSON includes ",{"type":46,"tag":64,"props":2653,"children":2655},{"className":2654},[],[2656],{"type":59,"value":2657},"nextStep: { name, skill: string | null } | null",{"type":59,"value":2659},". When non-null, branch on ",{"type":46,"tag":64,"props":2661,"children":2663},{"className":2662},[],[2664],{"type":59,"value":2665},"skill",{"type":59,"value":2667},": when ",{"type":46,"tag":64,"props":2669,"children":2671},{"className":2670},[],[2672],{"type":59,"value":2665},{"type":59,"value":2674}," is non-null, tell the user ",{"type":46,"tag":2676,"props":2677,"children":2678},"em",{},[2679,2681,2684,2686,2692],{"type":59,"value":2680},"\"Plan updated. Next in your plan: ",{"type":46,"tag":55,"props":2682,"children":2683},{"next-step-name":277},[],{"type":59,"value":2685}," → run ",{"type":46,"tag":64,"props":2687,"children":2689},{"className":2688},[],[2690],{"type":59,"value":2691},"{nextStep.skill}",{"type":59,"value":2693}," when you're ready.\"",{"type":59,"value":2695},"; when ",{"type":46,"tag":64,"props":2697,"children":2699},{"className":2698},[],[2700],{"type":59,"value":2665},{"type":59,"value":732},{"type":46,"tag":64,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":59,"value":2707},"null",{"type":59,"value":2709}," (an internal step such as Finalize, no user command), name the step only — ",{"type":46,"tag":2676,"props":2711,"children":2712},{},[2713,2714,2717],{"type":59,"value":2680},{"type":46,"tag":55,"props":2715,"children":2716},{"next-step-name":277},[],{"type":59,"value":2718},".\"",{"type":59,"value":2720}," — and never print ",{"type":46,"tag":64,"props":2722,"children":2724},{"className":2723},[],[2725],{"type":59,"value":2726},"run null",{"type":59,"value":2728},". When ",{"type":46,"tag":64,"props":2730,"children":2732},{"className":2731},[],[2733],{"type":59,"value":2707},{"type":59,"value":2735}," or the helper returned ",{"type":46,"tag":64,"props":2737,"children":2739},{"className":2738},[],[2740],{"type":59,"value":2639},{"type":59,"value":2742},", say nothing about a next step. ",{"type":46,"tag":55,"props":2744,"children":2745},{},[2746],{"type":59,"value":2747},"Never auto-invoke the next skill",{"type":59,"value":2749}," — the user drives execution.",{"type":46,"tag":252,"props":2751,"children":2753},{"id":2752},"_53-suggest-next-steps",[2754],{"type":59,"value":2755},"5.3 Suggest Next Steps",{"type":46,"tag":51,"props":2757,"children":2758},{},[2759],{"type":59,"value":2760},"After the summary, suggest:",{"type":46,"tag":113,"props":2762,"children":2763},{},[2764,2777,2790,2801,2812],{"type":46,"tag":117,"props":2765,"children":2766},{},[2767,2769,2775],{"type":59,"value":2768},"Test the site: ",{"type":46,"tag":64,"props":2770,"children":2772},{"className":2771},[],[2773],{"type":59,"value":2774},"\u002Ftest-site",{"type":59,"value":2776}," — Verify the site loads correctly and API calls are working",{"type":46,"tag":117,"props":2778,"children":2779},{},[2780,2782,2788],{"type":59,"value":2781},"Set up ALM: ",{"type":46,"tag":64,"props":2783,"children":2785},{"className":2784},[],[2786],{"type":59,"value":2787},"\u002Fpower-pages:plan-alm",{"type":59,"value":2789}," — Set up ALM to promote this site to staging or production (creates a solution, configures a deployment pipeline or export\u002Fimport strategy)",{"type":46,"tag":117,"props":2791,"children":2792},{},[2793,2795],{"type":59,"value":2794},"Set up the data model: ",{"type":46,"tag":64,"props":2796,"children":2798},{"className":2797},[],[2799],{"type":59,"value":2800},"\u002Fsetup-datamodel",{"type":46,"tag":117,"props":2802,"children":2803},{},[2804,2806],{"type":59,"value":2805},"Add sample data: ",{"type":46,"tag":64,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":59,"value":2811},"\u002Fadd-sample-data",{"type":46,"tag":117,"props":2813,"children":2814},{},[2815],{"type":59,"value":2816},"View the site in the browser at the provisioned URL (note: it may take a few minutes for DNS to propagate)",{"type":46,"tag":245,"props":2818,"children":2820},{"id":2819},"output-4",[2821],{"type":59,"value":792},{"type":46,"tag":113,"props":2823,"children":2824},{},[2825,2830],{"type":46,"tag":117,"props":2826,"children":2827},{},[2828],{"type":59,"value":2829},"Activation summary presented with site URL",{"type":46,"tag":117,"props":2831,"children":2832},{},[2833],{"type":59,"value":2834},"Next steps suggested to the user",{"type":46,"tag":226,"props":2836,"children":2837},{},[],{"type":46,"tag":106,"props":2839,"children":2841},{"id":2840},"important-notes",[2842],{"type":59,"value":2843},"Important Notes",{"type":46,"tag":245,"props":2845,"children":2847},{"id":2846},"progress-tracking",[2848],{"type":59,"value":2849},"Progress Tracking",{"type":46,"tag":51,"props":2851,"children":2852},{},[2853,2854,2860],{"type":59,"value":1186},{"type":46,"tag":64,"props":2855,"children":2857},{"className":2856},[],[2858],{"type":59,"value":2859},"TaskCreate",{"type":59,"value":2861}," at the start to track progress through each phase:",{"type":46,"tag":971,"props":2863,"children":2864},{},[2865,2881],{"type":46,"tag":975,"props":2866,"children":2867},{},[2868],{"type":46,"tag":979,"props":2869,"children":2870},{},[2871,2876],{"type":46,"tag":983,"props":2872,"children":2873},{},[2874],{"type":59,"value":2875},"Task",{"type":46,"tag":983,"props":2877,"children":2878},{},[2879],{"type":59,"value":2880},"Description",{"type":46,"tag":993,"props":2882,"children":2883},{},[2884,2897,2910,2923,2936],{"type":46,"tag":979,"props":2885,"children":2886},{},[2887,2892],{"type":46,"tag":1000,"props":2888,"children":2889},{},[2890],{"type":59,"value":2891},"Phase 1",{"type":46,"tag":1000,"props":2893,"children":2894},{},[2895],{"type":59,"value":2896},"Verify Prerequisites — PAC CLI auth, Cloud detection, Azure CLI login, activation status check",{"type":46,"tag":979,"props":2898,"children":2899},{},[2900,2905],{"type":46,"tag":1000,"props":2901,"children":2902},{},[2903],{"type":59,"value":2904},"Phase 2",{"type":46,"tag":1000,"props":2906,"children":2907},{},[2908],{"type":59,"value":2909},"Gather Parameters — site name, subdomain, website record ID",{"type":46,"tag":979,"props":2911,"children":2912},{},[2913,2918],{"type":46,"tag":1000,"props":2914,"children":2915},{},[2916],{"type":59,"value":2917},"Phase 3",{"type":46,"tag":1000,"props":2919,"children":2920},{},[2921],{"type":59,"value":2922},"Confirm — user approval of activation parameters",{"type":46,"tag":979,"props":2924,"children":2925},{},[2926,2931],{"type":46,"tag":1000,"props":2927,"children":2928},{},[2929],{"type":59,"value":2930},"Phase 4",{"type":46,"tag":1000,"props":2932,"children":2933},{},[2934],{"type":59,"value":2935},"Activate & Poll — run activation script, handle result",{"type":46,"tag":979,"props":2937,"children":2938},{},[2939,2944],{"type":46,"tag":1000,"props":2940,"children":2941},{},[2942],{"type":59,"value":2943},"Phase 5",{"type":46,"tag":1000,"props":2945,"children":2946},{},[2947],{"type":59,"value":2948},"Present Summary — show site URL and next steps",{"type":46,"tag":51,"props":2950,"children":2951},{},[2952,2954,2960],{"type":59,"value":2953},"Mark each task complete with ",{"type":46,"tag":64,"props":2955,"children":2957},{"className":2956},[],[2958],{"type":59,"value":2959},"TaskUpdate",{"type":59,"value":2961}," as you finish each phase.",{"type":46,"tag":245,"props":2963,"children":2965},{"id":2964},"key-decision-points",[2966],{"type":59,"value":2967},"Key Decision Points",{"type":46,"tag":113,"props":2969,"children":2970},{},[2971,2981,2991,3001,3010,3020,3035],{"type":46,"tag":117,"props":2972,"children":2973},{},[2974,2979],{"type":46,"tag":55,"props":2975,"children":2976},{},[2977],{"type":59,"value":2978},"Phase 1.2",{"type":59,"value":2980},": If not authenticated, must authenticate before proceeding — cannot skip.",{"type":46,"tag":117,"props":2982,"children":2983},{},[2984,2989],{"type":46,"tag":55,"props":2985,"children":2986},{},[2987],{"type":59,"value":2988},"Phase 1.4",{"type":59,"value":2990},": If site is already activated, stop early — do NOT proceed to Phase 2.",{"type":46,"tag":117,"props":2992,"children":2993},{},[2994,2999],{"type":46,"tag":55,"props":2995,"children":2996},{},[2997],{"type":59,"value":2998},"Phase 2.2",{"type":59,"value":3000},": User may accept the generated subdomain or provide a custom one — validate custom input.",{"type":46,"tag":117,"props":3002,"children":3003},{},[3004,3008],{"type":46,"tag":55,"props":3005,"children":3006},{},[3007],{"type":59,"value":2917},{"type":59,"value":3009},": User must explicitly approve activation. If declined, stop the skill entirely.",{"type":46,"tag":117,"props":3011,"children":3012},{},[3013,3018],{"type":46,"tag":55,"props":3014,"children":3015},{},[3016],{"type":59,"value":3017},"Phase 4.2",{"type":59,"value":3019},": On 400 (subdomain taken), loop back to Phase 2 action 2.2 and re-run the script — do not abort.",{"type":46,"tag":117,"props":3021,"children":3022},{},[3023,3027,3029,3034],{"type":46,"tag":55,"props":3024,"children":3025},{},[3026],{"type":59,"value":3017},{"type":59,"value":3028},": On 409 (site already exists), redirect user to ",{"type":46,"tag":64,"props":3030,"children":3032},{"className":3031},[],[3033],{"type":59,"value":1947},{"type":59,"value":1949},{"type":46,"tag":117,"props":3036,"children":3037},{},[3038,3042],{"type":46,"tag":55,"props":3039,"children":3040},{},[3041],{"type":59,"value":3017},{"type":59,"value":3043},": On timeout (still Running after 5 minutes), do not treat as failure — advise user to check admin center.",{"type":46,"tag":51,"props":3045,"children":3046},{},[3047],{"type":46,"tag":55,"props":3048,"children":3049},{},[3050],{"type":59,"value":3051},"Begin with Phase 1: Verify Prerequisites",{"type":46,"tag":3053,"props":3054,"children":3055},"style",{},[3056],{"type":59,"value":3057},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3059,"total":3150},[3060,3066,3080,3090,3105,3118,3134],{"slug":4,"name":4,"fn":5,"description":6,"org":3061,"tags":3062,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3063,3064,3065],{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":3067,"name":3067,"fn":3068,"description":3069,"org":3070,"tags":3071,"stars":20,"repoUrl":21,"updatedAt":3079},"add-connector","add Power Platform connectors to apps","Adds any Power Platform connector to a Power Apps code app. Generic fallback for connectors not covered by a specific skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3072,3075,3077],{"name":3073,"slug":3074,"type":15},"Integrations","integrations",{"name":3076,"slug":30,"type":15},"Power Apps",{"name":3078,"slug":31,"type":15},"Power Platform","2026-07-31T05:54:47.042251",{"slug":3081,"name":3081,"fn":3082,"description":3083,"org":3084,"tags":3085,"stars":20,"repoUrl":21,"updatedAt":3089},"add-datasource","add data sources to Power Apps","Adds a data source or connector to a Power Apps code app. Asks what the user wants to accomplish and routes to the appropriate specialized skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3086,3087,3088],{"name":3073,"slug":3074,"type":15},{"name":9,"slug":8,"type":15},{"name":3076,"slug":30,"type":15},"2026-07-03T16:31:47.822186",{"slug":3091,"name":3091,"fn":3092,"description":3093,"org":3094,"tags":3095,"stars":20,"repoUrl":21,"updatedAt":3104},"add-dataverse","add Dataverse tables to Power Apps","Use when the user wants to add Dataverse tables (existing or new) to a Power Apps mobile app, extend an existing Dataverse table with new columns, or apply an approved data model plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3096,3099,3102,3103],{"name":3097,"slug":3098,"type":15},"Data Modeling","data-modeling",{"name":3100,"slug":3101,"type":15},"Dataverse","dataverse",{"name":9,"slug":8,"type":15},{"name":3076,"slug":30,"type":15},"2026-07-31T05:54:46.078014",{"slug":3106,"name":3106,"fn":3107,"description":3108,"org":3109,"tags":3110,"stars":20,"repoUrl":21,"updatedAt":3117},"add-excel","integrate Excel Online into Power Apps","Adds Excel Online (Business) connector to a Power Apps code app. Use when reading or writing Excel workbook data from OneDrive or SharePoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3111,3114,3115,3116],{"name":3112,"slug":3113,"type":15},"Excel","excel",{"name":3073,"slug":3074,"type":15},{"name":9,"slug":8,"type":15},{"name":3076,"slug":30,"type":15},"2026-07-31T05:54:44.030943",{"slug":3119,"name":3119,"fn":3120,"description":3121,"org":3122,"tags":3123,"stars":20,"repoUrl":21,"updatedAt":3133},"add-mcscopilot","add Copilot Studio connectors to Power Apps","Adds Microsoft Copilot Studio connector to a Power Apps code app. Use when invoking Copilot Studio agents, sending prompts to agents, or integrating agent responses.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3124,3127,3130,3131,3132],{"name":3125,"slug":3126,"type":15},"Agents","agents",{"name":3128,"slug":3129,"type":15},"Copilot Studio","copilot-studio",{"name":3073,"slug":3074,"type":15},{"name":9,"slug":8,"type":15},{"name":3076,"slug":30,"type":15},"2026-07-31T05:54:39.025597",{"slug":3135,"name":3135,"fn":3136,"description":3137,"org":3138,"tags":3139,"stars":20,"repoUrl":21,"updatedAt":3149},"add-sample-data","populate Power Pages tables with sample data","Populates Dataverse tables with sample records for testing and demoing a Power Pages site. Use when the user wants to add sample data, seed data, generate test records, or insert demo data into their tables.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3140,3143,3144,3145,3146],{"name":3141,"slug":3142,"type":15},"Database","database",{"name":3100,"slug":3101,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3147,"slug":3148,"type":15},"Testing","testing","2026-04-06T18:34:41.141155",26,{"items":3152,"total":3343},[3153,3175,3194,3215,3230,3247,3258,3271,3286,3301,3318,3331],{"slug":3154,"name":3154,"fn":3155,"description":3156,"org":3157,"tags":3158,"stars":3172,"repoUrl":3173,"updatedAt":3174},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3159,3162,3165,3166,3169],{"name":3160,"slug":3161,"type":15},"Engineering","engineering",{"name":3163,"slug":3164,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":3167,"slug":3168,"type":15},"Project Management","project-management",{"name":3170,"slug":3171,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":3176,"name":3176,"fn":3177,"description":3178,"org":3179,"tags":3180,"stars":3191,"repoUrl":3192,"updatedAt":3193},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3181,3184,3185,3188],{"name":3182,"slug":3183,"type":15},".NET","net",{"name":3125,"slug":3126,"type":15},{"name":3186,"slug":3187,"type":15},"Azure","azure",{"name":3189,"slug":3190,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":3195,"name":3195,"fn":3196,"description":3197,"org":3198,"tags":3199,"stars":3191,"repoUrl":3192,"updatedAt":3214},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3200,3203,3204,3207,3210,3211],{"name":3201,"slug":3202,"type":15},"Analytics","analytics",{"name":3186,"slug":3187,"type":15},{"name":3205,"slug":3206,"type":15},"Data Analysis","data-analysis",{"name":3208,"slug":3209,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":3212,"slug":3213,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":3216,"name":3216,"fn":3217,"description":3218,"org":3219,"tags":3220,"stars":3191,"repoUrl":3192,"updatedAt":3229},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3221,3224,3225,3226],{"name":3222,"slug":3223,"type":15},"AI Infrastructure","ai-infrastructure",{"name":3186,"slug":3187,"type":15},{"name":3208,"slug":3209,"type":15},{"name":3227,"slug":3228,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":3231,"name":3231,"fn":3232,"description":3233,"org":3234,"tags":3235,"stars":3191,"repoUrl":3192,"updatedAt":3246},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3236,3237,3240,3241,3242,3245],{"name":3186,"slug":3187,"type":15},{"name":3238,"slug":3239,"type":15},"Compliance","compliance",{"name":3189,"slug":3190,"type":15},{"name":9,"slug":8,"type":15},{"name":3243,"slug":3244,"type":15},"Python","python",{"name":3227,"slug":3228,"type":15},"2026-07-18T05:14:23.017504",{"slug":3248,"name":3248,"fn":3249,"description":3250,"org":3251,"tags":3252,"stars":3191,"repoUrl":3192,"updatedAt":3257},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3253,3254,3255,3256],{"name":3201,"slug":3202,"type":15},{"name":3186,"slug":3187,"type":15},{"name":3189,"slug":3190,"type":15},{"name":3243,"slug":3244,"type":15},"2026-07-31T05:54:29.068751",{"slug":3259,"name":3259,"fn":3260,"description":3261,"org":3262,"tags":3263,"stars":3191,"repoUrl":3192,"updatedAt":3270},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3264,3267,3268,3269],{"name":3265,"slug":3266,"type":15},"API Development","api-development",{"name":3186,"slug":3187,"type":15},{"name":9,"slug":8,"type":15},{"name":3243,"slug":3244,"type":15},"2026-07-18T05:14:16.988376",{"slug":3272,"name":3272,"fn":3273,"description":3274,"org":3275,"tags":3276,"stars":3191,"repoUrl":3192,"updatedAt":3285},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3277,3278,3281,3284],{"name":3186,"slug":3187,"type":15},{"name":3279,"slug":3280,"type":15},"Computer Vision","computer-vision",{"name":3282,"slug":3283,"type":15},"Images","images",{"name":3243,"slug":3244,"type":15},"2026-07-18T05:14:18.007737",{"slug":3287,"name":3287,"fn":3288,"description":3289,"org":3290,"tags":3291,"stars":3191,"repoUrl":3192,"updatedAt":3300},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3292,3293,3296,3299],{"name":3186,"slug":3187,"type":15},{"name":3294,"slug":3295,"type":15},"Configuration","configuration",{"name":3297,"slug":3298,"type":15},"Feature Flags","feature-flags",{"name":3208,"slug":3209,"type":15},"2026-07-03T16:32:01.278468",{"slug":3302,"name":3302,"fn":3303,"description":3304,"org":3305,"tags":3306,"stars":3191,"repoUrl":3192,"updatedAt":3317},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3307,3310,3311,3314],{"name":3308,"slug":3309,"type":15},"Cosmos DB","cosmos-db",{"name":3141,"slug":3142,"type":15},{"name":3312,"slug":3313,"type":15},"NoSQL","nosql",{"name":3315,"slug":3316,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":3319,"name":3319,"fn":3303,"description":3320,"org":3321,"tags":3322,"stars":3191,"repoUrl":3192,"updatedAt":3330},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3323,3324,3325,3326,3327],{"name":3308,"slug":3309,"type":15},{"name":3141,"slug":3142,"type":15},{"name":9,"slug":8,"type":15},{"name":3312,"slug":3313,"type":15},{"name":3328,"slug":3329,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":3332,"name":3332,"fn":3333,"description":3334,"org":3335,"tags":3336,"stars":3191,"repoUrl":3192,"updatedAt":3342},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3337,3338,3339,3340,3341],{"name":3186,"slug":3187,"type":15},{"name":3308,"slug":3309,"type":15},{"name":3141,"slug":3142,"type":15},{"name":3208,"slug":3209,"type":15},{"name":3312,"slug":3313,"type":15},"2026-05-13T06:14:17.582229",267]