refactor: Cleanup git state - commit all staged changes

Major refactoring cleanup:
- Add new controller architecture (class-controller-*.php)
- Add new settings-v2 UI (views/settings-v2/)
- Add new CSS architecture (agentic-sidebar.css, tokens)
- Add esbuild build pipeline (scripts/build.js, package.json)
- Add composer dependencies (vendor/)
- Add frontend src directory (assets/js/src/index.jsx)
- Add documentation files
- Remove old/obsolete files (class-settings.php, old CSS)

This commits all pending changes from previous refactoring efforts.
This commit is contained in:
Dwindi Ramadhana
2026-06-17 05:27:58 +07:00
parent d3f142222c
commit 690991c526
7963 changed files with 941566 additions and 67372 deletions

View File

@@ -0,0 +1,194 @@
<?php
/**
* Settings V2 layout — Stitch rebuild.
*
* @package WP_Agentic_Writer
* @var array $view_data Prepared view data from class-settings-v2.php.
*/
if (!defined("ABSPATH")) {
exit();
}
// phpcs:ignore WordPress.PHP.DontExtract.extract_extract -- View templates are intentionally passed prepared variables.
extract($view_data);
$api_connected = !empty($api_key);
$models_ready = !empty($planning_model) && !empty($writing_model);
$budget_percent_safe = min(100, (float) $budget_percent);
$user_agent = isset($_SERVER["HTTP_USER_AGENT"])
? sanitize_text_field(wp_unslash($_SERVER["HTTP_USER_AGENT"]))
: "";
$cmd_key = false !== strpos($user_agent, "Mac OS") ? "" : "Ctrl";
$settings_tabs = [
"general" => ["General", "6"],
"models" => ["OpenRouter", "6"],
"local-backend" => ["Custom Router", "3"],
"tools" => ["Tools", "1"],
"memanto" => ["MEMANTO", "3"],
"cost-log" => ["Cost Log", "2"],
"guide" => ["Model Guide", "3"],
];
?>
<div class="wrap wpaw2-settings">
<script>
// Intercept WP "Settings saved" admin notice → use our Agentic toast
document.addEventListener('DOMContentLoaded', function() {
var wpNotice = document.querySelector('#setting-error-settings_updated, .notice.settings-error');
if (wpNotice) {
var msg = wpNotice.querySelector('p');
var text = msg ? msg.textContent.replace('Settings saved.', 'Settings saved').trim() : 'Settings saved';
wpNotice.style.display = 'none';
// Delegate to existing toast system
var toast = document.getElementById('wpaw2-toast');
var body = document.getElementById('wpaw2-toast-message');
if (toast && body) {
body.textContent = text;
toast.className = 'toast show toast-success';
clearTimeout(toast._timer);
toast._timer = setTimeout(function() { toast.classList.remove('show'); }, 2600);
}
}
});
</script>
<div class="main">
<header class="admin-top">
<div class="crumb"><?php esc_html_e(
"Agentic Writer",
"wp-agentic-writer",
); ?> / <strong id="wpaw2-crumb-tab"><?php esc_html_e(
"General",
"wp-agentic-writer",
); ?></strong></div>
<div class="top-actions">
<button type="button" class="btn btn-small" data-aw2-tab="guide"><?php esc_html_e(
"Open Guide",
"wp-agentic-writer",
); ?></button>
<button type="button" class="btn btn-small btn-danger" id="wpaw-reset-settings"><?php esc_html_e(
"Reset Defaults",
"wp-agentic-writer",
); ?></button>
<button type="submit" form="wpaw2-settings-form" class="btn btn-primary btn-small"><?php esc_html_e(
"Save Settings",
"wp-agentic-writer",
); ?></button>
</div>
</header>
<main class="page">
<section class="hero">
<div class="hero-card">
<p class="eyebrow"><?php esc_html_e(
"Control center",
"wp-agentic-writer",
); ?></p>
<h1><?php esc_html_e(
"Configure your agentic writing workflow.",
"wp-agentic-writer",
); ?></h1>
<p class="hero-copy"><?php esc_html_e(
"Manage providers, model routing, memory, cost controls, and custom endpoint integrations from one lightweight settings interface.",
"wp-agentic-writer",
); ?></p>
</div>
<div class="status-panel">
<div class="workflow-step"><span class="step-dot">1</span><span class="step-label"><?php esc_html_e(
"OpenRouter",
"wp-agentic-writer",
); ?></span><span class="status <?php echo esc_attr(
$api_connected ? "connected" : "warn",
); ?>"><?php echo $api_connected
? esc_html__("Connected", "wp-agentic-writer")
: esc_html__("Missing key", "wp-agentic-writer"); ?></span></div>
<div class="workflow-step"><span class="step-dot">2</span><span class="step-label"><?php esc_html_e(
"Models",
"wp-agentic-writer",
); ?></span><span class="status <?php echo esc_attr(
$models_ready ? "connected" : "warn",
); ?>"><?php echo $models_ready
? esc_html__("Ready", "wp-agentic-writer")
: esc_html__("Review", "wp-agentic-writer"); ?></span></div>
<div class="workflow-step"><span class="step-dot">3</span><span class="step-label"><?php esc_html_e(
"Budget",
"wp-agentic-writer",
); ?></span><span class="status <?php echo esc_attr(
"danger" === $budget_status
? "error"
: ("warning" === $budget_status
? "warn"
: "connected"),
); ?>"><?php echo esc_html(
number_format_i18n($budget_percent_safe, 1),
); ?>%</span></div>
</div>
</section>
<form method="post" action="options.php" id="wpaw2-settings-form">
<?php settings_fields("wp_agentic_writer_settings"); ?>
<section class="tabs-wrap">
<aside class="tab-sidebar" aria-label="Settings sections">
<div class="tab-group">
<div class="tab-group-title"><?php esc_html_e(
"Setup",
"wp-agentic-writer",
); ?></div>
<?php foreach (
["general", "models", "local-backend", "tools", "memanto"]
as $tab_key
): ?>
<button type="button" class="tab-btn" data-aw2-tab="<?php echo esc_attr(
$tab_key,
); ?>" data-label="<?php echo esc_attr(
$settings_tabs[$tab_key][0],
); ?>" aria-selected="<?php echo "general" === $tab_key
? "true"
: "false"; ?>"><span><?php echo esc_html(
$settings_tabs[$tab_key][0],
); ?></span><span class="tab-count"><?php echo esc_html(
$settings_tabs[$tab_key][1],
); ?></span></button>
<?php endforeach; ?>
</div>
<div class="tab-group">
<div class="tab-group-title"><?php esc_html_e(
"Reference",
"wp-agentic-writer",
); ?></div>
<?php foreach (["cost-log", "guide"] as $tab_key): ?>
<button type="button" class="tab-btn" data-aw2-tab="<?php echo esc_attr(
$tab_key,
); ?>" data-label="<?php echo esc_attr(
$settings_tabs[$tab_key][0],
); ?>" aria-selected="false"><span><?php echo esc_html(
$settings_tabs[$tab_key][0],
); ?></span><span class="tab-count"><?php echo esc_html(
$settings_tabs[$tab_key][1],
); ?></span></button>
<?php endforeach; ?>
</div>
</aside>
<div>
<section class="tab-panel active" id="general"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-general.php"; ?></section>
<section class="tab-panel" id="models"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-models.php"; ?></section>
<section class="tab-panel" id="local-backend"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-local-backend.php"; ?></section>
<section class="tab-panel" id="tools"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-tools.php"; ?></section>
<section class="tab-panel" id="memanto"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-memanto.php"; ?></section>
<section class="tab-panel" id="cost-log"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-cost-log.php"; ?></section>
<section class="tab-panel" id="guide"><?php require WP_AGENTIC_WRITER_DIR .
"views/settings-v2/tab-guide.php"; ?></section>
</div>
</section>
</form>
</main>
</div>
<div class="toast" id="wpaw2-toast" role="status" aria-live="polite"><button type="button" class="btn btn-small" id="wpaw2-toast-close" style="float:right">×</button><span id="wpaw2-toast-message"></span></div>
</div>