UNPKG

pyb-ts

Version:

PYB-CLI - Minimal AI Agent with multi-model support and CLI interface

112 lines (111 loc) 3.03 kB
import React, { createContext, useContext, useState, useCallback } from "react"; import { getNextPermissionMode, MODE_CONFIGS } from "@pyb-types/PermissionMode"; const PermissionContext = createContext( void 0 ); function PermissionProvider({ children, isBypassPermissionsModeAvailable = false }) { const [permissionContext, setPermissionContext] = useState({ mode: "default", allowedTools: ["*"], allowedPaths: [process.cwd()], restrictions: { readOnly: false, requireConfirmation: true, bypassValidation: false }, metadata: { transitionCount: 0 } }); const cycleMode = useCallback(() => { setPermissionContext((prev) => { const nextMode = getNextPermissionMode( prev.mode, isBypassPermissionsModeAvailable ); const modeConfig = MODE_CONFIGS[nextMode]; console.log(`\u{1F504} Mode cycle: ${prev.mode} \uFFFD\uFFFD?${nextMode}`); return { ...prev, mode: nextMode, allowedTools: modeConfig.allowedTools, restrictions: modeConfig.restrictions, metadata: { ...prev.metadata, previousMode: prev.mode, activatedAt: (/* @__PURE__ */ new Date()).toISOString(), transitionCount: prev.metadata.transitionCount + 1 } }; }); }, [isBypassPermissionsModeAvailable]); const setMode = useCallback((mode) => { setPermissionContext((prev) => { const modeConfig = MODE_CONFIGS[mode]; return { ...prev, mode, allowedTools: modeConfig.allowedTools, restrictions: modeConfig.restrictions, metadata: { ...prev.metadata, previousMode: prev.mode, activatedAt: (/* @__PURE__ */ new Date()).toISOString(), transitionCount: prev.metadata.transitionCount + 1 } }; }); }, []); const isToolAllowed = useCallback( (toolName) => { const { allowedTools } = permissionContext; if (allowedTools.includes("*")) { return true; } return allowedTools.includes(toolName); }, [permissionContext] ); const getModeConfig = useCallback(() => { return MODE_CONFIGS[permissionContext.mode]; }, [permissionContext.mode]); const value = { permissionContext, currentMode: permissionContext.mode, cycleMode, setMode, isToolAllowed, getModeConfig }; return /* @__PURE__ */ React.createElement(PermissionContext.Provider, { value }, children); } function usePermissionContext() { const context = useContext(PermissionContext); if (context === void 0) { throw new Error( "usePermissionContext must be used within a PermissionProvider" ); } return context; } function usePermissionMode() { const { currentMode, setMode, cycleMode } = usePermissionContext(); return [currentMode, setMode, cycleMode]; } export { PermissionProvider, usePermissionContext, usePermissionMode }; //# sourceMappingURL=PermissionContext.js.map