From 6cd9e54090dfde87c2aa48b97fe1a7de99792bdd Mon Sep 17 00:00:00 2001 From: Jason Colapietro Date: Fri, 24 Jul 2026 21:51:20 -0400 Subject: [PATCH 1/2] fix(links): suppress illustrative listing CTAs --- src/components/AgentDetailApp.tsx | 5 +++- src/lib/data/seed.ts | 4 ++- src/lib/data/types.ts | 4 +-- tests/public-link-integrity.test.ts | 41 +++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 tests/public-link-integrity.test.ts diff --git a/src/components/AgentDetailApp.tsx b/src/components/AgentDetailApp.tsx index d1d4d11..8f9184a 100644 --- a/src/components/AgentDetailApp.tsx +++ b/src/components/AgentDetailApp.tsx @@ -112,7 +112,10 @@ export function AgentDetailApp({ id }: { id: string }) {
Example agent.{" "} Add your own agent{" "} - to log, grade, and set goals. + + to log, grade, and set goals. This illustrative profile has no + live x402 listing. +
) : null} diff --git a/src/lib/data/seed.ts b/src/lib/data/seed.ts index e586dce..da9267a 100644 --- a/src/lib/data/seed.ts +++ b/src/lib/data/seed.ts @@ -98,7 +98,9 @@ function buildAgent(spec: SeedSpec): Agent { name: spec.name, slug: spec.slug, ownerWallet: DEFAULT_OWNER, - x402Url: `https://agents.suedeai.ai/a/${spec.slug}`, + // These are deterministic illustrative profiles, not published Agent + // Studio records. Never manufacture a Studio URL from the demo slug. + x402Url: "", priceUsdc: spec.priceUsdc, category: spec.category, launchedAt, diff --git a/src/lib/data/types.ts b/src/lib/data/types.ts index 63e7333..f0585e0 100644 --- a/src/lib/data/types.ts +++ b/src/lib/data/types.ts @@ -21,9 +21,9 @@ export interface Agent { id: string; name: string; ownerWallet: string; - /** Public x402 listing URL on the builder (e.g. agents.suedeai.ai/a/{slug}). */ + /** Public x402 listing URL on the builder, or empty for illustrative data. */ x402Url: string; - /** Slug used for builder deep-links (x402 discovery doc, public page). */ + /** Stable local slug for resolving the illustrative or operator-entered profile. */ slug: string; priceUsdc: number; category: string; diff --git a/tests/public-link-integrity.test.ts b/tests/public-link-integrity.test.ts new file mode 100644 index 0000000..6a3707f --- /dev/null +++ b/tests/public-link-integrity.test.ts @@ -0,0 +1,41 @@ +import { readFile } from "node:fs/promises"; +import { describe, expect, it } from "vitest"; +import sitemap from "@/app/sitemap"; +import { publicAgentData } from "@/lib/data/seed-provider"; +import { SITE_URL } from "@/lib/site"; + +describe("public example link integrity", () => { + it("suppresses unavailable Studio listings for every public example page", () => { + const examples = publicAgentData(); + expect(examples).toHaveLength(18); + for (const { agent } of examples) { + expect(agent.x402Url).toBe(""); + } + }); + + it("covers every current sitemap agent page without manufacturing an external CTA", () => { + const examples = publicAgentData(); + const agentUrls = sitemap() + .map((entry) => entry.url) + .filter((url) => url.startsWith(`${SITE_URL}/agent/`)); + + expect(agentUrls).toEqual( + examples.map( + ({ agent }) => + `${SITE_URL}/agent/${encodeURIComponent(agent.id)}`, + ), + ); + expect(examples.every(({ agent }) => agent.x402Url === "")).toBe(true); + }); + + it("labels illustrative profiles when no live listing is attached", async () => { + const source = await readFile( + new URL("../src/components/AgentDetailApp.tsx", import.meta.url), + "utf8", + ); + expect(source).toContain( + "This illustrative profile has no", + ); + expect(source).toContain("live x402 listing."); + }); +}); From 8377d190f2fbbb5d4547406f49bc02ca2d1e106e Mon Sep 17 00:00:00 2001 From: Jason Colapietro Date: Fri, 24 Jul 2026 21:54:37 -0400 Subject: [PATCH 2/2] ci: validate Agentix pull requests remotely --- .github/workflows/ci.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bdc926c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI + +on: + pull_request: + +permissions: + contents: read + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + test-and-build: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "24" + cache: npm + - run: npm ci + - run: npm test + - run: npm run build + env: + NEXT_TELEMETRY_DISABLED: "1"