gap-analysis
GitHub审计 TanStack AI 提供商适配器的功能差异和模型列表更新。通过解析参数确定范围,加载源码文件并查阅上游文档,对比适配器与官方支持情况,最终生成不带代码修改的 Markdown 报告。
触发场景
安装
npx skills add TanStack/ai --skill gap-analysis -g -y
SKILL.md
Frontmatter
{
"name": "gap-analysis",
"description": "Audit TanStack AI provider adapters for feature parity gaps and outdated model lists. Triggered as \/gap-analysis <provider|feature <name>|models|--all>. Produces a dated markdown report under .agent\/gap-analysis\/. Maintainer tool — does not edit feature-support.ts or model-meta.ts directly."
}
Gap Analysis — TanStack AI adapter audit
You are auditing TanStack AI's provider adapters against each provider's
upstream documentation. This is a maintainer tool. Your only output is a
markdown report under .agent/gap-analysis/. Do not edit source files.
Invocation
| Args | Scope |
|---|---|
<provider> (e.g. openai) |
One provider — all audit dimensions. |
feature <feature> (e.g. tts) |
One feature row of the matrix across all providers. |
models |
New-model diff for every provider. |
activities |
Activity-coverage diff: which of the 7 core activity |
| kinds each provider ships an adapter for, vs. what | |
| upstream supports. (Dimension 6 only, all providers.) | |
--all |
Full sweep (fan out subagents, one per provider). |
| (none) | Ask the user which scope via AskUserQuestion. |
Workflow
- Parse scope. If missing, AskUserQuestion with the four options above.
- Load the truth files, then read the per-scope inputs you need:
- Matrix:
testing/e2e/src/lib/feature-support.ts - Types:
testing/e2e/src/lib/types.ts(Provider + Feature unions, ALL_PROVIDERS, ALL_FEATURES) - Adapter index:
packages/ai-<provider>/src/index.ts - Model meta:
packages/ai-<provider>/src/model-meta.ts - Core types:
packages/ai/src/types.ts(Modality, ContentPart, ToolCall)
- Matrix:
- Research upstream. Use WebFetch against the curated URLs in
references/provider-doc-urls.md. When a
doc page has moved, fall back to WebSearch. For SDK API surface details
use the
context7MCP server (mcp__plugin_context7_context7__resolve-library-idthenmcp__plugin_context7_context7__query-docs). - Walk the audit dimensions in references/audit-checklist.md:
- New models
- Cross-adapter feature parity
- Untracked features
- Capability-flag drift
- Telemetry / observability parity (usage tokens, cache/reasoning counts, request ids, logging asymmetry)
- Activity coverage (which of the 7 core activity kinds each provider
ships an adapter for vs. what upstream supports) — this is the only
dimension for the
activitiesscope; it's also rolled into--all.
- Fan out for
--all: launch oneExploresubagent per provider, max 3 in parallel. Each subagent returns the multi-dimension findings for its provider; you synthesise into the combined report. Theactivitiesscope does not fan out — derive the provider×activity matrix centrally from the adapter files (see dimension 6), since it's a fast mechanical diff. - Write the report to
.agent/gap-analysis/YYYY-MM-DD-<scope>.mdusing references/report-template.md. Date is today's ISO date.<scope>isopenai/feature-tts/models/activities/all. - Print the report path and a 5-line summary to the user.
Critical rules
- Never edit
feature-support.tsor anymodel-meta.ts. The report is read-only — the maintainer applies changes. - Always reference line numbers when citing exclusions (e.g.,
feature-support.ts:57) so the maintainer can jump to them. - Distinguish three gap classes in the report:
- Real gap — upstream supports it, TanStack AI doesn't, no exclusion comment.
- Tested gap — TanStack AI doesn't list it but there's an exclusion
comment in
feature-support.ts(e.g., aimock format limitation). Not actionable code-wise; surface in "Out-of-scope" section. - Stale capability flag —
model-meta.tsdeclares a capability the model no longer has, or omits one it now has.
- Cite sources. Every claim "upstream supports X" must link the upstream doc page you read. No claims from training data.
- Use today's date from the system context (currentDate). Never invent.
- Quote the relevant snippet from
feature-support.tswhen flagging a parity gap, so the report is self-contained.
Known providers
openai, anthropic, gemini, ollama, grok, groq, openrouter,
bedrock (@tanstack/ai-bedrock; three-API surface — Converse default
(adapter name bedrock-converse), Chat Completions opt-in (api: 'chat',
adapter name bedrock), Responses opt-in (api: 'responses', adapter name
bedrock-responses)), fal (media-only), elevenlabs (TTS-only). The
feature matrix tracks openai, anthropic, gemini, ollama, grok,
groq, openrouter, bedrock, bedrock-converse, and bedrock-responses;
fal and elevenlabs only appear in model/media audits.
Known features (19)
Canonical list is ALL_FEATURES in testing/e2e/src/lib/types.ts — always
re-read it; this list is a snapshot:
chat, one-shot-text, reasoning, multi-turn, tool-calling,
parallel-tool-calls, tool-approval, text-tool-text, structured-output,
structured-output-stream, agentic-structured, multimodal-image,
multimodal-structured, summarize, summarize-stream, image-gen, tts,
transcription, video-gen.
Known activities (7)
Features (above) are matrix rows about behaviours within an activity.
Activities are the coarser-grained core capability kinds in @tanstack/ai
— each has a Base<Kind>Adapter and a provider "supports" one only if its
package ships an adapter of that kind. Canonical list is the AdapterKind
union in packages/ai/src/activities/index.ts — always re-read it:
text, summarize, image, audio, video, tts, transcription.
A provider's activity surface is derived mechanically from its adapter files:
packages/ai-<provider>/src/adapters/. Filename → activity-kind map:
| Adapter file | Activity kind |
|---|---|
text.ts / text-chat-completions.ts / responses-text.ts |
text |
summarize.ts |
summarize |
image.ts |
image |
audio.ts |
audio |
video.ts |
video |
speech.ts / tts.ts |
tts |
transcription.ts |
transcription |
(cost.ts is a helper, not an activity adapter.)
Verification before finishing
Before printing the summary:
- Report file exists and is non-empty.
git statusshows only new files under.agent/gap-analysis/— nothing underpackages/ortesting/should have been modified. Rungit statusand confirm.- Every "real gap" entry has an upstream doc URL.
版本历史
- 5deda27 当前 2026-07-05 10:52


