Buckets:

download
raw
34.1 kB
import{s as Nt,n as Gt,o as Vt}from"../chunks/scheduler.2b22cead.js";import{S as Et,i as Ot,e as y,s as n,c as M,h as Ft,a as o,d as e,b as a,f as Zt,g as i,j as r,k as Qt,l as Wt,m as s,n as T,t as J,o as U,p}from"../chunks/index.1a0e8013.js";import{C as _t,H as w,E as Xt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.60f09434.js";import{C as m}from"../chunks/CodeBlock.8262a679.js";function St(rt){let c,ml,wl,cl,I,Il,j,jl,C,mt="A Git server environment using Gitea that provides isolated Git repository management optimized for task-based RL training. Perfect for training agents on Git operations with fast reset capabilities.",Cl,u,ul,d,ct="The Git Environment connects to a <strong>shared external Gitea service</strong> for optimal task-based isolation. <strong>Perfect for</strong>: RL training, task-based workflows, parallel execution",dl,g,gl,h,hl,f,fl,$,$l,b,bl,A,It="Complete setup (run these steps in order):",Al,k,kl,v,jt="<strong>Note</strong>:",vl,R,Ct="<li>Steps 1-3 are one-time setup</li> <li>Make sure <code>.env</code> file exists with your Gitea credentials</li> <li>After initial setup, you only need step 5 to run the example</li>",Rl,B,Bl,Z,Zl,Q,ut="<strong>GitAction</strong>: Unified action class for all Git operations",Ql,N,Nl,G,dt="<strong>Supported action_type values:</strong>",Gl,V,Vl,E,El,O,Ol,F,Fl,W,Wl,_,_l,X,Xl,S,gt="<strong>GitObservation</strong>: Contains results of Git operations",Sl,x,xl,Y,Yl,z,ht="<strong>GitState</strong>: Tracks environment state",zl,D,Dl,H,Hl,L,ft="For RL training scenarios where you need fast resets to specific repository states, you can configure task-specific base states in the environment. This is done by setting environment variables before starting containers:",Ll,q,ql,P,$t="Then in your training code, environments automatically reset to the configured state.",Pl,K,bt='See <a href="../../../examples/local_git_env.py"><code>examples/local_git_env.py</code></a> for complete working example.',Kl,ll,lt,tl,tt,el,et,sl,st,nl,At="If environment can’t connect to Gitea:",nt,al,kt="<li>Ensure Gitea is running: <code>docker ps | grep gitea</code></li> <li>Check Gitea URL in environment: <code>GITEA_URL=http://gitea:3000</code></li> <li>Verify network connectivity: <code>docker network ls | grep openenv</code></li>",at,Ml,Mt,il,vt="Ensure repository is migrated to Gitea:",it,Tl,Tt,Jl,Jt,Ul,Rt="<li>First clone is slower (~5-10s) - downloads from Gitea</li> <li>Subsequent resets are fast (&lt;1s) - just git operations</li> <li>Use task-based mode with <code>task_repos</code> for optimal performance</li>",Ut,pl,pt,yl,Bt="<li><strong>Never commit <code>.env</code> file</strong> - it contains credentials (already in .gitignore)</li> <li>Use <code>.env.example</code> as a template and create your own <code>.env</code></li> <li>Gitea credentials are for local development only</li> <li>For production, use proper secret management (Docker secrets, k8s secrets, etc.)</li> <li>All workspaces are isolated per container</li> <li>Only public repositories supported (no private repo auth)</li>",yt,ol,ot,rl,wt;return I=new _t({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),j=new w({props:{title:"Git Environment",local:"git-environment",headingTag:"h1"}}),u=new w({props:{title:"Overview",local:"overview",headingTag:"h2"}}),g=new w({props:{title:"Architecture",local:"architecture",headingTag:"h3"}}),h=new m({props:{code:"JUUyJTk0JThDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTkwJTBBJUUyJTk0JTgyJTIwU2hhcmVkJTIwR2l0ZWElMjAoc3RhcnQlMjBvbmNlKSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU4MiUyMFBvcnQlMjAzMDAwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwLSUyMFByZS1taWdyYXRlZCUyMHJlcG9zaXRvcmllcyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCVBQyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5OCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMEhUVFAlMjBBUEklMEElMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlQkUlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlQkUlMEElMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMEElMjAlMjAlRTIlOTQlOEMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTYlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTAlMjAlRTIlOTQlOEMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTYlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTAlMjAlRTIlOTQlOEMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTYlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTAlMEElMjAlMjAlRTIlOTQlODJFbnYlMjAxJTIwJUUyJTk0JTgyJTIwJUUyJTk0JTgyRW52JTIwMiUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MkVudiUyMDMlMjAlRTIlOTQlODIlMEElMjAlMjAlRTIlOTQlODJUYXNrJTIwQSVFMiU5NCU4MiUyMCVFMiU5NCU4MlRhc2slMjBCJUUyJTk0JTgyJTIwJUUyJTk0JTgyVGFzayUyMEElRTIlOTQlODIlMEElMjAlMjAlRTIlOTQlODIlNDBhYmMlMjAlMjAlRTIlOTQlODIlMjAlRTIlOTQlODIlNDBkZWYlMjAlMjAlRTIlOTQlODIlMjAlRTIlOTQlODIlNDBhYmMlMjAlMjAlRTIlOTQlODIlMEElMjAlMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTglMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTglMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTglMEElMjAlMjBJc29sYXRlZCUyMHdvcmtzcGFjZXM=",highlighted:`┌────────────────────────────────────┐
│ Shared Gitea (start once) │
│ Port <span class="hljs-number">3000</span> │
│ - Pre-migrated <span class="hljs-keyword">repositories</span> │
└──────────────┬─────────────────────┘
│ HTTP API
┾────────┼────────┾
│ │ │
┌───▼──┐ ┌──▼───┐ ┌──▼───┐
│Env <span class="hljs-number">1</span> │ │Env <span class="hljs-number">2</span> │ │Env <span class="hljs-number">3</span> │
│<span class="hljs-keyword">Task</span> A│ │<span class="hljs-keyword">Task</span> B│ │<span class="hljs-keyword">Task</span> A│
│@abc │ │@<span class="hljs-keyword">def</span> │ │@abc │
└──────┘ └──────┘ └──────┘
Isolated workspaces`,lang:"",wrap:!1}}),f=new w({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),$=new m({props:{code:"ZnJvbSUyMGVudnMuZ2l0X2VudiUyMGltcG9ydCUyMEdpdEFjdGlvbiUyQyUyMEdpdEVudiUwQSUwQSUyMyUyMENyZWF0ZSUyMGVudmlyb25tZW50JTIwZnJvbSUyMERvY2tlciUyMGltYWdlJTBBZ2l0X2VudiUyMCUzRCUyMEdpdEVudi5mcm9tX2RvY2tlcl9pbWFnZSglMjJnaXQtZW52JTNBbGF0ZXN0JTIyKSUwQSUwQSUyMyUyMFJlc2V0JTIwZW52aXJvbm1lbnQlMEFyZXN1bHQlMjAlM0QlMjBnaXRfZW52LnJlc2V0KCklMEFwcmludChyZXN1bHQub2JzZXJ2YXRpb24ubWVzc2FnZSklMEElMEElMjMlMjBMaXN0JTIwYXZhaWxhYmxlJTIwcmVwb3NpdG9yaWVzJTIwKHByZS1taWdyYXRlZCUyMHRvJTIwc2hhcmVkJTIwR2l0ZWEpJTBBcmVzdWx0JTIwJTNEJTIwZ2l0X2Vudi5zdGVwKEdpdEFjdGlvbihhY3Rpb25fdHlwZSUzRCUyMmxpc3RfcmVwb3MlMjIpKSUwQWZvciUyMHJlcG8lMjBpbiUyMHJlc3VsdC5vYnNlcnZhdGlvbi5yZXBvcyUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JyZXBvJTVCJ25hbWUnJTVEJTdEJTNBJTIwJTdCcmVwbyU1QidjbG9uZV91cmwnJTVEJTdEJTIyKSUwQSUwQSUyMyUyMENsb25lJTIwdG8lMjB3b3Jrc3BhY2UlMEFyZXN1bHQlMjAlM0QlMjBnaXRfZW52LnN0ZXAoR2l0QWN0aW9uKGFjdGlvbl90eXBlJTNEJTIyY2xvbmVfcmVwbyUyMiUyQyUyMHJlcG9fbmFtZSUzRCUyMk9wZW5FbnYlMjIpKSUwQXByaW50KHJlc3VsdC5vYnNlcnZhdGlvbi5vdXRwdXQpJTIwJTIwJTIzJTIwQ2xvbmVkJTIwdG8lM0ElMjAlMkZ3b3Jrc3BhY2UlMkZPcGVuRW52JTBBJTBBJTIzJTIwRXhlY3V0ZSUyMGdpdCUyMGNvbW1hbmRzJTBBcmVzdWx0JTIwJTNEJTIwZ2l0X2Vudi5zdGVwKEdpdEFjdGlvbiglMEElMjAlMjAlMjAlMjBhY3Rpb25fdHlwZSUzRCUyMmV4ZWN1dGVfZ2l0X2NvbW1hbmQlMjIlMkMlMEElMjAlMjAlMjAlMjBjb21tYW5kJTNEJTIyc3RhdHVzJTIyJTJDJTBBJTIwJTIwJTIwJTIwd29ya2luZ19kaXIlM0QlMjJPcGVuRW52JTIyJTBBKSklMEFwcmludChyZXN1bHQub2JzZXJ2YXRpb24ub3V0cHV0KSUwQSUwQSUyMyUyMENsZWFudXAlMEFnaXRfZW52LmNsb3NlKCk=",highlighted:`<span class="hljs-keyword">from</span> envs.git_env <span class="hljs-keyword">import</span> GitAction, GitEnv
<span class="hljs-comment"># Create environment from Docker image</span>
git_env = GitEnv.from_docker_image(<span class="hljs-string">&quot;git-env:latest&quot;</span>)
<span class="hljs-comment"># Reset environment</span>
result = git_env.reset()
<span class="hljs-built_in">print</span>(result.observation.message)
<span class="hljs-comment"># List available repositories (pre-migrated to shared Gitea)</span>
result = git_env.step(GitAction(action_type=<span class="hljs-string">&quot;list_repos&quot;</span>))
<span class="hljs-keyword">for</span> repo <span class="hljs-keyword">in</span> result.observation.repos:
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;<span class="hljs-subst">{repo[<span class="hljs-string">&#x27;name&#x27;</span>]}</span>: <span class="hljs-subst">{repo[<span class="hljs-string">&#x27;clone_url&#x27;</span>]}</span>&quot;</span>)
<span class="hljs-comment"># Clone to workspace</span>
result = git_env.step(GitAction(action_type=<span class="hljs-string">&quot;clone_repo&quot;</span>, repo_name=<span class="hljs-string">&quot;OpenEnv&quot;</span>))
<span class="hljs-built_in">print</span>(result.observation.output) <span class="hljs-comment"># Cloned to: /workspace/OpenEnv</span>
<span class="hljs-comment"># Execute git commands</span>
result = git_env.step(GitAction(
action_type=<span class="hljs-string">&quot;execute_git_command&quot;</span>,
command=<span class="hljs-string">&quot;status&quot;</span>,
working_dir=<span class="hljs-string">&quot;OpenEnv&quot;</span>
))
<span class="hljs-built_in">print</span>(result.observation.output)
<span class="hljs-comment"># Cleanup</span>
git_env.close()`,lang:"python",wrap:!1}}),b=new w({props:{title:"Setup and Running the Example",local:"setup-and-running-the-example",headingTag:"h2"}}),k=new m({props:{code:"JTIzJTIwMC4lMjBDb25maWd1cmUlMjBlbnZpcm9ubWVudCUyMHZhcmlhYmxlcyUwQWNwJTIwLmVudi5leGFtcGxlJTIwLmVudiUwQSUyMyUyMEVkaXQlMjAuZW52JTIwYW5kJTIwc2V0JTIweW91ciUyMEdpdGVhJTIwY3JlZGVudGlhbHMlMjBpZiUyMG5lZWRlZCUwQSUwQSUyMyUyMDEuJTIwU3RhcnQlMjBzaGFyZWQlMjBHaXRlYSUyMHNlcnZpY2UlMjAob25lLXRpbWUpJTBBLiUyRnNjcmlwdHMlMkZzZXR1cF9zaGFyZWRfZ2l0ZWEuc2glMEElMEElMjMlMjAyLiUyME1pZ3JhdGUlMjBhJTIwdGVzdCUyMHJlcG9zaXRvcnklMjB0byUyMEdpdGVhJTIwKG9uZS10aW1lKSUwQWRvY2tlciUyMGV4ZWMlMjBvcGVuZW52LWdpdGVhJTIwY3VybCUyMC1YJTIwUE9TVCUyMCU1QyUwQSUyMCUyMGh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0EzMDAwJTJGYXBpJTJGdjElMkZyZXBvcyUyRm1pZ3JhdGUlMjAlNUMlMEElMjAlMjAtdSUyMGdpdGVhJTNBZ2l0ZWExMjMlMjAlNUMlMEElMjAlMjAtSCUyMCdDb250ZW50LVR5cGUlM0ElMjBhcHBsaWNhdGlvbiUyRmpzb24nJTIwJTVDJTBBJTIwJTIwLWQlMjAnJTdCJTBBJTIwJTIwJTIwJTIwJTIyY2xvbmVfYWRkciUyMiUzQSUyMCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmh1Z2dpbmdmYWNlJTJGT3BlbkVudiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnJlcG9fbmFtZSUyMiUzQSUyMCUyMk9wZW5FbnYlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJyZXBvX293bmVyJTIyJTNBJTIwJTIyZ2l0ZWElMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJzZXJ2aWNlJTIyJTNBJTIwJTIyZ2l0aHViJTIyJTBBJTIwJTIwJTdEJyUwQSUwQSUyMyUyMDMuJTIwQnVpbGQlMjBEb2NrZXIlMjBpbWFnZXMlMEFkb2NrZXIlMjBidWlsZCUyMC10JTIwb3BlbmVudi1iYXNlJTNBbGF0ZXN0JTIwLWYlMjBzcmMlMkZvcGVuZW52JTJGY29yZSUyRmNvbnRhaW5lcnMlMkZpbWFnZXMlMkZEb2NrZXJmaWxlJTIwLiUwQWRvY2tlciUyMGJ1aWxkJTIwLXQlMjBnaXQtZW52JTNBbGF0ZXN0JTIwLWYlMjBlbnZzJTJGZ2l0X2VudiUyRnNlcnZlciUyRkRvY2tlcmZpbGUlMjAuJTBBJTBBJTIzJTIwNC4lMjBJbnN0YWxsJTIwUHl0aG9uJTIwZGVwZW5kZW5jaWVzJTBBdXYlMjBwaXAlMjBpbnN0YWxsJTIwLWUlMjAuJTBBJTBBJTIzJTIwNS4lMjBSdW4lMjB0aGUlMjBleGFtcGxlJTIwKGxvYWRzJTIwY3JlZGVudGlhbHMlMjBmcm9tJTIwLmVudiklMEFweXRob24zJTIwZXhhbXBsZXMlMkZsb2NhbF9naXRfZW52LnB5",highlighted:`<span class="hljs-comment"># 0. Configure environment variables</span>
<span class="hljs-built_in">cp</span> .env.example .<span class="hljs-built_in">env</span>
<span class="hljs-comment"># Edit .env and set your Gitea credentials if needed</span>
<span class="hljs-comment"># 1. Start shared Gitea service (one-time)</span>
./scripts/setup_shared_gitea.sh
<span class="hljs-comment"># 2. Migrate a test repository to Gitea (one-time)</span>
docker <span class="hljs-built_in">exec</span> openenv-gitea curl -X POST \\
http://localhost:3000/api/v1/repos/migrate \\
-u gitea:gitea123 \\
-H <span class="hljs-string">&#x27;Content-Type: application/json&#x27;</span> \\
-d <span class="hljs-string">&#x27;{
&quot;clone_addr&quot;: &quot;https://github.com/huggingface/OpenEnv&quot;,
&quot;repo_name&quot;: &quot;OpenEnv&quot;,
&quot;repo_owner&quot;: &quot;gitea&quot;,
&quot;service&quot;: &quot;github&quot;
}&#x27;</span>
<span class="hljs-comment"># 3. Build Docker images</span>
docker build -t openenv-base:latest -f src/openenv/core/containers/images/Dockerfile .
docker build -t git-env:latest -f envs/git_env/server/Dockerfile .
<span class="hljs-comment"># 4. Install Python dependencies</span>
uv pip install -e .
<span class="hljs-comment"># 5. Run the example (loads credentials from .env)</span>
python3 examples/local_git_env.py`,lang:"bash",wrap:!1}}),B=new w({props:{title:"Environment Details",local:"environment-details",headingTag:"h2"}}),Z=new w({props:{title:"Actions",local:"actions",headingTag:"h3"}}),N=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBHaXRBY3Rpb24oQWN0aW9uKSUzQSUwQSUyMCUyMCUyMCUyMGFjdGlvbl90eXBlJTNBJTIwc3RyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwT3BlcmF0aW9uJTIwdHlwZSUwQSUyMCUyMCUyMCUyMHJlcG9fbmFtZSUzQSUyMHN0ciUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFJlcG9zaXRvcnklMjBuYW1lJTIwKGZvciUyMGNsb25lJTJGZXhlY3V0ZSklMEElMjAlMjAlMjAlMjB0YXJnZXRfZGlyJTNBJTIwT3B0aW9uYWwlNUJzdHIlNUQlMjAlMjMlMjBUYXJnZXQlMjBkaXJlY3RvcnklMjAoZm9yJTIwY2xvbmUpJTBBJTIwJTIwJTIwJTIwY29tbWFuZCUzQSUyMHN0ciUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEdpdCUyMGNvbW1hbmQlMjAoZm9yJTIwZXhlY3V0ZSklMEElMjAlMjAlMjAlMjB3b3JraW5nX2RpciUzQSUyMHN0ciUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFdvcmtpbmclMjBkaXJlY3RvcnklMjAoZm9yJTIwZXhlY3V0ZSk=",highlighted:`<span class="hljs-meta">@dataclass</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">GitAction</span>(<span class="hljs-title class_ inherited__">Action</span>):
action_type: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Operation type</span>
repo_name: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Repository name (for clone/execute)</span>
target_dir: <span class="hljs-type">Optional</span>[<span class="hljs-built_in">str</span>] <span class="hljs-comment"># Target directory (for clone)</span>
command: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Git command (for execute)</span>
working_dir: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Working directory (for execute)</span>`,lang:"python",wrap:!1}}),V=new w({props:{title:"“clone_repo” - Clone repository to workspace",local:"clonerepo---clone-repository-to-workspace",headingTag:"h4"}}),E=new m({props:{code:"R2l0QWN0aW9uKGFjdGlvbl90eXBlJTNEJTIyY2xvbmVfcmVwbyUyMiUyQyUyMHJlcG9fbmFtZSUzRCUyMk9wZW5FbnYlMjIpJTBBR2l0QWN0aW9uKGFjdGlvbl90eXBlJTNEJTIyY2xvbmVfcmVwbyUyMiUyQyUyMHJlcG9fbmFtZSUzRCUyMk9wZW5FbnYlMjIlMkMlMjB0YXJnZXRfZGlyJTNEJTIyY3VzdG9tLWRpciUyMik=",highlighted:`GitAction(action_type=<span class="hljs-string">&quot;clone_repo&quot;</span>, repo_name=<span class="hljs-string">&quot;OpenEnv&quot;</span>)
GitAction(action_type=<span class="hljs-string">&quot;clone_repo&quot;</span>, repo_name=<span class="hljs-string">&quot;OpenEnv&quot;</span>, target_dir=<span class="hljs-string">&quot;custom-dir&quot;</span>)`,lang:"python",wrap:!1}}),O=new w({props:{title:"“list_repos” - List available repositories",local:"listrepos---list-available-repositories",headingTag:"h4"}}),F=new m({props:{code:"R2l0QWN0aW9uKGFjdGlvbl90eXBlJTNEJTIybGlzdF9yZXBvcyUyMik=",highlighted:'GitAction(action_type=<span class="hljs-string">&quot;list_repos&quot;</span>)',lang:"python",wrap:!1}}),W=new w({props:{title:"“execute_git_command” - Execute git command",local:"executegitcommand---execute-git-command",headingTag:"h4"}}),_=new m({props:{code:"R2l0QWN0aW9uKCUwQSUyMCUyMCUyMCUyMGFjdGlvbl90eXBlJTNEJTIyZXhlY3V0ZV9naXRfY29tbWFuZCUyMiUyQyUwQSUyMCUyMCUyMCUyMGNvbW1hbmQlM0QlMjJzdGF0dXMlMjIlMkMlMEElMjAlMjAlMjAlMjB3b3JraW5nX2RpciUzRCUyMk9wZW5FbnYlMjIlMEEp",highlighted:`GitAction(
action_type=<span class="hljs-string">&quot;execute_git_command&quot;</span>,
command=<span class="hljs-string">&quot;status&quot;</span>,
working_dir=<span class="hljs-string">&quot;OpenEnv&quot;</span>
)`,lang:"python",wrap:!1}}),X=new w({props:{title:"Observation",local:"observation",headingTag:"h3"}}),x=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBHaXRPYnNlcnZhdGlvbihPYnNlcnZhdGlvbiklM0ElMEElMjAlMjAlMjAlMjBzdWNjZXNzJTNBJTIwYm9vbCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFdoZXRoZXIlMjBvcGVyYXRpb24lMjBzdWNjZWVkZWQlMEElMjAlMjAlMjAlMjBtZXNzYWdlJTNBJTIwc3RyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwSHVtYW4tcmVhZGFibGUlMjBtZXNzYWdlJTBBJTIwJTIwJTIwJTIwb3V0cHV0JTNBJTIwc3RyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29tbWFuZCUyMG91dHB1dCUyMG9yJTIwZGV0YWlsZWQlMjByZXN1bHQlMEElMjAlMjAlMjAlMjBlcnJvciUzQSUyMHN0ciUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEVycm9yJTIwbWVzc2FnZSUyMGlmJTIwZmFpbGVkJTBBJTIwJTIwJTIwJTIwcmVwb3MlM0ElMjBsaXN0JTVCZGljdCU1RCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMExpc3QlMjBvZiUyMHJlcG9zaXRvcmllcyUyMChmb3IlMjBsaXN0X3JlcG9zKQ==",highlighted:`<span class="hljs-meta">@dataclass</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">GitObservation</span>(<span class="hljs-title class_ inherited__">Observation</span>):
success: <span class="hljs-built_in">bool</span> <span class="hljs-comment"># Whether operation succeeded</span>
message: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Human-readable message</span>
output: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Command output or detailed result</span>
error: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Error message if failed</span>
repos: <span class="hljs-built_in">list</span>[<span class="hljs-built_in">dict</span>] <span class="hljs-comment"># List of repositories (for list_repos)</span>`,lang:"python",wrap:!1}}),Y=new w({props:{title:"State",local:"state",headingTag:"h3"}}),D=new m({props:{code:"JTQwZGF0YWNsYXNzJTBBY2xhc3MlMjBHaXRTdGF0ZShTdGF0ZSklM0ElMEElMjAlMjAlMjAlMjBlcGlzb2RlX2lkJTNBJTIwc3RyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVW5pcXVlJTIwZXBpc29kZSUyMGlkZW50aWZpZXIlMEElMjAlMjAlMjAlMjBzdGVwX2NvdW50JTNBJTIwaW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTnVtYmVyJTIwb2YlMjBzdGVwcyUyMHRha2VuJTBBJTIwJTIwJTIwJTIwZ2l0ZWFfcmVhZHklM0ElMjBib29sJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwV2hldGhlciUyMEdpdGVhJTIwaXMlMjBhY2Nlc3NpYmxlJTBBJTIwJTIwJTIwJTIwd29ya3NwYWNlX3BhdGglM0ElMjBzdHIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQYXRoJTIwdG8lMjB3b3Jrc3BhY2UlMjBkaXJlY3Rvcnk=",highlighted:`<span class="hljs-meta">@dataclass</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">GitState</span>(<span class="hljs-title class_ inherited__">State</span>):
episode_id: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Unique episode identifier</span>
step_count: <span class="hljs-built_in">int</span> <span class="hljs-comment"># Number of steps taken</span>
gitea_ready: <span class="hljs-built_in">bool</span> <span class="hljs-comment"># Whether Gitea is accessible</span>
workspace_path: <span class="hljs-built_in">str</span> <span class="hljs-comment"># Path to workspace directory</span>`,lang:"python",wrap:!1}}),H=new w({props:{title:"Advanced: Task-Based Training",local:"advanced-task-based-training",headingTag:"h2"}}),q=new m({props:{code:"JTIzJTIwRXhhbXBsZSUzQSUyMENvbmZpZ3VyZSUyMHRhc2tzJTIwZm9yJTIweW91ciUyMHRyYWluaW5nJTIwc2V0dXAlMEFkb2NrZXIlMjBydW4lMjAlNUMlMEElMjAlMjAtZSUyMEdJVEVBX1VSTCUzRGh0dHAlM0ElMkYlMkZob3N0LmRvY2tlci5pbnRlcm5hbCUzQTMwMDAlMjAlNUMlMEElMjAlMjAtZSUyMFRBU0tfUkVQT1MlM0QnJTdCJTIyYnVnX2ZpeCUyMiUzQSUyMCU1QiUyMm15LXJlcG8lMjIlMkMlMjAlMjJhYmMxMjMlMjIlNUQlMkMlMjAlMjJmZWF0dXJlJTIyJTNBJTIwJTVCJTIybXktcmVwbyUyMiUyQyUyMCUyMmRlZjQ1NiUyMiU1RCU3RCclMjAlNUMlMEElMjAlMjBnaXQtZW52JTNBbGF0ZXN0",highlighted:`<span class="hljs-comment"># Example: Configure tasks for your training setup</span>
docker run \\
-e GITEA_URL=http://host.docker.internal:3000 \\
-e TASK_REPOS=<span class="hljs-string">&#x27;{&quot;bug_fix&quot;: [&quot;my-repo&quot;, &quot;abc123&quot;], &quot;feature&quot;: [&quot;my-repo&quot;, &quot;def456&quot;]}&#x27;</span> \\
git-env:latest`,lang:"bash",wrap:!1}}),ll=new w({props:{title:"Project Structure",local:"project-structure",headingTag:"h2"}}),tl=new m({props:{code:"Z2l0X2VudiUyRiUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMFJFQURNRS5tZCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFRoaXMlMjBmaWxlJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBFeHBvcnRzJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwbW9kZWxzLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQWN0aW9uJTJDJTIwT2JzZXJ2YXRpb24lMkMlMjBTdGF0ZSUyMGRlZmluaXRpb25zJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwY2xpZW50LnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwR2l0RW52JTIwSFRUUCUyMGNsaWVudCUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMGRvY2tlci1jb21wb3NlLmdpdGVhLnltbCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFNoYXJlZCUyMEdpdGVhJTIwc2VydmljZSUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMHNlcnZlciUyRiUwQSUyMCUyMCUyMCUyMCVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMF9faW5pdF9fLnB5JTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwZ2l0X3Rhc2tfZW52aXJvbm1lbnQucHklMjAlMjAlMjAlMjAlMjMlMjBUYXNrLW9wdGltaXplZCUyMGVudmlyb25tZW50JTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYXBwLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRmFzdEFQSSUyMGFwcGxpY2F0aW9uJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwRG9ja2VyZmlsZSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMExpZ2h0d2VpZ2h0JTIwY29udGFpbmVyJTIwaW1hZ2U=",highlighted:`git_env/
├── README.md <span class="hljs-meta"># This file</span>
├── __init__.py <span class="hljs-meta"># Exports</span>
├── models.py <span class="hljs-meta"># Action, Observation, State definitions</span>
├── <span class="hljs-keyword">client</span>.py <span class="hljs-meta"># GitEnv HTTP client</span>
├── docker-compose.gitea.yml <span class="hljs-meta"># Shared Gitea service</span>
└── <span class="hljs-keyword">server</span>/
├── __init__.py
├── git_task_environment.py <span class="hljs-meta"># Task-optimized environment</span>
├── app.py <span class="hljs-meta"># FastAPI application</span>
└── Dockerfile <span class="hljs-meta"># Lightweight container image</span>`,lang:"",wrap:!1}}),el=new w({props:{title:"Troubleshooting",local:"troubleshooting",headingTag:"h2"}}),sl=new w({props:{title:"Gitea Not Ready",local:"gitea-not-ready",headingTag:"h3"}}),Ml=new w({props:{title:"Repository Not Found",local:"repository-not-found",headingTag:"h3"}}),Tl=new m({props:{code:"JTIzJTIwTGlzdCUyMHJlcG9zJTBBY3VybCUyMC11JTIwZ2l0ZWElM0FnaXRlYTEyMyUyMGh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0EzMDAwJTJGYXBpJTJGdjElMkZ1c2VyJTJGcmVwb3M=",highlighted:`<span class="hljs-comment"># List repos</span>
curl -u gitea:gitea123 http://localhost:3000/api/v1/user/repos`,lang:"bash",wrap:!1}}),Jl=new w({props:{title:"Slow Clone/Reset",local:"slow-clonereset",headingTag:"h3"}}),pl=new w({props:{title:"Security Notes",local:"security-notes",headingTag:"h2"}}),ol=new Xt({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/git.md"}}),{c(){c=y("meta"),ml=n(),wl=y("p"),cl=n(),M(I.$$.fragment),Il=n(),M(j.$$.fragment),jl=n(),C=y("p"),C.textContent=mt,Cl=n(),M(u.$$.fragment),ul=n(),d=y("p"),d.innerHTML=ct,dl=n(),M(g.$$.fragment),gl=n(),M(h.$$.fragment),hl=n(),M(f.$$.fragment),fl=n(),M($.$$.fragment),$l=n(),M(b.$$.fragment),bl=n(),A=y("p"),A.textContent=It,Al=n(),M(k.$$.fragment),kl=n(),v=y("p"),v.innerHTML=jt,vl=n(),R=y("ul"),R.innerHTML=Ct,Rl=n(),M(B.$$.fragment),Bl=n(),M(Z.$$.fragment),Zl=n(),Q=y("p"),Q.innerHTML=ut,Ql=n(),M(N.$$.fragment),Nl=n(),G=y("p"),G.innerHTML=dt,Gl=n(),M(V.$$.fragment),Vl=n(),M(E.$$.fragment),El=n(),M(O.$$.fragment),Ol=n(),M(F.$$.fragment),Fl=n(),M(W.$$.fragment),Wl=n(),M(_.$$.fragment),_l=n(),M(X.$$.fragment),Xl=n(),S=y("p"),S.innerHTML=gt,Sl=n(),M(x.$$.fragment),xl=n(),M(Y.$$.fragment),Yl=n(),z=y("p"),z.innerHTML=ht,zl=n(),M(D.$$.fragment),Dl=n(),M(H.$$.fragment),Hl=n(),L=y("p"),L.textContent=ft,Ll=n(),M(q.$$.fragment),ql=n(),P=y("p"),P.textContent=$t,Pl=n(),K=y("p"),K.innerHTML=bt,Kl=n(),M(ll.$$.fragment),lt=n(),M(tl.$$.fragment),tt=n(),M(el.$$.fragment),et=n(),M(sl.$$.fragment),st=n(),nl=y("p"),nl.textContent=At,nt=n(),al=y("ol"),al.innerHTML=kt,at=n(),M(Ml.$$.fragment),Mt=n(),il=y("p"),il.textContent=vt,it=n(),M(Tl.$$.fragment),Tt=n(),M(Jl.$$.fragment),Jt=n(),Ul=y("ul"),Ul.innerHTML=Rt,Ut=n(),M(pl.$$.fragment),pt=n(),yl=y("ul"),yl.innerHTML=Bt,yt=n(),M(ol.$$.fragment),ot=n(),rl=y("p"),this.h()},l(l){const t=Ft("svelte-u9bgzb",document.head);c=o(t,"META",{name:!0,content:!0}),t.forEach(e),ml=a(l),wl=o(l,"P",{}),Zt(wl).forEach(e),cl=a(l),i(I.$$.fragment,l),Il=a(l),i(j.$$.fragment,l),jl=a(l),C=o(l,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1vmv4ib"&&(C.textContent=mt),Cl=a(l),i(u.$$.fragment,l),ul=a(l),d=o(l,"P",{"data-svelte-h":!0}),r(d)!=="svelte-phyhkc"&&(d.innerHTML=ct),dl=a(l),i(g.$$.fragment,l),gl=a(l),i(h.$$.fragment,l),hl=a(l),i(f.$$.fragment,l),fl=a(l),i($.$$.fragment,l),$l=a(l),i(b.$$.fragment,l),bl=a(l),A=o(l,"P",{"data-svelte-h":!0}),r(A)!=="svelte-1ck3643"&&(A.textContent=It),Al=a(l),i(k.$$.fragment,l),kl=a(l),v=o(l,"P",{"data-svelte-h":!0}),r(v)!=="svelte-pxb0rv"&&(v.innerHTML=jt),vl=a(l),R=o(l,"UL",{"data-svelte-h":!0}),r(R)!=="svelte-xomq2q"&&(R.innerHTML=Ct),Rl=a(l),i(B.$$.fragment,l),Bl=a(l),i(Z.$$.fragment,l),Zl=a(l),Q=o(l,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-nupr4j"&&(Q.innerHTML=ut),Ql=a(l),i(N.$$.fragment,l),Nl=a(l),G=o(l,"P",{"data-svelte-h":!0}),r(G)!=="svelte-1hk0xlw"&&(G.innerHTML=dt),Gl=a(l),i(V.$$.fragment,l),Vl=a(l),i(E.$$.fragment,l),El=a(l),i(O.$$.fragment,l),Ol=a(l),i(F.$$.fragment,l),Fl=a(l),i(W.$$.fragment,l),Wl=a(l),i(_.$$.fragment,l),_l=a(l),i(X.$$.fragment,l),Xl=a(l),S=o(l,"P",{"data-svelte-h":!0}),r(S)!=="svelte-1eyw2bv"&&(S.innerHTML=gt),Sl=a(l),i(x.$$.fragment,l),xl=a(l),i(Y.$$.fragment,l),Yl=a(l),z=o(l,"P",{"data-svelte-h":!0}),r(z)!=="svelte-1kusfno"&&(z.innerHTML=ht),zl=a(l),i(D.$$.fragment,l),Dl=a(l),i(H.$$.fragment,l),Hl=a(l),L=o(l,"P",{"data-svelte-h":!0}),r(L)!=="svelte-otvm0e"&&(L.textContent=ft),Ll=a(l),i(q.$$.fragment,l),ql=a(l),P=o(l,"P",{"data-svelte-h":!0}),r(P)!=="svelte-1fw3d41"&&(P.textContent=$t),Pl=a(l),K=o(l,"P",{"data-svelte-h":!0}),r(K)!=="svelte-1oj4s4x"&&(K.innerHTML=bt),Kl=a(l),i(ll.$$.fragment,l),lt=a(l),i(tl.$$.fragment,l),tt=a(l),i(el.$$.fragment,l),et=a(l),i(sl.$$.fragment,l),st=a(l),nl=o(l,"P",{"data-svelte-h":!0}),r(nl)!=="svelte-pnfor4"&&(nl.textContent=At),nt=a(l),al=o(l,"OL",{"data-svelte-h":!0}),r(al)!=="svelte-4crpt"&&(al.innerHTML=kt),at=a(l),i(Ml.$$.fragment,l),Mt=a(l),il=o(l,"P",{"data-svelte-h":!0}),r(il)!=="svelte-15oq5d2"&&(il.textContent=vt),it=a(l),i(Tl.$$.fragment,l),Tt=a(l),i(Jl.$$.fragment,l),Jt=a(l),Ul=o(l,"UL",{"data-svelte-h":!0}),r(Ul)!=="svelte-axvgm4"&&(Ul.innerHTML=Rt),Ut=a(l),i(pl.$$.fragment,l),pt=a(l),yl=o(l,"UL",{"data-svelte-h":!0}),r(yl)!=="svelte-uckrij"&&(yl.innerHTML=Bt),yt=a(l),i(ol.$$.fragment,l),ot=a(l),rl=o(l,"P",{}),Zt(rl).forEach(e),this.h()},h(){Qt(c,"name","hf:doc:metadata"),Qt(c,"content",xt)},m(l,t){Wt(document.head,c),s(l,ml,t),s(l,wl,t),s(l,cl,t),T(I,l,t),s(l,Il,t),T(j,l,t),s(l,jl,t),s(l,C,t),s(l,Cl,t),T(u,l,t),s(l,ul,t),s(l,d,t),s(l,dl,t),T(g,l,t),s(l,gl,t),T(h,l,t),s(l,hl,t),T(f,l,t),s(l,fl,t),T($,l,t),s(l,$l,t),T(b,l,t),s(l,bl,t),s(l,A,t),s(l,Al,t),T(k,l,t),s(l,kl,t),s(l,v,t),s(l,vl,t),s(l,R,t),s(l,Rl,t),T(B,l,t),s(l,Bl,t),T(Z,l,t),s(l,Zl,t),s(l,Q,t),s(l,Ql,t),T(N,l,t),s(l,Nl,t),s(l,G,t),s(l,Gl,t),T(V,l,t),s(l,Vl,t),T(E,l,t),s(l,El,t),T(O,l,t),s(l,Ol,t),T(F,l,t),s(l,Fl,t),T(W,l,t),s(l,Wl,t),T(_,l,t),s(l,_l,t),T(X,l,t),s(l,Xl,t),s(l,S,t),s(l,Sl,t),T(x,l,t),s(l,xl,t),T(Y,l,t),s(l,Yl,t),s(l,z,t),s(l,zl,t),T(D,l,t),s(l,Dl,t),T(H,l,t),s(l,Hl,t),s(l,L,t),s(l,Ll,t),T(q,l,t),s(l,ql,t),s(l,P,t),s(l,Pl,t),s(l,K,t),s(l,Kl,t),T(ll,l,t),s(l,lt,t),T(tl,l,t),s(l,tt,t),T(el,l,t),s(l,et,t),T(sl,l,t),s(l,st,t),s(l,nl,t),s(l,nt,t),s(l,al,t),s(l,at,t),T(Ml,l,t),s(l,Mt,t),s(l,il,t),s(l,it,t),T(Tl,l,t),s(l,Tt,t),T(Jl,l,t),s(l,Jt,t),s(l,Ul,t),s(l,Ut,t),T(pl,l,t),s(l,pt,t),s(l,yl,t),s(l,yt,t),T(ol,l,t),s(l,ot,t),s(l,rl,t),wt=!0},p:Gt,i(l){wt||(J(I.$$.fragment,l),J(j.$$.fragment,l),J(u.$$.fragment,l),J(g.$$.fragment,l),J(h.$$.fragment,l),J(f.$$.fragment,l),J($.$$.fragment,l),J(b.$$.fragment,l),J(k.$$.fragment,l),J(B.$$.fragment,l),J(Z.$$.fragment,l),J(N.$$.fragment,l),J(V.$$.fragment,l),J(E.$$.fragment,l),J(O.$$.fragment,l),J(F.$$.fragment,l),J(W.$$.fragment,l),J(_.$$.fragment,l),J(X.$$.fragment,l),J(x.$$.fragment,l),J(Y.$$.fragment,l),J(D.$$.fragment,l),J(H.$$.fragment,l),J(q.$$.fragment,l),J(ll.$$.fragment,l),J(tl.$$.fragment,l),J(el.$$.fragment,l),J(sl.$$.fragment,l),J(Ml.$$.fragment,l),J(Tl.$$.fragment,l),J(Jl.$$.fragment,l),J(pl.$$.fragment,l),J(ol.$$.fragment,l),wt=!0)},o(l){U(I.$$.fragment,l),U(j.$$.fragment,l),U(u.$$.fragment,l),U(g.$$.fragment,l),U(h.$$.fragment,l),U(f.$$.fragment,l),U($.$$.fragment,l),U(b.$$.fragment,l),U(k.$$.fragment,l),U(B.$$.fragment,l),U(Z.$$.fragment,l),U(N.$$.fragment,l),U(V.$$.fragment,l),U(E.$$.fragment,l),U(O.$$.fragment,l),U(F.$$.fragment,l),U(W.$$.fragment,l),U(_.$$.fragment,l),U(X.$$.fragment,l),U(x.$$.fragment,l),U(Y.$$.fragment,l),U(D.$$.fragment,l),U(H.$$.fragment,l),U(q.$$.fragment,l),U(ll.$$.fragment,l),U(tl.$$.fragment,l),U(el.$$.fragment,l),U(sl.$$.fragment,l),U(Ml.$$.fragment,l),U(Tl.$$.fragment,l),U(Jl.$$.fragment,l),U(pl.$$.fragment,l),U(ol.$$.fragment,l),wt=!1},d(l){l&&(e(ml),e(wl),e(cl),e(Il),e(jl),e(C),e(Cl),e(ul),e(d),e(dl),e(gl),e(hl),e(fl),e($l),e(bl),e(A),e(Al),e(kl),e(v),e(vl),e(R),e(Rl),e(Bl),e(Zl),e(Q),e(Ql),e(Nl),e(G),e(Gl),e(Vl),e(El),e(Ol),e(Fl),e(Wl),e(_l),e(Xl),e(S),e(Sl),e(xl),e(Yl),e(z),e(zl),e(Dl),e(Hl),e(L),e(Ll),e(ql),e(P),e(Pl),e(K),e(Kl),e(lt),e(tt),e(et),e(st),e(nl),e(nt),e(al),e(at),e(Mt),e(il),e(it),e(Tt),e(Jt),e(Ul),e(Ut),e(pt),e(yl),e(yt),e(ot),e(rl)),e(c),p(I,l),p(j,l),p(u,l),p(g,l),p(h,l),p(f,l),p($,l),p(b,l),p(k,l),p(B,l),p(Z,l),p(N,l),p(V,l),p(E,l),p(O,l),p(F,l),p(W,l),p(_,l),p(X,l),p(x,l),p(Y,l),p(D,l),p(H,l),p(q,l),p(ll,l),p(tl,l),p(el,l),p(sl,l),p(Ml,l),p(Tl,l),p(Jl,l),p(pl,l),p(ol,l)}}}const xt='{"title":"Git Environment","local":"git-environment","sections":[{"title":"Overview","local":"overview","sections":[{"title":"Architecture","local":"architecture","sections":[],"depth":3}],"depth":2},{"title":"Quick Start","local":"quick-start","sections":[],"depth":2},{"title":"Setup and Running the Example","local":"setup-and-running-the-example","sections":[],"depth":2},{"title":"Environment Details","local":"environment-details","sections":[{"title":"Actions","local":"actions","sections":[{"title":"“clone_repo” - Clone repository to workspace","local":"clonerepo---clone-repository-to-workspace","sections":[],"depth":4},{"title":"“list_repos” - List available repositories","local":"listrepos---list-available-repositories","sections":[],"depth":4},{"title":"“execute_git_command” - Execute git command","local":"executegitcommand---execute-git-command","sections":[],"depth":4}],"depth":3},{"title":"Observation","local":"observation","sections":[],"depth":3},{"title":"State","local":"state","sections":[],"depth":3}],"depth":2},{"title":"Advanced: Task-Based Training","local":"advanced-task-based-training","sections":[],"depth":2},{"title":"Project Structure","local":"project-structure","sections":[],"depth":2},{"title":"Troubleshooting","local":"troubleshooting","sections":[{"title":"Gitea Not Ready","local":"gitea-not-ready","sections":[],"depth":3},{"title":"Repository Not Found","local":"repository-not-found","sections":[],"depth":3},{"title":"Slow Clone/Reset","local":"slow-clonereset","sections":[],"depth":3}],"depth":2},{"title":"Security Notes","local":"security-notes","sections":[],"depth":2}],"depth":1}';function Yt(rt){return Vt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class qt extends Et{constructor(c){super(),Ot(this,c,Yt,St,Nt,{})}}export{qt as component};

Xet Storage Details

Size:
34.1 kB
·
Xet hash:
8bd56b2666653cfe9178ac8ac7b650191082b48c46806c6da691480ea1d7626f

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.