@layoutdesign/context 0.6.0 → 0.10.1

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.
Files changed (63) hide show
  1. package/README.md +71 -0
  2. package/dist/bin/cli.js +8 -0
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/src/cli/install.d.ts +1 -0
  5. package/dist/src/cli/install.d.ts.map +1 -1
  6. package/dist/src/cli/install.js +25 -0
  7. package/dist/src/cli/install.js.map +1 -1
  8. package/dist/src/cli/live-notify.d.ts +2 -0
  9. package/dist/src/cli/live-notify.d.ts.map +1 -0
  10. package/dist/src/cli/live-notify.js +29 -0
  11. package/dist/src/cli/live-notify.js.map +1 -0
  12. package/dist/src/install/live.d.ts +5 -0
  13. package/dist/src/install/live.d.ts.map +1 -0
  14. package/dist/src/install/live.js +285 -0
  15. package/dist/src/install/live.js.map +1 -0
  16. package/dist/src/mcp/live-lock-store.d.ts +40 -0
  17. package/dist/src/mcp/live-lock-store.d.ts.map +1 -0
  18. package/dist/src/mcp/live-lock-store.js +134 -0
  19. package/dist/src/mcp/live-lock-store.js.map +1 -0
  20. package/dist/src/mcp/server.d.ts.map +1 -1
  21. package/dist/src/mcp/server.js +11 -0
  22. package/dist/src/mcp/server.js.map +1 -1
  23. package/dist/src/mcp/tools/_live-socket.d.ts +23 -0
  24. package/dist/src/mcp/tools/_live-socket.d.ts.map +1 -0
  25. package/dist/src/mcp/tools/_live-socket.js +135 -0
  26. package/dist/src/mcp/tools/_live-socket.js.map +1 -0
  27. package/dist/src/mcp/tools/check-setup.d.ts +14 -1
  28. package/dist/src/mcp/tools/check-setup.d.ts.map +1 -1
  29. package/dist/src/mcp/tools/check-setup.js +75 -1
  30. package/dist/src/mcp/tools/check-setup.js.map +1 -1
  31. package/dist/src/mcp/tools/get-recent-visual-edits.d.ts +40 -0
  32. package/dist/src/mcp/tools/get-recent-visual-edits.d.ts.map +1 -0
  33. package/dist/src/mcp/tools/get-recent-visual-edits.js +106 -0
  34. package/dist/src/mcp/tools/get-recent-visual-edits.js.map +1 -0
  35. package/dist/src/mcp/tools/get-selected-element.d.ts +10 -0
  36. package/dist/src/mcp/tools/get-selected-element.d.ts.map +1 -0
  37. package/dist/src/mcp/tools/get-selected-element.js +46 -0
  38. package/dist/src/mcp/tools/get-selected-element.js.map +1 -0
  39. package/dist/src/mcp/tools/lock-file.d.ts +28 -0
  40. package/dist/src/mcp/tools/lock-file.d.ts.map +1 -0
  41. package/dist/src/mcp/tools/lock-file.js +42 -0
  42. package/dist/src/mcp/tools/lock-file.js.map +1 -0
  43. package/dist/src/mcp/tools/unlock-file.d.ts +23 -0
  44. package/dist/src/mcp/tools/unlock-file.d.ts.map +1 -0
  45. package/dist/src/mcp/tools/unlock-file.js +23 -0
  46. package/dist/src/mcp/tools/unlock-file.js.map +1 -0
  47. package/dist/src/plugins/next/babel-loader.d.ts +8 -0
  48. package/dist/src/plugins/next/babel-loader.d.ts.map +1 -0
  49. package/dist/src/plugins/next/babel-loader.js +26 -0
  50. package/dist/src/plugins/next/babel-loader.js.map +1 -0
  51. package/dist/src/plugins/next/index.d.ts +23 -0
  52. package/dist/src/plugins/next/index.d.ts.map +1 -0
  53. package/dist/src/plugins/next/index.js +58 -0
  54. package/dist/src/plugins/next/index.js.map +1 -0
  55. package/dist/src/plugins/transform.d.ts +19 -0
  56. package/dist/src/plugins/transform.d.ts.map +1 -0
  57. package/dist/src/plugins/transform.js +177 -0
  58. package/dist/src/plugins/transform.js.map +1 -0
  59. package/dist/src/plugins/vite/index.d.ts +24 -0
  60. package/dist/src/plugins/vite/index.d.ts.map +1 -0
  61. package/dist/src/plugins/vite/index.js +56 -0
  62. package/dist/src/plugins/vite/index.js.map +1 -0
  63. package/package.json +31 -9
@@ -0,0 +1,134 @@
1
+ /**
2
+ * File-based write-lock coordination between Claude Code (via the MCP tools)
3
+ * and the layout Live desktop app.
4
+ *
5
+ * Locks live in `.layout/live/locks.json` at the project root (gitignored by
6
+ * default). Both Live and these MCP handlers mutate that file, so every
7
+ * read-modify-write is wrapped in a `proper-lockfile` advisory lock for
8
+ * atomicity. Stale locks (past `expires_at`) are taken over automatically with
9
+ * a warning logged to stderr.
10
+ *
11
+ * The file-based design means Claude's `lock-file` MCP call does not have to
12
+ * wait on IPC to a desktop app — it works even when Live's socket is slow or
13
+ * Live isn't running at all.
14
+ */
15
+ import { promises as fs } from "node:fs";
16
+ import path from "node:path";
17
+ import crypto from "node:crypto";
18
+ import lockfile from "proper-lockfile";
19
+ const LIVE_DIR = path.join(".layout", "live");
20
+ const LOCKS_FILE = "locks.json";
21
+ function locksPath(projectRoot) {
22
+ return path.join(projectRoot, LIVE_DIR, LOCKS_FILE);
23
+ }
24
+ async function ensureLocksFile(projectRoot) {
25
+ const file = locksPath(projectRoot);
26
+ await fs.mkdir(path.dirname(file), { recursive: true });
27
+ try {
28
+ await fs.access(file);
29
+ }
30
+ catch {
31
+ await fs.writeFile(file, "{}\n", "utf8");
32
+ }
33
+ return file;
34
+ }
35
+ async function readLocksFile(file) {
36
+ try {
37
+ const raw = await fs.readFile(file, "utf8");
38
+ const parsed = JSON.parse(raw || "{}");
39
+ return parsed && typeof parsed === "object" ? parsed : {};
40
+ }
41
+ catch {
42
+ return {};
43
+ }
44
+ }
45
+ async function writeLocksFile(file, locks) {
46
+ await fs.writeFile(file, JSON.stringify(locks, null, 2) + "\n", "utf8");
47
+ }
48
+ /**
49
+ * Run `fn` against the locks file while holding an exclusive advisory lock on
50
+ * it, so concurrent Live + MCP writers never interleave a read-modify-write.
51
+ */
52
+ async function withLocksFile(projectRoot, fn) {
53
+ const file = await ensureLocksFile(projectRoot);
54
+ const release = await lockfile.lock(file, {
55
+ retries: { retries: 10, factor: 1.5, minTimeout: 20, maxTimeout: 200 },
56
+ stale: 10_000,
57
+ realpath: false,
58
+ });
59
+ try {
60
+ const current = await readLocksFile(file);
61
+ const { result, locks } = await fn(current);
62
+ await writeLocksFile(file, locks);
63
+ return result;
64
+ }
65
+ finally {
66
+ await release();
67
+ }
68
+ }
69
+ function isExpired(entry, now) {
70
+ const expiry = Date.parse(entry.expires_at);
71
+ return Number.isNaN(expiry) || expiry <= now;
72
+ }
73
+ /**
74
+ * Acquire (or take over an expired) write lock for `relPath`.
75
+ *
76
+ * Returns `{ acquired: false, current_holder, expires_at }` when a live,
77
+ * unexpired lock is already held by someone else.
78
+ */
79
+ export async function acquireLock(projectRoot, opts) {
80
+ const holder = opts.holder ?? "claude";
81
+ return withLocksFile(projectRoot, (locks) => {
82
+ const now = Date.now();
83
+ const existing = locks[opts.path];
84
+ if (existing && !isExpired(existing, now)) {
85
+ return {
86
+ result: {
87
+ acquired: false,
88
+ current_holder: existing.holder,
89
+ expires_at: existing.expires_at,
90
+ },
91
+ locks,
92
+ };
93
+ }
94
+ if (existing && isExpired(existing, now)) {
95
+ console.warn(`[layout-context] Taking over stale lock on "${opts.path}" ` +
96
+ `(was held by "${existing.holder}", expired ${existing.expires_at})`);
97
+ }
98
+ const lockId = crypto.randomUUID();
99
+ const acquiredAt = new Date(now).toISOString();
100
+ const expiresAt = new Date(now + opts.ttlSeconds * 1000).toISOString();
101
+ const entry = {
102
+ holder,
103
+ lock_id: lockId,
104
+ acquired_at: acquiredAt,
105
+ expires_at: expiresAt,
106
+ ...(opts.reason ? { reason: opts.reason } : {}),
107
+ };
108
+ return {
109
+ result: { acquired: true, lock_id: lockId, expires_at: expiresAt },
110
+ locks: { ...locks, [opts.path]: entry },
111
+ };
112
+ });
113
+ }
114
+ /**
115
+ * Release a lock by its `lock_id`. Only the matching entry is removed, so a
116
+ * stale `lock_id` from a since-taken-over lock cannot evict the new holder.
117
+ */
118
+ export async function releaseLock(projectRoot, lockId) {
119
+ return withLocksFile(projectRoot, (locks) => {
120
+ const entry = Object.entries(locks).find(([, v]) => v.lock_id === lockId);
121
+ if (!entry) {
122
+ return { result: { released: false }, locks };
123
+ }
124
+ const next = { ...locks };
125
+ delete next[entry[0]];
126
+ return { result: { released: true }, locks: next };
127
+ });
128
+ }
129
+ /** Read the current locks map (best-effort; empty if file absent/corrupt). */
130
+ export async function readLocks(projectRoot) {
131
+ const file = locksPath(projectRoot);
132
+ return readLocksFile(file);
133
+ }
134
+ //# sourceMappingURL=live-lock-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-lock-store.js","sourceRoot":"","sources":["../../../src/mcp/live-lock-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoMjD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAoCA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkOjD"}
@@ -24,6 +24,11 @@ import * as getScreenshots from "./tools/get-screenshots.js";
24
24
  import * as checkSetup from "./tools/check-setup.js";
25
25
  import * as pushTokensToFigma from "./tools/push-tokens-to-figma.js";
26
26
  import * as scanProject from "./tools/scan-project.js";
27
+ // Live integration tools (v0.7.0) — query the layout Live desktop app
28
+ import * as getSelectedElement from "./tools/get-selected-element.js";
29
+ import * as getRecentVisualEdits from "./tools/get-recent-visual-edits.js";
30
+ import * as lockFile from "./tools/lock-file.js";
31
+ import * as unlockFile from "./tools/unlock-file.js";
27
32
  /**
28
33
  * Start the Layout Context MCP server.
29
34
  * Loads the kit from the current working directory and registers all tools.
@@ -131,6 +136,12 @@ export async function startServer() {
131
136
  server.tool(checkSetup.name, checkSetup.description, checkSetup.inputSchema, checkSetup.handler());
132
137
  server.tool(pushTokensToFigma.name, pushTokensToFigma.description, pushTokensToFigma.inputSchema, pushTokensToFigma.handler(kit));
133
138
  server.tool(scanProject.name, scanProject.description, scanProject.inputSchema, scanProject.handler());
139
+ // Live integration tools (v0.7.0). Registered unconditionally — they return
140
+ // cleanly-typed "Live not running" responses when the desktop app is absent.
141
+ server.tool(getSelectedElement.name, getSelectedElement.description, getSelectedElement.inputSchema, getSelectedElement.handler());
142
+ server.tool(getRecentVisualEdits.name, getRecentVisualEdits.description, getRecentVisualEdits.inputSchema, getRecentVisualEdits.handler());
143
+ server.tool(lockFile.name, lockFile.description, lockFile.inputSchema, lockFile.handler());
144
+ server.tool(unlockFile.name, unlockFile.description, unlockFile.inputSchema, unlockFile.handler());
134
145
  // Connect via stdio
135
146
  const transport = new StdioServerTransport();
136
147
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface LiveRequest {
2
+ method: string;
3
+ params?: Record<string, unknown>;
4
+ }
5
+ export interface LiveConnection {
6
+ /** Send a single request and await its matching response result. */
7
+ send<T = unknown>(req: LiveRequest): Promise<T>;
8
+ /** Close the underlying socket. */
9
+ close(): void;
10
+ }
11
+ /** Stable per-project id: first 16 hex chars of sha256(projectRoot). */
12
+ export declare function computeProjectId(projectRoot: string): string;
13
+ /** Absolute path (or Windows pipe name) of the Live socket for a project. */
14
+ export declare function liveSocketPath(projectRoot: string): string;
15
+ /**
16
+ * Connect to the running Live app for `projectRoot` (defaults to cwd).
17
+ *
18
+ * Returns `null` — never throws — when Live is not running. "Not running" is
19
+ * any of: socket file absent (ENOENT), stale socket (ECONNREFUSED), or the
20
+ * connection not completing within {@link CONNECT_TIMEOUT_MS}.
21
+ */
22
+ export declare function connectToLive(projectRoot?: string): Promise<LiveConnection | null>;
23
+ //# sourceMappingURL=_live-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_live-socket.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/_live-socket.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK1D;AAKD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmChC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Shared Unix-socket client for talking to a running layout Live desktop app.
3
+ *
4
+ * Live hosts a line-delimited JSON socket at `~/.layout/live-<projectId>.sock`
5
+ * (or `\\.\pipe\layout-live-<projectId>` on Windows) while it is open on a
6
+ * project. The MCP tool handlers in this directory connect to it on demand to
7
+ * query selection / edit / status state.
8
+ *
9
+ * If Live is not running the socket file is absent: `connectToLive()` resolves
10
+ * to `null` (callers treat this as "Live not running") rather than throwing.
11
+ */
12
+ import net from "node:net";
13
+ import path from "node:path";
14
+ import os from "node:os";
15
+ import crypto from "node:crypto";
16
+ /** Stable per-project id: first 16 hex chars of sha256(projectRoot). */
17
+ export function computeProjectId(projectRoot) {
18
+ return crypto
19
+ .createHash("sha256")
20
+ .update(path.resolve(projectRoot))
21
+ .digest("hex")
22
+ .slice(0, 16);
23
+ }
24
+ /** Absolute path (or Windows pipe name) of the Live socket for a project. */
25
+ export function liveSocketPath(projectRoot) {
26
+ const id = computeProjectId(projectRoot);
27
+ return process.platform === "win32"
28
+ ? `\\\\.\\pipe\\layout-live-${id}`
29
+ : path.join(os.homedir(), ".layout", `live-${id}.sock`);
30
+ }
31
+ const CONNECT_TIMEOUT_MS = 1500;
32
+ const REQUEST_TIMEOUT_MS = 3000;
33
+ /**
34
+ * Connect to the running Live app for `projectRoot` (defaults to cwd).
35
+ *
36
+ * Returns `null` — never throws — when Live is not running. "Not running" is
37
+ * any of: socket file absent (ENOENT), stale socket (ECONNREFUSED), or the
38
+ * connection not completing within {@link CONNECT_TIMEOUT_MS}.
39
+ */
40
+ export async function connectToLive(projectRoot) {
41
+ const socketPath = liveSocketPath(projectRoot ?? process.cwd());
42
+ return new Promise((resolve) => {
43
+ let settled = false;
44
+ const socket = net.createConnection(socketPath);
45
+ const fail = (err) => {
46
+ if (settled)
47
+ return;
48
+ settled = true;
49
+ socket.destroy();
50
+ // ENOENT (no socket file) and ECONNREFUSED (stale socket) both mean
51
+ // "Live not running". Anything else is also treated as not-running so a
52
+ // tool call never hard-fails on a transport hiccup.
53
+ void err;
54
+ resolve(null);
55
+ };
56
+ const timer = setTimeout(() => fail({ code: "ETIMEDOUT" }), CONNECT_TIMEOUT_MS);
57
+ socket.once("error", (err) => {
58
+ clearTimeout(timer);
59
+ fail(err);
60
+ });
61
+ socket.once("connect", () => {
62
+ clearTimeout(timer);
63
+ if (settled) {
64
+ socket.destroy();
65
+ return;
66
+ }
67
+ settled = true;
68
+ resolve(wrapSocket(socket));
69
+ });
70
+ });
71
+ }
72
+ /** Wrap a connected socket in the line-delimited JSON request/response API. */
73
+ function wrapSocket(socket) {
74
+ let buffer = "";
75
+ const pending = new Map();
76
+ socket.setEncoding("utf8");
77
+ socket.on("data", (chunk) => {
78
+ buffer += chunk;
79
+ let nl;
80
+ while ((nl = buffer.indexOf("\n")) !== -1) {
81
+ const line = buffer.slice(0, nl).trim();
82
+ buffer = buffer.slice(nl + 1);
83
+ if (!line)
84
+ continue;
85
+ let msg;
86
+ try {
87
+ msg = JSON.parse(line);
88
+ }
89
+ catch {
90
+ continue;
91
+ }
92
+ if (!msg.id)
93
+ continue;
94
+ const waiter = pending.get(msg.id);
95
+ if (!waiter)
96
+ continue;
97
+ pending.delete(msg.id);
98
+ clearTimeout(waiter.timer);
99
+ if (msg.ok)
100
+ waiter.resolve(msg.result);
101
+ else
102
+ waiter.reject(new Error(msg.error ?? "Live request failed"));
103
+ }
104
+ });
105
+ const rejectAll = (err) => {
106
+ for (const { reject, timer } of pending.values()) {
107
+ clearTimeout(timer);
108
+ reject(err);
109
+ }
110
+ pending.clear();
111
+ };
112
+ socket.on("error", (err) => rejectAll(err));
113
+ socket.on("close", () => rejectAll(new Error("Live socket closed")));
114
+ return {
115
+ send(req) {
116
+ const id = crypto.randomUUID();
117
+ return new Promise((resolve, reject) => {
118
+ const timer = setTimeout(() => {
119
+ pending.delete(id);
120
+ reject(new Error("Live request timed out"));
121
+ }, REQUEST_TIMEOUT_MS);
122
+ pending.set(id, {
123
+ resolve: resolve,
124
+ reject,
125
+ timer,
126
+ });
127
+ socket.write(JSON.stringify({ id, ...req }) + "\n");
128
+ });
129
+ },
130
+ close() {
131
+ socket.destroy();
132
+ },
133
+ };
134
+ }
135
+ //# sourceMappingURL=_live-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_live-socket.js","sourceRoot":"","sources":["../../../../src/mcp/tools/_live-socket.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,16 @@
1
1
  import { z } from "zod";
2
+ /** Structured status of the layout Live desktop app for `check-setup`. */
3
+ export interface LiveStatus {
4
+ installed: boolean;
5
+ running: boolean;
6
+ version?: string;
7
+ project?: string;
8
+ }
9
+ /**
10
+ * Additive `check-setup` field (v0.7.0). Queries the Live socket for running
11
+ * status; never throws — Live being absent is the common, non-error case.
12
+ */
13
+ export declare function getLiveStatus(): Promise<LiveStatus>;
2
14
  export declare const name = "check-setup";
3
15
  export declare const description: string;
4
16
  export declare const inputSchema: {
@@ -6,12 +18,13 @@ export declare const inputSchema: {
6
18
  figma: "figma";
7
19
  playwright: "playwright";
8
20
  layout: "layout";
21
+ live: "live";
9
22
  all: "all";
10
23
  }>>;
11
24
  fix: z.ZodOptional<z.ZodBoolean>;
12
25
  };
13
26
  type Input = {
14
- focus?: "all" | "figma" | "playwright" | "layout";
27
+ focus?: "all" | "figma" | "playwright" | "layout" | "live";
15
28
  fix?: boolean;
16
29
  };
17
30
  export declare function handler(): (input: Input) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"check-setup.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,WAAW,QAKoD,CAAC;AAE7E,eAAO,MAAM,WAAW;;;;;;;;CAWvB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;IAClD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,OAAO,KACP,OAAO,KAAK;;;;;GAwC3B"}
1
+ {"version":3,"file":"check-setup.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAuBzD;AAyBD,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,WAAW,QAKoD,CAAC;AAE7E,eAAO,MAAM,WAAW;;;;;;;;;CAWvB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3D,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,OAAO,KACP,OAAO,KAAK;;;;;GA6C3B"}
@@ -1,5 +1,75 @@
1
1
  import { z } from "zod";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import os from "node:os";
5
+ import { execFileSync } from "node:child_process";
2
6
  import { checkMcpRegistration, addFigmaMcpServer, addPlaywrightMcpServer, testEndpointReachable, } from "../../cli/setup-utils.js";
7
+ import { connectToLive } from "./_live-socket.js";
8
+ /** Best-effort detection of a locally installed `layout-live` binary/app. */
9
+ function isLiveInstalled() {
10
+ const candidates = [
11
+ "/Applications/Layout Live.app",
12
+ "/Applications/layout-live.app",
13
+ join(os.homedir(), "Applications", "Layout Live.app"),
14
+ ];
15
+ if (candidates.some((p) => existsSync(p)))
16
+ return true;
17
+ try {
18
+ const cmd = process.platform === "win32" ? "where" : "which";
19
+ execFileSync(cmd, ["layout-live"], { stdio: "ignore" });
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ /**
27
+ * Additive `check-setup` field (v0.7.0). Queries the Live socket for running
28
+ * status; never throws — Live being absent is the common, non-error case.
29
+ */
30
+ export async function getLiveStatus() {
31
+ const installed = isLiveInstalled();
32
+ const live = await connectToLive();
33
+ if (!live) {
34
+ return { installed, running: false };
35
+ }
36
+ try {
37
+ const status = await live.send({ method: "check-status" });
38
+ return {
39
+ installed: true,
40
+ running: status?.running !== false,
41
+ version: status?.version,
42
+ project: status?.project,
43
+ };
44
+ }
45
+ catch {
46
+ return { installed, running: false };
47
+ }
48
+ finally {
49
+ live.close();
50
+ }
51
+ }
52
+ function renderLive(live) {
53
+ const icon = live.running ? "✅" : live.installed ? "⚠️" : "❌";
54
+ const lines = [`### layout Live ${icon}\n`];
55
+ if (live.running) {
56
+ lines.push(`- Status: running${live.version ? ` (v${live.version})` : ""}\n`);
57
+ if (live.project)
58
+ lines.push(`- Project: ${live.project}\n`);
59
+ }
60
+ else if (live.installed) {
61
+ lines.push("- Status: installed but not running\n");
62
+ lines.push("- Open the layout Live app to enable visual-edit context\n");
63
+ }
64
+ else {
65
+ lines.push("- Status: not installed (optional)\n");
66
+ lines.push("- layout Live adds visual-edit context. Tools still work without it.\n");
67
+ }
68
+ lines.push("```json");
69
+ lines.push(JSON.stringify({ live }, null, 2));
70
+ lines.push("```\n");
71
+ return lines.join("\n");
72
+ }
3
73
  export const name = "check-setup";
4
74
  export const description = "Diagnose and optionally fix MCP server setup issues. " +
5
75
  "Call this when Figma tools (push-to-figma, design-in-figma, url-to-figma) aren't working, " +
@@ -8,7 +78,7 @@ export const description = "Diagnose and optionally fix MCP server setup issues.
8
78
  "With fix=true, attempts to re-register missing or misconfigured servers.";
9
79
  export const inputSchema = {
10
80
  focus: z
11
- .enum(["all", "figma", "playwright", "layout"])
81
+ .enum(["all", "figma", "playwright", "layout", "live"])
12
82
  .optional()
13
83
  .describe("What to check. Default: 'all'"),
14
84
  fix: z
@@ -43,6 +113,10 @@ export function handler() {
43
113
  if (focus === "all" || focus === "layout") {
44
114
  sections.push(checkLayout(state));
45
115
  }
116
+ // --- layout Live (additive, v0.7.0) ---
117
+ if (focus === "all" || focus === "live") {
118
+ sections.push(renderLive(await getLiveStatus()));
119
+ }
46
120
  // --- Next Steps ---
47
121
  sections.push(buildNextSteps(state, shouldFix));
48
122
  return { content: [{ type: "text", text: sections.join("\n") }] };
@@ -1 +1 @@
1
- {"version":3,"file":"check-setup.js","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GACtB,uDAAuD;IACvD,4FAA4F;IAC5F,8EAA8E;IAC9E,gFAAgF;IAChF,0EAA0E,CAAC;AAE7E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,+EAA+E,CAChF;CACJ,CAAC;AAOF,MAAM,UAAU,OAAO;IACrB,OAAO,KAAK,EAAE,KAAY,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QAErC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEzC,yBAAyB;QACzB,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CACX,oBAAoB;gBAClB,qCAAqC;gBACrC,wDAAwD;gBACxD,6DAA6D,CAChE,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,qBAAqB;QACrB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAA2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,4BAA4B;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CACT,sIAAsI;gBACpI,2GAA2G,CAC9G,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CACT,kCAAkC,KAAK,EAAE,SAAS,IAAI,SAAS,wDAAwD,CACxH,CAAC;QACJ,CAAC;QAED,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CACT,wCAAwC,KAAK,EAAE,KAAK,IAAI,SAAS,yEAAyE,CAC3I,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACT,6FAA6F;gBAC3F,wEAAwE;gBACxE,oEAAoE,CACvE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CACR,mBAAmB;gBACjB,yBAAyB,KAAK,EAAE,KAAK,IAAI,MAAM,WAAW,KAAK,EAAE,SAAS,IAAI,MAAM,eAAe;gBACnG,qFAAqF;gBACrF,kFAAkF,CACrF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GACR,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,yBAAyB,KAAK,EAAE,KAAK,IAAI,SAAS,WAAW,KAAK,EAAE,SAAS,IAAI,SAAS,eAAe,CAC1G,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,cAAc;YACd,IACE,SAAS;gBACT,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAC3D,CAAC;gBACD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACrE,KAAK,CAAC,IAAI,CACR,qHAAqH,CACtH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CACR,gEAAgE,CACjE,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CACR,oGAAoG,CACrG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,oGAAoG;gBAClG,8CAA8C,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IAC9E,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,iCAAiC,YAAY,CAAC,KAAK,IAAI;YACrD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CACtB,KAA2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,wBAAwB,GAAG,wBAAwB,CACpD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAE5D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,qHAAqH,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAClB,KAA2D;IAE3D,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAoB;YACpB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,sDAAsD;IACtD,OAAO,CACL,oBAAoB;QACpB,wDAAwD;QACxD,yGAAyG,CAC1G,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAA2D,EAC3D,UAAmB;IAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,sDAAsD;YACpD,yDAAyD;YACzD,mCAAmC,CACtC,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;QACvB,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB;QAC7B,KAAK,CAAC,KAAK,CAAC,YAAY;QACxB,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,iFAAiF;YAC/E,qEAAqE;YACrE,qEAAqE;YACrE,iGAAiG;YACjG,kEAAkE,CACrE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,8CAA8C;YAC5C,iEAAiE;YACjE,sDAAsD;YACtD,wDAAwD;YACxD,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"check-setup.js","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * MCP tool: get-recent-visual-edits
3
+ *
4
+ * Returns recent class/token/inline-style edits made by the user in layout
5
+ * Live. Reads from Live's socket when running; falls back to the on-disk
6
+ * `.layout/live/recent-edits.json` log when Live is not running.
7
+ */
8
+ import { z } from "zod";
9
+ export declare const name = "get-recent-visual-edits";
10
+ export declare const description: string;
11
+ export declare const inputSchema: {
12
+ limit: z.ZodDefault<z.ZodNumber>;
13
+ since: z.ZodOptional<z.ZodString>;
14
+ file: z.ZodOptional<z.ZodString>;
15
+ };
16
+ type Input = {
17
+ limit?: number;
18
+ since?: string;
19
+ file?: string;
20
+ };
21
+ export interface VisualEdit {
22
+ id: string;
23
+ timestamp: string;
24
+ file: string;
25
+ line: number;
26
+ col: number;
27
+ component?: string;
28
+ property: string;
29
+ kind: "class" | "token" | "inline-style";
30
+ before: string;
31
+ after: string;
32
+ }
33
+ export declare function handler(): (input: Input) => Promise<{
34
+ content: {
35
+ type: "text";
36
+ text: string;
37
+ }[];
38
+ }>;
39
+ export {};
40
+ //# sourceMappingURL=get-recent-visual-edits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-recent-visual-edits.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/get-recent-visual-edits.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,IAAI,4BAA4B,CAAC;AAE9C,eAAO,MAAM,WAAW,QAI6C,CAAC;AAEtE,eAAO,MAAM,WAAW;;;;CAiBvB,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AA8CD,wBAAgB,OAAO,KACP,OAAO,KAAK;;;;;GAwC3B"}