Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 18 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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."
1 change: 1 addition & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
[![npm version](https://img.shields.io/npm/v/@jstn-sdk/agents)](https://www.npmjs.com/package/@jstn-sdk/agents)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

<a href="https://www.producthunt.com/products/agent-compat?embed=true&amp;utm_source=badge-featured&amp;utm_medium=badge&amp;utm_campaign=badge-agent-compat" target="_blank" rel="noopener noreferrer"><img alt="agent-compat - The compatibility layer for AI agent environments. | Product Hunt" width="250" height="54" src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1229506&amp;theme=light&amp;t=1787430161859"></a>

</div>

> [!NOTE]
Expand Down
20 changes: 19 additions & 1 deletion apps/docs/app/docs/[[...slug]]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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`,
},
],
},
};
}
72 changes: 72 additions & 0 deletions apps/docs/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand All @@ -21,6 +61,38 @@ export default function RootLayout({
return (
<html lang="en" suppressHydrationWarning>
<body className="flex min-h-screen flex-col">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
name: "Justine Devs",
url: "https://github.com/JustineDevs",
},
{
"@type": "SoftwareApplication",
name: "@jstn-sdk/agents",
applicationCategory: "DeveloperApplication",
operatingSystem: "Cross-platform",
description: metadata.description,
url: "https://agents-compat.jstn.site/docs",
image: "https://agents-compat.jstn.site/assets/banner.png",
codeRepository: "https://github.com/JustineDevs/agent-compat",
programmingLanguage: "TypeScript",
author: { "@type": "Organization", name: "Justine Devs" },
},
{
"@type": "WebSite",
name: "Agent Compat",
url: "https://agents-compat.jstn.site",
},
],
}),
}}
/>
<a
href="#nd-page"
className="sr-only focus:not-sr-only focus:fixed focus:left-4 focus:top-4 focus:z-50 focus:rounded-md focus:bg-fd-popover focus:px-3 focus:py-2 focus:text-fd-popover-foreground"
Expand Down
19 changes: 19 additions & 0 deletions apps/docs/app/robots.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
return {
rules: [
{
userAgent: "*",
allow: "/",
disallow: ["/api/"],
},
{ userAgent: "GPTBot", allow: "/" },
{ userAgent: "ClaudeBot", allow: "/" },
{ userAgent: "PerplexityBot", allow: "/" },
{ userAgent: "Google-Extended", allow: "/" },
],
sitemap: "https://agents-compat.jstn.site/sitemap.xml",
host: "https://agents-compat.jstn.site",
};
}
11 changes: 11 additions & 0 deletions apps/docs/app/sitemap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import type { MetadataRoute } from "next";
import { source } from "@/lib/source";

export default function sitemap(): MetadataRoute.Sitemap {
return source.getPages().map((page) => ({
url: `https://agents-compat.jstn.site${page.url}`,
lastModified: new Date(),
changeFrequency: "monthly",
priority: page.url === "/docs" ? 1 : 0.7,
}));
}
2 changes: 2 additions & 0 deletions apps/docs/content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import { Cards, Card } from 'fumadocs-ui/components/card';

`@jstn-sdk/agents` is a pure TypeScript SDK for cross-agent environment compatibility. Define your project once, generate native artifacts for each supported surface, and validate the result.

<img src="/assets/banner.png" alt="Agent Compat cross-agent environment compatibility SDK" width="1254" height="314" style={{ width: '100%', height: 'auto', maxWidth: '760px', borderRadius: '8px' }} />

<Cards>
<Card title="Quickstart" href="/docs/quickstart" description="Install the package and compile your first manifest." />
<Card title="Installation" href="/docs/installation" description="Set up npm, pnpm, or the GitHub Packages mirror." />
Expand Down
Binary file added apps/docs/public/assets/banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions packages/agents/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@
"scripts": {
"build": "tsc -p tsconfig.json",
"typecheck": "tsc --noEmit -p tsconfig.json",
"test": "pnpm build && tsc -p tsconfig.test.json && node --test dist-test/test/*.test.js",
"verify": "pnpm build && tsc -p tsconfig.test.json && node --test dist-test/test/conformance.test.js"
"test": "rm -rf dist-test && pnpm build && tsc -p tsconfig.test.json && node --test dist-test/test/*.test.js",
"verify": "rm -rf dist-test && pnpm build && tsc -p tsconfig.test.json && node --test dist-test/test/conformance.test.js"
Comment on lines +41 to +42

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Replace the Unix-only test cleanup command

When contributors run either script with pnpm on a standard Windows installation, the scripts execute through cmd.exe, where rm is not available, so testing stops before the build or test suite runs. The previous commands were portable Node/TypeScript invocations; use a cross-platform cleanup such as a small Node fs.rmSync command or a portable removal dependency.

Useful? React with 👍 / 👎.

},
"engines": {
"node": ">=18"
Expand Down
1 change: 1 addition & 0 deletions public/googleb24d000c6a1cb7c4.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
google-site-verification: googleb24d000c6a1cb7c4.html

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Serve the verification file from the docs app

The deployed Next.js application and its existing static assets live under apps/docs, but this verification file is added to the repository-level public directory; a repo-wide search finds no corresponding file under apps/docs/public. Consequently, requests to /googleb24d000c6a1cb7c4.html from the documentation deployment will not reach this file, preventing the intended Search Console verification; move it into the docs app's public directory or expose an equivalent route.

Useful? React with 👍 / 👎.

Loading