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
29 changes: 0 additions & 29 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -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.
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
27 changes: 26 additions & 1 deletion THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

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
Loading
Loading