Skip to main content

Python SDK for iFlow CLI - AI Agent Integration

Project description

iFlow Python SDK

Python Version License WebSocket Protocol

A powerful Python SDK for interacting with iFlow CLI using the Agent Communication Protocol (ACP). Build AI-powered applications with full control over conversations, tool execution, and SubAgent orchestration.

โœจ Key Feature: The SDK automatically manages the iFlow process - no manual setup required!

Features

  • ๐Ÿš€ Automatic Process Management - Zero-config setup! SDK auto-starts and manages iFlow CLI
  • ๐Ÿ”Œ Smart Port Detection - Automatically finds available ports, no conflicts
  • ๐Ÿ”„ Bidirectional Communication - Real-time streaming of messages and responses
  • ๐Ÿ› ๏ธ Tool Call Management - Handle and control tool executions with fine-grained permissions
  • ๐Ÿค– SubAgent Support - Track and manage multiple AI agents with agent_id propagation
  • ๐Ÿ“‹ Task Planning - Receive and process structured task plans
  • ๐Ÿ” Raw Data Access - Debug and inspect protocol-level messages
  • โšก Async/Await Support - Modern asynchronous Python with full type hints
  • ๐ŸŽฏ Simple & Advanced APIs - From one-line queries to complex conversation management
  • ๐Ÿ“ฆ Full ACP v1 Protocol - Complete implementation of the Agent Communication Protocol

Installation

1. Install iFlow CLI

If you haven't installed iFlow CLI yet:

Mac/Linux/Ubuntu:

bash -c "$(curl -fsSL https://gitee.com/iflow-ai/iflow-cli/raw/main/install.sh)"

Windows:

npm install -g @iflow-ai/iflow-cli@latest

2. Install the SDK

From source (currently the only method):

git clone https://github.com/yourusername/iflow-cli-sdk-python.git
cd iflow-cli-sdk-python
pip install -e .

Coming soon to PyPI:

# Will be available after publishing to PyPI
pip install iflow-cli-sdk

Quick Start

The SDK automatically manages the iFlow process - no manual setup required!

Default Usage (Automatic Process Management)

import asyncio
from src.iflow_sdk import IFlowClient

async def main():
    # SDK automatically:
    # 1. Detects if iFlow is installed
    # 2. Starts iFlow process if not running
    # 3. Finds an available port
    # 4. Cleans up on exit
    async with IFlowClient() as client:
        await client.send_message("Hello, iFlow!")
        
        async for message in client.receive_messages():
            print(message)
            # Process messages...

asyncio.run(main())

No need to manually start iFlow! The SDK handles everything for you.

Advanced: Manual Process Control

If you need to manage iFlow yourself (rare cases):

import asyncio
from src.iflow_sdk import IFlowClient, IFlowOptions

async def main():
    # Disable automatic process management
    options = IFlowOptions(
        auto_start_process=False,
        url="ws://localhost:8090/acp"  # Connect to existing iFlow
    )
    
    async with IFlowClient(options) as client:
        await client.send_message("Hello, iFlow!")

asyncio.run(main())

Note: Manual mode requires you to start iFlow separately:

iflow --experimental-acp --port 8090

Simple Examples

Simple Query

import asyncio
from src.iflow_sdk import query

async def main():
    response = await query("What is the capital of France?")
    print(response)  # "The capital of France is Paris."

asyncio.run(main())

Interactive Conversation

import asyncio
from src.iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage

async def chat():
    async with IFlowClient() as client:
        await client.send_message("Explain quantum computing")
        
        async for message in client.receive_messages():
            if isinstance(message, AssistantMessage):
                print(message.chunk.text, end="", flush=True)
            elif isinstance(message, TaskFinishMessage):
                break

asyncio.run(chat())

Tool Call Control

import asyncio
from src.iflow_sdk import IFlowClient, IFlowOptions, PermissionMode, ToolCallMessage, TaskFinishMessage

async def main():
    options = IFlowOptions(permission_mode=PermissionMode.CONFIRM)
    
    async with IFlowClient(options) as client:
        await client.send_message("Create a file called test.txt")
        
        async for message in client.receive_messages():
            if isinstance(message, ToolCallMessage):
                print(f"Tool requested: {message.label}")
                # Tool calls are handled automatically based on permission_mode
            elif isinstance(message, TaskFinishMessage):
                break

asyncio.run(main())

API Reference

Core Classes

  • IFlowClient: Main client for bidirectional communication
  • IFlowOptions: Configuration options
  • RawDataClient: Access to raw protocol data

Message Types

  • AssistantMessage: AI assistant responses
  • ToolCallMessage: Tool execution requests
  • PlanMessage: Structured task plans
  • TaskFinishMessage: Task completion signal

Convenience Functions

  • query(prompt): Simple synchronous query
  • query_stream(prompt): Streaming responses
  • query_sync(prompt): Synchronous with timeout

Project Structure

iflow-sdk-python/
โ”œโ”€โ”€ src/iflow_sdk/
โ”‚   โ”œโ”€โ”€ __init__.py          # Public API exports
โ”‚   โ”œโ”€โ”€ client.py            # Main IFlowClient implementation
โ”‚   โ”œโ”€โ”€ query.py             # Simple query functions
โ”‚   โ”œโ”€โ”€ types.py             # Type definitions and messages
โ”‚   โ”œโ”€โ”€ raw_client.py        # Raw protocol access
โ”‚   โ””โ”€โ”€ _internal/
โ”‚       โ”œโ”€โ”€ protocol.py      # ACP protocol handler
โ”‚       โ”œโ”€โ”€ transport.py     # WebSocket transport layer
โ”‚       โ””โ”€โ”€ launcher.py      # iFlow process management
โ”œโ”€โ”€ tests/                   # Test suite
โ”‚   โ”œโ”€โ”€ test_basic.py        # Basic functionality tests
โ”‚   โ””โ”€โ”€ test_protocol.py     # Protocol compliance tests
โ”œโ”€โ”€ examples/                # Usage examples
โ”‚   โ”œโ”€โ”€ comprehensive_demo.py
โ”‚   โ”œโ”€โ”€ quick_start.py
โ”‚   โ””โ”€โ”€ advanced_client.py
โ””โ”€โ”€ docs/                    # Documentation

Development

Running Tests

# Run all tests
pytest tests/

# Run with coverage
pytest tests/ --cov=src/iflow_sdk

# Run specific test
pytest tests/test_basic.py

Code Quality

# Format code
black src/ tests/

# Sort imports
isort src/ tests/

# Check style
flake8 src/ tests/

Protocol Support

The SDK implements the Agent Communication Protocol (ACP) v1, supporting:

  • Session Management: Create, load, and manage conversation sessions
  • Message Types:
    • agent_message_chunk - Assistant responses
    • agent_thought_chunk - Internal reasoning
    • tool_call / tool_call_update - Tool execution lifecycle
    • plan - Structured task planning
    • user_message_chunk - User message echoing
  • Authentication: Built-in iFlow authentication
  • File System Access: Read/write file permissions
  • SubAgent Support: Full agent_id tracking and management

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support


Built with โค๏ธ for the AI development community

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_sdk-0.1.0.tar.gz (34.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iflow_sdk-0.1.0-py3-none-any.whl (33.2 kB view details)

Uploaded Python 3

File details

Details for the file iflow_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: iflow_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 34.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for iflow_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8691b8a0333b022289744f7cdf4bcfeb5a3adcf6f3fb8abe29a7e0dc5f799107
MD5 4c8b30cbcf477641f9c8a1cc70b2555a
BLAKE2b-256 ac189b2dd24011268d390f70de1db3d31ee53399b6d3b2f03ae772a264371cb4

See more details on using hashes here.

File details

Details for the file iflow_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: iflow_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for iflow_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b7b23fc448c38fb42b425ed382e13ae2df12b7b1105790518780ddc4085b698
MD5 37ec2e0bc5d295cba089465594931ea5
BLAKE2b-256 abb1595a6d5dc4ac3957fb375a1a886f4efae4531dd433aa72f4c19d39d8813a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page