Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
fae080c
docs(site): scaffold @agent-bundle/docs workspace
ScriptedAlchemy Sep 3, 2026
b6bdf72
docs(site): configure rspress with typedoc, llms, twoslash, sitemap
ScriptedAlchemy Sep 3, 2026
adf6050
docs(site): point zh hero action at zh api route
ScriptedAlchemy Sep 3, 2026
6012ae9
docs(site): add family-parity home metadata, hero image, shiki transf…
ScriptedAlchemy Sep 3, 2026
f82c1ad
docs(site): localize zh hero image alt text
ScriptedAlchemy Sep 3, 2026
24224a4
docs(site): add bilingual guide start and authoring pages
ScriptedAlchemy Sep 3, 2026
6e869b5
docs(site): register guide sections in the sidebar and nav
ScriptedAlchemy Sep 3, 2026
d9968ba
docs(site): list the routes config field in the configuration model
ScriptedAlchemy Sep 3, 2026
23d487e
docs(site): use globalStyles and explicit shiki grammar set
ScriptedAlchemy Sep 3, 2026
8e54009
docs(site): correct hook reason scope and zh fence annotations
ScriptedAlchemy Sep 3, 2026
fd45848
docs(site): add bilingual guide development pages
ScriptedAlchemy Sep 3, 2026
c3ca4fa
docs(site): add bilingual guide distribution pages
ScriptedAlchemy Sep 3, 2026
3c3082b
docs(site): add bilingual reference section and nav entry
ScriptedAlchemy Sep 3, 2026
034b4a0
docs(site): add bilingual examples section
ScriptedAlchemy Sep 3, 2026
1e50f33
docs(site): add bilingual contributing section
ScriptedAlchemy Sep 3, 2026
85e824e
docs(site): declare zod for Twoslash so package-entry samples resolve
ScriptedAlchemy Sep 3, 2026
a99e057
docs(site): generate host, event, notice, and diagnostics reference p…
ScriptedAlchemy Sep 3, 2026
21f909c
docs(site): document event routes and the hook wire; link config fiel…
ScriptedAlchemy Sep 3, 2026
4e0e0b0
ci(docs): add Docs workflow with Pages deploy, treat website/ as docs…
ScriptedAlchemy Sep 3, 2026
1ad5fd7
docs: version the Rspress docsite design spec and implementation plan
ScriptedAlchemy Sep 3, 2026
a94011a
docs(site): family-parity homepage actions, linked feature cards, and…
ScriptedAlchemy Sep 3, 2026
e1544b0
docs(site): describe the omitted Claude stdio cwd accurately
ScriptedAlchemy Sep 3, 2026
b9e04fa
docs(site): finalize homepages and top navigation
ScriptedAlchemy Sep 3, 2026
014fb74
docs(site): sharpen the examples overview copy
ScriptedAlchemy Sep 3, 2026
b8fa712
docs(site): correct host plugin-data tokens and reference wording
ScriptedAlchemy Sep 3, 2026
acd9a3f
docs(site): correct example and contributing claims, unify zh Skill term
ScriptedAlchemy Sep 3, 2026
04a42a1
docs(site): drop the custom build verifier in favor of Rspress built-…
ScriptedAlchemy Sep 3, 2026
24c21b6
ci(docs): describe the build gate without the removed verifier
ScriptedAlchemy Sep 3, 2026
8f02076
docs(site): expand the landing pages with a write-vs-emit walkthrough
ScriptedAlchemy Sep 3, 2026
5f46d13
docs(site): apply browser-acceptance fixes
ScriptedAlchemy Sep 3, 2026
48e1212
docs(site): point the homepage diagnostics mention at the generated r…
ScriptedAlchemy Sep 3, 2026
68f5e31
docs(site): correct four reference claims the source contradicts
ScriptedAlchemy Sep 3, 2026
470430a
ci(docs): lint website-only changes and allow manual redeploys
ScriptedAlchemy Sep 3, 2026
491fca9
ci(docs): serialize main deploys and guard against stale Pages rollbacks
ScriptedAlchemy Sep 3, 2026
1f232e6
docs(site): name the package whose peer range the preview publish rew…
ScriptedAlchemy Sep 3, 2026
4ac30dd
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
53b88e0
docs(agents): require docsite updates alongside user-facing changes
ScriptedAlchemy Sep 3, 2026
fac71e4
chore: add changeset for the agent-bundle README documentation link
ScriptedAlchemy Sep 3, 2026
3e0f86d
docs(site): make the hooks simulate example runnable as written
ScriptedAlchemy Sep 3, 2026
32deb54
chore(changeset): drop the duplicate README-link changeset
ScriptedAlchemy Sep 3, 2026
1c9332d
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
af6ed18
docs(site): point repo-relative links in the copied diagnostics page …
ScriptedAlchemy Sep 3, 2026
2a66dbc
docs(site): resolve the review threads on quick start, examples, and …
ScriptedAlchemy Sep 3, 2026
6f181df
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
eae9eb8
docs(site): resolve the second review round on the merged head
ScriptedAlchemy Sep 3, 2026
739769b
docs(site): say which examples expose a dev script
ScriptedAlchemy Sep 3, 2026
a7ae3cd
docs(plan): record why the docsite build verifier was dropped
ScriptedAlchemy Sep 3, 2026
233c0a8
docs(site): resolve the third review round on hooks and the host matrix
ScriptedAlchemy Sep 3, 2026
d6eeb77
docs(site): use the hook name the page's declaration really emits
ScriptedAlchemy Sep 3, 2026
98cc1a2
docs(site): document doctor --json and the CLI artifact default
ScriptedAlchemy Sep 3, 2026
f3907c2
docs(site): state the real default artifact root of the CLI build
ScriptedAlchemy Sep 3, 2026
c5bb432
docs(site): use the CLI's real artifact root and the emitted hook name
ScriptedAlchemy Sep 3, 2026
52bfe2c
Merge remote-tracking branch 'origin/docs/rspress-website-landing' in…
ScriptedAlchemy Sep 3, 2026
350bc14
docs(site): document every host-scoped config field for claude, codex…
ScriptedAlchemy Sep 3, 2026
2332ca3
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
4b68a64
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
03c60b6
chore(changeset): drop the --output help claim now that main ships it…
ScriptedAlchemy Sep 3, 2026
9cf3a82
Merge remote-tracking branch 'origin/docs/rspress-website-landing' in…
ScriptedAlchemy Sep 3, 2026
a24a7c5
docs(site): correct Skill frontmatter keys and name the real docs scr…
ScriptedAlchemy Sep 3, 2026
bd09399
docs(site): document the agent-bundle/routes entry point
ScriptedAlchemy Sep 3, 2026
bf6de9c
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
64df2de
docs(site): explain the bin exception to convention claims
ScriptedAlchemy Sep 3, 2026
d0043a4
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
f299184
docs(site): list codex.marketplace and scope the error-only exit claim
ScriptedAlchemy Sep 3, 2026
0275f77
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
f5b83aa
docs(site): list codex.marketplace and scope the error-only exit clai…
ScriptedAlchemy Sep 3, 2026
2519ae3
docs(site): describe the routed CLI shipped inside host artifacts
ScriptedAlchemy Sep 3, 2026
f4dd3cb
Merge remote-tracking branch 'origin/docs/rspress-website-landing' in…
ScriptedAlchemy Sep 3, 2026
a5f5284
docs(site): document the cursor host key and scope the exit claim on …
ScriptedAlchemy Sep 3, 2026
2808c6e
docs: restore the AB4765-AB4766 diagnostics entries
ScriptedAlchemy Sep 3, 2026
11a69be
docs(site): correct hook-availability, Codex token, and evals coverage
ScriptedAlchemy Sep 3, 2026
a7cf441
docs(site): spell out the Codex MCP path-token rule beside the host t…
ScriptedAlchemy Sep 3, 2026
de1360c
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
e67bfe3
docs(site): document shared layout modules
ScriptedAlchemy Sep 3, 2026
757bdc3
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
6182c79
docs(site): scope marketplace to Cursor, place the root manifest, ren…
ScriptedAlchemy Sep 3, 2026
874082b
docs(site): state the one token-bearing cwd Claude accepts
ScriptedAlchemy Sep 3, 2026
88e5e9b
Merge remote-tracking branch 'origin/docs/rspress-website-landing' in…
ScriptedAlchemy Sep 3, 2026
a345524
docs(site): document the dev-epoch proof level and qualify the homepa…
ScriptedAlchemy Sep 3, 2026
325c919
Merge remote-tracking branch 'origin/main' into docs/rspress-website-…
ScriptedAlchemy Sep 3, 2026
2888cda
docs(site): name the one example with a scripted diagnostic walkthrou…
ScriptedAlchemy Sep 3, 2026
8b8e7f8
docs(site): document installer replacement and the inspect kinds matrix
ScriptedAlchemy Sep 3, 2026
c91063a
Merge remote-tracking branch 'origin/docs/rspress-website-landing' in…
ScriptedAlchemy Sep 3, 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
5 changes: 5 additions & 0 deletions .changeset/docs-site-readme-link.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"agent-bundle": patch
---

Link the package README to the hosted documentation site so `npm` readers can find the full guide, configuration, host, event, notice, and diagnostics references. The pinned Cursor and portable capability tables now record Cursor's `.cursor-plugin/marketplace.json` path and the portable `${PLUGIN_ROOT}`/`${PLUGIN_DATA}` tokens, so the generated host matrix matches what the adapters emit. (#384)
11 changes: 6 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ concurrency:
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# PR-only docs allowlist: docs/**, agent-patterns/**, .changeset/*.md, and
# top-level *.md. Nested markdown elsewhere is code because examples and
# packages contain compiled SKILL.md artifacts, and package markdown affects
# npm pack audits. Classification fails open so uncertain PRs run every heavy
# job; pushes to main never skip any job based on changed paths.
# PR-only docs allowlist: docs/**, agent-patterns/**, website/** (the
# Rspress site, validated by docs.yml), .changeset/*.md, and top-level *.md.
# Nested markdown elsewhere is code because examples and packages contain
# compiled SKILL.md artifacts, and package markdown affects npm pack audits.
# Classification fails open so uncertain PRs run every heavy job; pushes to
# main never skip any job based on changed paths.
# Path rules and fail-open listing checks live in
# scripts/classify-docs-only.mjs (unit-tested). This job sparse-checkouts
# only that script so the vendored Effect subtree never lands on the
Expand Down
98 changes: 98 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Docs

# Validates the Rspress documentation site (website/) on every pull request
# and push to main, and deploys website/doc_build to GitHub Pages from main
# (on push, or on a manual dispatch of the main branch).
#
# No `paths:` filter on purpose: package-source changes can break TypeDoc
# generation and the generated reference pages without touching website/**,
# and a path-filtered workflow can never safely become a required check.
# Website-only PRs skip the heavy jobs in ci.yml (scripts/classify-docs-only.mjs
# treats website/** as docs-only) because this workflow covers them.
#
# One-time prerequisite: repository Settings -> Pages -> Source must be
# "GitHub Actions" (REST: build_type=workflow), or deploy-pages fails.

on:
pull_request:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read

# PR pushes cancel the superseded run of the same PR. Every run that can
# deploy (push or manual dispatch on main) shares one non-cancelling group so
# build-and-deploy runs execute in order and an older, slower build can never
# deploy over a newer one (GitHub keeps at most one pending run per group, so
# a superseded pending build is dropped, never reordered). Dispatches on other
# refs get SHA-keyed groups.
concurrency:
group: docs-${{ github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && 'main' || github.event.pull_request.number || github.sha }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build:
name: Docs site (Node 22.19)
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v7
- uses: pnpm/setup@v2
with:
cache: true
install: false
runtime: node@22.19.0
- run: pnpm install --frozen-lockfile
# Website-only PRs skip every ci.yml job that lints, so lint here too.
- run: pnpm lint
# Typecheck the site config and build it. Rspress's own dead-link,
# dead-anchor, dead-image, and language-parity checks fail the build if
# TypeDoc or the generated reference pages are missing, since the
# authored pages link to them.
- run: pnpm docs:site:build
- name: Upload Pages artifact
if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
uses: actions/upload-pages-artifact@v5
with:
path: website/doc_build

deploy:
name: Deploy to GitHub Pages
needs: build
if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# Never cancel an in-flight Pages deployment.
concurrency:
group: pages
cancel-in-progress: false
Comment thread
ScriptedAlchemy marked this conversation as resolved.
steps:
# Re-running an older main run (or any path that bypasses the queue
# above) must not publish a stale site: only deploy when this commit is
# still the head of main.
- name: Confirm this commit is still the head of main
id: head
env:
GH_TOKEN: ${{ github.token }}
run: |
head="$(gh api "repos/${GITHUB_REPOSITORY}/branches/main" --jq .commit.sha)"
if [ "$head" = "$GITHUB_SHA" ]; then
echo "deploy=true" >> "$GITHUB_OUTPUT"
else
echo "deploy=false" >> "$GITHUB_OUTPUT"
echo "Skipped deploy: main moved to ${head}; this run built ${GITHUB_SHA}." >> "$GITHUB_STEP_SUMMARY"
fi
- if: steps.head.outputs.deploy == 'true'
uses: actions/configure-pages@v6
- if: steps.head.outputs.deploy == 'true'
id: deployment
uses: actions/deploy-pages@v5
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,12 @@ packages/*/NOTICE

# Aborted runtime-playground fixture workspaces
.runtime-playground-*/

website/doc_build/
website/docs/en/api/**/*.md
website/docs/zh/api/**/*.md
# Build-time reference pages rendered from capability tables and docs/diagnostics.md
website/docs/*/reference/hosts.md
website/docs/*/reference/events.md
website/docs/*/reference/notices.md
website/docs/*/reference/diagnostics.md
30 changes: 30 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,36 @@
- Never accept or capture a Workbench route while its loading state is still visible.
- Browser acceptance must cover populated state plus the documented stale-diagnostic and repair flow.

## Documentation site

- `website/` is the public Rspress docsite
(<https://scriptedalchemy.github.io/agent-bundle/>), deployed from `main`
by `.github/workflows/docs.yml`. It is user-facing product, held to the
same accuracy bar as the code it describes.
- A PR that adds or changes user-facing behavior — a CLI command or flag,
config key, public export or entry point, hook event or result rule, host
target or artifact, diagnostic code, environment variable, or example —
updates the matching page under `website/docs/en/**` **and** its
`website/docs/zh/**` translation in the same PR. Ask the same question
when writing the changeset: if the summary is user-facing, the docs almost
certainly need the same change. Internal refactors, tests, and CI do not.
- Reference prose must match the source. State what the code does, not what
the design intended; when unsure, read the adapter or validator before
writing the sentence. Where the generated pages and hand-written pages
disagree, the generated pages are right — fix the hand-written one.
- Never hand-edit generated pages: `website/docs/{en,zh}/api/**` comes from
TypeDoc, and the hosts, events, and diagnostics reference pages are
rendered at build time from `packages/agent-bundle/src/adapters/capabilities/*.json`
and `docs/diagnostics.md`. Change the source, and the site follows.
- `pnpm docs:site:build` is the gate: typecheck, build, and Rspress's
dead-link, dead-anchor, dead-image, and language-parity checks. Parity
fails the build if one locale gains a page the other lacks. Run it before
pushing anything under `website/`, and after any change to public
exports, since TypeDoc compiles `packages/agent-bundle/src` directly.
- The site is desktop-first, like the Workbench. Wide tables scroll; code
samples wrap at roughly 90 columns so they render without horizontal
overflow at the default content width.

## Changesets

- Every PR that changes a publishable package (`packages/agent-bundle`,
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

agent-bundle compiles an agent plugin — skills, hooks, MCP servers, and scripts, described by one typed config — into installable artifacts for Claude Code, Codex, and Cursor, plus a portable layout. You write the plugin once; the compiler emits each host's manifests and wrappers.

Documentation: [scriptedalchemy.github.io/agent-bundle](https://scriptedalchemy.github.io/agent-bundle/) (English and 简体中文; guide, reference, generated type API, host capability matrices).

Requires Node.js 22.19 or later.

## Install
Expand Down
9 changes: 6 additions & 3 deletions docs/diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

Every agent-bundle failure or nudge is one structured diagnostic: a stable
`code` (`AB` + four digits), a `severity` (`error`, `warning`, or `info`), a
`message`, and usually a `sourcePath` and a `recovery` hint. Commands exit
nonzero only when an **error** diagnostic is present; warnings and infos never
gate a build, a validation, or a dev rebuild.
`message`, and usually a `sourcePath` and a `recovery` hint. The
diagnostic-gated commands (`build`, `prepack`, `validate`, `doctor`, `install`,
`dev`) exit nonzero only when an **error** diagnostic is present; warnings and
infos never gate a build, a validation, or a dev rebuild. `eval` and `inspect`
additionally exit `1` for a failing or inconclusive trial or an invalid model
even when no error diagnostic was reported.

## Code families

Expand Down
1 change: 1 addition & 0 deletions docs/effect-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ docs, or examples' user code. The four-concept newcomer ledger is untouched.
| --- | --- |
| npm `effect` | **`4.0.0-rc.112`** (exact). Latest published `rc` dist-tag on 2026-09-01. The Wave 3.5 brief named `4.0.0-rc.113`; that version was not on the registry. Re-pin chores take the next published RC. |
| Vendored tree | `repos/effect` via `git subtree` from [Effect-TS/effect](https://github.com/Effect-TS/effect.git) `main` (v4). Squash commit tracks `packages/effect` version **4.0.0-rc.112**. |
| `website` `typescript` | **`6.0.3`**, behind the root's TypeScript 7, because `typedoc@0.28` peers on `<= 6.0.x`. TypeDoc and twoslash compile `packages/agent-bundle/src` with it, so TS7-only syntax in the package breaks `pnpm docs:site:build` first. Re-pin chores check whether a newer `typedoc` lifts the ceiling. |

Application code imports the npm package. Never import from `repos/**`.

Expand Down
Loading
Loading