Files
peptide-news-plugin/uninstall.php
Terence b7da4f42b9 feat: add LLM cost tracking with budget enforcement and admin dashboard
- New Cost_Tracker class: logs every API call (model, tokens, cost), enforces
  monthly budgets with hard-stop mode, provides aggregated reporting
- New llm_costs database table with indexes on created_at, model, operation
- Modified LLM class: call_openrouter_with_usage() extracts token usage from
  OpenRouter responses; budget gate checks before each API call
- Admin settings: monthly budget (USD), enforcement mode (disabled/warn/hard-stop),
  cost log retention period
- Admin cost dashboard: budget progress bar, daily cost chart (Chart.js),
  per-model and per-operation breakdowns, recent API call log
- PHPUnit tests: 16 tests covering cost calculation, pricing lookups,
  budget enforcement logic, and model validation
- Updated ARCHITECTURE.md with new table schema, data flow, and key decisions
- Updated CONVENTIONS.md with "how to add cost tracking for a new operation"
- Version bump to 2.4.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 04:18:30 +07:00

29 lines
962 B
PHP
Executable File

<?php
declare( strict_types=1 );
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
global $wpdb;
$prefix = $wpdb->prefix;
// Drop custom tables (order matters: child tables first due to FK constraints).
$wpdb->query( "DROP TABLE IF EXISTS {$prefix}peptide_news_clicks" );
$wpdb->query( "DROP TABLE IF EXISTS {$prefix}peptide_news_daily_stats" );
$wpdb->query( "DROP TABLE IF EXISTS {$prefix}peptide_news_log" );
$wpdb->query( "DROP TABLE IF EXISTS {$prefix}peptide_news_llm_costs" );
$wpdb->query( "DROP TABLE IF EXISTS {$prefix}peptide_news_articles" );
// Delete all plugin options.
$wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE 'peptide\_news\_%'"
);
// Remove transient caches.
$wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_peptide\_news\_%' OR option_name LIKE '_transient_timeout_peptide\_news\_%'"
);
// Clear scheduled events.
wp_clear_scheduled_hook( 'peptide_news_cron_fetch' );