# Agent Ecosystem and Plugin Marketplace Patterns **Last updated:** 2026-02 **Status:** GA **Category:** Agent Orchestration & Automation --- ## 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 ```python # 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 ```json { "$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 ```yaml # 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 ```python # 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 ```python # 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) ```python # 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 Cosmo - **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.