PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / trunk
AI Engine – The Chatbot, AI Framework & MCP for WordPress vtrunk
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / classes / modules / editor-assistant.php
ai-engine / classes / modules Last commit date
advisor.php 3 months ago chatbot.php 3 weeks ago discussions.php 1 day ago editor-assistant.php 3 months ago files.php 3 months ago forms-manager.php 3 months ago gdpr.php 4 months ago search.php 3 months ago security.php 1 year ago tasks-examples.php 6 months ago tasks.php 1 month ago wand.php 3 months ago
editor-assistant.php
178 lines
1 <?php
2
3 class Meow_MWAI_Modules_Editor_Assistant {
4 protected $core = null;
5 protected $botId = 'mwai_assistant';
6 protected $namespace = 'mwai-ui/v1';
7
8 public function __construct( $core ) {
9 $this->core = $core;
10 add_filter( 'mwai_internal_chatbot', [ $this, 'get_internal_chatbot' ], 10, 3 );
11 add_action( 'rest_api_init', [ $this, 'rest_api_init' ] );
12 add_action( 'admin_head', [ $this, 'admin_head' ] );
13 add_action( 'admin_footer', [ $this, 'admin_footer' ] );
14 }
15
16 public function admin_head() {
17 ?>
18 <style id="mwai-editor-assistant-base">
19 html.mwai-assistant-active {
20 transition: margin-top 0.3s ease !important;
21 }
22 html.mwai-assistant-active .interface-interface-skeleton {
23 transition: top 0.3s ease, left 0.3s ease, right 0.3s ease,
24 bottom 0.3s ease, border-radius 0.3s ease, filter 0.3s ease !important;
25 }
26 html.mwai-assistant-active #wpadminbar,
27 html.mwai-assistant-active #adminmenuwrap,
28 html.mwai-assistant-active #adminmenuback {
29 transition: transform 0.3s ease, opacity 0.3s ease !important;
30 }
31 html.mwai-assistant-active #wpcontent,
32 html.mwai-assistant-active #wpfooter {
33 transition: margin-left 0.3s ease !important;
34 }
35 html.mwai-assistant-open {
36 margin-top: 0 !important;
37 background: #f0f0f1 !important;
38 }
39 html.mwai-assistant-open body {
40 background: transparent !important;
41 }
42 html.mwai-assistant-open #wpadminbar {
43 transform: translateY(-100%);
44 opacity: 0;
45 pointer-events: none;
46 }
47 html.mwai-assistant-open #adminmenuwrap,
48 html.mwai-assistant-open #adminmenuback {
49 transform: translateX(-100%);
50 opacity: 0;
51 pointer-events: none;
52 }
53 html.mwai-assistant-open #wpcontent,
54 html.mwai-assistant-open #wpfooter {
55 margin-left: 0 !important;
56 }
57 html.mwai-assistant-open .interface-interface-skeleton {
58 position: fixed !important;
59 top: 15px !important;
60 left: 15px !important;
61 right: 410px !important;
62 bottom: 15px !important;
63 border-radius: 12px !important;
64 overflow: hidden !important;
65 filter: drop-shadow(0 0 12px rgba(0, 0, 0, 0.15)) !important;
66 }
67 html.mwai-assistant-busy .interface-interface-skeleton {
68 pointer-events: none !important;
69 opacity: 0.6 !important;
70 }
71 </style>
72 <?php
73 }
74
75 public function admin_footer() {
76 echo '<div id="mwai-editor-assistant-root"></div>';
77 }
78
79 public function rest_api_init() {
80 register_rest_route( $this->namespace, '/editor/submit', [
81 'methods' => 'POST',
82 'callback' => [ $this, 'rest_submit' ],
83 'permission_callback' => [ $this->core, 'check_rest_nonce' ],
84 ] );
85 }
86
87 public function get_internal_chatbot( $chatbot, $botId, $params ) {
88 if ( $botId !== $this->botId ) {
89 return $chatbot;
90 }
91 $envId = $params['envId'] ?? null;
92 return [
93 'botId' => $this->botId,
94 'name' => 'AI Assistant',
95 'mode' => 'chat',
96 'scope' => 'editor-assistant',
97 'envId' => $envId,
98 'instructions' => '',
99 'textInputMaxLength' => 16384,
100 'startSentence' => '',
101 'contentAware' => false,
102 ];
103 }
104
105 protected function create_response( $data, $status = 200 ) {
106 $current_nonce = $this->core->get_nonce( true );
107 $request_nonce = isset( $_SERVER['HTTP_X_WP_NONCE'] ) ? $_SERVER['HTTP_X_WP_NONCE'] : null;
108 $should_refresh = false;
109 if ( $request_nonce ) {
110 $verify = wp_verify_nonce( $request_nonce, 'wp_rest' );
111 if ( $verify === 2 ) {
112 $should_refresh = true;
113 }
114 }
115 if ( $should_refresh || ( $request_nonce && $current_nonce !== $request_nonce ) ) {
116 $data['new_token'] = $current_nonce;
117 }
118 return new WP_REST_Response( $data, $status );
119 }
120
121 protected function build_response( $reply ) {
122 return [
123 'success' => true,
124 'reply' => $reply->result,
125 'actions' => [],
126 'feedbackId' => null,
127 'usage' => $reply->usage,
128 ];
129 }
130
131 public function rest_submit( $request ) {
132 try {
133 $params = $request->get_json_params();
134 $newMessage = trim( $params['newMessage'] ?? '' );
135 $instructions = $params['instructions'] ?? '';
136 $messages = $params['messages'] ?? [];
137 $envId = $params['envId'] ?? null;
138 $model = $params['model'] ?? null;
139 $chatId = $params['chatId'] ?? null;
140
141 if ( empty( $newMessage ) ) {
142 return $this->create_response( [ 'success' => false, 'message' => 'Empty message.' ], 400 );
143 }
144
145 $query = new Meow_MWAI_Query_Text( $newMessage, 4096 );
146 $queryParams = [
147 'botId' => $this->botId,
148 'scope' => 'editor-assistant',
149 'instructions' => $instructions,
150 'messages' => $messages,
151 ];
152 if ( $envId ) {
153 $queryParams['envId'] = $envId;
154 }
155 if ( $model ) {
156 $queryParams['model'] = $model;
157 }
158 if ( $chatId ) {
159 $queryParams['chatId'] = $chatId;
160 }
161 $query->inject_params( $queryParams );
162 $query = apply_filters( 'mwai_chatbot_query', $query, $queryParams );
163
164 Meow_MWAI_Logging::log( "Editor Assistant: Submitting query: \"{$newMessage}\"" );
165 $reply = $this->core->run_query( $query );
166
167 return $this->create_response( $this->build_response( $reply ) );
168 }
169 catch ( Exception $e ) {
170 Meow_MWAI_Logging::error( 'Editor Assistant: ' . $e->getMessage() );
171 return $this->create_response( [
172 'success' => false,
173 'message' => apply_filters( 'mwai_ai_exception', $e->getMessage() ),
174 ], 500 );
175 }
176 }
177 }
178