Files
Yiming Su f5a710c585 docs(adk): fix skill gaps surfaced by the 06-20 benchmark sweep (#52)
* docs(adk): fix skill gaps surfaced by the 06-20 benchmark sweep

Each change was verified against agent-lack source (runtime/CLI/bundler)
before editing. Skills-only; no runtime/CLI changes.

- ADK-702: custom events nest authored data at event.payload.payload,
  not event.payload (conversations.md, patterns-mistakes.md)
- ADK-703: route natural language to execute()/adk.zai.extract instead
  of hand-rolled keyword/regex parsers (conversations.md,
  patterns-mistakes.md)
- ADK-704: single-quote `adk chat --single` messages; $ expands in
  double quotes and silently mangles input (cli.md, adk-test.md)
- ADK-705: test pushed chat:custom events with an eval event turn +
  adk evals, not adk chat --single or curl (adk-test.md,
  debug-workflow.md, conversations.md)
- ADK-708/707: ship bundled data via static JSON import; assets.get()
  returns a URL only, never file bytes (patterns-mistakes.md, assets.md)
- eval event turns take { payload } only (no type field); pushed events
  arrive as chat:custom (adk-evals SKILL.md, eval-format.md,
  test-patterns.md)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore: format .claude-plugin manifests with oxfmt

Pre-existing format:check failures on dev (multi-line keywords arrays),
unrelated to the skill doc changes — fixes the Code Quality check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(adk): address review — guard message access + link zai reference

- patterns-mistakes.md: use message?.payload.text in the WRONG routing
  example so it doesn't model an unguarded-access crash on event turns
- conversations.md: cross-link zai-agent-reference.md where adk.zai.extract
  is mentioned, so the API and its import are discoverable

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 16:16:15 -04:00

3.0 KiB

name, description, argument-hint
name description argument-hint
adk-test Invoke an ADK primitive end-to-end with realistic input to confirm it works [primitive name] [input]

Load the adk skill, then run the named primitive immediately.

This is exploratory, one-shot testing — does it work right now?. It is distinct from /adk-eval, which writes persistent assertion-based eval files. If the user wants assertions or coverage, route them there.

If $ARGUMENTS is empty, list the user's primitives and ask which to test.

Workflow

  1. Locate and identify type. Glob src/**/<name>.ts. The directory tells you the type (action / tool / workflow / conversation / table / trigger / knowledge base).
  2. Build an invocation appropriate for the type. If the user provided input after the primitive name, use it as-is; otherwise generate a realistic probe from the primitive's schema:
    • Tool / conversation handler / agent step: adk chat --single '<probe message that exercises this primitive>' --format json. The probe should plausibly cause the LLM to call the tool / route to the handler. Single-quote the message — in double quotes the shell expands $, so a probe like "I spent $5" reaches the bot mangled.
    • Action: invoke through adk run .adk/scratch/test-<name>.ts after writing a small disposable runner under .adk/scratch/, or via a chat probe that triggers a tool which calls the action. Prefer the runner when the action has a deterministic input shape.
    • Workflow: trigger via the documented entry point (chat probe, action call, or trigger event).
    • Trigger: a Trigger fires on an external source event that usually can't be produced locally — invoke its handler directly via adk run with a synthetic event. (A Conversation's pushed chat:custom event is different: test it with an eval event turn and adk evals — see /adk-eval. adk chat --single only sends user text and can't push one.)
    • Table: insert a sample row, run a representative query, then delete the row before reporting. Tag the test row with a recognizable marker (e.g., a __test_<timestamp> value in a string column) so the cleanup query is unambiguous. If the project is linked to a shared or production workspace, ask the user before inserting at all — offer to scope the test to a local dev table instead.
    • Knowledge base: run a search query against it.
  3. Run it and read traces. Capture the response. Run adk traces --format json filtered to the most recent invocation if the response alone is not enough to judge correctness.
  4. Report. Show the input used, the output, latency, and any errors or surprising behavior. Be explicit if the trace shows the primitive was not exercised (e.g., the LLM ignored the tool).
  5. Suggest follow-ups. If the test surfaced something worth pinning down, offer /adk-eval <name> to capture it as a regression eval. If it failed, offer /adk-debug with the relevant context.

Clean up any disposable runner scripts under .adk/scratch/test-*.ts after the test unless the user asks to keep them.