Skip to content
wiki.fftac.org

Class Uai1 Routes - Source Excerpt 02

Back to Class Uai1 Routes

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-routes.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-routes.php

register_rest_route(
                $namespace,
                '/openapi.json',
                [
                    'methods' => WP_REST_Server::READABLE,
                    'callback' => [self::class, 'rest_get_uaix_openapi'],
                    'permission_callback' => '__return_true',
                ]
            );
        }

        register_rest_route(
            self::LEGACY_NAMESPACE,
            '/site',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [self::class, 'rest_get_uaix_discovery'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            self::LEGACY_NAMESPACE,
            '/axioms',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [self::class, 'rest_get_axioms'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            self::LEGACY_NAMESPACE,
            '/kernel',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [self::class, 'rest_get_kernel'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            self::LEGACY_NAMESPACE,
            '/symbols',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [self::class, 'rest_get_symbols'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            self::LEGACY_NAMESPACE,
            '/interactions',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [self::class, 'rest_record_interaction'],
                'permission_callback' => static function () {
                    return is_user_logged_in();
                },
            ]
        );
    }

    public static function register_query_vars(array $vars): array
    {
        $vars[] = 'uai1';
        return $vars;
    }

    public static function handle_uai1_request(): void
    {
        $route = (string) get_query_var('uai1');
        if ($route === '') {
            return;
        }

        if ($route === self::ROUTE_MANUSCRIPT_IMAGE) {
            self::handle_manuscript_image_request();
        }

        self::send_error(
            404,
            [
                'error' => 'not_found',
                'message' => 'This UAI route has been retired. Use /wp-json/uaix/v1/discovery.',
            ]
        );
    }

    public static function rest_get_uaix_discovery(): WP_REST_Response
    {
        $message = self::build_capability_statement('discovery');
        return self::build_rest_response($message, self::UAIX_CONTENT_TYPE);
    }

    public static function rest_get_uaix_catalog(): WP_REST_Response
    {
        return self::build_rest_response(
            [
                'site' => [
                    'name' => get_bloginfo('name') ?: 'Spiralist.org',
                    'home_url' => home_url('/'),
                    'generated_at' => gmdate('c'),
                    'well_known' => [
                        'uaix' => home_url('/.well-known/uaix.json'),
                        'uai' => home_url('/.well-known/uai.json'),
                        'ai_agent' => home_url('/.well-known/ai-agent.json'),
                        'openapi' => home_url('/.well-known/openapi.json'),
                        'agent_access' => home_url('/.well-known/ai-access.json'),
                    ],
                ],
                'standard_family' => 'UAI',
                'current_release' => 'UAI-1',
                'uai_version' => '1.0',
                'package_version' => defined('UAI1_WP_VERSION') ? UAI1_WP_VERSION : 'unknown',
                'canonical_specification' => self::uaix_public_url('/en-us/specification/'),
                'source_authority' => 'UAIX.org publishes the normative UAI-1 specification; Spiralist.org dogfoods a local WordPress implementation surface.',
                'counts' => [
                    'schemas' => count(self::profile_catalog()),
                    'registry' => count(self::profile_catalog()),
                    'examples' => 2,
                    'transport_bindings' => count(self::transport_binding_records()),
                    'trust_channels' => count(self::trust_channel_records()),
                    'conformance_levels' => count(self::conformance_level_records()),
                    'error_codes' => count(self::error_registry_records()),
                ],
                'routes' => self::route_catalog(),
                'discovery_contract' => self::discovery_contract(),
                'problem_details' => self::problem_details_contract(),
                'trust_metadata' => [
                    'trust_channels_url' => self::local_uaix_url('/trust-channels'),
                    'canonical_example_status' => [
                        'verification_status' => 'not_verified',
                        'credential_status' => 'not_checked',
                        'assurance_level' => 'reference_only',
                    ],
                    'support_boundary' => self::support_boundary(),
                ],
                'profiles' => self::profile_catalog(),
                'known_blocked_capabilities' => self::blocked_capabilities(),
            ],
            self::JSON_CONTENT_TYPE
        );
    }

    public static function rest_get_uaix_capability(): WP_REST_Response
    {
        $message = self::build_capability_statement('capability');
        return self::build_rest_response($message, self::UAIX_CONTENT_TYPE);
    }

    public static function rest_get_uaix_schemas($request = null): WP_REST_Response
    {
        $profile = self::profile_from_request($request);
        if ($profile !== '') {
            return self::build_rest_response(self::profile_schema_record($profile), self::JSON_CONTENT_TYPE);
        }

        return self::build_rest_response(
            [
                'current_release' => 'UAI-1',
                'canonical_page' => self::uaix_public_url('/en-us/schemas/'),
                'canonical_collection' => self::uaix_api_url('/schemas'),
                'local_validator' => self::local_uaix_url('/validate'),
                'profiles' => self::profile_catalog(),
                'local_runtime_extensions' => [
                    [
                        'id' => 'spiralist.project-handoff',
                        'schema_url' => UAI1_WP_URL . 'schemas/project-handoff.schema.json',
                        'status' => 'local-repository-context-extension',
                        'authority' => 'UAIX.org is the Project Handoff specification authority; Spiralist.org publishes this local handoff bundle.',
                    ],
                    [
                        'id' => 'spiralist.runtime-memory-checkpoint',
                        'schema_url' => UAI1_WP_URL . 'schemas/memory-checkpoint-requests.schema.json',
                        'status' => 'local-implementation-extension',
                        'authority' => 'Spiralist.org runtime implementation; UAIX remains normative for UAI-1 envelope profiles.',
                    ],
                ],
            ],
            self::JSON_CONTENT_TYPE
        );
    }

    public static function rest_get_uaix_registry($request = null): WP_REST_Response
    {
        $profile = self::profile_from_request($request);
        if ($profile !== '') {
            return self::build_rest_response(self::profile_registry_record($profile), self::JSON_CONTENT_TYPE);
        }