Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e392b84
feat(website): replace the Rspress site with the Astro product site
grabbou Oct 27, 2026
c710a13
chore(docs): build and check the Astro site
grabbou Oct 27, 2026
48e0123
chore(gates): drop the GitHub Pages docs deploys
grabbou Oct 27, 2026
3ffd0eb
style(website): satisfy the repo lint rules
grabbou Oct 27, 2026
257a145
chore(gates): lint the Astro site with browser globals
grabbou Oct 27, 2026
499ffc5
fix(website): edit links, the MCP manifest version, a showcase source
grabbou Oct 27, 2026
e2186b5
chore(gates): rebuild the site when its code or server.json changes
grabbou Oct 27, 2026
11a5f08
fix(deps): keep one vitest instance for the daemon tests
grabbou Oct 27, 2026
461fe99
feat(website): serve every docs page as Markdown at /docs/<page>.md
thymikee Oct 28, 2026
0800232
feat(website): redirect the old oss.callstack.com/agent-device docs
thymikee Oct 28, 2026
5f1a94b
feat(website): load the previous site's analytics in production
thymikee Oct 28, 2026
2d3643e
fix(website): one source for capabilities in llms.txt, clearer npm er…
thymikee Oct 28, 2026
9bb6686
fix(website): address the review findings in the site components
thymikee Oct 28, 2026
2cc6759
chore(gates): analyse the site with Fallow, rebuild it for server.json
thymikee Oct 28, 2026
c3fb7c3
fix(website): name the npm registry dependency where the site build f…
thymikee Oct 28, 2026
af81215
fix(website): say the npm request failed or timed out, not only unrea…
thymikee Oct 28, 2026
27c5d2b
fix(website): turn off Vercel deployments of the gh-pages branch
thymikee Oct 28, 2026
416c0bb
feat(website): set the wordmark lowercase in Geist Mono
thymikee Oct 28, 2026
8ab6cbd
fix(website): lay out the social card and README banner cleanly
thymikee Oct 28, 2026
90f32dd
feat(website): show the GitHub star count top right
thymikee Oct 28, 2026
bcb3c75
feat(website): drop the skill install from the hero setup
thymikee Oct 28, 2026
1411064
feat(website): write agent-device lowercase everywhere, like the lockup
thymikee Oct 28, 2026
ef6b092
feat(website): remove the Templates page
thymikee Oct 28, 2026
d8198e4
feat(website): search the docs from the landing header
thymikee Oct 28, 2026
7ef12d5
feat(website): position agent-device as the device layer for AI agents
thymikee Oct 28, 2026
2f5fd6a
fix(website): retry a failed search load, remember a refused star ref…
thymikee Oct 28, 2026
26f5216
feat(website): a centred hero for the open-source device layer
thymikee Oct 28, 2026
c14144d
feat(website): say what agents get and where it fits in the hero lede
thymikee Oct 28, 2026
b357d65
feat(website): a dimmer, larger loop behind the hero, and sparkles above
thymikee Oct 28, 2026
e16393a
feat(website): centre the used-by strip, its label linking to the sho…
thymikee Oct 28, 2026
5010741
feat(website): a one-line hero lede, local or in the cloud
thymikee Oct 28, 2026
c81337b
feat(website): feature Expo Simulators, driven with agent-device
thymikee Oct 28, 2026
aa98916
feat(website): name the e2e tests in the loop's Verify step
thymikee Oct 28, 2026
beddc91
fix(website): exact sparkle count, no empty star count, uncached npm …
thymikee Oct 28, 2026
9b8b2a0
fix(website): a steady hero scene, sparkles across the page, an insta…
thymikee Oct 28, 2026
d3f871e
feat(website): the footer reads © year Callstack
thymikee Oct 28, 2026
34861fe
docs: one positioning line, and Expo Simulators in device clouds
thymikee Oct 28, 2026
56786ff
fix(website): findings from a dogfooding pass
thymikee Oct 28, 2026
8762db1
chore(gates): run the redirect deploy only for what it publishes
thymikee Oct 28, 2026
13d95ce
chore(gates): publish redirects from main only, after the merged comm…
thymikee Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 39 additions & 5 deletions .fallowrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,7 @@
"examples/sdk/batch-orchestration.ts",
"examples/sdk/ai-sdk-tools.ts",
"examples/sdk/host-runtime.ts",
"test/integration/**/*.test.ts",
"website/docs/404.mdx",
"website/rspress.config.ts"
"test/integration/**/*.test.ts"
],
"framework": [
{
Expand All @@ -59,6 +57,8 @@
],
"ignorePatterns": [
"examples/test-app/**",
// The social card template: scripts/og.mjs serves it with generated /og/* files.
"website/og/og.html",
"scripts/perf/**",
"scripts/layering/**",
"scripts/di-seams/**",
Expand All @@ -71,7 +71,17 @@
// by an import edge. Same shape as the help-conformance declaration files above.
"scripts/size-report-package.d.mts"
],
"dynamicallyLoaded": ["packages/daemon/src/execution/interaction/index.ts"],
"dynamicallyLoaded": [
"packages/daemon/src/execution/interaction/index.ts",
// The site's modules that Astro loads without an import Fallow can read: from an .astro
// <script> block (hero.ts, dither-host.ts), as a worker URL (dither.worker.ts), by a path
// in astro.config.mjs (routeData.ts) or by convention (ec.config.mjs, Expressive Code).
"website/src/components/home/hero.ts",
"website/src/components/site/dither-host.ts",
"website/src/components/site/dither.worker.ts",
"website/src/routeData.ts",
"website/ec.config.mjs"
],
"ignoreDependencies": [
"@theme",
// @agent-device/maestro owns the source import, while the published root
Expand All @@ -94,6 +104,30 @@
"@arethetypeswrong/cli"
],
"ignoreExports": [
{
// og.html draws the social card's scene with it; scripts/og.mjs serves the module to the page.
"file": "website/src/components/site/dither.ts",
"exports": ["drawDither"]
},
{
// Starlight runs the route middleware by name (routeMiddleware in astro.config.mjs).
"file": "website/src/routeData.ts",
"exports": ["onRequest"]
},
{
// Astro and Expressive Code read the default export of each site config by convention.
"file": "website/{astro,ec}.config.mjs",
"exports": ["default"]
},
{
// .astro <script> blocks import these with import(), which Fallow cannot read.
"file": "website/src/components/home/hero.ts",
"exports": ["default"]
},
{
"file": "website/src/components/site/dither-host.ts",
"exports": ["host"]
},
{
// The standalone packed-install harness loads this fixture from the selected package path and reads its request scenarios dynamically.
"file": "packages/provider-*/test/package-smoke.mjs",
Expand Down Expand Up @@ -236,7 +270,7 @@
},
{
// Tool config default exports, loaded by the tool rather than imported.
"file": "{oxlint.config.ts,tsdown.config.ts,packages/provider-*/tsdown.config.ts,packages/proxy/tsdown.config.ts,vitest.mutation.config.ts,website/rspress.config.ts}",
"file": "{oxlint.config.ts,tsdown.config.ts,packages/provider-*/tsdown.config.ts,packages/proxy/tsdown.config.ts,vitest.mutation.config.ts}",
"exports": ["default"]
},
{
Expand Down
23 changes: 0 additions & 23 deletions .github/actions/build-docs/action.yml

This file was deleted.

4 changes: 0 additions & 4 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ on:
- 'CONTRIBUTING.md'
- 'LICENSE'
- 'SECURITY.md'
- '.github/actions/build-docs/action.yml'
- '.github/workflows/deploy.yml'
- '.github/workflows/pr-preview.yml'
- '.github/workflows/pr-preview-cleanup.yml'
push:
branches:
- main
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/apple.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ on:
- CONTRIBUTING.md
- LICENSE
- SECURITY.md
- .github/actions/build-docs/action.yml
- .github/workflows/deploy.yml
- .github/workflows/pr-preview.yml
- .github/workflows/pr-preview-cleanup.yml
push:
branches:
- main
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ on:
- 'CONTRIBUTING.md'
- 'LICENSE'
- 'SECURITY.md'
- '.github/actions/build-docs/action.yml'
- '.github/workflows/deploy.yml'
- '.github/workflows/pr-preview.yml'
- '.github/workflows/pr-preview-cleanup.yml'
push:
branches:
- main
Expand Down
54 changes: 48 additions & 6 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,30 @@
name: Deploy Docs
name: Deploy docs redirects

# The docs moved from oss.callstack.com/agent-device (GitHub Pages) to agent-device.dev (Vercel).
# This publishes stubs that send every old page to its new URL (website/scripts/oss-redirects.mjs).
# The script copies the Markdown and llms files from agent-device.dev and fails until that site
# serves them, so the old docs stay published until the domain points at the new site.

# Only changes to what it publishes run it, so an outage at agent-device.dev cannot fail unrelated
# commits on main. A push run first waits until agent-device.dev serves that commit or a later one
# (/version.txt), so it never copies docs from before the merge. Every path below is under website/,
# which Vercel rebuilds; after a change to this workflow, or right after the cutover, run it by hand
# on main to republish.
on:
push:
branches:
- main
paths:
- 'website/docs/**'
Comment thread
thymikee marked this conversation as resolved.
Resolved
- 'website/scripts/oss-redirects.mjs'
- 'website/src/site/content.ts'
- 'website/src/site/llms.ts'
workflow_dispatch:
Comment thread
thymikee marked this conversation as resolved.
Resolved

jobs:
deploy:
# Only main publishes to gh-pages, whichever way the run starts.
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -17,15 +35,39 @@ jobs:
with:
persist-credentials: true

- name: Build docs
uses: ./.github/actions/build-docs
- name: Setup Node
uses: ./.github/actions/setup-node-pnpm
with:
rspress-base: /${{ github.event.repository.name }}/
install-deps: 'false'

- name: Wait for agent-device.dev to serve this commit
if: github.event_name == 'push'
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
SHA: ${{ github.sha }}
run: |
for attempt in $(seq 1 40); do
live=$(curl -fsS https://agent-device.dev/version.txt | tr -d '[:space:]' || true)
if [ -n "$live" ] && [ "$live" != local ]; then
status=$(gh api "repos/$REPO/compare/$SHA...$live" --jq .status 2>/dev/null || true)
if [ "$status" = identical ] || [ "$status" = ahead ]; then
echo "agent-device.dev serves $live, which includes $SHA."
exit 0
fi
fi
sleep 30
done
echo "agent-device.dev does not serve $SHA after 20 minutes; run this workflow by hand once it does."
exit 1

- name: Write the redirect pages
run: node website/scripts/oss-redirects.mjs website/oss-redirects

# Replaces the whole branch, including the old pr-preview/ deploys.
- name: Deploy
uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
with:
folder: website/doc_build
folder: website/oss-redirects
branch: gh-pages
clean-exclude: pr-preview
force: false
32 changes: 24 additions & 8 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
name: Docs

# ci.yml ignores docs paths, so docs-only PRs need their own lane. The links
# gate builds the site and checks the rendered pages, so the rspress version
# (website/package.json, the lockfile) and config re-run it as well.
# gate builds the site and checks the rendered pages, so anything in website/,
# the lockfile and server.json (the MCP manifest's source) re-run it as well.
on:
pull_request:
paths:
- 'website/docs/**'
- 'website/package.json'
- 'website/rspress.config.ts'
- 'website/**'
- 'server.json'
- 'README.md'
- 'scripts/check-doc-links.ts'
- 'scripts/__tests__/check-doc-links.test.ts'
Expand All @@ -26,9 +25,8 @@ on:
branches:
- main
paths:
- 'website/docs/**'
- 'website/package.json'
- 'website/rspress.config.ts'
- 'website/**'
- 'server.json'
- 'README.md'
- 'scripts/check-doc-links.ts'
- 'scripts/__tests__/check-doc-links.test.ts'
Expand Down Expand Up @@ -78,3 +76,21 @@ jobs:
- name: Check docs links
uses: ./.github/actions/run-gate
with: { gate: docs-links }

# ci.yml ignores docs paths, so a docs-only PR never reaches the unit lane that carries the
# command-reference coverage gate. Documenting a retired command, or dropping a public
# command's docs, fails here instead.
command-docs:
name: Command reference doc coverage
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node and pnpm
uses: ./.github/actions/setup-node-pnpm

- name: Check command reference doc coverage
uses: ./.github/actions/run-gate
with: { gate: command-docs }
4 changes: 0 additions & 4 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ on:
- 'CONTRIBUTING.md'
- 'LICENSE'
- 'SECURITY.md'
- '.github/actions/build-docs/action.yml'
- '.github/workflows/deploy.yml'
- '.github/workflows/pr-preview.yml'
- '.github/workflows/pr-preview-cleanup.yml'
push:
branches:
- main
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/pr-cancel-on-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
# pr-preview-cleanup.yml runs on the same close event and must finish.
- name: Cancel the PR's unfinished runs
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -31,7 +30,6 @@ jobs:
| select(.head_repository.full_name == \"$GITHUB_REPOSITORY\")
| select(any(.pull_requests[]; .number == $PR_NUMBER))
| select(.id != $RUN_ID)
| select(.path != \".github/workflows/pr-preview-cleanup.yml\")
| .id")
refused=()
for id in $ids; do
Expand Down
29 changes: 0 additions & 29 deletions .github/workflows/pr-preview-cleanup.yml

This file was deleted.

66 changes: 0 additions & 66 deletions .github/workflows/pr-preview.yml

This file was deleted.

Loading
Loading