Skip to content

[Automated] Draft docs (kagent): feat: a2a task push notifications - #585

Merged
Rachael-Graham merged 4 commits into
mainfrom
pr-tracker-draft-kagent-3036
Oct 12, 2026
Merged

Rachael-Graham merged 4 commits into
mainfrom
pr-tracker-draft-kagent-3036

Conversation

@github-actions

Copy link
Copy Markdown

kagent-dev/kagent#3036 — feat: a2a task push notifications

Docs versions: 1.x (first shipped in v1.0.0-alpha10)

What changes for users: A2A clients can register callback URLs for a task, either before dispatch or while the task is still active. kagent queues callbacks for input-required, auth-required, and terminal states, signs each delivery with a short-lived JWT, and requires HTTPS public destinations unless the operator enables the controller.push.allowHTTP or controller.push.allowPrivateNetworks exceptions.

What the docs now say: The A2A example now advertises pushNotifications: true, lists the task push methods, and explains how to register, list, and delete callbacks with the CLI. The UI guide now names the Task notifications control and links to the callback delivery and JWT verification details.

Not verified: No cluster; the steps are unrun.

How kagent-3036 was drafted, and what was not verified

Plan, and what changed it

  • Planned: Document A2A task push callback registration where the A2A example already covers GetTask, taskId, and agent card capabilities.
  • Learned: The generated Helm and CLI references are covered by generated_reference_covers, and reference/helm.md and reference/env-vars.md are generated, so the prose belongs on the A2A and UI pages.
  • Did: Updated a2a-agents.md and launch-ui.md, and wrote a feature release note.

Why a documentation change is necessary

The pull request changes the agent card from push notifications unsupported to supported, adds callback management through A2A, the CLI, and the UI, and adds Helm values for callback delivery policy and JWT signing. The A2A example showed pushNotifications: false and did not explain how a client registers callbacks or how receivers verify deliveries. The UI guide described the conversation controls without the new Task notifications control.

What changed on disk

  • docs-site/content/kagent/1.x/examples/a2a-agents.md — Updates the agent card output, adds task push methods, and documents registering, listing, deleting, and securing callbacks.
  • docs-site/content/kagent/1.x/observability/launch-ui.md — Adds the Task notifications control to the conversation UI description and links to the callback workflow.

How to verify this change

  1. Install or upgrade kagent with a stable issuer and a reachable UI or controller URL for JWKS, such as controller.push.signing.issuer=https://kagent.example and ui.externalUrl=https://kagent.example.
  2. Fetch https://kagent.example/.well-known/jwks.json; the response contains one Ed25519 signing key.
  3. Create a Session, then run kagent agent invoke --session $SESSION_ID --task "Run the long task." --push-url https://receiver.example/callback -o json.
  4. Complete the task; the receiver gets a JSON body with statusUpdate.taskId and an Authorization: Bearer <JWT> header whose aud is the callback URL and whose taskId claim matches the update.
  5. Run kagent agent session push list $SESSION_ID $TASK_ID; the callback ID and URL are listed for the active task.

What was not verified

  • The configuration was not applied to a cluster, so every command in this diff is unrun.
  • output not captured from a run: docs-site/content/kagent/1.x/examples/a2a-agents.md, "pushNotifications": true
How the pages were chosen (triage report)

Draft a documentation change

kagent-dev/kagent#3036 — feat: a2a task push notifications

  • Product: kagent (upstream) → kagent-dev/website
  • Docs version: 1.x
  • Summary (read from the body): - Accept embedded callbacks on A2A sends and add task callback management through A2A, the CLI, and the UI - Store registrations in PostgreSQL, bind them when a task accepts the input, and queue notifications atomically with publication of waiting or terminal states - Run a leader-elected worker that delivers queued callbacks with leases and bounded retries. Clients use GetTask for the current res
  • Not tested: no cluster was available, so every command in this diff is unrun
  • No rule covers 15 touched file(s). The candidate pages below come from the files that DID match a rule, so they may scope this narrower than the change is. Read these before deciding the change is only about the pages listed:
    • docs/architecture/README.md
    • docs/architecture/a2a-gateway.md
    • docs/architecture/a2a-push-notifications.md
    • docs/architecture/a2a-transports.md
    • docs/env.md
    • go/api/client/a2a.go
    • ...and 9 more

Draft branch: pr-tracker-draft-kagent-3036


Important

The test suite has not run on this pull request. It was opened by github-actions[bot], and GitHub does not start workflows for pull requests opened with the repository's own token. This repository's checks are held as action_required until somebody presses Approve and run on the Checks tab. Checks that come from GitHub Apps rather than Actions, such as DCO, run on their own.

Please approve the checks before reviewing the content: an absence of failures here means the tests have not run, not that they passed.

actions-user and others added 2 commits October 12, 2026 17:53
Signed-off-by: GitHub Action <action@github.com>
The draft presented JWT signing as unconditional, but the chart leaves it
off: `controller.push.signing.secretName` defaults to empty, the worker
attaches an `Authorization` header only when a signer exists, and the
controller serves 404 at `/.well-known/jwks.json` until one is configured.
A receiver following the draft would have waited for a token that kagent
never sends. Say that signing is opt-in, name the Secret and the PKCS#8
Ed25519 key it holds, and leave key rotation with the operator.

The draft also told readers to publish the controller or the UI for JWKS.
Only the controller serves that path; `ui.externalUrl` supplies the issuer
string alone, so an issuer that falls back to the UI names a host with no
key behind it. Set the issuer to a URL that reaches the controller.

The remaining changes are smaller. The security prose moved under its own
heading rather than trailing the steps. The methods table intro no longer
claims the example calls the three `TaskPushNotificationConfig` methods,
and names `GetTaskPushNotificationConfig` alongside its siblings. The
section says why it uses the CLI on a page that is otherwise grpcurl. A
`PUSH_CALLBACK_ID` export that no later step read is gone. In the UI page,
the Task notifications paragraph no longer splits the checkpoint bullets
from the checkpoint note, and it says what a new callback does and does
not receive without attaching the qualifier to the wrong noun.

Anchors and the cross-page link verified against a local 1.x build. The
steps remain unrun; no cluster.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Rachael Graham <rachael.graham@solo.io>
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Author

Docs preview

Link Points at
Branch preview The newest push to this branch. Updates in place.
Commit preview 29dadb8 only. Frozen.

Both are uploaded Worker versions and serve no production traffic.

Rachael-Graham and others added 2 commits October 12, 2026 15:26
"...including `ListTasks` and `GetTaskPushNotificationConfig`, which reads
one callback by ID" put a relative clause after a coordinated pair. The
singular verb was correct, because only `GetTaskPushNotificationConfig`
reads a callback, but the clause still looked like it reached both names,
so the sentence read as a subject-verb disagreement. Two sentences give
the clause one antecedent and remove the question.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Rachael Graham <rachael.graham@solo.io>
Signed-off-by: Rachael Graham <rachael.graham@solo.io>
@Rachael-Graham
Rachael-Graham merged commit 10c76f0 into main Oct 12, 2026
4 checks passed
@Rachael-Graham
Rachael-Graham deleted the pr-tracker-draft-kagent-3036 branch October 12, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants