Changeset 3798534
- Timestamp:
- 11/12/2026 02:39:05 PM (13 hours ago)
- Location:
- knowscapes-ai-client
- Files:
-
- 2 added
- 12 edited
- 1 copied
-
tags/2.3.2 (copied) (copied from knowscapes-ai-client/trunk )
-
tags/2.3.2/assets/js/admin.js (modified) (1 diff)
-
tags/2.3.2/includes/class-connect.php (added)
-
tags/2.3.2/includes/class-free-key.php (modified) (2 diffs)
-
tags/2.3.2/includes/class-providers.php (modified) (1 diff)
-
tags/2.3.2/includes/class-settings.php (modified) (4 diffs)
-
tags/2.3.2/knowscapes-ai-client.php (modified) (5 diffs)
-
tags/2.3.2/readme.txt (modified) (3 diffs)
-
trunk/assets/js/admin.js (modified) (1 diff)
-
trunk/includes/class-connect.php (added)
-
trunk/includes/class-free-key.php (modified) (2 diffs)
-
trunk/includes/class-providers.php (modified) (1 diff)
-
trunk/includes/class-settings.php (modified) (4 diffs)
-
trunk/knowscapes-ai-client.php (modified) (5 diffs)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
knowscapes-ai-client/tags/2.3.2/assets/js/admin.js
r3758580 r3798534 425 425 } ); 426 426 } )(); 427 428 /** 429 * Follows the build of the connected site's assistant until it is ready or 430 * needs attention. Reads through the plugin's own admin route, so no key 431 * reaches the browser. 432 */ 433 ( function () { 434 'use strict'; 435 436 var cfg = window.knowscapesAIClientAdmin; 437 var box = document.getElementById( 'ksaic-connect-status' ); 438 if ( ! cfg || ! box || ! cfg.statusUrl ) { 439 return; 440 } 441 var t = cfg.connectI18n; 442 443 function show( text, link ) { 444 var p = document.createElement( 'p' ); 445 p.textContent = text; 446 if ( link ) { 447 var a = document.createElement( 'a' ); 448 a.href = link; 449 a.target = '_blank'; 450 a.rel = 'noopener noreferrer'; 451 a.textContent = t.configure; 452 p.appendChild( document.createTextNode( ' ' ) ); 453 p.appendChild( a ); 454 } 455 box.replaceChildren( p ); 456 } 457 458 function describe( s ) { 459 if ( 'ready' === s.state ) { 460 return t.ready.replace( '%d', s.indexed ); 461 } 462 if ( 'attention' === s.state ) { 463 return t[ s.reason ] || t.attention; 464 } 465 if ( 'indexing' === s.state ) { 466 return t.indexing.replace( '%1$d', s.indexed ).replace( '%2$d', s.total ); 467 } 468 return t[ s.state ] || t.reading; 469 } 470 471 function poll() { 472 fetch( cfg.statusUrl, { 473 headers: { 'X-WP-Nonce': cfg.nonce }, 474 credentials: 'same-origin', 475 } ) 476 .then( function ( r ) { 477 if ( 404 === r.status ) { 478 show( t.notConnected ); 479 return null; 480 } 481 if ( ! r.ok ) { 482 throw new Error( String( r.status ) ); 483 } 484 return r.json(); 485 } ) 486 .then( function ( s ) { 487 if ( ! s ) { 488 return; 489 } 490 var settled = 'ready' === s.state || 'attention' === s.state; 491 show( describe( s ), settled ? s.configure_url : null ); 492 if ( ! settled ) { 493 setTimeout( poll, 5000 ); 494 } 495 } ) 496 .catch( function () { 497 show( t.unavailable ); 498 setTimeout( poll, 15000 ); 499 } ); 500 } 501 502 poll(); 503 } )(); -
knowscapes-ai-client/tags/2.3.2/includes/class-free-key.php
r3758580 r3798534 270 270 // there is nothing left to choose and the next step is simply consenting and 271 271 // switching the widget on. A failure here is not a failure of the claim. 272 $this->redirect( $this->ensure_model() ? 'claimed_ready' : 'claimed' );272 $this->redirect( self::ensure_model() ? 'claimed_ready' : 'claimed' ); 273 273 } 274 274 … … 278 278 * @return bool True when an agent is now set, however it got there. 279 279 */ 280 p rivatefunction ensure_model() {280 public static function ensure_model() { 281 281 $settings = knowscapes_ai_client_get_settings(); 282 282 -
knowscapes-ai-client/tags/2.3.2/includes/class-providers.php
r3758580 r3798534 132 132 */ 133 133 public static function base_url( $provider, $custom_base_url = '' ) { 134 // Development only: wp-config.php can point both KnowScapes entries at a 135 // local backend. Plain http is accepted here because only someone who can 136 // edit wp-config.php can set it. 137 if ( defined( 'KNOWSCAPES_AI_CLIENT_API_URL' ) && in_array( $provider, array( 'knowscapes', 'knowscapes_paid' ), true ) ) { 138 return untrailingslashit( (string) KNOWSCAPES_AI_CLIENT_API_URL ); 139 } 140 134 141 $definition = self::get( $provider ); 135 142 -
knowscapes-ai-client/tags/2.3.2/includes/class-settings.php
r3758580 r3798534 364 364 $out['widget_enabled'] = ! empty( $input['widget_enabled'] ) && $out['consent']; 365 365 366 // Set only by the connect flow's programmatic write; a form save keeps it. 367 if ( isset( $input['connected'] ) ) { 368 $out['connected'] = (bool) $input['connected']; 369 } elseif ( ( $out['api_keys']['knowscapes'] ?? '' ) !== ( $current['api_keys']['knowscapes'] ?? '' ) ) { 370 // A key installed by hand or by the e-mail link is not a connected account. 371 $out['connected'] = false; 372 } 366 373 unset( $out['api_key'], $out['backend_url'], $out['agent_id'], $out['agent_label'], $out['_ts'] ); 367 374 … … 401 408 'restUrl' => esc_url_raw( rest_url( KnowScapes_AI_Client_REST_Proxy::REST_NS . '/models' ) ), 402 409 'nonce' => wp_create_nonce( 'wp_rest' ), 410 'statusUrl' => esc_url_raw( rest_url( KnowScapes_AI_Client_REST_Proxy::REST_NS . '/connect-status' ) ), 411 'connectI18n' => array( 412 'reading' => __( 'Reading the pages of your site…', 'knowscapes-ai-client' ), 413 /* translators: 1: pages indexed so far, 2: pages found. */ 414 'indexing' => __( 'Indexing pages: %1$d of %2$d.', 'knowscapes-ai-client' ), 415 'finishing' => __( 'Finishing the assistant…', 'knowscapes-ai-client' ), 416 /* translators: %d: number of pages indexed. */ 417 'ready' => __( 'Your assistant is ready. %d pages indexed.', 'knowscapes-ai-client' ), 418 'attention' => __( 'The assistant needs your attention.', 'knowscapes-ai-client' ), 419 'no_pages' => __( 'No pages could be read from your site. Check that it is public and not behind a password page.', 'knowscapes-ai-client' ), 420 'source_error' => __( 'Reading your site failed.', 'knowscapes-ai-client' ), 421 'processing_failed' => __( 'Building the assistant failed.', 'knowscapes-ai-client' ), 422 'unavailable' => __( 'Progress is unavailable right now. Retrying…', 'knowscapes-ai-client' ), 423 'configure' => __( 'Open in KnowScapes', 'knowscapes-ai-client' ), 424 'notConnected' => __( 'No assistant is linked to this key yet. Pick the agent above and save, or reconnect.', 'knowscapes-ai-client' ), 425 ), 403 426 'providers' => KnowScapes_AI_Client_Providers::all(), 404 427 // Booleans only. No key material is ever sent to the browser, not … … 574 597 575 598 <?php $this->render_key_request_row( $settings, '' !== $stored_key ); ?> 599 <?php if ( KnowScapes_AI_Client_Connect::available( $settings ) ) : ?> 600 <tr> 601 <th scope="row"><?php esc_html_e( 'KnowScapes account', 'knowscapes-ai-client' ); ?></th> 602 <td> 603 <?php if ( ! empty( $settings['connected'] ) ) : ?> 604 <div id="ksaic-connect-status" class="ksaic-connect-status" aria-live="polite"> 605 <p><?php esc_html_e( 'Loading progress…', 'knowscapes-ai-client' ); ?></p> 606 </div> 607 <?php endif; ?> 608 <p> 609 <a class="button button-secondary" href="<?php echo esc_url( KnowScapes_AI_Client_Connect::start_url() ); ?>"> 610 <?php 611 empty( $settings['connected'] ) 612 ? esc_html_e( 'Connect KnowScapes account', 'knowscapes-ai-client' ) 613 : esc_html_e( 'Reconnect KnowScapes account', 'knowscapes-ai-client' ); 614 ?> 615 </a> 616 </p> 617 <p class="description"> 618 <?php esc_html_e( 'Builds an assistant from the pages of this site in your own KnowScapes account and switches this plugin to it. The address of this site is sent to knowscapes.com when you connect.', 'knowscapes-ai-client' ); ?> 619 </p> 620 </td> 621 </tr> 622 <?php endif; ?> 576 623 577 624 <tr> … … 1477 1524 1478 1525 $notice = KnowScapes_AI_Client_Free_Key::notice_for( $code, $query ); 1526 if ( null === $notice ) { 1527 $notice = KnowScapes_AI_Client_Connect::notice_for( $code ); 1528 } 1479 1529 1480 1530 if ( null === $notice ) { -
knowscapes-ai-client/tags/2.3.2/knowscapes-ai-client.php
r3758580 r3798534 4 4 * Plugin URI: https://knowscapes.org/ 5 5 * Description: AI chat for your site, as a floating launcher or a shortcode. Works with your own OpenAI, Anthropic or OpenRouter key, or with a free fair-use key from KnowScapes. API keys stay server-side and are never exposed to visitors. 6 * Version: 2.3. 16 * Version: 2.3.2 7 7 * Requires at least: 6.5 8 8 * Requires PHP: 7.4 … … 18 18 defined( 'ABSPATH' ) || exit; 19 19 20 define( 'KNOWSCAPES_AI_CLIENT_VERSION', '2.3. 1' );20 define( 'KNOWSCAPES_AI_CLIENT_VERSION', '2.3.2' ); 21 21 22 22 /** … … 46 46 define( 'KNOWSCAPES_AI_CLIENT_OPTION', 'knowscapes_ai_client_settings' ); 47 47 48 /** 49 * Where the KnowScapes account site lives (the "Connect KnowScapes account" 50 * consent page). Overridable in wp-config.php for development only. 51 */ 52 if ( ! defined( 'KNOWSCAPES_AI_CLIENT_ACCOUNT_URL' ) ) { 53 define( 'KNOWSCAPES_AI_CLIENT_ACCOUNT_URL', 'https://knowscapes.com' ); 54 } 55 48 56 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-providers.php'; 49 57 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-api-client.php'; 50 58 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-context.php'; 51 59 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-free-key.php'; 60 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-connect.php'; 52 61 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-settings.php'; 53 62 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-rate-limiter.php'; … … 104 113 'consent' => false, 105 114 'widget_enabled' => false, 115 // True once the key came from "Connect KnowScapes account": the settings 116 // screen then follows the build of the site's assistant. 117 'connected' => false, 106 118 ); 107 119 } … … 217 229 new KnowScapes_AI_Client_Settings(); 218 230 new KnowScapes_AI_Client_Free_Key(); 231 new KnowScapes_AI_Client_Connect(); 219 232 new KnowScapes_AI_Client_REST_Proxy(); 220 233 new KnowScapes_AI_Client_Widget(); -
knowscapes-ai-client/tags/2.3.2/readme.txt
r3758580 r3798534 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 2.3. 17 Stable tag: 2.3.2 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 140 140 * Privacy policy: https://xplicator.com/legal-service-privacy/ 141 141 142 = KnowScapes account connect (xplicator GmbH) = 143 144 Used only when a free KnowScapes key is stored and you press **Connect 145 KnowScapes account**. It is never called automatically. 146 147 * **What is sent:** your browser is sent to the KnowScapes account site with the address of this site and the address of this plugin's return page in your WordPress admin area. After you allow the connection there, this site sends a one-time code to KnowScapes and receives an API key for an assistant built from the public pages of this site. KnowScapes then reads those public pages to build it. 148 * **When:** once per press of the button; while the assistant is being built, the settings screen asks KnowScapes for its progress every few seconds, authorised with that key. 149 * **Endpoints:** `https://knowscapes.com/plugin/connect` (in your browser), `https://knowscapes.com/api/connect/exchange`, `https://knowscapes.com/api/connect/status/<agent>` 150 * **Stored locally:** the API key, as with any key you enter, and for ten minutes a random value that ties the return to the button press. 151 * Terms of use: https://xplicator.com/legal-terms-of-use/ 152 * Privacy policy: https://xplicator.com/legal-service-privacy/ 153 142 154 = OpenAI = 143 155 … … 384 396 385 397 == Changelog == 398 399 = 2.3.2 = 400 * Added connection button for Knowscapes Platform 386 401 387 402 = 2.3.1 = -
knowscapes-ai-client/trunk/assets/js/admin.js
r3758580 r3798534 425 425 } ); 426 426 } )(); 427 428 /** 429 * Follows the build of the connected site's assistant until it is ready or 430 * needs attention. Reads through the plugin's own admin route, so no key 431 * reaches the browser. 432 */ 433 ( function () { 434 'use strict'; 435 436 var cfg = window.knowscapesAIClientAdmin; 437 var box = document.getElementById( 'ksaic-connect-status' ); 438 if ( ! cfg || ! box || ! cfg.statusUrl ) { 439 return; 440 } 441 var t = cfg.connectI18n; 442 443 function show( text, link ) { 444 var p = document.createElement( 'p' ); 445 p.textContent = text; 446 if ( link ) { 447 var a = document.createElement( 'a' ); 448 a.href = link; 449 a.target = '_blank'; 450 a.rel = 'noopener noreferrer'; 451 a.textContent = t.configure; 452 p.appendChild( document.createTextNode( ' ' ) ); 453 p.appendChild( a ); 454 } 455 box.replaceChildren( p ); 456 } 457 458 function describe( s ) { 459 if ( 'ready' === s.state ) { 460 return t.ready.replace( '%d', s.indexed ); 461 } 462 if ( 'attention' === s.state ) { 463 return t[ s.reason ] || t.attention; 464 } 465 if ( 'indexing' === s.state ) { 466 return t.indexing.replace( '%1$d', s.indexed ).replace( '%2$d', s.total ); 467 } 468 return t[ s.state ] || t.reading; 469 } 470 471 function poll() { 472 fetch( cfg.statusUrl, { 473 headers: { 'X-WP-Nonce': cfg.nonce }, 474 credentials: 'same-origin', 475 } ) 476 .then( function ( r ) { 477 if ( 404 === r.status ) { 478 show( t.notConnected ); 479 return null; 480 } 481 if ( ! r.ok ) { 482 throw new Error( String( r.status ) ); 483 } 484 return r.json(); 485 } ) 486 .then( function ( s ) { 487 if ( ! s ) { 488 return; 489 } 490 var settled = 'ready' === s.state || 'attention' === s.state; 491 show( describe( s ), settled ? s.configure_url : null ); 492 if ( ! settled ) { 493 setTimeout( poll, 5000 ); 494 } 495 } ) 496 .catch( function () { 497 show( t.unavailable ); 498 setTimeout( poll, 15000 ); 499 } ); 500 } 501 502 poll(); 503 } )(); -
knowscapes-ai-client/trunk/includes/class-free-key.php
r3758580 r3798534 270 270 // there is nothing left to choose and the next step is simply consenting and 271 271 // switching the widget on. A failure here is not a failure of the claim. 272 $this->redirect( $this->ensure_model() ? 'claimed_ready' : 'claimed' );272 $this->redirect( self::ensure_model() ? 'claimed_ready' : 'claimed' ); 273 273 } 274 274 … … 278 278 * @return bool True when an agent is now set, however it got there. 279 279 */ 280 p rivatefunction ensure_model() {280 public static function ensure_model() { 281 281 $settings = knowscapes_ai_client_get_settings(); 282 282 -
knowscapes-ai-client/trunk/includes/class-providers.php
r3758580 r3798534 132 132 */ 133 133 public static function base_url( $provider, $custom_base_url = '' ) { 134 // Development only: wp-config.php can point both KnowScapes entries at a 135 // local backend. Plain http is accepted here because only someone who can 136 // edit wp-config.php can set it. 137 if ( defined( 'KNOWSCAPES_AI_CLIENT_API_URL' ) && in_array( $provider, array( 'knowscapes', 'knowscapes_paid' ), true ) ) { 138 return untrailingslashit( (string) KNOWSCAPES_AI_CLIENT_API_URL ); 139 } 140 134 141 $definition = self::get( $provider ); 135 142 -
knowscapes-ai-client/trunk/includes/class-settings.php
r3758580 r3798534 364 364 $out['widget_enabled'] = ! empty( $input['widget_enabled'] ) && $out['consent']; 365 365 366 // Set only by the connect flow's programmatic write; a form save keeps it. 367 if ( isset( $input['connected'] ) ) { 368 $out['connected'] = (bool) $input['connected']; 369 } elseif ( ( $out['api_keys']['knowscapes'] ?? '' ) !== ( $current['api_keys']['knowscapes'] ?? '' ) ) { 370 // A key installed by hand or by the e-mail link is not a connected account. 371 $out['connected'] = false; 372 } 366 373 unset( $out['api_key'], $out['backend_url'], $out['agent_id'], $out['agent_label'], $out['_ts'] ); 367 374 … … 401 408 'restUrl' => esc_url_raw( rest_url( KnowScapes_AI_Client_REST_Proxy::REST_NS . '/models' ) ), 402 409 'nonce' => wp_create_nonce( 'wp_rest' ), 410 'statusUrl' => esc_url_raw( rest_url( KnowScapes_AI_Client_REST_Proxy::REST_NS . '/connect-status' ) ), 411 'connectI18n' => array( 412 'reading' => __( 'Reading the pages of your site…', 'knowscapes-ai-client' ), 413 /* translators: 1: pages indexed so far, 2: pages found. */ 414 'indexing' => __( 'Indexing pages: %1$d of %2$d.', 'knowscapes-ai-client' ), 415 'finishing' => __( 'Finishing the assistant…', 'knowscapes-ai-client' ), 416 /* translators: %d: number of pages indexed. */ 417 'ready' => __( 'Your assistant is ready. %d pages indexed.', 'knowscapes-ai-client' ), 418 'attention' => __( 'The assistant needs your attention.', 'knowscapes-ai-client' ), 419 'no_pages' => __( 'No pages could be read from your site. Check that it is public and not behind a password page.', 'knowscapes-ai-client' ), 420 'source_error' => __( 'Reading your site failed.', 'knowscapes-ai-client' ), 421 'processing_failed' => __( 'Building the assistant failed.', 'knowscapes-ai-client' ), 422 'unavailable' => __( 'Progress is unavailable right now. Retrying…', 'knowscapes-ai-client' ), 423 'configure' => __( 'Open in KnowScapes', 'knowscapes-ai-client' ), 424 'notConnected' => __( 'No assistant is linked to this key yet. Pick the agent above and save, or reconnect.', 'knowscapes-ai-client' ), 425 ), 403 426 'providers' => KnowScapes_AI_Client_Providers::all(), 404 427 // Booleans only. No key material is ever sent to the browser, not … … 574 597 575 598 <?php $this->render_key_request_row( $settings, '' !== $stored_key ); ?> 599 <?php if ( KnowScapes_AI_Client_Connect::available( $settings ) ) : ?> 600 <tr> 601 <th scope="row"><?php esc_html_e( 'KnowScapes account', 'knowscapes-ai-client' ); ?></th> 602 <td> 603 <?php if ( ! empty( $settings['connected'] ) ) : ?> 604 <div id="ksaic-connect-status" class="ksaic-connect-status" aria-live="polite"> 605 <p><?php esc_html_e( 'Loading progress…', 'knowscapes-ai-client' ); ?></p> 606 </div> 607 <?php endif; ?> 608 <p> 609 <a class="button button-secondary" href="<?php echo esc_url( KnowScapes_AI_Client_Connect::start_url() ); ?>"> 610 <?php 611 empty( $settings['connected'] ) 612 ? esc_html_e( 'Connect KnowScapes account', 'knowscapes-ai-client' ) 613 : esc_html_e( 'Reconnect KnowScapes account', 'knowscapes-ai-client' ); 614 ?> 615 </a> 616 </p> 617 <p class="description"> 618 <?php esc_html_e( 'Builds an assistant from the pages of this site in your own KnowScapes account and switches this plugin to it. The address of this site is sent to knowscapes.com when you connect.', 'knowscapes-ai-client' ); ?> 619 </p> 620 </td> 621 </tr> 622 <?php endif; ?> 576 623 577 624 <tr> … … 1477 1524 1478 1525 $notice = KnowScapes_AI_Client_Free_Key::notice_for( $code, $query ); 1526 if ( null === $notice ) { 1527 $notice = KnowScapes_AI_Client_Connect::notice_for( $code ); 1528 } 1479 1529 1480 1530 if ( null === $notice ) { -
knowscapes-ai-client/trunk/knowscapes-ai-client.php
r3758580 r3798534 4 4 * Plugin URI: https://knowscapes.org/ 5 5 * Description: AI chat for your site, as a floating launcher or a shortcode. Works with your own OpenAI, Anthropic or OpenRouter key, or with a free fair-use key from KnowScapes. API keys stay server-side and are never exposed to visitors. 6 * Version: 2.3. 16 * Version: 2.3.2 7 7 * Requires at least: 6.5 8 8 * Requires PHP: 7.4 … … 18 18 defined( 'ABSPATH' ) || exit; 19 19 20 define( 'KNOWSCAPES_AI_CLIENT_VERSION', '2.3. 1' );20 define( 'KNOWSCAPES_AI_CLIENT_VERSION', '2.3.2' ); 21 21 22 22 /** … … 46 46 define( 'KNOWSCAPES_AI_CLIENT_OPTION', 'knowscapes_ai_client_settings' ); 47 47 48 /** 49 * Where the KnowScapes account site lives (the "Connect KnowScapes account" 50 * consent page). Overridable in wp-config.php for development only. 51 */ 52 if ( ! defined( 'KNOWSCAPES_AI_CLIENT_ACCOUNT_URL' ) ) { 53 define( 'KNOWSCAPES_AI_CLIENT_ACCOUNT_URL', 'https://knowscapes.com' ); 54 } 55 48 56 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-providers.php'; 49 57 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-api-client.php'; 50 58 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-context.php'; 51 59 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-free-key.php'; 60 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-connect.php'; 52 61 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-settings.php'; 53 62 require_once KNOWSCAPES_AI_CLIENT_DIR . 'includes/class-rate-limiter.php'; … … 104 113 'consent' => false, 105 114 'widget_enabled' => false, 115 // True once the key came from "Connect KnowScapes account": the settings 116 // screen then follows the build of the site's assistant. 117 'connected' => false, 106 118 ); 107 119 } … … 217 229 new KnowScapes_AI_Client_Settings(); 218 230 new KnowScapes_AI_Client_Free_Key(); 231 new KnowScapes_AI_Client_Connect(); 219 232 new KnowScapes_AI_Client_REST_Proxy(); 220 233 new KnowScapes_AI_Client_Widget(); -
knowscapes-ai-client/trunk/readme.txt
r3758580 r3798534 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 2.3. 17 Stable tag: 2.3.2 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 140 140 * Privacy policy: https://xplicator.com/legal-service-privacy/ 141 141 142 = KnowScapes account connect (xplicator GmbH) = 143 144 Used only when a free KnowScapes key is stored and you press **Connect 145 KnowScapes account**. It is never called automatically. 146 147 * **What is sent:** your browser is sent to the KnowScapes account site with the address of this site and the address of this plugin's return page in your WordPress admin area. After you allow the connection there, this site sends a one-time code to KnowScapes and receives an API key for an assistant built from the public pages of this site. KnowScapes then reads those public pages to build it. 148 * **When:** once per press of the button; while the assistant is being built, the settings screen asks KnowScapes for its progress every few seconds, authorised with that key. 149 * **Endpoints:** `https://knowscapes.com/plugin/connect` (in your browser), `https://knowscapes.com/api/connect/exchange`, `https://knowscapes.com/api/connect/status/<agent>` 150 * **Stored locally:** the API key, as with any key you enter, and for ten minutes a random value that ties the return to the button press. 151 * Terms of use: https://xplicator.com/legal-terms-of-use/ 152 * Privacy policy: https://xplicator.com/legal-service-privacy/ 153 142 154 = OpenAI = 143 155 … … 384 396 385 397 == Changelog == 398 399 = 2.3.2 = 400 * Added connection button for Knowscapes Platform 386 401 387 402 = 2.3.1 =
Note:
See TracChangeset
for help on using the changeset viewer.