feat: consolidate docs, backend/session infra, and settings updates

This commit is contained in:
Dwindi Ramadhana
2026-05-28 00:58:20 +07:00
parent 2424acf726
commit 44e06eed88
102 changed files with 35423 additions and 11181 deletions

View File

@@ -69,13 +69,13 @@ class WP_Agentic_Writer_Settings {
'nonce' => wp_create_nonce( 'wpaw_settings' ),
'models' => $this->get_models_for_select(),
'currentModels' => array(
'planning' => $settings['planning_model'] ?? 'google/gemini-2.0-flash-exp:free',
'writing' => $settings['writing_model'] ?? ( $settings['execution_model'] ?? 'anthropic/claude-3.5-sonnet' ),
'execution' => $settings['writing_model'] ?? ( $settings['execution_model'] ?? 'anthropic/claude-3.5-sonnet' ),
'clarity' => $settings['clarity_model'] ?? 'google/gemini-2.0-flash-exp:free',
'refinement' => $settings['refinement_model'] ?? 'anthropic/claude-3.5-sonnet',
'chat' => $settings['chat_model'] ?? 'google/gemini-2.0-flash-exp:free',
'image' => $settings['image_model'] ?? 'openai/gpt-4o',
'planning' => $settings['planning_model'] ?? WPAW_Model_Registry::get_default_model( 'planning' ),
'writing' => $settings['writing_model'] ?? WPAW_Model_Registry::get_default_model( 'writing' ),
'execution' => $settings['writing_model'] ?? WPAW_Model_Registry::get_default_model( 'execution' ),
'clarity' => $settings['clarity_model'] ?? WPAW_Model_Registry::get_default_model( 'clarity' ),
'refinement' => $settings['refinement_model'] ?? WPAW_Model_Registry::get_default_model( 'refinement' ),
'chat' => $settings['chat_model'] ?? WPAW_Model_Registry::get_default_model( 'chat' ),
'image' => $settings['image_model'] ?? WPAW_Model_Registry::get_default_model( 'image' ),
),
) );
}
@@ -91,30 +91,30 @@ class WP_Agentic_Writer_Settings {
$models = $provider->get_cached_models();
if ( is_wp_error( $models ) ) {
// Return fallback defaults if API fails.
// Return fallback defaults from model registry if API fails.
return array(
'planning' => array(
'recommended' => array(
array( 'id' => 'google/gemini-2.0-flash-exp:free', 'name' => 'Google Gemini 2.0 Flash' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'planning' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'planning' ) ) ),
),
'all' => array(
array( 'id' => 'google/gemini-2.0-flash-exp:free', 'name' => 'Google Gemini 2.0 Flash' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'planning' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'planning' ) ) ),
),
),
'execution' => array(
'recommended' => array(
array( 'id' => 'anthropic/claude-3.5-sonnet', 'name' => 'Anthropic Claude 3.5 Sonnet' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'execution' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'execution' ) ) ),
),
'all' => array(
array( 'id' => 'anthropic/claude-3.5-sonnet', 'name' => 'Anthropic Claude 3.5 Sonnet' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'execution' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'execution' ) ) ),
),
),
'image' => array(
'recommended' => array(
array( 'id' => 'openai/gpt-4o', 'name' => 'OpenAI GPT-4o' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'image' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'image' ) ) ),
),
'all' => array(
array( 'id' => 'openai/gpt-4o', 'name' => 'OpenAI GPT-4o' ),
array( 'id' => WPAW_Model_Registry::get_default_model( 'image' ), 'name' => WPAW_Model_Registry::get_model_display_name( WPAW_Model_Registry::get_default_model( 'image' ) ) ),
),
),
);
@@ -135,9 +135,9 @@ class WP_Agentic_Writer_Settings {
// Handle flat model list from OpenRouter.
if ( ! empty( $models ) && array_keys( $models ) === range( 0, count( $models ) - 1 ) ) {
$settings = get_option( 'wp_agentic_writer_settings', array() );
$planning_id = $settings['planning_model'] ?? 'google/gemini-2.0-flash-exp:free';
$execution_id = $settings['execution_model'] ?? 'anthropic/claude-3.5-sonnet';
$image_id = $settings['image_model'] ?? 'openai/gpt-4o';
$planning_id = $settings['planning_model'] ?? WPAW_Model_Registry::get_default_model( 'planning' );
$execution_id = $settings['execution_model'] ?? WPAW_Model_Registry::get_default_model( 'execution' );
$image_id = $settings['image_model'] ?? WPAW_Model_Registry::get_default_model( 'image' );
$text_models = array();
$image_models = array();
@@ -194,7 +194,7 @@ class WP_Agentic_Writer_Settings {
return null;
};
$chat_id = $settings['chat_model'] ?? 'google/gemini-2.0-flash-exp:free';
$chat_id = $settings['chat_model'] ?? WPAW_Model_Registry::get_default_model( 'chat' );
return array(
'planning' => array(
@@ -323,12 +323,12 @@ class WP_Agentic_Writer_Settings {
$sanitized['brave_search_api_key'] = trim( $input['brave_search_api_key'] ?? '' );
// Sanitize model names (6 models as per model-preset-brief.md).
$sanitized['chat_model'] = sanitize_text_field( $input['chat_model'] ?? 'google/gemini-2.5-flash' );
$sanitized['clarity_model'] = sanitize_text_field( $input['clarity_model'] ?? 'google/gemini-2.5-flash' );
$sanitized['planning_model'] = sanitize_text_field( $input['planning_model'] ?? 'google/gemini-2.5-flash' );
$sanitized['writing_model'] = sanitize_text_field( $input['writing_model'] ?? 'anthropic/claude-3.5-sonnet' );
$sanitized['refinement_model'] = sanitize_text_field( $input['refinement_model'] ?? 'anthropic/claude-3.5-sonnet' );
$sanitized['image_model'] = sanitize_text_field( $input['image_model'] ?? 'openai/gpt-4o' );
$sanitized['chat_model'] = sanitize_text_field( $input['chat_model'] ?? WPAW_Model_Registry::get_default_model( 'chat' ) );
$sanitized['clarity_model'] = sanitize_text_field( $input['clarity_model'] ?? WPAW_Model_Registry::get_default_model( 'clarity' ) );
$sanitized['planning_model'] = sanitize_text_field( $input['planning_model'] ?? WPAW_Model_Registry::get_default_model( 'planning' ) );
$sanitized['writing_model'] = sanitize_text_field( $input['writing_model'] ?? WPAW_Model_Registry::get_default_model( 'writing' ) );
$sanitized['refinement_model'] = sanitize_text_field( $input['refinement_model'] ?? WPAW_Model_Registry::get_default_model( 'refinement' ) );
$sanitized['image_model'] = sanitize_text_field( $input['image_model'] ?? WPAW_Model_Registry::get_default_model( 'image' ) );
// Legacy support: map execution_model to writing_model
if ( isset( $input['execution_model'] ) && ! isset( $input['writing_model'] ) ) {
$sanitized['writing_model'] = sanitize_text_field( $input['execution_model'] );
@@ -394,12 +394,12 @@ class WP_Agentic_Writer_Settings {
// Extract settings (6 models as per model-preset-brief.md).
$api_key = $settings['openrouter_api_key'] ?? '';
$brave_api_key = $settings['brave_search_api_key'] ?? '';
$chat_model = $settings['chat_model'] ?? 'google/gemini-2.5-flash';
$clarity_model = $settings['clarity_model'] ?? 'google/gemini-2.5-flash';
$planning_model = $settings['planning_model'] ?? 'google/gemini-2.5-flash';
$writing_model = $settings['writing_model'] ?? ( $settings['execution_model'] ?? 'anthropic/claude-3.5-sonnet' );
$refinement_model = $settings['refinement_model'] ?? 'anthropic/claude-3.5-sonnet';
$image_model = $settings['image_model'] ?? 'openai/gpt-4o';
$chat_model = $settings['chat_model'] ?? WPAW_Model_Registry::get_default_model( 'chat' );
$clarity_model = $settings['clarity_model'] ?? WPAW_Model_Registry::get_default_model( 'clarity' );
$planning_model = $settings['planning_model'] ?? WPAW_Model_Registry::get_default_model( 'planning' );
$writing_model = $settings['writing_model'] ?? ( $settings['execution_model'] ?? WPAW_Model_Registry::get_default_model( 'writing' ) );
$refinement_model = $settings['refinement_model'] ?? WPAW_Model_Registry::get_default_model( 'refinement' );
$image_model = $settings['image_model'] ?? WPAW_Model_Registry::get_default_model( 'image' );
$web_search_enabled = $settings['web_search_enabled'] ?? false;
$search_engine = $settings['search_engine'] ?? 'auto';
$search_depth = $settings['search_depth'] ?? 'medium';
@@ -1023,7 +1023,9 @@ class WP_Agentic_Writer_Settings {
<script>
function wpawApplyPreset(preset) {
// Preset configurations with valid OpenRouter model IDs
// Curated presets for legacy settings UI. These should be manually kept
// in sync with WP_Agentic_Writer_Settings_V2::get_model_presets().
// Model IDs balance cost/quality per tier.
const presets = {
budget: {
chat: 'google/gemini-2.5-flash',
@@ -1031,7 +1033,7 @@ class WP_Agentic_Writer_Settings {
planning: 'google/gemini-2.5-flash',
writing: 'mistralai/mistral-small-creative',
refinement: 'google/gemini-2.5-flash',
image: 'black-forest-labs/flux.2-klein'
image: 'openai/gpt-4o'
},
balanced: {
chat: 'google/gemini-2.5-flash',
@@ -1039,7 +1041,7 @@ class WP_Agentic_Writer_Settings {
planning: 'google/gemini-2.5-flash',
writing: 'anthropic/claude-3.5-sonnet',
refinement: 'anthropic/claude-3.5-sonnet',
image: 'sourceful/riverflow-v2-max'
image: 'openai/gpt-4o'
},
premium: {
chat: 'google/gemini-3-flash-preview',
@@ -1047,7 +1049,7 @@ class WP_Agentic_Writer_Settings {
planning: 'google/gemini-3-flash-preview',
writing: 'openai/gpt-4.1',
refinement: 'openai/gpt-4.1',
image: 'black-forest-labs/flux.2-max'
image: 'openai/gpt-4o'
}
};