Class Uai1 Routes - Source Excerpt 09
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
'trace_id' => 'trace-' . substr(hash('sha256', $message_id), 0, 12),
'issued_at' => gmdate('c'),
'log_ref' => 'urn:spiralist:uaix:' . $message_id,
'agent_id' => 'spiralist.uai1.wordpress',
'model_id' => 'wordpress-plugin-' . (defined('UAI1_WP_VERSION') ? UAI1_WP_VERSION : 'unknown'),
'confidence' => 1.0,
'lineage' => [
[
'stage' => 'uaix-route-build',
'actor_id' => 'spiralist.uai1.wordpress',
'model_id' => 'wordpress-plugin-' . (defined('UAI1_WP_VERSION') ? UAI1_WP_VERSION : 'unknown'),
'note' => 'Generated by the Spiralist.org WordPress UAIX integration.',
],
],
],
'integrity' => [
'version' => 2,
'algorithm' => 'sha256',
'canonicalization' => 'jcs',
'checksum' => '',
],
'extensions' => $extensions,
];
$hash_source = $envelope;
unset($hash_source['integrity']);
$encoded = wp_json_encode($hash_source, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$envelope['integrity']['checksum'] = 'sha256:' . hash('sha256', is_string($encoded) ? $encoded : $message_id);
return $envelope;
}
private static function profile_catalog(): array
{
return [
[
'profile' => 'uai.intent.request.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.intent.request.v1'),
'example_url' => self::uaix_api_url('/examples/uai.intent.request.v1'),
],
[
'profile' => 'uai.intent.response.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.intent.response.v1'),
'example_url' => self::uaix_api_url('/examples/uai.intent.response.v1'),
],
[
'profile' => 'uai.capability.statement.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.capability.statement.v1'),
'example_url' => self::uaix_api_url('/examples/uai.capability.statement.v1'),
],
[
'profile' => 'uai.error.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.error.v1'),
'example_url' => self::uaix_api_url('/examples/uai.error.v1'),
],
[
'profile' => 'uai.conformance.result.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.conformance.result.v1'),
'example_url' => self::uaix_api_url('/examples/uai.conformance.result.v1'),
],
[
'profile' => 'uai.task.status.v1',
'schema_url' => self::uaix_api_url('/schemas/uai.task.status.v1'),
'example_url' => self::uaix_api_url('/examples/uai.task.status.v1'),
],
];
}
private static function uaix_artifact_links(string $profile): array
{
$profile_path = $profile !== '' && $profile !== 'unknown' ? '/' . rawurlencode($profile) : '';
return [
'catalog_url' => self::uaix_api_url('/catalog'),
'schema_url' => self::uaix_api_url('/schemas' . $profile_path),
'registry_url' => self::uaix_api_url('/registry' . $profile_path),
'example_url' => self::uaix_api_url('/examples' . $profile_path),
'field_registry_url' => self::uaix_api_url('/field-registry'),
'transport_bindings_url' => self::uaix_api_url('/transport-bindings'),
'trust_channels_url' => self::uaix_api_url('/trust-channels'),
'conformance_levels_url' => self::uaix_api_url('/conformance-levels'),
'error_registry_url' => self::uaix_api_url('/error-registry'),
'validate_url' => self::local_uaix_url('/validate'),
];
}
private static function service_party(string $route): array
{
return [
'type' => 'service',
'id' => 'spiralist.uaix.gateway',
'label' => 'Spiralist.org UAIX Gateway',
'uri' => self::local_uaix_url($route),
'role' => 'public-record-gateway',
'implementation' => 'uai-1-wordpress-' . (defined('UAI1_WP_VERSION') ? UAI1_WP_VERSION : 'unknown'),
];
}
private static function target_from_payload($payload): array
{
if (is_array($payload) && isset($payload['source']) && is_array($payload['source'])) {
return self::clean_party((array) $payload['source']);
}
return [
'type' => 'client',
'id' => 'uaix.client',
'label' => 'UAIX client',
'uri' => home_url('/'),
'role' => 'requesting-client',
];
}
private static function response_conversation($payload, string $turn = 'response'): array
{
$conversation = is_array($payload) && isset($payload['conversation']) && is_array($payload['conversation'])
? (array) $payload['conversation']
: [];
$conversation_id = isset($conversation['conversation_id']) && is_string($conversation['conversation_id'])
? $conversation['conversation_id']
: 'conv-spiralist-uaix-response';
$sequence = isset($conversation['sequence']) && is_int($conversation['sequence'])
? max(1, (int) $conversation['sequence'] + 1)
: 2;
$response = [
'conversation_id' => $conversation_id,
'turn_id' => 'turn-' . $turn,
'sequence' => $sequence,
];
if (is_array($payload) && isset($payload['message_id']) && is_string($payload['message_id']) && $payload['message_id'] !== '') {
$response['parent_message_id'] = $payload['message_id'];
}
return $response;
}
private static function clean_party(array $party): array
{
$allowed = ['type', 'id', 'label', 'uri', 'did', 'role', 'implementation'];
$clean = [];
foreach ($allowed as $field) {
if (isset($party[$field]) && is_scalar($party[$field]) && (string) $party[$field] !== '') {
$clean[$field] = (string) $party[$field];
}
}
if (empty($clean['type'])) {
$clean['type'] = 'service';
}
if (empty($clean['id'])) {
$clean['id'] = 'unknown';
}
return $clean;
}
private static function request_payload(WP_REST_Request $request)
{
$payload = $request->get_json_params();
if (is_array($payload)) {
return $payload;
}
$raw = $request->get_body();
if (is_string($raw) && trim($raw) !== '') {
$decoded = json_decode($raw, true);
if (json_last_error() === JSON_ERROR_NONE) {
return $decoded;
}
}
return [];
}
private static function message_id(string $purpose): string
{
return 'msg-spiralist-' . sanitize_key($purpose) . '-' . gmdate('YmdHis') . '-' . substr(wp_generate_uuid4(), 0, 8);
}
private static function local_uaix_url(string $path): string
{
return rest_url(self::UAIX_NAMESPACE . '/' . ltrim($path, '/'));
}
private static function uaix_api_url(string $path): string
{
return self::uaix_public_url('/wp-json/uaix/v1/' . ltrim($path, '/'));
}
private static function uaix_public_url(string $path): string
{
return rtrim(self::UAIX_PUBLIC_BASE, '/') . '/' . ltrim($path, '/');
}
private static function get_symbol_axioms(): array
{
if (function_exists('spiralist_get_axioms')) {
$axioms = spiralist_get_axioms();