diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d1a878f..2d8ddec 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -10,7 +10,7 @@ on:
- ".releaserc.json"
- "package.json"
- "pnpm-lock.yaml"
- - "scripts/publish-github-package.mjs"
+ - "scripts/publish-github-package.ts"
permissions:
contents: write
@@ -35,7 +35,23 @@ jobs:
registry-url: https://registry.npmjs.org
- run: pnpm install --frozen-lockfile
- run: pnpm check
- - run: pnpm release
+ - name: Check npm publishing credentials
+ id: npm-auth
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+ run: |
+ if [[ -n "$NPM_TOKEN" ]]; then
+ echo "available=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "::warning::NPM_TOKEN is not configured; semantic-release will be skipped."
+ echo "available=false" >> "$GITHUB_OUTPUT"
+ fi
+ - name: Run semantic-release
+ if: steps.npm-auth.outputs.available == 'true'
+ run: pnpm release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+ - name: Skip semantic-release without npm credentials
+ if: steps.npm-auth.outputs.available != 'true'
+ run: echo "Release skipped because NPM_TOKEN is not configured."
diff --git a/.releaserc.json b/.releaserc.json
index 549ce84..711082b 100644
--- a/.releaserc.json
+++ b/.releaserc.json
@@ -16,6 +16,7 @@
[
"@semantic-release/github",
{
+ "labels": [],
"assets": [{ "path": "release/*.tgz", "label": "npm package" }],
"releaseBodyTemplate": "<%= nextRelease.notes %>\n\nPackage: [@jstn-sdk/agents](https://www.npmjs.com/package/@jstn-sdk/agents)\n\nRepository: https://github.com/JustineDevs/agent-compat"
}
diff --git a/README.md b/README.md
index 6dc5589..7dabb7b 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@
[](https://www.npmjs.com/package/@jstn-sdk/agents)
[](https://opensource.org/licenses/MIT)
+
+
> [!NOTE]
diff --git a/apps/docs/app/docs/[[...slug]]/page.tsx b/apps/docs/app/docs/[[...slug]]/page.tsx
index 1cbc6ee..c54410f 100644
--- a/apps/docs/app/docs/[[...slug]]/page.tsx
+++ b/apps/docs/app/docs/[[...slug]]/page.tsx
@@ -35,5 +35,23 @@ export async function generateMetadata(props: PageProps) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) return {};
- return { title: page.data.title, description: page.data.description };
+ return {
+ title: page.data.title,
+ description: page.data.description,
+ alternates: { canonical: page.url },
+ openGraph: {
+ type: "article",
+ url: page.url,
+ title: page.data.title,
+ description: page.data.description,
+ images: [
+ {
+ url: "/assets/banner.png",
+ width: 2508,
+ height: 627,
+ alt: `${page.data.title} | Agent Compat`,
+ },
+ ],
+ },
+ };
}
diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx
index 81f4ecd..722cc6e 100644
--- a/apps/docs/app/layout.tsx
+++ b/apps/docs/app/layout.tsx
@@ -11,6 +11,46 @@ export const metadata: Metadata = {
},
description:
"Cross-agent environment compatibility SDK: detect, compile, validate.",
+ applicationName: "Agent Compat",
+ keywords: [
+ "agent compatibility",
+ "AI agent SDK",
+ "AGENTS.md",
+ "agent skills",
+ "TypeScript",
+ ],
+ authors: [{ name: "Justine Devs", url: "https://github.com/JustineDevs" }],
+ creator: "Justine Devs",
+ publisher: "Justine Devs",
+ alternates: { canonical: "/docs" },
+ openGraph: {
+ type: "website",
+ siteName: "Agent Compat",
+ title: "Agent Compat | Cross-agent compatibility SDK",
+ description:
+ "Detect, compile, and validate project integrations across AI coding environments.",
+ url: "/docs",
+ images: [
+ {
+ url: "/assets/banner.png",
+ width: 2508,
+ height: 627,
+ alt: "Agent Compat cross-agent environment compatibility SDK",
+ },
+ ],
+ },
+ twitter: {
+ card: "summary_large_image",
+ title: "Agent Compat | Cross-agent compatibility SDK",
+ description:
+ "Detect, compile, and validate project integrations across AI coding environments.",
+ images: ["/assets/banner.png"],
+ },
+ robots: {
+ index: true,
+ follow: true,
+ googleBot: { index: true, follow: true, "max-image-preview": "large" },
+ },
};
export default function RootLayout({
@@ -21,6 +61,38 @@ export default function RootLayout({
return (
+