paperclip-github-plugin 0.7.5 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,7 +44,7 @@ The plugin adds a full in-host workflow instead of a one-off import script:
44
44
  2. Connect one or more GitHub repositories to Paperclip projects.
45
45
  3. Run a sync manually or let the scheduled job keep things up to date.
46
46
 
47
- During sync, the plugin imports one top-level Paperclip issue per GitHub issue, stamps it with a namespaced GitHub Sync plugin origin, updates already imported issues instead of recreating them, maps GitHub labels into Paperclip labels, and keeps GitHub-specific metadata in dedicated Paperclip surfaces rather than stuffing everything into the issue description.
47
+ During sync, the plugin imports one top-level Paperclip issue per GitHub issue, stamps it with a namespaced GitHub Sync plugin origin, updates already imported issues instead of recreating them, maps GitHub labels into Paperclip labels, and keeps GitHub-specific metadata in dedicated Paperclip surfaces rather than stuffing everything into the issue description. On Paperclip `2026.428.0` and newer, the detail surfaces can also recover GitHub issue and pull request links from Paperclip's own `originKind` / `originId` fields when the plugin registry or legacy hidden marker is missing.
48
48
 
49
49
  When the host exposes plugin issue creation, imported GitHub issues are created through the Paperclip plugin SDK path so they are not attributed to the connected board user. The worker still uses direct local Paperclip REST calls for label sync and for description, assignee, or status repair paths when those routes are available.
50
50
 
@@ -90,12 +90,12 @@ Manual GitHub issue links are added to the same import registry and issue-link e
90
90
 
91
91
  ### Agent workflows built in
92
92
 
93
- Paperclip agents can search GitHub for duplicates, read and update issues, post comments, create pull requests, inspect changed files and CI, reply to review threads, resolve or unresolve threads, request reviewers, search org-level GitHub Projects, and associate pull requests with those projects without leaving the Paperclip plugin surface.
93
+ Paperclip agents can search GitHub for duplicates, read and update issues, assign issues to the saved token owner, post comments, create pull requests, inspect changed files and CI, reply to review threads, resolve or unresolve threads, request reviewers, search org-level GitHub Projects, and associate pull requests with those projects without leaving the Paperclip plugin surface.
94
94
 
95
95
  ## Requirements
96
96
 
97
97
  - Node.js 20+
98
- - a Paperclip host with plugin installation enabled. GitHub Sync is built and tested against Paperclip `2026.427.0`; the manifest relies on explicit capabilities instead of a strict host-version gate because current latest/development hosts can report `0.0.0` during plugin upgrade.
98
+ - a Paperclip host with plugin installation enabled. GitHub Sync is built and tested against Paperclip `2026.428.0`; the manifest relies on explicit capabilities instead of a strict host-version gate because current latest/development hosts can report `0.0.0` during plugin upgrade.
99
99
  - a GitHub token with API access to the repositories you want to sync
100
100
 
101
101
  ## Install from npm
@@ -207,9 +207,9 @@ Notes:
207
207
  The plugin exposes GitHub workflow tools to Paperclip agents, including:
208
208
 
209
209
  - repository-scoped search for issues and pull requests
210
- - issue reads, comment reads, comment writes, and metadata updates
210
+ - issue reads, comment reads, comment writes, metadata updates, and `assign_to_current_user` assignment to the saved token owner
211
211
  - pull request creation, reads, updates, changed-file inspection, and CI-check inspection
212
- - review-thread reads, replies, resolve and unresolve actions, and reviewer requests
212
+ - review-thread reads, replies, resolve and unresolve actions, and `request_pull_request_reviewers` reviewer requests
213
213
  - organization-level GitHub Project search/listing and pull-request-to-project association
214
214
 
215
215
  When an agent sends GitHub body content through the plugin, including issue bodies, pull request descriptions, comments, and review-thread replies, the plugin adds a GitHub-flavored Markdown footer with a horizontal rule and compact heading that discloses AI authorship. If the tool caller supplies `llmModel`, the footer also includes the model name, for example `###### ✨ This comment was AI-generated using gpt-5.4`.
@@ -283,11 +283,13 @@ Useful scripts:
283
283
 
284
284
  - `pnpm dev` watches the manifest, worker, and UI bundles and rebuilds them into `dist/`
285
285
  - `pnpm dev:ui` starts a local Paperclip plugin UI dev server from `dist/ui` on port `4177`
286
- - `pnpm test:e2e` builds the plugin, boots an isolated Paperclip instance, installs the plugin, and verifies the hosted settings page renders
287
- - `pnpm verify:manual` builds the plugin, boots a local-trusted Paperclip instance for manual inspection, seeds a `Dummy Company` with a mapped review project and a `CEO` agent on the Codex local adapter using model `gpt-5.4`, installs the plugin, and opens the company dashboard without seeding KPI history.
286
+ - `pnpm test:e2e` builds the plugin, boots an isolated Paperclip `2026.428.0` instance, installs the plugin, and verifies the hosted settings page renders
287
+ - `pnpm verify:manual` builds the plugin, boots a local-trusted Paperclip `2026.428.0` instance for manual inspection, seeds a `Dummy Company` with a mapped review project and a `CEO` agent on the Codex local adapter using model `gpt-5.4`, installs the plugin, and opens the company dashboard without seeding KPI history.
288
288
 
289
289
  For fast hosted UI iteration, run `pnpm dev` in one terminal and `pnpm dev:ui` in another.
290
290
 
291
+ Set `PAPERCLIP_E2E_PAPERCLIPAI_VERSION` to run e2e or manual verification against a different Paperclip release.
292
+
291
293
  If you want the seeded `CEO` agent used in manual verification to opt into Codex's bypass flag, set `PAPERCLIP_E2E_CEO_BYPASS_APPROVALS_AND_SANDBOX=true`.
292
294
 
293
295
  ## Release process
package/dist/manifest.js CHANGED
@@ -214,6 +214,21 @@ var GITHUB_AGENT_TOOLS = [
214
214
  }
215
215
  }
216
216
  },
217
+ {
218
+ name: "assign_to_current_user",
219
+ displayName: "Assign To Current User",
220
+ description: "Assign a GitHub issue to the GitHub user authenticated by the saved token, preserving any existing assignees.",
221
+ parametersSchema: {
222
+ type: "object",
223
+ additionalProperties: false,
224
+ ...issueTargetSchema,
225
+ properties: {
226
+ repository: repositoryProperty,
227
+ issueNumber: issueNumberProperty,
228
+ paperclipIssueId: paperclipIssueIdProperty
229
+ }
230
+ }
231
+ },
217
232
  {
218
233
  name: "add_issue_comment",
219
234
  displayName: "Add Issue Comment",
@@ -520,7 +535,7 @@ var COMPANY_METRIC_API_ROUTE_URL_PATH = `/api/plugins/${GITHUB_SYNC_PLUGIN_ID}/a
520
535
  var require2 = createRequire(import.meta.url);
521
536
  var packageJson = require2("../package.json");
522
537
  var SCHEDULE_TICK_CRON = "* * * * *";
523
- var MANIFEST_VERSION = "0.7.5"?.trim() || typeof packageJson.version === "string" && packageJson.version.trim() || process.env.npm_package_version?.trim() || "0.0.0-dev";
538
+ var MANIFEST_VERSION = "0.8.0"?.trim() || typeof packageJson.version === "string" && packageJson.version.trim() || process.env.npm_package_version?.trim() || "0.0.0-dev";
524
539
  var manifest = {
525
540
  id: GITHUB_SYNC_PLUGIN_ID,
526
541
  apiVersion: 1,
package/dist/ui/index.js CHANGED
@@ -34663,6 +34663,7 @@ function GitHubSyncIssueDetailTabContent(props) {
34663
34663
  const issueDetailsKind = issueDetails?.kind ?? "issue";
34664
34664
  const githubUrl = issueDetailsKind === "pull_request" ? issueDetails?.githubPullRequestUrl : issueDetails?.githubIssueUrl;
34665
34665
  const githubStateLabel = issueDetailsKind === "pull_request" ? issueDetails?.githubPullRequestState === "closed" ? "Closed" : "Open" : formatGitHubIssueState(issueDetails?.githubIssueState, issueDetails?.githubIssueStateReason);
34666
+ const showRecoveredLinkNote = issueDetails?.source === "issue_origin" || issueDetails?.kind !== "pull_request" && issueDetails?.source !== "entity";
34666
34667
  function closeManualLinkModal() {
34667
34668
  if (manualLinkPending) {
34668
34669
  return;
@@ -34841,7 +34842,7 @@ function GitHubSyncIssueDetailTabContent(props) {
34841
34842
  `${label.name}:${label.color ?? "none"}`
34842
34843
  )) })
34843
34844
  ] }) : null,
34844
- issueDetails.kind !== "pull_request" && issueDetails.source !== "entity" ? /* @__PURE__ */ jsx2("div", { className: "ghsync-extension-note", children: "GitHub Sync recovered this link from older sync metadata. Run sync once to refresh the creator, GitHub state, labels, and linked PRs in this panel." }) : null
34845
+ showRecoveredLinkNote ? /* @__PURE__ */ jsx2("div", { className: "ghsync-extension-note", children: issueDetails.source === "issue_origin" ? "GitHub Sync recovered this link from the Paperclip issue origin. Run sync once to refresh richer GitHub metadata in this panel." : "GitHub Sync recovered this link from older sync metadata. Run sync once to refresh the creator, GitHub state, labels, and linked PRs in this panel." }) : null
34845
34846
  ] }) : null,
34846
34847
  manualLinkOpen ? /* @__PURE__ */ jsx2("div", { className: "ghsync-link-modal-backdrop", onClick: closeManualLinkModal, children: /* @__PURE__ */ jsxs2(
34847
34848
  "div",