ms-ai-architect/skills/ms-ai-engineering/references/agent-orchestration/agent-ecosystem-and-plugin-marketplace.md
Kjell Tore Guttormsen 3a73eeafdc refactor(ms-ai-architect): R13 del 1 — nøytraliser Cosmo-personaen i ref-korpusets headinger, etter å ha rettet en gate som var målt usann to ganger
Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:

1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
   produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
   substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
   `Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
   tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
   kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
   formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
   132 bokføres til R13b/R14.

Tre korreksjoner av premisser som sto i ordren og STATE:
  «ca 320 produkt»   -> 451 (case-sensitivt nett manglet 327 lowercase
                        TOC-ankre + 99 identifikatorer; sann nevner 1 638)
  «169 headinger»    -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
                        internt inkonsistent med sin egen topp-variant (204)
  «417 matcher ingen
   populasjon»       -> 417 er cosmo-headinger utenfor kodefences; briefens
                        nevner var reell hele tiden

Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.

TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.

Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.

Verifisering (alle 7 kriterier fra ordren):
  G1 persona på heading-linjer   401 -> 0
  G2 døde fragmentlenker         1 -> 1 (pre-eksisterende, unntatt)
  G3 produkt-forekomster         451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
  de 3 kun-produkt-filene        byte-identiske
  nettet validert begge veier    injisert persona feller G1; genitiv feller G1;
                                 produkt-heading og de 3 filene passerer
  hele diffen                    802 heading-linjer + 654 TOC-linjer, ANNET = 0
  linjeantall                    728 lagt til = 728 slettet
  suite                          1120/1120 (1097 + 23 nye)
  validate-plugin                250 PASS / 0 FAIL
  stikkprøve                     10 filer, alle 5 skills, inkl. de 3 mest
                                 produkt-tunge (26/20/19) — kun heading+TOC

Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 22:12:28 +02:00

16 KiB

Agent Ecosystem and Plugin Marketplace Patterns

Last updated: 2026-02 Status: GA Category: Agent Orchestration & Automation Type: reference


Innhold

Introduksjon

AI-agentøkosystemer representerer en paradigme-endring fra isolerte AI-løsninger til sammenkoblede plattformer der agenter, plugins og tredjepartsintegrasjoner kan oppdages, distribueres og kombineres dynamisk. Microsoft 365 Copilot-økosystemet er det mest modne eksemplet, med en unified app-modell der agenter er apps som distribueres gjennom Microsoft 365 admin center, sideloades for testing, eller publiseres i Microsoft Commercial Marketplace.

Microsoft har etablert et komplett økosystem for agentdistribusjon: Copilot Studio for agent-bygging, Microsoft 365 Agents Toolkit for pro-code-utvikling, Partner Center for ISV-publisering, og M365 admin center for enterprise-governance. Agenter pakkes som standard Microsoft 365-apps med manifest-filer og ikoner, og distribueres gjennom de samme kanalene som Teams-apps og Outlook-tillegg. Dette gir organisasjoner en sentralisert plattform for å administrere, godkjenne og distribuere AI-kapabiliteter.

For organisasjoner som bygger interne agentøkosystemer gir dette mønsteret en modell for hvordan man designer plugin-discovery, kapabilitetser, versjonshåndtering og governance. Enten du bygger for Microsoft Commercial Marketplace eller for intern distribusjon, er prinsippene de samme: standardiserte grensesnitt, sentralisert governance og brukersentrert oppdagelse.

Kjernekomponenter

Komponent Formål Teknologi
Plugin Discovery Oppdagelse av tilgjengelige agenter/plugins M365 admin center, Copilot pane
Capability Advertisement Deklarering av agentkapabiliteter Agent manifest, OpenAPI spec
Dependency Management Håndtere avhengigheter mellom agenter App package, connectors
Version Compatibility Versjonering og kompatibilitet Manifest versioning, API versioning
Distribution Publisering og distribusjon Partner Center, organizational catalog
Governance Styring av agentøkosystemet M365 admin center, Copilot Studio

Plugin Discovery Mechanisms

Microsoft 365 agentoppdagelse

Oppdagelseveier for brukere:

1. Copilot Chat panel (høyre side)
   → Viser installerte agenter direkte i Copilot UI
   → Brukere kan bla og velge agenter

2. @-mention i Copilot
   → Brukere skriver @agentname for direkte invokasjon
   → Autocomplete viser tilgjengelige agenter

3. Microsoft 365 App Store
   → Søk og installér agenter som M365-apps
   → Kombinerer Teams-apps, Outlook-tillegg og Copilot-agenter

4. IT-administrert distribusjon
   → Admin pre-installerer agenter for brukergrupper
   → Brukere ser agenter automatisk

Programmatisk plugin-discovery

# Internt agentøkosystem: Plugin registry
class AgentPluginRegistry:
    """Sentralisert registrer for agentplugins"""

    def __init__(self, cosmos_client):
        self.container = cosmos_client.get_database_client("ecosystem") \
            .get_container_client("plugins")

    async def register(self, plugin: dict):
        """Registrer ny agent/plugin i økosystemet"""
        await self.container.upsert_item({
            "id": plugin["id"],
            "name": plugin["name"],
            "version": plugin["version"],
            "description": plugin["description"],
            "capabilities": plugin["capabilities"],
            "api_spec_url": plugin["api_spec_url"],
            "auth_requirements": plugin["auth_requirements"],
            "supported_intents": plugin["supported_intents"],
            "health_check_url": plugin["health_check_url"],
            "owner": plugin["owner"],
            "status": "active",
            "registered_at": datetime.utcnow().isoformat(),
            "compatibility": {
                "min_platform_version": "2.0",
                "supported_channels": ["teams", "copilot", "web"]
            }
        })

    async def discover(
        self,
        intent: str = None,
        capability: str = None,
        channel: str = None
    ) -> list:
        """Oppdage relevante plugins basert på kontekst"""
        query = "SELECT * FROM c WHERE c.status = 'active'"
        params = []

        if intent:
            query += " AND ARRAY_CONTAINS(c.supported_intents, @intent)"
            params.append({"name": "@intent", "value": intent})
        if capability:
            query += " AND ARRAY_CONTAINS(c.capabilities, @cap)"
            params.append({"name": "@cap", "value": capability})
        if channel:
            query += (" AND ARRAY_CONTAINS("
                "c.compatibility.supported_channels, @channel)")
            params.append({"name": "@channel", "value": channel})

        return [item async for item in
            self.container.query_items(query, parameters=params)]

Capability Advertisement

Agent manifest-standard

{
    "$schema": "https://schemas.microsoft.com/agent/v2.1/manifest.json",
    "manifestVersion": "2.1",
    "id": "no.ddt.agent.byggesak",
    "version": "1.3.0",
    "name": {
        "short": "Byggesak-agent",
        "full": "Byggesaksbehandling AI-assistent"
    },
    "description": {
        "short": "Hjelper med byggesaker og regelverk",
        "full": "AI-assistent for byggesaksbehandling. Gir veiledning om plan- og bygningsloven, kommunale reguleringsplaner, og saksbehandlingsprosedyrer."
    },
    "capabilities": {
        "knowledge_sources": [
            "plan-og-bygningsloven",
            "kommunale-reguleringsplaner",
            "byggesak-veileder"
        ],
        "actions": [
            {
                "id": "searchRegulations",
                "description": "Søk i regelverk for byggesaker",
                "api": "openapi",
                "spec_url": "/api/regulations/openapi.json"
            },
            {
                "id": "checkBuildingStatus",
                "description": "Sjekk status på byggesak",
                "api": "openapi",
                "spec_url": "/api/cases/openapi.json"
            }
        ],
        "supported_intents": [
            "byggetillatelse",
            "reguleringsplan",
            "nabovarsling",
            "dispensasjon"
        ],
        "languages": ["nb-NO", "nn-NO", "en-US"]
    },
    "authorization": {
        "type": "entra_id",
        "required_roles": ["BuildingCase.Read"],
        "data_classification": "intern"
    },
    "deployment": {
        "channels": ["teams", "copilot", "web"],
        "min_license": "M365-E5",
        "region_requirements": ["norway-east"]
    }
}

OpenAPI-basert capability advertisement

# OpenAPI spec for agent-kapabiliteter
openapi: 3.0.0
info:
  title: Byggesak Agent API
  version: 1.3.0
  description: |
    API for byggesaksbehandling AI-assistent.
    Bruk dette APIet når brukeren spør om byggesaker,
    regelverk eller saksbehandlingsprosedyrer.
  x-agent-config:
    model_recommendation: gpt-4o
    max_response_tokens: 800
    requires_human_review: true

paths:
  /api/regulations/search:
    get:
      operationId: searchRegulations
      summary: Søk i byggesaksregelverk
      description: |
        Søk etter relevante paragrafer og bestemmelser
        i plan- og bygningsloven og forskrifter.
      parameters:
        - name: query
          in: query
          required: true
          schema:
            type: string
          description: Fritekst-søk i regelverket
        - name: category
          in: query
          schema:
            type: string
            enum: [lov, forskrift, veileder, rundskriv]

Dependency Management

Agent-avhengigheter

# Håndtere avhengigheter mellom agenter og plugins
class DependencyResolver:
    def __init__(self, registry: AgentPluginRegistry):
        self.registry = registry

    async def resolve_dependencies(
        self, agent_id: str
    ) -> list:
        """Resolv og valider alle avhengigheter for en agent"""
        agent = await self.registry.get(agent_id)
        dependencies = agent.get("dependencies", [])
        resolved = []

        for dep in dependencies:
            plugin = await self.registry.discover(
                capability=dep["capability"]
            )
            if not plugin:
                raise DependencyError(
                    f"Manglende avhengighet: {dep['capability']}"
                )

            # Sjekk versjonskompatibilitet
            available = plugin[0]
            if not self._is_compatible(
                dep.get("min_version", "0.0.0"),
                available["version"]
            ):
                raise VersionError(
                    f"Plugin {available['name']} versjon "
                    f"{available['version']} er for gammel. "
                    f"Krever >= {dep['min_version']}"
                )

            resolved.append(available)

        return resolved

    def _is_compatible(
        self, required: str, available: str
    ) -> bool:
        from packaging import version
        return version.parse(available) >= version.parse(required)

Version Compatibility

Semantic versioning for agenter

# Versjoneringsstrategi for agentøkosystem
class AgentVersionManager:
    """Håndterer versjonering og kompatibilitet"""

    def validate_upgrade(
        self, current: str, target: str
    ) -> dict:
        """Validér om oppgradering er trygg"""
        from packaging.version import Version
        curr = Version(current)
        targ = Version(target)

        return {
            "is_major": targ.major > curr.major,
            "is_minor": targ.minor > curr.minor and targ.major == curr.major,
            "is_patch": targ.micro > curr.micro and targ.minor == curr.minor,
            "breaking_changes": targ.major > curr.major,
            "requires_testing": targ.major > curr.major or targ.minor > curr.minor,
            "auto_deploy_safe": targ.micro > curr.micro
                and targ.minor == curr.minor
                and targ.major == curr.major
        }

API-versjonering for plugin-grensesnitt

Versjonsendring Eksempel Handling
Patch (1.0.x) Bugfix i responser Automatisk utrulling
Minor (1.x.0) Ny capability lagt til Test + admin-godkjenning
Major (x.0.0) Breaking API-endring Full testing + migreringsveiledning

Distribution Patterns

Microsoft Commercial Marketplace

ISV publiseringsprosess:

1. Utvikle    → Bygg agent med Agents Toolkit / Copilot Studio
2. Teste      → Sideload og test i M365 tenant
3. Validere   → Oppfyll store submission requirements
4. Publisere  → Submit via Partner Center
5. Distribuere → Tilgjengelig i M365 App Store
6. Administrere → Oppdateringer via Partner Center

Krav for marketplace:
- Microsoft Partner Network medlemskap
- App validation retningslinjer
- Copilot-spesifikke UX-krav
- Sikkerhet og personvern-dokumentasjon

Intern distribusjon (organizational catalog)

# Automatisert intern distribusjon
class InternalAgentDistributor:
    """Distribuér agenter til organisasjonens M365 tenant"""

    async def publish_to_org_catalog(
        self, agent_package: bytes, metadata: dict
    ):
        """Publiser agent til organizational catalog"""
        # 1. Valider pakken
        validation = await self.validate_package(agent_package)
        if not validation.is_valid:
            raise ValidationError(validation.errors)

        # 2. Sikkerhetsskanning
        security = await self.security_scan(agent_package)
        if security.has_issues:
            raise SecurityError(security.findings)

        # 3. Last opp til organizational catalog
        await self.upload_to_catalog(
            package=agent_package,
            metadata=metadata,
            approval_required=True  # Admin-godkjenning påkrevd
        )

        # 4. Varsle admin om godkjenning
        await self.notify_admin(
            f"Ny agent '{metadata['name']}' venter på godkjenning"
        )

Governance for Agent Ecosystems

Admin-kontroller

M365 Admin Center agent governance:

1. Agent synlighet
   → Kontroller hvilke agenter som er tilgjengelige
   → Per-bruker og per-gruppe styring

2. Data access kontroller
   → Gjennomgå datapermissions per agent
   → Godkjenn/avslå datatilgang

3. Usage analytics
   → Spor bruk per agent, per bruker, per avdeling
   → Identifiser populære og ubrukte agenter

4. Compliance monitoring
   → Verifiser at agenter oppfyller organisasjonens policyer
   → Automatisert compliance-sjekk

Internt agent-kvalitetsprogram

Fase Krav Verifikasjon
Utvikling Følg org-standarder for agent-utvikling Code review
Testing Bestå evalueringssett med > 80% kvalitet Automatisert evaluering
Sikkerhet Gjennomfør sikkerhetsgjennomgang Red teaming rapport
Compliance Oppfyll regulatoriske krav Compliance checklist
Godkjenning Admin-godkjenning for distribusjon Admin approval workflow
Produksjon Continuous evaluation og monitoring Dashboards + alerting

Norsk offentlig sektor

Aspekt Krav Implementering
Anskaffelse Anskaffelsesloven Rammeavtale for agenter/plugins
Kvalitetssikring Digdir kvalitetskrav Testing mot evalueringssett
Deling Felles komponenter Fellesløsninger via Digdir
Sikkerhetsgodkjenning NSM Sikkerhetsgjennomgang per agent
Universell utforming WCAG 2.1 Tilgjengelighetstest av agentgrensesnitt

Felles agentøkosystem for offentlig sektor

Visjon: Deling av agenter mellom offentlige virksomheter

1. Sentral agent-katalog (Digdir / DFD)
   → Offentlige virksomheter publiserer gjenbrukbare agenter
   → Felles kvalitetskrav og sikkerhetsstandarder

2. Felles kunnskapskilder
   → Lovdata-integrasjon for alle agenter
   → Felles ontologier og datasett

3. Felles infrastruktur
   → Azure Norway East / West
   → Delte APIM-gateways
   → Felles evaluerings-framework

4. Governance
   → Sentralisert godkjenningsprosess
   → Felles retningslinjer for AI-bruk
   → Delt sikkerhets- og personvernevalueringer

Beslutningsrammeverk

Scenario Anbefaling Begrunnelse
Intern agent for én avdeling Sideload + organizational catalog Rask distribusjon, admin-kontroll
Agent for hele organisasjonen Organizational catalog + admin-godkjenning Sentral governance
ISV som bygger for kunder Microsoft Commercial Marketplace Bred distribusjon, Partner Center
Offentlig sektor fellesløsning Organizational catalog + Digdir-koordinering Gjenbruk på tvers av virksomheter
Multi-agent økosystem internt Custom plugin registry + Copilot integration Skalerbar oppdagelse og governance

For arkitekten

  • Agenter er apps i Microsoft 365 -- bruk den unified app-modellen for distribusjon, governance og oppdagelse. Ikke bygg parallelle distribusjonskanaler.
  • Agent manifest er kontrakten mellom agent og plattform -- definer kapabiliteter, autorisasjonskrav og støttede kanaler eksplisitt. Dette muliggjør automatisert oppdagelse og governance.
  • Organizational catalog er startpunktet for intern distribusjon -- publiser via M365 admin center med admin-godkjenning. Escaler til Commercial Marketplace kun for ISV-scenarier.
  • Versjonering er kritisk for agentøkosystemer -- bruk semantic versioning, test minor/major-oppgraderinger, og ha rollback-mulighet for alle agent-oppdateringer.
  • For norsk offentlig sektor: Design for gjenbruk fra dag 1 -- agenter bygget for én virksomhet bør kunne deles via en felles katalog. Koordiner med Digdir for standarder og felleskomponenter.