Skip to content

Commit 96f3afd

Browse files
committed
Merge remote-tracking branch 'upstream/main' into feat/ai-groq-summarize
2 parents b8cea00 + a114288 commit 96f3afd

820 files changed

Lines changed: 100005 additions & 5585 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agent/self-learning/coupling.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,64 @@
6161
"why": "Per CLAUDE.md, every feature / bug fix / behavior change MUST include E2E test coverage. When a new public capability is added, a corresponding spec under testing/e2e/tests/ plus a fixture under testing/e2e/fixtures/ are required — often plus a new entry in feature-support.ts and types.ts. The full pattern is: add the Feature flag, decide provider support, optionally add a per-feature config (system prompt, schema, tools), wire it through src/routes/api.chat.ts (or the relevant route), write the fixture(s), write the spec iterating `providersFor(feature)`. Spec must run against every supported provider so non-native-streaming providers exercise the fallback path. Skip only for refactors that don't change observable behavior."
6262
}
6363
]
64+
},
65+
{
66+
"id": "sandbox-core-contract-touches-providers",
67+
"trigger": "packages/ai-sandbox/src/**/*.ts",
68+
"impacts": [
69+
{
70+
"target": [
71+
"packages/ai-sandbox-local-process/src/**/*.ts",
72+
"packages/ai-sandbox-docker/src/**/*.ts",
73+
"packages/ai-sandbox-cloudflare/src/**/*.ts"
74+
],
75+
"kind": "change-required",
76+
"why": "The SandboxProvider / SandboxHandle / SandboxCapabilities contracts in @tanstack/ai-sandbox are the seam every provider package implements. When a method, capability flag, lifecycle field, or the ensure/resume algorithm changes in core, every provider package must be updated in the same PR or it falls out of contract (silent type breaks, missing capability handling, broken resume). Also re-check capability degradation: a provider that returns capabilities().snapshots===false must keep working when core adds a snapshot-dependent path."
77+
}
78+
]
79+
},
80+
{
81+
"id": "harness-adapter-sandbox-execution",
82+
"trigger": "packages/ai-claude-code/src/**/*.ts",
83+
"impacts": [
84+
{
85+
"target": [
86+
"packages/ai-acp/src/**/*.ts",
87+
"packages/ai-codex/src/**/*.ts",
88+
"packages/ai-gemini-cli/src/**/*.ts",
89+
"packages/ai-grok-build/src/**/*.ts",
90+
"packages/ai-opencode/src/**/*.ts",
91+
"packages/ai-sandbox/src/**/*.ts"
92+
],
93+
"kind": "change-required",
94+
"why": "Harness adapters share one execution contract: declare requires:[SandboxCapability], run the agent via sandbox.process or an in-sandbox ACP WebSocket server (stdio when writableStdin, else ports.connect), translate ACP/session-json output through @tanstack/ai-acp or a per-adapter translator, and proxy host tools via the MCP-over-channel bridge. When the sandbox-execution pattern, ACP transport/session layer, host MCP tool-bridge shape, or policy->permission mapping changes in one adapter (or in @tanstack/ai-sandbox / @tanstack/ai-acp), mirror it across the other harness adapters so they don't diverge."
95+
}
96+
]
97+
},
98+
{
99+
"id": "acp-shared-layer-coupling",
100+
"trigger": "packages/ai-acp/src/**/*.ts",
101+
"impacts": [
102+
{
103+
"target": [
104+
"packages/ai-gemini-cli/src/**/*.ts",
105+
"packages/ai-grok-build/src/**/*.ts"
106+
],
107+
"kind": "change-required",
108+
"why": "@tanstack/ai-acp is the shared ACP client, stdio/WebSocket transport, sandbox-server bootstrap, and AG-UI translator. Changes to session lifecycle, transport framing, translate labels, or permission helpers must be reflected in every harness adapter that imports it (gemini-cli, grok-build; claude/codex when wired)."
109+
}
110+
]
111+
},
112+
{
113+
"id": "sandbox-source-persistence-ready",
114+
"trigger": "packages/ai-sandbox*/src/**/*.ts",
115+
"impacts": [
116+
{
117+
"target": ["packages/ai-sandbox/src/**/*.ts"],
118+
"kind": "change-required",
119+
"why": "The sandbox layer ships with zero persistence package but MUST stay persistence-ready so the persistence proposal drops in without re-architecture. Invariant to preserve on any sandbox change: SandboxStore and LockStore stay PLUGGABLE optional capabilities (in-memory defaults only - never hardcode storage), emitted chunks stay conceptually offset-addressable ({runId, seq, ts, chunk}) so a future EventLog/DurableRunStream can capture+replay by cursor, and approvals keep using the existing resume-based approval-requested flow. Do not introduce a sandbox-owned durable store, a bespoke replay buffer, or a non-AG-UI event type that the persistence layer would later have to rip out."
120+
}
121+
]
64122
}
65123
]
66124
}

.claude/skills/gap-analysis/SKILL.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,14 @@ markdown report under `.agent/gap-analysis/`. **Do not edit source files.**
8282

8383
## Known providers
8484

85-
`openai`, `anthropic`, `gemini`, `ollama`, `grok`, `groq`, `openrouter`, `fal`
86-
(media-only), `elevenlabs` (TTS-only). The feature matrix tracks the first
87-
seven; `fal` and `elevenlabs` only appear in model/media audits.
85+
`openai`, `anthropic`, `gemini`, `ollama`, `grok`, `groq`, `openrouter`,
86+
`bedrock` (`@tanstack/ai-bedrock`; three-API surface — Converse default
87+
(adapter name `bedrock-converse`), Chat Completions opt-in (`api: 'chat'`,
88+
adapter name `bedrock`), Responses opt-in (`api: 'responses'`, adapter name
89+
`bedrock-responses`)), `fal` (media-only), `elevenlabs` (TTS-only). The
90+
feature matrix tracks `openai`, `anthropic`, `gemini`, `ollama`, `grok`,
91+
`groq`, `openrouter`, `bedrock`, `bedrock-converse`, and `bedrock-responses`;
92+
`fal` and `elevenlabs` only appear in model/media audits.
8893

8994
## Known features (19)
9095

.claude/skills/gap-analysis/references/provider-doc-urls.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ WebFetch — call `resolve-library-id` with the SDK npm name, then `query-docs`.
7070
- Provider routing: https://openrouter.ai/docs/features/provider-routing
7171
- (Proxies many providers; uses OpenAI-compatible API.)
7272

73+
## bedrock (Amazon Bedrock)
74+
75+
- Models / API compatibility: https://docs.aws.amazon.com/bedrock/latest/userguide/models-api-compatibility.html
76+
- Converse API reference (default path): https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
77+
- OpenAI-compatible Chat Completions: https://docs.aws.amazon.com/bedrock/latest/userguide/inference-chat-completions-mantle.html
78+
- Responses API (mantle): https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html
79+
- Cross-region inference profiles: https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html
80+
- API keys: https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html
81+
- (Default path uses Converse API via `@aws-sdk/client-bedrock-runtime` (adapter `bedrock-converse`). Opt-in paths: `api: 'chat'` → OpenAI-compatible Chat Completions (adapter `bedrock`); `api: 'responses'` → Responses API (adapter `bedrock-responses`).)
82+
7383
## fal (media-only)
7484

7585
- Models catalog: https://fal.ai/models

.github/renovate.json

Lines changed: 143 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
"configMigration": true,
44
"extends": [
55
"config:recommended",
6-
"group:allNonMajor",
76
"schedule:weekly",
87
":approveMajorUpdates",
98
":automergeMinor",
@@ -15,7 +14,7 @@
1514
"ignorePresets": [":ignoreModulesAndTests"],
1615
"labels": ["dependencies"],
1716
"rangeStrategy": "bump",
18-
"postUpdateOptions": ["pnpmDedupe"],
17+
"minimumReleaseAge": "1 day",
1918
"ignoreDeps": [
2019
"@types/node",
2120
"@types/react",
@@ -25,5 +24,147 @@
2524
"react-dom",
2625
"typescript",
2726
"vue"
27+
],
28+
"packageRules": [
29+
{
30+
"description": "Fallback: bundle any remaining non-major updates so we don't get one PR per dependency. Ecosystem rules below override this for their packages.",
31+
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
32+
"groupName": "all non-major dependencies",
33+
"groupSlug": "all-minor-patch"
34+
},
35+
{
36+
"description": "Lint & formatting toolchain",
37+
"matchUpdateTypes": ["minor", "patch"],
38+
"matchPackageNames": [
39+
"eslint",
40+
"eslint-**",
41+
"@eslint/**",
42+
"@eslint-community/**",
43+
"@typescript-eslint/**",
44+
"@tanstack/eslint-config",
45+
"prettier",
46+
"prettier-**",
47+
"knip",
48+
"sherif",
49+
"publint"
50+
],
51+
"groupName": "lint & format",
52+
"groupSlug": "lint-format"
53+
},
54+
{
55+
"description": "Build & test toolchain (Vite/Vitest/Nx)",
56+
"matchUpdateTypes": ["minor", "patch"],
57+
"matchPackageNames": [
58+
"vite",
59+
"vite-**",
60+
"@vitejs/**",
61+
"vitest",
62+
"@vitest/**",
63+
"@tanstack/vite-config",
64+
"@tanstack/typedoc-config",
65+
"typedoc",
66+
"typedoc-**",
67+
"nx",
68+
"@nx/**",
69+
"tsx",
70+
"happy-dom",
71+
"jsdom",
72+
"@testing-library/**",
73+
"tinyglobby",
74+
"premove"
75+
],
76+
"groupName": "build & test tooling",
77+
"groupSlug": "build-test-tooling"
78+
},
79+
{
80+
"description": "Unified / markdown ecosystem (the largest transitive cluster in the lockfile)",
81+
"matchUpdateTypes": ["minor", "patch"],
82+
"matchPackageNames": [
83+
"unified",
84+
"remark**",
85+
"rehype**",
86+
"mdast**",
87+
"@mdx-js/**",
88+
"hast**",
89+
"micromark**",
90+
"unist**",
91+
"vfile**",
92+
"marked",
93+
"marked-**",
94+
"highlight.js",
95+
"html-**",
96+
"markdown-**"
97+
],
98+
"groupName": "markdown/unified",
99+
"groupSlug": "markdown-unified"
100+
},
101+
{
102+
"description": "Provider / AI SDKs",
103+
"matchUpdateTypes": ["minor", "patch"],
104+
"matchPackageNames": [
105+
"openai",
106+
"@anthropic-ai/**",
107+
"@google/**",
108+
"@google-cloud/**",
109+
"@aws-sdk/**",
110+
"@openrouter/**",
111+
"@mistralai/**",
112+
"@ai-sdk/**",
113+
"groq-sdk",
114+
"ollama",
115+
"@opentelemetry/**"
116+
],
117+
"groupName": "ai provider sdks",
118+
"groupSlug": "ai-provider-sdks"
119+
},
120+
{
121+
"description": "React ecosystem",
122+
"matchUpdateTypes": ["minor", "patch"],
123+
"matchPackageNames": ["react-**", "@react-native/**", "react-native", "react-native-**"],
124+
"groupName": "react ecosystem",
125+
"groupSlug": "react-ecosystem"
126+
},
127+
{
128+
"description": "Vue ecosystem",
129+
"matchUpdateTypes": ["minor", "patch"],
130+
"matchPackageNames": ["@vue/**", "vue-**"],
131+
"groupName": "vue ecosystem",
132+
"groupSlug": "vue-ecosystem"
133+
},
134+
{
135+
"description": "Angular ecosystem",
136+
"matchUpdateTypes": ["minor", "patch"],
137+
"matchPackageNames": ["@angular/**", "@angular-**", "angular-**"],
138+
"groupName": "angular ecosystem",
139+
"groupSlug": "angular-ecosystem"
140+
},
141+
{
142+
"description": "Solid ecosystem",
143+
"matchUpdateTypes": ["minor", "patch"],
144+
"matchPackageNames": ["solid-**", "@solidjs/**", "seroval", "seroval-**"],
145+
"groupName": "solid ecosystem",
146+
"groupSlug": "solid-ecosystem"
147+
},
148+
{
149+
"description": "Svelte ecosystem",
150+
"matchUpdateTypes": ["minor", "patch"],
151+
"matchPackageNames": ["svelte", "svelte-**", "@sveltejs/**", "prettier-plugin-svelte"],
152+
"groupName": "svelte ecosystem",
153+
"groupSlug": "svelte-ecosystem"
154+
},
155+
{
156+
"description": "Tailwind & icon tooling",
157+
"matchUpdateTypes": ["minor", "patch"],
158+
"matchPackageNames": ["tailwindcss", "@tailwindcss/**", "lucide", "lucide-**", "@lucide/**"],
159+
"groupName": "tailwind & icons",
160+
"groupSlug": "tailwind-icons"
161+
},
162+
{
163+
"description": "@types packages",
164+
"matchUpdateTypes": ["minor", "patch"],
165+
"matchPackageNames": ["@types/**"],
166+
"groupName": "type definitions",
167+
"groupSlug": "type-definitions"
168+
}
28169
]
29170
}

.github/workflows/release.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ jobs:
4747
persist-credentials: true
4848
- name: Setup Tools
4949
uses: TanStack/config/.github/setup@190f659075ff0845850e330883eb26d7ffd0671f # main
50+
- name: Build packages
51+
# Fresh, cache-bypassing build so dist/ is on disk when changeset
52+
# publish packs tarballs. A cached build can report success without
53+
# materializing dist/, shipping src-only packages (see 0.33.0-0.36.0).
54+
run: pnpm exec nx run-many --targets=build --exclude=examples/**,testing/** --skip-nx-cache
5055
- name: Run Changesets (version or publish)
5156
id: changesets
5257
uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1.7.0

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,8 @@ solo.yml
7878
# Agent scratch output (gap-analysis reports, triage notes — generated locally)
7979
.agent/gap-analysis/
8080
.agent/triage/
81+
82+
/OpenCode.md
83+
.agentsroom/
84+
.opencode/
8185
.agent/research/

0 commit comments

Comments
 (0)