Added A-Frame Architecture Sample.
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
---
|
||||
name: aspire-init
|
||||
description: >-
|
||||
**WORKFLOW SKILL** - First-run flow for adding Aspire to a repo. Picks `aspire new`
|
||||
(greenfield) or `aspire init` (existing repo), drops the AppHost skeleton, then hands
|
||||
off to `aspireify` for resource wiring.
|
||||
USE FOR: aspire init, aspire new, aspire-starter, aspire-ts-starter, aspire-py-starter,
|
||||
add Aspire to existing repo, scaffold Aspire app, bootstrap Aspire, no AppHost detected,
|
||||
install aspireify, generated .aspire/modules.
|
||||
DO NOT USE FOR: AppHost wiring on an existing AppHost (use aspireify), start/stop/wait
|
||||
(use aspire-orchestration), deploy/publish (use aspire-deployment), logs/traces (use
|
||||
aspire-monitoring), repo that already has an AppHost.
|
||||
INVOKES: aspire CLI (init, new, doctor), aspireify (handoff after skeleton drop).
|
||||
FOR SINGLE OPERATIONS: Run `aspire init` or `aspire new TEMPLATE` directly.
|
||||
license: MIT
|
||||
metadata:
|
||||
author: Microsoft
|
||||
version: "0.0.1"
|
||||
---
|
||||
|
||||
# Aspire Init
|
||||
|
||||
> **First-run only.** This skill owns the skeleton drop and template choice for repositories
|
||||
> that do not yet have an Aspire AppHost. Once the skeleton is in place, hand off to
|
||||
> [`aspireify`](../aspireify/SKILL.md) for the actual resource wiring.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
| Requirement | Install |
|
||||
|-------------|---------|
|
||||
| .NET 10.0 SDK | https://dotnet.microsoft.com/download |
|
||||
| Aspire CLI (curl installer) | `curl -sSL https://aspire.dev/install.sh \| bash` |
|
||||
| Aspire CLI (NativeAOT global tool) | `dotnet tool install -g Aspire.Cli` (.NET 10 required) |
|
||||
| Diagnose missing prerequisites | `aspire doctor` |
|
||||
|
||||
> Aspire ships the CLI as a NativeAOT .NET global tool — instant startup, no JIT warmup.
|
||||
> The curl/PowerShell installer remains supported for environments without .NET 10.
|
||||
|
||||
## Detection
|
||||
|
||||
Activate **only** when adding Aspire to a workspace that does not yet have one. Confirm ALL
|
||||
of the following before running `aspire init`:
|
||||
|
||||
| Signal | How to Detect | Meaning |
|
||||
|--------|---------------|---------|
|
||||
| No C# AppHost | No `.csproj` containing `Aspire.AppHost.Sdk` | OK to init |
|
||||
| No file-based AppHost | No `apphost.cs` with `#:sdk Aspire.AppHost.Sdk` | OK to init |
|
||||
| No TypeScript AppHost | No `apphost.ts` in repo root | OK to init |
|
||||
| No Aspire config | No `aspire.config.json` in repo root | OK to init |
|
||||
| User intent | Explicit "add Aspire", "scaffold Aspire", "aspire init" | OK to init |
|
||||
|
||||
If **any** AppHost signal is already present, **do not run `aspire init`**. Route to
|
||||
[`aspireify`](../aspireify/SKILL.md) (re-wire) or
|
||||
[`aspire-orchestration`](../aspire-orchestration/SKILL.md) (lifecycle).
|
||||
|
||||
## Decision: `aspire new` vs `aspire init`
|
||||
|
||||
| Situation | Command | Why |
|
||||
|-----------|---------|-----|
|
||||
| Empty directory or brand-new project | `aspire new <template>` | Generates a full starter solution |
|
||||
| Existing repo with services to model | `aspire init` | Drops minimal skeleton + `aspire.config.json` next to existing code |
|
||||
| User wants a sample to learn from | `aspire new aspire-starter` | Includes ApiService + Web + ServiceDefaults |
|
||||
| User wants the smallest possible scaffold | `aspire new aspire-empty` (C#) or `aspire new aspire-ts-empty` (TS) | No resources pre-wired |
|
||||
| User wants Python services | `aspire new aspire-py-starter` (TypeScript AppHost drives Python) | **Not** `dotnet new` — that template was removed in 13.3 |
|
||||
|
||||
See [references/templates.md](references/templates.md) for the complete template list and
|
||||
options.
|
||||
|
||||
## Workflow A — `aspire new <template>` (new project)
|
||||
|
||||
For brand-new projects in an empty or non-existent directory:
|
||||
|
||||
1. Confirm prerequisites with `aspire doctor` if the CLI install is uncertain.
|
||||
2. Pick a template from [references/templates.md](references/templates.md).
|
||||
3. Run the template, append `--non-interactive` for agent flows:
|
||||
```bash
|
||||
aspire new aspire-starter --name MyApp --output ./MyApp --non-interactive
|
||||
```
|
||||
4. The new directory is fully wired by the template — **no aspireify handoff needed**.
|
||||
5. Route to [`aspire-orchestration`](../aspire-orchestration/SKILL.md) for first run
|
||||
(`aspire start`).
|
||||
|
||||
## Workflow B — `aspire init` (existing repo)
|
||||
|
||||
For repositories that already contain services (Express API, .NET API, Python service, etc.)
|
||||
and need an AppHost added alongside them:
|
||||
|
||||
1. Verify the [Detection](#detection) table — confirm **no** AppHost is present.
|
||||
2. Run `aspire init`, choosing language explicitly for non-interactive flows:
|
||||
```bash
|
||||
aspire init --language csharp --non-interactive
|
||||
# or
|
||||
aspire init --language typescript --non-interactive
|
||||
```
|
||||
3. `aspire init` drops:
|
||||
- The AppHost skeleton (`apphost.cs` with `#:sdk` directives, **or** `apphost.ts` with the
|
||||
generated `.aspire/modules/` folder)
|
||||
- AppHost configuration describing language + AppHost path
|
||||
- The **`aspireify`** agent skill into the project's skill directory (same one
|
||||
`aspire agent init` uses)
|
||||
4. **Hand off to `aspireify`** — `aspire init` does **not** wire resources, projects, or
|
||||
integrations on its own.
|
||||
5. After `aspireify` finishes wiring, validate via `aspire start`
|
||||
([`aspire-orchestration`](../aspire-orchestration/SKILL.md)).
|
||||
|
||||
See [references/init-workflow.md](references/init-workflow.md) for the full sequence
|
||||
including what `aspire.config.json` contains and what to do if `aspire init` fails partway.
|
||||
|
||||
## Handoff Rules
|
||||
|
||||
| After `aspire init` / `aspire new` finishes... | Route To |
|
||||
|------------------------------------------------|----------|
|
||||
| Skeleton dropped, resources need wiring | → `aspireify` skill (in-plugin or project-local) |
|
||||
| Skeleton dropped, validate it starts | → `aspire-orchestration` (run `aspire start`) |
|
||||
| New project from template, ready to run | → `aspire-orchestration` |
|
||||
| User asks to deploy after init | → `aspire-deployment` |
|
||||
| User asks for logs/traces after init | → `aspire-monitoring` |
|
||||
| Existing AppHost detected — do NOT run init | → `aspireify` (re-wire) or `aspire-orchestration` (lifecycle) |
|
||||
|
||||
## Project-Local Skill Override
|
||||
|
||||
If `.agents/skills/aspire-init/SKILL.md` exists project-locally (legacy install from an
|
||||
older `aspire init` run), **warn the user and defer to it**. The legacy project-local skill
|
||||
may carry repo-specific guidance that should not be overridden by this in-plugin skill.
|
||||
|
||||
The project-local `aspireify` skill (installed by `aspire init`) takes precedence
|
||||
over this plugin's in-plugin `aspireify` for the same reason — defer to the project-local
|
||||
copy and warn.
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Symptom | Cause | Action |
|
||||
|---------|-------|--------|
|
||||
| `aspire init` reports AppHost already exists | Repo already has an AppHost | Stop. Route to `aspireify` (re-wire) or `aspire-orchestration` (lifecycle) |
|
||||
| `aspire init` fails in non-interactive mode without `--language` | Multiple language paths available | Re-run with `--language csharp` or `--language typescript` |
|
||||
| `aspire new` rejects `--output` path | Path exists and is non-empty | Use a different `--output` or empty the directory |
|
||||
| `aspire` command not found | CLI not installed | `dotnet tool install -g Aspire.Cli` (.NET 10) or `curl -sSL https://aspire.dev/install.sh \| bash` |
|
||||
| `aspire doctor` reports missing .NET 10 | SDK missing | Install .NET 10 SDK before retrying |
|
||||
| `aspire init` succeeded but no `aspireify` skill installed | Agent skill directory not detected | Run `aspire agent init` to install `aspireify`, then continue wiring |
|
||||
| Skeleton dropped but resources not wired | Expected — `aspire init` does not wire | Hand off to `aspireify` |
|
||||
|
||||
## References
|
||||
|
||||
- [templates.md](references/templates.md) — `aspire new` templates and options
|
||||
- [init-workflow.md](references/init-workflow.md) — `aspire init` flow, `aspire.config.json`
|
||||
layout, and `aspireify` handoff
|
||||
Reference in New Issue
Block a user