{-# OPTIONS_GHC -Wall -Werror #-} {-# LANGUAGE NoGeneralizedNewtypeDeriving #-} {-# LANGUAGE Safe #-} -------------------------------------------------------------------------------- -- | -- Copyright : (c) 2026 SPISE MISU ApS -- License : SSPL-1.0 OR AGPL-3.0-only -- Maintainer : SPISE MISU <mail+hackage@spisemisu.com> -- Stability : experimental -- -- Safe {H}askell -- -- https://simonmar.github.io/bib/safe-haskell-2012_abstract.html -- -- (David Terei, David Mazières, Simon Marlow, Simon Peyton Jones) Haskell ’12: -- Proceedings of the Fifth ACM SIGPLAN Symposium on Haskell, Copenhagen, -- Denmark, ACM, 2012 -- -- Though Haskell is predominantly type-safe, implementations contain a few -- loopholes through which code can bypass typing and module encapsulation. This -- paper presents Safe Haskell, a language extension that closes these -- loopholes. Safe Haskell makes it possible to confine and safely execute -- untrusted, possibly malicious code. By strictly enforcing types, Safe Haskell -- allows a variety of different policies from API sandboxing to -- information-flow control to be implemented easily as monads. Safe Haskell is -- aimed to be as unobtrusive as possible. It enforces properties that -- programmers tend to meet already by convention. We describe the design of -- Safe Haskell and an implementation (currently shipping with GHC) that infers -- safety for code that lies in a safe subset of the language. We use Safe -- Haskell to implement an online Haskell interpreter that can securely execute -- arbitrary untrusted code with no overhead. The use of Safe Haskell greatly -- simplifies this task and allows the use of a large body of existing code and -- tools. -------------------------------------------------------------------------------- module Agent.IO.Restricted ( RIO -- * Environment , getEnvVar -- * LLM (Config) , llmPathCWD -- * LLM (Chat) , llmChatKey, llmChatAPI , llmChatWeb -- * LLM (Code) , llmCodeDir , llmCodeMsk , llmCodeIns, llmCodeExa , llmCodeSeq, llmCodeGet, llmCodeGit , llmCodePut , llmCodeKey, llmCodeAPI , llmCodeWeb -- * LLM (Plan) , llmPlanDir , llmPlanMsk , llmPlanSeq, llmPlanGet , llmPlanKey, llmPlanAPI , llmPlanWeb ) where -------------------------------------------------------------------------------- import Internal.RIO ( RIO ) import Internal.RIO ( getEnvVar ) import Internal.RIO ( llmChatAPI , llmChatKey , llmChatWeb , llmCodeAPI , llmCodeDir , llmCodeExa , llmCodeGet , llmCodeGit , llmCodeIns , llmCodeKey , llmCodeMsk , llmCodePut , llmCodeSeq , llmCodeWeb , llmPathCWD , llmPlanAPI , llmPlanDir , llmPlanGet , llmPlanKey , llmPlanMsk , llmPlanSeq , llmPlanWeb )