Skip to content

feat(adk): the Go ADK in its session directory, changed repos fetched #299

Closed

Description

@teemow

Problem

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
  • FORK.md row for the carried patch

Activity

  1. 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
  2. moved this from Backlog 📦 to In Progress ⛏️ in Roadmapon Oct 11, 2026
  3. moved this from Validation ☑️ to Done ✅ in Roadmapon Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status
      Done ✅

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions