conduit-ui / issue
GitHub issue management for agents
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 6
pkg:composer/conduit-ui/issue
Requires
- php: ^8.2|^8.3|^8.4
- conduit-ui/connector: ^1.0
- illuminate/contracts: ^10.0||^11.0||^12.0
- saloonphp/saloon: ^3.10
- spatie/laravel-package-tools: ^1.16|^2.0
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.14
- mockery/mockery: ^1.6
- nunomaduro/collision: ^7.0||^8.0
- orchestra/testbench: ^8.22||^9.0||^10.0||^11.0
- pestphp/pest: ^2.34||^3.0
- pestphp/pest-plugin-arch: ^2.7||^3.0
- pestphp/pest-plugin-laravel: ^2.3||^3.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- dev-master
- dev-chore/100-percent-coverage-and-contributing
- dev-fix/milestone-validation-coverage
- dev-chore/add-gate-workflow
- dev-feature/explicit-requests-and-error-handling
- dev-feature/add-milestone-functionality
- dev-feature/issue-events-timeline
- dev-feature/issue-comments
- dev-claude/github-integration-01M1TQ26QCQACm3gmKVwtwFi
This package is auto-updated.
Last update: 2025-12-15 04:05:26 UTC
README
Stop manually triaging issues. Start automating the repetitive work that keeps your team from shipping.
Bulk label, assign, close, and route issues across repositories with clean PHP code. Built for teams managing hundreds of issues across multiple projects.
Installation
composer require conduit-ui/issue
Why This Exists
Your team creates 50+ issues per week. You're manually labeling bugs, assigning features to team members, and closing duplicates. This package gives you the tools to automate all of it.
Quick Start
use ConduitUI\Issue\Issue; // Find and update a single issue Issue::find('owner/repo', 123) ->addLabels(['bug', 'priority-high']) ->assignTo('username') ->save(); // Bulk operations across multiple issues Issue::query('owner/repo') ->state('open') ->label('needs-triage') ->get() ->each(fn($issue) => $issue ->removeLabels(['needs-triage']) ->addLabels(['triaged']) ->save() );
Core Features
Smart Labeling
// Add, remove, or replace labels in bulk Issue::find('owner/repo', 456) ->addLabels(['bug', 'urgent']) ->removeLabels(['question']) ->save();
Assignment & Routing
// Route issues to team members based on labels Issue::query('owner/repo') ->label('frontend') ->open() ->get() ->each(fn($issue) => $issue->assignTo('frontend-team'));
Bulk State Management
// Close stale issues automatically Issue::query('owner/repo') ->state('open') ->updatedBefore(now()->subMonths(6)) ->get() ->each(fn($issue) => $issue->close('Closing due to inactivity'));
Advanced Filtering
Issue::query('owner/repo') ->author('username') ->assignee('team-member') ->labels(['bug', 'priority-high']) ->since(now()->subWeek()) ->sort('created', 'desc') ->get();
Comment Management
// Add automated responses $issue = Issue::find('owner/repo', 789); $issue->comment('Thanks for reporting! Our team will investigate.'); // Get all comments $comments = $issue->comments();
Lock & Unlock
// Lock heated discussions $issue->lock('too heated'); // Unlock when ready $issue->unlock();
Usage Patterns
Static API (Quick Operations)
use ConduitUI\Issue\Issue; $issue = Issue::find('owner/repo', 123); $issues = Issue::query('owner/repo')->open()->get();
Instance API (Multiple Operations)
use ConduitUI\Issue\IssueManager; $manager = new IssueManager('owner/repo'); $issue = $manager->find(123); $issues = $manager->query()->open()->get();
Data Objects
All responses return strongly-typed DTOs:
$issue->id; // int $issue->number; // int $issue->title; // string $issue->state; // 'open' | 'closed' $issue->author; // User object $issue->assignees; // Collection of User objects $issue->labels; // Collection of Label objects $issue->createdAt; // Carbon instance $issue->updatedAt; // Carbon instance $issue->closedAt; // ?Carbon instance
Real-World Use Cases
Automated Triage Bot
// Label bugs automatically based on title keywords Issue::query('owner/repo') ->state('open') ->created('after', now()->subHour()) ->get() ->filter(fn($issue) => str_contains(strtolower($issue->title), 'bug')) ->each(fn($issue) => $issue->addLabels(['bug', 'needs-triage']));
Team Assignment
// Route issues to on-call team member $oncall = getOncallEngineer(); // Your function Issue::query('owner/repo') ->label('incident') ->open() ->get() ->each(fn($issue) => $issue->assignTo($oncall));
Stale Issue Cleanup
// Close issues with no activity for 90 days Issue::query('owner/repo') ->state('open') ->updatedBefore(now()->subDays(90)) ->get() ->each(function($issue) { $issue->comment('Closing due to inactivity. Please reopen if still relevant.'); $issue->close(); });
Configuration
Publish the config file:
php artisan vendor:publish --tag="issue-config"
Set your GitHub token in .env:
GITHUB_TOKEN=your-github-token
Requirements
- PHP 8.2+
- GitHub personal access token with
reposcope
Testing
composer test
Related Packages
- conduit-ui/pr - Pull request automation
- conduit-ui/repo - Repository governance
- conduit-ui/connector - GitHub API transport layer
Enterprise Support
Managing issues across 100+ repositories? Contact jordan@partridge.rocks for custom automation solutions.
License
MIT License. See LICENSE for details.