[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BE20F244MGDJC74AFXGZ2":3,"skill-same:01M69BE20F244MGDJC74AFXGZ2":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M69BE20F244MGDJC74AFXGZ2","discovery-services-agent-deployer",null,"Deploy Discovery catalog agents end-to-end with one command: discover the agent, build and bind its tool when present, skip tool stages for agents without tools, deploy the agent, and optionally run validation. Use this skill whenever the user asks to deploy a Discovery agent, publish or rebuild an agent tool image, register a Discovery tool from a repo Dockerfile\u002Ftool.yaml, resume a failed deployment, or produce a dry-run deployment plan for an agent in this catalog.","microsoft\u002Fdiscovery","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BDVENS7NFPQQV19R5KA3B",287,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[32,33,34,35,36,37,38],"discovery services agent deployer","image","deploy","dockerfile","deployment","run","discovery catalog","2026-11-10 10:12:30",false,"---\nname: discovery-services-agent-deployer\ndescription: 'Deploy Discovery catalog agents end-to-end with one command: discover the agent, build and bind its tool when present, skip tool stages for agents without tools, deploy the agent, and optionally run validation. Use this skill whenever the user asks to deploy a Discovery agent, publish or rebuild an agent tool image, register a Discovery tool from a repo Dockerfile\u002Ftool.yaml, resume a failed deployment, or produce a dry-run deployment plan for an agent in this catalog.'\nallowed-tools: shell\n---\n\n# Discovery Agent Deployer\n\n## Compatibility\n\nRuns on Windows, macOS, and Linux through PowerShell 7+ (`pwsh`). Requires `git`, `python` with `pip`, and Azure CLI (`az`). Docker is optional because the runner can use Azure Container Registry Tasks when local Docker is unavailable.\n\nNew configurations default to Discovery GA `2026-06-01`. Explicit preview versions in local configs and saved runs remain unchanged. See [configuration](references\u002Fconfiguration.md) for version-specific validation routes and knowledge-base binding formats.\n\n## What this skill does\n\nDeploy one or more Discovery catalog agents from this repository with a single deterministic runner:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 \u003Cagent-name>\n```\n\nThe single PowerShell script discovers the agent folder, selects its tool folder when present, builds and pushes the image, creates or updates the `Microsoft.Discovery\u002Ftools` resource, patches a run-local copy of `agent.yaml`, deploys the agent, validates it with a temporary investigation, and prints a final summary. If the agent has no tool, it skips `build` and `deploy-tool` and continues with agent deployment. It persists stage status to `stage-todos.json` in the run directory so the invoking assistant can keep native Copilot task tracking in sync without duplicating progress logs.\n\nAgent deployment sets `humanInTheLoop` and every bound tool's `confirmation` to `Disabled`, even if the source YAML enables them. This persists for subsequent uses of the deployed agent, not just validation. The source YAML is unchanged. This does not bypass Supercomputer nodepool confirmation, platform-required actions, or approval requests in agent instructions; unexpected validation approvals still require user input.\n\n## When to use\n\nUse this skill for requests like:\n\n- \"\u002Fdiscovery-services-agent-deployer `chembl`\"\n- \"\u002Fdiscovery-services-agent-deployer `chembl` `aizynthfinder`\"\n- \"Deploy the `aizynthfinder` agent\"\n- \"Build and publish the tool image for this Discovery agent\"\n- \"Create the Discovery tool resource from this agent's Dockerfile and tool.yaml\"\n- \"Resume the failed deployment in this run folder\"\n- \"Show me what would be deployed for this agent before running it\"\n\nIf the user only wants inventory, use the `discovery-catalog` skill instead.\n\n## Customer inputs\n\nThe happy path needs only the agent name. Optional parameters reduce rework or make automation explicit:\n\n| Parameter | Purpose |\n|---|---|\n| `\u003Cagent-name> [agent-name...]` or `-AgentName \u003Cname>[,\u003Cname>...]` | Agent folder name under `agents\u002F`. Positional names are preferred for slash-style use such as `\u002Fdiscovery-services-agent-deployer chembl aizynthfinder`. Required unless resuming. |\n| `-PublisherName \u003Cname>` | **Deprecated.** Tolerated for backwards compatibility but ignored — agents live in the flat `agents\u002F\u003Cagent-name>\u002F` layout with no publisher folder. The deployer prints a one-line deprecation notice when the flag is supplied. |\n| `-BuildMode auto\\|remote\\|local` | Defaults to `auto`; if input is required, ask the customer for `remote` or `local`. Do not store build mode in `config.json`. |\n| `-Resume \u003CRunDir>` | Continues from a prior checkpointed run. |\n| `-Stage init\\|build\\|deploy-tool\\|deploy-agent\\|validate\\|summary\\|stop` | Runs exactly one stage, allowing Copilot to update native TODOs between terminal commands. |\n| `-RunDir \u003CRunDir>` | Required with `-Stage` after `init`. |\n| `-ConfirmSupercomputerNodepools` | Run-scoped confirmation that the customer chose Proceed for the current run's tool\u002FSKU plan. Do not store this in `config.json`. |\n| `-ValidationPrompt \u003Cprompt>` | Run-scoped validation prompt generated by Copilot from the deployed agent\u002Ftool context. Overrides config `testPrompt` for this run. |\n| `-SkipValidation` | Deploys without the post-deploy investigation test. |\n| `-WhatIfPlan` | Prints repo discovery and planned stages without Azure calls. |\n\nLocal environment values live in `.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fconfig.json`, copied from `config.template.json`. The populated file is intentionally gitignored; never commit it. Never assume the file exists. Stage 1 must verify these required values are present: `subscriptionId`, `resourceGroup`, `acrName`, `location`, `workspaceEndpoint`, `project`, `tenantId`, `chatModel`, and `forceToolImageRebuild`. `acrResourceGroup` is optional and is used when ACR is in a different resource group from Discovery resources. `testPrompt` is optional; when present and non-empty it overrides Copilot-generated validation prompts. For every missing required value, ask the user only for fields listed in `CONFIG_FIELDS_TO_COLLECT`; do not choose from examples or defaults yourself. Do not store `buildMode` or `confirmSupercomputerNodepools` in `config.json`; both are per-run choices.\n\n## Workflow\n\n1. For planning or uncertain agent names, run `-WhatIfPlan` first.\n2. Before creating native Copilot TODOs, validate every requested agent exists at `agents\u002F\u003Cagent-name>\u002Fagent.yaml`.\n3. If any requested agent is missing, do not create deployment TODOs; stop and ask the user to fix the name.\n4. After validation succeeds and before starting deployment work, create the native Copilot TODO list for every requested agent.\n5. For deployment, invoke the single runner from the repo root.\n6. If the runner emits `CONFIG_INPUT_REQUIRED=true`, ask the user for the listed values in Copilot chat, write the ignored `config.json`, then rerun the stage. Do not fill missing fields from defaults, examples, or prior assumptions without a user answer.\n7. If the runner emits `BUILD_MODE_INPUT_REQUIRED=true`, ask the user to choose `remote` or `local`, then rerun with `-BuildMode \u003Cchoice>`. Do not write `buildMode` to `config.json`.\n8. Before building a tool, show the `TOOL_BUILD_PLAN` with image and `recommendedSkus`. When the runner emits `SUPERCOMPUTER_NODEPOOL_CONFIRMATION_REQUIRED=true`, stop immediately and ask the customer the exact question in the `COPILOT SUPERCOMPUTER NODEPOOL INPUT REQUEST` block through the assistant choice-prompt UI, not as plain text. In this CLI, use the `ask_user` tool with exactly these choices: `Proceed - I have Supercomputer nodepool capacity for at least one listed SKU.` and `Stop - I do not have the required Supercomputer nodepool capacity.` Do not continue, do not infer Proceed, and do not run with `-ConfirmSupercomputerNodepools` until the customer explicitly chooses Proceed. If Proceed, rerun the build with `-ConfirmSupercomputerNodepools`; if Stop, run `-Stage stop -RunDir \u003CRunDir>`.\n9. Before validation for tool-backed agents, use this priority order for the validation prompt: explicit `-ValidationPrompt`, then non-empty config `testPrompt`, then Copilot-generated prompt. If the runner emits `VALIDATION_PROMPT_INPUT_REQUIRED=true`, do not ask the user; generate the prompt yourself from the `COPILOT VALIDATION PROMPT REQUEST` block and rerun `-Stage validate -ValidationPrompt \"\u003Cgenerated prompt>\"`.\n10. If validation fails or semantically reports blocked\u002Ffailed output, mark `validate` failed and `summary` stopped. Read `validation-result.json` when available.\n11. If a stage fails, fix the reported issue and rerun with `-Resume \u003CRunDir>`, except for nodepool Stop where the user should rerun the skill later after capacity is available.\n12. Report the final summary printed by the runner; do not invent status from partial logs.\n\nFor slash-style requests like `\u002Fdiscovery-services-agent-deployer chembl aizynthfinder`, treat the words after the skill name as positional agent names and invoke the runner as:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl aizynthfinder\n```\n\n## Copilot task tracking\n\nWhen running in VS Code GitHub Copilot or any environment that exposes a task\u002FTODO UI above the prompt, the native TODO list is required for deployments. Create the TODOs only after all requested agent names pass preflight validation, but create them before invoking the long-running deployment path.\n\nFor agents with a tool, create the six-stage TODO list:\n\n1. `init` - discover agent, validate prerequisites, collect config, create run directory\n2. `build` - build and push the tool image\n3. `deploy-tool` - create or update the Discovery tool resource\n4. `deploy-agent` - patch the run-local agent YAML and deploy the agent\n5. `validate` - run the post-deployment investigation test, unless `-SkipValidation` is set\n6. `summary` - print and report final deployment summary\n\nFor agents without a tool, create only the four relevant TODOs: `init`, `deploy-agent`, `validate`, and `summary`. Do not create native TODO items for `build` or `deploy-tool`; the runner skips those stages internally.\n\nTo keep the native TODO UI accurate, use stage-at-a-time execution instead of one long end-to-end command whenever the TODO UI is visible. Mark the matching TODO `in_progress`, run exactly one stage, then mark it `done` only after the command exits successfully or emits `TASK_STATUS=\u003Cstage>:done`. If the runner emits `TASK_STATUS=\u003Cstage>:input_required`, collect the requested input in Copilot chat and rerun the same stage rather than marking it failed. For nodepool input, present the Proceed\u002FStop question through the available choice-prompt mechanism (`ask_user` in this CLI), never as a plain-text “reply with Proceed or Stop” message, and never self-confirm by immediately rerunning with `-ConfirmSupercomputerNodepools`. Do not start the next stage command until the native TODO state visibly reflects the completed stage. If the command output shows `TASK_STATUS=deploy-agent:done`, update `deploy-agent` to done before running `validate`; if it shows `TASK_STATUS=validate:done`, update `validate` to done before running `summary`. The runner also emits `TASK_PLAN=\u003Cagent>\u002F\u003Cstage>` lines immediately after preflight succeeds; use these as a final prompt to create any missing native TODOs before stage work begins. Mark the active TODO `failed` if the stage command fails, then report the `-Resume \u003CRunDir>` command.\n\nBefore sending the final success response, reconcile the native TODO list with the runner output. If validation and summary succeeded, the visible TODOs for `deploy-agent`, `validate`, and `summary` must be marked done. Never report \"all stages succeeded\" while any visible deployment TODO remains in progress or pending.\n\nFor two or more agents, create a separate TODO set per agent and include the agent name in each TODO label, for example `chembl \u002F build` and `online-researcher \u002F deploy-agent`. Use six TODOs for tool-backed agents and four TODOs for agents without tools. Run stages sequentially per agent using `-Stage`; this gives Copilot a chance to update `chembl \u002F build` before starting `chembl \u002F deploy-tool`. The end-to-end multi-agent runner remains available for automation, but it should not be used when the user expects the native Copilot TODO UI to advance during the run.\n\nIf no task\u002FTODO UI is available, use the concise `[runner] START\u002FDONE\u002FSKIP` lines and `stage-todos.json` as the progress record.\n\n### Stage-at-a-time command sequence\n\nUse this pattern when native Copilot TODOs are visible:\n\n```powershell\n# init emits RUN_DIR=\u003Cpath>; capture it for later stages\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl -Stage init\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage build\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage deploy-tool\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage deploy-agent\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage validate -ValidationPrompt \"\u003CCopilot-generated validation prompt>\"\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage summary\n```\n\nAfter each command returns, update the matching native TODO before issuing the next command. This pause is part of the workflow, not optional; Copilot cannot reliably update the TODO UI after several stages have already been run in one uninterrupted sequence.\n\n## Commands\n\n### Dry-run plan\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder -WhatIfPlan\n```\n\nEquivalent positional form:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 aizynthfinder -WhatIfPlan\n```\n\n### Dry-run or deploy multiple agents\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl aizynthfinder -WhatIfPlan\n```\n\n### Deploy with automatic build mode\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder\n```\n\n### Force remote ACR build\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder -BuildMode remote\n```\n\n### Resume a failed run\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -Resume agents\u002Ftmp\u002Faizynthfinder\u002F20260508-172700\n```\n\n## Reporting contract\n\nWhen the runner completes, summarize:\n\n- `RUN_DIR`\n- `IMAGE_REF`\n- `TOOL_RESOURCE_ID` if available\n- stage TODO statuses from native Copilot task tracking or `stage-todos.json`\n- stage statuses from `SUMMARY_STAGE_*`\n- validation status (`passed`, `pending`, or skipped)\n\nIf the runner fails, report the failed stage, the action required from the script output, and the exact `-Resume \u003CRunDir>` command when a run directory exists.\n\n## References\n\n- `references\u002Fconfiguration.md` - local config fields and Copilot-style input behavior\n- `references\u002Foperations.md` - runner behavior, checkpoints, and resume model\n- `references\u002Ftroubleshooting.md` - common failures and recovery steps\n\nKeep `SKILL.md` lean. Prefer the single public runner and references over ad-hoc scripts or long manual instructions. The deployer implementation is intentionally consolidated into `scripts\u002Fdeploy-discovery-agent.ps1` so there is only one executable script to maintain.\n","# Discovery Agent Deployer\n\n## Compatibility\n\nRuns on Windows, macOS, and Linux through PowerShell 7+ (`pwsh`). Requires `git`, `python` with `pip`, and Azure CLI (`az`). Docker is optional because the runner can use Azure Container Registry Tasks when local Docker is unavailable.\n\nNew configurations default to Discovery GA `2026-06-01`. Explicit preview versions in local configs and saved runs remain unchanged. See [configuration](references\u002Fconfiguration.md) for version-specific validation routes and knowledge-base binding formats.\n\n## What this skill does\n\nDeploy one or more Discovery catalog agents from this repository with a single deterministic runner:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 \u003Cagent-name>\n```\n\nThe single PowerShell script discovers the agent folder, selects its tool folder when present, builds and pushes the image, creates or updates the `Microsoft.Discovery\u002Ftools` resource, patches a run-local copy of `agent.yaml`, deploys the agent, validates it with a temporary investigation, and prints a final summary. If the agent has no tool, it skips `build` and `deploy-tool` and continues with agent deployment. It persists stage status to `stage-todos.json` in the run directory so the invoking assistant can keep native Copilot task tracking in sync without duplicating progress logs.\n\nAgent deployment sets `humanInTheLoop` and every bound tool's `confirmation` to `Disabled`, even if the source YAML enables them. This persists for subsequent uses of the deployed agent, not just validation. The source YAML is unchanged. This does not bypass Supercomputer nodepool confirmation, platform-required actions, or approval requests in agent instructions; unexpected validation approvals still require user input.\n\n## When to use\n\nUse this skill for requests like:\n\n- \"\u002Fdiscovery-services-agent-deployer `chembl`\"\n- \"\u002Fdiscovery-services-agent-deployer `chembl` `aizynthfinder`\"\n- \"Deploy the `aizynthfinder` agent\"\n- \"Build and publish the tool image for this Discovery agent\"\n- \"Create the Discovery tool resource from this agent's Dockerfile and tool.yaml\"\n- \"Resume the failed deployment in this run folder\"\n- \"Show me what would be deployed for this agent before running it\"\n\nIf the user only wants inventory, use the `discovery-catalog` skill instead.\n\n## Customer inputs\n\nThe happy path needs only the agent name. Optional parameters reduce rework or make automation explicit:\n\n| Parameter | Purpose |\n|---|---|\n| `\u003Cagent-name> [agent-name...]` or `-AgentName \u003Cname>[,\u003Cname>...]` | Agent folder name under `agents\u002F`. Positional names are preferred for slash-style use such as `\u002Fdiscovery-services-agent-deployer chembl aizynthfinder`. Required unless resuming. |\n| `-PublisherName \u003Cname>` | **Deprecated.** Tolerated for backwards compatibility but ignored — agents live in the flat `agents\u002F\u003Cagent-name>\u002F` layout with no publisher folder. The deployer prints a one-line deprecation notice when the flag is supplied. |\n| `-BuildMode auto\\|remote\\|local` | Defaults to `auto`; if input is required, ask the customer for `remote` or `local`. Do not store build mode in `config.json`. |\n| `-Resume \u003CRunDir>` | Continues from a prior checkpointed run. |\n| `-Stage init\\|build\\|deploy-tool\\|deploy-agent\\|validate\\|summary\\|stop` | Runs exactly one stage, allowing Copilot to update native TODOs between terminal commands. |\n| `-RunDir \u003CRunDir>` | Required with `-Stage` after `init`. |\n| `-ConfirmSupercomputerNodepools` | Run-scoped confirmation that the customer chose Proceed for the current run's tool\u002FSKU plan. Do not store this in `config.json`. |\n| `-ValidationPrompt \u003Cprompt>` | Run-scoped validation prompt generated by Copilot from the deployed agent\u002Ftool context. Overrides config `testPrompt` for this run. |\n| `-SkipValidation` | Deploys without the post-deploy investigation test. |\n| `-WhatIfPlan` | Prints repo discovery and planned stages without Azure calls. |\n\nLocal environment values live in `.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fconfig.json`, copied from `config.template.json`. The populated file is intentionally gitignored; never commit it. Never assume the file exists. Stage 1 must verify these required values are present: `subscriptionId`, `resourceGroup`, `acrName`, `location`, `workspaceEndpoint`, `project`, `tenantId`, `chatModel`, and `forceToolImageRebuild`. `acrResourceGroup` is optional and is used when ACR is in a different resource group from Discovery resources. `testPrompt` is optional; when present and non-empty it overrides Copilot-generated validation prompts. For every missing required value, ask the user only for fields listed in `CONFIG_FIELDS_TO_COLLECT`; do not choose from examples or defaults yourself. Do not store `buildMode` or `confirmSupercomputerNodepools` in `config.json`; both are per-run choices.\n\n## Workflow\n\n1. For planning or uncertain agent names, run `-WhatIfPlan` first.\n2. Before creating native Copilot TODOs, validate every requested agent exists at `agents\u002F\u003Cagent-name>\u002Fagent.yaml`.\n3. If any requested agent is missing, do not create deployment TODOs; stop and ask the user to fix the name.\n4. After validation succeeds and before starting deployment work, create the native Copilot TODO list for every requested agent.\n5. For deployment, invoke the single runner from the repo root.\n6. If the runner emits `CONFIG_INPUT_REQUIRED=true`, ask the user for the listed values in Copilot chat, write the ignored `config.json`, then rerun the stage. Do not fill missing fields from defaults, examples, or prior assumptions without a user answer.\n7. If the runner emits `BUILD_MODE_INPUT_REQUIRED=true`, ask the user to choose `remote` or `local`, then rerun with `-BuildMode \u003Cchoice>`. Do not write `buildMode` to `config.json`.\n8. Before building a tool, show the `TOOL_BUILD_PLAN` with image and `recommendedSkus`. When the runner emits `SUPERCOMPUTER_NODEPOOL_CONFIRMATION_REQUIRED=true`, stop immediately and ask the customer the exact question in the `COPILOT SUPERCOMPUTER NODEPOOL INPUT REQUEST` block through the assistant choice-prompt UI, not as plain text. In this CLI, use the `ask_user` tool with exactly these choices: `Proceed - I have Supercomputer nodepool capacity for at least one listed SKU.` and `Stop - I do not have the required Supercomputer nodepool capacity.` Do not continue, do not infer Proceed, and do not run with `-ConfirmSupercomputerNodepools` until the customer explicitly chooses Proceed. If Proceed, rerun the build with `-ConfirmSupercomputerNodepools`; if Stop, run `-Stage stop -RunDir \u003CRunDir>`.\n9. Before validation for tool-backed agents, use this priority order for the validation prompt: explicit `-ValidationPrompt`, then non-empty config `testPrompt`, then Copilot-generated prompt. If the runner emits `VALIDATION_PROMPT_INPUT_REQUIRED=true`, do not ask the user; generate the prompt yourself from the `COPILOT VALIDATION PROMPT REQUEST` block and rerun `-Stage validate -ValidationPrompt \"\u003Cgenerated prompt>\"`.\n10. If validation fails or semantically reports blocked\u002Ffailed output, mark `validate` failed and `summary` stopped. Read `validation-result.json` when available.\n11. If a stage fails, fix the reported issue and rerun with `-Resume \u003CRunDir>`, except for nodepool Stop where the user should rerun the skill later after capacity is available.\n12. Report the final summary printed by the runner; do not invent status from partial logs.\n\nFor slash-style requests like `\u002Fdiscovery-services-agent-deployer chembl aizynthfinder`, treat the words after the skill name as positional agent names and invoke the runner as:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl aizynthfinder\n```\n\n## Copilot task tracking\n\nWhen running in VS Code GitHub Copilot or any environment that exposes a task\u002FTODO UI above the prompt, the native TODO list is required for deployments. Create the TODOs only after all requested agent names pass preflight validation, but create them before invoking the long-running deployment path.\n\nFor agents with a tool, create the six-stage TODO list:\n\n1. `init` - discover agent, validate prerequisites, collect config, create run directory\n2. `build` - build and push the tool image\n3. `deploy-tool` - create or update the Discovery tool resource\n4. `deploy-agent` - patch the run-local agent YAML and deploy the agent\n5. `validate` - run the post-deployment investigation test, unless `-SkipValidation` is set\n6. `summary` - print and report final deployment summary\n\nFor agents without a tool, create only the four relevant TODOs: `init`, `deploy-agent`, `validate`, and `summary`. Do not create native TODO items for `build` or `deploy-tool`; the runner skips those stages internally.\n\nTo keep the native TODO UI accurate, use stage-at-a-time execution instead of one long end-to-end command whenever the TODO UI is visible. Mark the matching TODO `in_progress`, run exactly one stage, then mark it `done` only after the command exits successfully or emits `TASK_STATUS=\u003Cstage>:done`. If the runner emits `TASK_STATUS=\u003Cstage>:input_required`, collect the requested input in Copilot chat and rerun the same stage rather than marking it failed. For nodepool input, present the Proceed\u002FStop question through the available choice-prompt mechanism (`ask_user` in this CLI), never as a plain-text “reply with Proceed or Stop” message, and never self-confirm by immediately rerunning with `-ConfirmSupercomputerNodepools`. Do not start the next stage command until the native TODO state visibly reflects the completed stage. If the command output shows `TASK_STATUS=deploy-agent:done`, update `deploy-agent` to done before running `validate`; if it shows `TASK_STATUS=validate:done`, update `validate` to done before running `summary`. The runner also emits `TASK_PLAN=\u003Cagent>\u002F\u003Cstage>` lines immediately after preflight succeeds; use these as a final prompt to create any missing native TODOs before stage work begins. Mark the active TODO `failed` if the stage command fails, then report the `-Resume \u003CRunDir>` command.\n\nBefore sending the final success response, reconcile the native TODO list with the runner output. If validation and summary succeeded, the visible TODOs for `deploy-agent`, `validate`, and `summary` must be marked done. Never report \"all stages succeeded\" while any visible deployment TODO remains in progress or pending.\n\nFor two or more agents, create a separate TODO set per agent and include the agent name in each TODO label, for example `chembl \u002F build` and `online-researcher \u002F deploy-agent`. Use six TODOs for tool-backed agents and four TODOs for agents without tools. Run stages sequentially per agent using `-Stage`; this gives Copilot a chance to update `chembl \u002F build` before starting `chembl \u002F deploy-tool`. The end-to-end multi-agent runner remains available for automation, but it should not be used when the user expects the native Copilot TODO UI to advance during the run.\n\nIf no task\u002FTODO UI is available, use the concise `[runner] START\u002FDONE\u002FSKIP` lines and `stage-todos.json` as the progress record.\n\n### Stage-at-a-time command sequence\n\nUse this pattern when native Copilot TODOs are visible:\n\n```powershell\n# init emits RUN_DIR=\u003Cpath>; capture it for later stages\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl -Stage init\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage build\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage deploy-tool\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage deploy-agent\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage validate -ValidationPrompt \"\u003CCopilot-generated validation prompt>\"\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -RunDir \u003CRunDir> -Stage summary\n```\n\nAfter each command returns, update the matching native TODO before issuing the next command. This pause is part of the workflow, not optional; Copilot cannot reliably update the TODO UI after several stages have already been run in one uninterrupted sequence.\n\n## Commands\n\n### Dry-run plan\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder -WhatIfPlan\n```\n\nEquivalent positional form:\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 aizynthfinder -WhatIfPlan\n```\n\n### Dry-run or deploy multiple agents\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 chembl aizynthfinder -WhatIfPlan\n```\n\n### Deploy with automatic build mode\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder\n```\n\n### Force remote ACR build\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -AgentName aizynthfinder -BuildMode remote\n```\n\n### Resume a failed run\n\n```powershell\npwsh -NoProfile -ExecutionPolicy Bypass -File .github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1 -Resume agents\u002Ftmp\u002Faizynthfinder\u002F20260508-172700\n```\n\n## Reporting contract\n\nWhen the runner completes, summarize:\n\n- `RUN_DIR`\n- `IMAGE_REF`\n- `TOOL_RESOURCE_ID` if available\n- stage TODO statuses from native Copilot task tracking or `stage-todos.json`\n- stage statuses from `SUMMARY_STAGE_*`\n- validation status (`passed`, `pending`, or skipped)\n\nIf the runner fails, report the failed stage, the action required from the script output, and the exact `-Resume \u003CRunDir>` command when a run directory exists.\n\n## References\n\n- `references\u002Fconfiguration.md` - local config fields and Copilot-style input behavior\n- `references\u002Foperations.md` - runner behavior, checkpoints, and resume model\n- `references\u002Ftroubleshooting.md` - common failures and recovery steps\n\nKeep `SKILL.md` lean. Prefer the single public runner and references over ad-hoc scripts or long manual instructions. The deployer implementation is intentionally consolidated into `scripts\u002Fdeploy-discovery-agent.ps1` so there is only one executable script to maintain.\n",{"name":5,"description":7,"allowed-tools":44},"shell","main","a7d5fef00a8d15e0705c88f2c53a61c02e738526",".github\u002Fskills\u002Fdiscovery-services-agent-deployer",97,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-11 16:09:29",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add microsoft\u002Fdiscovery --skill discovery-services-agent-deployer",{"tool":60,"command":61},"bunx","bunx skills add microsoft\u002Fdiscovery --skill discovery-services-agent-deployer",{"tool":63,"command":64},"pnpm","pnpm dlx skills add microsoft\u002Fdiscovery --skill discovery-services-agent-deployer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002FSKILL.md",true,[68,74,78,82,86],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"config.template.json","REFERENCE","参考文档",650,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fconfig.template.json",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fconfiguration.md",5474,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Freferences\u002Fconfiguration.md",{"path":79,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Foperations.md",13390,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Freferences\u002Foperations.md",{"path":83,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Ftroubleshooting.md",1889,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Freferences\u002Ftroubleshooting.md",{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"scripts\u002Fdeploy-discovery-agent.ps1","SCRIPT","脚本",124011,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-agent-deployer\u002Fscripts\u002Fdeploy-discovery-agent.ps1",[93,112,150,181,190,202],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":39},"01M6PJFHF9C2GSFK8DFW6D5RF7","token-estimator-mvp","Estimate AI planning ranges from a work description or explicitly authorized safe project context. Provides coarse class ranges or conditional planning bases without requiring token guesses.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002Fskills\u002Ftoken-estimator-mvp\u002FSKILL.md",[],[100,101,102,103,104,105,106,107,108,109,110,111],"token estimator mvp","mvp","token","safe","planning","work","context","bases","project context","project","estimate","conditional",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":130,"publishedAt":39},"01M6M0MTE9BST8PT7ECHCC5KJK","build-research-paper","Cross-domain \u002F Scientific writing and publication — Build\nbeautifully-formatted, arxiv-ready research paper PDFs from a mix of\nhand-authored LaTeX and\u002For markdown + PNG figures, using `tectonic`\n(default) or `pandoc` (escape hatch). Captures the reusable pattern that\nresearch projects keep re-discovering: `report\u002Fmain.tex` + `references.bib`\n+ `generate_figures.py` + iterative feedback\u002Fresponse scaffolding, all\nbuildable with a single command. WHEN: write a research paper, arxiv\nsubmission, prepub, generate PDF from markdown, LaTeX paper, build main.tex,\njournal manuscript, referee revision, response to referee, resubmission\npackage, publication-quality figures, matplotlib publication style, tectonic\nbuild, pandoc build, generate arxiv-ready PDF, bibliography from BibTeX.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002Fskills\u002Fbuild-research-paper\u002FSKILL.md",[118,121,124,127],{"categoryNo":119,"categoryName":120,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":125,"categoryName":126,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":128,"categoryName":129,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者",[131,132,133,134,135,136,137,138,45,139,140,141,142,143,144,145,146,147,148,149],"build research paper","paper","build","research","ready","projects","default","references","scaffolding","journal","scientific","generate pdf","re","mix","tectonic","hand","command","PDF","writing",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":164,"publishedAt":39},"01M69BE9GW375EBM6ETNWD84E3","add-example-agents","Add agents from the public microsoft\u002Fdiscovery GitHub repository to this workspace, either (a) locally for the Copilot app by emitting a `.agent.md` companion per agent (so each is invocable via `runSubagent`), (b) into a Microsoft Discovery project via `UpsertAgent` sourced fresh from upstream (binding pre-existing tool ARM resources when present, or building + pushing + registering them in Azure first when missing), or (c) promoting an agent already added to the local Copilot app (sourced from its `.github\u002Fagents\u002F\u003Cname>.agent.md` companion; tool-bearing agents also carry a `discovery_catalog\u002F\u003Cname>\u002F` folder plus a locally-built tool container, while toolless agents have only the companion) up to a specific Microsoft Discovery project + Azure without re-fetching or refreshing from upstream. The user picks exactly one of the three targets per run. USE FOR: 'add the discovery agents', 'download discovery agents', 'install all Microsoft discovery agents', 'add agents from microsoft\u002Fdiscovery', 'create copilot agents from microsoft\u002Fdiscovery', 'deploy discovery agents to Foundry', 'deploy discovery agents to Azure', 'promote a local agent to Microsoft Discovery', 'push my local agent and container to a Discovery project', 'copy a local app agent to Azure'. Always refreshes every selected subfolder under `agents\u002F\u003Cname>\u002F` of the upstream repo into `discovery_catalog\u002F\u003Cname>\u002F` so the local catalog stays current (new agents appear, removed agents are surfaced, updated content is applied). The presence check for what is 'already locally added' uses `.github\u002Fagents\u002F\u003Cname>.agent.md` (the Copilot companion), not the `discovery_catalog\u002F` folder. For local deployment, each generated `.agent.md` carries a lazy Docker-bootstrap preamble so the agent builds its tool image on first use only if absent. For Discovery + Azure deployment, pre-flights every declared tool via `GetDiscoveryTool` against the workspace's RG and **skips Docker build \u002F ACR push \u002F AcrPull RBAC entirely when the tool already exists** (common for shared catalog images on registries like `mdqacr`); only builds + registers tools that are actually missing. Always creates the agent in the chosen Discovery project via `UpsertAgent` and polls **`GetAgent` for `provisioningState=Succeeded`** (the MCP `GetAgentOperation` tool returns an opaque error in practice; never rely on it). All MCP calls flow through PowerShell scripts embedded in this SKILL.md and materialized into `.vscode\u002F` during Step 4d — the skill does not depend on sibling helper files or on the VS Code MCP runtime surfacing `mcp_microsoft-dis_*` tools mid-session. Local Discovery runtime registration via `agents action=create` is optional and skipped by default. DO NOT USE FOR: running an already-deployed agent (use runSubagent), or editing a single agent's prompt (edit `agent.yaml` directly).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002Fskills\u002Fadd-example-agents\u002FSKILL.md",[156,157,160,161],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":158,"categoryName":159,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":162,"categoryName":163,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师",[165,166,167,33,168,169,170,171,172,9,173,174,175,176,177,178,36,179,37,180],"add example agents","windows","MCP","python","github","docker","valid","editor","vscode","copilot","distributed","azure","podman","bootstrap","create","code",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":39},"01M69BE703VQGX4F9Z5J4MTJV2","migrate-podman-containerfile","Migrate a Podman Containerfile to the canonical Dockerfile required by the Discovery catalog. Use when a PR fails POL-022, a tool contains Containerfile or Dockerfile.in, or a contributor asks to convert Podman build files for Docker. Creates the Dockerfile directly only when the migration is mechanically safe and refuses ambiguous preprocessing or multi-file builds.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmigrate-podman-containerfile\u002FSKILL.md",[],[188,177,170,189,38,103,35],"migrate podman containerfile","pr",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":197,"publishedAt":39},"01M69BE4KN4J5R2RY3927C8PM6","discovery-services-starter-kit-deployer","Deploy Discovery catalog starter-kits end-to-end: validate kit.json agentRefs, build and deploy every referenced agent tool, deploy each referenced agent individually, and summarize deployed agents\u002Ftools plus customer-ready sample prompts. Use this skill whenever the user asks to deploy a Discovery starter-kit or deploy all agents listed in starter-kits\u002F*\u002Fkit.json.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-services-starter-kit-deployer\u002FSKILL.md",[196],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[198,34,199,200,201,38],"discovery services starter kit deployer","validate","customer","summarize",{"skillNo":203,"name":204,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":214,"publishedAt":39},"01M69BDZZS2J28VZFZX97G33WC","discovery-design-tasks","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdiscovery\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdiscovery-design-tasks\u002FSKILL.md",[207,210,211],{"categoryNo":208,"categoryName":209,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":212,"categoryName":213,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000032","设计师",[215,216,217],"tasks","design","discovery design tasks"]