identityforge
Advanced tools
+41
-1
@@ -0,5 +1,7 @@ | ||
| import { randomUUID } from "node:crypto"; | ||
| import { resolveApiKey, resolveApiUrl } from "./config.js"; | ||
| import { isVersionGreater } from "./updateCheck.js"; | ||
| export const CLI_VERSION = "0.3.11"; | ||
| export const CLI_VERSION = "0.4.0"; | ||
| let apiClient = "cli"; | ||
| const clientProcessReference = randomUUID(); | ||
| /** Select the client identity used by subsequent API requests. */ | ||
@@ -115,2 +117,5 @@ export function setApiClient(client = "cli") { | ||
| }; | ||
| if (process.env.IDENTITYFORGE_TELEMETRY !== "0") { | ||
| headers["X-IdentityForge-Process"] = clientProcessReference; | ||
| } | ||
| const key = resolveApiKey(); | ||
@@ -365,2 +370,37 @@ if (key) | ||
| } | ||
| /** Google Fonts' own five categories, which is what the `fonts` table stores. */ | ||
| export const FONT_CATEGORIES = [ | ||
| "sans-serif", | ||
| "serif", | ||
| "display", | ||
| "monospace", | ||
| "handwriting", | ||
| ]; | ||
| export async function listFonts(opts = {}) { | ||
| const qs = new URLSearchParams(); | ||
| if (opts.search) | ||
| qs.set("search", opts.search); | ||
| if (opts.category) | ||
| qs.set("category", opts.category); | ||
| if (opts.page != null) | ||
| qs.set("page", String(opts.page)); | ||
| if (opts.pageSize != null) | ||
| qs.set("pageSize", String(opts.pageSize)); | ||
| const suffix = qs.toString() ? `?${qs.toString()}` : ""; | ||
| return requestJson(`/api/v1/fonts${suffix}`); | ||
| } | ||
| /** The id is a slug of the family, and the endpoint accepts either spelling. */ | ||
| export async function similarFonts(identifier, limit) { | ||
| const suffix = limit == null ? "" : `?limit=${limit}`; | ||
| return requestJson(`/api/v1/fonts/${encodeURIComponent(identifier)}/similar${suffix}`); | ||
| } | ||
| export async function fontPairings(opts) { | ||
| const qs = new URLSearchParams(); | ||
| if (opts.family) | ||
| qs.set("family", opts.family); | ||
| if (opts.role) | ||
| qs.set("role", opts.role); | ||
| const suffix = qs.toString() ? `?${qs.toString()}` : ""; | ||
| return requestJson(`/api/v1/font-pairings${suffix}`); | ||
| } | ||
| export async function listImageDirections(opts = {}) { | ||
@@ -367,0 +407,0 @@ const qs = new URLSearchParams(); |
+1
-1
| { | ||
| "name": "identityforge", | ||
| "version": "0.3.11", | ||
| "version": "0.4.0", | ||
| "mcpName": "io.identityforge/mcp", | ||
@@ -5,0 +5,0 @@ "description": "Agent-native brand naming, domain research, and design systems through one CLI and MCP server.", |
+23
-6
@@ -43,9 +43,7 @@ <p align="center"> | ||
| The three-minute lifecycle film follows a design system from the first choice | ||
| through later updates, an older-site rebuild, and a client handoff. The Aubade | ||
| storefront, Shiftly rebuild, and Kestrel rebrand are complete one-shot agent | ||
| builds from real Identity Forge design systems. | ||
| through later updates, an older-site rebuild, and a client handoff. | ||
| https://github.com/user-attachments/assets/e139a54f-8b06-4ba0-830f-0a476533d166 | ||
| https://github.com/user-attachments/assets/b5125f58-6918-4355-b849-6863a4345a21 | ||
| [Download the full-resolution 1080p WebM](https://github.com/KasayoDotCom/identityforge-mcp/releases/download/v0.3.10/identity-forge-lifecycle-explainer-v2.webm). | ||
| [Download the full-resolution 1080p WebM](https://github.com/KasayoDotCom/identityforge-mcp/releases/download/v0.3.9/identity-forge-lifecycle-explainer.webm). | ||
@@ -146,3 +144,3 @@ ## For agents | ||
| Once connected, your agent gets 61 tools. Browsing free kits needs no key; scopes are noted where they apply. | ||
| Once connected, your agent gets 63 tools. Browsing free kits needs no key; scopes are noted where they apply. | ||
@@ -156,2 +154,9 @@ ### Find a design kit | ||
| ### Choose typography outside a kit | ||
| A kit already names its heading, body, and mono faces. These two answer the cases where it does not. | ||
| - `search_fonts`: browse the Google Fonts catalog by name or category, or pass `like` with a family you already have to find faces that resemble it. Metadata only, and `like` reads no letterform, so confirm the look before promising it. | ||
| - `suggest_font_pairings`: the curated heading/body/mono table, or what goes beside one family the user is committed to. | ||
| ### Read and apply one | ||
@@ -167,2 +172,9 @@ | ||
| Identity Forge requests carry one random reference that lasts only for the | ||
| current CLI or MCP process. A successful local apply also sends one bodyless | ||
| completion signal. Neither includes paths, prompts, file contents, repository | ||
| names, or a persistent installation identifier. Set | ||
| `IDENTITYFORGE_TELEMETRY=0` to omit both the process reference and local apply | ||
| signal; ordinary API requests still appear in server access logs. | ||
| | File | What it is | | ||
@@ -383,2 +395,7 @@ | --- | --- | | ||
| # Typography, for the cases a kit does not already settle | ||
| identityforge fonts search grotesk --category sans-serif # Google Fonts metadata, no files | ||
| identityforge fonts similar Inter # faces that resemble one you have | ||
| identityforge fonts pairings Fraunces --role heading # curated table + contrast suggestions | ||
| # Has this kit moved since I built against it? (read-only) | ||
@@ -385,0 +402,0 @@ identityforge themes versions <id|slug> # version timeline, newest first |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
352471
3.38%5919
3.24%549
3.2%18
5.88%