diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 128e2c7..bd4e1ad 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -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 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 580ef78..05ef378 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -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. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 296a31c..99bb0db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 | @@ -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 diff --git a/LICENSE b/LICENSE index 92d4b89..a5e0916 100644 --- a/LICENSE +++ b/LICENSE @@ -19,32 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---------------------------------------------------------------------------- - -stackmap is a successor to archify (https://github.com/tt-a1i/archify). Parts -of the agent skill (skill/references/authoring-contract.md) are adapted from -archify's documentation, used under the following license: - -MIT License - -Copyright (c) 2026 tt-a1i (Archify) -Copyright (c) 2025 Cocoon AI - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 2f44a56..01fb59c 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@

- npm - CI - MIT licence + npm + CI + MIT licence

@@ -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: @@ -63,7 +63,7 @@ The agent writes `.stackmap//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", @@ -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. diff --git a/SECURITY.md b/SECURITY.md index 4a6f277..6e8041c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -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. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 49fc941..bc83a39 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -28,7 +28,32 @@ stackmap is MIT-licensed (see [LICENSE](LICENSE)). It builds on the work below. ## Adapted documentation -Parts of `skill/references/authoring-contract.md` are adapted from [archify](https://github.com/tt-a1i/archify), MIT, Copyright (c) 2026 tt-a1i (Archify), Copyright (c) 2025 Cocoon AI. The full notice is included in [LICENSE](LICENSE) and [skill/LICENSE](skill/LICENSE). +Parts of `skill/references/authoring-contract.md` are adapted from [archify](https://github.com/tt-a1i/archify), used under its license, which is reproduced below and in [skill/LICENSE](skill/LICENSE): + +```text +MIT License + +Copyright (c) 2026 tt-a1i (Archify) +Copyright (c) 2025 Cocoon AI + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` ## MIT license text (React, html-to-image, zod) diff --git a/assets/brand/stackmap-github-preview.png b/assets/brand/stackmap-github-preview.png index d0b914b..f5783ef 100644 Binary files a/assets/brand/stackmap-github-preview.png and b/assets/brand/stackmap-github-preview.png differ diff --git a/assets/brand/stackmap-social-card-light.png b/assets/brand/stackmap-social-card-light.png index aeee97a..7810f62 100644 Binary files a/assets/brand/stackmap-social-card-light.png and b/assets/brand/stackmap-social-card-light.png differ diff --git a/assets/brand/stackmap-social-card.png b/assets/brand/stackmap-social-card.png index ac20e3f..d775b0d 100644 Binary files a/assets/brand/stackmap-social-card.png and b/assets/brand/stackmap-social-card.png differ diff --git a/bun.lock b/bun.lock index 215484f..65116d9 100644 --- a/bun.lock +++ b/bun.lock @@ -20,7 +20,7 @@ }, }, "packages/cli": { - "name": "@hyamero/stackmap", + "name": "@omsimos/stackmap", "version": "0.2.0", "bin": { "stackmap": "./dist/cli.js", @@ -263,7 +263,7 @@ "@gsap/react": ["@gsap/react@2.1.2", "", { "peerDependencies": { "gsap": "^3.12.5", "react": ">=17" } }, "sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw=="], - "@hyamero/stackmap": ["@hyamero/stackmap@workspace:packages/cli"], + "@omsimos/stackmap": ["@omsimos/stackmap@workspace:packages/cli"], "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], diff --git a/package.json b/package.json index 79e557a..29ab25c 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/cli/package.json b/packages/cli/package.json index d41ff12..93f3bd9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -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": [ @@ -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": { diff --git a/packages/cli/scripts/prepack.mjs b/packages/cli/scripts/prepack.mjs index 8c909f9..9abf131 100644 --- a/packages/cli/scripts/prepack.mjs +++ b/packages/cli/scripts/prepack.mjs @@ -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"`)); diff --git a/packages/cli/test/skill.test.ts b/packages/cli/test/skill.test.ts index 71b73f7..4d35725 100644 --- a/packages/cli/test/skill.test.ts +++ b/packages/cli/test/skill.test.ts @@ -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 }; @@ -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}"`); @@ -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 }; expect(bin).toEqual({ stackmap: 'dist/cli.js' }); diff --git a/packages/core/src/samples/index.ts b/packages/core/src/samples/index.ts index e2068b5..5733531 100644 --- a/packages/core/src/samples/index.ts +++ b/packages/core/src/samples/index.ts @@ -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: [ { diff --git a/packages/schema/src/schema.ts b/packages/schema/src/schema.ts index 4462fa4..afd1281 100644 --- a/packages/schema/src/schema.ts +++ b/packages/schema/src/schema.ts @@ -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']) @@ -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 { return { ...z.toJSONSchema(DiagramDraftSchema, { target: 'draft-2020-12' }), $id: SCHEMA_ID }; diff --git a/packages/schema/stackmap.schema.json b/packages/schema/stackmap.schema.json index 1c2b733..06f3c79 100644 --- a/packages/schema/stackmap.schema.json +++ b/packages/schema/stackmap.schema.json @@ -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": { @@ -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" } diff --git a/packages/viewer/e2e/explore.spec.ts b/packages/viewer/e2e/explore.spec.ts index 4042c9c..37ae7b5 100644 --- a/packages/viewer/e2e/explore.spec.ts +++ b/packages/viewer/e2e/explore.spec.ts @@ -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'); diff --git a/packages/viewer/index.html b/packages/viewer/index.html index 08132a1..7c08cb0 100644 --- a/packages/viewer/index.html +++ b/packages/viewer/index.html @@ -2,11 +2,11 @@ diff --git a/packages/viewer/src/samples/commerce-api.layout.ts b/packages/viewer/src/samples/commerce-api.layout.ts index 2aac715..ed6a207 100644 --- a/packages/viewer/src/samples/commerce-api.layout.ts +++ b/packages/viewer/src/samples/commerce-api.layout.ts @@ -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": [ diff --git a/scripts/set-version.mjs b/scripts/set-version.mjs index 71aca31..2a09a3e 100644 --- a/scripts/set-version.mjs +++ b/scripts/set-version.mjs @@ -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 import { execFileSync } from 'node:child_process'; import { readFileSync, writeFileSync } from 'node:fs'; @@ -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'}`); diff --git a/site/app/docs/cli/page.tsx b/site/app/docs/cli/page.tsx index 1ff62da..5dd2346 100644 --- a/site/app/docs/cli/page.tsx +++ b/site/app/docs/cli/page.tsx @@ -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)!; diff --git a/site/app/docs/page.tsx b/site/app/docs/page.tsx index 53fb902..55dce03 100644 --- a/site/app/docs/page.tsx +++ b/site/app/docs/page.tsx @@ -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 }) { diff --git a/site/app/docs/schema/page.tsx b/site/app/docs/schema/page.tsx index 7dd26d8..258a58f 100644 --- a/site/app/docs/schema/page.tsx +++ b/site/app/docs/schema/page.tsx @@ -115,7 +115,7 @@ export default function SchemaPage() {

diff --git a/site/app/layout.tsx b/site/app/layout.tsx index 8c1a5bb..a104e9b 100644 --- a/site/app/layout.tsx +++ b/site/app/layout.tsx @@ -6,7 +6,7 @@ import { tokens } from '@stackmap/core'; import { DocsFooter, Footer } from '@/components/site/Footer'; import { FooterFor } from '@/components/site/FooterFor'; import { Nav } from '@/components/site/Nav'; -import { DESCRIPTION, OPEN_GRAPH, REPO, SITE_NAME, siteUrl } from '@/lib/seo'; +import { DESCRIPTION, OPEN_GRAPH, SITE_NAME, siteUrl } from '@/lib/seo'; import { THEME_SCRIPT, themeCss } from '@/lib/theme'; import './globals.css'; import './site.css'; @@ -16,7 +16,7 @@ export const metadata: Metadata = { title: { default: `${SITE_NAME} · Interactive system diagrams your coding agent writes`, template: `%s · ${SITE_NAME}` }, description: DESCRIPTION, applicationName: SITE_NAME, - authors: [{ name: 'hyamero', url: REPO }], + authors: [{ name: 'hyamero', url: 'https://github.com/hyamero' }], openGraph: OPEN_GRAPH, twitter: { card: 'summary_large_image' }, }; diff --git a/site/app/opengraph-image.png b/site/app/opengraph-image.png index ac20e3f..d775b0d 100644 Binary files a/site/app/opengraph-image.png and b/site/app/opengraph-image.png differ diff --git a/site/app/twitter-image.png b/site/app/twitter-image.png index ac20e3f..d775b0d 100644 Binary files a/site/app/twitter-image.png and b/site/app/twitter-image.png differ diff --git a/site/components/site/links.ts b/site/components/site/links.ts index ce45a66..f74b03c 100644 --- a/site/components/site/links.ts +++ b/site/components/site/links.ts @@ -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' }, @@ -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' }, diff --git a/site/content/examples/repo-architecture.json b/site/content/examples/repo-architecture.json index 769bad9..b37ffdc 100644 --- a/site/content/examples/repo-architecture.json +++ b/site/content/examples/repo-architecture.json @@ -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": [ { @@ -61,7 +61,7 @@ "type": "service", "group": "pipeline", "card": { - "title": "@hyamero/stackmap", + "title": "@omsimos/stackmap", "subtitle": "CLI: validate/deliver/serve", "rows": [ { diff --git a/site/e2e/smoke.spec.ts b/site/e2e/smoke.spec.ts index a7d4f6a..df1a341 100644 --- a/site/e2e/smoke.spec.ts +++ b/site/e2e/smoke.spec.ts @@ -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 }) => { diff --git a/site/lib/data/data.test.ts b/site/lib/data/data.test.ts index e4a35d4..66b278a 100644 --- a/site/lib/data/data.test.ts +++ b/site/lib/data/data.test.ts @@ -21,8 +21,8 @@ describe('version', () => { // Built, not written out: a literal pin would be rewritten by every release (see tests/no-pins.test.ts). const version = '1.2.3'; expect(installCommands(version)).toEqual({ - skill: 'npx skills add hyamero/stackmap', - cli: `npx @hyamero/stackmap@${version} deliver diagram.json`, + skill: 'npx skills add omsimos/stackmap', + cli: `npx @omsimos/stackmap@${version} deliver diagram.json`, }); }); }); diff --git a/site/lib/data/version.ts b/site/lib/data/version.ts index 99fc821..4451e08 100644 --- a/site/lib/data/version.ts +++ b/site/lib/data/version.ts @@ -7,5 +7,5 @@ export function readCliVersion(pkg: URL = CLI_PACKAGE): string { // The skill command has no version: `skills add` installs from the repo, not from npm. export function installCommands(version: string) { - return { skill: 'npx skills add hyamero/stackmap', cli: `npx @hyamero/stackmap@${version} deliver diagram.json` }; + return { skill: 'npx skills add omsimos/stackmap', cli: `npx @omsimos/stackmap@${version} deliver diagram.json` }; } diff --git a/site/lib/schema-docs.ts b/site/lib/schema-docs.ts index 65a59fe..ad41856 100644 --- a/site/lib/schema-docs.ts +++ b/site/lib/schema-docs.ts @@ -68,7 +68,7 @@ export const SAMPLES: Record = { { file: 'services/api/src/db.ts', line: 8 }, ], }, - source: { file: 'source', place: 'source', value: { url: 'https://github.com/hyamero/stackmap/blob/a2111f0590892de04f16c2d2f11ad877a502d89b' } }, + source: { file: 'source', place: 'source', value: { url: 'https://github.com/omsimos/stackmap/blob/a2111f0590892de04f16c2d2f11ad877a502d89b' } }, edges: { file: 'edges', place: 'array', @@ -127,5 +127,5 @@ export function diagramOutline(version: string, draft: object): string { const d = draft as Record; const keys = ['kind', 'title', 'subtitle', 'direction'].filter((k) => d[k] !== undefined).map((k) => ` "${k}": ${JSON.stringify(d[k])}`); const arrays = ['groups', 'lanes', 'phases', 'nodes', 'edges', 'views', 'notes'].flatMap((k) => (Array.isArray(d[k]) && d[k].length ? [` "${k}": [ … ${d[k].length} ]`] : [])); - return ['{', [` "$schema": "https://unpkg.com/@hyamero/stackmap@${version}/dist/stackmap.schema.json"`, ...keys, ...arrays].join(',\n'), '}'].join('\n'); + return ['{', [` "$schema": "https://unpkg.com/@omsimos/stackmap@${version}/dist/stackmap.schema.json"`, ...keys, ...arrays].join(',\n'), '}'].join('\n'); } diff --git a/site/lib/seo.ts b/site/lib/seo.ts index 602f662..55c8de2 100644 --- a/site/lib/seo.ts +++ b/site/lib/seo.ts @@ -7,7 +7,7 @@ type Env = Record; export const SITE_NAME = 'stackmap'; export const DESCRIPTION = 'Interactive system diagrams your coding agent writes, as one offline HTML file.'; -export const REPO = 'https://github.com/hyamero/stackmap'; +export const REPO = 'https://github.com/omsimos/stackmap'; // Next merges metadata shallowly: a page that sets openGraph replaces the layout's, and with it the root's // opengraph-image file, so pages spread this and it names the image (and its alt.txt) again. diff --git a/site/tests/links.test.ts b/site/tests/links.test.ts index e59c9a0..e70c509 100644 --- a/site/tests/links.test.ts +++ b/site/tests/links.test.ts @@ -10,8 +10,8 @@ describe('site links', () => { }); it('points the project links at the public repo and npm', () => { - expect(LINKS.github.href).toBe('https://github.com/hyamero/stackmap'); - expect(LINKS.npm.href).toBe('https://www.npmjs.com/package/@hyamero/stackmap'); - expect(LINKS.contributing.href).toBe('https://github.com/hyamero/stackmap/blob/main/CONTRIBUTING.md'); + expect(LINKS.github.href).toBe('https://github.com/omsimos/stackmap'); + expect(LINKS.npm.href).toBe('https://www.npmjs.com/package/@omsimos/stackmap'); + expect(LINKS.contributing.href).toBe('https://github.com/omsimos/stackmap/blob/main/CONTRIBUTING.md'); }); }); diff --git a/site/tests/no-pins.test.ts b/site/tests/no-pins.test.ts index 1e38205..feed684 100644 --- a/site/tests/no-pins.test.ts +++ b/site/tests/no-pins.test.ts @@ -2,14 +2,14 @@ import { execFileSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import { describe, expect, it } from 'vitest'; -// scripts/set-version.mjs rewrites every `@hyamero/stackmap@x.y.z` in tracked files, but the release commit +// scripts/set-version.mjs rewrites every `@omsimos/stackmap@x.y.z` in tracked files, but the release commit // never includes site/: a pin here would be edited in the release job's tree and left uncommitted. describe('no version pins in site/', () => { - it('has no @hyamero/stackmap@ literal in any tracked or new file', () => { + it('has no @omsimos/stackmap@ literal in any tracked or new file', () => { const repo = fileURLToPath(new URL('../../', import.meta.url)); let hits = ''; try { - hits = execFileSync('git', ['grep', '-nE', '--untracked', '@hyamero/stackmap@[0-9]', '--', 'site'], { cwd: repo, encoding: 'utf8' }); + hits = execFileSync('git', ['grep', '-nE', '--untracked', '@omsimos/stackmap@[0-9]', '--', 'site'], { cwd: repo, encoding: 'utf8' }); } catch { // git grep exits 1 when nothing matches } diff --git a/skill/SKILL.md b/skill/SKILL.md index 74f08a9..655f9f8 100644 --- a/skill/SKILL.md +++ b/skill/SKILL.md @@ -17,9 +17,9 @@ You write a typed diagram JSON. `stackmap` validates it, lays it out (you never Run it as one literal command (each shell call starts fresh, so don't rely on variables set earlier): ```bash -npx -y @hyamero/stackmap@0.2.0 validate --json -npx -y @hyamero/stackmap@0.2.0 deliver --open -npx -y @hyamero/stackmap@0.2.0 serve # optional live preview; see below +npx -y @omsimos/stackmap@0.2.0 validate --json +npx -y @omsimos/stackmap@0.2.0 deliver --open +npx -y @omsimos/stackmap@0.2.0 serve # optional live preview; see below ``` If the environment variable `STACKMAP_BIN` is set, it is the path of a stackmap executable: use `"$STACKMAP_BIN" validate …` (quoted, exactly like that) instead of `npx …`. diff --git a/skill/examples/checkout.sequence.json b/skill/examples/checkout.sequence.json index 4b2e00f..9f44065 100644 --- a/skill/examples/checkout.sequence.json +++ b/skill/examples/checkout.sequence.json @@ -1,5 +1,5 @@ { - "$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": "sequence", "title": "Checkout request", "subtitle": "Card payment with a fraud check", diff --git a/skill/examples/clickstream.dataflow.json b/skill/examples/clickstream.dataflow.json index ee2e4a2..2ac8cc9 100644 --- a/skill/examples/clickstream.dataflow.json +++ b/skill/examples/clickstream.dataflow.json @@ -1,5 +1,5 @@ { - "$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": "dataflow", "title": "Clickstream analytics", "subtitle": "From SDK events to dashboards", diff --git a/skill/examples/job.lifecycle.json b/skill/examples/job.lifecycle.json index 8bb16e3..c38ca14 100644 --- a/skill/examples/job.lifecycle.json +++ b/skill/examples/job.lifecycle.json @@ -1,5 +1,5 @@ { - "$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": "lifecycle", "title": "Export job lifecycle", "subtitle": "States of one export job", diff --git a/skill/examples/release.workflow.json b/skill/examples/release.workflow.json index df937bf..2d67753 100644 --- a/skill/examples/release.workflow.json +++ b/skill/examples/release.workflow.json @@ -1,5 +1,5 @@ { - "$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": "workflow", "title": "Release delivery", "subtitle": "From merge to announced release", diff --git a/skill/examples/web-app.architecture.json b/skill/examples/web-app.architecture.json index cdcbf92..7ed1264 100644 --- a/skill/examples/web-app.architecture.json +++ b/skill/examples/web-app.architecture.json @@ -1,5 +1,5 @@ { - "$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", "subtitle": "Web storefront and order pipeline", diff --git a/skill/references/schema.md b/skill/references/schema.md index 3faad8c..25843f8 100644 --- a/skill/references/schema.md +++ b/skill/references/schema.md @@ -7,7 +7,7 @@ Agent-authored diagram. Layout is computed by stackmap; never give coordinates. | Field | Type | Required | Notes | |---|---|---|---| -| `$schema` | string | no | Optional; set it to `https://unpkg.com/@hyamero/stackmap@0.2.0/dist/stackmap.schema.json` for editor completion | +| `$schema` | string | no | Optional; set it to `https://unpkg.com/@omsimos/stackmap@0.2.0/dist/stackmap.schema.json` for editor completion | | `kind` | enum | yes | one of `architecture`, `dataflow`, `workflow`, `lifecycle`, `sequence` | | `density` | enum | no | Architecture and dataflow: compact cards (title, subtitle, brand, tag) for long chains or summaries. one of `compact` | | `title` | string | yes | non-blank | diff --git a/skill/references/stackmap.schema.json b/skill/references/stackmap.schema.json index 1c2b733..06f3c79 100644 --- a/skill/references/stackmap.schema.json +++ b/skill/references/stackmap.schema.json @@ -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": { @@ -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" }