PHPackages                             conduit-ui/issue - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. conduit-ui/issue

ActiveLibrary[API Development](/categories/api)

conduit-ui/issue
================

GitHub issue management for agents

v1.0.0-RC1(4mo ago)03[10 issues](https://github.com/conduit-ui/issue/issues)[4 PRs](https://github.com/conduit-ui/issue/pulls)MITPHPPHP ^8.2|^8.3|^8.4CI passing

Since Dec 14Pushed 4mo agoCompare

[ Source](https://github.com/conduit-ui/issue)[ Packagist](https://packagist.org/packages/conduit-ui/issue)[ Docs](https://github.com/conduit-ui/issue)[ RSS](/packages/conduit-ui-issue/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (15)Versions (10)Used By (0)

GitHub Issue Management Built for Scale
=======================================

[](#github-issue-management-built-for-scale)

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.

[![Sentinel Certified](https://camo.githubusercontent.com/37f40ed99350bbd37a19440bc82f28b1a79c0dc683118b75872f08f25d57bb7e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f636f6e647569742d75692f69737375652f676174652e796d6c3f6c6162656c3d53656e74696e656c253230436572746966696564267374796c653d666c61742d737175617265)](https://github.com/conduit-ui/issue/actions/workflows/gate.yml)[![Latest Version](https://camo.githubusercontent.com/d067de6fb20ae2ce3b9e78d8867bd65b52cffd75f744e942d9fbea5d9fdcd58d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f6e647569742d75692f69737375652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/conduit-ui/issue)[![MIT License](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Total Downloads](https://camo.githubusercontent.com/3307e2d82574d0188ba8b9ec9336fbc87aec1c69e83acc7ddbce2b09db806f58/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636f6e647569742d75692f69737375652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/conduit-ui/issue)

Installation
------------

[](#installation)

```
composer require conduit-ui/issue
```

Why This Exists
---------------

[](#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
-----------

[](#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
-------------

[](#core-features)

**Smart Labeling**

```
// Add, remove, or replace labels in bulk
Issue::find('owner/repo', 456)
    ->addLabels(['bug', 'urgent'])
    ->removeLabels(['question'])
    ->save();
```

**Assignment &amp; 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();
```

**Comment Reactions**

```
use ConduitUI\Issue\Facades\Issue;

// Add a reaction to a comment
$reaction = Issue::createCommentReaction('owner', 'repo', $commentId, '+1');

// List all reactions on a comment
$reactions = Issue::listCommentReactions('owner', 'repo', $commentId);

// Filter reactions by type
$thumbsUp = $reactions->filter(fn($r) => $r->isThumbsUp());

// Remove a reaction
Issue::deleteCommentReaction('owner', 'repo', $commentId, $reactionId);
```

Available reaction types: `+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`

**Lock &amp; Unlock**

```
// Lock heated discussions
$issue->lock('too heated');

// Unlock when ready
$issue->unlock();
```

Usage Patterns
--------------

[](#usage-patterns)

### Static API (Quick Operations)

[](#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)

[](#instance-api-multiple-operations)

```
use ConduitUI\Issue\IssueManager;

$manager = new IssueManager('owner/repo');
$issue = $manager->find(123);
$issues = $manager->query()->open()->get();
```

Data Objects
------------

[](#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
--------------------

[](#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
-------------

[](#configuration)

Publish the config file:

```
php artisan vendor:publish --tag="issue-config"
```

Set your GitHub token in `.env`:

```
GITHUB_TOKEN=your-github-token
```

Requirements
------------

[](#requirements)

- PHP 8.2+
- GitHub personal access token with `repo` scope

Testing
-------

[](#testing)

```
composer test
```

Related Packages
----------------

[](#related-packages)

- [conduit-ui/pr](https://github.com/conduit-ui/pr) - Pull request automation
- [conduit-ui/repo](https://github.com/conduit-ui/repo) - Repository governance
- [conduit-ui/connector](https://github.com/conduit-ui/connector) - GitHub API transport layer

Enterprise Support
------------------

[](#enterprise-support)

Managing issues across 100+ repositories? Contact  for custom automation solutions.

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE.md) for details.

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance75

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

140d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a6bb27de88a541a632427686306c8fc56366d72582f6a3316d20500efe7971f3?d=identicon)[conduit-ui](/maintainers/conduit-ui)

---

Top Contributors

[![jordanpartridge](https://avatars.githubusercontent.com/u/9040417?v=4)](https://github.com/jordanpartridge "jordanpartridge (32 commits)")

---

Tags

apilaravelgithubsaloonissuesconduit-ui

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/conduit-ui-issue/health.svg)

```
[![Health](https://phpackages.com/badges/conduit-ui-issue/health.svg)](https://phpackages.com/packages/conduit-ui-issue)
```

###  Alternatives

[scalar/laravel

Render your OpenAPI-based API reference

6183.9k2](/packages/scalar-laravel)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1221.1k](/packages/codebar-ag-laravel-docuware)[codebar-ag/laravel-zammad

Zammad integration with Laravel

106.1k](/packages/codebar-ag-laravel-zammad)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
