PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.0.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.0.3
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 / event.php
ai-engine / classes Last commit date
data 11 months ago engines 10 months ago exceptions 11 months ago modules 10 months ago query 10 months ago rest 10 months ago services 10 months ago admin.php 10 months ago api.php 10 months ago core.php 10 months ago discussion.php 11 months ago event.php 11 months ago init.php 11 months ago logging.php 11 months ago reply.php 10 months ago rest.php 10 months ago
event.php
248 lines
1 <?php
2
3 // Load constants once at class definition
4 if ( !defined( 'MWAI_STREAM_TYPES' ) ) {
5 require_once MWAI_PATH . '/constants/types.php';
6 }
7
8 class Meow_MWAI_Event {
9 private $type;
10 private $subtype;
11 private $content;
12 private $metadata;
13 private $visibility;
14 private $timestamp;
15
16 public function __construct( $type = 'live', $subtype = null ) {
17 $this->type = $type;
18 $this->subtype = $subtype ?: MWAI_STREAM_TYPES['CONTENT'];
19 $this->content = '';
20 $this->metadata = [];
21 $this->visibility = $this->get_default_visibility( $this->subtype );
22 $this->timestamp = microtime( true );
23 }
24
25 // Setters with fluent interface
26 public function set_content( $content ) {
27 $this->content = $content;
28 return $this;
29 }
30
31 public function set_metadata( $key, $value = null ) {
32 if ( is_array( $key ) ) {
33 $this->metadata = array_merge( $this->metadata, $key );
34 }
35 else {
36 $this->metadata[$key] = $value;
37 }
38 return $this;
39 }
40
41 public function set_visibility( $visibility ) {
42 $this->visibility = $visibility;
43 return $this;
44 }
45
46 public function set_subtype( $subtype ) {
47 $this->subtype = $subtype;
48 $this->visibility = $this->get_default_visibility( $subtype );
49 return $this;
50 }
51
52 // Get default visibility based on subtype
53 private function get_default_visibility( $subtype ) {
54 $hidden_types = [
55 MWAI_STREAM_TYPES['TOOL_ARGS'],
56 MWAI_STREAM_TYPES['DEBUG'],
57 MWAI_STREAM_TYPES['HEARTBEAT'],
58 ];
59
60 $collapsed_types = [
61 MWAI_STREAM_TYPES['THINKING'],
62 MWAI_STREAM_TYPES['MCP_DISCOVERY'],
63 MWAI_STREAM_TYPES['STATUS'],
64 ];
65
66 if ( in_array( $subtype, $hidden_types ) ) {
67 return MWAI_STREAM_VISIBILITY['HIDDEN'];
68 }
69
70 if ( in_array( $subtype, $collapsed_types ) ) {
71 return MWAI_STREAM_VISIBILITY['COLLAPSED'];
72 }
73
74 return MWAI_STREAM_VISIBILITY['VISIBLE'];
75 }
76
77 // Convert to array for JSON encoding
78 public function to_array() {
79 $data = [
80 'type' => $this->type,
81 'data' => $this->content,
82 'timestamp' => $this->timestamp,
83 ];
84
85 // Only add extra fields for 'live' messages
86 if ( $this->type === 'live' ) {
87 $data['subtype'] = $this->subtype;
88 $data['visibility'] = $this->visibility;
89
90 if ( !empty( $this->metadata ) ) {
91 $data['metadata'] = $this->metadata;
92 }
93 }
94
95 return $data;
96 }
97
98 // Static factory methods for common message types
99 public static function content( $content ) {
100 return ( new self( 'live', MWAI_STREAM_TYPES['CONTENT'] ) )
101 ->set_content( $content );
102 }
103
104 public static function thinking( $content ) {
105 return ( new self( 'live', MWAI_STREAM_TYPES['THINKING'] ) )
106 ->set_content( $content );
107 }
108
109 public static function tool_call( $tool_name, $args = null ) {
110 $msg = ( new self( 'live', MWAI_STREAM_TYPES['TOOL_CALL'] ) )
111 ->set_content( "Calling function: $tool_name" )
112 ->set_metadata( 'tool_name', $tool_name );
113
114 if ( $args ) {
115 $msg->set_metadata( 'args', $args );
116 }
117
118 return $msg;
119 }
120
121 public static function status( $status, $details = null ) {
122 $msg = ( new self( 'live', MWAI_STREAM_TYPES['STATUS'] ) )
123 ->set_content( $status );
124
125 if ( $details ) {
126 $msg->set_metadata( 'details', $details );
127 }
128
129 return $msg;
130 }
131
132 public static function debug( $message, $data = null ) {
133 $msg = ( new self( 'live', MWAI_STREAM_TYPES['DEBUG'] ) )
134 ->set_content( $message );
135
136 if ( $data ) {
137 $msg->set_metadata( 'debug_data', $data );
138 }
139
140 return $msg;
141 }
142
143 public static function error( $message ) {
144 return new self( 'error', null );
145 }
146
147 public static function end( $data ) {
148 return new self( 'end', null );
149 }
150
151 // Standardized event helpers for consistent messaging
152
153 public static function request_sent() {
154 return self::status( 'Request sent...' );
155 }
156
157 public static function generating_response() {
158 return self::status( 'Generating response...' );
159 }
160
161 public static function response_completed() {
162 return self::status( 'Response completed.' );
163 }
164
165 public static function request_completed( $duration ) {
166 return self::status( "Request completed in $duration." );
167 }
168
169 public static function stream_completed() {
170 return self::status( 'Stream completed.' );
171 }
172
173 public static function mcp_discovery( $server_count, $tool_count ) {
174 return ( new self( 'live', MWAI_STREAM_TYPES['MCP_DISCOVERY'] ) )
175 ->set_content( "Got $server_count MCP server(s) and $tool_count tool(s)." )
176 ->set_metadata( 'server_count', $server_count )
177 ->set_metadata( 'tool_count', $tool_count );
178 }
179
180 public static function mcp_calling( $tool_name, $tool_id = null, $args = null ) {
181 $msg = ( new self( 'live', 'mcp_tool_call' ) )
182 ->set_content( "Calling $tool_name..." )
183 ->set_metadata( 'tool_name', $tool_name )
184 ->set_metadata( 'is_mcp', true );
185
186 if ( $tool_id ) {
187 $msg->set_metadata( 'tool_id', $tool_id );
188 }
189
190 if ( $args ) {
191 $msg->set_metadata( 'arguments', $args );
192 }
193
194 return $msg;
195 }
196
197 public static function mcp_result( $tool_name, $tool_use_id = null ) {
198 $msg = ( new self( 'live', 'mcp_tool_result' ) )
199 ->set_content( "Got result from $tool_name." )
200 ->set_metadata( 'tool_name', $tool_name )
201 ->set_metadata( 'is_mcp', true );
202
203 if ( $tool_use_id ) {
204 $msg->set_metadata( 'tool_use_id', $tool_use_id );
205 }
206
207 return $msg;
208 }
209
210 public static function function_calling( $function_name, $args = null ) {
211 $msg = ( new self( 'live', MWAI_STREAM_TYPES['TOOL_CALL'] ) )
212 ->set_content( "Calling $function_name..." )
213 ->set_metadata( 'tool_name', $function_name );
214
215 if ( $args ) {
216 $msg->set_metadata( 'arguments', $args );
217 }
218
219 return $msg;
220 }
221
222 public static function function_result( $function_name ) {
223 return ( new self( 'live', MWAI_STREAM_TYPES['TOOL_RESULT'] ) )
224 ->set_content( "Got result from $function_name." )
225 ->set_metadata( 'tool_name', $function_name );
226 }
227
228 public static function embeddings( $count, $query = null, $namespace = null ) {
229 $content = $count > 0
230 ? "Found $count relevant context(s) from embeddings."
231 : 'Searching embeddings...';
232
233 $msg = ( new self( 'live', MWAI_STREAM_TYPES['EMBEDDINGS'] ) )
234 ->set_content( $content )
235 ->set_metadata( 'count', $count );
236
237 if ( $query ) {
238 $msg->set_metadata( 'query', $query );
239 }
240
241 if ( $namespace ) {
242 $msg->set_metadata( 'namespace', $namespace );
243 }
244
245 return $msg;
246 }
247 }
248