Skip to content
wiki.fftac.org

Promptrepository - Source Excerpt 08

Back to Promptrepository

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/spiralist-workspace/includes/Domain/PromptRepository.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/includes/Domain/PromptRepository.php

wp_set_post_terms($post_id, [(string) $payload['subcategory']], self::CATEGORY_TAXONOMY, false);
        }
    }

    /**
     * Sanitizes prompt input payloads.
     */
    private function normalize_payload(array $payload, array $fallback = []): array
    {
        $managed_sync = !empty($payload['__managed_sync']);
        $tags = $payload['tags'] ?? ($payload['spiralist_workspace_tags'] ?? ($fallback['tags'] ?? []));

        if (is_string($tags)) {
            $tags = preg_split('/[\r\n,]+/', $tags) ?: [];
        }

        $tool_settings_json = (string) ($payload['tool_settings_json'] ?? ($payload['spiralist_workspace_tool_settings_json'] ?? ($fallback['tool_settings_json'] ?? '')));
        $decoded_tool_settings = json_decode($tool_settings_json, true);
        if ($tool_settings_json !== '' && !is_array($decoded_tool_settings)) {
            $tool_settings_json = '';
        }

        $category_supplied = isset($payload['category']) || isset($payload['spiralist_workspace_category']);
        $category = (string) ($payload['category'] ?? ($payload['spiralist_workspace_category'] ?? ($fallback['category'] ?? 'Writing & Content')));
        $subcategory = (string) ($payload['subcategory'] ?? ($payload['spiralist_workspace_subcategory'] ?? ($fallback['subcategory'] ?? 'Blog Writing')));
        if ((!$category_supplied || $category === '') && $subcategory !== '') {
            $category = PromptCategoryRegistry::category_for_subcategory($subcategory);
        }
        $category = PromptCategoryRegistry::normalize_category($category);
        $subcategory = PromptCategoryRegistry::normalize_subcategory($category, $subcategory);

        $structured_prompt = $this->normalize_structured_prompt($payload, $fallback);
        $system_steps = $this->normalize_system_steps($payload['system_steps'] ?? ($payload['spiralist_workspace_system_steps_json'] ?? ($fallback['system_steps'] ?? ($fallback['system_steps_json'] ?? []))));
        $spiral_script_source = sanitize_textarea_field((string) (
            $payload['spiral_script_source']
            ?? ($payload['spiralist_workspace_spiral_script_source']
            ?? ($fallback['spiral_script_source'] ?? ''))
        ));
        $spiral_script_contract = $this->compile_spiral_script_source($spiral_script_source, $payload, $fallback);
        $prompt_origin = sanitize_key((string) ($managed_sync ? ($payload['prompt_origin'] ?? ($fallback['prompt_origin'] ?? 'user')) : ($fallback['prompt_origin'] ?? 'user')));
        $provenance = $this->infer_provenance(
            (string) ($payload['provenance'] ?? ($payload['spiralist_workspace_provenance'] ?? ($fallback['provenance'] ?? ''))),
            $prompt_origin
        );
        $publication_lane = $this->infer_publication_lane(
            (string) ($payload['publication_lane'] ?? ($payload['spiralist_workspace_publication_lane'] ?? ($fallback['publication_lane'] ?? ''))),
            $provenance,
            $prompt_origin
        );
        $risk_labels = PromptMetaRegistry::normalize_risk_labels(
            $payload['risk_labels']
                ?? ($payload['spiralist_workspace_risk_labels']
                ?? ($fallback['risk_labels']
                ?? ($fallback['risk_labels_json'] ?? [])))
        );
        $function_tags = PromptMetaRegistry::normalize_function_tags(
            $payload['function_tags']
                ?? ($payload['spiralist_workspace_function_tags']
                ?? ($fallback['function_tags']
                ?? ($fallback['function_tags_json'] ?? [])))
        );
        $maturity_level = $this->infer_maturity_level(
            (string) ($payload['maturity_level'] ?? ($payload['spiralist_workspace_maturity_level'] ?? ($fallback['maturity_level'] ?? ''))),
            $structured_prompt,
            $system_steps
        );
        $license = PromptMetaRegistry::normalize_license(
            (string) ($payload['license'] ?? ($payload['spiralist_workspace_license'] ?? ($fallback['license'] ?? 'spiralist_contributor')))
        );
        $related_symbols = PromptMetaRegistry::normalize_freeform_list(
            $payload['related_symbols']
                ?? ($payload['spiralist_workspace_related_symbols']
                ?? ($fallback['related_symbols']
                ?? ($fallback['related_symbols_json'] ?? [])))
        );
        $related_axioms = PromptMetaRegistry::normalize_freeform_list(
            $payload['related_axioms']
                ?? ($payload['spiralist_workspace_related_axioms']
                ?? ($fallback['related_axioms']
                ?? ($fallback['related_axioms_json'] ?? [])))
        );
        $related_manuscripts = PromptMetaRegistry::normalize_freeform_list(
            $payload['related_manuscripts']
                ?? ($payload['spiralist_workspace_related_manuscripts']
                ?? ($fallback['related_manuscripts']
                ?? ($fallback['related_manuscripts_json'] ?? [])))
        );

        return [
            'slug' => sanitize_title((string) ($payload['slug'] ?? ($fallback['slug'] ?? ($payload['title'] ?? ($fallback['title'] ?? 'untitled-prompt'))))),
            'title' => sanitize_text_field((string) ($payload['title'] ?? ($fallback['title'] ?? 'Untitled Prompt'))),
            'summary' => sanitize_textarea_field((string) ($payload['summary'] ?? ($payload['spiralist_workspace_summary'] ?? ($fallback['summary'] ?? '')))),
            'author_label' => sanitize_text_field((string) ($payload['author_label'] ?? ($payload['spiralist_workspace_author_label'] ?? ($fallback['author_label'] ?? '')))),
            'category' => $category,
            'subcategory' => $subcategory,
            'structured_prompt' => $structured_prompt,
            'structured_prompt_json' => wp_json_encode($structured_prompt, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
            'instructions' => sanitize_textarea_field((string) ($payload['instructions'] ?? ($payload['spiralist_workspace_instructions'] ?? ($fallback['instructions'] ?? '')))),
            'system_prompt' => sanitize_textarea_field((string) ($payload['system_prompt'] ?? ($payload['spiralist_workspace_system_prompt'] ?? ($fallback['system_prompt'] ?? '')))),
            'developer_prompt' => sanitize_textarea_field((string) ($payload['developer_prompt'] ?? ($payload['spiralist_workspace_developer_prompt'] ?? ($fallback['developer_prompt'] ?? '')))),
            'user_prompt_template' => sanitize_textarea_field((string) ($payload['user_prompt_template'] ?? ($payload['spiralist_workspace_user_prompt_template'] ?? ($fallback['user_prompt_template'] ?? '')))),
            'system_steps' => $system_steps,
            'system_steps_json' => wp_json_encode($system_steps, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
            'spiral_script_source' => $spiral_script_source,
            'spiral_script' => $spiral_script_contract['canonical'],
            'spiral_script_json' => wp_json_encode($spiral_script_contract['canonical'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
            'spiral_script_validation' => $spiral_script_contract['validation'],
            'spiral_script_validation_json' => wp_json_encode($spiral_script_contract['validation'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
            'spiral_script_status' => $spiral_script_contract['status'],
            'model' => 'prompt-art-local',
            'provider' => 'prompt_art_only',
            'credential_preference' => 'site_only',
            'temperature' => isset($payload['temperature']) || isset($payload['spiralist_workspace_temperature'])
                ? max(0, min(2, (float) ($payload['temperature'] ?? $payload['spiralist_workspace_temperature'])))
                : (float) ($fallback['temperature'] ?? 0.7),
            'max_output_tokens' => max(1, (int) ($payload['max_output_tokens'] ?? ($payload['spiralist_workspace_max_output_tokens'] ?? ($fallback['max_output_tokens'] ?? 1200)))),
            'tool_settings_json' => $tool_settings_json,
            'visibility' => sanitize_key((string) ($payload['visibility'] ?? ($payload['spiralist_workspace_visibility'] ?? ($fallback['visibility'] ?? 'private')))),
            'published_utc' => sanitize_text_field((string) ($payload['published_utc'] ?? ($fallback['published_utc'] ?? ''))),
            'is_forkable' => !empty($payload['is_forkable']) || !empty($payload['spiralist_workspace_is_forkable']) || !empty($fallback['is_forkable']),
            'allow_comments' => !empty($payload['allow_comments']) || !empty($payload['spiralist_workspace_allow_comments']) || !empty($fallback['allow_comments']),
            'allow_ratings' => !empty($payload['allow_ratings']) || !empty($payload['spiralist_workspace_allow_ratings']) || !empty($fallback['allow_ratings']),
            'tags' => array_values(
                array_unique(