Skip to content

github(minor): change repositoryId from select to text; add NewAssignedIssue and NewMention triggers#1095

Open
apx-vero wants to merge 12 commits into
Appmixer-ai:devfrom
apx-vero:feat/github-repositoryid-text-triggers
Open

github(minor): change repositoryId from select to text; add NewAssignedIssue and NewMention triggers#1095
apx-vero wants to merge 12 commits into
Appmixer-ai:devfrom
apx-vero:feat/github-repositoryid-text-triggers

Conversation

@apx-vero

Copy link
Copy Markdown
Contributor

Summary

1. repositoryId: select → text (all 30 components)

All GitHub components using a dynamic ListRepos select now use text input instead, allowing any repository in owner/repo format (including org repos and public repos the user doesn't own).

Updated tooltip: Enter the repository in owner/repo format (e.g. octocat/Hello-World).

Affected components (30): CreateComment, CreateIssue, CreatePullRequest, DeleteBranch, FindIssue, FindPullRequest, GetPullRequestByNumber, ListAssignees, ListBranches, ListIssues, ListLabels, ListMilestones, ListPRs, ListPullRequests, NewBranch, NewCollaborator, NewCommit, NewCommitComment, NewEvent, NewIssue, NewLabel, NewMilestone, NewPullRequest, NewRelease, NewReviewRequest, NewStargazer, NewWatcher, SubmitReview, UpdateIssue, UpdatePullRequest

2. New trigger: NewAssignedIssue

Triggers when a new issue is assigned to the authenticated user. Uses GET /issues?filter=assigned. Optional repositoryId field scopes to a single repo.

3. New trigger: NewMention

Triggers when the authenticated user is mentioned in an issue, PR, or comment. Polls GET /notifications filtered by reason=mention.

Version: 2.1.1 → 2.2.0

@apx-vero apx-vero force-pushed the feat/github-repositoryid-text-triggers branch 5 times, most recently from f047ca9 to 34899f6 Compare May 15, 2026 14:06
Vero added 4 commits May 15, 2026 14:09
…edIssue and NewMention triggers

- Change repositoryId input from dynamic ListRepos select to free-text in all 30 components,
  allowing users to enter any repository (incl. org repos) in owner/repo format
- Add NewAssignedIssue trigger: polls /issues?filter=assigned for issues assigned to
  the authenticated user; optional repositoryId filter scopes to a single repo
- Add NewMention trigger: polls /notifications filtered by reason=mention, fires when
  the authenticated user is @mentioned in an issue, PR, or comment
- Bump version 2.1.1 → 2.2.0
…/repo example

Keep dynamic ListRepos source so users still get autocomplete suggestions,
while text type allows free entry of any owner/repo value.
Update tooltip to use Appmixer-ai/apmmixer-connectors as example.
@apx-vero apx-vero force-pushed the feat/github-repositoryid-text-triggers branch from 34899f6 to 0153b6f Compare May 15, 2026 14:10
@vtalas vtalas self-requested a review May 15, 2026 14:12
@vtalas vtalas requested review from vtalas and removed request for vtalas May 15, 2026 15:55
@Appmixer-ai Appmixer-ai deleted a comment from salatv-ai May 18, 2026
@Appmixer-ai Appmixer-ai deleted a comment from salatv-ai May 19, 2026
@Appmixer-ai Appmixer-ai deleted a comment from salatv-ai May 19, 2026
@vtalas vtalas requested a review from Copilot May 19, 2026 15:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the GitHub connector UX and trigger coverage by switching repositoryId from a dynamically-loaded select to a free-text owner/repo input across many components, and by adding two new polling triggers (assigned issues and mentions). It also expands output-port example schemas and adds defensive trimming of trigger state.

Changes:

  • Changed repositoryId inputs from select to text (with owner/repo validation pattern) across affected components.
  • Added new polling triggers: NewAssignedIssue and NewMention.
  • Added/expanded output-port schema.example values (and trimmed context.state.known in multiple polling triggers).

Reviewed changes

Copilot reviewed 65 out of 67 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/appmixer/github/list/UpdatePullRequest/component.json Expanded output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/UpdateIssue/component.json Expanded output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/SubmitReview/component.json Updated output option schemas/examples (notably simplified some nested object schemas).
src/appmixer/github/list/NewWatcher/NewWatcher.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewWatcher/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewTeam/NewTeam.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewTeam/component.json Added output option schemas/examples.
src/appmixer/github/list/NewStargazer/NewStargazer.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewStargazer/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewReviewRequest/NewReviewRequest.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewReviewRequest/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewRepository/NewRepository.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewRepository/component.json Added output option schemas/examples.
src/appmixer/github/list/NewRelease/NewRelease.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewRelease/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewPullRequest/NewPullRequest.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewPullRequest/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewOrganization/NewOrganization.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewOrganization/component.json Added output option schemas/examples.
src/appmixer/github/list/NewNotification/NewNotification.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewNotification/component.json Added output option schemas/examples.
src/appmixer/github/list/NewMilestone/NewMilestone.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewMilestone/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewMention/NewMention.js Added new polling trigger for mentions via Notifications API, using since + ID dedupe.
src/appmixer/github/list/NewMention/component.json Added new trigger manifest (properties + output options with examples).
src/appmixer/github/list/NewLabel/NewLabel.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewLabel/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewIssue/NewIssue.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewIssue/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewGlobalEvent/NewGlobalEvent.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewGlobalEvent/component.json Added output option schemas/examples.
src/appmixer/github/list/NewGist/NewGist.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewGist/component.json Added output option schemas/examples.
src/appmixer/github/list/NewEvent/NewEvent.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewEvent/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewCommitComment/NewCommitComment.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewCommitComment/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewCommit/NewCommit.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewCommit/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewCollaborator/NewCollaborator.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewCollaborator/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewBranch/NewBranch.js Trimmed saved known IDs to a capped size.
src/appmixer/github/list/NewBranch/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/NewAssignedIssue/NewAssignedIssue.js Added new polling trigger for issues assigned to authenticated user, optionally repo-scoped.
src/appmixer/github/list/NewAssignedIssue/component.json Added new trigger manifest with optional repositoryId and output examples.
src/appmixer/github/list/MakeApiCall/component.json Added example schema for status code output option.
src/appmixer/github/list/ListPullRequests/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListPRs/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListMilestones/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListLabels/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListIssues/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListBranches/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/ListAssignees/component.json Changed repositoryId inspector to text with pattern + tooltip.
src/appmixer/github/list/GetUser/component.json Updated output option examples/types (including nullable-related adjustments).
src/appmixer/github/list/GetPullRequestByNumber/component.json Changed repositoryId inspector to text; adjusted output option schemas/examples.
src/appmixer/github/list/GetOrganizationByName/component.json Added/adjusted output examples; updated nullable example for archived_at.
src/appmixer/github/list/FindPullRequest/component.json Changed repositoryId inspector to text with pattern + tooltip; formatted labels schema.
src/appmixer/github/list/FindIssue/component.json Changed repositoryId inspector to text with pattern + tooltip; formatted labels schema.
src/appmixer/github/list/DeleteBranch/component.json Changed repository selector to text; added output example; schema formatting.
src/appmixer/github/list/CreatePullRequest/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/CreateIssue/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/list/CreateComment/component.json Added output option schemas/examples; changed repositoryId inspector to text with pattern.
src/appmixer/github/lib.js Updated GitHub API request helper (header version change).
src/appmixer/github/bundle.json Bumped connector version to 2.2.0 and updated changelog.
scripts/validators/.thresholds.json Lowered validation threshold for output-port examples (ratchet update).
Comments suppressed due to low confidence (1)

src/appmixer/github/list/NewAssignedIssue/NewAssignedIssue.js:30

  • per_page=100 is hardcoded into the endpoint query string, but lib.apiRequest() already appends per_page: 100 via options.params. This can lead to duplicated query params (e.g. ...&per_page=100&per_page=100). Prefer passing params to apiRequest (and omit per_page from the action URL).
        let endpoint;
        if (repositoryId) {
            // Repo-specific: GET /repos/{owner}/{repo}/issues?assignee=@me&state=open
            endpoint = `repos/${repositoryId}/issues?assignee=@me&state=open&per_page=100`;
        } else {
            // Cross-repo: GET /issues?filter=assigned (returns all issues assigned to the auth user)
            endpoint = 'issues?filter=assigned&state=open&per_page=100';
        }

        const res = await lib.apiRequest(context, endpoint);

Comment on lines 300 to 304
"group": "config",
"label": "Repository",
"index": 1,
"tooltip": "Enter the repository in `owner/repo` format (e.g. `Appmixer-ai/apmmixer-connectors`). You can also pick from the dynamically loaded list of your repositories.",
"source": {
Comment on lines 324 to 328
"group": "config",
"label": "Repository",
"index": 1,
"tooltip": "Enter the repository in `owner/repo` format (e.g. `Appmixer-ai/apmmixer-connectors`). You can also pick from the dynamically loaded list of your repositories.",
"source": {
Comment on lines +20 to +33

let endpoint;
if (repositoryId) {
// Repo-specific: GET /repos/{owner}/{repo}/issues?assignee=@me&state=open
endpoint = `repos/${repositoryId}/issues?assignee=@me&state=open&per_page=100`;
} else {
// Cross-repo: GET /issues?filter=assigned (returns all issues assigned to the auth user)
endpoint = 'issues?filter=assigned&state=open&per_page=100';
}

const res = await lib.apiRequest(context, endpoint);

let known = Array.isArray(context.state.known) ? new Set(context.state.known) : null;
const { diff, actual } = lib.getNewItems(known, res.data, 'id');
Comment on lines +45 to +49
// since — server-side date filter: only notifications updated after the flow started.
// GitHub expects YYYY-MM-DDTHH:MM:SSZ (no milliseconds).
const since = encodeURIComponent(context.state.since);
const res = await lib.apiRequest(context, `notifications?all=true&since=${since}&per_page=100`);

Comment on lines +67 to +71
// Advance the since window to now so the next tick only fetches what's new.
// Trim known to MAX_KNOWN as a defensive cap (getNewItems already replaces — not
// accumulates — the set each tick, but we guard against unexpectedly large pages).
const trimmedKnown = actual.length > MAX_KNOWN ? actual.slice(actual.length - MAX_KNOWN) : actual;
await context.saveState({ known: trimmedKnown, since: nowIso() });
"value": "archived_at",
"schema": {
"type": "string"
"type": "string",
Comment on lines +225 to +226
"type": "boolean",
"example": false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants