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
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ body:
id: version
attributes:
label: stackmap version
description: "`npx @hyamero/stackmap --version`, or the version in the skill's SKILL.md"
description: "`npx @omsimos/stackmap --version`, or the version in the skill's SKILL.md"
validations:
required: true
- type: input
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Report a security vulnerability
url: https://github.com/hyamero/stackmap/security/advisories/new
url: https://github.com/omsimos/stackmap/security/advisories/new
about: Please report security issues privately, not as a public issue.
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ bun run test && bun run typecheck && bun run build # unit tests, types, viewer
| `packages/schema` | Zod schema → `stackmap.schema.json`, the validator and its diagnostics |
| `packages/layout` | ELK wrapper and stackmap's own lane and sequence layout: diagram → absolute geometry |
| `packages/viewer` | React viewer, built into one self-contained HTML template |
| `packages/cli` | `@hyamero/stackmap`: validate · deliver · serve (the only published package) |
| `packages/cli` | `@omsimos/stackmap`: validate · deliver · serve (the only published package) |
| `skill/` | the agent skill that `npx skills add` installs: `SKILL.md`, the schema reference, examples |
| `site/` | `@stackmap/site`: the website (Next.js), deployed on Vercel; never published |

Expand Down Expand Up @@ -92,11 +92,11 @@ workflow's `release` job runs them after the checks pass.

- **Release candidates:** every push to `staging` with a `feat`, `fix` or `perf` commit since the last release
publishes `x.y.z-rc.N` to npm under the `rc` tag, with a GitHub prerelease. Try one with
`npx @hyamero/stackmap@rc`.
`npx @omsimos/stackmap@rc`.
- **Releases:** merging `staging` into `main` with a **merge commit** publishes `x.y.z` under `latest`, with a
GitHub release. Don't squash or rebase this merge: the release candidates' tags must stay in `main`'s history,
or the next version is miscounted.
- **The version is pinned in the repo:** the skill runs an exact CLI version (`npx -y @hyamero/stackmap@x.y.z`),
- **The version is pinned in the repo:** the skill runs an exact CLI version (`npx -y @omsimos/stackmap@x.y.z`),
and the JSON Schema id and the examples name it too. On a release, `scripts/set-version.mjs` updates them all,
the bot commits `chore(release): x.y.z [skip ci]` to `main`, and then merges `main` back into `staging`.
Release candidates only change the published package, so the repo keeps the last release's version between
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
</p>

<p align="center">
<a href="https://www.npmjs.com/package/@hyamero/stackmap"><img alt="npm" src="https://img.shields.io/npm/v/@hyamero/stackmap?color=cb3837&amp;logo=npm"></a>
<a href="https://github.com/hyamero/stackmap/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/hyamero/stackmap/actions/workflows/ci.yml/badge.svg?branch=main"></a>
<a href="LICENSE"><img alt="MIT licence" src="https://img.shields.io/github/license/hyamero/stackmap"></a>
<a href="https://www.npmjs.com/package/@omsimos/stackmap"><img alt="npm" src="https://img.shields.io/npm/v/@omsimos/stackmap?color=cb3837&amp;logo=npm"></a>
<a href="https://github.com/omsimos/stackmap/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/omsimos/stackmap/actions/workflows/ci.yml/badge.svg?branch=main"></a>
<a href="LICENSE"><img alt="MIT licence" src="https://img.shields.io/github/license/omsimos/stackmap"></a>
</p>

<p align="center">
Expand All @@ -26,7 +26,7 @@ https://github.com/user-attachments/assets/4dd05dfc-fa5a-42e7-ad1a-6150aeb9ad9f
Install the skill into your agent (Claude Code, Cursor, Codex and [others](https://github.com/vercel-labs/skills)):

```bash
npx skills add hyamero/stackmap
npx skills add omsimos/stackmap
```

Then ask:
Expand Down Expand Up @@ -63,7 +63,7 @@ The agent writes `.stackmap/<name>/diagram.json`, validates and repairs it, and

```json
{
"$schema": "https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json",
"$schema": "https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json",
"kind": "architecture",
"title": "Bookshop",
"direction": "DOWN",
Expand Down Expand Up @@ -96,9 +96,9 @@ Full reference: [skill/references/schema.md](skill/references/schema.md), or the
The skill runs the CLI for you, and it works on its own too (Node 22.12 or later):

```bash
npx @hyamero/stackmap validate diagram.json [--json] # diagnostics with fixes; exit 1 on errors
npx @hyamero/stackmap deliver diagram.json [-o out.html] [--open] # validate → layout → one offline HTML file
npx @hyamero/stackmap serve diagram.json [--port 4400] # live viewer that reloads on every save
npx @omsimos/stackmap validate diagram.json [--json] # diagnostics with fixes; exit 1 on errors
npx @omsimos/stackmap deliver diagram.json [-o out.html] [--open] # validate → layout → one offline HTML file
npx @omsimos/stackmap serve diagram.json [--port 4400] # live viewer that reloads on every save
```

- **validate** lists every problem with a code, its evidence and the allowed fixes, including card text that won't fit. It exits `1` when the diagram has errors and `2` on usage, IO or internal errors.
Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
## Reporting a vulnerability

Please report security issues privately through GitHub:
[**Report a vulnerability**](https://github.com/hyamero/stackmap/security/advisories/new). Don't open a public
[**Report a vulnerability**](https://github.com/omsimos/stackmap/security/advisories/new). Don't open a public
issue or pull request for them.

Include what an attacker could do, the stackmap version (`npx @hyamero/stackmap --version`), and a diagram or steps
Include what an attacker could do, the stackmap version (`npx @omsimos/stackmap --version`), and a diagram or steps
that reproduce it. You'll get a reply within a week. Once a fix is released, the advisory is published with credit
to you unless you'd rather stay anonymous.

Expand Down
Binary file modified assets/brand/stackmap-github-preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/brand/stackmap-social-card-light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/brand/stackmap-social-card.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 bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"scripts": {
"test": "bun run --filter './packages/*' test",
"typecheck": "bun run --filter './packages/*' typecheck",
"build": "bun run --filter @stackmap/viewer build && bun run --filter @hyamero/stackmap build"
"build": "bun run --filter @stackmap/viewer build && bun run --filter @omsimos/stackmap build"
},
"devDependencies": {
"@commitlint/cli": "^21.2.3",
Expand Down
11 changes: 7 additions & 4 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "@hyamero/stackmap",
"name": "@omsimos/stackmap",
"version": "0.2.0",
"description": "Interactive system diagrams your coding agent writes, as one offline HTML file",
"keywords": [
Expand All @@ -11,15 +11,18 @@
"elk",
"offline",
"html",
"dataflow"
"dataflow",
"workflow",
"lifecycle",
"sequence"
],
"homepage": "https://stackmap.omsimos.com",
"repository": {
"type": "git",
"url": "git+https://github.com/hyamero/stackmap.git",
"url": "git+https://github.com/omsimos/stackmap.git",
"directory": "packages/cli"
},
"bugs": "https://github.com/hyamero/stackmap/issues",
"bugs": "https://github.com/omsimos/stackmap/issues",
"license": "MIT",
"type": "module",
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/scripts/prepack.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ for (const f of ['README.md', 'LICENSE', 'THIRD_PARTY_NOTICES.md']) copyFileSync

// npm resolves relative images against the package, not the repo root: point the README's images at GitHub.
const readme = new URL('../README.md', import.meta.url);
const raw = 'https://raw.githubusercontent.com/hyamero/stackmap/main/';
const raw = 'https://raw.githubusercontent.com/omsimos/stackmap/main/';
writeFileSync(readme, readFileSync(readme, 'utf8').replace(/(src|srcset)="(assets\/[^"]+)"/g, `$1="${raw}$2"`));
8 changes: 7 additions & 1 deletion packages/cli/test/skill.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { readdirSync, readFileSync } from 'node:fs';
import { describe, expect, it } from 'vitest';
import { DIAGRAM_KINDS } from '@stackmap/core';
import { SCHEMA_ID } from '@stackmap/schema';

const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as { name: string; version: string };
Expand All @@ -10,7 +11,7 @@ const pinned = `${pkg.name}@${pkg.version}`;
describe('skill ↔ CLI version', () => {
it('SKILL.md runs exactly this CLI version', () => {
const md = skill('SKILL.md');
const pins = [...md.matchAll(/@hyamero\/stackmap@[\w.-]+/g)].map((m) => m[0]);
const pins = [...md.matchAll(/@omsimos\/stackmap@[\w.-]+/g)].map((m) => m[0]);
expect(pins.length).toBeGreaterThan(0);
expect(new Set(pins)).toEqual(new Set([pinned]));
expect(md).toContain(`version: "${pkg.version}"`);
Expand All @@ -24,6 +25,11 @@ describe('skill ↔ CLI version', () => {
});

describe('package.json', () => {
it('names every diagram kind in its npm keywords, so a search for any of them finds the package', () => {
const { keywords } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as { keywords: string[] };
for (const kind of DIAGRAM_KINDS) expect(keywords, kind).toContain(kind);
});

it('declares bin paths the way npm publish accepts them (no "./" prefix, or npm drops the bin)', () => {
const { bin } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) as { bin: Record<string, string> };
expect(bin).toEqual({ stackmap: 'dist/cli.js' });
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/samples/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export const commerceApi: DiagramDraft = {
kind: 'architecture',
title: 'Commerce API',
subtitle: 'Production topology',
source: { url: 'https://github.com/hyamero/stackmap/blob/main' },
source: { url: 'https://github.com/omsimos/stackmap/blob/main' },
direction: 'RIGHT',
nodes: [
{
Expand Down
4 changes: 2 additions & 2 deletions packages/schema/src/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ const View = z.strictObject({

export const DiagramDraftSchema = z
.strictObject({
$schema: z.string().optional().meta({ description: `Optional; set it to ${'`'}https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json${'`'} for editor completion.` }),
$schema: z.string().optional().meta({ description: `Optional; set it to ${'`'}https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json${'`'} for editor completion.` }),
kind: z.enum(DIAGRAM_KINDS),
density: z
.enum(['compact'])
Expand Down Expand Up @@ -145,7 +145,7 @@ export const DiagramDraftSchema = z
.meta({ title: 'stackmap diagram', description: 'Agent-authored diagram. Layout is computed by stackmap; never give coordinates.' });

/** Served from the published CLI package, so it is pinned to the same version as the validator. */
export const SCHEMA_ID = 'https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json';
export const SCHEMA_ID = 'https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json';

export function buildJsonSchema(): Record<string, unknown> {
return { ...z.toJSONSchema(DiagramDraftSchema, { target: 'draft-2020-12' }), $id: SCHEMA_ID };
Expand Down
4 changes: 2 additions & 2 deletions packages/schema/stackmap.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"type": "object",
"properties": {
"$schema": {
"description": "Optional; set it to `https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json` for editor completion.",
"description": "Optional; set it to `https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json` for editor completion.",
"type": "string"
},
"kind": {
Expand Down Expand Up @@ -510,5 +510,5 @@
"additionalProperties": false,
"title": "stackmap diagram",
"description": "Agent-authored diagram. Layout is computed by stackmap; never give coordinates.",
"$id": "https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json"
"$id": "https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json"
}
2 changes: 1 addition & 1 deletion packages/viewer/e2e/explore.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ test('clicking a card selects it: inspector shows its data, connections and evid
await expect(panel.getByText('Read replicas', { exact: true })).toBeVisible();
await expect(panel.getByRole('list', { name: 'Connections' }).getByRole('button')).toHaveCount(3);
const link = panel.getByRole('link', { name: 'infra/orders/postgres.tf:12' });
await expect(link).toHaveAttribute('href', 'https://github.com/hyamero/stackmap/blob/main/infra/orders/postgres.tf#L12');
await expect(link).toHaveAttribute('href', 'https://github.com/omsimos/stackmap/blob/main/infra/orders/postgres.tf#L12');
await expect(panel.getByText('Primary + 2 read replicas')).toBeVisible();
// Its direct edges take the source (service) tint.
await expect(page.locator('path[data-edge-id="e-1-orders"]')).toHaveAttribute('data-tint', 'service');
Expand Down
4 changes: 2 additions & 2 deletions packages/viewer/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
<html lang="en">
<head>
<!--
stackmap viewer (MIT) · https://github.com/hyamero/stackmap
stackmap viewer (MIT) · https://github.com/omsimos/stackmap
Includes React (MIT, Meta Platforms, Inc. and affiliates), d3 modules (ISC/BSD-3-Clause, Mike Bostock),
lucide (ISC, Lucide Contributors), html-to-image (MIT, W.Y.), Simple Icons (CC0-1.0) and the Geist and
Geist Mono fonts (SIL OFL 1.1, The Geist Project Authors).
Full notices: https://github.com/hyamero/stackmap/blob/main/THIRD_PARTY_NOTICES.md
Full notices: https://github.com/omsimos/stackmap/blob/main/THIRD_PARTY_NOTICES.md
-->
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
Expand Down
2 changes: 1 addition & 1 deletion packages/viewer/src/samples/commerce-api.layout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const commerceApiLayout: LaidOutDiagram = {
"title": "Commerce API",
"subtitle": "Production topology",
"source": {
"url": "https://github.com/hyamero/stackmap/blob/main"
"url": "https://github.com/omsimos/stackmap/blob/main"
},
"direction": "RIGHT",
"nodes": [
Expand Down
10 changes: 5 additions & 5 deletions scripts/set-version.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Sets the release version everywhere it is pinned: the CLI's package.json and lockfile entry, and every
// `@hyamero/stackmap@x.y.z` in tracked files (the skill's npx commands, the JSON Schema id, the examples).
// `@omsimos/stackmap@x.y.z` in tracked files (the skill's npx commands, the JSON Schema id, the examples).
// semantic-release runs it before packing; `skill.test.ts` checks the pins agree. Usage: node scripts/set-version.mjs <version>
import { execFileSync } from 'node:child_process';
import { readFileSync, writeFileSync } from 'node:fs';
Expand All @@ -23,12 +23,12 @@ const changed = [];
// Only the version line, so the rest of each file keeps its formatting.
if (edit('packages/cli/package.json', (s) => s.replace(/^( "version": )"[^"]+"/m, `$1"${version}"`))) changed.push('packages/cli/package.json');
// `bun install --frozen-lockfile` fails when a workspace's version no longer matches its lockfile entry.
if (edit('bun.lock', (s) => s.replace(/("packages\/cli": \{\s*"name": "@hyamero\/stackmap",\s*"version": )"[^"]+"/, `$1"${version}"`))) changed.push('bun.lock');
if (edit('bun.lock', (s) => s.replace(/("packages\/cli": \{\s*"name": "@omsimos\/stackmap",\s*"version": )"[^"]+"/, `$1"${version}"`))) changed.push('bun.lock');
if (edit('skill/SKILL.md', (s) => s.replace(/^( version: )"[^"]+"/m, `$1"${version}"`))) changed.push('skill/SKILL.md');

const pin = /@hyamero\/stackmap@\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/g;
const tracked = execFileSync('git', ['grep', '-lE', '@hyamero/stackmap@[0-9]', '--', ':!bun.lock'], { cwd: root, encoding: 'utf8' });
const pin = /@omsimos\/stackmap@\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/g;
const tracked = execFileSync('git', ['grep', '-lE', '@omsimos/stackmap@[0-9]', '--', ':!bun.lock'], { cwd: root, encoding: 'utf8' });
for (const path of tracked.split('\n').filter(Boolean))
if (edit(path, (s) => s.replace(pin, `@hyamero/stackmap@${version}`)) && !changed.includes(path)) changed.push(path);
if (edit(path, (s) => s.replace(pin, `@omsimos/stackmap@${version}`)) && !changed.includes(path)) changed.push(path);

console.log(`stackmap ${version}: ${changed.length ? changed.join(', ') : 'already set'}`);
2 changes: 1 addition & 1 deletion site/app/docs/cli/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export const metadata: Metadata = {
};

const DEMO = '.stackmap/commerce-api/diagram.json';
const npx = `npx @hyamero/stackmap@${SITE.version}`;
const npx = `npx @omsimos/stackmap@${SITE.version}`;

function Synopsis({ name }: { name: (typeof CLI_COMMANDS)[number]['name'] }) {
const c = CLI_COMMANDS.find((x) => x.name === name)!;
Expand Down
2 changes: 1 addition & 1 deletion site/app/docs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export const metadata: Metadata = {

const ASK = 'Make an architecture diagram of this repository, backed by evidence from the code.';
// The agent's file pins the schema to the installed CLI, so the example does too.
const JSON_TEXT = SOURCES.quickStart.replace('{\n', `{\n "$schema": "https://unpkg.com/@hyamero/stackmap@${SITE.version}/dist/stackmap.schema.json",\n`);
const JSON_TEXT = SOURCES.quickStart.replace('{\n', `{\n "$schema": "https://unpkg.com/@omsimos/stackmap@${SITE.version}/dist/stackmap.schema.json",\n`);
const FILE = '.stackmap/commerce-api/diagram.json';

function Step({ n, id, title, children }: { n: number; id: string; title: string; children: React.ReactNode }) {
Expand Down
2 changes: 1 addition & 1 deletion site/app/docs/schema/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ export default function SchemaPage() {
<p>
<FileJson size={16} strokeWidth={1.75} className="ic" aria-hidden="true" />
<span>
Machine-readable: <a href={`https://unpkg.com/@hyamero/stackmap@${SITE.version}/dist/stackmap.schema.json`}>stackmap.schema.json</a>. Set it as{' '}
Machine-readable: <a href={`https://unpkg.com/@omsimos/stackmap@${SITE.version}/dist/stackmap.schema.json`}>stackmap.schema.json</a>. Set it as{' '}
<C>$schema</C> for completion in your editor.
</span>
</p>
Expand Down
Binary file modified site/app/opengraph-image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site/app/twitter-image.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 site/components/site/links.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const repo = 'https://github.com/hyamero/stackmap';
const repo = 'https://github.com/omsimos/stackmap';

export const LINKS = {
how: { label: 'How it works', href: '/#how' },
Expand All @@ -14,7 +14,7 @@ export const LINKS = {
// The film is the video in the README, hosted by GitHub.
film: { label: 'Launch film', href: `${repo}#readme` },
github: { label: 'GitHub', href: repo },
npm: { label: 'npm', href: 'https://www.npmjs.com/package/@hyamero/stackmap' },
npm: { label: 'npm', href: 'https://www.npmjs.com/package/@omsimos/stackmap' },
contributing: { label: 'Contributing', href: `${repo}/blob/main/CONTRIBUTING.md` },
security: { label: 'Security', href: `${repo}/blob/main/SECURITY.md` },
archify: { label: 'archify', href: 'https://github.com/tt-a1i/archify' },
Expand Down
4 changes: 2 additions & 2 deletions site/content/examples/repo-architecture.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"subtitle": "How an agent-written diagram.json becomes the delivered viewer",
"direction": "DOWN",
"source": {
"url": "https://github.com/hyamero/stackmap/blob/a2111f0590892de04f16c2d2f11ad877a502d89b"
"url": "https://github.com/omsimos/stackmap/blob/a2111f0590892de04f16c2d2f11ad877a502d89b"
},
"groups": [
{
Expand Down Expand Up @@ -61,7 +61,7 @@
"type": "service",
"group": "pipeline",
"card": {
"title": "@hyamero/stackmap",
"title": "@omsimos/stackmap",
"subtitle": "CLI: validate/deliver/serve",
"rows": [
{
Expand Down
2 changes: 1 addition & 1 deletion site/e2e/smoke.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ test('the docs copy button confirms', async ({ page, context }) => {
await page.goto('/docs');
await page.getByRole('button', { name: 'Copy the install command' }).click();
await expect(page.getByRole('button', { name: 'Copied' })).toBeVisible();
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe('npx skills add hyamero/stackmap');
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe('npx skills add omsimos/stackmap');
});

test('on a phone the nav menu opens the site links and closes on Escape', async ({ browser }) => {
Expand Down
Loading
Loading