@gaud_erp/paperclip-github-manager 0.4.0 → 1.1.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 +133 -61
- package/dist/manifest.js +159 -68
- package/dist/manifest.js.map +3 -3
- package/dist/ui/index.js +671 -542
- package/dist/ui/index.js.map +4 -4
- package/dist/worker.js +998 -829
- package/dist/worker.js.map +4 -4
- package/package.json +28 -40
- package/src/db/migrations/001_initial.sql +70 -0
package/dist/ui/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/ui/
|
|
4
|
-
"sourcesContent": ["import { useMemo, useState } from \"react\";\nimport {\n useHostContext,\n useHostLocation,\n useHostNavigation,\n usePluginAction,\n usePluginData,\n type PluginPageProps,\n type PluginSidebarProps,\n type PluginWidgetProps\n} from \"@paperclipai/plugin-sdk/ui\";\nimport { GITHUB_TOKEN_SECRET_KEY, PATHS } from \"../constants.js\";\nimport type { GitHubRepoSummary, ReposData, SyncOverviewData } from \"../types.js\";\n\ntype HealthData = {\n status: \"ok\" | \"degraded\" | \"error\";\n checkedAt: string;\n message?: string;\n login?: string;\n auth?: { configured: boolean; mode: \"pat\" | \"secret-ref\" | \"none\" };\n};\n\ntype WebhookConfigData = {\n configured: boolean;\n config: {\n repoFullName: string;\n events: string[];\n hookId?: number;\n configuredAt: string;\n inboundUrl: string;\n } | null;\n inboundUrl: string;\n};\n\nconst panelStyle: React.CSSProperties = {\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 8,\n padding: \"1rem\",\n display: \"grid\",\n gap: \"0.75rem\"\n};\n\nconst buttonStyle: React.CSSProperties = {\n padding: \"0.4rem 0.75rem\",\n borderRadius: 6,\n border: \"1px solid rgba(255,255,255,0.2)\",\n background: \"rgba(255,255,255,0.06)\",\n cursor: \"pointer\"\n};\n\nconst sidebarLinkClass =\n \"flex w-full items-center gap-2.5 px-3 py-2 text-[13px] font-medium transition-colors no-underline\";\nconst sidebarLinkActiveClass = \"bg-accent text-foreground\";\nconst sidebarLinkIdleClass = \"text-foreground/80 hover:bg-accent/50 hover:text-foreground\";\n\nconst NAV_ITEMS = [\n { path: PATHS.settings, label: \"Configura\u00E7\u00F5es\" },\n { path: PATHS.repos, label: \"Reposit\u00F3rios\" },\n { path: PATHS.pullRequests, label: \"Pull requests\" }\n] as const;\n\nfunction useGithubCompany() {\n const { companyId } = useHostContext();\n const companyParams = useMemo(\n () => (companyId ? { companyId } : undefined),\n [companyId]\n );\n return { companyId, companyParams };\n}\n\nfunction isPathActive(pathname: string, href: string): boolean {\n return pathname === href || pathname.startsWith(`${href}/`);\n}\n\n/** Sub-navega\u00E7\u00E3o do m\u00F3dulo GitHub (estilo Projects). */\nfunction GitHubModuleNav() {\n const nav = useHostNavigation();\n const { pathname } = useHostLocation();\n\n return (\n <nav style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.125rem\" }}>\n {NAV_ITEMS.map((item) => {\n const href = nav.resolveHref(item.path);\n const active = isPathActive(pathname, href);\n return (\n <a\n key={item.path}\n {...nav.linkProps(item.path)}\n className={`${sidebarLinkClass} ${active ? sidebarLinkActiveClass : sidebarLinkIdleClass}`}\n >\n <span className=\"flex-1 truncate\">{item.label}</span>\n </a>\n );\n })}\n </nav>\n );\n}\n\n/** Painel na sidebar principal (abaixo de Company), label GitHub. */\nexport function GitHubSidebarModule(_props: PluginSidebarProps) {\n return (\n <div style={{ display: \"grid\", gap: \"0.25rem\" }}>\n <div\n style={{\n padding: \"0.25rem 0.75rem\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n opacity: 0.55\n }}\n >\n GitHub\n </div>\n <GitHubModuleNav />\n </div>\n );\n}\n\n/** Sidebar ao navegar em rotas /github/*. */\nexport function GitHubRouteSidebar(_props: PluginSidebarProps) {\n const nav = useHostNavigation();\n\n return (\n <nav style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.25rem\", padding: \"0.5rem 0\" }}>\n <a\n {...nav.linkProps(\"/dashboard\")}\n className={`${sidebarLinkClass} ${sidebarLinkIdleClass}`}\n >\n <span className=\"flex-1 truncate\">\u2190 Company dashboard</span>\n </a>\n <div\n style={{\n padding: \"0.75rem 0.75rem 0.25rem\",\n fontSize: \"0.7rem\",\n fontWeight: 600,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n opacity: 0.55\n }}\n >\n GitHub\n </div>\n <GitHubModuleNav />\n </nav>\n );\n}\n\nfunction RepoTable({ repos }: { repos: GitHubRepoSummary[] }) {\n if (repos.length === 0) {\n return <div>Nenhum reposit\u00F3rio listado. Configure o token em Configura\u00E7\u00F5es.</div>;\n }\n\n return (\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: \"0.9rem\" }}>\n <thead>\n <tr style={{ textAlign: \"left\", opacity: 0.7 }}>\n <th style={{ padding: \"0.35rem 0\" }}>Reposit\u00F3rio</th>\n <th>Atualizado</th>\n <th>Visibilidade</th>\n </tr>\n </thead>\n <tbody>\n {repos.map((repo) => (\n <tr key={repo.id}>\n <td style={{ padding: \"0.35rem 0\" }}>\n <a href={repo.htmlUrl} target=\"_blank\" rel=\"noreferrer\">\n {repo.fullName}\n </a>\n </td>\n <td>{new Date(repo.updatedAt).toLocaleString()}</td>\n <td>{repo.private ? \"private\" : \"public\"}</td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport function DashboardWidget(_props: PluginWidgetProps) {\n const { companyParams } = useGithubCompany();\n const { data, loading, error } = usePluginData<HealthData>(\"health\", companyParams);\n const ping = usePluginAction(\"ping\");\n const nav = useHostNavigation();\n\n if (loading) return <div>Carregando status do GitHub...</div>;\n if (error) return <div>Erro do plugin: {error.message}</div>;\n\n return (\n <div style={{ display: \"grid\", gap: \"0.5rem\" }}>\n <strong>GitHub Manager</strong>\n <div>Status: {data?.status ?? \"unknown\"}</div>\n {data?.login ? <div>Conta: {data.login}</div> : null}\n {data?.message ? <div>{data.message}</div> : null}\n <div>Verificado: {data?.checkedAt ?? \"nunca\"}</div>\n {data?.status !== \"ok\" ? (\n <a {...nav.linkProps(PATHS.settings)} style={{ fontSize: \"0.85rem\" }}>\n Configurar token \u2192\n </a>\n ) : null}\n <button style={buttonStyle} onClick={() => void ping()}>\n Ping Worker\n </button>\n </div>\n );\n}\n\nexport function GitHubSettingsPage(_props: PluginPageProps) {\n const nav = useHostNavigation();\n const { companyId, companyParams } = useGithubCompany();\n const { data: health, loading, error, refresh } = usePluginData<HealthData>(\"health\", companyParams);\n const saveGithubToken = usePluginAction(\"saveGithubToken\");\n const saveGithubSecretRef = usePluginAction(\"saveGithubSecretRef\");\n const clearGithubAuth = usePluginAction(\"clearGithubAuth\");\n\n const [pat, setPat] = useState(\"\");\n const [secretRef, setSecretRef] = useState(\"\");\n const [busy, setBusy] = useState<string | null>(null);\n const [formMessage, setFormMessage] = useState<string | null>(null);\n\n async function runSave(label: string, fn: () => Promise<unknown>) {\n if (!companyId) {\n setFormMessage(\"Selecione uma company no header do Paperclip.\");\n return;\n }\n setBusy(label);\n setFormMessage(null);\n try {\n await fn();\n setPat(\"\");\n setFormMessage(`${label} \u2014 OK. Testando conex\u00E3o\u2026`);\n refresh();\n } catch (err) {\n setFormMessage(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n }\n\n return (\n <div style={{ padding: \"1.5rem\", display: \"grid\", gap: \"1rem\", maxWidth: 720 }}>\n <header>\n <h1 style={{ margin: 0 }}>GitHub \u2014 Configura\u00E7\u00F5es</h1>\n <p style={{ margin: \"0.5rem 0 0\", opacity: 0.8 }}>\n Conecte um Personal Access Token (PAT) da GitHub. O token fica no estado do plugin por\n company (o Paperclip ainda n\u00E3o resolve <code>secrets.read-ref</code> em workers \u2014 PAP-2394).\n </p>\n </header>\n\n {!companyId ? (\n <p style={{ margin: 0, opacity: 0.8 }}>Selecione uma company no header do Paperclip.</p>\n ) : null}\n\n <section style={panelStyle}>\n <strong>1. Personal Access Token (recomendado)</strong>\n <p style={{ margin: 0, opacity: 0.85 }}>\n Gere um PAT em GitHub \u2192 Settings \u2192 Developer settings. Escopos: <code>repo</code>,{\" \"}\n <code>read:user</code>; para webhooks tamb\u00E9m <code>admin:repo_hook</code>.\n </p>\n <label style={{ display: \"grid\", gap: \"0.35rem\" }}>\n PAT\n <input\n type=\"password\"\n autoComplete=\"off\"\n value={pat}\n onChange={(e) => setPat(e.target.value)}\n placeholder=\"ghp_\u2026\"\n style={{ maxWidth: 480, padding: \"0.4rem 0.5rem\" }}\n />\n </label>\n <button\n style={buttonStyle}\n type=\"button\"\n disabled={Boolean(busy) || !companyId || !pat.trim()}\n onClick={() =>\n void runSave(\"Salvar token\", () =>\n saveGithubToken({ companyId: companyId!, token: pat })\n )\n }\n >\n Salvar token\n </button>\n </section>\n\n <section style={panelStyle}>\n <strong>2. Secret ID (futuro)</strong>\n <p style={{ margin: 0, opacity: 0.85 }}>\n Se voc\u00EA j\u00E1 criou um secret em <strong>Company \u2192 Settings</strong> (chave{\" \"}\n <code>{GITHUB_TOKEN_SECRET_KEY}</code>), copie o <strong>ID (UUID)</strong> do secret \u2014 n\u00E3o\n basta a chave. Quando o Paperclip reabilitar secret refs, este campo passar\u00E1 a funcionar\n sem colar o PAT aqui.\n </p>\n <a\n {...nav.linkProps(PATHS.companySecrets)}\n className={sidebarLinkClass}\n style={{ display: \"inline-flex\", width: \"auto\", marginTop: \"0.25rem\" }}\n >\n Abrir Company Settings\n </a>\n <label style={{ display: \"grid\", gap: \"0.35rem\", marginTop: \"0.75rem\" }}>\n Secret ID (UUID)\n <input\n value={secretRef}\n onChange={(e) => setSecretRef(e.target.value)}\n placeholder=\"00000000-0000-0000-0000-000000000000\"\n style={{ maxWidth: 480, padding: \"0.4rem 0.5rem\", fontFamily: \"monospace\" }}\n />\n </label>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"0.5rem\" }}>\n <button\n style={buttonStyle}\n type=\"button\"\n disabled={Boolean(busy) || !companyId || !secretRef.trim()}\n onClick={() =>\n void runSave(\"Salvar Secret ID\", () =>\n saveGithubSecretRef({ companyId: companyId!, secretRef })\n )\n }\n >\n Salvar Secret ID\n </button>\n <button\n style={buttonStyle}\n type=\"button\"\n disabled={Boolean(busy) || !companyId}\n onClick={() =>\n void runSave(\"Limpar credenciais\", () => clearGithubAuth({ companyId: companyId! }))\n }\n >\n Limpar\n </button>\n </div>\n </section>\n\n <section style={panelStyle}>\n <strong>3. Testar conex\u00E3o</strong>\n {health?.auth ? (\n <div style={{ fontSize: \"0.85rem\", opacity: 0.75 }}>\n Credencial: {health.auth.configured ? health.auth.mode : \"nenhuma\"}\n </div>\n ) : null}\n {loading ? <div>Verificando...</div> : null}\n {error ? <div>Erro: {error.message}</div> : null}\n {health ? (\n <div style={{ display: \"grid\", gap: \"0.35rem\" }}>\n <div>\n Status: <strong>{health.status}</strong>\n {health.login ? ` \u2014 @${health.login}` : \"\"}\n </div>\n {health.message ? <div>{health.message}</div> : null}\n <div style={{ fontSize: \"0.85rem\", opacity: 0.7 }}>\n Verificado: {new Date(health.checkedAt).toLocaleString()}\n </div>\n </div>\n ) : null}\n <button\n style={buttonStyle}\n type=\"button\"\n disabled={Boolean(busy) || !companyId}\n onClick={() => refresh()}\n >\n Testar conex\u00E3o\n </button>\n {health?.status === \"ok\" ? (\n <p style={{ margin: 0, color: \"inherit\", opacity: 0.85 }}>\n Token OK. Use <a {...nav.linkProps(PATHS.repos)}>Reposit\u00F3rios</a> e{\" \"}\n <a {...nav.linkProps(PATHS.pullRequests)}>Pull requests</a>.\n </p>\n ) : null}\n </section>\n\n {formMessage ? <div>{formMessage}</div> : null}\n {busy ? <div>Executando: {busy}\u2026</div> : null}\n </div>\n );\n}\n\nexport function GitHubReposPage(_props: PluginPageProps) {\n const nav = useHostNavigation();\n const { companyId, companyParams } = useGithubCompany();\n const { data: health, loading: healthLoading, error: healthError } =\n usePluginData<HealthData>(\"health\", companyParams);\n const {\n data: reposData,\n loading: reposLoading,\n error: reposError,\n refresh: refreshRepos\n } = usePluginData<ReposData>(\"repos\", companyParams);\n const {\n data: webhookData,\n loading: webhookLoading,\n refresh: refreshWebhook\n } = usePluginData<WebhookConfigData>(\"webhookConfig\", companyParams);\n\n const setTrackedRepos = usePluginAction(\"setTrackedRepos\");\n const configureWebhook = usePluginAction(\"configureWebhook\");\n\n const [selectedRepo, setSelectedRepo] = useState(\"\");\n const [busy, setBusy] = useState<string | null>(null);\n const [actionMessage, setActionMessage] = useState<string | null>(null);\n\n const trackedSelection = selectedRepo || reposData?.repos[0]?.fullName || \"\";\n const needsToken = health?.status === \"degraded\" || health?.status === \"error\";\n\n async function runAction(label: string, fn: () => Promise<unknown>) {\n if (!companyId) {\n setActionMessage(\"Selecione uma company no host antes de continuar.\");\n return;\n }\n setBusy(label);\n setActionMessage(null);\n try {\n await fn();\n refreshRepos();\n refreshWebhook();\n setActionMessage(`${label} conclu\u00EDdo.`);\n } catch (err) {\n setActionMessage(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n }\n\n return (\n <div style={{ padding: \"1.5rem\", display: \"grid\", gap: \"1rem\", maxWidth: 960 }}>\n <header>\n <h1 style={{ margin: 0 }}>GitHub \u2014 Reposit\u00F3rios</h1>\n <p style={{ margin: \"0.5rem 0 0\", opacity: 0.8 }}>\n Liste reposit\u00F3rios e escolha quais rastrear para sync e webhooks.\n </p>\n </header>\n\n {needsToken ? (\n <section style={panelStyle}>\n <strong>Token n\u00E3o configurado</strong>\n <p style={{ margin: 0 }}>\n <a {...nav.linkProps(PATHS.settings)}>Abrir Configura\u00E7\u00F5es</a> e salve um PAT da GitHub.\n </p>\n </section>\n ) : null}\n\n <section style={panelStyle}>\n <strong>Conex\u00E3o</strong>\n {healthLoading ? <div>Carregando...</div> : null}\n {healthError ? <div>Erro: {healthError.message}</div> : null}\n {health ? (\n <div>\n Status: {health.status}\n {health.login ? ` \u2014 ${health.login}` : \"\"}\n {health.message ? <div>{health.message}</div> : null}\n </div>\n ) : null}\n </section>\n\n <section style={panelStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"0.5rem\" }}>\n <strong>Reposit\u00F3rios</strong>\n <button style={buttonStyle} disabled={Boolean(busy)} onClick={() => refreshRepos()}>\n Atualizar lista\n </button>\n </div>\n {reposLoading ? <div>Carregando reposit\u00F3rios...</div> : null}\n {reposError ? <div>Erro: {reposError.message}</div> : null}\n {reposData?.message ? <div>{reposData.message}</div> : null}\n {reposData ? <RepoTable repos={reposData.repos} /> : null}\n {reposData?.repos.length ? (\n <label style={{ display: \"grid\", gap: \"0.35rem\" }}>\n Repo para webhook\n <select\n value={trackedSelection}\n onChange={(e) => setSelectedRepo(e.target.value)}\n style={{ maxWidth: 420 }}\n >\n {reposData.repos.map((repo) => (\n <option key={repo.id} value={repo.fullName}>\n {repo.fullName}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n <button\n style={buttonStyle}\n disabled={Boolean(busy) || !trackedSelection || !companyId || needsToken}\n onClick={() =>\n void runAction(\"Salvar repos rastreados\", () =>\n setTrackedRepos({\n companyId,\n repos: reposData?.repos.slice(0, 5).map((r) => r.fullName) ?? []\n })\n )\n }\n >\n Rastrear top 5 repos\n </button>\n </section>\n\n <section style={panelStyle}>\n <strong>Webhooks</strong>\n {webhookLoading ? <div>Carregando configura\u00E7\u00E3o...</div> : null}\n <div style={{ fontSize: \"0.85rem\", opacity: 0.85 }}>\n URL inbound: <code>{webhookData?.inboundUrl ?? \"\u2014\"}</code>\n </div>\n {webhookData?.configured && webhookData.config ? (\n <div>\n Configurado para <strong>{webhookData.config.repoFullName}</strong> (hook{\" \"}\n {webhookData.config.hookId ?? \"?\"}) em{\" \"}\n {new Date(webhookData.config.configuredAt).toLocaleString()}\n </div>\n ) : (\n <div>Nenhum webhook registrado nesta company.</div>\n )}\n <button\n style={buttonStyle}\n disabled={Boolean(busy) || !companyId || !trackedSelection || needsToken}\n onClick={() =>\n void runAction(\"Registrar webhook\", () =>\n configureWebhook({\n companyId: companyId!,\n repoFullName: trackedSelection,\n events: [\"pull_request\", \"issues\"]\n })\n )\n }\n >\n Registrar webhook no GitHub\n </button>\n </section>\n\n {actionMessage ? <div>{actionMessage}</div> : null}\n {busy ? <div>Executando: {busy}...</div> : null}\n </div>\n );\n}\n\nexport function GitHubPullRequestsPage(_props: PluginPageProps) {\n const nav = useHostNavigation();\n const { companyId, companyParams } = useGithubCompany();\n const { data: health } = usePluginData<HealthData>(\"health\", companyParams);\n const {\n data: syncOverview,\n loading: syncLoading,\n error: syncError,\n refresh: refreshSync\n } = usePluginData<SyncOverviewData>(\"syncOverview\", companyParams);\n\n const syncAll = usePluginAction(\"syncAll\");\n const syncPullRequests = usePluginAction(\"syncPullRequests\");\n const syncIssues = usePluginAction(\"syncIssues\");\n\n const [busy, setBusy] = useState<string | null>(null);\n const [actionMessage, setActionMessage] = useState<string | null>(null);\n const needsToken = health?.status === \"degraded\" || health?.status === \"error\";\n\n async function runAction(label: string, fn: () => Promise<unknown>) {\n if (!companyId) {\n setActionMessage(\"Selecione uma company no host.\");\n return;\n }\n setBusy(label);\n setActionMessage(null);\n try {\n await fn();\n refreshSync();\n setActionMessage(`${label} conclu\u00EDdo.`);\n } catch (err) {\n setActionMessage(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n }\n\n return (\n <div style={{ padding: \"1.5rem\", display: \"grid\", gap: \"1rem\", maxWidth: 960 }}>\n <header>\n <h1 style={{ margin: 0 }}>GitHub \u2014 Pull requests</h1>\n <p style={{ margin: \"0.5rem 0 0\", opacity: 0.8 }}>\n Sincronize PRs e issues abertos dos reposit\u00F3rios rastreados.\n </p>\n </header>\n\n {needsToken ? (\n <section style={panelStyle}>\n <a {...nav.linkProps(PATHS.settings)}>Configurar token GitHub</a>\n </section>\n ) : null}\n\n <section style={panelStyle}>\n <strong>Sync PRs / Issues</strong>\n {syncLoading ? <div>Carregando overview...</div> : null}\n {syncError ? <div>Erro: {syncError.message}</div> : null}\n {syncOverview ? (\n <div style={{ display: \"grid\", gap: \"0.35rem\" }}>\n <div>{syncOverview.message}</div>\n <div>\n PRs abertos: {syncOverview.pullRequestCount} \u2014 Issues abertas:{\" \"}\n {syncOverview.issueCount}\n </div>\n {syncOverview.lastSyncedAt ? (\n <div>\u00DAltimo sync: {new Date(syncOverview.lastSyncedAt).toLocaleString()}</div>\n ) : null}\n </div>\n ) : null}\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"0.5rem\" }}>\n <button\n style={buttonStyle}\n disabled={Boolean(busy) || !companyId || needsToken}\n onClick={() => void runAction(\"Sync completo\", () => syncAll({ companyId: companyId! }))}\n >\n Sync tudo\n </button>\n <button\n style={buttonStyle}\n disabled={Boolean(busy) || !companyId || needsToken}\n onClick={() =>\n void runAction(\"Sync PRs\", () => syncPullRequests({ companyId: companyId! }))\n }\n >\n Sync PRs\n </button>\n <button\n style={buttonStyle}\n disabled={Boolean(busy) || !companyId || needsToken}\n onClick={() =>\n void runAction(\"Sync issues\", () => syncIssues({ companyId: companyId! }))\n }\n >\n Sync issues\n </button>\n </div>\n {syncOverview?.recentPullRequests.length ? (\n <div>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>PRs recentes</div>\n <ul style={{ margin: 0, paddingLeft: \"1.2rem\" }}>\n {syncOverview.recentPullRequests.map((pr) => (\n <li key={`${pr.repoFullName}#${pr.number}`}>\n <a href={pr.htmlUrl} target=\"_blank\" rel=\"noreferrer\">\n {pr.repoFullName}#{pr.number} \u2014 {pr.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n {syncOverview?.recentIssues.length ? (\n <div>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>Issues recentes</div>\n <ul style={{ margin: 0, paddingLeft: \"1.2rem\" }}>\n {syncOverview.recentIssues.map((issue) => (\n <li key={`${issue.repoFullName}#${issue.number}`}>\n <a href={issue.htmlUrl} target=\"_blank\" rel=\"noreferrer\">\n {issue.repoFullName}#{issue.number} \u2014 {issue.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </section>\n\n {actionMessage ? <div>{actionMessage}</div> : null}\n {busy ? <div>Executando: {busy}...</div> : null}\n </div>\n );\n}\n", "/** 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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
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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",
|
|
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
|
}
|