// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
{
    children: [
        {
            name: "core",
            url: "fuchsia-pkg://fuchsia.com/core#meta/core.cm",
            environment: "#core-env",
            on_terminate: "reboot",
        },
    ],
    offer: [
        {
            from: "#config",
            to: "#core",
            config: [
                "fuchsia.fonts.FontManifest",
                "fuchsia.fonts.VerboseLogging",
                "fuchsia.http-client.StopOnIdleTimeoutMillis",
                "fuchsia.memory.CaptureOnPressureChange",
                "fuchsia.memory.CriticalCaptureDelay",
                "fuchsia.memory.ImminentOomCaptureDelay",
                "fuchsia.memory.NormalCaptureDelay",
                "fuchsia.memory.WarningCaptureDelay",
                "fuchsia.power.SuspendEnabled",
                "fuchsia.session.AutoLaunch",
                "fuchsia.session.SessionUrl",
                "fuchsia.wlan.RecoveryEnabled",
                "fuchsia.wlan.RecoveryProfile",
                "fuchsia.wlan.RoamingProfile",
            ],
            availability: "same_as_target",
        },
        {
            directory: "boot",
            from: "parent",
            to: "#core",
        },
        {
            protocol: [
                "fuchsia.boot.Arguments",
                "fuchsia.boot.FactoryItems",
                "fuchsia.boot.Items",
                "fuchsia.boot.ReadOnlyLog",
                "fuchsia.boot.SvcStashProvider",
                "fuchsia.boot.WriteOnlyLog",
                "fuchsia.kernel.CpuResource",
                "fuchsia.kernel.DebuglogResource",
                "fuchsia.kernel.DebugResource",
                "fuchsia.kernel.EnergyInfoResource",
                "fuchsia.kernel.FramebufferResource",
                "fuchsia.kernel.HypervisorResource",
                "fuchsia.kernel.InfoResource",
                "fuchsia.kernel.IommuResource",
                "fuchsia.kernel.IoportResource",
                "fuchsia.kernel.IrqResource",
                "fuchsia.kernel.MexecResource",
                "fuchsia.kernel.MmioResource",
                "fuchsia.kernel.MsiResource",
                "fuchsia.kernel.PowerResource",
                "fuchsia.kernel.ProfileResource",
                "fuchsia.kernel.RootJob",
                "fuchsia.kernel.RootJobForInspect",
                "fuchsia.kernel.SmcResource",
                "fuchsia.kernel.Stats",
                "fuchsia.kernel.VmexResource",
                "fuchsia.process.Launcher",
                "fuchsia.sys2.CrashIntrospect",
            ],
            from: "parent",
            to: "#core",
        },
        {
            event_stream: [
                "capability_requested",
                "debug_started",
                "destroyed",
                "discovered",
                "started",
                "stopped",
            ],
            from: "parent",
            to: "#core",
        },
        {
            protocol: [ "fuchsia.time.Maintenance" ],
            from: "parent",
            to: "#core",
        },
        {
            protocol: [ "fuchsia.memory.attribution.Provider" ],
            from: "#elf_runner",
            to: "#core",
        },

        // ...and the rest of these are capabilities provided by components for each other
        {
            directory: [
                "bin",
                "blob",
                "build-info",
                "config-data",
                "data",
                "dev-builtin",
                "dev-class",
                "dev-topological",
                "factory",
                "pkgfs",
                "root-ssl-certificates",
                "system",
                "tmp",
            ],
            from: "#bootstrap",
            to: "#core",
        },

        // Non-zircon services for bootstrap
        {
            protocol: [
                "fuchsia.device.NameProvider",
                "fuchsia.diagnostics.ArchiveAccessor",
                "fuchsia.diagnostics.FeedbackArchiveAccessor",
                "fuchsia.diagnostics.host.ArchiveAccessor",
                "fuchsia.diagnostics.LegacyMetricsArchiveAccessor",
                "fuchsia.diagnostics.LogSettings",
                "fuchsia.diagnostics.LoWPANArchiveAccessor",
                "fuchsia.driver.development.Manager",
                "fuchsia.driver.registrar.DriverRegistrar",
                "fuchsia.fshost.Admin",
                "fuchsia.fshost.BlockWatcher",
                "fuchsia.hardware.power.statecontrol.Admin",
                "fuchsia.hardware.power.statecontrol.RebootMethodsWatcherRegister",
                "fuchsia.inspect.InspectSink",
                "fuchsia.logger.Log",
                "fuchsia.logger.LogSink",
                "fuchsia.paver.Paver",
                "fuchsia.pkg.PackageCache",
                "fuchsia.pkg.PackageResolver-base",
                "fuchsia.pkg.RetainedPackages",
                "fuchsia.power.button.Monitor",
                "fuchsia.power.clientlevel.Connector",
                "fuchsia.power.profile.Watcher",
                "fuchsia.power.systemmode.ClientConfigurator",
                "fuchsia.power.systemmode.Requester",
                "fuchsia.scheduler.deprecated.ProfileProvider",
                "fuchsia.scheduler.RoleManager",
                "fuchsia.space.Manager",
                "fuchsia.sysinfo.SysInfo",
                "fuchsia.sysmem.Allocator",
                "fuchsia.sysmem2.Allocator",
                "fuchsia.thermal.ClientStateConnector",
                "fuchsia.update.verify.BlobfsVerifier",
            ],
            from: "#bootstrap",
            to: "#core",
        },
        {
            protocol: [
                "fuchsia.tpm.cr50.Cr50",
                "fuchsia.virtualconsole.SessionManager",
            ],
            from: "#bootstrap",
            to: "#core",
            availability: "optional",
        },
        {
            protocol: [
                "fuchsia.hardware.pty.Device",
                "fuchsia.kernel.Counter",
                "fuchsia.kernel.DebugBroker",
                "fuchsia.tracing.kernel.Controller",
                "fuchsia.tracing.kernel.Reader",
            ],
            from: "#bootstrap",
            to: "#core",
            availability: "same_as_target",
        },
        {
            protocol: "fuchsia.sys2.RealmExplorer",
            from: "framework",
            as: "fuchsia.sys2.RealmExplorer.root",
            to: "#core",
        },
        {
            protocol: "fuchsia.sys2.RealmQuery",
            from: "framework",
            as: "fuchsia.sys2.RealmQuery.root",
            to: "#core",
        },
        {
            protocol: "fuchsia.component.Introspector",
            from: "framework",
            as: "fuchsia.component.Introspector.root",
            to: "#core",
        },
        {
            protocol: "fuchsia.sys2.LifecycleController",
            from: "framework",
            as: "fuchsia.sys2.LifecycleController.root",
            to: "#core",
        },
        {
            protocol: "fuchsia.sys2.RouteValidator",
            from: "framework",
            as: "fuchsia.sys2.RouteValidator.root",
            to: "#core",
        },
        {
            service: "fuchsia.hardware.rtc.Service",
            from: "#bootstrap",
            to: "#core",
        },
        {
            protocol: [
                "fuchsia.power.broker.Topology",
                "fuchsia.power.suspend.Stats",
                "fuchsia.power.system.ActivityGovernor",
            ],
            from: "#bootstrap",
            to: "#core",
            availability: "optional",
        },
        {
            service: "fuchsia.hardware.cpu.ctrl.Service",
            from: "#bootstrap",
            to: "#core",
        },
    ],
    environments: [
        {
            name: "core-env",
            extends: "realm",
            runners: [
                {
                    runner: "elf",
                    from: "#elf_runner",
                },
            ],
            resolvers: [
                {
                    resolver: "base_resolver",
                    from: "#bootstrap",
                    scheme: "fuchsia-pkg",
                },
            ],
        },
    ],
}
