Repository navigation
Releases: conduit-ui/connector
Release list
v1.1.0 — Rate limiting and intelligent retry
Adds opt-in GitHub API rate limiting with configurable retry and exponential backoff. Fully backward-compatible — no changes to existing consumers.
New public API
- `ConduitUi\GitHubConnector\RateLimit\RateLimitConfig` — readonly value object configuring retry attempts, delay, exponential backoff, and throw behavior.
- `ConduitUi\GitHubConnector\RateLimit\RateLimitState` — tracks GitHub rate limit headers (`X-RateLimit-Limit`, `Remaining`, `Reset`, `Used`) across every response.
- `ConduitUi\GitHubConnector\RateLimit\HasRateLimiting` — trait providing retry logic integrated with Saloon's `HasTries`.
- `Connector::withRateLimiting()` fluent enabler, plus an optional second constructor argument.
Behavior
- State tracking is always on — `$connector->rateLimitState()` reflects the latest response headers regardless of whether retry is enabled.
- Automatic retry is opt-in — pass a `RateLimitConfig` to the constructor or call `withRateLimiting()`.
- Retries on rate-limit exhaustion (403 + `X-RateLimit-Remaining: 0`) and 5xx server errors.
- Non-retryable errors (401, 404, 422, plain 403) throw immediately.
Usage
```php
use ConduitUi\GitHubConnector\Connector;
use ConduitUi\GitHubConnector\RateLimit\RateLimitConfig;
// Opt-in via constructor
$connector = new Connector($token, new RateLimitConfig(
retryAttempts: 3,
retryDelay: 1000,
useExponentialBackoff: true,
));
// Or fluently
$connector = (new Connector($token))->withRateLimiting();
// State is always available
$state = $connector->rateLimitState();
$state->getRemaining();
$state->isExceeded();
```
Downstream impact
Zero for existing consumers. `conduit-ui/pr` and other `^1.0` consumers automatically receive the new API but use none of it unless they call into it explicitly.
Closes #3.
v1.0.1 — Saloon 4 security upgrade
Security release. Upgrades Saloon to v4 and bumps two dev dependencies to clear all pending Composer audit advisories. No public API changes — drop-in upgrade from v1.0.0.
CVEs resolved
| Package | CVE | Severity |
|---|---|---|
| saloonphp/saloon | CVE-2026-33942 | high — insecure deserialization in AccessTokenAuthenticator |
| saloonphp/saloon | CVE-2026-33183 | medium — fixture name path traversal |
| saloonphp/saloon | CVE-2026-33182 | medium — SSRF / credential leak via absolute URL overriding base URL |
| phpunit/phpunit (dev) | CVE-2026-24765 | unsafe deserialization in PHPT code coverage handling |
| symfony/process (dev) | CVE-2026-24739 | argument escaping under MSYS2/Git Bash |
Changes
- saloonphp/saloon ^3.10 → ^4.0
- phpunit/phpunit 11.5.33 → 11.5.50 (transitive via Pest)
- symfony/process v7.4.0 → v7.4.11 (transitive)
Downstream impact
Zero. The connector does not leak any Saloon type whose shape changed in v4. Consumers (e.g. `conduit-ui/pr`) using the `^1.0` constraint receive this update automatically via `composer update` and require no code changes.
Closes #28.
v1.0.0 - Connector: Foundation for Agent Operations
Connector v1.0.0 - Foundation for Deterministic Agent Operations
Overview
The Connector package is the foundational HTTP transport layer for the Conduit ecosystem. It provides bare-metal GitHub API operations that agents need to work deterministically with repositories, issues, and pull requests.
Why Connector Exists
Agents need predictable, testable GitHub operations - not fancy wrappers or opinionated abstractions. Connector is deliberately minimal:
- Pure transport: HTTP + authentication, nothing more
- No business logic: Domain operations live in higher-level packages (issues, prs, repos)
- Deterministic: Same input → same output, always
- Testable: 24 tests, 54 assertions, all passing
Architecture Position
```
┌─────────────────────────────────────────────┐
│ Agent Swarms (Docker) │
│ architect | implementer | tester | reviewer│
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ Domain Packages │
│ conduit-ui/issues │
│ conduit-ui/prs │
│ conduit-ui/repos │
└─────────────────┬───────────────────────────┘
│
┌─────────────────▼───────────────────────────┐
│ conduit-ui/connector │
│ HTTP transport + GitHub auth │
│ Exception mapping + rate limiting │
└─────────────────┬───────────────────────────┘
│
▼
GitHub API v3
```
Changes from github-connector
This release completes the rename from `github-connector` to `connector`:
Breaking Changes
- Package: `conduit-ui/github-connector` → `conduit-ui/connector`
- Class: `GithubConnector` → `Connector`
- Interface: `GithubConnectorInterface` → `ConnectorInterface`
- Namespace: `ConduitUI\GithubConnector` → `ConduitUi\GitHubConnector`
Migration
```php
// Before
use ConduitUI\GithubConnector\GithubConnector;
$connector = new GithubConnector($token);
// After
use ConduitUi\GitHubConnector\Connector;
$connector = new Connector($token);
```
Features
- Saloon v3 Integration: Modern HTTP client with excellent DX
- GitHub Authentication: Token-based auth with proper headers
- Exception Hierarchy:
- `AuthenticationException` (401)
- `ValidationException` (422)
- `ResourceNotFoundException` (404)
- `RateLimitException` (403 with rate limit headers)
- `ForbiddenException` (403 without rate limit)
- `ServerException` (5xx)
- Rate Limit Detection: Automatic detection from response headers
- PSR-12 Compliant: Clean, consistent code style
- PHPStan Max Level: Zero static analysis errors
Requirements
- PHP 8.2, 8.3, or 8.4
- Saloon ^3.10
Installation
```bash
composer require conduit-ui/connector
```
Usage
```php
use ConduitUi\GitHubConnector\Connector;
$connector = new Connector(env('GITHUB_TOKEN'));
// GET request
$response = $connector->send(
$connector->get('/repos/owner/repo')
);
// POST request
$response = $connector->send(
$connector->post('/repos/owner/repo/issues', [
'title' => 'New issue',
'body' => 'Issue description'
])
);
```
Conduit Strategy
The Vision
Conduit is a developer liberation platform - escape corporate tool tyranny with component-based, AI-orchestrated workflows. The ecosystem consists of:
- connector (this package) - HTTP transport foundation
- issues/prs/repos - Domain operations built on connector
- the-shit/agents - Laravel Zero CLI for agent deployment
- the-shit/chat - Human orchestration layer
Agent Architecture (Joe Justice Principles)
- Swarm methodology: Multiple agents attack problems in parallel
- Mob programming for AI: Architect designs, implementer builds, tester validates, reviewer approves
- Humans as orchestrators: Strategic guidance, not line-by-line coding
- Bad PR > No PR: Ship fast, iterate faster
Musk's Algorithm Applied
- Question the requirement: Do we need this abstraction?
- Delete: Remove unnecessary complexity (github-zero → gh CLI)
- Simplify: Single-word package names, minimal APIs
- Accelerate: Parallel agent execution
- Automate: Event-driven orchestration
Test Results
```
PASS Tests\Unit\ConnectorTest (7 tests)
PASS Tests\Unit\ConnectorExceptionMappingTest (7 tests)
PASS Tests\Unit\ConnectorRateLimitHeaderTest (5 tests)
PASS Tests\Unit\Exceptions\GitHubExceptionTest (5 tests)
Tests: 24 passed (54 assertions)
Duration: 0.19s
```
What's Next
- v1.1.0: GraphQL support for complex queries
- v1.2.0: Webhook signature verification
- v2.0.0: Multi-provider support (GitLab, Bitbucket)
Contributing
Issues and PRs welcome at conduit-ui/connector
Part of the Conduit ecosystem - Your personal developer API gateway
🚀 Alpha Release v1.0.0-alpha.1
🚀 First Alpha Release
ConduitUi GitHub Connector - A professional GitHub API connector built with Saloon HTTP client.
✨ Features
- 🔐 Token Authentication: Secure GitHub personal access token support
- 🌐 Full HTTP Methods: Complete support for GET, POST, PUT, PATCH, DELETE
- ⚡ Saloon Integration: Built on the powerful Saloon HTTP client
- 🧪 Comprehensive Tests: 11 Pest tests with 100% pass rate
- 🔄 CI/CD Pipeline: Automated testing on PHP 8.2, 8.3, 8.4
- 📊 Static Analysis: PHPStan level 4 validation
- 🎨 Code Quality: Laravel Pint formatting
- 📚 Documentation: Professional docstrings throughout
📦 Installation
composer require conduit-ui/github-connector:^1.0.0-alpha.1🚀 Usage
use ConduitUi\GitHubConnector\GithubConnector;
$connector = new GithubConnector('your-github-token');
// Make API requests
$repos = $connector->get('/user/repos');
$newRepo = $connector->post('/user/repos', ['name' => 'my-repo']);⚠️ Alpha Notice
This is an alpha release for early testing and feedback. The API is stable but may change before the 1.0 release.
🤝 Contributing
Found an issue? Have feedback? Please open an issue or submit a PR!