@yr-kits/dev-copilot 0.1.0 → 0.1.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/app/index.d.mts +2 -0
- package/dist/app/index.mjs +4 -0
- package/dist/bin/bridge.mjs +4 -881
- package/dist/bin/bridge.mjs.map +1 -1
- package/dist/bin/dev-copilot.mjs +13 -3
- package/dist/bin/dev-copilot.mjs.map +1 -1
- package/dist/bridge/app/index.d.mts +24 -0
- package/dist/bridge/app/index.d.mts.map +1 -0
- package/dist/bridge/app/index.mjs +3 -0
- package/dist/{types/index.d.mts → copilot-D8--qKgC.d.mts} +3 -3
- package/dist/copilot-D8--qKgC.d.mts.map +1 -0
- package/dist/copilot-overlay-ClRoIHew.mjs +1129 -0
- package/dist/copilot-overlay-ClRoIHew.mjs.map +1 -0
- package/dist/copilot-overlay-NlUgrMjy.d.mts +7 -0
- package/dist/copilot-overlay-NlUgrMjy.d.mts.map +1 -0
- package/dist/dev-copilot-context-CA9bqV_U.mjs +35 -0
- package/dist/dev-copilot-context-CA9bqV_U.mjs.map +1 -0
- package/dist/dev-copilot-provider-CP_gJvWG.d.mts +22 -0
- package/dist/dev-copilot-provider-CP_gJvWG.d.mts.map +1 -0
- package/dist/dev-copilot-provider-D0_wEEem.mjs +14 -0
- package/dist/dev-copilot-provider-D0_wEEem.mjs.map +1 -0
- package/dist/index.d.mts +5 -33
- package/dist/index.mjs +6 -849
- package/dist/run-bridge-cli-DVLGcVgq.mjs +1510 -0
- package/dist/run-bridge-cli-DVLGcVgq.mjs.map +1 -0
- package/dist/types.d.mts +2 -0
- package/dist/widgets/copilot-overlay/index.d.mts +2 -0
- package/dist/widgets/copilot-overlay/index.mjs +4 -0
- package/package.json +29 -9
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/types/index.d.mts.map +0 -1
- /package/dist/{types/index.mjs → types.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-overlay-ClRoIHew.mjs","names":[],"sources":["../src/shared/api/create-copilot-api-client.ts","../src/features/apply-copilot-patch/model/apply-copilot-patch.ts","../src/features/copilot-session/model/use-copilot-session.ts","../src/features/select-agent/model/use-agent-status-polling.ts","../src/features/submit-copilot-request/model/submit-copilot-request.ts","../src/entities/agent/model.ts","../src/entities/patch/model.ts","../src/entities/session/model.ts","../src/shared/lib/error.ts","../src/shared/ui/use-selection-capture.ts","../src/widgets/copilot-overlay/model/use-draggable-fab.ts","../src/widgets/copilot-overlay/ui/tokens.ts","../src/widgets/copilot-overlay/ui/styles.ts","../src/widgets/copilot-overlay/ui/agent-selector.tsx","../src/widgets/copilot-overlay/ui/agent-status-card.tsx","../src/widgets/copilot-overlay/ui/button-style.ts","../src/widgets/copilot-overlay/ui/copilot-request-form.tsx","../src/widgets/copilot-overlay/ui/copilot-response-panel.tsx","../src/widgets/copilot-overlay/ui/constants.ts","../src/widgets/copilot-overlay/ui/overlay-toast.tsx","../src/widgets/copilot-overlay/ui/icons.tsx","../src/widgets/copilot-overlay/ui/overlay-trigger.tsx","../src/widgets/copilot-overlay/ui/response-panel-rail.tsx","../src/widgets/copilot-overlay/ui/copilot-overlay.tsx"],"sourcesContent":["import type {\n CopilotAgent,\n CopilotApplyRequest,\n CopilotApplyResponse,\n CopilotAgentStatusResponse,\n CopilotChatRequest,\n CopilotChatResponse,\n CopilotErrorResponse,\n} from \"../contracts/copilot\";\n\ninterface CreateCopilotApiClientOptions {\n baseUrl?: string;\n fetcher?: typeof fetch;\n}\n\nconst DEFAULT_BASE_URL = \"http://127.0.0.1:3339\";\nconst BRIDGE_CONNECTION_ERROR_MESSAGE =\n \"브릿지 서버에 연결하지 못했습니다. 브릿지 서버를 켜주세요.\";\n\nconst parseResponse = async <T>(response: Response): Promise<T> => {\n const payload = (await response.json()) as T | CopilotErrorResponse;\n\n if (!response.ok) {\n const errorMessage =\n typeof payload === \"object\" && payload && \"error\" in payload\n ? payload.error\n : \"요청 처리 중 오류가 발생했습니다.\";\n throw new Error(errorMessage);\n }\n\n return payload as T;\n};\n\nconst normalizeNetworkError = (error: unknown): Error => {\n if (\n error instanceof TypeError &&\n error.message.toLowerCase().includes(\"failed to fetch\")\n ) {\n return new Error(BRIDGE_CONNECTION_ERROR_MESSAGE);\n }\n\n if (error instanceof Error) {\n return error;\n }\n\n return new Error(\"요청 처리 중 오류가 발생했습니다.\");\n};\n\nexport const createCopilotApiClient = (\n options: CreateCopilotApiClientOptions = {},\n) => {\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n const fetcher = options.fetcher ?? fetch;\n\n const post = async <T, U>(path: string, body: T): Promise<U> => {\n try {\n const response = await fetcher(`${baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n\n return parseResponse<U>(response);\n } catch (error) {\n throw normalizeNetworkError(error);\n }\n };\n\n return {\n status: async (agent?: CopilotAgent) => {\n const query = agent ? `?agent=${agent}` : \"\";\n try {\n const response = await fetcher(`${baseUrl}/status${query}`);\n return parseResponse<CopilotAgentStatusResponse>(response);\n } catch (error) {\n throw normalizeNetworkError(error);\n }\n },\n chat: (payload: CopilotChatRequest) =>\n post<CopilotChatRequest, CopilotChatResponse>(\"/chat\", payload),\n apply: (payload: CopilotApplyRequest) =>\n post<CopilotApplyRequest, CopilotApplyResponse>(\"/apply\", payload),\n };\n};\n","import { createCopilotApiClient } from \"../../../shared/api/create-copilot-api-client\";\nimport type { CopilotApplyResponse } from \"../../../shared/contracts/copilot\";\n\nexport const applyCopilotPatch = async (\n patchId: string,\n baseUrl?: string,\n): Promise<CopilotApplyResponse> => {\n const client = createCopilotApiClient({ baseUrl });\n\n return client.apply({\n patchId,\n approvalToken: `approve:${patchId}`,\n });\n};\n","import { useCallback, useState } from \"react\";\n\nimport type { CopilotAgent, CopilotChatResponse } from \"../../../shared/contracts/copilot\";\n\nexport const useCopilotSession = () => {\n const [open, setOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [applying, setApplying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [chatResult, setChatResult] = useState<CopilotChatResponse | null>(null);\n const [toastMessage, setToastMessage] = useState<string | null>(null);\n const [selectedAgent, setSelectedAgent] = useState<CopilotAgent>(\"codex\");\n const [showResponsePanel, setShowResponsePanel] = useState(false);\n\n const closePanel = useCallback(() => {\n setOpen(false);\n setShowResponsePanel(false);\n }, []);\n\n const togglePanel = useCallback(() => {\n setOpen((prev) => !prev);\n }, []);\n\n const openPanel = useCallback(() => {\n setOpen(true);\n }, []);\n\n const toggleResponsePanel = useCallback(() => {\n setShowResponsePanel((prev) => !prev);\n }, []);\n\n const startRequest = useCallback(() => {\n setBusy(true);\n setError(null);\n setShowResponsePanel(true);\n }, []);\n\n const finishRequest = useCallback((result: CopilotChatResponse) => {\n setChatResult(result);\n setBusy(false);\n }, []);\n\n const failRequest = useCallback((message: string) => {\n setError(message);\n setBusy(false);\n }, []);\n\n const startApply = useCallback(() => {\n setApplying(true);\n setError(null);\n }, []);\n\n const finishApply = useCallback(() => {\n setApplying(false);\n }, []);\n\n const failApply = useCallback((message: string) => {\n setError(message);\n setApplying(false);\n }, []);\n\n const showToast = useCallback((message: string) => {\n setToastMessage(message);\n }, []);\n\n const clearToast = useCallback(() => {\n setToastMessage(null);\n }, []);\n\n return {\n open,\n prompt,\n setPrompt,\n busy,\n applying,\n error,\n chatResult,\n toastMessage,\n selectedAgent,\n setSelectedAgent,\n showResponsePanel,\n setError,\n closePanel,\n openPanel,\n togglePanel,\n toggleResponsePanel,\n startRequest,\n finishRequest,\n failRequest,\n startApply,\n finishApply,\n failApply,\n showToast,\n clearToast,\n };\n};\n","import { useEffect, useState } from \"react\";\n\nimport type { CopilotAgent, CopilotAgentStatusResponse } from \"../../../shared/contracts/copilot\";\nimport { createCopilotApiClient } from \"../../../shared/api/create-copilot-api-client\";\n\nexport const useAgentStatusPolling = (\n open: boolean,\n selectedAgent: CopilotAgent,\n baseUrl?: string,\n) => {\n const [agentStatus, setAgentStatus] =\n useState<CopilotAgentStatusResponse | null>(null);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n let ignore = false;\n const client = createCopilotApiClient({ baseUrl });\n\n client\n .status(selectedAgent)\n .then((status) => {\n if (!ignore) {\n setAgentStatus(status);\n }\n })\n .catch((caughtError) => {\n if (!ignore) {\n setAgentStatus({\n available: false,\n authenticated: false,\n agent: selectedAgent,\n message:\n caughtError instanceof Error\n ? caughtError.message\n : \"로컬 에이전트 상태 확인에 실패했습니다.\",\n });\n }\n });\n\n return () => {\n ignore = true;\n };\n }, [open, selectedAgent, baseUrl]);\n\n return {\n agentStatus,\n setAgentStatus,\n };\n};\n","import { createCopilotApiClient } from \"../../../shared/api/create-copilot-api-client\";\nimport type { CopilotAgent, CopilotChatResponse, CopilotMode } from \"../../../shared/contracts/copilot\";\n\ninterface SubmitCopilotRequestInput {\n selectedText: string;\n prompt: string;\n mode: CopilotMode;\n allowedPaths: string[];\n previousResponse?: string;\n selectedAgent: CopilotAgent;\n route?: string;\n baseUrl?: string;\n}\n\nexport const submitCopilotRequest = async (\n input: SubmitCopilotRequestInput,\n): Promise<CopilotChatResponse> => {\n const client = createCopilotApiClient({ baseUrl: input.baseUrl });\n\n return client.chat({\n selectedText: input.selectedText,\n prompt: input.prompt,\n mode: input.mode,\n context: {\n route: input.route,\n fileHints: input.allowedPaths,\n previousResponse: input.previousResponse,\n agent: input.selectedAgent,\n },\n });\n};\n","import type { CopilotAgent, CopilotAgentStatusResponse } from \"../../shared/contracts/copilot\";\n\nexport const AGENT_LABELS: Record<CopilotAgent, string> = {\n codex: \"Codex CLI\",\n claude: \"Claude Code CLI\",\n};\n\nexport const isAgentReady = (status: CopilotAgentStatusResponse | null) => {\n if (!status) {\n return true;\n }\n\n return status.available && status.authenticated;\n};\n","import type { CopilotChatResponse } from \"../../shared/contracts/copilot\";\n\nexport const hasApplicablePatch = (chatResult: CopilotChatResponse | null) => {\n return Boolean(chatResult?.patchId);\n};\n","import type { CopilotChatResponse } from \"../../shared/contracts/copilot\";\n\nexport const toPreviousResponse = (chatResult: CopilotChatResponse | null) => {\n if (!chatResult) {\n return undefined;\n }\n\n return [\n `message:\\n${chatResult.message}`,\n chatResult.patchPreview ? `patchPreview:\\n${chatResult.patchPreview}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\");\n};\n","export const toErrorMessage = (error: unknown, fallbackMessage: string) => {\n return error instanceof Error ? error.message : fallbackMessage;\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport const OVERLAY_ATTRIBUTE = \"data-dev-copilot-overlay\";\n\nconst toSelectionText = () => {\n const selection = window.getSelection();\n return selection?.toString().trim() ?? \"\";\n};\n\nconst isNodeInsideOverlay = (node: Node | null) => {\n if (!node) {\n return false;\n }\n\n const element = node instanceof Element ? node : node.parentElement;\n return Boolean(element?.closest(`[${OVERLAY_ATTRIBUTE}]`));\n};\n\nconst isInsideOverlay = (target: EventTarget | null) => {\n return (\n target instanceof Element &&\n Boolean(target.closest(`[${OVERLAY_ATTRIBUTE}]`))\n );\n};\n\nexport const useSelectionCapture = () => {\n const [selectedText, setSelectedText] = useState(\"\");\n\n const syncSelection = useCallback((event: MouseEvent | KeyboardEvent) => {\n const selection = window.getSelection();\n const startedInsideOverlay = isNodeInsideOverlay(selection?.anchorNode ?? null);\n const endedInsideOverlay = isNodeInsideOverlay(selection?.focusNode ?? null);\n\n if (isInsideOverlay(event.target) || startedInsideOverlay || endedInsideOverlay) {\n return;\n }\n\n const nextSelectedText = selection?.toString().trim() ?? toSelectionText();\n\n if (!nextSelectedText) {\n return;\n }\n\n setSelectedText(nextSelectedText);\n }, []);\n\n useEffect(() => {\n document.addEventListener(\"mouseup\", syncSelection);\n document.addEventListener(\"keyup\", syncSelection);\n\n return () => {\n document.removeEventListener(\"mouseup\", syncSelection);\n document.removeEventListener(\"keyup\", syncSelection);\n };\n }, [syncSelection]);\n\n return {\n selectedText,\n setSelectedText,\n };\n};\n","import { useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from \"react\";\n\nconst FLOATING_BUTTON_SIZE = 48;\nconst DRAG_CLICK_THRESHOLD = 4;\nconst DEFAULT_FLOATING_OFFSET = 24;\nconst FLOATING_Z_INDEX = 2147483000;\n\ninterface DragState {\n pointerId: number;\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n moved: boolean;\n}\n\nconst clampPosition = (value: number, max: number) => {\n return Math.min(Math.max(value, 0), Math.max(0, max - FLOATING_BUTTON_SIZE));\n};\n\nexport const useDraggableFab = () => {\n const [position, setPosition] = useState<{ x: number; y: number } | null>(null);\n const dragStateRef = useRef<DragState | null>(null);\n const suppressMainToggleClickRef = useRef(false);\n\n useEffect(() => {\n const onResize = () => {\n setPosition((prev) => {\n if (!prev) {\n return prev;\n }\n\n return {\n x: clampPosition(prev.x, window.innerWidth),\n y: clampPosition(prev.y, window.innerHeight),\n };\n });\n };\n\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, []);\n\n const onPointerDown = useCallback((\n event: React.PointerEvent<HTMLButtonElement>,\n origin?: { x: number; y: number },\n ) => {\n if (event.button !== 0) {\n return;\n }\n\n event.currentTarget.setPointerCapture(event.pointerId);\n dragStateRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n originX: origin?.x ?? 0,\n originY: origin?.y ?? 0,\n moved: false,\n };\n }, []);\n\n const onPointerMove = useCallback((event: React.PointerEvent<HTMLButtonElement>) => {\n const dragState = dragStateRef.current;\n if (!dragState || dragState.pointerId !== event.pointerId) {\n return;\n }\n\n const deltaX = event.clientX - dragState.startX;\n const deltaY = event.clientY - dragState.startY;\n const moved = Math.abs(deltaX) > DRAG_CLICK_THRESHOLD || Math.abs(deltaY) > DRAG_CLICK_THRESHOLD;\n\n if (!moved && !dragState.moved) {\n return;\n }\n\n dragState.moved = true;\n\n setPosition({\n x: clampPosition(dragState.originX + deltaX, window.innerWidth),\n y: clampPosition(dragState.originY + deltaY, window.innerHeight),\n });\n }, []);\n\n const onPointerEnd = useCallback((event: React.PointerEvent<HTMLButtonElement>) => {\n if (dragStateRef.current?.pointerId !== event.pointerId) {\n return;\n }\n\n suppressMainToggleClickRef.current = dragStateRef.current.moved;\n dragStateRef.current = null;\n event.currentTarget.releasePointerCapture(event.pointerId);\n }, []);\n\n const consumeToggleSuppression = useCallback(() => {\n if (suppressMainToggleClickRef.current) {\n suppressMainToggleClickRef.current = false;\n return true;\n }\n\n return false;\n }, []);\n\n const resetDragState = useCallback(() => {\n dragStateRef.current = null;\n suppressMainToggleClickRef.current = false;\n setPosition(null);\n }, []);\n\n const floatingWrapperStyle: CSSProperties = useMemo(() => {\n if (position) {\n return {\n position: \"fixed\",\n zIndex: FLOATING_Z_INDEX,\n left: `${position.x}px`,\n top: `${position.y}px`,\n };\n }\n\n return {\n position: \"fixed\",\n right: DEFAULT_FLOATING_OFFSET,\n bottom: DEFAULT_FLOATING_OFFSET,\n zIndex: FLOATING_Z_INDEX,\n };\n }, [position]);\n\n return {\n position,\n floatingWrapperStyle,\n onPointerDown,\n onPointerMove,\n onPointerEnd,\n consumeToggleSuppression,\n resetDragState,\n };\n};\n","export const OVERLAY_TOKENS = {\n floatingButtonSize: 48,\n panelWidth: \"min(1028px, calc(100vw - 48px))\",\n inputPanelWidth: 420,\n railWidth: 36,\n} as const;\n\nexport const OVERLAY_FONT = {\n sans: \"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n mono: \"ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const;\n\nexport const OVERLAY_COLOR = {\n textPrimary: \"#111827\",\n textSecondary: \"#6b7280\",\n textMuted: \"#64748b\",\n textDark: \"#0f172a\",\n border: \"#e5e7eb\",\n borderSoft: \"#d1d5db\",\n backgroundBase: \"#f8fafc\",\n backgroundWhite: \"#ffffff\",\n brandButtonBg: \"#fff4b8\",\n brandButtonBorder: \"#f2d675\",\n brandButtonText: \"#ffb03d\",\n primaryActionBg: \"#111827\",\n secondaryActionBg: \"#2563eb\",\n successText: \"#15803d\",\n successBorder: \"#bbf7d0\",\n successBackground: \"#f0fdf4\",\n dangerText: \"#dc2626\",\n dangerBorder: \"#fca5a5\",\n dangerBackground: \"#fef2f2\",\n spinnerTop: \"#2563eb\",\n} as const;\n\nexport const OVERLAY_LABELS = {\n title: \"Dev Copilot\",\n subtitle: \"텍스트를 드래그한 뒤 Command+F(또는 Ctrl+F)로 Copilot을 열어 주세요.\",\n promptPlaceholder: \"무엇을 도와드릴까요?\",\n askButton: \"질문\",\n editButton: \"코드 수정 제안\",\n applyButton: \"미리보기 적용\",\n applyingButton: \"적용 중...\",\n} as const;\n\nexport const OVERLAY_STYLE_TEXT = `\n.yrdc-trigger{transition:transform 150ms ease-out, box-shadow 150ms ease-out}\n.yrdc-trigger:hover{transform:scale(1.05)}\n.yrdc-pressable{transition:transform 150ms ease-out, background-color 150ms ease-out, opacity 150ms ease-out}\n.yrdc-pressable:hover{transform:translateY(-1px)}\n.yrdc-spinner{animation:yrdc-spin 1s linear infinite}\n.yrdc-field:focus{outline:none;box-shadow:0 0 0 3px rgba(59,130,246,.14);border-color:#93c5fd}\n@keyframes yrdc-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}\n`;\n","import type { CSSProperties } from \"react\";\n\nimport { OVERLAY_COLOR, OVERLAY_FONT, OVERLAY_TOKENS } from \"./tokens\";\n\nexport const createPanelStyle = (\n showResponsePanel: boolean,\n): CSSProperties => ({\n position: \"relative\",\n marginTop: 12,\n display: \"grid\",\n gridTemplateColumns: showResponsePanel\n ? `${OVERLAY_TOKENS.inputPanelWidth}px ${OVERLAY_TOKENS.railWidth}px minmax(0, 1fr)`\n : `${OVERLAY_TOKENS.inputPanelWidth}px ${OVERLAY_TOKENS.railWidth}px`,\n width: showResponsePanel\n ? OVERLAY_TOKENS.panelWidth\n : OVERLAY_TOKENS.inputPanelWidth + OVERLAY_TOKENS.railWidth,\n maxHeight: \"calc(100vh - 96px)\",\n overflow: \"hidden\",\n border: `1px solid ${OVERLAY_COLOR.border}`,\n borderRadius: 24,\n background: OVERLAY_COLOR.backgroundBase,\n boxShadow: \"0 18px 60px rgba(15, 23, 42, 0.16)\",\n color: OVERLAY_COLOR.textDark,\n fontFamily: OVERLAY_FONT.sans,\n textAlign: \"left\",\n});\n\nexport const triggerButtonStyle: CSSProperties = {\n display: \"flex\",\n width: OVERLAY_TOKENS.floatingButtonSize,\n height: OVERLAY_TOKENS.floatingButtonSize,\n borderRadius: 9999,\n border: `1px solid ${OVERLAY_COLOR.brandButtonBorder}`,\n background: OVERLAY_COLOR.brandButtonBg,\n color: OVERLAY_COLOR.brandButtonText,\n alignItems: \"center\",\n justifyContent: \"center\",\n boxShadow: \"0 12px 28px rgba(15, 23, 42, 0.18)\",\n cursor: \"grab\",\n};\n\nexport const railStyle: CSSProperties = {\n display: \"flex\",\n minHeight: 320,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderLeft: `1px solid ${OVERLAY_COLOR.border}`,\n background: OVERLAY_COLOR.backgroundBase,\n};\n\nexport const railToggleStyle: CSSProperties = {\n display: \"flex\",\n width: 24,\n height: 24,\n border: \"0\",\n background: \"transparent\",\n color: OVERLAY_COLOR.textMuted,\n cursor: \"pointer\",\n alignItems: \"center\",\n justifyContent: \"center\",\n};\n\nexport const inputPanelStyle: CSSProperties = {\n padding: 16,\n minHeight: 0,\n overflowY: \"auto\",\n background: OVERLAY_COLOR.backgroundWhite,\n};\n\nexport const responsePanelStyle: CSSProperties = {\n minHeight: 0,\n overflow: \"hidden\",\n padding: 16,\n borderLeft: `1px solid ${OVERLAY_COLOR.border}`,\n background: OVERLAY_COLOR.backgroundBase,\n};\n\nexport const titleStyle: CSSProperties = {\n margin: 0,\n fontSize: 18,\n fontWeight: 700,\n lineHeight: 1.4,\n color: OVERLAY_COLOR.textPrimary,\n};\n\nexport const subtitleStyle: CSSProperties = {\n margin: \"4px 0 0\",\n fontSize: 14,\n lineHeight: 1.5,\n color: OVERLAY_COLOR.textSecondary,\n wordBreak: \"keep-all\",\n};\n\nexport const statusBoxStyle: CSSProperties = {\n marginTop: 12,\n border: `1px solid ${OVERLAY_COLOR.border}`,\n borderRadius: 16,\n background: OVERLAY_COLOR.backgroundWhite,\n padding: \"12px 14px\",\n fontSize: 14,\n lineHeight: 1.6,\n color: OVERLAY_COLOR.textSecondary,\n};\n\nexport const statusLineStyle: CSSProperties = { margin: 0 };\n\nexport const labelStyle: CSSProperties = {\n display: \"block\",\n marginTop: 16,\n fontSize: 14,\n lineHeight: 1.5,\n color: OVERLAY_COLOR.textSecondary,\n};\n\nexport const textareaStyle: CSSProperties = {\n width: \"100%\",\n resize: \"vertical\",\n borderRadius: 16,\n border: `1px solid ${OVERLAY_COLOR.border}`,\n background: OVERLAY_COLOR.backgroundWhite,\n padding: \"12px 14px\",\n marginTop: 6,\n fontSize: 15,\n lineHeight: 1.7,\n color: OVERLAY_COLOR.textPrimary,\n boxSizing: \"border-box\",\n minHeight: 132,\n};\n\nexport const agentToggleRowStyle: CSSProperties = {\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n};\n\nexport const agentToggleButtonStyle: CSSProperties = {\n border: 0,\n borderRadius: 10,\n padding: \"8px 12px\",\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1.2,\n cursor: \"pointer\",\n};\n\nexport const buttonRowStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginTop: 16,\n};\n\nexport const buttonStyle: CSSProperties = {\n border: 0,\n borderRadius: 12,\n padding: \"10px 14px\",\n fontSize: 14,\n fontWeight: 600,\n lineHeight: 1,\n cursor: \"pointer\",\n};\n\nexport const responseCardStyle: CSSProperties = {\n marginTop: 12,\n minHeight: 0,\n flex: 1,\n overflowY: \"auto\",\n borderRadius: 18,\n border: `1px solid ${OVERLAY_COLOR.border}`,\n background: OVERLAY_COLOR.backgroundWhite,\n padding: 16,\n};\n\nexport const busyContainerStyle: CSSProperties = {\n display: \"flex\",\n height: \"100%\",\n minHeight: 192,\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n color: OVERLAY_COLOR.textSecondary,\n fontSize: 14,\n};\n\nexport const spinnerStyle: CSSProperties = {\n display: \"inline-block\",\n width: 18,\n height: 18,\n borderRadius: 9999,\n border: `2px solid ${OVERLAY_COLOR.borderSoft}`,\n borderTopColor: OVERLAY_COLOR.spinnerTop,\n};\n\nexport const articleStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n};\n\nexport const errorBoxStyle: CSSProperties = {\n margin: 0,\n border: `1px solid ${OVERLAY_COLOR.dangerBorder}`,\n borderRadius: 12,\n background: OVERLAY_COLOR.dangerBackground,\n padding: \"10px 12px\",\n fontSize: 14,\n lineHeight: 1.6,\n color: OVERLAY_COLOR.dangerText,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n};\n\nexport const warningBoxStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n border: `1px solid ${OVERLAY_COLOR.dangerBorder}`,\n borderRadius: 12,\n background: OVERLAY_COLOR.dangerBackground,\n padding: \"10px 12px\",\n fontSize: 14,\n lineHeight: 1.6,\n color: OVERLAY_COLOR.dangerText,\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n};\n\nexport const messageStyle: CSSProperties = {\n margin: 0,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n fontSize: 15,\n lineHeight: 1.7,\n color: OVERLAY_COLOR.textPrimary,\n};\n\nexport const patchPreviewStyle: CSSProperties = {\n margin: 0,\n maxHeight: 288,\n overflow: \"auto\",\n borderRadius: 12,\n border: `1px solid ${OVERLAY_COLOR.border}`,\n background: OVERLAY_COLOR.backgroundBase,\n padding: 12,\n fontSize: 13,\n lineHeight: 1.6,\n color: OVERLAY_COLOR.textPrimary,\n fontFamily: OVERLAY_FONT.mono,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n};\n\nexport const placeholderStyle: CSSProperties = {\n margin: 0,\n fontSize: 14,\n lineHeight: 1.6,\n color: OVERLAY_COLOR.textSecondary,\n};\n\nexport const toastStyle: CSSProperties = {\n position: \"fixed\",\n top: 16,\n right: 16,\n zIndex: 2147483600,\n maxWidth: 360,\n borderRadius: 16,\n border: `1px solid ${OVERLAY_COLOR.successBorder}`,\n background: OVERLAY_COLOR.successBackground,\n color: OVERLAY_COLOR.successText,\n padding: \"12px 14px\",\n boxShadow: \"0 12px 28px rgba(15, 23, 42, 0.12)\",\n fontFamily: OVERLAY_FONT.sans,\n fontSize: 14,\n lineHeight: 1.6,\n};\n","import type { CopilotAgent } from \"../../../shared/contracts/copilot\";\nimport { AGENT_LABELS } from \"../../../entities/agent/model\";\nimport { agentToggleButtonStyle, agentToggleRowStyle, labelStyle } from \"./styles\";\n\ninterface AgentSelectorProps {\n selectedAgent: CopilotAgent;\n disabled: boolean;\n onSelect: (agent: CopilotAgent) => void;\n}\n\nexport function AgentSelector({ selectedAgent, disabled, onSelect }: AgentSelectorProps) {\n return (\n <>\n <label style={labelStyle}>에이전트</label>\n <div style={agentToggleRowStyle}>\n {([\"codex\", \"claude\"] as const).map((agent) => {\n const active = selectedAgent === agent;\n return (\n <button\n key={agent}\n type=\"button\"\n className=\"yrdc-pressable\"\n onClick={() => onSelect(agent)}\n disabled={disabled}\n style={{\n ...agentToggleButtonStyle,\n background: active ? \"#111827\" : \"#e2e8f0\",\n color: active ? \"#ffffff\" : \"#1e293b\",\n opacity: disabled ? 0.6 : 1,\n }}\n >\n {AGENT_LABELS[agent]}\n </button>\n );\n })}\n </div>\n </>\n );\n}\n","import type { CopilotAgent, CopilotAgentStatusResponse } from \"../../../shared/contracts/copilot\";\nimport { AGENT_LABELS } from \"../../../entities/agent/model\";\nimport { statusBoxStyle, statusLineStyle } from \"./styles\";\n\ninterface AgentStatusCardProps {\n selectedAgent: CopilotAgent;\n agentStatus: CopilotAgentStatusResponse | null;\n}\n\nexport function AgentStatusCard({ selectedAgent, agentStatus }: AgentStatusCardProps) {\n return (\n <div style={statusBoxStyle}>\n <p style={statusLineStyle}>로컬 에이전트: {AGENT_LABELS[selectedAgent]}</p>\n {agentStatus?.model ? <p style={statusLineStyle}>모델: {agentStatus.model}</p> : null}\n {agentStatus ? (\n <p\n style={{\n ...statusLineStyle,\n color: agentStatus.authenticated ? \"#15803d\" : \"#dc2626\",\n }}\n >\n {agentStatus.message}\n {agentStatus.loginCommand && !agentStatus.message.includes(agentStatus.loginCommand)\n ? ` 터미널에서 ${agentStatus.loginCommand} 실행`\n : \"\"}\n </p>\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\n\nimport { buttonStyle } from \"./styles\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"success\";\n\nconst BUTTON_COLORS: Record<ButtonVariant, { background: string; color: string }> = {\n primary: { background: \"#2563eb\", color: \"#ffffff\" },\n secondary: { background: \"#111827\", color: \"#ffffff\" },\n success: { background: \"#15803d\", color: \"#ffffff\" },\n};\n\nexport const createActionButtonStyle = (\n variant: ButtonVariant,\n disabled = false,\n overrides: CSSProperties = {},\n): CSSProperties => ({\n ...buttonStyle,\n ...BUTTON_COLORS[variant],\n opacity: disabled ? 0.55 : 1,\n ...overrides,\n});\n","import type { KeyboardEvent as ReactKeyboardEvent } from \"react\";\nimport type { CopilotAgent, CopilotAgentStatusResponse, CopilotMode } from \"../../../shared/contracts/copilot\";\nimport { createEnterKeySubmitHandler } from \"@yr-kits/cli/utils/ime-enter-handler\";\nimport { isAgentReady } from \"../../../entities/agent/model\";\nimport { AgentSelector } from \"./agent-selector\";\nimport { AgentStatusCard } from \"./agent-status-card\";\nimport { createActionButtonStyle } from \"./button-style\";\nimport {\n buttonRowStyle,\n inputPanelStyle,\n labelStyle,\n subtitleStyle,\n textareaStyle,\n titleStyle,\n} from \"./styles\";\nimport { OVERLAY_LABELS } from \"./tokens\";\n\ninterface CopilotRequestFormProps {\n selectedText: string;\n prompt: string;\n busy: boolean;\n selectedAgent: CopilotAgent;\n agentStatus: CopilotAgentStatusResponse | null;\n onSelectedTextChange: (value: string) => void;\n onPromptChange: (value: string) => void;\n onAgentChange: (agent: CopilotAgent) => void;\n onSubmit: (mode: CopilotMode) => void;\n}\n\nexport function CopilotRequestForm({\n selectedText,\n prompt,\n busy,\n selectedAgent,\n agentStatus,\n onSelectedTextChange,\n onPromptChange,\n onAgentChange,\n onSubmit,\n}: CopilotRequestFormProps) {\n const submitDisabled = busy || !isAgentReady(agentStatus);\n const handlePromptKeyDown = createEnterKeySubmitHandler<ReactKeyboardEvent<HTMLTextAreaElement>>(\n () => onSubmit(\"edit\"),\n );\n\n return (\n <div style={inputPanelStyle}>\n <header>\n <p style={titleStyle}>{OVERLAY_LABELS.title}</p>\n <p style={subtitleStyle}>{OVERLAY_LABELS.subtitle}</p>\n </header>\n\n <AgentStatusCard selectedAgent={selectedAgent} agentStatus={agentStatus} />\n <AgentSelector selectedAgent={selectedAgent} disabled={busy} onSelect={onAgentChange} />\n\n <label style={labelStyle}>선택 텍스트</label>\n <textarea\n value={selectedText}\n onChange={(event) => onSelectedTextChange(event.target.value)}\n rows={5}\n className=\"yrdc-field\"\n style={textareaStyle}\n />\n\n <label style={labelStyle}>프롬프트</label>\n <textarea\n value={prompt}\n onChange={(event) => onPromptChange(event.target.value)}\n onKeyDown={handlePromptKeyDown}\n rows={4}\n placeholder={OVERLAY_LABELS.promptPlaceholder}\n className=\"yrdc-field\"\n style={textareaStyle}\n />\n\n <div style={buttonRowStyle}>\n <button\n type=\"button\"\n className=\"yrdc-pressable\"\n onClick={() => onSubmit(\"answer\")}\n disabled={submitDisabled}\n style={createActionButtonStyle(\"secondary\", submitDisabled)}\n >\n {OVERLAY_LABELS.askButton}\n </button>\n <button\n type=\"button\"\n className=\"yrdc-pressable\"\n onClick={() => onSubmit(\"edit\")}\n disabled={submitDisabled}\n style={createActionButtonStyle(\"primary\", submitDisabled)}\n >\n {OVERLAY_LABELS.editButton}\n </button>\n </div>\n </div>\n );\n}\n","import type { CopilotAgent, CopilotChatResponse } from \"../../../shared/contracts/copilot\";\nimport { AGENT_LABELS } from \"../../../entities/agent/model\";\nimport { createActionButtonStyle } from \"./button-style\";\nimport {\n articleStyle,\n busyContainerStyle,\n errorBoxStyle,\n messageStyle,\n patchPreviewStyle,\n placeholderStyle,\n responseCardStyle,\n responsePanelStyle,\n spinnerStyle,\n titleStyle,\n warningBoxStyle,\n} from \"./styles\";\nimport { OVERLAY_LABELS } from \"./tokens\";\n\ninterface CopilotResponsePanelProps {\n busy: boolean;\n applying: boolean;\n error: string | null;\n chatResult: CopilotChatResponse | null;\n selectedAgent: CopilotAgent;\n onApply: () => void;\n}\n\nexport function CopilotResponsePanel({\n busy,\n applying,\n error,\n chatResult,\n selectedAgent,\n onApply,\n}: CopilotResponsePanelProps) {\n return (\n <aside style={responsePanelStyle}>\n <div style={{ display: \"flex\", flexDirection: \"column\", minHeight: 320, height: \"100%\" }}>\n <div>\n <p style={titleStyle}>응답</p>\n </div>\n\n <div style={responseCardStyle}>\n {busy ? (\n <div style={busyContainerStyle}>\n <span className=\"yrdc-spinner\" style={spinnerStyle} />\n <span>{AGENT_LABELS[selectedAgent]} 응답을 기다리는 중입니다.</span>\n </div>\n ) : chatResult ? (\n <article style={articleStyle}>\n {error ? <p style={errorBoxStyle}>{error}</p> : null}\n {chatResult.warnings.length ? (\n <div style={warningBoxStyle}>\n {chatResult.warnings.map((warning) => (\n <p key={warning} style={{ margin: 0 }}>\n {warning}\n </p>\n ))}\n </div>\n ) : null}\n <p style={messageStyle}>{chatResult.message}</p>\n {chatResult.patchPreview ? (\n <>\n <pre style={patchPreviewStyle}>{chatResult.patchPreview}</pre>\n {chatResult.patchId ? (\n <button\n type=\"button\"\n className=\"yrdc-pressable\"\n onClick={onApply}\n disabled={applying}\n style={createActionButtonStyle(\"success\", applying, { alignSelf: \"flex-start\" })}\n >\n {applying ? OVERLAY_LABELS.applyingButton : OVERLAY_LABELS.applyButton}\n </button>\n ) : null}\n </>\n ) : null}\n </article>\n ) : error ? (\n <p style={errorBoxStyle}>{error}</p>\n ) : (\n <p style={placeholderStyle}>\n 질문 또는 코드 수정 제안을 실행하면 이 영역에 결과가 표시됩니다.\n </p>\n )}\n </div>\n </div>\n </aside>\n );\n}\n","export const TOAST_DURATION_MS = 3000;\n","import { toastStyle } from \"./styles\";\n\ninterface OverlayToastProps {\n message: string | null;\n}\n\nexport function OverlayToast({ message }: OverlayToastProps) {\n if (!message) {\n return null;\n }\n\n return (\n <div style={toastStyle}>\n <p aria-live=\"polite\" style={{ margin: 0 }}>\n {message}\n </p>\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from \"react\";\n\ntype SvgIconProps = ComponentPropsWithoutRef<\"svg\">;\n\nexport const SparklesIcon = (props: SvgIconProps) => {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 3.75 13.68 8.32 18.25 10 13.68 11.68 12 16.25 10.32 11.68 5.75 10 10.32 8.32 12 3.75Z\" />\n <path d=\"M18.5 3.75 19.08 5.42 20.75 6 19.08 6.58 18.5 8.25 17.92 6.58 16.25 6 17.92 5.42 18.5 3.75Z\" />\n <path d=\"M6 15.5 7 18.25 9.75 19.25 7 20.25 6 23 5 20.25 2.25 19.25 5 18.25 6 15.5Z\" />\n </svg>\n );\n};\n\nexport const PanelRightOpenIcon = (props: SvgIconProps) => {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3.75\" y=\"4.75\" width=\"16.5\" height=\"14.5\" rx=\"2.25\" />\n <path d=\"M8.75 4.75v14.5\" />\n <path d=\"m13 9.25 3 2.75-3 2.75\" />\n </svg>\n );\n};\n\nexport const PanelRightCloseIcon = (props: SvgIconProps) => {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3.75\" y=\"4.75\" width=\"16.5\" height=\"14.5\" rx=\"2.25\" />\n <path d=\"M15.25 4.75v14.5\" />\n <path d=\"m11 9.25-3 2.75 3 2.75\" />\n </svg>\n );\n};\n","import type { PointerEvent } from \"react\";\n\nimport { SparklesIcon } from \"./icons\";\nimport { triggerButtonStyle } from \"./styles\";\n\ninterface OverlayTriggerProps {\n onClick: () => void;\n onPointerDown: (event: PointerEvent<HTMLButtonElement>) => void;\n onPointerMove: (event: PointerEvent<HTMLButtonElement>) => void;\n onPointerEnd: (event: PointerEvent<HTMLButtonElement>) => void;\n}\n\nexport function OverlayTrigger({\n onClick,\n onPointerDown,\n onPointerMove,\n onPointerEnd,\n}: OverlayTriggerProps) {\n return (\n <button\n type=\"button\"\n className=\"yrdc-trigger\"\n style={triggerButtonStyle}\n onClick={onClick}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerEnd}\n onPointerCancel={onPointerEnd}\n aria-label=\"Dev Copilot 열기\"\n title=\"Dev Copilot 열기/닫기 / 드래그해서 이동\"\n >\n <SparklesIcon aria-hidden style={{ width: 16, height: 16 }} />\n </button>\n );\n}\n","import { PanelRightCloseIcon, PanelRightOpenIcon } from \"./icons\";\nimport { railStyle, railToggleStyle } from \"./styles\";\n\ninterface ResponsePanelRailProps {\n showResponsePanel: boolean;\n onToggle: () => void;\n}\n\nexport function ResponsePanelRail({ showResponsePanel, onToggle }: ResponsePanelRailProps) {\n return (\n <div style={railStyle}>\n <button\n type=\"button\"\n className=\"yrdc-pressable\"\n style={railToggleStyle}\n onClick={onToggle}\n aria-label={showResponsePanel ? \"응답 패널 닫기\" : \"응답 패널 열기\"}\n title={showResponsePanel ? \"응답 패널 닫기\" : \"응답 패널 열기\"}\n >\n {showResponsePanel ? (\n <PanelRightCloseIcon aria-hidden style={{ width: 14, height: 14 }} />\n ) : (\n <PanelRightOpenIcon aria-hidden style={{ width: 14, height: 14 }} />\n )}\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nimport { applyCopilotPatch } from \"../../../features/apply-copilot-patch/model/apply-copilot-patch\";\nimport { useCopilotSession } from \"../../../features/copilot-session/model/use-copilot-session\";\nimport { useAgentStatusPolling } from \"../../../features/select-agent/model/use-agent-status-polling\";\nimport { submitCopilotRequest } from \"../../../features/submit-copilot-request/model/submit-copilot-request\";\nimport { isAgentReady } from \"../../../entities/agent/model\";\nimport { hasApplicablePatch } from \"../../../entities/patch/model\";\nimport { toPreviousResponse } from \"../../../entities/session/model\";\nimport { useDevCopilotConfig } from \"../../../shared/lib/dev-copilot-context\";\nimport { toErrorMessage } from \"../../../shared/lib/error\";\nimport { OVERLAY_ATTRIBUTE, useSelectionCapture } from \"../../../shared/ui/use-selection-capture\";\nimport { useDraggableFab } from \"../model/use-draggable-fab\";\nimport { CopilotRequestForm } from \"./copilot-request-form\";\nimport { CopilotResponsePanel } from \"./copilot-response-panel\";\nimport { TOAST_DURATION_MS } from \"./constants\";\nimport { OverlayToast } from \"./overlay-toast\";\nimport { OverlayTrigger } from \"./overlay-trigger\";\nimport { ResponsePanelRail } from \"./response-panel-rail\";\nimport { createPanelStyle } from \"./styles\";\nimport { OVERLAY_STYLE_TEXT } from \"./tokens\";\nimport type { CopilotMode } from \"../../../shared/contracts/copilot\";\n\nexport function CopilotOverlayWidget() {\n const config = useDevCopilotConfig();\n const { selectedText, setSelectedText } = useSelectionCapture();\n const session = useCopilotSession();\n const { agentStatus } = useAgentStatusPolling(\n session.open,\n session.selectedAgent,\n config.bridgeBaseUrl,\n );\n const draggable = useDraggableFab();\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!session.open) {\n return;\n }\n\n const onPointerDownOutside = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (containerRef.current?.contains(target)) {\n return;\n }\n\n session.closePanel();\n draggable.resetDragState();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDownOutside);\n return () => document.removeEventListener(\"pointerdown\", onPointerDownOutside);\n }, [session.open, session.closePanel, draggable.resetDragState]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n const isFindShortcut = event.key.toLowerCase() === \"f\" && (event.metaKey || event.ctrlKey);\n\n if (!isFindShortcut) {\n return;\n }\n\n const target = event.target;\n if (target instanceof Element && target.closest(`[${OVERLAY_ATTRIBUTE}]`)) {\n return;\n }\n\n const currentSelection = window.getSelection()?.toString().trim() ?? \"\";\n const nextSelectedText = currentSelection || selectedText.trim();\n\n if (!nextSelectedText) {\n return;\n }\n\n event.preventDefault();\n setSelectedText(nextSelectedText);\n session.openPanel();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [selectedText, setSelectedText, session.openPanel]);\n\n if (!config.enabled) {\n return null;\n }\n\n const onSubmit = async (mode: CopilotMode) => {\n if (!isAgentReady(agentStatus)) {\n session.setError(agentStatus?.message ?? \"에이전트 상태를 확인할 수 없습니다.\");\n return;\n }\n\n if (!session.prompt.trim()) {\n session.setError(\"프롬프트를 입력해 주세요.\");\n return;\n }\n\n session.startRequest();\n\n try {\n const route = typeof window !== \"undefined\" ? window.location.pathname : undefined;\n const result = await submitCopilotRequest({\n selectedText,\n prompt: session.prompt,\n mode,\n allowedPaths: config.allowedPaths,\n previousResponse: toPreviousResponse(session.chatResult),\n selectedAgent: session.selectedAgent,\n route,\n baseUrl: config.bridgeBaseUrl,\n });\n session.finishRequest(result);\n } catch (error) {\n session.failRequest(toErrorMessage(error, \"요청 처리 중 오류가 발생했습니다.\"));\n }\n };\n\n const onApply = async () => {\n if (!hasApplicablePatch(session.chatResult)) {\n session.setError(\"적용 가능한 패치가 없습니다.\");\n return;\n }\n\n session.startApply();\n\n try {\n const result = await applyCopilotPatch(session.chatResult.patchId, config.bridgeBaseUrl);\n if (result.applied) {\n session.showToast(result.summary);\n window.setTimeout(session.clearToast, TOAST_DURATION_MS);\n }\n session.finishApply();\n } catch (error) {\n session.failApply(toErrorMessage(error, \"패치 적용 중 오류가 발생했습니다.\"));\n }\n };\n\n const onMainToggleClick = () => {\n if (draggable.consumeToggleSuppression()) {\n return;\n }\n\n if (session.open) {\n draggable.resetDragState();\n }\n session.togglePanel();\n };\n\n return (\n <>\n <style>{OVERLAY_STYLE_TEXT}</style>\n <OverlayToast message={session.toastMessage} />\n\n <div ref={containerRef} style={draggable.floatingWrapperStyle} {...{ [OVERLAY_ATTRIBUTE]: \"\" }}>\n <OverlayTrigger\n onClick={onMainToggleClick}\n onPointerDown={(event) => {\n const wrapperRect = containerRef.current?.getBoundingClientRect();\n const originX = draggable.position?.x ?? wrapperRect?.left ?? 0;\n const originY = draggable.position?.y ?? wrapperRect?.top ?? 0;\n draggable.onPointerDown(event, { x: originX, y: originY });\n }}\n onPointerMove={draggable.onPointerMove}\n onPointerEnd={draggable.onPointerEnd}\n />\n\n {session.open ? (\n <section style={createPanelStyle(session.showResponsePanel)}>\n <CopilotRequestForm\n selectedText={selectedText}\n prompt={session.prompt}\n busy={session.busy || session.applying}\n selectedAgent={session.selectedAgent}\n agentStatus={agentStatus}\n onSelectedTextChange={setSelectedText}\n onPromptChange={session.setPrompt}\n onAgentChange={session.setSelectedAgent}\n onSubmit={onSubmit}\n />\n <ResponsePanelRail\n showResponsePanel={session.showResponsePanel}\n onToggle={session.toggleResponsePanel}\n />\n {session.showResponsePanel ? (\n <CopilotResponsePanel\n busy={session.busy}\n applying={session.applying}\n error={session.error}\n chatResult={session.chatResult}\n selectedAgent={session.selectedAgent}\n onApply={onApply}\n />\n ) : null}\n </section>\n ) : null}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/widgets/copilot-overlay/ui/copilot-overlay.d.ts
|
|
4
|
+
declare function CopilotOverlayWidget(): react_jsx_runtime0.JSX.Element | null;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { CopilotOverlayWidget as t };
|
|
7
|
+
//# sourceMappingURL=copilot-overlay-NlUgrMjy.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-overlay-NlUgrMjy.d.mts","names":[],"sources":["../src/widgets/copilot-overlay/ui/copilot-overlay.tsx"],"mappings":";;;iBAyBgB,oBAAA,CAAA,GAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/shared/lib/config.ts
|
|
5
|
+
const DEFAULT_CONFIG = {
|
|
6
|
+
enabled: process.env.NODE_ENV === "development",
|
|
7
|
+
allowedPaths: ["."],
|
|
8
|
+
bridgeBaseUrl: "http://127.0.0.1:3339"
|
|
9
|
+
};
|
|
10
|
+
const resolveDevCopilotConfig = (config) => {
|
|
11
|
+
return {
|
|
12
|
+
...DEFAULT_CONFIG,
|
|
13
|
+
...config ?? {}
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/shared/lib/dev-copilot-context.tsx
|
|
19
|
+
const DevCopilotContext = createContext(null);
|
|
20
|
+
function InternalDevCopilotProvider({ config, children }) {
|
|
21
|
+
const resolvedConfig = resolveDevCopilotConfig(config);
|
|
22
|
+
return /* @__PURE__ */ jsx(DevCopilotContext.Provider, {
|
|
23
|
+
value: resolvedConfig,
|
|
24
|
+
children
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const useDevCopilotConfig = () => {
|
|
28
|
+
const context = useContext(DevCopilotContext);
|
|
29
|
+
if (!context) throw new Error("DevCopilotProvider 내부에서만 사용할 수 있습니다.");
|
|
30
|
+
return context;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { useDevCopilotConfig as n, InternalDevCopilotProvider as t };
|
|
35
|
+
//# sourceMappingURL=dev-copilot-context-CA9bqV_U.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-copilot-context-CA9bqV_U.mjs","names":[],"sources":["../src/shared/lib/config.ts","../src/shared/lib/dev-copilot-context.tsx"],"sourcesContent":["export interface DevCopilotConfig {\n enabled: boolean;\n allowedPaths: string[];\n bridgeBaseUrl: string;\n}\n\nconst DEFAULT_CONFIG: DevCopilotConfig = {\n enabled: process.env.NODE_ENV === \"development\",\n allowedPaths: [\".\"],\n bridgeBaseUrl: \"http://127.0.0.1:3339\",\n};\n\nexport const resolveDevCopilotConfig = (\n config?: Partial<DevCopilotConfig>,\n): DevCopilotConfig => {\n return {\n ...DEFAULT_CONFIG,\n ...(config ?? {}),\n };\n};\n","\"use client\";\n\nimport { createContext, useContext, type ReactNode } from \"react\";\n\nimport { resolveDevCopilotConfig, type DevCopilotConfig } from \"./config\";\n\nconst DevCopilotContext = createContext<DevCopilotConfig | null>(null);\n\ninterface InternalDevCopilotProviderProps {\n config?: Partial<DevCopilotConfig>;\n children: ReactNode;\n}\n\nexport function InternalDevCopilotProvider({ config, children }: InternalDevCopilotProviderProps) {\n const resolvedConfig = resolveDevCopilotConfig(config);\n\n return (\n <DevCopilotContext.Provider value={resolvedConfig}>\n {children}\n </DevCopilotContext.Provider>\n );\n}\n\nexport const useDevCopilotConfig = () => {\n const context = useContext(DevCopilotContext);\n if (!context) {\n throw new Error(\"DevCopilotProvider 내부에서만 사용할 수 있습니다.\");\n }\n\n return context;\n};\n"],"mappings":";;;;AAMA,MAAM,iBAAmC;CACvC,SAAS,QAAQ,IAAI,aAAa;CAClC,cAAc,CAAC,IAAI;CACnB,eAAe;CAChB;AAED,MAAa,2BACX,WACqB;AACrB,QAAO;EACL,GAAG;EACH,GAAI,UAAU,EAAE;EACjB;;;;;ACZH,MAAM,oBAAoB,cAAuC,KAAK;AAOtE,SAAgB,2BAA2B,EAAE,QAAQ,YAA6C;CAChG,MAAM,iBAAiB,wBAAwB,OAAO;AAEtD,QACE,oBAAC,kBAAkB;EAAS,OAAO;EAChC;GAC0B;;AAIjC,MAAa,4BAA4B;CACvC,MAAM,UAAU,WAAW,kBAAkB;AAC7C,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,uCAAuC;AAGzD,QAAO"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/shared/lib/config.d.ts
|
|
5
|
+
interface DevCopilotConfig {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
allowedPaths: string[];
|
|
8
|
+
bridgeBaseUrl: string;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/app/dev-copilot-provider.d.ts
|
|
12
|
+
interface DevCopilotProviderProps {
|
|
13
|
+
config?: Partial<DevCopilotConfig>;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
declare function DevCopilotProvider({
|
|
17
|
+
config,
|
|
18
|
+
children
|
|
19
|
+
}: DevCopilotProviderProps): react_jsx_runtime0.JSX.Element;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { DevCopilotConfig as n, DevCopilotProvider as t };
|
|
22
|
+
//# sourceMappingURL=dev-copilot-provider-CP_gJvWG.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-copilot-provider-CP_gJvWG.d.mts","names":[],"sources":["../src/shared/lib/config.ts","../src/app/dev-copilot-provider.tsx"],"mappings":";;;;UAAiB,gBAAA;EACf,OAAA;EACA,YAAA;EACA,aAAA;AAAA;;;UCIQ,uBAAA;EACR,MAAA,GAAS,OAAA,CAAQ,gBAAA;EACjB,QAAA,EAAU,SAAA;AAAA;AAAA,iBAGI,kBAAA,CAAA;EAAqB,MAAA;EAAQ;AAAA,GAAY,uBAAA,GAAuB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { t as InternalDevCopilotProvider } from "./dev-copilot-context-CA9bqV_U.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/app/dev-copilot-provider.tsx
|
|
5
|
+
function DevCopilotProvider({ config, children }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(InternalDevCopilotProvider, {
|
|
7
|
+
config,
|
|
8
|
+
children
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { DevCopilotProvider as t };
|
|
14
|
+
//# sourceMappingURL=dev-copilot-provider-D0_wEEem.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-copilot-provider-D0_wEEem.mjs","names":[],"sources":["../src/app/dev-copilot-provider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { InternalDevCopilotProvider } from \"../shared/lib/dev-copilot-context\";\nimport type { DevCopilotConfig } from \"../shared/lib/config\";\n\ninterface DevCopilotProviderProps {\n config?: Partial<DevCopilotConfig>;\n children: ReactNode;\n}\n\nexport function DevCopilotProvider({ config, children }: DevCopilotProviderProps) {\n return <InternalDevCopilotProvider config={config}>{children}</InternalDevCopilotProvider>;\n}\n"],"mappings":";;;;AAYA,SAAgB,mBAAmB,EAAE,QAAQ,YAAqC;AAChF,QAAO,oBAAC;EAAmC;EAAS;GAAsC"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,33 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
//#region src/lib/config.d.ts
|
|
7
|
-
interface DevCopilotConfig {
|
|
8
|
-
enabled: boolean;
|
|
9
|
-
allowedPaths: string[];
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
|
-
//#region src/components/dev-copilot-provider.d.ts
|
|
13
|
-
interface DevCopilotProviderProps {
|
|
14
|
-
config?: Partial<DevCopilotConfig>;
|
|
15
|
-
children: ReactNode;
|
|
16
|
-
}
|
|
17
|
-
declare function DevCopilotProvider({
|
|
18
|
-
config,
|
|
19
|
-
children
|
|
20
|
-
}: DevCopilotProviderProps): react_jsx_runtime0.JSX.Element;
|
|
21
|
-
//#endregion
|
|
22
|
-
//#region src/components/dev-copilot-overlay.d.ts
|
|
23
|
-
declare function DevCopilotOverlay(): react_jsx_runtime0.JSX.Element | null;
|
|
24
|
-
//#endregion
|
|
25
|
-
//#region src/hooks/use-selection-capture.d.ts
|
|
26
|
-
declare const useSelectionCapture: () => {
|
|
27
|
-
selectedText: string;
|
|
28
|
-
setSelectedText: react.Dispatch<react.SetStateAction<string>>;
|
|
29
|
-
clearSelection: () => void;
|
|
30
|
-
};
|
|
31
|
-
//#endregion
|
|
32
|
-
export { type CopilotAgent, type CopilotAgentStatusResponse, type CopilotApplyRequest, type CopilotApplyResponse, type CopilotChatRequest, type CopilotChatResponse, type CopilotErrorResponse, type CopilotMode, type DevCopilotConfig, DevCopilotOverlay, DevCopilotProvider, useSelectionCapture };
|
|
33
|
-
//# sourceMappingURL=index.d.mts.map
|
|
1
|
+
import { n as DevCopilotConfig, t as DevCopilotProvider } from "./dev-copilot-provider-CP_gJvWG.mjs";
|
|
2
|
+
import "./app/index.mjs";
|
|
3
|
+
import { t as CopilotOverlayWidget } from "./copilot-overlay-NlUgrMjy.mjs";
|
|
4
|
+
import "./widgets/copilot-overlay/index.mjs";
|
|
5
|
+
export { type DevCopilotConfig, CopilotOverlayWidget as DevCopilotOverlay, DevCopilotProvider };
|