io.github.CloudCorpRecords/apisurface

السجل الرسمي أخرى

Public API surface diff between two versions: removed exports, signature changes, breaking list.

ماذا يمكنك أن تفعل مع io.github.CloudCorpRecords/apisurface؟

  • diff_api_surface — Diff the public API surface between

التثبيت

أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: ‏.cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).

NPM package @reneturcios/apisurface
Claude Code
claude mcp add apisurface -- npx -y @reneturcios/apisurface@0.1.0 mcp
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "apisurface": {
            "command": "npx",
            "args": [
                "-y",
                "@reneturcios/apisurface@0.1.0",
                "mcp"
            ]
        }
    }
}
OCI package ghcr.io/cloudcorprecords/apisurface:0.1.0
Claude Code
claude mcp add apisurface -- docker run -i --rm ghcr.io/cloudcorprecords/apisurface:0.1.0 mcp
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "apisurface": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/cloudcorprecords/apisurface:0.1.0",
                "mcp"
            ]
        }
    }
}

التوثيق

مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.

المحتويات
  1. apisurface
  2. CLI
  3. MCP server
  4. Docker
  5. Development
  6. License

apisurface

You are about to release version two of a library. Will it break anyone who upgrades? apisurface answers that from two plain descriptions of the public surface — the exports each version exposes — without reading any source code:

  • Removed exports — present before, gone after. Breaking.
  • Added exports — new in the later version. Non-breaking.
  • Kind changes — an export that was a function and is now a class, or any other switch among function, class, interface, type, const, and enum. Breaking, with the detail recorded as before kind -> after kind.
  • Signature changes — when both versions carry a signature for the same export and the text differs. Breaking, with both signatures in the detail. A signature present on only one side is not, on its own, a change.
  • Member changes — for exports that list members (classes, interfaces, enums): names that disappeared are one breaking entry, in the order they appeared before; names that appeared are one non-breaking entry, in the order they appear after. An export with no members list counts as having no members.
  • Deprecation flips — an export that became deprecated, or one that stopped being deprecated. Both are non-breaking entries.

A single export can contribute several entries — a widget that changed kind, lost a member, and was deprecated all at once produces three. Every entry names the export, reports its kind (the later kind when the export still exists), says what changed and whether it breaks, and carries a detail string where the change defines one.

The result splits entries into a breaking list and a non_breaking list, each sorted by export name and then by change, plus a summary: how many exports each surface had, how many entries landed in each list, and a verdict — breaking when the breaking list is non-empty, clean otherwise. The computation is pure and local: no network, no configuration, no files beyond the input you pass in. Malformed input — a surface without its exports list, an export with no name, a kind outside the allowed set, a duplicated export name inside one surface — is rejected with an error naming the side and the exact path, and no partial diff is produced.

CLI

npx @reneturcios/apisurface diff --input args.json
npx @reneturcios/apisurface --version

args.json contains the full arguments object:

{
  "before": {
    "exports": [
      { "name": "parse", "kind": "function", "signature": "(text: string) => Ast" },
      { "name": "Widget", "kind": "class", "members": ["render", "mount"] }
    ]
  },
  "after": {
    "exports": [
      { "name": "parse", "kind": "function", "signature": "(text: string, opts: Opts) => Ast" },
      { "name": "Widget", "kind": "class", "members": ["render"] },
      { "name": "format", "kind": "function" }
    ]
  }
}

signature, members, and deprecated are optional per export. The diff is printed as JSON.

Exit codes: 0 on success, 1 on a runtime error (including an unreadable or invalid input file, or invalid input), 2 on a usage error.

MCP server

npx -y @reneturcios/apisurface mcp

MCP client config:

{
  "mcpServers": {
    "apisurface": {
      "command": "npx",
      "args": ["-y", "@reneturcios/apisurface", "mcp"]
    }
  }
}
Tools
  • diff_api_surface — Diff the public API surface between two versions.

    • before (surface object, required) — the earlier version, as {exports} where each export is {name, kind, signature?, members?, deprecated?}
    • after (surface object, required) — the later version, in the same shape

    Returns {breaking, non_breaking, summary}.

Docker

docker run -i ghcr.io/cloudcorprecords/apisurface
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/apisurface diff --input /w/args.json

Development

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

الأسئلة الشائعة

ما هو io.github.CloudCorpRecords/apisurface؟

Public API surface diff between two versions: removed exports, signature changes, breaking list.

كيف أثبّت io.github.CloudCorpRecords/apisurface؟

يعمل على جهازك. في Claude Code: claude mcp add apisurface -- npx -y @reneturcios/apisurface@0.1.0 mcp. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.

هل يحتاج io.github.CloudCorpRecords/apisurface إلى مفتاح API؟

لا يذكر إدراجه في السجل أي مفتاح أو سر إلزامي. قد تتطلب بعض الميزات حسابًا لدى الخدمة التي يتصل بها.

هل io.github.CloudCorpRecords/apisurface مفتوح المصدر؟

نعم. شيفرته متاحة على GitHub بترخيص MIT.

من يصون io.github.CloudCorpRecords/apisurface؟

ينشره CloudCorpRecords. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.

من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.