diff --git a/composer.json b/composer.json index 5f6d394..c1b15dc 100644 --- a/composer.json +++ b/composer.json @@ -19,8 +19,7 @@ "agents-api.php" ], "classmap": [ - "src/Registry/class-wp-agent.php", - "src/Packages/" + "src/" ] }, "suggest": { diff --git a/tests/composer-autoload-smoke.php b/tests/composer-autoload-smoke.php index 7b9e1a2..0c5bd52 100644 --- a/tests/composer-autoload-smoke.php +++ b/tests/composer-autoload-smoke.php @@ -22,9 +22,20 @@ exit( 1 ); } +$outcome_file = $loader->findFile( 'AgentsAPI\\AI\\WP_Agent_Run_Outcome' ); +if ( ! is_string( $outcome_file ) || ! str_ends_with( str_replace( '\\', '/', $outcome_file ), '/src/Runtime/class-wp-agent-run-outcome.php' ) ) { + fwrite( STDERR, "FAIL: Composer classmap does not expose WP_Agent_Run_Outcome.\n" ); + exit( 1 ); +} + if ( class_exists( 'WP_Agent_Package', false ) ) { fwrite( STDERR, "FAIL: Composer autoload eagerly loaded WP_Agent_Package outside WordPress.\n" ); exit( 1 ); } -echo "PASS: Composer autoload returns without WordPress and exposes package classmaps lazily.\n"; +if ( class_exists( 'AgentsAPI\\AI\\WP_Agent_Run_Outcome', false ) ) { + fwrite( STDERR, "FAIL: Composer autoload eagerly loaded WP_Agent_Run_Outcome outside WordPress.\n" ); + exit( 1 ); +} + +echo "PASS: Composer autoload returns without WordPress and exposes public classmaps lazily.\n"; diff --git a/tests/fixtures/phpstan-consumer.php b/tests/fixtures/phpstan-consumer.php index 8356f39..43c1f6a 100644 --- a/tests/fixtures/phpstan-consumer.php +++ b/tests/fixtures/phpstan-consumer.php @@ -5,6 +5,12 @@ * @package AgentsAPI\Tests */ +use AgentsAPI\AI\Tools\WP_Agent_Tool_Executor; +use AgentsAPI\AI\WP_Agent_Conversation_Completion_Policy; +use AgentsAPI\AI\WP_Agent_Run_Outcome; +use AgentsAPI\AI\WP_Agent_Runtime_Tool_Request; +use AgentsAPI\AI\WP_Agent_Transcript_Persister; + /** * Exercise package types without loading the WordPress runtime bootstrap. * @@ -21,3 +27,33 @@ function agents_api_phpstan_consume_package( WP_Agent_Package $package ): array WP_Agent_Package_Artifact_Hasher::hash( array() ), ); } + +/** + * Exercise conversation/runtime contracts from a Composer consumer. + * + * @param WP_Agent_Conversation_Completion_Policy $policy Completion policy. + * @param WP_Agent_Transcript_Persister $persister Transcript persister. + * @param WP_Agent_Tool_Executor $executor Tool executor. + * @return array + */ +function agents_api_phpstan_consume_runtime( + WP_Agent_Conversation_Completion_Policy $policy, + WP_Agent_Transcript_Persister $persister, + WP_Agent_Tool_Executor $executor +): array { + return array( + $policy, + $persister, + $executor, + WP_Agent_Run_Outcome::normalize( null, array( 'completed' => true ) ), + WP_Agent_Runtime_Tool_Request::normalize( + array( + 'id' => 'request-1', + 'tool_call_id' => 'call-1', + 'tool_name' => 'example/tool', + 'parameters' => array(), + 'status' => WP_Agent_Runtime_Tool_Request::STATUS_PENDING, + ) + ), + ); +}