📦 deps(thirdparty): update snapshots
This commit is contained in:
@@ -19,17 +19,17 @@ const FAQ_ITEMS = [
|
||||
{
|
||||
question: 'What is Agentic Awesome Skills?',
|
||||
answer: (countLabel) =>
|
||||
`Agentic Awesome Skills is an installable GitHub library of ${countLabel} reusable SKILL.md playbooks for AI coding assistants. It supports Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and related hosts through direct skill installs, specialized plugins, bundles, workflows, and a searchable catalog.`,
|
||||
`Agentic Awesome Skills is built around AAS Core, a local agent-first preview control plane for discovering, recommending, validating, and planning exact skill stacks. AAS Core is backed by an evidence-rich catalog of ${countLabel} reusable SKILL.md playbooks.`,
|
||||
},
|
||||
{
|
||||
question: 'How do I install Agentic Awesome Skills?',
|
||||
question: 'How do I use AAS Core preview?',
|
||||
answer:
|
||||
'Install the library with npx agentic-awesome-skills. Use tool-specific flags such as --codex, --cursor, --gemini, --claude, or --antigravity when you want the installer to target a specific skills directory already used by your assistant runtime.',
|
||||
'Configure the local stdio MCP with the AAS CLI, let the agent search, inspect, and recommend skills, then validate the proposed aas-stack.json and preview its immutable plan in the CLI. Apply and recovery are outside the non-applying preview path.',
|
||||
},
|
||||
{
|
||||
question: 'Is Agentic Awesome Skills a GitHub repository?',
|
||||
answer:
|
||||
'Yes. The GitHub repository at https://github.com/sickn33/agentic-awesome-skills is the canonical source for the skill library, installer, specialized plugins, bundles, workflows, and documentation. The hosted catalog is the searchable browsing surface for that repository.',
|
||||
'Yes. The GitHub repository at https://github.com/sickn33/agentic-awesome-skills is the canonical source for AAS Core, its CLI and local MCP, the skill catalog, plugins, and documentation. The hosted site is a companion catalog and local artifact-review surface.',
|
||||
},
|
||||
{
|
||||
question: 'What are AAS specialized plugins?',
|
||||
@@ -333,9 +333,9 @@ function buildHomeFallback({ landingPages, siteBaseUrl }) {
|
||||
|
||||
return [
|
||||
'<main data-prerender-fallback="true">',
|
||||
'<h1>Installable AI agent skills for Codex, Claude Code, Cursor, Gemini, and Antigravity</h1>',
|
||||
'<p><strong>Find the right skill. Ship the better agent.</strong></p>',
|
||||
'<p>Browse a GitHub-backed catalog of reusable SKILL.md playbooks, specialized plugins, bundles, and workflows.</p>',
|
||||
'<h1>AAS Core: agent-first skill stacks for Codex, Claude Code, and compatible clients</h1>',
|
||||
'<p><strong>Discover. Recommend. Validate. Preview.</strong></p>',
|
||||
'<p>Turn intent into an explainable aas-stack.json and immutable plan preview without target writes, backed by the AAS skill catalog.</p>',
|
||||
`<nav aria-label="Catalog hubs"><ul>${buildStaticLinkList(links)}</ul></nav>`,
|
||||
'</main>',
|
||||
].join('');
|
||||
@@ -396,14 +396,14 @@ function setRootFallback(html, fallbackHtml) {
|
||||
function buildHomeMeta({ catalogCount, imageUrl, canonicalUrl }) {
|
||||
const visibleCount = Math.max(catalogCount, HOME_CATALOG_COUNT_FALLBACK);
|
||||
const formattedCount = visibleCount.toLocaleString('en-US');
|
||||
const title = `Agentic Awesome Skills GitHub | ${formattedCount}+ AI coding skills`;
|
||||
const description = `Explore the GitHub library of ${formattedCount}+ installable agentic skills, specialized plugins, bundles, and workflows for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants.`;
|
||||
const title = `AAS Core Preview | Agent-first stacks backed by ${formattedCount}+ skills`;
|
||||
const description = `Use AAS Core preview to discover, recommend, validate, and plan explainable skill stacks for Codex, Claude Code, and compatible clients, backed by ${formattedCount}+ cataloged skills.`;
|
||||
const catalogBaseUrl = canonicalUrl.replace(/\/$/, '');
|
||||
const sourceCodeEntity = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareSourceCode',
|
||||
name: SITE_NAME,
|
||||
description: `Installable GitHub library of ${formattedCount}+ agentic skills, specialized plugins, bundles, and workflows for AI coding assistants.`,
|
||||
description: `AAS Core preview is a local agent-first control plane for recommending, validating, and planning exact skill stacks backed by ${formattedCount}+ agentic skills.`,
|
||||
url: REPOSITORY_URL,
|
||||
sameAs: [...new Set([
|
||||
canonicalUrl,
|
||||
@@ -423,6 +423,10 @@ function buildHomeMeta({ catalogCount, imageUrl, canonicalUrl }) {
|
||||
'Antigravity CLI skills',
|
||||
'GitHub AI skills repository',
|
||||
'AI agent skills GitHub',
|
||||
'AAS Core',
|
||||
'skill recommendation',
|
||||
'agent stack',
|
||||
'Model Context Protocol',
|
||||
'specialized plugins',
|
||||
'SKILL.md',
|
||||
],
|
||||
@@ -596,15 +600,15 @@ function buildPluginsMeta({ pluginCount, imageUrl, canonicalUrl }) {
|
||||
}
|
||||
|
||||
function buildWorkbenchMeta({ imageUrl, canonicalUrl }) {
|
||||
const title = 'Stack Review Workbench | Agentic Awesome Skills';
|
||||
const description = 'Review an AAS stack manifest and immutable plan locally in your browser. Imports stay in memory and cannot install or apply changes.';
|
||||
const title = 'AAS Core Stack Review | Agentic Awesome Skills';
|
||||
const description = 'Review an AAS Core stack manifest and immutable preview plan locally in your browser. Imports stay in memory and cannot install or apply changes.';
|
||||
const catalogBaseUrl = canonicalUrl.replace(/\/workbench\/?$/, '');
|
||||
const catalogRootUrl = `${catalogBaseUrl}/`;
|
||||
const sourceCodeEntity = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareSourceCode',
|
||||
name: SITE_NAME,
|
||||
description: 'Canonical repository of installable agent skills and machine-readable registry evidence.',
|
||||
description: 'Canonical source for AAS Core, its local MCP and CLI, and the supporting skills catalog and registry evidence.',
|
||||
url: REPOSITORY_URL,
|
||||
sameAs: [canonicalUrl, catalogRootUrl, 'https://www.npmjs.com/package/agentic-awesome-skills'],
|
||||
mainEntityOfPage: canonicalUrl,
|
||||
@@ -627,7 +631,7 @@ function buildWorkbenchMeta({ imageUrl, canonicalUrl }) {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'WebPage',
|
||||
name: 'Agentic Awesome Skills Workbench',
|
||||
headline: 'Review what your agent chose',
|
||||
headline: 'Review what AAS Core recommended',
|
||||
description,
|
||||
url: canonicalUrl,
|
||||
mainEntityOfPage: canonicalUrl,
|
||||
@@ -684,7 +688,7 @@ function buildTopicLandingMeta({ page, featuredSkills = [], imageUrl, canonicalU
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareSourceCode',
|
||||
name: SITE_NAME,
|
||||
description: 'Installable GitHub library of agentic skills, specialized plugins, bundles, and workflows for AI coding assistants.',
|
||||
description: 'AAS Core preview is a local agent-first control plane backed by an evidence-rich catalog of agentic skills.',
|
||||
url: REPOSITORY_URL,
|
||||
sameAs: [...new Set([
|
||||
canonicalUrl,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import fs from 'node:fs';
|
||||
import crypto from 'node:crypto';
|
||||
import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
@@ -190,11 +191,20 @@ function parseCliArgs(argv) {
|
||||
return args;
|
||||
}
|
||||
|
||||
function getPackageReleaseLabel() {
|
||||
function getPackageReleaseMetadata() {
|
||||
const raw = readFile(path.join(REPO_ROOT_DIR, 'package.json'), REPO_ROOT_DIR);
|
||||
const pkg = JSON.parse(raw);
|
||||
assert(typeof pkg.version === 'string' && pkg.version.trim(), 'Root package.json must define version.');
|
||||
return `V${pkg.version.trim()}`;
|
||||
assert(
|
||||
Number.isInteger(pkg.aasCore?.includedFromMajor) && pkg.aasCore.includedFromMajor > 0,
|
||||
'Root package.json must define aasCore.includedFromMajor.',
|
||||
);
|
||||
const major = Number.parseInt(pkg.version.split('.')[0], 10);
|
||||
assert(Number.isInteger(major), 'Root package.json version must begin with a major number.');
|
||||
return {
|
||||
label: `V${pkg.version.trim()}`,
|
||||
coreIncluded: major >= pkg.aasCore.includedFromMajor,
|
||||
};
|
||||
}
|
||||
|
||||
function extractMetaContent(htmlText, selectorType, selectorValue) {
|
||||
@@ -724,8 +734,9 @@ export function assertIndexDiscoveryMeta(htmlText, { expectedSkillCountLabel = '
|
||||
combined.includes(expectedSkillCountLabel),
|
||||
`Home SEO metadata must expose the current ${expectedSkillCountLabel} skill count.`,
|
||||
);
|
||||
assert(combined.includes('GitHub library'), 'Home SEO metadata must mention the GitHub library.');
|
||||
assert(combined.includes('specialized plugins'), 'Home SEO metadata must mention specialized plugins.');
|
||||
assert(combined.includes('AAS Core'), 'Home SEO metadata must lead with AAS Core.');
|
||||
assert(combined.includes('preview'), 'Home SEO metadata must state the preview boundary.');
|
||||
assert(combined.includes('catalog'), 'Home SEO metadata must identify the supporting catalog.');
|
||||
assert(!combined.includes('prompt templates'), 'Home SEO metadata must not use stale prompt-template positioning.');
|
||||
assertOnlyExpectedSkillCountLabel(combined, expectedSkillCountLabel, 'Home SEO metadata');
|
||||
const jsonLdText = JSON.stringify(extractJsonLdEntries(htmlText));
|
||||
@@ -751,8 +762,9 @@ export function assertStaticIndexShell(htmlText, { expectedSkillCountLabel = '1,
|
||||
combined.includes(expectedSkillCountLabel),
|
||||
`Source index shell must expose the current ${expectedSkillCountLabel} skill count.`,
|
||||
);
|
||||
assert(combined.includes('GitHub library'), 'Source index shell must mention the GitHub library.');
|
||||
assert(combined.includes('specialized plugins'), 'Source index shell must mention specialized plugins.');
|
||||
assert(combined.includes('AAS Core'), 'Source index shell must lead with AAS Core.');
|
||||
assert(combined.includes('preview'), 'Source index shell must state the preview boundary.');
|
||||
assert(combined.includes('catalog'), 'Source index shell must identify the supporting catalog.');
|
||||
assertOnlyExpectedSkillCountLabel(combined, expectedSkillCountLabel, 'Source index shell');
|
||||
if (requireHostedUrl) {
|
||||
assertNoLocalhostUrl(combined, 'Source index shell');
|
||||
@@ -786,6 +798,19 @@ export function assertSocialCard(cardData, { expectedSkillCountLabel = '1,678+'
|
||||
assertOnlyExpectedSkillCountLabel(text, expectedSkillCountLabel, 'Social card');
|
||||
}
|
||||
|
||||
export function assertSocialCardProvenance(cardData, provenanceText) {
|
||||
const provenance = JSON.parse(String(provenanceText ?? ''));
|
||||
const { width, height } = readPngDimensions(cardData);
|
||||
const digest = crypto.createHash('sha256').update(cardData).digest('hex');
|
||||
|
||||
assert(provenance.schemaVersion === 1, 'Social card provenance must use schema version 1.');
|
||||
assert(provenance.generator === 'OpenAI ImageGen', 'Social card provenance must identify OpenAI ImageGen.');
|
||||
assert(provenance.dimensions?.width === width && provenance.dimensions?.height === height, 'Social card provenance dimensions must match the PNG.');
|
||||
assert(provenance.sha256 === digest, 'Social card provenance SHA-256 must match the PNG.');
|
||||
assert(Array.isArray(provenance.visibleCopy) && provenance.visibleCopy.includes('AAS Core'), 'Social card provenance must preserve AAS Core as the primary visible product.');
|
||||
assert(provenance.visibleCopy.includes('profile → stack → plan'), 'Social card provenance must preserve the Core workflow.');
|
||||
}
|
||||
|
||||
export function assertPluginsDiscoveryMeta(htmlText) {
|
||||
const title = extractTitle(htmlText);
|
||||
const description = extractMetaContent(htmlText, 'name', 'description') || '';
|
||||
@@ -869,7 +894,7 @@ export function assertPrerenderedWorkbenchRoutes(workbenchUrls, distDir = 'dist'
|
||||
`Missing prerendered page for workbench route: ${parsed.pathname}. Expected ${filePath}.`,
|
||||
);
|
||||
const html = readFile(filePath, distDir);
|
||||
assert(extractTitle(html).includes('Stack Review Workbench'), 'Workbench prerender must expose its exact review product title.');
|
||||
assert(extractTitle(html).includes('AAS Core Stack Review'), 'Workbench prerender must expose its AAS Core review title.');
|
||||
assert(extractMetaContent(html, 'name', 'description')?.includes('Imports stay in memory'), 'Workbench prerender must describe in-memory review.');
|
||||
}
|
||||
}
|
||||
@@ -910,10 +935,14 @@ export function assertRobots(robotsText, { expectedSitemapUrl = '' } = {}) {
|
||||
assert(allowsAiSearchCrawlers, 'robots.txt must explicitly expose AI search crawler directives.');
|
||||
}
|
||||
|
||||
export function assertLlms(llmsText, { expectedSkillCountLabel = '1,678+', expectedReleaseLabel = '' } = {}) {
|
||||
export function assertLlms(
|
||||
llmsText,
|
||||
{ expectedSkillCountLabel = '1,678+', expectedReleaseLabel = '', expectedCoreIncluded = false } = {},
|
||||
) {
|
||||
const text = String(llmsText ?? '');
|
||||
const requiredSnippets = [
|
||||
'# Agentic Awesome Skills',
|
||||
'AAS Core preview',
|
||||
expectedSkillCountLabel,
|
||||
'specialized plugins',
|
||||
'Claude Code',
|
||||
@@ -921,6 +950,7 @@ export function assertLlms(llmsText, { expectedSkillCountLabel = '1,678+', expec
|
||||
'https://github.com/sickn33/agentic-awesome-skills',
|
||||
'https://sickn33.github.io/agentic-awesome-skills/workbench',
|
||||
'Canonical source of truth',
|
||||
expectedCoreIncluded ? 'includes AAS Core' : 'predates AAS Core',
|
||||
];
|
||||
|
||||
for (const snippet of requiredSnippets) {
|
||||
@@ -975,7 +1005,7 @@ export function runVerification({
|
||||
socialImagePath = safeUserPath(socialImagePath);
|
||||
distDir = safeUserPath(distDir);
|
||||
|
||||
const expectedReleaseLabel = getPackageReleaseLabel();
|
||||
const releaseMetadata = getPackageReleaseMetadata();
|
||||
const sitemapText = readFile(sitemapPath);
|
||||
const sitemapReport = analyzeSitemap(sitemapText, { minSkillUrls, requireHostedUrl });
|
||||
const indexHtml = readFile(indexPath);
|
||||
@@ -996,11 +1026,18 @@ export function runVerification({
|
||||
const sourceIndexHtml = readFile(sourceIndexPath);
|
||||
assertStaticIndexShell(sourceIndexHtml, { expectedSkillCountLabel, requireHostedUrl });
|
||||
assertWebmasterVerificationMeta(sourceIndexHtml);
|
||||
assertSocialCard(readBinaryFile(socialImagePath), { expectedSkillCountLabel });
|
||||
const socialCard = readBinaryFile(socialImagePath);
|
||||
assertSocialCard(socialCard, { expectedSkillCountLabel });
|
||||
const socialCardProvenancePath = path.join(path.dirname(socialImagePath), 'social-card.provenance.json');
|
||||
assertSocialCardProvenance(socialCard, readFile(socialCardProvenancePath));
|
||||
assertRobots(readFile(robotsPath), {
|
||||
expectedSitemapUrl: new URL('sitemap.xml', sitemapReport.rootUrl).href,
|
||||
});
|
||||
assertLlms(readFile(llmsPath), { expectedSkillCountLabel, expectedReleaseLabel });
|
||||
assertLlms(readFile(llmsPath), {
|
||||
expectedSkillCountLabel,
|
||||
expectedReleaseLabel: releaseMetadata.label,
|
||||
expectedCoreIncluded: releaseMetadata.coreIncluded,
|
||||
});
|
||||
assertManifest(readFile(manifestPath));
|
||||
if (requireHostedUrl) {
|
||||
assertNoLocalhostUrl(sitemapText, 'Sitemap');
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
assertRobots,
|
||||
assertSitemap,
|
||||
assertSocialCard,
|
||||
assertSocialCardProvenance,
|
||||
extractSitemapLocations,
|
||||
} from './verify-seo-assets.js';
|
||||
|
||||
@@ -634,7 +635,9 @@ describe('seo assets verification helpers', () => {
|
||||
it('requires llms.txt discovery signals', () => {
|
||||
const llms = `
|
||||
# Agentic Awesome Skills
|
||||
AAS Core preview
|
||||
Current release: V1.2.3.
|
||||
The published package predates AAS Core.
|
||||
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
|
||||
https://github.com/sickn33/agentic-awesome-skills
|
||||
https://sickn33.github.io/agentic-awesome-skills/workbench
|
||||
@@ -647,7 +650,9 @@ describe('seo assets verification helpers', () => {
|
||||
it('rejects stale llms.txt release labels', () => {
|
||||
const llms = `
|
||||
# Agentic Awesome Skills
|
||||
AAS Core preview
|
||||
Current release: V1.2.2.
|
||||
The published package predates AAS Core.
|
||||
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
|
||||
https://github.com/sickn33/agentic-awesome-skills
|
||||
https://sickn33.github.io/agentic-awesome-skills/workbench
|
||||
@@ -657,6 +662,28 @@ describe('seo assets verification helpers', () => {
|
||||
expect(() => assertLlms(llms, { expectedReleaseLabel: 'V1.2.3' })).toThrow('current release');
|
||||
});
|
||||
|
||||
it('requires Core-capable release language when the package includes Core', () => {
|
||||
const llms = `
|
||||
# Agentic Awesome Skills
|
||||
AAS Core preview
|
||||
Current release: V15.0.0.
|
||||
This release includes AAS Core.
|
||||
1,678+ agentic skills with specialized plugins for Claude Code and Codex CLI.
|
||||
https://github.com/sickn33/agentic-awesome-skills
|
||||
https://sickn33.github.io/agentic-awesome-skills/workbench
|
||||
Canonical source of truth: the GitHub repository is the primary project URL.
|
||||
`;
|
||||
|
||||
expect(() => assertLlms(llms, {
|
||||
expectedReleaseLabel: 'V15.0.0',
|
||||
expectedCoreIncluded: true,
|
||||
})).not.toThrow();
|
||||
expect(() => assertLlms(llms, {
|
||||
expectedReleaseLabel: 'V15.0.0',
|
||||
expectedCoreIncluded: false,
|
||||
})).toThrow('predates AAS Core');
|
||||
});
|
||||
|
||||
it('requires social image tags in rendered index html', () => {
|
||||
const html = `
|
||||
<html>
|
||||
@@ -675,12 +702,12 @@ describe('seo assets verification helpers', () => {
|
||||
const html = `
|
||||
<html>
|
||||
<head>
|
||||
<title>Agentic Awesome Skills GitHub | 1,678+ AI coding skills</title>
|
||||
<meta name="description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta property="og:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta property="og:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta name="twitter:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta name="twitter:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<title>AAS Core Preview | Agent-first stacks backed by 1,678+ skills</title>
|
||||
<meta name="description" content="Use AAS Core preview to recommend and plan exact stacks backed by 1,678+ cataloged skills." />
|
||||
<meta property="og:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta property="og:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
<meta name="twitter:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta name="twitter:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
<script type="application/ld+json">
|
||||
[
|
||||
{"@context":"https://schema.org","@type":"CollectionPage","sameAs":"https://github.com/sickn33/agentic-awesome-skills"},
|
||||
@@ -701,12 +728,12 @@ describe('seo assets verification helpers', () => {
|
||||
const html = `
|
||||
<html>
|
||||
<head>
|
||||
<title>Agentic Awesome Skills GitHub | 1,678+ AI coding skills</title>
|
||||
<meta name="description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta property="og:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta property="og:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta name="twitter:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta name="twitter:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<title>AAS Core Preview | Agent-first stacks backed by 1,678+ skills</title>
|
||||
<meta name="description" content="Use AAS Core preview to recommend and plan exact stacks backed by 1,678+ cataloged skills." />
|
||||
<meta property="og:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta property="og:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
<meta name="twitter:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta name="twitter:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
<script type="application/ld+json">
|
||||
[
|
||||
{"@context":"https://schema.org","@type":"CollectionPage","sameAs":"https://github.com/sickn33/agentic-awesome-skills"},
|
||||
@@ -727,12 +754,12 @@ describe('seo assets verification helpers', () => {
|
||||
const html = `
|
||||
<html>
|
||||
<head>
|
||||
<title>Agentic Awesome Skills GitHub | 1,678+ AI coding skills</title>
|
||||
<meta name="description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta property="og:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta property="og:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<meta name="twitter:title" content="Agentic Awesome Skills GitHub | 1,678+ AI coding skills" />
|
||||
<meta name="twitter:description" content="Explore the GitHub library of 1,678+ installable agentic skills, specialized plugins, bundles, and workflows." />
|
||||
<title>AAS Core Preview | Agent-first stacks backed by 1,678+ skills</title>
|
||||
<meta name="description" content="Use AAS Core preview to recommend and plan exact stacks backed by 1,678+ cataloged skills." />
|
||||
<meta property="og:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta property="og:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
<meta name="twitter:title" content="AAS Core Preview | Agent-first stacks backed by 1,678+ skills" />
|
||||
<meta name="twitter:description" content="Use AAS Core preview with the supporting catalog." />
|
||||
</head>
|
||||
</html>
|
||||
`;
|
||||
@@ -762,6 +789,24 @@ describe('seo assets verification helpers', () => {
|
||||
expect(() => assertSocialCard(png)).not.toThrow();
|
||||
});
|
||||
|
||||
it('binds an ImageGen social card to its provenance record', () => {
|
||||
const png = Buffer.alloc(24);
|
||||
Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]).copy(png, 0);
|
||||
png.write('IHDR', 12, 'ascii');
|
||||
png.writeUInt32BE(1200, 16);
|
||||
png.writeUInt32BE(630, 20);
|
||||
const provenance = JSON.stringify({
|
||||
schemaVersion: 1,
|
||||
generator: 'OpenAI ImageGen',
|
||||
dimensions: { width: 1200, height: 630 },
|
||||
sha256: '763d6b5763eb64e1310fc3d6b27291a4c7b3fa6d03e9cb3f71d79ddba25f58fc',
|
||||
visibleCopy: ['AAS Core', 'profile → stack → plan'],
|
||||
});
|
||||
|
||||
expect(() => assertSocialCardProvenance(png, provenance)).not.toThrow();
|
||||
expect(() => assertSocialCardProvenance(png, provenance.replace('763d6b', '000000'))).toThrow('SHA-256');
|
||||
});
|
||||
|
||||
it('rejects stale social card count labels', () => {
|
||||
const svg = `
|
||||
<svg>
|
||||
@@ -863,7 +908,7 @@ describe('seo assets verification helpers', () => {
|
||||
fs.mkdirSync(path.dirname(routeFile), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
routeFile,
|
||||
'<html><head><title>Stack Review Workbench | Agentic Awesome Skills</title><meta name="description" content="Review an AAS stack and plan. Imports stay in memory and cannot install or apply changes." /></head></html>',
|
||||
'<html><head><title>AAS Core Stack Review | Agentic Awesome Skills</title><meta name="description" content="Review an AAS Core stack and plan. Imports stay in memory and cannot install or apply changes." /></head></html>',
|
||||
);
|
||||
|
||||
const xml = `
|
||||
|
||||
Reference in New Issue
Block a user