SuperAPI AI 工具集

aspire-orchestration

部署与运维

查看项目

更新于 10-14 05:34

技能介绍

用途

Aspire Orchestration 是一个工作流技能(WORKFLOW SKILL),用于在 VS Code 或 CLI 中管理 Aspire 应用的生命周期。它的目标是在 AI 代理参与 Aspire 项目时,通过强制的操作规范防止代理「自伤」——即违规操作会导致文件锁、孤儿进程和用户困扰。技能在满足特定检测信号时自动激活。

主要能力

激活检测

当以下任一信号出现时激活:

  • C# AppHost:.csproj 中包含 Aspire.AppHost.Sdk(确定性)
  • 基于文件的 C# AppHost:apphost.cs 或含 #:sdk Aspire.AppHost.Sdk 的 .cs 文件(确定性)
  • TypeScript AppHost:项目中存在 apphost.mts 或旧版 apphost.ts(确定性)
  • Aspire 配置:项目根目录有 aspire.config.json(高)
  • Aspire 设置:存在 .aspire/ 目录(高)
  • 生成的 TS 模块:.aspire/modules/ 目录(高)
  • Service defaults:项目引用中有 Aspire.ServiceDefaults(中)

生命周期管理

  • 启动:优先调用 aspire_apphost_start(mode run,传入精确的 appHostPath);工具不可用或处于 git worktree 时回退到 CLI:aspire start --non-interactive [--isolated] --apphost <filesystem-path>。
  • 等待资源就绪:使用 aspire wait <resource>,禁止使用 curl / HTTP 轮询。
  • 检查状态:使用 aspire describe(隐藏资源加 --include-hidden),禁止使用已移除的 aspire ps --resources。
  • 停止:优先调用 aspire_apphost_stop,并严格遵循其结果矩阵回退规则。

停止结果矩阵

  • stopped / notRunning:报告结果,不再采取停止动作
  • alreadyStopping(controller editor):报告正在进行,不再采取动作
  • alreadyStarting(controller editor):重试一次,若重复则报告启动仍在进行
  • notEditorOwned(controller external):若用户明确要求停止该 AppHost,解析为文件系统路径后运行 CLI 停止命令
  • failed(controller unknown):重试一次,若重复则使用同目标 CLI 命令
  • ambiguousSession:终止性安全拒绝,不运行也不提供 CLI 回退,用户确认也无法使其安全

Git Worktree 处理

编辑器工具当前无法请求 Aspire 的隔离状态,因此即使在 aspire_apphost_start 可用时,也应使用:aspire start --non-interactive --isolated --apphost <filesystem-path>。

多根工作区

需将选中的 AppHost 解析为实际文件系统路径后再传给 CLI 的 --apphost;不能把多根选择器(如 repo-a~1/MyApp.AppHost/MyApp.AppHost.csproj)原样复制给 CLI。若发现多个 AppHost 且用户目标不清晰,必须提出一个澄清问题并等待用户指定,不得猜测。

安全护栏

  • 启动应用:用 aspire_apphost_start,禁止 dotnet run 于 AppHost
  • 等待资源:用 aspire wait,禁止轮询
  • 代码变更:优先资源命令、运行时 watch/HMR、仪表板操作或 IDE 调试,禁止对锁定文件执行 dotnet build
  • 检查运行中的 AppHost:用 aspire ps,禁止手动检查进程
  • 移除持久化资源:确认数据丢失后使用 aspire stop --force --apphost <filesystem-path>,禁止与 --all 组合或用于普通停止
  • 安装 Aspire 支持:用 aspire add 或 aspire init,禁止 dotnet workload install aspire(已过时)

使用方式

前置条件

  • .NET 10.0 SDK(https://dotnet.microsoft.com/download)
  • Aspire CLI,可选安装方式:
    • curl/PowerShell:curl -sSL https://aspire.dev/install.sh | bash
    • npm:npm install -g @microsoft/aspire-cli
    • NativeAOT 全局工具(.NET 10):dotnet tool install -g Aspire.Cli

应使用用户环境所拥有的安装方式,支持 npm、Nix、Homebrew、WinGet、mise 及安装脚本。

默认工作流

  1. 确认工作区为 Aspire,识别 AppHost
  2. git worktree 使用隔离启动命令;否则使用 aspire_apphost_start(mode run)或 CLI 回退
  3. 交互资源前先 aspire wait <resource>
  4. aspire describe 检查状态后开始工作
  5. AppHost 代码变更则通过同一生命周期路由重启;仅单个资源变更则优先资源命令/watch/HMR/调试
  6. 任务完成后停止(编辑器工具优先,CLI 仅在文档化的回退结果下使用)

常用命令

  • 人工启动:aspire run(前台、仪表板)
  • 列出运行中的 AppHost:aspire ps
  • 资源操作:aspire resource <resource-name> <command>
  • 创建项目:aspire new aspire-starter
  • 添加集成:aspire add <package>
  • 升级 CLI:aspire update --self
  • 恢复生成文件:aspire restore
  • 环境诊断:aspire doctor
  • 机器可读输出:--format Json(支持 ps、describe、start)
  • API 参考查询:aspire docs api search <query> --language csharp|typescript

适用场景

  • AI 代理在包含 Aspire AppHost 的项目中执行启动、等待、检查、停止等生命周期操作
  • 处理因 Aspire 运行导致的构建文件锁错误(MSB3491、CS2012)
  • 诊断「端口已占用」「资源未找到」「Docker 守护进程不可用」等环境与运行问题
  • git worktree 场景下的隔离启动
  • 多 AppHost 场景下的目标消歧

限制

  • 仅覆盖生命周期编排,AppHost 接线(资源、ServiceDefaults/OTel)需交接给 aspireify 技能
  • 部署、发布、流水线、aspire destroy 交接给 aspire-deployment 技能
  • 日志、追踪、指标、仪表板交接给 aspire-monitoring 技能
  • 已部署应用的诊断交接给 azure-diagnostics 技能
  • TypeScript AppHost 的所有创作均委托给 aspireify;CLI 驱动的旧版迁移由本编排技能负责,且需先获得完整变更批准
  • 缺少 SDK 或工具时需通过 aspire doctor 诊断;具体平台差异暂未提供

环境变量

  • ASPIRE_ENABLE_CONTAINER_TUNNEL:默认 true,容器隧道在 Docker Desktop、Docker Engine 和 Podman 之间提供统一主机连通性,设为 false 可选择退出
  • ASPIRE_ENVIRONMENT:未设置,选择特定环境的配置概要文件
  • ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE:默认 true,Windows 上 DCP 使用 Aspire 受信任开发证书,设为 false 可选择退出
  • features.defaultWatchEnabled:默认未配置时为 false,为支持的 C# 和 TypeScript AppHost 启用 Aspire 默认 watch,不应视为针对资源源码变更的逐资源重建、重启或热重载