You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(adk): the Go ADK in its session directory, changed repos fetched #299
On the kagent Harness a Session's directory starts empty and the Go ADK never works in it: bash runs in the session's scratch directory and the file tools resolve paths there. Nothing clones the workspace's read-only mirrors into the directory, and nothing brings the repositories that moved since the workspace's sync up to date before the first turn.
Proposed solution
One carried, upstream-ready PR on the Go ADK runtime, sharing the setup and fetch package of the claude Harness (#298), after the execution tools without skills (#390):
The runtime reads the turn's dispatch per turn: bash runs in the directory it names and the file tools resolve relative paths there; the scratch directory (uploads/, outputs/) stays reachable by its absolute path; a turn without a directory keeps the scratch directory.
Before the first turn in a directory with mirrors it sets the directory up: a clone with alternates of every mirror (git clone --shared --no-checkout), origin the provider's URL, checked out when the agent first works in it (AGENTS.md notes say how: one git switch of the default branch). Then it fetches exactly the repositories the dispatch names as changed (the admission's list, which the gateway forwards on every dispatch of the Session), under a per-repository timeout and a total budget, inside the dispatched turn, so it goes out as the person through the egress gateway's caller credential (#297); the sandbox holds no token. An empty list fetches nothing.
The setup's record makes it once: a later turn neither clones nor fetches, and a resumed turn (an answer or an approval) sets up nothing. A directory without the record, such as a fresh one after its cleanup, is set up again, and a Session with earlier turns is told so in that turn's first status message.
A refused or timed-out fetch is the turn's first status message with the repository and the reason; the turn still runs.
Acceptance criteria
e2e on a Declarative agent with the bash tool: a Session on the fixture has a clone of every mirror borrowing its objects, and bash runs in it; the repository that moved after the sync has that commit in origin/<default branch>, the other stays at the sync's commit and the mock origin logs no request for it; without a volume bash runs in /data/workspace
Unit tests on the executor: a Session without a volume runs no setup or fetch; a fetch the origin refuses appears in the turn's first message and the turn answers; a resumed turn sets up nothing
changed the title [-]feat(adk): the Go ADK in the clone, changed repositories fetched first[/-][+]feat(adk): the Go ADK in its session directory, changed repos fetched[/+]on Oct 9, 2026
Activity
[-]feat(adk): the Go ADK in the clone, changed repositories fetched first[/-][+]feat(adk): the Go ADK in its session directory, changed repos fetched[/+]