@gaud_erp/paperclip-github-manager 0.4.0 → 1.0.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
@@ -1,92 +1,132 @@
1
- # @gaud_erp/paperclip-github-manager
1
+ # GitHub Manager v2 — Paperclip Plugin
2
2
 
3
- Paperclip connector plugin for GitHub repository listing, PR/issue sync, and webhook registration.
3
+ Plugin para o Paperclip que integra repositórios GitHub com sincronização local, PRs vinculados a cards, revisão de código por agentes IA, e knowledge graphs.
4
4
 
5
- ## Features
5
+ ## Funcionalidades
6
6
 
7
- - List repositories for the authenticated user
8
- - Sync open pull requests and issues (manual actions + scheduled job)
9
- - Register GitHub webhooks pointing at the Paperclip host inbound URL
10
- - Dashboard health widget and full **GitHub** page in the host UI
11
- - **Agent tools** for autonomous PR code review (diff, inline comments, review verdict, file read, repo list, issue search)
7
+ - **Sync 3 camadas**: webhooks (tempo real), cron 5min (safety net), sync manual completo
8
+ - **PR Card**: detecção automática de links via branch/título (CARD-123, #456)
9
+ - **Review por agentes**: ferramentas para agentes IA revisarem PRs (diff, comentários inline, veredito)
10
+ - **Quick check**: checklist automático (descrição, testes, arquivos sensíveis)
11
+ - **Graphify**: knowledge graphs de alto nível e por repositório
12
+ - **DB local**: zero chamadas à API GitHub ao renderizar UI — tudo lido do banco
12
13
 
13
- ## Agent reviewer workflow
14
+ ## Arquitetura
14
15
 
15
- Tools are exposed to Paperclip agents as `cus.github-manager/github_*` (plugin-namespaced at runtime).
16
-
17
- 1. **Collect** `github_get_pull_request_diff` with `owner`, `repo`, `pr_number`
18
- 2. **Analyze** agent reads metadata + unified diff (truncated above ~120k chars with a changed-files index)
19
- 3. **Context** (optional) `github_read_file_content` when the diff is insufficient
20
- 4. **Inline feedback** (optional) — `github_create_review_comment` per finding (`commit_id` = PR head SHA)
21
- 5. **Verdict** `github_submit_pr_review` with `APPROVE`, `REQUEST_CHANGES`, or `COMMENT`
22
-
23
- Supporting tools: `github_list_repositories`, `github_search_issues`.
16
+ ```
17
+ src/
18
+ manifest.ts — declaração de capabilities, slots, tools, agents
19
+ worker.ts entry point: registra jobs, data/action handlers, webhook
20
+ types.ts tipos compartilhados
21
+ db/
22
+ migrations/001.sql tabelas: repos, PRs, issues, links, sync_log
23
+ queries.ts — camada de queries tipada
24
+ sync/
25
+ webhook-handler.ts — processa eventos GitHub (PR, issues)
26
+ incremental-sync.ts — cron 5min: busca atualizações desde último sync
27
+ full-sync.ts — sync manual completo
28
+ link-detector.ts — regex matching para vincular PRs a cards
29
+ github/
30
+ api-client.ts — fetch autenticado com rate-limit awareness
31
+ config.ts — resolução de token (PAT → secret → env)
32
+ review/
33
+ review-tools.ts — 6 ferramentas para agentes: diff, read, comment, submit, list, search
34
+ quick-check.ts — checklist automático de PR
35
+ graphify/
36
+ graph-generator.ts — gera grafos de repositórios e código
37
+ ui/
38
+ index.tsx — re-exports de todos os componentes
39
+ components/ — Settings, Repos, PRs, Graphs, DetailTab, Dashboard, Sidebar
40
+ ```
24
41
 
25
- ### Configuration
42
+ ## UI Slots
43
+
44
+ | Slot | Componente | Descrição |
45
+ |------|-----------|-----------|
46
+ | sidebar | GitHubSidebarLink | Link na sidebar principal |
47
+ | sidebarPanel | GitHubSidebarPanel | Painel rápido com contadores |
48
+ | routeSidebar | GitHubRouteSidebar | Navegação entre páginas GitHub |
49
+ | page | GitHubSettingsPage | Token, repos, sync |
50
+ | page | GitHubReposPage | Lista de repositórios |
51
+ | page | GitHubPullRequestsPage | PRs com filtros |
52
+ | page | GitHubGraphsPage | Knowledge graphs |
53
+ | dashboardWidget | GitHubDashboardWidget | Status no dashboard |
54
+ | detailTab | GitHubDetailTab | Tab GitHub dentro de cards |
55
+ | contextMenuItem | GitHubContextMenu | Ação no menu de contexto |
56
+
57
+ ## Agent Tools
58
+
59
+ | Tool | Descrição |
60
+ |------|-----------|
61
+ | `github_get_pull_request_diff` | Diff unificado de um PR |
62
+ | `github_read_file_content` | Lê arquivo do repositório |
63
+ | `github_create_review_comment` | Comentário inline no PR |
64
+ | `github_submit_pr_review` | Submete review (approve/request_changes/comment) |
65
+ | `github_list_repositories` | Lista repos rastreados |
66
+ | `github_search_issues` | Busca issues/PRs via GitHub search |
67
+
68
+ ## Desenvolvimento
26
69
 
27
- | Variable | Purpose |
28
- |----------|---------|
29
- | `GITHUB_TOKEN` | Optional worker-level PAT fallback |
30
- | `GITHUB_DEFAULT_OWNER` | Default org/user when `owner` is omitted in list tools |
31
- | `GITHUB_API_URL` | API base (GitHub Enterprise), default `https://api.github.com` |
70
+ ```bash
71
+ npm install
72
+ npm run dev # watch mode
73
+ npm run build # build de produção
74
+ npm run typecheck # verificação de tipos
75
+ npm test # testes (vitest)
76
+ ```
32
77
 
33
- Per-company PAT in **GitHub → Configurações** is preferred for multi-tenant installs.
78
+ ## Release
34
79
 
35
- ## Requirements
80
+ ```bash
81
+ npm run build
82
+ npm pack # gera .tgz
83
+ ```
36
84
 
37
- - Paperclip instance with plugin runtime
38
- - GitHub PAT saved in **GitHub → Configurações** (or company secret UUID when secret refs are re-enabled)
39
- - For webhook registration: token scope `admin:repo_hook` on target repos
85
+ ## Instalação
40
86
 
41
- ## Repository
87
+ ### Via UI do Paperclip (recomendado)
42
88
 
43
- Source: [gauderp/paperclip-github-manager](https://github.com/gauderp/paperclip-github-manager)
89
+ 1. Acesse sua instância Paperclip (ex: `https://paperclip.gaud.app`)
90
+ 2. No menu lateral, clique em **Settings** (ícone de engrenagem)
91
+ 3. Navegue até a seção **Plugins**
92
+ 4. Clique em **Install Plugin**
93
+ 5. Informe o nome do pacote npm: `@gaud_erp/paperclip-github-manager`
94
+ 6. Aguarde a instalação — o status mudará para **Ready**
95
+ 7. O plugin aparecerá na lista com as 6 tools e o job de sync registrados
44
96
 
45
- ## Local development
97
+ ### Via CLI
46
98
 
47
99
  ```bash
48
- npm install
49
- npm run dev
50
- paperclipai plugin install /absolute/path/to/plugins/github-manager
100
+ paperclipai plugin install ./gaud_erp-paperclip-github-manager-1.0.0.tgz
51
101
  ```
52
102
 
53
- ## Releases e npmjs
103
+ ### Via Dockerfile (deploy automatizado)
54
104
 
55
- Cada **release no GitHub** (tag `v*`, ex. `v0.3.0`) dispara o workflow [publish-npm.yml](.github/workflows/publish-npm.yml) e publica `@gaud_erp/paperclip-github-manager` no [npmjs](https://www.npmjs.com/package/@gaud_erp/paperclip-github-manager).
105
+ Para instalar automaticamente durante o deploy (ex: Fly.io), adicione o `.tgz` ao Dockerfile e use o entrypoint para instalar via API após o servidor iniciar:
56
106
 
57
- ### Primeira vez / credencial
107
+ ```dockerfile
108
+ COPY gaud_erp-paperclip-github-manager-1.0.0.tgz /app/plugins/github-manager.tgz
109
+ ```
58
110
 
59
- 1. No repo **gauderp/paperclip-github-manager** Settings Secrets Actions: `NPM_TOKEN` (publish no escopo `@gaud_erp`).
60
- 2. Criar release no GitHub: tag `v0.3.0` apontando para `main`.
61
- 3. Confirmar: `npm view @gaud_erp/paperclip-github-manager version`
111
+ No `entrypoint.sh`, o plugin é extraído e instalado via `POST /api/plugins/install` após o Paperclip estar pronto. Veja o `entrypoint.sh` deste repositório como referência.
62
112
 
63
- ### Próximas versões
113
+ ## Configuração
64
114
 
65
- 1. Bump `version` em `package.json` + `src/manifest.ts`
66
- 2. Commit, push `main`
67
- 3. GitHub **Create release** com tag `vX.Y.Z`
115
+ 1. Acesse **GitHub > Configurações** no Paperclip
116
+ 2. Configure o Personal Access Token (PAT) ou secret reference
117
+ 3. Teste a conexão
118
+ 4. Adicione repositórios (formato `owner/repo`)
119
+ 5. O sync automático inicia a cada 5 minutos
68
120
 
69
- ## Production install (npm)
121
+ ### Permissões GitHub necessárias (PAT)
70
122
 
71
- ```bash
72
- paperclipai plugin install @gaud_erp/paperclip-github-manager@0.4.0 --api-base http://127.0.0.1:3100
73
- paperclipai plugin inspect cus.github-manager --api-base http://127.0.0.1:3100
74
- ```
123
+ - `repo` (acesso completo a repos privados)
124
+ - `read:org` (listar repos da org)
75
125
 
76
- Configure o PAT em **GitHub → Configurações** na sidebar do Paperclip.
126
+ ### Webhook (opcional)
77
127
 
78
- ## Build
79
-
80
- ```bash
81
- npm run typecheck
82
- npm test
83
- npm run build
128
+ Configure um webhook no GitHub apontando para:
84
129
  ```
85
-
86
- `prepublishOnly` runs build automatically before `npm publish`.
87
-
88
- ## Manifest
89
-
90
- - Plugin id: `cus.github-manager`
91
- - Webhook endpoint: `github-events`
92
- - Scheduled job: `sync-github` (every 6 hours)
130
+ https://<paperclip-host>/plugins/cus.github-manager/webhooks/github-events
131
+ ```
132
+ Eventos: `pull_request`, `issues`
package/dist/manifest.js CHANGED
@@ -1,113 +1,197 @@
1
- // src/constants.ts
2
- var ROUTES = {
3
- repos: "github",
4
- settings: "github-settings",
5
- pullRequests: "github-pull-requests"
6
- };
7
-
8
1
  // src/manifest.ts
9
2
  var manifest = {
10
3
  id: "cus.github-manager",
4
+ version: "1.0.0",
11
5
  apiVersion: 1,
12
- version: "0.4.0",
13
6
  displayName: "GitHub Manager",
14
- description: "Plugin Paperclip para gerenciar repositorios, PRs, issues e webhooks GitHub",
15
- author: "CUS",
16
- categories: ["connector"],
7
+ description: "Manage GitHub repos, PRs, issues, agent code reviews, and knowledge graphs \u2014 all from Paperclip",
8
+ author: "Gaud ERP",
9
+ categories: ["connector", "automation"],
17
10
  capabilities: [
18
11
  "events.subscribe",
12
+ "events.emit",
19
13
  "http.outbound",
20
14
  "secrets.read-ref",
21
15
  "plugin.state.read",
22
16
  "plugin.state.write",
23
- "agent.tools.register",
17
+ "database.namespace.read",
18
+ "database.namespace.write",
19
+ "database.namespace.migrate",
24
20
  "jobs.schedule",
25
21
  "webhooks.receive",
26
- "ui.sidebar.register",
22
+ "agent.tools.register",
23
+ "agents.managed",
24
+ "agents.invoke",
25
+ "agents.read",
26
+ "issues.read",
27
+ "companies.read",
28
+ "ui.page.register",
27
29
  "ui.dashboardWidget.register",
28
- "ui.page.register"
30
+ "ui.detailTab.register",
31
+ "ui.action.register"
29
32
  ],
33
+ entrypoints: {
34
+ worker: "./dist/worker.js",
35
+ ui: "./dist/ui"
36
+ },
37
+ database: {
38
+ migrationsDir: "src/db/migrations"
39
+ },
30
40
  jobs: [
31
41
  {
32
42
  jobKey: "sync-github",
33
- displayName: "Sync GitHub PRs and issues",
34
- description: "Pulls open PRs and issues for tracked repositories",
35
- schedule: "0 */6 * * *"
43
+ displayName: "Sync GitHub PRs and Issues",
44
+ schedule: "*/5 * * * *",
45
+ description: "Incremental sync of open PRs and issues for tracked repositories"
36
46
  }
37
47
  ],
38
48
  webhooks: [
39
49
  {
40
50
  endpointKey: "github-events",
41
- displayName: "GitHub repository events",
42
- description: "Receives pull_request and issues events from configured repositories"
51
+ displayName: "GitHub Events",
52
+ description: "Receives GitHub webhook events (pull_request, issues)"
53
+ }
54
+ ],
55
+ tools: [
56
+ {
57
+ name: "github_get_pull_request_diff",
58
+ displayName: "Get PR Diff",
59
+ description: "Retrieve the unified diff of a GitHub pull request",
60
+ parametersSchema: {
61
+ type: "object",
62
+ properties: {
63
+ owner: { type: "string" },
64
+ repo: { type: "string" },
65
+ pull_number: { type: "number" }
66
+ },
67
+ required: ["owner", "repo", "pull_number"]
68
+ }
69
+ },
70
+ {
71
+ name: "github_read_file_content",
72
+ displayName: "Read File",
73
+ description: "Read a file from a GitHub repository",
74
+ parametersSchema: {
75
+ type: "object",
76
+ properties: {
77
+ owner: { type: "string" },
78
+ repo: { type: "string" },
79
+ path: { type: "string" },
80
+ ref: { type: "string" }
81
+ },
82
+ required: ["owner", "repo", "path"]
83
+ }
84
+ },
85
+ {
86
+ name: "github_create_review_comment",
87
+ displayName: "Add Review Comment",
88
+ description: "Post an inline review comment on a pull request",
89
+ parametersSchema: {
90
+ type: "object",
91
+ properties: {
92
+ owner: { type: "string" },
93
+ repo: { type: "string" },
94
+ pull_number: { type: "number" },
95
+ commit_id: { type: "string" },
96
+ path: { type: "string" },
97
+ line: { type: "number" },
98
+ body: { type: "string" }
99
+ },
100
+ required: ["owner", "repo", "pull_number", "commit_id", "path", "line", "body"]
101
+ }
102
+ },
103
+ {
104
+ name: "github_submit_pr_review",
105
+ displayName: "Submit PR Review",
106
+ description: "Submit a review verdict (approve, request changes, comment)",
107
+ parametersSchema: {
108
+ type: "object",
109
+ properties: {
110
+ owner: { type: "string" },
111
+ repo: { type: "string" },
112
+ pull_number: { type: "number" },
113
+ event: { type: "string", enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"] },
114
+ body: { type: "string" }
115
+ },
116
+ required: ["owner", "repo", "pull_number", "event", "body"]
117
+ }
118
+ },
119
+ {
120
+ name: "github_list_repositories",
121
+ displayName: "List Repositories",
122
+ description: "List all tracked GitHub repositories",
123
+ parametersSchema: { type: "object", properties: {} }
124
+ },
125
+ {
126
+ name: "github_search_issues",
127
+ displayName: "Search Issues",
128
+ description: "Search GitHub issues and PRs using search syntax",
129
+ parametersSchema: {
130
+ type: "object",
131
+ properties: {
132
+ query: { type: "string" }
133
+ },
134
+ required: ["query"]
135
+ }
136
+ }
137
+ ],
138
+ agents: [
139
+ {
140
+ agentKey: "github-reviewer",
141
+ displayName: "GitHub Code Reviewer",
142
+ role: "code-review",
143
+ title: "Senior Code Reviewer"
43
144
  }
44
145
  ],
45
- entrypoints: {
46
- worker: "./dist/worker.js",
47
- ui: "./dist/ui"
48
- },
49
146
  ui: {
50
147
  slots: [
51
148
  {
52
- type: "sidebarPanel",
53
- id: "github-module",
54
- displayName: "GitHub",
55
- exportName: "GitHubSidebarModule",
56
- order: 45
149
+ type: "page",
150
+ id: "github-settings",
151
+ exportName: "GitHubSettingsPage",
152
+ displayName: "Configura\xE7\xF5es GitHub",
153
+ routePath: "github-settings"
57
154
  },
58
155
  {
59
- type: "routeSidebar",
60
- id: "github-route-nav",
61
- displayName: "GitHub",
62
- routePath: ROUTES.repos,
63
- exportName: "GitHubRouteSidebar",
64
- order: 45
156
+ type: "page",
157
+ id: "github-repos",
158
+ exportName: "GitHubReposPage",
159
+ displayName: "Reposit\xF3rios",
160
+ routePath: "github-repos"
65
161
  },
66
162
  {
67
- type: "routeSidebar",
68
- id: "github-settings-route-nav",
69
- displayName: "GitHub",
70
- routePath: ROUTES.settings,
71
- exportName: "GitHubRouteSidebar",
72
- order: 45
163
+ type: "page",
164
+ id: "github-prs",
165
+ exportName: "GitHubPullRequestsPage",
166
+ displayName: "Pull Requests",
167
+ routePath: "github-prs"
73
168
  },
74
169
  {
75
- type: "routeSidebar",
76
- id: "github-prs-route-nav",
77
- displayName: "GitHub",
78
- routePath: ROUTES.pullRequests,
79
- exportName: "GitHubRouteSidebar",
80
- order: 45
170
+ type: "page",
171
+ id: "github-graphs",
172
+ exportName: "GitHubGraphsPage",
173
+ displayName: "Knowledge Graphs",
174
+ routePath: "github-graphs"
81
175
  },
82
176
  {
83
177
  type: "dashboardWidget",
84
- id: "github-health",
85
- displayName: "GitHub Manager Health",
86
- exportName: "DashboardWidget"
87
- },
88
- {
89
- type: "page",
90
- id: "github-settings-page",
91
- displayName: "GitHub \u2014 Configura\xE7\xF5es",
92
- routePath: ROUTES.settings,
93
- exportName: "GitHubSettingsPage",
94
- order: 45
178
+ id: "github-dashboard",
179
+ exportName: "GitHubDashboardWidget",
180
+ displayName: "GitHub Status"
95
181
  },
96
182
  {
97
- type: "page",
98
- id: "github-repos-page",
99
- displayName: "GitHub \u2014 Reposit\xF3rios",
100
- routePath: ROUTES.repos,
101
- exportName: "GitHubReposPage",
102
- order: 45
183
+ type: "detailTab",
184
+ id: "github-detail",
185
+ exportName: "GitHubDetailTab",
186
+ displayName: "GitHub",
187
+ entityTypes: ["issue"]
103
188
  },
104
189
  {
105
- type: "page",
106
- id: "github-prs-page",
107
- displayName: "GitHub \u2014 Pull requests",
108
- routePath: ROUTES.pullRequests,
109
- exportName: "GitHubPullRequestsPage",
110
- order: 45
190
+ type: "contextMenuItem",
191
+ id: "github-context-menu",
192
+ exportName: "GitHubContextMenu",
193
+ displayName: "GitHub Actions",
194
+ entityTypes: ["issue"]
111
195
  }
112
196
  ]
113
197
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/constants.ts", "../src/manifest.ts"],
4
- "sourcesContent": ["/** Plugin page route segments (manifest `routePath` \u2014 single slug, no slashes). */\nexport const ROUTES = {\n repos: \"github\",\n settings: \"github-settings\",\n pullRequests: \"github-pull-requests\"\n} as const;\n\n/** Host navigation paths (use with `linkProps`). */\nexport const PATHS = {\n repos: \"/github\",\n settings: \"/github-settings\",\n pullRequests: \"/github-pull-requests\",\n companySecrets: \"/company/settings\"\n} as const;\n\nexport const GITHUB_TOKEN_SECRET_KEY = \"github_token\";\n", "import type { PaperclipPluginManifestV1 } from \"@paperclipai/plugin-sdk\";\nimport { ROUTES } from \"./constants.js\";\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: \"cus.github-manager\",\n apiVersion: 1,\n version: \"0.4.0\",\n displayName: \"GitHub Manager\",\n description: \"Plugin Paperclip para gerenciar repositorios, PRs, issues e webhooks GitHub\",\n author: \"CUS\",\n categories: [\"connector\"],\n capabilities: [\n \"events.subscribe\",\n \"http.outbound\",\n \"secrets.read-ref\",\n \"plugin.state.read\",\n \"plugin.state.write\",\n \"agent.tools.register\",\n \"jobs.schedule\",\n \"webhooks.receive\",\n \"ui.sidebar.register\",\n \"ui.dashboardWidget.register\",\n \"ui.page.register\"\n ],\n jobs: [\n {\n jobKey: \"sync-github\",\n displayName: \"Sync GitHub PRs and issues\",\n description: \"Pulls open PRs and issues for tracked repositories\",\n schedule: \"0 */6 * * *\"\n }\n ],\n webhooks: [\n {\n endpointKey: \"github-events\",\n displayName: \"GitHub repository events\",\n description: \"Receives pull_request and issues events from configured repositories\"\n }\n ],\n entrypoints: {\n worker: \"./dist/worker.js\",\n ui: \"./dist/ui\"\n },\n ui: {\n slots: [\n {\n type: \"sidebarPanel\",\n id: \"github-module\",\n displayName: \"GitHub\",\n exportName: \"GitHubSidebarModule\",\n order: 45\n },\n {\n type: \"routeSidebar\",\n id: \"github-route-nav\",\n displayName: \"GitHub\",\n routePath: ROUTES.repos,\n exportName: \"GitHubRouteSidebar\",\n order: 45\n },\n {\n type: \"routeSidebar\",\n id: \"github-settings-route-nav\",\n displayName: \"GitHub\",\n routePath: ROUTES.settings,\n exportName: \"GitHubRouteSidebar\",\n order: 45\n },\n {\n type: \"routeSidebar\",\n id: \"github-prs-route-nav\",\n displayName: \"GitHub\",\n routePath: ROUTES.pullRequests,\n exportName: \"GitHubRouteSidebar\",\n order: 45\n },\n {\n type: \"dashboardWidget\",\n id: \"github-health\",\n displayName: \"GitHub Manager Health\",\n exportName: \"DashboardWidget\"\n },\n {\n type: \"page\",\n id: \"github-settings-page\",\n displayName: \"GitHub \u2014 Configura\u00E7\u00F5es\",\n routePath: ROUTES.settings,\n exportName: \"GitHubSettingsPage\",\n order: 45\n },\n {\n type: \"page\",\n id: \"github-repos-page\",\n displayName: \"GitHub \u2014 Reposit\u00F3rios\",\n routePath: ROUTES.repos,\n exportName: \"GitHubReposPage\",\n order: 45\n },\n {\n type: \"page\",\n id: \"github-prs-page\",\n displayName: \"GitHub \u2014 Pull requests\",\n routePath: ROUTES.pullRequests,\n exportName: \"GitHubPullRequestsPage\",\n order: 45\n }\n ]\n }\n};\n\nexport default manifest;\n"],
5
- "mappings": ";AACO,IAAM,SAAS;AAAA,EACpB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAChB;;;ACFA,IAAM,WAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY,CAAC,WAAW;AAAA,EACxB,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,MACE,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,WAAW,OAAO;AAAA,QAClB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;",
3
+ "sources": ["../src/manifest.ts"],
4
+ "sourcesContent": ["import type { PaperclipPluginManifestV1 } from \"@paperclipai/plugin-sdk\";\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: \"cus.github-manager\",\n version: \"1.0.0\",\n apiVersion: 1,\n displayName: \"GitHub Manager\",\n description: \"Manage GitHub repos, PRs, issues, agent code reviews, and knowledge graphs \u2014 all from Paperclip\",\n author: \"Gaud ERP\",\n categories: [\"connector\", \"automation\"],\n\n capabilities: [\n \"events.subscribe\",\n \"events.emit\",\n \"http.outbound\",\n \"secrets.read-ref\",\n \"plugin.state.read\",\n \"plugin.state.write\",\n \"database.namespace.read\",\n \"database.namespace.write\",\n \"database.namespace.migrate\",\n \"jobs.schedule\",\n \"webhooks.receive\",\n \"agent.tools.register\",\n \"agents.managed\",\n \"agents.invoke\",\n \"agents.read\",\n \"issues.read\",\n \"companies.read\",\n \"ui.page.register\",\n \"ui.dashboardWidget.register\",\n \"ui.detailTab.register\",\n \"ui.action.register\",\n ],\n\n entrypoints: {\n worker: \"./dist/worker.js\",\n ui: \"./dist/ui\",\n },\n\n database: {\n migrationsDir: \"src/db/migrations\",\n },\n\n jobs: [\n {\n jobKey: \"sync-github\",\n displayName: \"Sync GitHub PRs and Issues\",\n schedule: \"*/5 * * * *\",\n description: \"Incremental sync of open PRs and issues for tracked repositories\",\n },\n ],\n\n webhooks: [\n {\n endpointKey: \"github-events\",\n displayName: \"GitHub Events\",\n description: \"Receives GitHub webhook events (pull_request, issues)\",\n },\n ],\n\n tools: [\n {\n name: \"github_get_pull_request_diff\",\n displayName: \"Get PR Diff\",\n description: \"Retrieve the unified diff of a GitHub pull request\",\n parametersSchema: {\n type: \"object\",\n properties: {\n owner: { type: \"string\" },\n repo: { type: \"string\" },\n pull_number: { type: \"number\" },\n },\n required: [\"owner\", \"repo\", \"pull_number\"],\n },\n },\n {\n name: \"github_read_file_content\",\n displayName: \"Read File\",\n description: \"Read a file from a GitHub repository\",\n parametersSchema: {\n type: \"object\",\n properties: {\n owner: { type: \"string\" },\n repo: { type: \"string\" },\n path: { type: \"string\" },\n ref: { type: \"string\" },\n },\n required: [\"owner\", \"repo\", \"path\"],\n },\n },\n {\n name: \"github_create_review_comment\",\n displayName: \"Add Review Comment\",\n description: \"Post an inline review comment on a pull request\",\n parametersSchema: {\n type: \"object\",\n properties: {\n owner: { type: \"string\" },\n repo: { type: \"string\" },\n pull_number: { type: \"number\" },\n commit_id: { type: \"string\" },\n path: { type: \"string\" },\n line: { type: \"number\" },\n body: { type: \"string\" },\n },\n required: [\"owner\", \"repo\", \"pull_number\", \"commit_id\", \"path\", \"line\", \"body\"],\n },\n },\n {\n name: \"github_submit_pr_review\",\n displayName: \"Submit PR Review\",\n description: \"Submit a review verdict (approve, request changes, comment)\",\n parametersSchema: {\n type: \"object\",\n properties: {\n owner: { type: \"string\" },\n repo: { type: \"string\" },\n pull_number: { type: \"number\" },\n event: { type: \"string\", enum: [\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"] },\n body: { type: \"string\" },\n },\n required: [\"owner\", \"repo\", \"pull_number\", \"event\", \"body\"],\n },\n },\n {\n name: \"github_list_repositories\",\n displayName: \"List Repositories\",\n description: \"List all tracked GitHub repositories\",\n parametersSchema: { type: \"object\", properties: {} },\n },\n {\n name: \"github_search_issues\",\n displayName: \"Search Issues\",\n description: \"Search GitHub issues and PRs using search syntax\",\n parametersSchema: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n },\n required: [\"query\"],\n },\n },\n ],\n\n agents: [\n {\n agentKey: \"github-reviewer\",\n displayName: \"GitHub Code Reviewer\",\n role: \"code-review\",\n title: \"Senior Code Reviewer\",\n },\n ],\n\n ui: {\n slots: [\n {\n type: \"page\",\n id: \"github-settings\",\n exportName: \"GitHubSettingsPage\",\n displayName: \"Configura\u00E7\u00F5es GitHub\",\n routePath: \"github-settings\",\n },\n {\n type: \"page\",\n id: \"github-repos\",\n exportName: \"GitHubReposPage\",\n displayName: \"Reposit\u00F3rios\",\n routePath: \"github-repos\",\n },\n {\n type: \"page\",\n id: \"github-prs\",\n exportName: \"GitHubPullRequestsPage\",\n displayName: \"Pull Requests\",\n routePath: \"github-prs\",\n },\n {\n type: \"page\",\n id: \"github-graphs\",\n exportName: \"GitHubGraphsPage\",\n displayName: \"Knowledge Graphs\",\n routePath: \"github-graphs\",\n },\n {\n type: \"dashboardWidget\",\n id: \"github-dashboard\",\n exportName: \"GitHubDashboardWidget\",\n displayName: \"GitHub Status\",\n },\n {\n type: \"detailTab\",\n id: \"github-detail\",\n exportName: \"GitHubDetailTab\",\n displayName: \"GitHub\",\n entityTypes: [\"issue\"],\n },\n {\n type: \"contextMenuItem\",\n id: \"github-context-menu\",\n exportName: \"GitHubContextMenu\",\n displayName: \"GitHub Actions\",\n entityTypes: [\"issue\"],\n },\n ],\n },\n};\n\nexport default manifest;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }