{"table_name":"aicom_api_keys","full_table_name":"wp_aicom_api_keys","description":"Stores aicom api keys data created by this plugin.","detection_method":"static","confidence":"high","create_sql":"CREATE TABLE wp_aicom_api_keys ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, label VARCHAR(191) NOT NULL, key_prefix VARCHAR(16) NOT NULL, key_hash VARCHAR(255) NOT NULL, scopes_json LONGTEXT NOT NULL, restrictions_json LONGTEXT NULL, status VARCHAR(20) NOT NULL DEFAULT 'active', last_used_at DATETIME NULL, last_used_ip VARCHAR(45) NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, created_by_user_id BIGINT UNSIGNED NULL, revoked_at DATETIME NULL, expires_at DATETIME NULL, PRIMARY KEY (id), KEY idx_key_prefix (key_prefix), KEY idx_status (status) ) $charset;\"; // ── Audit Logs ──────────────────────────────────────────────────── $sql_logs = \"CREATE TABLE wp_aicom_logs ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, created_at DATETIME NOT NULL, request_id VARCHAR(64) NOT NULL, session_id BIGINT UNSIGNED NULL, remote_ip VARCHAR(45) NOT NULL, api_key_id BIGINT UNSIGNED NULL, api_key_label VARCHAR(191) NULL, tool_name VARCHAR(191) NOT NULL, module VARCHAR(64) NOT NULL, tool_class VARCHAR(30) NULL, status VARCHAR(32) NOT NULL, http_status SMALLINT NULL, duration_ms INT UNSIGNED NULL, target_type VARCHAR(64) NULL, target_id VARCHAR(100) NULL, is_dry_run TINYINT(1) NOT NULL DEFAULT 0, error_code VARCHAR(100) NULL, error_message TEXT NULL, params_json LONGTEXT NULL, result_summary_json LONGTEXT NULL, PRIMARY KEY (id), KEY idx_created_at (created_at), KEY idx_tool_created (tool_name, created_at), KEY idx_status_created (status, created_at), KEY idx_ip_created (remote_ip, created_at), KEY idx_key_created (api_key_id, created_at), KEY idx_request_id (request_id), KEY idx_session_id (session_id), KEY idx_tool_class (tool_class) ) $charset;\"; // ── Backups ─────────────────────────────────────────────────────── $sql_backups = \"CREATE TABLE wp_aicom_backups ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, created_at DATETIME NOT NULL, request_id VARCHAR(64) NULL, session_id BIGINT UNSIGNED NULL, api_key_id BIGINT UNSIGNED NULL, tool_name VARCHAR(191) NULL, target_type VARCHAR(64) NULL, target_id VARCHAR(100) NULL, manifest_json LONGTEXT NULL, payload_json LONGTEXT NULL, PRIMARY KEY (id), KEY idx_created_at (created_at), KEY idx_session_id (session_id), KEY idx_target (target_type, target_id) ) $charset;\"; // ── Sessions ────────────────────────────────────────────────────── $sql_sessions = \"CREATE TABLE wp_aicom_sessions ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, api_key_id BIGINT UNSIGNED NOT NULL, api_key_label VARCHAR(191) NOT NULL DEFAULT '', name VARCHAR(255) NOT NULL, description TEXT NULL, status VARCHAR(20) NOT NULL DEFAULT 'open', opened_at DATETIME NOT NULL, closed_at DATETIME NULL, PRIMARY KEY (id), KEY idx_api_key_status (api_key_id, status), KEY idx_opened_at (opened_at) ) $charset;\"; // ── User Presets ────────────────────────────────────────────────── $sql_presets = \"CREATE TABLE wp_aicom_presets ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(191) NOT NULL, scopes_json LONGTEXT NOT NULL, created_at DATETIME NOT NULL, created_by_user_id BIGINT UNSIGNED NULL, PRIMARY KEY (id), KEY idx_created_at (created_at) ) $charset;\"; // ── Skills ──────────────────────────────────────────────────────── $sql_skills = \"CREATE TABLE wp_aicom_skills ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, slug VARCHAR(100) NOT NULL, name VARCHAR(255) NOT NULL, description TEXT NULL, type VARCHAR(30) NOT NULL DEFAULT 'simple', status VARCHAR(30) NOT NULL DEFAULT 'draft', input_schema_json LONGTEXT NULL, rules_json LONGTEXT NULL, steps_json LONGTEXT NULL, permissions_json LONGTEXT NULL, tags_json LONGTEXT NULL, logging_enabled TINYINT(1) NOT NULL DEFAULT 1, rollback_enabled TINYINT(1) NOT NULL DEFAULT 0, version INT UNSIGNED NOT NULL DEFAULT 1, parent_skill_id BIGINT UNSIGNED NULL, session_id BIGINT UNSIGNED NULL, created_by_key_id BIGINT UNSIGNED NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, archived_at DATETIME NULL, PRIMARY KEY (id), UNIQUE KEY idx_slug (slug), KEY idx_status (status), KEY idx_type (type) ) $charset;\"; // ── Skill Revisions ─────────────────────────────────────────────── $sql_skill_revisions = \"CREATE TABLE wp_aicom_skill_revisions ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, skill_id BIGINT UNSIGNED NOT NULL, version INT UNSIGNED NOT NULL, snapshot_json LONGTEXT NOT NULL, changed_by_key_id BIGINT UNSIGNED NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY idx_skill_version (skill_id, version) ) $charset;\"; // ── Hub Pairings ────────────────────────────────────────────────── // One row per AICOM Hub paired with this site. management_secret is // sodium_crypto_secretbox-encrypted (key = wp_salt('secure_auth')). $sql_hub_pairings = \"CREATE TABLE wp_aicom_hub_pairings ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, hub_id VARCHAR(64) NOT NULL, hub_url VARCHAR(255) NOT NULL, management_key_id VARCHAR(64) NOT NULL, management_secret_encrypted LONGTEXT NOT NULL, paired_at DATETIME NOT NULL, last_seen DATETIME NULL, PRIMARY KEY (id), UNIQUE KEY idx_hub (hub_id), KEY idx_key_id (management_key_id) ) $charset;\"; // ── Hub Nonces (replay protection for /management) ──────────────── $sql_hub_nonces = \"CREATE TABLE wp_aicom_hub_nonces ( key_id VARCHAR(64) NOT NULL, nonce VARCHAR(64) NOT NULL, seen_at DATETIME NOT NULL, PRIMARY KEY (key_id, nonce), KEY idx_seen (seen_at) ) $charset;\"; dbDelta( $sql_keys );","columns":[{"name":"id","type":"BIGINT UNSIGNED","nullable":false,"primary_key":true},{"name":"label","type":"VARCHAR(191)","nullable":false,"primary_key":false},{"name":"scopes_json","type":"LONGTEXT","nullable":false,"primary_key":false},{"name":"restrictions_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"status","type":"VARCHAR(20)","nullable":false,"primary_key":false},{"name":"last_used_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"last_used_ip","type":"VARCHAR(45)","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"updated_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"created_by_user_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"revoked_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"expires_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"request_id","type":"VARCHAR(64)","nullable":false,"primary_key":false},{"name":"session_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"remote_ip","type":"VARCHAR(45)","nullable":false,"primary_key":false},{"name":"api_key_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"api_key_label","type":"VARCHAR(191)","nullable":true,"primary_key":false},{"name":"tool_name","type":"VARCHAR(191)","nullable":false,"primary_key":false},{"name":"module","type":"VARCHAR(64)","nullable":false,"primary_key":false},{"name":"tool_class","type":"VARCHAR(30)","nullable":true,"primary_key":false},{"name":"status","type":"VARCHAR(32)","nullable":false,"primary_key":false},{"name":"http_status","type":"SMALLINT","nullable":true,"primary_key":false},{"name":"duration_ms","type":"INT UNSIGNED","nullable":true,"primary_key":false},{"name":"target_type","type":"VARCHAR(64)","nullable":true,"primary_key":false},{"name":"target_id","type":"VARCHAR(100)","nullable":true,"primary_key":false},{"name":"is_dry_run","type":"TINYINT(1)","nullable":false,"primary_key":false},{"name":"error_code","type":"VARCHAR(100)","nullable":true,"primary_key":false},{"name":"error_message","type":"TEXT","nullable":true,"primary_key":false},{"name":"params_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"result_summary_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"request_id","type":"VARCHAR(64)","nullable":true,"primary_key":false},{"name":"session_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"api_key_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"tool_name","type":"VARCHAR(191)","nullable":true,"primary_key":false},{"name":"target_type","type":"VARCHAR(64)","nullable":true,"primary_key":false},{"name":"target_id","type":"VARCHAR(100)","nullable":true,"primary_key":false},{"name":"manifest_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"payload_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"api_key_id","type":"BIGINT UNSIGNED","nullable":false,"primary_key":false},{"name":"api_key_label","type":"VARCHAR(191)","nullable":false,"primary_key":false},{"name":"name","type":"VARCHAR(255)","nullable":false,"primary_key":false},{"name":"description","type":"TEXT","nullable":true,"primary_key":false},{"name":"status","type":"VARCHAR(20)","nullable":false,"primary_key":false},{"name":"opened_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"closed_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"name","type":"VARCHAR(191)","nullable":false,"primary_key":false},{"name":"scopes_json","type":"LONGTEXT","nullable":false,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"created_by_user_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"slug","type":"VARCHAR(100)","nullable":false,"primary_key":false},{"name":"name","type":"VARCHAR(255)","nullable":false,"primary_key":false},{"name":"description","type":"TEXT","nullable":true,"primary_key":false},{"name":"type","type":"VARCHAR(30)","nullable":false,"primary_key":false},{"name":"status","type":"VARCHAR(30)","nullable":false,"primary_key":false},{"name":"input_schema_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"rules_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"steps_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"permissions_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"tags_json","type":"LONGTEXT","nullable":true,"primary_key":false},{"name":"logging_enabled","type":"TINYINT(1)","nullable":false,"primary_key":false},{"name":"rollback_enabled","type":"TINYINT(1)","nullable":false,"primary_key":false},{"name":"version","type":"INT UNSIGNED","nullable":false,"primary_key":false},{"name":"parent_skill_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"session_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"created_by_key_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"updated_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"archived_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"skill_id","type":"BIGINT UNSIGNED","nullable":false,"primary_key":false},{"name":"version","type":"INT UNSIGNED","nullable":false,"primary_key":false},{"name":"snapshot_json","type":"LONGTEXT","nullable":false,"primary_key":false},{"name":"changed_by_key_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"hub_id","type":"VARCHAR(64)","nullable":false,"primary_key":false},{"name":"hub_url","type":"VARCHAR(255)","nullable":false,"primary_key":false},{"name":"management_key_id","type":"VARCHAR(64)","nullable":false,"primary_key":false},{"name":"management_secret_encrypted","type":"LONGTEXT","nullable":false,"primary_key":false},{"name":"paired_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"last_seen","type":"DATETIME","nullable":true,"primary_key":false},{"name":"nonce","type":"VARCHAR(64)","nullable":false,"primary_key":false},{"name":"seen_at","type":"DATETIME","nullable":false,"primary_key":false}],"plugin":{"slug":"aicom","name":"AICOM – AI Commander","active_installs":20,"version":"3.9.0","wp_org_url":"https://wordpress.org/plugins/aicom/"}}