From 798776a48f90bbe2e4515d577b8e96b90786572b Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Wed, 1 Oct 2025 12:45:30 -0700 Subject: [PATCH 1/7] feat: Add workflow to run Go program and create PR Introduces a GitHub Actions workflow that checks out two repositories, sets up Go, installs dependencies, runs a Go program, and creates a pull request with generated documentation updates. --- .github/workflows/feature-matrix-updater.yaml | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/feature-matrix-updater.yaml diff --git a/.github/workflows/feature-matrix-updater.yaml b/.github/workflows/feature-matrix-updater.yaml new file mode 100644 index 000000000..b08790fe5 --- /dev/null +++ b/.github/workflows/feature-matrix-updater.yaml @@ -0,0 +1,47 @@ +name: Run Go Program and Create PR +on: + push: + branches: + - main +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout adk-docs repo + uses: actions/checkout@v4 + + - name: Checkout adk-docs-features repo + uses: actions/checkout@v4 + with: + repository: 'tpryan/adk-docs-features' + path: 'adk-docs-features' + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.22' + + - name: Install dependencies + run: go mod tidy + working-directory: ./adk-docs-features + + - name: Run program + run: go run main.go + working-directory: ./adk-docs-features + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} + + - name: Prepare PR content + run: | + mkdir -p docs/features + mv adk-docs-features/docs/features/index.md docs/features/index.md + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "feat: propose new documentation" + title: "Proposed Documentation Update" + body: "This is an auto-generated PR with new documentation." + branch: "new-documentation-proposal" + delete-branch: true From 20c8fd6980f7fca9008aaf938eb12196bca2bfc8 Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Wed, 1 Oct 2025 13:28:39 -0700 Subject: [PATCH 2/7] fix: Update workflow name and trigger Renamed the workflow to 'Feature Matrix Creator' and changed the trigger from push on main to manual workflow_dispatch. --- .github/workflows/feature-matrix-updater.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/feature-matrix-updater.yaml b/.github/workflows/feature-matrix-updater.yaml index b08790fe5..0d0ec6249 100644 --- a/.github/workflows/feature-matrix-updater.yaml +++ b/.github/workflows/feature-matrix-updater.yaml @@ -1,8 +1,6 @@ -name: Run Go Program and Create PR +name: Feature Matrix Creator on: - push: - branches: - - main + workflow_dispatch: jobs: build: runs-on: ubuntu-latest From 74d58f33716efcf9e9f0b33ebd1b36b036c19c10 Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Tue, 21 Oct 2025 14:24:47 -0700 Subject: [PATCH 3/7] feat: Add feature-matrix tool for ADK feature extraction Introduces a new tool under tools/feature-matrix to generate a feature support matrix for ADK runtimes by analyzing documentation. Includes Go implementation (main.go), prompt and starter markdown files, and Go module dependencies. --- tools/feature-matrix/go.mod | 56 ++++++++++++++++ tools/feature-matrix/go.sum | 117 +++++++++++++++++++++++++++++++++ tools/feature-matrix/main.go | 102 ++++++++++++++++++++++++++++ tools/feature-matrix/prompt.md | 29 ++++++++ tools/feature-matrix/start.md | 84 +++++++++++++++++++++++ 5 files changed, 388 insertions(+) create mode 100644 tools/feature-matrix/go.mod create mode 100644 tools/feature-matrix/go.sum create mode 100644 tools/feature-matrix/main.go create mode 100644 tools/feature-matrix/prompt.md create mode 100644 tools/feature-matrix/start.md diff --git a/tools/feature-matrix/go.mod b/tools/feature-matrix/go.mod new file mode 100644 index 000000000..92b901835 --- /dev/null +++ b/tools/feature-matrix/go.mod @@ -0,0 +1,56 @@ +module feature-matrix + +go 1.25.3 + +require ( + github.com/charmbracelet/log v0.4.2 + github.com/google/generative-ai-go v0.20.1 + google.golang.org/api v0.252.0 +) + +require ( + cloud.google.com/go v0.115.0 // indirect + cloud.google.com/go/ai v0.8.0 // indirect + cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect + cloud.google.com/go/longrunning v0.5.7 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect + github.com/charmbracelet/lipgloss v1.1.0 // indirect + github.com/charmbracelet/x/ansi v0.8.0 // indirect + github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect + github.com/charmbracelet/x/term v0.2.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/muesli/termenv v0.16.0 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect + golang.org/x/crypto v0.42.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/oauth2 v0.31.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + golang.org/x/time v0.13.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect + google.golang.org/grpc v1.75.1 // indirect + google.golang.org/protobuf v1.36.10 // indirect +) diff --git a/tools/feature-matrix/go.sum b/tools/feature-matrix/go.sum new file mode 100644 index 000000000..df5e2e618 --- /dev/null +++ b/tools/feature-matrix/go.sum @@ -0,0 +1,117 @@ +cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= +cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= +cloud.google.com/go/ai v0.8.0 h1:rXUEz8Wp2OlrM8r1bfmpF2+VKqc1VJpafE3HgzRnD/w= +cloud.google.com/go/ai v0.8.0/go.mod h1:t3Dfk4cM61sytiggo2UyGsDVW3RF1qGZaUKDrZFyqkE= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= +cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsyig= +github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= +github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/generative-ai-go v0.20.1 h1:6dEIujpgN2V0PgLhr6c/M1ynRdc7ARtiIDPFzj45uNQ= +github.com/google/generative-ai-go v0.20.1/go.mod h1:TjOnZJmZKzarWbjUJgy+r3Ee7HGBRVLhOIgupnwR4Bg= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= +golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI= +golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= +google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= +google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/tools/feature-matrix/main.go b/tools/feature-matrix/main.go new file mode 100644 index 000000000..a0c170a6e --- /dev/null +++ b/tools/feature-matrix/main.go @@ -0,0 +1,102 @@ +package main + +import ( + "context" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/google/generative-ai-go/genai" + "google.golang.org/api/option" + + "github.com/charmbracelet/log" +) + +func extractLocal(root string) (string, error) { + var content strings.Builder + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() && strings.HasSuffix(info.Name(), ".md") { + fileContent, err := os.ReadFile(path) + if err != nil { + // log error but continue + return nil + } + content.Write(fileContent) + content.WriteString("\n\n") + } + return nil + }) + if err != nil { + return "", err + } + return content.String(), nil +} + +func main() { + ctx := context.Background() + // Access your API key as an environment variable (see "Set up your API key" above) + client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY"))) + if err != nil { + log.Fatal(err) + } + defer client.Close() + + // For text-only input, use the gemini-pro model + model := client.GenerativeModel("gemini-2.5-pro") + model.SetTemperature(0.9) + model.SetTopP(0.95) + model.SetTopK(40) + + log.Infof("reading prompt") + promptBytes, err := os.ReadFile("prompt.md") + if err != nil { + log.Fatalf("cannot read prompt from filesystem: %s", err) + } + + log.Infof("reading starting matrix starting place") + outputBytes, err := os.ReadFile("start.md") + if err != nil { + log.Fatalf("cannot read example from filesystem: %s", err) + } + + command := string(promptBytes) + string(outputBytes) + + log.Infof("Retrieving adk-docs") + documentationContent, err := extractLocal("../../docs") + if err != nil { + log.Fatalf("cannot retrieve and process content from adk-docs repo: %s", err) + } + + prompt := command + "\n\n" + documentationContent + + log.Infof("sending the request to the model") + resp, err := model.GenerateContent(ctx, genai.Text(prompt)) + if err != nil { + log.Fatalf("did not get a valid response back from teh model", err) + } + + for i, cand := range resp.Candidates { + if cand.Content != nil { + for _, part := range cand.Content.Parts { + if txt, ok := part.(genai.Text); ok { + if i == 0 { // Only process the first candidate for the PR + outputDir := "../../docs/features" + if err := os.MkdirAll(outputDir, 0755); err != nil { + log.Fatalf("failed to create output directory: %v", err) + } + filename := fmt.Sprintf("%s/index.md", outputDir) + err := os.WriteFile(filename, []byte(txt), 0644) + if err != nil { + log.Fatalf("failed to write output file: %v", err) + } + log.Infof("wrote output to %s", filename) + } + } + } + } + } +} diff --git a/tools/feature-matrix/prompt.md b/tools/feature-matrix/prompt.md new file mode 100644 index 000000000..d40870d29 --- /dev/null +++ b/tools/feature-matrix/prompt.md @@ -0,0 +1,29 @@ +Analyze the documentation for the adk project and please come up with a list of features that adk delivers. Focus on page titles and section headers to come up with that list. + +Once that is done, I'd like to generate a matrix of features enabled by runtime. + +Currently there are two runtimes: python (adk-python) which is the primary, and java (adk-java). But soon go (adk-go) and typescript (adk-js) will be added. + +A good metric for figuring out if a feature is supported per runtime is if the sample code associated with a given feature in adk-docs includes samples in a given language. + +For each matrix item showing support, please link to the code sample where you use to say that this feature is supported in the language. Use https://google.github.io/adk-docs/ as the base link. Also mkae sure to include path and page so the links will work. + +Output the content in markdown. + +Please double check the matrix's markdown content for validity before outputting. + +Please say "Planned" instead of "No" when a feature is not supported, unless there is text in the documentation that makes it clear that a particular feature will not be supported in a given language, in which case, then write "no". If you mark something as know please include a link to the text that makes you make that determination. Nearest header is close enough. + +Write the output as if it was going to be a page available in adk-docs. Match adk-docs style and tone. + +For now omit Typescript and Go from matrix. + +Pattern for building urls from markdown paths should be to replaced the .md extension with a "/". + +Please always preface the content with this markdown content after ADK Features header and becfore first paragraph: + +!!! note: +This content is autogenerated by Gemini, based on our documentation. It is a best effort to generate a feature matrix, but may not be 100% accurate as features can outpace documentation, or Gemini might inaccurately generate content. + + +Use the following markdown as an example of a good previous run of this content and should really only be updated if content in adk-docs has changed: \ No newline at end of file diff --git a/tools/feature-matrix/start.md b/tools/feature-matrix/start.md new file mode 100644 index 000000000..41a50f5ef --- /dev/null +++ b/tools/feature-matrix/start.md @@ -0,0 +1,84 @@ +## ADK Features + +Based on the documentation, ADK delivers a comprehensive set of features for building, evaluating, and deploying sophisticated AI agents. Here is a summary of the key capabilities: + +### Core Agent Architecture +* **LLM Agents**: The primary "thinking" unit of ADK, powered by a Large Language Model for reasoning, decision-making, and tool use. +* **Multi-Agent Systems**: Build complex applications by composing multiple, specialized agents in a hierarchy, enabling delegation and collaboration. +* **Workflow Agents**: Orchestrate the execution flow of other agents using deterministic patterns: + * **Sequential Agents**: Run sub-agents one after another. + * **Parallel Agents**: Run sub-agents concurrently. + * **Loop Agents**: Run sub-agents in an iterative loop. +* **Custom Agents**: Implement unique, non-LLM based orchestration logic by extending the `BaseAgent` class for ultimate flexibility. +* **Agent Config (YAML)**: Build agents declaratively using YAML configuration files, minimizing the need for boilerplate code. + +### Tooling and Integrations +* **Function Tools**: Extend agent capabilities by creating custom tools from standard functions. +* **Long-Running Function Tools**: Handle asynchronous tasks that take significant time to complete without blocking the agent. +* **Agents-as-a-Tool**: Use an entire agent as a callable tool within another agent. +* **Built-in Tools**: Leverage pre-built capabilities like Google Search, Vertex AI Search, and secure code execution. +* **Google Cloud Tools**: Seamlessly connect to Google Cloud services like API Hub, Application Integration, and databases via MCP Toolbox. +* **Third-Party Tools**: Integrate tools from popular frameworks like LangChain and CrewAI. +* **MCP (Model Context Protocol) Tools**: Use and expose tools via the open MCP standard. +* **Tool Confirmation**: Implement human-in-the-loop workflows by requiring user confirmation before a tool executes. +* **Tool Authentication**: Securely manage credentials for tools that access protected APIs. + +### Runtime and Context Management +* **Session & State**: Manage conversational context with a robust session service that tracks history (`Events`) and maintains a working memory (`State`) for each interaction. +* **Memory**: Enable agents to recall information across multiple sessions using a long-term, searchable knowledge store. +* **Artifacts**: Allow agents to save, load, and manage versioned files and binary data (e.g., images, PDFs) associated with a session or user. +* **Callbacks & Plugins**: Hook into the agent's execution lifecycle to implement logging, guardrails, caching, and other cross-cutting concerns. + +### Advanced Capabilities +* **Streaming (Live/Bidi)**: Build real-time, interactive experiences with native support for bidirectional streaming of text, audio, and video. +* **Streaming Tools**: Create tools that can stream intermediate results back to the agent for real-time monitoring and reaction. +* **Multi-Model Support**: Flexibly use different LLMs (Gemini, GPT, Claude, etc.) within your agents, powered by integrations like LiteLLM. + +### Development Lifecycle +* **Evaluation**: Systematically assess agent performance by evaluating both the final response quality and the step-by-step execution trajectory. +* **Observability & Logging**: Gain deep insights into agent behavior with detailed logging and integrations with observability platforms like AgentOps, Arize AX, Cloud Trace, and Weave. +* **Deployment**: Deploy your agents to a variety of environments, including serverless (Cloud Run), Kubernetes (GKE), and the fully managed Vertex AI Agent Engine. +* **Agent2Agent (A2A) Protocol**: Build distributed, multi-agent systems where agents running as separate services can communicate and collaborate using the open A2A standard. + +## Feature Support Matrix + +The following matrix shows which ADK features are currently supported in each language runtime. Support is determined by the availability of code samples in the official documentation. + +| Feature Category | Feature | Python (`adk-python`) | Java (`adk-java`) | +| :--- | :--- | :--- | :--- | +| **Core Agent Architecture** | **LLM Agents** | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | +| | **Multi-Agent Systems** | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | +| | **Workflow: Sequential Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | +| | **Workflow: Loop Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | +| | **Workflow: Parallel Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | +| | **Custom Agents** | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | +| | **Agent Config (YAML)** | [Supported](https://google.github.io/adk-docs/agents/config/#build-an-agent) | [No](https://google.github.io/adk-docs/agents/config/#known-limitations) | +| **Tooling & Integrations** | **Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | +| | **Long-Running Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | +| | **Agents-as-a-Tool** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | +| | **Built-in: Google Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | +| | **Built-in: Code Execution** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | +| | **Built-in: GKE Code Executor** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#gke-code-executor) | Planned | +| | **Built-in: Vertex AI RAG** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-rag-engine) | Planned | +| | **Built-in: Vertex AI Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-search) | Planned | +| | **Built-in: BigQuery, Spanner, Bigtable** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#bigquery) | Planned | +| | **Google Cloud Tools (API Hub, etc.)** | [Supported](https://google.github.io/adk-docs/tools/google-cloud-tools/#apigee-api-hub-tools) | Planned | +| | **Third-Party Tools (LangChain, CrewAI)** | [Supported](https://google.github.io/adk-docs/tools/third-party-tools/#1-using-langchain-tools) | Planned | +| | **MCP Tools** | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | +| | **Tool Confirmation** | [Supported](https://google.github.io/adk-docs/tools/confirmation/#boolean-confirmation) | Planned | +| | **Tool Authentication** | [Supported](https://google.github.io/adk-docs/tools/authentication/#1-configuring-tools-with-authentication) | Planned | +| **Runtime & Context** | **Session & State Management** | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | +| | **Memory** | [Supported](https://google.github.io/adk-docs/sessions/memory/#example-adding-and-searching-memory) | Planned | +| | **Artifacts** | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | +| | **Callbacks** | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | +| | **Plugins** | [Supported](https://google.github.io/adk-docs/plugins/#define-and-register-plugins) | Planned | +| **Advanced Capabilities** | **Streaming (Live/Bidi)** | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/#2-project-structure) | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming-java/#creating-an-agent) | +| | **Streaming Tools** | [Supported](https://google.github.io/adk-docs/streaming/streaming-tools/) | Planned | +| | **Multi-Model: LiteLLM** | [Supported](https://google.github.io/adk-docs/agents/models/#using-cloud-proprietary-models-via-litellm) | Planned | +| | **Multi-Model: Direct Anthropic** | Planned | [Supported](https://google.github.io/adk-docs/agents/models/#using-anthropic-models) | +| **Development Lifecycle** | **Evaluation** | [Supported](https://google.github.io/adk-docs/evaluate/#how-evaluation-works-with-the-adk) | Planned | +| | **Observability (AgentOps, Arize, etc.)** | [Supported](https://google.github.io/adk-docs/observability/agentops/) | Planned | +| | **Deployment: Vertex AI Agent Engine** | [Supported](https://google.github.io/adk-docs/deploy/agent-engine/#standard-deployment) | [No](https://google.github.io/adk-docs/deploy/agent-engine/) | +| | **Deployment: Cloud Run** | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | +| | **Deployment: GKE** | [Supported](https://google.github.io/adk-docs/deploy/gke/#option-1-manual-deployment-using-gcloud-and-kubectl) | Planned | +| | **Agent2Agent (A2A) Protocol** | [Supported](https://google.github.io/adk-docs/a2a/quickstart-consuming/#getting-the-sample-code) | Planned | \ No newline at end of file From 911d0bdd7bfb9fd2b4765a8b93a67a78031fc11e Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Tue, 21 Oct 2025 14:32:39 -0700 Subject: [PATCH 4/7] feat: Update feature matrix workflow to use local tool Removes checkout of the adk-docs-features repo and updates steps to use the local tools/feature-matrix directory for dependency installation and program execution. Simplifies the workflow by eliminating unnecessary repository cloning and file movement. --- .github/workflows/feature-matrix-updater.yaml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.github/workflows/feature-matrix-updater.yaml b/.github/workflows/feature-matrix-updater.yaml index 0d0ec6249..adb8662d7 100644 --- a/.github/workflows/feature-matrix-updater.yaml +++ b/.github/workflows/feature-matrix-updater.yaml @@ -8,12 +8,6 @@ jobs: - name: Checkout adk-docs repo uses: actions/checkout@v4 - - name: Checkout adk-docs-features repo - uses: actions/checkout@v4 - with: - repository: 'tpryan/adk-docs-features' - path: 'adk-docs-features' - - name: Set up Go uses: actions/setup-go@v5 with: @@ -21,19 +15,14 @@ jobs: - name: Install dependencies run: go mod tidy - working-directory: ./adk-docs-features + working-directory: ./tools/feature-matrix - name: Run program run: go run main.go - working-directory: ./adk-docs-features + working-directory: ./tools/feature-matrix env: GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} - - name: Prepare PR content - run: | - mkdir -p docs/features - mv adk-docs-features/docs/features/index.md docs/features/index.md - - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: From a7ea5ed44a3c01a32eb63d891ebcd3ea7f9b6af3 Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Thu, 23 Oct 2025 15:22:21 -0700 Subject: [PATCH 5/7] fix: Update feature matrix prompt and matrix content Revised the prompt to use 'Unsupported' instead of 'Planned' for features not supported, clarified disclaimer placement, and updated instructions for matrix ordering. Updated start.md to move the disclaimer and feature matrix to the top, reflect new terminology, and provide a more accurate and current feature support matrix. --- tools/feature-matrix/prompt.md | 12 +++-- tools/feature-matrix/start.md | 90 ++++++++++++++++++---------------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/tools/feature-matrix/prompt.md b/tools/feature-matrix/prompt.md index d40870d29..324f42dbe 100644 --- a/tools/feature-matrix/prompt.md +++ b/tools/feature-matrix/prompt.md @@ -12,18 +12,22 @@ Output the content in markdown. Please double check the matrix's markdown content for validity before outputting. -Please say "Planned" instead of "No" when a feature is not supported, unless there is text in the documentation that makes it clear that a particular feature will not be supported in a given language, in which case, then write "no". If you mark something as know please include a link to the text that makes you make that determination. Nearest header is close enough. +Please say "Unsupported" instead of "No" when a feature is not supported, unless there is text in the documentation that makes it clear that a particular feature will not be supported in a given language, in which case, then write "no". If you mark something as know please include a link to the text that makes you make that determination. Nearest header is close enough. Write the output as if it was going to be a page available in adk-docs. Match adk-docs style and tone. +Please always preface the content with this disclaimer markdown content after ADK Features header and becfore first paragraph: + +!!! note: +This content is autogenerated by Gemini, based on our documentation. It is a best effort to generate a feature matrix, but may not be 100% accurate as features can outpace documentation, or Gemini might inaccurately generate content. + +Always place the feature matrix at the top of the content after the disclaimer and before the prose decription of the features. + For now omit Typescript and Go from matrix. Pattern for building urls from markdown paths should be to replaced the .md extension with a "/". -Please always preface the content with this markdown content after ADK Features header and becfore first paragraph: -!!! note: -This content is autogenerated by Gemini, based on our documentation. It is a best effort to generate a feature matrix, but may not be 100% accurate as features can outpace documentation, or Gemini might inaccurately generate content. Use the following markdown as an example of a good previous run of this content and should really only be updated if content in adk-docs has changed: \ No newline at end of file diff --git a/tools/feature-matrix/start.md b/tools/feature-matrix/start.md index 41a50f5ef..621181b81 100644 --- a/tools/feature-matrix/start.md +++ b/tools/feature-matrix/start.md @@ -1,5 +1,53 @@ ## ADK Features +!!! note: +This content is autogenerated by Gemini, based on our documentation. It is a best effort to generate a feature matrix, but may not be 100% accurate as features can outpace documentation, or Gemini might inaccurately generate content. + +## Feature Support Matrix + +The following matrix shows which ADK features are currently supported in each language runtime. Support is determined by the availability of code samples in the official documentation. + +| Feature Category | Feature | Python (`adk-python`) | Java (`adk-java`) | +| :--- | :--- | :--- | :--- | +| **Core Agent Architecture** | **LLM Agents** | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | +| | **Multi-Agent Systems** | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | +| | **Workflow: Sequential Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | +| | **Workflow: Loop Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | +| | **Workflow: Parallel Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | +| | **Custom Agents** | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | +| | **Agent Config (YAML)** | [Supported](https://google.github.io/adk-docs/agents/config/#build-an-agent) | [No](https://google.github.io/adk-docs/agents/config/#known-limitations) | +| **Tooling & Integrations** | **Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | +| | **Long-Running Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | +| | **Agents-as-a-Tool** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | +| | **Built-in: Google Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | +| | **Built-in: Code Execution** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | +| | **Built-in: GKE Code Executor** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#gke-code-executor) | Not Supported | +| | **Built-in: Vertex AI RAG** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-rag-engine) | Not Supported | +| | **Built-in: Vertex AI Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-search) | Not Supported | +| | **Built-in: BigQuery, Spanner, Bigtable** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#bigquery) | Not Supported | +| | **Google Cloud Tools (API Hub, etc.)** | [Supported](https://google.github.io/adk-docs/tools/google-cloud-tools/#apigee-api-hub-tools) | Not Supported | +| | **Third-Party Tools (LangChain, CrewAI)** | [Supported](https://google.github.io/adk-docs/tools/third-party-tools/#1-using-langchain-tools) | Not Supported | +| | **MCP Tools** | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | +| | **Tool Confirmation** | [Supported](https://google.github.io/adk-docs/tools/confirmation/#boolean-confirmation) | Not Supported | +| | **Tool Authentication** | [Supported](https://google.github.io/adk-docs/tools/authentication/#1-configuring-tools-with-authentication) | Not Supported | +| **Runtime & Context** | **Session & State Management** | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | +| | **Memory** | [Supported](https://google.github.io/adk-docs/sessions/memory/#example-adding-and-searching-memory) | Not Supported | +| | **Artifacts** | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | +| | **Callbacks** | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | +| | **Plugins** | [Supported](https://google.github.io/adk-docs/plugins/#define-and-register-plugins) | Not Supported | +| **Advanced Capabilities** | **Streaming (Live/Bidi)** | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/#2-project-structure) | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming-java/#creating-an-agent) | +| | **Streaming Tools** | [Supported](https://google.github.io/adk-docs/streaming/streaming-tools/) | Not Supported | +| | **Multi-Model: LiteLLM** | [Supported](https://google.github.io/adk-docs/agents/models/#using-cloud-proprietary-models-via-litellm) | Not Supported | +| | **Multi-Model: Direct Anthropic** | Not Supported | [Supported](https://google.github.io/adk-docs/agents/models/#using-anthropic-models) | +| **Development Lifecycle** | **Evaluation** | [Supported](https://google.github.io/adk-docs/evaluate/#how-evaluation-works-with-the-adk) | Not Supported | +| | **Observability (AgentOps, Arize, etc.)** | [Supported](https://google.github.io/adk-docs/observability/agentops/) | Not Supported | +| | **Deployment: Vertex AI Agent Engine** | [Supported](https://google.github.io/adk-docs/deploy/agent-engine/#standard-deployment) | [No](https://google.github.io/adk-docs/deploy/agent-engine/) | +| | **Deployment: Cloud Run** | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | +| | **Deployment: GKE** | [Supported](https://google.github.io/adk-docs/deploy/gke/#option-1-manual-deployment-using-gcloud-and-kubectl) | Not Supported | +| | **Agent2Agent (A2A) Protocol** | [Supported](https://google.github.io/adk-docs/a2a/quickstart-consuming/#getting-the-sample-code) | Not Supported | + +## Details + Based on the documentation, ADK delivers a comprehensive set of features for building, evaluating, and deploying sophisticated AI agents. Here is a summary of the key capabilities: ### Core Agent Architecture @@ -40,45 +88,3 @@ Based on the documentation, ADK delivers a comprehensive set of features for bui * **Deployment**: Deploy your agents to a variety of environments, including serverless (Cloud Run), Kubernetes (GKE), and the fully managed Vertex AI Agent Engine. * **Agent2Agent (A2A) Protocol**: Build distributed, multi-agent systems where agents running as separate services can communicate and collaborate using the open A2A standard. -## Feature Support Matrix - -The following matrix shows which ADK features are currently supported in each language runtime. Support is determined by the availability of code samples in the official documentation. - -| Feature Category | Feature | Python (`adk-python`) | Java (`adk-java`) | -| :--- | :--- | :--- | :--- | -| **Core Agent Architecture** | **LLM Agents** | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | [Supported](https://google.github.io/adk-docs/agents/llm-agents/#defining-the-agents-identity-and-purpose) | -| | **Multi-Agent Systems** | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | [Supported](https://google.github.io/adk-docs/agents/multi-agents/#agent-hierarchy-parent-agent-sub-agents) | -| | **Workflow: Sequential Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/#full-example-code-development-pipeline) | -| | **Workflow: Loop Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/loop-agents/#full-example-iterative-document-improvement) | -| | **Workflow: Parallel Agents** | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | [Supported](https://google.github.io/adk-docs/agents/workflow-agents/parallel-agents/#full-example-parallel-web-research) | -| | **Custom Agents** | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | [Supported](https://google.github.io/adk-docs/agents/custom-agents/#part-1-simplified-custom-agent-initialization) | -| | **Agent Config (YAML)** | [Supported](https://google.github.io/adk-docs/agents/config/#build-an-agent) | [No](https://google.github.io/adk-docs/agents/config/#known-limitations) | -| **Tooling & Integrations** | **Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | -| | **Long-Running Function Tools** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#creating-the-tool) | -| | **Agents-as-a-Tool** | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | [Supported](https://google.github.io/adk-docs/tools/function-tools/#example) | -| | **Built-in: Google Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#google-search) | -| | **Built-in: Code Execution** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#code-execution) | -| | **Built-in: GKE Code Executor** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#gke-code-executor) | Planned | -| | **Built-in: Vertex AI RAG** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-rag-engine) | Planned | -| | **Built-in: Vertex AI Search** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#vertex-ai-search) | Planned | -| | **Built-in: BigQuery, Spanner, Bigtable** | [Supported](https://google.github.io/adk-docs/tools/built-in-tools/#bigquery) | Planned | -| | **Google Cloud Tools (API Hub, etc.)** | [Supported](https://google.github.io/adk-docs/tools/google-cloud-tools/#apigee-api-hub-tools) | Planned | -| | **Third-Party Tools (LangChain, CrewAI)** | [Supported](https://google.github.io/adk-docs/tools/third-party-tools/#1-using-langchain-tools) | Planned | -| | **MCP Tools** | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | [Supported](https://google.github.io/adk-docs/tools/mcp-tools/#example-1-file-system-mcp-server) | -| | **Tool Confirmation** | [Supported](https://google.github.io/adk-docs/tools/confirmation/#boolean-confirmation) | Planned | -| | **Tool Authentication** | [Supported](https://google.github.io/adk-docs/tools/authentication/#1-configuring-tools-with-authentication) | Planned | -| **Runtime & Context** | **Session & State Management** | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | [Supported](https://google.github.io/adk-docs/sessions/session/#example-examining-session-properties) | -| | **Memory** | [Supported](https://google.github.io/adk-docs/sessions/memory/#example-adding-and-searching-memory) | Planned | -| | **Artifacts** | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | [Supported](https://google.github.io/adk-docs/artifacts/#what-are-artifacts) | -| | **Callbacks** | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | [Supported](https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback) | -| | **Plugins** | [Supported](https://google.github.io/adk-docs/plugins/#define-and-register-plugins) | Planned | -| **Advanced Capabilities** | **Streaming (Live/Bidi)** | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/#2-project-structure) | [Supported](https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming-java/#creating-an-agent) | -| | **Streaming Tools** | [Supported](https://google.github.io/adk-docs/streaming/streaming-tools/) | Planned | -| | **Multi-Model: LiteLLM** | [Supported](https://google.github.io/adk-docs/agents/models/#using-cloud-proprietary-models-via-litellm) | Planned | -| | **Multi-Model: Direct Anthropic** | Planned | [Supported](https://google.github.io/adk-docs/agents/models/#using-anthropic-models) | -| **Development Lifecycle** | **Evaluation** | [Supported](https://google.github.io/adk-docs/evaluate/#how-evaluation-works-with-the-adk) | Planned | -| | **Observability (AgentOps, Arize, etc.)** | [Supported](https://google.github.io/adk-docs/observability/agentops/) | Planned | -| | **Deployment: Vertex AI Agent Engine** | [Supported](https://google.github.io/adk-docs/deploy/agent-engine/#standard-deployment) | [No](https://google.github.io/adk-docs/deploy/agent-engine/) | -| | **Deployment: Cloud Run** | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | [Supported](https://google.github.io/adk-docs/deploy/cloud-run/#deployment-commands) | -| | **Deployment: GKE** | [Supported](https://google.github.io/adk-docs/deploy/gke/#option-1-manual-deployment-using-gcloud-and-kubectl) | Planned | -| | **Agent2Agent (A2A) Protocol** | [Supported](https://google.github.io/adk-docs/a2a/quickstart-consuming/#getting-the-sample-code) | Planned | \ No newline at end of file From 19d12228c617fb85bb2aaf38fd57830c00773457 Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Thu, 23 Oct 2025 15:43:57 -0700 Subject: [PATCH 6/7] fix: Update workflow for feature matrix PRs Adds write permissions for contents and pull-requests to the workflow. Updates pull request commit message, title, body, and branch name to reflect feature matrix updates instead of documentation. --- .github/workflows/feature-matrix-updater.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/feature-matrix-updater.yaml b/.github/workflows/feature-matrix-updater.yaml index adb8662d7..e74c4ee39 100644 --- a/.github/workflows/feature-matrix-updater.yaml +++ b/.github/workflows/feature-matrix-updater.yaml @@ -4,6 +4,9 @@ on: jobs: build: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write steps: - name: Checkout adk-docs repo uses: actions/checkout@v4 @@ -27,8 +30,8 @@ jobs: uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.GITHUB_TOKEN }} - commit-message: "feat: propose new documentation" - title: "Proposed Documentation Update" - body: "This is an auto-generated PR with new documentation." - branch: "new-documentation-proposal" + commit-message: "feat: propose update to feature matrix" + title: "Proposed Update to Feature Matrix" + body: "This is an auto-generated PR with new content for the feature matrix." + branch: "new-feature-matrix-proposal" delete-branch: true From e933b94bea1ee1d490e9fcd3a7fd8caa877fb988 Mon Sep 17 00:00:00 2001 From: Terrence Ryan Date: Fri, 24 Oct 2025 14:23:06 -0700 Subject: [PATCH 7/7] fix: Update workflow name and PR token in feature matrix Renamed the workflow to 'Publish Feature Matrix' and switched the pull request token from GITHUB_TOKEN to ADK_BOT_GITHUB_TOKEN for improved automation and permissions. --- .github/workflows/feature-matrix-updater.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/feature-matrix-updater.yaml b/.github/workflows/feature-matrix-updater.yaml index e74c4ee39..f1b3649c4 100644 --- a/.github/workflows/feature-matrix-updater.yaml +++ b/.github/workflows/feature-matrix-updater.yaml @@ -1,4 +1,4 @@ -name: Feature Matrix Creator +name: Publish Feature Matrix on: workflow_dispatch: jobs: @@ -29,7 +29,7 @@ jobs: - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.ADK_BOT_GITHUB_TOKEN }} commit-message: "feat: propose update to feature matrix" title: "Proposed Update to Feature Matrix" body: "This is an auto-generated PR with new content for the feature matrix."