figma-relai 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ FIGMA_COMMANDS,
4
+ PITFALLS,
5
+ createServer,
6
+ listToolCatalog,
7
+ registerAllTools,
8
+ registerEventsTool,
9
+ registerPrompts,
10
+ registerRoomTool
11
+ } from "./chunk-5YB7XMT6.js";
12
+ import "./chunk-2H7UOFLK.js";
13
+
14
+ // src/cli/manifest.ts
15
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
16
+ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
17
+ async function buildManifest(version) {
18
+ const server = createServer();
19
+ registerRoomTool(server, async () => {
20
+ throw new Error("manifest introspection \u2014 no relay");
21
+ });
22
+ registerEventsTool(server, () => [], () => []);
23
+ registerPrompts(server);
24
+ registerAllTools(server, async () => {
25
+ throw new Error("manifest introspection \u2014 no plugin connection");
26
+ });
27
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
28
+ const client = new Client({ name: "relai-manifest", version });
29
+ await Promise.all([client.connect(clientTransport), server.connect(serverTransport)]);
30
+ const categories = new Map(listToolCatalog().map((t) => [t.name, t.category]));
31
+ const tools = (await client.listTools()).tools.map((t) => ({
32
+ name: t.name,
33
+ category: categories.get(t.name) ?? "other",
34
+ description: t.description ?? "",
35
+ inputSchema: t.inputSchema
36
+ })).sort((a, b) => a.category.localeCompare(b.category) || a.name.localeCompare(b.name));
37
+ const prompts = (await client.listPrompts()).prompts.map((p) => ({
38
+ name: p.name,
39
+ description: p.description ?? ""
40
+ }));
41
+ await client.close();
42
+ await server.close();
43
+ return {
44
+ name: "figma-relai",
45
+ version,
46
+ tools,
47
+ prompts,
48
+ pluginCommands: FIGMA_COMMANDS,
49
+ pitfalls: PITFALLS
50
+ };
51
+ }
52
+ export {
53
+ buildManifest
54
+ };
55
+ //# sourceMappingURL=manifest-OUVKP73V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/manifest.ts"],"sourcesContent":["import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { InMemoryTransport } from \"@modelcontextprotocol/sdk/inMemory.js\";\nimport { FIGMA_COMMANDS, PITFALLS } from \"@figma-relai/shared\";\nimport { createServer } from \"../server.js\";\nimport {\n registerAllTools,\n registerRoomTool,\n registerEventsTool,\n listToolCatalog,\n} from \"../tools/index.js\";\nimport { registerPrompts } from \"../prompts.js\";\n\n// The authoritative, machine-readable contract — in the Astryx sense.\n// Nothing here is hand-written: tools and their JSON schemas come from a real\n// in-process MCP handshake (exactly what agents receive from tools/list),\n// categories from the registration table, commands and pitfalls from their\n// runtime registries. It cannot drift from behavior by construction.\n\nexport interface Manifest {\n name: string;\n version: string;\n tools: Array<{\n name: string;\n category: string;\n description: string;\n inputSchema: unknown;\n }>;\n prompts: Array<{ name: string; description: string }>;\n pluginCommands: readonly string[];\n pitfalls: typeof PITFALLS;\n}\n\nexport async function buildManifest(version: string): Promise<Manifest> {\n const server = createServer();\n registerRoomTool(server, async () => {\n throw new Error(\"manifest introspection — no relay\");\n });\n registerEventsTool(server, () => [], () => []);\n registerPrompts(server);\n registerAllTools(server, async () => {\n throw new Error(\"manifest introspection — no plugin connection\");\n });\n\n const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();\n const client = new Client({ name: \"relai-manifest\", version });\n await Promise.all([client.connect(clientTransport), server.connect(serverTransport)]);\n\n const categories = new Map(listToolCatalog().map((t) => [t.name, t.category]));\n const tools = (await client.listTools()).tools\n .map((t) => ({\n name: t.name,\n category: categories.get(t.name) ?? \"other\",\n description: t.description ?? \"\",\n inputSchema: t.inputSchema,\n }))\n .sort((a, b) => a.category.localeCompare(b.category) || a.name.localeCompare(b.name));\n const prompts = (await client.listPrompts()).prompts.map((p) => ({\n name: p.name,\n description: p.description ?? \"\",\n }));\n\n await client.close();\n await server.close();\n\n return {\n name: \"figma-relai\",\n version,\n tools,\n prompts,\n pluginCommands: FIGMA_COMMANDS,\n pitfalls: PITFALLS,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,yBAAyB;AA+BlC,eAAsB,cAAc,SAAoC;AACtE,QAAM,SAAS,aAAa;AAC5B,mBAAiB,QAAQ,YAAY;AACnC,UAAM,IAAI,MAAM,wCAAmC;AAAA,EACrD,CAAC;AACD,qBAAmB,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAC7C,kBAAgB,MAAM;AACtB,mBAAiB,QAAQ,YAAY;AACnC,UAAM,IAAI,MAAM,oDAA+C;AAAA,EACjE,CAAC;AAED,QAAM,CAAC,iBAAiB,eAAe,IAAI,kBAAkB,iBAAiB;AAC9E,QAAM,SAAS,IAAI,OAAO,EAAE,MAAM,kBAAkB,QAAQ,CAAC;AAC7D,QAAM,QAAQ,IAAI,CAAC,OAAO,QAAQ,eAAe,GAAG,OAAO,QAAQ,eAAe,CAAC,CAAC;AAEpF,QAAM,aAAa,IAAI,IAAI,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7E,QAAM,SAAS,MAAM,OAAO,UAAU,GAAG,MACtC,IAAI,CAAC,OAAO;AAAA,IACX,MAAM,EAAE;AAAA,IACR,UAAU,WAAW,IAAI,EAAE,IAAI,KAAK;AAAA,IACpC,aAAa,EAAE,eAAe;AAAA,IAC9B,aAAa,EAAE;AAAA,EACjB,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,cAAc,EAAE,QAAQ,KAAK,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AACtF,QAAM,WAAW,MAAM,OAAO,YAAY,GAAG,QAAQ,IAAI,CAAC,OAAO;AAAA,IAC/D,MAAM,EAAE;AAAA,IACR,aAAa,EAAE,eAAe;AAAA,EAChC,EAAE;AAEF,QAAM,OAAO,MAAM;AACnB,QAAM,OAAO,MAAM;AAEnB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AACF;","names":[]}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "figma-relai",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "figma-relai": "dist/index.js"
8
8
  },
9
9
  "scripts": {
10
- "build": "bun run scripts/inject-pitfalls.ts && tsup",
10
+ "build": "bun run scripts/inject-pitfalls.ts && tsup && node dist/index.js manifest > ../../docs/manifest.json",
11
11
  "dev": "tsup --watch"
12
12
  },
13
13
  "dependencies": {