From 3b96a2613b51ac097a353205172c914be7d85209 Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Sat, 16 May 2026 01:40:45 +0300 Subject: [PATCH] FEAT - TASKER CODEX: manage agent project grants --- .../apps/api/plane/app/urls/codex_agents.py | 6 + .../apps/api/plane/app/views/__init__.py | 1 + .../apps/api/plane/app/views/codex_agents.py | 63 ++++ .../app/assets/favicon/apple-touch-icon.png | Bin 6294 -> 4142 bytes .../web/app/assets/favicon/favicon-16x16.png | Bin 466 -> 520 bytes .../web/app/assets/favicon/favicon-32x32.png | Bin 761 -> 987 bytes .../apps/web/app/assets/favicon/favicon.ico | Bin 15406 -> 16958 bytes .../web/app/assets/icons/icon-180x180.png | Bin 2709 -> 4142 bytes .../web/app/assets/icons/icon-512x512.png | Bin 8703 -> 13039 bytes plane-src/apps/web/app/layout.tsx | 17 +- plane-src/apps/web/app/root.tsx | 15 +- .../settings/codex-agent-api-settings.tsx | 283 +++++++++++++++++- .../services/workspace-codex-agent.service.ts | 29 ++ plane-src/apps/web/manifest.json | 19 +- .../apps/web/public/apple-touch-icon.png | Bin 0 -> 4142 bytes plane-src/apps/web/public/favicon.ico | Bin 0 -> 16958 bytes plane-src/apps/web/public/favicon.svg | 13 + .../public/favicon/android-chrome-192x192.png | Bin 5217 -> 4386 bytes .../public/favicon/android-chrome-512x512.png | Bin 14419 -> 13039 bytes .../web/public/favicon/apple-touch-icon.png | Bin 0 -> 4142 bytes plane-src/apps/web/public/favicon/favicon.ico | Bin 0 -> 16958 bytes .../apps/web/public/favicon/icon-adaptive.svg | 13 + .../apps/web/public/favicon/site.webmanifest | 18 +- .../apps/web/public/icons/icon-192x192.png | Bin 3071 -> 4386 bytes .../apps/web/public/icons/icon-348x348.png | Bin 5304 -> 13323 bytes .../apps/web/public/icons/icon-512x512.png | Bin 8703 -> 13039 bytes plane-src/apps/web/public/manifest.json | 4 +- .../apps/web/public/site.webmanifest.json | 14 +- plane-src/apps/web/styles/globals.css | 24 ++ 29 files changed, 455 insertions(+), 64 deletions(-) create mode 100644 plane-src/apps/web/public/apple-touch-icon.png create mode 100644 plane-src/apps/web/public/favicon.ico create mode 100644 plane-src/apps/web/public/favicon.svg create mode 100644 plane-src/apps/web/public/favicon/apple-touch-icon.png create mode 100644 plane-src/apps/web/public/favicon/favicon.ico create mode 100644 plane-src/apps/web/public/favicon/icon-adaptive.svg diff --git a/plane-src/apps/api/plane/app/urls/codex_agents.py b/plane-src/apps/api/plane/app/urls/codex_agents.py index a50ca66..e6d1edc 100644 --- a/plane-src/apps/api/plane/app/urls/codex_agents.py +++ b/plane-src/apps/api/plane/app/urls/codex_agents.py @@ -7,6 +7,7 @@ from django.urls import path from plane.app.views import ( CodexAgentDetailEndpoint, CodexAgentGrantListEndpoint, + CodexAgentGrantReplaceEndpoint, CodexAgentListEndpoint, CodexAgentRevokeEndpoint, CodexAgentSetupEndpoint, @@ -36,6 +37,11 @@ urlpatterns = [ CodexAgentGrantListEndpoint.as_view(), name="codex-agent-api-agent-grants", ), + path( + "workspaces//codex-agent-api/agents//grants/replace/", + CodexAgentGrantReplaceEndpoint.as_view(), + name="codex-agent-api-agent-grants-replace", + ), path( "workspaces//codex-agent-api/agents//tokens/", CodexAgentTokenListEndpoint.as_view(), diff --git a/plane-src/apps/api/plane/app/views/__init__.py b/plane-src/apps/api/plane/app/views/__init__.py index 781df5f..130a8ed 100644 --- a/plane-src/apps/api/plane/app/views/__init__.py +++ b/plane-src/apps/api/plane/app/views/__init__.py @@ -177,6 +177,7 @@ from .api import ApiTokenEndpoint from .codex_agents import ( CodexAgentDetailEndpoint, CodexAgentGrantListEndpoint, + CodexAgentGrantReplaceEndpoint, CodexAgentListEndpoint, CodexAgentRevokeEndpoint, CodexAgentSetupEndpoint, diff --git a/plane-src/apps/api/plane/app/views/codex_agents.py b/plane-src/apps/api/plane/app/views/codex_agents.py index 8f66603..32be6b3 100644 --- a/plane-src/apps/api/plane/app/views/codex_agents.py +++ b/plane-src/apps/api/plane/app/views/codex_agents.py @@ -139,6 +139,41 @@ def validate_project_in_workspace(workspace, project_id, user): return None +def validate_projects_in_workspace(workspace, project_ids, user): + if not isinstance(project_ids, list) or len(project_ids) == 0: + return Response( + { + "ok": False, + "error": "project_ids_required", + "message": "Select at least one project for Codex Agent grants.", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + normalized_project_ids = [] + for project_id in project_ids: + project_id = str(project_id or "").strip() + if not project_id or project_id in normalized_project_ids: + continue + + project_error = validate_project_in_workspace(workspace, project_id, user) + if project_error is not None: + return project_error + normalized_project_ids.append(project_id) + + if not normalized_project_ids: + return Response( + { + "ok": False, + "error": "project_ids_required", + "message": "Select at least one project for Codex Agent grants.", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + return normalized_project_ids + + def gateway_request(method, path, payload=None): config, error_response = require_gateway_config() if error_response is not None: @@ -284,6 +319,34 @@ class CodexAgentGrantListEndpoint(CodexAgentEntitledEndpoint): return gateway_request("POST", f"/api/internal/v1/owners/{owner_path(request.user)}/agents/{agent_path(agent_id)}/grants", payload) +class CodexAgentGrantReplaceEndpoint(CodexAgentEntitledEndpoint): + @allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER], level="WORKSPACE") + def post(self, request, slug, agent_id): + entitlement_error = self.require_entitlement(request, slug) + if entitlement_error is not None: + return entitlement_error + + workspace, workspace_error = require_workspace(slug) + if workspace_error is not None: + return workspace_error + + project_ids_or_error = validate_projects_in_workspace(workspace, request.data.get("project_ids"), request.user) + if isinstance(project_ids_or_error, Response): + return project_ids_or_error + + payload = { + "workspace_slug": slug, + "project_ids": project_ids_or_error, + "scopes": request.data.get("scopes") or [], + "mode": request.data.get("mode") or "voluntary", + } + return gateway_request( + "POST", + f"/api/internal/v1/owners/{owner_path(request.user)}/agents/{agent_path(agent_id)}/grants/replace", + payload, + ) + + class CodexAgentTokenListEndpoint(CodexAgentEntitledEndpoint): @allow_permission(allowed_roles=[ROLE.ADMIN, ROLE.MEMBER], level="WORKSPACE") def get(self, request, slug, agent_id): diff --git a/plane-src/apps/web/app/assets/favicon/apple-touch-icon.png b/plane-src/apps/web/app/assets/favicon/apple-touch-icon.png index a631267832248a456bb5d92b8167092161c1d360..5078c01653bd8fca4c6ff0d98769b86f54f17743 100644 GIT binary patch literal 4142 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 literal 6294 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 diff --git a/plane-src/apps/web/app/assets/favicon/favicon-16x16.png b/plane-src/apps/web/app/assets/favicon/favicon-16x16.png index af59ef0108a7a043765bdf556348e43f6b331aac..970564a014f4b2d319829385fded51e4e3c98c0a 100644 GIT binary patch delta 482 zcmcb_+`%%zpq{}cHNrE^*Ox(yfq{X8fw4W4fd$B71Y#*5W?*1mz{tQ1q!~eC3z*=t z0t=WCY>+~e(85nZWksGYjv*F;cLO(iF*^#(oqJb?ZQ}-kJt7-7boUy{q>Fw~W{KuB zQ~DtqCe{_DS>H6*H7EFp*9E=l8H!CeW}Aqq2?pks*H&LtcDWG6URGXqZ;!dPwM+dy z7Xg;y7mL=IzH~GX`*UaN2EOT&mTdhNbhPkJdRVmAM-`@qx`(@Y6g{%fm)A+rCwXSG&)PmsP&`xLX;>D@q4%(7My70u zo9fGg2_`T6ir6>0hV1`p^ZrDlr_=7cX8YdXH~!2v@ukvF!GAg{b}P(xuHbxb`e=R7 zsZEBvE@ha!o5QgCtmM4n)SjE^(^!*N@Ewv4@u{z(4>1 delta 428 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 N>d?wIY~{gi?*Ti^k*5Fv literal 15406 zcmeI2Yit!o6vwv$#>5u}S{j3WsZay~`=MaP@Q^4fYT_d6qS+t7YX|mX(#&a-DmdWvy3rg9o?X?_*iJQ!Oi3J)@ea z7A^HE^GumNtisHmDd#hKrbsA1+JxIy?UyfIpl{3Ena|qqFUZT5(ZdGV<>}9lbMAY! zr%orHMZUD<9h7;ePGGs^Z?=akoZ(I%=nH*9Cdh`qdbLM3$Ou^>Gh~MhbvtD1Zl|vq z6UK&X#)>hc%oql1r`vZ{9?2YtWDe@Ko<<>rO6*LQ`i)RO>{GC$>_tB%=gsPOr32&* z#%3_#)QVl*0l01*tv34YzSmLL9VK(W{&d86`(Y>Rl^yH^y-#?|C&mtw9Y1fA)vJn~ zzT9>D4YFYVY&rbL0V#a6z^NZPC_^@^Un6^e-6>gVU7h-He>rpEq4JZbL)8Q{ON1=CJVHxV(_}{;+9-n7Gt)O}&XrJt{NI>Kq$a*GGzf>f{Lx>E!$O z?UBsX>jK6Pe0(U4tMf?kb2DyoFwFw*)bH0h`26&>&LhERjJ#4v_+NRCKYi02{qj)o zk-fYBjM4smyW4c(v>H=COtZc{_~sfEy57QR7aZYgcT4?|_fEI+72oo>)Yq_B_-ecz9|G0SG(f2s#8ALDQbFQ{mp7CgB+RHupTwKiIAaf(hFR7zR z9SB1QhUfQ@nUg2Tz`J{T%8&i7DbI|Rabxb6>|Wj4Jd>5yMIISGNM=u;D0%(T+uV=U zoCT|NWwBJAJtLPdSBv|*FGO4~ZS4Npx61f21ya6ki!?PgIghYk^gv#Y3jD5XmZx?8Zo4=tay8o965BrgmlWAzW!8ZO?^_f{J2r=XV*CO zy71SzO8a~HsufG**wI7wSp|Jh=ds|g_2itA_rDDd8p_F=ni}oBuQeYoxAo}i)vL}u zUAXwq1^ZmZ(ZdJTm^A9@HhHx82h$Tk;aF31+1?|b_T1xYUUrp*^XCNcX>4qivlXYL z?1N=$ZuhYFS1Zn(40y(U5e@#=(vvG!>SXJd?_|!5r`5NdTb%i*`EyR=$f1K$vTU(^ zMg;qU4zfQSOa9=zxnQ37=?Str{^wySnlM@hsIwyO?pRms_LRlDH?7fijl`E(ySl`-oo@cv zSZr-k;b`0TdU0n>$7W-@!;yVB{K4V;B5M?D6>ApBm18pm44n&*}9rSPd(GeglA z_p_ns5553C0lon~f|=ltFM&_N_h)pmFK0#Zf!zsT8J`*786Vm!MN3co#>I<2z63D_ z^OO6;9>gFz5t|UB5UUWgFjt9T%oJ@s@#7CRu^TZQu^cfSv7Pxmx=IX4zxXyzZ0PpU zh#}D1I!O#oEbV2-;7SZmEbix{5yKP92lJEMxXJ6}xBH|HBy}LE10A3P yiTn+$^_zSG>xq4yAW`}2vk;0uXCD&s{6M0g-{1g>N{M`arlkkT|D*)MkidTyVC|#; diff --git a/plane-src/apps/web/app/assets/icons/icon-180x180.png b/plane-src/apps/web/app/assets/icons/icon-180x180.png index e7142bc602b769aff28db52af6cbb01b84206f44..5078c01653bd8fca4c6ff0d98769b86f54f17743 100644 GIT binary patch literal 4142 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 literal 2709 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 MHz!z~wddXc0WZuE^8f$< diff --git a/plane-src/apps/web/app/assets/icons/icon-512x512.png b/plane-src/apps/web/app/assets/icons/icon-512x512.png index 4c070d079060ef5b8baa45aea056f3800837a827..a6f47b92ced41402c99aa4d51faa7c166706f6a4 100644 GIT binary patch literal 13039 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 diff --git a/plane-src/apps/web/app/layout.tsx b/plane-src/apps/web/app/layout.tsx index 81d1109..7ce90d1 100644 --- a/plane-src/apps/web/app/layout.tsx +++ b/plane-src/apps/web/app/layout.tsx @@ -14,13 +14,6 @@ import { SITE_DESCRIPTION, SITE_NAME } from "@plane/constants"; // helpers import { cn } from "@plane/utils"; -// assets -import favicon16 from "@/app/assets/favicon/favicon-16x16.png?url"; -import favicon32 from "@/app/assets/favicon/favicon-32x32.png?url"; -import faviconIco from "@/app/assets/favicon/favicon.ico?url"; -import icon180 from "@/app/assets/icons/icon-180x180.png?url"; -import icon512 from "@/app/assets/icons/icon-512x512.png?url"; - // local import { AppProvider } from "./provider"; @@ -62,10 +55,8 @@ export default function RootLayout({ children }: { children: React.ReactNode }) - - + - {/* Meta info for PWA */} @@ -73,9 +64,9 @@ export default function RootLayout({ children }: { children: React.ReactNode }) - - - + + + diff --git a/plane-src/apps/web/app/root.tsx b/plane-src/apps/web/app/root.tsx index 8bff47e..7e6ac34 100644 --- a/plane-src/apps/web/app/root.tsx +++ b/plane-src/apps/web/app/root.tsx @@ -14,11 +14,6 @@ import { SITE_DESCRIPTION, SITE_NAME } from "@plane/constants"; import { cn } from "@plane/utils"; // types // assets -import favicon16 from "@/app/assets/favicon/favicon-16x16.png?url"; -import favicon32 from "@/app/assets/favicon/favicon-32x32.png?url"; -import faviconIco from "@/app/assets/favicon/favicon.ico?url"; -import icon180 from "@/app/assets/icons/icon-180x180.png?url"; -import icon512 from "@/app/assets/icons/icon-512x512.png?url"; import ogImage from "@/app/assets/og-image.png?url"; import globalStyles from "@/styles/globals.css?url"; import type { Route } from "./+types/root"; @@ -95,13 +90,11 @@ const designConfigStyle = { } as CSSProperties; export const links: LinksFunction = () => [ - { rel: "icon", type: "image/png", sizes: "32x32", href: favicon32 }, - { rel: "icon", type: "image/png", sizes: "16x16", href: favicon16 }, - { rel: "shortcut icon", href: faviconIco }, + { rel: "icon", type: "image/svg+xml", sizes: "any", href: "/favicon/icon-adaptive.svg?v=nodedc-adaptive-20260516" }, { rel: "manifest", href: "/site.webmanifest.json" }, - { rel: "apple-touch-icon", href: icon512 }, - { rel: "apple-touch-icon", sizes: "180x180", href: icon180 }, - { rel: "apple-touch-icon", sizes: "512x512", href: icon512 }, + { rel: "apple-touch-icon", href: "/apple-touch-icon.png" }, + { rel: "apple-touch-icon", sizes: "180x180", href: "/apple-touch-icon.png" }, + { rel: "apple-touch-icon", sizes: "512x512", href: "/icons/icon-512x512.png" }, { rel: "manifest", href: "/manifest.json" }, { rel: "stylesheet", href: globalStyles }, { diff --git a/plane-src/apps/web/core/components/workspace/settings/codex-agent-api-settings.tsx b/plane-src/apps/web/core/components/workspace/settings/codex-agent-api-settings.tsx index d56c463..67cd119 100644 --- a/plane-src/apps/web/core/components/workspace/settings/codex-agent-api-settings.tsx +++ b/plane-src/apps/web/core/components/workspace/settings/codex-agent-api-settings.tsx @@ -6,7 +6,7 @@ import { type ChangeEvent, useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; -import { Bot, Check, Copy, KeyRound, Route, ShieldCheck } from "lucide-react"; +import { Bot, Check, ChevronDown, Copy, FolderKanban, KeyRound, Route, ShieldCheck } from "lucide-react"; import useSWR from "swr"; import { Button } from "@plane/propel/button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; @@ -20,6 +20,7 @@ import { ProjectService } from "@/services/project/project.service"; import { WorkspaceCodexAgentService, type TCodexAgent, + type TCodexAgentGrant, type TCodexAgentSetupPacket, type TCodexAgentToken, } from "@/services/workspace-codex-agent.service"; @@ -59,10 +60,17 @@ type TProps = { type TAgentSetupCard = { agent: TCodexAgent; + grants: TCodexAgentGrant[]; setup?: TCodexAgentSetupPacket; tokens: TCodexAgentToken[]; }; +type TProjectAccessOption = { + id: string; + identifier?: string | null; + name: string; +}; + export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSettingsContent(props: TProps) { const { showHeading = true, workspaceSlug } = props; const createAvatarInputRef = useRef(null); @@ -76,6 +84,9 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti const [revealedTokens, setRevealedTokens] = useState>({}); const [updatingAgentIds, setUpdatingAgentIds] = useState>({}); const [creatingTokenAgentIds, setCreatingTokenAgentIds] = useState>({}); + const [openProjectAccessAgentId, setOpenProjectAccessAgentId] = useState(null); + const [projectGrantDrafts, setProjectGrantDrafts] = useState>({}); + const [savingProjectGrantAgentIds, setSavingProjectGrantAgentIds] = useState>({}); const { currentWorkspace } = useWorkspace(); const { data: nodedcWorkspacePolicy, isLoading } = useSWR( workspaceSlug ? `NODEDC_WORKSPACE_POLICY_${workspaceSlug}` : null, @@ -109,13 +120,15 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti async () => Promise.all( activeAgents.map(async (agent) => { - const [tokensPayload, setupPayload] = await Promise.all([ + const [tokensPayload, setupPayload, grantsPayload] = await Promise.all([ codexAgentService.listTokens(workspaceSlug, agent.id), codexAgentService.getSetup(workspaceSlug, agent.id), + codexAgentService.listGrants(workspaceSlug, agent.id), ]); return { agent, + grants: grantsPayload.grants, setup: setupPayload.setup, tokens: tokensPayload.tokens.filter((token) => token.status === "active"), }; @@ -200,7 +213,7 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti display_name: displayName, avatar_url: newAgentAvatarUrl, }); - await codexAgentService.upsertGrant(workspaceSlug, createResponse.agent.id, { + const grantResponse = await codexAgentService.upsertGrant(workspaceSlug, createResponse.agent.id, { project_id: effectiveSelectedProjectId, scopes: TASK_AUTHOR_SCOPES, mode: "voluntary", @@ -213,7 +226,9 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti [tokenResponse.token_record.id]: tokenResponse.token, })); setCreatedSetupCards((currentCards) => - upsertSetupCardToken(currentCards, createResponse.agent, tokenResponse.token_record, tokenResponse.setup) + upsertSetupCardToken(currentCards, createResponse.agent, tokenResponse.token_record, tokenResponse.setup, [ + grantResponse.grant, + ]) ); await mutateCodexAgents(); await mutateSetupCards(); @@ -243,8 +258,9 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti ...currentTokens, [tokenResponse.token_record.id]: tokenResponse.token, })); + const currentGrants = setupCards.find((card) => card.agent.id === agent.id)?.grants ?? []; setCreatedSetupCards((currentCards) => - upsertSetupCardToken(currentCards, agent, tokenResponse.token_record, tokenResponse.setup) + upsertSetupCardToken(currentCards, agent, tokenResponse.token_record, tokenResponse.setup, currentGrants) ); await mutateSetupCards(); setToast({ @@ -263,6 +279,70 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti } }; + const handleToggleProjectGrant = (agentId: string, currentProjectIds: string[], projectId: string) => { + setProjectGrantDrafts((currentDrafts) => { + const currentDraftProjectIds = currentDrafts[agentId] ?? currentProjectIds; + const nextProjectIds = currentDraftProjectIds.includes(projectId) + ? currentDraftProjectIds.filter((currentProjectId) => currentProjectId !== projectId) + : [...currentDraftProjectIds, projectId]; + + return { + ...currentDrafts, + [agentId]: nextProjectIds, + }; + }); + }; + + const handleSaveProjectAccess = async (agent: TCodexAgent, selectedProjectIds: string[]) => { + const projectIds = [...new Set(selectedProjectIds.filter(Boolean))]; + if (projectIds.length === 0) { + setToast({ + type: TOAST_TYPE.ERROR, + title: "Выберите project", + message: "У агента должен быть доступ хотя бы к одному project в workspace.", + }); + return; + } + + setSavingProjectGrantAgentIds((current) => ({ ...current, [agent.id]: true })); + try { + const grantsResponse = await codexAgentService.replaceProjectGrants(workspaceSlug, agent.id, { + project_ids: projectIds, + scopes: TASK_AUTHOR_SCOPES, + mode: "voluntary", + }); + setCreatedSetupCards((currentCards) => + currentCards.map((card) => + card.agent.id === agent.id + ? { + ...card, + grants: mergeAgentGrants(card.grants, grantsResponse.grants, workspaceSlug), + } + : card + ) + ); + setProjectGrantDrafts((currentDrafts) => { + const nextDrafts = { ...currentDrafts }; + delete nextDrafts[agent.id]; + return nextDrafts; + }); + await mutateSetupCards(); + setToast({ + type: TOAST_TYPE.SUCCESS, + title: "Доступы Codex обновлены", + message: "Agent token теперь работает только с выбранными projects.", + }); + } catch (error: any) { + setToast({ + type: TOAST_TYPE.ERROR, + title: "Не удалось обновить доступы", + message: error?.message ?? error?.error ?? "Проверьте project membership и Gateway.", + }); + } finally { + setSavingProjectGrantAgentIds((current) => ({ ...current, [agent.id]: false })); + } + }; + const handleSaveAgentName = async (agent: TCodexAgent) => { const displayName = getAgentDraftName(agentDraftNames, agent).trim(); if (!displayName) return; @@ -431,6 +511,11 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti const isAgentDirty = draftName.trim() !== agent.display_name; const setupCard = setupCards.find((card) => card.agent.id === agent.id); const agentTokens = setupCard?.tokens ?? []; + const agentGrants = setupCard?.grants ?? []; + const currentProjectIds = getGrantedProjectIds(agentGrants, workspaceSlug); + const draftProjectIds = projectGrantDrafts[agent.id] ?? currentProjectIds; + const isProjectAccessOpen = openProjectAccessAgentId === agent.id; + const isSavingProjectAccess = savingProjectGrantAgentIds[agent.id] === true; return (
@@ -513,9 +598,7 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti {areSetupCardsLoading && agentTokens.length === 0 ? ( -
- Загрузка токена... -
+
Загрузка токена...
) : agentTokens.length > 0 ? (
{agentTokens.map((token) => { @@ -550,6 +633,29 @@ export const CodexAgentApiSettingsContent = observer(function CodexAgentApiSetti Токен ещё не выпущен. Нажмите «Новый токен», чтобы получить доступ для локального Codex.
)} + + void handleSaveProjectAccess(agent, draftProjectIds)} + onToggleOpen={() => { + setOpenProjectAccessAgentId(isProjectAccessOpen ? null : agent.id); + setProjectGrantDrafts((currentDrafts) => + currentDrafts[agent.id] + ? currentDrafts + : { + ...currentDrafts, + [agent.id]: currentProjectIds, + } + ); + }} + onToggleProject={(projectId) => + handleToggleProjectGrant(agent.id, currentProjectIds, projectId) + } + />
); }) @@ -600,11 +706,11 @@ function CodexConnectionGuide(props: TCodexConnectionGuideProps) {
1. Найдите config.toml

Windows: откройте файл через проводник или VS Code.

- + C:\Users\имя-пользователя\.codex\config.toml

macOS / Linux:

- ~/.codex/config.toml + ~/.codex/config.toml

Если файла нет — создайте его.

@@ -614,7 +720,7 @@ function CodexConnectionGuide(props: TCodexConnectionGuideProps) { Создайте пользовательскую переменную окружения {CODEX_TOKEN_ENV_VAR}, заменив токен из примера на уникальный токен конкретного агента.

- + {CODEX_TOKEN_ENV_VAR}=ndcag_... @@ -776,6 +882,109 @@ function AgentAvatarButton(props: { ); } +type TAgentProjectAccessPanelProps = { + currentProjectIds: string[]; + draftProjectIds: string[]; + isOpen: boolean; + isSaving: boolean; + onSave: () => void; + onToggleOpen: () => void; + onToggleProject: (projectId: string) => void; + projects: TProjectAccessOption[]; +}; + +function AgentProjectAccessPanel(props: TAgentProjectAccessPanelProps) { + const isDirty = !areProjectSelectionsEqual(props.currentProjectIds, props.draftProjectIds); + const selectedCount = props.draftProjectIds.length; + const summary = + selectedCount === 0 + ? "Нет выбранных projects" + : selectedCount === 1 + ? "1 project выбран" + : `${selectedCount} projects выбрано`; + + return ( +
+
+
+ + + +
+
Доступы к проектам
+
+ Выберите projects, куда этот agent token может читать и писать карточки. +
+
+
+ +
+ + {props.isOpen && ( +
+ {props.projects.length > 0 ? ( +
+ {props.projects.map((project) => { + const isChecked = props.draftProjectIds.includes(project.id); + + return ( + + ); + })} +
+ ) : ( +
В workspace нет доступных projects.
+ )} + +
+
+ Сохранение заменяет grants текущего workspace: снятые галочки сразу отзывают доступ. +
+ +
+
+ )} +
+ ); +} + function mergeSetupCards(persistedCards: TAgentSetupCard[], createdCards: TAgentSetupCard[]): TAgentSetupCard[] { const cardsByAgentId = new Map(); @@ -792,6 +1001,7 @@ function mergeSetupCards(persistedCards: TAgentSetupCard[], createdCards: TAgent cardsByAgentId.set(card.agent.id, { agent: persistedCard.agent, + grants: mergeAgentGrants(persistedCard.grants, card.grants), setup: persistedCard.setup ?? card.setup, tokens: mergeTokens(persistedCard.tokens, card.tokens), }); @@ -813,17 +1023,19 @@ function upsertSetupCardToken( cards: TAgentSetupCard[], agent: TCodexAgent, token: TCodexAgentToken, - setup?: TCodexAgentSetupPacket + setup?: TCodexAgentSetupPacket, + grants: TCodexAgentGrant[] = [] ): TAgentSetupCard[] { const existingCard = cards.find((card) => card.agent.id === agent.id); if (!existingCard) { - return [{ agent, setup, tokens: [token] }, ...cards]; + return [{ agent, grants, setup, tokens: [token] }, ...cards]; } return cards.map((card) => card.agent.id === agent.id ? { agent, + grants: mergeAgentGrants(card.grants, grants), setup: setup ?? card.setup, tokens: mergeTokens([token], card.tokens), } @@ -831,6 +1043,51 @@ function upsertSetupCardToken( ); } +function getGrantedProjectIds(grants: TCodexAgentGrant[], workspaceSlug: string): string[] { + return [ + ...new Set( + grants + .filter((grant) => grant.workspace_slug === workspaceSlug && grant.project_id) + .map((grant) => String(grant.project_id)) + ), + ].sort(); +} + +function mergeAgentGrants( + currentGrants: TCodexAgentGrant[], + nextGrants: TCodexAgentGrant[], + workspaceSlug?: string +): TCodexAgentGrant[] { + const grantsByKey = new Map(); + + for (const grant of currentGrants) { + if (workspaceSlug && grant.workspace_slug === workspaceSlug) continue; + grantsByKey.set(buildGrantKey(grant), grant); + } + + for (const grant of nextGrants) { + grantsByKey.set(buildGrantKey(grant), grant); + } + + return Array.from(grantsByKey.values()); +} + +function buildGrantKey(grant: TCodexAgentGrant): string { + return `${grant.workspace_slug}:${grant.project_id ?? "*"}`; +} + +function areProjectSelectionsEqual(leftProjectIds: string[], rightProjectIds: string[]): boolean { + const leftSet = new Set(leftProjectIds); + const rightSet = new Set(rightProjectIds); + if (leftSet.size !== rightSet.size) return false; + + for (const projectId of leftSet) { + if (!rightSet.has(projectId)) return false; + } + + return true; +} + function readAvatarDataUrl(file: File): Promise { if (!file.type.startsWith("image/")) { return Promise.reject(new Error("Поддерживаются только изображения PNG, JPG, WEBP или GIF.")); diff --git a/plane-src/apps/web/core/services/workspace-codex-agent.service.ts b/plane-src/apps/web/core/services/workspace-codex-agent.service.ts index e9a298d..ac346fb 100644 --- a/plane-src/apps/web/core/services/workspace-codex-agent.service.ts +++ b/plane-src/apps/web/core/services/workspace-codex-agent.service.ts @@ -72,6 +72,11 @@ export type TCodexAgentTokenListResponse = { tokens: TCodexAgentToken[]; }; +export type TCodexAgentGrantListResponse = { + ok: boolean; + grants: TCodexAgentGrant[]; +}; + export type TCodexAgentSetupResponse = { ok: boolean; setup?: TCodexAgentSetupPacket; @@ -129,6 +134,30 @@ export class WorkspaceCodexAgentService extends APIService { }); } + async listGrants(workspaceSlug: string, agentId: string): Promise { + return this.get(`/api/workspaces/${workspaceSlug}/codex-agent-api/agents/${agentId}/grants/`) + .then((response) => response?.data) + .catch((error) => { + throw error?.response?.data; + }); + } + + async replaceProjectGrants( + workspaceSlug: string, + agentId: string, + data: { + mode?: TCodexAgentGrantMode; + project_ids: string[]; + scopes: string[]; + } + ): Promise { + return this.post(`/api/workspaces/${workspaceSlug}/codex-agent-api/agents/${agentId}/grants/replace/`, data) + .then((response) => response?.data) + .catch((error) => { + throw error?.response?.data; + }); + } + async createToken( workspaceSlug: string, agentId: string, diff --git a/plane-src/apps/web/manifest.json b/plane-src/apps/web/manifest.json index d081c52..b6469af 100644 --- a/plane-src/apps/web/manifest.json +++ b/plane-src/apps/web/manifest.json @@ -1,7 +1,7 @@ { - "theme_color": "#3579f6", - "background_color": "#ffffff", - "display": "standalone", + "theme_color": "#eeeff4", + "background_color": "#eeeff4", + "display": "browser", "scope": "/", "start_url": "/", "name": "NODE.DC | Self-hosted task management workspace.", @@ -9,22 +9,17 @@ "description": "NODE.DC streamlines task management, projects, and internal workflows.", "icons": [ { - "src": "/icon-192x192.png", + "src": "/icons/icon-192x192.png", "sizes": "192x192", "type": "image/png" }, { - "src": "/icon-256x256.png", - "sizes": "256x256", + "src": "/icons/icon-348x348.png", + "sizes": "348x348", "type": "image/png" }, { - "src": "/icon-384x384.png", - "sizes": "384x384", - "type": "image/png" - }, - { - "src": "/icon-512x512.png", + "src": "/icons/icon-512x512.png", "sizes": "512x512", "type": "image/png" } diff --git a/plane-src/apps/web/public/apple-touch-icon.png b/plane-src/apps/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5078c01653bd8fca4c6ff0d98769b86f54f17743 GIT binary patch literal 4142 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 literal 0 HcmV?d00001 diff --git a/plane-src/apps/web/public/favicon.ico b/plane-src/apps/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..973f3b2db97f00b686175edb7497021fe0f1421d GIT binary patch literal 16958 zcmeI4U5Hd=7{}jfidmD~6|IX*6f)Wnf+Q)(+Cdbxi;&QZK)Oj&H18Baw&oDs3EBsE z;e{-Scp-ux3t3&XQc8hzBS{xa4J68D#MTCGvCjDW&p9uw!#VG1XXmV^nfF=$=b7_9 z&v`!nXU==xGc#yRfxmLuuw8EY*BbMLF{U3dWCEb^hG1JXKSVg-x1IsdfM>un;2H1? zcm_NJo&nE*XTUQsM+|&Sp20cFmA5pjC};{yfE9TwF5`NN#Qz%9Bb?4SU*5v+oYuSL z;LW@hnNdAY5_c@7|53*JGRm2!u*YM1x9@>Nc`7u6S~d`~=IDPC+v*JR<{{*x6mbpM zbDg9w;iLJn)8qphO6s|Jd{2ipzmk6boBpM&OeoVI_W6Pl-oZ7uX} zx!L$X=iqVb|8*Aq|H!eA<&1+~>e&Hy0j=Yjv7504Kynn=a~Y?9!v1rLPk>#r7`z9X z^J!nTyaVQgtmQKj#PwpwhOz7ZwFcaE`0Cl`W$=c>M=>>TYW|!Dt^k`SPU{|%rMyOP z)g6~xV}F3Bz$4%)Nb=M85U_HA7cSo~Bgf~_cO1Ur>bc0b-KvLxX+7rbCkB-Qs1wwI!WXB>VyUhnlJNxQy}MF+l)PO3%YRj>%OLv&8R0m%^jz=LezuOr|$c%7~f(SSFOrP4s^vo z8wFm4)*RsSZKv%|a;=DRt4CLCany=z<{($xaqQ0k%@3DTd|h!`wb^;}MRMzNlcYF$ zmRtg6A`5X&yOuSNNwnTg%ANJNz4i{J)G&m7Ch`f+uG+N@DgmuqT->{2w8Qp0`85wN z0Iu_;`_5YMUt|qVQy{56*Pr z=WlBh2iv=-cX2QZ^f{J9YlBqZYX-?F&@DYr?^Dl5T03fOpx507J!|S7=EXDM z8So5v20R0v0ndPEz%$?(@CcG94$rVuPA(nwDs=p)jIDe|vg5Bf^g9wO-fMtE4d zA@!Om>l@8V%>?=tO+{b!pa&)!zo-cY^ko;aOlg!TEV9~L)h^$OjWm=g1)(lR+WsEL N>d?wIY~{gi?*Ti^k*5Fv literal 0 HcmV?d00001 diff --git a/plane-src/apps/web/public/favicon.svg b/plane-src/apps/web/public/favicon.svg new file mode 100644 index 0000000..fee636f --- /dev/null +++ b/plane-src/apps/web/public/favicon.svg @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/plane-src/apps/web/public/favicon/android-chrome-192x192.png b/plane-src/apps/web/public/favicon/android-chrome-192x192.png index 4a005e54230cfd475e713ca7518ec6ec31c7a352..d553a58e81dd92630500cf4bdc2f104993412841 100644 GIT binary patch literal 4386 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 P41tcuP4zNWOz8gr9e*#` diff --git a/plane-src/apps/web/public/favicon/android-chrome-512x512.png b/plane-src/apps/web/public/favicon/android-chrome-512x512.png index 27fafe822d1b5459b202f2d254f2f755143fd4c6..a6f47b92ced41402c99aa4d51faa7c166706f6a4 100644 GIT binary patch literal 13039 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 tSJz%?S4o&orC^w0@|Ts_C@{|D1PmPr5r diff --git a/plane-src/apps/web/public/favicon/apple-touch-icon.png b/plane-src/apps/web/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5078c01653bd8fca4c6ff0d98769b86f54f17743 GIT binary patch literal 4142 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 literal 0 HcmV?d00001 diff --git a/plane-src/apps/web/public/favicon/favicon.ico b/plane-src/apps/web/public/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..973f3b2db97f00b686175edb7497021fe0f1421d GIT binary patch literal 16958 zcmeI4U5Hd=7{}jfidmD~6|IX*6f)Wnf+Q)(+Cdbxi;&QZK)Oj&H18Baw&oDs3EBsE z;e{-Scp-ux3t3&XQc8hzBS{xa4J68D#MTCGvCjDW&p9uw!#VG1XXmV^nfF=$=b7_9 z&v`!nXU==xGc#yRfxmLuuw8EY*BbMLF{U3dWCEb^hG1JXKSVg-x1IsdfM>un;2H1? zcm_NJo&nE*XTUQsM+|&Sp20cFmA5pjC};{yfE9TwF5`NN#Qz%9Bb?4SU*5v+oYuSL z;LW@hnNdAY5_c@7|53*JGRm2!u*YM1x9@>Nc`7u6S~d`~=IDPC+v*JR<{{*x6mbpM zbDg9w;iLJn)8qphO6s|Jd{2ipzmk6boBpM&OeoVI_W6Pl-oZ7uX} zx!L$X=iqVb|8*Aq|H!eA<&1+~>e&Hy0j=Yjv7504Kynn=a~Y?9!v1rLPk>#r7`z9X z^J!nTyaVQgtmQKj#PwpwhOz7ZwFcaE`0Cl`W$=c>M=>>TYW|!Dt^k`SPU{|%rMyOP z)g6~xV}F3Bz$4%)Nb=M85U_HA7cSo~Bgf~_cO1Ur>bc0b-KvLxX+7rbCkB-Qs1wwI!WXB>VyUhnlJNxQy}MF+l)PO3%YRj>%OLv&8R0m%^jz=LezuOr|$c%7~f(SSFOrP4s^vo z8wFm4)*RsSZKv%|a;=DRt4CLCany=z<{($xaqQ0k%@3DTd|h!`wb^;}MRMzNlcYF$ zmRtg6A`5X&yOuSNNwnTg%ANJNz4i{J)G&m7Ch`f+uG+N@DgmuqT->{2w8Qp0`85wN z0Iu_;`_5YMUt|qVQy{56*Pr z=WlBh2iv=-cX2QZ^f{J9YlBqZYX-?F&@DYr?^Dl5T03fOpx507J!|S7=EXDM z8So5v20R0v0ndPEz%$?(@CcG94$rVuPA(nwDs=p)jIDe|vg5Bf^g9wO-fMtE4d zA@!Om>l@8V%>?=tO+{b!pa&)!zo-cY^ko;aOlg!TEV9~L)h^$OjWm=g1)(lR+WsEL N>d?wIY~{gi?*Ti^k*5Fv literal 0 HcmV?d00001 diff --git a/plane-src/apps/web/public/favicon/icon-adaptive.svg b/plane-src/apps/web/public/favicon/icon-adaptive.svg new file mode 100644 index 0000000..fee636f --- /dev/null +++ b/plane-src/apps/web/public/favicon/icon-adaptive.svg @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/plane-src/apps/web/public/favicon/site.webmanifest b/plane-src/apps/web/public/favicon/site.webmanifest index 1d41057..17ac181 100644 --- a/plane-src/apps/web/public/favicon/site.webmanifest +++ b/plane-src/apps/web/public/favicon/site.webmanifest @@ -1,11 +1,15 @@ { - "name": "", - "short_name": "", + "name": "NODE.DC", + "short_name": "NODE.DC", + "theme_color": "#eeeff4", + "background_color": "#eeeff4", + "display": "browser", + "scope": "/", + "start_url": "/", "icons": [ + { "src": "/favicon/icon-adaptive.svg", "sizes": "any", "type": "image/svg+xml" }, { "src": "/favicon/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/favicon/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" + { "src": "/favicon/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }, + { "src": "/favicon/apple-touch-icon.png", "sizes": "180x180", "type": "image/png" } + ] } diff --git a/plane-src/apps/web/public/icons/icon-192x192.png b/plane-src/apps/web/public/icons/icon-192x192.png index 165426368552b43b1761201a242d3354b8070657..d553a58e81dd92630500cf4bdc2f104993412841 100644 GIT binary patch literal 4386 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 G)V~2kZ-IjV diff --git a/plane-src/apps/web/public/icons/icon-348x348.png b/plane-src/apps/web/public/icons/icon-348x348.png index c45739798e84b15ef4506217184cf69ae2fa20b9..42c86958bc08a78459f65fd2bb94e6afc46f33b8 100644 GIT binary patch literal 13323 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 diff --git a/plane-src/apps/web/public/icons/icon-512x512.png b/plane-src/apps/web/public/icons/icon-512x512.png index 4c070d079060ef5b8baa45aea056f3800837a827..a6f47b92ced41402c99aa4d51faa7c166706f6a4 100644 GIT binary patch literal 13039 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 diff --git a/plane-src/apps/web/public/manifest.json b/plane-src/apps/web/public/manifest.json index dc76803..00ffc5a 100644 --- a/plane-src/apps/web/public/manifest.json +++ b/plane-src/apps/web/public/manifest.json @@ -19,8 +19,8 @@ "type": "image/png" } ], - "theme_color": "#FFFFFF", - "background_color": "#FFFFFF", + "theme_color": "#eeeff4", + "background_color": "#eeeff4", "start_url": "/", "display": "standalone", "orientation": "portrait" diff --git a/plane-src/apps/web/public/site.webmanifest.json b/plane-src/apps/web/public/site.webmanifest.json index e870fba..543c39e 100644 --- a/plane-src/apps/web/public/site.webmanifest.json +++ b/plane-src/apps/web/public/site.webmanifest.json @@ -2,12 +2,14 @@ "name": "NODE.DC", "short_name": "NODE.DC", "description": "NODE.DC helps you manage work items, projects, and operational workflows.", - "start_url": ".", - "display": "standalone", - "background_color": "#f9fafb", - "theme_color": "#3f76ff", + "start_url": "/", + "display": "browser", + "background_color": "#eeeff4", + "theme_color": "#eeeff4", "icons": [ - { "src": "/plane-logos/plane-mobile-pwa.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/plane-logos/plane-mobile-pwa.png", "sizes": "512x512", "type": "image/png" } + { "src": "/favicon/icon-adaptive.svg", "sizes": "any", "type": "image/svg+xml" }, + { "src": "/icons/icon-192x192.png", "sizes": "192x192", "type": "image/png" }, + { "src": "/icons/icon-512x512.png", "sizes": "512x512", "type": "image/png" }, + { "src": "/favicon/apple-touch-icon.png", "sizes": "180x180", "type": "image/png" } ] } diff --git a/plane-src/apps/web/styles/globals.css b/plane-src/apps/web/styles/globals.css index da8d5ba..3cd9239 100644 --- a/plane-src/apps/web/styles/globals.css +++ b/plane-src/apps/web/styles/globals.css @@ -2234,6 +2234,30 @@ rgba(255, 255, 255, 0.042) !important; } + .nodedc-project-grants-surface { + background: rgba(0, 0, 0, 0.1) !important; + border: 0 !important; + outline: none !important; + box-shadow: none !important; + } + + .nodedc-project-grants-row, + .nodedc-project-grants-row:hover, + .nodedc-project-grants-row:focus, + .nodedc-project-grants-row:focus-visible, + .nodedc-project-grants-row:active { + background: transparent !important; + border: 0 !important; + outline: none !important; + box-shadow: none !important; + } + + .nodedc-project-grants-check { + border: 0 !important; + outline: none !important; + box-shadow: none !important; + } + .nodedc-settings-primary-button { min-height: 2.75rem; border: 0 !important;