@gaud_erp/paperclip-github-manager 1.3.1 → 1.3.2
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/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/index.js.map +2 -2
- package/package.json +1 -1
package/dist/manifest.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/manifest.ts
|
|
2
2
|
var manifest = {
|
|
3
3
|
id: "cus.github-manager",
|
|
4
|
-
version: "1.3.
|
|
4
|
+
version: "1.3.2",
|
|
5
5
|
apiVersion: 1,
|
|
6
6
|
displayName: "GitHub Manager",
|
|
7
7
|
description: "Manage GitHub repos, PRs, issues, agent code reviews, and knowledge graphs \u2014 all from Paperclip",
|
package/dist/manifest.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
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.3.
|
|
4
|
+
"sourcesContent": ["import type { PaperclipPluginManifestV1 } from \"@paperclipai/plugin-sdk\";\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: \"cus.github-manager\",\n version: \"1.3.2\",\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 \"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.sidebar.register\",\n \"ui.detailTab.register\",\n \"ui.action.register\",\n \"instance.settings.register\",\n ],\n\n instanceConfigSchema: {\n type: \"object\",\n required: [\"githubToken\"],\n properties: {\n githubToken: {\n type: \"string\",\n title: \"GitHub Personal Access Token\",\n description: \"Cole aqui o PAT do GitHub com permiss\u00F5es 'repo' e 'read:org'\",\n },\n defaultOrg: {\n type: \"string\",\n title: \"Default Organization\",\n description: \"GitHub organization to sync repositories from (optional)\",\n },\n syncIntervalMinutes: {\n type: \"number\",\n title: \"Sync Interval (minutes)\",\n description: \"How often to sync PRs and issues (default: 5)\",\n default: 5,\n minimum: 1,\n maximum: 1440,\n },\n },\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: \"sidebar\",\n id: \"github-sidebar\",\n exportName: \"GitHubSidebarLink\",\n displayName: \"GitHub\",\n },\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
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/ui/index.js
CHANGED
|
@@ -283,7 +283,7 @@ function GitHubReposPage() {
|
|
|
283
283
|
const companyId = context.companyId;
|
|
284
284
|
const [filter, setFilter] = useState2("");
|
|
285
285
|
const reposData = usePluginData2("repos", { companyId });
|
|
286
|
-
const syncAction = usePluginAction2("sync-
|
|
286
|
+
const syncAction = usePluginAction2("sync-all");
|
|
287
287
|
const generateGraph = usePluginAction2("generate-graph");
|
|
288
288
|
if (!companyId) return /* @__PURE__ */ jsx3("div", { style: layoutStack, children: "Selecione uma empresa." });
|
|
289
289
|
const repos = (reposData.data?.repos ?? []).filter(
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/ui/components/Sidebar.tsx", "../../src/ui/components/shared.ts", "../../src/ui/components/SettingsPage.tsx", "../../src/ui/components/ReposPage.tsx", "../../src/ui/components/PullRequestsPage.tsx", "../../src/ui/components/GraphsPage.tsx", "../../src/ui/components/DetailTab.tsx", "../../src/ui/components/ReviewDropdown.tsx", "../../src/ui/components/DashboardWidget.tsx", "../../src/ui/components/ContextMenu.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from \"react\";\nimport { useHostNavigation, usePluginData } from \"@paperclipai/plugin-sdk/ui\";\nimport { PATHS } from \"./shared.js\";\n\ntype NavItem = { label: string; path: string };\n\nconst NAV_ITEMS: NavItem[] = [\n { label: \"Configura\u00E7\u00F5es\", path: PATHS.settings },\n { label: \"Reposit\u00F3rios\", path: PATHS.repos },\n { label: \"Pull Requests\", path: PATHS.prs },\n { label: \"Knowledge Graphs\", path: PATHS.graphs },\n];\n\nexport function GitHubSidebarLink() {\n const nav = useHostNavigation();\n const href = nav.resolveHref(PATHS.repos);\n const isActive = typeof window !== \"undefined\" && window.location.pathname === href;\n\n return (\n <a\n {...nav.linkProps(PATHS.repos)}\n aria-current={isActive ? \"page\" : undefined}\n className={[\n \"flex items-center gap-2.5 px-3 py-2 text-[13px] font-medium\",\n isActive ? \"bg-accent text-foreground\" : \"text-foreground/80 hover:bg-accent/50\",\n ].join(\" \")}\n >\n <span className=\"relative shrink-0\">\n <svg viewBox=\"0 0 16 16\" className=\"h-4 w-4\" fill=\"currentColor\">\n <path d=\"M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z\" />\n </svg>\n </span>\n <span className=\"flex-1 truncate\">GitHub</span>\n </a>\n );\n}\n\nexport function GitHubSidebarPanel() {\n const syncStatus = usePluginData<{ lastSync: string | null; repoCount: number; openPRCount: number }>(\"sync-status\");\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"4px\", fontSize: \"12px\", padding: \"8px\" }}>\n <strong>GitHub</strong>\n <div>Repos: {syncStatus.data?.repoCount ?? 0}</div>\n <div>PRs abertos: {syncStatus.data?.openPRCount ?? 0}</div>\n <div>\u00DAltimo sync: {syncStatus.data?.lastSync ? new Date(syncStatus.data.lastSync).toLocaleString() : \"nunca\"}</div>\n </div>\n );\n}\n\nexport function GitHubRouteSidebar() {\n const nav = useHostNavigation();\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"2px\", padding: \"4px\" }}>\n {NAV_ITEMS.map((item) => {\n const href = nav.resolveHref(item.path);\n const isActive = typeof window !== \"undefined\" && window.location.pathname === href;\n return (\n <a\n key={item.path}\n {...nav.linkProps(item.path)}\n aria-current={isActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n fontSize: \"13px\",\n fontWeight: isActive ? 600 : 400,\n background: isActive ? \"rgba(128,128,128,0.1)\" : \"transparent\",\n textDecoration: \"none\",\n color: \"inherit\",\n }}\n >\n {item.label}\n </a>\n );\n })}\n </div>\n );\n}\n", "import type React from \"react\";\n\nexport const ROUTES = {\n settings: \"github-settings\",\n repos: \"github-repos\",\n prs: \"github-prs\",\n graphs: \"github-graphs\",\n} as const;\n\nexport const PATHS = {\n settings: \"/github-settings\",\n repos: \"/github-repos\",\n prs: \"/github-prs\",\n graphs: \"/github-graphs\",\n} as const;\n\nexport const layoutStack: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n padding: \"16px\",\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(128,128,128,0.2)\",\n borderRadius: \"8px\",\n padding: \"12px\",\n background: \"rgba(128,128,128,0.04)\",\n};\n\nexport const buttonStyle: React.CSSProperties = {\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n border: \"1px solid rgba(128,128,128,0.3)\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: \"13px\",\n};\n\nexport const primaryButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n background: \"rgba(59,130,246,0.1)\",\n borderColor: \"rgba(59,130,246,0.3)\",\n color: \"#3b82f6\",\n};\n\nexport const badgeStyle = (color: string): React.CSSProperties => ({\n display: \"inline-block\",\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n fontSize: \"11px\",\n fontWeight: 600,\n background: `${color}20`,\n color,\n});\n\nexport function prStateBadge(state: string): { label: string; color: string } {\n switch (state) {\n case \"open\": return { label: \"Open\", color: \"#22c55e\" };\n case \"closed\": return { label: \"Closed\", color: \"#ef4444\" };\n case \"merged\": return { label: \"Merged\", color: \"#a855f7\" };\n case \"draft\": return { label: \"Draft\", color: \"#6b7280\" };\n default: return { label: state, color: \"#6b7280\" };\n }\n}\n\nexport function timeAgo(dateStr: string): string {\n const diff = Date.now() - new Date(dateStr).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 60) return `${mins}m ago`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle } from \"./shared.js\";\n\nexport function GitHubSettingsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n\n const [token, setToken] = useState(\"\");\n const [secretRef, setSecretRef] = useState(\"\");\n const [repoInput, setRepoInput] = useState(\"\");\n const [status, setStatus] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const saveToken = usePluginAction(\"save-token\");\n const saveSecretRefAction = usePluginAction(\"save-secret-ref\");\n const testConnection = usePluginAction(\"test-connection\");\n const addRepo = usePluginAction(\"add-repo\");\n const syncAll = usePluginAction(\"sync-all\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const handleSaveToken = async () => {\n if (!token.trim()) return;\n setLoading(true);\n try {\n await saveToken({ companyId, token: token.trim() });\n setStatus(\"Token salvo com sucesso\");\n setToken(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleSaveSecretRef = async () => {\n if (!secretRef.trim()) return;\n setLoading(true);\n try {\n await saveSecretRefAction({ companyId, secretRef: secretRef.trim() });\n setStatus(\"Secret ref salvo com sucesso\");\n setSecretRef(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleTestConnection = async () => {\n setLoading(true);\n try {\n const result = await testConnection({ companyId }) as { ok: boolean; login?: string; error?: string };\n if (result.ok) {\n setStatus(`Conectado como ${result.login}`);\n } else {\n setStatus(`Falha: ${result.error}`);\n }\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleAddRepo = async () => {\n if (!repoInput.trim()) return;\n setLoading(true);\n try {\n await addRepo({ companyId, fullName: repoInput.trim() });\n setStatus(`Reposit\u00F3rio ${repoInput.trim()} adicionado`);\n setRepoInput(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleFullSync = async () => {\n setLoading(true);\n setStatus(\"Sincronizando...\");\n try {\n await syncAll({ companyId });\n setStatus(\"Sync completo finalizado\");\n } catch (err) {\n setStatus(`Erro no sync: ${err}`);\n }\n setLoading(false);\n };\n\n return (\n <div style={layoutStack}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Configura\u00E7\u00F5es GitHub</h2>\n\n {status && (\n <div style={{ ...cardStyle, fontSize: \"13px\", color: status.startsWith(\"Erro\") ? \"#ef4444\" : \"#22c55e\" }}>\n {status}\n </div>\n )}\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Autentica\u00E7\u00E3o</h3>\n <div style={{ display: \"flex\", gap: \"8px\", marginBottom: \"8px\" }}>\n <input\n type=\"password\"\n placeholder=\"GitHub Personal Access Token\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleSaveToken} disabled={loading}>\n Salvar PAT\n </button>\n </div>\n <div style={{ display: \"flex\", gap: \"8px\", marginBottom: \"8px\" }}>\n <input\n placeholder=\"UUID do secret (alternativa)\"\n value={secretRef}\n onChange={(e) => setSecretRef(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleSaveSecretRef} disabled={loading}>\n Salvar Ref\n </button>\n </div>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleTestConnection} disabled={loading}>\n Testar Conex\u00E3o\n </button>\n </div>\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Adicionar Reposit\u00F3rio</h3>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <input\n placeholder=\"owner/repo (ex: gauderp/gaud-erp-api)\"\n value={repoInput}\n onChange={(e) => setRepoInput(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={primaryButtonStyle} onClick={handleAddRepo} disabled={loading}>\n Adicionar\n </button>\n </div>\n </div>\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Sincroniza\u00E7\u00E3o</h3>\n <p style={{ margin: \"0 0 8px\", fontSize: \"12px\", opacity: 0.7 }}>\n Sync autom\u00E1tico a cada 5 minutos. Use o bot\u00E3o abaixo para for\u00E7ar um sync completo.\n </p>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleFullSync} disabled={loading}>\n {loading ? \"Sincronizando...\" : \"Sync Completo\"}\n </button>\n </div>\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle, timeAgo } from \"./shared.js\";\nimport type { GitHubRepo } from \"../../types.js\";\n\nexport function GitHubReposPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [filter, setFilter] = useState(\"\");\n\n const reposData = usePluginData<{ repos: GitHubRepo[]; lastSync: string | null }>(\"repos\", { companyId });\n const syncAction = usePluginAction(\"sync-incremental\");\n const generateGraph = usePluginAction(\"generate-graph\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const repos = (reposData.data?.repos ?? []).filter((r) =>\n !filter || r.fullName.toLowerCase().includes(filter.toLowerCase()),\n );\n\n return (\n <div style={layoutStack}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Reposit\u00F3rios ({repos.length})</h2>\n <div style={{ display: \"flex\", gap: \"8px\", alignItems: \"center\" }}>\n <span style={{ fontSize: \"11px\", opacity: 0.6 }}>\n \u00DAltimo sync: {reposData.data?.lastSync ? timeAgo(reposData.data.lastSync) : \"nunca\"}\n </span>\n <button\n type=\"button\"\n style={buttonStyle}\n onClick={() => syncAction({ companyId }).catch(console.error)}\n >\n Sync\n </button>\n </div>\n </div>\n\n <input\n placeholder=\"Filtrar reposit\u00F3rios...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={{ padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n\n {repos.length === 0 && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.6 }}>\n Nenhum reposit\u00F3rio rastreado. Adicione em Configura\u00E7\u00F5es.\n </div>\n )}\n\n {repos.map((repo) => (\n <div key={repo.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div>\n <a href={repo.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"14px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n {repo.fullName}\n </a>\n {repo.private && <span style={{ marginLeft: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>privado</span>}\n {repo.description && <p style={{ margin: \"4px 0 0\", fontSize: \"12px\", opacity: 0.7 }}>{repo.description}</p>}\n </div>\n <div style={{ display: \"flex\", gap: \"4px\" }}>\n <button\n type=\"button\"\n style={buttonStyle}\n onClick={() => generateGraph({ companyId, repoFullName: repo.fullName, level: \"code\" }).catch(console.error)}\n title=\"Gerar Knowledge Graph\"\n >\n Graphify\n </button>\n </div>\n </div>\n <div style={{ display: \"flex\", gap: \"16px\", marginTop: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>\n {repo.language && <span>{repo.language}</span>}\n <span>branch: {repo.defaultBranch}</span>\n <span>sync: {timeAgo(repo.syncedAt)}</span>\n </div>\n </div>\n ))}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, badgeStyle, prStateBadge, timeAgo } from \"./shared.js\";\nimport type { PRWithRepo } from \"../../types.js\";\n\nexport function GitHubPullRequestsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [stateFilter, setStateFilter] = useState<string>(\"open\");\n const [search, setSearch] = useState(\"\");\n\n const prsData = usePluginData<{ pullRequests: PRWithRepo[] }>(\"pull-requests\", {\n companyId,\n filters: stateFilter ? { state: stateFilter } : undefined,\n });\n\n const syncAction = usePluginAction(\"sync-incremental\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const prs = (prsData.data?.pullRequests ?? []).filter((pr) =>\n !search || pr.title.toLowerCase().includes(search.toLowerCase()) || pr.repoFullName.toLowerCase().includes(search.toLowerCase()),\n );\n\n return (\n <div style={layoutStack}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Pull Requests ({prs.length})</h2>\n <button type=\"button\" style={buttonStyle} onClick={() => syncAction({ companyId }).catch(console.error)}>\n Sync\n </button>\n </div>\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n {[\"open\", \"closed\", \"merged\", \"\"].map((state) => (\n <button\n key={state}\n type=\"button\"\n style={{\n ...buttonStyle,\n background: stateFilter === state ? \"rgba(128,128,128,0.15)\" : \"transparent\",\n fontWeight: stateFilter === state ? 600 : 400,\n }}\n onClick={() => setStateFilter(state)}\n >\n {state || \"Todos\"}\n </button>\n ))}\n <input\n placeholder=\"Buscar por t\u00EDtulo ou repo...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ flex: 1, minWidth: \"200px\", padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n </div>\n\n {prs.length === 0 && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.6 }}>\n Nenhum PR encontrado com os filtros atuais.\n </div>\n )}\n\n {prs.map((pr) => {\n const badge = prStateBadge(pr.draft ? \"draft\" : pr.state);\n return (\n <div key={pr.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <span style={badgeStyle(badge.color)}>{badge.label}</span>\n <a href={pr.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"14px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n #{pr.number} {pr.title}\n </a>\n </div>\n <div style={{ marginTop: \"4px\", fontSize: \"12px\", opacity: 0.6 }}>\n {pr.repoFullName} \u00B7 {pr.author} \u00B7 {pr.headBranch} \u2192 {pr.baseBranch} \u00B7 {timeAgo(pr.updatedAt)}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle } from \"./shared.js\";\nimport type { GraphData } from \"../../graphify/graph-generator.js\";\n\nexport function GitHubGraphsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [graphData, setGraphData] = useState<GraphData | null>(null);\n const [loading, setLoading] = useState(false);\n const [repoInput, setRepoInput] = useState(\"\");\n\n const generateGraph = usePluginAction(\"generate-graph\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const handleGenerateHighLevel = async () => {\n setLoading(true);\n try {\n const result = await generateGraph({ companyId, level: \"high\" }) as GraphData;\n setGraphData(result);\n } catch (err) {\n console.error(err);\n }\n setLoading(false);\n };\n\n const handleGenerateCode = async () => {\n if (!repoInput.trim()) return;\n setLoading(true);\n try {\n const result = await generateGraph({ companyId, repoFullName: repoInput.trim(), level: \"code\" }) as GraphData;\n setGraphData(result);\n } catch (err) {\n console.error(err);\n }\n setLoading(false);\n };\n\n return (\n <div style={layoutStack}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Knowledge Graphs</h2>\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleGenerateHighLevel} disabled={loading}>\n {loading ? \"Gerando...\" : \"Grafo de Alto N\u00EDvel\"}\n </button>\n <div style={{ display: \"flex\", gap: \"4px\", flex: 1 }}>\n <input\n placeholder=\"owner/repo para drill-down...\"\n value={repoInput}\n onChange={(e) => setRepoInput(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleGenerateCode} disabled={loading || !repoInput.trim()}>\n Grafo de C\u00F3digo\n </button>\n </div>\n </div>\n\n {graphData && (\n <div style={cardStyle}>\n <div style={{ marginBottom: \"8px\", fontSize: \"13px\" }}>\n <strong>{graphData.level === \"high\" ? \"Vis\u00E3o Geral\" : graphData.repoFullName}</strong>\n <span style={{ marginLeft: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>\n {graphData.nodes.length} n\u00F3s \u00B7 {graphData.edges.length} arestas \u00B7 {new Date(graphData.generatedAt).toLocaleString()}\n </span>\n </div>\n <div style={{ maxHeight: \"400px\", overflow: \"auto\", fontSize: \"12px\" }}>\n <div style={{ marginBottom: \"8px\" }}>\n <strong>N\u00F3s:</strong>\n {graphData.nodes.map((node) => (\n <div key={node.id} style={{ padding: \"2px 0\", paddingLeft: \"12px\" }}>\n <span style={{ opacity: 0.5 }}>[{node.type}]</span> {node.label}\n </div>\n ))}\n </div>\n <div>\n <strong>Arestas:</strong>\n {graphData.edges.map((edge, i) => (\n <div key={i} style={{ padding: \"2px 0\", paddingLeft: \"12px\" }}>\n {edge.source} \u2192 {edge.target} <span style={{ opacity: 0.5 }}>({edge.label})</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {!graphData && !loading && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.5 }}>\n Clique em um dos bot\u00F5es acima para gerar um knowledge graph.\n </div>\n )}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport type { PluginDetailTabProps } from \"@paperclipai/plugin-sdk/ui\";\nimport { usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { cardStyle, buttonStyle, badgeStyle, prStateBadge, timeAgo } from \"./shared.js\";\nimport { ReviewDropdown } from \"./ReviewDropdown.js\";\nimport type { PRWithRepo } from \"../../types.js\";\n\nexport function GitHubDetailTab({ context }: PluginDetailTabProps) {\n const issueId = context.entityId;\n const companyId = context.companyId;\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [selectedPrId, setSelectedPrId] = useState<number | null>(null);\n\n const cardPRs = usePluginData<{ pullRequests: PRWithRepo[] }>(\"card-prs\", {\n companyId,\n issueId,\n });\n\n const allPRs = usePluginData<{ pullRequests: PRWithRepo[] }>(\"pull-requests\", {\n companyId,\n filters: { state: \"open\" },\n });\n\n const linkAction = usePluginAction(\"link-pr-to-card\");\n const quickCheck = usePluginAction(\"run-quick-check\");\n\n if (!companyId || !issueId) {\n return <div style={{ padding: \"12px\", fontSize: \"13px\", opacity: 0.5 }}>Sem contexto dispon\u00EDvel.</div>;\n }\n\n const prs = cardPRs.data?.pullRequests ?? [];\n\n const handleLink = async () => {\n if (!selectedPrId) return;\n await linkAction({ prId: selectedPrId, issueId });\n setShowLinkInput(false);\n setSelectedPrId(null);\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\", padding: \"12px\" }}>\n {prs.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: \"20px 0\" }}>\n <p style={{ fontSize: \"13px\", opacity: 0.5, margin: \"0 0 12px\" }}>\n Nenhum PR vinculado a este card.\n </p>\n <button type=\"button\" style={buttonStyle} onClick={() => setShowLinkInput(true)}>\n Vincular PR\n </button>\n </div>\n ) : (\n <>\n {prs.map((pr) => {\n const badge = prStateBadge(pr.draft ? \"draft\" : pr.state);\n return (\n <div key={pr.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\" }}>\n <span style={badgeStyle(badge.color)}>{badge.label}</span>\n <a href={pr.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"13px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n #{pr.number} {pr.title}\n </a>\n </div>\n <div style={{ marginTop: \"4px\", fontSize: \"11px\", opacity: 0.5 }}>\n {pr.repoFullName} \u00B7 {pr.author} \u00B7 {pr.headBranch} \u2192 {pr.baseBranch} \u00B7 {timeAgo(pr.updatedAt)}\n </div>\n </div>\n <ReviewDropdown\n companyId={companyId}\n prId={pr.id}\n repoFullName={pr.repoFullName}\n prNumber={pr.number}\n />\n </div>\n </div>\n );\n })}\n <button type=\"button\" style={{ ...buttonStyle, alignSelf: \"flex-start\", fontSize: \"12px\" }} onClick={() => setShowLinkInput(true)}>\n + Vincular outro PR\n </button>\n </>\n )}\n\n {showLinkInput && (\n <div style={cardStyle}>\n <div style={{ fontSize: \"13px\", fontWeight: 500, marginBottom: \"8px\" }}>Selecionar PR</div>\n <select\n style={{ width: \"100%\", padding: \"6px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\", marginBottom: \"8px\" }}\n onChange={(e) => setSelectedPrId(Number(e.target.value))}\n value={selectedPrId ?? \"\"}\n >\n <option value=\"\">Selecione um PR...</option>\n {(allPRs.data?.pullRequests ?? []).map((pr) => (\n <option key={pr.id} value={pr.id}>\n {pr.repoFullName} #{pr.number} \u2014 {pr.title}\n </option>\n ))}\n </select>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <button type=\"button\" style={buttonStyle} onClick={handleLink} disabled={!selectedPrId}>\n Vincular\n </button>\n <button type=\"button\" style={buttonStyle} onClick={() => setShowLinkInput(false)}>\n Cancelar\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { buttonStyle, primaryButtonStyle } from \"./shared.js\";\n\ntype Agent = { id: string; displayName: string; role: string };\n\ntype Props = {\n companyId: string;\n prId: number;\n repoFullName: string;\n prNumber: number;\n};\n\nexport function ReviewDropdown({ companyId, prId, repoFullName, prNumber }: Props) {\n const [open, setOpen] = useState(false);\n const [reviewing, setReviewing] = useState(false);\n\n const agentsData = usePluginData<{ agents: Agent[] }>(\"available-agents\", { companyId });\n const requestReview = usePluginAction(\"request-review\");\n\n const agents = agentsData.data?.agents ?? [];\n\n const handleReview = async (agentId: string) => {\n setReviewing(true);\n setOpen(false);\n try {\n await requestReview({ companyId, prId, repoFullName, prNumber, agentId });\n } catch (err) {\n console.error(\"Review request failed:\", err);\n }\n setReviewing(false);\n };\n\n if (reviewing) {\n return <span style={{ fontSize: \"12px\", opacity: 0.6 }}>Revisando...</span>;\n }\n\n return (\n <div style={{ position: \"relative\", display: \"inline-block\" }}>\n <button type=\"button\" style={primaryButtonStyle} onClick={() => setOpen(!open)}>\n Revisar \u25BE\n </button>\n {open && (\n <div style={{\n position: \"absolute\", top: \"100%\", right: 0, marginTop: \"4px\",\n background: \"var(--background, #1a1a1a)\", border: \"1px solid rgba(128,128,128,0.3)\",\n borderRadius: \"8px\", padding: \"4px\", minWidth: \"200px\", zIndex: 10,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.3)\",\n }}>\n {agents.length === 0 && (\n <div style={{ padding: \"8px\", fontSize: \"12px\", opacity: 0.5 }}>Nenhum agente dispon\u00EDvel</div>\n )}\n {agents.map((agent) => (\n <button\n key={agent.id}\n type=\"button\"\n style={{ ...buttonStyle, width: \"100%\", textAlign: \"left\", border: \"none\", borderRadius: \"4px\" }}\n onClick={() => handleReview(agent.id)}\n >\n <div style={{ fontWeight: 500 }}>{agent.displayName}</div>\n <div style={{ fontSize: \"11px\", opacity: 0.5 }}>{agent.role}</div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\nimport type { PluginWidgetProps } from \"@paperclipai/plugin-sdk/ui\";\nimport { useHostNavigation, usePluginData } from \"@paperclipai/plugin-sdk/ui\";\nimport { PATHS, timeAgo } from \"./shared.js\";\n\nexport function GitHubDashboardWidget({ context }: PluginWidgetProps) {\n const nav = useHostNavigation();\n const syncStatus = usePluginData<{ lastSync: string | null; repoCount: number; openPRCount: number }>(\"sync-status\", {\n companyId: context.companyId,\n });\n\n const data = syncStatus.data;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\", fontSize: \"12px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong style={{ fontSize: \"13px\" }}>GitHub</strong>\n <span style={{\n display: \"inline-block\", width: \"8px\", height: \"8px\", borderRadius: \"50%\",\n background: data ? \"#22c55e\" : \"#6b7280\",\n }} />\n </div>\n <div style={{ display: \"grid\", gap: \"2px\" }}>\n <div>Reposit\u00F3rios: {data?.repoCount ?? 0}</div>\n <div>PRs abertos: {data?.openPRCount ?? 0}</div>\n <div>\u00DAltimo sync: {data?.lastSync ? timeAgo(data.lastSync) : \"nunca\"}</div>\n </div>\n <a {...nav.linkProps(PATHS.prs)} style={{ fontSize: \"12px\", color: \"#3b82f6\" }}>\n Ver Pull Requests \u2192\n </a>\n </div>\n );\n}\n", "import React from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { buttonStyle } from \"./shared.js\";\n\nexport function GitHubContextMenu() {\n const context = useHostContext();\n const generateGraph = usePluginAction(\"generate-graph\");\n\n const handleGraphify = () => {\n if (!context.companyId) return;\n void generateGraph({\n companyId: context.companyId,\n level: \"high\",\n }).catch(console.error);\n };\n\n return (\n <button type=\"button\" style={buttonStyle} onClick={handleGraphify}>\n Gerar Knowledge Graph\n </button>\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { useHostNavigation, usePluginData } from \"@paperclipai/plugin-sdk/ui\";\nimport { PATHS } from \"./shared.js\";\n\ntype NavItem = { label: string; path: string };\n\nconst NAV_ITEMS: NavItem[] = [\n { label: \"Configura\u00E7\u00F5es\", path: PATHS.settings },\n { label: \"Reposit\u00F3rios\", path: PATHS.repos },\n { label: \"Pull Requests\", path: PATHS.prs },\n { label: \"Knowledge Graphs\", path: PATHS.graphs },\n];\n\nexport function GitHubSidebarLink() {\n const nav = useHostNavigation();\n const href = nav.resolveHref(PATHS.repos);\n const isActive = typeof window !== \"undefined\" && window.location.pathname === href;\n\n return (\n <a\n {...nav.linkProps(PATHS.repos)}\n aria-current={isActive ? \"page\" : undefined}\n className={[\n \"flex items-center gap-2.5 px-3 py-2 text-[13px] font-medium\",\n isActive ? \"bg-accent text-foreground\" : \"text-foreground/80 hover:bg-accent/50\",\n ].join(\" \")}\n >\n <span className=\"relative shrink-0\">\n <svg viewBox=\"0 0 16 16\" className=\"h-4 w-4\" fill=\"currentColor\">\n <path d=\"M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z\" />\n </svg>\n </span>\n <span className=\"flex-1 truncate\">GitHub</span>\n </a>\n );\n}\n\nexport function GitHubSidebarPanel() {\n const syncStatus = usePluginData<{ lastSync: string | null; repoCount: number; openPRCount: number }>(\"sync-status\");\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"4px\", fontSize: \"12px\", padding: \"8px\" }}>\n <strong>GitHub</strong>\n <div>Repos: {syncStatus.data?.repoCount ?? 0}</div>\n <div>PRs abertos: {syncStatus.data?.openPRCount ?? 0}</div>\n <div>\u00DAltimo sync: {syncStatus.data?.lastSync ? new Date(syncStatus.data.lastSync).toLocaleString() : \"nunca\"}</div>\n </div>\n );\n}\n\nexport function GitHubRouteSidebar() {\n const nav = useHostNavigation();\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"2px\", padding: \"4px\" }}>\n {NAV_ITEMS.map((item) => {\n const href = nav.resolveHref(item.path);\n const isActive = typeof window !== \"undefined\" && window.location.pathname === href;\n return (\n <a\n key={item.path}\n {...nav.linkProps(item.path)}\n aria-current={isActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n fontSize: \"13px\",\n fontWeight: isActive ? 600 : 400,\n background: isActive ? \"rgba(128,128,128,0.1)\" : \"transparent\",\n textDecoration: \"none\",\n color: \"inherit\",\n }}\n >\n {item.label}\n </a>\n );\n })}\n </div>\n );\n}\n", "import type React from \"react\";\n\nexport const ROUTES = {\n settings: \"github-settings\",\n repos: \"github-repos\",\n prs: \"github-prs\",\n graphs: \"github-graphs\",\n} as const;\n\nexport const PATHS = {\n settings: \"/github-settings\",\n repos: \"/github-repos\",\n prs: \"/github-prs\",\n graphs: \"/github-graphs\",\n} as const;\n\nexport const layoutStack: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n padding: \"16px\",\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(128,128,128,0.2)\",\n borderRadius: \"8px\",\n padding: \"12px\",\n background: \"rgba(128,128,128,0.04)\",\n};\n\nexport const buttonStyle: React.CSSProperties = {\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n border: \"1px solid rgba(128,128,128,0.3)\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: \"13px\",\n};\n\nexport const primaryButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n background: \"rgba(59,130,246,0.1)\",\n borderColor: \"rgba(59,130,246,0.3)\",\n color: \"#3b82f6\",\n};\n\nexport const badgeStyle = (color: string): React.CSSProperties => ({\n display: \"inline-block\",\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n fontSize: \"11px\",\n fontWeight: 600,\n background: `${color}20`,\n color,\n});\n\nexport function prStateBadge(state: string): { label: string; color: string } {\n switch (state) {\n case \"open\": return { label: \"Open\", color: \"#22c55e\" };\n case \"closed\": return { label: \"Closed\", color: \"#ef4444\" };\n case \"merged\": return { label: \"Merged\", color: \"#a855f7\" };\n case \"draft\": return { label: \"Draft\", color: \"#6b7280\" };\n default: return { label: state, color: \"#6b7280\" };\n }\n}\n\nexport function timeAgo(dateStr: string): string {\n const diff = Date.now() - new Date(dateStr).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 60) return `${mins}m ago`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle } from \"./shared.js\";\n\nexport function GitHubSettingsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n\n const [token, setToken] = useState(\"\");\n const [secretRef, setSecretRef] = useState(\"\");\n const [repoInput, setRepoInput] = useState(\"\");\n const [status, setStatus] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const saveToken = usePluginAction(\"save-token\");\n const saveSecretRefAction = usePluginAction(\"save-secret-ref\");\n const testConnection = usePluginAction(\"test-connection\");\n const addRepo = usePluginAction(\"add-repo\");\n const syncAll = usePluginAction(\"sync-all\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const handleSaveToken = async () => {\n if (!token.trim()) return;\n setLoading(true);\n try {\n await saveToken({ companyId, token: token.trim() });\n setStatus(\"Token salvo com sucesso\");\n setToken(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleSaveSecretRef = async () => {\n if (!secretRef.trim()) return;\n setLoading(true);\n try {\n await saveSecretRefAction({ companyId, secretRef: secretRef.trim() });\n setStatus(\"Secret ref salvo com sucesso\");\n setSecretRef(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleTestConnection = async () => {\n setLoading(true);\n try {\n const result = await testConnection({ companyId }) as { ok: boolean; login?: string; error?: string };\n if (result.ok) {\n setStatus(`Conectado como ${result.login}`);\n } else {\n setStatus(`Falha: ${result.error}`);\n }\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleAddRepo = async () => {\n if (!repoInput.trim()) return;\n setLoading(true);\n try {\n await addRepo({ companyId, fullName: repoInput.trim() });\n setStatus(`Reposit\u00F3rio ${repoInput.trim()} adicionado`);\n setRepoInput(\"\");\n } catch (err) {\n setStatus(`Erro: ${err}`);\n }\n setLoading(false);\n };\n\n const handleFullSync = async () => {\n setLoading(true);\n setStatus(\"Sincronizando...\");\n try {\n await syncAll({ companyId });\n setStatus(\"Sync completo finalizado\");\n } catch (err) {\n setStatus(`Erro no sync: ${err}`);\n }\n setLoading(false);\n };\n\n return (\n <div style={layoutStack}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Configura\u00E7\u00F5es GitHub</h2>\n\n {status && (\n <div style={{ ...cardStyle, fontSize: \"13px\", color: status.startsWith(\"Erro\") ? \"#ef4444\" : \"#22c55e\" }}>\n {status}\n </div>\n )}\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Autentica\u00E7\u00E3o</h3>\n <div style={{ display: \"flex\", gap: \"8px\", marginBottom: \"8px\" }}>\n <input\n type=\"password\"\n placeholder=\"GitHub Personal Access Token\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleSaveToken} disabled={loading}>\n Salvar PAT\n </button>\n </div>\n <div style={{ display: \"flex\", gap: \"8px\", marginBottom: \"8px\" }}>\n <input\n placeholder=\"UUID do secret (alternativa)\"\n value={secretRef}\n onChange={(e) => setSecretRef(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleSaveSecretRef} disabled={loading}>\n Salvar Ref\n </button>\n </div>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleTestConnection} disabled={loading}>\n Testar Conex\u00E3o\n </button>\n </div>\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Adicionar Reposit\u00F3rio</h3>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <input\n placeholder=\"owner/repo (ex: gauderp/gaud-erp-api)\"\n value={repoInput}\n onChange={(e) => setRepoInput(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={primaryButtonStyle} onClick={handleAddRepo} disabled={loading}>\n Adicionar\n </button>\n </div>\n </div>\n\n <div style={cardStyle}>\n <h3 style={{ margin: \"0 0 8px\", fontSize: \"14px\" }}>Sincroniza\u00E7\u00E3o</h3>\n <p style={{ margin: \"0 0 8px\", fontSize: \"12px\", opacity: 0.7 }}>\n Sync autom\u00E1tico a cada 5 minutos. Use o bot\u00E3o abaixo para for\u00E7ar um sync completo.\n </p>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleFullSync} disabled={loading}>\n {loading ? \"Sincronizando...\" : \"Sync Completo\"}\n </button>\n </div>\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle, timeAgo } from \"./shared.js\";\nimport type { GitHubRepo } from \"../../types.js\";\n\nexport function GitHubReposPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [filter, setFilter] = useState(\"\");\n\n const reposData = usePluginData<{ repos: GitHubRepo[]; lastSync: string | null }>(\"repos\", { companyId });\n const syncAction = usePluginAction(\"sync-all\");\n const generateGraph = usePluginAction(\"generate-graph\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const repos = (reposData.data?.repos ?? []).filter((r) =>\n !filter || r.fullName.toLowerCase().includes(filter.toLowerCase()),\n );\n\n return (\n <div style={layoutStack}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Reposit\u00F3rios ({repos.length})</h2>\n <div style={{ display: \"flex\", gap: \"8px\", alignItems: \"center\" }}>\n <span style={{ fontSize: \"11px\", opacity: 0.6 }}>\n \u00DAltimo sync: {reposData.data?.lastSync ? timeAgo(reposData.data.lastSync) : \"nunca\"}\n </span>\n <button\n type=\"button\"\n style={buttonStyle}\n onClick={() => syncAction({ companyId }).catch(console.error)}\n >\n Sync\n </button>\n </div>\n </div>\n\n <input\n placeholder=\"Filtrar reposit\u00F3rios...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={{ padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n\n {repos.length === 0 && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.6 }}>\n Nenhum reposit\u00F3rio rastreado. Adicione em Configura\u00E7\u00F5es.\n </div>\n )}\n\n {repos.map((repo) => (\n <div key={repo.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div>\n <a href={repo.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"14px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n {repo.fullName}\n </a>\n {repo.private && <span style={{ marginLeft: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>privado</span>}\n {repo.description && <p style={{ margin: \"4px 0 0\", fontSize: \"12px\", opacity: 0.7 }}>{repo.description}</p>}\n </div>\n <div style={{ display: \"flex\", gap: \"4px\" }}>\n <button\n type=\"button\"\n style={buttonStyle}\n onClick={() => generateGraph({ companyId, repoFullName: repo.fullName, level: \"code\" }).catch(console.error)}\n title=\"Gerar Knowledge Graph\"\n >\n Graphify\n </button>\n </div>\n </div>\n <div style={{ display: \"flex\", gap: \"16px\", marginTop: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>\n {repo.language && <span>{repo.language}</span>}\n <span>branch: {repo.defaultBranch}</span>\n <span>sync: {timeAgo(repo.syncedAt)}</span>\n </div>\n </div>\n ))}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, badgeStyle, prStateBadge, timeAgo } from \"./shared.js\";\nimport type { PRWithRepo } from \"../../types.js\";\n\nexport function GitHubPullRequestsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [stateFilter, setStateFilter] = useState<string>(\"open\");\n const [search, setSearch] = useState(\"\");\n\n const prsData = usePluginData<{ pullRequests: PRWithRepo[] }>(\"pull-requests\", {\n companyId,\n filters: stateFilter ? { state: stateFilter } : undefined,\n });\n\n const syncAction = usePluginAction(\"sync-incremental\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const prs = (prsData.data?.pullRequests ?? []).filter((pr) =>\n !search || pr.title.toLowerCase().includes(search.toLowerCase()) || pr.repoFullName.toLowerCase().includes(search.toLowerCase()),\n );\n\n return (\n <div style={layoutStack}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Pull Requests ({prs.length})</h2>\n <button type=\"button\" style={buttonStyle} onClick={() => syncAction({ companyId }).catch(console.error)}>\n Sync\n </button>\n </div>\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n {[\"open\", \"closed\", \"merged\", \"\"].map((state) => (\n <button\n key={state}\n type=\"button\"\n style={{\n ...buttonStyle,\n background: stateFilter === state ? \"rgba(128,128,128,0.15)\" : \"transparent\",\n fontWeight: stateFilter === state ? 600 : 400,\n }}\n onClick={() => setStateFilter(state)}\n >\n {state || \"Todos\"}\n </button>\n ))}\n <input\n placeholder=\"Buscar por t\u00EDtulo ou repo...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ flex: 1, minWidth: \"200px\", padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n </div>\n\n {prs.length === 0 && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.6 }}>\n Nenhum PR encontrado com os filtros atuais.\n </div>\n )}\n\n {prs.map((pr) => {\n const badge = prStateBadge(pr.draft ? \"draft\" : pr.state);\n return (\n <div key={pr.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <span style={badgeStyle(badge.color)}>{badge.label}</span>\n <a href={pr.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"14px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n #{pr.number} {pr.title}\n </a>\n </div>\n <div style={{ marginTop: \"4px\", fontSize: \"12px\", opacity: 0.6 }}>\n {pr.repoFullName} \u00B7 {pr.author} \u00B7 {pr.headBranch} \u2192 {pr.baseBranch} \u00B7 {timeAgo(pr.updatedAt)}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { layoutStack, cardStyle, buttonStyle, primaryButtonStyle } from \"./shared.js\";\nimport type { GraphData } from \"../../graphify/graph-generator.js\";\n\nexport function GitHubGraphsPage() {\n const context = useHostContext();\n const companyId = context.companyId;\n const [graphData, setGraphData] = useState<GraphData | null>(null);\n const [loading, setLoading] = useState(false);\n const [repoInput, setRepoInput] = useState(\"\");\n\n const generateGraph = usePluginAction(\"generate-graph\");\n\n if (!companyId) return <div style={layoutStack}>Selecione uma empresa.</div>;\n\n const handleGenerateHighLevel = async () => {\n setLoading(true);\n try {\n const result = await generateGraph({ companyId, level: \"high\" }) as GraphData;\n setGraphData(result);\n } catch (err) {\n console.error(err);\n }\n setLoading(false);\n };\n\n const handleGenerateCode = async () => {\n if (!repoInput.trim()) return;\n setLoading(true);\n try {\n const result = await generateGraph({ companyId, repoFullName: repoInput.trim(), level: \"code\" }) as GraphData;\n setGraphData(result);\n } catch (err) {\n console.error(err);\n }\n setLoading(false);\n };\n\n return (\n <div style={layoutStack}>\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>Knowledge Graphs</h2>\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n <button type=\"button\" style={primaryButtonStyle} onClick={handleGenerateHighLevel} disabled={loading}>\n {loading ? \"Gerando...\" : \"Grafo de Alto N\u00EDvel\"}\n </button>\n <div style={{ display: \"flex\", gap: \"4px\", flex: 1 }}>\n <input\n placeholder=\"owner/repo para drill-down...\"\n value={repoInput}\n onChange={(e) => setRepoInput(e.target.value)}\n style={{ flex: 1, padding: \"6px 10px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\" }}\n />\n <button type=\"button\" style={buttonStyle} onClick={handleGenerateCode} disabled={loading || !repoInput.trim()}>\n Grafo de C\u00F3digo\n </button>\n </div>\n </div>\n\n {graphData && (\n <div style={cardStyle}>\n <div style={{ marginBottom: \"8px\", fontSize: \"13px\" }}>\n <strong>{graphData.level === \"high\" ? \"Vis\u00E3o Geral\" : graphData.repoFullName}</strong>\n <span style={{ marginLeft: \"8px\", fontSize: \"11px\", opacity: 0.5 }}>\n {graphData.nodes.length} n\u00F3s \u00B7 {graphData.edges.length} arestas \u00B7 {new Date(graphData.generatedAt).toLocaleString()}\n </span>\n </div>\n <div style={{ maxHeight: \"400px\", overflow: \"auto\", fontSize: \"12px\" }}>\n <div style={{ marginBottom: \"8px\" }}>\n <strong>N\u00F3s:</strong>\n {graphData.nodes.map((node) => (\n <div key={node.id} style={{ padding: \"2px 0\", paddingLeft: \"12px\" }}>\n <span style={{ opacity: 0.5 }}>[{node.type}]</span> {node.label}\n </div>\n ))}\n </div>\n <div>\n <strong>Arestas:</strong>\n {graphData.edges.map((edge, i) => (\n <div key={i} style={{ padding: \"2px 0\", paddingLeft: \"12px\" }}>\n {edge.source} \u2192 {edge.target} <span style={{ opacity: 0.5 }}>({edge.label})</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {!graphData && !loading && (\n <div style={{ ...cardStyle, textAlign: \"center\", opacity: 0.5 }}>\n Clique em um dos bot\u00F5es acima para gerar um knowledge graph.\n </div>\n )}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport type { PluginDetailTabProps } from \"@paperclipai/plugin-sdk/ui\";\nimport { usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { cardStyle, buttonStyle, badgeStyle, prStateBadge, timeAgo } from \"./shared.js\";\nimport { ReviewDropdown } from \"./ReviewDropdown.js\";\nimport type { PRWithRepo } from \"../../types.js\";\n\nexport function GitHubDetailTab({ context }: PluginDetailTabProps) {\n const issueId = context.entityId;\n const companyId = context.companyId;\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [selectedPrId, setSelectedPrId] = useState<number | null>(null);\n\n const cardPRs = usePluginData<{ pullRequests: PRWithRepo[] }>(\"card-prs\", {\n companyId,\n issueId,\n });\n\n const allPRs = usePluginData<{ pullRequests: PRWithRepo[] }>(\"pull-requests\", {\n companyId,\n filters: { state: \"open\" },\n });\n\n const linkAction = usePluginAction(\"link-pr-to-card\");\n const quickCheck = usePluginAction(\"run-quick-check\");\n\n if (!companyId || !issueId) {\n return <div style={{ padding: \"12px\", fontSize: \"13px\", opacity: 0.5 }}>Sem contexto dispon\u00EDvel.</div>;\n }\n\n const prs = cardPRs.data?.pullRequests ?? [];\n\n const handleLink = async () => {\n if (!selectedPrId) return;\n await linkAction({ prId: selectedPrId, issueId });\n setShowLinkInput(false);\n setSelectedPrId(null);\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\", padding: \"12px\" }}>\n {prs.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: \"20px 0\" }}>\n <p style={{ fontSize: \"13px\", opacity: 0.5, margin: \"0 0 12px\" }}>\n Nenhum PR vinculado a este card.\n </p>\n <button type=\"button\" style={buttonStyle} onClick={() => setShowLinkInput(true)}>\n Vincular PR\n </button>\n </div>\n ) : (\n <>\n {prs.map((pr) => {\n const badge = prStateBadge(pr.draft ? \"draft\" : pr.state);\n return (\n <div key={pr.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\" }}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\" }}>\n <span style={badgeStyle(badge.color)}>{badge.label}</span>\n <a href={pr.htmlUrl} target=\"_blank\" rel=\"noopener\" style={{ fontWeight: 600, fontSize: \"13px\", color: \"#3b82f6\", textDecoration: \"none\" }}>\n #{pr.number} {pr.title}\n </a>\n </div>\n <div style={{ marginTop: \"4px\", fontSize: \"11px\", opacity: 0.5 }}>\n {pr.repoFullName} \u00B7 {pr.author} \u00B7 {pr.headBranch} \u2192 {pr.baseBranch} \u00B7 {timeAgo(pr.updatedAt)}\n </div>\n </div>\n <ReviewDropdown\n companyId={companyId}\n prId={pr.id}\n repoFullName={pr.repoFullName}\n prNumber={pr.number}\n />\n </div>\n </div>\n );\n })}\n <button type=\"button\" style={{ ...buttonStyle, alignSelf: \"flex-start\", fontSize: \"12px\" }} onClick={() => setShowLinkInput(true)}>\n + Vincular outro PR\n </button>\n </>\n )}\n\n {showLinkInput && (\n <div style={cardStyle}>\n <div style={{ fontSize: \"13px\", fontWeight: 500, marginBottom: \"8px\" }}>Selecionar PR</div>\n <select\n style={{ width: \"100%\", padding: \"6px\", borderRadius: \"6px\", border: \"1px solid rgba(128,128,128,0.3)\", background: \"transparent\", fontSize: \"13px\", marginBottom: \"8px\" }}\n onChange={(e) => setSelectedPrId(Number(e.target.value))}\n value={selectedPrId ?? \"\"}\n >\n <option value=\"\">Selecione um PR...</option>\n {(allPRs.data?.pullRequests ?? []).map((pr) => (\n <option key={pr.id} value={pr.id}>\n {pr.repoFullName} #{pr.number} \u2014 {pr.title}\n </option>\n ))}\n </select>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <button type=\"button\" style={buttonStyle} onClick={handleLink} disabled={!selectedPrId}>\n Vincular\n </button>\n <button type=\"button\" style={buttonStyle} onClick={() => setShowLinkInput(false)}>\n Cancelar\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n", "import React, { useState } from \"react\";\nimport { usePluginData, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { buttonStyle, primaryButtonStyle } from \"./shared.js\";\n\ntype Agent = { id: string; displayName: string; role: string };\n\ntype Props = {\n companyId: string;\n prId: number;\n repoFullName: string;\n prNumber: number;\n};\n\nexport function ReviewDropdown({ companyId, prId, repoFullName, prNumber }: Props) {\n const [open, setOpen] = useState(false);\n const [reviewing, setReviewing] = useState(false);\n\n const agentsData = usePluginData<{ agents: Agent[] }>(\"available-agents\", { companyId });\n const requestReview = usePluginAction(\"request-review\");\n\n const agents = agentsData.data?.agents ?? [];\n\n const handleReview = async (agentId: string) => {\n setReviewing(true);\n setOpen(false);\n try {\n await requestReview({ companyId, prId, repoFullName, prNumber, agentId });\n } catch (err) {\n console.error(\"Review request failed:\", err);\n }\n setReviewing(false);\n };\n\n if (reviewing) {\n return <span style={{ fontSize: \"12px\", opacity: 0.6 }}>Revisando...</span>;\n }\n\n return (\n <div style={{ position: \"relative\", display: \"inline-block\" }}>\n <button type=\"button\" style={primaryButtonStyle} onClick={() => setOpen(!open)}>\n Revisar \u25BE\n </button>\n {open && (\n <div style={{\n position: \"absolute\", top: \"100%\", right: 0, marginTop: \"4px\",\n background: \"var(--background, #1a1a1a)\", border: \"1px solid rgba(128,128,128,0.3)\",\n borderRadius: \"8px\", padding: \"4px\", minWidth: \"200px\", zIndex: 10,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.3)\",\n }}>\n {agents.length === 0 && (\n <div style={{ padding: \"8px\", fontSize: \"12px\", opacity: 0.5 }}>Nenhum agente dispon\u00EDvel</div>\n )}\n {agents.map((agent) => (\n <button\n key={agent.id}\n type=\"button\"\n style={{ ...buttonStyle, width: \"100%\", textAlign: \"left\", border: \"none\", borderRadius: \"4px\" }}\n onClick={() => handleReview(agent.id)}\n >\n <div style={{ fontWeight: 500 }}>{agent.displayName}</div>\n <div style={{ fontSize: \"11px\", opacity: 0.5 }}>{agent.role}</div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\nimport type { PluginWidgetProps } from \"@paperclipai/plugin-sdk/ui\";\nimport { useHostNavigation, usePluginData } from \"@paperclipai/plugin-sdk/ui\";\nimport { PATHS, timeAgo } from \"./shared.js\";\n\nexport function GitHubDashboardWidget({ context }: PluginWidgetProps) {\n const nav = useHostNavigation();\n const syncStatus = usePluginData<{ lastSync: string | null; repoCount: number; openPRCount: number }>(\"sync-status\", {\n companyId: context.companyId,\n });\n\n const data = syncStatus.data;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\", fontSize: \"12px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong style={{ fontSize: \"13px\" }}>GitHub</strong>\n <span style={{\n display: \"inline-block\", width: \"8px\", height: \"8px\", borderRadius: \"50%\",\n background: data ? \"#22c55e\" : \"#6b7280\",\n }} />\n </div>\n <div style={{ display: \"grid\", gap: \"2px\" }}>\n <div>Reposit\u00F3rios: {data?.repoCount ?? 0}</div>\n <div>PRs abertos: {data?.openPRCount ?? 0}</div>\n <div>\u00DAltimo sync: {data?.lastSync ? timeAgo(data.lastSync) : \"nunca\"}</div>\n </div>\n <a {...nav.linkProps(PATHS.prs)} style={{ fontSize: \"12px\", color: \"#3b82f6\" }}>\n Ver Pull Requests \u2192\n </a>\n </div>\n );\n}\n", "import React from \"react\";\nimport { useHostContext, usePluginAction } from \"@paperclipai/plugin-sdk/ui\";\nimport { buttonStyle } from \"./shared.js\";\n\nexport function GitHubContextMenu() {\n const context = useHostContext();\n const generateGraph = usePluginAction(\"generate-graph\");\n\n const handleGraphify = () => {\n if (!context.companyId) return;\n void generateGraph({\n companyId: context.companyId,\n level: \"high\",\n }).catch(console.error);\n };\n\n return (\n <button type=\"button\" style={buttonStyle} onClick={handleGraphify}>\n Gerar Knowledge Graph\n </button>\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["jsx", "jsxs", "useState", "useHostContext", "usePluginData", "usePluginAction", "jsx", "jsxs", "useHostContext", "useState", "usePluginData", "usePluginAction", "useState", "useHostContext", "usePluginData", "usePluginAction", "jsx", "jsxs", "useHostContext", "useState", "usePluginData", "usePluginAction", "useState", "useHostContext", "usePluginAction", "jsx", "jsxs", "useHostContext", "useState", "usePluginAction", "useState", "usePluginData", "usePluginAction", "useState", "usePluginData", "usePluginAction", "jsx", "jsxs", "useState", "usePluginData", "usePluginAction", "jsx", "jsxs", "useState", "usePluginData", "usePluginAction", "useHostNavigation", "usePluginData", "jsx", "jsxs", "useHostNavigation", "usePluginData", "useHostContext", "usePluginAction", "jsx", "useHostContext", "usePluginAction"]
|
|
7
7
|
}
|
package/package.json
CHANGED