Plugin-utvikling for Asteon Builder

Bygg og publiser Studio Skills — gjenbrukbare plugin-pakker som utvider Asteon World Builder med nye AI-verktøy, kameraoppsett, NPC-rutiner, terrengpensler, økonomi-systemer og mer. Plugins distribueres via Asteon Marketplace og installeres med ett kall.

Snarveier: Lag publish-nøkkel · AI Gateway API · Bla i marketplace · Skaper-dashbord

Tre trinn

  1. Pakk en bunt — ett SKILL.md i roten + filene som verktøyet, scripts og assets ligger i. Maks 200 filer per opplasting.
  2. Publiser med API-et — POST til /api/skills med en gateway-nøkkel. Bruk multipart for binærfiler eller JSON for ren tekst.
  3. Brukere installerer — builderen henter filtreet via /api/skills/{id}/install og registrerer verktøyene mot AI-en. Betalte plugins trekkes fra lommeboken.

Bunt-struktur

Plugins er rene fil-trær. SKILL.md er den eneste obligatoriske filen.

my-plugin/
├── SKILL.md            # required at bundle root
├── tools/
│   ├── orbit.json      # tool manifests (registered with the AI)
│   └── dolly.json
├── scripts/
│   └── init.ts         # runs on builder load
├── assets/
│   ├── preview-1.png
│   └── ...
└── README.md           # optional

SKILL.md eksempel

---
name: cinematic-camera-pack
description: Adds 6 cinematic camera presets (orbit, dolly, top-down, FPV, follow, cutscene) to the World Builder. Plug-and-play — no code required.
---

# Cinematic Camera Pack

Drop-in camera presets for the Asteon World Builder.

## Capabilities
- Registers 6 camera tools the AI can call: `camera.orbit`, `camera.dolly`, …
- Adds keybinds: `C` cycles presets, `Shift+C` resets.
- Ships an `assets/` folder with 4 preview thumbnails.

## Files
- `SKILL.md` (this file — required)
- `tools/orbit.json`, `tools/dolly.json`, … (tool manifests)
- `scripts/init.ts` (registered on builder load)
- `assets/preview-*.png`

Verktøy AI-en kan kalle

Plugins utvider builderen ved å registrere tools — JSON-skjemaer som AI-modellen kan velge å kalle. Hvert verktøy har et navn, en beskrivelse, og et JSON-Schema for parametere. Asteon Builder eksponerer 100+ innebygde verktøy gruppert i disse kategoriene:

Kategori Eksempler på innebygde verktøy
Scene place_object, transform, group, snapshot, restore
NPC & dialog spawn_npc, set_routine, write_dialogue_tree, voice_line
Audio & økonomi place_sound_emitter, set_music_zone, define_currency, price_item
Story & terreng sculpt_terrain, paint_biome, place_landmark, write_quest_step
Generering & filer generate_image, generate_3d_model, upload_asset, save_to_library
Fysikk & kamera set_gravity, add_collider, configure_camera, animate_camera
Validering & registry validate_scene, register_tool, list_tools, schema_check

Eksempel på et verktøy-manifest

{
  "name": "camera.orbit",
  "description": "Orbits the active camera around a point at constant radius.",
  "parameters": {
    "type": "object",
    "required": ["target"],
    "properties": {
      "target":  { "type": "string", "description": "Object id or 'origin'" },
      "radius":  { "type": "number", "default": 8 },
      "speedDegPerSec": { "type": "number", "default": 30 },
      "axis":    { "type": "string", "enum": ["y", "x", "z"], "default": "y" }
    }
  }
}

Endepunkter

Metode Sti Auth Beskrivelse
GET /api/skills ingen Søk i den offentlige plugin-katalogen (filter, paginering, sortering).
GET /api/skills/{id} ingen Hent metadata for én plugin.
GET /api/skills/by-slug/{slug} ingen Slå opp plugin på unik slug.
GET /api/skills/{id}/public-versions ingen Liste publiserte versjoner med endringslogg.
POST /api/skills agw_ / sesjon Publiser ny versjon (multipart eller JSON).
POST /api/skills/{id}/install agw_ / sesjon Installer i kontoen din. Trekkes fra lommebok hvis betalt.
GET /api/skills/mine agw_ / sesjon Plugins du har publisert (med inntekt og installasjonstall).
GET /api/skills/mine/timeseries agw_ / sesjon Daglig tidsserie for installasjoner og inntekt.
GET /api/skills/{id}/versions agw_ / sesjon Alle versjoner (også draft) for en plugin du eier.
PATCH /api/skills/{id}/versions/{version} agw_ / sesjon Oppdater endringsnotater.
GET /api/skills/{id}/versions/{version}/files agw_ / sesjon Liste filer i en versjon (sti + størrelse). Kun for eier.
POST /api/skills/{id}/versions/{version}/republish agw_ / sesjon Re-publiser en arkivert versjon.
PATCH /api/skills/{id} agw_ / sesjon Endre navn, beskrivelse, kategori, pris eller status.

Publiser (curl)

# Multipart upload (recommended for binary assets)
curl -X POST https://asteon.ai/api/skills \
  -H "Authorization: Bearer agw_..." \
  -F "name=Cinematic Camera Pack" \
  -F "slug=cinematic-camera-pack" \
  -F "category=camera" \
  -F "version=1.0.0" \
  -F "price=0" \
  -F "description=6 cinematic camera presets" \
  -F "files=@SKILL.md" \
  -F "files=@tools/orbit.json" \
  -F "files=@scripts/init.ts" \
  -F "files=@assets/preview-1.png"

Publiser (JSON)

// JSON variant — file contents inline as strings
const r = await fetch("https://asteon.ai/api/skills", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.ASTEON_GATEWAY_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Cinematic Camera Pack",
    slug: "cinematic-camera-pack",
    category: "camera",
    version: "1.0.1",
    price: 0,
    description: "6 cinematic camera presets",
    notes: "Fix orbit easing on slow framerates.",
    files: [
      { path: "SKILL.md", content: skillMdSource },
      { path: "tools/orbit.json", content: JSON.stringify(orbitTool) },
      { path: "scripts/init.ts", content: initScriptSource },
    ],
  }),
});
const { id, version } = await r.json();

Installer en plugin

// Install a published plugin into the caller's account.
// Skills with price > 0 are charged against the wallet on first install.
await fetch(`https://asteon.ai/api/skills/${id}/install`, {
  method: "POST",
  headers: { "Authorization": `Bearer ${token}` },
});

Versjonering & regler

Trenger du eksempler? Hver innebygd plugin du installerer kan lastes ned via /api/skills/{id}/versions/{version}/files — bruk dem som mal. Asteons verktøy-skjema er kompatibelt med OpenAI tool-calling.